Files
genieacs/lib/cache.ts
T

36 lines
935 B
TypeScript

import { collections } from "./db/db.ts";
import * as config from "./config.ts";
const CLOCK_SKEW_TOLERANCE = 30000;
const MAX_CACHE_TTL = +config.get("MAX_CACHE_TTL");
export async function get(key: string): Promise<string> {
const res = await collections.cache.findOne({ _id: key });
return res?.value;
}
export async function del(key: string): Promise<void> {
await collections.cache.deleteOne({ _id: key });
}
export async function set(
key: string,
value: string,
ttl: number = MAX_CACHE_TTL,
): Promise<void> {
const timestamp = new Date();
const expire = new Date(
timestamp.getTime() + CLOCK_SKEW_TOLERANCE + ttl * 1000,
);
await collections.cache.replaceOne(
{ _id: key },
{ value, expire, timestamp },
{ upsert: true },
);
}
export async function pop(key: string): Promise<string> {
const res = await collections.cache.findOneAndDelete({ _id: key });
return res.value?.value;
}