@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,397 @@
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
+
7
+ import { type Codec, decodeMessage, type DecodeOptions, encodeMessage, enumeration, message } from 'protons-runtime'
8
+ import type { Uint8ArrayList } from 'uint8arraylist'
9
+
10
+ export interface IPLDNodeData {
11
+ type: MetadataType
12
+ linkDepth: number
13
+ size?: number
14
+ name?: string
15
+ data?: Uint8Array
16
+ uploadOptions?: FileUploadOptions
17
+ }
18
+
19
+ export namespace IPLDNodeData {
20
+ let _codec: Codec<IPLDNodeData>
21
+
22
+ export const codec = (): Codec<IPLDNodeData> => {
23
+ if (_codec == null) {
24
+ _codec = message<IPLDNodeData>((obj, w, opts = {}) => {
25
+ if (opts.lengthDelimited !== false) {
26
+ w.fork()
27
+ }
28
+
29
+ if (obj.type != null && __MetadataTypeValues[obj.type] !== 0) {
30
+ w.uint32(8)
31
+ MetadataType.codec().encode(obj.type, w)
32
+ }
33
+
34
+ if ((obj.linkDepth != null && obj.linkDepth !== 0)) {
35
+ w.uint32(16)
36
+ w.int32(obj.linkDepth)
37
+ }
38
+
39
+ if (obj.size != null) {
40
+ w.uint32(24)
41
+ w.int32(obj.size)
42
+ }
43
+
44
+ if (obj.name != null) {
45
+ w.uint32(34)
46
+ w.string(obj.name)
47
+ }
48
+
49
+ if (obj.data != null) {
50
+ w.uint32(42)
51
+ w.bytes(obj.data)
52
+ }
53
+
54
+ if (obj.uploadOptions != null) {
55
+ w.uint32(50)
56
+ FileUploadOptions.codec().encode(obj.uploadOptions, w)
57
+ }
58
+
59
+ if (opts.lengthDelimited !== false) {
60
+ w.ldelim()
61
+ }
62
+ }, (reader, length, opts = {}) => {
63
+ const obj: any = {
64
+ type: MetadataType.File,
65
+ linkDepth: 0
66
+ }
67
+
68
+ const end = length == null ? reader.len : reader.pos + length
69
+
70
+ while (reader.pos < end) {
71
+ const tag = reader.uint32()
72
+
73
+ switch (tag >>> 3) {
74
+ case 1: {
75
+ obj.type = MetadataType.codec().decode(reader)
76
+ break
77
+ }
78
+ case 2: {
79
+ obj.linkDepth = reader.int32()
80
+ break
81
+ }
82
+ case 3: {
83
+ obj.size = reader.int32()
84
+ break
85
+ }
86
+ case 4: {
87
+ obj.name = reader.string()
88
+ break
89
+ }
90
+ case 5: {
91
+ obj.data = reader.bytes()
92
+ break
93
+ }
94
+ case 6: {
95
+ obj.uploadOptions = FileUploadOptions.codec().decode(reader, reader.uint32(), {
96
+ limits: opts.limits?.uploadOptions
97
+ })
98
+ break
99
+ }
100
+ default: {
101
+ reader.skipType(tag & 7)
102
+ break
103
+ }
104
+ }
105
+ }
106
+
107
+ return obj
108
+ })
109
+ }
110
+
111
+ return _codec
112
+ }
113
+
114
+ export const encode = (obj: Partial<IPLDNodeData>): Uint8Array => {
115
+ return encodeMessage(obj, IPLDNodeData.codec())
116
+ }
117
+
118
+ export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<IPLDNodeData>): IPLDNodeData => {
119
+ return decodeMessage(buf, IPLDNodeData.codec(), opts)
120
+ }
121
+ }
122
+
123
+ export enum MetadataType {
124
+ File = 'File',
125
+ FileInlink = 'FileInlink',
126
+ FileChunk = 'FileChunk',
127
+ Folder = 'Folder',
128
+ FolderInlink = 'FolderInlink',
129
+ Metadata = 'Metadata',
130
+ MetadataInlink = 'MetadataInlink',
131
+ MetadataChunk = 'MetadataChunk'
132
+ }
133
+
134
+ enum __MetadataTypeValues {
135
+ File = 0,
136
+ FileInlink = 1,
137
+ FileChunk = 2,
138
+ Folder = 3,
139
+ FolderInlink = 4,
140
+ Metadata = 5,
141
+ MetadataInlink = 6,
142
+ MetadataChunk = 7
143
+ }
144
+
145
+ export namespace MetadataType {
146
+ export const codec = (): Codec<MetadataType> => {
147
+ return enumeration<MetadataType>(__MetadataTypeValues)
148
+ }
149
+ }
150
+ export interface FileUploadOptions {
151
+ compression?: CompressionOptions
152
+ encryption?: EncryptionOptions
153
+ }
154
+
155
+ export namespace FileUploadOptions {
156
+ let _codec: Codec<FileUploadOptions>
157
+
158
+ export const codec = (): Codec<FileUploadOptions> => {
159
+ if (_codec == null) {
160
+ _codec = message<FileUploadOptions>((obj, w, opts = {}) => {
161
+ if (opts.lengthDelimited !== false) {
162
+ w.fork()
163
+ }
164
+
165
+ if (obj.compression != null) {
166
+ w.uint32(10)
167
+ CompressionOptions.codec().encode(obj.compression, w)
168
+ }
169
+
170
+ if (obj.encryption != null) {
171
+ w.uint32(18)
172
+ EncryptionOptions.codec().encode(obj.encryption, w)
173
+ }
174
+
175
+ if (opts.lengthDelimited !== false) {
176
+ w.ldelim()
177
+ }
178
+ }, (reader, length, opts = {}) => {
179
+ const obj: any = {}
180
+
181
+ const end = length == null ? reader.len : reader.pos + length
182
+
183
+ while (reader.pos < end) {
184
+ const tag = reader.uint32()
185
+
186
+ switch (tag >>> 3) {
187
+ case 1: {
188
+ obj.compression = CompressionOptions.codec().decode(reader, reader.uint32(), {
189
+ limits: opts.limits?.compression
190
+ })
191
+ break
192
+ }
193
+ case 2: {
194
+ obj.encryption = EncryptionOptions.codec().decode(reader, reader.uint32(), {
195
+ limits: opts.limits?.encryption
196
+ })
197
+ break
198
+ }
199
+ default: {
200
+ reader.skipType(tag & 7)
201
+ break
202
+ }
203
+ }
204
+ }
205
+
206
+ return obj
207
+ })
208
+ }
209
+
210
+ return _codec
211
+ }
212
+
213
+ export const encode = (obj: Partial<FileUploadOptions>): Uint8Array => {
214
+ return encodeMessage(obj, FileUploadOptions.codec())
215
+ }
216
+
217
+ export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<FileUploadOptions>): FileUploadOptions => {
218
+ return decodeMessage(buf, FileUploadOptions.codec(), opts)
219
+ }
220
+ }
221
+
222
+ export interface CompressionOptions {
223
+ algorithm: CompressionAlgorithm
224
+ level?: number
225
+ chunkSize?: number
226
+ }
227
+
228
+ export namespace CompressionOptions {
229
+ let _codec: Codec<CompressionOptions>
230
+
231
+ export const codec = (): Codec<CompressionOptions> => {
232
+ if (_codec == null) {
233
+ _codec = message<CompressionOptions>((obj, w, opts = {}) => {
234
+ if (opts.lengthDelimited !== false) {
235
+ w.fork()
236
+ }
237
+
238
+ if (obj.algorithm != null && __CompressionAlgorithmValues[obj.algorithm] !== 0) {
239
+ w.uint32(8)
240
+ CompressionAlgorithm.codec().encode(obj.algorithm, w)
241
+ }
242
+
243
+ if (obj.level != null) {
244
+ w.uint32(16)
245
+ w.int32(obj.level)
246
+ }
247
+
248
+ if (obj.chunkSize != null) {
249
+ w.uint32(24)
250
+ w.int32(obj.chunkSize)
251
+ }
252
+
253
+ if (opts.lengthDelimited !== false) {
254
+ w.ldelim()
255
+ }
256
+ }, (reader, length, opts = {}) => {
257
+ const obj: any = {
258
+ algorithm: CompressionAlgorithm.ZLIB
259
+ }
260
+
261
+ const end = length == null ? reader.len : reader.pos + length
262
+
263
+ while (reader.pos < end) {
264
+ const tag = reader.uint32()
265
+
266
+ switch (tag >>> 3) {
267
+ case 1: {
268
+ obj.algorithm = CompressionAlgorithm.codec().decode(reader)
269
+ break
270
+ }
271
+ case 2: {
272
+ obj.level = reader.int32()
273
+ break
274
+ }
275
+ case 3: {
276
+ obj.chunkSize = reader.int32()
277
+ break
278
+ }
279
+ default: {
280
+ reader.skipType(tag & 7)
281
+ break
282
+ }
283
+ }
284
+ }
285
+
286
+ return obj
287
+ })
288
+ }
289
+
290
+ return _codec
291
+ }
292
+
293
+ export const encode = (obj: Partial<CompressionOptions>): Uint8Array => {
294
+ return encodeMessage(obj, CompressionOptions.codec())
295
+ }
296
+
297
+ export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<CompressionOptions>): CompressionOptions => {
298
+ return decodeMessage(buf, CompressionOptions.codec(), opts)
299
+ }
300
+ }
301
+
302
+ export interface EncryptionOptions {
303
+ algorithm: EncryptionAlgorithm
304
+ chunkSize?: number
305
+ }
306
+
307
+ export namespace EncryptionOptions {
308
+ let _codec: Codec<EncryptionOptions>
309
+
310
+ export const codec = (): Codec<EncryptionOptions> => {
311
+ if (_codec == null) {
312
+ _codec = message<EncryptionOptions>((obj, w, opts = {}) => {
313
+ if (opts.lengthDelimited !== false) {
314
+ w.fork()
315
+ }
316
+
317
+ if (obj.algorithm != null && __EncryptionAlgorithmValues[obj.algorithm] !== 0) {
318
+ w.uint32(8)
319
+ EncryptionAlgorithm.codec().encode(obj.algorithm, w)
320
+ }
321
+
322
+ if (obj.chunkSize != null) {
323
+ w.uint32(16)
324
+ w.int32(obj.chunkSize)
325
+ }
326
+
327
+ if (opts.lengthDelimited !== false) {
328
+ w.ldelim()
329
+ }
330
+ }, (reader, length, opts = {}) => {
331
+ const obj: any = {
332
+ algorithm: EncryptionAlgorithm.AES_256_GCM
333
+ }
334
+
335
+ const end = length == null ? reader.len : reader.pos + length
336
+
337
+ while (reader.pos < end) {
338
+ const tag = reader.uint32()
339
+
340
+ switch (tag >>> 3) {
341
+ case 1: {
342
+ obj.algorithm = EncryptionAlgorithm.codec().decode(reader)
343
+ break
344
+ }
345
+ case 2: {
346
+ obj.chunkSize = reader.int32()
347
+ break
348
+ }
349
+ default: {
350
+ reader.skipType(tag & 7)
351
+ break
352
+ }
353
+ }
354
+ }
355
+
356
+ return obj
357
+ })
358
+ }
359
+
360
+ return _codec
361
+ }
362
+
363
+ export const encode = (obj: Partial<EncryptionOptions>): Uint8Array => {
364
+ return encodeMessage(obj, EncryptionOptions.codec())
365
+ }
366
+
367
+ export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<EncryptionOptions>): EncryptionOptions => {
368
+ return decodeMessage(buf, EncryptionOptions.codec(), opts)
369
+ }
370
+ }
371
+
372
+ export enum CompressionAlgorithm {
373
+ ZLIB = 'ZLIB'
374
+ }
375
+
376
+ enum __CompressionAlgorithmValues {
377
+ ZLIB = 0
378
+ }
379
+
380
+ export namespace CompressionAlgorithm {
381
+ export const codec = (): Codec<CompressionAlgorithm> => {
382
+ return enumeration<CompressionAlgorithm>(__CompressionAlgorithmValues)
383
+ }
384
+ }
385
+ export enum EncryptionAlgorithm {
386
+ AES_256_GCM = 'AES_256_GCM'
387
+ }
388
+
389
+ enum __EncryptionAlgorithmValues {
390
+ AES_256_GCM = 0
391
+ }
392
+
393
+ export namespace EncryptionAlgorithm {
394
+ export const codec = (): Codec<EncryptionAlgorithm> => {
395
+ return enumeration<EncryptionAlgorithm>(__EncryptionAlgorithmValues)
396
+ }
397
+ }
@@ -0,0 +1,15 @@
1
+ import { decodeNode } from '../../ipld/index.js'
2
+ import { IPLDNodeData } from './index.js'
3
+
4
+ export const encodeIPLDNodeData = (metadata: IPLDNodeData): Uint8Array => {
5
+ return IPLDNodeData.encode(metadata)
6
+ }
7
+
8
+ export const decodeIPLDNodeData = (data: Uint8Array): IPLDNodeData => {
9
+ const decoded = decodeNode(data)
10
+ if (!decoded.Data) {
11
+ throw new Error('Invalid data')
12
+ }
13
+
14
+ return IPLDNodeData.decode(decoded.Data)
15
+ }
@@ -0,0 +1,20 @@
1
+ import type { AwaitIterable } from 'interface-store'
2
+
3
+ export const asyncByChunk = async function* (
4
+ iterable: AwaitIterable<Buffer>,
5
+ chunkSize: number,
6
+ ignoreLastChunk: boolean = false,
7
+ ): AsyncIterable<Buffer> {
8
+ let accumulated = Buffer.alloc(0)
9
+ for await (const chunk of iterable) {
10
+ accumulated = Buffer.concat([accumulated, chunk])
11
+ while (accumulated.length >= chunkSize) {
12
+ yield accumulated.subarray(0, chunkSize)
13
+ accumulated = accumulated.subarray(chunkSize)
14
+ }
15
+ }
16
+
17
+ if (accumulated.length > 0 && !ignoreLastChunk) {
18
+ yield accumulated
19
+ }
20
+ }
@@ -0,0 +1 @@
1
+ export * from './async.js'
@@ -0,0 +1 @@
1
+ export type PickPartial<T, K extends keyof T> = Pick<T, K> & Partial<T>