78 lines
1.8 KiB
JavaScript
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 };
|