@atcute/car 1.1.1 → 2.0.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.
@@ -1,14 +1,12 @@
1
- import * as CBOR from '@atcute/cbor';
1
+ import * as CID from '@atcute/cid';
2
2
  export declare class RepoEntry {
3
3
  readonly collection: string;
4
4
  readonly rkey: string;
5
- readonly cid: CBOR.CIDLink;
5
+ readonly cid: CID.CidLink;
6
6
  private blockmap;
7
- constructor(collection: string, rkey: string, cid: CBOR.CIDLink, blockmap: BlockMap);
7
+ constructor(collection: string, rkey: string, cid: CID.CidLink, blockmap: BlockMap);
8
8
  get record(): unknown;
9
9
  }
10
10
  export declare function iterateAtpRepo(buf: Uint8Array): Generator<RepoEntry>;
11
- /** @deprecated Use `iterateAtpRepo` instead */
12
- export declare const iterateAtpCar: typeof iterateAtpRepo;
13
11
  type BlockMap = Map<string, Uint8Array>;
14
12
  export {};
@@ -23,7 +23,7 @@ export function* iterateAtpRepo(buf) {
23
23
  // Collect all archive entries into a mapping of CID string -> actual bytes
24
24
  const blockmap = new Map();
25
25
  for (const entry of iterate()) {
26
- blockmap.set(CID.format(entry.cid), entry.bytes);
26
+ blockmap.set(CID.toString(entry.cid), entry.bytes);
27
27
  }
28
28
  // Read the head, then walk through the MST tree from there.
29
29
  const commit = readObject(blockmap, roots[0]);
@@ -32,8 +32,6 @@ export function* iterateAtpRepo(buf) {
32
32
  yield new RepoEntry(collection, rkey, cid, blockmap);
33
33
  }
34
34
  }
35
- /** @deprecated Use `iterateAtpRepo` instead */
36
- export const iterateAtpCar = iterateAtpRepo;
37
35
  function readObject(map, link) {
38
36
  const cid = link.$link;
39
37
  const bytes = map.get(cid);
@@ -1 +1 @@
1
- {"version":3,"file":"atproto-repo.js","sourceRoot":"","sources":["../lib/atproto-repo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"atproto-repo.js","sourceRoot":"","sources":["../lib/atproto-repo.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { iterateAtpCar, iterateAtpRepo, type RepoEntry } from './atproto-repo.js';
2
- export { fromUint8Array, readCar } from './reader.js';
1
+ export { iterateAtpRepo, type RepoEntry } from './atproto-repo.js';
2
+ export { readCar } from './reader.js';
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export { iterateAtpCar, iterateAtpRepo } from './atproto-repo.js';
2
- export { fromUint8Array, readCar } from './reader.js';
1
+ export { iterateAtpRepo } from './atproto-repo.js';
2
+ export { readCar } from './reader.js';
3
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAkB,MAAM,mBAAmB,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAkB,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC"}
package/dist/reader.d.ts CHANGED
@@ -1,15 +1,7 @@
1
1
  export declare const readCar: (buffer: Uint8Array) => {
2
- roots: import("@atcute/cbor").CIDLink[];
2
+ roots: import("@atcute/cid").CidLink[];
3
3
  iterate(): Generator<{
4
- cid: import("@atcute/cid").CID;
5
- bytes: Uint8Array;
6
- }>;
7
- };
8
- /** @deprecated Use `readCar` instead */
9
- export declare const fromUint8Array: (buffer: Uint8Array) => {
10
- roots: import("@atcute/cbor").CIDLink[];
11
- iterate(): Generator<{
12
- cid: import("@atcute/cid").CID;
4
+ cid: import("@atcute/cid").Cid;
13
5
  bytes: Uint8Array;
14
6
  }>;
15
7
  };
package/dist/reader.js CHANGED
@@ -4,6 +4,4 @@ export const readCar = (buffer) => {
4
4
  const reader = createUint8Reader(buffer);
5
5
  return createCarReader(reader);
6
6
  };
7
- /** @deprecated Use `readCar` instead */
8
- export const fromUint8Array = readCar;
9
7
  //# sourceMappingURL=reader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reader.js","sourceRoot":"","sources":["../lib/reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,MAAkB,EAAE,EAAE;IAC7C,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC,CAAC;AAEF,wCAAwC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC"}
1
+ {"version":3,"file":"reader.js","sourceRoot":"","sources":["../lib/reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,MAAkB,EAAE,EAAE;IAC7C,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC,CAAC"}
@@ -2,9 +2,9 @@ import * as CBOR from '@atcute/cbor';
2
2
  import * as CID from '@atcute/cid';
3
3
  import type { SyncByteReader } from './byte-reader.js';
4
4
  export declare const createCarReader: (reader: SyncByteReader) => {
5
- roots: CBOR.CIDLink[];
5
+ roots: CBOR.CidLink[];
6
6
  iterate(): Generator<{
7
- cid: CID.CID;
7
+ cid: CID.Cid;
8
8
  bytes: Uint8Array;
9
9
  }>;
10
10
  };
@@ -1,12 +1,12 @@
1
1
  import * as CBOR from '@atcute/cbor';
2
- import * as varint from '@atcute/varint';
3
2
  import * as CID from '@atcute/cid';
3
+ import * as varint from '@atcute/varint';
4
4
  const isCarV1Header = (value) => {
5
5
  if (value === null || typeof value !== 'object') {
6
6
  return false;
7
7
  }
8
8
  const { version, roots } = value;
9
- return version === 1 && Array.isArray(roots) && roots.every((root) => root instanceof CBOR.CIDLinkWrapper);
9
+ return version === 1 && Array.isArray(roots) && roots.every((root) => root instanceof CBOR.CidLinkWrapper);
10
10
  };
11
11
  const readVarint = (reader, size) => {
12
12
  const buf = reader.upto(size);
@@ -29,32 +29,31 @@ const readHeader = (reader) => {
29
29
  }
30
30
  return header;
31
31
  };
32
- const readMultihashDigest = (reader) => {
33
- const first = reader.upto(8);
34
- const [code, codeOffset] = varint.decode(first);
35
- const [size, sizeOffset] = varint.decode(first.subarray(codeOffset));
36
- const offset = codeOffset + sizeOffset;
37
- const bytes = reader.exactly(offset + size, true);
38
- const digest = bytes.subarray(offset);
39
- return {
40
- code: code,
41
- size: size,
42
- digest: digest,
43
- bytes: bytes,
44
- };
45
- };
46
32
  const readCid = (reader) => {
47
- const version = readVarint(reader, 8);
48
- if (version !== 1) {
49
- throw new Error(`expected a cidv1`);
33
+ const head = reader.upto(3 + 4);
34
+ const version = head[0];
35
+ const codec = head[1];
36
+ const digestCodec = head[2];
37
+ if (version !== CID.CID_VERSION) {
38
+ throw new RangeError(`incorrect cid version (got v${version})`);
39
+ }
40
+ if (codec !== CID.CODEC_DCBOR && codec !== CID.CODEC_RAW) {
41
+ throw new RangeError(`incorrect cid codec (got 0x${codec.toString(16)})`);
42
+ }
43
+ if (digestCodec !== CID.HASH_SHA256) {
44
+ throw new RangeError(`incorrect cid hash type (got 0x${digestCodec.toString(16)})`);
50
45
  }
51
- const codec = readVarint(reader, 8);
52
- const digest = readMultihashDigest(reader);
46
+ const [digestSize, digestLebSize] = varint.decode(head, 3);
47
+ const bytes = reader.exactly(3 + digestLebSize + digestSize, true);
48
+ const digest = bytes.subarray(3 + digestLebSize);
53
49
  const cid = {
54
50
  version: version,
55
- code: codec,
56
- digest: digest,
57
- bytes: CID.encode(version, codec, digest.bytes),
51
+ codec: codec,
52
+ digest: {
53
+ codec: digestCodec,
54
+ contents: digest,
55
+ },
56
+ bytes: bytes,
58
57
  };
59
58
  return cid;
60
59
  };
@@ -1 +1 @@
1
- {"version":3,"file":"sync-car-reader.js","sourceRoot":"","sources":["../../lib/utilities/sync-car-reader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync-car-reader.js","sourceRoot":"","sources":["../../lib/utilities/sync-car-reader.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ export class RepoEntry {
9
9
  constructor(
10
10
  public readonly collection: string,
11
11
  public readonly rkey: string,
12
- public readonly cid: CBOR.CIDLink,
12
+ public readonly cid: CID.CidLink,
13
13
  private blockmap: BlockMap,
14
14
  ) {}
15
15
 
@@ -25,7 +25,7 @@ export function* iterateAtpRepo(buf: Uint8Array): Generator<RepoEntry> {
25
25
  // Collect all archive entries into a mapping of CID string -> actual bytes
26
26
  const blockmap: BlockMap = new Map();
27
27
  for (const entry of iterate()) {
28
- blockmap.set(CID.format(entry.cid), entry.bytes);
28
+ blockmap.set(CID.toString(entry.cid), entry.bytes);
29
29
  }
30
30
 
31
31
  // Read the head, then walk through the MST tree from there.
@@ -37,10 +37,7 @@ export function* iterateAtpRepo(buf: Uint8Array): Generator<RepoEntry> {
37
37
  }
38
38
  }
39
39
 
40
- /** @deprecated Use `iterateAtpRepo` instead */
41
- export const iterateAtpCar = iterateAtpRepo;
42
-
43
- function readObject(map: BlockMap, link: CBOR.CIDLink): unknown {
40
+ function readObject(map: BlockMap, link: CID.CidLink): unknown {
44
41
  const cid = link.$link;
45
42
 
46
43
  const bytes = map.get(cid);
@@ -51,7 +48,7 @@ function readObject(map: BlockMap, link: CBOR.CIDLink): unknown {
51
48
  return data;
52
49
  }
53
50
 
54
- function* walkEntries(map: BlockMap, pointer: CBOR.CIDLink): Generator<NodeEntry> {
51
+ function* walkEntries(map: BlockMap, pointer: CID.CidLink): Generator<NodeEntry> {
55
52
  const data = readObject(map, pointer) as MstNode;
56
53
  const entries = data.e;
57
54
 
@@ -88,9 +85,9 @@ type BlockMap = Map<string, Uint8Array>;
88
85
  interface Commit {
89
86
  version: 3;
90
87
  did: string;
91
- data: CBOR.CIDLink;
88
+ data: CID.CidLink;
92
89
  rev: string;
93
- prev: CBOR.CIDLink | null;
90
+ prev: CID.CidLink | null;
94
91
  sig: CBOR.Bytes;
95
92
  }
96
93
 
@@ -100,19 +97,19 @@ interface TreeEntry {
100
97
  /** remainder of key for this TreeEntry, after "prefixlen" have been removed */
101
98
  k: CBOR.Bytes;
102
99
  /** link to a sub-tree Node at a lower level which has keys sorting after this TreeEntry's key (to the "right"), but before the next TreeEntry's key in this Node (if any) */
103
- v: CBOR.CIDLink;
100
+ v: CID.CidLink;
104
101
  /** next subtree (to the right of leaf) */
105
- t: CBOR.CIDLink | null;
102
+ t: CID.CidLink | null;
106
103
  }
107
104
 
108
105
  interface MstNode {
109
106
  /** link to sub-tree Node on a lower level and with all keys sorting before keys at this node */
110
- l: CBOR.CIDLink | null;
107
+ l: CID.CidLink | null;
111
108
  /** ordered list of TreeEntry objects */
112
109
  e: TreeEntry[];
113
110
  }
114
111
 
115
112
  interface NodeEntry {
116
113
  key: string;
117
- cid: CBOR.CIDLink;
114
+ cid: CID.CidLink;
118
115
  }
package/lib/index.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { iterateAtpCar, iterateAtpRepo, type RepoEntry } from './atproto-repo.js';
2
- export { fromUint8Array, readCar } from './reader.js';
1
+ export { iterateAtpRepo, type RepoEntry } from './atproto-repo.js';
2
+ export { readCar } from './reader.js';
package/lib/reader.ts CHANGED
@@ -5,6 +5,3 @@ export const readCar = (buffer: Uint8Array) => {
5
5
  const reader = createUint8Reader(buffer);
6
6
  return createCarReader(reader);
7
7
  };
8
-
9
- /** @deprecated Use `readCar` instead */
10
- export const fromUint8Array = readCar;
@@ -1,12 +1,12 @@
1
1
  import * as CBOR from '@atcute/cbor';
2
- import * as varint from '@atcute/varint';
3
2
  import * as CID from '@atcute/cid';
3
+ import * as varint from '@atcute/varint';
4
4
 
5
5
  import type { SyncByteReader } from './byte-reader.js';
6
6
 
7
7
  interface CarV1Header {
8
8
  version: 1;
9
- roots: CBOR.CIDLink[];
9
+ roots: CID.CidLink[];
10
10
  }
11
11
 
12
12
  const isCarV1Header = (value: unknown): value is CarV1Header => {
@@ -15,7 +15,7 @@ const isCarV1Header = (value: unknown): value is CarV1Header => {
15
15
  }
16
16
 
17
17
  const { version, roots } = value as CarV1Header;
18
- return version === 1 && Array.isArray(roots) && roots.every((root) => root instanceof CBOR.CIDLinkWrapper);
18
+ return version === 1 && Array.isArray(roots) && roots.every((root) => root instanceof CBOR.CidLinkWrapper);
19
19
  };
20
20
 
21
21
  const readVarint = (reader: SyncByteReader, size: number): number => {
@@ -45,45 +45,44 @@ const readHeader = (reader: SyncByteReader): CarV1Header => {
45
45
  return header;
46
46
  };
47
47
 
48
- const readMultihashDigest = (reader: SyncByteReader): CID.Digest => {
49
- const first = reader.upto(8);
50
-
51
- const [code, codeOffset] = varint.decode(first);
52
- const [size, sizeOffset] = varint.decode(first.subarray(codeOffset));
48
+ const readCid = (reader: SyncByteReader): CID.Cid => {
49
+ const head = reader.upto(3 + 4);
53
50
 
54
- const offset = codeOffset + sizeOffset;
51
+ const version = head[0];
52
+ const codec = head[1];
53
+ const digestCodec = head[2];
55
54
 
56
- const bytes = reader.exactly(offset + size, true);
57
- const digest = bytes.subarray(offset);
55
+ if (version !== CID.CID_VERSION) {
56
+ throw new RangeError(`incorrect cid version (got v${version})`);
57
+ }
58
58
 
59
- return {
60
- code: code,
61
- size: size,
62
- digest: digest,
63
- bytes: bytes,
64
- };
65
- };
59
+ if (codec !== CID.CODEC_DCBOR && codec !== CID.CODEC_RAW) {
60
+ throw new RangeError(`incorrect cid codec (got 0x${codec.toString(16)})`);
61
+ }
66
62
 
67
- const readCid = (reader: SyncByteReader): CID.CID => {
68
- const version = readVarint(reader, 8);
69
- if (version !== 1) {
70
- throw new Error(`expected a cidv1`);
63
+ if (digestCodec !== CID.HASH_SHA256) {
64
+ throw new RangeError(`incorrect cid hash type (got 0x${digestCodec.toString(16)})`);
71
65
  }
72
66
 
73
- const codec = readVarint(reader, 8);
74
- const digest = readMultihashDigest(reader);
67
+ const [digestSize, digestLebSize] = varint.decode(head, 3);
75
68
 
76
- const cid: CID.CID = {
69
+ const bytes = reader.exactly(3 + digestLebSize + digestSize, true);
70
+ const digest = bytes.subarray(3 + digestLebSize);
71
+
72
+ const cid: CID.Cid = {
77
73
  version: version,
78
- code: codec,
79
- digest: digest,
80
- bytes: CID.encode(version, codec, digest.bytes),
74
+ codec: codec,
75
+ digest: {
76
+ codec: digestCodec,
77
+ contents: digest,
78
+ },
79
+ bytes: bytes,
81
80
  };
82
81
 
83
82
  return cid;
84
83
  };
85
84
 
86
- const readBlockHeader = (reader: SyncByteReader): { cid: CID.CID; blockSize: number } => {
85
+ const readBlockHeader = (reader: SyncByteReader): { cid: CID.Cid; blockSize: number } => {
87
86
  const start = reader.pos;
88
87
 
89
88
  let size = readVarint(reader, 8);
@@ -104,7 +103,7 @@ export const createCarReader = (reader: SyncByteReader) => {
104
103
 
105
104
  return {
106
105
  roots,
107
- *iterate(): Generator<{ cid: CID.CID; bytes: Uint8Array }> {
106
+ *iterate(): Generator<{ cid: CID.Cid; bytes: Uint8Array }> {
108
107
  while (reader.upto(8).length > 0) {
109
108
  const { cid, blockSize } = readBlockHeader(reader);
110
109
  const bytes = reader.exactly(blockSize, true);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@atcute/car",
4
- "version": "1.1.1",
4
+ "version": "2.0.0",
5
5
  "description": "read AT Protocol's CAR (content-addressable archive) repositories",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -22,9 +22,9 @@
22
22
  "@types/bun": "^1.1.12"
23
23
  },
24
24
  "dependencies": {
25
- "@atcute/cbor": "^1.0.6",
25
+ "@atcute/cid": "^2.0.0",
26
26
  "@atcute/varint": "^1.0.1",
27
- "@atcute/cid": "^1.0.2"
27
+ "@atcute/cbor": "^2.0.0"
28
28
  },
29
29
  "scripts": {
30
30
  "build": "tsc --project tsconfig.build.json",