@hatk/hatk 0.0.1-alpha.85 → 0.0.1-alpha.86
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/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 +552 -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/database/schema.js
CHANGED
|
@@ -5,6 +5,18 @@ import { DUCKDB_DIALECT } from "./dialect.js";
|
|
|
5
5
|
export function toSnakeCase(str) {
|
|
6
6
|
return str.replace(/([A-Z])/g, '_$1').toLowerCase();
|
|
7
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* The columns every generated table carries before any lexicon field. A record
|
|
10
|
+
* property with one of these names — `fyi.opensocial.space` has a `uri` — would
|
|
11
|
+
* otherwise produce a CREATE TABLE with a duplicate column and fail at boot.
|
|
12
|
+
* It is stored under `record_<name>` instead; `originalName` still carries the
|
|
13
|
+
* lexicon's spelling, which is what every reshaped row is keyed by.
|
|
14
|
+
*/
|
|
15
|
+
const ENVELOPE_COLUMNS = new Set(['uri', 'cid', 'did', 'space', 'indexed_at', 'handle']);
|
|
16
|
+
export function columnName(fieldName) {
|
|
17
|
+
const snake = toSnakeCase(fieldName);
|
|
18
|
+
return ENVELOPE_COLUMNS.has(snake) ? `record_${snake}` : snake;
|
|
19
|
+
}
|
|
8
20
|
// Quote a column name to avoid conflicts with SQL reserved words
|
|
9
21
|
export function q(name) {
|
|
10
22
|
return `"${name}"`;
|
|
@@ -68,6 +80,20 @@ export function loadLexicons(lexiconsDir) {
|
|
|
68
80
|
}
|
|
69
81
|
return lexicons;
|
|
70
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Lexicons the validator cannot model but hatk legitimately keeps.
|
|
85
|
+
*
|
|
86
|
+
* A space type is how the indexer learns which collections a space holds, and
|
|
87
|
+
* a permission set is what an OAuth scope resolves through; both are real
|
|
88
|
+
* lexicons an app vendors on purpose. `validateLexicons` reports each as an
|
|
89
|
+
* unknown definition type, which would read as a fatal schema error at boot.
|
|
90
|
+
* Only these two are set aside — anything else unknown is still a mistake the
|
|
91
|
+
* validator should refuse.
|
|
92
|
+
*/
|
|
93
|
+
const UNMODELLED_DEF_TYPES = new Set(['space', 'permission-set']);
|
|
94
|
+
export function validatableLexicons(lexicons) {
|
|
95
|
+
return [...lexicons.values()].filter((lex) => !UNMODELLED_DEF_TYPES.has(lex.defs?.main?.type));
|
|
96
|
+
}
|
|
71
97
|
/**
|
|
72
98
|
* Discover collections by scanning lexicons for record-type definitions.
|
|
73
99
|
*/
|
|
@@ -234,7 +260,7 @@ export function generateTableSchema(nsid, lexicon, lexicons, dialect = DUCKDB_DI
|
|
|
234
260
|
}
|
|
235
261
|
// Still add the JSON column for the raw union value
|
|
236
262
|
columns.push({
|
|
237
|
-
name:
|
|
263
|
+
name: columnName(fieldName),
|
|
238
264
|
originalName: fieldName,
|
|
239
265
|
sqlType: dialect.jsonType,
|
|
240
266
|
notNull: required.has(fieldName),
|
|
@@ -292,7 +318,7 @@ export function generateTableSchema(nsid, lexicon, lexicons, dialect = DUCKDB_DI
|
|
|
292
318
|
}
|
|
293
319
|
else {
|
|
294
320
|
columns.push({
|
|
295
|
-
name:
|
|
321
|
+
name: columnName(fieldName),
|
|
296
322
|
originalName: fieldName,
|
|
297
323
|
sqlType,
|
|
298
324
|
notNull: required.has(fieldName),
|
|
@@ -313,10 +339,16 @@ export function generateTableSchema(nsid, lexicon, lexicons, dialect = DUCKDB_DI
|
|
|
313
339
|
}
|
|
314
340
|
// Generate CREATE TABLE SQL from a TableSchema
|
|
315
341
|
export function generateCreateTableSQL(schema, dialect = DUCKDB_DIALECT) {
|
|
342
|
+
// `space` is the permissioned space a row came from, and NULL for everything
|
|
343
|
+
// off the firehose. It is the only per-row visibility marker in the schema:
|
|
344
|
+
// a space record is readable by whoever the space's authority admits, so no
|
|
345
|
+
// read may serve one without knowing who is asking. NULL means "public repo
|
|
346
|
+
// data", which is what every existing row is.
|
|
316
347
|
const lines = [
|
|
317
348
|
' uri TEXT PRIMARY KEY',
|
|
318
349
|
' cid TEXT',
|
|
319
350
|
' did TEXT NOT NULL',
|
|
351
|
+
' space TEXT',
|
|
320
352
|
` indexed_at ${dialect.timestampType} NOT NULL`,
|
|
321
353
|
];
|
|
322
354
|
for (const col of schema.columns) {
|
|
@@ -328,6 +360,9 @@ export function generateCreateTableSQL(schema, dialect = DUCKDB_DIALECT) {
|
|
|
328
360
|
const indexes = [
|
|
329
361
|
`CREATE INDEX IF NOT EXISTS idx_${prefix}_indexed ON ${schema.tableName}(indexed_at DESC);`,
|
|
330
362
|
`CREATE INDEX IF NOT EXISTS idx_${prefix}_author ON ${schema.tableName}(did);`,
|
|
363
|
+
// Every read that serves space rows filters on this column, and every read
|
|
364
|
+
// that does not still tests it for NULL.
|
|
365
|
+
`CREATE INDEX IF NOT EXISTS idx_${prefix}_space ON ${schema.tableName}(space);`,
|
|
331
366
|
];
|
|
332
367
|
// Index ref columns for hydration lookups
|
|
333
368
|
for (const refCol of schema.refColumns) {
|
|
@@ -386,11 +421,13 @@ export function buildSchemas(lexicons, collections, dialect = DUCKDB_DIALECT) {
|
|
|
386
421
|
uri TEXT PRIMARY KEY,
|
|
387
422
|
cid TEXT,
|
|
388
423
|
did TEXT NOT NULL,
|
|
424
|
+
space TEXT,
|
|
389
425
|
indexed_at ${dialect.timestampType} NOT NULL,
|
|
390
426
|
data ${dialect.jsonType}
|
|
391
427
|
);
|
|
392
428
|
CREATE INDEX IF NOT EXISTS idx_${nsid.replace(/\./g, '_')}_indexed ON "${nsid}"(indexed_at DESC);
|
|
393
|
-
CREATE INDEX IF NOT EXISTS idx_${nsid.replace(/\./g, '_')}_author ON "${nsid}"(did)
|
|
429
|
+
CREATE INDEX IF NOT EXISTS idx_${nsid.replace(/\./g, '_')}_author ON "${nsid}"(did);
|
|
430
|
+
CREATE INDEX IF NOT EXISTS idx_${nsid.replace(/\./g, '_')}_space ON "${nsid}"(space);`;
|
|
394
431
|
schemas.push({ collection: nsid, tableName: `"${nsid}"`, columns: [], refColumns: [], children: [], unions: [] });
|
|
395
432
|
ddlStatements.push(genericDDL);
|
|
396
433
|
continue;
|
package/dist/dev-entry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-entry.d.ts","sourceRoot":"","sources":["../src/dev-entry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dev-entry.d.ts","sourceRoot":"","sources":["../src/dev-entry.ts"],"names":[],"mappings":"AA+HA,eAAO,MAAM,OAAO,yCAKlB,CAAA;AAEF,yEAAyE;AACzE,wBAAsB,YAAY,kBAEjC;AAED,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA"}
|
package/dist/dev-entry.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Boots hatk infrastructure and exports the fetch handler.
|
|
4
4
|
*/
|
|
5
5
|
import { loadConfig } from "./config.js";
|
|
6
|
-
import { loadLexicons, storeLexicons, discoverCollections, buildSchemas } from "./database/schema.js";
|
|
6
|
+
import { validatableLexicons, loadLexicons, storeLexicons, discoverCollections, buildSchemas, } from "./database/schema.js";
|
|
7
7
|
import { discoverViews } from "./views.js";
|
|
8
8
|
import { initDatabase, migrateSchema, getSchemaDump } from "./database/db.js";
|
|
9
9
|
import { createAdapter } from "./database/adapter-factory.js";
|
|
@@ -32,7 +32,7 @@ configureRelay(config.relay);
|
|
|
32
32
|
configurePlc(config.plc);
|
|
33
33
|
configureCdn(config.cdn);
|
|
34
34
|
const lexicons = loadLexicons(resolve(configDir, 'lexicons'));
|
|
35
|
-
const lexiconErrors = validateLexicons(
|
|
35
|
+
const lexiconErrors = validateLexicons(validatableLexicons(lexicons));
|
|
36
36
|
if (lexiconErrors) {
|
|
37
37
|
for (const [nsid, errors] of Object.entries(lexiconErrors)) {
|
|
38
38
|
for (const err of errors)
|
package/dist/feeds.d.ts
CHANGED
|
@@ -17,6 +17,8 @@ export interface PaginateResult<T> {
|
|
|
17
17
|
export interface FeedContext {
|
|
18
18
|
db: {
|
|
19
19
|
query: (sql: string, params?: unknown[]) => Promise<unknown[]>;
|
|
20
|
+
/** Raw SQL with the permissioned-space guard off. See `spaces/guard.ts`. */
|
|
21
|
+
unfiltered: (sql: string, params?: unknown[]) => Promise<unknown[]>;
|
|
20
22
|
};
|
|
21
23
|
params: Record<string, string>;
|
|
22
24
|
cursor?: string;
|
|
@@ -34,6 +36,18 @@ export interface FeedContext {
|
|
|
34
36
|
paginate: <T extends {
|
|
35
37
|
uri: string;
|
|
36
38
|
}>(sql: string, opts?: PaginateOpts) => Promise<PaginateResult<T>>;
|
|
39
|
+
/**
|
|
40
|
+
* The permissioned-space gate, for SQL this feed builds without `paginate`.
|
|
41
|
+
*
|
|
42
|
+
* `paginate` applies it already. This is for a feed that runs its own query
|
|
43
|
+
* — a raw `ctx.db.query` over a record table has to carry it, or it serves
|
|
44
|
+
* space rows to whoever asks. See `spaceFilterSql`.
|
|
45
|
+
*/
|
|
46
|
+
spaceFilter: (alias: string, startIdx: number) => {
|
|
47
|
+
sql: string;
|
|
48
|
+
params: string[];
|
|
49
|
+
nextIdx: number;
|
|
50
|
+
};
|
|
37
51
|
}
|
|
38
52
|
type FeedGenerate = (ctx: FeedContext & {
|
|
39
53
|
ok: (value: FeedResult) => Checked<FeedResult>;
|
package/dist/feeds.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feeds.d.ts","sourceRoot":"","sources":["../src/feeds.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"feeds.d.ts","sourceRoot":"","sources":["../src/feeds.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAE7C,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,CAAA;AAEhC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,IAAI,EAAE,CAAC,EAAE,CAAA;IACT,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE;QACF,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;QAC9D,4EAA4E;QAC5E,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;KACpE,CAAA;IACD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAC9B,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IAC7D,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACzE,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9C,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IAC7D,QAAQ,EAAE,CAAC,CAAC,SAAS;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;IACrG;;;;;;OAMG;IACH,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CACrG;AAkBD,KAAK,YAAY,GAAG,CAClB,GAAG,EAAE,WAAW,GAAG;IAAE,EAAE,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;CAAE,KAClE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA;AAEjC,KAAK,QAAQ,GACT;IACE,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,YAAY,CAAA;IACtB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;CACtE,GACD;IACE,UAAU,CAAC,EAAE,KAAK,CAAA;IAClB,IAAI,CAAC,EAAE,KAAK,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,YAAY,CAAA;IACtB,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;CACrE,CAAA;AAEL,wBAAgB,cAAc,CAAC,IAAI,EAAE;IACnC,EAAE,EAAE;QAAE,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;KAAE,CAAA;IACtE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IAC7D,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CAC1E,IACe,CAAC,SAAS;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,MAAM,EAAE,OAAO,YAAY,KAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CA4DvG;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ;oBACoB,GAAG;gBApF9C,MAAM;WACX,MAAM;WACN,MAAM;cAEH,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;;;oBAgFd,GAAG;iBA7E7C,KAAK;WACX,KAAK;WACL,MAAM;aAEJ,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;;EA0EzE;AAED,4DAA4D;AAC5D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAwCzF;AAID,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+D/D;AAED,8DAA8D;AAC9D,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAC9B,OAAO,CAAC;IAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAoBzE;AAED,wBAAgB,SAAS,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAE7D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD"}
|
package/dist/feeds.js
CHANGED
|
@@ -9,8 +9,10 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
|
|
|
9
9
|
import { resolve } from 'node:path';
|
|
10
10
|
import { readdirSync } from 'node:fs';
|
|
11
11
|
import { log } from "./logger.js";
|
|
12
|
-
import {
|
|
12
|
+
import { packCursor, unpackCursor, isTakendownDid, filterTakendownDids, resolveHandleToDid, } from "./database/db.js";
|
|
13
13
|
import { resolveRecords, buildBaseContext } from "./hydrate.js";
|
|
14
|
+
import { spaceFilterSql } from "./spaces/visibility.js";
|
|
15
|
+
import { guardedQuerySQL, unfilteredQuerySQL } from "./spaces/guard.js";
|
|
14
16
|
export function createPaginate(deps) {
|
|
15
17
|
return async (sql, opts) => {
|
|
16
18
|
const { db, cursor, limit, packCursor: pack, unpackCursor: unpack } = deps;
|
|
@@ -25,6 +27,16 @@ export function createPaginate(deps) {
|
|
|
25
27
|
const op = order === 'ASC' ? '>' : '<';
|
|
26
28
|
let paramIdx = userParams.length + 1;
|
|
27
29
|
const sqlParams = [...userParams];
|
|
30
|
+
// The permissioned-space gate, applied to whatever table the ordering
|
|
31
|
+
// names — the same table `cid` is read from. Feed SQL is hand-written and
|
|
32
|
+
// nothing can inject a predicate into a string somebody else wrote, so
|
|
33
|
+
// building it here is the only way every feed gets it without every feed
|
|
34
|
+
// author remembering to. Outside a viewer's scope it is `space IS NULL`
|
|
35
|
+
// and binds nothing, which is what it compiles to on an instance that
|
|
36
|
+
// indexes no space.
|
|
37
|
+
const gate = spaceFilterSql(prefix.replace(/\.$/, ''), paramIdx);
|
|
38
|
+
sqlParams.push(...gate.params);
|
|
39
|
+
paramIdx = gate.nextIdx;
|
|
28
40
|
// Build cursor condition
|
|
29
41
|
let cursorCondition = '';
|
|
30
42
|
if (cursor) {
|
|
@@ -35,15 +47,12 @@ export function createPaginate(deps) {
|
|
|
35
47
|
paramIdx += 3;
|
|
36
48
|
}
|
|
37
49
|
}
|
|
38
|
-
// Detect existing WHERE and append cursor condition
|
|
50
|
+
// Detect existing WHERE and append the gate and the cursor condition
|
|
39
51
|
let fullSql = sql;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
fullSql += ` WHERE ${cursorCondition}`;
|
|
46
|
-
}
|
|
52
|
+
const appended = [gate.sql, ...(cursorCondition ? [cursorCondition] : [])];
|
|
53
|
+
if (appended.length) {
|
|
54
|
+
const joiner = /\bWHERE\b/i.test(sql) ? 'AND' : 'WHERE';
|
|
55
|
+
fullSql += ` ${joiner} ${appended.join(' AND ')}`;
|
|
47
56
|
}
|
|
48
57
|
fullSql += ` ORDER BY ${orderBy} ${order}, ${cidCol} ${order} LIMIT $${paramIdx}`;
|
|
49
58
|
sqlParams.push(limit + 1);
|
|
@@ -70,14 +79,14 @@ export function registerFeed(name, generator) {
|
|
|
70
79
|
view: generator.view,
|
|
71
80
|
generate: async (params, cursor, limit, viewer) => {
|
|
72
81
|
const paginateDeps = {
|
|
73
|
-
db: { query:
|
|
82
|
+
db: { query: guardedQuerySQL, unfiltered: unfilteredQuerySQL },
|
|
74
83
|
cursor,
|
|
75
84
|
limit,
|
|
76
85
|
packCursor,
|
|
77
86
|
unpackCursor,
|
|
78
87
|
};
|
|
79
88
|
const ctx = {
|
|
80
|
-
db: { query:
|
|
89
|
+
db: { query: guardedQuerySQL, unfiltered: unfilteredQuerySQL },
|
|
81
90
|
params,
|
|
82
91
|
cursor,
|
|
83
92
|
limit,
|
|
@@ -87,6 +96,7 @@ export function registerFeed(name, generator) {
|
|
|
87
96
|
isTakendown: isTakendownDid,
|
|
88
97
|
filterTakendownDids,
|
|
89
98
|
paginate: createPaginate(paginateDeps),
|
|
99
|
+
spaceFilter: spaceFilterSql,
|
|
90
100
|
};
|
|
91
101
|
const result = await generator.generate(ctx);
|
|
92
102
|
if (Array.isArray(result)) {
|
|
@@ -123,14 +133,14 @@ export async function initFeeds(feedsDir) {
|
|
|
123
133
|
view: generator.view,
|
|
124
134
|
generate: async (params, cursor, limit, viewer) => {
|
|
125
135
|
const paginateDeps = {
|
|
126
|
-
db: { query:
|
|
136
|
+
db: { query: guardedQuerySQL, unfiltered: unfilteredQuerySQL },
|
|
127
137
|
cursor,
|
|
128
138
|
limit,
|
|
129
139
|
packCursor,
|
|
130
140
|
unpackCursor,
|
|
131
141
|
};
|
|
132
142
|
const ctx = {
|
|
133
|
-
db: { query:
|
|
143
|
+
db: { query: guardedQuerySQL, unfiltered: unfilteredQuerySQL },
|
|
134
144
|
params,
|
|
135
145
|
cursor,
|
|
136
146
|
limit,
|
|
@@ -140,6 +150,7 @@ export async function initFeeds(feedsDir) {
|
|
|
140
150
|
isTakendown: isTakendownDid,
|
|
141
151
|
filterTakendownDids,
|
|
142
152
|
paginate: createPaginate(paginateDeps),
|
|
153
|
+
spaceFilter: spaceFilterSql,
|
|
143
154
|
};
|
|
144
155
|
const result = await generator.generate(ctx);
|
|
145
156
|
if (Array.isArray(result)) {
|
package/dist/hooks.d.ts
CHANGED
|
@@ -9,6 +9,13 @@ export type OnLoginCtx = Omit<BaseContext, 'db'> & {
|
|
|
9
9
|
db: {
|
|
10
10
|
query: (sql: string, params?: unknown[]) => Promise<unknown[]>;
|
|
11
11
|
run: (sql: string, params?: unknown[]) => Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Raw SQL with the permissioned-space guard off. A hook is not serving a
|
|
14
|
+
* viewer, and discovering what a space contains — which spaces a
|
|
15
|
+
* community lists, say — is exactly a read over space rows that no scope
|
|
16
|
+
* is open for. See `spaces/guard.ts`.
|
|
17
|
+
*/
|
|
18
|
+
unfiltered: (sql: string, params?: unknown[]) => Promise<unknown[]>;
|
|
12
19
|
};
|
|
13
20
|
/** Trigger a backfill for a DID and wait for it to complete. */
|
|
14
21
|
ensureRepo: (did: string) => Promise<void>;
|
|
@@ -43,6 +50,8 @@ export type OnCommitCtx = {
|
|
|
43
50
|
db: {
|
|
44
51
|
query: (sql: string, params?: unknown[]) => Promise<unknown[]>;
|
|
45
52
|
run: (sql: string, params?: unknown[]) => Promise<void>;
|
|
53
|
+
/** Raw SQL with the permissioned-space guard off. See `spaces/guard.ts`. */
|
|
54
|
+
unfiltered: (sql: string, params?: unknown[]) => Promise<unknown[]>;
|
|
46
55
|
};
|
|
47
56
|
/** Typed record lookup (same as BaseContext). */
|
|
48
57
|
lookup: BaseContext['lookup'];
|
package/dist/hooks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAK9C,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AACjE,OAAO,EAAqC,KAAK,aAAa,EAAE,MAAM,WAAW,CAAA;AAEjF,0EAA0E;AAC1E,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG;IACjD,0CAA0C;IAC1C,GAAG,EAAE,MAAM,CAAA;IACX,gDAAgD;IAChD,EAAE,EAAE;QACF,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;QAC9D,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks.js
CHANGED
|
@@ -125,7 +125,7 @@ export async function fireOnLoginHook(did, oauthConfig) {
|
|
|
125
125
|
const hookPromise = onLoginHook({
|
|
126
126
|
...base,
|
|
127
127
|
did,
|
|
128
|
-
db: { query: base.db.query, run: runSQL },
|
|
128
|
+
db: { query: base.db.query, run: runSQL, unfiltered: base.db.unfiltered },
|
|
129
129
|
ensureRepo,
|
|
130
130
|
createRecord: async (collection, record, opts) => {
|
|
131
131
|
if (!oauthConfig)
|
|
@@ -170,7 +170,7 @@ export function fireOnCommitHooks(items) {
|
|
|
170
170
|
record: item.record,
|
|
171
171
|
repo: item.authorDid,
|
|
172
172
|
uri: item.uri,
|
|
173
|
-
db: { query: base.db.query, run: runSQL },
|
|
173
|
+
db: { query: base.db.query, run: runSQL, unfiltered: base.db.unfiltered },
|
|
174
174
|
lookup: base.lookup,
|
|
175
175
|
push,
|
|
176
176
|
})
|
package/dist/hydrate.d.ts
CHANGED
|
@@ -7,12 +7,54 @@ export interface BaseContext {
|
|
|
7
7
|
} | null;
|
|
8
8
|
db: {
|
|
9
9
|
query: (sql: string, params?: unknown[]) => Promise<unknown[]>;
|
|
10
|
+
/**
|
|
11
|
+
* Raw SQL with the permissioned-space guard off. Named so it can be found
|
|
12
|
+
* with grep: for results never served to a viewer, such as an admin
|
|
13
|
+
* rollup. See `spaces/guard.ts`.
|
|
14
|
+
*/
|
|
15
|
+
unfiltered: (sql: string, params?: unknown[]) => Promise<unknown[]>;
|
|
10
16
|
};
|
|
11
17
|
getRecords: <R = unknown>(collection: string, uris: string[]) => Promise<Map<string, Row<R>>>;
|
|
12
18
|
lookup: <R = unknown>(collection: string, field: string, values: string[]) => Promise<Map<string, Row<R>>>;
|
|
13
19
|
count: (collection: string, field: string, values: string[]) => Promise<Map<string, number>>;
|
|
14
20
|
labels: (uris: string[]) => Promise<Map<string, unknown[]>>;
|
|
15
21
|
blobUrl: (did: string, ref: unknown, preset?: string) => string | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* The permissioned-space gate, for hand-written SQL.
|
|
24
|
+
*
|
|
25
|
+
* Every helper on this context applies it already. Raw SQL through
|
|
26
|
+
* `ctx.db.query` cannot — nothing can inject a predicate into a string
|
|
27
|
+
* somebody else wrote — so a query that selects from a collection a space
|
|
28
|
+
* writes into has to apply it itself:
|
|
29
|
+
*
|
|
30
|
+
* ```ts
|
|
31
|
+
* const gate = ctx.spaceFilter('t', 2)
|
|
32
|
+
* ctx.db.query(
|
|
33
|
+
* `SELECT t.* FROM "app.example.post" t WHERE t.did = $1 AND ${gate.sql}`,
|
|
34
|
+
* ['did:plc:someone', ...gate.params],
|
|
35
|
+
* )
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* Outside a viewer's scope this is `t.space IS NULL` and binds nothing, so on
|
|
39
|
+
* an instance that indexes no space it costs one predicate on an indexed
|
|
40
|
+
* column and changes no result.
|
|
41
|
+
*/
|
|
42
|
+
spaceFilter: (alias: string, startIdx: number) => {
|
|
43
|
+
sql: string;
|
|
44
|
+
params: string[];
|
|
45
|
+
nextIdx: number;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Every record of a collection in a space the viewer may read. Empty for a
|
|
49
|
+
* space outside their scope; see `requireSpace` for the explicit refusal.
|
|
50
|
+
*/
|
|
51
|
+
spaceRecords: <R = unknown>(collection: string, space: string) => Promise<Row<R>[]>;
|
|
52
|
+
/** Every record where `field` is one of `values` — the many-rows counterpart of `lookup`. */
|
|
53
|
+
records: <R = unknown>(collection: string, field: string, values: string[]) => Promise<Row<R>[]>;
|
|
54
|
+
/** Throw `NotAuthorized` unless the viewer may read this space. */
|
|
55
|
+
requireSpace: (space: string) => void;
|
|
56
|
+
/** The URL this appview serves a space blob at, for the viewer asking. */
|
|
57
|
+
spaceBlobUrl: (space: string, repo: string, cid: string) => string;
|
|
16
58
|
}
|
|
17
59
|
/** Fetch records for URIs, reshape them, and filter out taken-down DIDs. */
|
|
18
60
|
export declare function resolveRecords(uris: string[]): Promise<Row<unknown>[]>;
|
package/dist/hydrate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydrate.d.ts","sourceRoot":"","sources":["../src/hydrate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hydrate.d.ts","sourceRoot":"","sources":["../src/hydrate.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAEzC,YAAY,EAAE,GAAG,EAAE,CAAA;AAInB,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAC/C,EAAE,EAAE;QACF,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;QAC9D;;;;WAIG;QACH,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;KACpE,CAAA;IACD,UAAU,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7F,MAAM,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1G,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAC5F,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;IAC3D,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;IAC3E;;;;;;;;;;;;;;;;;;;OAmBG;IACH,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IACpG;;;OAGG;IACH,YAAY,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IACnF,6FAA6F;IAC7F,OAAO,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAChG,mEAAmE;IACnE,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,0EAA0E;IAC1E,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;CACnE;AAID,4EAA4E;AAC5E,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAsC5E;AAID,yCAAyC;AACzC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,WAAW,CAuB7F"}
|
package/dist/hydrate.js
CHANGED
|
@@ -1,15 +1,23 @@
|
|
|
1
|
-
import { getRecordsMap, countByFieldBatch, lookupByFieldBatch,
|
|
1
|
+
import { getRecordsMap, countByFieldBatch, lookupByFieldBatch, queryLabelsForUris, filterTakendownDids, getRecordsByUris, reshapeRow, } from "./database/db.js";
|
|
2
2
|
import { blobUrl } from "./xrpc.js";
|
|
3
|
+
import { collectionFromRecordUri } from "./spaces/uri.js";
|
|
4
|
+
import { spaceFilterSql } from "./spaces/visibility.js";
|
|
5
|
+
import { guardedQuerySQL, unfilteredQuerySQL } from "./spaces/guard.js";
|
|
6
|
+
import { records, requireSpace, spaceRecords } from "./spaces/records.js";
|
|
7
|
+
import { spaceBlobUrl } from "./spaces/blob.js";
|
|
3
8
|
// --- Record Resolution ---
|
|
4
9
|
/** Fetch records for URIs, reshape them, and filter out taken-down DIDs. */
|
|
5
10
|
export async function resolveRecords(uris) {
|
|
6
11
|
if (uris.length === 0)
|
|
7
12
|
return [];
|
|
8
|
-
// Group URIs by collection for batch fetching
|
|
13
|
+
// Group URIs by collection for batch fetching. A space record's collection
|
|
14
|
+
// sits in a different segment than a repo record's, so the position is read
|
|
15
|
+
// by a parser that knows both shapes rather than inline.
|
|
9
16
|
const byCollection = new Map();
|
|
10
17
|
for (const uri of uris) {
|
|
11
|
-
const
|
|
12
|
-
|
|
18
|
+
const col = collectionFromRecordUri(uri);
|
|
19
|
+
if (!col)
|
|
20
|
+
continue;
|
|
13
21
|
if (!byCollection.has(col))
|
|
14
22
|
byCollection.set(col, []);
|
|
15
23
|
byCollection.get(col).push(uri);
|
|
@@ -43,7 +51,7 @@ export async function resolveRecords(uris) {
|
|
|
43
51
|
export function buildBaseContext(viewer) {
|
|
44
52
|
return {
|
|
45
53
|
viewer,
|
|
46
|
-
db: { query:
|
|
54
|
+
db: { query: guardedQuerySQL, unfiltered: unfilteredQuerySQL },
|
|
47
55
|
getRecords: getRecordsMap,
|
|
48
56
|
lookup: async (collection, field, values) => {
|
|
49
57
|
if (values.length === 0)
|
|
@@ -59,5 +67,10 @@ export function buildBaseContext(viewer) {
|
|
|
59
67
|
},
|
|
60
68
|
labels: queryLabelsForUris,
|
|
61
69
|
blobUrl,
|
|
70
|
+
spaceFilter: spaceFilterSql,
|
|
71
|
+
spaceRecords,
|
|
72
|
+
records,
|
|
73
|
+
requireSpace,
|
|
74
|
+
spaceBlobUrl,
|
|
62
75
|
};
|
|
63
76
|
}
|
package/dist/lex-types.d.ts
CHANGED
package/dist/lex-types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lex-types.d.ts","sourceRoot":"","sources":["../src/lex-types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lex-types.d.ts","sourceRoot":"","sources":["../src/lex-types.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,OAAO,GAAG;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEzC,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAM1C,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,IAAI;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,CAAC,CAAA;CACT,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AAElE,MAAM,MAAM,OAAO,CAAC,CAAC,GAAG,OAAO,IAAI;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GAAG,CAAC,CAAA;AAOL,OAAO,CAAC,MAAM,SAAS,EAAE,OAAO,MAAM,CAAA;AACtC,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG;IAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,CAAA;CAAE,CAAA;AAO3D,MAAM,MAAM,OAAO,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,IAAI,CAAC,SAAS;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GACtE,MAAM,GACN,CAAC,SAAS;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GAC3B,MAAM,GACN,CAAC,SAAS;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GAC3B,OAAO,GACP,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GACxB,IAAI,GACJ,CAAC,SAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACzB,MAAM,GACN,CAAC,SAAS;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GAC3B,OAAO,GACP,CAAC,SAAS;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GAC5B,UAAU,GACV,CAAC,SAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACzB,QAAQ,GACR,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GACxB,OAAO,GACP,CAAC,SAAS;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,CAAA;CAAE,GACzC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GACvB,CAAC,SAAS;IACN,IAAI,EAAE,QAAQ,CAAA;IACd,QAAQ,EAAE,MAAM,GAAG,SAAS,SAAS,MAAM,EAAE,CAAA;IAC7C,UAAU,EAAE,MAAM,KAAK,CAAA;CACxB,GACD,QAAQ,CACN;KAAG,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAAE,GAAG;KACzF,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CACvF,CACF,GACD,CAAC,SAAS;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,MAAM,KAAK,CAAA;CAAE,GACnD;KAAG,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAAE,GACrD,CAAC,SAAS;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,SAAS,MAAM,CAAA;CAAE,GACpD,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GACxB,CAAC,SAAS;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAA;CAAE,GACrD,CAAC,SAAS,MAAM,GACd,kBAAkB,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAChC,KAAK,GACP,OAAO,CAAA;AAMrC,KAAK,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS,IAAI,MAAM,GAAG,EAAE,GAC/D,IAAI,SAAS;IAAE,EAAE,EAAE,MAAM,EAAE,SAAS,MAAM,CAAA;CAAE,GAC1C,GAAG,EAAE,IAAI,GAAG,EAAE,GACd,MAAM,GACR,CAAC,CAAA;AAEL,KAAK,kBAAkB,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,IAAI,IACjD,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,MAAM,QAAQ,GAC3C,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAClC,QAAQ,CAAC;IAAE,KAAK,EAAE,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;CAAE,GAAG,QAAQ,CAAC,GACnD,OAAO,GACT,KAAK,CAAA;AAQX,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,SAAS,IAAI,MAAM,GAAG,EAAE,GAC3E,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,GACxC,GAAG,SAAS,MAAM,IAAI,CAAC,MAAM,CAAC,GAC5B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GACpC,OAAO,GACT,OAAO,GACT,CAAC,SAAS,GAAG,MAAM,IAAI,IAAI,MAAM,GAAG,EAAE,GACpC,IAAI,SAAS,MAAM,GAAG,GACpB,GAAG,CAAC,IAAI,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,GAC7C,GAAG,SAAS,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GACjC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GAC9C,OAAO,GACT,OAAO,GACT,OAAO,GACT,CAAC,SAAS,MAAM,GAAG,GACjB,GAAG,CAAC,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE,CAAA;CAAE,GAC3C,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GACzB,OAAO,GACT,OAAO,CAAA;AAMf,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,SAAS;IAC3C,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,SAAS,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,KAAK,CAAA;KAAE,CAAA;CACnF,GACG,QAAQ,CACN;KAAG,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAAE,GAAG;KACzF,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CACvF,CACF,GACD,CAAC,SAAS;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,KAAK,CAAA;KAAE,CAAA;CAAE,GAC/D;KAAG,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAAE,GACrD,CAAC,SAAS;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,SAAS,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,KAAK,CAAA;CAAE,GAClG,QAAQ,CACN;KAAG,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAAE,GAAG;KACzF,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CACvF,CACF,GACD,CAAC,SAAS;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,MAAM,KAAK,CAAA;CAAE,GACnD;KAAG,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAAE,GACrD,CAAC,SAAS;IAAE,UAAU,EAAE,MAAM,KAAK,CAAA;CAAE,GACnC;KAAG,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAAE,GACrD,OAAO,CAAA;AAOnB,KAAK,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,SAAS;IACzC,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,SAAS,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,KAAK,CAAA;KAAE,CAAA;CACnF,GACG,OAAO,CACL,QAAQ,CACN;KAAG,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAAE,GAAG;KAC9F,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAC5F,CACF,CACF,GACD,CAAC,SAAS;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,KAAK,CAAA;KAAE,CAAA;CAAE,GAC/D,OAAO,CAAC;KAAG,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAAE,CAAC,GACnE,CAAC,SAAS;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,SAAS,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,KAAK,CAAA;CAAE,GAClG,QAAQ,CACN;KAAG,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAAE,GAAG;KAC9F,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAC5F,CACF,GACD,CAAC,SAAS;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,MAAM,KAAK,CAAA;CAAE,GACnD;KAAG,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAAE,GAC1D,CAAC,SAAS;IAAE,UAAU,EAAE,MAAM,KAAK,CAAA;CAAE,GACnC;KAAG,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAAE,GAC1D,OAAO,CAAA;AAEnB,KAAK,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,SAAS,IAAI,MAAM,GAAG,EAAE,GACzE,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,GACxC,GAAG,SAAS,MAAM,IAAI,CAAC,MAAM,CAAC,GAC5B,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GACzC,OAAO,GACT,OAAO,GACT,CAAC,SAAS,GAAG,MAAM,IAAI,IAAI,MAAM,GAAG,EAAE,GACpC,IAAI,SAAS,MAAM,GAAG,GACpB,GAAG,CAAC,IAAI,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,GAC7C,GAAG,SAAS,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GACjC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GACnD,OAAO,GACT,OAAO,GACT,OAAO,GACT,CAAC,SAAS,MAAM,GAAG,GACjB,GAAG,CAAC,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE,CAAA;CAAE,GAC3C,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAC9B,OAAO,GACT,OAAO,CAAA;AAEf,KAAK,YAAY,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,IAAI,CAAC,SAAS;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GACpE,MAAM,GACN,CAAC,SAAS;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GAC3B,MAAM,GACN,CAAC,SAAS;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GAC3B,OAAO,GACP,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GACxB,IAAI,GACJ,CAAC,SAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACzB,MAAM,GACN,CAAC,SAAS;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GAC3B,OAAO,GACP,CAAC,SAAS;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GAC5B,UAAU,GACV,CAAC,SAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACzB,QAAQ,GACR,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GACxB,MAAM,GAAG,SAAS,GAClB,CAAC,SAAS;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,CAAA;CAAE,GACzC,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAC5B,CAAC,SAAS;IACN,IAAI,EAAE,QAAQ,CAAA;IACd,QAAQ,EAAE,MAAM,GAAG,SAAS,SAAS,MAAM,EAAE,CAAA;IAC7C,UAAU,EAAE,MAAM,KAAK,CAAA;CACxB,GACD,QAAQ,CACN;KACG,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAC3F,GAAG;KACD,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAC5F,CACF,GACD,CAAC,SAAS;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,MAAM,KAAK,CAAA;CAAE,GACnD;KAAG,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAAE,GAC1D,CAAC,SAAS;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,SAAS,MAAM,CAAA;CAAE,GACpD,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAC7B,CAAC,SAAS;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAA;CAAE,GACrD,CAAC,SAAS,MAAM,GACd,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAC7B,KAAK,GACP,OAAO,CAAA;AAKrC,KAAK,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,SAAS;IACvC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,SAAS,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,KAAK,CAAA;KAAE,CAAA;CACnF,GACG,QAAQ,CACN;KAAG,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAAE,GAAG;KACzF,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CACvF,CACF,GACD,CAAC,SAAS;IAAE,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,KAAK,CAAA;KAAE,CAAA;CAAE,GAC/C;KAAG,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAAE,GACrD,CAAC,SAAS;IAAE,MAAM,EAAE;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC,SAAS,MAAM,CAAA;KAAE,CAAA;CAAE,GAChE,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GACxB,OAAO,CAAA;AAEf,KAAK,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,SAAS;IAC5C,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,SAAS,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,KAAK,CAAA;KAAE,CAAA;CACnF,GACG,QAAQ,CACN;KAAG,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAAE,GAAG;KAC9F,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAC5F,CACF,GACD,CAAC,SAAS;IAAE,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,KAAK,CAAA;KAAE,CAAA;CAAE,GAC/C;KAAG,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAAE,GAC1D,CAAC,SAAS;IAAE,MAAM,EAAE;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC,SAAS,MAAM,CAAA;KAAE,CAAA;CAAE,GAChE,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAC7B,OAAO,CAAA;AAMf,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,IAAI,CAAC,SAAS;IAC7C,IAAI,EAAE;QAAE,IAAI,EAAE;YAAE,IAAI,EAAE,QAAQ,CAAC;YAAC,MAAM,EAAE;gBAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,SAAS,MAAM,EAAE,CAAC;gBAAC,UAAU,EAAE,MAAM,KAAK,CAAA;aAAE,CAAA;SAAE,CAAA;KAAE,CAAA;CACvH,GACG,QAAQ,CACN;KAAG,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;CAAE,GAAG;KACtF,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;CACpF,CACF,GACD,CAAC,SAAS;IAAE,IAAI,EAAE;QAAE,IAAI,EAAE;YAAE,IAAI,EAAE,QAAQ,CAAC;YAAC,MAAM,EAAE;gBAAE,UAAU,EAAE,MAAM,KAAK,CAAA;aAAE,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,GACnF,QAAQ,CAAC;KAAG,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;CAAE,CAAC,GAC5D,KAAK,CAAA;AAIX,MAAM,MAAM,QAAQ,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,IAAI,CAAC,SAAS;IAAE,IAAI,EAAE;QAAE,IAAI,EAAE;YAAE,IAAI,EAAE,OAAO,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,GAC/E;IACE,MAAM,EAAE,CAAC,SAAS;QAChB,IAAI,EAAE;YAAE,IAAI,EAAE;gBAAE,UAAU,EAAE;oBAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,SAAS,MAAM,EAAE,CAAC;oBAAC,UAAU,EAAE,MAAM,CAAC,CAAA;iBAAE,CAAA;aAAE,CAAA;SAAE,CAAA;KACvG,GACG,QAAQ,CAAC,qBAAqB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAC/C,CAAC,SAAS;QAAE,IAAI,EAAE;YAAE,IAAI,EAAE;gBAAE,UAAU,EAAE;oBAAE,UAAU,EAAE,MAAM,CAAC,CAAA;iBAAE,CAAA;aAAE,CAAA;SAAE,CAAA;KAAE,GACnE;SAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;KAAE,GAC1C,EAAE,CAAA;IACR,MAAM,EAAE,CAAC,SAAS;QAAE,IAAI,EAAE;YAAE,IAAI,EAAE;gBAAE,MAAM,EAAE,MAAM,CAAC,CAAA;aAAE,CAAA;SAAE,CAAA;KAAE,GAAG,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAA;CAC7F,GACD,KAAK,CAAA;AAIT,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,IAAI,CAAC,SAAS;IAAE,IAAI,EAAE;QAAE,IAAI,EAAE;YAAE,IAAI,EAAE,WAAW,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,GACvF;IACE,MAAM,EAAE,CAAC,SAAS;QAChB,IAAI,EAAE;YAAE,IAAI,EAAE;gBAAE,UAAU,EAAE;oBAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,SAAS,MAAM,EAAE,CAAC;oBAAC,UAAU,EAAE,MAAM,CAAC,CAAA;iBAAE,CAAA;aAAE,CAAA;SAAE,CAAA;KACvG,GACG,QAAQ,CAAC,qBAAqB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAC/C,CAAC,SAAS;QAAE,IAAI,EAAE;YAAE,IAAI,EAAE;gBAAE,UAAU,EAAE;oBAAE,UAAU,EAAE,MAAM,CAAC,CAAA;iBAAE,CAAA;aAAE,CAAA;SAAE,CAAA;KAAE,GACnE;SAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;KAAE,GAC1C,EAAE,CAAA;IACR,KAAK,EAAE,CAAC,SAAS;QAAE,IAAI,EAAE;YAAE,IAAI,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC,CAAA;aAAE,CAAA;SAAE,CAAA;KAAE,GAAG,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAA;IACrF,MAAM,EAAE,CAAC,SAAS;QAAE,IAAI,EAAE;YAAE,IAAI,EAAE;gBAAE,MAAM,EAAE,MAAM,CAAC,CAAA;aAAE,CAAA;SAAE,CAAA;KAAE,GAAG,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAA;CAC7F,GACD,KAAK,CAAA;AAKT,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,GAAG,SAAS,MAAM,EAAE,GAAG,GAAG,EAAE,IAAI,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,GACzF,GAAG,SAAS,MAAM,CAAC,CAAC,MAAM,CAAC,GACzB,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAC7C,KAAK,GACP,KAAK,CAAA;AAIT,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,EAAE,CAAA;AAIvD,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;AAI1E,KAAK,qBAAqB,CAAC,KAAK,EAAE,GAAG,SAAS,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,IAAI;KAC3E,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CACtF,GAAG;KAAG,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAAE,CAAA;AAG9F,KAAK,UAAU,CAAC,KAAK,IAAI;KAAG,CAAC,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS;QAAE,OAAO,EAAE,GAAG,CAAA;KAAE,GAAG,CAAC,GAAG,KAAK;CAAE,CAAC,MAAM,KAAK,CAAC,CAAA;AAC3G,MAAM,MAAM,YAAY,CAAC,KAAK,EAAE,GAAG,SAAS,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,IAAI;KACzE,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAC1G,GAAG;KAAG,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;CAAE,CAAA;AAIlH,MAAM,MAAM,eAAe,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,IAAI,CAAC,SAAS;IACnD,IAAI,EAAE;QAAE,IAAI,EAAE;YAAE,UAAU,EAAE;gBAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,SAAS,MAAM,EAAE,CAAC;gBAAC,UAAU,EAAE,MAAM,CAAC,CAAA;aAAE,CAAA;SAAE,CAAA;KAAE,CAAA;CACvG,GACG,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GACtC,CAAC,SAAS;IAAE,IAAI,EAAE;QAAE,IAAI,EAAE;YAAE,UAAU,EAAE;gBAAE,UAAU,EAAE,MAAM,CAAC,CAAA;aAAE,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,GACnE;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;CAAE,GAC1C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA"}
|
package/dist/main.js
CHANGED
|
@@ -12,7 +12,7 @@ import { dirname, resolve } from 'node:path';
|
|
|
12
12
|
import { registerHatkResolveHook } from "./resolve-hatk.js";
|
|
13
13
|
import { log } from "./logger.js";
|
|
14
14
|
import { loadConfig } from "./config.js";
|
|
15
|
-
import { loadLexicons, storeLexicons, discoverCollections, buildSchemas } from "./database/schema.js";
|
|
15
|
+
import { validatableLexicons, loadLexicons, storeLexicons, discoverCollections, buildSchemas, } from "./database/schema.js";
|
|
16
16
|
import { discoverViews } from "./views.js";
|
|
17
17
|
import { initDatabase, getCursor, querySQL, getSqlDialect, getSchemaDump, migrateSchema } from "./database/db.js";
|
|
18
18
|
import { createAdapter } from "./database/adapter-factory.js";
|
|
@@ -37,6 +37,7 @@ import { loadOnLoginHook } from "./hooks.js";
|
|
|
37
37
|
import { enabledPushTransports, initPush, isPushEnabled } from "./push.js";
|
|
38
38
|
import { initSetup } from "./setup.js";
|
|
39
39
|
import { initServer } from "./server-init.js";
|
|
40
|
+
import { startSpaces } from "./spaces/index.js";
|
|
40
41
|
const configPath = process.argv[2] || 'hatk.config.ts';
|
|
41
42
|
const configDir = dirname(resolve(configPath));
|
|
42
43
|
registerHatkResolveHook();
|
|
@@ -47,7 +48,7 @@ configurePlc(config.plc);
|
|
|
47
48
|
configureCdn(config.cdn);
|
|
48
49
|
// 2. Load lexicons, validate schemas, and discover collections
|
|
49
50
|
const lexicons = loadLexicons(resolve(configDir, 'lexicons'));
|
|
50
|
-
const lexiconErrors = validateLexicons(
|
|
51
|
+
const lexiconErrors = validateLexicons(validatableLexicons(lexicons));
|
|
51
52
|
if (lexiconErrors) {
|
|
52
53
|
for (const [nsid, errors] of Object.entries(lexiconErrors)) {
|
|
53
54
|
for (const err of errors) {
|
|
@@ -180,6 +181,18 @@ const handler = createHandler({
|
|
|
180
181
|
oauth: config.oauth,
|
|
181
182
|
admins: config.admins,
|
|
182
183
|
onResync: runBackfillAndRestart,
|
|
184
|
+
...(config.spaces?.serviceDid
|
|
185
|
+
? {
|
|
186
|
+
spaces: {
|
|
187
|
+
serviceDid: config.spaces.serviceDid,
|
|
188
|
+
serviceFragment: config.spaces.serviceFragment ?? 'atproto_space_syncer',
|
|
189
|
+
// The origin an authority delivers to. The OAuth issuer is already
|
|
190
|
+
// the public origin an operator has had to get right, so it is the
|
|
191
|
+
// honest default rather than a second thing to configure wrong.
|
|
192
|
+
...(config.oauth?.issuer ? { publicUrl: config.oauth.issuer } : {}),
|
|
193
|
+
},
|
|
194
|
+
}
|
|
195
|
+
: {}),
|
|
183
196
|
});
|
|
184
197
|
globalThis.__hatk_callXrpc = callXrpc;
|
|
185
198
|
globalThis.__hatk_parseSessionCookie = parseSessionCookie;
|
|
@@ -236,6 +249,17 @@ else {
|
|
|
236
249
|
}
|
|
237
250
|
// 7. Run backfill in background
|
|
238
251
|
runBackfillAndRestart();
|
|
252
|
+
// 8. Follow permissioned spaces, if this instance indexes any. Started after
|
|
253
|
+
// the firehose and backfill because it is neither: a space has no stream to
|
|
254
|
+
// tail, so it is a sweep on a timer rather than a source to resume.
|
|
255
|
+
if (config.spaces) {
|
|
256
|
+
startSpaces({
|
|
257
|
+
spaces: config.spaces,
|
|
258
|
+
oauth: config.oauth,
|
|
259
|
+
plc: config.plc,
|
|
260
|
+
collections: collectionSet,
|
|
261
|
+
});
|
|
262
|
+
}
|
|
239
263
|
// Graceful shutdown
|
|
240
264
|
process.on('SIGTERM', () => {
|
|
241
265
|
log('[main] Received SIGTERM, shutting down...');
|
package/dist/oauth/db.d.ts
CHANGED
|
@@ -38,6 +38,15 @@ export declare function storeSession(did: string, data: {
|
|
|
38
38
|
tokenExpiresAt?: number;
|
|
39
39
|
}): Promise<void>;
|
|
40
40
|
export declare function getSession(did: string): Promise<any | null>;
|
|
41
|
+
/**
|
|
42
|
+
* Every DID this instance holds a PDS session for, most recently refreshed
|
|
43
|
+
* first.
|
|
44
|
+
*
|
|
45
|
+
* Space indexing reads as a member rather than as itself, so this is the set of
|
|
46
|
+
* people it could borrow a delegation from. Ordered by recency because a
|
|
47
|
+
* session refreshed lately is the one most likely to still work.
|
|
48
|
+
*/
|
|
49
|
+
export declare function listSessionDids(): Promise<string[]>;
|
|
41
50
|
export declare function deleteSession(did: string): Promise<void>;
|
|
42
51
|
export declare function storeRefreshToken(token: string, data: {
|
|
43
52
|
clientId: string;
|
package/dist/oauth/db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/oauth/db.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/oauth/db.ts"],"names":[],"mappings":"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"}
|