import * as plugins from './plugins.js'; import * as interfaces from '../dist_ts_interfaces/index.js'; import { logger } from './logging.js'; /** * MessageManager implements two ways of serviceworker communication * * the serviceWorker method * * the deesComms method using BroadcastChannel */ export class ActionManager { public deesComms = new plugins.deesComms.DeesComms(); constructor() { // lets define handlers on the client/tab side this.deesComms.createTypedHandler('serviceworker_newVersion', async req => { setTimeout(() => { window.location.reload(); }, 200); return {}; }); } public async waitForServiceWorkerConnection () { console.log('waiting for service worker connection...') const tr = this.deesComms.createTypedRequest('broadcastConnectionPolling'); let connected = false; while (!connected) { tr.fire({ tabId: '123' }).then(response => { if (response.serviceworkerId) { console.log('connected to serviceworker!'); connected = true; } }).catch(); await plugins.smartdelay.delayFor(777); if (!connected) { // lets wake it up. navigator.serviceWorker.controller.postMessage({ type: 'wakeUpCall', }); } } console.log('ok, got serviceworker connection.') } public async purgeServiceWorkerCache () { const tr = this.deesComms.createTypedRequest('purgeServiceWorkerCache'); const response = await tr.fire({}); return response; } public async getVersionInfo () { const tr = this.deesComms.createTypedRequest('serviceworker_versionInfo'); const response = await tr.fire({}); return response; } }