// imports import { WorkerEvent } from './classes.workerevent.js'; import { DomainRouter } from './classes.domainrouter.js'; import * as plugins from './plugins.js'; import * as responders from './responders/index.js'; export interface IEdgeWorkerOptions { smartlogConfig?: { endpoint: string; token: string; } } export class EdgeWorker { public options: IEdgeWorkerOptions; domainRouter: DomainRouter; constructor(optionsArg: IEdgeWorkerOptions = {}) { this.options = optionsArg; this.domainRouter = new DomainRouter(); addEventListener('fetch', this.fetchFunction as any); } public async fetchFunction (eventArg: plugins.cloudflareTypes.FetchEvent) { if (new URL(eventArg.request.url).pathname.startsWith('/socket.io')) { return; } const cworkerEvent = new WorkerEvent({ edgeWorkerRef: this, event: eventArg, passThroughOnException: true }); // lets answer basic reuest things responders.timeoutResponder(cworkerEvent); cworkerEvent.hasResponse ? null : await responders.urlFormattingResponder(cworkerEvent); // lets route the domain this.domainRouter.routeToResponder(cworkerEvent); this.domainRouter.checkWetherReRouteToRendertron(cworkerEvent); this.domainRouter.checkWetherIsPreflight(cworkerEvent); // guardresponder cworkerEvent.hasResponse ? null : await responders.guardResponder(cworkerEvent); // lets process all requests that need rendertron cworkerEvent.hasResponse ? null : await responders.rendertronResponder(cworkerEvent); // lets process all requests that are preflight requests cworkerEvent.hasResponse ? null : await responders.preflightResponder(cworkerEvent); switch (cworkerEvent.responderInstruction.type) { case 'cache': cworkerEvent.hasResponse ? null : await responders.cacheResponder(cworkerEvent); break; case 'origin': cworkerEvent.hasResponse ? null : await responders.originResponder(cworkerEvent); break; case 'redirect': cworkerEvent.hasResponse ? null : await responders.adsTxtResponder(cworkerEvent); break; case 'static': cworkerEvent.hasResponse ? null : await responders.staticResponder(cworkerEvent); break; case 'ads.txt': cworkerEvent.hasResponse ? null : await responders.adsTxtResponder(cworkerEvent); break; } // cworkerEvent.hasResponse ? null : await responders.kvResponder(cworkerEvent); cworkerEvent.hasResponse ? null : await responders.errorResponder(cworkerEvent); }; }