@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.
Files changed (84) hide show
  1. package/dist/backfill.d.ts.map +1 -1
  2. package/dist/backfill.js +4 -4
  3. package/dist/car.js +1 -1
  4. package/dist/cli.js +111 -54
  5. package/dist/config.d.ts +1 -0
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +1 -0
  8. package/dist/database/adapter-factory.d.ts +6 -0
  9. package/dist/database/adapter-factory.d.ts.map +1 -0
  10. package/dist/database/adapter-factory.js +20 -0
  11. package/dist/database/adapters/duckdb-search.d.ts +12 -0
  12. package/dist/database/adapters/duckdb-search.d.ts.map +1 -0
  13. package/dist/database/adapters/duckdb-search.js +27 -0
  14. package/dist/database/adapters/duckdb.d.ts +25 -0
  15. package/dist/database/adapters/duckdb.d.ts.map +1 -0
  16. package/dist/database/adapters/duckdb.js +161 -0
  17. package/dist/database/adapters/sqlite-search.d.ts +18 -0
  18. package/dist/database/adapters/sqlite-search.d.ts.map +1 -0
  19. package/dist/database/adapters/sqlite-search.js +38 -0
  20. package/dist/database/adapters/sqlite.d.ts +18 -0
  21. package/dist/database/adapters/sqlite.d.ts.map +1 -0
  22. package/dist/database/adapters/sqlite.js +87 -0
  23. package/dist/database/db.d.ts +149 -0
  24. package/dist/database/db.d.ts.map +1 -0
  25. package/dist/database/db.js +1456 -0
  26. package/dist/database/dialect.d.ts +45 -0
  27. package/dist/database/dialect.d.ts.map +1 -0
  28. package/dist/database/dialect.js +72 -0
  29. package/dist/database/fts.d.ts +24 -0
  30. package/dist/database/fts.d.ts.map +1 -0
  31. package/dist/database/fts.js +777 -0
  32. package/dist/database/index.d.ts +7 -0
  33. package/dist/database/index.d.ts.map +1 -0
  34. package/dist/database/index.js +6 -0
  35. package/dist/database/ports.d.ts +44 -0
  36. package/dist/database/ports.d.ts.map +1 -0
  37. package/dist/database/ports.js +1 -0
  38. package/dist/database/schema.d.ts +60 -0
  39. package/dist/database/schema.d.ts.map +1 -0
  40. package/dist/database/schema.js +388 -0
  41. package/dist/feeds.js +1 -1
  42. package/dist/hooks.d.ts +15 -0
  43. package/dist/hooks.d.ts.map +1 -0
  44. package/dist/hooks.js +65 -0
  45. package/dist/hydrate.js +1 -1
  46. package/dist/indexer.d.ts +19 -0
  47. package/dist/indexer.d.ts.map +1 -1
  48. package/dist/indexer.js +34 -4
  49. package/dist/labels.d.ts +20 -0
  50. package/dist/labels.d.ts.map +1 -1
  51. package/dist/labels.js +50 -2
  52. package/dist/logger.d.ts +29 -0
  53. package/dist/logger.d.ts.map +1 -1
  54. package/dist/logger.js +29 -0
  55. package/dist/main.js +37 -32
  56. package/dist/mst.d.ts +15 -0
  57. package/dist/mst.d.ts.map +1 -1
  58. package/dist/mst.js +13 -0
  59. package/dist/oauth/db.d.ts.map +1 -1
  60. package/dist/oauth/db.js +41 -15
  61. package/dist/oauth/server.d.ts.map +1 -1
  62. package/dist/oauth/server.js +11 -6
  63. package/dist/opengraph.js +1 -1
  64. package/dist/schema.d.ts +8 -0
  65. package/dist/schema.d.ts.map +1 -1
  66. package/dist/schema.js +29 -0
  67. package/dist/seed.d.ts +19 -0
  68. package/dist/seed.d.ts.map +1 -1
  69. package/dist/seed.js +43 -4
  70. package/dist/server.d.ts.map +1 -1
  71. package/dist/server.js +12 -6
  72. package/dist/setup.d.ts +21 -1
  73. package/dist/setup.d.ts.map +1 -1
  74. package/dist/setup.js +37 -2
  75. package/dist/test.d.ts +1 -1
  76. package/dist/test.d.ts.map +1 -1
  77. package/dist/test.js +23 -9
  78. package/dist/views.js +1 -1
  79. package/dist/vite-plugin.d.ts.map +1 -1
  80. package/dist/vite-plugin.js +10 -0
  81. package/dist/xrpc.d.ts +23 -0
  82. package/dist/xrpc.d.ts.map +1 -1
  83. package/dist/xrpc.js +37 -2
  84. 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.21",
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
  }