@lumeweb/pinner 0.0.1 → 0.1.1

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 (200) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +707 -28
  3. package/dist/cjs/_virtual/rolldown_runtime.cjs +29 -0
  4. package/dist/cjs/adapters/pinata/index.cjs +6 -0
  5. package/dist/cjs/adapters/pinata/legacy/adapter.cjs +83 -0
  6. package/dist/cjs/adapters/pinata/legacy/adapter.cjs.map +1 -0
  7. package/dist/cjs/adapters/pinata/legacy/adapter.d.cts +74 -0
  8. package/dist/cjs/adapters/pinata/legacy/index.cjs +1 -0
  9. package/dist/cjs/adapters/pinata/shared/index.cjs +1 -0
  10. package/dist/cjs/adapters/pinata/shared/types.d.cts +218 -0
  11. package/dist/cjs/adapters/pinata/shared/utils.cjs +83 -0
  12. package/dist/cjs/adapters/pinata/shared/utils.cjs.map +1 -0
  13. package/dist/cjs/adapters/pinata/v2/adapter-interface.d.cts +198 -0
  14. package/dist/cjs/adapters/pinata/v2/adapter.cjs +636 -0
  15. package/dist/cjs/adapters/pinata/v2/adapter.cjs.map +1 -0
  16. package/dist/cjs/adapters/pinata/v2/adapter.d.cts +17 -0
  17. package/dist/cjs/adapters/pinata/v2/index.cjs +1 -0
  18. package/dist/cjs/adapters/pinata/v2/types.d.cts +308 -0
  19. package/dist/cjs/blockstore/index.cjs +2 -0
  20. package/dist/cjs/blockstore/unstorage-base.cjs +240 -0
  21. package/dist/cjs/blockstore/unstorage-base.cjs.map +1 -0
  22. package/dist/cjs/blockstore/unstorage-base.d.cts +23 -0
  23. package/dist/cjs/blockstore/unstorage.cjs +39 -0
  24. package/dist/cjs/blockstore/unstorage.cjs.map +1 -0
  25. package/dist/cjs/blockstore/unstorage.d.cts +36 -0
  26. package/dist/cjs/config.d.cts +51 -0
  27. package/dist/cjs/encoder/base64.cjs +38 -0
  28. package/dist/cjs/encoder/base64.cjs.map +1 -0
  29. package/dist/cjs/encoder/csv/csv-formatter.cjs +81 -0
  30. package/dist/cjs/encoder/csv/csv-formatter.cjs.map +1 -0
  31. package/dist/cjs/encoder/csv/field-formatter.cjs +76 -0
  32. package/dist/cjs/encoder/csv/field-formatter.cjs.map +1 -0
  33. package/dist/cjs/encoder/csv/row-formatter.cjs +159 -0
  34. package/dist/cjs/encoder/csv/row-formatter.cjs.map +1 -0
  35. package/dist/cjs/encoder/csv.cjs +44 -0
  36. package/dist/cjs/encoder/csv.cjs.map +1 -0
  37. package/dist/cjs/encoder/error.cjs +19 -0
  38. package/dist/cjs/encoder/error.cjs.map +1 -0
  39. package/dist/cjs/encoder/index.cjs +6 -0
  40. package/dist/cjs/encoder/json.cjs +36 -0
  41. package/dist/cjs/encoder/json.cjs.map +1 -0
  42. package/dist/cjs/encoder/text.cjs +35 -0
  43. package/dist/cjs/encoder/text.cjs.map +1 -0
  44. package/dist/cjs/encoder/url.cjs +39 -0
  45. package/dist/cjs/encoder/url.cjs.map +1 -0
  46. package/dist/cjs/errors/index.cjs +104 -0
  47. package/dist/cjs/errors/index.cjs.map +1 -0
  48. package/dist/cjs/errors/index.d.cts +47 -0
  49. package/dist/cjs/index.cjs +44 -0
  50. package/dist/cjs/index.d.cts +16 -0
  51. package/dist/cjs/pin/client.cjs +98 -0
  52. package/dist/cjs/pin/client.cjs.map +1 -0
  53. package/dist/cjs/pin/index.cjs +1 -0
  54. package/dist/cjs/pinner.cjs +132 -0
  55. package/dist/cjs/pinner.cjs.map +1 -0
  56. package/dist/cjs/pinner.d.cts +81 -0
  57. package/dist/cjs/types/constants.cjs +39 -0
  58. package/dist/cjs/types/constants.cjs.map +1 -0
  59. package/dist/cjs/types/mime-types.cjs +11 -0
  60. package/dist/cjs/types/mime-types.cjs.map +1 -0
  61. package/dist/cjs/types/mime-types.d.cts +7 -0
  62. package/dist/cjs/types/pin.d.cts +78 -0
  63. package/dist/cjs/types/type-guards.cjs +20 -0
  64. package/dist/cjs/types/type-guards.cjs.map +1 -0
  65. package/dist/cjs/types/type-guards.d.cts +15 -0
  66. package/dist/cjs/types/upload.cjs +18 -0
  67. package/dist/cjs/types/upload.cjs.map +1 -0
  68. package/dist/cjs/types/upload.d.cts +189 -0
  69. package/dist/cjs/upload/base-upload.cjs +135 -0
  70. package/dist/cjs/upload/base-upload.cjs.map +1 -0
  71. package/dist/cjs/upload/builder.cjs +174 -0
  72. package/dist/cjs/upload/builder.cjs.map +1 -0
  73. package/dist/cjs/upload/builder.d.cts +60 -0
  74. package/dist/cjs/upload/car.cjs +129 -0
  75. package/dist/cjs/upload/car.cjs.map +1 -0
  76. package/dist/cjs/upload/car.d.cts +19 -0
  77. package/dist/cjs/upload/constants.cjs +9 -0
  78. package/dist/cjs/upload/constants.cjs.map +1 -0
  79. package/dist/cjs/upload/index.cjs +8 -0
  80. package/dist/cjs/upload/manager.cjs +249 -0
  81. package/dist/cjs/upload/manager.cjs.map +1 -0
  82. package/dist/cjs/upload/manager.d.cts +35 -0
  83. package/dist/cjs/upload/normalize.cjs +28 -0
  84. package/dist/cjs/upload/normalize.cjs.map +1 -0
  85. package/dist/cjs/upload/tus-upload.cjs +74 -0
  86. package/dist/cjs/upload/tus-upload.cjs.map +1 -0
  87. package/dist/cjs/upload/xhr-upload.cjs +41 -0
  88. package/dist/cjs/upload/xhr-upload.cjs.map +1 -0
  89. package/dist/cjs/utils/env.cjs +12 -0
  90. package/dist/cjs/utils/env.cjs.map +1 -0
  91. package/dist/cjs/utils/stream.cjs +141 -0
  92. package/dist/cjs/utils/stream.cjs.map +1 -0
  93. package/dist/cjs/utils/stream.d.cts +23 -0
  94. package/dist/cjs/utils/tus-patch.cjs +50 -0
  95. package/dist/cjs/utils/tus-patch.cjs.map +1 -0
  96. package/dist/cjs/utils/validation.cjs +62 -0
  97. package/dist/cjs/utils/validation.cjs.map +1 -0
  98. package/dist/esm/_virtual/rolldown_runtime.js +8 -0
  99. package/dist/esm/adapters/pinata/index.d.ts +7 -0
  100. package/dist/esm/adapters/pinata/index.js +6 -0
  101. package/dist/esm/adapters/pinata/legacy/adapter.d.ts +74 -0
  102. package/dist/esm/adapters/pinata/legacy/adapter.js +83 -0
  103. package/dist/esm/adapters/pinata/legacy/adapter.js.map +1 -0
  104. package/dist/esm/adapters/pinata/legacy/index.d.ts +1 -0
  105. package/dist/esm/adapters/pinata/legacy/index.js +1 -0
  106. package/dist/esm/adapters/pinata/shared/index.d.ts +2 -0
  107. package/dist/esm/adapters/pinata/shared/index.js +1 -0
  108. package/dist/esm/adapters/pinata/shared/types.d.ts +218 -0
  109. package/dist/esm/adapters/pinata/shared/utils.d.ts +1 -0
  110. package/dist/esm/adapters/pinata/shared/utils.js +78 -0
  111. package/dist/esm/adapters/pinata/shared/utils.js.map +1 -0
  112. package/dist/esm/adapters/pinata/v2/adapter-interface.d.ts +198 -0
  113. package/dist/esm/adapters/pinata/v2/adapter.d.ts +17 -0
  114. package/dist/esm/adapters/pinata/v2/adapter.js +636 -0
  115. package/dist/esm/adapters/pinata/v2/adapter.js.map +1 -0
  116. package/dist/esm/adapters/pinata/v2/index.d.ts +3 -0
  117. package/dist/esm/adapters/pinata/v2/index.js +1 -0
  118. package/dist/esm/adapters/pinata/v2/types.d.ts +308 -0
  119. package/dist/esm/blockstore/index.d.ts +2 -0
  120. package/dist/esm/blockstore/index.js +2 -0
  121. package/dist/esm/blockstore/unstorage-base.d.ts +23 -0
  122. package/dist/esm/blockstore/unstorage-base.js +231 -0
  123. package/dist/esm/blockstore/unstorage-base.js.map +1 -0
  124. package/dist/esm/blockstore/unstorage.d.ts +36 -0
  125. package/dist/esm/blockstore/unstorage.js +38 -0
  126. package/dist/esm/blockstore/unstorage.js.map +1 -0
  127. package/dist/esm/config.d.ts +51 -0
  128. package/dist/esm/encoder/base64.js +37 -0
  129. package/dist/esm/encoder/base64.js.map +1 -0
  130. package/dist/esm/encoder/csv/csv-formatter.js +81 -0
  131. package/dist/esm/encoder/csv/csv-formatter.js.map +1 -0
  132. package/dist/esm/encoder/csv/field-formatter.js +75 -0
  133. package/dist/esm/encoder/csv/field-formatter.js.map +1 -0
  134. package/dist/esm/encoder/csv/row-formatter.js +159 -0
  135. package/dist/esm/encoder/csv/row-formatter.js.map +1 -0
  136. package/dist/esm/encoder/csv.js +43 -0
  137. package/dist/esm/encoder/csv.js.map +1 -0
  138. package/dist/esm/encoder/error.js +18 -0
  139. package/dist/esm/encoder/error.js.map +1 -0
  140. package/dist/esm/encoder/index.js +6 -0
  141. package/dist/esm/encoder/json.js +35 -0
  142. package/dist/esm/encoder/json.js.map +1 -0
  143. package/dist/esm/encoder/text.js +34 -0
  144. package/dist/esm/encoder/text.js.map +1 -0
  145. package/dist/esm/encoder/url.js +36 -0
  146. package/dist/esm/encoder/url.js.map +1 -0
  147. package/dist/esm/errors/index.d.ts +47 -0
  148. package/dist/esm/errors/index.js +93 -0
  149. package/dist/esm/errors/index.js.map +1 -0
  150. package/dist/esm/index.d.ts +18 -0
  151. package/dist/esm/index.js +15 -0
  152. package/dist/esm/pin/client.js +97 -0
  153. package/dist/esm/pin/client.js.map +1 -0
  154. package/dist/esm/pin/index.js +1 -0
  155. package/dist/esm/pinner.d.ts +81 -0
  156. package/dist/esm/pinner.js +131 -0
  157. package/dist/esm/pinner.js.map +1 -0
  158. package/dist/esm/types/constants.js +33 -0
  159. package/dist/esm/types/constants.js.map +1 -0
  160. package/dist/esm/types/mime-types.d.ts +7 -0
  161. package/dist/esm/types/mime-types.js +8 -0
  162. package/dist/esm/types/mime-types.js.map +1 -0
  163. package/dist/esm/types/pin.d.ts +78 -0
  164. package/dist/esm/types/type-guards.d.ts +15 -0
  165. package/dist/esm/types/type-guards.js +19 -0
  166. package/dist/esm/types/type-guards.js.map +1 -0
  167. package/dist/esm/types/upload.d.ts +189 -0
  168. package/dist/esm/types/upload.js +16 -0
  169. package/dist/esm/types/upload.js.map +1 -0
  170. package/dist/esm/upload/base-upload.js +132 -0
  171. package/dist/esm/upload/base-upload.js.map +1 -0
  172. package/dist/esm/upload/builder.d.ts +60 -0
  173. package/dist/esm/upload/builder.js +173 -0
  174. package/dist/esm/upload/builder.js.map +1 -0
  175. package/dist/esm/upload/car.d.ts +19 -0
  176. package/dist/esm/upload/car.js +125 -0
  177. package/dist/esm/upload/car.js.map +1 -0
  178. package/dist/esm/upload/constants.js +7 -0
  179. package/dist/esm/upload/constants.js.map +1 -0
  180. package/dist/esm/upload/index.js +8 -0
  181. package/dist/esm/upload/manager.d.ts +35 -0
  182. package/dist/esm/upload/manager.js +248 -0
  183. package/dist/esm/upload/manager.js.map +1 -0
  184. package/dist/esm/upload/normalize.js +28 -0
  185. package/dist/esm/upload/normalize.js.map +1 -0
  186. package/dist/esm/upload/tus-upload.js +72 -0
  187. package/dist/esm/upload/tus-upload.js.map +1 -0
  188. package/dist/esm/upload/xhr-upload.js +39 -0
  189. package/dist/esm/upload/xhr-upload.js.map +1 -0
  190. package/dist/esm/utils/env.js +11 -0
  191. package/dist/esm/utils/env.js.map +1 -0
  192. package/dist/esm/utils/stream.d.ts +23 -0
  193. package/dist/esm/utils/stream.js +134 -0
  194. package/dist/esm/utils/stream.js.map +1 -0
  195. package/dist/esm/utils/tus-patch.js +51 -0
  196. package/dist/esm/utils/tus-patch.js.map +1 -0
  197. package/dist/esm/utils/validation.js +60 -0
  198. package/dist/esm/utils/validation.js.map +1 -0
  199. package/package.json +95 -8
  200. package/public/mockServiceWorker.js +349 -0
@@ -0,0 +1,174 @@
1
+ const require_json = require('../encoder/json.cjs');
2
+ const require_base64 = require('../encoder/base64.cjs');
3
+ const require_url = require('../encoder/url.cjs');
4
+ const require_csv = require('../encoder/csv.cjs');
5
+ const require_text = require('../encoder/text.cjs');
6
+ require('../encoder/index.cjs');
7
+ const require_validation = require('../utils/validation.cjs');
8
+
9
+ //#region src/upload/builder.ts
10
+ /**
11
+ * Base upload builder with common name/keyvalues functionality.
12
+ */
13
+ var BaseUploadBuilder = class {
14
+ _name;
15
+ _keyvalues;
16
+ _waitForOperation;
17
+ _operationPollingOptions;
18
+ constructor(pinner) {
19
+ this.pinner = pinner;
20
+ }
21
+ name(name) {
22
+ this._name = name;
23
+ return this;
24
+ }
25
+ keyvalues(kv) {
26
+ this._keyvalues = kv;
27
+ return this;
28
+ }
29
+ waitForOperation(wait = true) {
30
+ this._waitForOperation = wait;
31
+ return this;
32
+ }
33
+ operationPollingOptions(options) {
34
+ this._operationPollingOptions = options;
35
+ return this;
36
+ }
37
+ buildOptions() {
38
+ const options = {};
39
+ if (this._name !== void 0) options.name = this._name;
40
+ if (this._keyvalues !== void 0) options.keyvalues = this._keyvalues;
41
+ if (this._waitForOperation !== void 0) options.waitForOperation = this._waitForOperation;
42
+ if (this._operationPollingOptions !== void 0) options.operationPollingOptions = this._operationPollingOptions;
43
+ return options;
44
+ }
45
+ };
46
+ /**
47
+ * File upload builder.
48
+ */
49
+ var FileUploadBuilder = class extends BaseUploadBuilder {
50
+ constructor(pinner, file) {
51
+ super(pinner);
52
+ this.file = file;
53
+ }
54
+ async pin() {
55
+ return this.pinner.upload(this.file, this.buildOptions());
56
+ }
57
+ };
58
+ /**
59
+ * Encoded upload builder - handles JSON, Base64, and URL uploads using encoders.
60
+ */
61
+ var EncodedUploadBuilder = class extends BaseUploadBuilder {
62
+ constructor(pinner, encoderFn) {
63
+ super(pinner);
64
+ this.encoderFn = encoderFn;
65
+ }
66
+ async pin() {
67
+ const encoded = await this.encoderFn(this._name, this._keyvalues);
68
+ return this.pinner.upload(encoded.file, encoded.options);
69
+ }
70
+ };
71
+ /**
72
+ * Raw CAR upload builder - handles raw CAR file uploads without preprocessing.
73
+ */
74
+ var RawUploadBuilder = class extends BaseUploadBuilder {
75
+ constructor(pinner, carInput) {
76
+ super(pinner);
77
+ this.carInput = carInput;
78
+ }
79
+ async pin() {
80
+ return this.pinner.uploadCar(this.carInput, this.buildOptions());
81
+ }
82
+ };
83
+ /**
84
+ * Pinner upload builder namespace.
85
+ * Provides fluent API for file, JSON, Base64, and URL uploads.
86
+ */
87
+ var UploadBuilderNamespace = class {
88
+ constructor(pinner) {
89
+ this.pinner = pinner;
90
+ }
91
+ /**
92
+ * Upload a file.
93
+ * Returns a builder for chaining name/keyvalues.
94
+ */
95
+ file(file) {
96
+ return new FileUploadBuilder(this.pinner, file);
97
+ }
98
+ /**
99
+ * Upload JSON data (encoded as JSON file).
100
+ * Returns a builder for chaining name/keyvalues.
101
+ */
102
+ json(data) {
103
+ return new EncodedUploadBuilder(this.pinner, (name, keyvalues) => require_json.jsonToFile(data, {
104
+ name,
105
+ keyvalues
106
+ }));
107
+ }
108
+ /**
109
+ * Upload Base64 encoded content (decoded and uploaded as file).
110
+ * Returns a builder for chaining name/keyvalues.
111
+ */
112
+ base64(base64String) {
113
+ return new EncodedUploadBuilder(this.pinner, (name, keyvalues) => require_base64.base64ToFile(base64String, {
114
+ name,
115
+ keyvalues
116
+ }));
117
+ }
118
+ /**
119
+ * Upload content from a URL (fetched and uploaded as file).
120
+ * Returns a builder for chaining name/keyvalues.
121
+ */
122
+ url(urlString) {
123
+ require_validation.validateUrl(urlString);
124
+ return new EncodedUploadBuilder(this.pinner, (name, keyvalues) => require_url.urlToFile(urlString, {
125
+ name,
126
+ keyvalues
127
+ }));
128
+ }
129
+ /**
130
+ * Upload CSV data (string, array of objects, or array of arrays).
131
+ * Returns a builder for chaining name/keyvalues.
132
+ */
133
+ csv(data) {
134
+ return new EncodedUploadBuilder(this.pinner, (name, keyvalues) => require_csv.csvToFile(data, {
135
+ name,
136
+ keyvalues
137
+ }));
138
+ }
139
+ /**
140
+ * Upload raw CAR data without preprocessing.
141
+ * Useful for passthrough of pre-generated CAR files.
142
+ * Returns a builder for chaining name/keyvalues.
143
+ */
144
+ raw(carInput) {
145
+ return new RawUploadBuilder(this.pinner, carInput);
146
+ }
147
+ /**
148
+ * Upload text content (encoded as text file).
149
+ * Returns a builder for chaining name/keyvalues.
150
+ */
151
+ text(textData) {
152
+ return new EncodedUploadBuilder(this.pinner, (name, keyvalues) => require_text.textToFile(textData, {
153
+ name,
154
+ keyvalues
155
+ }));
156
+ }
157
+ /**
158
+ * Alias for text() - upload text content.
159
+ */
160
+ get content() {
161
+ return (textData) => this.text(textData);
162
+ }
163
+ };
164
+ /**
165
+ * Create a Pinner upload builder namespace.
166
+ */
167
+ function createUploadBuilderNamespace(pinner) {
168
+ return new UploadBuilderNamespace(pinner);
169
+ }
170
+
171
+ //#endregion
172
+ exports.UploadBuilderNamespace = UploadBuilderNamespace;
173
+ exports.createUploadBuilderNamespace = createUploadBuilderNamespace;
174
+ //# sourceMappingURL=builder.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.cjs","names":["jsonToFile","base64ToFile","urlToFile","csvToFile","textToFile"],"sources":["../../../src/upload/builder.ts"],"sourcesContent":["import type { Pinner } from \"@/pinner\";\nimport type {\n PinnerUploadBuilder,\n UploadOperation,\n UploadOptions,\n} from \"@/types/upload\";\nimport type { OperationPollingOptions } from \"@lumeweb/portal-sdk\";\nimport {\n base64ToFile,\n csvToFile,\n jsonToFile,\n textToFile,\n urlToFile,\n} from \"@/encoder\";\nimport { validateUrl } from \"@/utils/validation\";\n\n/**\n * Base upload builder with common name/keyvalues functionality.\n */\nabstract class BaseUploadBuilder implements PinnerUploadBuilder {\n protected _name?: string;\n protected _keyvalues?: Record<string, string>;\n protected _waitForOperation?: boolean;\n protected _operationPollingOptions?: OperationPollingOptions;\n\n constructor(protected pinner: Pinner) {}\n\n name(name: string): this {\n this._name = name;\n return this;\n }\n\n keyvalues(kv: Record<string, string>): this {\n this._keyvalues = kv;\n return this;\n }\n\n waitForOperation(wait: boolean = true): this {\n this._waitForOperation = wait;\n return this;\n }\n\n operationPollingOptions(options: OperationPollingOptions): this {\n this._operationPollingOptions = options;\n return this;\n }\n\n abstract pin(): Promise<UploadOperation>;\n\n protected buildOptions(): UploadOptions {\n const options: UploadOptions = {};\n if (this._name !== undefined) {\n options.name = this._name;\n }\n if (this._keyvalues !== undefined) {\n options.keyvalues = this._keyvalues;\n }\n if (this._waitForOperation !== undefined) {\n options.waitForOperation = this._waitForOperation;\n }\n if (this._operationPollingOptions !== undefined) {\n options.operationPollingOptions = this._operationPollingOptions;\n }\n return options;\n }\n}\n\n/**\n * File upload builder.\n */\nclass FileUploadBuilder extends BaseUploadBuilder {\n constructor(\n pinner: Pinner,\n private file: File,\n ) {\n super(pinner);\n }\n\n async pin(): Promise<UploadOperation> {\n return this.pinner.upload(this.file, this.buildOptions());\n }\n}\n\n/**\n * Encoded upload builder - handles JSON, Base64, and URL uploads using encoders.\n */\nclass EncodedUploadBuilder extends BaseUploadBuilder {\n constructor(\n pinner: Pinner,\n private encoderFn: (\n name?: string,\n keyvalues?: Record<string, string>,\n ) => Promise<{ file: File; options: UploadOptions }>,\n ) {\n super(pinner);\n }\n\n async pin(): Promise<UploadOperation> {\n const encoded = await this.encoderFn(this._name, this._keyvalues);\n return this.pinner.upload(encoded.file, encoded.options);\n }\n}\n\n/**\n * Raw CAR upload builder - handles raw CAR file uploads without preprocessing.\n */\nclass RawUploadBuilder extends BaseUploadBuilder {\n constructor(\n pinner: Pinner,\n private carInput: File | ReadableStream<Uint8Array>,\n ) {\n super(pinner);\n }\n\n async pin(): Promise<UploadOperation> {\n return this.pinner.uploadCar(this.carInput, this.buildOptions());\n }\n}\n\n/**\n * Pinner upload builder namespace.\n * Provides fluent API for file, JSON, Base64, and URL uploads.\n */\nexport class UploadBuilderNamespace {\n constructor(private pinner: Pinner) {}\n\n /**\n * Upload a file.\n * Returns a builder for chaining name/keyvalues.\n */\n file(file: File): PinnerUploadBuilder {\n return new FileUploadBuilder(this.pinner, file);\n }\n\n /**\n * Upload JSON data (encoded as JSON file).\n * Returns a builder for chaining name/keyvalues.\n */\n json(data: object): PinnerUploadBuilder {\n return new EncodedUploadBuilder(this.pinner, (name, keyvalues) =>\n jsonToFile(data, { name, keyvalues }),\n );\n }\n\n /**\n * Upload Base64 encoded content (decoded and uploaded as file).\n * Returns a builder for chaining name/keyvalues.\n */\n base64(base64String: string): PinnerUploadBuilder {\n return new EncodedUploadBuilder(this.pinner, (name, keyvalues) =>\n base64ToFile(base64String, { name, keyvalues }),\n );\n }\n\n /**\n * Upload content from a URL (fetched and uploaded as file).\n * Returns a builder for chaining name/keyvalues.\n */\n url(urlString: string): PinnerUploadBuilder {\n // Validate URL to prevent SSRF attacks\n validateUrl(urlString);\n\n return new EncodedUploadBuilder(this.pinner, (name, keyvalues) =>\n urlToFile(urlString, { name, keyvalues }),\n );\n }\n\n /**\n * Upload CSV data (string, array of objects, or array of arrays).\n * Returns a builder for chaining name/keyvalues.\n */\n csv(data: string | object[] | any[][]): PinnerUploadBuilder {\n return new EncodedUploadBuilder(this.pinner, (name, keyvalues) =>\n csvToFile(data, { name, keyvalues }),\n );\n }\n\n /**\n * Upload raw CAR data without preprocessing.\n * Useful for passthrough of pre-generated CAR files.\n * Returns a builder for chaining name/keyvalues.\n */\n raw(carInput: File | ReadableStream<Uint8Array>): PinnerUploadBuilder {\n return new RawUploadBuilder(this.pinner, carInput);\n }\n\n /**\n * Upload text content (encoded as text file).\n * Returns a builder for chaining name/keyvalues.\n */\n text(textData: string): PinnerUploadBuilder {\n return new EncodedUploadBuilder(this.pinner, (name, keyvalues) =>\n textToFile(textData, { name, keyvalues }),\n );\n }\n\n /**\n * Alias for text() - upload text content.\n */\n get content(): (textData: string) => PinnerUploadBuilder {\n return (textData: string) => this.text(textData);\n }\n}\n\n/**\n * Create a Pinner upload builder namespace.\n */\nexport function createUploadBuilderNamespace(\n pinner: Pinner,\n): UploadBuilderNamespace {\n return new UploadBuilderNamespace(pinner);\n}\n\n/**\n * Combined interface for upload that works as both a method and a builder namespace.\n */\nexport type UploadMethodAndBuilder = ((\n file: File,\n options?: UploadOptions,\n) => Promise<UploadOperation>) &\n UploadBuilderNamespace;\n\n/**\n * Export PinnerUploadBuilder for external use.\n */\nexport type { PinnerUploadBuilder };\n"],"mappings":";;;;;;;;;;;;AAmBA,IAAe,oBAAf,MAAgE;CAC9D,AAAU;CACV,AAAU;CACV,AAAU;CACV,AAAU;CAEV,YAAY,AAAU,QAAgB;EAAhB;;CAEtB,KAAK,MAAoB;AACvB,OAAK,QAAQ;AACb,SAAO;;CAGT,UAAU,IAAkC;AAC1C,OAAK,aAAa;AAClB,SAAO;;CAGT,iBAAiB,OAAgB,MAAY;AAC3C,OAAK,oBAAoB;AACzB,SAAO;;CAGT,wBAAwB,SAAwC;AAC9D,OAAK,2BAA2B;AAChC,SAAO;;CAKT,AAAU,eAA8B;EACtC,MAAM,UAAyB,EAAE;AACjC,MAAI,KAAK,UAAU,OACjB,SAAQ,OAAO,KAAK;AAEtB,MAAI,KAAK,eAAe,OACtB,SAAQ,YAAY,KAAK;AAE3B,MAAI,KAAK,sBAAsB,OAC7B,SAAQ,mBAAmB,KAAK;AAElC,MAAI,KAAK,6BAA6B,OACpC,SAAQ,0BAA0B,KAAK;AAEzC,SAAO;;;;;;AAOX,IAAM,oBAAN,cAAgC,kBAAkB;CAChD,YACE,QACA,AAAQ,MACR;AACA,QAAM,OAAO;EAFL;;CAKV,MAAM,MAAgC;AACpC,SAAO,KAAK,OAAO,OAAO,KAAK,MAAM,KAAK,cAAc,CAAC;;;;;;AAO7D,IAAM,uBAAN,cAAmC,kBAAkB;CACnD,YACE,QACA,AAAQ,WAIR;AACA,QAAM,OAAO;EALL;;CAQV,MAAM,MAAgC;EACpC,MAAM,UAAU,MAAM,KAAK,UAAU,KAAK,OAAO,KAAK,WAAW;AACjE,SAAO,KAAK,OAAO,OAAO,QAAQ,MAAM,QAAQ,QAAQ;;;;;;AAO5D,IAAM,mBAAN,cAA+B,kBAAkB;CAC/C,YACE,QACA,AAAQ,UACR;AACA,QAAM,OAAO;EAFL;;CAKV,MAAM,MAAgC;AACpC,SAAO,KAAK,OAAO,UAAU,KAAK,UAAU,KAAK,cAAc,CAAC;;;;;;;AAQpE,IAAa,yBAAb,MAAoC;CAClC,YAAY,AAAQ,QAAgB;EAAhB;;;;;;CAMpB,KAAK,MAAiC;AACpC,SAAO,IAAI,kBAAkB,KAAK,QAAQ,KAAK;;;;;;CAOjD,KAAK,MAAmC;AACtC,SAAO,IAAI,qBAAqB,KAAK,SAAS,MAAM,cAClDA,wBAAW,MAAM;GAAE;GAAM;GAAW,CAAC,CACtC;;;;;;CAOH,OAAO,cAA2C;AAChD,SAAO,IAAI,qBAAqB,KAAK,SAAS,MAAM,cAClDC,4BAAa,cAAc;GAAE;GAAM;GAAW,CAAC,CAChD;;;;;;CAOH,IAAI,WAAwC;AAE1C,iCAAY,UAAU;AAEtB,SAAO,IAAI,qBAAqB,KAAK,SAAS,MAAM,cAClDC,sBAAU,WAAW;GAAE;GAAM;GAAW,CAAC,CAC1C;;;;;;CAOH,IAAI,MAAwD;AAC1D,SAAO,IAAI,qBAAqB,KAAK,SAAS,MAAM,cAClDC,sBAAU,MAAM;GAAE;GAAM;GAAW,CAAC,CACrC;;;;;;;CAQH,IAAI,UAAkE;AACpE,SAAO,IAAI,iBAAiB,KAAK,QAAQ,SAAS;;;;;;CAOpD,KAAK,UAAuC;AAC1C,SAAO,IAAI,qBAAqB,KAAK,SAAS,MAAM,cAClDC,wBAAW,UAAU;GAAE;GAAM;GAAW,CAAC,CAC1C;;;;;CAMH,IAAI,UAAqD;AACvD,UAAQ,aAAqB,KAAK,KAAK,SAAS;;;;;;AAOpD,SAAgB,6BACd,QACwB;AACxB,QAAO,IAAI,uBAAuB,OAAO"}
@@ -0,0 +1,60 @@
1
+ import { PinnerUploadBuilder, UploadOperation, UploadOptions } from "../types/upload.cjs";
2
+ import { Pinner } from "../pinner.cjs";
3
+
4
+ //#region src/upload/builder.d.ts
5
+
6
+ /**
7
+ * Pinner upload builder namespace.
8
+ * Provides fluent API for file, JSON, Base64, and URL uploads.
9
+ */
10
+ declare class UploadBuilderNamespace {
11
+ private pinner;
12
+ constructor(pinner: Pinner);
13
+ /**
14
+ * Upload a file.
15
+ * Returns a builder for chaining name/keyvalues.
16
+ */
17
+ file(file: File): PinnerUploadBuilder;
18
+ /**
19
+ * Upload JSON data (encoded as JSON file).
20
+ * Returns a builder for chaining name/keyvalues.
21
+ */
22
+ json(data: object): PinnerUploadBuilder;
23
+ /**
24
+ * Upload Base64 encoded content (decoded and uploaded as file).
25
+ * Returns a builder for chaining name/keyvalues.
26
+ */
27
+ base64(base64String: string): PinnerUploadBuilder;
28
+ /**
29
+ * Upload content from a URL (fetched and uploaded as file).
30
+ * Returns a builder for chaining name/keyvalues.
31
+ */
32
+ url(urlString: string): PinnerUploadBuilder;
33
+ /**
34
+ * Upload CSV data (string, array of objects, or array of arrays).
35
+ * Returns a builder for chaining name/keyvalues.
36
+ */
37
+ csv(data: string | object[] | any[][]): PinnerUploadBuilder;
38
+ /**
39
+ * Upload raw CAR data without preprocessing.
40
+ * Useful for passthrough of pre-generated CAR files.
41
+ * Returns a builder for chaining name/keyvalues.
42
+ */
43
+ raw(carInput: File | ReadableStream<Uint8Array>): PinnerUploadBuilder;
44
+ /**
45
+ * Upload text content (encoded as text file).
46
+ * Returns a builder for chaining name/keyvalues.
47
+ */
48
+ text(textData: string): PinnerUploadBuilder;
49
+ /**
50
+ * Alias for text() - upload text content.
51
+ */
52
+ get content(): (textData: string) => PinnerUploadBuilder;
53
+ }
54
+ /**
55
+ * Combined interface for upload that works as both a method and a builder namespace.
56
+ */
57
+ type UploadMethodAndBuilder = ((file: File, options?: UploadOptions) => Promise<UploadOperation>) & UploadBuilderNamespace;
58
+ //#endregion
59
+ export { UploadMethodAndBuilder };
60
+ //# sourceMappingURL=builder.d.cts.map
@@ -0,0 +1,129 @@
1
+ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
+ const require_mime_types = require('../types/mime-types.cjs');
3
+ const require_stream = require('../utils/stream.cjs');
4
+ const require_unstorage = require('../blockstore/unstorage.cjs');
5
+ require('../blockstore/index.cjs');
6
+ let _helia_car = require("@helia/car");
7
+ let _helia_http = require("@helia/http");
8
+ let _helia_unixfs = require("@helia/unixfs");
9
+ let _ipld_car = require("@ipld/car");
10
+
11
+ //#region src/upload/car.ts
12
+ let helia = null;
13
+ let blockstore = null;
14
+ let datastore = null;
15
+ let config = {};
16
+ function configureCar(carConfig) {
17
+ config = carConfig;
18
+ }
19
+ async function getHelia() {
20
+ if (helia) return helia;
21
+ const BlockstoreClass = require_unstorage.createBlockstore();
22
+ const DatastoreClass = require_unstorage.createDatastore();
23
+ blockstore = new BlockstoreClass({
24
+ prefix: "pinner-helia-blocks",
25
+ base: config.datastoreName
26
+ });
27
+ datastore = config.datastore || new DatastoreClass({
28
+ prefix: "pinner-helia-data",
29
+ base: config.datastoreName
30
+ });
31
+ helia = await (0, _helia_http.createHeliaHTTP)({
32
+ blockstore,
33
+ datastore
34
+ });
35
+ return helia;
36
+ }
37
+ async function cleanupHelia() {
38
+ if (datastore?.close) await datastore.close();
39
+ helia = null;
40
+ blockstore = null;
41
+ datastore = null;
42
+ }
43
+ async function* fileSource(files, onProgress, signal) {
44
+ const seenDirs = /* @__PURE__ */ new Set();
45
+ let totalBytes = 0n;
46
+ let processedBytes = 0n;
47
+ for (const file of files) totalBytes += BigInt(file.size);
48
+ for (const file of files) {
49
+ if (signal?.aborted) throw new Error("Aborted");
50
+ const fullPath = file.webkitRelativePath ?? file.name;
51
+ if (fullPath.includes("/.")) continue;
52
+ const parts = fullPath.split("/").filter((part) => part.length > 0);
53
+ for (let i = 1; i < parts.length; i++) {
54
+ if (signal?.aborted) throw new Error("Aborted");
55
+ const dirPath = parts.slice(0, i).join("/");
56
+ if (!seenDirs.has(dirPath)) {
57
+ seenDirs.add(dirPath);
58
+ yield {
59
+ content: (async function* () {})(),
60
+ path: dirPath
61
+ };
62
+ }
63
+ }
64
+ yield {
65
+ content: require_stream.readableStreamToAsyncIterable(file.stream()),
66
+ path: fullPath
67
+ };
68
+ if (onProgress && totalBytes > 0n) {
69
+ processedBytes += BigInt(file.size);
70
+ onProgress(Number(processedBytes * 100n / totalBytes));
71
+ }
72
+ }
73
+ }
74
+ async function preprocessToCar(input, options) {
75
+ let files;
76
+ if (input instanceof ReadableStream) {
77
+ const [streamForSize$1, streamForFile] = input.tee();
78
+ await require_stream.calculateStreamSize(streamForSize$1, options?.signal);
79
+ const streamBlob = await require_stream.streamToBlob(streamForFile, "application/octet-stream");
80
+ files = [new File([streamBlob], options?.name || "upload", { type: streamBlob.type })];
81
+ } else if (Array.isArray(input)) files = input;
82
+ else files = [input];
83
+ const heliaInstance = await getHelia();
84
+ const fs = (0, _helia_unixfs.unixfs)(heliaInstance);
85
+ const c = (0, _helia_car.car)(heliaInstance);
86
+ let rootCid;
87
+ let blocksCount = 0n;
88
+ const src = fileSource(files, options?.onProgress, options?.signal);
89
+ let hasFiles = false;
90
+ for await (const result of fs.addAll(src, {
91
+ cidVersion: 1,
92
+ rawLeaves: false,
93
+ signal: options?.signal,
94
+ onProgress(event) {
95
+ if (event.type === "blocks:put:blockstore:put") blocksCount++;
96
+ }
97
+ })) {
98
+ if (options?.signal?.aborted) throw new Error("Aborted");
99
+ rootCid = result.cid;
100
+ hasFiles = true;
101
+ }
102
+ if (!hasFiles || !rootCid) throw new Error("No files to process");
103
+ const [streamForSize, streamForProcessing] = require_stream.asyncGeneratorToReadableStream(c.export(rootCid, { signal: options?.signal })).tee();
104
+ const size = await require_stream.calculateStreamSize(streamForSize, options?.signal);
105
+ return {
106
+ carStream: streamForProcessing,
107
+ rootCid: rootCid.toString(),
108
+ size
109
+ };
110
+ }
111
+ async function isCarFile(file) {
112
+ if (file.type !== require_mime_types.MIME_TYPE_CAR && !file.name.endsWith(require_mime_types.FILE_EXTENSION_CAR)) return false;
113
+ try {
114
+ const iterable = require_stream.readableStreamToAsyncIterable(file.stream());
115
+ return (await (await _ipld_car.CarReader.fromIterable(iterable)).getRoots()).length > 0;
116
+ } catch {
117
+ return false;
118
+ }
119
+ }
120
+ async function destroyCarPreprocessor() {
121
+ await cleanupHelia();
122
+ }
123
+
124
+ //#endregion
125
+ exports.configureCar = configureCar;
126
+ exports.destroyCarPreprocessor = destroyCarPreprocessor;
127
+ exports.isCarFile = isCarFile;
128
+ exports.preprocessToCar = preprocessToCar;
129
+ //# sourceMappingURL=car.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"car.cjs","names":["createBlockstore","createUnstorageDatastore","readableStreamToAsyncIterable","streamForSize","calculateStreamSize","streamToBlob","asyncGeneratorToReadableStream","MIME_TYPE_CAR","FILE_EXTENSION_CAR","CarReader"],"sources":["../../../src/upload/car.ts"],"sourcesContent":["import { car } from \"@helia/car\";\nimport { createHeliaHTTP } from \"@helia/http\";\nimport { unixfs } from \"@helia/unixfs\";\nimport {\n createBlockstore,\n createDatastore as createUnstorageDatastore,\n} from \"@/blockstore\";\nimport type { CID } from \"multiformats/cid\";\nimport { CarReader } from \"@ipld/car\";\nimport type { Datastore } from \"interface-datastore\";\n\nimport {\n asyncGeneratorToReadableStream,\n calculateStreamSize,\n readableStreamToAsyncIterable,\n streamToBlob,\n} from \"@/utils/stream\";\nimport { FILE_EXTENSION_CAR, MIME_TYPE_CAR } from \"@/types/mime-types\";\n\nexport interface CarPreprocessOptions {\n name?: string;\n onProgress?: (percentage: number) => void;\n signal?: AbortSignal;\n}\n\nexport interface CarPreprocessResult {\n carStream: ReadableStream<Uint8Array>;\n rootCid: string;\n size: bigint;\n}\n\nexport interface CarConfig {\n /**\n * Custom datastore instance for Helia.\n * If provided, this datastore will be used directly without creating one from storage.\n * Highest priority - takes precedence over storage and datastoreName.\n */\n datastore?: Datastore;\n\n /**\n * Custom base name for Helia storage.\n * Passed as the `base` option to both blockstore and datastore storage instances.\n * Only used when datastore is not provided.\n * @default \"pinner-helia-data\"\n */\n datastoreName?: string;\n}\n\nlet helia: any = null;\nlet blockstore: any = null;\nlet datastore: any = null;\nlet config: CarConfig = {};\n\nexport function configureCar(carConfig: CarConfig) {\n config = carConfig;\n}\n\nasync function getHelia() {\n if (helia) return helia;\n\n const BlockstoreClass = createBlockstore();\n const DatastoreClass = createUnstorageDatastore();\n\n blockstore = new BlockstoreClass({\n prefix: \"pinner-helia-blocks\",\n base: config.datastoreName,\n });\n datastore =\n config.datastore ||\n new DatastoreClass({\n prefix: \"pinner-helia-data\",\n base: config.datastoreName,\n });\n\n helia = await createHeliaHTTP({\n blockstore,\n datastore,\n });\n\n return helia;\n}\n\nasync function cleanupHelia() {\n if (datastore?.close) {\n await datastore.close();\n }\n helia = null;\n blockstore = null;\n datastore = null;\n}\n\nasync function* fileSource(\n files: File[],\n onProgress?: (percentage: number) => void,\n signal?: AbortSignal,\n): AsyncGenerator<{\n content: AsyncIterable<Uint8Array> | undefined;\n path: string;\n}> {\n const seenDirs = new Set<string>();\n let totalBytes = 0n;\n let processedBytes = 0n;\n\n for (const file of files) {\n totalBytes += BigInt(file.size);\n }\n\n for (const file of files) {\n if (signal?.aborted) {\n throw new Error(\"Aborted\");\n }\n\n const fullPath = (file as any).webkitRelativePath ?? file.name;\n\n if (fullPath.includes(\"/.\")) {\n continue;\n }\n\n const parts = fullPath.split(\"/\").filter((part: string) => part.length > 0);\n\n for (let i = 1; i < parts.length; i++) {\n if (signal?.aborted) {\n throw new Error(\"Aborted\");\n }\n\n const dirPath = parts.slice(0, i).join(\"/\");\n\n if (!seenDirs.has(dirPath)) {\n seenDirs.add(dirPath);\n yield {\n content: (async function* () {})(),\n path: dirPath,\n };\n }\n }\n\n yield {\n content: readableStreamToAsyncIterable(file.stream()),\n path: fullPath,\n };\n\n if (onProgress && totalBytes > 0n) {\n processedBytes += BigInt(file.size);\n const progressPercent = Number((processedBytes * 100n) / totalBytes);\n onProgress(progressPercent);\n }\n }\n}\n\nexport async function preprocessToCar(\n input: File | ReadableStream<Uint8Array> | File[],\n options?: CarPreprocessOptions,\n): Promise<CarPreprocessResult> {\n let files: File[];\n\n if (input instanceof ReadableStream) {\n const [streamForSize, streamForFile] = input.tee();\n const size = await calculateStreamSize(streamForSize, options?.signal);\n const streamBlob = await streamToBlob(\n streamForFile,\n \"application/octet-stream\",\n );\n files = [\n new File([streamBlob], options?.name || \"upload\", {\n type: streamBlob.type,\n }),\n ];\n } else if (Array.isArray(input)) {\n files = input;\n } else {\n files = [input];\n }\n\n const heliaInstance = await getHelia();\n const fs = unixfs(heliaInstance);\n const c = car(heliaInstance);\n\n let rootCid: CID | undefined;\n let blocksCount = 0n;\n\n const src = fileSource(files, options?.onProgress, options?.signal);\n\n let hasFiles = false;\n for await (const result of fs.addAll(src, {\n cidVersion: 1,\n rawLeaves: false,\n signal: options?.signal,\n onProgress(event) {\n if (event.type === \"blocks:put:blockstore:put\") {\n blocksCount++;\n }\n },\n })) {\n if (options?.signal?.aborted) {\n throw new Error(\"Aborted\");\n }\n rootCid = result.cid;\n hasFiles = true;\n }\n\n if (!hasFiles || !rootCid) {\n throw new Error(\"No files to process\");\n }\n\n // c.export() now returns an async generator directly (was renamed from 'stream')\n const carAsyncGenerator = c.export(rootCid!, { signal: options?.signal });\n const carStream = asyncGeneratorToReadableStream(carAsyncGenerator);\n\n // Use stream tee to create two identical streams - one for size calculation, one for processing\n const [streamForSize, streamForProcessing] = carStream.tee();\n\n const size = await calculateStreamSize(streamForSize, options?.signal);\n\n return {\n carStream: streamForProcessing,\n rootCid: rootCid!.toString(),\n size,\n };\n}\n\nexport async function isCarFile(file: File): Promise<boolean> {\n if (file.type !== MIME_TYPE_CAR && !file.name.endsWith(FILE_EXTENSION_CAR)) {\n return false;\n }\n\n try {\n const iterable = readableStreamToAsyncIterable(file.stream());\n const reader = await CarReader.fromIterable(iterable);\n const roots = await reader.getRoots();\n return roots.length > 0;\n } catch {\n return false;\n }\n}\n\nexport async function destroyCarPreprocessor() {\n await cleanupHelia();\n}\n"],"mappings":";;;;;;;;;;;AAgDA,IAAI,QAAa;AACjB,IAAI,aAAkB;AACtB,IAAI,YAAiB;AACrB,IAAI,SAAoB,EAAE;AAE1B,SAAgB,aAAa,WAAsB;AACjD,UAAS;;AAGX,eAAe,WAAW;AACxB,KAAI,MAAO,QAAO;CAElB,MAAM,kBAAkBA,oCAAkB;CAC1C,MAAM,iBAAiBC,mCAA0B;AAEjD,cAAa,IAAI,gBAAgB;EAC/B,QAAQ;EACR,MAAM,OAAO;EACd,CAAC;AACF,aACE,OAAO,aACP,IAAI,eAAe;EACjB,QAAQ;EACR,MAAM,OAAO;EACd,CAAC;AAEJ,SAAQ,uCAAsB;EAC5B;EACA;EACD,CAAC;AAEF,QAAO;;AAGT,eAAe,eAAe;AAC5B,KAAI,WAAW,MACb,OAAM,UAAU,OAAO;AAEzB,SAAQ;AACR,cAAa;AACb,aAAY;;AAGd,gBAAgB,WACd,OACA,YACA,QAIC;CACD,MAAM,2BAAW,IAAI,KAAa;CAClC,IAAI,aAAa;CACjB,IAAI,iBAAiB;AAErB,MAAK,MAAM,QAAQ,MACjB,eAAc,OAAO,KAAK,KAAK;AAGjC,MAAK,MAAM,QAAQ,OAAO;AACxB,MAAI,QAAQ,QACV,OAAM,IAAI,MAAM,UAAU;EAG5B,MAAM,WAAY,KAAa,sBAAsB,KAAK;AAE1D,MAAI,SAAS,SAAS,KAAK,CACzB;EAGF,MAAM,QAAQ,SAAS,MAAM,IAAI,CAAC,QAAQ,SAAiB,KAAK,SAAS,EAAE;AAE3E,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,OAAI,QAAQ,QACV,OAAM,IAAI,MAAM,UAAU;GAG5B,MAAM,UAAU,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,IAAI;AAE3C,OAAI,CAAC,SAAS,IAAI,QAAQ,EAAE;AAC1B,aAAS,IAAI,QAAQ;AACrB,UAAM;KACJ,UAAU,mBAAmB,KAAK;KAClC,MAAM;KACP;;;AAIL,QAAM;GACJ,SAASC,6CAA8B,KAAK,QAAQ,CAAC;GACrD,MAAM;GACP;AAED,MAAI,cAAc,aAAa,IAAI;AACjC,qBAAkB,OAAO,KAAK,KAAK;AAEnC,cADwB,OAAQ,iBAAiB,OAAQ,WAAW,CACzC;;;;AAKjC,eAAsB,gBACpB,OACA,SAC8B;CAC9B,IAAI;AAEJ,KAAI,iBAAiB,gBAAgB;EACnC,MAAM,CAACC,iBAAe,iBAAiB,MAAM,KAAK;AACrC,QAAMC,mCAAoBD,iBAAe,SAAS,OAAO;EACtE,MAAM,aAAa,MAAME,4BACvB,eACA,2BACD;AACD,UAAQ,CACN,IAAI,KAAK,CAAC,WAAW,EAAE,SAAS,QAAQ,UAAU,EAChD,MAAM,WAAW,MAClB,CAAC,CACH;YACQ,MAAM,QAAQ,MAAM,CAC7B,SAAQ;KAER,SAAQ,CAAC,MAAM;CAGjB,MAAM,gBAAgB,MAAM,UAAU;CACtC,MAAM,+BAAY,cAAc;CAChC,MAAM,wBAAQ,cAAc;CAE5B,IAAI;CACJ,IAAI,cAAc;CAElB,MAAM,MAAM,WAAW,OAAO,SAAS,YAAY,SAAS,OAAO;CAEnE,IAAI,WAAW;AACf,YAAW,MAAM,UAAU,GAAG,OAAO,KAAK;EACxC,YAAY;EACZ,WAAW;EACX,QAAQ,SAAS;EACjB,WAAW,OAAO;AAChB,OAAI,MAAM,SAAS,4BACjB;;EAGL,CAAC,EAAE;AACF,MAAI,SAAS,QAAQ,QACnB,OAAM,IAAI,MAAM,UAAU;AAE5B,YAAU,OAAO;AACjB,aAAW;;AAGb,KAAI,CAAC,YAAY,CAAC,QAChB,OAAM,IAAI,MAAM,sBAAsB;CAQxC,MAAM,CAAC,eAAe,uBAHJC,8CADQ,EAAE,OAAO,SAAU,EAAE,QAAQ,SAAS,QAAQ,CAAC,CACN,CAGZ,KAAK;CAE5D,MAAM,OAAO,MAAMF,mCAAoB,eAAe,SAAS,OAAO;AAEtE,QAAO;EACL,WAAW;EACX,SAAS,QAAS,UAAU;EAC5B;EACD;;AAGH,eAAsB,UAAU,MAA8B;AAC5D,KAAI,KAAK,SAASG,oCAAiB,CAAC,KAAK,KAAK,SAASC,sCAAmB,CACxE,QAAO;AAGT,KAAI;EACF,MAAM,WAAWN,6CAA8B,KAAK,QAAQ,CAAC;AAG7D,UADc,OADC,MAAMO,oBAAU,aAAa,SAAS,EAC1B,UAAU,EACxB,SAAS;SAChB;AACN,SAAO;;;AAIX,eAAsB,yBAAyB;AAC7C,OAAM,cAAc"}
@@ -0,0 +1,19 @@
1
+ import { Datastore } from "interface-datastore";
2
+
3
+ //#region src/upload/car.d.ts
4
+ interface CarPreprocessOptions {
5
+ name?: string;
6
+ onProgress?: (percentage: number) => void;
7
+ signal?: AbortSignal;
8
+ }
9
+ interface CarPreprocessResult {
10
+ carStream: ReadableStream<Uint8Array>;
11
+ rootCid: string;
12
+ size: bigint;
13
+ }
14
+ declare function preprocessToCar(input: File | ReadableStream<Uint8Array> | File[], options?: CarPreprocessOptions): Promise<CarPreprocessResult>;
15
+ declare function isCarFile(file: File): Promise<boolean>;
16
+ declare function destroyCarPreprocessor(): Promise<void>;
17
+ //#endregion
18
+ export { CarPreprocessOptions, CarPreprocessResult, destroyCarPreprocessor, isCarFile, preprocessToCar };
19
+ //# sourceMappingURL=car.d.cts.map
@@ -0,0 +1,9 @@
1
+
2
+ //#region src/upload/constants.ts
3
+ const UPLOAD_SOURCE_XHR = "xhr-upload";
4
+ const UPLOAD_SOURCE_TUS = "tus-upload";
5
+
6
+ //#endregion
7
+ exports.UPLOAD_SOURCE_TUS = UPLOAD_SOURCE_TUS;
8
+ exports.UPLOAD_SOURCE_XHR = UPLOAD_SOURCE_XHR;
9
+ //# sourceMappingURL=constants.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.cjs","names":[],"sources":["../../../src/upload/constants.ts"],"sourcesContent":["export const UPLOAD_SOURCE_XHR = \"xhr-upload\" as const;\nexport const UPLOAD_SOURCE_TUS = \"tus-upload\" as const;\n"],"mappings":";;AAAA,MAAa,oBAAoB;AACjC,MAAa,oBAAoB"}
@@ -0,0 +1,8 @@
1
+ const require_upload = require('../types/upload.cjs');
2
+ const require_normalize = require('./normalize.cjs');
3
+ const require_base_upload = require('./base-upload.cjs');
4
+ const require_xhr_upload = require('./xhr-upload.cjs');
5
+ const require_tus_upload = require('./tus-upload.cjs');
6
+ const require_car = require('./car.cjs');
7
+ const require_manager = require('./manager.cjs');
8
+ const require_builder = require('./builder.cjs');