@hatk/hatk 0.0.1-alpha.84 → 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.
Files changed (94) hide show
  1. package/dist/adapter.d.ts.map +1 -1
  2. package/dist/adapter.js +2 -0
  3. package/dist/cli.js +5 -1
  4. package/dist/config.d.ts +47 -1
  5. package/dist/config.d.ts.map +1 -1
  6. package/dist/config.js +18 -1
  7. package/dist/database/db.d.ts +11 -0
  8. package/dist/database/db.d.ts.map +1 -1
  9. package/dist/database/db.js +356 -160
  10. package/dist/database/dialect.js +2 -2
  11. package/dist/database/fts.d.ts.map +1 -1
  12. package/dist/database/fts.js +6 -2
  13. package/dist/database/index.d.ts +1 -1
  14. package/dist/database/index.d.ts.map +1 -1
  15. package/dist/database/index.js +1 -1
  16. package/dist/database/schema.d.ts +2 -0
  17. package/dist/database/schema.d.ts.map +1 -1
  18. package/dist/database/schema.js +46 -4
  19. package/dist/dev-entry.d.ts.map +1 -1
  20. package/dist/dev-entry.js +2 -2
  21. package/dist/feeds.d.ts +14 -0
  22. package/dist/feeds.d.ts.map +1 -1
  23. package/dist/feeds.js +24 -13
  24. package/dist/hooks.d.ts +17 -0
  25. package/dist/hooks.d.ts.map +1 -1
  26. package/dist/hooks.js +26 -3
  27. package/dist/hydrate.d.ts +42 -0
  28. package/dist/hydrate.d.ts.map +1 -1
  29. package/dist/hydrate.js +18 -5
  30. package/dist/indexer.d.ts +4 -3
  31. package/dist/indexer.d.ts.map +1 -1
  32. package/dist/indexer.js +81 -64
  33. package/dist/lex-types.d.ts +2 -0
  34. package/dist/lex-types.d.ts.map +1 -1
  35. package/dist/main.js +26 -2
  36. package/dist/oauth/db.d.ts +9 -0
  37. package/dist/oauth/db.d.ts.map +1 -1
  38. package/dist/oauth/db.js +12 -0
  39. package/dist/opengraph.d.ts.map +1 -1
  40. package/dist/opengraph.js +16 -4
  41. package/dist/private-collections.d.ts +7 -2
  42. package/dist/private-collections.d.ts.map +1 -1
  43. package/dist/private-collections.js +9 -4
  44. package/dist/server.d.ts +8 -0
  45. package/dist/server.d.ts.map +1 -1
  46. package/dist/server.js +167 -15
  47. package/dist/spaces/blob.d.ts +51 -0
  48. package/dist/spaces/blob.d.ts.map +1 -0
  49. package/dist/spaces/blob.js +111 -0
  50. package/dist/spaces/credential.d.ts +62 -0
  51. package/dist/spaces/credential.d.ts.map +1 -0
  52. package/dist/spaces/credential.js +184 -0
  53. package/dist/spaces/engine.d.ts +97 -0
  54. package/dist/spaces/engine.d.ts.map +1 -0
  55. package/dist/spaces/engine.js +552 -0
  56. package/dist/spaces/guard.d.ts +41 -0
  57. package/dist/spaces/guard.d.ts.map +1 -0
  58. package/dist/spaces/guard.js +79 -0
  59. package/dist/spaces/identity.d.ts +37 -0
  60. package/dist/spaces/identity.d.ts.map +1 -0
  61. package/dist/spaces/identity.js +88 -0
  62. package/dist/spaces/index.d.ts +55 -0
  63. package/dist/spaces/index.d.ts.map +1 -0
  64. package/dist/spaces/index.js +133 -0
  65. package/dist/spaces/notify.d.ts +51 -0
  66. package/dist/spaces/notify.d.ts.map +1 -0
  67. package/dist/spaces/notify.js +121 -0
  68. package/dist/spaces/records.d.ts +37 -0
  69. package/dist/spaces/records.d.ts.map +1 -0
  70. package/dist/spaces/records.js +63 -0
  71. package/dist/spaces/store.d.ts +51 -0
  72. package/dist/spaces/store.d.ts.map +1 -0
  73. package/dist/spaces/store.js +99 -0
  74. package/dist/spaces/uri.d.ts +60 -0
  75. package/dist/spaces/uri.d.ts.map +1 -0
  76. package/dist/spaces/uri.js +97 -0
  77. package/dist/spaces/verify.d.ts +39 -0
  78. package/dist/spaces/verify.d.ts.map +1 -0
  79. package/dist/spaces/verify.js +87 -0
  80. package/dist/spaces/viewer.d.ts +51 -0
  81. package/dist/spaces/viewer.d.ts.map +1 -0
  82. package/dist/spaces/viewer.js +167 -0
  83. package/dist/spaces/visibility.d.ts +57 -0
  84. package/dist/spaces/visibility.d.ts.map +1 -0
  85. package/dist/spaces/visibility.js +81 -0
  86. package/dist/templates/feed.tpl +4 -0
  87. package/dist/templates/xrpc.tpl +13 -1
  88. package/dist/test.d.ts +2 -0
  89. package/dist/test.d.ts.map +1 -1
  90. package/dist/test.js +8 -5
  91. package/dist/xrpc.d.ts +19 -3
  92. package/dist/xrpc.d.ts.map +1 -1
  93. package/dist/xrpc.js +62 -32
  94. package/package.json +8 -4
package/dist/indexer.d.ts CHANGED
@@ -33,9 +33,10 @@ export declare function resumeCursor(liveSeq: number | null, bootCursor: string
33
33
  /** Reset module cursor state between tests. */
34
34
  export declare function _resetCursorStateForTests(): void;
35
35
  /**
36
- * Drain the write buffer synchronously instead of waiting out
37
- * FLUSH_INTERVAL_MS. Lets end-to-end tests assert on rows immediately after
38
- * feeding a frame.
36
+ * Drain the write buffer instead of waiting out FLUSH_INTERVAL_MS. Lets
37
+ * end-to-end tests assert on rows immediately after feeding a frame — deletes
38
+ * included, since they are buffered alongside puts and so are covered by the
39
+ * same await.
39
40
  */
40
41
  export declare function _flushForTests(): Promise<void>;
41
42
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"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"}
package/dist/indexer.js CHANGED
@@ -45,9 +45,10 @@ let indexerMaxRetries;
45
45
  let indexerPlcUrl;
46
46
  let maxConcurrentBackfills = 3;
47
47
  /**
48
- * Flush the write buffer — insert all buffered records, update the relay cursor,
49
- * run label rules on inserted records, and trigger FTS rebuilds when the write
50
- * threshold is reached. Emits a wide event with batch stats.
48
+ * Flush the write buffer — apply all buffered puts and deletes in arrival
49
+ * order, update the relay cursor, run label rules on inserted records, and
50
+ * trigger FTS rebuilds when the write threshold is reached. Emits a wide event
51
+ * with batch stats.
51
52
  */
52
53
  async function flushBuffer() {
53
54
  if (buffer.length === 0)
@@ -55,14 +56,38 @@ async function flushBuffer() {
55
56
  const elapsed = timer();
56
57
  const batch = buffer.splice(0);
57
58
  let insertedCount = 0;
59
+ let deletedCount = 0;
58
60
  const errors = [];
59
61
  let cursorError;
60
62
  const inserted = [];
63
+ const applied = [];
64
+ // Strictly sequential: two writes to the same URI in one batch must land in
65
+ // the order they arrived, so nothing here may run concurrently.
61
66
  for (const item of batch) {
62
67
  try {
63
- await insertRecord(item.collection, item.uri, item.cid, item.authorDid, item.record);
64
- insertedCount++;
65
- inserted.push(item);
68
+ if (item.action === 'delete') {
69
+ await deleteRecord(item.collection, item.uri);
70
+ deletedCount++;
71
+ applied.push({
72
+ action: 'delete',
73
+ collection: item.collection,
74
+ uri: item.uri,
75
+ authorDid: item.authorDid,
76
+ record: null,
77
+ });
78
+ }
79
+ else {
80
+ await insertRecord(item.collection, item.uri, item.cid, item.authorDid, item.record);
81
+ insertedCount++;
82
+ inserted.push(item);
83
+ applied.push({
84
+ action: 'create',
85
+ collection: item.collection,
86
+ uri: item.uri,
87
+ authorDid: item.authorDid,
88
+ record: item.record,
89
+ });
90
+ }
66
91
  }
67
92
  catch (err) {
68
93
  errors.push(err.message);
@@ -88,14 +113,9 @@ async function flushBuffer() {
88
113
  value: item.record,
89
114
  }).catch(() => { });
90
115
  }
91
- // Fire on-commit hooks for inserted records (async, non-blocking)
92
- fireOnCommitHooks(inserted.map((item) => ({
93
- action: 'create',
94
- collection: item.collection,
95
- uri: item.uri,
96
- authorDid: item.authorDid,
97
- record: item.record,
98
- })));
116
+ // Fire on-commit hooks for everything the batch applied, in the order it was
117
+ // applied (async, non-blocking)
118
+ fireOnCommitHooks(applied);
99
119
  // Aggregate collection counts and unique DIDs for wide event
100
120
  const collections = {};
101
121
  const dids = new Set();
@@ -106,6 +126,7 @@ async function flushBuffer() {
106
126
  emit('indexer', 'flush', {
107
127
  batch_size: batch.length,
108
128
  inserted_count: insertedCount,
129
+ deleted_count: deletedCount,
109
130
  error_count: errors.length,
110
131
  cursor_seq: lastSeq,
111
132
  duration_ms: elapsed(),
@@ -125,16 +146,32 @@ async function flushBuffer() {
125
146
  }
126
147
  }
127
148
  }
149
+ /**
150
+ * Run a flush once every flush already queued has finished.
151
+ *
152
+ * Nothing awaits the flush a full batch triggers, and the interval timer can
153
+ * fire while that flush is still waiting on the database. Two flushes in flight
154
+ * hold disjoint batches but interleave their awaits, so a write in the later
155
+ * batch can reach the database before one in the earlier batch — which would
156
+ * give back exactly the cross-batch reordering the single buffer removes.
157
+ * Chaining them costs nothing on an idle indexer and keeps the queue global.
158
+ */
159
+ let flushChain = Promise.resolve();
160
+ function enqueueFlush() {
161
+ const next = flushChain.then(() => flushBuffer(), () => flushBuffer());
162
+ flushChain = next;
163
+ return next;
164
+ }
128
165
  /** Schedule a flush after FLUSH_INTERVAL_MS if one isn't already pending. */
129
166
  function scheduleFlush() {
130
167
  if (flushTimer)
131
168
  return;
132
- flushTimer = setTimeout(async () => {
169
+ flushTimer = setTimeout(() => {
133
170
  flushTimer = null;
134
- await flushBuffer();
171
+ void enqueueFlush().catch(() => { });
135
172
  }, FLUSH_INTERVAL_MS);
136
173
  }
137
- /** Add a record to the write buffer. Flushes immediately if BATCH_SIZE is reached. */
174
+ /** Add a write to the buffer. Flushes immediately if BATCH_SIZE is reached. */
138
175
  function bufferWrite(item) {
139
176
  buffer.push(item);
140
177
  if (buffer.length >= BATCH_SIZE) {
@@ -142,7 +179,7 @@ function bufferWrite(item) {
142
179
  clearTimeout(flushTimer);
143
180
  flushTimer = null;
144
181
  }
145
- flushBuffer();
182
+ void enqueueFlush().catch(() => { });
146
183
  }
147
184
  else {
148
185
  scheduleFlush();
@@ -196,16 +233,17 @@ export function _resetCursorStateForTests() {
196
233
  cursorKey = 'relay';
197
234
  }
198
235
  /**
199
- * Drain the write buffer synchronously instead of waiting out
200
- * FLUSH_INTERVAL_MS. Lets end-to-end tests assert on rows immediately after
201
- * feeding a frame.
236
+ * Drain the write buffer instead of waiting out FLUSH_INTERVAL_MS. Lets
237
+ * end-to-end tests assert on rows immediately after feeding a frame — deletes
238
+ * included, since they are buffered alongside puts and so are covered by the
239
+ * same await.
202
240
  */
203
241
  export async function _flushForTests() {
204
242
  if (flushTimer) {
205
243
  clearTimeout(flushTimer);
206
244
  flushTimer = null;
207
245
  }
208
- await flushBuffer();
246
+ await enqueueFlush();
209
247
  }
210
248
  /**
211
249
  * Auto-backfill a DID's repo when first seen on the firehose.
@@ -262,7 +300,14 @@ export async function triggerAutoBackfill(did, attempt = 0) {
262
300
  backfillInFlight.delete(did);
263
301
  for (const item of buffered) {
264
302
  try {
265
- await insertRecord(item.collection, item.uri, item.cid, item.authorDid, item.record);
303
+ if (item.action === 'delete') {
304
+ // A delete that arrived mid-backfill has to be replayed after the CAR
305
+ // export lands, or the export's snapshot of the record outlives it.
306
+ await deleteRecord(item.collection, item.uri);
307
+ }
308
+ else {
309
+ await insertRecord(item.collection, item.uri, item.cid, item.authorDid, item.record);
310
+ }
266
311
  }
267
312
  catch {
268
313
  replayErrors++;
@@ -295,28 +340,6 @@ export async function triggerAutoBackfill(did, attempt = 0) {
295
340
  }, delayMs);
296
341
  }
297
342
  }
298
- /** Emit a memory diagnostics wide event every 30s for observability. */
299
- function startMemoryDiagnostics() {
300
- setInterval(() => {
301
- const mem = process.memoryUsage();
302
- let pendingBufferItems = 0;
303
- for (const [, items] of pendingBuffers) {
304
- pendingBufferItems += items.length;
305
- }
306
- emit('diagnostics', 'memory', {
307
- heap_used_mb: Math.round(mem.heapUsed / 1024 / 1024),
308
- heap_total_mb: Math.round(mem.heapTotal / 1024 / 1024),
309
- rss_mb: Math.round(mem.rss / 1024 / 1024),
310
- external_mb: Math.round(mem.external / 1024 / 1024),
311
- array_buffers_mb: Math.round(mem.arrayBuffers / 1024 / 1024),
312
- write_buffer_len: buffer.length,
313
- pending_buffer_dids: pendingBuffers.size,
314
- pending_buffer_items: pendingBufferItems,
315
- backfill_in_flight: backfillInFlight.size,
316
- repo_status_cache_size: repoStatusCache.size,
317
- });
318
- }, 30_000);
319
- }
320
343
  /**
321
344
  * Connect to the AT Protocol relay firehose and begin indexing.
322
345
  *
@@ -346,7 +369,6 @@ export async function configureIndexer(opts) {
346
369
  }
347
370
  log(`[indexer] Warmed repo status cache with ${statuses.length} entries`);
348
371
  }
349
- // startMemoryDiagnostics()
350
372
  // Checkpoint the cursor on a timer regardless of write activity (see
351
373
  // checkpointCursor). Guarded so reconnects don't stack intervals; unref'd so
352
374
  // it never keeps the process alive.
@@ -558,19 +580,21 @@ export function applyCommit(did, ops) {
558
580
  // For non-signal ops (e.g. profile updates), only process if this DID is already tracked
559
581
  if (!hasSignalOp && repoStatus === null)
560
582
  return;
583
+ /** Queue a write behind anything already queued for this DID. */
584
+ const enqueue = (item) => {
585
+ // If DID is mid-backfill, buffer instead of writing directly
586
+ if (pendingBuffers.has(did))
587
+ pendingBuffers.get(did).push(item);
588
+ else
589
+ bufferWrite(item);
590
+ };
561
591
  for (const op of ops) {
562
592
  const uri = `at://${did}/${op.collection}/${op.rkey}`;
563
593
  if (op.action === 'delete') {
564
- deleteRecord(op.collection, uri);
565
- fireOnCommitHooks([
566
- {
567
- action: 'delete',
568
- collection: op.collection,
569
- uri,
570
- authorDid: did,
571
- record: null,
572
- },
573
- ]);
594
+ // Buffered, not applied here: see {@link WriteBuffer}. The on-commit hook
595
+ // fires from the flush too, so a handler never sees a delete announced
596
+ // before the row is actually gone.
597
+ enqueue({ action: 'delete', collection: op.collection, uri, authorDid: did });
574
598
  continue;
575
599
  }
576
600
  const record = op.record;
@@ -588,14 +612,7 @@ export function applyCommit(did, ops) {
588
612
  });
589
613
  continue;
590
614
  }
591
- const item = { collection: op.collection, uri, cid: op.cid, authorDid: did, record };
592
- // If DID is mid-backfill, buffer instead of writing directly
593
- if (pendingBuffers.has(did)) {
594
- pendingBuffers.get(did).push(item);
595
- }
596
- else {
597
- bufferWrite(item);
598
- }
615
+ enqueue({ action: 'put', collection: op.collection, uri, cid: op.cid, authorDid: did, record });
599
616
  }
600
617
  }
601
618
  /**
@@ -16,6 +16,8 @@ export type Row<T = unknown> = {
16
16
  uri: string;
17
17
  cid: string;
18
18
  did: string;
19
+ /** The permissioned space this record came from. Absent for public repo data. */
20
+ space?: string;
19
21
  handle?: string;
20
22
  indexed_at?: string;
21
23
  value: T;
@@ -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":"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"}
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([...lexicons.values()]);
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...');
@@ -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;
@@ -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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"}
package/dist/oauth/db.js CHANGED
@@ -146,6 +146,18 @@ export async function getSession(did) {
146
146
  const rows = await querySQL('SELECT * FROM _oauth_sessions WHERE did = $1', [did]);
147
147
  return rows.length > 0 ? rows[0] : null;
148
148
  }
149
+ /**
150
+ * Every DID this instance holds a PDS session for, most recently refreshed
151
+ * first.
152
+ *
153
+ * Space indexing reads as a member rather than as itself, so this is the set of
154
+ * people it could borrow a delegation from. Ordered by recency because a
155
+ * session refreshed lately is the one most likely to still work.
156
+ */
157
+ export async function listSessionDids() {
158
+ const rows = (await querySQL('SELECT did FROM _oauth_sessions ORDER BY updated_at DESC, created_at DESC'));
159
+ return rows.map((r) => r.did);
160
+ }
149
161
  export async function deleteSession(did) {
150
162
  await runSQL('DELETE FROM _oauth_sessions WHERE did = $1', [did]);
151
163
  }
@@ -1 +1 @@
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,CA0EhE;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,CAsDP;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"}
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;AAiDD,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyEhE;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,CAqDP;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
@@ -32,6 +32,20 @@ let defaultFont = null;
32
32
  const cache = new Map();
33
33
  const CACHE_TTL = 5 * 60 * 1000;
34
34
  const CACHE_MAX = 200;
35
+ /**
36
+ * Read a font file as an ArrayBuffer holding *only* that font's bytes.
37
+ *
38
+ * `readFileSync` returns a Buffer that, for small files, is a view into Node's
39
+ * shared 64 KB allocation pool — so `buffer.buffer` is the whole pool, not the
40
+ * font, and the font generally starts at a nonzero `byteOffset`. Handing that
41
+ * to satori makes it read whatever happened to be pooled before the font and
42
+ * reject the result with "Unsupported OpenType signature". Slice out the
43
+ * view's own range instead.
44
+ */
45
+ function readFontData(fontPath) {
46
+ const fontData = readFileSync(fontPath);
47
+ return fontData.buffer.slice(fontData.byteOffset, fontData.byteOffset + fontData.byteLength);
48
+ }
35
49
  function compilePath(path) {
36
50
  const paramNames = [];
37
51
  const re = path.replace(/:([^/]+)/g, (_, name) => {
@@ -44,8 +58,7 @@ export async function initOpengraph(ogDir) {
44
58
  // Load default font
45
59
  try {
46
60
  const fontPath = resolve(import.meta.dirname, '..', 'fonts', 'Inter-Regular.woff');
47
- const fontData = readFileSync(fontPath);
48
- defaultFont = { name: 'Inter', data: fontData.buffer, weight: 400, style: 'normal' };
61
+ defaultFont = { name: 'Inter', data: readFontData(fontPath), weight: 400, style: 'normal' };
49
62
  log('[opengraph] loaded default font: Inter');
50
63
  }
51
64
  catch {
@@ -121,8 +134,7 @@ export function registerOgHandler(ogMod) {
121
134
  if (!defaultFont) {
122
135
  try {
123
136
  const fontPath = resolve(import.meta.dirname, '..', 'fonts', 'Inter-Regular.woff');
124
- const fontData = readFileSync(fontPath);
125
- defaultFont = { name: 'Inter', data: fontData.buffer, weight: 400, style: 'normal' };
137
+ defaultFont = { name: 'Inter', data: readFontData(fontPath), weight: 400, style: 'normal' };
126
138
  }
127
139
  catch { }
128
140
  }
@@ -1,8 +1,13 @@
1
1
  export declare function setPrivateCollections(list: string[]): void;
2
2
  export declare function isPrivateCollection(nsid: string | null | undefined): boolean;
3
3
  /**
4
- * The collection segment of an AT-URI: at://{did}/{collection}/{rkey}.
5
- * Splitting yields ['at:', '', did, collection, rkey].
4
+ * The collection segment of a record AT-URI, in either shape.
5
+ *
6
+ * A repo record is `at://{did}/{collection}/{rkey}`; a space record is
7
+ * `at://{authority}/space/{type}/{skey}/{writer}/{collection}/{rkey}`, where
8
+ * the position a collection used to occupy holds the literal 'space'. Reading
9
+ * it positionally without that distinction reports every space record as
10
+ * belonging to a collection named 'space', which no guard would match.
6
11
  */
7
12
  export declare function collectionFromUri(uri: string): string | undefined;
8
13
  //# sourceMappingURL=private-collections.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"private-collections.d.ts","sourceRoot":"","sources":["../src/private-collections.ts"],"names":[],"mappings":"AASA,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAE1D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE5E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGjE"}
1
+ {"version":3,"file":"private-collections.d.ts","sourceRoot":"","sources":["../src/private-collections.ts"],"names":[],"mappings":"AAWA,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAE1D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE5E;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEjE"}
@@ -1,3 +1,4 @@
1
+ import { collectionFromRecordUri } from "./spaces/uri.js";
1
2
  /**
2
3
  * Collections that are indexed and queryable in-process but must never be
3
4
  * served by the built-in dev.hatk.* record endpoints.
@@ -13,10 +14,14 @@ export function isPrivateCollection(nsid) {
13
14
  return nsid != null && privateCollections.has(nsid);
14
15
  }
15
16
  /**
16
- * The collection segment of an AT-URI: at://{did}/{collection}/{rkey}.
17
- * Splitting yields ['at:', '', did, collection, rkey].
17
+ * The collection segment of a record AT-URI, in either shape.
18
+ *
19
+ * A repo record is `at://{did}/{collection}/{rkey}`; a space record is
20
+ * `at://{authority}/space/{type}/{skey}/{writer}/{collection}/{rkey}`, where
21
+ * the position a collection used to occupy holds the literal 'space'. Reading
22
+ * it positionally without that distinction reports every space record as
23
+ * belonging to a collection named 'space', which no guard would match.
18
24
  */
19
25
  export function collectionFromUri(uri) {
20
- const parts = uri.split('/');
21
- return parts.length > 4 ? parts[3] : undefined;
26
+ return collectionFromRecordUri(uri);
22
27
  }
package/dist/server.d.ts CHANGED
@@ -4,6 +4,12 @@ import type { OAuthConfig } from './config.ts';
4
4
  * This makes them available to callXrpc() for use in SSR and server code.
5
5
  */
6
6
  export declare function registerCoreHandlers(collections: string[], oauth: OAuthConfig | null): void;
7
+ export interface SpaceHandlerConfig {
8
+ serviceDid?: string;
9
+ serviceFragment?: string;
10
+ /** The origin an authority should deliver to, when it is not the request's own. */
11
+ publicUrl?: string;
12
+ }
7
13
  export interface HandlerConfig {
8
14
  collections: string[];
9
15
  publicDir: string | null;
@@ -17,6 +23,8 @@ export interface HandlerConfig {
17
23
  did: string;
18
24
  } | null;
19
25
  onResync?: () => void;
26
+ /** Permissioned-space notice delivery. Absent on an instance that indexes none. */
27
+ spaces?: SpaceHandlerConfig;
20
28
  }
21
29
  /**
22
30
  * Create a Web Standard request handler for all hatk routes.
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAsEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AA4B9C;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAqM3F;AAgDD,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,KAAK,EAAE,WAAW,GAAG,IAAI,CAAA;IACzB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACxF,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAC5D,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CA2iC5F;AAGD,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EAAE,EACrB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,KAAK,EAAE,WAAW,GAAG,IAAI,EACzB,MAAM,GAAE,MAAM,EAAO,EACrB,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EAC5D,QAAQ,CAAC,EAAE,MAAM,IAAI,GACpB,OAAO,WAAW,EAAE,MAAM,CAG5B"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAsEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAuE9C;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CA2M3F;AAgDD,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,KAAK,EAAE,WAAW,GAAG,IAAI,CAAA;IACzB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACxF,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAC5D,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,mFAAmF;IACnF,MAAM,CAAC,EAAE,kBAAkB,CAAA;CAC5B;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CA6pC5F;AAGD,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EAAE,EACrB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,KAAK,EAAE,WAAW,GAAG,IAAI,EACzB,MAAM,GAAE,MAAM,EAAO,EACrB,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EAC5D,QAAQ,CAAC,EAAE,MAAM,IAAI,GACpB,OAAO,WAAW,EAAE,MAAM,CAG5B"}