46 lines
1.4 KiB
TypeScript
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;
|
|
}
|
|
}
|
|
} |