Files
cap/standalone/src/db.js
T
2025-09-23 09:19:07 +01:00

78 lines
1.8 KiB
JavaScript

import { Database } from "bun:sqlite";
import fs from "node:fs";
import { join } from "node:path";
fs.mkdirSync(process.env.DATA_PATH || "./.data", {
recursive: true,
});
const db = new Database(join(process.env.DATA_PATH || "./.data", "db.sqlite"));
db.query(
`create table if not exists sessions (
token string primary key not null,
expires integer not null,
created integer not null
)`,
).run();
db.query(
`create table if not exists keys (
siteKey string primary key not null,
name string not null,
secretHash string not null,
config string not null,
created integer not null
)`,
).run();
db.query(
`create table if not exists solutions (
siteKey text not null,
bucket integer not null,
count integer default 0,
primary key (siteKey, bucket)
)`,
).run();
db.query(
`create table if not exists challenges (
siteKey string not null,
token string not null,
data string not null,
expires integer not null,
primary key (siteKey, token)
)`,
).run();
db.query(
`create table if not exists tokens (
siteKey string not null,
token string not null,
expires integer not null,
primary key (siteKey, token)
)`,
).run();
db.query(
`create table if not exists api_keys (
id string not null,
name string not null,
tokenHash string not null,
created integer not null,
primary key (id, tokenHash)
)`,
).run();
setInterval(() => {
db.query("delete from sessions where expires < ?").run(Date.now());
db.query("delete from tokens where expires < ?").run(Date.now());
db.query("delete from challenges where expires < ?").run(Date.now());
}, 60 * 1000);
db.query("delete from sessions where expires < ?").run(Date.now());
db.query("delete from tokens where expires < ?").run(Date.now());
db.query("delete from challenges where expires < ?").run(Date.now());
export { db };