@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.
- package/dist/ipld/blockstore/base.d.ts +9 -0
- package/dist/ipld/blockstore/base.d.ts.map +1 -0
- package/dist/ipld/blockstore/base.js +1 -0
- package/dist/ipld/blockstore/index.d.ts +3 -0
- package/dist/ipld/blockstore/index.d.ts.map +1 -0
- package/dist/ipld/blockstore/index.js +2 -0
- package/dist/ipld/blockstore/memory.d.ts +13 -0
- package/dist/ipld/blockstore/memory.d.ts.map +1 -0
- package/dist/ipld/blockstore/memory.js +57 -0
- package/dist/ipld/builders.d.ts +3 -2
- package/dist/ipld/builders.d.ts.map +1 -1
- package/dist/ipld/chunker.d.ts +10 -12
- package/dist/ipld/chunker.d.ts.map +1 -1
- package/dist/ipld/chunker.js +33 -9
- package/dist/ipld/nodes.d.ts +4 -4
- package/dist/ipld/nodes.d.ts.map +1 -1
- package/dist/ipld/nodes.js +6 -3
- package/dist/metadata/offchain/file.d.ts +3 -1
- package/dist/metadata/offchain/file.d.ts.map +1 -1
- package/dist/metadata/offchain/file.js +5 -1
- package/dist/metadata/offchain/folder.d.ts +3 -1
- package/dist/metadata/offchain/folder.d.ts.map +1 -1
- package/dist/metadata/offchain/folder.js +2 -1
- package/dist/metadata/onchain/protobuf/OnchainMetadata.d.ts +41 -0
- package/dist/metadata/onchain/protobuf/OnchainMetadata.d.ts.map +1 -1
- package/dist/metadata/onchain/protobuf/OnchainMetadata.js +210 -0
- package/dist/src/cid/index.d.ts +9 -0
- package/dist/src/cid/index.d.ts.map +1 -0
- package/dist/src/cid/index.js +20 -0
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +3 -0
- package/dist/src/ipld/builders.d.ts +11 -0
- package/dist/src/ipld/builders.d.ts.map +1 -0
- package/dist/src/ipld/builders.js +13 -0
- package/dist/src/ipld/chunker.d.ts +22 -0
- package/dist/src/ipld/chunker.d.ts.map +1 -0
- package/dist/src/ipld/chunker.js +144 -0
- package/dist/src/ipld/index.d.ts +4 -0
- package/dist/src/ipld/index.d.ts.map +1 -0
- package/dist/src/ipld/index.js +3 -0
- package/dist/src/ipld/nodes.d.ts +15 -0
- package/dist/src/ipld/nodes.d.ts.map +1 -0
- package/dist/src/ipld/nodes.js +89 -0
- package/dist/src/ipld/utils.d.ts +5 -0
- package/dist/src/ipld/utils.d.ts.map +1 -0
- package/dist/src/ipld/utils.js +51 -0
- package/dist/src/metadata/index.d.ts +3 -0
- package/dist/src/metadata/index.d.ts.map +1 -0
- package/dist/src/metadata/index.js +2 -0
- package/dist/src/metadata/offchain/base.d.ts +4 -0
- package/dist/src/metadata/offchain/base.d.ts.map +1 -0
- package/dist/src/metadata/offchain/base.js +1 -0
- package/dist/src/metadata/offchain/file.d.ts +16 -0
- package/dist/src/metadata/offchain/file.d.ts.map +1 -0
- package/dist/src/metadata/offchain/file.js +19 -0
- package/dist/src/metadata/offchain/folder.d.ts +17 -0
- package/dist/src/metadata/offchain/folder.d.ts.map +1 -0
- package/dist/src/metadata/offchain/folder.js +10 -0
- package/dist/src/metadata/offchain/index.d.ts +4 -0
- package/dist/src/metadata/offchain/index.d.ts.map +1 -0
- package/dist/src/metadata/offchain/index.js +3 -0
- package/dist/src/metadata/onchain/index.d.ts +3 -0
- package/dist/src/metadata/onchain/index.d.ts.map +1 -0
- package/dist/src/metadata/onchain/index.js +2 -0
- package/dist/src/metadata/onchain/protobuf/OnchainMetadata.d.ts +28 -0
- package/dist/src/metadata/onchain/protobuf/OnchainMetadata.d.ts.map +1 -0
- package/dist/src/metadata/onchain/protobuf/OnchainMetadata.js +112 -0
- package/dist/src/metadata/onchain/utils.d.ts +4 -0
- package/dist/src/metadata/onchain/utils.d.ts.map +1 -0
- package/dist/src/metadata/onchain/utils.js +12 -0
- package/package.json +2 -2
- package/src/ipld/builders.ts +3 -1
- package/src/ipld/chunker.ts +61 -10
- package/src/ipld/nodes.ts +11 -2
- package/src/metadata/offchain/file.ts +7 -1
- package/src/metadata/offchain/folder.ts +4 -1
- package/src/metadata/onchain/protobuf/OnchainMetadata.proto +25 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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,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 @@
|
|
|
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.
|
|
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": "
|
|
44
|
+
"gitHead": "67a6e877c7516104bc82807e91f5fc193372b671"
|
|
45
45
|
}
|
package/src/ipld/builders.ts
CHANGED
|
@@ -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,
|
package/src/ipld/chunker.ts
CHANGED
|
@@ -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
|
-
{
|
|
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
|
-
{
|
|
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
|
-
{
|
|
87
|
-
|
|
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
|
-
{
|
|
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 = (
|
|
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
|
}
|