@autonomys/auto-dag-data 0.8.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.
Files changed (153) hide show
  1. package/LICENSE +18 -0
  2. package/README.md +167 -0
  3. package/dist/cid/index.d.ts +9 -0
  4. package/dist/cid/index.d.ts.map +1 -0
  5. package/dist/cid/index.js +20 -0
  6. package/dist/compression/index.d.ts +7 -0
  7. package/dist/compression/index.d.ts.map +1 -0
  8. package/dist/compression/index.js +106 -0
  9. package/dist/compression/types.d.ts +9 -0
  10. package/dist/compression/types.d.ts.map +1 -0
  11. package/dist/compression/types.js +1 -0
  12. package/dist/encryption/index.d.ts +8 -0
  13. package/dist/encryption/index.d.ts.map +1 -0
  14. package/dist/encryption/index.js +121 -0
  15. package/dist/encryption/types.d.ts +5 -0
  16. package/dist/encryption/types.d.ts.map +1 -0
  17. package/dist/encryption/types.js +1 -0
  18. package/dist/index.d.ts +6 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +5 -0
  21. package/dist/ipld/blockstore/base.d.ts +9 -0
  22. package/dist/ipld/blockstore/base.d.ts.map +1 -0
  23. package/dist/ipld/blockstore/base.js +1 -0
  24. package/dist/ipld/blockstore/index.d.ts +3 -0
  25. package/dist/ipld/blockstore/index.d.ts.map +1 -0
  26. package/dist/ipld/blockstore/index.js +2 -0
  27. package/dist/ipld/blockstore/memory.d.ts +13 -0
  28. package/dist/ipld/blockstore/memory.d.ts.map +1 -0
  29. package/dist/ipld/blockstore/memory.js +57 -0
  30. package/dist/ipld/builders.d.ts +12 -0
  31. package/dist/ipld/builders.d.ts.map +1 -0
  32. package/dist/ipld/builders.js +13 -0
  33. package/dist/ipld/chunker.d.ts +30 -0
  34. package/dist/ipld/chunker.d.ts.map +1 -0
  35. package/dist/ipld/chunker.js +219 -0
  36. package/dist/ipld/index.d.ts +5 -0
  37. package/dist/ipld/index.d.ts.map +1 -0
  38. package/dist/ipld/index.js +4 -0
  39. package/dist/ipld/nodes.d.ts +15 -0
  40. package/dist/ipld/nodes.d.ts.map +1 -0
  41. package/dist/ipld/nodes.js +92 -0
  42. package/dist/ipld/utils.d.ts +8 -0
  43. package/dist/ipld/utils.d.ts.map +1 -0
  44. package/dist/ipld/utils.js +50 -0
  45. package/dist/metadata/index.d.ts +3 -0
  46. package/dist/metadata/index.d.ts.map +1 -0
  47. package/dist/metadata/index.js +2 -0
  48. package/dist/metadata/offchain/base.d.ts +4 -0
  49. package/dist/metadata/offchain/base.d.ts.map +1 -0
  50. package/dist/metadata/offchain/base.js +1 -0
  51. package/dist/metadata/offchain/file.d.ts +18 -0
  52. package/dist/metadata/offchain/file.d.ts.map +1 -0
  53. package/dist/metadata/offchain/file.js +16 -0
  54. package/dist/metadata/offchain/folder.d.ts +22 -0
  55. package/dist/metadata/offchain/folder.d.ts.map +1 -0
  56. package/dist/metadata/offchain/folder.js +27 -0
  57. package/dist/metadata/offchain/index.d.ts +4 -0
  58. package/dist/metadata/offchain/index.d.ts.map +1 -0
  59. package/dist/metadata/offchain/index.js +3 -0
  60. package/dist/metadata/onchain/index.d.ts +3 -0
  61. package/dist/metadata/onchain/index.d.ts.map +1 -0
  62. package/dist/metadata/onchain/index.js +2 -0
  63. package/dist/metadata/onchain/protobuf/OnchainMetadata.d.ts +69 -0
  64. package/dist/metadata/onchain/protobuf/OnchainMetadata.d.ts.map +1 -0
  65. package/dist/metadata/onchain/protobuf/OnchainMetadata.js +322 -0
  66. package/dist/metadata/onchain/utils.d.ts +4 -0
  67. package/dist/metadata/onchain/utils.d.ts.map +1 -0
  68. package/dist/metadata/onchain/utils.js +12 -0
  69. package/dist/src/cid/index.d.ts +9 -0
  70. package/dist/src/cid/index.d.ts.map +1 -0
  71. package/dist/src/cid/index.js +20 -0
  72. package/dist/src/index.d.ts +4 -0
  73. package/dist/src/index.d.ts.map +1 -0
  74. package/dist/src/index.js +3 -0
  75. package/dist/src/ipld/builders.d.ts +11 -0
  76. package/dist/src/ipld/builders.d.ts.map +1 -0
  77. package/dist/src/ipld/builders.js +13 -0
  78. package/dist/src/ipld/chunker.d.ts +22 -0
  79. package/dist/src/ipld/chunker.d.ts.map +1 -0
  80. package/dist/src/ipld/chunker.js +144 -0
  81. package/dist/src/ipld/index.d.ts +4 -0
  82. package/dist/src/ipld/index.d.ts.map +1 -0
  83. package/dist/src/ipld/index.js +3 -0
  84. package/dist/src/ipld/nodes.d.ts +15 -0
  85. package/dist/src/ipld/nodes.d.ts.map +1 -0
  86. package/dist/src/ipld/nodes.js +89 -0
  87. package/dist/src/ipld/utils.d.ts +5 -0
  88. package/dist/src/ipld/utils.d.ts.map +1 -0
  89. package/dist/src/ipld/utils.js +51 -0
  90. package/dist/src/metadata/index.d.ts +3 -0
  91. package/dist/src/metadata/index.d.ts.map +1 -0
  92. package/dist/src/metadata/index.js +2 -0
  93. package/dist/src/metadata/offchain/base.d.ts +4 -0
  94. package/dist/src/metadata/offchain/base.d.ts.map +1 -0
  95. package/dist/src/metadata/offchain/base.js +1 -0
  96. package/dist/src/metadata/offchain/file.d.ts +16 -0
  97. package/dist/src/metadata/offchain/file.d.ts.map +1 -0
  98. package/dist/src/metadata/offchain/file.js +19 -0
  99. package/dist/src/metadata/offchain/folder.d.ts +17 -0
  100. package/dist/src/metadata/offchain/folder.d.ts.map +1 -0
  101. package/dist/src/metadata/offchain/folder.js +10 -0
  102. package/dist/src/metadata/offchain/index.d.ts +4 -0
  103. package/dist/src/metadata/offchain/index.d.ts.map +1 -0
  104. package/dist/src/metadata/offchain/index.js +3 -0
  105. package/dist/src/metadata/onchain/index.d.ts +3 -0
  106. package/dist/src/metadata/onchain/index.d.ts.map +1 -0
  107. package/dist/src/metadata/onchain/index.js +2 -0
  108. package/dist/src/metadata/onchain/protobuf/OnchainMetadata.d.ts +28 -0
  109. package/dist/src/metadata/onchain/protobuf/OnchainMetadata.d.ts.map +1 -0
  110. package/dist/src/metadata/onchain/protobuf/OnchainMetadata.js +112 -0
  111. package/dist/src/metadata/onchain/utils.d.ts +4 -0
  112. package/dist/src/metadata/onchain/utils.d.ts.map +1 -0
  113. package/dist/src/metadata/onchain/utils.js +12 -0
  114. package/dist/utils/async.d.ts +3 -0
  115. package/dist/utils/async.d.ts.map +1 -0
  116. package/dist/utils/async.js +48 -0
  117. package/dist/utils/index.d.ts +2 -0
  118. package/dist/utils/index.d.ts.map +1 -0
  119. package/dist/utils/index.js +1 -0
  120. package/dist/utils/types.d.ts +2 -0
  121. package/dist/utils/types.d.ts.map +1 -0
  122. package/dist/utils/types.js +1 -0
  123. package/jest.config.ts +17 -0
  124. package/package.json +46 -0
  125. package/src/cid/index.ts +26 -0
  126. package/src/compression/index.ts +84 -0
  127. package/src/compression/types.ts +11 -0
  128. package/src/encryption/index.ts +99 -0
  129. package/src/encryption/types.ts +4 -0
  130. package/src/index.ts +5 -0
  131. package/src/ipld/builders.ts +40 -0
  132. package/src/ipld/chunker.ts +245 -0
  133. package/src/ipld/index.ts +4 -0
  134. package/src/ipld/nodes.ts +208 -0
  135. package/src/ipld/utils.ts +21 -0
  136. package/src/metadata/index.ts +2 -0
  137. package/src/metadata/offchain/base.ts +4 -0
  138. package/src/metadata/offchain/file.ts +41 -0
  139. package/src/metadata/offchain/folder.ts +54 -0
  140. package/src/metadata/offchain/index.ts +3 -0
  141. package/src/metadata/onchain/index.ts +2 -0
  142. package/src/metadata/onchain/protobuf/OnchainMetadata.proto +46 -0
  143. package/src/metadata/onchain/protobuf/OnchainMetadata.ts +397 -0
  144. package/src/metadata/onchain/utils.ts +15 -0
  145. package/src/utils/async.ts +20 -0
  146. package/src/utils/index.ts +1 -0
  147. package/src/utils/types.ts +1 -0
  148. package/tests/chunker.spec.ts +294 -0
  149. package/tests/cid.spec.ts +20 -0
  150. package/tests/compression.spec.ts +58 -0
  151. package/tests/encryption.spec.ts +67 -0
  152. package/tests/nodes.spec.ts +74 -0
  153. package/tsconfig.json +14 -0
@@ -0,0 +1 @@
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,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAYnC,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,EACpB,iBAAiB,CAAC,EAAE,iBAAiB,KAClC,MAAM,CAAA;IACX,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,KAAK,MAAM,CAAA;CAC3F;AACD,eAAO,MAAM,gBAAgB,EAAE,QAK9B,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,QAK1B,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { createChunkedFileIpldNode, createChunkedMetadataIpldNode, createFileChunkIpldNode, createFileInlinkIpldNode, createMetadataChunkIpldNode, createMetadataInlinkIpldNode, createSingleFileIpldNode, createSingleMetadataIpldNode, } from './nodes.js';
2
+ export const metadataBuilders = {
3
+ inlink: createMetadataInlinkIpldNode,
4
+ chunk: createMetadataChunkIpldNode,
5
+ root: createChunkedMetadataIpldNode,
6
+ single: createSingleMetadataIpldNode,
7
+ };
8
+ export const fileBuilders = {
9
+ inlink: createFileInlinkIpldNode,
10
+ chunk: createFileChunkIpldNode,
11
+ root: createChunkedFileIpldNode,
12
+ single: createSingleFileIpldNode,
13
+ };
@@ -0,0 +1,30 @@
1
+ import type { BaseBlockstore } from 'blockstore-core';
2
+ import type { AwaitIterable } from 'interface-store';
3
+ import { CID } from 'multiformats';
4
+ import { FileUploadOptions, OffchainMetadata } from '../metadata/index.js';
5
+ import { Builders } from './builders.js';
6
+ import { PBNode } from './utils.js';
7
+ type ChunkerLimits = {
8
+ maxChunkSize: number;
9
+ maxLinkPerNode: number;
10
+ };
11
+ type ChunkerOptions = ChunkerLimits & FileUploadOptions;
12
+ export declare const DEFAULT_MAX_CHUNK_SIZE: number;
13
+ export declare const DEFAULT_MAX_LINK_PER_NODE: number;
14
+ export declare const processFileToIPLDFormat: (blockstore: BaseBlockstore, file: AwaitIterable<Buffer>, totalSize: number, filename?: string, { maxChunkSize, maxLinkPerNode, encryption, compression, }?: Partial<ChunkerOptions>) => Promise<CID>;
15
+ export declare const processMetadataToIPLDFormat: (blockstore: BaseBlockstore, metadata: OffchainMetadata, limits?: {
16
+ maxChunkSize: number;
17
+ maxLinkPerNode: number;
18
+ }) => Promise<CID>;
19
+ export declare const processBufferToIPLDFormatFromChunks: (blockstore: BaseBlockstore, chunks: AwaitIterable<CID>, filename: string | undefined, totalSize: number, builders: Builders, { maxChunkSize, maxLinkPerNode, encryption, compression, }?: Partial<ChunkerOptions>) => Promise<CID>;
20
+ export declare const processFolderToIPLDFormat: (blockstore: BaseBlockstore, children: CID[], name: string, size: number, { maxLinkPerNode, maxChunkSize, compression, encryption, }?: Partial<ChunkerOptions>) => Promise<CID>;
21
+ /**
22
+ * Process chunks to IPLD format, return the last chunk if it's not full
23
+ * @returns the last chunk if it's not full, otherwise an empty buffer
24
+ */
25
+ export declare const processChunksToIPLDFormat: (blockstore: BaseBlockstore, chunks: AwaitIterable<Buffer>, builders: Builders, { maxChunkSize }: {
26
+ maxChunkSize?: number;
27
+ }) => Promise<Buffer>;
28
+ export declare const ensureNodeMaxSize: (node: PBNode, maxSize?: number) => PBNode;
29
+ export {};
30
+ //# sourceMappingURL=chunker.d.ts.map
@@ -0,0 +1 @@
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,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC9F,OAAO,EAAE,QAAQ,EAAkC,MAAM,eAAe,CAAA;AAExE,OAAO,EAA2B,MAAM,EAAE,MAAM,YAAY,CAAA;AAE5D,KAAK,aAAa,GAAG;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,KAAK,cAAc,GAAG,aAAa,GAAG,iBAAiB,CAAA;AAEvD,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,+DAMd,OAAO,CAAC,cAAc,CAAC,KAMzB,OAAO,CAAC,GAAG,CAOb,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;AAsCD,eAAO,MAAM,mCAAmC,eAClC,cAAc,UAClB,aAAa,CAAC,GAAG,CAAC,YAChB,MAAM,GAAG,SAAS,aACjB,MAAM,YACP,QAAQ,+DAMf,OAAO,CAAC,cAAc,CAAC,KAMzB,OAAO,CAAC,GAAG,CA4Cb,CAAA;AAED,eAAO,MAAM,yBAAyB,eACxB,cAAc,YAChB,GAAG,EAAE,QACT,MAAM,QACN,MAAM,+DAMT,OAAO,CAAC,cAAc,CAAC,KAMzB,OAAO,CAAC,GAAG,CAwBb,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"}
@@ -0,0 +1,219 @@
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
+ };
30
+ import { cidOfNode } from '../cid/index.js';
31
+ import { decodeIPLDNodeData } from '../metadata/index.js';
32
+ import { fileBuilders, metadataBuilders } from './builders.js';
33
+ import { createFolderInlinkIpldNode, createFolderIpldNode } from './nodes.js';
34
+ import { chunkBuffer, encodeNode } from './utils.js';
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 = DEFAULT_MAX_CHUNK_SIZE, maxLinkPerNode = DEFAULT_MAX_LINK_PER_NODE, encryption = undefined, compression = undefined, } = {
39
+ maxChunkSize: DEFAULT_MAX_CHUNK_SIZE,
40
+ maxLinkPerNode: DEFAULT_MAX_LINK_PER_NODE,
41
+ encryption: undefined,
42
+ compression: undefined,
43
+ }) => {
44
+ return processBufferToIPLDFormat(blockstore, file, filename, totalSize, fileBuilders, {
45
+ maxChunkSize,
46
+ maxLinkPerNode,
47
+ encryption,
48
+ compression,
49
+ });
50
+ };
51
+ export const processMetadataToIPLDFormat = (blockstore_1, metadata_1, ...args_1) => __awaiter(void 0, [blockstore_1, metadata_1, ...args_1], void 0, function* (blockstore, metadata, limits = {
52
+ maxChunkSize: DEFAULT_MAX_CHUNK_SIZE,
53
+ maxLinkPerNode: DEFAULT_MAX_LINK_PER_NODE,
54
+ }) {
55
+ const buffer = Buffer.from(JSON.stringify(metadata));
56
+ const name = `${metadata.name}.metadata.json`;
57
+ return processBufferToIPLDFormat(blockstore, (function () {
58
+ return __asyncGenerator(this, arguments, function* () {
59
+ yield yield __await(buffer);
60
+ });
61
+ })(), name, buffer.byteLength, metadataBuilders, limits);
62
+ });
63
+ 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 = DEFAULT_MAX_CHUNK_SIZE, maxLinkPerNode = DEFAULT_MAX_LINK_PER_NODE, encryption = undefined, compression = undefined, } = {
64
+ maxChunkSize: DEFAULT_MAX_CHUNK_SIZE,
65
+ maxLinkPerNode: DEFAULT_MAX_LINK_PER_NODE,
66
+ encryption: undefined,
67
+ compression: undefined,
68
+ }) {
69
+ var _a, e_1, _b, _c;
70
+ const bufferChunks = chunkBuffer(buffer, { maxChunkSize: maxChunkSize });
71
+ let CIDs = [];
72
+ try {
73
+ 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) {
74
+ _c = bufferChunks_1_1.value;
75
+ _d = false;
76
+ const chunk = _c;
77
+ const node = builders.chunk(chunk);
78
+ const cid = cidOfNode(node);
79
+ yield blockstore.put(cid, encodeNode(node));
80
+ CIDs.push(cid);
81
+ }
82
+ }
83
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
84
+ finally {
85
+ try {
86
+ if (!_d && !_a && (_b = bufferChunks_1.return)) yield _b.call(bufferChunks_1);
87
+ }
88
+ finally { if (e_1) throw e_1.error; }
89
+ }
90
+ return processBufferToIPLDFormatFromChunks(blockstore, CIDs, filename, totalSize, builders, {
91
+ maxLinkPerNode,
92
+ maxChunkSize,
93
+ encryption,
94
+ compression,
95
+ });
96
+ });
97
+ 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, { maxChunkSize = DEFAULT_MAX_CHUNK_SIZE, maxLinkPerNode = DEFAULT_MAX_LINK_PER_NODE, encryption = undefined, compression = undefined, } = {
98
+ maxChunkSize: DEFAULT_MAX_CHUNK_SIZE,
99
+ maxLinkPerNode: DEFAULT_MAX_LINK_PER_NODE,
100
+ encryption: undefined,
101
+ compression: undefined,
102
+ }) {
103
+ var _a, chunks_2, chunks_2_1;
104
+ var _b, e_2, _c, _d;
105
+ let chunkCount = 0;
106
+ let CIDs = [];
107
+ try {
108
+ for (_a = true, chunks_2 = __asyncValues(chunks); chunks_2_1 = yield chunks_2.next(), _b = chunks_2_1.done, !_b; _a = true) {
109
+ _d = chunks_2_1.value;
110
+ _a = false;
111
+ const chunk = _d;
112
+ CIDs.push(chunk);
113
+ chunkCount++;
114
+ }
115
+ }
116
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
117
+ finally {
118
+ try {
119
+ if (!_a && !_b && (_c = chunks_2.return)) yield _c.call(chunks_2);
120
+ }
121
+ finally { if (e_2) throw e_2.error; }
122
+ }
123
+ if (CIDs.length === 1) {
124
+ const nodeBytes = yield blockstore.get(CIDs[0]);
125
+ yield blockstore.delete(CIDs[0]);
126
+ const data = decodeIPLDNodeData(nodeBytes);
127
+ const singleNode = builders.single(Buffer.from(data.data), filename, {
128
+ compression,
129
+ encryption,
130
+ });
131
+ yield blockstore.put(cidOfNode(singleNode), encodeNode(singleNode));
132
+ const headCID = cidOfNode(singleNode);
133
+ return headCID;
134
+ }
135
+ let depth = 1;
136
+ while (CIDs.length > maxLinkPerNode) {
137
+ const newCIDs = [];
138
+ for (let i = 0; i < CIDs.length; i += maxLinkPerNode) {
139
+ const chunk = CIDs.slice(i, i + maxLinkPerNode);
140
+ const node = builders.inlink(chunk, chunk.length, depth, maxChunkSize);
141
+ const cid = cidOfNode(node);
142
+ yield blockstore.put(cid, encodeNode(node));
143
+ newCIDs.push(cid);
144
+ }
145
+ depth++;
146
+ CIDs = newCIDs;
147
+ }
148
+ const head = builders.root(CIDs, totalSize, depth, filename, maxChunkSize, {
149
+ compression,
150
+ encryption,
151
+ });
152
+ const headCID = cidOfNode(head);
153
+ yield blockstore.put(headCID, encodeNode(head));
154
+ return headCID;
155
+ });
156
+ 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 = DEFAULT_MAX_LINK_PER_NODE, maxChunkSize = DEFAULT_MAX_CHUNK_SIZE, compression = undefined, encryption = undefined, } = {
157
+ maxLinkPerNode: DEFAULT_MAX_LINK_PER_NODE,
158
+ maxChunkSize: DEFAULT_MAX_CHUNK_SIZE,
159
+ compression: undefined,
160
+ encryption: undefined,
161
+ }) {
162
+ let cids = children;
163
+ let depth = 0;
164
+ while (cids.length > maxLinkPerNode) {
165
+ const newCIDs = [];
166
+ for (let i = 0; i < cids.length; i += maxLinkPerNode) {
167
+ const chunk = cids.slice(i, i + maxLinkPerNode);
168
+ const node = createFolderInlinkIpldNode(chunk, depth);
169
+ const cid = cidOfNode(node);
170
+ yield blockstore.put(cid, encodeNode(node));
171
+ newCIDs.push(cid);
172
+ }
173
+ cids = newCIDs;
174
+ depth++;
175
+ }
176
+ const node = createFolderIpldNode(cids, name, depth, size, maxChunkSize, {
177
+ compression,
178
+ encryption,
179
+ });
180
+ const cid = cidOfNode(node);
181
+ yield blockstore.put(cid, encodeNode(node));
182
+ return cid;
183
+ });
184
+ /**
185
+ * Process chunks to IPLD format, return the last chunk if it's not full
186
+ * @returns the last chunk if it's not full, otherwise an empty buffer
187
+ */
188
+ 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 }) {
189
+ var _b, e_3, _c, _d;
190
+ const bufferChunks = chunkBuffer(chunks, { maxChunkSize, ignoreLastChunk: false });
191
+ try {
192
+ 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) {
193
+ _d = bufferChunks_2_1.value;
194
+ _e = false;
195
+ const chunk = _d;
196
+ if (chunk.byteLength < maxChunkSize) {
197
+ return chunk;
198
+ }
199
+ const node = builders.chunk(chunk);
200
+ const cid = cidOfNode(node);
201
+ yield blockstore.put(cid, encodeNode(node));
202
+ }
203
+ }
204
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
205
+ finally {
206
+ try {
207
+ if (!_e && !_b && (_c = bufferChunks_2.return)) yield _c.call(bufferChunks_2);
208
+ }
209
+ finally { if (e_3) throw e_3.error; }
210
+ }
211
+ return Buffer.alloc(0);
212
+ });
213
+ export const ensureNodeMaxSize = (node, maxSize = DEFAULT_MAX_CHUNK_SIZE) => {
214
+ const nodeSize = encodeNode(node).byteLength;
215
+ if (nodeSize > maxSize) {
216
+ throw new Error(`Node is too large to fit in a single chunk: ${nodeSize} > ${maxSize}`);
217
+ }
218
+ return node;
219
+ };
@@ -0,0 +1,5 @@
1
+ export * from './builders.js';
2
+ export * from './chunker.js';
3
+ export * from './nodes.js';
4
+ export * from './utils.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,4 @@
1
+ export * from './builders.js';
2
+ export * from './chunker.js';
3
+ export * from './nodes.js';
4
+ export * from './utils.js';
@@ -0,0 +1,15 @@
1
+ import { CID } from 'multiformats/cid';
2
+ import { FileUploadOptions, OffchainMetadata } from '../metadata/index.js';
3
+ import { PBNode } from './index.js';
4
+ export declare const createFileChunkIpldNode: (data: Buffer) => PBNode;
5
+ export declare const createChunkedFileIpldNode: (links: CID[], size: number, linkDepth: number, name?: string, maxNodeSize?: number, uploadOptions?: FileUploadOptions) => PBNode;
6
+ export declare const createFileInlinkIpldNode: (links: CID[], size: number, linkDepth: number, maxNodeSize?: number) => PBNode;
7
+ export declare const createSingleFileIpldNode: (data: Buffer, name?: string, uploadOptions?: FileUploadOptions) => PBNode;
8
+ export declare const createMetadataInlinkIpldNode: (links: CID[], size: number, linkDepth: number, maxNodeSize?: number) => PBNode;
9
+ export declare const createSingleMetadataIpldNode: (data: Buffer, name?: string) => PBNode;
10
+ export declare const createMetadataChunkIpldNode: (data: Buffer) => PBNode;
11
+ export declare const createChunkedMetadataIpldNode: (links: CID[], size: number, linkDepth: number, name?: string, maxNodeSize?: number) => PBNode;
12
+ export declare const createFolderIpldNode: (links: CID[], name: string, linkDepth: number, size: number, maxNodeSize?: number, uploadOptions?: FileUploadOptions) => PBNode;
13
+ export declare const createFolderInlinkIpldNode: (links: CID[], linkDepth: number, maxNodeSize?: number) => PBNode;
14
+ export declare const createMetadataNode: (metadata: OffchainMetadata, maxNodeSize?: number) => PBNode;
15
+ //# sourceMappingURL=nodes.d.ts.map
@@ -0,0 +1 @@
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,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAG1E,OAAO,EAAc,MAAM,EAAE,MAAM,YAAY,CAAA;AAG/C,eAAO,MAAM,uBAAuB,SAAU,MAAM,KAAG,MASpD,CAAA;AAKH,eAAO,MAAM,yBAAyB,UAC7B,GAAG,EAAE,QACN,MAAM,aACD,MAAM,SACV,MAAM,gBACA,MAAM,kBACH,iBAAiB,KAChC,MAaA,CAAA;AAGH,eAAO,MAAM,wBAAwB,UAC5B,GAAG,EAAE,QACN,MAAM,aACD,MAAM,gBACJ,MAAM,KAClB,MAWA,CAAA;AAKH,eAAO,MAAM,wBAAwB,SAC7B,MAAM,SACL,MAAM,kBACG,iBAAiB,KAChC,MAWA,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,kBACH,iBAAiB,KAChC,MAaA,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"}
@@ -0,0 +1,92 @@
1
+ import { encodeIPLDNodeData, MetadataType } from '../metadata/onchain/index.js';
2
+ import { DEFAULT_MAX_CHUNK_SIZE, ensureNodeMaxSize } from './chunker.js';
3
+ import { createNode } from './index.js';
4
+ /// Creates a file chunk ipld node
5
+ export const createFileChunkIpldNode = (data) => createNode(encodeIPLDNodeData({
6
+ type: MetadataType.FileChunk,
7
+ size: data.length,
8
+ linkDepth: 0,
9
+ data,
10
+ }), []);
11
+ // Creates a file ipld node
12
+ // links: the CIDs of the file's contents
13
+ // @todo: add the file's metadata
14
+ export const createChunkedFileIpldNode = (links, size, linkDepth, name, maxNodeSize = DEFAULT_MAX_CHUNK_SIZE, uploadOptions) => ensureNodeMaxSize(createNode(encodeIPLDNodeData({
15
+ type: MetadataType.File,
16
+ name,
17
+ size,
18
+ linkDepth,
19
+ uploadOptions,
20
+ }), links.map((cid) => ({ Hash: cid }))), maxNodeSize);
21
+ // Creates a file ipld node
22
+ // links: the CIDs of the file's contents
23
+ export const createFileInlinkIpldNode = (links, size, linkDepth, maxNodeSize = DEFAULT_MAX_CHUNK_SIZE) => ensureNodeMaxSize(createNode(encodeIPLDNodeData({
24
+ type: MetadataType.FileInlink,
25
+ size,
26
+ linkDepth,
27
+ }), links.map((cid) => ({ Hash: cid }))), maxNodeSize);
28
+ // Creates a file ipld node
29
+ // links: the CIDs of the file's contents
30
+ // @todo: add the file's metadata
31
+ export const createSingleFileIpldNode = (data, name, uploadOptions) => createNode(encodeIPLDNodeData({
32
+ type: MetadataType.File,
33
+ name,
34
+ size: data.length,
35
+ linkDepth: 0,
36
+ data,
37
+ uploadOptions,
38
+ }), []);
39
+ // Creates a file ipld node
40
+ // links: the CIDs of the file's contents
41
+ // @todo: add the file's metadata
42
+ export const createMetadataInlinkIpldNode = (links, size, linkDepth, maxNodeSize = DEFAULT_MAX_CHUNK_SIZE) => ensureNodeMaxSize(createNode(encodeIPLDNodeData({
43
+ type: MetadataType.FileInlink,
44
+ size,
45
+ linkDepth,
46
+ }), links.map((cid) => ({ Hash: cid }))), maxNodeSize);
47
+ // Creates a file ipld node
48
+ // links: the CIDs of the file's contents
49
+ // @todo: add the file's metadata
50
+ export const createSingleMetadataIpldNode = (data, name) => createNode(encodeIPLDNodeData({
51
+ type: MetadataType.Metadata,
52
+ name,
53
+ size: data.length,
54
+ linkDepth: 0,
55
+ data,
56
+ }), []);
57
+ export const createMetadataChunkIpldNode = (data) => createNode(encodeIPLDNodeData({
58
+ type: MetadataType.MetadataChunk,
59
+ size: data.length,
60
+ linkDepth: 0,
61
+ data,
62
+ }));
63
+ export const createChunkedMetadataIpldNode = (links, size, linkDepth, name, maxNodeSize = DEFAULT_MAX_CHUNK_SIZE) => ensureNodeMaxSize(createNode(encodeIPLDNodeData({
64
+ type: MetadataType.Metadata,
65
+ name,
66
+ size,
67
+ linkDepth,
68
+ }), links.map((cid) => ({ Hash: cid }))), maxNodeSize);
69
+ // Creates a folder ipld node
70
+ // links: the CIDs of the folder's contents
71
+ // @todo: add the folder's metadata
72
+ export const createFolderIpldNode = (links, name, linkDepth, size, maxNodeSize = DEFAULT_MAX_CHUNK_SIZE, uploadOptions) => ensureNodeMaxSize(createNode(encodeIPLDNodeData({
73
+ type: MetadataType.Folder,
74
+ name,
75
+ size,
76
+ linkDepth,
77
+ uploadOptions,
78
+ }), links.map((cid) => ({ Hash: cid }))), maxNodeSize);
79
+ export const createFolderInlinkIpldNode = (links, linkDepth, maxNodeSize = DEFAULT_MAX_CHUNK_SIZE) => ensureNodeMaxSize(createNode(encodeIPLDNodeData({
80
+ type: MetadataType.FolderInlink,
81
+ linkDepth,
82
+ }), links.map((cid) => ({ Hash: cid }))), maxNodeSize);
83
+ /// Creates a metadata ipld node
84
+ export const createMetadataNode = (metadata, maxNodeSize = DEFAULT_MAX_CHUNK_SIZE) => {
85
+ const data = Buffer.from(JSON.stringify(metadata));
86
+ return ensureNodeMaxSize(createNode(encodeIPLDNodeData({
87
+ type: MetadataType.Metadata,
88
+ name: metadata.name,
89
+ linkDepth: 0,
90
+ data,
91
+ })), maxNodeSize);
92
+ };
@@ -0,0 +1,8 @@
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 };
8
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,50 @@
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); }
7
+ };
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 };
@@ -0,0 +1,3 @@
1
+ export * from './offchain/index.js';
2
+ export * from './onchain/index.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/metadata/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './offchain/index.js';
2
+ export * from './onchain/index.js';
@@ -0,0 +1,4 @@
1
+ import { OffchainFileMetadata } from './file.js';
2
+ import { OffchainFolderMetadata } from './folder.js';
3
+ export type OffchainMetadata = OffchainFolderMetadata | OffchainFileMetadata;
4
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/metadata/offchain/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAEpD,MAAM,MAAM,gBAAgB,GAAG,sBAAsB,GAAG,oBAAoB,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,18 @@
1
+ import { CID } from 'multiformats';
2
+ import { FileUploadOptions } from '../../index.js';
3
+ export type OffchainFileMetadata = {
4
+ type: 'file';
5
+ dataCid: string;
6
+ name?: string;
7
+ mimeType?: string;
8
+ totalSize: number;
9
+ totalChunks: number;
10
+ chunks: ChunkInfo[];
11
+ uploadOptions?: FileUploadOptions;
12
+ };
13
+ export interface ChunkInfo {
14
+ size: number;
15
+ cid: string;
16
+ }
17
+ export declare const fileMetadata: (headCID: CID, chunks: ChunkInfo[], totalSize: number, name?: string | null, mimeType?: string | null, uploadOptions?: FileUploadOptions) => OffchainFileMetadata;
18
+ //# sourceMappingURL=file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../src/metadata/offchain/file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAClC,OAAO,EAAe,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAE/D,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;IACnB,aAAa,CAAC,EAAE,iBAAiB,CAAA;CAClC,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,kBACT,iBAAiB,KAI/B,oBAWF,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { cidToString } from '../../index.js';
2
+ export const fileMetadata = (headCID, chunks, totalSize, name, mimeType, uploadOptions = {
3
+ compression: undefined,
4
+ encryption: undefined,
5
+ }) => {
6
+ return {
7
+ type: 'file',
8
+ dataCid: cidToString(headCID),
9
+ name: name !== null && name !== void 0 ? name : undefined,
10
+ mimeType: mimeType !== null && mimeType !== void 0 ? mimeType : undefined,
11
+ totalSize,
12
+ totalChunks: chunks.length,
13
+ chunks,
14
+ uploadOptions,
15
+ };
16
+ };
@@ -0,0 +1,22 @@
1
+ import { CID } from 'multiformats';
2
+ import { PBNode } from '../../ipld/index.js';
3
+ import { FileUploadOptions } from '../onchain/index.js';
4
+ interface ChildrenMetadata {
5
+ type: 'folder' | 'file';
6
+ name?: string;
7
+ cid: string;
8
+ totalSize: number;
9
+ }
10
+ export type OffchainFolderMetadata = {
11
+ type: 'folder';
12
+ dataCid: string;
13
+ name?: string;
14
+ totalSize: number;
15
+ totalFiles: number;
16
+ children: ChildrenMetadata[];
17
+ uploadOptions: FileUploadOptions;
18
+ };
19
+ export declare const childrenMetadataFromNode: (node: PBNode) => ChildrenMetadata;
20
+ export declare const folderMetadata: (cid: CID | string, children: ChildrenMetadata[], name?: string | null, uploadOptions?: FileUploadOptions) => OffchainFolderMetadata;
21
+ export {};
22
+ //# sourceMappingURL=folder.d.ts.map
@@ -0,0 +1 @@
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;AAC5C,OAAO,EAAE,iBAAiB,EAA8B,MAAM,qBAAqB,CAAA;AAEnF,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;IAC5B,aAAa,EAAE,iBAAiB,CAAA;CACjC,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,kBACL,iBAAiB,KAC/B,sBAYF,CAAA"}
@@ -0,0 +1,27 @@
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
+ };
16
+ export const folderMetadata = (cid, children, name, uploadOptions = {}) => {
17
+ cid = typeof cid === 'string' ? cid : cidToString(cid);
18
+ return {
19
+ dataCid: cid,
20
+ totalSize: children.reduce((acc, child) => acc + child.totalSize, 0),
21
+ totalFiles: children.length,
22
+ children,
23
+ type: 'folder',
24
+ name: name !== null && name !== void 0 ? name : undefined,
25
+ uploadOptions,
26
+ };
27
+ };
@@ -0,0 +1,4 @@
1
+ export * from './base.js';
2
+ export * from './file.js';
3
+ export * from './folder.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/metadata/offchain/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './base.js';
2
+ export * from './file.js';
3
+ export * from './folder.js';
@@ -0,0 +1,3 @@
1
+ export * from './protobuf/OnchainMetadata.js';
2
+ export * from './utils.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/metadata/onchain/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAA;AAC7C,cAAc,YAAY,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './protobuf/OnchainMetadata.js';
2
+ export * from './utils.js';