// Copyright 2015-2020 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only /* global window, postMessage, textsecure, close */ /* eslint-disable more/no-then, no-global-assign, no-restricted-globals, no-unused-vars */ /* * Load this script in a Web Worker to generate new prekeys without * tying up the main thread. * https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API * * Because workers don't have access to the window or localStorage, we * create our own version that proxies back to the caller for actual * storage. * * Example usage: * var myWorker = new Worker('/js/key_worker.js'); myWorker.onmessage = function(e) { switch(e.data.method) { case 'set': localStorage.setItem(e.data.key, e.data.value); break; case 'remove': localStorage.removeItem(e.data.key); break; case 'done': console.error(e.data.keys); } }; */ let store = {}; window.textsecure.storage.impl = { /** *************************** *** Override Storage Routines *** **************************** */ put(key, value) { if (value === undefined) throw new Error('Tried to store undefined'); store[key] = value; postMessage({ method: 'set', key, value }); }, get(key, defaultValue) { if (key in store) { return store[key]; } return defaultValue; }, remove(key) { delete store[key]; postMessage({ method: 'remove', key }); }, }; // eslint-disable-next-line no-undef onmessage = e => { store = e.data; textsecure.protocol_wrapper.generateKeys().then(keys => { postMessage({ method: 'done', keys }); close(); }); };