@hatk/hatk 0.0.1-alpha.21 → 0.0.1-alpha.23
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.d.ts.map +1 -1
- package/dist/backfill.js +4 -4
- package/dist/car.js +1 -1
- package/dist/cli.js +111 -54
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -0
- package/dist/database/adapter-factory.d.ts +6 -0
- package/dist/database/adapter-factory.d.ts.map +1 -0
- package/dist/database/adapter-factory.js +20 -0
- package/dist/database/adapters/duckdb-search.d.ts +12 -0
- package/dist/database/adapters/duckdb-search.d.ts.map +1 -0
- package/dist/database/adapters/duckdb-search.js +27 -0
- package/dist/database/adapters/duckdb.d.ts +25 -0
- package/dist/database/adapters/duckdb.d.ts.map +1 -0
- package/dist/database/adapters/duckdb.js +161 -0
- package/dist/database/adapters/sqlite-search.d.ts +18 -0
- package/dist/database/adapters/sqlite-search.d.ts.map +1 -0
- package/dist/database/adapters/sqlite-search.js +38 -0
- package/dist/database/adapters/sqlite.d.ts +18 -0
- package/dist/database/adapters/sqlite.d.ts.map +1 -0
- package/dist/database/adapters/sqlite.js +87 -0
- package/dist/database/db.d.ts +149 -0
- package/dist/database/db.d.ts.map +1 -0
- package/dist/database/db.js +1456 -0
- package/dist/database/dialect.d.ts +45 -0
- package/dist/database/dialect.d.ts.map +1 -0
- package/dist/database/dialect.js +72 -0
- package/dist/database/fts.d.ts +24 -0
- package/dist/database/fts.d.ts.map +1 -0
- package/dist/database/fts.js +777 -0
- package/dist/database/index.d.ts +7 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +6 -0
- package/dist/database/ports.d.ts +44 -0
- package/dist/database/ports.d.ts.map +1 -0
- package/dist/database/ports.js +1 -0
- package/dist/database/schema.d.ts +60 -0
- package/dist/database/schema.d.ts.map +1 -0
- package/dist/database/schema.js +388 -0
- package/dist/feeds.js +1 -1
- package/dist/hooks.d.ts +15 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +65 -0
- package/dist/hydrate.js +1 -1
- package/dist/indexer.d.ts +19 -0
- package/dist/indexer.d.ts.map +1 -1
- package/dist/indexer.js +34 -4
- package/dist/labels.d.ts +20 -0
- package/dist/labels.d.ts.map +1 -1
- package/dist/labels.js +50 -2
- package/dist/logger.d.ts +29 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +29 -0
- package/dist/main.js +37 -32
- package/dist/mst.d.ts +15 -0
- package/dist/mst.d.ts.map +1 -1
- package/dist/mst.js +13 -0
- package/dist/oauth/db.d.ts.map +1 -1
- package/dist/oauth/db.js +41 -15
- package/dist/oauth/server.d.ts.map +1 -1
- package/dist/oauth/server.js +11 -6
- package/dist/opengraph.js +1 -1
- package/dist/schema.d.ts +8 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +29 -0
- package/dist/seed.d.ts +19 -0
- package/dist/seed.d.ts.map +1 -1
- package/dist/seed.js +43 -4
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +12 -6
- package/dist/setup.d.ts +21 -1
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +37 -2
- package/dist/test.d.ts +1 -1
- package/dist/test.d.ts.map +1 -1
- package/dist/test.js +23 -9
- package/dist/views.js +1 -1
- package/dist/vite-plugin.d.ts.map +1 -1
- package/dist/vite-plugin.js +10 -0
- package/dist/xrpc.d.ts +23 -0
- package/dist/xrpc.d.ts.map +1 -1
- package/dist/xrpc.js +37 -2
- package/package.json +3 -1
package/dist/xrpc.js
CHANGED
|
@@ -6,12 +6,33 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
|
|
|
6
6
|
}
|
|
7
7
|
return path;
|
|
8
8
|
};
|
|
9
|
+
/**
|
|
10
|
+
* XRPC method handler system for serving AT Protocol endpoints.
|
|
11
|
+
*
|
|
12
|
+
* Place handler modules in the `xrpc/` directory, nested by NSID segments
|
|
13
|
+
* (e.g. `xrpc/app/bsky/feed/getAuthorFeed.ts` → `app.bsky.feed.getAuthorFeed`).
|
|
14
|
+
* Each module default-exports a `{ handler }` function that receives an
|
|
15
|
+
* {@link XrpcContext} with database access, query params, pagination, and
|
|
16
|
+
* viewer auth.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* // xrpc/xyz/statusphere/getStatuses.ts
|
|
21
|
+
* import { defineXrpc } from '../../hatk.generated.ts'
|
|
22
|
+
*
|
|
23
|
+
* export default defineXrpc('xyz.statusphere.getStatuses', async (ctx) => {
|
|
24
|
+
* const rows = await ctx.db.query('SELECT * FROM statusphere_status LIMIT ?', [ctx.limit])
|
|
25
|
+
* return { statuses: rows }
|
|
26
|
+
* })
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
9
29
|
import { resolve, relative } from 'node:path';
|
|
10
30
|
import { readdirSync, statSync } from 'node:fs';
|
|
11
31
|
import { log } from "./logger.js";
|
|
12
|
-
import { querySQL, runSQL, packCursor, unpackCursor, isTakendownDid, filterTakendownDids, searchRecords, findUriByFields, lookupByFieldBatch, countByFieldBatch, queryLabelsForUris, } from "./db.js";
|
|
32
|
+
import { querySQL, runSQL, packCursor, unpackCursor, isTakendownDid, filterTakendownDids, searchRecords, findUriByFields, lookupByFieldBatch, countByFieldBatch, queryLabelsForUris, } from "./database/db.js";
|
|
13
33
|
import { resolveRecords } from "./hydrate.js";
|
|
14
|
-
import { getLexicon } from "./schema.js";
|
|
34
|
+
import { getLexicon } from "./database/schema.js";
|
|
35
|
+
/** Thrown from XRPC handlers to return a 400 response with an error message. */
|
|
15
36
|
export class InvalidRequestError extends Error {
|
|
16
37
|
status = 400;
|
|
17
38
|
errorName;
|
|
@@ -20,6 +41,7 @@ export class InvalidRequestError extends Error {
|
|
|
20
41
|
this.errorName = errorName;
|
|
21
42
|
}
|
|
22
43
|
}
|
|
44
|
+
/** Thrown from XRPC handlers to return a 404 response. */
|
|
23
45
|
export class NotFoundError extends InvalidRequestError {
|
|
24
46
|
status = 404;
|
|
25
47
|
constructor(message = 'Not found') {
|
|
@@ -27,9 +49,14 @@ export class NotFoundError extends InvalidRequestError {
|
|
|
27
49
|
}
|
|
28
50
|
}
|
|
29
51
|
let _relayUrl = '';
|
|
52
|
+
/** Set the relay URL used for blob URL generation. Called once during boot. */
|
|
30
53
|
export function configureRelay(relay) {
|
|
31
54
|
_relayUrl = relay;
|
|
32
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Generate a CDN URL for a blob ref. Uses the PDS directly in local dev,
|
|
58
|
+
* or the Bluesky CDN (`cdn.bsky.app`) in production.
|
|
59
|
+
*/
|
|
33
60
|
export function blobUrl(did, ref, preset = 'avatar') {
|
|
34
61
|
if (!ref)
|
|
35
62
|
return undefined;
|
|
@@ -42,6 +69,7 @@ export function blobUrl(did, ref, preset = 'avatar') {
|
|
|
42
69
|
return `https://cdn.bsky.app/img/${preset}/plain/${did}/${p.ref.$link}@jpeg`;
|
|
43
70
|
}
|
|
44
71
|
const handlers = new Map();
|
|
72
|
+
/** Recursively collect .ts/.js files in a directory, skipping files prefixed with `_`. */
|
|
45
73
|
function walkDir(dir) {
|
|
46
74
|
const results = [];
|
|
47
75
|
try {
|
|
@@ -58,6 +86,11 @@ function walkDir(dir) {
|
|
|
58
86
|
catch { }
|
|
59
87
|
return results.sort();
|
|
60
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* Discover and load XRPC handler modules from the `xrpc/` directory.
|
|
91
|
+
* Directory nesting maps to NSID segments. Parameters are validated and
|
|
92
|
+
* coerced against the matching lexicon definition.
|
|
93
|
+
*/
|
|
61
94
|
export async function initXrpc(xrpcDir) {
|
|
62
95
|
const files = walkDir(xrpcDir);
|
|
63
96
|
if (files.length === 0)
|
|
@@ -128,12 +161,14 @@ export async function initXrpc(xrpcDir) {
|
|
|
128
161
|
log(`[xrpc] discovered: ${name}`);
|
|
129
162
|
}
|
|
130
163
|
}
|
|
164
|
+
/** Execute a registered XRPC handler by name. Returns null if no handler matches. */
|
|
131
165
|
export async function executeXrpc(name, params, cursor, limit, viewer, input) {
|
|
132
166
|
const handler = handlers.get(name);
|
|
133
167
|
if (!handler)
|
|
134
168
|
return null;
|
|
135
169
|
return handler.execute(params, cursor, limit, viewer || null, input);
|
|
136
170
|
}
|
|
171
|
+
/** Return all registered XRPC method names. */
|
|
137
172
|
export function listXrpc() {
|
|
138
173
|
return Array.from(handlers.keys());
|
|
139
174
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hatk/hatk",
|
|
3
|
-
"version": "0.0.1-alpha.
|
|
3
|
+
"version": "0.0.1-alpha.23",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"bin": {
|
|
6
6
|
"hatk": "dist/cli.js"
|
|
@@ -35,12 +35,14 @@
|
|
|
35
35
|
"@duckdb/node-api": "^1.4.4-r.1",
|
|
36
36
|
"@hatk/oauth-client": "*",
|
|
37
37
|
"@resvg/resvg-js": "^2.6.2",
|
|
38
|
+
"better-sqlite3": "^12.6.2",
|
|
38
39
|
"satori": "^0.19.2",
|
|
39
40
|
"vitest": "^4",
|
|
40
41
|
"yaml": "^2.7.0"
|
|
41
42
|
},
|
|
42
43
|
"devDependencies": {
|
|
43
44
|
"@playwright/test": "^1.58.2",
|
|
45
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
44
46
|
"@types/react": "^19.2.14",
|
|
45
47
|
"vite": "^6"
|
|
46
48
|
}
|