@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.
@@ -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;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cid/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,MAAM,EAAE,MAAM,cAAc,CAAA;AAE7C,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAKtC,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"}
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(encode(node)));
9
+ return cidFromBlakeHash(hash(encodeNode(node)));
10
10
  };
11
11
  export const cidToString = (cid) => {
12
12
  return cid.toString(base32.base32);
@@ -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,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAYtC,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"}
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"}
@@ -1,22 +1,32 @@
1
- import { PBNode } from '@ipld/dag-pb';
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 interface IPLDDag {
7
- headCID: CID;
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
- }) => IPLDDag;
14
- export declare const createMetadataIPLDDag: (metadata: OffchainMetadata, limits?: {
15
- chunkSize: number;
12
+ }) => Promise<CID>;
13
+ export declare const processMetadataToIPLDFormat: (blockstore: BaseBlockstore, metadata: OffchainMetadata, limits?: {
14
+ maxChunkSize: number;
16
15
  maxLinkPerNode: number;
17
- }) => IPLDDag;
18
- export declare const createFolderIPLDDag: (children: CID[], name: string, size: number, { maxLinkPerNode }?: {
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
- }) => IPLDDag;
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,cAAc,CAAA;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAKvD,eAAO,MAAM,sBAAsB,QAAY,CAAA;AAC/C,eAAO,MAAM,yBAAyB,QAA8B,CAAA;AAEpE,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,GAAG,CAAA;IACZ,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;CACxB;AAED,eAAO,MAAM,iBAAiB,SACtB,MAAM,aACD,MAAM,kCACc;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,KAI3E,OAEF,CAAA;AAED,eAAO,MAAM,qBAAqB,aACtB,gBAAgB,WAClB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,KAIpD,OAIF,CAAA;AAwDD,eAAO,MAAM,mBAAmB,aACpB,GAAG,EAAE,QACT,MAAM,QACN,MAAM,uBACQ;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,KAC7C,OAyBF,CAAA;AAED,eAAO,MAAM,iBAAiB,SACtB,MAAM,YACH,MAAM,KACd,MAOF,CAAA"}
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"}
@@ -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 = 1024 * 64;
6
- export const DEFAULT_MAX_LINK_PER_NODE = DEFAULT_MAX_CHUNK_SIZE / 64;
7
- export const createFileIPLDDag = (file, filename, { chunkSize, maxLinkPerNode } = {
8
- chunkSize: DEFAULT_MAX_CHUNK_SIZE,
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 createBufferIPLDDag(file, filename, fileBuilders, { chunkSize, maxLinkPerNode });
42
+ return processBufferToIPLDFormat(blockstore, file, filename, totalSize, fileBuilders, {
43
+ maxChunkSize,
44
+ maxLinkPerNode,
45
+ });
12
46
  };
13
- export const createMetadataIPLDDag = (metadata, limits = {
14
- chunkSize: DEFAULT_MAX_CHUNK_SIZE,
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 createBufferIPLDDag(buffer, name, metadataBuilders, limits);
20
- };
21
- const createBufferIPLDDag = (buffer, filename, builders, { chunkSize, maxLinkPerNode } = {
22
- chunkSize: DEFAULT_MAX_CHUNK_SIZE,
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
- if (buffer.length <= chunkSize) {
26
- const head = builders.single(buffer, filename);
27
- const headCID = cidOfNode(head);
28
- return {
29
- headCID,
30
- nodes: new Map([[headCID, head]]),
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
- const bufferChunks = chunkBuffer(buffer, chunkSize);
34
- const nodes = new Map();
35
- let CIDs = bufferChunks.map((chunk) => {
36
- const node = builders.chunk(chunk);
37
- const cid = cidOfNode(node);
38
- nodes.set(cid, node);
39
- return cid;
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, chunkSize);
127
+ const node = builders.inlink(chunk, chunk.length, depth, maxChunkSize);
47
128
  const cid = cidOfNode(node);
48
- nodes.set(cid, node);
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, buffer.length, depth, filename, chunkSize);
135
+ const head = builders.root(CIDs, totalSize, depth, filename, maxChunkSize);
55
136
  const headCID = cidOfNode(head);
56
- nodes.set(headCID, head);
57
- return {
58
- headCID,
59
- nodes,
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
- nodes.set(cid, node);
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
- nodes.set(cid, node);
81
- return {
82
- headCID: cid,
83
- nodes,
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) {
@@ -1,4 +1,5 @@
1
+ export * from './builders.js';
1
2
  export * from './chunker.js';
2
3
  export * from './nodes.js';
3
- export { encodeNode } from './utils.js';
4
+ export * from './utils.js';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -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,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA"}
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"}
@@ -1,3 +1,4 @@
1
+ export * from './builders.js';
1
2
  export * from './chunker.js';
2
3
  export * from './nodes.js';
3
- export { encodeNode } from './utils.js';
4
+ export * from './utils.js';
@@ -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;
@@ -1 +1 @@
1
- {"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/ipld/nodes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,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"}
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"}
@@ -1,4 +1,4 @@
1
- import { createNode } from '@ipld/dag-pb';
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
@@ -1,5 +1,8 @@
1
- import { PBNode } from '@ipld/dag-pb';
2
- export declare const chunkBuffer: (buffer: Buffer, chunkSize: number) => Buffer[];
3
- export declare const encodeNode: (node: PBNode) => Buffer;
4
- export declare const decodeNode: (data: Uint8Array) => PBNode;
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
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/ipld/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,MAAM,EAAE,MAAM,cAAc,CAAA;AAErD,eAAO,MAAM,WAAW,WAAY,MAAM,aAAa,MAAM,aAQ5D,CAAA;AAED,eAAO,MAAM,UAAU,SAAU,MAAM,KAAG,MAAmC,CAAA;AAE7E,eAAO,MAAM,UAAU,SAAU,UAAU,KAAG,MAAsB,CAAA"}
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"}
@@ -1,10 +1,50 @@
1
- import { decode, encode } from '@ipld/dag-pb';
2
- export const chunkBuffer = (buffer, chunkSize) => {
3
- const chunks = [];
4
- for (let i = 0; i < buffer.length; i += chunkSize) {
5
- chunks.push(Buffer.from(buffer.buffer.slice(i, i + chunkSize)));
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
- export const encodeNode = (node) => Buffer.from(encode(node));
10
- export const decodeNode = (data) => decode(data);
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 { IPLDDag } from '../../index.js';
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: (dag: IPLDDag, totalSize: number, name?: string, mimeType?: string) => OffchainFileMetadata;
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,EAA0B,OAAO,EAA8B,MAAM,gBAAgB,CAAA;AAE5F,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,QAClB,OAAO,aACD,MAAM,SACV,MAAM,aACF,MAAM,KAChB,oBAiBF,CAAA"}
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 { cidOfNode, cidToString, IPLDNodeData } from '../../index.js';
2
- export const fileMetadata = (dag, totalSize, name, mimeType) => {
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(dag.headCID),
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: chunks.map((chunk) => {
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 folderMetadata: (cid: string, children: ChildrenMetadata[], name?: string) => OffchainFolderMetadata;
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,YACD,gBAAgB,EAAE,SACrB,MAAM,KACZ,sBASF,CAAA"}
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 { decode } from '@ipld/dag-pb';
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 = decode(data);
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.1",
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": "509bb6d337ca6c0f4da389cd342f1b58be57cb7e"
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(encode(node)))
11
+ return cidFromBlakeHash(hash(encodeNode(node)))
12
12
  }
13
13
 
14
14
  export const cidToString = (cid: CID) => {