35 lines
1.4 KiB
TypeScript
35 lines
1.4 KiB
TypeScript
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();
|
|
};
|