Something went wrong. Try again.
A CLI for publishing standard.site documents to ATProto
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354import { Database } from "bun:sqlite";import { mkdirSync } from "node:fs";import { dirname } from "node:path";
export function openDatabase(path: string): Database { mkdirSync(dirname(path), { recursive: true });
const db = new Database(path); db.run("PRAGMA journal_mode = WAL"); db.run(` CREATE TABLE IF NOT EXISTS kv ( key TEXT PRIMARY KEY, value TEXT NOT NULL, expires_at INTEGER ) `); return db;}
export function kvGet(db: Database, key: string): string | undefined { const row = db .query<{ value: string; expires_at: number | null }, [string]>( "SELECT value, expires_at FROM kv WHERE key = ?", ) .get(key);
if (!row) return undefined;
if (row.expires_at !== null && row.expires_at <= Date.now()) { db.run("DELETE FROM kv WHERE key = ?", [key]); return undefined; }
return row.value;}
export function kvSet( db: Database, key: string, value: string, ttlSeconds?: number,): void { const expiresAt = ttlSeconds !== undefined ? Date.now() + ttlSeconds * 1000 : null; db.run( "INSERT OR REPLACE INTO kv (key, value, expires_at) VALUES (?, ?, ?)", [key, value, expiresAt], );}
export function kvDel(db: Database, key: string): void { db.run("DELETE FROM kv WHERE key = ?", [key]);}