UNPKG

@api.global/typedserver

Version:

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

108 lines 8.63 kB
import * as interfaces from '../../dist_ts_interfaces/index.js'; import { TypedServer } from '../classes.typedserver.js'; import * as plugins from '../plugins.js'; import * as servertools from '../servertools/index.js'; /** * the utility website server implements a best practice server for websites * It supports: * * live reload * * compression * * serviceworker * * pwa manifest */ export class UtilityWebsiteServer { constructor(optionsArg) { this.typedrouter = new plugins.typedrequest.TypedRouter(); this.options = optionsArg; } /** * */ async start(portArg = 3000) { this.typedserver = new TypedServer({ cors: true, injectReload: true, watch: true, serveDir: this.options.serveDir, enableCompression: true, preferredCompressionMethod: 'gzip', domain: this.options.domain, forceSsl: false, manifest: { name: this.options.domain, short_name: this.options.domain, start_url: '/', display_override: ['window-controls-overlay'], lang: 'en', background_color: '#000000', scope: '/', }, port: portArg, // features robots: true, sitemap: true, }); let lswData = { appHash: 'xxxxxx', appSemVer: this.options.appSemVer || 'x.x.x', }; // -> /lsw* - anything regarding serviceworker servertools.serviceworker.addServiceWorkerRoute(this.typedserver, () => { return lswData; }); // lets add ads.txt this.typedserver.server.addRoute('/ads.txt', new servertools.Handler('GET', async (req, res) => { res.type('txt/plain'); const adsTxt = ['google.com, pub-4104137977476459, DIRECT, f08c47fec0942fa0'].join('\n') + '\n'; res.write(adsTxt); res.end(); })); this.typedserver.server.addRoute('/assetbroker/manifest/:manifestAsset', new servertools.Handler('GET', async (req, res) => { let manifestAssetName = req.params.manifestAsset; if (manifestAssetName === 'favicon.png') { manifestAssetName = `favicon_${this.options.domain .replace('.', '') .replace('losslesscom', 'lossless')}@2x_transparent.png`; } const fullOriginAssetUrl = `https://assetbroker.lossless.one/brandfiles/00general/${manifestAssetName}`; console.log(`Getting ${manifestAssetName} from ${fullOriginAssetUrl}`); const smartRequest = plugins.smartrequest.SmartRequest.create(); const response = await smartRequest.url(fullOriginAssetUrl).get(); const arrayBuffer = await response.arrayBuffer(); const dataBuffer = Buffer.from(arrayBuffer); res.type('.png'); res.write(dataBuffer); res.end(); })); // lets add any custom routes if (this.options.addCustomRoutes) { await this.options.addCustomRoutes(this.typedserver.server); } // -> /* - serve the files this.typedserver.serveDirHashSubject.subscribe((appHash) => { lswData = { appHash, appSemVer: '1.0.0', }; }); // lets setup the typedrouter chain this.typedserver.typedrouter.addTypedRouter(this.typedrouter); // lets start everything console.log('routes are all set. Startin up now!'); await this.typedserver.start(); console.log('typedserver started!'); } async stop() { await this.typedserver.stop(); } /** * allows you to hanlde requests from other server instances without the need to listen for yourself * note smartexpress allows you start the instance wuith passing >>false<< as second parameter to .start(); * @param req * @param res */ async handleRequest(req, res) { await this.typedserver.server.handleReqRes(req, res); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy53ZWJzaXRlc2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvdXRpbGl0eXNlcnZlcnMvY2xhc3Nlcy53ZWJzaXRlc2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxVQUFVLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxFQUF1QixXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU3RSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBVXZEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLE9BQU8sb0JBQW9CO0lBSy9CLFlBQVksVUFBbUQ7UUFGeEQsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFHMUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSTtRQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDO1lBQ2pDLElBQUksRUFBRSxJQUFJO1lBQ1YsWUFBWSxFQUFFLElBQUk7WUFDbEIsS0FBSyxFQUFFLElBQUk7WUFDWCxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRO1lBQy9CLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsMEJBQTBCLEVBQUUsTUFBTTtZQUNsQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQzNCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsUUFBUSxFQUFFO2dCQUNSLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07Z0JBQ3pCLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07Z0JBQy9CLFNBQVMsRUFBRSxHQUFHO2dCQUNkLGdCQUFnQixF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