@autonomys/auto-drive 0.7.3 → 0.7.4

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 (79) hide show
  1. package/dist/ipld/blockstore/base.d.ts +9 -0
  2. package/dist/ipld/blockstore/base.d.ts.map +1 -0
  3. package/dist/ipld/blockstore/base.js +1 -0
  4. package/dist/ipld/blockstore/index.d.ts +3 -0
  5. package/dist/ipld/blockstore/index.d.ts.map +1 -0
  6. package/dist/ipld/blockstore/index.js +2 -0
  7. package/dist/ipld/blockstore/memory.d.ts +13 -0
  8. package/dist/ipld/blockstore/memory.d.ts.map +1 -0
  9. package/dist/ipld/blockstore/memory.js +57 -0
  10. package/dist/ipld/builders.d.ts +3 -2
  11. package/dist/ipld/builders.d.ts.map +1 -1
  12. package/dist/ipld/chunker.d.ts +10 -12
  13. package/dist/ipld/chunker.d.ts.map +1 -1
  14. package/dist/ipld/chunker.js +33 -9
  15. package/dist/ipld/nodes.d.ts +4 -4
  16. package/dist/ipld/nodes.d.ts.map +1 -1
  17. package/dist/ipld/nodes.js +6 -3
  18. package/dist/metadata/offchain/file.d.ts +3 -1
  19. package/dist/metadata/offchain/file.d.ts.map +1 -1
  20. package/dist/metadata/offchain/file.js +5 -1
  21. package/dist/metadata/offchain/folder.d.ts +3 -1
  22. package/dist/metadata/offchain/folder.d.ts.map +1 -1
  23. package/dist/metadata/offchain/folder.js +2 -1
  24. package/dist/metadata/onchain/protobuf/OnchainMetadata.d.ts +41 -0
  25. package/dist/metadata/onchain/protobuf/OnchainMetadata.d.ts.map +1 -1
  26. package/dist/metadata/onchain/protobuf/OnchainMetadata.js +210 -0
  27. package/dist/src/cid/index.d.ts +9 -0
  28. package/dist/src/cid/index.d.ts.map +1 -0
  29. package/dist/src/cid/index.js +20 -0
  30. package/dist/src/index.d.ts +4 -0
  31. package/dist/src/index.d.ts.map +1 -0
  32. package/dist/src/index.js +3 -0
  33. package/dist/src/ipld/builders.d.ts +11 -0
  34. package/dist/src/ipld/builders.d.ts.map +1 -0
  35. package/dist/src/ipld/builders.js +13 -0
  36. package/dist/src/ipld/chunker.d.ts +22 -0
  37. package/dist/src/ipld/chunker.d.ts.map +1 -0
  38. package/dist/src/ipld/chunker.js +144 -0
  39. package/dist/src/ipld/index.d.ts +4 -0
  40. package/dist/src/ipld/index.d.ts.map +1 -0
  41. package/dist/src/ipld/index.js +3 -0
  42. package/dist/src/ipld/nodes.d.ts +15 -0
  43. package/dist/src/ipld/nodes.d.ts.map +1 -0
  44. package/dist/src/ipld/nodes.js +89 -0
  45. package/dist/src/ipld/utils.d.ts +5 -0
  46. package/dist/src/ipld/utils.d.ts.map +1 -0
  47. package/dist/src/ipld/utils.js +51 -0
  48. package/dist/src/metadata/index.d.ts +3 -0
  49. package/dist/src/metadata/index.d.ts.map +1 -0
  50. package/dist/src/metadata/index.js +2 -0
  51. package/dist/src/metadata/offchain/base.d.ts +4 -0
  52. package/dist/src/metadata/offchain/base.d.ts.map +1 -0
  53. package/dist/src/metadata/offchain/base.js +1 -0
  54. package/dist/src/metadata/offchain/file.d.ts +16 -0
  55. package/dist/src/metadata/offchain/file.d.ts.map +1 -0
  56. package/dist/src/metadata/offchain/file.js +19 -0
  57. package/dist/src/metadata/offchain/folder.d.ts +17 -0
  58. package/dist/src/metadata/offchain/folder.d.ts.map +1 -0
  59. package/dist/src/metadata/offchain/folder.js +10 -0
  60. package/dist/src/metadata/offchain/index.d.ts +4 -0
  61. package/dist/src/metadata/offchain/index.d.ts.map +1 -0
  62. package/dist/src/metadata/offchain/index.js +3 -0
  63. package/dist/src/metadata/onchain/index.d.ts +3 -0
  64. package/dist/src/metadata/onchain/index.d.ts.map +1 -0
  65. package/dist/src/metadata/onchain/index.js +2 -0
  66. package/dist/src/metadata/onchain/protobuf/OnchainMetadata.d.ts +28 -0
  67. package/dist/src/metadata/onchain/protobuf/OnchainMetadata.d.ts.map +1 -0
  68. package/dist/src/metadata/onchain/protobuf/OnchainMetadata.js +112 -0
  69. package/dist/src/metadata/onchain/utils.d.ts +4 -0
  70. package/dist/src/metadata/onchain/utils.d.ts.map +1 -0
  71. package/dist/src/metadata/onchain/utils.js +12 -0
  72. package/package.json +2 -2
  73. package/src/ipld/builders.ts +3 -1
  74. package/src/ipld/chunker.ts +61 -10
  75. package/src/ipld/nodes.ts +11 -2
  76. package/src/metadata/offchain/file.ts +7 -1
  77. package/src/metadata/offchain/folder.ts +4 -1
  78. package/src/metadata/onchain/protobuf/OnchainMetadata.proto +25 -0
  79. package/src/metadata/onchain/protobuf/OnchainMetadata.ts +260 -0
@@ -0,0 +1,51 @@
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 { decode, encode } from '@ipld/dag-pb';
22
+ export const chunkBuffer = function (buffer, chunkSize) {
23
+ return __asyncGenerator(this, arguments, function* () {
24
+ var _a, e_1, _b, _c;
25
+ let target = Buffer.alloc(0);
26
+ try {
27
+ for (var _d = true, buffer_1 = __asyncValues(buffer), buffer_1_1; buffer_1_1 = yield __await(buffer_1.next()), _a = buffer_1_1.done, !_a; _d = true) {
28
+ _c = buffer_1_1.value;
29
+ _d = false;
30
+ let chunk = _c;
31
+ target = Buffer.concat([target, chunk]);
32
+ while (target.length >= chunkSize) {
33
+ yield yield __await(target.subarray(0, chunkSize));
34
+ target = target.subarray(chunkSize);
35
+ }
36
+ }
37
+ }
38
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
39
+ finally {
40
+ try {
41
+ if (!_d && !_a && (_b = buffer_1.return)) yield __await(_b.call(buffer_1));
42
+ }
43
+ finally { if (e_1) throw e_1.error; }
44
+ }
45
+ if (target.length > 0) {
46
+ yield yield __await(target);
47
+ }
48
+ });
49
+ };
50
+ export const encodeNode = (node) => Buffer.from(encode(node));
51
+ export const decodeNode = (data) => decode(data);
@@ -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,16 @@
1
+ import { IPLDDag } from '../../index.js';
2
+ export type OffchainFileMetadata = {
3
+ type: 'file';
4
+ dataCid: string;
5
+ name?: string;
6
+ mimeType?: string;
7
+ totalSize: number;
8
+ totalChunks: number;
9
+ chunks: ChunkInfo[];
10
+ };
11
+ export interface ChunkInfo {
12
+ size: number;
13
+ cid: string;
14
+ }
15
+ export declare const fileMetadata: (dag: IPLDDag, totalSize: number, name?: string, mimeType?: string) => OffchainFileMetadata;
16
+ //# 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,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"}
@@ -0,0 +1,19 @@
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);
4
+ return {
5
+ type: 'file',
6
+ dataCid: cidToString(dag.headCID),
7
+ name,
8
+ mimeType,
9
+ totalSize,
10
+ 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
+ }),
18
+ };
19
+ };
@@ -0,0 +1,17 @@
1
+ interface ChildrenMetadata {
2
+ type: 'folder' | 'file';
3
+ name?: string;
4
+ cid: string;
5
+ totalSize: number;
6
+ }
7
+ export type OffchainFolderMetadata = {
8
+ type: 'folder';
9
+ dataCid: string;
10
+ name?: string;
11
+ totalSize: number;
12
+ totalFiles: number;
13
+ children: ChildrenMetadata[];
14
+ };
15
+ export declare const folderMetadata: (cid: string, children: ChildrenMetadata[], name?: string) => OffchainFolderMetadata;
16
+ export {};
17
+ //# 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,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"}
@@ -0,0 +1,10 @@
1
+ export const folderMetadata = (cid, children, name) => {
2
+ return {
3
+ dataCid: cid,
4
+ totalSize: children.reduce((acc, child) => acc + child.totalSize, 0),
5
+ totalFiles: children.length,
6
+ children,
7
+ type: 'folder',
8
+ name,
9
+ };
10
+ };
@@ -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';
@@ -0,0 +1,28 @@
1
+ import { type Codec, type DecodeOptions } from 'protons-runtime';
2
+ import type { Uint8ArrayList } from 'uint8arraylist';
3
+ export interface IPLDNodeData {
4
+ type: MetadataType;
5
+ linkDepth: number;
6
+ size?: number;
7
+ name?: string;
8
+ data?: Uint8Array;
9
+ }
10
+ export declare namespace IPLDNodeData {
11
+ const codec: () => Codec<IPLDNodeData>;
12
+ const encode: (obj: Partial<IPLDNodeData>) => Uint8Array;
13
+ const decode: (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<IPLDNodeData>) => IPLDNodeData;
14
+ }
15
+ export declare enum MetadataType {
16
+ File = "File",
17
+ FileInlink = "FileInlink",
18
+ FileChunk = "FileChunk",
19
+ Folder = "Folder",
20
+ FolderInlink = "FolderInlink",
21
+ Metadata = "Metadata",
22
+ MetadataInlink = "MetadataInlink",
23
+ MetadataChunk = "MetadataChunk"
24
+ }
25
+ export declare namespace MetadataType {
26
+ const codec: () => Codec<MetadataType>;
27
+ }
28
+ //# sourceMappingURL=OnchainMetadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OnchainMetadata.d.ts","sourceRoot":"","sources":["../../../../../src/metadata/onchain/protobuf/OnchainMetadata.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,KAAK,EAAiB,KAAK,aAAa,EAAuC,MAAM,iBAAiB,CAAA;AACpH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,YAAY,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,UAAU,CAAA;CAClB;AAED,yBAAiB,YAAY,CAAC;IAGrB,MAAM,KAAK,QAAO,KAAK,CAAC,YAAY,CA+E1C,CAAA;IAEM,MAAM,MAAM,QAAS,OAAO,CAAC,YAAY,CAAC,KAAG,UAEnD,CAAA;IAEM,MAAM,MAAM,QAAS,UAAU,GAAG,cAAc,SAAS,aAAa,CAAC,YAAY,CAAC,KAAG,YAE7F,CAAA;CACF;AAED,oBAAY,YAAY;IACtB,IAAI,SAAS;IACb,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,YAAY,iBAAiB;IAC7B,QAAQ,aAAa;IACrB,cAAc,mBAAmB;IACjC,aAAa,kBAAkB;CAChC;AAaD,yBAAiB,YAAY,CAAC;IACrB,MAAM,KAAK,QAAO,KAAK,CAAC,YAAY,CAE1C,CAAA;CACF"}
@@ -0,0 +1,112 @@
1
+ /* eslint-disable import/export */
2
+ /* eslint-disable complexity */
3
+ /* eslint-disable @typescript-eslint/no-namespace */
4
+ /* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */
5
+ /* eslint-disable @typescript-eslint/no-empty-interface */
6
+ import { decodeMessage, encodeMessage, enumeration, message } from 'protons-runtime';
7
+ export var IPLDNodeData;
8
+ (function (IPLDNodeData) {
9
+ let _codec;
10
+ IPLDNodeData.codec = () => {
11
+ if (_codec == null) {
12
+ _codec = message((obj, w, opts = {}) => {
13
+ if (opts.lengthDelimited !== false) {
14
+ w.fork();
15
+ }
16
+ if (obj.type != null && __MetadataTypeValues[obj.type] !== 0) {
17
+ w.uint32(8);
18
+ MetadataType.codec().encode(obj.type, w);
19
+ }
20
+ if ((obj.linkDepth != null && obj.linkDepth !== 0)) {
21
+ w.uint32(16);
22
+ w.int32(obj.linkDepth);
23
+ }
24
+ if (obj.size != null) {
25
+ w.uint32(24);
26
+ w.int32(obj.size);
27
+ }
28
+ if (obj.name != null) {
29
+ w.uint32(34);
30
+ w.string(obj.name);
31
+ }
32
+ if (obj.data != null) {
33
+ w.uint32(42);
34
+ w.bytes(obj.data);
35
+ }
36
+ if (opts.lengthDelimited !== false) {
37
+ w.ldelim();
38
+ }
39
+ }, (reader, length, opts = {}) => {
40
+ const obj = {
41
+ type: MetadataType.File,
42
+ linkDepth: 0
43
+ };
44
+ const end = length == null ? reader.len : reader.pos + length;
45
+ while (reader.pos < end) {
46
+ const tag = reader.uint32();
47
+ switch (tag >>> 3) {
48
+ case 1: {
49
+ obj.type = MetadataType.codec().decode(reader);
50
+ break;
51
+ }
52
+ case 2: {
53
+ obj.linkDepth = reader.int32();
54
+ break;
55
+ }
56
+ case 3: {
57
+ obj.size = reader.int32();
58
+ break;
59
+ }
60
+ case 4: {
61
+ obj.name = reader.string();
62
+ break;
63
+ }
64
+ case 5: {
65
+ obj.data = reader.bytes();
66
+ break;
67
+ }
68
+ default: {
69
+ reader.skipType(tag & 7);
70
+ break;
71
+ }
72
+ }
73
+ }
74
+ return obj;
75
+ });
76
+ }
77
+ return _codec;
78
+ };
79
+ IPLDNodeData.encode = (obj) => {
80
+ return encodeMessage(obj, IPLDNodeData.codec());
81
+ };
82
+ IPLDNodeData.decode = (buf, opts) => {
83
+ return decodeMessage(buf, IPLDNodeData.codec(), opts);
84
+ };
85
+ })(IPLDNodeData || (IPLDNodeData = {}));
86
+ export var MetadataType;
87
+ (function (MetadataType) {
88
+ MetadataType["File"] = "File";
89
+ MetadataType["FileInlink"] = "FileInlink";
90
+ MetadataType["FileChunk"] = "FileChunk";
91
+ MetadataType["Folder"] = "Folder";
92
+ MetadataType["FolderInlink"] = "FolderInlink";
93
+ MetadataType["Metadata"] = "Metadata";
94
+ MetadataType["MetadataInlink"] = "MetadataInlink";
95
+ MetadataType["MetadataChunk"] = "MetadataChunk";
96
+ })(MetadataType || (MetadataType = {}));
97
+ var __MetadataTypeValues;
98
+ (function (__MetadataTypeValues) {
99
+ __MetadataTypeValues[__MetadataTypeValues["File"] = 0] = "File";
100
+ __MetadataTypeValues[__MetadataTypeValues["FileInlink"] = 1] = "FileInlink";
101
+ __MetadataTypeValues[__MetadataTypeValues["FileChunk"] = 2] = "FileChunk";
102
+ __MetadataTypeValues[__MetadataTypeValues["Folder"] = 3] = "Folder";
103
+ __MetadataTypeValues[__MetadataTypeValues["FolderInlink"] = 4] = "FolderInlink";
104
+ __MetadataTypeValues[__MetadataTypeValues["Metadata"] = 5] = "Metadata";
105
+ __MetadataTypeValues[__MetadataTypeValues["MetadataInlink"] = 6] = "MetadataInlink";
106
+ __MetadataTypeValues[__MetadataTypeValues["MetadataChunk"] = 7] = "MetadataChunk";
107
+ })(__MetadataTypeValues || (__MetadataTypeValues = {}));
108
+ (function (MetadataType) {
109
+ MetadataType.codec = () => {
110
+ return enumeration(__MetadataTypeValues);
111
+ };
112
+ })(MetadataType || (MetadataType = {}));
@@ -0,0 +1,4 @@
1
+ import { IPLDNodeData } from '../onchain/index.js';
2
+ export declare const encodeIPLDNodeData: (metadata: IPLDNodeData) => Uint8Array;
3
+ export declare const decodeIPLDNodeData: (data: Uint8Array) => IPLDNodeData;
4
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/metadata/onchain/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD,eAAO,MAAM,kBAAkB,aAAc,YAAY,KAAG,UAE3D,CAAA;AAED,eAAO,MAAM,kBAAkB,SAAU,UAAU,KAAG,YAOrD,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { decode } from '@ipld/dag-pb';
2
+ import { IPLDNodeData } from '../onchain/index.js';
3
+ export const encodeIPLDNodeData = (metadata) => {
4
+ return IPLDNodeData.encode(metadata);
5
+ };
6
+ export const decodeIPLDNodeData = (data) => {
7
+ const decoded = decode(data);
8
+ if (!decoded.Data) {
9
+ throw new Error('Invalid data');
10
+ }
11
+ return IPLDNodeData.decode(decoded.Data);
12
+ };
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.3",
4
+ "version": "0.7.4",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
7
7
  "repository": {
@@ -41,5 +41,5 @@
41
41
  "protons": "^7.6.0",
42
42
  "protons-runtime": "^5.5.0"
43
43
  },
44
- "gitHead": "dde96ad7b5d7f2bf023da23cbd1de89b0e22f1c6"
44
+ "gitHead": "67a6e877c7516104bc82807e91f5fc193372b671"
45
45
  }
@@ -1,5 +1,6 @@
1
1
  import { CID } from 'multiformats/cid'
2
2
  import { PBNode } from '../ipld/index.js'
3
+ import { FileUploadOptions } from '../metadata/index.js'
3
4
  import {
4
5
  createChunkedFileIpldNode,
5
6
  createChunkedMetadataIpldNode,
@@ -20,8 +21,9 @@ export interface Builders {
20
21
  linkDepth: number,
21
22
  name?: string,
22
23
  maxNodeSize?: number,
24
+ fileUploadOptions?: FileUploadOptions,
23
25
  ) => PBNode
24
- single: (data: Buffer, filename?: string) => PBNode
26
+ single: (data: Buffer, filename?: string, fileUploadOptions?: FileUploadOptions) => PBNode
25
27
  }
26
28
  export const metadataBuilders: Builders = {
27
29
  inlink: createMetadataInlinkIpldNode,
@@ -2,11 +2,18 @@ import type { BaseBlockstore } from 'blockstore-core'
2
2
  import type { AwaitIterable } from 'interface-store'
3
3
  import { CID } from 'multiformats'
4
4
  import { cidOfNode } from '../cid/index.js'
5
- import { decodeIPLDNodeData, OffchainMetadata } from '../metadata/index.js'
5
+ import { decodeIPLDNodeData, FileUploadOptions, OffchainMetadata } from '../metadata/index.js'
6
6
  import { Builders, fileBuilders, metadataBuilders } from './builders.js'
7
7
  import { createFolderInlinkIpldNode, createFolderIpldNode } from './nodes.js'
8
8
  import { chunkBuffer, encodeNode, PBNode } from './utils.js'
9
9
 
10
+ type ChunkerLimits = {
11
+ maxChunkSize: number
12
+ maxLinkPerNode: number
13
+ }
14
+
15
+ type ChunkerOptions = ChunkerLimits & FileUploadOptions
16
+
10
17
  export const DEFAULT_MAX_CHUNK_SIZE = 64 * 1024
11
18
 
12
19
  const ESTIMATED_LINK_SIZE_IN_BYTES = 64
@@ -17,14 +24,23 @@ export const processFileToIPLDFormat = (
17
24
  file: AwaitIterable<Buffer>,
18
25
  totalSize: number,
19
26
  filename?: string,
20
- { maxChunkSize, maxLinkPerNode }: { maxChunkSize: number; maxLinkPerNode: number } = {
27
+ {
28
+ maxChunkSize = DEFAULT_MAX_CHUNK_SIZE,
29
+ maxLinkPerNode = DEFAULT_MAX_LINK_PER_NODE,
30
+ encryption = undefined,
31
+ compression = undefined,
32
+ }: Partial<ChunkerOptions> = {
21
33
  maxChunkSize: DEFAULT_MAX_CHUNK_SIZE,
22
34
  maxLinkPerNode: DEFAULT_MAX_LINK_PER_NODE,
35
+ encryption: undefined,
36
+ compression: undefined,
23
37
  },
24
38
  ): Promise<CID> => {
25
39
  return processBufferToIPLDFormat(blockstore, file, filename, totalSize, fileBuilders, {
26
40
  maxChunkSize,
27
41
  maxLinkPerNode,
42
+ encryption,
43
+ compression,
28
44
  })
29
45
  }
30
46
 
@@ -56,12 +72,19 @@ const processBufferToIPLDFormat = async (
56
72
  filename: string | undefined,
57
73
  totalSize: number,
58
74
  builders: Builders,
59
- { maxChunkSize, maxLinkPerNode }: { maxChunkSize: number; maxLinkPerNode: number } = {
75
+ {
76
+ maxChunkSize = DEFAULT_MAX_CHUNK_SIZE,
77
+ maxLinkPerNode = DEFAULT_MAX_LINK_PER_NODE,
78
+ encryption = undefined,
79
+ compression = undefined,
80
+ }: ChunkerOptions = {
60
81
  maxChunkSize: DEFAULT_MAX_CHUNK_SIZE,
61
82
  maxLinkPerNode: DEFAULT_MAX_LINK_PER_NODE,
83
+ encryption: undefined,
84
+ compression: undefined,
62
85
  },
63
86
  ): Promise<CID> => {
64
- const bufferChunks = chunkBuffer(buffer, { maxChunkSize })
87
+ const bufferChunks = chunkBuffer(buffer, { maxChunkSize: maxChunkSize })
65
88
 
66
89
  let CIDs: CID[] = []
67
90
  for await (const chunk of bufferChunks) {
@@ -74,6 +97,8 @@ const processBufferToIPLDFormat = async (
74
97
  return processBufferToIPLDFormatFromChunks(blockstore, CIDs, filename, totalSize, builders, {
75
98
  maxLinkPerNode,
76
99
  maxChunkSize,
100
+ encryption,
101
+ compression,
77
102
  })
78
103
  }
79
104
 
@@ -83,9 +108,16 @@ export const processBufferToIPLDFormatFromChunks = async (
83
108
  filename: string | undefined,
84
109
  totalSize: number,
85
110
  builders: Builders,
86
- { maxLinkPerNode, maxChunkSize }: { maxLinkPerNode: number; maxChunkSize: number } = {
87
- maxLinkPerNode: DEFAULT_MAX_LINK_PER_NODE,
111
+ {
112
+ maxChunkSize = DEFAULT_MAX_CHUNK_SIZE,
113
+ maxLinkPerNode = DEFAULT_MAX_LINK_PER_NODE,
114
+ encryption = undefined,
115
+ compression = undefined,
116
+ }: Partial<ChunkerOptions> = {
88
117
  maxChunkSize: DEFAULT_MAX_CHUNK_SIZE,
118
+ maxLinkPerNode: DEFAULT_MAX_LINK_PER_NODE,
119
+ encryption: undefined,
120
+ compression: undefined,
89
121
  },
90
122
  ): Promise<CID> => {
91
123
  let chunkCount = 0
@@ -99,7 +131,10 @@ export const processBufferToIPLDFormatFromChunks = async (
99
131
  const nodeBytes = await blockstore.get(CIDs[0])
100
132
  await blockstore.delete(CIDs[0])
101
133
  const data = decodeIPLDNodeData(nodeBytes)
102
- const singleNode = builders.single(Buffer.from(data.data!), filename)
134
+ const singleNode = builders.single(Buffer.from(data.data!), filename, {
135
+ compression,
136
+ encryption,
137
+ })
103
138
  await blockstore.put(cidOfNode(singleNode), encodeNode(singleNode))
104
139
  const headCID = cidOfNode(singleNode)
105
140
 
@@ -120,7 +155,10 @@ export const processBufferToIPLDFormatFromChunks = async (
120
155
  depth++
121
156
  CIDs = newCIDs
122
157
  }
123
- const head = builders.root(CIDs, totalSize, depth, filename, maxChunkSize)
158
+ const head = builders.root(CIDs, totalSize, depth, filename, maxChunkSize, {
159
+ compression,
160
+ encryption,
161
+ })
124
162
  const headCID = cidOfNode(head)
125
163
  await blockstore.put(headCID, encodeNode(head))
126
164
 
@@ -132,7 +170,17 @@ export const processFolderToIPLDFormat = async (
132
170
  children: CID[],
133
171
  name: string,
134
172
  size: number,
135
- { maxLinkPerNode }: { maxLinkPerNode: number } = { maxLinkPerNode: DEFAULT_MAX_LINK_PER_NODE },
173
+ {
174
+ maxLinkPerNode = DEFAULT_MAX_LINK_PER_NODE,
175
+ maxChunkSize = DEFAULT_MAX_CHUNK_SIZE,
176
+ compression = undefined,
177
+ encryption = undefined,
178
+ }: Partial<ChunkerOptions> = {
179
+ maxLinkPerNode: DEFAULT_MAX_LINK_PER_NODE,
180
+ maxChunkSize: DEFAULT_MAX_CHUNK_SIZE,
181
+ compression: undefined,
182
+ encryption: undefined,
183
+ },
136
184
  ): Promise<CID> => {
137
185
  let cids = children
138
186
  let depth = 0
@@ -149,7 +197,10 @@ export const processFolderToIPLDFormat = async (
149
197
  depth++
150
198
  }
151
199
 
152
- const node = createFolderIpldNode(cids, name, depth, size)
200
+ const node = createFolderIpldNode(cids, name, depth, size, maxChunkSize, {
201
+ compression,
202
+ encryption,
203
+ })
153
204
  const cid = cidOfNode(node)
154
205
  await blockstore.put(cid, encodeNode(node))
155
206
 
package/src/ipld/nodes.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { CID } from 'multiformats/cid'
2
2
  import { createNode, PBNode } from '../ipld/index.js'
3
- import { OffchainMetadata } from '../metadata/index.js'
3
+ import { FileUploadOptions, OffchainMetadata } from '../metadata/index.js'
4
4
  import { encodeIPLDNodeData, MetadataType } from '../metadata/onchain/index.js'
5
5
  import { DEFAULT_MAX_CHUNK_SIZE, ensureNodeMaxSize } from './chunker.js'
6
6
 
@@ -25,6 +25,7 @@ export const createChunkedFileIpldNode = (
25
25
  linkDepth: number,
26
26
  name?: string,
27
27
  maxNodeSize: number = DEFAULT_MAX_CHUNK_SIZE,
28
+ uploadOptions?: FileUploadOptions,
28
29
  ): PBNode =>
29
30
  ensureNodeMaxSize(
30
31
  createNode(
@@ -33,6 +34,7 @@ export const createChunkedFileIpldNode = (
33
34
  name,
34
35
  size,
35
36
  linkDepth,
37
+ uploadOptions,
36
38
  }),
37
39
  links.map((cid) => ({ Hash: cid })),
38
40
  ),
@@ -61,7 +63,11 @@ export const createFileInlinkIpldNode = (
61
63
  // Creates a file ipld node
62
64
  // links: the CIDs of the file's contents
63
65
  // @todo: add the file's metadata
64
- export const createSingleFileIpldNode = (data: Buffer, name?: string): PBNode =>
66
+ export const createSingleFileIpldNode = (
67
+ data: Buffer,
68
+ name?: string,
69
+ uploadOptions?: FileUploadOptions,
70
+ ): PBNode =>
65
71
  createNode(
66
72
  encodeIPLDNodeData({
67
73
  type: MetadataType.File,
@@ -69,6 +75,7 @@ export const createSingleFileIpldNode = (data: Buffer, name?: string): PBNode =>
69
75
  size: data.length,
70
76
  linkDepth: 0,
71
77
  data,
78
+ uploadOptions,
72
79
  }),
73
80
  [],
74
81
  )
@@ -148,6 +155,7 @@ export const createFolderIpldNode = (
148
155
  linkDepth: number,
149
156
  size: number,
150
157
  maxNodeSize: number = DEFAULT_MAX_CHUNK_SIZE,
158
+ uploadOptions?: FileUploadOptions,
151
159
  ): PBNode =>
152
160
  ensureNodeMaxSize(
153
161
  createNode(
@@ -156,6 +164,7 @@ export const createFolderIpldNode = (
156
164
  name,
157
165
  size,
158
166
  linkDepth,
167
+ uploadOptions,
159
168
  }),
160
169
  links.map((cid) => ({ Hash: cid })),
161
170
  ),
@@ -1,5 +1,5 @@
1
1
  import { CID } from 'multiformats'
2
- import { cidToString } from '../../index.js'
2
+ import { cidToString, FileUploadOptions } from '../../index.js'
3
3
 
4
4
  export type OffchainFileMetadata = {
5
5
  type: 'file'
@@ -9,6 +9,7 @@ export type OffchainFileMetadata = {
9
9
  totalSize: number
10
10
  totalChunks: number
11
11
  chunks: ChunkInfo[]
12
+ uploadOptions?: FileUploadOptions
12
13
  }
13
14
 
14
15
  export interface ChunkInfo {
@@ -22,6 +23,10 @@ export const fileMetadata = (
22
23
  totalSize: number,
23
24
  name?: string | null,
24
25
  mimeType?: string | null,
26
+ uploadOptions: FileUploadOptions = {
27
+ compression: undefined,
28
+ encryption: undefined,
29
+ },
25
30
  ): OffchainFileMetadata => {
26
31
  return {
27
32
  type: 'file',
@@ -31,5 +36,6 @@ export const fileMetadata = (
31
36
  totalSize,
32
37
  totalChunks: chunks.length,
33
38
  chunks,
39
+ uploadOptions,
34
40
  }
35
41
  }
@@ -1,7 +1,7 @@
1
1
  import { CID } from 'multiformats'
2
2
  import { cidOfNode, cidToString } from '../../cid/index.js'
3
3
  import { PBNode } from '../../ipld/index.js'
4
- import { IPLDNodeData, MetadataType } from '../onchain/index.js'
4
+ import { FileUploadOptions, IPLDNodeData, MetadataType } from '../onchain/index.js'
5
5
 
6
6
  interface ChildrenMetadata {
7
7
  type: 'folder' | 'file'
@@ -17,6 +17,7 @@ export type OffchainFolderMetadata = {
17
17
  totalSize: number
18
18
  totalFiles: number
19
19
  children: ChildrenMetadata[]
20
+ uploadOptions: FileUploadOptions
20
21
  }
21
22
 
22
23
  export const childrenMetadataFromNode = (node: PBNode): ChildrenMetadata => {
@@ -37,6 +38,7 @@ export const folderMetadata = (
37
38
  cid: CID | string,
38
39
  children: ChildrenMetadata[],
39
40
  name?: string | null,
41
+ uploadOptions: FileUploadOptions = {},
40
42
  ): OffchainFolderMetadata => {
41
43
  cid = typeof cid === 'string' ? cid : cidToString(cid)
42
44
 
@@ -47,5 +49,6 @@ export const folderMetadata = (
47
49
  children,
48
50
  type: 'folder',
49
51
  name: name ?? undefined,
52
+ uploadOptions,
50
53
  }
51
54
  }