70bf21e064
Handle Changesets / Handle Changesets (push) Waiting to run
Semgrep OSS scan / semgrep-oss (push) Waiting to run
Deploy (to testing) and Test Playground Preview Worker / Deploy Playground Preview Worker (testing) (push) Has been skipped
Deploy Workers Shared Staging / Deploy Workers Shared Staging (push) Failing after 0s
Prerelease / build (push) Has been skipped
127 lines
3.0 KiB
TypeScript
127 lines
3.0 KiB
TypeScript
import { WorkerEntrypoint } from "cloudflare:workers";
|
|
|
|
let tailEvents = [];
|
|
|
|
export class NamedEntrypoint extends WorkerEntrypoint {
|
|
ping() {
|
|
return "Pong from Named Entrypoint";
|
|
}
|
|
|
|
fetch() {
|
|
return new Response("Hello from Named Entrypoint!");
|
|
}
|
|
}
|
|
|
|
export default {
|
|
async fetch(request, env) {
|
|
try {
|
|
const url = new URL(request.url);
|
|
const testMethod = url.searchParams.get("test-method");
|
|
const testService = url.searchParams.get("test-service");
|
|
|
|
// Remove the test-method search params to avoid recursion
|
|
url.searchParams.delete("test-method");
|
|
url.searchParams.delete("test-service");
|
|
|
|
let service: Fetcher | undefined;
|
|
|
|
switch (testService) {
|
|
case "service-worker": {
|
|
service = env.SERVICE_WORKER;
|
|
break;
|
|
}
|
|
case "worker-entrypoint": {
|
|
service = env.WORKER_ENTRYPOINT;
|
|
break;
|
|
}
|
|
case "worker-entrypoint-with-assets": {
|
|
service = env.WORKER_ENTRYPOINT_WITH_ASSETS;
|
|
break;
|
|
}
|
|
case "named-entrypoint": {
|
|
service = env.NAMED_ENTRYPOINT;
|
|
break;
|
|
}
|
|
case "named-entrypoint-with-assets": {
|
|
service = env.NAMED_ENTRYPOINT_WITH_ASSETS;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (service && testMethod === "rpc") {
|
|
// @ts-expect-error
|
|
const result = await service.ping();
|
|
return new Response(result);
|
|
}
|
|
|
|
if (service && testMethod === "fetch") {
|
|
return await service.fetch(url);
|
|
}
|
|
|
|
if (service && testMethod === "websocket-proxy") {
|
|
return await service.fetch(new Request(url, request));
|
|
}
|
|
|
|
// Handle WebSocket upgrades forwarded via service bindings
|
|
if (request.headers.get("Upgrade")) {
|
|
const { 0: client, 1: server } = new WebSocketPair();
|
|
server.accept();
|
|
server.addEventListener("message", (event) => {
|
|
server.send(`echo:${event.data}`);
|
|
});
|
|
return new Response(null, { status: 101, webSocket: client });
|
|
}
|
|
|
|
if (testMethod === "queue-send") {
|
|
await env.QUEUE.send(await request.text());
|
|
return new Response("Queued");
|
|
}
|
|
|
|
if (testMethod === "tail") {
|
|
if (request.method === "POST") {
|
|
const logs = await request.json();
|
|
if (Array.isArray(logs)) {
|
|
console.log(`[exported-handler]`);
|
|
console.log(...logs);
|
|
}
|
|
return new Response("ok");
|
|
}
|
|
|
|
try {
|
|
return Response.json({
|
|
worker: "exported-handler",
|
|
tailEvents,
|
|
});
|
|
} finally {
|
|
// Clear the tail events after sending them
|
|
tailEvents = [];
|
|
}
|
|
}
|
|
|
|
return new Response("Hello from exported handler!");
|
|
} catch (e) {
|
|
return new Response(e.message, { status: 500 });
|
|
}
|
|
},
|
|
tail(events) {
|
|
const logs = [];
|
|
|
|
for (const event of events) {
|
|
if (Array.isArray(event.logs) && event.logs.length > 0) {
|
|
logs.push(...event.logs.map((log) => log.message));
|
|
}
|
|
}
|
|
|
|
if (logs.length > 0) {
|
|
tailEvents.push(logs);
|
|
}
|
|
},
|
|
} satisfies ExportedHandler<{
|
|
SERVICE_WORKER: Fetcher;
|
|
WORKER_ENTRYPOINT: Fetcher;
|
|
WORKER_ENTRYPOINT_WITH_ASSETS: Fetcher;
|
|
NAMED_ENTRYPOINT: Fetcher;
|
|
NAMED_ENTRYPOINT_WITH_ASSETS: Fetcher;
|
|
QUEUE: Queue;
|
|
}>;
|