@hatk/hatk 0.0.1-alpha.85 → 0.0.1-alpha.87
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.
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +2 -0
- package/dist/cli.js +5 -1
- package/dist/config.d.ts +47 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +13 -0
- package/dist/database/db.d.ts +11 -0
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +157 -22
- package/dist/database/index.d.ts +1 -1
- package/dist/database/index.d.ts.map +1 -1
- package/dist/database/index.js +1 -1
- package/dist/database/schema.d.ts +2 -0
- package/dist/database/schema.d.ts.map +1 -1
- package/dist/database/schema.js +40 -3
- package/dist/dev-entry.d.ts.map +1 -1
- package/dist/dev-entry.js +2 -2
- package/dist/feeds.d.ts +14 -0
- package/dist/feeds.d.ts.map +1 -1
- package/dist/feeds.js +24 -13
- package/dist/hooks.d.ts +9 -0
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +2 -2
- package/dist/hydrate.d.ts +42 -0
- package/dist/hydrate.d.ts.map +1 -1
- package/dist/hydrate.js +18 -5
- package/dist/indexer.d.ts +12 -0
- package/dist/indexer.d.ts.map +1 -1
- package/dist/indexer.js +20 -0
- package/dist/lex-types.d.ts +2 -0
- package/dist/lex-types.d.ts.map +1 -1
- package/dist/main.js +26 -2
- package/dist/oauth/db.d.ts +9 -0
- package/dist/oauth/db.d.ts.map +1 -1
- package/dist/oauth/db.js +12 -0
- package/dist/private-collections.d.ts +7 -2
- package/dist/private-collections.d.ts.map +1 -1
- package/dist/private-collections.js +9 -4
- package/dist/server.d.ts +8 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +99 -10
- package/dist/spaces/blob.d.ts +51 -0
- package/dist/spaces/blob.d.ts.map +1 -0
- package/dist/spaces/blob.js +111 -0
- package/dist/spaces/credential.d.ts +62 -0
- package/dist/spaces/credential.d.ts.map +1 -0
- package/dist/spaces/credential.js +184 -0
- package/dist/spaces/engine.d.ts +97 -0
- package/dist/spaces/engine.d.ts.map +1 -0
- package/dist/spaces/engine.js +557 -0
- package/dist/spaces/guard.d.ts +41 -0
- package/dist/spaces/guard.d.ts.map +1 -0
- package/dist/spaces/guard.js +79 -0
- package/dist/spaces/identity.d.ts +37 -0
- package/dist/spaces/identity.d.ts.map +1 -0
- package/dist/spaces/identity.js +88 -0
- package/dist/spaces/index.d.ts +55 -0
- package/dist/spaces/index.d.ts.map +1 -0
- package/dist/spaces/index.js +133 -0
- package/dist/spaces/notify.d.ts +51 -0
- package/dist/spaces/notify.d.ts.map +1 -0
- package/dist/spaces/notify.js +121 -0
- package/dist/spaces/records.d.ts +37 -0
- package/dist/spaces/records.d.ts.map +1 -0
- package/dist/spaces/records.js +63 -0
- package/dist/spaces/store.d.ts +51 -0
- package/dist/spaces/store.d.ts.map +1 -0
- package/dist/spaces/store.js +99 -0
- package/dist/spaces/uri.d.ts +60 -0
- package/dist/spaces/uri.d.ts.map +1 -0
- package/dist/spaces/uri.js +97 -0
- package/dist/spaces/verify.d.ts +39 -0
- package/dist/spaces/verify.d.ts.map +1 -0
- package/dist/spaces/verify.js +87 -0
- package/dist/spaces/viewer.d.ts +51 -0
- package/dist/spaces/viewer.d.ts.map +1 -0
- package/dist/spaces/viewer.js +167 -0
- package/dist/spaces/visibility.d.ts +57 -0
- package/dist/spaces/visibility.d.ts.map +1 -0
- package/dist/spaces/visibility.js +81 -0
- package/dist/templates/feed.tpl +4 -0
- package/dist/templates/xrpc.tpl +13 -1
- package/dist/test.d.ts +2 -0
- package/dist/test.d.ts.map +1 -1
- package/dist/test.js +8 -5
- package/dist/xrpc.d.ts +19 -3
- package/dist/xrpc.d.ts.map +1 -1
- package/dist/xrpc.js +61 -31
- package/package.json +5 -3
package/dist/adapter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAgB,MAAM,WAAW,CAAA;AAEnF;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CA0BrE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBzF;AAED,wFAAwF;AACxF,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAgB,MAAM,WAAW,CAAA;AAEnF;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CA0BrE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBzF;AAED,wFAAwF;AACxF,eAAO,MAAM,WAAW,UAmBvB,CAAA;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CACnB,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,EAChD,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,IAAI,KAAK,IAAI,6EA4BjF"}
|
package/dist/adapter.js
CHANGED
|
@@ -59,6 +59,8 @@ export async function sendResponse(res, response) {
|
|
|
59
59
|
export const HATK_ROUTES = [
|
|
60
60
|
'/xrpc/',
|
|
61
61
|
'/blob/', // dev image proxy — see blobUrl in xrpc.ts
|
|
62
|
+
'/space-blob', // a blob inside a permissioned space, served per viewer
|
|
63
|
+
'/.well-known/did.json', // this instance's own DID, for space notice delivery
|
|
62
64
|
'/oauth/',
|
|
63
65
|
'/oauth-client-metadata.json',
|
|
64
66
|
'/.well-known/oauth-authorization-server',
|
package/dist/cli.js
CHANGED
|
@@ -589,7 +589,11 @@ else if (command === 'generate') {
|
|
|
589
589
|
}
|
|
590
590
|
clientOut += ` const params = new URLSearchParams()\n`;
|
|
591
591
|
clientOut += ` for (const [k, v] of Object.entries(arg || {})) {\n`;
|
|
592
|
-
|
|
592
|
+
// An array goes out as a repeated key, the XRPC form: `?dids=a&dids=b`.
|
|
593
|
+
// Joined with commas it reaches the handler as one string.
|
|
594
|
+
clientOut += ` if (v == null) continue\n`;
|
|
595
|
+
clientOut += ` if (Array.isArray(v)) for (const item of v) params.append(k, String(item))\n`;
|
|
596
|
+
clientOut += ` else params.set(k, String(v))\n`;
|
|
593
597
|
clientOut += ` }\n`;
|
|
594
598
|
clientOut += ` const qs = params.toString()\n`;
|
|
595
599
|
clientOut += ` if (qs) path += \`?\${qs}\`\n`;
|
package/dist/config.d.ts
CHANGED
|
@@ -73,6 +73,50 @@ export interface CdnConfig {
|
|
|
73
73
|
key: string;
|
|
74
74
|
salt: string;
|
|
75
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Indexing permissioned spaces (proposal 0016).
|
|
78
|
+
*
|
|
79
|
+
* A space's records never reach a firehose, so they are read from the
|
|
80
|
+
* authority and each writer's own host instead. Doing that at all requires
|
|
81
|
+
* `oauth`: hatk is a member of nothing and borrows a signed-in member's
|
|
82
|
+
* delegation to get a credential, so with no sessions there is no way in.
|
|
83
|
+
*
|
|
84
|
+
* Absent by default. An instance that does not set this indexes nothing from a
|
|
85
|
+
* space and serves no space rows, which is what every existing deployment does
|
|
86
|
+
* today.
|
|
87
|
+
*/
|
|
88
|
+
export interface SpacesConfig {
|
|
89
|
+
/**
|
|
90
|
+
* Space type NSIDs to follow. A space of any other type is refused rather
|
|
91
|
+
* than indexed, so a lexicon vendored for reference cannot quietly become a
|
|
92
|
+
* subscription.
|
|
93
|
+
*/
|
|
94
|
+
types: string[];
|
|
95
|
+
/** Space refs to follow at boot, for the spaces an instance always wants. */
|
|
96
|
+
watch?: string[];
|
|
97
|
+
/**
|
|
98
|
+
* Seconds between reconcile sweeps. Write notices are best-effort — the
|
|
99
|
+
* reference host forwards each once and logs the failure — so the sweep is
|
|
100
|
+
* what makes sync correct rather than merely prompt.
|
|
101
|
+
*/
|
|
102
|
+
reconcileInterval?: number;
|
|
103
|
+
/**
|
|
104
|
+
* This instance's own DID, for receiving write notices — e.g.
|
|
105
|
+
* `did:web:appview.example.com`. hatk serves the matching document at
|
|
106
|
+
* `/.well-known/did.json`, so the DID has to resolve to this origin.
|
|
107
|
+
*
|
|
108
|
+
* Without it the sweep is the only thing that notices a write, which is
|
|
109
|
+
* correct but no faster than the interval. The DID publishes no signing key:
|
|
110
|
+
* notices are only ever verified here, never signed.
|
|
111
|
+
*/
|
|
112
|
+
serviceDid?: string;
|
|
113
|
+
/**
|
|
114
|
+
* The service entry notices are delivered to, named in the DID document and
|
|
115
|
+
* in every registration. Its own fragment rather than the bare DID, so a
|
|
116
|
+
* notice cannot be confused with one addressed to an account.
|
|
117
|
+
*/
|
|
118
|
+
serviceFragment?: string;
|
|
119
|
+
}
|
|
76
120
|
export interface JetstreamConfig {
|
|
77
121
|
/** Instance base URL, e.g. `wss://jetstream.us-east.bsky.network`. */
|
|
78
122
|
url: string;
|
|
@@ -109,9 +153,10 @@ export interface HatkConfig {
|
|
|
109
153
|
oauth: OAuthConfig | null;
|
|
110
154
|
push: PushConfig | null;
|
|
111
155
|
admins: string[];
|
|
156
|
+
spaces: SpacesConfig | null;
|
|
112
157
|
}
|
|
113
158
|
/** Input type for defineConfig — fields that have defaults are optional. */
|
|
114
|
-
export type HatkConfigInput = Partial<Omit<HatkConfig, 'oauth' | 'backfill' | 'push' | 'cdn' | 'jetstream'>> & {
|
|
159
|
+
export type HatkConfigInput = Partial<Omit<HatkConfig, 'oauth' | 'backfill' | 'push' | 'cdn' | 'jetstream' | 'spaces'>> & {
|
|
115
160
|
cdn?: CdnConfig | null;
|
|
116
161
|
oauth?: (Partial<OAuthConfig> & {
|
|
117
162
|
clients: OAuthClientConfig[];
|
|
@@ -119,6 +164,7 @@ export type HatkConfigInput = Partial<Omit<HatkConfig, 'oauth' | 'backfill' | 'p
|
|
|
119
164
|
backfill?: Partial<BackfillConfig>;
|
|
120
165
|
push?: PushConfig | null;
|
|
121
166
|
jetstream?: JetstreamConfig | null;
|
|
167
|
+
spaces?: SpacesConfig | null;
|
|
122
168
|
};
|
|
123
169
|
/** Identity function that provides type inference for hatk config files. */
|
|
124
170
|
export declare function defineConfig(config: HatkConfigInput): HatkConfigInput;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
|
@@ -68,6 +68,19 @@ export async function loadConfig(configPath) {
|
|
|
68
68
|
oauth: null,
|
|
69
69
|
push: parsed.push || null,
|
|
70
70
|
admins: env.ADMINS ? env.ADMINS.split(',').map((s) => s.trim()) : parsed.admins || [],
|
|
71
|
+
spaces: parsed.spaces
|
|
72
|
+
? {
|
|
73
|
+
types: parsed.spaces.types || [],
|
|
74
|
+
watch: env.SPACES_WATCH
|
|
75
|
+
? env.SPACES_WATCH.split(',')
|
|
76
|
+
.map((s) => s.trim())
|
|
77
|
+
.filter(Boolean)
|
|
78
|
+
: parsed.spaces.watch || [],
|
|
79
|
+
reconcileInterval: parseInt(env.SPACES_RECONCILE_INTERVAL || '') || parsed.spaces.reconcileInterval || 300,
|
|
80
|
+
serviceDid: env.SPACES_SERVICE_DID || parsed.spaces.serviceDid || undefined,
|
|
81
|
+
serviceFragment: parsed.spaces.serviceFragment || 'atproto_space_syncer',
|
|
82
|
+
}
|
|
83
|
+
: null,
|
|
71
84
|
};
|
|
72
85
|
const oauthRaw = parsed.oauth;
|
|
73
86
|
if (oauthRaw) {
|
package/dist/database/db.d.ts
CHANGED
|
@@ -63,6 +63,17 @@ export declare function buildInsertOp(collection: string, uri: string, cid: stri
|
|
|
63
63
|
};
|
|
64
64
|
export declare function insertRecord(collection: string, uri: string, cid: string, authorDid: string, record: Record<string, any>): Promise<void>;
|
|
65
65
|
export declare function deleteRecord(collection: string, uri: string): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Remove every row a writer holds in one space.
|
|
68
|
+
*
|
|
69
|
+
* Scoped by `(space, did)` rather than by DID alone: the same account can hold
|
|
70
|
+
* public repo records in the same collections, and a full re-read of one space
|
|
71
|
+
* must not take those with it. Child and union rows are cleared by parent URI
|
|
72
|
+
* for the same reason — `parent_did` does not say which space a row came from.
|
|
73
|
+
*/
|
|
74
|
+
export declare function purgeSpaceRecords(space: string, did: string, collections: Iterable<string>): Promise<void>;
|
|
75
|
+
/** Every writer holding rows for a space, as the index currently has it. */
|
|
76
|
+
export declare function listSpaceRecordDids(space: string, collections: Iterable<string>): Promise<string[]>;
|
|
66
77
|
export declare function insertLabels(labels: Array<{
|
|
67
78
|
src: string;
|
|
68
79
|
uri: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,aAAa,CAAA;AAC9D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAI1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"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"}
|
package/dist/database/db.js
CHANGED
|
@@ -3,6 +3,8 @@ import { getSearchColumns, stripStopWords, getSearchPort, updateFtsRecord, delet
|
|
|
3
3
|
import { emit, timer } from "../logger.js";
|
|
4
4
|
import { OAUTH_DDL } from "../oauth/db.js";
|
|
5
5
|
import { getDialect } from "./dialect.js";
|
|
6
|
+
import { collectionFromRecordUri, spaceFromUri } from "../spaces/uri.js";
|
|
7
|
+
import { spaceFilterSql } from "../spaces/visibility.js";
|
|
6
8
|
let port;
|
|
7
9
|
let dialect;
|
|
8
10
|
const schemas = new Map();
|
|
@@ -80,6 +82,33 @@ export async function initDatabase(adapter, dbPath, tableSchemas, ddlStatements)
|
|
|
80
82
|
key TEXT PRIMARY KEY,
|
|
81
83
|
value TEXT NOT NULL
|
|
82
84
|
)`);
|
|
85
|
+
// Permissioned-space sync state. `_space_watch` is one row per space this
|
|
86
|
+
// instance follows; `_space_repos` is the writer set, which is the sync
|
|
87
|
+
// boundary — a space is the aggregation of one repo per writer, each on that
|
|
88
|
+
// writer's own PDS, so progress is tracked per (space, writer) rather than
|
|
89
|
+
// per space.
|
|
90
|
+
//
|
|
91
|
+
// `reader_did` is the account whose session last minted a credential for the
|
|
92
|
+
// space. hatk is not itself a member of anything: it reads as somebody who
|
|
93
|
+
// is, so which somebody worked last is worth remembering.
|
|
94
|
+
await run(`CREATE TABLE IF NOT EXISTS _space_watch (
|
|
95
|
+
space TEXT PRIMARY KEY,
|
|
96
|
+
authority TEXT NOT NULL,
|
|
97
|
+
space_type TEXT NOT NULL,
|
|
98
|
+
reader_did TEXT,
|
|
99
|
+
registered_until TEXT,
|
|
100
|
+
last_error TEXT,
|
|
101
|
+
updated_at TEXT NOT NULL
|
|
102
|
+
)`);
|
|
103
|
+
await run(`CREATE TABLE IF NOT EXISTS _space_repos (
|
|
104
|
+
space TEXT NOT NULL,
|
|
105
|
+
did TEXT NOT NULL,
|
|
106
|
+
pds TEXT,
|
|
107
|
+
rev TEXT,
|
|
108
|
+
synced_at TEXT,
|
|
109
|
+
PRIMARY KEY (space, did)
|
|
110
|
+
)`);
|
|
111
|
+
await run(`CREATE INDEX IF NOT EXISTS idx_space_repos_space ON _space_repos(space)`);
|
|
83
112
|
// Labels table (atproto-compatible)
|
|
84
113
|
if (dialect.supportsSequences) {
|
|
85
114
|
await run(`CREATE SEQUENCE IF NOT EXISTS _labels_seq START 1`);
|
|
@@ -255,6 +284,7 @@ export async function migrateSchema(tableSchemas) {
|
|
|
255
284
|
expectedCols.set('uri', 'TEXT');
|
|
256
285
|
expectedCols.set('cid', 'TEXT');
|
|
257
286
|
expectedCols.set('did', 'TEXT');
|
|
287
|
+
expectedCols.set('space', 'TEXT');
|
|
258
288
|
expectedCols.set('indexed_at', normalizeType(dialect.timestampType));
|
|
259
289
|
for (const col of schema.columns) {
|
|
260
290
|
expectedCols.set(col.name, normalizeType(col.sqlType));
|
|
@@ -343,7 +373,10 @@ async function applyMigrationChanges(changes) {
|
|
|
343
373
|
await run(`ALTER TABLE ${quotedTable} ADD COLUMN ${quotedColumn} ${change.type}`);
|
|
344
374
|
emit('migration', 'add_column', { table: change.table, column: change.column, type: change.type });
|
|
345
375
|
const schema = schemas.get(change.table);
|
|
346
|
-
|
|
376
|
+
// `space` is indexed like a ref column but is not one: it is in the
|
|
377
|
+
// base row rather than the lexicon, so refColumns never names it, and
|
|
378
|
+
// an existing table that gains it would otherwise scan on every read.
|
|
379
|
+
if (change.column === 'space' || schema?.refColumns.includes(change.column)) {
|
|
347
380
|
await run(`CREATE INDEX IF NOT EXISTS ${indexName} ON ${quotedTable}(${quotedColumn})`);
|
|
348
381
|
}
|
|
349
382
|
break;
|
|
@@ -512,7 +545,8 @@ export async function getRecentRecords(collection, limit) {
|
|
|
512
545
|
const schema = schemas.get(collection);
|
|
513
546
|
if (!schema)
|
|
514
547
|
return [];
|
|
515
|
-
const
|
|
548
|
+
const gate = spaceFilterSql('t', 2);
|
|
549
|
+
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 AND ${gate.sql} ORDER BY t.indexed_at DESC LIMIT $1`, [limit, ...gate.params]);
|
|
516
550
|
return rows;
|
|
517
551
|
}
|
|
518
552
|
export async function getSchemaDump() {
|
|
@@ -554,10 +588,13 @@ export function buildInsertOp(collection, uri, cid, authorDid, record) {
|
|
|
554
588
|
const schema = schemas.get(collection);
|
|
555
589
|
if (!schema)
|
|
556
590
|
throw new Error(`Unknown collection: ${collection}`);
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
591
|
+
// Derived from the URI rather than passed in. A space record's URI already
|
|
592
|
+
// names its space, so reading it here means no write path can land a space
|
|
593
|
+
// row with the column left NULL — which would publish it to every reader.
|
|
594
|
+
const colNames = ['uri', 'cid', 'did', 'space', 'indexed_at'];
|
|
595
|
+
const placeholders = ['$1', '$2', '$3', '$4', '$5'];
|
|
596
|
+
const values = [uri, cid, authorDid, spaceFromUri(uri) ?? null, new Date().toISOString()];
|
|
597
|
+
let paramIdx = 6;
|
|
561
598
|
for (const col of schema.columns) {
|
|
562
599
|
let rawValue = record[col.originalName];
|
|
563
600
|
// Handle strongRef expansion: subject_uri reads record.subject.uri, subject__cid reads record.subject.cid
|
|
@@ -708,6 +745,57 @@ export async function deleteRecord(collection, uri) {
|
|
|
708
745
|
}
|
|
709
746
|
await run(`DELETE FROM ${schema.tableName} WHERE uri = $1`, [uri]);
|
|
710
747
|
}
|
|
748
|
+
/**
|
|
749
|
+
* Remove every row a writer holds in one space.
|
|
750
|
+
*
|
|
751
|
+
* Scoped by `(space, did)` rather than by DID alone: the same account can hold
|
|
752
|
+
* public repo records in the same collections, and a full re-read of one space
|
|
753
|
+
* must not take those with it. Child and union rows are cleared by parent URI
|
|
754
|
+
* for the same reason — `parent_did` does not say which space a row came from.
|
|
755
|
+
*/
|
|
756
|
+
export async function purgeSpaceRecords(space, did, collections) {
|
|
757
|
+
const CHUNK = 500;
|
|
758
|
+
for (const collection of collections) {
|
|
759
|
+
const schema = schemas.get(collection);
|
|
760
|
+
if (!schema)
|
|
761
|
+
continue;
|
|
762
|
+
const rows = await all(`SELECT uri FROM ${schema.tableName} WHERE space = $1 AND did = $2`, [
|
|
763
|
+
space,
|
|
764
|
+
did,
|
|
765
|
+
]);
|
|
766
|
+
const uris = rows.map((r) => r.uri);
|
|
767
|
+
if (uris.length === 0)
|
|
768
|
+
continue;
|
|
769
|
+
for (const uri of uris)
|
|
770
|
+
await deleteFtsRecord(collection, uri);
|
|
771
|
+
for (let i = 0; i < uris.length; i += CHUNK) {
|
|
772
|
+
const batch = uris.slice(i, i + CHUNK);
|
|
773
|
+
const placeholders = batch.map((_, j) => `$${j + 1}`).join(',');
|
|
774
|
+
for (const child of schema.children) {
|
|
775
|
+
await run(`DELETE FROM ${child.tableName} WHERE parent_uri IN (${placeholders})`, batch);
|
|
776
|
+
}
|
|
777
|
+
for (const union of schema.unions) {
|
|
778
|
+
for (const branch of union.branches) {
|
|
779
|
+
await run(`DELETE FROM ${branch.tableName} WHERE parent_uri IN (${placeholders})`, batch);
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
await run(`DELETE FROM ${schema.tableName} WHERE space = $1 AND did = $2`, [space, did]);
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
/** Every writer holding rows for a space, as the index currently has it. */
|
|
787
|
+
export async function listSpaceRecordDids(space, collections) {
|
|
788
|
+
const dids = new Set();
|
|
789
|
+
for (const collection of collections) {
|
|
790
|
+
const schema = schemas.get(collection);
|
|
791
|
+
if (!schema)
|
|
792
|
+
continue;
|
|
793
|
+
const rows = await all(`SELECT DISTINCT did FROM ${schema.tableName} WHERE space = $1`, [space]);
|
|
794
|
+
for (const row of rows)
|
|
795
|
+
dids.add(row.did);
|
|
796
|
+
}
|
|
797
|
+
return [...dids];
|
|
798
|
+
}
|
|
711
799
|
export async function insertLabels(labels) {
|
|
712
800
|
if (labels.length === 0)
|
|
713
801
|
return;
|
|
@@ -779,11 +867,12 @@ export async function bulkInsertRecords(records) {
|
|
|
779
867
|
};
|
|
780
868
|
try {
|
|
781
869
|
const stagingTable = stagingName('');
|
|
782
|
-
const allCols = ['uri', 'cid', 'did', 'indexed_at', ...schema.columns.map((c) => q(c.name))];
|
|
870
|
+
const allCols = ['uri', 'cid', 'did', 'space', 'indexed_at', ...schema.columns.map((c) => q(c.name))];
|
|
783
871
|
const colDefs = [
|
|
784
872
|
'uri TEXT',
|
|
785
873
|
'cid TEXT',
|
|
786
874
|
'did TEXT',
|
|
875
|
+
'space TEXT',
|
|
787
876
|
'indexed_at TEXT',
|
|
788
877
|
...schema.columns.map((c) => {
|
|
789
878
|
const t = c.sqlType;
|
|
@@ -797,7 +886,7 @@ export async function bulkInsertRecords(records) {
|
|
|
797
886
|
const now = new Date().toISOString();
|
|
798
887
|
for (const rec of recs) {
|
|
799
888
|
try {
|
|
800
|
-
const values = [rec.uri, rec.cid, rec.did, now];
|
|
889
|
+
const values = [rec.uri, rec.cid, rec.did, spaceFromUri(rec.uri) ?? null, now];
|
|
801
890
|
for (const col of schema.columns) {
|
|
802
891
|
values.push(resolveColumnValue(col, rec.record));
|
|
803
892
|
}
|
|
@@ -1039,6 +1128,11 @@ export async function queryRecords(collection, opts = {}) {
|
|
|
1039
1128
|
params.push(value);
|
|
1040
1129
|
}
|
|
1041
1130
|
}
|
|
1131
|
+
// Space rows are served only to a read scoped to that space; see spaces/visibility.ts.
|
|
1132
|
+
const gate = spaceFilterSql('t', paramIdx);
|
|
1133
|
+
conditions.push(gate.sql);
|
|
1134
|
+
params.push(...gate.params);
|
|
1135
|
+
paramIdx = gate.nextIdx;
|
|
1042
1136
|
let sql = `SELECT t.*, r.handle FROM ${schema.tableName} t LEFT JOIN _repos r ON t.did = r.did WHERE (r.status IS NULL OR r.status != 'takendown')`;
|
|
1043
1137
|
if (conditions.length)
|
|
1044
1138
|
sql += ' AND ' + conditions.join(' AND ');
|
|
@@ -1084,7 +1178,8 @@ export async function queryRecords(collection, opts = {}) {
|
|
|
1084
1178
|
}
|
|
1085
1179
|
export async function getRecordByUri(uri) {
|
|
1086
1180
|
for (const [_collection, schema] of schemas) {
|
|
1087
|
-
const
|
|
1181
|
+
const gate = spaceFilterSql('t', 2);
|
|
1182
|
+
const rows = await all(`SELECT t.*, r.handle FROM ${schema.tableName} t LEFT JOIN _repos r ON t.did = r.did WHERE t.uri = $1 AND ${gate.sql} AND (r.status IS NULL OR r.status != 'takendown')`, [uri, ...gate.params]);
|
|
1088
1183
|
if (rows.length > 0) {
|
|
1089
1184
|
const row = rows[0];
|
|
1090
1185
|
if (schema.children.length > 0) {
|
|
@@ -1121,7 +1216,8 @@ export async function getRecordsByUris(collection, uris) {
|
|
|
1121
1216
|
if (!schema)
|
|
1122
1217
|
return [];
|
|
1123
1218
|
const placeholders = uris.map((_, i) => `$${i + 1}`).join(',');
|
|
1124
|
-
const
|
|
1219
|
+
const gate = spaceFilterSql('t', uris.length + 1);
|
|
1220
|
+
const rows = await all(`SELECT t.*, r.handle FROM ${schema.tableName} t LEFT JOIN _repos r ON t.did = r.did WHERE t.uri IN (${placeholders}) AND ${gate.sql} AND (r.status IS NULL OR r.status != 'takendown')`, [...uris, ...gate.params]);
|
|
1125
1221
|
// Batch-fetch child rows for all URIs
|
|
1126
1222
|
const childData = new Map();
|
|
1127
1223
|
for (const child of schema.children) {
|
|
@@ -1207,10 +1303,12 @@ export async function searchRecords(collection, query, opts = {}) {
|
|
|
1207
1303
|
const scoreMap = new Map(hits.map((h) => [h.uri, h.score]));
|
|
1208
1304
|
// Fetch full records for matched URIs
|
|
1209
1305
|
const placeholders = uriList.map((_, i) => `$${i + 1}`).join(', ');
|
|
1306
|
+
const gate = spaceFilterSql('m', uriList.length + 1);
|
|
1210
1307
|
const rows = await all(`SELECT m.* FROM ${schema.tableName} m
|
|
1211
1308
|
LEFT JOIN _repos r ON m.did = r.did
|
|
1212
1309
|
WHERE m.uri IN (${placeholders})
|
|
1213
|
-
AND
|
|
1310
|
+
AND ${gate.sql}
|
|
1311
|
+
AND (r.status IS NULL OR r.status != 'takendown')`, [...uriList, ...gate.params]);
|
|
1214
1312
|
// Re-attach scores and sort
|
|
1215
1313
|
bm25Results = rows
|
|
1216
1314
|
.map((r) => ({ ...r, score: scoreMap.get(r.uri) ?? 0 }))
|
|
@@ -1245,13 +1343,19 @@ export async function searchRecords(collection, query, opts = {}) {
|
|
|
1245
1343
|
}
|
|
1246
1344
|
}
|
|
1247
1345
|
const greatestExpr = dialect.greatest(simExprs);
|
|
1346
|
+
const fuzzyGate = spaceFilterSql('t', 3);
|
|
1248
1347
|
const fuzzySQL = `SELECT t.*, ${greatestExpr} AS fuzzy_score
|
|
1249
1348
|
FROM ${schema.tableName} t LEFT JOIN _repos r ON t.did = r.did
|
|
1250
1349
|
WHERE ${greatestExpr} >= 0.8
|
|
1350
|
+
AND ${fuzzyGate.sql}
|
|
1251
1351
|
ORDER BY fuzzy_score DESC
|
|
1252
1352
|
LIMIT $2`;
|
|
1253
1353
|
try {
|
|
1254
|
-
const fuzzyRows = await all(fuzzySQL, [
|
|
1354
|
+
const fuzzyRows = await all(fuzzySQL, [
|
|
1355
|
+
query,
|
|
1356
|
+
remaining + existingUris.size,
|
|
1357
|
+
...fuzzyGate.params,
|
|
1358
|
+
]);
|
|
1255
1359
|
phasesUsed.push('fuzzy');
|
|
1256
1360
|
for (const row of fuzzyRows) {
|
|
1257
1361
|
if (bm25Results.length >= limit)
|
|
@@ -1302,9 +1406,8 @@ export async function countByField(collection, field, value) {
|
|
|
1302
1406
|
const schema = schemas.get(collection);
|
|
1303
1407
|
if (!schema)
|
|
1304
1408
|
return 0;
|
|
1305
|
-
const
|
|
1306
|
-
|
|
1307
|
-
]);
|
|
1409
|
+
const gate = spaceFilterSql('', 2);
|
|
1410
|
+
const rows = await all(`SELECT COUNT(*) as count FROM ${schema.tableName} WHERE ${field} = $1 AND ${gate.sql}`, [value, ...gate.params]);
|
|
1308
1411
|
return Number(rows[0]?.count || 0);
|
|
1309
1412
|
}
|
|
1310
1413
|
export async function countByFieldBatch(collection, field, values) {
|
|
@@ -1314,7 +1417,8 @@ export async function countByFieldBatch(collection, field, values) {
|
|
|
1314
1417
|
if (!schema)
|
|
1315
1418
|
return new Map();
|
|
1316
1419
|
const placeholders = values.map((_, i) => `$${i + 1}`).join(',');
|
|
1317
|
-
const
|
|
1420
|
+
const gate = spaceFilterSql('', values.length + 1);
|
|
1421
|
+
const rows = await all(`SELECT ${field}, COUNT(*) as count FROM ${schema.tableName} WHERE ${field} IN (${placeholders}) AND ${gate.sql} GROUP BY ${field}`, [...values, ...gate.params]);
|
|
1318
1422
|
const result = new Map();
|
|
1319
1423
|
for (const row of rows) {
|
|
1320
1424
|
result.set(row[field], Number(row.count));
|
|
@@ -1325,7 +1429,11 @@ export async function findByField(collection, field, value) {
|
|
|
1325
1429
|
const schema = schemas.get(collection);
|
|
1326
1430
|
if (!schema)
|
|
1327
1431
|
return null;
|
|
1328
|
-
const
|
|
1432
|
+
const gate = spaceFilterSql('', 2);
|
|
1433
|
+
const rows = await all(`SELECT * FROM ${schema.tableName} WHERE ${field} = $1 AND ${gate.sql} LIMIT 1`, [
|
|
1434
|
+
value,
|
|
1435
|
+
...gate.params,
|
|
1436
|
+
]);
|
|
1329
1437
|
return rows[0] || null;
|
|
1330
1438
|
}
|
|
1331
1439
|
export async function findByFieldBatch(collection, field, values) {
|
|
@@ -1335,7 +1443,8 @@ export async function findByFieldBatch(collection, field, values) {
|
|
|
1335
1443
|
if (!schema)
|
|
1336
1444
|
return new Map();
|
|
1337
1445
|
const placeholders = values.map((_, i) => `$${i + 1}`).join(',');
|
|
1338
|
-
const
|
|
1446
|
+
const gate = spaceFilterSql('t', values.length + 1);
|
|
1447
|
+
const rows = await all(`SELECT t.*, r.handle FROM ${schema.tableName} t LEFT JOIN _repos r ON t.did = r.did WHERE t.${field} IN (${placeholders}) AND ${gate.sql}`, [...values, ...gate.params]);
|
|
1339
1448
|
// Attach child data if this collection has decomposed arrays
|
|
1340
1449
|
if (schema.children.length > 0 && rows.length > 0) {
|
|
1341
1450
|
const uris = rows.map((r) => r.uri);
|
|
@@ -1375,10 +1484,11 @@ export async function findUriByFields(collection, conditions) {
|
|
|
1375
1484
|
return null;
|
|
1376
1485
|
const where = conditions.map((c, i) => `${c.field} = $${i + 1}`).join(' AND ');
|
|
1377
1486
|
const params = conditions.map((c) => c.value);
|
|
1378
|
-
const
|
|
1487
|
+
const gate = spaceFilterSql('', conditions.length + 1);
|
|
1488
|
+
const rows = await all(`SELECT uri FROM ${schema.tableName} WHERE ${where} AND ${gate.sql} LIMIT 1`, [...params, ...gate.params]);
|
|
1379
1489
|
return rows[0]?.uri || null;
|
|
1380
1490
|
}
|
|
1381
|
-
const ENVELOPE_KEYS = new Set(['uri', 'cid', 'did', 'handle', 'indexed_at']);
|
|
1491
|
+
const ENVELOPE_KEYS = new Set(['uri', 'cid', 'did', 'space', 'handle', 'indexed_at']);
|
|
1382
1492
|
const INTERNAL_KEYS = new Set(['__childData', '__unionData']);
|
|
1383
1493
|
export function normalizeValue(v) {
|
|
1384
1494
|
if (v && typeof v === 'object' && 'micros' in v)
|
|
@@ -1420,8 +1530,10 @@ function decodeColumn(col, raw) {
|
|
|
1420
1530
|
export function reshapeRow(row, childData, unionData) {
|
|
1421
1531
|
if (!row)
|
|
1422
1532
|
return null;
|
|
1423
|
-
//
|
|
1424
|
-
|
|
1533
|
+
// A space record's URI puts the collection in a different segment than a
|
|
1534
|
+
// repo record's. Reading it positionally found no schema for space rows,
|
|
1535
|
+
// which left their columns snake_cased and their JSON columns unparsed.
|
|
1536
|
+
const collection = row.uri ? collectionFromRecordUri(row.uri) : undefined;
|
|
1425
1537
|
const schema = collection ? schemas.get(collection) : null;
|
|
1426
1538
|
// Build snake→camel map and JSON column set from schema
|
|
1427
1539
|
const nameMap = new Map();
|
|
@@ -1458,6 +1570,29 @@ export function reshapeRow(row, childData, unionData) {
|
|
|
1458
1570
|
}
|
|
1459
1571
|
}
|
|
1460
1572
|
}
|
|
1573
|
+
// A strongRef is stored as two columns so the uri can be joined on, and
|
|
1574
|
+
// reads back as the object the lexicon declares: `{ uri, cid }`. The
|
|
1575
|
+
// generated type for the field says so, and a handler written against it
|
|
1576
|
+
// must find it.
|
|
1577
|
+
if (schema) {
|
|
1578
|
+
for (const col of schema.columns) {
|
|
1579
|
+
if (!col.originalName.endsWith('__cid'))
|
|
1580
|
+
continue;
|
|
1581
|
+
const field = col.originalName.slice(0, -'__cid'.length);
|
|
1582
|
+
const uri = value[field];
|
|
1583
|
+
const cid = value[col.originalName];
|
|
1584
|
+
delete value[col.originalName];
|
|
1585
|
+
if (uri == null && cid == null) {
|
|
1586
|
+
delete value[field];
|
|
1587
|
+
continue;
|
|
1588
|
+
}
|
|
1589
|
+
value[field] = { ...(uri != null ? { uri } : {}), ...(cid != null ? { cid } : {}) };
|
|
1590
|
+
}
|
|
1591
|
+
}
|
|
1592
|
+
// Only space rows carry a space, and an explicit null on every other row
|
|
1593
|
+
// would put a field on the wire that means nothing there.
|
|
1594
|
+
if (envelope.space == null)
|
|
1595
|
+
delete envelope.space;
|
|
1461
1596
|
// Reconstruct decomposed array fields from child data
|
|
1462
1597
|
if (schema && childData) {
|
|
1463
1598
|
for (const child of schema.children) {
|
package/dist/database/index.d.ts
CHANGED
|
@@ -3,5 +3,5 @@ export type { SqlDialect } from './dialect.ts';
|
|
|
3
3
|
export { getDialect, DUCKDB_DIALECT, SQLITE_DIALECT } from './dialect.ts';
|
|
4
4
|
export { createAdapter } from './adapter-factory.ts';
|
|
5
5
|
export { initDatabase, closeDatabase, querySQL, runSQL, insertRecord, deleteRecord, queryRecords, searchRecords, getRecordByUri, getCursor, setCursor, bulkInsertRecords, packCursor, unpackCursor, } from './db.ts';
|
|
6
|
-
export { type TableSchema, type ColumnDef, type ChildTableSchema, loadLexicons, discoverCollections, buildSchemas, generateTableSchema, generateCreateTableSQL, toSnakeCase, getLexicon, getLexiconArray, getAllLexicons, storeLexicons, } from './schema.ts';
|
|
6
|
+
export { type TableSchema, type ColumnDef, type ChildTableSchema, loadLexicons, discoverCollections, buildSchemas, generateTableSchema, generateCreateTableSQL, toSnakeCase, getLexicon, getLexiconArray, getAllLexicons, storeLexicons, columnName, } from './schema.ts';
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACjF,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAGpD,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,SAAS,EACT,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,YAAY,GACb,MAAM,SAAS,CAAA;AAGhB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACnB,sBAAsB,EACtB,WAAW,EACX,UAAU,EACV,eAAe,EACf,cAAc,EACd,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACjF,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAGpD,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,SAAS,EACT,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,YAAY,GACb,MAAM,SAAS,CAAA;AAGhB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACnB,sBAAsB,EACtB,WAAW,EACX,UAAU,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACb,UAAU,GACX,MAAM,aAAa,CAAA"}
|
package/dist/database/index.js
CHANGED
|
@@ -3,4 +3,4 @@ export { createAdapter } from "./adapter-factory.js";
|
|
|
3
3
|
// Re-export commonly used functions from db.ts
|
|
4
4
|
export { initDatabase, closeDatabase, querySQL, runSQL, insertRecord, deleteRecord, queryRecords, searchRecords, getRecordByUri, getCursor, setCursor, bulkInsertRecords, packCursor, unpackCursor, } from "./db.js";
|
|
5
5
|
// Re-export schema utilities
|
|
6
|
-
export { loadLexicons, discoverCollections, buildSchemas, generateTableSchema, generateCreateTableSQL, toSnakeCase, getLexicon, getLexiconArray, getAllLexicons, storeLexicons, } from "./schema.js";
|
|
6
|
+
export { loadLexicons, discoverCollections, buildSchemas, generateTableSchema, generateCreateTableSQL, toSnakeCase, getLexicon, getLexiconArray, getAllLexicons, storeLexicons, columnName, } from "./schema.js";
|
|
@@ -35,8 +35,10 @@ export interface ChildTableSchema {
|
|
|
35
35
|
columns: ColumnDef[];
|
|
36
36
|
}
|
|
37
37
|
export declare function toSnakeCase(str: string): string;
|
|
38
|
+
export declare function columnName(fieldName: string): string;
|
|
38
39
|
export declare function q(name: string): string;
|
|
39
40
|
export declare function loadLexicons(lexiconsDir: string): Map<string, any>;
|
|
41
|
+
export declare function validatableLexicons(lexicons: Map<string, any>): any[];
|
|
40
42
|
/**
|
|
41
43
|
* Discover collections by scanning lexicons for record-type definitions.
|
|
42
44
|
*/
|
|
@@ -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;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;AAGD,wBAAgB,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtC;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;AA8HD,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,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":"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"}
|