@atcute/cid 1.0.0 → 1.0.2
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/README.md +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/lib/index.ts +189 -0
- package/package.json +10 -6
package/README.md
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -63,3 +63,5 @@ export declare const create: (code: number, input: Uint8Array) => Promise<CID>;
|
|
|
63
63
|
* Serialize CID into a string
|
|
64
64
|
*/
|
|
65
65
|
export declare const format: (cid: CID) => string;
|
|
66
|
+
export declare const createDigest: (code: number, digest: Uint8Array) => Digest;
|
|
67
|
+
export declare const encode: (version: number, code: number, multihash: Uint8Array) => Uint8Array;
|
package/dist/index.js
CHANGED
|
@@ -73,7 +73,7 @@ export const decodeFirst = (bytes) => {
|
|
|
73
73
|
version: 1,
|
|
74
74
|
code: specs.codec,
|
|
75
75
|
digest: digest,
|
|
76
|
-
bytes:
|
|
76
|
+
bytes: bytes.subarray(0, specs.size),
|
|
77
77
|
};
|
|
78
78
|
return [cid, bytes.subarray(specs.size)];
|
|
79
79
|
};
|
|
@@ -92,7 +92,7 @@ export const decode = (bytes) => {
|
|
|
92
92
|
*/
|
|
93
93
|
export const create = async (code, input) => {
|
|
94
94
|
const digest = createDigest(0x12, new Uint8Array(await crypto.subtle.digest('sha-256', input)));
|
|
95
|
-
const bytes =
|
|
95
|
+
const bytes = encode(1, code, digest.bytes);
|
|
96
96
|
return {
|
|
97
97
|
version: 1,
|
|
98
98
|
code: code,
|
|
@@ -106,7 +106,7 @@ export const create = async (code, input) => {
|
|
|
106
106
|
export const format = (cid) => {
|
|
107
107
|
return 'b' + base32.encode(cid.bytes);
|
|
108
108
|
};
|
|
109
|
-
const createDigest = (code, digest) => {
|
|
109
|
+
export const createDigest = (code, digest) => {
|
|
110
110
|
const size = digest.byteLength;
|
|
111
111
|
const sizeOffset = varint.encodingLength(code);
|
|
112
112
|
const digestOffset = sizeOffset + varint.encodingLength(size);
|
|
@@ -121,7 +121,7 @@ const createDigest = (code, digest) => {
|
|
|
121
121
|
bytes: bytes,
|
|
122
122
|
};
|
|
123
123
|
};
|
|
124
|
-
const
|
|
124
|
+
export const encode = (version, code, multihash) => {
|
|
125
125
|
const codeOffset = varint.encodingLength(version);
|
|
126
126
|
const hashOffset = codeOffset + varint.encodingLength(code);
|
|
127
127
|
const bytes = new Uint8Array(hashOffset + multihash.byteLength);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AAkCzC;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,GAAW,EAAO,EAAE;IACzC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,YAAwB,EAAgB,EAAE;IACjE,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,IAAI,GAAG,GAAW,EAAE;QACzB,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACjE,MAAM,IAAI,MAAM,CAAC;QACjB,OAAO,CAAC,CAAC;IACV,CAAC,CAAC;IAEF,IAAI,OAAO,GAAG,IAAI,EAAE,CAAC;IACrB,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,SAAS;IAC3B,IAAK,OAAkB,KAAK,EAAE,EAAE,CAAC;QAChC,QAAQ;QACR,OAAO,GAAG,CAAC,CAAC;QACZ,MAAM,GAAG,CAAC,CAAC;IACZ,CAAC;SAAM,CAAC;QACP,KAAK,GAAG,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,UAAU,CAAC,yBAAyB,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC;IAC1B,MAAM,aAAa,GAAG,IAAI,EAAE,CAAC;IAC7B,MAAM,UAAU,GAAG,IAAI,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAG,MAAM,GAAG,UAAU,CAAC;IACjC,MAAM,aAAa,GAAG,IAAI,GAAG,UAAU,CAAC;IAExC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AAC3E,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAiB,EAAqC,EAAE;IACnF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC;IACpD,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;IAEpF,IAAI,cAAc,CAAC,UAAU,KAAK,KAAK,CAAC,aAAa,EAAE,CAAC;QACvD,MAAM,IAAI,UAAU,CAAC,sBAAsB,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IAEpF,MAAM,MAAM,GAAW;QACtB,IAAI,EAAE,KAAK,CAAC,aAAa;QACzB,IAAI,EAAE,KAAK,CAAC,aAAa;QACzB,MAAM,EAAE,WAAW;QACnB,KAAK,EAAE,cAAc;KACrB,CAAC;IAEF,MAAM,GAAG,GAAQ;QAChB,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,KAAK,CAAC,KAAK;QACjB,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"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"}
|
package/lib/index.ts
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module
|
|
3
|
+
* Bare minimum implementation for creating, parsing, and formatting
|
|
4
|
+
* AT Protocol-blessed CIDv1 format.
|
|
5
|
+
*
|
|
6
|
+
* As specified by AT Protocol, the blessed format is:
|
|
7
|
+
* - Multibase: `base32` (b)
|
|
8
|
+
* - Multicodec: `dag-cbor` (0x71) for record, `raw` (0x55) for blobs
|
|
9
|
+
* - Multihash: `sha-256` (0x12)
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import * as base32 from '@atcute/base32';
|
|
13
|
+
import * as varint from '@atcute/varint';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Raw digest information
|
|
17
|
+
*/
|
|
18
|
+
export interface Digest {
|
|
19
|
+
code: number;
|
|
20
|
+
size: number;
|
|
21
|
+
digest: Uint8Array;
|
|
22
|
+
bytes: Uint8Array;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* CID information
|
|
27
|
+
*/
|
|
28
|
+
export interface CID {
|
|
29
|
+
version: number;
|
|
30
|
+
code: number;
|
|
31
|
+
digest: Digest;
|
|
32
|
+
bytes: Uint8Array;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Information regarding CID buffer being inspected
|
|
37
|
+
*/
|
|
38
|
+
export interface InspectedCID {
|
|
39
|
+
version: number;
|
|
40
|
+
codec: number;
|
|
41
|
+
multihashCode: number;
|
|
42
|
+
digestSize: number;
|
|
43
|
+
multihashSize: number;
|
|
44
|
+
size: number;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Parse a CID string
|
|
49
|
+
*/
|
|
50
|
+
export const parse = (cid: string): CID => {
|
|
51
|
+
if (cid[0] !== 'b') {
|
|
52
|
+
throw new Error(`only base32 cidv1 is supported`);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const bytes = base32.decode(cid.slice(1));
|
|
56
|
+
return decode(bytes);
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Provides information regarding the CID buffer
|
|
61
|
+
*/
|
|
62
|
+
export const inspect = (initialBytes: Uint8Array): InspectedCID => {
|
|
63
|
+
let offset = 0;
|
|
64
|
+
const next = (): number => {
|
|
65
|
+
const [i, length] = varint.decode(initialBytes.subarray(offset));
|
|
66
|
+
offset += length;
|
|
67
|
+
return i;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
let version = next();
|
|
71
|
+
let codec = 0x70; // dag-pb
|
|
72
|
+
if ((version as number) === 18) {
|
|
73
|
+
// CIDv0
|
|
74
|
+
version = 0;
|
|
75
|
+
offset = 0;
|
|
76
|
+
} else {
|
|
77
|
+
codec = next();
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (version !== 1) {
|
|
81
|
+
throw new RangeError(`only cidv1 is supported`);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const prefixSize = offset;
|
|
85
|
+
const multihashCode = next();
|
|
86
|
+
const digestSize = next();
|
|
87
|
+
const size = offset + digestSize;
|
|
88
|
+
const multihashSize = size - prefixSize;
|
|
89
|
+
|
|
90
|
+
return { version, codec, multihashCode, digestSize, multihashSize, size };
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Decode the first CID contained, and return the remainder.
|
|
95
|
+
* @param bytes Buffer to decode
|
|
96
|
+
* @returns A tuple containing the first CID in the buffer, and the remainder
|
|
97
|
+
*/
|
|
98
|
+
export const decodeFirst = (bytes: Uint8Array): [cid: CID, remainder: Uint8Array] => {
|
|
99
|
+
const specs = inspect(bytes);
|
|
100
|
+
const prefixSize = specs.size - specs.multihashSize;
|
|
101
|
+
const multihashBytes = bytes.subarray(prefixSize, prefixSize + specs.multihashSize);
|
|
102
|
+
|
|
103
|
+
if (multihashBytes.byteLength !== specs.multihashSize) {
|
|
104
|
+
throw new RangeError('incorrect cid length');
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const digestBytes = multihashBytes.subarray(specs.multihashSize - specs.digestSize);
|
|
108
|
+
|
|
109
|
+
const digest: Digest = {
|
|
110
|
+
code: specs.multihashCode,
|
|
111
|
+
size: specs.multihashSize,
|
|
112
|
+
digest: digestBytes,
|
|
113
|
+
bytes: multihashBytes,
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
const cid: CID = {
|
|
117
|
+
version: 1,
|
|
118
|
+
code: specs.codec,
|
|
119
|
+
digest: digest,
|
|
120
|
+
bytes: bytes.subarray(0, specs.size),
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
return [cid, bytes.subarray(specs.size)];
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Decodes a CID buffer
|
|
128
|
+
*/
|
|
129
|
+
export const decode = (bytes: Uint8Array): CID => {
|
|
130
|
+
const [cid, remainder] = decodeFirst(bytes);
|
|
131
|
+
|
|
132
|
+
if (remainder.length !== 0) {
|
|
133
|
+
throw new Error(`incorrect cid length`);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return cid;
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Creates a CID
|
|
141
|
+
*/
|
|
142
|
+
export const create = async (code: number, input: Uint8Array): Promise<CID> => {
|
|
143
|
+
const digest = createDigest(0x12, new Uint8Array(await crypto.subtle.digest('sha-256', input)));
|
|
144
|
+
const bytes = encode(1, code, digest.bytes);
|
|
145
|
+
|
|
146
|
+
return {
|
|
147
|
+
version: 1,
|
|
148
|
+
code: code,
|
|
149
|
+
digest: digest,
|
|
150
|
+
bytes: bytes,
|
|
151
|
+
};
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Serialize CID into a string
|
|
156
|
+
*/
|
|
157
|
+
export const format = (cid: CID): string => {
|
|
158
|
+
return 'b' + base32.encode(cid.bytes);
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
export const createDigest = (code: number, digest: Uint8Array): Digest => {
|
|
162
|
+
const size = digest.byteLength;
|
|
163
|
+
const sizeOffset = varint.encodingLength(code);
|
|
164
|
+
const digestOffset = sizeOffset + varint.encodingLength(size);
|
|
165
|
+
|
|
166
|
+
const bytes = new Uint8Array(digestOffset + size);
|
|
167
|
+
varint.encode(code, bytes, 0);
|
|
168
|
+
varint.encode(size, bytes, sizeOffset);
|
|
169
|
+
bytes.set(digest, digestOffset);
|
|
170
|
+
|
|
171
|
+
return {
|
|
172
|
+
code: code,
|
|
173
|
+
size: size,
|
|
174
|
+
digest: digest,
|
|
175
|
+
bytes: bytes,
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
export const encode = (version: number, code: number, multihash: Uint8Array): Uint8Array => {
|
|
180
|
+
const codeOffset = varint.encodingLength(version);
|
|
181
|
+
const hashOffset = codeOffset + varint.encodingLength(code);
|
|
182
|
+
|
|
183
|
+
const bytes = new Uint8Array(hashOffset + multihash.byteLength);
|
|
184
|
+
varint.encode(version, bytes, 0);
|
|
185
|
+
varint.encode(code, bytes, codeOffset);
|
|
186
|
+
bytes.set(multihash, hashOffset);
|
|
187
|
+
|
|
188
|
+
return bytes;
|
|
189
|
+
};
|
package/package.json
CHANGED
|
@@ -1,25 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@atcute/cid",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.2",
|
|
5
5
|
"description": "create and parse AT Protocol-blessed CIDv1 format",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
8
|
-
"url": "https://
|
|
8
|
+
"url": "https://github.com/mary-ext/atcute",
|
|
9
|
+
"directory": "packages/utilities/cid"
|
|
9
10
|
},
|
|
10
11
|
"files": [
|
|
11
|
-
"dist/"
|
|
12
|
+
"dist/",
|
|
13
|
+
"lib/",
|
|
14
|
+
"!lib/**/*.bench.ts",
|
|
15
|
+
"!lib/**/*.test.ts"
|
|
12
16
|
],
|
|
13
17
|
"exports": {
|
|
14
18
|
".": "./dist/index.js"
|
|
15
19
|
},
|
|
16
20
|
"sideEffects": false,
|
|
17
21
|
"devDependencies": {
|
|
18
|
-
"@types/bun": "^1.1.
|
|
22
|
+
"@types/bun": "^1.1.12"
|
|
19
23
|
},
|
|
20
24
|
"dependencies": {
|
|
21
|
-
"@atcute/base32": "^1.0.
|
|
22
|
-
"@atcute/varint": "^1.0.
|
|
25
|
+
"@atcute/base32": "^1.0.1",
|
|
26
|
+
"@atcute/varint": "^1.0.1"
|
|
23
27
|
},
|
|
24
28
|
"scripts": {
|
|
25
29
|
"build": "tsc --project tsconfig.build.json",
|