UsefulKey

SQLite

File-backed keystore adapter using SQLite.

Overview

  • SQLite-backed keystore that targets a better-sqlite3-like API.
  • On first use, it creates the required table and indexes (via exec if available, or by running statements one-by-one).
  • metadata is stored as JSON text for portability.

Usage

import Database from "better-sqlite3";
import { SqliteKeyStore, usefulkey } from "betterkey";

const db = new Database("usefulkey.db");

const keyStore = new SqliteKeyStore(db, { tableName: "usefulkey_keys" });

const uk = usefulkey({ adapters: { keyStore } });

Client compatibility

  • Any object exposing prepare(sql) returning { run(...), get(...), all?(...) }.
  • If exec(sql) exists, it will be used to batch-initialize the schema.

Options

OptionTypeDefaultDescription
tableNamestring"usefulkey_keys"Name of the table to store keys.

Schema

CREATE TABLE IF NOT EXISTS usefulkey_keys (
  id TEXT PRIMARY KEY,
  user_id TEXT,
  prefix TEXT NOT NULL,
  key_hash TEXT NOT NULL UNIQUE,
  created_at INTEGER NOT NULL,
  expires_at INTEGER,
  metadata TEXT,
  uses_remaining INTEGER,
  revoked_at INTEGER
);
CREATE INDEX IF NOT EXISTS idx_usefulkey_keys_user_id ON usefulkey_keys(user_id);
CREATE UNIQUE INDEX IF NOT EXISTS idx_usefulkey_keys_key_hash ON usefulkey_keys(key_hash);

Notes

  • metadata is stored as serialized JSON text.
  • created_at, expires_at, and revoked_at are epoch milliseconds.