@atproto/sync 0.2.3 → 0.3.0-next.0

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 (45) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/events.js +1 -2
  3. package/dist/firehose/index.d.ts +2 -2
  4. package/dist/firehose/index.d.ts.map +1 -1
  5. package/dist/firehose/index.js +48 -104
  6. package/dist/firehose/index.js.map +1 -1
  7. package/dist/index.d.ts +3 -3
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +3 -19
  10. package/dist/index.js.map +1 -1
  11. package/dist/lexicons/com/atproto/sync/subscribeRepos.defs.js +54 -57
  12. package/dist/lexicons/com/atproto/sync/subscribeRepos.defs.js.map +1 -1
  13. package/dist/lexicons/com/atproto/sync/subscribeRepos.js +2 -41
  14. package/dist/lexicons/com/atproto/sync/subscribeRepos.js.map +1 -1
  15. package/dist/lexicons/com/atproto/sync.js +1 -37
  16. package/dist/lexicons/com/atproto/sync.js.map +1 -1
  17. package/dist/lexicons/com/atproto.js +1 -37
  18. package/dist/lexicons/com/atproto.js.map +1 -1
  19. package/dist/lexicons/com.js +1 -37
  20. package/dist/lexicons/com.js.map +1 -1
  21. package/dist/lexicons/index.js +1 -37
  22. package/dist/lexicons/index.js.map +1 -1
  23. package/dist/runner/consecutive-list.js +6 -31
  24. package/dist/runner/consecutive-list.js.map +1 -1
  25. package/dist/runner/index.d.ts +3 -3
  26. package/dist/runner/index.d.ts.map +1 -1
  27. package/dist/runner/index.js +3 -19
  28. package/dist/runner/index.js.map +1 -1
  29. package/dist/runner/memory-runner.d.ts +6 -4
  30. package/dist/runner/memory-runner.d.ts.map +1 -1
  31. package/dist/runner/memory-runner.js +8 -42
  32. package/dist/runner/memory-runner.js.map +1 -1
  33. package/dist/runner/types.js +1 -2
  34. package/dist/util.js +6 -10
  35. package/dist/util.js.map +1 -1
  36. package/{jest.config.js → jest.config.cjs} +8 -1
  37. package/package.json +19 -14
  38. package/src/firehose/index.ts +3 -3
  39. package/src/index.ts +3 -3
  40. package/src/runner/index.ts +3 -3
  41. package/src/runner/memory-runner.ts +6 -4
  42. package/tests/firehose.test.ts +7 -1
  43. package/tests/runner.test.ts +1 -1
  44. package/tsconfig.build.tsbuildinfo +1 -1
  45. package/tsconfig.tests.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # @atproto/sync
2
2
 
3
+ ## 0.3.0-next.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#4929](https://github.com/bluesky-social/atproto/pull/4929) [`bb7491c`](https://github.com/bluesky-social/atproto/commit/bb7491c29e06181e1d2f8cf6eb454f9bb8ab961b) Thanks [@devinivy](https://github.com/devinivy)! - **BREAKING:** Drop support for Node.js 18 and 20. Node.js 22 is now the minimum supported version. Docker images now use Node.js 24.
8
+
9
+ - [#4943](https://github.com/bluesky-social/atproto/pull/4943) [`07ae5d4`](https://github.com/bluesky-social/atproto/commit/07ae5d4452df51e045e0239da7a04cf0bc154028) Thanks [@devinivy](https://github.com/devinivy)! - **BREAKING:** Convert to pure ESM. All packages now ship `"type": "module"` with ES module output and Node16 module resolution.
10
+
11
+ Node.js 22's `require()` compatibility layer can still load these packages in CommonJS code.
12
+
13
+ - [#4930](https://github.com/bluesky-social/atproto/pull/4930) [`042df15`](https://github.com/bluesky-social/atproto/commit/042df15087c0e62cd1e715fcbf58852fab875af9) Thanks [@devinivy](https://github.com/devinivy)! - Build with TypeScript 6.0. Emitted `.d.ts` files now use TypeScript 6's stricter `Uint8Array<ArrayBuffer>` typing in places where Web/Node APIs require buffer-backed (not shared-memory) byte arrays. Consumers compiling against these types on older TypeScript should see no runtime impact, but may need to widen or cast in spots that previously relied on `Uint8Array` defaulting to `<ArrayBufferLike>`.
14
+
15
+ Internal: tsconfig `moduleResolution: "node"` is silenced via `ignoreDeprecations: "6.0"` for now; the proper migration to `node16`/`bundler` resolution is deferred.
16
+
17
+ ### Patch Changes
18
+
19
+ - Updated dependencies [[`bb7491c`](https://github.com/bluesky-social/atproto/commit/bb7491c29e06181e1d2f8cf6eb454f9bb8ab961b), [`07ae5d4`](https://github.com/bluesky-social/atproto/commit/07ae5d4452df51e045e0239da7a04cf0bc154028), [`042df15`](https://github.com/bluesky-social/atproto/commit/042df15087c0e62cd1e715fcbf58852fab875af9)]:
20
+ - @atproto/common@0.6.0-next.0
21
+ - @atproto/identity@0.5.0-next.0
22
+ - @atproto/lex@0.1.0-next.0
23
+ - @atproto/repo@0.10.0-next.0
24
+ - @atproto/syntax@0.6.0-next.0
25
+ - @atproto/xrpc-server@0.11.0-next.0
26
+
3
27
  ## 0.2.3
4
28
 
5
29
  ### Patch Changes
package/dist/events.js CHANGED
@@ -1,3 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
3
2
  //# sourceMappingURL=events.js.map
@@ -1,8 +1,8 @@
1
1
  import type { ClientOptions } from 'ws';
2
2
  import { IdResolver } from '@atproto/identity';
3
- import { AccountEvt, CommitEvt, Event, IdentityEvt, SyncEvt } from '../events';
3
+ import { AccountEvt, CommitEvt, Event, IdentityEvt, SyncEvt } from '../events.js';
4
4
  import { com } from '../lexicons/index.js';
5
- import { EventRunner } from '../runner';
5
+ import { EventRunner } from '../runner/index.js';
6
6
  export type FirehoseOptions = ClientOptions & {
7
7
  idResolver: IdResolver;
8
8
  handleEvent: (evt: Event) => Awaited<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/firehose/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/firehose/index.ts"],"names":[],"mappings":"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"}
@@ -1,46 +1,15 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FirehoseHandlerError = exports.FirehoseSubscriptionError = exports.FirehoseParseError = exports.FirehoseValidationError = exports.parseAccount = exports.parseIdentity = exports.parseSync = exports.parseCommitUnauthenticated = exports.parseCommitAuthenticated = exports.Firehose = void 0;
4
- const common_1 = require("@atproto/common");
5
- const identity_1 = require("@atproto/identity");
6
- const repo_1 = require("@atproto/repo");
7
- const syntax_1 = require("@atproto/syntax");
8
- const xrpc_server_1 = require("@atproto/xrpc-server");
9
- const index_js_1 = require("../lexicons/index.js");
10
- const util_1 = require("../util");
11
- class Firehose {
1
+ import { createDeferrable, wait } from '@atproto/common';
2
+ import { parseToAtprotoDocument, } from '@atproto/identity';
3
+ import { RepoVerificationError, cborToLexRecord, formatDataKey, parseDataKey, readCar, readCarWithRoot, verifyProofs, } from '@atproto/repo';
4
+ import { AtUri } from '@atproto/syntax';
5
+ import { Subscription } from '@atproto/xrpc-server';
6
+ import { com } from '../lexicons/index.js';
7
+ import { didAndSeqForEvt } from '../util.js';
8
+ export class Firehose {
12
9
  constructor(opts) {
13
- Object.defineProperty(this, "opts", {
14
- enumerable: true,
15
- configurable: true,
16
- writable: true,
17
- value: opts
18
- });
19
- Object.defineProperty(this, "sub", {
20
- enumerable: true,
21
- configurable: true,
22
- writable: true,
23
- value: void 0
24
- });
25
- Object.defineProperty(this, "abortController", {
26
- enumerable: true,
27
- configurable: true,
28
- writable: true,
29
- value: void 0
30
- });
31
- Object.defineProperty(this, "destoryDefer", {
32
- enumerable: true,
33
- configurable: true,
34
- writable: true,
35
- value: void 0
36
- });
37
- Object.defineProperty(this, "matchCollection", {
38
- enumerable: true,
39
- configurable: true,
40
- writable: true,
41
- value: null
42
- });
43
- this.destoryDefer = (0, common_1.createDeferrable)();
10
+ this.opts = opts;
11
+ this.matchCollection = null;
12
+ this.destoryDefer = createDeferrable();
44
13
  this.abortController = new AbortController();
45
14
  if (this.opts.getCursor && this.opts.runner) {
46
15
  throw new Error('Must set only `getCursor` or `runner`');
@@ -66,10 +35,10 @@ class Firehose {
66
35
  return false;
67
36
  };
68
37
  }
69
- this.sub = new xrpc_server_1.Subscription({
38
+ this.sub = new Subscription({
70
39
  ...opts,
71
40
  service: opts.service ?? 'wss://bsky.network',
72
- method: index_js_1.com.atproto.sync.subscribeRepos.$lxm,
41
+ method: com.atproto.sync.subscribeRepos.$lxm,
73
42
  signal: this.abortController.signal,
74
43
  getParams: async () => {
75
44
  const getCursorFn = () => this.opts.runner?.getCursor() ?? this.opts.getCursor;
@@ -80,7 +49,7 @@ class Firehose {
80
49
  return { cursor };
81
50
  },
82
51
  validate: (value) => {
83
- const result = index_js_1.com.atproto.sync.subscribeRepos.$message.safeParse(value);
52
+ const result = com.atproto.sync.subscribeRepos.$message.safeParse(value);
84
53
  if (result.success) {
85
54
  return result.value;
86
55
  }
@@ -94,7 +63,7 @@ class Firehose {
94
63
  try {
95
64
  for await (const evt of this.sub) {
96
65
  if (this.opts.runner) {
97
- const parsed = (0, util_1.didAndSeqForEvt)(evt);
66
+ const parsed = didAndSeqForEvt(evt);
98
67
  if (!parsed) {
99
68
  continue;
100
69
  }
@@ -121,35 +90,35 @@ class Firehose {
121
90
  return;
122
91
  }
123
92
  this.opts.onError(new FirehoseSubscriptionError(err));
124
- await (0, common_1.wait)(this.opts.subscriptionReconnectDelay ?? 3000);
93
+ await wait(this.opts.subscriptionReconnectDelay ?? 3000);
125
94
  return this.start();
126
95
  }
127
96
  }
128
97
  async parseEvt(evt) {
129
98
  try {
130
- if (index_js_1.com.atproto.sync.subscribeRepos.commit.$isTypeOf(evt)) {
99
+ if (com.atproto.sync.subscribeRepos.commit.$isTypeOf(evt)) {
131
100
  if (this.opts.excludeCommit)
132
101
  return [];
133
102
  return this.opts.unauthenticatedCommits
134
- ? await (0, exports.parseCommitUnauthenticated)(evt, this.matchCollection)
135
- : await (0, exports.parseCommitAuthenticated)(this.opts.idResolver, evt, this.matchCollection);
103
+ ? await parseCommitUnauthenticated(evt, this.matchCollection)
104
+ : await parseCommitAuthenticated(this.opts.idResolver, evt, this.matchCollection);
136
105
  }
137
- else if (index_js_1.com.atproto.sync.subscribeRepos.account.$isTypeOf(evt)) {
106
+ else if (com.atproto.sync.subscribeRepos.account.$isTypeOf(evt)) {
138
107
  if (this.opts.excludeAccount)
139
108
  return [];
140
- const parsed = (0, exports.parseAccount)(evt);
109
+ const parsed = parseAccount(evt);
141
110
  return parsed ? [parsed] : [];
142
111
  }
143
- else if (index_js_1.com.atproto.sync.subscribeRepos.identity.$isTypeOf(evt)) {
112
+ else if (com.atproto.sync.subscribeRepos.identity.$isTypeOf(evt)) {
144
113
  if (this.opts.excludeIdentity)
145
114
  return [];
146
- const parsed = await (0, exports.parseIdentity)(this.opts.idResolver, evt, this.opts.unauthenticatedHandles);
115
+ const parsed = await parseIdentity(this.opts.idResolver, evt, this.opts.unauthenticatedHandles);
147
116
  return parsed ? [parsed] : [];
148
117
  }
149
- else if (index_js_1.com.atproto.sync.subscribeRepos.sync.$isTypeOf(evt)) {
118
+ else if (com.atproto.sync.subscribeRepos.sync.$isTypeOf(evt)) {
150
119
  if (this.opts.excludeSync)
151
120
  return [];
152
- const parsed = await (0, exports.parseSync)(evt);
121
+ const parsed = await parseSync(evt);
153
122
  return parsed ? [parsed] : [];
154
123
  }
155
124
  else {
@@ -177,15 +146,14 @@ class Firehose {
177
146
  await this.destoryDefer.complete;
178
147
  }
179
148
  }
180
- exports.Firehose = Firehose;
181
- const parseCommitAuthenticated = async (idResolver, evt, matchCollection, forceKeyRefresh = false) => {
149
+ export const parseCommitAuthenticated = async (idResolver, evt, matchCollection, forceKeyRefresh = false) => {
182
150
  const did = evt.repo;
183
151
  const ops = maybeFilterOps(evt.ops, matchCollection);
184
152
  if (ops.length === 0) {
185
153
  return [];
186
154
  }
187
155
  const claims = ops.map((op) => {
188
- const { collection, rkey } = (0, repo_1.parseDataKey)(op.path);
156
+ const { collection, rkey } = parseDataKey(op.path);
189
157
  return {
190
158
  collection,
191
159
  rkey,
@@ -195,15 +163,15 @@ const parseCommitAuthenticated = async (idResolver, evt, matchCollection, forceK
195
163
  const key = await idResolver.did.resolveAtprotoKey(did, forceKeyRefresh);
196
164
  const verifiedCids = {};
197
165
  try {
198
- const results = await (0, repo_1.verifyProofs)(evt.blocks, claims, did, key);
166
+ const results = await verifyProofs(evt.blocks, claims, did, key);
199
167
  results.verified.forEach((op) => {
200
- const path = (0, repo_1.formatDataKey)(op.collection, op.rkey);
168
+ const path = formatDataKey(op.collection, op.rkey);
201
169
  verifiedCids[path] = op.cid;
202
170
  });
203
171
  }
204
172
  catch (err) {
205
- if (err instanceof repo_1.RepoVerificationError && !forceKeyRefresh) {
206
- return (0, exports.parseCommitAuthenticated)(idResolver, evt, matchCollection, true);
173
+ if (err instanceof RepoVerificationError && !forceKeyRefresh) {
174
+ return parseCommitAuthenticated(idResolver, evt, matchCollection, true);
207
175
  }
208
176
  throw err;
209
177
  }
@@ -220,25 +188,23 @@ const parseCommitAuthenticated = async (idResolver, evt, matchCollection, forceK
220
188
  skipCidVerification: true, // already checked via verifyProofs()
221
189
  });
222
190
  };
223
- exports.parseCommitAuthenticated = parseCommitAuthenticated;
224
- const parseCommitUnauthenticated = async (evt, matchCollection) => {
191
+ export const parseCommitUnauthenticated = async (evt, matchCollection) => {
225
192
  const ops = maybeFilterOps(evt.ops, matchCollection);
226
193
  return formatCommitOps(evt, ops);
227
194
  };
228
- exports.parseCommitUnauthenticated = parseCommitUnauthenticated;
229
195
  const maybeFilterOps = (ops, matchCollection) => {
230
196
  if (!matchCollection)
231
197
  return ops;
232
198
  return ops.filter((op) => {
233
- const { collection } = (0, repo_1.parseDataKey)(op.path);
199
+ const { collection } = parseDataKey(op.path);
234
200
  return matchCollection(collection);
235
201
  });
236
202
  };
237
203
  const formatCommitOps = async (evt, ops, options) => {
238
- const car = await (0, repo_1.readCar)(evt.blocks, options);
204
+ const car = await readCar(evt.blocks, options);
239
205
  const evts = [];
240
206
  for (const op of ops) {
241
- const uri = syntax_1.AtUri.make(evt.repo, op.path);
207
+ const uri = AtUri.make(evt.repo, op.path);
242
208
  const meta = {
243
209
  seq: evt.seq,
244
210
  time: evt.time,
@@ -256,7 +222,7 @@ const formatCommitOps = async (evt, ops, options) => {
256
222
  const recordBytes = car.blocks.get(op.cid);
257
223
  if (!recordBytes)
258
224
  continue;
259
- const record = (0, repo_1.cborToLexRecord)(recordBytes);
225
+ const record = cborToLexRecord(recordBytes);
260
226
  evts.push({
261
227
  ...meta,
262
228
  event: op.action,
@@ -273,8 +239,8 @@ const formatCommitOps = async (evt, ops, options) => {
273
239
  }
274
240
  return evts;
275
241
  };
276
- const parseSync = async (evt) => {
277
- const car = await (0, repo_1.readCarWithRoot)(evt.blocks);
242
+ export const parseSync = async (evt) => {
243
+ const car = await readCarWithRoot(evt.blocks);
278
244
  return {
279
245
  event: 'sync',
280
246
  seq: evt.seq,
@@ -285,8 +251,7 @@ const parseSync = async (evt) => {
285
251
  blocks: car.blocks,
286
252
  };
287
253
  };
288
- exports.parseSync = parseSync;
289
- const parseIdentity = async (idResolver, evt, unauthenticated = false) => {
254
+ export const parseIdentity = async (idResolver, evt, unauthenticated = false) => {
290
255
  const res = await idResolver.did.resolve(evt.did);
291
256
  const handle = res && !unauthenticated
292
257
  ? await verifyHandle(idResolver, evt.did, res)
@@ -300,16 +265,15 @@ const parseIdentity = async (idResolver, evt, unauthenticated = false) => {
300
265
  didDocument: res ?? undefined,
301
266
  };
302
267
  };
303
- exports.parseIdentity = parseIdentity;
304
268
  const verifyHandle = async (idResolver, did, didDoc) => {
305
- const { handle } = (0, identity_1.parseToAtprotoDocument)(didDoc);
269
+ const { handle } = parseToAtprotoDocument(didDoc);
306
270
  if (!handle) {
307
271
  return undefined;
308
272
  }
309
273
  const res = await idResolver.handle.resolve(handle);
310
274
  return res === did ? handle : undefined;
311
275
  };
312
- const parseAccount = (evt) => {
276
+ export const parseAccount = (evt) => {
313
277
  if (evt.status && !isValidStatus(evt.status))
314
278
  return;
315
279
  return {
@@ -321,50 +285,30 @@ const parseAccount = (evt) => {
321
285
  status: evt.status,
322
286
  };
323
287
  };
324
- exports.parseAccount = parseAccount;
325
288
  const isValidStatus = (str) => {
326
289
  return ['takendown', 'suspended', 'deleted', 'deactivated'].includes(str);
327
290
  };
328
- class FirehoseValidationError extends Error {
291
+ export class FirehoseValidationError extends Error {
329
292
  constructor(err, value) {
330
293
  super('error in firehose event lexicon validation', { cause: err });
331
- Object.defineProperty(this, "value", {
332
- enumerable: true,
333
- configurable: true,
334
- writable: true,
335
- value: value
336
- });
294
+ this.value = value;
337
295
  }
338
296
  }
339
- exports.FirehoseValidationError = FirehoseValidationError;
340
- class FirehoseParseError extends Error {
297
+ export class FirehoseParseError extends Error {
341
298
  constructor(err, event) {
342
299
  super('error in parsing and authenticating firehose event', { cause: err });
343
- Object.defineProperty(this, "event", {
344
- enumerable: true,
345
- configurable: true,
346
- writable: true,
347
- value: event
348
- });
300
+ this.event = event;
349
301
  }
350
302
  }
351
- exports.FirehoseParseError = FirehoseParseError;
352
- class FirehoseSubscriptionError extends Error {
303
+ export class FirehoseSubscriptionError extends Error {
353
304
  constructor(err) {
354
305
  super('error on firehose subscription', { cause: err });
355
306
  }
356
307
  }
357
- exports.FirehoseSubscriptionError = FirehoseSubscriptionError;
358
- class FirehoseHandlerError extends Error {
308
+ export class FirehoseHandlerError extends Error {
359
309
  constructor(err, event) {
360
310
  super('error in firehose event handler', { cause: err });
361
- Object.defineProperty(this, "event", {
362
- enumerable: true,
363
- configurable: true,
364
- writable: true,
365
- value: event
366
- });
311
+ this.event = event;
367
312
  }
368
313
  }
369
- exports.FirehoseHandlerError = FirehoseHandlerError;
370
314
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/firehose/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ClientOptions } from 'ws'\nimport { Deferrable, createDeferrable, wait } from '@atproto/common'\nimport {\n DidDocument,\n IdResolver,\n parseToAtprotoDocument,\n} from '@atproto/identity'\nimport { Cid } from '@atproto/lex'\nimport {\n RepoVerificationError,\n cborToLexRecord,\n formatDataKey,\n parseDataKey,\n readCar,\n readCarWithRoot,\n verifyProofs,\n} from '@atproto/repo'\nimport { AtUri } from '@atproto/syntax'\nimport { Subscription } from '@atproto/xrpc-server'\nimport {\n AccountEvt,\n AccountStatus,\n CommitEvt,\n CommitMeta,\n Event,\n IdentityEvt,\n SyncEvt,\n} from '../events'\nimport { com } from '../lexicons/index.js'\nimport { EventRunner } from '../runner'\nimport { didAndSeqForEvt } from '../util'\n\nexport type FirehoseOptions = ClientOptions & {\n idResolver: IdResolver\n\n handleEvent: (evt: Event) => Awaited<void>\n onError: (err: Error) => void\n getCursor?: () => Awaited<number | undefined>\n\n runner?: EventRunner // should only set getCursor *or* runner\n\n service?: string\n subscriptionReconnectDelay?: number\n\n unauthenticatedCommits?: boolean\n unauthenticatedHandles?: boolean\n\n filterCollections?: string[]\n excludeIdentity?: boolean\n excludeAccount?: boolean\n excludeCommit?: boolean\n excludeSync?: boolean\n}\n\nexport class Firehose {\n private sub: Subscription<com.atproto.sync.subscribeRepos.$Message>\n private abortController: AbortController\n private destoryDefer: Deferrable\n private matchCollection: ((col: string) => boolean) | null = null\n\n constructor(public opts: FirehoseOptions) {\n this.destoryDefer = createDeferrable()\n this.abortController = new AbortController()\n if (this.opts.getCursor && this.opts.runner) {\n throw new Error('Must set only `getCursor` or `runner`')\n }\n if (opts.filterCollections) {\n const exact = new Set<string>()\n const prefixes: string[] = []\n\n for (const pattern of opts.filterCollections) {\n if (pattern.endsWith('.*')) {\n prefixes.push(pattern.slice(0, -2))\n } else {\n exact.add(pattern)\n }\n }\n this.matchCollection = (col: string): boolean => {\n if (exact.has(col)) return true\n for (const prefix of prefixes) {\n if (col.startsWith(prefix)) return true\n }\n return false\n }\n }\n this.sub = new Subscription({\n ...opts,\n service: opts.service ?? 'wss://bsky.network',\n method: com.atproto.sync.subscribeRepos.$lxm,\n signal: this.abortController.signal,\n getParams: async () => {\n const getCursorFn = () =>\n this.opts.runner?.getCursor() ?? this.opts.getCursor\n if (!getCursorFn) {\n return undefined\n }\n const cursor = await getCursorFn()\n return { cursor }\n },\n validate: (value: unknown) => {\n const result = com.atproto.sync.subscribeRepos.$message.safeParse(value)\n if (result.success) {\n return result.value\n } else {\n this.opts.onError(new FirehoseValidationError(result.reason, value))\n }\n },\n })\n }\n\n async start() {\n try {\n for await (const evt of this.sub) {\n if (this.opts.runner) {\n const parsed = didAndSeqForEvt(evt)\n if (!parsed) {\n continue\n }\n this.opts.runner.trackEvent(parsed.did, parsed.seq, async () => {\n const parsed = await this.parseEvt(evt)\n for (const write of parsed) {\n try {\n await this.opts.handleEvent(write)\n } catch (err) {\n this.opts.onError(new FirehoseHandlerError(err, write))\n }\n }\n })\n } else {\n await this.processEvt(evt)\n }\n }\n } catch (err) {\n if (err && err['name'] === 'AbortError') {\n this.destoryDefer.resolve()\n return\n }\n this.opts.onError(new FirehoseSubscriptionError(err))\n await wait(this.opts.subscriptionReconnectDelay ?? 3000)\n return this.start()\n }\n }\n\n private async parseEvt(\n evt: com.atproto.sync.subscribeRepos.$Message,\n ): Promise<Event[]> {\n try {\n if (com.atproto.sync.subscribeRepos.commit.$isTypeOf(evt)) {\n if (this.opts.excludeCommit) return []\n\n return this.opts.unauthenticatedCommits\n ? await parseCommitUnauthenticated(evt, this.matchCollection)\n : await parseCommitAuthenticated(\n this.opts.idResolver,\n evt,\n this.matchCollection,\n )\n } else if (com.atproto.sync.subscribeRepos.account.$isTypeOf(evt)) {\n if (this.opts.excludeAccount) return []\n\n const parsed = parseAccount(evt)\n return parsed ? [parsed] : []\n } else if (com.atproto.sync.subscribeRepos.identity.$isTypeOf(evt)) {\n if (this.opts.excludeIdentity) return []\n\n const parsed = await parseIdentity(\n this.opts.idResolver,\n evt,\n this.opts.unauthenticatedHandles,\n )\n return parsed ? [parsed] : []\n } else if (com.atproto.sync.subscribeRepos.sync.$isTypeOf(evt)) {\n if (this.opts.excludeSync) return []\n\n const parsed = await parseSync(evt)\n return parsed ? [parsed] : []\n } else {\n return []\n }\n } catch (err) {\n this.opts.onError(new FirehoseParseError(err, evt))\n return []\n }\n }\n\n private async processEvt(evt: com.atproto.sync.subscribeRepos.$Message) {\n const parsed = await this.parseEvt(evt)\n for (const write of parsed) {\n try {\n await this.opts.handleEvent(write)\n } catch (err) {\n this.opts.onError(new FirehoseHandlerError(err, write))\n }\n }\n }\n\n async destroy(): Promise<void> {\n this.abortController.abort()\n await this.destoryDefer.complete\n }\n}\n\nexport const parseCommitAuthenticated = async (\n idResolver: IdResolver,\n evt: com.atproto.sync.subscribeRepos.Commit,\n matchCollection?: ((col: string) => boolean) | null,\n forceKeyRefresh = false,\n): Promise<CommitEvt[]> => {\n const did = evt.repo\n const ops = maybeFilterOps(evt.ops, matchCollection)\n if (ops.length === 0) {\n return []\n }\n const claims = ops.map((op) => {\n const { collection, rkey } = parseDataKey(op.path)\n return {\n collection,\n rkey,\n cid: op.action === 'delete' ? null : op.cid,\n }\n })\n const key = await idResolver.did.resolveAtprotoKey(did, forceKeyRefresh)\n const verifiedCids: Record<string, Cid | null> = {}\n try {\n const results = await verifyProofs(evt.blocks, claims, did, key)\n results.verified.forEach((op) => {\n const path = formatDataKey(op.collection, op.rkey)\n verifiedCids[path] = op.cid\n })\n } catch (err) {\n if (err instanceof RepoVerificationError && !forceKeyRefresh) {\n return parseCommitAuthenticated(idResolver, evt, matchCollection, true)\n }\n throw err\n }\n const verifiedOps: com.atproto.sync.subscribeRepos.RepoOp[] = ops.filter(\n (op) => {\n const verifiedCid = verifiedCids[op.path]\n if (op.action === 'delete') {\n return verifiedCid === null\n } else {\n return (\n op.cid != null && verifiedCid != null && verifiedCid.equals(op.cid)\n )\n }\n },\n )\n return formatCommitOps(evt, verifiedOps, {\n skipCidVerification: true, // already checked via verifyProofs()\n })\n}\n\nexport const parseCommitUnauthenticated = async (\n evt: com.atproto.sync.subscribeRepos.Commit,\n matchCollection?: ((col: string) => boolean) | null,\n): Promise<CommitEvt[]> => {\n const ops = maybeFilterOps(evt.ops, matchCollection)\n return formatCommitOps(evt, ops)\n}\n\nconst maybeFilterOps = (\n ops: com.atproto.sync.subscribeRepos.RepoOp[],\n matchCollection?: ((col: string) => boolean) | null,\n): com.atproto.sync.subscribeRepos.RepoOp[] => {\n if (!matchCollection) return ops\n return ops.filter((op) => {\n const { collection } = parseDataKey(op.path)\n return matchCollection(collection)\n })\n}\n\nconst formatCommitOps = async (\n evt: com.atproto.sync.subscribeRepos.Commit,\n ops: com.atproto.sync.subscribeRepos.RepoOp[],\n options?: { skipCidVerification: boolean },\n) => {\n const car = await readCar(evt.blocks, options)\n\n const evts: CommitEvt[] = []\n\n for (const op of ops) {\n const uri = AtUri.make(evt.repo, op.path)\n\n const meta: CommitMeta = {\n seq: evt.seq,\n time: evt.time,\n commit: evt.commit,\n blocks: car.blocks,\n rev: evt.rev,\n uri,\n did: uri.did,\n collection: uri.collection,\n rkey: uri.rkey,\n }\n\n if (op.action === 'create' || op.action === 'update') {\n if (!op.cid) continue\n const recordBytes = car.blocks.get(op.cid)\n if (!recordBytes) continue\n const record = cborToLexRecord(recordBytes)\n evts.push({\n ...meta,\n event: op.action as 'create' | 'update',\n cid: op.cid,\n record,\n })\n }\n\n if (op.action === 'delete') {\n evts.push({\n ...meta,\n event: 'delete',\n })\n }\n }\n\n return evts\n}\n\nexport const parseSync = async (\n evt: com.atproto.sync.subscribeRepos.Sync,\n): Promise<SyncEvt | null> => {\n const car = await readCarWithRoot(evt.blocks)\n\n return {\n event: 'sync',\n seq: evt.seq,\n time: evt.time,\n did: evt.did,\n cid: car.root,\n rev: evt.rev,\n blocks: car.blocks,\n }\n}\n\nexport const parseIdentity = async (\n idResolver: IdResolver,\n evt: com.atproto.sync.subscribeRepos.Identity,\n unauthenticated = false,\n): Promise<IdentityEvt | null> => {\n const res = await idResolver.did.resolve(evt.did)\n const handle =\n res && !unauthenticated\n ? await verifyHandle(idResolver, evt.did, res)\n : undefined\n\n return {\n event: 'identity',\n seq: evt.seq,\n time: evt.time,\n did: evt.did,\n handle,\n didDocument: res ?? undefined,\n }\n}\n\nconst verifyHandle = async (\n idResolver: IdResolver,\n did: string,\n didDoc: DidDocument,\n): Promise<string | undefined> => {\n const { handle } = parseToAtprotoDocument(didDoc)\n if (!handle) {\n return undefined\n }\n const res = await idResolver.handle.resolve(handle)\n return res === did ? handle : undefined\n}\n\nexport const parseAccount = (\n evt: com.atproto.sync.subscribeRepos.Account,\n): AccountEvt | undefined => {\n if (evt.status && !isValidStatus(evt.status)) return\n return {\n event: 'account',\n seq: evt.seq,\n time: evt.time,\n did: evt.did,\n active: evt.active,\n status: evt.status as AccountStatus | undefined,\n }\n}\n\nconst isValidStatus = (str: string): str is AccountStatus => {\n return ['takendown', 'suspended', 'deleted', 'deactivated'].includes(str)\n}\n\nexport class FirehoseValidationError extends Error {\n constructor(\n err: unknown,\n public value: unknown,\n ) {\n super('error in firehose event lexicon validation', { cause: err })\n }\n}\n\nexport class FirehoseParseError extends Error {\n constructor(\n err: unknown,\n public event: com.atproto.sync.subscribeRepos.$Message,\n ) {\n super('error in parsing and authenticating firehose event', { cause: err })\n }\n}\n\nexport class FirehoseSubscriptionError extends Error {\n constructor(err: unknown) {\n super('error on firehose subscription', { cause: err })\n }\n}\n\nexport class FirehoseHandlerError extends Error {\n constructor(\n err: unknown,\n public event: Event,\n ) {\n super('error in firehose event handler', { cause: err })\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/firehose/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ClientOptions } from 'ws'\nimport { Deferrable, createDeferrable, wait } from '@atproto/common'\nimport {\n DidDocument,\n IdResolver,\n parseToAtprotoDocument,\n} from '@atproto/identity'\nimport { Cid } from '@atproto/lex'\nimport {\n RepoVerificationError,\n cborToLexRecord,\n formatDataKey,\n parseDataKey,\n readCar,\n readCarWithRoot,\n verifyProofs,\n} from '@atproto/repo'\nimport { AtUri } from '@atproto/syntax'\nimport { Subscription } from '@atproto/xrpc-server'\nimport {\n AccountEvt,\n AccountStatus,\n CommitEvt,\n CommitMeta,\n Event,\n IdentityEvt,\n SyncEvt,\n} from '../events.js'\nimport { com } from '../lexicons/index.js'\nimport { EventRunner } from '../runner/index.js'\nimport { didAndSeqForEvt } from '../util.js'\n\nexport type FirehoseOptions = ClientOptions & {\n idResolver: IdResolver\n\n handleEvent: (evt: Event) => Awaited<void>\n onError: (err: Error) => void\n getCursor?: () => Awaited<number | undefined>\n\n runner?: EventRunner // should only set getCursor *or* runner\n\n service?: string\n subscriptionReconnectDelay?: number\n\n unauthenticatedCommits?: boolean\n unauthenticatedHandles?: boolean\n\n filterCollections?: string[]\n excludeIdentity?: boolean\n excludeAccount?: boolean\n excludeCommit?: boolean\n excludeSync?: boolean\n}\n\nexport class Firehose {\n private sub: Subscription<com.atproto.sync.subscribeRepos.$Message>\n private abortController: AbortController\n private destoryDefer: Deferrable\n private matchCollection: ((col: string) => boolean) | null = null\n\n constructor(public opts: FirehoseOptions) {\n this.destoryDefer = createDeferrable()\n this.abortController = new AbortController()\n if (this.opts.getCursor && this.opts.runner) {\n throw new Error('Must set only `getCursor` or `runner`')\n }\n if (opts.filterCollections) {\n const exact = new Set<string>()\n const prefixes: string[] = []\n\n for (const pattern of opts.filterCollections) {\n if (pattern.endsWith('.*')) {\n prefixes.push(pattern.slice(0, -2))\n } else {\n exact.add(pattern)\n }\n }\n this.matchCollection = (col: string): boolean => {\n if (exact.has(col)) return true\n for (const prefix of prefixes) {\n if (col.startsWith(prefix)) return true\n }\n return false\n }\n }\n this.sub = new Subscription({\n ...opts,\n service: opts.service ?? 'wss://bsky.network',\n method: com.atproto.sync.subscribeRepos.$lxm,\n signal: this.abortController.signal,\n getParams: async () => {\n const getCursorFn = () =>\n this.opts.runner?.getCursor() ?? this.opts.getCursor\n if (!getCursorFn) {\n return undefined\n }\n const cursor = await getCursorFn()\n return { cursor }\n },\n validate: (value: unknown) => {\n const result = com.atproto.sync.subscribeRepos.$message.safeParse(value)\n if (result.success) {\n return result.value\n } else {\n this.opts.onError(new FirehoseValidationError(result.reason, value))\n }\n },\n })\n }\n\n async start() {\n try {\n for await (const evt of this.sub) {\n if (this.opts.runner) {\n const parsed = didAndSeqForEvt(evt)\n if (!parsed) {\n continue\n }\n this.opts.runner.trackEvent(parsed.did, parsed.seq, async () => {\n const parsed = await this.parseEvt(evt)\n for (const write of parsed) {\n try {\n await this.opts.handleEvent(write)\n } catch (err) {\n this.opts.onError(new FirehoseHandlerError(err, write))\n }\n }\n })\n } else {\n await this.processEvt(evt)\n }\n }\n } catch (err) {\n if (err && err['name'] === 'AbortError') {\n this.destoryDefer.resolve()\n return\n }\n this.opts.onError(new FirehoseSubscriptionError(err))\n await wait(this.opts.subscriptionReconnectDelay ?? 3000)\n return this.start()\n }\n }\n\n private async parseEvt(\n evt: com.atproto.sync.subscribeRepos.$Message,\n ): Promise<Event[]> {\n try {\n if (com.atproto.sync.subscribeRepos.commit.$isTypeOf(evt)) {\n if (this.opts.excludeCommit) return []\n\n return this.opts.unauthenticatedCommits\n ? await parseCommitUnauthenticated(evt, this.matchCollection)\n : await parseCommitAuthenticated(\n this.opts.idResolver,\n evt,\n this.matchCollection,\n )\n } else if (com.atproto.sync.subscribeRepos.account.$isTypeOf(evt)) {\n if (this.opts.excludeAccount) return []\n\n const parsed = parseAccount(evt)\n return parsed ? [parsed] : []\n } else if (com.atproto.sync.subscribeRepos.identity.$isTypeOf(evt)) {\n if (this.opts.excludeIdentity) return []\n\n const parsed = await parseIdentity(\n this.opts.idResolver,\n evt,\n this.opts.unauthenticatedHandles,\n )\n return parsed ? [parsed] : []\n } else if (com.atproto.sync.subscribeRepos.sync.$isTypeOf(evt)) {\n if (this.opts.excludeSync) return []\n\n const parsed = await parseSync(evt)\n return parsed ? [parsed] : []\n } else {\n return []\n }\n } catch (err) {\n this.opts.onError(new FirehoseParseError(err, evt))\n return []\n }\n }\n\n private async processEvt(evt: com.atproto.sync.subscribeRepos.$Message) {\n const parsed = await this.parseEvt(evt)\n for (const write of parsed) {\n try {\n await this.opts.handleEvent(write)\n } catch (err) {\n this.opts.onError(new FirehoseHandlerError(err, write))\n }\n }\n }\n\n async destroy(): Promise<void> {\n this.abortController.abort()\n await this.destoryDefer.complete\n }\n}\n\nexport const parseCommitAuthenticated = async (\n idResolver: IdResolver,\n evt: com.atproto.sync.subscribeRepos.Commit,\n matchCollection?: ((col: string) => boolean) | null,\n forceKeyRefresh = false,\n): Promise<CommitEvt[]> => {\n const did = evt.repo\n const ops = maybeFilterOps(evt.ops, matchCollection)\n if (ops.length === 0) {\n return []\n }\n const claims = ops.map((op) => {\n const { collection, rkey } = parseDataKey(op.path)\n return {\n collection,\n rkey,\n cid: op.action === 'delete' ? null : op.cid,\n }\n })\n const key = await idResolver.did.resolveAtprotoKey(did, forceKeyRefresh)\n const verifiedCids: Record<string, Cid | null> = {}\n try {\n const results = await verifyProofs(evt.blocks, claims, did, key)\n results.verified.forEach((op) => {\n const path = formatDataKey(op.collection, op.rkey)\n verifiedCids[path] = op.cid\n })\n } catch (err) {\n if (err instanceof RepoVerificationError && !forceKeyRefresh) {\n return parseCommitAuthenticated(idResolver, evt, matchCollection, true)\n }\n throw err\n }\n const verifiedOps: com.atproto.sync.subscribeRepos.RepoOp[] = ops.filter(\n (op) => {\n const verifiedCid = verifiedCids[op.path]\n if (op.action === 'delete') {\n return verifiedCid === null\n } else {\n return (\n op.cid != null && verifiedCid != null && verifiedCid.equals(op.cid)\n )\n }\n },\n )\n return formatCommitOps(evt, verifiedOps, {\n skipCidVerification: true, // already checked via verifyProofs()\n })\n}\n\nexport const parseCommitUnauthenticated = async (\n evt: com.atproto.sync.subscribeRepos.Commit,\n matchCollection?: ((col: string) => boolean) | null,\n): Promise<CommitEvt[]> => {\n const ops = maybeFilterOps(evt.ops, matchCollection)\n return formatCommitOps(evt, ops)\n}\n\nconst maybeFilterOps = (\n ops: com.atproto.sync.subscribeRepos.RepoOp[],\n matchCollection?: ((col: string) => boolean) | null,\n): com.atproto.sync.subscribeRepos.RepoOp[] => {\n if (!matchCollection) return ops\n return ops.filter((op) => {\n const { collection } = parseDataKey(op.path)\n return matchCollection(collection)\n })\n}\n\nconst formatCommitOps = async (\n evt: com.atproto.sync.subscribeRepos.Commit,\n ops: com.atproto.sync.subscribeRepos.RepoOp[],\n options?: { skipCidVerification: boolean },\n) => {\n const car = await readCar(evt.blocks, options)\n\n const evts: CommitEvt[] = []\n\n for (const op of ops) {\n const uri = AtUri.make(evt.repo, op.path)\n\n const meta: CommitMeta = {\n seq: evt.seq,\n time: evt.time,\n commit: evt.commit,\n blocks: car.blocks,\n rev: evt.rev,\n uri,\n did: uri.did,\n collection: uri.collection,\n rkey: uri.rkey,\n }\n\n if (op.action === 'create' || op.action === 'update') {\n if (!op.cid) continue\n const recordBytes = car.blocks.get(op.cid)\n if (!recordBytes) continue\n const record = cborToLexRecord(recordBytes)\n evts.push({\n ...meta,\n event: op.action as 'create' | 'update',\n cid: op.cid,\n record,\n })\n }\n\n if (op.action === 'delete') {\n evts.push({\n ...meta,\n event: 'delete',\n })\n }\n }\n\n return evts\n}\n\nexport const parseSync = async (\n evt: com.atproto.sync.subscribeRepos.Sync,\n): Promise<SyncEvt | null> => {\n const car = await readCarWithRoot(evt.blocks)\n\n return {\n event: 'sync',\n seq: evt.seq,\n time: evt.time,\n did: evt.did,\n cid: car.root,\n rev: evt.rev,\n blocks: car.blocks,\n }\n}\n\nexport const parseIdentity = async (\n idResolver: IdResolver,\n evt: com.atproto.sync.subscribeRepos.Identity,\n unauthenticated = false,\n): Promise<IdentityEvt | null> => {\n const res = await idResolver.did.resolve(evt.did)\n const handle =\n res && !unauthenticated\n ? await verifyHandle(idResolver, evt.did, res)\n : undefined\n\n return {\n event: 'identity',\n seq: evt.seq,\n time: evt.time,\n did: evt.did,\n handle,\n didDocument: res ?? undefined,\n }\n}\n\nconst verifyHandle = async (\n idResolver: IdResolver,\n did: string,\n didDoc: DidDocument,\n): Promise<string | undefined> => {\n const { handle } = parseToAtprotoDocument(didDoc)\n if (!handle) {\n return undefined\n }\n const res = await idResolver.handle.resolve(handle)\n return res === did ? handle : undefined\n}\n\nexport const parseAccount = (\n evt: com.atproto.sync.subscribeRepos.Account,\n): AccountEvt | undefined => {\n if (evt.status && !isValidStatus(evt.status)) return\n return {\n event: 'account',\n seq: evt.seq,\n time: evt.time,\n did: evt.did,\n active: evt.active,\n status: evt.status as AccountStatus | undefined,\n }\n}\n\nconst isValidStatus = (str: string): str is AccountStatus => {\n return ['takendown', 'suspended', 'deleted', 'deactivated'].includes(str)\n}\n\nexport class FirehoseValidationError extends Error {\n constructor(\n err: unknown,\n public value: unknown,\n ) {\n super('error in firehose event lexicon validation', { cause: err })\n }\n}\n\nexport class FirehoseParseError extends Error {\n constructor(\n err: unknown,\n public event: com.atproto.sync.subscribeRepos.$Message,\n ) {\n super('error in parsing and authenticating firehose event', { cause: err })\n }\n}\n\nexport class FirehoseSubscriptionError extends Error {\n constructor(err: unknown) {\n super('error on firehose subscription', { cause: err })\n }\n}\n\nexport class FirehoseHandlerError extends Error {\n constructor(\n err: unknown,\n public event: Event,\n ) {\n super('error in firehose event handler', { cause: err })\n }\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export * from './runner';
2
- export * from './firehose';
3
- export * from './events';
1
+ export * from './runner/index.js';
2
+ export * from './firehose/index.js';
3
+ export * from './events.js';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,aAAa,CAAA"}
package/dist/index.js CHANGED
@@ -1,20 +1,4 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./runner"), exports);
18
- __exportStar(require("./firehose"), exports);
19
- __exportStar(require("./events"), exports);
1
+ export * from './runner/index.js';
2
+ export * from './firehose/index.js';
3
+ export * from './events.js';
20
4
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAwB;AACxB,6CAA0B;AAC1B,2CAAwB","sourcesContent":["export * from './runner'\nexport * from './firehose'\nexport * from './events'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,aAAa,CAAA","sourcesContent":["export * from './runner/index.js'\nexport * from './firehose/index.js'\nexport * from './events.js'\n"]}