70bf21e064
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
Handle Changesets / Handle Changesets (push) Has been cancelled
Semgrep OSS scan / semgrep-oss (push) Has been cancelled
149 lines
3.5 KiB
TypeScript
149 lines
3.5 KiB
TypeScript
import { WorkerEntrypoint } from "cloudflare:workers";
|
|
|
|
let tailEvents = [];
|
|
let queueMessages = [];
|
|
|
|
export class NamedEntrypoint extends WorkerEntrypoint {
|
|
ping() {
|
|
return "Pong from Named Entrypoint";
|
|
}
|
|
|
|
fetch() {
|
|
return new Response("Hello from Named Entrypoint!");
|
|
}
|
|
}
|
|
|
|
export default class Worker extends WorkerEntrypoint<{
|
|
SERVICE_WORKER: Fetcher;
|
|
EXPORTED_HANDLER: Fetcher;
|
|
WORKER_ENTRYPOINT: Fetcher;
|
|
WORKER_ENTRYPOINT_WITH_ASSETS: Fetcher;
|
|
NAMED_ENTRYPOINT: Fetcher;
|
|
NAMED_ENTRYPOINT_WITH_ASSETS: Fetcher;
|
|
DURABLE_OBJECT: DurableObjectNamespace;
|
|
}> {
|
|
ping() {
|
|
return "Pong";
|
|
}
|
|
|
|
async fetch(request) {
|
|
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 = this.env.SERVICE_WORKER;
|
|
break;
|
|
}
|
|
case "exported-handler": {
|
|
service = this.env.EXPORTED_HANDLER;
|
|
break;
|
|
}
|
|
case "worker-entrypoint": {
|
|
service = this.env.WORKER_ENTRYPOINT;
|
|
break;
|
|
}
|
|
case "worker-entrypoint-with-assets": {
|
|
service = this.env.WORKER_ENTRYPOINT_WITH_ASSETS;
|
|
break;
|
|
}
|
|
case "named-entrypoint": {
|
|
service = this.env.NAMED_ENTRYPOINT;
|
|
break;
|
|
}
|
|
case "named-entrypoint-with-assets": {
|
|
service = this.env.NAMED_ENTRYPOINT_WITH_ASSETS;
|
|
break;
|
|
}
|
|
case "durable-object": {
|
|
const id = this.env.DURABLE_OBJECT.newUniqueId();
|
|
const stub = this.env.DURABLE_OBJECT.get(id);
|
|
service = stub;
|
|
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, request);
|
|
}
|
|
|
|
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-received") {
|
|
return Response.json(queueMessages);
|
|
}
|
|
|
|
if (testMethod === "tail") {
|
|
if (request.method === "POST") {
|
|
const logs = await request.json();
|
|
if (Array.isArray(logs)) {
|
|
console.log(`[Worker Entrypoint]`);
|
|
console.log(...logs);
|
|
}
|
|
return new Response("ok");
|
|
}
|
|
|
|
try {
|
|
return Response.json({
|
|
worker: "Worker Entrypoint",
|
|
tailEvents,
|
|
});
|
|
} finally {
|
|
// Clear the tail events after sending them
|
|
tailEvents = [];
|
|
}
|
|
}
|
|
|
|
return new Response("Hello from Worker Entrypoint!");
|
|
} 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);
|
|
}
|
|
}
|
|
|
|
queue(batch) {
|
|
for (const message of batch.messages) {
|
|
queueMessages.push(message.body);
|
|
}
|
|
}
|
|
}
|