const STASH_RESPONDER = "wss://{{host}}:{{ports[wss][0]}}/stash_responder_blocking"; class StashUtils { /** * Sends a request to store (|key|, |tuple|) in Stash * (https://web-platform-tests.org/tools/wptserve/docs/stash.html). * @param {string} key A UUID that acts as a key that can be used to retrieve |value| later. * @param {string} value Value to be stored in Stash. * @returns {Promise} Promise that resolves once the server responds. */ static putValue(key, value) { return new Promise(resolve => { const ws = new WebSocket(STASH_RESPONDER); ws.onopen = () => { ws.send(JSON.stringify({action: 'set', key: key, value: value})); }; ws.onmessage = e => { ws.close(); resolve(); }; }); } /** * Retrieves value associated with |key| in Stash. If no value has been * associated with |key| yet, the method waits for putValue to be called with * |key|, and a value to be associated, before resolving the return promise. * @param {string} key A UUID that uniquely identifies the value to retrieve. * @returns {Promise} A promise that resolves with the value associated with |key|. */ static takeValue(key) { return new Promise(resolve => { const ws = new WebSocket(STASH_RESPONDER); ws.onopen = () => { ws.send(JSON.stringify({action: 'get', key: key})); }; ws.onmessage = e => { ws.close(); resolve(JSON.parse(e.data).value); }; }); } }