typedserver/ts_edgeworker/classes.responsekv.ts
2024-05-13 23:24:08 +02:00

46 lines
1.4 KiB
TypeScript

import * as plugins from './plugins.js';
import { kvHandlerInstance } from './classes.kvhandler.js';
declare var lokv: plugins.cloudflareTypes.KVNamespace;
interface IKVResponseObject {
headers: { [key: string]: string };
version: string;
body: string;
}
export class ResponseKv {
public async storeResponse(urlIdentifier: string, responseArg: any) {
const headers: { [key: string]: string } = {};
for (const kv of responseArg.headers.entries()) {
headers[kv[0]] = kv[1];
}
const kvResponseForStorage: IKVResponseObject = {
headers,
version: '1.0.0',
body: await responseArg.text()
};
await kvHandlerInstance.putInKv(urlIdentifier, JSON.stringify(kvResponseForStorage));
}
public async getResponse(urlIdentifier: string): Promise<Response> {
const kvValue = await kvHandlerInstance.getFromKv(urlIdentifier);
if (kvValue) {
let kvResponse: IKVResponseObject;
try {
kvResponse = JSON.parse(kvValue);
} catch (e) {
console.log(e);
return null;
}
const headers = new Headers();
for (const key of Object.keys(kvResponse.headers)) {
headers.append(key, kvResponse.headers[key]);
}
headers.append('SERVEZONE_ROUTE', 'CLOUDFLARE_EDGE_LOKV');
return new Response(kvResponse.body, { headers: headers });
} else {
return null;
}
}
}