import { WorkerEntrypoint } from "cloudflare:workers"; import { captureContext } from "./capture.js"; import { CAPTURE_HEADER, DEMO_EMAIL, DEMO_HOST } from "./config.js"; export class GatewayMiddleware extends WorkerEntrypoint { async handle(request, context, next) { const headers = new Headers(request.headers); headers.delete(CAPTURE_HEADER); const url = new URL(request.url); if (url.hostname === DEMO_HOST && request.method === "GET" && (url.pathname === "/" || url.pathname === "/context")) { // Gateway supplies the context, including lazy identity and posture. const snapshot = await captureContext(request, context); if (snapshot.identity.value?.email === DEMO_EMAIL) { // Save privately before continuing the original request to the site. const ticket = await this.env.CONTEXT_VIEWER.capture(snapshot); headers.set(CAPTURE_HEADER, ticket); } } // Continue to the original destination using Gateway routing and egress. return next(new Request(request, { headers })); } } export default { fetch() { return new Response("Gateway RPC entrypoint only.", { status: 403 }); }, };