typedserver/ts_edgeworker/responders/kv.responder.ts

35 lines
1.4 KiB
TypeScript
Raw Normal View History

2024-05-13 21:24:08 +00:00
import * as interfaces from '../interfaces/index.js';
import * as plugins from '../plugins.js';
import { WorkerEvent } from '../classes.workerevent.js';
import { ResponseKv } from '../classes.responsekv.js';
declare const fetch: plugins.cloudflareTypes.Fetcher['fetch'];
export const kvResponder: interfaces.TRequestResponser = async (cworkerEventArg: WorkerEvent) => {
const responseKvInstance = new ResponseKv();
let response = await responseKvInstance.getResponse(cworkerEventArg.request.url);
if (response) {
console.log('Got response from KV');
} else {
response = await handleNewRequest(cworkerEventArg.request, responseKvInstance);
}
cworkerEventArg.setResponse(response);
};
const handleNewRequest = async (request: plugins.cloudflareTypes.Request, responseKvInstance: ResponseKv) => {
const originResponse: any = await fetch(request);
// build response for cache
const cacheHeaders = new Headers();
for (const kv of originResponse.headers.entries()) {
cacheHeaders.append(kv[0], kv[1]);
}
cacheHeaders.append('SERVEZONE_ROUTE', 'LOSSLESS_EDGE_KVRESPONSE');
cacheHeaders.append('Cache-Control', 'max-age=600');
const responseForKV = new Response(await originResponse.body, {
...originResponse,
headers: cacheHeaders
});
await responseKvInstance.storeResponse(request.url, responseForKV.clone());
return responseForKV.clone();
};