revokeSessions

tcmts.server.revokeSessions · #2swlwswv · term · runs on the server

uses #tcm/host (database)

End every session whose data matches, e.g. revokeSessions((s) => s.user === "ada"); returns how many.

import { callNow } from "#codebase/tcmts/server";
import { database } from "#tcm/host";

export function revokeSessions(match: (data: Record<string, unknown>) => boolean): number {
  callNow("revokeSessions()");
  const db = database("sessions");
  let n = 0;
  for (const row of db.prepare("SELECT id, data FROM sessions").all() as {
    id: string;
    data: string;
  }[]) {
    if (!match(JSON.parse(row.data) as Record<string, unknown>)) continue;
    db.prepare("DELETE FROM sessions WHERE id = ?").run(row.id);
    n++;
  }
  return n;
}

uses