@hatk/hatk 0.0.1-alpha.35 → 0.0.1-alpha.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Shared Cloudflare initialization logic used by both the standalone Worker
3
+ * entry and the SvelteKit handle hook.
4
+ */
5
+ import { D1Adapter } from "../database/adapters/d1.js";
6
+ import { initDatabase, migrateSchema } from "../database/db.js";
7
+ import { storeLexicons, discoverCollections, buildSchemas } from "../database/schema.js";
8
+ import { discoverViews } from "../views.js";
9
+ import { getDialect } from "../database/dialect.js";
10
+ import { setSearchPort } from "../database/fts.js";
11
+ import { initOAuth } from "../oauth/server.js";
12
+ import { parseSessionCookie, getSessionCookieName } from "../oauth/session.js";
13
+ import { createHandler, registerCoreHandlers } from "../server.js";
14
+ import { configureRelay } from "../xrpc.js";
15
+ import { callXrpc } from "../xrpc.js";
16
+ import { validateLexicons } from '@bigmoves/lexicon';
17
+ let handler = null;
18
+ let initPromise = null;
19
+ /**
20
+ * One-time initialization. Sets up D1 adapter, database schemas, XRPC
21
+ * handlers, OAuth, and the globalThis bridge for SvelteKit SSR.
22
+ */
23
+ async function initialize(env) {
24
+ const relay = env.HATK_RELAY || 'wss://bsky.network';
25
+ const plc = env.HATK_PLC || 'https://plc.directory';
26
+ configureRelay(relay);
27
+ const admins = env.HATK_ADMINS ? env.HATK_ADMINS.split(',').map((s) => s.trim()) : [];
28
+ // Load lexicons — injected at build time via virtual module
29
+ let lexicons;
30
+ try {
31
+ // @ts-expect-error — virtual module generated at build time
32
+ const lexiconModule = await import('virtual:hatk-lexicons');
33
+ lexicons = new Map(Object.entries(lexiconModule.default));
34
+ }
35
+ catch {
36
+ lexicons = new Map();
37
+ }
38
+ const lexiconErrors = validateLexicons([...lexicons.values()]);
39
+ if (lexiconErrors) {
40
+ for (const [nsid, errors] of Object.entries(lexiconErrors)) {
41
+ for (const err of errors) {
42
+ console.error(`[hatk] Invalid lexicon ${nsid}: ${err}`);
43
+ }
44
+ }
45
+ throw new Error('Invalid lexicons — check build output');
46
+ }
47
+ storeLexicons(lexicons);
48
+ const collections = env.HATK_COLLECTIONS
49
+ ? env.HATK_COLLECTIONS.split(',').map((s) => s.trim())
50
+ : discoverCollections(lexicons);
51
+ // Build schemas and init D1
52
+ discoverViews();
53
+ const engineDialect = getDialect('d1');
54
+ const { schemas, ddlStatements } = buildSchemas(lexicons, collections, engineDialect);
55
+ const adapter = new D1Adapter();
56
+ adapter.initWithBinding(env.DB);
57
+ setSearchPort(null);
58
+ await initDatabase(adapter, ':memory:', schemas, ddlStatements);
59
+ await migrateSchema(schemas);
60
+ // Register core XRPC handlers
61
+ const oauthConfig = env.HATK_OAUTH_ISSUER
62
+ ? {
63
+ issuer: env.HATK_OAUTH_ISSUER,
64
+ scopes: env.HATK_OAUTH_SCOPES ? env.HATK_OAUTH_SCOPES.split(',').map((s) => s.trim()) : ['read', 'write'],
65
+ clients: [],
66
+ }
67
+ : null;
68
+ registerCoreHandlers(collections, oauthConfig);
69
+ if (oauthConfig) {
70
+ await initOAuth(oauthConfig, plc, relay);
71
+ }
72
+ // Expose bridge for SvelteKit SSR
73
+ ;
74
+ globalThis.__hatk_callXrpc = callXrpc;
75
+ globalThis.__hatk_parseSessionCookie = parseSessionCookie;
76
+ globalThis.__hatk_sessionCookieName = getSessionCookieName();
77
+ // Create the request handler
78
+ handler = createHandler({
79
+ collections,
80
+ publicDir: null,
81
+ oauth: oauthConfig,
82
+ admins,
83
+ onResync: undefined,
84
+ });
85
+ }
86
+ /**
87
+ * Ensure initialization has completed. Concurrent calls share the same promise.
88
+ */
89
+ export function ensureInit(env) {
90
+ if (handler)
91
+ return Promise.resolve();
92
+ if (!initPromise) {
93
+ initPromise = initialize(env).catch((err) => {
94
+ initPromise = null;
95
+ throw err;
96
+ });
97
+ }
98
+ return initPromise;
99
+ }
100
+ /** Get the hatk request handler (only valid after init). */
101
+ export function getHandler() {
102
+ return handler;
103
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Cloudflare Worker entry point for hatk.
3
+ *
4
+ * Handles HTTP requests via the Workers fetch handler. The firehose indexer
5
+ * and backfill run in a companion Container — the Worker only serves the
6
+ * API and web UI.
7
+ *
8
+ * For SvelteKit apps, prefer using the handle hook from
9
+ * '@hatk/hatk/cloudflare/hooks' with adapter-cloudflare instead.
10
+ */
11
+ import { type CloudflareEnv } from './init.ts';
12
+ interface ContainerBinding {
13
+ resync(did: string): Promise<void>;
14
+ fetch(request: Request): Promise<Response>;
15
+ }
16
+ interface Env extends CloudflareEnv {
17
+ CONTAINER: ContainerBinding;
18
+ }
19
+ interface ExecutionContext {
20
+ waitUntil(promise: Promise<unknown>): void;
21
+ passThroughOnException(): void;
22
+ }
23
+ declare const _default: {
24
+ fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response>;
25
+ };
26
+ export default _default;
27
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/cloudflare/worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAA0B,KAAK,aAAa,EAAE,MAAM,WAAW,CAAA;AAGtE,UAAU,gBAAgB;IACxB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CAC3C;AAED,UAAU,GAAI,SAAQ,aAAa;IACjC,SAAS,EAAE,gBAAgB,CAAA;CAC5B;AAED,UAAU,gBAAgB;IACxB,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;IAC1C,sBAAsB,IAAI,IAAI,CAAA;CAC/B;;mBAGsB,OAAO,OAAO,GAAG,OAAO,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;;AADnF,wBA2CC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Cloudflare Worker entry point for hatk.
3
+ *
4
+ * Handles HTTP requests via the Workers fetch handler. The firehose indexer
5
+ * and backfill run in a companion Container — the Worker only serves the
6
+ * API and web UI.
7
+ *
8
+ * For SvelteKit apps, prefer using the handle hook from
9
+ * '@hatk/hatk/cloudflare/hooks' with adapter-cloudflare instead.
10
+ */
11
+ import { ensureInit, getHandler } from "./init.js";
12
+ import { isHatkRoute } from "../adapter.js";
13
+ export default {
14
+ async fetch(request, env, ctx) {
15
+ try {
16
+ await ensureInit(env);
17
+ }
18
+ catch (err) {
19
+ return new Response(JSON.stringify({ error: 'Initialization failed', detail: err.message }), {
20
+ status: 500,
21
+ headers: { 'Content-Type': 'application/json' },
22
+ });
23
+ }
24
+ const url = new URL(request.url);
25
+ const handler = getHandler();
26
+ // Intercept admin resync to delegate to the Container via RPC
27
+ if (url.pathname === '/admin/repos/resync' && request.method === 'POST') {
28
+ try {
29
+ const body = await request.text();
30
+ const { dids } = body ? JSON.parse(body) : {};
31
+ if (Array.isArray(dids)) {
32
+ for (const did of dids) {
33
+ ctx.waitUntil(env.CONTAINER.resync(did));
34
+ }
35
+ return new Response(JSON.stringify({ resyncing: dids.length }), {
36
+ headers: { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' },
37
+ });
38
+ }
39
+ }
40
+ catch (err) {
41
+ return new Response(JSON.stringify({ error: err.message }), {
42
+ status: 500,
43
+ headers: { 'Content-Type': 'application/json' },
44
+ });
45
+ }
46
+ }
47
+ // hatk routes → handler
48
+ if (isHatkRoute(url.pathname)) {
49
+ return handler(request);
50
+ }
51
+ // Everything else → 404 (use cloudflare/hooks for SvelteKit integration)
52
+ return new Response('Not found', { status: 404 });
53
+ },
54
+ };
@@ -0,0 +1,56 @@
1
+ import type { DatabasePort, BulkInserter, Dialect } from '../ports.ts';
2
+ /**
3
+ * D1 database adapter for Cloudflare Workers/Containers.
4
+ *
5
+ * D1 is SQLite under the hood but accessed via an HTTP-based binding API.
6
+ * Key differences from the SQLite adapter:
7
+ * - No raw transactions — uses d1.batch() for atomic multi-statement execution
8
+ * - No prepared statement reuse — each query is a fresh prepare+bind
9
+ * - Bulk inserts use batched INSERT statements instead of native appenders
10
+ */
11
+ /** Minimal D1 type definitions (matches Cloudflare's D1Database binding) */
12
+ interface D1Database {
13
+ prepare(sql: string): D1PreparedStatement;
14
+ batch<T = unknown>(statements: D1PreparedStatement[]): Promise<D1Result<T>[]>;
15
+ exec(sql: string): Promise<D1ExecResult>;
16
+ }
17
+ interface D1PreparedStatement {
18
+ bind(...values: unknown[]): D1PreparedStatement;
19
+ all<T = Record<string, unknown>>(): Promise<D1Result<T>>;
20
+ run(): Promise<D1Result>;
21
+ first<T = Record<string, unknown>>(column?: string): Promise<T | null>;
22
+ }
23
+ interface D1Result<T = unknown> {
24
+ results: T[];
25
+ success: boolean;
26
+ meta: Record<string, unknown>;
27
+ }
28
+ interface D1ExecResult {
29
+ count: number;
30
+ duration: number;
31
+ }
32
+ export declare class D1Adapter implements DatabasePort {
33
+ dialect: Dialect;
34
+ private db;
35
+ private txBuffer;
36
+ /**
37
+ * Initialize with an existing D1 binding (from env.DB in Worker/Container).
38
+ * The `path` argument is ignored — D1 bindings are configured in wrangler.jsonc.
39
+ */
40
+ open(_path: string): Promise<void>;
41
+ /** Set the D1 binding directly (called before open). */
42
+ initWithBinding(db: D1Database): void;
43
+ close(): void;
44
+ query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<T[]>;
45
+ execute(sql: string, params?: unknown[]): Promise<void>;
46
+ executeMultiple(sql: string): Promise<void>;
47
+ beginTransaction(): Promise<void>;
48
+ commit(): Promise<void>;
49
+ rollback(): Promise<void>;
50
+ createBulkInserter(table: string, columns: string[], options?: {
51
+ onConflict?: 'ignore' | 'replace';
52
+ batchSize?: number;
53
+ }): Promise<BulkInserter>;
54
+ }
55
+ export {};
56
+ //# sourceMappingURL=d1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"d1.d.ts","sourceRoot":"","sources":["../../../src/database/adapters/d1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAEtE;;;;;;;;GAQG;AAEH,4EAA4E;AAC5E,UAAU,UAAU;IAClB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAAA;IACzC,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAC7E,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;CACzC;AAED,UAAU,mBAAmB;IAC3B,IAAI,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAAA;IAC/C,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAA;IACxB,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;CACvE;AAED,UAAU,QAAQ,CAAC,CAAC,GAAG,OAAO;IAC5B,OAAO,EAAE,CAAC,EAAE,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B;AAED,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAmBD,qBAAa,SAAU,YAAW,YAAY;IAC5C,OAAO,EAAE,OAAO,CAAO;IAEvB,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,QAAQ,CAAqC;IAErD;;;OAGG;IACG,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxC,wDAAwD;IACxD,eAAe,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI;IAIrC,KAAK,IAAI,IAAI;IAIP,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAOrF,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAa3D,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa3C,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IASvB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,kBAAkB,CACtB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAClE,OAAO,CAAC,YAAY,CAAC;CA+BzB"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Translate DuckDB-style $1, $2 placeholders to ? placeholders.
3
+ * Same logic as the SQLite adapter — D1 uses ? style.
4
+ */
5
+ function translateParams(sql, params) {
6
+ if (params.length === 0)
7
+ return { sql, params };
8
+ const expandedParams = [];
9
+ const translated = sql.replace(/\$(\d+)/g, (_match, numStr) => {
10
+ const idx = parseInt(numStr) - 1;
11
+ expandedParams.push(params[idx]);
12
+ return '?';
13
+ });
14
+ return { sql: translated, params: expandedParams };
15
+ }
16
+ export class D1Adapter {
17
+ dialect = 'd1';
18
+ db;
19
+ txBuffer = null;
20
+ /**
21
+ * Initialize with an existing D1 binding (from env.DB in Worker/Container).
22
+ * The `path` argument is ignored — D1 bindings are configured in wrangler.jsonc.
23
+ */
24
+ async open(_path) {
25
+ // D1 binding is injected via initWithBinding(), not opened by path.
26
+ // This is a no-op if already initialized.
27
+ if (!this.db) {
28
+ throw new Error('D1Adapter requires initWithBinding(db) before use');
29
+ }
30
+ }
31
+ /** Set the D1 binding directly (called before open). */
32
+ initWithBinding(db) {
33
+ this.db = db;
34
+ }
35
+ close() {
36
+ // D1 bindings don't need explicit cleanup
37
+ }
38
+ async query(sql, params = []) {
39
+ const t = translateParams(sql, params);
40
+ const stmt = t.params.length > 0 ? this.db.prepare(t.sql).bind(...t.params) : this.db.prepare(t.sql);
41
+ const result = await stmt.all();
42
+ return result.results;
43
+ }
44
+ async execute(sql, params = []) {
45
+ const t = translateParams(sql, params);
46
+ const stmt = t.params.length > 0 ? this.db.prepare(t.sql).bind(...t.params) : this.db.prepare(t.sql);
47
+ // If inside a transaction, buffer instead of executing
48
+ if (this.txBuffer !== null) {
49
+ this.txBuffer.push(stmt);
50
+ return;
51
+ }
52
+ await stmt.run();
53
+ }
54
+ async executeMultiple(sql) {
55
+ // D1's exec() can be unreliable with multi-statement SQL.
56
+ // Split on semicolons and run each statement via prepare().run().
57
+ const statements = sql
58
+ .split(';')
59
+ .map((s) => s.trim())
60
+ .filter((s) => s.length > 0);
61
+ for (const stmt of statements) {
62
+ await this.db.prepare(stmt).run();
63
+ }
64
+ }
65
+ async beginTransaction() {
66
+ this.txBuffer = [];
67
+ }
68
+ async commit() {
69
+ if (this.txBuffer === null)
70
+ return;
71
+ const statements = this.txBuffer;
72
+ this.txBuffer = null;
73
+ if (statements.length > 0) {
74
+ await this.db.batch(statements);
75
+ }
76
+ }
77
+ async rollback() {
78
+ this.txBuffer = null;
79
+ }
80
+ async createBulkInserter(table, columns, options) {
81
+ const placeholders = columns.map(() => '?').join(', ');
82
+ const conflict = options?.onConflict === 'ignore' ? ' OR IGNORE' : options?.onConflict === 'replace' ? ' OR REPLACE' : '';
83
+ const sqlTemplate = `INSERT${conflict} INTO ${table} (${columns.join(', ')}) VALUES (${placeholders})`;
84
+ const buffer = [];
85
+ const batchSize = options?.batchSize ?? 200; // smaller batches for D1 CPU limits
86
+ const db = this.db;
87
+ const flush = async () => {
88
+ if (buffer.length > 0) {
89
+ await db.batch(buffer);
90
+ buffer.length = 0;
91
+ }
92
+ };
93
+ return {
94
+ append(values) {
95
+ buffer.push(db.prepare(sqlTemplate).bind(...values));
96
+ if (buffer.length >= batchSize) {
97
+ flush();
98
+ }
99
+ },
100
+ async flush() {
101
+ await flush();
102
+ },
103
+ async close() {
104
+ await flush();
105
+ },
106
+ };
107
+ }
108
+ }
@@ -32,6 +32,9 @@ export declare function getRepoRetryInfo(did: string): Promise<{
32
32
  } | null>;
33
33
  export declare function listRetryEligibleRepos(maxRetries: number): Promise<string[]>;
34
34
  export declare function listPendingRepos(): Promise<string[]>;
35
+ export declare function listActiveRepoDids(): Promise<string[]>;
36
+ export declare function removeRepo(did: string): Promise<void>;
37
+ export declare function getRepoHandle(did: string): Promise<string | null>;
35
38
  export declare function listAllRepoStatuses(): Promise<Array<{
36
39
  did: string;
37
40
  status: string;
@@ -46,6 +49,11 @@ export declare function listReposPaginated(opts?: {
46
49
  total: number;
47
50
  }>;
48
51
  export declare function getCollectionCounts(): Promise<Record<string, number>>;
52
+ export declare function getRepoStatusCounts(): Promise<Record<string, number>>;
53
+ export declare function getDatabaseSize(): Promise<Record<string, string>>;
54
+ export declare function getLabelCount(val: string): Promise<number>;
55
+ export declare function deleteLabels(val: string): Promise<number>;
56
+ export declare function getRecentRecords(collection: string, limit: number): Promise<any[]>;
49
57
  export declare function getSchemaDump(): Promise<string>;
50
58
  export declare function buildInsertOp(collection: string, uri: string, cid: string, authorDid: string, record: Record<string, any>): {
51
59
  sql: string;
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"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"}
@@ -344,6 +344,17 @@ export async function listPendingRepos() {
344
344
  const rows = await all(`SELECT did FROM _repos WHERE status = 'pending'`);
345
345
  return rows.map((r) => r.did);
346
346
  }
347
+ export async function listActiveRepoDids() {
348
+ const rows = await all(`SELECT did FROM _repos WHERE status = 'active'`);
349
+ return rows.map((r) => r.did);
350
+ }
351
+ export async function removeRepo(did) {
352
+ await run(`DELETE FROM _repos WHERE did = $1`, [did]);
353
+ }
354
+ export async function getRepoHandle(did) {
355
+ const rows = await all(`SELECT handle FROM _repos WHERE did = $1`, [did]);
356
+ return rows[0]?.handle ?? null;
357
+ }
347
358
  export async function listAllRepoStatuses() {
348
359
  return (await all(`SELECT did, status FROM _repos`));
349
360
  }
@@ -375,6 +386,44 @@ export async function getCollectionCounts() {
375
386
  }
376
387
  return counts;
377
388
  }
389
+ export async function getRepoStatusCounts() {
390
+ const rows = await all(`SELECT status, ${dialect.countAsInteger} as count FROM _repos GROUP BY status`);
391
+ const counts = {};
392
+ for (const row of rows)
393
+ counts[row.status] = Number(row.count);
394
+ return counts;
395
+ }
396
+ export async function getDatabaseSize() {
397
+ if (dialect.supportsSequences) {
398
+ // DuckDB: pragma_database_size returns pre-formatted strings
399
+ const rows = await all('SELECT database_size, memory_usage, memory_limit FROM pragma_database_size()');
400
+ return rows[0] ?? {};
401
+ }
402
+ // SQLite: compute from page_count * page_size
403
+ const pages = await all('SELECT page_count FROM pragma_page_count()');
404
+ const sizes = await all('SELECT page_size FROM pragma_page_size()');
405
+ const pageCount = Number(pages[0]?.page_count ?? 0);
406
+ const pageSize = Number(sizes[0]?.page_size ?? 0);
407
+ const bytes = pageCount * pageSize;
408
+ const mib = (bytes / 1024 / 1024).toFixed(1);
409
+ return { database_size: `${mib} MiB`, memory_usage: 'N/A', memory_limit: 'N/A' };
410
+ }
411
+ export async function getLabelCount(val) {
412
+ const rows = await all(`SELECT ${dialect.countAsInteger} as count FROM _labels WHERE val = $1`, [val]);
413
+ return Number(rows[0]?.count || 0);
414
+ }
415
+ export async function deleteLabels(val) {
416
+ const count = await getLabelCount(val);
417
+ await run(`DELETE FROM _labels WHERE val = $1`, [val]);
418
+ return count;
419
+ }
420
+ export async function getRecentRecords(collection, limit) {
421
+ const schema = schemas.get(collection);
422
+ if (!schema)
423
+ return [];
424
+ const rows = await all(`SELECT t.* FROM ${schema.tableName} t JOIN _repos r ON t.did = r.did WHERE t.indexed_at > r.backfilled_at ORDER BY t.indexed_at DESC LIMIT $1`, [limit]);
425
+ return rows;
426
+ }
378
427
  export async function getSchemaDump() {
379
428
  let rows;
380
429
  if (dialect.supportsSequences) {
@@ -430,7 +479,7 @@ export function buildInsertOp(collection, uri, cid, authorDid, record) {
430
479
  if (rawValue === undefined || rawValue === null) {
431
480
  values.push(null);
432
481
  }
433
- else if (col.sqlType === 'JSON') {
482
+ else if (col.isJson) {
434
483
  values.push(JSON.stringify(rawValue));
435
484
  }
436
485
  else {
@@ -465,7 +514,7 @@ export async function insertRecord(collection, uri, cid, authorDid, record) {
465
514
  if (raw === undefined || raw === null) {
466
515
  values.push(null);
467
516
  }
468
- else if (col.sqlType === 'JSON') {
517
+ else if (col.isJson) {
469
518
  values.push(JSON.stringify(raw));
470
519
  }
471
520
  else {
@@ -504,7 +553,7 @@ export async function insertRecord(collection, uri, cid, authorDid, record) {
504
553
  if (raw === undefined || raw === null) {
505
554
  values.push(null);
506
555
  }
507
- else if (col.sqlType === 'JSON') {
556
+ else if (col.isJson) {
508
557
  values.push(JSON.stringify(raw));
509
558
  }
510
559
  else {
@@ -528,7 +577,7 @@ export async function insertRecord(collection, uri, cid, authorDid, record) {
528
577
  if (raw === undefined || raw === null) {
529
578
  values.push(null);
530
579
  }
531
- else if (col.sqlType === 'JSON') {
580
+ else if (col.isJson) {
532
581
  values.push(JSON.stringify(raw));
533
582
  }
534
583
  else {
@@ -1218,7 +1267,7 @@ export function reshapeRow(row, childData, unionData) {
1218
1267
  if (schema) {
1219
1268
  for (const col of schema.columns) {
1220
1269
  nameMap.set(col.name, col.originalName);
1221
- if (col.sqlType === 'JSON')
1270
+ if (col.isJson)
1222
1271
  jsonCols.add(col.name);
1223
1272
  }
1224
1273
  }
@@ -106,7 +106,7 @@ function computeFtsSchema(collection) {
106
106
  selectExprs.push(`t.${col.name}`);
107
107
  searchColNames.push(col.name);
108
108
  }
109
- else if ((col.sqlType === 'JSON' || col.sqlType === 'TEXT') && record?.properties) {
109
+ else if (col.isJson && record?.properties) {
110
110
  const prop = record.properties[col.originalName];
111
111
  if (prop?.type === 'blob')
112
112
  continue; // skip blobs
@@ -5,6 +5,7 @@ export interface ColumnDef {
5
5
  sqlType: string;
6
6
  notNull: boolean;
7
7
  isRef: boolean;
8
+ isJson: boolean;
8
9
  }
9
10
  export interface UnionBranchSchema {
10
11
  type: string;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAG9C,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,OAAO,CAAA;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,iBAAiB,EAAE,CAAA;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,QAAQ,EAAE,gBAAgB,EAAE,CAAA;IAC5B,MAAM,EAAE,gBAAgB,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,SAAS,EAAE,CAAA;CACrB;AAGD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AA8CD,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CASlE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,EAAE,CASxE;AAID,wBAAgB,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAI9D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAExD;AAED,wBAAgB,cAAc,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,GAAG,CAAA;CAAE,CAAC,CAEtE;AAED,iFAAiF;AACjF,wBAAgB,eAAe,IAAI,GAAG,EAAE,CAEvC;AAwHD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,GAAG,EACZ,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,OAAO,GAAE,UAA2B,GACnC,WAAW,CA0Gb;AAGD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE,UAA2B,GAAG,MAAM,CAoExG;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,GAAE,UAA2B,GACnC;IAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAE,CA2BrD"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAG9C,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,iBAAiB,EAAE,CAAA;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,QAAQ,EAAE,gBAAgB,EAAE,CAAA;IAC5B,MAAM,EAAE,gBAAgB,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,SAAS,EAAE,CAAA;CACrB;AAGD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AA+CD,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CASlE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,EAAE,CASxE;AAID,wBAAgB,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAI9D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAExD;AAED,wBAAgB,cAAc,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,GAAG,CAAA;CAAE,CAAC,CAEtE;AAED,iFAAiF;AACjF,wBAAgB,eAAe,IAAI,GAAG,EAAE,CAEvC;AAyHD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,GAAG,EACZ,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,OAAO,GAAE,UAA2B,GACnC,WAAW,CA+Gb;AAGD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE,UAA2B,GAAG,MAAM,CAoExG;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,GAAE,UAA2B,GACnC;IAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAE,CA2BrD"}