@autonomys/auto-drive 0.7.1 → 0.7.3
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/dist/cid/index.d.ts +1 -1
- package/dist/cid/index.d.ts.map +1 -1
- package/dist/cid/index.js +3 -3
- package/dist/ipld/builders.d.ts +1 -1
- package/dist/ipld/builders.d.ts.map +1 -1
- package/dist/ipld/chunker.d.ts +23 -13
- package/dist/ipld/chunker.d.ts.map +1 -1
- package/dist/ipld/chunker.js +148 -45
- package/dist/ipld/index.d.ts +2 -1
- package/dist/ipld/index.d.ts.map +1 -1
- package/dist/ipld/index.js +2 -1
- package/dist/ipld/nodes.d.ts +1 -1
- package/dist/ipld/nodes.d.ts.map +1 -1
- package/dist/ipld/nodes.js +1 -1
- package/dist/ipld/utils.d.ts +7 -4
- package/dist/ipld/utils.d.ts.map +1 -1
- package/dist/ipld/utils.js +49 -9
- package/dist/metadata/offchain/file.d.ts +2 -2
- package/dist/metadata/offchain/file.d.ts.map +1 -1
- package/dist/metadata/offchain/file.js +6 -13
- package/dist/metadata/offchain/folder.d.ts +4 -1
- package/dist/metadata/offchain/folder.d.ts.map +1 -1
- package/dist/metadata/offchain/folder.js +17 -1
- package/dist/metadata/onchain/utils.js +2 -2
- package/package.json +4 -2
- package/src/cid/index.ts +3 -3
- package/src/ipld/builders.ts +1 -1
- package/src/ipld/chunker.ts +114 -56
- package/src/ipld/index.ts +2 -1
- package/src/ipld/nodes.ts +1 -1
- package/src/ipld/utils.ts +17 -11
- package/src/metadata/offchain/file.ts +10 -15
- package/src/metadata/offchain/folder.ts +24 -3
- package/src/metadata/onchain/utils.ts +2 -2
- package/tests/chunker.spec.ts +148 -46
- package/tests/cid.spec.ts +1 -1
- package/tests/nodes.spec.ts +1 -1
package/dist/cid/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { PBNode } from '@ipld/dag-pb';
|
|
2
1
|
import { CID } from 'multiformats/cid';
|
|
2
|
+
import { PBNode } from '../ipld/utils.js';
|
|
3
3
|
export declare const BLAKE3_CODE = 31;
|
|
4
4
|
export declare const cidOfNode: (node: PBNode) => CID<unknown, 85, 31, 1>;
|
|
5
5
|
export declare const cidToString: (cid: CID) => string;
|
package/dist/cid/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cid/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cid/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAGtC,OAAO,EAAc,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAErD,eAAO,MAAM,WAAW,KAAO,CAAA;AAE/B,eAAO,MAAM,SAAS,SAAU,MAAM,4BAErC,CAAA;AAED,eAAO,MAAM,WAAW,QAAS,GAAG,WAEnC,CAAA;AAED,eAAO,MAAM,WAAW,QAAS,MAAM,qEAEtC,CAAA;AAED,eAAO,MAAM,gBAAgB,SAAU,MAAM,4BAE5C,CAAA;AAED,eAAO,MAAM,iBAAiB,QAAS,GAAG,eAAyB,CAAA"}
|
package/dist/cid/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { encode } from '@ipld/dag-pb';
|
|
2
1
|
import { hash } from 'blake3';
|
|
3
|
-
import { CID } from 'multiformats/cid';
|
|
4
2
|
import * as base32 from 'multiformats/bases/base32';
|
|
3
|
+
import { CID } from 'multiformats/cid';
|
|
5
4
|
import * as raw from 'multiformats/codecs/raw';
|
|
6
5
|
import { create } from 'multiformats/hashes/digest';
|
|
6
|
+
import { encodeNode } from '../ipld/utils.js';
|
|
7
7
|
export const BLAKE3_CODE = 0x1f;
|
|
8
8
|
export const cidOfNode = (node) => {
|
|
9
|
-
return cidFromBlakeHash(hash(
|
|
9
|
+
return cidFromBlakeHash(hash(encodeNode(node)));
|
|
10
10
|
};
|
|
11
11
|
export const cidToString = (cid) => {
|
|
12
12
|
return cid.toString(base32.base32);
|
package/dist/ipld/builders.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { PBNode } from '@ipld/dag-pb';
|
|
2
1
|
import { CID } from 'multiformats/cid';
|
|
2
|
+
import { PBNode } from '../ipld/index.js';
|
|
3
3
|
export interface Builders {
|
|
4
4
|
inlink: (links: CID[], size: number, linkDepth: number, chunkSize: number) => PBNode;
|
|
5
5
|
chunk: (data: Buffer) => PBNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../../src/ipld/builders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../../src/ipld/builders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAYzC,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAA;IACpF,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IAC/B,IAAI,EAAE,CACJ,KAAK,EAAE,GAAG,EAAE,EACZ,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,KACjB,MAAM,CAAA;IACX,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;CACpD;AACD,eAAO,MAAM,gBAAgB,EAAE,QAK9B,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,QAK1B,CAAA"}
|
package/dist/ipld/chunker.d.ts
CHANGED
|
@@ -1,22 +1,32 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { BaseBlockstore } from 'blockstore-core';
|
|
2
|
+
import type { AwaitIterable } from 'interface-store';
|
|
2
3
|
import { CID } from 'multiformats';
|
|
3
4
|
import { OffchainMetadata } from '../metadata/index.js';
|
|
5
|
+
import { Builders } from './builders.js';
|
|
6
|
+
import { PBNode } from './utils.js';
|
|
4
7
|
export declare const DEFAULT_MAX_CHUNK_SIZE: number;
|
|
5
8
|
export declare const DEFAULT_MAX_LINK_PER_NODE: number;
|
|
6
|
-
export
|
|
7
|
-
|
|
8
|
-
nodes: Map<CID, PBNode>;
|
|
9
|
-
}
|
|
10
|
-
export declare const createFileIPLDDag: (file: Buffer, filename?: string, { chunkSize, maxLinkPerNode }?: {
|
|
11
|
-
chunkSize: number;
|
|
9
|
+
export declare const processFileToIPLDFormat: (blockstore: BaseBlockstore, file: AwaitIterable<Buffer>, totalSize: number, filename?: string, { maxChunkSize, maxLinkPerNode }?: {
|
|
10
|
+
maxChunkSize: number;
|
|
12
11
|
maxLinkPerNode: number;
|
|
13
|
-
}) =>
|
|
14
|
-
export declare const
|
|
15
|
-
|
|
12
|
+
}) => Promise<CID>;
|
|
13
|
+
export declare const processMetadataToIPLDFormat: (blockstore: BaseBlockstore, metadata: OffchainMetadata, limits?: {
|
|
14
|
+
maxChunkSize: number;
|
|
16
15
|
maxLinkPerNode: number;
|
|
17
|
-
}) =>
|
|
18
|
-
export declare const
|
|
16
|
+
}) => Promise<CID>;
|
|
17
|
+
export declare const processBufferToIPLDFormatFromChunks: (blockstore: BaseBlockstore, chunks: AwaitIterable<CID>, filename: string | undefined, totalSize: number, builders: Builders, { maxLinkPerNode, maxChunkSize }?: {
|
|
19
18
|
maxLinkPerNode: number;
|
|
20
|
-
|
|
19
|
+
maxChunkSize: number;
|
|
20
|
+
}) => Promise<CID>;
|
|
21
|
+
export declare const processFolderToIPLDFormat: (blockstore: BaseBlockstore, children: CID[], name: string, size: number, { maxLinkPerNode }?: {
|
|
22
|
+
maxLinkPerNode: number;
|
|
23
|
+
}) => Promise<CID>;
|
|
24
|
+
/**
|
|
25
|
+
* Process chunks to IPLD format, return the last chunk if it's not full
|
|
26
|
+
* @returns the last chunk if it's not full, otherwise an empty buffer
|
|
27
|
+
*/
|
|
28
|
+
export declare const processChunksToIPLDFormat: (blockstore: BaseBlockstore, chunks: AwaitIterable<Buffer>, builders: Builders, { maxChunkSize }: {
|
|
29
|
+
maxChunkSize?: number;
|
|
30
|
+
}) => Promise<Buffer>;
|
|
21
31
|
export declare const ensureNodeMaxSize: (node: PBNode, maxSize?: number) => PBNode;
|
|
22
32
|
//# sourceMappingURL=chunker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunker.d.ts","sourceRoot":"","sources":["../../src/ipld/chunker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"chunker.d.ts","sourceRoot":"","sources":["../../src/ipld/chunker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAElC,OAAO,EAAsB,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC3E,OAAO,EAAE,QAAQ,EAAkC,MAAM,eAAe,CAAA;AAExE,OAAO,EAA2B,MAAM,EAAE,MAAM,YAAY,CAAA;AAE5D,eAAO,MAAM,sBAAsB,QAAY,CAAA;AAG/C,eAAO,MAAM,yBAAyB,QAAwD,CAAA;AAE9F,eAAO,MAAM,uBAAuB,eACtB,cAAc,QACpB,aAAa,CAAC,MAAM,CAAC,aAChB,MAAM,aACN,MAAM,qCACiB;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,KAIjF,OAAO,CAAC,GAAG,CAKb,CAAA;AAED,eAAO,MAAM,2BAA2B,eAC1B,cAAc,YAChB,gBAAgB,WAClB;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,KAIvD,OAAO,CAAC,GAAG,CAab,CAAA;AA6BD,eAAO,MAAM,mCAAmC,eAClC,cAAc,UAClB,aAAa,CAAC,GAAG,CAAC,YAChB,MAAM,GAAG,SAAS,aACjB,MAAM,YACP,QAAQ,qCACgB;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,KAIjF,OAAO,CAAC,GAAG,CAsCb,CAAA;AAED,eAAO,MAAM,yBAAyB,eACxB,cAAc,YAChB,GAAG,EAAE,QACT,MAAM,QACN,MAAM,uBACQ;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,KAC7C,OAAO,CAAC,GAAG,CAqBb,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,yBAAyB,eACxB,cAAc,UAClB,aAAa,CAAC,MAAM,CAAC,YACnB,QAAQ,oBACyB;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,KACnE,OAAO,CAAC,MAAM,CAchB,CAAA;AAED,eAAO,MAAM,iBAAiB,SACtB,MAAM,YACH,MAAM,KACd,MAOF,CAAA"}
|
package/dist/ipld/chunker.js
CHANGED
|
@@ -1,66 +1,143 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
|
|
11
|
+
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
|
|
12
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
13
|
+
var g = generator.apply(thisArg, _arguments || []), i, q = [];
|
|
14
|
+
return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
|
|
15
|
+
function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
|
|
16
|
+
function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
|
|
17
|
+
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
|
|
18
|
+
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
|
|
19
|
+
function fulfill(value) { resume("next", value); }
|
|
20
|
+
function reject(value) { resume("throw", value); }
|
|
21
|
+
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
|
|
22
|
+
};
|
|
23
|
+
var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
24
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
25
|
+
var m = o[Symbol.asyncIterator], i;
|
|
26
|
+
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
|
27
|
+
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
|
28
|
+
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
|
29
|
+
};
|
|
1
30
|
import { cidOfNode } from '../cid/index.js';
|
|
31
|
+
import { decodeIPLDNodeData } from '../metadata/index.js';
|
|
2
32
|
import { fileBuilders, metadataBuilders } from './builders.js';
|
|
3
33
|
import { createFolderInlinkIpldNode, createFolderIpldNode } from './nodes.js';
|
|
4
34
|
import { chunkBuffer, encodeNode } from './utils.js';
|
|
5
|
-
export const DEFAULT_MAX_CHUNK_SIZE =
|
|
6
|
-
|
|
7
|
-
export const
|
|
8
|
-
|
|
35
|
+
export const DEFAULT_MAX_CHUNK_SIZE = 64 * 1024;
|
|
36
|
+
const ESTIMATED_LINK_SIZE_IN_BYTES = 64;
|
|
37
|
+
export const DEFAULT_MAX_LINK_PER_NODE = DEFAULT_MAX_CHUNK_SIZE / ESTIMATED_LINK_SIZE_IN_BYTES;
|
|
38
|
+
export const processFileToIPLDFormat = (blockstore, file, totalSize, filename, { maxChunkSize, maxLinkPerNode } = {
|
|
39
|
+
maxChunkSize: DEFAULT_MAX_CHUNK_SIZE,
|
|
9
40
|
maxLinkPerNode: DEFAULT_MAX_LINK_PER_NODE,
|
|
10
41
|
}) => {
|
|
11
|
-
return
|
|
42
|
+
return processBufferToIPLDFormat(blockstore, file, filename, totalSize, fileBuilders, {
|
|
43
|
+
maxChunkSize,
|
|
44
|
+
maxLinkPerNode,
|
|
45
|
+
});
|
|
12
46
|
};
|
|
13
|
-
export const
|
|
14
|
-
|
|
47
|
+
export const processMetadataToIPLDFormat = (blockstore_1, metadata_1, ...args_1) => __awaiter(void 0, [blockstore_1, metadata_1, ...args_1], void 0, function* (blockstore, metadata, limits = {
|
|
48
|
+
maxChunkSize: DEFAULT_MAX_CHUNK_SIZE,
|
|
15
49
|
maxLinkPerNode: DEFAULT_MAX_LINK_PER_NODE,
|
|
16
|
-
})
|
|
50
|
+
}) {
|
|
17
51
|
const buffer = Buffer.from(JSON.stringify(metadata));
|
|
18
52
|
const name = `${metadata.name}.metadata.json`;
|
|
19
|
-
return
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
53
|
+
return processBufferToIPLDFormat(blockstore, (function () {
|
|
54
|
+
return __asyncGenerator(this, arguments, function* () {
|
|
55
|
+
yield yield __await(buffer);
|
|
56
|
+
});
|
|
57
|
+
})(), name, buffer.byteLength, metadataBuilders, limits);
|
|
58
|
+
});
|
|
59
|
+
const processBufferToIPLDFormat = (blockstore_1, buffer_1, filename_1, totalSize_1, builders_1, ...args_1) => __awaiter(void 0, [blockstore_1, buffer_1, filename_1, totalSize_1, builders_1, ...args_1], void 0, function* (blockstore, buffer, filename, totalSize, builders, { maxChunkSize, maxLinkPerNode } = {
|
|
60
|
+
maxChunkSize: DEFAULT_MAX_CHUNK_SIZE,
|
|
23
61
|
maxLinkPerNode: DEFAULT_MAX_LINK_PER_NODE,
|
|
24
|
-
})
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
62
|
+
}) {
|
|
63
|
+
var _a, e_1, _b, _c;
|
|
64
|
+
const bufferChunks = chunkBuffer(buffer, { maxChunkSize });
|
|
65
|
+
let CIDs = [];
|
|
66
|
+
try {
|
|
67
|
+
for (var _d = true, bufferChunks_1 = __asyncValues(bufferChunks), bufferChunks_1_1; bufferChunks_1_1 = yield bufferChunks_1.next(), _a = bufferChunks_1_1.done, !_a; _d = true) {
|
|
68
|
+
_c = bufferChunks_1_1.value;
|
|
69
|
+
_d = false;
|
|
70
|
+
const chunk = _c;
|
|
71
|
+
const node = builders.chunk(chunk);
|
|
72
|
+
const cid = cidOfNode(node);
|
|
73
|
+
yield blockstore.put(cid, encodeNode(node));
|
|
74
|
+
CIDs.push(cid);
|
|
75
|
+
}
|
|
32
76
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
77
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
78
|
+
finally {
|
|
79
|
+
try {
|
|
80
|
+
if (!_d && !_a && (_b = bufferChunks_1.return)) yield _b.call(bufferChunks_1);
|
|
81
|
+
}
|
|
82
|
+
finally { if (e_1) throw e_1.error; }
|
|
83
|
+
}
|
|
84
|
+
return processBufferToIPLDFormatFromChunks(blockstore, CIDs, filename, totalSize, builders, {
|
|
85
|
+
maxLinkPerNode,
|
|
86
|
+
maxChunkSize,
|
|
40
87
|
});
|
|
88
|
+
});
|
|
89
|
+
export const processBufferToIPLDFormatFromChunks = (blockstore_1, chunks_1, filename_1, totalSize_1, builders_1, ...args_1) => __awaiter(void 0, [blockstore_1, chunks_1, filename_1, totalSize_1, builders_1, ...args_1], void 0, function* (blockstore, chunks, filename, totalSize, builders, { maxLinkPerNode, maxChunkSize } = {
|
|
90
|
+
maxLinkPerNode: DEFAULT_MAX_LINK_PER_NODE,
|
|
91
|
+
maxChunkSize: DEFAULT_MAX_CHUNK_SIZE,
|
|
92
|
+
}) {
|
|
93
|
+
var _a, chunks_2, chunks_2_1;
|
|
94
|
+
var _b, e_2, _c, _d;
|
|
95
|
+
let chunkCount = 0;
|
|
96
|
+
let CIDs = [];
|
|
97
|
+
try {
|
|
98
|
+
for (_a = true, chunks_2 = __asyncValues(chunks); chunks_2_1 = yield chunks_2.next(), _b = chunks_2_1.done, !_b; _a = true) {
|
|
99
|
+
_d = chunks_2_1.value;
|
|
100
|
+
_a = false;
|
|
101
|
+
const chunk = _d;
|
|
102
|
+
CIDs.push(chunk);
|
|
103
|
+
chunkCount++;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
107
|
+
finally {
|
|
108
|
+
try {
|
|
109
|
+
if (!_a && !_b && (_c = chunks_2.return)) yield _c.call(chunks_2);
|
|
110
|
+
}
|
|
111
|
+
finally { if (e_2) throw e_2.error; }
|
|
112
|
+
}
|
|
113
|
+
if (CIDs.length === 1) {
|
|
114
|
+
const nodeBytes = yield blockstore.get(CIDs[0]);
|
|
115
|
+
yield blockstore.delete(CIDs[0]);
|
|
116
|
+
const data = decodeIPLDNodeData(nodeBytes);
|
|
117
|
+
const singleNode = builders.single(Buffer.from(data.data), filename);
|
|
118
|
+
yield blockstore.put(cidOfNode(singleNode), encodeNode(singleNode));
|
|
119
|
+
const headCID = cidOfNode(singleNode);
|
|
120
|
+
return headCID;
|
|
121
|
+
}
|
|
41
122
|
let depth = 1;
|
|
42
123
|
while (CIDs.length > maxLinkPerNode) {
|
|
43
124
|
const newCIDs = [];
|
|
44
125
|
for (let i = 0; i < CIDs.length; i += maxLinkPerNode) {
|
|
45
126
|
const chunk = CIDs.slice(i, i + maxLinkPerNode);
|
|
46
|
-
const node = builders.inlink(chunk, chunk.length, depth,
|
|
127
|
+
const node = builders.inlink(chunk, chunk.length, depth, maxChunkSize);
|
|
47
128
|
const cid = cidOfNode(node);
|
|
48
|
-
|
|
129
|
+
yield blockstore.put(cid, encodeNode(node));
|
|
49
130
|
newCIDs.push(cid);
|
|
50
131
|
}
|
|
51
132
|
depth++;
|
|
52
133
|
CIDs = newCIDs;
|
|
53
134
|
}
|
|
54
|
-
const head = builders.root(CIDs,
|
|
135
|
+
const head = builders.root(CIDs, totalSize, depth, filename, maxChunkSize);
|
|
55
136
|
const headCID = cidOfNode(head);
|
|
56
|
-
|
|
57
|
-
return
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
};
|
|
61
|
-
};
|
|
62
|
-
export const createFolderIPLDDag = (children, name, size, { maxLinkPerNode } = { maxLinkPerNode: DEFAULT_MAX_LINK_PER_NODE }) => {
|
|
63
|
-
const nodes = new Map();
|
|
137
|
+
yield blockstore.put(headCID, encodeNode(head));
|
|
138
|
+
return headCID;
|
|
139
|
+
});
|
|
140
|
+
export const processFolderToIPLDFormat = (blockstore_1, children_1, name_1, size_1, ...args_1) => __awaiter(void 0, [blockstore_1, children_1, name_1, size_1, ...args_1], void 0, function* (blockstore, children, name, size, { maxLinkPerNode } = { maxLinkPerNode: DEFAULT_MAX_LINK_PER_NODE }) {
|
|
64
141
|
let cids = children;
|
|
65
142
|
let depth = 0;
|
|
66
143
|
while (cids.length > maxLinkPerNode) {
|
|
@@ -69,7 +146,7 @@ export const createFolderIPLDDag = (children, name, size, { maxLinkPerNode } = {
|
|
|
69
146
|
const chunk = cids.slice(i, i + maxLinkPerNode);
|
|
70
147
|
const node = createFolderInlinkIpldNode(chunk, depth);
|
|
71
148
|
const cid = cidOfNode(node);
|
|
72
|
-
|
|
149
|
+
yield blockstore.put(cid, encodeNode(node));
|
|
73
150
|
newCIDs.push(cid);
|
|
74
151
|
}
|
|
75
152
|
cids = newCIDs;
|
|
@@ -77,12 +154,38 @@ export const createFolderIPLDDag = (children, name, size, { maxLinkPerNode } = {
|
|
|
77
154
|
}
|
|
78
155
|
const node = createFolderIpldNode(cids, name, depth, size);
|
|
79
156
|
const cid = cidOfNode(node);
|
|
80
|
-
|
|
81
|
-
return
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
157
|
+
yield blockstore.put(cid, encodeNode(node));
|
|
158
|
+
return cid;
|
|
159
|
+
});
|
|
160
|
+
/**
|
|
161
|
+
* Process chunks to IPLD format, return the last chunk if it's not full
|
|
162
|
+
* @returns the last chunk if it's not full, otherwise an empty buffer
|
|
163
|
+
*/
|
|
164
|
+
export const processChunksToIPLDFormat = (blockstore_1, chunks_1, builders_1, _a) => __awaiter(void 0, [blockstore_1, chunks_1, builders_1, _a], void 0, function* (blockstore, chunks, builders, { maxChunkSize = DEFAULT_MAX_CHUNK_SIZE }) {
|
|
165
|
+
var _b, e_3, _c, _d;
|
|
166
|
+
const bufferChunks = chunkBuffer(chunks, { maxChunkSize, ignoreLastChunk: false });
|
|
167
|
+
try {
|
|
168
|
+
for (var _e = true, bufferChunks_2 = __asyncValues(bufferChunks), bufferChunks_2_1; bufferChunks_2_1 = yield bufferChunks_2.next(), _b = bufferChunks_2_1.done, !_b; _e = true) {
|
|
169
|
+
_d = bufferChunks_2_1.value;
|
|
170
|
+
_e = false;
|
|
171
|
+
const chunk = _d;
|
|
172
|
+
if (chunk.byteLength < maxChunkSize) {
|
|
173
|
+
return chunk;
|
|
174
|
+
}
|
|
175
|
+
const node = builders.chunk(chunk);
|
|
176
|
+
const cid = cidOfNode(node);
|
|
177
|
+
yield blockstore.put(cid, encodeNode(node));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
181
|
+
finally {
|
|
182
|
+
try {
|
|
183
|
+
if (!_e && !_b && (_c = bufferChunks_2.return)) yield _c.call(bufferChunks_2);
|
|
184
|
+
}
|
|
185
|
+
finally { if (e_3) throw e_3.error; }
|
|
186
|
+
}
|
|
187
|
+
return Buffer.alloc(0);
|
|
188
|
+
});
|
|
86
189
|
export const ensureNodeMaxSize = (node, maxSize = DEFAULT_MAX_CHUNK_SIZE) => {
|
|
87
190
|
const nodeSize = encodeNode(node).byteLength;
|
|
88
191
|
if (nodeSize > maxSize) {
|
package/dist/ipld/index.d.ts
CHANGED
package/dist/ipld/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ipld/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ipld/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA"}
|
package/dist/ipld/index.js
CHANGED
package/dist/ipld/nodes.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { PBNode } from '@ipld/dag-pb';
|
|
2
1
|
import { CID } from 'multiformats/cid';
|
|
2
|
+
import { PBNode } from '../ipld/index.js';
|
|
3
3
|
import { OffchainMetadata } from '../metadata/index.js';
|
|
4
4
|
export declare const createFileChunkIpldNode: (data: Buffer) => PBNode;
|
|
5
5
|
export declare const createChunkedFileIpldNode: (links: CID[], size: number, linkDepth: number, name?: string, maxNodeSize?: number) => PBNode;
|
package/dist/ipld/nodes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/ipld/nodes.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/ipld/nodes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAc,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAKvD,eAAO,MAAM,uBAAuB,SAAU,MAAM,KAAG,MASpD,CAAA;AAKH,eAAO,MAAM,yBAAyB,UAC7B,GAAG,EAAE,QACN,MAAM,aACD,MAAM,SACV,MAAM,gBACA,MAAM,KAClB,MAYA,CAAA;AAGH,eAAO,MAAM,wBAAwB,UAC5B,GAAG,EAAE,QACN,MAAM,aACD,MAAM,gBACJ,MAAM,KAClB,MAWA,CAAA;AAKH,eAAO,MAAM,wBAAwB,SAAU,MAAM,SAAS,MAAM,KAAG,MAUpE,CAAA;AAKH,eAAO,MAAM,4BAA4B,UAChC,GAAG,EAAE,QACN,MAAM,aACD,MAAM,gBACJ,MAAM,KAClB,MAWA,CAAA;AAKH,eAAO,MAAM,4BAA4B,SAAU,MAAM,SAAS,MAAM,KAAG,MAUxE,CAAA;AAEH,eAAO,MAAM,2BAA2B,SAAU,MAAM,KAAG,MAQxD,CAAA;AAEH,eAAO,MAAM,6BAA6B,UACjC,GAAG,EAAE,QACN,MAAM,aACD,MAAM,SACV,MAAM,gBACA,MAAM,KAClB,MAYA,CAAA;AAKH,eAAO,MAAM,oBAAoB,UACxB,GAAG,EAAE,QACN,MAAM,aACD,MAAM,QACX,MAAM,gBACC,MAAM,KAClB,MAYA,CAAA;AAEH,eAAO,MAAM,0BAA0B,UAC9B,GAAG,EAAE,aACD,MAAM,gBACJ,MAAM,KAClB,MAUA,CAAA;AAGH,eAAO,MAAM,kBAAkB,aACnB,gBAAgB,gBACb,MAAM,KAClB,MAcF,CAAA"}
|
package/dist/ipld/nodes.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createNode } from '
|
|
1
|
+
import { createNode } from '../ipld/index.js';
|
|
2
2
|
import { encodeIPLDNodeData, MetadataType } from '../metadata/onchain/index.js';
|
|
3
3
|
import { DEFAULT_MAX_CHUNK_SIZE, ensureNodeMaxSize } from './chunker.js';
|
|
4
4
|
/// Creates a file chunk ipld node
|
package/dist/ipld/utils.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import { PBNode } from '@ipld/dag-pb';
|
|
2
|
-
|
|
3
|
-
export declare const
|
|
4
|
-
|
|
1
|
+
import { createNode, decode, encode, PBNode } from '@ipld/dag-pb';
|
|
2
|
+
import { AwaitIterable } from 'interface-store';
|
|
3
|
+
export declare const chunkBuffer: (buffer: AwaitIterable<Buffer>, { maxChunkSize, ignoreLastChunk }: {
|
|
4
|
+
maxChunkSize: number;
|
|
5
|
+
ignoreLastChunk?: boolean;
|
|
6
|
+
}) => AsyncIterable<Buffer>;
|
|
7
|
+
export { createNode, decode as decodeNode, encode as encodeNode, PBNode };
|
|
5
8
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/ipld/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/ipld/utils.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/ipld/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,eAAO,MAAM,WAAW,WACd,aAAa,CAAC,MAAM,CAAC,qCACc;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,KAC7F,aAAa,CAAC,MAAM,CAYtB,CAAA;AAED,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,EAAE,CAAA"}
|
package/dist/ipld/utils.js
CHANGED
|
@@ -1,10 +1,50 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
return chunks;
|
|
1
|
+
var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
2
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
3
|
+
var m = o[Symbol.asyncIterator], i;
|
|
4
|
+
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
|
5
|
+
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
|
6
|
+
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
|
8
7
|
};
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
|
|
9
|
+
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
|
|
10
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
11
|
+
var g = generator.apply(thisArg, _arguments || []), i, q = [];
|
|
12
|
+
return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
|
|
13
|
+
function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
|
|
14
|
+
function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
|
|
15
|
+
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
|
|
16
|
+
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
|
|
17
|
+
function fulfill(value) { resume("next", value); }
|
|
18
|
+
function reject(value) { resume("throw", value); }
|
|
19
|
+
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
|
|
20
|
+
};
|
|
21
|
+
import { createNode, decode, encode } from '@ipld/dag-pb';
|
|
22
|
+
export const chunkBuffer = function (buffer_1, _a) {
|
|
23
|
+
return __asyncGenerator(this, arguments, function* (buffer, { maxChunkSize, ignoreLastChunk = false }) {
|
|
24
|
+
var _b, e_1, _c, _d;
|
|
25
|
+
let target = Buffer.alloc(0);
|
|
26
|
+
try {
|
|
27
|
+
for (var _e = true, buffer_2 = __asyncValues(buffer), buffer_2_1; buffer_2_1 = yield __await(buffer_2.next()), _b = buffer_2_1.done, !_b; _e = true) {
|
|
28
|
+
_d = buffer_2_1.value;
|
|
29
|
+
_e = false;
|
|
30
|
+
let chunk = _d;
|
|
31
|
+
target = Buffer.concat([target, chunk]);
|
|
32
|
+
while (target.length >= maxChunkSize) {
|
|
33
|
+
yield yield __await(target.subarray(0, maxChunkSize));
|
|
34
|
+
target = target.subarray(maxChunkSize);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
39
|
+
finally {
|
|
40
|
+
try {
|
|
41
|
+
if (!_e && !_b && (_c = buffer_2.return)) yield __await(_c.call(buffer_2));
|
|
42
|
+
}
|
|
43
|
+
finally { if (e_1) throw e_1.error; }
|
|
44
|
+
}
|
|
45
|
+
if (target.length > 0 && !ignoreLastChunk) {
|
|
46
|
+
yield yield __await(target);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
export { createNode, decode as decodeNode, encode as encodeNode };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CID } from 'multiformats';
|
|
2
2
|
export type OffchainFileMetadata = {
|
|
3
3
|
type: 'file';
|
|
4
4
|
dataCid: string;
|
|
@@ -12,5 +12,5 @@ export interface ChunkInfo {
|
|
|
12
12
|
size: number;
|
|
13
13
|
cid: string;
|
|
14
14
|
}
|
|
15
|
-
export declare const fileMetadata: (
|
|
15
|
+
export declare const fileMetadata: (headCID: CID, chunks: ChunkInfo[], totalSize: number, name?: string | null, mimeType?: string | null) => OffchainFileMetadata;
|
|
16
16
|
//# sourceMappingURL=file.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../src/metadata/offchain/file.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../src/metadata/offchain/file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAGlC,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,SAAS,EAAE,CAAA;CACpB,CAAA;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,eAAO,MAAM,YAAY,YACd,GAAG,UACJ,SAAS,EAAE,aACR,MAAM,SACV,MAAM,GAAG,IAAI,aACT,MAAM,GAAG,IAAI,KACvB,oBAUF,CAAA"}
|
|
@@ -1,19 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export const fileMetadata = (
|
|
3
|
-
const chunks = Array.from(dag.nodes.values()).filter((n) => n.Data && IPLDNodeData.decode(n.Data).data);
|
|
1
|
+
import { cidToString } from '../../index.js';
|
|
2
|
+
export const fileMetadata = (headCID, chunks, totalSize, name, mimeType) => {
|
|
4
3
|
return {
|
|
5
4
|
type: 'file',
|
|
6
|
-
dataCid: cidToString(
|
|
7
|
-
name,
|
|
8
|
-
mimeType,
|
|
5
|
+
dataCid: cidToString(headCID),
|
|
6
|
+
name: name !== null && name !== void 0 ? name : undefined,
|
|
7
|
+
mimeType: mimeType !== null && mimeType !== void 0 ? mimeType : undefined,
|
|
9
8
|
totalSize,
|
|
10
9
|
totalChunks: chunks.length,
|
|
11
|
-
chunks
|
|
12
|
-
var _a, _b;
|
|
13
|
-
return ({
|
|
14
|
-
cid: cidToString(cidOfNode(chunk)),
|
|
15
|
-
size: (_b = (_a = chunk.Data) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0,
|
|
16
|
-
});
|
|
17
|
-
}),
|
|
10
|
+
chunks,
|
|
18
11
|
};
|
|
19
12
|
};
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { CID } from 'multiformats';
|
|
2
|
+
import { PBNode } from '../../ipld/index.js';
|
|
1
3
|
interface ChildrenMetadata {
|
|
2
4
|
type: 'folder' | 'file';
|
|
3
5
|
name?: string;
|
|
@@ -12,6 +14,7 @@ export type OffchainFolderMetadata = {
|
|
|
12
14
|
totalFiles: number;
|
|
13
15
|
children: ChildrenMetadata[];
|
|
14
16
|
};
|
|
15
|
-
export declare const
|
|
17
|
+
export declare const childrenMetadataFromNode: (node: PBNode) => ChildrenMetadata;
|
|
18
|
+
export declare const folderMetadata: (cid: CID | string, children: ChildrenMetadata[], name?: string | null) => OffchainFolderMetadata;
|
|
16
19
|
export {};
|
|
17
20
|
//# sourceMappingURL=folder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folder.d.ts","sourceRoot":"","sources":["../../../src/metadata/offchain/folder.ts"],"names":[],"mappings":"AAAA,UAAU,gBAAgB;IACxB,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,gBAAgB,EAAE,CAAA;CAC7B,CAAA;AAED,eAAO,MAAM,cAAc,QACpB,MAAM,
|
|
1
|
+
{"version":3,"file":"folder.d.ts","sourceRoot":"","sources":["../../../src/metadata/offchain/folder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAElC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAG5C,UAAU,gBAAgB;IACxB,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,gBAAgB,EAAE,CAAA;CAC7B,CAAA;AAED,eAAO,MAAM,wBAAwB,SAAU,MAAM,KAAG,gBAYvD,CAAA;AAED,eAAO,MAAM,cAAc,QACpB,GAAG,GAAG,MAAM,YACP,gBAAgB,EAAE,SACrB,MAAM,GAAG,IAAI,KACnB,sBAWF,CAAA"}
|
|
@@ -1,10 +1,26 @@
|
|
|
1
|
+
import { cidOfNode, cidToString } from '../../cid/index.js';
|
|
2
|
+
import { IPLDNodeData, MetadataType } from '../onchain/index.js';
|
|
3
|
+
export const childrenMetadataFromNode = (node) => {
|
|
4
|
+
var _a;
|
|
5
|
+
const ipldData = IPLDNodeData.decode(node.Data);
|
|
6
|
+
if (ipldData.type !== MetadataType.File && ipldData.type !== MetadataType.Folder) {
|
|
7
|
+
throw new Error('Invalid metadata type');
|
|
8
|
+
}
|
|
9
|
+
return {
|
|
10
|
+
type: ipldData.type === MetadataType.File ? 'file' : 'folder',
|
|
11
|
+
cid: cidToString(cidOfNode(node)),
|
|
12
|
+
totalSize: (_a = ipldData.size) !== null && _a !== void 0 ? _a : 0,
|
|
13
|
+
name: ipldData.name,
|
|
14
|
+
};
|
|
15
|
+
};
|
|
1
16
|
export const folderMetadata = (cid, children, name) => {
|
|
17
|
+
cid = typeof cid === 'string' ? cid : cidToString(cid);
|
|
2
18
|
return {
|
|
3
19
|
dataCid: cid,
|
|
4
20
|
totalSize: children.reduce((acc, child) => acc + child.totalSize, 0),
|
|
5
21
|
totalFiles: children.length,
|
|
6
22
|
children,
|
|
7
23
|
type: 'folder',
|
|
8
|
-
name,
|
|
24
|
+
name: name !== null && name !== void 0 ? name : undefined,
|
|
9
25
|
};
|
|
10
26
|
};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { decodeNode } from '../../ipld/index.js';
|
|
2
2
|
import { IPLDNodeData } from '../onchain/index.js';
|
|
3
3
|
export const encodeIPLDNodeData = (metadata) => {
|
|
4
4
|
return IPLDNodeData.encode(metadata);
|
|
5
5
|
};
|
|
6
6
|
export const decodeIPLDNodeData = (data) => {
|
|
7
|
-
const decoded =
|
|
7
|
+
const decoded = decodeNode(data);
|
|
8
8
|
if (!decoded.Data) {
|
|
9
9
|
throw new Error('Invalid data');
|
|
10
10
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@autonomys/auto-drive",
|
|
3
3
|
"packageManager": "yarn@4.1.1",
|
|
4
|
-
"version": "0.7.
|
|
4
|
+
"version": "0.7.3",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"repository": {
|
|
@@ -26,6 +26,8 @@
|
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@types/jest": "^29.5.13",
|
|
29
|
+
"blockstore-core": "^5.0.2",
|
|
30
|
+
"interface-store": "^6.0.2",
|
|
29
31
|
"jest": "^29.7.0",
|
|
30
32
|
"protobufjs": "^7.4.0",
|
|
31
33
|
"ts-jest": "^29.2.5",
|
|
@@ -39,5 +41,5 @@
|
|
|
39
41
|
"protons": "^7.6.0",
|
|
40
42
|
"protons-runtime": "^5.5.0"
|
|
41
43
|
},
|
|
42
|
-
"gitHead": "
|
|
44
|
+
"gitHead": "dde96ad7b5d7f2bf023da23cbd1de89b0e22f1c6"
|
|
43
45
|
}
|
package/src/cid/index.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { encode, PBNode } from '@ipld/dag-pb'
|
|
2
1
|
import { hash } from 'blake3'
|
|
3
|
-
import { CID } from 'multiformats/cid'
|
|
4
2
|
import * as base32 from 'multiformats/bases/base32'
|
|
3
|
+
import { CID } from 'multiformats/cid'
|
|
5
4
|
import * as raw from 'multiformats/codecs/raw'
|
|
6
5
|
import { create } from 'multiformats/hashes/digest'
|
|
6
|
+
import { encodeNode, PBNode } from '../ipld/utils.js'
|
|
7
7
|
|
|
8
8
|
export const BLAKE3_CODE = 0x1f
|
|
9
9
|
|
|
10
10
|
export const cidOfNode = (node: PBNode) => {
|
|
11
|
-
return cidFromBlakeHash(hash(
|
|
11
|
+
return cidFromBlakeHash(hash(encodeNode(node)))
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
export const cidToString = (cid: CID) => {
|