@atproto/repo 0.10.4 → 0.10.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/block-map.d.ts +1 -1
- package/dist/block-map.d.ts.map +1 -1
- package/dist/block-map.js.map +1 -1
- package/dist/car.d.ts +2 -2
- package/dist/car.d.ts.map +1 -1
- package/dist/car.js.map +1 -1
- package/dist/cid-set.d.ts +1 -1
- package/dist/cid-set.d.ts.map +1 -1
- package/dist/cid-set.js.map +1 -1
- package/dist/data-diff.d.ts +2 -2
- package/dist/data-diff.d.ts.map +1 -1
- package/dist/data-diff.js.map +1 -1
- package/dist/error.d.ts +1 -1
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js.map +1 -1
- package/dist/mst/diff.d.ts +1 -1
- package/dist/mst/diff.d.ts.map +1 -1
- package/dist/mst/diff.js.map +1 -1
- package/dist/mst/mst.d.ts +3 -3
- package/dist/mst/mst.d.ts.map +1 -1
- package/dist/mst/mst.js.map +1 -1
- package/dist/mst/util.d.ts +3 -3
- package/dist/mst/util.d.ts.map +1 -1
- package/dist/mst/util.js +1 -1
- package/dist/mst/util.js.map +1 -1
- package/dist/mst/walker.d.ts +1 -1
- package/dist/mst/walker.d.ts.map +1 -1
- package/dist/mst/walker.js.map +1 -1
- package/dist/parse.d.ts +3 -3
- package/dist/parse.d.ts.map +1 -1
- package/dist/parse.js.map +1 -1
- package/dist/readable-repo.d.ts +3 -3
- package/dist/readable-repo.d.ts.map +1 -1
- package/dist/readable-repo.js.map +1 -1
- package/dist/repo.d.ts +4 -4
- package/dist/repo.d.ts.map +1 -1
- package/dist/repo.js.map +1 -1
- package/dist/storage/memory-blockstore.d.ts +3 -3
- package/dist/storage/memory-blockstore.d.ts.map +1 -1
- package/dist/storage/memory-blockstore.js.map +1 -1
- package/dist/storage/readable-blockstore.d.ts +3 -3
- package/dist/storage/readable-blockstore.d.ts.map +1 -1
- package/dist/storage/readable-blockstore.js.map +1 -1
- package/dist/storage/sync-storage.d.ts +2 -2
- package/dist/storage/sync-storage.d.ts.map +1 -1
- package/dist/storage/sync-storage.js.map +1 -1
- package/dist/storage/types.d.ts +4 -4
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/types.js.map +1 -1
- package/dist/sync/consumer.d.ts +3 -3
- package/dist/sync/consumer.d.ts.map +1 -1
- package/dist/sync/consumer.js.map +1 -1
- package/dist/sync/provider.d.ts +3 -3
- package/dist/sync/provider.d.ts.map +1 -1
- package/dist/sync/provider.js.map +1 -1
- package/dist/types.d.ts +4 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/util.d.ts +4 -4
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +1 -1
- package/dist/util.js.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-blockstore.js","sourceRoot":"","sources":["../../src/storage/memory-blockstore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAG7D,MAAM,OAAO,gBACX,SAAQ,kBAAkB;IAO1B,YAAY,MAAiB;QAC3B,KAAK,EAAE,CAAA;QAJT,SAAI,GAAe,IAAI,CAAA;QACvB,QAAG,GAAkB,IAAI,CAAA;QAIvB,IAAI,CAAC,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAA;QAC5B,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAQ;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAA;IACrC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAQ;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAW;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAQ,EAAE,KAAiB;QACxC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAgB;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAQ,EAAE,GAAW;QACpC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;QACf,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAkB;QAClC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAA;QACtB,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAA;QAC1C,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC;QACD,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5B,KAAK,IAAI,KAAK,CAAC,UAAU,CAAA;QAC3B,CAAC,CAAC,CAAA;QACF,OAAO,KAAK,CAAA;IACd,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IACrB,CAAC;CACF;AAED,eAAe,gBAAgB,CAAA","sourcesContent":["import { Cid } from '@atproto/lex-data'\nimport { BlockMap } from '../block-map.js'\nimport { CommitData } from '../types.js'\nimport { ReadableBlockstore } from './readable-blockstore.js'\nimport { RepoStorage } from './types.js'\n\nexport class MemoryBlockstore\n extends ReadableBlockstore\n implements RepoStorage\n{\n blocks: BlockMap\n root: Cid | null = null\n rev: string | null = null\n\n constructor(blocks?: BlockMap) {\n super()\n this.blocks = new BlockMap()\n if (blocks) {\n this.blocks.addMap(blocks)\n }\n }\n\n async getRoot(): Promise<Cid | null> {\n return this.root\n }\n\n async getBytes(cid: Cid): Promise<Uint8Array | null> {\n return this.blocks.get(cid) || null\n }\n\n async has(cid: Cid): Promise<boolean> {\n return this.blocks.has(cid)\n }\n\n async getBlocks(cids: Cid[]): Promise<{ blocks: BlockMap; missing: Cid[] }> {\n return this.blocks.getMany(cids)\n }\n\n async putBlock(cid: Cid, block: Uint8Array): Promise<void> {\n this.blocks.set(cid, block)\n }\n\n async putMany(blocks: BlockMap): Promise<void> {\n this.blocks.addMap(blocks)\n }\n\n async updateRoot(cid: Cid, rev: string): Promise<void> {\n this.root = cid\n this.rev = rev\n }\n\n async applyCommit(commit: CommitData): Promise<void> {\n this.root = commit.cid\n const rmCids = commit.removedCids.toList()\n for (const cid of rmCids) {\n this.blocks.delete(cid)\n }\n commit.newBlocks.forEach((bytes, cid) => {\n this.blocks.set(cid, bytes)\n })\n }\n\n async sizeInBytes(): Promise<number> {\n let total = 0\n this.blocks.forEach((bytes) => {\n total += bytes.byteLength\n })\n return total\n }\n\n async destroy(): Promise<void> {\n this.blocks.clear()\n }\n}\n\nexport default MemoryBlockstore\n"]}
|
|
1
|
+
{"version":3,"file":"memory-blockstore.js","sourceRoot":"","sources":["../../src/storage/memory-blockstore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAG7D,MAAM,OAAO,gBACX,SAAQ,kBAAkB;IAO1B,YAAY,MAAiB;QAC3B,KAAK,EAAE,CAAA;QAJT,SAAI,GAAe,IAAI,CAAA;QACvB,QAAG,GAAkB,IAAI,CAAA;QAIvB,IAAI,CAAC,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAA;QAC5B,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAQ;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAA;IACrC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAQ;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAW;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAQ,EAAE,KAAiB;QACxC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAgB;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAQ,EAAE,GAAW;QACpC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;QACf,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAkB;QAClC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAA;QACtB,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAA;QAC1C,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC;QACD,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5B,KAAK,IAAI,KAAK,CAAC,UAAU,CAAA;QAC3B,CAAC,CAAC,CAAA;QACF,OAAO,KAAK,CAAA;IACd,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IACrB,CAAC;CACF;AAED,eAAe,gBAAgB,CAAA","sourcesContent":["import type { Cid } from '@atproto/lex-data'\nimport { BlockMap } from '../block-map.js'\nimport type { CommitData } from '../types.js'\nimport { ReadableBlockstore } from './readable-blockstore.js'\nimport type { RepoStorage } from './types.js'\n\nexport class MemoryBlockstore\n extends ReadableBlockstore\n implements RepoStorage\n{\n blocks: BlockMap\n root: Cid | null = null\n rev: string | null = null\n\n constructor(blocks?: BlockMap) {\n super()\n this.blocks = new BlockMap()\n if (blocks) {\n this.blocks.addMap(blocks)\n }\n }\n\n async getRoot(): Promise<Cid | null> {\n return this.root\n }\n\n async getBytes(cid: Cid): Promise<Uint8Array | null> {\n return this.blocks.get(cid) || null\n }\n\n async has(cid: Cid): Promise<boolean> {\n return this.blocks.has(cid)\n }\n\n async getBlocks(cids: Cid[]): Promise<{ blocks: BlockMap; missing: Cid[] }> {\n return this.blocks.getMany(cids)\n }\n\n async putBlock(cid: Cid, block: Uint8Array): Promise<void> {\n this.blocks.set(cid, block)\n }\n\n async putMany(blocks: BlockMap): Promise<void> {\n this.blocks.addMap(blocks)\n }\n\n async updateRoot(cid: Cid, rev: string): Promise<void> {\n this.root = cid\n this.rev = rev\n }\n\n async applyCommit(commit: CommitData): Promise<void> {\n this.root = commit.cid\n const rmCids = commit.removedCids.toList()\n for (const cid of rmCids) {\n this.blocks.delete(cid)\n }\n commit.newBlocks.forEach((bytes, cid) => {\n this.blocks.set(cid, bytes)\n })\n }\n\n async sizeInBytes(): Promise<number> {\n let total = 0\n this.blocks.forEach((bytes) => {\n total += bytes.byteLength\n })\n return total\n }\n\n async destroy(): Promise<void> {\n this.blocks.clear()\n }\n}\n\nexport default MemoryBlockstore\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { check } from '@atproto/common-web';
|
|
2
|
-
import { Cid, LexMap } from '@atproto/lex-data';
|
|
3
|
-
import { BlockMap } from '../block-map.js';
|
|
1
|
+
import type { check } from '@atproto/common-web';
|
|
2
|
+
import type { Cid, LexMap } from '@atproto/lex-data';
|
|
3
|
+
import type { BlockMap } from '../block-map.js';
|
|
4
4
|
export declare abstract class ReadableBlockstore {
|
|
5
5
|
abstract getBytes(cid: Cid): Promise<Uint8Array | null>;
|
|
6
6
|
abstract has(cid: Cid): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readable-blockstore.d.ts","sourceRoot":"","sources":["../../src/storage/readable-blockstore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"readable-blockstore.d.ts","sourceRoot":"","sources":["../../src/storage/readable-blockstore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAK/C,8BAAsB,kBAAkB;IACtC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAA;IACvD,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACxC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC,CAAA;IAExE,WAAW,CAAC,CAAC,EACjB,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAChB,OAAO,CAAC;QAAE,GAAG,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI,CAAC,CAI/C;IAEK,eAAe,CAAC,CAAC,EACrB,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAChB,OAAO,CAAC;QAAE,GAAG,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,CAAC,CAMxC;IAEK,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGxD;IAEK,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMxD;IAEK,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAM1C;CACF;eAEc,kBAAkB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readable-blockstore.js","sourceRoot":"","sources":["../../src/storage/readable-blockstore.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE5C,MAAM,OAAgB,kBAAkB;IAKtC,KAAK,CAAC,WAAW,CACf,GAAQ,EACR,GAAiB;QAEjB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAA;QACvB,OAAO,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;IACvC,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,GAAQ,EACR,GAAiB;QAEjB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;QAC5C,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,OAAO,CAAI,GAAQ,EAAE,GAAiB;QAC1C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAChD,OAAO,GAAG,CAAC,GAAG,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,GAAQ;QAC9B,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAQ;QACvB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAA;QAClC,CAAC;QACD,OAAO,eAAe,CAAC,KAAK,CAAC,CAAA;IAC/B,CAAC;CACF;AAED,eAAe,kBAAkB,CAAA","sourcesContent":["import { check } from '@atproto/common-web'\nimport { Cid, LexMap } from '@atproto/lex-data'\nimport { BlockMap } from '../block-map.js'\nimport { MissingBlockError } from '../error.js'\nimport { parseObjByDef } from '../parse.js'\nimport { cborToLexRecord } from '../util.js'\n\nexport abstract class ReadableBlockstore {\n abstract getBytes(cid: Cid): Promise<Uint8Array | null>\n abstract has(cid: Cid): Promise<boolean>\n abstract getBlocks(cids: Cid[]): Promise<{ blocks: BlockMap; missing: Cid[] }>\n\n async attemptRead<T>(\n cid: Cid,\n def: check.Def<T>,\n ): Promise<{ obj: T; bytes: Uint8Array } | null> {\n const bytes = await this.getBytes(cid)\n if (!bytes) return null\n return parseObjByDef(bytes, cid, def)\n }\n\n async readObjAndBytes<T>(\n cid: Cid,\n def: check.Def<T>,\n ): Promise<{ obj: T; bytes: Uint8Array }> {\n const read = await this.attemptRead(cid, def)\n if (!read) {\n throw new MissingBlockError(cid, def.name)\n }\n return read\n }\n\n async readObj<T>(cid: Cid, def: check.Def<T>): Promise<T> {\n const obj = await this.readObjAndBytes(cid, def)\n return obj.obj\n }\n\n async attemptReadRecord(cid: Cid): Promise<LexMap | null> {\n try {\n return await this.readRecord(cid)\n } catch {\n return null\n }\n }\n\n async readRecord(cid: Cid): Promise<LexMap> {\n const bytes = await this.getBytes(cid)\n if (!bytes) {\n throw new MissingBlockError(cid)\n }\n return cborToLexRecord(bytes)\n }\n}\n\nexport default ReadableBlockstore\n"]}
|
|
1
|
+
{"version":3,"file":"readable-blockstore.js","sourceRoot":"","sources":["../../src/storage/readable-blockstore.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE5C,MAAM,OAAgB,kBAAkB;IAKtC,KAAK,CAAC,WAAW,CACf,GAAQ,EACR,GAAiB;QAEjB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAA;QACvB,OAAO,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;IACvC,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,GAAQ,EACR,GAAiB;QAEjB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;QAC5C,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,OAAO,CAAI,GAAQ,EAAE,GAAiB;QAC1C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAChD,OAAO,GAAG,CAAC,GAAG,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,GAAQ;QAC9B,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAQ;QACvB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAA;QAClC,CAAC;QACD,OAAO,eAAe,CAAC,KAAK,CAAC,CAAA;IAC/B,CAAC;CACF;AAED,eAAe,kBAAkB,CAAA","sourcesContent":["import type { check } from '@atproto/common-web'\nimport type { Cid, LexMap } from '@atproto/lex-data'\nimport type { BlockMap } from '../block-map.js'\nimport { MissingBlockError } from '../error.js'\nimport { parseObjByDef } from '../parse.js'\nimport { cborToLexRecord } from '../util.js'\n\nexport abstract class ReadableBlockstore {\n abstract getBytes(cid: Cid): Promise<Uint8Array | null>\n abstract has(cid: Cid): Promise<boolean>\n abstract getBlocks(cids: Cid[]): Promise<{ blocks: BlockMap; missing: Cid[] }>\n\n async attemptRead<T>(\n cid: Cid,\n def: check.Def<T>,\n ): Promise<{ obj: T; bytes: Uint8Array } | null> {\n const bytes = await this.getBytes(cid)\n if (!bytes) return null\n return parseObjByDef(bytes, cid, def)\n }\n\n async readObjAndBytes<T>(\n cid: Cid,\n def: check.Def<T>,\n ): Promise<{ obj: T; bytes: Uint8Array }> {\n const read = await this.attemptRead(cid, def)\n if (!read) {\n throw new MissingBlockError(cid, def.name)\n }\n return read\n }\n\n async readObj<T>(cid: Cid, def: check.Def<T>): Promise<T> {\n const obj = await this.readObjAndBytes(cid, def)\n return obj.obj\n }\n\n async attemptReadRecord(cid: Cid): Promise<LexMap | null> {\n try {\n return await this.readRecord(cid)\n } catch {\n return null\n }\n }\n\n async readRecord(cid: Cid): Promise<LexMap> {\n const bytes = await this.getBytes(cid)\n if (!bytes) {\n throw new MissingBlockError(cid)\n }\n return cborToLexRecord(bytes)\n }\n}\n\nexport default ReadableBlockstore\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Cid } from '@atproto/lex-data';
|
|
2
|
-
import { BlockMap } from '../block-map.js';
|
|
1
|
+
import type { Cid } from '@atproto/lex-data';
|
|
2
|
+
import type { BlockMap } from '../block-map.js';
|
|
3
3
|
import { ReadableBlockstore } from './readable-blockstore.js';
|
|
4
4
|
export declare class SyncStorage extends ReadableBlockstore {
|
|
5
5
|
staged: ReadableBlockstore;
|
|
@@ -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,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"sync-storage.d.ts","sourceRoot":"","sources":["../../src/storage/sync-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAE7D,qBAAa,WAAY,SAAQ,kBAAkB;IAExC,MAAM,EAAE,kBAAkB;IAC1B,KAAK,EAAE,kBAAkB;IAFlC,YACS,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,kBAAkB,EAGjC;IAEK,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAInD;IAEK,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC,CAS1E;IAEK,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAEpC;CACF;eAEc,WAAW"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-storage.js","sourceRoot":"","sources":["../../src/storage/sync-storage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAE7D,MAAM,OAAO,WAAY,SAAQ,kBAAkB;IACjD,YACS,MAA0B,EAC1B,KAAyB;QAEhC,KAAK,EAAE,CAAA;sBAHA,MAAM;qBACN,KAAK;IAGd,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;AAED,eAAe,WAAW,CAAA","sourcesContent":["import { Cid } from '@atproto/lex-data'\nimport { BlockMap } from '../block-map.js'\nimport { ReadableBlockstore } from './readable-blockstore.js'\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,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAE7D,MAAM,OAAO,WAAY,SAAQ,kBAAkB;IACjD,YACS,MAA0B,EAC1B,KAAyB;QAEhC,KAAK,EAAE,CAAA;sBAHA,MAAM;qBACN,KAAK;IAGd,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;AAED,eAAe,WAAW,CAAA","sourcesContent":["import type { Cid } from '@atproto/lex-data'\nimport type { BlockMap } from '../block-map.js'\nimport { ReadableBlockstore } from './readable-blockstore.js'\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"]}
|
package/dist/storage/types.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { Readable } from 'node:stream';
|
|
2
|
-
import { check } from '@atproto/common-web';
|
|
3
|
-
import { Cid, LexMap } from '@atproto/lex-data';
|
|
4
|
-
import { BlockMap } from '../block-map.js';
|
|
5
|
-
import { CommitData } from '../types.js';
|
|
2
|
+
import type { check } from '@atproto/common-web';
|
|
3
|
+
import type { Cid, LexMap } from '@atproto/lex-data';
|
|
4
|
+
import type { BlockMap } from '../block-map.js';
|
|
5
|
+
import type { CommitData } from '../types.js';
|
|
6
6
|
export interface RepoStorage {
|
|
7
7
|
getRoot(): Promise<Cid | null>;
|
|
8
8
|
putBlock(cid: Cid, block: Uint8Array, rev: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/storage/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;
|
|
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,MAAM,OAAO,iBAAkB,SAAQ,KAAK;CAAG","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.js'\nimport { CommitData } from '../types.js'\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
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/storage/types.ts"],"names":[],"mappings":"AA8CA,MAAM,OAAO,iBAAkB,SAAQ,KAAK;CAAG","sourcesContent":["import type { Readable } from 'node:stream'\nimport type { check } from '@atproto/common-web'\nimport type { Cid, LexMap } from '@atproto/lex-data'\nimport type { BlockMap } from '../block-map.js'\nimport type { CommitData } from '../types.js'\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"]}
|
package/dist/sync/consumer.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Cid } from '@atproto/lex-data';
|
|
2
|
-
import { BlockMap } from '../block-map.js';
|
|
1
|
+
import type { Cid } from '@atproto/lex-data';
|
|
2
|
+
import type { BlockMap } from '../block-map.js';
|
|
3
3
|
import { ReadableRepo } from '../readable-repo.js';
|
|
4
|
-
import { RecordCidClaim, RecordClaim, VerifiedDiff, VerifiedRepo } from '../types.js';
|
|
4
|
+
import { type RecordCidClaim, type RecordClaim, type VerifiedDiff, type VerifiedRepo } from '../types.js';
|
|
5
5
|
export declare const verifyRepoCar: (carBytes: Uint8Array, did?: string, signingKey?: string) => Promise<VerifiedRepo>;
|
|
6
6
|
export declare const verifyRepo: (blocks: BlockMap, head: Cid, did?: string, signingKey?: string, opts?: {
|
|
7
7
|
ensureLeaves?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consumer.d.ts","sourceRoot":"","sources":["../../src/sync/consumer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"consumer.d.ts","sourceRoot":"","sources":["../../src/sync/consumer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAI/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAMlD,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,YAAY,EAElB,MAAM,aAAa,CAAA;AAGpB,eAAO,MAAM,aAAa,aACd,UAAU,QACd,MAAM,eACC,MAAM,KAClB,OAAO,CAAC,YAAY,CAGtB,CAAA;AAED,eAAO,MAAM,UAAU,WACb,QAAQ,QACV,GAAG,QACH,MAAM,eACC,MAAM,SACZ;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,KAChC,OAAO,CAAC,YAAY,CAOtB,CAAA;AAED,eAAO,MAAM,aAAa,SAClB,YAAY,GAAG,IAAI,YACf,UAAU,QACd,MAAM,eACC,MAAM,SACZ;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,KAChC,OAAO,CAAC,YAAY,CAGtB,CAAA;AAED,eAAO,MAAM,UAAU,SACf,YAAY,GAAG,IAAI,gBACX,QAAQ,cACV,GAAG,QACT,MAAM,eACC,MAAM,SACZ;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,KAChC,OAAO,CAAC,YAAY,CA0CtB,CAAA;AAwBD,eAAO,MAAM,YAAY,WACf,UAAU,UACV,cAAc,EAAE,OACnB,MAAM,UACH,MAAM,KACb,OAAO,CAAC;IAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;IAAC,UAAU,EAAE,cAAc,EAAE,CAAA;CAAE,CAoCtE,CAAA;AAED,eAAO,MAAM,aAAa,WAChB,UAAU,OACb,MAAM,cACC,MAAM,KACjB,OAAO,CAAC,WAAW,EAAE,CA6BvB,CAAA;AAED,qBAAa,qBAAsB,SAAQ,KAAK;CAAG"}
|
|
@@ -1 +1 @@
|
|
|
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.js'\nimport { readCarWithRoot } from '../car.js'\nimport { DataDiff } from '../data-diff.js'\nimport { MST } from '../mst/index.js'\nimport { ReadableRepo } from '../readable-repo.js'\nimport {\n MemoryBlockstore,\n ReadableBlockstore,\n SyncStorage,\n} from '../storage/index.js'\nimport {\n RecordCidClaim,\n RecordClaim,\n VerifiedDiff,\n VerifiedRepo,\n def,\n} from '../types.js'\nimport * as util from '../util.js'\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
|
+
{"version":3,"file":"consumer.js","sourceRoot":"","sources":["../../src/sync/consumer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Cid } from '@atproto/lex-data'\nimport type { BlockMap } from '../block-map.js'\nimport { readCarWithRoot } from '../car.js'\nimport { DataDiff } from '../data-diff.js'\nimport { MST } from '../mst/index.js'\nimport { ReadableRepo } from '../readable-repo.js'\nimport {\n MemoryBlockstore,\n type ReadableBlockstore,\n SyncStorage,\n} from '../storage/index.js'\nimport {\n type RecordCidClaim,\n type RecordClaim,\n type VerifiedDiff,\n type VerifiedRepo,\n def,\n} from '../types.js'\nimport * as util from '../util.js'\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"]}
|
package/dist/sync/provider.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Cid } from '@atproto/lex-data';
|
|
2
|
-
import { ReadableBlockstore, RepoStorage } from '../storage/index.js';
|
|
3
|
-
import { RecordPath } from '../types.js';
|
|
1
|
+
import type { Cid } from '@atproto/lex-data';
|
|
2
|
+
import type { ReadableBlockstore, RepoStorage } from '../storage/index.js';
|
|
3
|
+
import { type RecordPath } from '../types.js';
|
|
4
4
|
export declare const getFullRepo: (storage: RepoStorage, commitCid: Cid) => AsyncIterable<Uint8Array>;
|
|
5
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,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/sync/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAK5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC1E,OAAO,EAAiB,KAAK,UAAU,EAAO,MAAM,aAAa,CAAA;AAMjE,eAAO,MAAM,WAAW,YACb,WAAW,aACT,GAAG,KACb,aAAa,CAAC,UAAU,CAE1B,CAAA;AAiBD,eAAO,MAAM,UAAU,YACZ,kBAAkB,aAChB,GAAG,SACP,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,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAErC,OAAO,
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/sync/provider.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Cid } from '@atproto/lex-data'\nimport { writeCarStream } from '../car.js'\nimport { CidSet } from '../cid-set.js'\nimport { MissingBlocksError } from '../error.js'\nimport { MST } from '../mst/index.js'\nimport type { ReadableBlockstore, RepoStorage } from '../storage/index.js'\nimport { type CarBlock, type RecordPath, def } from '../types.js'\nimport * as util from '../util.js'\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"]}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { Cid, LexMap } from '@atproto/lex-data';
|
|
3
|
-
import { NsidString, RecordKeyString } from '@atproto/syntax';
|
|
4
|
-
import { BlockMap } from './block-map.js';
|
|
5
|
-
import { CidSet } from './cid-set.js';
|
|
2
|
+
import { type Cid, type LexMap } from '@atproto/lex-data';
|
|
3
|
+
import type { NsidString, RecordKeyString } from '@atproto/syntax';
|
|
4
|
+
import type { BlockMap } from './block-map.js';
|
|
5
|
+
import type { CidSet } from './cid-set.js';
|
|
6
6
|
declare const _unsignedCommit: z.ZodObject<{
|
|
7
7
|
did: z.ZodString;
|
|
8
8
|
version: z.ZodLiteral<3>;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,GAAG,EAAE,MAAM,EAAS,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport { type Cid, type LexMap, ifCid } from '@atproto/lex-data'\nimport type { NsidString, RecordKeyString } from '@atproto/syntax'\nimport type { BlockMap } from './block-map.js'\nimport type { CidSet } from './cid-set.js'\n\n// Repo nodes\n// ---------------\n\nconst cidSchema = z.unknown().transform((input, ctx): Cid => {\n const cid = ifCid(input)\n if (cid) return cid\n\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'Not a valid CID',\n })\n return z.NEVER\n})\n\nconst _unsignedCommit = z.object({\n did: z.string(),\n version: z.literal(3),\n data: cidSchema,\n rev: z.string(),\n // `prev` added for backwards compatibility with v2, no requirement of keeping around history\n prev: cidSchema.nullable(),\n})\nexport type UnsignedCommit = z.infer<typeof _unsignedCommit> & { sig?: never }\n\nconst commit = z.object({\n did: z.string(),\n version: z.literal(3),\n data: cidSchema,\n rev: z.string(),\n prev: cidSchema.nullable(),\n sig: z.instanceof(Uint8Array<ArrayBufferLike>),\n})\nexport type Commit = z.infer<typeof commit>\n\nconst legacyV2Commit = z.object({\n did: z.string(),\n version: z.literal(2),\n data: cidSchema,\n rev: z.string().optional(),\n prev: cidSchema.nullable(),\n sig: z.instanceof(Uint8Array<ArrayBufferLike>),\n})\nexport type LegacyV2Commit = z.infer<typeof legacyV2Commit>\n\nconst versionedCommit = z.discriminatedUnion('version', [\n commit,\n legacyV2Commit,\n])\nexport type VersionedCommit = z.infer<typeof versionedCommit>\n\nexport const schema = {\n cid: cidSchema,\n carHeader: z.object({\n version: z.literal(1),\n roots: z.array(cidSchema),\n }),\n bytes: z.instanceof(Uint8Array<ArrayBufferLike>),\n string: z.string(),\n array: z.array(z.unknown()),\n map: z.record(z.string(), z.unknown()),\n unknown: z.unknown(),\n commit,\n legacyV2Commit,\n versionedCommit,\n}\n\nexport const def = {\n cid: {\n name: 'cid',\n schema: schema.cid,\n },\n carHeader: {\n name: 'CAR header',\n schema: schema.carHeader,\n },\n bytes: {\n name: 'bytes',\n schema: schema.bytes,\n },\n string: {\n name: 'string',\n schema: schema.string,\n },\n map: {\n name: 'map',\n schema: schema.map,\n },\n unknown: {\n name: 'unknown',\n schema: schema.unknown,\n },\n commit: {\n name: 'commit',\n schema: schema.commit,\n },\n versionedCommit: {\n name: 'versioned_commit',\n schema: schema.versionedCommit,\n },\n}\n\n// Repo Operations\n// ---------------\n\nexport enum WriteOpAction {\n Create = 'create',\n Update = 'update',\n Delete = 'delete',\n}\n\nexport type RecordCreateOp = {\n action: WriteOpAction.Create\n collection: NsidString\n rkey: RecordKeyString\n record: LexMap\n}\n\nexport type RecordUpdateOp = {\n action: WriteOpAction.Update\n collection: NsidString\n rkey: RecordKeyString\n record: LexMap\n}\n\nexport type RecordDeleteOp = {\n action: WriteOpAction.Delete\n collection: NsidString\n rkey: RecordKeyString\n}\n\nexport type RecordWriteOp = RecordCreateOp | RecordUpdateOp | RecordDeleteOp\n\nexport type RecordCreateDescript = {\n action: WriteOpAction.Create\n collection: NsidString\n rkey: RecordKeyString\n cid: Cid\n}\n\nexport type RecordUpdateDescript = {\n action: WriteOpAction.Update\n collection: NsidString\n rkey: RecordKeyString\n prev: Cid\n cid: Cid\n}\n\nexport type RecordDeleteDescript = {\n action: WriteOpAction.Delete\n collection: NsidString\n rkey: RecordKeyString\n cid: Cid\n}\n\nexport type RecordWriteDescript =\n | RecordCreateDescript\n | RecordUpdateDescript\n | RecordDeleteDescript\n\nexport type WriteLog = RecordWriteDescript[][]\n\n// Updates/Commits\n// ---------------\n\nexport type CommitData = {\n cid: Cid\n rev: string\n since: string | null\n prev: Cid | null\n newBlocks: BlockMap\n relevantBlocks: BlockMap\n removedCids: CidSet\n}\n\nexport type RepoUpdate = CommitData & {\n ops: RecordWriteOp[]\n}\n\nexport type CollectionContents = Record<string, LexMap>\nexport type RepoContents = Record<NsidString, CollectionContents>\n\nexport type RepoRecordWithCid = { cid: Cid; value: LexMap }\nexport type CollectionContentsWithCids = Record<string, RepoRecordWithCid>\nexport type RepoContentsWithCids = Record<string, CollectionContentsWithCids>\n\nexport type DatastoreContents = Record<string, Cid>\n\nexport type RecordPath = {\n collection: string\n rkey: string\n}\n\nexport type RecordCidClaim = {\n collection: string\n rkey: string\n cid: Cid | null\n}\n\nexport type RecordClaim = {\n collection: string\n rkey: string\n record: LexMap | null\n}\n\n// Sync\n// ---------------\n\nexport type VerifiedDiff = {\n writes: RecordWriteDescript[]\n commit: CommitData\n}\n\nexport type VerifiedRepo = {\n creates: RecordCreateDescript[]\n commit: CommitData\n}\n\nexport type CarBlock = {\n cid: Cid\n bytes: Uint8Array\n}\n"]}
|
package/dist/util.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Keypair } from '@atproto/crypto';
|
|
2
|
-
import { Cid, LexMap, LexValue } from '@atproto/lex-data';
|
|
3
|
-
import { DataDiff } from './data-diff.js';
|
|
4
|
-
import { Commit, LegacyV2Commit, RecordCreateDescript, RecordPath, RecordWriteDescript, UnsignedCommit } from './types.js';
|
|
1
|
+
import type { Keypair } from '@atproto/crypto';
|
|
2
|
+
import { type Cid, type LexMap, type LexValue } from '@atproto/lex-data';
|
|
3
|
+
import type { DataDiff } from './data-diff.js';
|
|
4
|
+
import { type Commit, type LegacyV2Commit, type RecordCreateDescript, type RecordPath, type RecordWriteDescript, type UnsignedCommit } from './types.js';
|
|
5
5
|
export declare const diffToWriteDescripts: (diff: DataDiff) => Promise<RecordWriteDescript[]>;
|
|
6
6
|
export declare const ensureCreates: (descripts: RecordWriteDescript[]) => RecordCreateDescript[];
|
|
7
7
|
export declare const parseDataKey: (key: string) => RecordPath;
|
package/dist/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAE9C,OAAO,EACL,KAAK,GAAG,EACR,KAAK,MAAM,EACX,KAAK,QAAQ,EAEd,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EACL,KAAK,MAAM,EACX,KAAK,cAAc,EACnB,KAAK,oBAAoB,EAEzB,KAAK,UAAU,EAEf,KAAK,mBAAmB,EACxB,KAAK,cAAc,EAEpB,MAAM,YAAY,CAAA;AAEnB,eAAO,MAAM,oBAAoB,SACzB,QAAQ,KACb,OAAO,CAAC,mBAAmB,EAAE,CA+B/B,CAAA;AAED,eAAO,MAAM,aAAa,cACb,mBAAmB,EAAE,KAC/B,oBAAoB,EAUtB,CAAA;AAED,eAAO,MAAM,YAAY,QAAS,MAAM,KAAG,UAI1C,CAAA;AAED,eAAO,MAAM,aAAa,eAAgB,MAAM,QAAQ,MAAM,KAAG,MAEhE,CAAA;AAED,eAAO,MAAM,SAAS,MAAO,MAAM,KAAK,MAAM,KAAG,OAEhD,CAAA;AAED,eAAO,MAAM,UAAU,aACX,cAAc,WACf,OAAO,KACf,OAAO,CAAC,MAAM,CAOhB,CAAA;AAED,eAAO,MAAM,eAAe,WAClB,MAAM,UACN,MAAM,KACb,OAAO,CAAC,OAAO,CAIjB,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,QAAsB,CAAA;AAEnE,eAAO,MAAM,eAAe,QAAS,UAAU,KAAG,MAMjD,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,GAAG,CAAkB,CAAA;AAE3E,eAAO,MAAM,cAAc,WAAY,cAAc,GAAG,MAAM,KAAG,MAUhE,CAAA;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,wCAIzE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,GAAG,UAAU,CAUrE"}
|
package/dist/util.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { TID } from '@atproto/common-web';
|
|
2
2
|
import * as crypto from '@atproto/crypto';
|
|
3
3
|
import * as cbor from '@atproto/lex-cbor';
|
|
4
|
-
import { isPlainObject } from '@atproto/lex-data';
|
|
4
|
+
import { isPlainObject, } from '@atproto/lex-data';
|
|
5
5
|
import { WriteOpAction, } from './types.js';
|
|
6
6
|
export const diffToWriteDescripts = (diff) => {
|
|
7
7
|
return Promise.all([
|
package/dist/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAA;AAEzC,OAAO,KAAK,IAAI,MAAM,mBAAmB,CAAA;AACzC,OAAO,
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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","sourcesContent":["import { TID } from '@atproto/common-web'\nimport * as crypto from '@atproto/crypto'\nimport type { Keypair } from '@atproto/crypto'\nimport * as cbor from '@atproto/lex-cbor'\nimport {\n type Cid,\n type LexMap,\n type LexValue,\n isPlainObject,\n} from '@atproto/lex-data'\nimport type { DataDiff } from './data-diff.js'\nimport {\n type Commit,\n type LegacyV2Commit,\n type RecordCreateDescript,\n type RecordDeleteDescript,\n type RecordPath,\n type RecordUpdateDescript,\n type RecordWriteDescript,\n type UnsignedCommit,\n WriteOpAction,\n} from './types.js'\n\nexport const diffToWriteDescripts = (\n diff: DataDiff,\n): Promise<RecordWriteDescript[]> => {\n return Promise.all([\n ...diff.addList().map(async (add) => {\n const { collection, rkey } = parseDataKey(add.key)\n return {\n action: WriteOpAction.Create,\n collection,\n rkey,\n cid: add.cid,\n } as RecordCreateDescript\n }),\n ...diff.updateList().map(async (upd) => {\n const { collection, rkey } = parseDataKey(upd.key)\n return {\n action: WriteOpAction.Update,\n collection,\n rkey,\n cid: upd.cid,\n prev: upd.prev,\n } as RecordUpdateDescript\n }),\n ...diff.deleteList().map((del) => {\n const { collection, rkey } = parseDataKey(del.key)\n return {\n action: WriteOpAction.Delete,\n collection,\n rkey,\n cid: del.cid,\n } as RecordDeleteDescript\n }),\n ])\n}\n\nexport const ensureCreates = (\n descripts: RecordWriteDescript[],\n): RecordCreateDescript[] => {\n const creates: RecordCreateDescript[] = []\n for (const descript of descripts) {\n if (descript.action !== WriteOpAction.Create) {\n throw new Error(`Unexpected action: ${descript.action}`)\n } else {\n creates.push(descript)\n }\n }\n return creates\n}\n\nexport const parseDataKey = (key: string): RecordPath => {\n const { length, 0: collection, 1: rkey } = key.split('/')\n if (length !== 2) throw new Error(`Invalid record key: ${key}`)\n return { collection, rkey }\n}\n\nexport const formatDataKey = (collection: string, rkey: string): string => {\n return collection + '/' + rkey\n}\n\nexport const metaEqual = (a: Commit, b: Commit): boolean => {\n return a.did === b.did && a.version === b.version\n}\n\nexport const signCommit = async (\n unsigned: UnsignedCommit,\n keypair: Keypair,\n): Promise<Commit> => {\n const encoded = cbor.encode(unsigned)\n const sig = await keypair.sign(encoded)\n return {\n ...unsigned,\n sig,\n }\n}\n\nexport const verifyCommitSig = async (\n commit: Commit,\n didKey: string,\n): Promise<boolean> => {\n const { sig, ...rest } = commit\n const encoded = cbor.encode(rest)\n return crypto.verifySignature(didKey, encoded, sig)\n}\n\nexport const cborToLex: (val: Uint8Array) => LexValue = cbor.decode\n\nexport const cborToLexRecord = (val: Uint8Array): LexMap => {\n const parsed = cborToLex(val)\n if (!isPlainObject(parsed)) {\n throw new Error('lexicon records be a json object')\n }\n return parsed\n}\n\nexport const cidForRecord: (val: LexValue) => Promise<Cid> = cbor.cidForLex\n\nexport const ensureV3Commit = (commit: LegacyV2Commit | Commit): Commit => {\n if (commit.version === 3) {\n return commit\n } else {\n return {\n ...commit,\n version: 3,\n rev: commit.rev ?? TID.nextStr(),\n }\n }\n}\n\nexport async function concatBytesAsync(iterable: AsyncIterable<Uint8Array>) {\n const chunks: Uint8Array[] = []\n for await (const chunk of iterable) chunks.push(chunk)\n return concatBytes(chunks)\n}\n\n/**\n * This is the same as {@link Buffer.concat}, without the `totalLength` argument.\n */\nexport function concatBytes(chunks: readonly Uint8Array[]): Uint8Array {\n let totalLength = 0\n for (const chunk of chunks) totalLength += chunk.byteLength\n const result = new Uint8Array(totalLength)\n let offset = 0\n for (const chunk of chunks) {\n result.set(chunk, offset)\n offset += chunk.byteLength\n }\n return result\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atproto/repo",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.5",
|
|
4
4
|
"engines": {
|
|
5
5
|
"node": ">=22"
|
|
6
6
|
},
|
|
@@ -31,12 +31,12 @@
|
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"varint": "^6.0.0",
|
|
33
33
|
"zod": "^3.23.8",
|
|
34
|
-
"@atproto/common": "^0.7.
|
|
35
|
-
"@atproto/
|
|
36
|
-
"@atproto/lex-
|
|
37
|
-
"@atproto/
|
|
38
|
-
"@atproto/
|
|
39
|
-
"@atproto/
|
|
34
|
+
"@atproto/common": "^0.7.1",
|
|
35
|
+
"@atproto/crypto": "^0.5.4",
|
|
36
|
+
"@atproto/lex-cbor": "^0.1.4",
|
|
37
|
+
"@atproto/common-web": "^0.5.5",
|
|
38
|
+
"@atproto/syntax": "^0.7.1",
|
|
39
|
+
"@atproto/lex-data": "^0.1.5"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"jest": "^30.0.0"
|