-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy pathecho.ts
More file actions
39 lines (34 loc) · 1.08 KB
/
echo.ts
File metadata and controls
39 lines (34 loc) · 1.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/**
* Echo-ing back request/response headers received by worker.
*/
/**
* Cloudflare Worker entrypoint
*/
if (typeof addEventListener === 'function') {
addEventListener('fetch', (e: Event): void => {
// work around as strict typescript check doesn't allow e to be of type FetchEvent
const fe = e as FetchEvent
fe.respondWith(processRequest(fe.request))
});
}
async function processRequest(r: Request): Promise<Response> {
if (r.url.endsWith('/request/headers')) {
return echoHeaders(r.headers)
} else if (r.url.endsWith('/response/headers')) {
const resp = await fetch(r)
return echoHeaders(resp.headers)
} else {
return new Response('Bad Request', {status: 400, statusText: 'Bad Request'})
}
}
function echoHeaders(h: Headers): Response {
let output = ''
for (let [name, value] of h.entries()) {
output += `${name}: ${value}\n`
}
return new Response(output)
}
interface FetchEvent extends Event {
request: Request;
respondWith(r: Promise<Response> | Response): Promise<Response>;
}