UNPKG

@api.global/typedserver

Version:

A TypeScript-based project for easy serving of static files with support for live reloading, compression, and typed requests.

131 lines 11.8 kB
import * as plugins from './typedserver_web.plugins.js'; import * as interfaces from '../dist_ts_interfaces/index.js'; import { logger } from './typedserver_web.logger.js'; logger.log('info', `TypedServer-Devtools initialized!`); import { TypedserverInfoscreen } from './typedserver_web.infoscreen.js'; export class ReloadChecker { constructor() { this.reloadJustified = false; this.backendConnectionLost = false; this.infoscreen = new TypedserverInfoscreen(); this.store = new plugins.webstore.WebStore({ dbName: 'apiglobal__typedserver', storeName: 'apiglobal__typedserver', }); this.storeKey = 'lastServerChange'; this.typedrouter = new plugins.typedrequest.TypedRouter(); this.started = false; } async reload() { // this looks a bit hacky, but apparently is the safest way to really reload stuff window.location.reload(); } /** * starts the reload checker */ async performHttpRequest() { logger.log('info', 'performing http check...'); (await this.store.get(this.storeKey)) ? null : await this.store.set(this.storeKey, globalThis.typedserver.lastReload); let response; try { const controller = new AbortController(); plugins.smartdelay.delayFor(5000).then(() => { controller.abort(); }); response = await fetch('/typedserver/reloadcheck', { method: 'POST', signal: controller.signal, }); } catch (err) { } if (response?.status !== 200) { this.backendConnectionLost = true; logger.log('warn', `got a status ${response?.status}.`); this.infoscreen.setText(`backend connection lost... Status ${response?.status}`); } if (response?.status === 200 && this.backendConnectionLost) { this.backendConnectionLost = false; this.infoscreen.setSuccess('regained connection to backend...'); } return response; } async checkReload(lastServerChange) { let reloadJustified = false; let storedLastServerChange = await this.store.get(this.storeKey); if (storedLastServerChange && storedLastServerChange !== lastServerChange) { reloadJustified = true; } else { } if (reloadJustified) { this.store.set(this.storeKey, lastServerChange); const reloadText = `upgrading... ${globalThis.globalSw ? '(purging the sw cache first...)' : ''}`; this.infoscreen.setText(reloadText); if (globalThis.globalSw?.purgeCache) { await globalThis.globalSw.purgeCache(); } else { console.log('globalThis.globalSw not found...'); } this.infoscreen.setText(`cleaned caches`); await plugins.smartdelay.delayFor(200); this.reload(); return; } else { if (this.infoscreen) { this.infoscreen.hide(); } return; } } async connectTypedsocket() { if (!this.typedsocket) { this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('pushLatestServerChangeTime', async (dataArg) => { this.checkReload(dataArg.time); return {}; })); this.typedsocket = await plugins.typedsocket.TypedSocket.createClient(this.typedrouter, plugins.typedsocket.TypedSocket.useWindowLocationOriginUrl()); this.typedsocket.addTag('typedserver_frontend', {}); this.typedsocket.eventSubject.subscribe(async (eventArg) => { console.log(`typedsocket event subscription: ${eventArg}`); if (eventArg === 'disconnected' || eventArg === 'disconnecting' || eventArg === 'timedOut') { this.backendConnectionLost = true; this.infoscreen.setText(`typedsocket ${eventArg}!`); } else if (eventArg === 'connected' && this.backendConnectionLost) { this.backendConnectionLost = false; this.infoscreen.setSuccess('typedsocket connected!'); // lets check if a reload is necessary const getLatestServerChangeTime = this.typedsocket.createTypedRequest('getLatestServerChangeTime'); const response = await getLatestServerChangeTime.fire({}); this.checkReload(response.time); } }); logger.log('success', `ReloadChecker connected through typedsocket!`); } } async start() { this.started = true; logger.log('info', `starting ReloadChecker...`); while (this.started) { const response = await this.performHttpRequest(); if (response.status === 200) { logger.log('info', `ReloadChecker reached backend!`); await this.checkReload(parseInt(await response.text())); await this.connectTypedsocket(); } await plugins.smartdelay.delayFor(120000); } } async stop() { this.started = false; } } const reloadCheckInstance = new ReloadChecker(); reloadCheckInstance.start(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c193ZWJfaW5qZWN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxLQUFLLFVBQVUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztBQUV4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV4RSxNQUFNLE9BQU8sYUFBYTtJQWF4QjtRQVpPLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUM5QixlQUFVLEdBQUcsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQ3pDLFVBQUssR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQzNDLE1BQU0sRUFBRSx3QkFBd0I7WUFDaEMsU0FBUyxFQUFFLHdCQUF3QjtTQUNwQyxDQUFDLENBQUM7UUFDSSxhQUFRLEdBQUcsa0JBQWtCLENBQUM7UUFHOUIsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFnSHJELFlBQU8sR0FBRyxLQUFLLENBQUM7SUE5R1IsQ0FBQztJQUVULEtBQUssQ0FBQyxNQUFNO1FBQ2pCLGtGQUFrRjtRQUNsRixNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxrQkFBa0I7UUFDN0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztRQUMvQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFB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