66 lines
1.8 KiB
TypeScript
Executable File
66 lines
1.8 KiB
TypeScript
Executable File
// // deno.server/assets/kvWorker.ts
|
|
// // Dedicated worker to manage Deno KV operations for OAuth state (bundled asset)
|
|
|
|
// export type KvSetRequest = {
|
|
// id: string;
|
|
// type: "set";
|
|
// key: string[];
|
|
// value: unknown;
|
|
// expireInMs?: number;
|
|
// };
|
|
|
|
// export type KvGetDelRequest = {
|
|
// id: string;
|
|
// type: "getAndDelete";
|
|
// key: string[];
|
|
// };
|
|
|
|
// export type KvRequest = KvSetRequest | KvGetDelRequest;
|
|
|
|
// export type KvResponse =
|
|
// | {
|
|
// id: string;
|
|
// ok: true;
|
|
// value?: unknown;
|
|
// }
|
|
// | {
|
|
// id: string;
|
|
// ok: false;
|
|
// error: string;
|
|
// };
|
|
|
|
// let kv: Deno.Kv | null = null;
|
|
|
|
// async function ensureKv() {
|
|
// if (!kv) kv = await Deno.openKv();
|
|
// return kv!;
|
|
// }
|
|
|
|
// self.onmessage = async (evt: MessageEvent) => {
|
|
// let reqId: string | undefined = undefined;
|
|
// try {
|
|
// const msg = evt.data as KvRequest;
|
|
// reqId = msg.id;
|
|
// const kv = await ensureKv();
|
|
// if (msg.type === "set") {
|
|
// const opts = msg.expireInMs ? { expireIn: msg.expireInMs } : undefined;
|
|
// await kv.set(msg.key as Deno.KvKey, msg.value, opts);
|
|
// self.postMessage({ id: msg.id, ok: true } as KvResponse);
|
|
// return;
|
|
// }
|
|
// if (msg.type === "getAndDelete") {
|
|
// const key = msg.key as Deno.KvKey;
|
|
// const res = await kv.get(key);
|
|
// if (res.value !== null) {
|
|
// await kv.delete(key);
|
|
// }
|
|
// self.postMessage({ id: msg.id, ok: true, value: res.value } as KvResponse);
|
|
// return;
|
|
// }
|
|
// self.postMessage({ id: reqId ?? "", ok: false, error: "Unknown message type" } as KvResponse);
|
|
// } catch (err) {
|
|
// const errorMsg = (err && (err as { message?: string }).message) || String(err);
|
|
// self.postMessage({ id: reqId ?? "", ok: false, error: errorMsg } as KvResponse);
|
|
// }
|
|
// };
|