@atproto/repo 0.8.13 → 0.9.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 (99) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/block-map.d.ts +15 -16
  3. package/dist/block-map.d.ts.map +1 -1
  4. package/dist/block-map.js +9 -43
  5. package/dist/block-map.js.map +1 -1
  6. package/dist/car.d.ts +8 -8
  7. package/dist/car.d.ts.map +1 -1
  8. package/dist/car.js +18 -15
  9. package/dist/car.js.map +1 -1
  10. package/dist/cid-set.d.ts +8 -7
  11. package/dist/cid-set.d.ts.map +1 -1
  12. package/dist/cid-set.js +11 -4
  13. package/dist/cid-set.js.map +1 -1
  14. package/dist/data-diff.d.ts +10 -10
  15. package/dist/data-diff.d.ts.map +1 -1
  16. package/dist/data-diff.js.map +1 -1
  17. package/dist/error.d.ts +10 -10
  18. package/dist/error.d.ts.map +1 -1
  19. package/dist/error.js.map +1 -1
  20. package/dist/logger.d.ts.map +1 -1
  21. package/dist/logger.js +1 -0
  22. package/dist/logger.js.map +1 -1
  23. package/dist/mst/mst.d.ts +29 -29
  24. package/dist/mst/mst.d.ts.map +1 -1
  25. package/dist/mst/mst.js +12 -12
  26. package/dist/mst/mst.js.map +1 -1
  27. package/dist/mst/util.d.ts +2 -2
  28. package/dist/mst/util.d.ts.map +1 -1
  29. package/dist/mst/util.js +19 -39
  30. package/dist/mst/util.js.map +1 -1
  31. package/dist/parse.d.ts +6 -7
  32. package/dist/parse.d.ts.map +1 -1
  33. package/dist/parse.js +2 -2
  34. package/dist/parse.js.map +1 -1
  35. package/dist/readable-repo.d.ts +6 -7
  36. package/dist/readable-repo.d.ts.map +1 -1
  37. package/dist/readable-repo.js.map +1 -1
  38. package/dist/repo.d.ts +4 -4
  39. package/dist/repo.d.ts.map +1 -1
  40. package/dist/repo.js +11 -9
  41. package/dist/repo.js.map +1 -1
  42. package/dist/storage/memory-blockstore.d.ts +9 -9
  43. package/dist/storage/memory-blockstore.d.ts.map +1 -1
  44. package/dist/storage/memory-blockstore.js.map +1 -1
  45. package/dist/storage/readable-blockstore.d.ts +11 -12
  46. package/dist/storage/readable-blockstore.d.ts.map +1 -1
  47. package/dist/storage/readable-blockstore.js +2 -35
  48. package/dist/storage/readable-blockstore.js.map +1 -1
  49. package/dist/storage/sync-storage.d.ts +5 -5
  50. package/dist/storage/sync-storage.d.ts.map +1 -1
  51. package/dist/storage/sync-storage.js.map +1 -1
  52. package/dist/storage/types.d.ts +25 -26
  53. package/dist/storage/types.d.ts.map +1 -1
  54. package/dist/storage/types.js.map +1 -1
  55. package/dist/sync/consumer.d.ts +3 -3
  56. package/dist/sync/consumer.d.ts.map +1 -1
  57. package/dist/sync/consumer.js +1 -1
  58. package/dist/sync/consumer.js.map +1 -1
  59. package/dist/sync/provider.d.ts +3 -3
  60. package/dist/sync/provider.d.ts.map +1 -1
  61. package/dist/sync/provider.js.map +1 -1
  62. package/dist/types.d.ts +127 -100
  63. package/dist/types.d.ts.map +1 -1
  64. package/dist/types.js +53 -12
  65. package/dist/types.js.map +1 -1
  66. package/dist/util.d.ts +8 -3
  67. package/dist/util.d.ts.map +1 -1
  68. package/dist/util.js +33 -16
  69. package/dist/util.js.map +1 -1
  70. package/package.json +6 -7
  71. package/src/block-map.ts +31 -26
  72. package/src/car.ts +23 -28
  73. package/src/cid-set.ts +16 -10
  74. package/src/data-diff.ts +10 -10
  75. package/src/error.ts +6 -6
  76. package/src/logger.ts +1 -0
  77. package/src/mst/mst.ts +24 -26
  78. package/src/mst/util.ts +24 -9
  79. package/src/parse.ts +8 -8
  80. package/src/readable-repo.ts +6 -7
  81. package/src/repo.ts +13 -10
  82. package/src/storage/memory-blockstore.ts +8 -8
  83. package/src/storage/readable-blockstore.ts +12 -13
  84. package/src/storage/sync-storage.ts +4 -4
  85. package/src/storage/types.ts +25 -25
  86. package/src/sync/consumer.ts +5 -5
  87. package/src/sync/provider.ts +10 -7
  88. package/src/types.ts +82 -41
  89. package/src/util.ts +31 -14
  90. package/tests/_util.ts +28 -12
  91. package/tests/car.test.ts +31 -11
  92. package/tests/commit-proofs.test.ts +3 -3
  93. package/tests/covering-proofs.test.ts +6 -6
  94. package/tests/mst.test.ts +18 -19
  95. package/tests/proofs.test.ts +8 -6
  96. package/tests/repo.test.ts +1 -1
  97. package/tests/sync.test.ts +3 -6
  98. package/bench/mst.bench.ts +0 -165
  99. package/bench/repo.bench.ts +0 -48
@@ -1,16 +1,16 @@
1
- import { CID } from 'multiformats/cid';
1
+ import { Cid } from '@atproto/lex-data';
2
2
  import { BlockMap } from '../block-map';
3
3
  import { ReadableBlockstore } from './readable-blockstore';
4
4
  export declare class SyncStorage extends ReadableBlockstore {
5
5
  staged: ReadableBlockstore;
6
6
  saved: ReadableBlockstore;
7
7
  constructor(staged: ReadableBlockstore, saved: ReadableBlockstore);
8
- getBytes(cid: CID): Promise<Uint8Array | null>;
9
- getBlocks(cids: CID[]): Promise<{
8
+ getBytes(cid: Cid): Promise<Uint8Array | null>;
9
+ getBlocks(cids: Cid[]): Promise<{
10
10
  blocks: BlockMap;
11
- missing: CID[];
11
+ missing: Cid[];
12
12
  }>;
13
- has(cid: CID): Promise<boolean>;
13
+ has(cid: Cid): Promise<boolean>;
14
14
  }
15
15
  export default SyncStorage;
16
16
  //# sourceMappingURL=sync-storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync-storage.d.ts","sourceRoot":"","sources":["../../src/storage/sync-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAE1D,qBAAa,WAAY,SAAQ,kBAAkB;IAExC,MAAM,EAAE,kBAAkB;IAC1B,KAAK,EAAE,kBAAkB;gBADzB,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,kBAAkB;IAK5B,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAM9C,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC;IAWrE,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;CAGtC;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"sync-storage.d.ts","sourceRoot":"","sources":["../../src/storage/sync-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAE1D,qBAAa,WAAY,SAAQ,kBAAkB;IAExC,MAAM,EAAE,kBAAkB;IAC1B,KAAK,EAAE,kBAAkB;gBADzB,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,kBAAkB;IAK5B,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAM9C,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC;IAWrE,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;CAGtC;AAED,eAAe,WAAW,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"sync-storage.js","sourceRoot":"","sources":["../../src/storage/sync-storage.ts"],"names":[],"mappings":";;;AAEA,+DAA0D;AAE1D,MAAa,WAAY,SAAQ,wCAAkB;IACjD,YACS,MAA0B,EAC1B,KAAyB;QAEhC,KAAK,EAAE,CAAA;QAHP;;;;mBAAO,MAAM;WAAoB;QACjC;;;;mBAAO,KAAK;WAAoB;IAGlC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAQ;QACrB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QAC3C,IAAI,GAAG;YAAE,OAAO,GAAG,CAAA;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;IACjC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAW;QACzB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QACpD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QAChE,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;QAChC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAC/B,OAAO;YACL,MAAM;YACN,OAAO,EAAE,SAAS,CAAC,OAAO;SAC3B,CAAA;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAQ;QAChB,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IACpE,CAAC;CACF;AA5BD,kCA4BC;AAED,kBAAe,WAAW,CAAA","sourcesContent":["import { CID } from 'multiformats/cid'\nimport { BlockMap } from '../block-map'\nimport { ReadableBlockstore } from './readable-blockstore'\n\nexport class SyncStorage extends ReadableBlockstore {\n constructor(\n public staged: ReadableBlockstore,\n public saved: ReadableBlockstore,\n ) {\n super()\n }\n\n async getBytes(cid: CID): Promise<Uint8Array | null> {\n const got = await this.staged.getBytes(cid)\n if (got) return got\n return this.saved.getBytes(cid)\n }\n\n async getBlocks(cids: CID[]): Promise<{ blocks: BlockMap; missing: CID[] }> {\n const fromStaged = await this.staged.getBlocks(cids)\n const fromSaved = await this.saved.getBlocks(fromStaged.missing)\n const blocks = fromStaged.blocks\n blocks.addMap(fromSaved.blocks)\n return {\n blocks,\n missing: fromSaved.missing,\n }\n }\n\n async has(cid: CID): Promise<boolean> {\n return (await this.staged.has(cid)) || (await this.saved.has(cid))\n }\n}\n\nexport default SyncStorage\n"]}
1
+ {"version":3,"file":"sync-storage.js","sourceRoot":"","sources":["../../src/storage/sync-storage.ts"],"names":[],"mappings":";;;AAEA,+DAA0D;AAE1D,MAAa,WAAY,SAAQ,wCAAkB;IACjD,YACS,MAA0B,EAC1B,KAAyB;QAEhC,KAAK,EAAE,CAAA;QAHP;;;;mBAAO,MAAM;WAAoB;QACjC;;;;mBAAO,KAAK;WAAoB;IAGlC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAQ;QACrB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QAC3C,IAAI,GAAG;YAAE,OAAO,GAAG,CAAA;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;IACjC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAW;QACzB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QACpD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QAChE,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;QAChC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAC/B,OAAO;YACL,MAAM;YACN,OAAO,EAAE,SAAS,CAAC,OAAO;SAC3B,CAAA;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAQ;QAChB,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IACpE,CAAC;CACF;AA5BD,kCA4BC;AAED,kBAAe,WAAW,CAAA","sourcesContent":["import { Cid } from '@atproto/lex-data'\nimport { BlockMap } from '../block-map'\nimport { ReadableBlockstore } from './readable-blockstore'\n\nexport class SyncStorage extends ReadableBlockstore {\n constructor(\n public staged: ReadableBlockstore,\n public saved: ReadableBlockstore,\n ) {\n super()\n }\n\n async getBytes(cid: Cid): Promise<Uint8Array | null> {\n const got = await this.staged.getBytes(cid)\n if (got) return got\n return this.saved.getBytes(cid)\n }\n\n async getBlocks(cids: Cid[]): Promise<{ blocks: BlockMap; missing: Cid[] }> {\n const fromStaged = await this.staged.getBlocks(cids)\n const fromSaved = await this.saved.getBlocks(fromStaged.missing)\n const blocks = fromStaged.blocks\n blocks.addMap(fromSaved.blocks)\n return {\n blocks,\n missing: fromSaved.missing,\n }\n }\n\n async has(cid: Cid): Promise<boolean> {\n return (await this.staged.has(cid)) || (await this.saved.has(cid))\n }\n}\n\nexport default SyncStorage\n"]}
@@ -1,45 +1,44 @@
1
- import stream from 'node:stream';
2
- import { CID } from 'multiformats/cid';
3
- import { check } from '@atproto/common';
4
- import { RepoRecord } from '@atproto/lexicon';
1
+ import type { Readable } from 'node:stream';
2
+ import { check } from '@atproto/common-web';
3
+ import { Cid, LexMap } from '@atproto/lex-data';
5
4
  import { BlockMap } from '../block-map';
6
5
  import { CommitData } from '../types';
7
6
  export interface RepoStorage {
8
- getRoot(): Promise<CID | null>;
9
- putBlock(cid: CID, block: Uint8Array, rev: string): Promise<void>;
7
+ getRoot(): Promise<Cid | null>;
8
+ putBlock(cid: Cid, block: Uint8Array, rev: string): Promise<void>;
10
9
  putMany(blocks: BlockMap, rev: string): Promise<void>;
11
- updateRoot(cid: CID, rev: string): Promise<void>;
10
+ updateRoot(cid: Cid, rev: string): Promise<void>;
12
11
  applyCommit(commit: CommitData): any;
13
- getBytes(cid: CID): Promise<Uint8Array | null>;
14
- has(cid: CID): Promise<boolean>;
15
- getBlocks(cids: CID[]): Promise<{
12
+ getBytes(cid: Cid): Promise<Uint8Array | null>;
13
+ has(cid: Cid): Promise<boolean>;
14
+ getBlocks(cids: Cid[]): Promise<{
16
15
  blocks: BlockMap;
17
- missing: CID[];
16
+ missing: Cid[];
18
17
  }>;
19
- attemptRead<T>(cid: CID, def: check.Def<T>): Promise<{
18
+ attemptRead<T>(cid: Cid, def: check.Def<T>): Promise<{
20
19
  obj: T;
21
20
  bytes: Uint8Array;
22
21
  } | null>;
23
- readObjAndBytes<T>(cid: CID, def: check.Def<T>): Promise<{
22
+ readObjAndBytes<T>(cid: Cid, def: check.Def<T>): Promise<{
24
23
  obj: T;
25
24
  bytes: Uint8Array;
26
25
  }>;
27
- readObj<T>(cid: CID, def: check.Def<T>): Promise<T>;
28
- attemptReadRecord(cid: CID): Promise<RepoRecord | null>;
29
- readRecord(cid: CID): Promise<RepoRecord>;
26
+ readObj<T>(cid: Cid, def: check.Def<T>): Promise<T>;
27
+ attemptReadRecord(cid: Cid): Promise<LexMap | null>;
28
+ readRecord(cid: Cid): Promise<LexMap>;
30
29
  }
31
30
  export interface BlobStore {
32
- putTemp(bytes: Uint8Array | stream.Readable): Promise<string>;
33
- makePermanent(key: string, cid: CID): Promise<void>;
34
- putPermanent(cid: CID, bytes: Uint8Array | stream.Readable): Promise<void>;
35
- quarantine(cid: CID): Promise<void>;
36
- unquarantine(cid: CID): Promise<void>;
37
- getBytes(cid: CID): Promise<Uint8Array>;
38
- getStream(cid: CID): Promise<stream.Readable>;
31
+ putTemp(bytes: Uint8Array | Readable): Promise<string>;
32
+ makePermanent(key: string, cid: Cid): Promise<void>;
33
+ putPermanent(cid: Cid, bytes: Uint8Array | Readable): Promise<void>;
34
+ quarantine(cid: Cid): Promise<void>;
35
+ unquarantine(cid: Cid): Promise<void>;
36
+ getBytes(cid: Cid): Promise<Uint8Array>;
37
+ getStream(cid: Cid): Promise<Readable>;
39
38
  hasTemp(key: string): Promise<boolean>;
40
- hasStored(cid: CID): Promise<boolean>;
41
- delete(cid: CID): Promise<void>;
42
- deleteMany(cid: CID[]): Promise<void>;
39
+ hasStored(cid: Cid): Promise<boolean>;
40
+ delete(cid: Cid): Promise<void>;
41
+ deleteMany(cid: Cid[]): Promise<void>;
43
42
  }
44
43
  export declare class BlobNotFoundError extends Error {
45
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/storage/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/storage/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/storage/types.ts"],"names":[],"mappings":";;;AA8CA,MAAa,iBAAkB,SAAQ,KAAK;CAAG;AAA/C,8CAA+C","sourcesContent":["import stream from 'node:stream'\nimport { CID } from 'multiformats/cid'\nimport { check } from '@atproto/common'\nimport { RepoRecord } from '@atproto/lexicon'\nimport { BlockMap } from '../block-map'\nimport { CommitData } from '../types'\n\nexport interface RepoStorage {\n // Writable\n getRoot(): Promise<CID | null>\n putBlock(cid: CID, block: Uint8Array, rev: string): Promise<void>\n putMany(blocks: BlockMap, rev: string): Promise<void>\n updateRoot(cid: CID, rev: string): Promise<void>\n applyCommit(commit: CommitData)\n\n // Readable\n getBytes(cid: CID): Promise<Uint8Array | null>\n has(cid: CID): Promise<boolean>\n getBlocks(cids: CID[]): Promise<{ blocks: BlockMap; missing: CID[] }>\n attemptRead<T>(\n cid: CID,\n def: check.Def<T>,\n ): Promise<{ obj: T; bytes: Uint8Array } | null>\n readObjAndBytes<T>(\n cid: CID,\n def: check.Def<T>,\n ): Promise<{ obj: T; bytes: Uint8Array }>\n readObj<T>(cid: CID, def: check.Def<T>): Promise<T>\n attemptReadRecord(cid: CID): Promise<RepoRecord | null>\n readRecord(cid: CID): Promise<RepoRecord>\n}\n\nexport interface BlobStore {\n putTemp(bytes: Uint8Array | stream.Readable): Promise<string>\n makePermanent(key: string, cid: CID): Promise<void>\n putPermanent(cid: CID, bytes: Uint8Array | stream.Readable): Promise<void>\n quarantine(cid: CID): Promise<void>\n unquarantine(cid: CID): Promise<void>\n getBytes(cid: CID): Promise<Uint8Array>\n getStream(cid: CID): Promise<stream.Readable>\n hasTemp(key: string): Promise<boolean>\n hasStored(cid: CID): Promise<boolean>\n delete(cid: CID): Promise<void>\n deleteMany(cid: CID[]): Promise<void>\n}\n\nexport class BlobNotFoundError extends Error {}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/storage/types.ts"],"names":[],"mappings":";;;AA8CA,MAAa,iBAAkB,SAAQ,KAAK;CAAG;AAA/C,8CAA+C","sourcesContent":["import type { Readable } from 'node:stream'\nimport { check } from '@atproto/common-web'\nimport { Cid, LexMap } from '@atproto/lex-data'\nimport { BlockMap } from '../block-map'\nimport { CommitData } from '../types'\n\nexport interface RepoStorage {\n // Writable\n getRoot(): Promise<Cid | null>\n putBlock(cid: Cid, block: Uint8Array, rev: string): Promise<void>\n putMany(blocks: BlockMap, rev: string): Promise<void>\n updateRoot(cid: Cid, rev: string): Promise<void>\n applyCommit(commit: CommitData)\n\n // Readable\n getBytes(cid: Cid): Promise<Uint8Array | null>\n has(cid: Cid): Promise<boolean>\n getBlocks(cids: Cid[]): Promise<{ blocks: BlockMap; missing: Cid[] }>\n attemptRead<T>(\n cid: Cid,\n def: check.Def<T>,\n ): Promise<{ obj: T; bytes: Uint8Array } | null>\n readObjAndBytes<T>(\n cid: Cid,\n def: check.Def<T>,\n ): Promise<{ obj: T; bytes: Uint8Array }>\n readObj<T>(cid: Cid, def: check.Def<T>): Promise<T>\n attemptReadRecord(cid: Cid): Promise<LexMap | null>\n readRecord(cid: Cid): Promise<LexMap>\n}\n\n// @TODO make this less node-js specific by using AsyncIterable<Uint8Array> instead of Readable\nexport interface BlobStore {\n putTemp(bytes: Uint8Array | Readable): Promise<string>\n makePermanent(key: string, cid: Cid): Promise<void>\n putPermanent(cid: Cid, bytes: Uint8Array | Readable): Promise<void>\n quarantine(cid: Cid): Promise<void>\n unquarantine(cid: Cid): Promise<void>\n getBytes(cid: Cid): Promise<Uint8Array>\n getStream(cid: Cid): Promise<Readable>\n hasTemp(key: string): Promise<boolean>\n hasStored(cid: Cid): Promise<boolean>\n delete(cid: Cid): Promise<void>\n deleteMany(cid: Cid[]): Promise<void>\n}\n\nexport class BlobNotFoundError extends Error {}\n"]}
@@ -1,15 +1,15 @@
1
- import { CID } from 'multiformats/cid';
1
+ import { Cid } from '@atproto/lex-data';
2
2
  import { BlockMap } from '../block-map';
3
3
  import { ReadableRepo } from '../readable-repo';
4
4
  import { RecordCidClaim, RecordClaim, VerifiedDiff, VerifiedRepo } from '../types';
5
5
  export declare const verifyRepoCar: (carBytes: Uint8Array, did?: string, signingKey?: string) => Promise<VerifiedRepo>;
6
- export declare const verifyRepo: (blocks: BlockMap, head: CID, did?: string, signingKey?: string, opts?: {
6
+ export declare const verifyRepo: (blocks: BlockMap, head: Cid, did?: string, signingKey?: string, opts?: {
7
7
  ensureLeaves?: boolean;
8
8
  }) => Promise<VerifiedRepo>;
9
9
  export declare const verifyDiffCar: (repo: ReadableRepo | null, carBytes: Uint8Array, did?: string, signingKey?: string, opts?: {
10
10
  ensureLeaves?: boolean;
11
11
  }) => Promise<VerifiedDiff>;
12
- export declare const verifyDiff: (repo: ReadableRepo | null, updateBlocks: BlockMap, updateRoot: CID, did?: string, signingKey?: string, opts?: {
12
+ export declare const verifyDiff: (repo: ReadableRepo | null, updateBlocks: BlockMap, updateRoot: Cid, did?: string, signingKey?: string, opts?: {
13
13
  ensureLeaves?: boolean;
14
14
  }) => Promise<VerifiedDiff>;
15
15
  export declare const verifyProofs: (proofs: Uint8Array, claims: RecordCidClaim[], did: string, didKey: string) => Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"consumer.d.ts","sourceRoot":"","sources":["../../src/sync/consumer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAIvC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAE/C,OAAO,EACL,cAAc,EACd,WAAW,EACX,YAAY,EACZ,YAAY,EAEb,MAAM,UAAU,CAAA;AAGjB,eAAO,MAAM,aAAa,GACxB,UAAU,UAAU,EACpB,MAAM,MAAM,EACZ,aAAa,MAAM,KAClB,OAAO,CAAC,YAAY,CAGtB,CAAA;AAED,eAAO,MAAM,UAAU,GACrB,QAAQ,QAAQ,EAChB,MAAM,GAAG,EACT,MAAM,MAAM,EACZ,aAAa,MAAM,EACnB,OAAO;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,KAChC,OAAO,CAAC,YAAY,CAOtB,CAAA;AAED,eAAO,MAAM,aAAa,GACxB,MAAM,YAAY,GAAG,IAAI,EACzB,UAAU,UAAU,EACpB,MAAM,MAAM,EACZ,aAAa,MAAM,EACnB,OAAO;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,KAChC,OAAO,CAAC,YAAY,CAGtB,CAAA;AAED,eAAO,MAAM,UAAU,GACrB,MAAM,YAAY,GAAG,IAAI,EACzB,cAAc,QAAQ,EACtB,YAAY,GAAG,EACf,MAAM,MAAM,EACZ,aAAa,MAAM,EACnB,OAAO;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,KAChC,OAAO,CAAC,YAAY,CA0CtB,CAAA;AAwBD,eAAO,MAAM,YAAY,GACvB,QAAQ,UAAU,EAClB,QAAQ,cAAc,EAAE,EACxB,KAAK,MAAM,EACX,QAAQ,MAAM,KACb,OAAO,CAAC;IAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;IAAC,UAAU,EAAE,cAAc,EAAE,CAAA;CAAE,CAoCtE,CAAA;AAED,eAAO,MAAM,aAAa,GACxB,QAAQ,UAAU,EAClB,KAAK,MAAM,EACX,YAAY,MAAM,KACjB,OAAO,CAAC,WAAW,EAAE,CA6BvB,CAAA;AAED,qBAAa,qBAAsB,SAAQ,KAAK;CAAG"}
1
+ {"version":3,"file":"consumer.d.ts","sourceRoot":"","sources":["../../src/sync/consumer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAIvC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAE/C,OAAO,EACL,cAAc,EACd,WAAW,EACX,YAAY,EACZ,YAAY,EAEb,MAAM,UAAU,CAAA;AAGjB,eAAO,MAAM,aAAa,GACxB,UAAU,UAAU,EACpB,MAAM,MAAM,EACZ,aAAa,MAAM,KAClB,OAAO,CAAC,YAAY,CAGtB,CAAA;AAED,eAAO,MAAM,UAAU,GACrB,QAAQ,QAAQ,EAChB,MAAM,GAAG,EACT,MAAM,MAAM,EACZ,aAAa,MAAM,EACnB,OAAO;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,KAChC,OAAO,CAAC,YAAY,CAOtB,CAAA;AAED,eAAO,MAAM,aAAa,GACxB,MAAM,YAAY,GAAG,IAAI,EACzB,UAAU,UAAU,EACpB,MAAM,MAAM,EACZ,aAAa,MAAM,EACnB,OAAO;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,KAChC,OAAO,CAAC,YAAY,CAGtB,CAAA;AAED,eAAO,MAAM,UAAU,GACrB,MAAM,YAAY,GAAG,IAAI,EACzB,cAAc,QAAQ,EACtB,YAAY,GAAG,EACf,MAAM,MAAM,EACZ,aAAa,MAAM,EACnB,OAAO;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,KAChC,OAAO,CAAC,YAAY,CA0CtB,CAAA;AAwBD,eAAO,MAAM,YAAY,GACvB,QAAQ,UAAU,EAClB,QAAQ,cAAc,EAAE,EACxB,KAAK,MAAM,EACX,QAAQ,MAAM,KACb,OAAO,CAAC;IAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;IAAC,UAAU,EAAE,cAAc,EAAE,CAAA;CAAE,CAoCtE,CAAA;AAED,eAAO,MAAM,aAAa,GACxB,QAAQ,UAAU,EAClB,KAAK,MAAM,EACX,YAAY,MAAM,KACjB,OAAO,CAAC,WAAW,EAAE,CA6BvB,CAAA;AAED,qBAAa,qBAAsB,SAAQ,KAAK;CAAG"}
@@ -140,7 +140,7 @@ const verifyProofs = async (proofs, claims, did, didKey) => {
140
140
  }
141
141
  }
142
142
  else {
143
- if (claim.cid.equals(found)) {
143
+ if (found?.equals(claim.cid)) {
144
144
  verified.push(claim);
145
145
  }
146
146
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"consumer.js","sourceRoot":"","sources":["../../src/sync/consumer.ts"],"names":[],"mappings":"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","sourcesContent":["import { CID } from 'multiformats/cid'\nimport { BlockMap } from '../block-map'\nimport { readCarWithRoot } from '../car'\nimport { DataDiff } from '../data-diff'\nimport { MST } from '../mst'\nimport { ReadableRepo } from '../readable-repo'\nimport { MemoryBlockstore, ReadableBlockstore, SyncStorage } from '../storage'\nimport {\n RecordCidClaim,\n RecordClaim,\n VerifiedDiff,\n VerifiedRepo,\n def,\n} from '../types'\nimport * as util from '../util'\n\nexport const verifyRepoCar = async (\n carBytes: Uint8Array,\n did?: string,\n signingKey?: string,\n): Promise<VerifiedRepo> => {\n const car = await readCarWithRoot(carBytes)\n return verifyRepo(car.blocks, car.root, did, signingKey)\n}\n\nexport const verifyRepo = async (\n blocks: BlockMap,\n head: CID,\n did?: string,\n signingKey?: string,\n opts?: { ensureLeaves?: boolean },\n): Promise<VerifiedRepo> => {\n const diff = await verifyDiff(null, blocks, head, did, signingKey, opts)\n const creates = util.ensureCreates(diff.writes)\n return {\n creates,\n commit: diff.commit,\n }\n}\n\nexport const verifyDiffCar = async (\n repo: ReadableRepo | null,\n carBytes: Uint8Array,\n did?: string,\n signingKey?: string,\n opts?: { ensureLeaves?: boolean },\n): Promise<VerifiedDiff> => {\n const car = await readCarWithRoot(carBytes)\n return verifyDiff(repo, car.blocks, car.root, did, signingKey, opts)\n}\n\nexport const verifyDiff = async (\n repo: ReadableRepo | null,\n updateBlocks: BlockMap,\n updateRoot: CID,\n did?: string,\n signingKey?: string,\n opts?: { ensureLeaves?: boolean },\n): Promise<VerifiedDiff> => {\n const { ensureLeaves = true } = opts ?? {}\n const stagedStorage = new MemoryBlockstore(updateBlocks)\n const updateStorage = repo\n ? new SyncStorage(stagedStorage, repo.storage)\n : stagedStorage\n const updated = await verifyRepoRoot(\n updateStorage,\n updateRoot,\n did,\n signingKey,\n )\n const diff = await DataDiff.of(updated.data, repo?.data ?? null)\n const writes = await util.diffToWriteDescripts(diff)\n const newBlocks = diff.newMstBlocks\n const leaves = updateBlocks.getMany(diff.newLeafCids.toList())\n if (leaves.missing.length > 0 && ensureLeaves) {\n throw new Error(`missing leaf blocks: ${leaves.missing}`)\n }\n newBlocks.addMap(leaves.blocks)\n const removedCids = diff.removedCids\n const commitCid = await newBlocks.add(updated.commit)\n // ensure the commit cid actually changed\n if (repo) {\n if (commitCid.equals(repo.cid)) {\n newBlocks.delete(commitCid)\n } else {\n removedCids.add(repo.cid)\n }\n }\n return {\n writes,\n commit: {\n cid: updated.cid,\n rev: updated.commit.rev,\n prev: repo?.cid ?? null,\n since: repo?.commit.rev ?? null,\n newBlocks,\n relevantBlocks: newBlocks,\n removedCids,\n },\n }\n}\n\n// @NOTE only verifies the root, not the repo contents\nconst verifyRepoRoot = async (\n storage: ReadableBlockstore,\n head: CID,\n did?: string,\n signingKey?: string,\n): Promise<ReadableRepo> => {\n const repo = await ReadableRepo.load(storage, head)\n if (did !== undefined && repo.did !== did) {\n throw new RepoVerificationError(`Invalid repo did: ${repo.did}`)\n }\n if (signingKey !== undefined) {\n const validSig = await util.verifyCommitSig(repo.commit, signingKey)\n if (!validSig) {\n throw new RepoVerificationError(\n `Invalid signature on commit: ${repo.cid.toString()}`,\n )\n }\n }\n return repo\n}\n\nexport const verifyProofs = async (\n proofs: Uint8Array,\n claims: RecordCidClaim[],\n did: string,\n didKey: string,\n): Promise<{ verified: RecordCidClaim[]; unverified: RecordCidClaim[] }> => {\n const car = await readCarWithRoot(proofs)\n const blockstore = new MemoryBlockstore(car.blocks)\n const commit = await blockstore.readObj(car.root, def.commit)\n if (commit.did !== did) {\n throw new RepoVerificationError(`Invalid repo did: ${commit.did}`)\n }\n const validSig = await util.verifyCommitSig(commit, didKey)\n if (!validSig) {\n throw new RepoVerificationError(\n `Invalid signature on commit: ${car.root.toString()}`,\n )\n }\n const mst = MST.load(blockstore, commit.data)\n const verified: RecordCidClaim[] = []\n const unverified: RecordCidClaim[] = []\n for (const claim of claims) {\n const found = await mst.get(\n util.formatDataKey(claim.collection, claim.rkey),\n )\n const record = found ? await blockstore.readObj(found, def.map) : null\n if (claim.cid === null) {\n if (record === null) {\n verified.push(claim)\n } else {\n unverified.push(claim)\n }\n } else {\n if (claim.cid.equals(found)) {\n verified.push(claim)\n } else {\n unverified.push(claim)\n }\n }\n }\n return { verified, unverified }\n}\n\nexport const verifyRecords = async (\n proofs: Uint8Array,\n did: string,\n signingKey: string,\n): Promise<RecordClaim[]> => {\n const car = await readCarWithRoot(proofs)\n const blockstore = new MemoryBlockstore(car.blocks)\n const commit = await blockstore.readObj(car.root, def.commit)\n if (commit.did !== did) {\n throw new RepoVerificationError(`Invalid repo did: ${commit.did}`)\n }\n const validSig = await util.verifyCommitSig(commit, signingKey)\n if (!validSig) {\n throw new RepoVerificationError(\n `Invalid signature on commit: ${car.root.toString()}`,\n )\n }\n const mst = MST.load(blockstore, commit.data)\n\n const records: RecordClaim[] = []\n const leaves = await mst.reachableLeaves()\n for (const leaf of leaves) {\n const { collection, rkey } = util.parseDataKey(leaf.key)\n const record = await blockstore.attemptReadRecord(leaf.value)\n if (record) {\n records.push({\n collection,\n rkey,\n record,\n })\n }\n }\n return records\n}\n\nexport class RepoVerificationError extends Error {}\n"]}
1
+ {"version":3,"file":"consumer.js","sourceRoot":"","sources":["../../src/sync/consumer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Cid } from '@atproto/lex-data'\nimport { BlockMap } from '../block-map'\nimport { readCarWithRoot } from '../car'\nimport { DataDiff } from '../data-diff'\nimport { MST } from '../mst'\nimport { ReadableRepo } from '../readable-repo'\nimport { MemoryBlockstore, ReadableBlockstore, SyncStorage } from '../storage'\nimport {\n RecordCidClaim,\n RecordClaim,\n VerifiedDiff,\n VerifiedRepo,\n def,\n} from '../types'\nimport * as util from '../util'\n\nexport const verifyRepoCar = async (\n carBytes: Uint8Array,\n did?: string,\n signingKey?: string,\n): Promise<VerifiedRepo> => {\n const car = await readCarWithRoot(carBytes)\n return verifyRepo(car.blocks, car.root, did, signingKey)\n}\n\nexport const verifyRepo = async (\n blocks: BlockMap,\n head: Cid,\n did?: string,\n signingKey?: string,\n opts?: { ensureLeaves?: boolean },\n): Promise<VerifiedRepo> => {\n const diff = await verifyDiff(null, blocks, head, did, signingKey, opts)\n const creates = util.ensureCreates(diff.writes)\n return {\n creates,\n commit: diff.commit,\n }\n}\n\nexport const verifyDiffCar = async (\n repo: ReadableRepo | null,\n carBytes: Uint8Array,\n did?: string,\n signingKey?: string,\n opts?: { ensureLeaves?: boolean },\n): Promise<VerifiedDiff> => {\n const car = await readCarWithRoot(carBytes)\n return verifyDiff(repo, car.blocks, car.root, did, signingKey, opts)\n}\n\nexport const verifyDiff = async (\n repo: ReadableRepo | null,\n updateBlocks: BlockMap,\n updateRoot: Cid,\n did?: string,\n signingKey?: string,\n opts?: { ensureLeaves?: boolean },\n): Promise<VerifiedDiff> => {\n const { ensureLeaves = true } = opts ?? {}\n const stagedStorage = new MemoryBlockstore(updateBlocks)\n const updateStorage = repo\n ? new SyncStorage(stagedStorage, repo.storage)\n : stagedStorage\n const updated = await verifyRepoRoot(\n updateStorage,\n updateRoot,\n did,\n signingKey,\n )\n const diff = await DataDiff.of(updated.data, repo?.data ?? null)\n const writes = await util.diffToWriteDescripts(diff)\n const newBlocks = diff.newMstBlocks\n const leaves = updateBlocks.getMany(diff.newLeafCids.toList())\n if (leaves.missing.length > 0 && ensureLeaves) {\n throw new Error(`missing leaf blocks: ${leaves.missing}`)\n }\n newBlocks.addMap(leaves.blocks)\n const removedCids = diff.removedCids\n const commitCid = await newBlocks.add(updated.commit)\n // ensure the commit cid actually changed\n if (repo) {\n if (commitCid.equals(repo.cid)) {\n newBlocks.delete(commitCid)\n } else {\n removedCids.add(repo.cid)\n }\n }\n return {\n writes,\n commit: {\n cid: updated.cid,\n rev: updated.commit.rev,\n prev: repo?.cid ?? null,\n since: repo?.commit.rev ?? null,\n newBlocks,\n relevantBlocks: newBlocks,\n removedCids,\n },\n }\n}\n\n// @NOTE only verifies the root, not the repo contents\nconst verifyRepoRoot = async (\n storage: ReadableBlockstore,\n head: Cid,\n did?: string,\n signingKey?: string,\n): Promise<ReadableRepo> => {\n const repo = await ReadableRepo.load(storage, head)\n if (did !== undefined && repo.did !== did) {\n throw new RepoVerificationError(`Invalid repo did: ${repo.did}`)\n }\n if (signingKey !== undefined) {\n const validSig = await util.verifyCommitSig(repo.commit, signingKey)\n if (!validSig) {\n throw new RepoVerificationError(\n `Invalid signature on commit: ${repo.cid.toString()}`,\n )\n }\n }\n return repo\n}\n\nexport const verifyProofs = async (\n proofs: Uint8Array,\n claims: RecordCidClaim[],\n did: string,\n didKey: string,\n): Promise<{ verified: RecordCidClaim[]; unverified: RecordCidClaim[] }> => {\n const car = await readCarWithRoot(proofs)\n const blockstore = new MemoryBlockstore(car.blocks)\n const commit = await blockstore.readObj(car.root, def.commit)\n if (commit.did !== did) {\n throw new RepoVerificationError(`Invalid repo did: ${commit.did}`)\n }\n const validSig = await util.verifyCommitSig(commit, didKey)\n if (!validSig) {\n throw new RepoVerificationError(\n `Invalid signature on commit: ${car.root.toString()}`,\n )\n }\n const mst = MST.load(blockstore, commit.data)\n const verified: RecordCidClaim[] = []\n const unverified: RecordCidClaim[] = []\n for (const claim of claims) {\n const found = await mst.get(\n util.formatDataKey(claim.collection, claim.rkey),\n )\n const record = found ? await blockstore.readObj(found, def.map) : null\n if (claim.cid === null) {\n if (record === null) {\n verified.push(claim)\n } else {\n unverified.push(claim)\n }\n } else {\n if (found?.equals(claim.cid)) {\n verified.push(claim)\n } else {\n unverified.push(claim)\n }\n }\n }\n return { verified, unverified }\n}\n\nexport const verifyRecords = async (\n proofs: Uint8Array,\n did: string,\n signingKey: string,\n): Promise<RecordClaim[]> => {\n const car = await readCarWithRoot(proofs)\n const blockstore = new MemoryBlockstore(car.blocks)\n const commit = await blockstore.readObj(car.root, def.commit)\n if (commit.did !== did) {\n throw new RepoVerificationError(`Invalid repo did: ${commit.did}`)\n }\n const validSig = await util.verifyCommitSig(commit, signingKey)\n if (!validSig) {\n throw new RepoVerificationError(\n `Invalid signature on commit: ${car.root.toString()}`,\n )\n }\n const mst = MST.load(blockstore, commit.data)\n\n const records: RecordClaim[] = []\n const leaves = await mst.reachableLeaves()\n for (const leaf of leaves) {\n const { collection, rkey } = util.parseDataKey(leaf.key)\n const record = await blockstore.attemptReadRecord(leaf.value)\n if (record) {\n records.push({\n collection,\n rkey,\n record,\n })\n }\n }\n return records\n}\n\nexport class RepoVerificationError extends Error {}\n"]}
@@ -1,6 +1,6 @@
1
- import { CID } from 'multiformats/cid';
1
+ import { Cid } from '@atproto/lex-data';
2
2
  import { ReadableBlockstore, RepoStorage } from '../storage';
3
3
  import { RecordPath } from '../types';
4
- export declare const getFullRepo: (storage: RepoStorage, commitCid: CID) => AsyncIterable<Uint8Array>;
5
- export declare const getRecords: (storage: ReadableBlockstore, commitCid: CID, paths: RecordPath[]) => AsyncIterable<Uint8Array>;
4
+ export declare const getFullRepo: (storage: RepoStorage, commitCid: Cid) => AsyncIterable<Uint8Array>;
5
+ export declare const getRecords: (storage: ReadableBlockstore, commitCid: Cid, paths: RecordPath[]) => AsyncIterable<Uint8Array>;
6
6
  //# sourceMappingURL=provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/sync/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAKtC,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAO,MAAM,UAAU,CAAA;AAM1C,eAAO,MAAM,WAAW,GACtB,SAAS,WAAW,EACpB,WAAW,GAAG,KACb,aAAa,CAAC,UAAU,CAE1B,CAAA;AAcD,eAAO,MAAM,UAAU,GACrB,SAAS,kBAAkB,EAC3B,WAAW,GAAG,EACd,OAAO,UAAU,EAAE,KAClB,aAAa,CAAC,UAAU,CAK1B,CAAA"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/sync/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAKvC,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC5D,OAAO,EAAY,UAAU,EAAO,MAAM,UAAU,CAAA;AAMpD,eAAO,MAAM,WAAW,GACtB,SAAS,WAAW,EACpB,WAAW,GAAG,KACb,aAAa,CAAC,UAAU,CAE1B,CAAA;AAiBD,eAAO,MAAM,UAAU,GACrB,SAAS,kBAAkB,EAC3B,WAAW,GAAG,EACd,OAAO,UAAU,EAAE,KAClB,aAAa,CAAC,UAAU,CAK1B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/sync/provider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,gCAAuC;AACvC,wCAAmC;AACnC,oCAA6C;AAC7C,gCAA4B;AAE5B,oCAA0C;AAC1C,8CAA+B;AAE/B,YAAY;AACZ,gBAAgB;AAET,MAAM,WAAW,GAAG,CACzB,OAAoB,EACpB,SAAc,EACa,EAAE;IAC7B,OAAO,IAAA,oBAAc,EAAC,SAAS,EAAE,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;AACvE,CAAC,CAAA;AALY,QAAA,WAAW,eAKvB;AAED,KAAK,SAAS,CAAC,CAAC,eAAe,CAAC,OAAoB,EAAE,SAAc;IAClE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,SAAS,EAAE,WAAG,CAAC,MAAM,CAAC,CAAA;IACnE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAA;IAC7C,MAAM,GAAG,GAAG,SAAG,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC9C,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC;QAC/C,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAED,gBAAgB;AAChB,gBAAgB;AAET,MAAM,UAAU,GAAG,CACxB,OAA2B,EAC3B,SAAc,EACd,KAAmB,EACQ,EAAE;IAC7B,OAAO,IAAA,oBAAc,EACnB,SAAS,EACT,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAC/C,CAAA;AACH,CAAC,CAAA;AATY,QAAA,UAAU,cAStB;AAED,KAAK,SAAS,CAAC,CAAC,mBAAmB,CACjC,OAA2B,EAC3B,SAAc,EACd,KAAmB;IAEnB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,SAAS,EAAE,WAAG,CAAC,MAAM,CAAC,CAAA;IACnE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAA;IAC7C,MAAM,GAAG,GAAG,SAAG,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC9C,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC5E,CAAA;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC/C,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,gBAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IACpC,CAAC,EAAE,IAAI,gBAAM,EAAE,CAAC,CAAA;IAChB,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACvD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,0BAAkB,CAAC,yBAAyB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IACxE,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC3C,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC","sourcesContent":["import { CID } from 'multiformats/cid'\nimport { writeCarStream } from '../car'\nimport { CidSet } from '../cid-set'\nimport { MissingBlocksError } from '../error'\nimport { MST } from '../mst'\nimport { ReadableBlockstore, RepoStorage } from '../storage'\nimport { RecordPath, def } from '../types'\nimport * as util from '../util'\n\n// Full Repo\n// -------------\n\nexport const getFullRepo = (\n storage: RepoStorage,\n commitCid: CID,\n): AsyncIterable<Uint8Array> => {\n return writeCarStream(commitCid, iterateFullRepo(storage, commitCid))\n}\n\nasync function* iterateFullRepo(storage: RepoStorage, commitCid: CID) {\n const commit = await storage.readObjAndBytes(commitCid, def.commit)\n yield { cid: commitCid, bytes: commit.bytes }\n const mst = MST.load(storage, commit.obj.data)\n for await (const block of mst.carBlockStream()) {\n yield block\n }\n}\n\n// Narrow slices\n// -------------\n\nexport const getRecords = (\n storage: ReadableBlockstore,\n commitCid: CID,\n paths: RecordPath[],\n): AsyncIterable<Uint8Array> => {\n return writeCarStream(\n commitCid,\n iterateRecordBlocks(storage, commitCid, paths),\n )\n}\n\nasync function* iterateRecordBlocks(\n storage: ReadableBlockstore,\n commitCid: CID,\n paths: RecordPath[],\n) {\n const commit = await storage.readObjAndBytes(commitCid, def.commit)\n yield { cid: commitCid, bytes: commit.bytes }\n const mst = MST.load(storage, commit.obj.data)\n const cidsForPaths = await Promise.all(\n paths.map((p) => mst.cidsForPath(util.formatDataKey(p.collection, p.rkey))),\n )\n const allCids = cidsForPaths.reduce((acc, cur) => {\n return acc.addSet(new CidSet(cur))\n }, new CidSet())\n const found = await storage.getBlocks(allCids.toList())\n if (found.missing.length > 0) {\n throw new MissingBlocksError('writeRecordsToCarStream', found.missing)\n }\n for (const block of found.blocks.entries()) {\n yield block\n }\n}\n"]}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/sync/provider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,gCAAuC;AACvC,wCAAmC;AACnC,oCAA6C;AAC7C,gCAA4B;AAE5B,oCAAoD;AACpD,8CAA+B;AAE/B,YAAY;AACZ,gBAAgB;AAET,MAAM,WAAW,GAAG,CACzB,OAAoB,EACpB,SAAc,EACa,EAAE;IAC7B,OAAO,IAAA,oBAAc,EAAC,SAAS,EAAE,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;AACvE,CAAC,CAAA;AALY,QAAA,WAAW,eAKvB;AAED,KAAK,SAAS,CAAC,CAAC,eAAe,CAC7B,OAAoB,EACpB,SAAc;IAEd,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,SAAS,EAAE,WAAG,CAAC,MAAM,CAAC,CAAA;IACnE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAA;IAC7C,MAAM,GAAG,GAAG,SAAG,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC9C,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC;QAC/C,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAED,gBAAgB;AAChB,gBAAgB;AAET,MAAM,UAAU,GAAG,CACxB,OAA2B,EAC3B,SAAc,EACd,KAAmB,EACQ,EAAE;IAC7B,OAAO,IAAA,oBAAc,EACnB,SAAS,EACT,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAC/C,CAAA;AACH,CAAC,CAAA;AATY,QAAA,UAAU,cAStB;AAED,KAAK,SAAS,CAAC,CAAC,mBAAmB,CACjC,OAA2B,EAC3B,SAAc,EACd,KAAmB;IAEnB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,SAAS,EAAE,WAAG,CAAC,MAAM,CAAC,CAAA;IACnE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAA;IAC7C,MAAM,GAAG,GAAG,SAAG,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC9C,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC5E,CAAA;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC/C,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,gBAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IACpC,CAAC,EAAE,IAAI,gBAAM,EAAE,CAAC,CAAA;IAChB,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACvD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,0BAAkB,CAAC,yBAAyB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IACxE,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC3C,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC","sourcesContent":["import { Cid } from '@atproto/lex-data'\nimport { writeCarStream } from '../car'\nimport { CidSet } from '../cid-set'\nimport { MissingBlocksError } from '../error'\nimport { MST } from '../mst'\nimport { ReadableBlockstore, RepoStorage } from '../storage'\nimport { CarBlock, RecordPath, def } from '../types'\nimport * as util from '../util'\n\n// Full Repo\n// -------------\n\nexport const getFullRepo = (\n storage: RepoStorage,\n commitCid: Cid,\n): AsyncIterable<Uint8Array> => {\n return writeCarStream(commitCid, iterateFullRepo(storage, commitCid))\n}\n\nasync function* iterateFullRepo(\n storage: RepoStorage,\n commitCid: Cid,\n): AsyncGenerator<CarBlock> {\n const commit = await storage.readObjAndBytes(commitCid, def.commit)\n yield { cid: commitCid, bytes: commit.bytes }\n const mst = MST.load(storage, commit.obj.data)\n for await (const block of mst.carBlockStream()) {\n yield block\n }\n}\n\n// Narrow slices\n// -------------\n\nexport const getRecords = (\n storage: ReadableBlockstore,\n commitCid: Cid,\n paths: RecordPath[],\n): AsyncIterable<Uint8Array> => {\n return writeCarStream(\n commitCid,\n iterateRecordBlocks(storage, commitCid, paths),\n )\n}\n\nasync function* iterateRecordBlocks(\n storage: ReadableBlockstore,\n commitCid: Cid,\n paths: RecordPath[],\n): AsyncGenerator<CarBlock> {\n const commit = await storage.readObjAndBytes(commitCid, def.commit)\n yield { cid: commitCid, bytes: commit.bytes }\n const mst = MST.load(storage, commit.obj.data)\n const cidsForPaths = await Promise.all(\n paths.map((p) => mst.cidsForPath(util.formatDataKey(p.collection, p.rkey))),\n )\n const allCids = cidsForPaths.reduce((acc, cur) => {\n return acc.addSet(new CidSet(cur))\n }, new CidSet())\n const found = await storage.getBlocks(allCids.toList())\n if (found.missing.length > 0) {\n throw new MissingBlocksError('writeRecordsToCarStream', found.missing)\n }\n for (const block of found.blocks.entries()) {\n yield block\n }\n}\n"]}