2024-05-11 10:51:20 +00:00
|
|
|
import * as plugins from './lele-serviceworker.plugins.js';
|
2024-05-14 00:18:42 +00:00
|
|
|
import * as interfaces from '../dist_ts_interfaces/index.js';
|
2024-05-11 10:51:20 +00:00
|
|
|
import { logger } from './serviceworker.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
|
2024-05-14 00:18:42 +00:00
|
|
|
this.deesComms.createTypedHandler<interfaces.serviceworker.IMessage_Serviceworker_Client_UpdateInfo>('serviceworker_newVersion', async req => {
|
2024-05-11 10:51:20 +00:00
|
|
|
setTimeout(() => {
|
|
|
|
window.location.reload();
|
|
|
|
}, 200);
|
|
|
|
return {};
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
public async waitForServiceWorkerConnection () {
|
|
|
|
console.log('waiting for service worker connection...')
|
2024-05-14 00:18:42 +00:00
|
|
|
const tr = this.deesComms.createTypedRequest<interfaces.serviceworker.IRequest_Client_Serviceworker_ConnectionPolling>('broadcastConnectionPolling');
|
2024-05-11 10:51:20 +00:00
|
|
|
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 () {
|
2024-05-14 00:18:42 +00:00
|
|
|
const tr = this.deesComms.createTypedRequest<interfaces.serviceworker.IRequest_PurgeServiceWorkerCache>('purgeServiceWorkerCache');
|
2024-05-11 10:51:20 +00:00
|
|
|
const response = await tr.fire({});
|
|
|
|
return response;
|
|
|
|
}
|
|
|
|
|
|
|
|
public async getVersionInfo () {
|
2024-05-14 00:18:42 +00:00
|
|
|
const tr = this.deesComms.createTypedRequest<interfaces.serviceworker.IRequest_Serviceworker_Backend_VersionInfo>('serviceworker_versionInfo');
|
2024-05-11 10:51:20 +00:00
|
|
|
const response = await tr.fire({});
|
|
|
|
return response;
|
|
|
|
}
|
|
|
|
}
|