@hatk/hatk 0.0.1-alpha.39 → 0.0.1-alpha.40
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/backfill.js +1 -1
- package/dist/cli.js +4 -4
- package/dist/database/db.d.ts +3 -3
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +0 -1
- package/dist/feeds.d.ts +8 -8
- package/dist/feeds.d.ts.map +1 -1
- package/dist/feeds.js +3 -3
- package/dist/hydrate.d.ts +6 -5
- package/dist/hydrate.d.ts.map +1 -1
- package/dist/hydrate.js +2 -3
- package/dist/labels.js +3 -3
- package/dist/main.js +1 -1
- package/dist/oauth/db.js +2 -2
- package/dist/opengraph.d.ts.map +1 -1
- package/dist/opengraph.js +3 -69
- package/dist/xrpc.d.ts +9 -12
- package/dist/xrpc.d.ts.map +1 -1
- package/dist/xrpc.js +27 -70
- package/package.json +1 -1
package/dist/backfill.js
CHANGED
|
@@ -424,7 +424,7 @@ export async function runBackfill(opts) {
|
|
|
424
424
|
retryRound++;
|
|
425
425
|
// Wait until the earliest retry_after has passed
|
|
426
426
|
const now = Math.floor(Date.now() / 1000);
|
|
427
|
-
const rows = await querySQL(`SELECT MIN(retry_after) as earliest FROM _repos WHERE status = 'failed' AND retry_after > $1 AND retry_count < $2`, [now, maxRetries]);
|
|
427
|
+
const rows = (await querySQL(`SELECT MIN(retry_after) as earliest FROM _repos WHERE status = 'failed' AND retry_after > $1 AND retry_count < $2`, [now, maxRetries]));
|
|
428
428
|
const earliest = rows[0]?.earliest ? Number(rows[0].earliest) : 0;
|
|
429
429
|
if (earliest > now) {
|
|
430
430
|
await new Promise((resolve) => setTimeout(resolve, (earliest - now) * 1000));
|
package/dist/cli.js
CHANGED
|
@@ -1304,7 +1304,7 @@ else if (command === 'generate') {
|
|
|
1304
1304
|
out += `import type { ${[...usedWrappers].sort().join(', ')}, LexServerParams, Checked, Prettify, StrictArg } from '@hatk/hatk/lex-types'\n`;
|
|
1305
1305
|
out += `import type { XrpcContext } from '@hatk/hatk/xrpc'\n`;
|
|
1306
1306
|
out += `import { callXrpc as _callXrpc } from '@hatk/hatk/xrpc'\n`;
|
|
1307
|
-
out += `import { defineFeed as _defineFeed, type FeedResult, type FeedContext, type
|
|
1307
|
+
out += `import { defineFeed as _defineFeed, type FeedResult, type FeedContext, type BaseContext, type Row } from '@hatk/hatk/feeds'\n`;
|
|
1308
1308
|
out += `import { seed as _seed, type SeedOpts } from '@hatk/hatk/seed'\n`;
|
|
1309
1309
|
// Emit ALL lexicons as `const ... = {...} as const` (including defs-only)
|
|
1310
1310
|
out += `\n// ─── Lexicon Definitions ────────────────────────────────────────────\n\n`;
|
|
@@ -1460,7 +1460,7 @@ else if (command === 'generate') {
|
|
|
1460
1460
|
out += `}\n`;
|
|
1461
1461
|
// Emit Ctx helper for typesafe XRPC handler contexts
|
|
1462
1462
|
out += `\n// ─── XRPC Helpers ───────────────────────────────────────────────────\n\n`;
|
|
1463
|
-
out += `export type {
|
|
1463
|
+
out += `export type { BaseContext, Row } from '@hatk/hatk/feeds'\n`;
|
|
1464
1464
|
out += `export { InvalidRequestError, NotFoundError } from '@hatk/hatk/xrpc'\n`;
|
|
1465
1465
|
out += `export { defineSetup } from '@hatk/hatk/setup'\n`;
|
|
1466
1466
|
out += `export { defineHook } from '@hatk/hatk/hooks'\n`;
|
|
@@ -1498,10 +1498,10 @@ else if (command === 'generate') {
|
|
|
1498
1498
|
out += `// ─── Feed & Seed Helpers ────────────────────────────────────────────\n\n`;
|
|
1499
1499
|
out += `type FeedGenerate = (ctx: FeedContext & { ok: (value: FeedResult) => Checked<FeedResult> }) => Promise<Checked<FeedResult>>\n`;
|
|
1500
1500
|
out += `export function defineFeed<K extends keyof RecordRegistry>(\n`;
|
|
1501
|
-
out += ` opts: { collection: K; view?: string; label: string; generate: FeedGenerate; hydrate?: (ctx:
|
|
1501
|
+
out += ` opts: { collection: K; view?: string; label: string; generate: FeedGenerate; hydrate?: (ctx: BaseContext, items: Row<RecordRegistry[K]>[]) => Promise<unknown[]> }\n`;
|
|
1502
1502
|
out += `): ReturnType<typeof _defineFeed>\n`;
|
|
1503
1503
|
out += `export function defineFeed(\n`;
|
|
1504
|
-
out += ` opts: { collection?: never; view?: never; label: string; generate: FeedGenerate; hydrate: (ctx:
|
|
1504
|
+
out += ` opts: { collection?: never; view?: never; label: string; generate: FeedGenerate; hydrate: (ctx: BaseContext, items: Row<unknown>[]) => Promise<unknown[]> }\n`;
|
|
1505
1505
|
out += `): ReturnType<typeof _defineFeed>\n`;
|
|
1506
1506
|
out += `export function defineFeed(opts: any) { return _defineFeed(opts) }\n`;
|
|
1507
1507
|
out += `export function seed(opts?: SeedOpts) { return _seed<RecordRegistry>(opts) }\n`;
|
package/dist/database/db.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export declare function getSqlDialect(): SqlDialect;
|
|
|
7
7
|
export declare function closeDatabase(): void;
|
|
8
8
|
export declare function runBatch(operations: Array<{
|
|
9
9
|
sql: string;
|
|
10
|
-
params:
|
|
10
|
+
params: unknown[];
|
|
11
11
|
}>): Promise<void>;
|
|
12
12
|
export declare function initDatabase(adapter: DatabasePort, dbPath: string, tableSchemas: TableSchema[], ddlStatements: string[]): Promise<void>;
|
|
13
13
|
interface MigrationChange {
|
|
@@ -123,8 +123,8 @@ export declare function searchRecords(collection: string, query: string, opts?:
|
|
|
123
123
|
records: any[];
|
|
124
124
|
cursor?: string;
|
|
125
125
|
}>;
|
|
126
|
-
export declare function querySQL(sql: string, params?:
|
|
127
|
-
export declare function runSQL(sql: string, params?:
|
|
126
|
+
export declare function querySQL(sql: string, params?: unknown[]): Promise<unknown[]>;
|
|
127
|
+
export declare function runSQL(sql: string, params?: unknown[]): Promise<void>;
|
|
128
128
|
export declare function createBulkInserterSQL(table: string, columns: string[], options?: {
|
|
129
129
|
onConflict?: 'ignore' | 'replace';
|
|
130
130
|
batchSize?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAe,MAAM,aAAa,CAAA;AAC3D,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;AAM1D,wBAAgB,eAAe,IAAI,YAAY,CAE9C;AACD,wBAAgB,aAAa,IAAI,UAAU,CAE1C;AAED,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAMD,wBAAsB,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,
|
|
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
package/dist/feeds.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { BaseContext, Row } from './hydrate.ts';
|
|
2
2
|
import type { Checked } from './lex-types.ts';
|
|
3
|
-
export type {
|
|
3
|
+
export type { BaseContext, Row };
|
|
4
4
|
export interface FeedResult {
|
|
5
5
|
uris: string[];
|
|
6
6
|
cursor?: string;
|
|
@@ -16,7 +16,7 @@ export interface PaginateResult<T> {
|
|
|
16
16
|
}
|
|
17
17
|
export interface FeedContext {
|
|
18
18
|
db: {
|
|
19
|
-
query: (sql: string, params?:
|
|
19
|
+
query: (sql: string, params?: unknown[]) => Promise<unknown[]>;
|
|
20
20
|
};
|
|
21
21
|
params: Record<string, string>;
|
|
22
22
|
cursor?: string;
|
|
@@ -43,17 +43,17 @@ type FeedOpts = {
|
|
|
43
43
|
view?: string;
|
|
44
44
|
label: string;
|
|
45
45
|
generate: FeedGenerate;
|
|
46
|
-
hydrate?: (ctx:
|
|
46
|
+
hydrate?: (ctx: BaseContext, items: Row<any>[]) => Promise<unknown[]>;
|
|
47
47
|
} | {
|
|
48
48
|
collection?: never;
|
|
49
49
|
view?: never;
|
|
50
50
|
label: string;
|
|
51
51
|
generate: FeedGenerate;
|
|
52
|
-
hydrate: (ctx:
|
|
52
|
+
hydrate: (ctx: BaseContext, items: Row<any>[]) => Promise<unknown[]>;
|
|
53
53
|
};
|
|
54
54
|
export declare function createPaginate(deps: {
|
|
55
55
|
db: {
|
|
56
|
-
query: (sql: string, params?:
|
|
56
|
+
query: (sql: string, params?: unknown[]) => Promise<unknown[]>;
|
|
57
57
|
};
|
|
58
58
|
cursor?: string;
|
|
59
59
|
limit: number;
|
|
@@ -70,14 +70,14 @@ export declare function defineFeed(opts: FeedOpts): {
|
|
|
70
70
|
collection: string;
|
|
71
71
|
view?: string;
|
|
72
72
|
label: string;
|
|
73
|
-
hydrate?: (ctx:
|
|
73
|
+
hydrate?: (ctx: BaseContext, items: Row<any>[]) => Promise<unknown[]>;
|
|
74
74
|
__type: "feed";
|
|
75
75
|
} | {
|
|
76
76
|
generate: (ctx: any) => Promise<Checked<FeedResult>>;
|
|
77
77
|
collection?: never;
|
|
78
78
|
view?: never;
|
|
79
79
|
label: string;
|
|
80
|
-
hydrate: (ctx:
|
|
80
|
+
hydrate: (ctx: BaseContext, items: Row<any>[]) => Promise<unknown[]>;
|
|
81
81
|
__type: "feed";
|
|
82
82
|
};
|
|
83
83
|
/** Register a single feed from a scanned server/ module. */
|
package/dist/feeds.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feeds.d.ts","sourceRoot":"","sources":["../src/feeds.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"feeds.d.ts","sourceRoot":"","sources":["../src/feeds.ts"],"names":[],"mappings":"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"}
|
package/dist/feeds.js
CHANGED
|
@@ -10,7 +10,7 @@ import { resolve } from 'node:path';
|
|
|
10
10
|
import { readdirSync } from 'node:fs';
|
|
11
11
|
import { log } from "./logger.js";
|
|
12
12
|
import { querySQL, packCursor, unpackCursor, isTakendownDid, filterTakendownDids } from "./database/db.js";
|
|
13
|
-
import { resolveRecords,
|
|
13
|
+
import { resolveRecords, buildBaseContext } from "./hydrate.js";
|
|
14
14
|
export function createPaginate(deps) {
|
|
15
15
|
return async (sql, opts) => {
|
|
16
16
|
const { db, cursor, limit, packCursor: pack, unpackCursor: unpack } = deps;
|
|
@@ -169,8 +169,8 @@ export async function executeFeed(name, params, cursor, limit, viewer) {
|
|
|
169
169
|
const result = await handler.generate(params, cursor, limit, viewer || null);
|
|
170
170
|
if (handler.hydrate) {
|
|
171
171
|
const items = await resolveRecords(result.uris);
|
|
172
|
-
const ctx =
|
|
173
|
-
const hydrated = await handler.hydrate(ctx);
|
|
172
|
+
const ctx = buildBaseContext(viewer || null);
|
|
173
|
+
const hydrated = await handler.hydrate(ctx, items);
|
|
174
174
|
return { items: hydrated, cursor: result.cursor };
|
|
175
175
|
}
|
|
176
176
|
return { uris: result.uris, cursor: result.cursor };
|
package/dist/hydrate.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Row } from './lex-types.ts';
|
|
2
2
|
export type { Row };
|
|
3
|
-
export interface
|
|
4
|
-
items: Row<T>[];
|
|
3
|
+
export interface BaseContext {
|
|
5
4
|
viewer: {
|
|
6
5
|
did: string;
|
|
6
|
+
handle?: string;
|
|
7
7
|
} | null;
|
|
8
8
|
db: {
|
|
9
9
|
query: (sql: string, params?: unknown[]) => Promise<unknown[]>;
|
|
@@ -16,8 +16,9 @@ export interface HydrateContext<T = unknown> {
|
|
|
16
16
|
}
|
|
17
17
|
/** Fetch records for URIs, reshape them, and filter out taken-down DIDs. */
|
|
18
18
|
export declare function resolveRecords(uris: string[]): Promise<Row<unknown>[]>;
|
|
19
|
-
/** Build a
|
|
20
|
-
export declare function
|
|
19
|
+
/** Build a BaseContext for hydration. */
|
|
20
|
+
export declare function buildBaseContext(viewer: {
|
|
21
21
|
did: string;
|
|
22
|
-
|
|
22
|
+
handle?: string;
|
|
23
|
+
} | null): BaseContext;
|
|
23
24
|
//# sourceMappingURL=hydrate.d.ts.map
|
package/dist/hydrate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydrate.d.ts","sourceRoot":"","sources":["../src/hydrate.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAEzC,YAAY,EAAE,GAAG,EAAE,CAAA;AAInB,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"hydrate.d.ts","sourceRoot":"","sources":["../src/hydrate.ts"],"names":[],"mappings":"AAWA,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;QAAE,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;KAAE,CAAA;IACtE,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,CACP,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,OAAO,EACZ,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,gBAAgB,GAAG,eAAe,KAC9D,MAAM,GAAG,SAAS,CAAA;CACxB;AAID,4EAA4E;AAC5E,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAoC5E;AAID,yCAAyC;AACzC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,WAAW,CAkB7F"}
|
package/dist/hydrate.js
CHANGED
|
@@ -39,10 +39,9 @@ export async function resolveRecords(uris) {
|
|
|
39
39
|
.filter((r) => r != null);
|
|
40
40
|
}
|
|
41
41
|
// --- Context Builder ---
|
|
42
|
-
/** Build a
|
|
43
|
-
export function
|
|
42
|
+
/** Build a BaseContext for hydration. */
|
|
43
|
+
export function buildBaseContext(viewer) {
|
|
44
44
|
return {
|
|
45
|
-
items,
|
|
46
45
|
viewer,
|
|
47
46
|
db: { query: querySQL },
|
|
48
47
|
getRecords: getRecordsMap,
|
package/dist/labels.js
CHANGED
|
@@ -129,14 +129,14 @@ export async function runLabelRules(record) {
|
|
|
129
129
|
* @returns Count of records scanned and new labels applied
|
|
130
130
|
*/
|
|
131
131
|
export async function rescanLabels(collections) {
|
|
132
|
-
const beforeRows = await querySQL(`SELECT COUNT(*) as count FROM _labels`);
|
|
132
|
+
const beforeRows = (await querySQL(`SELECT COUNT(*) as count FROM _labels`));
|
|
133
133
|
const beforeCount = Number(beforeRows[0]?.count || 0);
|
|
134
134
|
let scanned = 0;
|
|
135
135
|
for (const collection of collections) {
|
|
136
136
|
const schema = getSchema(collection);
|
|
137
137
|
if (!schema)
|
|
138
138
|
continue;
|
|
139
|
-
const rows = await querySQL(`SELECT * FROM ${schema.tableName}`);
|
|
139
|
+
const rows = (await querySQL(`SELECT * FROM ${schema.tableName}`));
|
|
140
140
|
for (const row of rows) {
|
|
141
141
|
scanned++;
|
|
142
142
|
const value = {};
|
|
@@ -161,7 +161,7 @@ export async function rescanLabels(collections) {
|
|
|
161
161
|
});
|
|
162
162
|
}
|
|
163
163
|
}
|
|
164
|
-
const afterRows = await querySQL(`SELECT COUNT(*) as count FROM _labels`);
|
|
164
|
+
const afterRows = (await querySQL(`SELECT COUNT(*) as count FROM _labels`));
|
|
165
165
|
const afterCount = Number(afterRows[0]?.count || 0);
|
|
166
166
|
return { scanned, labeled: afterCount - beforeCount };
|
|
167
167
|
}
|
package/dist/main.js
CHANGED
|
@@ -123,7 +123,7 @@ try {
|
|
|
123
123
|
catch { }
|
|
124
124
|
// Detect orphaned tables
|
|
125
125
|
try {
|
|
126
|
-
const existingTables = await querySQL(getSqlDialect().listTablesQuery);
|
|
126
|
+
const existingTables = (await querySQL(getSqlDialect().listTablesQuery));
|
|
127
127
|
for (const row of existingTables) {
|
|
128
128
|
const tableName = row.table_name;
|
|
129
129
|
const isChildTable = collections.some((c) => tableName.startsWith(c + '__'));
|
package/dist/oauth/db.js
CHANGED
|
@@ -62,7 +62,7 @@ CREATE TABLE IF NOT EXISTS _oauth_dpop_jtis (
|
|
|
62
62
|
`;
|
|
63
63
|
// --- Key Management ---
|
|
64
64
|
export async function getServerKey(kid) {
|
|
65
|
-
const rows = await querySQL('SELECT private_key, public_key FROM _oauth_keys WHERE kid = $1', [kid]);
|
|
65
|
+
const rows = (await querySQL('SELECT private_key, public_key FROM _oauth_keys WHERE kid = $1', [kid]));
|
|
66
66
|
if (rows.length === 0)
|
|
67
67
|
return null;
|
|
68
68
|
return { privateKey: rows[0].private_key, publicKey: rows[0].public_key };
|
|
@@ -114,7 +114,7 @@ export async function storeAuthCode(code, requestUri) {
|
|
|
114
114
|
]);
|
|
115
115
|
}
|
|
116
116
|
export async function consumeAuthCode(code) {
|
|
117
|
-
const rows = await querySQL('SELECT request_uri FROM _oauth_codes WHERE code = $1', [code]);
|
|
117
|
+
const rows = (await querySQL('SELECT request_uri FROM _oauth_codes WHERE code = $1', [code]));
|
|
118
118
|
if (rows.length === 0)
|
|
119
119
|
return null;
|
|
120
120
|
await runSQL('DELETE FROM _oauth_codes WHERE code = $1', [code]);
|
package/dist/opengraph.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opengraph.d.ts","sourceRoot":"","sources":["../src/opengraph.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"opengraph.d.ts","sourceRoot":"","sources":["../src/opengraph.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,4CAA4C;AAC5C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE;QACL,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAC3B,QAAQ,CAAC,EAAE,CAAC,UAAU,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,CAAA;QAC3C,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KACnB,CAAA;CACF;AAED,uDAAuD;AACvD,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CACpD;AAED,qDAAqD;AACrD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,UAAU,CAAA;IACnB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE,CAAA;IAC5D,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAChD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,eAAe,CAAC;;;oBAA7C,gBAAgB,KAAK,OAAO,CAAC,eAAe,CAAC;EAEnG;AAkCD,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuEhE;AAED,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAA;CAC9D,GAAG,IAAI,CAmDP;AAED,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+BrF;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAyC3E"}
|
package/dist/opengraph.js
CHANGED
|
@@ -22,9 +22,7 @@ async function getResvg() {
|
|
|
22
22
|
_Resvg = (await import('@resvg/resvg-js')).Resvg;
|
|
23
23
|
return _Resvg;
|
|
24
24
|
}
|
|
25
|
-
import {
|
|
26
|
-
import { resolveRecords } from "./hydrate.js";
|
|
27
|
-
import { blobUrl } from "./xrpc.js";
|
|
25
|
+
import { buildXrpcContext } from "./xrpc.js";
|
|
28
26
|
export function defineOG(path, generate) {
|
|
29
27
|
return { __type: 'og', path, generate };
|
|
30
28
|
}
|
|
@@ -78,39 +76,7 @@ export async function initOpengraph(ogDir) {
|
|
|
78
76
|
pattern,
|
|
79
77
|
paramNames,
|
|
80
78
|
execute: async (params) => {
|
|
81
|
-
const ctx =
|
|
82
|
-
db: { query: querySQL, run: runSQL },
|
|
83
|
-
params,
|
|
84
|
-
input: {},
|
|
85
|
-
limit: 1,
|
|
86
|
-
viewer: null,
|
|
87
|
-
packCursor,
|
|
88
|
-
unpackCursor,
|
|
89
|
-
isTakendown: isTakendownDid,
|
|
90
|
-
filterTakendownDids,
|
|
91
|
-
search: searchRecords,
|
|
92
|
-
resolve: resolveRecords,
|
|
93
|
-
getRecords: getRecordsMap,
|
|
94
|
-
lookup: async (collection, field, values) => {
|
|
95
|
-
if (values.length === 0)
|
|
96
|
-
return new Map();
|
|
97
|
-
const unique = [...new Set(values.filter(Boolean))];
|
|
98
|
-
return lookupByFieldBatch(collection, field, unique);
|
|
99
|
-
},
|
|
100
|
-
count: async (collection, field, values) => {
|
|
101
|
-
if (values.length === 0)
|
|
102
|
-
return new Map();
|
|
103
|
-
const unique = [...new Set(values.filter(Boolean))];
|
|
104
|
-
return countByFieldBatch(collection, field, unique);
|
|
105
|
-
},
|
|
106
|
-
exists: async (collection, filters) => {
|
|
107
|
-
const conditions = Object.entries(filters).map(([field, value]) => ({ field, value }));
|
|
108
|
-
const uri = await findUriByFields(collection, conditions);
|
|
109
|
-
return uri !== null;
|
|
110
|
-
},
|
|
111
|
-
labels: queryLabelsForUris,
|
|
112
|
-
blobUrl,
|
|
113
|
-
};
|
|
79
|
+
const ctx = buildXrpcContext(params, undefined, 1, null);
|
|
114
80
|
ctx.fetchImage = async (url) => {
|
|
115
81
|
try {
|
|
116
82
|
const resp = await fetch(url, { redirect: 'follow' });
|
|
@@ -163,39 +129,7 @@ export function registerOgHandler(ogMod) {
|
|
|
163
129
|
pattern,
|
|
164
130
|
paramNames,
|
|
165
131
|
execute: async (params) => {
|
|
166
|
-
const ctx =
|
|
167
|
-
db: { query: querySQL, run: runSQL },
|
|
168
|
-
params,
|
|
169
|
-
input: {},
|
|
170
|
-
limit: 1,
|
|
171
|
-
viewer: null,
|
|
172
|
-
packCursor,
|
|
173
|
-
unpackCursor,
|
|
174
|
-
isTakendown: isTakendownDid,
|
|
175
|
-
filterTakendownDids,
|
|
176
|
-
search: searchRecords,
|
|
177
|
-
resolve: resolveRecords,
|
|
178
|
-
getRecords: getRecordsMap,
|
|
179
|
-
lookup: async (collection, field, values) => {
|
|
180
|
-
if (values.length === 0)
|
|
181
|
-
return new Map();
|
|
182
|
-
const unique = [...new Set(values.filter(Boolean))];
|
|
183
|
-
return lookupByFieldBatch(collection, field, unique);
|
|
184
|
-
},
|
|
185
|
-
count: async (collection, field, values) => {
|
|
186
|
-
if (values.length === 0)
|
|
187
|
-
return new Map();
|
|
188
|
-
const unique = [...new Set(values.filter(Boolean))];
|
|
189
|
-
return countByFieldBatch(collection, field, unique);
|
|
190
|
-
},
|
|
191
|
-
exists: async (collection, filters) => {
|
|
192
|
-
const conditions = Object.entries(filters).map(([field, value]) => ({ field, value }));
|
|
193
|
-
const uri = await findUriByFields(collection, conditions);
|
|
194
|
-
return uri !== null;
|
|
195
|
-
},
|
|
196
|
-
labels: queryLabelsForUris,
|
|
197
|
-
blobUrl,
|
|
198
|
-
};
|
|
132
|
+
const ctx = buildXrpcContext(params, undefined, 1, null);
|
|
199
133
|
ctx.fetchImage = async (url) => {
|
|
200
134
|
try {
|
|
201
135
|
const resp = await fetch(url, { redirect: 'follow' });
|
package/dist/xrpc.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { BaseContext } from './hydrate.ts';
|
|
1
2
|
import type { Row, FlatRow } from './lex-types.ts';
|
|
2
3
|
export type { Row, FlatRow };
|
|
3
4
|
/** Thrown from XRPC handlers to return a 400 response with an error message. */
|
|
@@ -20,19 +21,15 @@ export declare class NotFoundError extends InvalidRequestError {
|
|
|
20
21
|
* @typeParam Records - Map of collection NSID → record type (from generated types)
|
|
21
22
|
* @typeParam I - Input body type for procedure calls
|
|
22
23
|
*/
|
|
23
|
-
export interface XrpcContext<P = Record<string, string>, Records extends Record<string, any> = Record<string, any>, I = unknown> {
|
|
24
|
+
export interface XrpcContext<P = Record<string, string>, Records extends Record<string, any> = Record<string, any>, I = unknown> extends BaseContext {
|
|
24
25
|
db: {
|
|
25
|
-
query: (sql: string, params?:
|
|
26
|
-
run: (sql: string,
|
|
26
|
+
query: (sql: string, params?: unknown[]) => Promise<unknown[]>;
|
|
27
|
+
run: (sql: string, params?: unknown[]) => Promise<void>;
|
|
27
28
|
};
|
|
28
29
|
params: P;
|
|
29
30
|
input: I;
|
|
30
31
|
cursor?: string;
|
|
31
32
|
limit: number;
|
|
32
|
-
viewer: {
|
|
33
|
-
did: string;
|
|
34
|
-
handle?: string;
|
|
35
|
-
} | null;
|
|
36
33
|
packCursor: (primary: string | number, cid: string) => string;
|
|
37
34
|
unpackCursor: (cursor: string) => {
|
|
38
35
|
primary: string;
|
|
@@ -49,12 +46,7 @@ export interface XrpcContext<P = Record<string, string>, Records extends Record<
|
|
|
49
46
|
cursor?: string;
|
|
50
47
|
}>;
|
|
51
48
|
resolve: <R = unknown>(uris: string[]) => Promise<Row<R>[]>;
|
|
52
|
-
getRecords: <R = unknown>(collection: string, uris: string[]) => Promise<Map<string, Row<R>>>;
|
|
53
|
-
lookup: <R = any>(collection: string, field: string, values: string[]) => Promise<Map<string, Row<R>>>;
|
|
54
|
-
count: (collection: string, field: string, values: string[]) => Promise<Map<string, number>>;
|
|
55
49
|
exists: (collection: string, filters: Record<string, string>) => Promise<boolean>;
|
|
56
|
-
labels: (uris: string[]) => Promise<Map<string, any[]>>;
|
|
57
|
-
blobUrl: (did: string, ref: unknown, preset?: 'avatar' | 'banner' | 'feed_thumbnail' | 'feed_fullsize') => string | undefined;
|
|
58
50
|
}
|
|
59
51
|
/** Set the relay URL used for blob URL generation. Called once during boot. */
|
|
60
52
|
export declare function configureRelay(relay: string): void;
|
|
@@ -63,6 +55,11 @@ export declare function configureRelay(relay: string): void;
|
|
|
63
55
|
* or the Bluesky CDN (`cdn.bsky.app`) in production.
|
|
64
56
|
*/
|
|
65
57
|
export declare function blobUrl(did: string, ref: unknown, preset?: 'avatar' | 'banner' | 'feed_thumbnail' | 'feed_fullsize'): string | undefined;
|
|
58
|
+
/** Build a full XrpcContext from request parameters. Reuses buildBaseContext for shared fields. */
|
|
59
|
+
export declare function buildXrpcContext(params: Record<string, string>, cursor: string | undefined, limit: number, viewer: {
|
|
60
|
+
did: string;
|
|
61
|
+
handle?: string;
|
|
62
|
+
} | null, input?: unknown): XrpcContext;
|
|
66
63
|
/**
|
|
67
64
|
* Discover and load XRPC handler modules from the `xrpc/` directory.
|
|
68
65
|
* Directory nesting maps to NSID segments. Parameters are validated and
|
package/dist/xrpc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xrpc.d.ts","sourceRoot":"","sources":["../src/xrpc.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"xrpc.d.ts","sourceRoot":"","sources":["../src/xrpc.ts"],"names":[],"mappings":"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"}
|
package/dist/xrpc.js
CHANGED
|
@@ -29,8 +29,8 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
|
|
|
29
29
|
import { resolve, relative } from 'node:path';
|
|
30
30
|
import { readdirSync, statSync } from 'node:fs';
|
|
31
31
|
import { log, emit, timer } from "./logger.js";
|
|
32
|
-
import { querySQL, runSQL, packCursor, unpackCursor, isTakendownDid, filterTakendownDids, searchRecords, findUriByFields,
|
|
33
|
-
import { resolveRecords } from "./hydrate.js";
|
|
32
|
+
import { querySQL, runSQL, packCursor, unpackCursor, isTakendownDid, filterTakendownDids, searchRecords, findUriByFields, } from "./database/db.js";
|
|
33
|
+
import { resolveRecords, buildBaseContext } from "./hydrate.js";
|
|
34
34
|
import { getLexicon } from "./database/schema.js";
|
|
35
35
|
/** Thrown from XRPC handlers to return a 400 response with an error message. */
|
|
36
36
|
export class InvalidRequestError extends Error {
|
|
@@ -68,6 +68,29 @@ export function blobUrl(did, ref, preset = 'avatar') {
|
|
|
68
68
|
}
|
|
69
69
|
return `https://cdn.bsky.app/img/${preset}/plain/${did}/${p.ref.$link}@jpeg`;
|
|
70
70
|
}
|
|
71
|
+
/** Build a full XrpcContext from request parameters. Reuses buildBaseContext for shared fields. */
|
|
72
|
+
export function buildXrpcContext(params, cursor, limit, viewer, input) {
|
|
73
|
+
const base = buildBaseContext(viewer);
|
|
74
|
+
return {
|
|
75
|
+
...base,
|
|
76
|
+
db: { query: querySQL, run: runSQL },
|
|
77
|
+
params,
|
|
78
|
+
input: input || {},
|
|
79
|
+
cursor,
|
|
80
|
+
limit,
|
|
81
|
+
packCursor,
|
|
82
|
+
unpackCursor,
|
|
83
|
+
isTakendown: isTakendownDid,
|
|
84
|
+
filterTakendownDids,
|
|
85
|
+
search: searchRecords,
|
|
86
|
+
resolve: resolveRecords,
|
|
87
|
+
exists: async (collection, filters) => {
|
|
88
|
+
const conditions = Object.entries(filters).map(([field, value]) => ({ field, value }));
|
|
89
|
+
const uri = await findUriByFields(collection, conditions);
|
|
90
|
+
return uri !== null;
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
71
94
|
const handlers = new Map();
|
|
72
95
|
/** Recursively collect .ts/.js files in a directory, skipping files prefixed with `_`. */
|
|
73
96
|
function walkDir(dir) {
|
|
@@ -122,40 +145,7 @@ export async function initXrpc(xrpcDir) {
|
|
|
122
145
|
throw new InvalidRequestError(`Missing required parameter: ${param}`, 'InvalidRequest');
|
|
123
146
|
}
|
|
124
147
|
}
|
|
125
|
-
const ctx =
|
|
126
|
-
db: { query: querySQL, run: runSQL },
|
|
127
|
-
params,
|
|
128
|
-
input: input || {},
|
|
129
|
-
cursor,
|
|
130
|
-
limit,
|
|
131
|
-
viewer,
|
|
132
|
-
packCursor,
|
|
133
|
-
unpackCursor,
|
|
134
|
-
isTakendown: isTakendownDid,
|
|
135
|
-
filterTakendownDids,
|
|
136
|
-
search: searchRecords,
|
|
137
|
-
resolve: resolveRecords,
|
|
138
|
-
getRecords: getRecordsMap,
|
|
139
|
-
lookup: async (collection, field, values) => {
|
|
140
|
-
if (values.length === 0)
|
|
141
|
-
return new Map();
|
|
142
|
-
const unique = [...new Set(values.filter(Boolean))];
|
|
143
|
-
return lookupByFieldBatch(collection, field, unique);
|
|
144
|
-
},
|
|
145
|
-
count: async (collection, field, values) => {
|
|
146
|
-
if (values.length === 0)
|
|
147
|
-
return new Map();
|
|
148
|
-
const unique = [...new Set(values.filter(Boolean))];
|
|
149
|
-
return countByFieldBatch(collection, field, unique);
|
|
150
|
-
},
|
|
151
|
-
exists: async (collection, filters) => {
|
|
152
|
-
const conditions = Object.entries(filters).map(([field, value]) => ({ field, value }));
|
|
153
|
-
const uri = await findUriByFields(collection, conditions);
|
|
154
|
-
return uri !== null;
|
|
155
|
-
},
|
|
156
|
-
labels: queryLabelsForUris,
|
|
157
|
-
blobUrl,
|
|
158
|
-
};
|
|
148
|
+
const ctx = buildXrpcContext(params, cursor, limit, viewer, input);
|
|
159
149
|
return handler.handler(ctx);
|
|
160
150
|
},
|
|
161
151
|
});
|
|
@@ -184,40 +174,7 @@ export function registerXrpcHandler(nsid, handlerModule) {
|
|
|
184
174
|
throw new InvalidRequestError(`Missing required parameter: ${param}`, 'InvalidRequest');
|
|
185
175
|
}
|
|
186
176
|
}
|
|
187
|
-
const ctx =
|
|
188
|
-
db: { query: querySQL, run: runSQL },
|
|
189
|
-
params,
|
|
190
|
-
input: input || {},
|
|
191
|
-
cursor,
|
|
192
|
-
limit,
|
|
193
|
-
viewer,
|
|
194
|
-
packCursor,
|
|
195
|
-
unpackCursor,
|
|
196
|
-
isTakendown: isTakendownDid,
|
|
197
|
-
filterTakendownDids,
|
|
198
|
-
search: searchRecords,
|
|
199
|
-
resolve: resolveRecords,
|
|
200
|
-
getRecords: getRecordsMap,
|
|
201
|
-
lookup: async (collection, field, values) => {
|
|
202
|
-
if (values.length === 0)
|
|
203
|
-
return new Map();
|
|
204
|
-
const unique = [...new Set(values.filter(Boolean))];
|
|
205
|
-
return lookupByFieldBatch(collection, field, unique);
|
|
206
|
-
},
|
|
207
|
-
count: async (collection, field, values) => {
|
|
208
|
-
if (values.length === 0)
|
|
209
|
-
return new Map();
|
|
210
|
-
const unique = [...new Set(values.filter(Boolean))];
|
|
211
|
-
return countByFieldBatch(collection, field, unique);
|
|
212
|
-
},
|
|
213
|
-
exists: async (collection, filters) => {
|
|
214
|
-
const conditions = Object.entries(filters).map(([field, value]) => ({ field, value }));
|
|
215
|
-
const uri = await findUriByFields(collection, conditions);
|
|
216
|
-
return uri !== null;
|
|
217
|
-
},
|
|
218
|
-
labels: queryLabelsForUris,
|
|
219
|
-
blobUrl,
|
|
220
|
-
};
|
|
177
|
+
const ctx = buildXrpcContext(params, cursor, limit, viewer, input);
|
|
221
178
|
return handlerModule.handler(ctx);
|
|
222
179
|
},
|
|
223
180
|
});
|