chore: import upstream snapshot with attribution
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
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
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
import crypto from "node:crypto";
|
||||
|
||||
// This just ensures that the import doesn't get tree shaken
|
||||
console.log(typeof crypto);
|
||||
interface Env {
|
||||
ASSETS: Fetcher;
|
||||
AI: Ai;
|
||||
}
|
||||
|
||||
let requestAborted = false;
|
||||
|
||||
export default {
|
||||
async fetch(request, env, ctx) {
|
||||
const url = new URL(request.url);
|
||||
|
||||
if (url.pathname.startsWith("/api/")) {
|
||||
return Response.json({
|
||||
name: "Cloudflare",
|
||||
});
|
||||
}
|
||||
|
||||
if (url.pathname === "/env/") {
|
||||
return Response.json(env);
|
||||
}
|
||||
|
||||
if (url.pathname === "/wait") {
|
||||
request.signal.addEventListener("abort", () => {
|
||||
requestAborted = true;
|
||||
});
|
||||
|
||||
const { readable, writable } = new IdentityTransformStream();
|
||||
// Acquire the writer immediately before returning the Response
|
||||
// to ensure the stream stays open for writes
|
||||
const writer = writable.getWriter();
|
||||
const enc = new TextEncoder();
|
||||
|
||||
ctx.waitUntil(
|
||||
(async () => {
|
||||
try {
|
||||
for (let i = 0; i < 6; i++) {
|
||||
// Send 'ping' every 500ms to keep the connection alive for 3 seconds
|
||||
await writer.write(enc.encode("ping\r\n"));
|
||||
await scheduler.wait(500);
|
||||
}
|
||||
} finally {
|
||||
await writer.close();
|
||||
}
|
||||
})()
|
||||
);
|
||||
|
||||
return new Response(readable, {
|
||||
headers: { "Content-Type": "text/plain" },
|
||||
});
|
||||
}
|
||||
|
||||
if (url.pathname === "/aborted") {
|
||||
return new Response(
|
||||
requestAborted ? "Request aborted" : "Request not aborted"
|
||||
);
|
||||
}
|
||||
|
||||
return env.ASSETS.fetch(request);
|
||||
},
|
||||
} satisfies ExportedHandler<Env>;
|
||||
Reference in New Issue
Block a user