@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.
- package/LICENSE +18 -0
- package/README.md +167 -0
- package/dist/cid/index.d.ts +9 -0
- package/dist/cid/index.d.ts.map +1 -0
- package/dist/cid/index.js +20 -0
- package/dist/compression/index.d.ts +7 -0
- package/dist/compression/index.d.ts.map +1 -0
- package/dist/compression/index.js +106 -0
- package/dist/compression/types.d.ts +9 -0
- package/dist/compression/types.d.ts.map +1 -0
- package/dist/compression/types.js +1 -0
- package/dist/encryption/index.d.ts +8 -0
- package/dist/encryption/index.d.ts.map +1 -0
- package/dist/encryption/index.js +121 -0
- package/dist/encryption/types.d.ts +5 -0
- package/dist/encryption/types.d.ts.map +1 -0
- package/dist/encryption/types.js +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- 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 +12 -0
- package/dist/ipld/builders.d.ts.map +1 -0
- package/dist/ipld/builders.js +13 -0
- package/dist/ipld/chunker.d.ts +30 -0
- package/dist/ipld/chunker.d.ts.map +1 -0
- package/dist/ipld/chunker.js +219 -0
- package/dist/ipld/index.d.ts +5 -0
- package/dist/ipld/index.d.ts.map +1 -0
- package/dist/ipld/index.js +4 -0
- package/dist/ipld/nodes.d.ts +15 -0
- package/dist/ipld/nodes.d.ts.map +1 -0
- package/dist/ipld/nodes.js +92 -0
- package/dist/ipld/utils.d.ts +8 -0
- package/dist/ipld/utils.d.ts.map +1 -0
- package/dist/ipld/utils.js +50 -0
- package/dist/metadata/index.d.ts +3 -0
- package/dist/metadata/index.d.ts.map +1 -0
- package/dist/metadata/index.js +2 -0
- package/dist/metadata/offchain/base.d.ts +4 -0
- package/dist/metadata/offchain/base.d.ts.map +1 -0
- package/dist/metadata/offchain/base.js +1 -0
- package/dist/metadata/offchain/file.d.ts +18 -0
- package/dist/metadata/offchain/file.d.ts.map +1 -0
- package/dist/metadata/offchain/file.js +16 -0
- package/dist/metadata/offchain/folder.d.ts +22 -0
- package/dist/metadata/offchain/folder.d.ts.map +1 -0
- package/dist/metadata/offchain/folder.js +27 -0
- package/dist/metadata/offchain/index.d.ts +4 -0
- package/dist/metadata/offchain/index.d.ts.map +1 -0
- package/dist/metadata/offchain/index.js +3 -0
- package/dist/metadata/onchain/index.d.ts +3 -0
- package/dist/metadata/onchain/index.d.ts.map +1 -0
- package/dist/metadata/onchain/index.js +2 -0
- package/dist/metadata/onchain/protobuf/OnchainMetadata.d.ts +69 -0
- package/dist/metadata/onchain/protobuf/OnchainMetadata.d.ts.map +1 -0
- package/dist/metadata/onchain/protobuf/OnchainMetadata.js +322 -0
- package/dist/metadata/onchain/utils.d.ts +4 -0
- package/dist/metadata/onchain/utils.d.ts.map +1 -0
- package/dist/metadata/onchain/utils.js +12 -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/dist/utils/async.d.ts +3 -0
- package/dist/utils/async.d.ts.map +1 -0
- package/dist/utils/async.js +48 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/types.d.ts +2 -0
- package/dist/utils/types.d.ts.map +1 -0
- package/dist/utils/types.js +1 -0
- package/jest.config.ts +17 -0
- package/package.json +46 -0
- package/src/cid/index.ts +26 -0
- package/src/compression/index.ts +84 -0
- package/src/compression/types.ts +11 -0
- package/src/encryption/index.ts +99 -0
- package/src/encryption/types.ts +4 -0
- package/src/index.ts +5 -0
- package/src/ipld/builders.ts +40 -0
- package/src/ipld/chunker.ts +245 -0
- package/src/ipld/index.ts +4 -0
- package/src/ipld/nodes.ts +208 -0
- package/src/ipld/utils.ts +21 -0
- package/src/metadata/index.ts +2 -0
- package/src/metadata/offchain/base.ts +4 -0
- package/src/metadata/offchain/file.ts +41 -0
- package/src/metadata/offchain/folder.ts +54 -0
- package/src/metadata/offchain/index.ts +3 -0
- package/src/metadata/onchain/index.ts +2 -0
- package/src/metadata/onchain/protobuf/OnchainMetadata.proto +46 -0
- package/src/metadata/onchain/protobuf/OnchainMetadata.ts +397 -0
- package/src/metadata/onchain/utils.ts +15 -0
- package/src/utils/async.ts +20 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/types.ts +1 -0
- package/tests/chunker.spec.ts +294 -0
- package/tests/cid.spec.ts +20 -0
- package/tests/compression.spec.ts +58 -0
- package/tests/encryption.spec.ts +67 -0
- package/tests/nodes.spec.ts +74 -0
- package/tsconfig.json +14 -0
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { CID } from 'multiformats/cid'
|
|
2
|
+
import { FileUploadOptions, OffchainMetadata } from '../metadata/index.js'
|
|
3
|
+
import { encodeIPLDNodeData, MetadataType } from '../metadata/onchain/index.js'
|
|
4
|
+
import { DEFAULT_MAX_CHUNK_SIZE, ensureNodeMaxSize } from './chunker.js'
|
|
5
|
+
import { createNode, PBNode } from './index.js'
|
|
6
|
+
|
|
7
|
+
/// Creates a file chunk ipld node
|
|
8
|
+
export const createFileChunkIpldNode = (data: Buffer): PBNode =>
|
|
9
|
+
createNode(
|
|
10
|
+
encodeIPLDNodeData({
|
|
11
|
+
type: MetadataType.FileChunk,
|
|
12
|
+
size: data.length,
|
|
13
|
+
linkDepth: 0,
|
|
14
|
+
data,
|
|
15
|
+
}),
|
|
16
|
+
[],
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
// Creates a file ipld node
|
|
20
|
+
// links: the CIDs of the file's contents
|
|
21
|
+
// @todo: add the file's metadata
|
|
22
|
+
export const createChunkedFileIpldNode = (
|
|
23
|
+
links: CID[],
|
|
24
|
+
size: number,
|
|
25
|
+
linkDepth: number,
|
|
26
|
+
name?: string,
|
|
27
|
+
maxNodeSize: number = DEFAULT_MAX_CHUNK_SIZE,
|
|
28
|
+
uploadOptions?: FileUploadOptions,
|
|
29
|
+
): PBNode =>
|
|
30
|
+
ensureNodeMaxSize(
|
|
31
|
+
createNode(
|
|
32
|
+
encodeIPLDNodeData({
|
|
33
|
+
type: MetadataType.File,
|
|
34
|
+
name,
|
|
35
|
+
size,
|
|
36
|
+
linkDepth,
|
|
37
|
+
uploadOptions,
|
|
38
|
+
}),
|
|
39
|
+
links.map((cid) => ({ Hash: cid })),
|
|
40
|
+
),
|
|
41
|
+
maxNodeSize,
|
|
42
|
+
)
|
|
43
|
+
// Creates a file ipld node
|
|
44
|
+
// links: the CIDs of the file's contents
|
|
45
|
+
export const createFileInlinkIpldNode = (
|
|
46
|
+
links: CID[],
|
|
47
|
+
size: number,
|
|
48
|
+
linkDepth: number,
|
|
49
|
+
maxNodeSize: number = DEFAULT_MAX_CHUNK_SIZE,
|
|
50
|
+
): PBNode =>
|
|
51
|
+
ensureNodeMaxSize(
|
|
52
|
+
createNode(
|
|
53
|
+
encodeIPLDNodeData({
|
|
54
|
+
type: MetadataType.FileInlink,
|
|
55
|
+
size,
|
|
56
|
+
linkDepth,
|
|
57
|
+
}),
|
|
58
|
+
links.map((cid) => ({ Hash: cid })),
|
|
59
|
+
),
|
|
60
|
+
maxNodeSize,
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
// Creates a file ipld node
|
|
64
|
+
// links: the CIDs of the file's contents
|
|
65
|
+
// @todo: add the file's metadata
|
|
66
|
+
export const createSingleFileIpldNode = (
|
|
67
|
+
data: Buffer,
|
|
68
|
+
name?: string,
|
|
69
|
+
uploadOptions?: FileUploadOptions,
|
|
70
|
+
): PBNode =>
|
|
71
|
+
createNode(
|
|
72
|
+
encodeIPLDNodeData({
|
|
73
|
+
type: MetadataType.File,
|
|
74
|
+
name,
|
|
75
|
+
size: data.length,
|
|
76
|
+
linkDepth: 0,
|
|
77
|
+
data,
|
|
78
|
+
uploadOptions,
|
|
79
|
+
}),
|
|
80
|
+
[],
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
// Creates a file ipld node
|
|
84
|
+
// links: the CIDs of the file's contents
|
|
85
|
+
// @todo: add the file's metadata
|
|
86
|
+
export const createMetadataInlinkIpldNode = (
|
|
87
|
+
links: CID[],
|
|
88
|
+
size: number,
|
|
89
|
+
linkDepth: number,
|
|
90
|
+
maxNodeSize: number = DEFAULT_MAX_CHUNK_SIZE,
|
|
91
|
+
): PBNode =>
|
|
92
|
+
ensureNodeMaxSize(
|
|
93
|
+
createNode(
|
|
94
|
+
encodeIPLDNodeData({
|
|
95
|
+
type: MetadataType.FileInlink,
|
|
96
|
+
size,
|
|
97
|
+
linkDepth,
|
|
98
|
+
}),
|
|
99
|
+
links.map((cid) => ({ Hash: cid })),
|
|
100
|
+
),
|
|
101
|
+
maxNodeSize,
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
// Creates a file ipld node
|
|
105
|
+
// links: the CIDs of the file's contents
|
|
106
|
+
// @todo: add the file's metadata
|
|
107
|
+
export const createSingleMetadataIpldNode = (data: Buffer, name?: string): PBNode =>
|
|
108
|
+
createNode(
|
|
109
|
+
encodeIPLDNodeData({
|
|
110
|
+
type: MetadataType.Metadata,
|
|
111
|
+
name,
|
|
112
|
+
size: data.length,
|
|
113
|
+
linkDepth: 0,
|
|
114
|
+
data,
|
|
115
|
+
}),
|
|
116
|
+
[],
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
export const createMetadataChunkIpldNode = (data: Buffer): PBNode =>
|
|
120
|
+
createNode(
|
|
121
|
+
encodeIPLDNodeData({
|
|
122
|
+
type: MetadataType.MetadataChunk,
|
|
123
|
+
size: data.length,
|
|
124
|
+
linkDepth: 0,
|
|
125
|
+
data,
|
|
126
|
+
}),
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
export const createChunkedMetadataIpldNode = (
|
|
130
|
+
links: CID[],
|
|
131
|
+
size: number,
|
|
132
|
+
linkDepth: number,
|
|
133
|
+
name?: string,
|
|
134
|
+
maxNodeSize: number = DEFAULT_MAX_CHUNK_SIZE,
|
|
135
|
+
): PBNode =>
|
|
136
|
+
ensureNodeMaxSize(
|
|
137
|
+
createNode(
|
|
138
|
+
encodeIPLDNodeData({
|
|
139
|
+
type: MetadataType.Metadata,
|
|
140
|
+
name,
|
|
141
|
+
size,
|
|
142
|
+
linkDepth,
|
|
143
|
+
}),
|
|
144
|
+
links.map((cid) => ({ Hash: cid })),
|
|
145
|
+
),
|
|
146
|
+
maxNodeSize,
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
// Creates a folder ipld node
|
|
150
|
+
// links: the CIDs of the folder's contents
|
|
151
|
+
// @todo: add the folder's metadata
|
|
152
|
+
export const createFolderIpldNode = (
|
|
153
|
+
links: CID[],
|
|
154
|
+
name: string,
|
|
155
|
+
linkDepth: number,
|
|
156
|
+
size: number,
|
|
157
|
+
maxNodeSize: number = DEFAULT_MAX_CHUNK_SIZE,
|
|
158
|
+
uploadOptions?: FileUploadOptions,
|
|
159
|
+
): PBNode =>
|
|
160
|
+
ensureNodeMaxSize(
|
|
161
|
+
createNode(
|
|
162
|
+
encodeIPLDNodeData({
|
|
163
|
+
type: MetadataType.Folder,
|
|
164
|
+
name,
|
|
165
|
+
size,
|
|
166
|
+
linkDepth,
|
|
167
|
+
uploadOptions,
|
|
168
|
+
}),
|
|
169
|
+
links.map((cid) => ({ Hash: cid })),
|
|
170
|
+
),
|
|
171
|
+
maxNodeSize,
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
export const createFolderInlinkIpldNode = (
|
|
175
|
+
links: CID[],
|
|
176
|
+
linkDepth: number,
|
|
177
|
+
maxNodeSize: number = DEFAULT_MAX_CHUNK_SIZE,
|
|
178
|
+
): PBNode =>
|
|
179
|
+
ensureNodeMaxSize(
|
|
180
|
+
createNode(
|
|
181
|
+
encodeIPLDNodeData({
|
|
182
|
+
type: MetadataType.FolderInlink,
|
|
183
|
+
linkDepth,
|
|
184
|
+
}),
|
|
185
|
+
links.map((cid) => ({ Hash: cid })),
|
|
186
|
+
),
|
|
187
|
+
maxNodeSize,
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
/// Creates a metadata ipld node
|
|
191
|
+
export const createMetadataNode = (
|
|
192
|
+
metadata: OffchainMetadata,
|
|
193
|
+
maxNodeSize: number = DEFAULT_MAX_CHUNK_SIZE,
|
|
194
|
+
): PBNode => {
|
|
195
|
+
const data = Buffer.from(JSON.stringify(metadata))
|
|
196
|
+
|
|
197
|
+
return ensureNodeMaxSize(
|
|
198
|
+
createNode(
|
|
199
|
+
encodeIPLDNodeData({
|
|
200
|
+
type: MetadataType.Metadata,
|
|
201
|
+
name: metadata.name,
|
|
202
|
+
linkDepth: 0,
|
|
203
|
+
data,
|
|
204
|
+
}),
|
|
205
|
+
),
|
|
206
|
+
maxNodeSize,
|
|
207
|
+
)
|
|
208
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { createNode, decode, encode, PBNode } from '@ipld/dag-pb'
|
|
2
|
+
import { AwaitIterable } from 'interface-store'
|
|
3
|
+
|
|
4
|
+
export const chunkBuffer = async function* (
|
|
5
|
+
buffer: AwaitIterable<Buffer>,
|
|
6
|
+
{ maxChunkSize, ignoreLastChunk = false }: { maxChunkSize: number; ignoreLastChunk?: boolean },
|
|
7
|
+
): AsyncIterable<Buffer> {
|
|
8
|
+
let target = Buffer.alloc(0)
|
|
9
|
+
for await (let chunk of buffer) {
|
|
10
|
+
target = Buffer.concat([target, chunk])
|
|
11
|
+
while (target.length >= maxChunkSize) {
|
|
12
|
+
yield target.subarray(0, maxChunkSize)
|
|
13
|
+
target = target.subarray(maxChunkSize)
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
if (target.length > 0 && !ignoreLastChunk) {
|
|
17
|
+
yield target
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export { createNode, decode as decodeNode, encode as encodeNode, PBNode }
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { CID } from 'multiformats'
|
|
2
|
+
import { cidToString, FileUploadOptions } from '../../index.js'
|
|
3
|
+
|
|
4
|
+
export type OffchainFileMetadata = {
|
|
5
|
+
type: 'file'
|
|
6
|
+
dataCid: string
|
|
7
|
+
name?: string
|
|
8
|
+
mimeType?: string
|
|
9
|
+
totalSize: number
|
|
10
|
+
totalChunks: number
|
|
11
|
+
chunks: ChunkInfo[]
|
|
12
|
+
uploadOptions?: FileUploadOptions
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface ChunkInfo {
|
|
16
|
+
size: number
|
|
17
|
+
cid: string
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export const fileMetadata = (
|
|
21
|
+
headCID: CID,
|
|
22
|
+
chunks: ChunkInfo[],
|
|
23
|
+
totalSize: number,
|
|
24
|
+
name?: string | null,
|
|
25
|
+
mimeType?: string | null,
|
|
26
|
+
uploadOptions: FileUploadOptions = {
|
|
27
|
+
compression: undefined,
|
|
28
|
+
encryption: undefined,
|
|
29
|
+
},
|
|
30
|
+
): OffchainFileMetadata => {
|
|
31
|
+
return {
|
|
32
|
+
type: 'file',
|
|
33
|
+
dataCid: cidToString(headCID),
|
|
34
|
+
name: name ?? undefined,
|
|
35
|
+
mimeType: mimeType ?? undefined,
|
|
36
|
+
totalSize,
|
|
37
|
+
totalChunks: chunks.length,
|
|
38
|
+
chunks,
|
|
39
|
+
uploadOptions,
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { CID } from 'multiformats'
|
|
2
|
+
import { cidOfNode, cidToString } from '../../cid/index.js'
|
|
3
|
+
import { PBNode } from '../../ipld/index.js'
|
|
4
|
+
import { FileUploadOptions, IPLDNodeData, MetadataType } from '../onchain/index.js'
|
|
5
|
+
|
|
6
|
+
interface ChildrenMetadata {
|
|
7
|
+
type: 'folder' | 'file'
|
|
8
|
+
name?: string
|
|
9
|
+
cid: string
|
|
10
|
+
totalSize: number
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type OffchainFolderMetadata = {
|
|
14
|
+
type: 'folder'
|
|
15
|
+
dataCid: string
|
|
16
|
+
name?: string
|
|
17
|
+
totalSize: number
|
|
18
|
+
totalFiles: number
|
|
19
|
+
children: ChildrenMetadata[]
|
|
20
|
+
uploadOptions: FileUploadOptions
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export const childrenMetadataFromNode = (node: PBNode): ChildrenMetadata => {
|
|
24
|
+
const ipldData = IPLDNodeData.decode(node.Data!)
|
|
25
|
+
if (ipldData.type !== MetadataType.File && ipldData.type !== MetadataType.Folder) {
|
|
26
|
+
throw new Error('Invalid metadata type')
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return {
|
|
30
|
+
type: ipldData.type === MetadataType.File ? 'file' : 'folder',
|
|
31
|
+
cid: cidToString(cidOfNode(node)),
|
|
32
|
+
totalSize: ipldData.size ?? 0,
|
|
33
|
+
name: ipldData.name,
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export const folderMetadata = (
|
|
38
|
+
cid: CID | string,
|
|
39
|
+
children: ChildrenMetadata[],
|
|
40
|
+
name?: string | null,
|
|
41
|
+
uploadOptions: FileUploadOptions = {},
|
|
42
|
+
): OffchainFolderMetadata => {
|
|
43
|
+
cid = typeof cid === 'string' ? cid : cidToString(cid)
|
|
44
|
+
|
|
45
|
+
return {
|
|
46
|
+
dataCid: cid,
|
|
47
|
+
totalSize: children.reduce((acc, child) => acc + child.totalSize, 0),
|
|
48
|
+
totalFiles: children.length,
|
|
49
|
+
children,
|
|
50
|
+
type: 'folder',
|
|
51
|
+
name: name ?? undefined,
|
|
52
|
+
uploadOptions,
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
syntax = "proto3";
|
|
2
|
+
|
|
3
|
+
message IPLDNodeData {
|
|
4
|
+
MetadataType type = 1;
|
|
5
|
+
int32 linkDepth = 2;
|
|
6
|
+
optional int32 size = 3;
|
|
7
|
+
optional string name = 4;
|
|
8
|
+
optional bytes data = 5;
|
|
9
|
+
optional FileUploadOptions uploadOptions = 6;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// MetadataType defines the possible types of metadata.
|
|
13
|
+
enum MetadataType {
|
|
14
|
+
File = 0;
|
|
15
|
+
FileInlink = 1;
|
|
16
|
+
FileChunk = 2;
|
|
17
|
+
Folder = 3;
|
|
18
|
+
FolderInlink = 4;
|
|
19
|
+
Metadata = 5;
|
|
20
|
+
MetadataInlink = 6;
|
|
21
|
+
MetadataChunk = 7;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
message FileUploadOptions {
|
|
25
|
+
optional CompressionOptions compression = 1;
|
|
26
|
+
optional EncryptionOptions encryption = 2;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
message CompressionOptions {
|
|
30
|
+
CompressionAlgorithm algorithm = 1;
|
|
31
|
+
optional int32 level = 2;
|
|
32
|
+
optional int32 chunkSize = 3;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
message EncryptionOptions {
|
|
36
|
+
EncryptionAlgorithm algorithm = 1;
|
|
37
|
+
optional int32 chunkSize = 2;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
enum CompressionAlgorithm {
|
|
41
|
+
ZLIB = 0;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
enum EncryptionAlgorithm {
|
|
45
|
+
AES_256_GCM = 0;
|
|
46
|
+
}
|