@chaoschain/sdk 0.1.0

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.
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ // src/providers/compute/index.ts
4
+ var LocalComputeProvider = class {
5
+ async inference(_model, _input) {
6
+ throw new Error("Local compute not yet implemented. Use 0G Compute or other provider.");
7
+ }
8
+ async getModels() {
9
+ return [];
10
+ }
11
+ };
12
+
13
+ exports.LocalComputeProvider = LocalComputeProvider;
14
+ //# sourceMappingURL=index.js.map
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/providers/compute/index.ts"],"names":[],"mappings":";;;AAUO,IAAM,uBAAN,MAAsD;AAAA,EAC3D,MAAM,SAAA,CAAU,MAAA,EAAgB,MAAA,EAAmC;AACjE,IAAA,MAAM,IAAI,MAAM,sEAAsE,CAAA;AAAA,EACxF;AAAA,EAEA,MAAM,SAAA,GAA+B;AACnC,IAAA,OAAO,EAAC;AAAA,EACV;AACF","file":"index.js","sourcesContent":["/**\n * Compute Providers Export\n * Placeholder for future compute providers (0G, etc.)\n */\n\nimport { ComputeProvider } from '../../types';\n\n/**\n * Basic compute provider implementation\n */\nexport class LocalComputeProvider implements ComputeProvider {\n async inference(_model: string, _input: unknown): Promise<unknown> {\n throw new Error('Local compute not yet implemented. Use 0G Compute or other provider.');\n }\n\n async getModels(): Promise<string[]> {\n return [];\n }\n}\n\n"]}
@@ -0,0 +1,13 @@
1
+ // src/providers/compute/index.ts
2
+ var LocalComputeProvider = class {
3
+ async inference(_model, _input) {
4
+ throw new Error("Local compute not yet implemented. Use 0G Compute or other provider.");
5
+ }
6
+ async getModels() {
7
+ return [];
8
+ }
9
+ };
10
+
11
+ export { LocalComputeProvider };
12
+ //# sourceMappingURL=index.mjs.map
13
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/providers/compute/index.ts"],"names":[],"mappings":";AAUO,IAAM,uBAAN,MAAsD;AAAA,EAC3D,MAAM,SAAA,CAAU,MAAA,EAAgB,MAAA,EAAmC;AACjE,IAAA,MAAM,IAAI,MAAM,sEAAsE,CAAA;AAAA,EACxF;AAAA,EAEA,MAAM,SAAA,GAA+B;AACnC,IAAA,OAAO,EAAC;AAAA,EACV;AACF","file":"index.mjs","sourcesContent":["/**\n * Compute Providers Export\n * Placeholder for future compute providers (0G, etc.)\n */\n\nimport { ComputeProvider } from '../../types';\n\n/**\n * Basic compute provider implementation\n */\nexport class LocalComputeProvider implements ComputeProvider {\n async inference(_model: string, _input: unknown): Promise<unknown> {\n throw new Error('Local compute not yet implemented. Use 0G Compute or other provider.');\n }\n\n async getModels(): Promise<string[]> {\n return [];\n }\n}\n\n"]}
@@ -0,0 +1,286 @@
1
+ 'use strict';
2
+
3
+ var axios = require('axios');
4
+
5
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
6
+
7
+ var axios__default = /*#__PURE__*/_interopDefault(axios);
8
+
9
+ // src/providers/storage/IPFSLocal.ts
10
+ var IPFSLocalStorage = class {
11
+ apiUrl;
12
+ gatewayUrl;
13
+ constructor(apiUrl = "http://localhost:5001", gatewayUrl = "http://localhost:8080") {
14
+ this.apiUrl = apiUrl;
15
+ this.gatewayUrl = gatewayUrl;
16
+ }
17
+ /**
18
+ * Upload data to local IPFS
19
+ */
20
+ async upload(data, options) {
21
+ try {
22
+ let buffer;
23
+ if (Buffer.isBuffer(data)) {
24
+ buffer = data;
25
+ } else if (typeof data === "string") {
26
+ buffer = Buffer.from(data, "utf-8");
27
+ } else {
28
+ buffer = Buffer.from(JSON.stringify(data), "utf-8");
29
+ }
30
+ const formData = new FormData();
31
+ const blob = new Blob([buffer], { type: options?.mime || "application/octet-stream" });
32
+ formData.append("file", blob);
33
+ const response = await axios__default.default.post(`${this.apiUrl}/api/v0/add`, formData, {
34
+ headers: {
35
+ "Content-Type": "multipart/form-data"
36
+ },
37
+ params: {
38
+ pin: options?.pin !== false
39
+ // Pin by default
40
+ }
41
+ });
42
+ const cid = response.data.Hash;
43
+ return {
44
+ cid,
45
+ uri: `ipfs://${cid}`,
46
+ size: response.data.Size
47
+ };
48
+ } catch (error) {
49
+ throw new Error(`Failed to upload to IPFS: ${error.message}`);
50
+ }
51
+ }
52
+ /**
53
+ * Download data from IPFS
54
+ */
55
+ async download(cid) {
56
+ try {
57
+ const response = await axios__default.default.get(`${this.gatewayUrl}/ipfs/${cid}`, {
58
+ responseType: "arraybuffer"
59
+ });
60
+ return Buffer.from(response.data);
61
+ } catch (error) {
62
+ throw new Error(`Failed to download from IPFS: ${error.message}`);
63
+ }
64
+ }
65
+ /**
66
+ * Pin content
67
+ */
68
+ async pin(cid) {
69
+ try {
70
+ await axios__default.default.post(`${this.apiUrl}/api/v0/pin/add`, null, {
71
+ params: { arg: cid }
72
+ });
73
+ } catch (error) {
74
+ throw new Error(`Failed to pin content: ${error.message}`);
75
+ }
76
+ }
77
+ /**
78
+ * Unpin content
79
+ */
80
+ async unpin(cid) {
81
+ try {
82
+ await axios__default.default.post(`${this.apiUrl}/api/v0/pin/rm`, null, {
83
+ params: { arg: cid }
84
+ });
85
+ } catch (error) {
86
+ throw new Error(`Failed to unpin content: ${error.message}`);
87
+ }
88
+ }
89
+ /**
90
+ * Check if IPFS daemon is running
91
+ */
92
+ async isAvailable() {
93
+ try {
94
+ await axios__default.default.post(`${this.apiUrl}/api/v0/version`);
95
+ return true;
96
+ } catch {
97
+ return false;
98
+ }
99
+ }
100
+ /**
101
+ * Get IPFS version
102
+ */
103
+ async getVersion() {
104
+ try {
105
+ const response = await axios__default.default.post(`${this.apiUrl}/api/v0/version`);
106
+ return response.data.Version;
107
+ } catch (error) {
108
+ throw new Error(`Failed to get IPFS version: ${error.message}`);
109
+ }
110
+ }
111
+ };
112
+ var PinataStorage = class {
113
+ apiKey;
114
+ apiSecret;
115
+ jwt;
116
+ gatewayUrl;
117
+ apiUrl = "https://api.pinata.cloud";
118
+ constructor(config) {
119
+ this.apiKey = config.apiKey;
120
+ this.apiSecret = config.apiSecret;
121
+ this.jwt = config.jwt;
122
+ this.gatewayUrl = config.gatewayUrl || "https://gateway.pinata.cloud";
123
+ if (!this.jwt && (!this.apiKey || !this.apiSecret)) {
124
+ throw new Error("Pinata requires either JWT or API key/secret");
125
+ }
126
+ }
127
+ /**
128
+ * Get authorization headers
129
+ */
130
+ getHeaders() {
131
+ if (this.jwt) {
132
+ return {
133
+ Authorization: `Bearer ${this.jwt}`
134
+ };
135
+ }
136
+ return {
137
+ pinata_api_key: this.apiKey,
138
+ pinata_secret_api_key: this.apiSecret
139
+ };
140
+ }
141
+ /**
142
+ * Upload data to Pinata
143
+ */
144
+ async upload(data, options) {
145
+ try {
146
+ let buffer;
147
+ if (Buffer.isBuffer(data)) {
148
+ buffer = data;
149
+ } else if (typeof data === "string") {
150
+ buffer = Buffer.from(data, "utf-8");
151
+ } else {
152
+ buffer = Buffer.from(JSON.stringify(data), "utf-8");
153
+ }
154
+ const formData = new FormData();
155
+ const blob = new Blob([buffer], { type: options?.mime || "application/octet-stream" });
156
+ formData.append("file", blob, "file");
157
+ if (options?.metadata) {
158
+ formData.append("pinataMetadata", JSON.stringify(options.metadata));
159
+ }
160
+ const response = await axios__default.default.post(`${this.apiUrl}/pinning/pinFileToIPFS`, formData, {
161
+ headers: {
162
+ ...this.getHeaders(),
163
+ "Content-Type": "multipart/form-data"
164
+ }
165
+ });
166
+ const cid = response.data.IpfsHash;
167
+ return {
168
+ cid,
169
+ uri: `ipfs://${cid}`,
170
+ size: response.data.PinSize
171
+ };
172
+ } catch (error) {
173
+ throw new Error(`Failed to upload to Pinata: ${error.message}`);
174
+ }
175
+ }
176
+ /**
177
+ * Download data from Pinata gateway
178
+ */
179
+ async download(cid) {
180
+ try {
181
+ const response = await axios__default.default.get(`${this.gatewayUrl}/ipfs/${cid}`, {
182
+ responseType: "arraybuffer"
183
+ });
184
+ return Buffer.from(response.data);
185
+ } catch (error) {
186
+ throw new Error(`Failed to download from Pinata: ${error.message}`);
187
+ }
188
+ }
189
+ /**
190
+ * Pin existing IPFS content
191
+ */
192
+ async pin(cid) {
193
+ try {
194
+ await axios__default.default.post(
195
+ `${this.apiUrl}/pinning/pinByHash`,
196
+ {
197
+ hashToPin: cid
198
+ },
199
+ {
200
+ headers: this.getHeaders()
201
+ }
202
+ );
203
+ } catch (error) {
204
+ throw new Error(`Failed to pin content: ${error.message}`);
205
+ }
206
+ }
207
+ /**
208
+ * Unpin content
209
+ */
210
+ async unpin(cid) {
211
+ try {
212
+ await axios__default.default.delete(`${this.apiUrl}/pinning/unpin/${cid}`, {
213
+ headers: this.getHeaders()
214
+ });
215
+ } catch (error) {
216
+ throw new Error(`Failed to unpin content: ${error.message}`);
217
+ }
218
+ }
219
+ /**
220
+ * Test authentication
221
+ */
222
+ async testAuthentication() {
223
+ try {
224
+ await axios__default.default.get(`${this.apiUrl}/data/testAuthentication`, {
225
+ headers: this.getHeaders()
226
+ });
227
+ return true;
228
+ } catch {
229
+ return false;
230
+ }
231
+ }
232
+ };
233
+
234
+ // src/providers/storage/Irys.ts
235
+ var IrysStorage = class {
236
+ _config;
237
+ constructor(config) {
238
+ this._config = {
239
+ network: "mainnet",
240
+ token: "ethereum",
241
+ ...config
242
+ };
243
+ console.log(`Irys storage configured for ${this._config.network}`);
244
+ }
245
+ /**
246
+ * Upload data to Arweave via Irys
247
+ * Note: Requires @irys/sdk to be installed
248
+ */
249
+ async upload(_data, _options) {
250
+ try {
251
+ throw new Error(
252
+ "Irys storage requires @irys/sdk to be installed: npm install @irys/sdk"
253
+ );
254
+ } catch (error) {
255
+ throw new Error(`Irys upload failed: ${error.message}`);
256
+ }
257
+ }
258
+ /**
259
+ * Download data from Arweave
260
+ */
261
+ async download(cid) {
262
+ try {
263
+ const response = await fetch(`https://arweave.net/${cid}`);
264
+ const data = await response.arrayBuffer();
265
+ return Buffer.from(data);
266
+ } catch (error) {
267
+ throw new Error(`Irys download failed: ${error.message}`);
268
+ }
269
+ }
270
+ /**
271
+ * Pin - no-op for Arweave (content is permanent)
272
+ */
273
+ async pin(_cid) {
274
+ }
275
+ /**
276
+ * Unpin - no-op for Arweave (content is permanent)
277
+ */
278
+ async unpin(_cid) {
279
+ }
280
+ };
281
+
282
+ exports.IPFSLocalStorage = IPFSLocalStorage;
283
+ exports.IrysStorage = IrysStorage;
284
+ exports.PinataStorage = PinataStorage;
285
+ //# sourceMappingURL=index.js.map
286
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/providers/storage/IPFSLocal.ts","../../../src/providers/storage/IPFSPinata.ts","../../../src/providers/storage/Irys.ts"],"names":["axios"],"mappings":";;;;;;;;;AAQO,IAAM,mBAAN,MAAkD;AAAA,EAC/C,MAAA;AAAA,EACA,UAAA;AAAA,EAER,WAAA,CAAY,MAAA,GAAiB,uBAAA,EAAyB,UAAA,GAAqB,uBAAA,EAAyB;AAClG,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAA,CAAO,IAAA,EAAgC,OAAA,EAAgD;AAC3F,IAAA,IAAI;AACF,MAAA,IAAI,MAAA;AAGJ,MAAA,IAAI,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,EAAG;AACzB,QAAA,MAAA,GAAS,IAAA;AAAA,MACX,CAAA,MAAA,IAAW,OAAO,IAAA,KAAS,QAAA,EAAU;AACnC,QAAA,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,OAAO,CAAA;AAAA,MACpC,CAAA,MAAO;AACL,QAAA,MAAA,GAAS,OAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,IAAI,GAAG,OAAO,CAAA;AAAA,MACpD;AAGA,MAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAC9B,MAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,CAAC,MAAM,CAAA,EAAG,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,IAAQ,0BAAA,EAA4B,CAAA;AACrF,MAAA,QAAA,CAAS,MAAA,CAAO,QAAQ,IAAI,CAAA;AAG5B,MAAA,MAAM,QAAA,GAAW,MAAMA,sBAAA,CAAM,IAAA,CAAK,GAAG,IAAA,CAAK,MAAM,eAAe,QAAA,EAAU;AAAA,QACvE,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB;AAAA,SAClB;AAAA,QACA,MAAA,EAAQ;AAAA,UACN,GAAA,EAAK,SAAS,GAAA,KAAQ;AAAA;AAAA;AACxB,OACD,CAAA;AAED,MAAA,MAAM,GAAA,GAAM,SAAS,IAAA,CAAK,IAAA;AAE1B,MAAA,OAAO;AAAA,QACL,GAAA;AAAA,QACA,GAAA,EAAK,UAAU,GAAG,CAAA,CAAA;AAAA,QAClB,IAAA,EAAM,SAAS,IAAA,CAAK;AAAA,OACtB;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA8B,KAAA,CAAgB,OAAO,CAAA,CAAE,CAAA;AAAA,IACzE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,GAAA,EAA8B;AAC3C,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAMA,sBAAA,CAAM,GAAA,CAAI,GAAG,IAAA,CAAK,UAAU,CAAA,MAAA,EAAS,GAAG,CAAA,CAAA,EAAI;AAAA,QACjE,YAAA,EAAc;AAAA,OACf,CAAA;AAED,MAAA,OAAO,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA;AAAA,IAClC,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAkC,KAAA,CAAgB,OAAO,CAAA,CAAE,CAAA;AAAA,IAC7E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,IAAI,GAAA,EAA4B;AACpC,IAAA,IAAI;AACF,MAAA,MAAMA,uBAAM,IAAA,CAAK,CAAA,EAAG,IAAA,CAAK,MAAM,mBAAmB,IAAA,EAAM;AAAA,QACtD,MAAA,EAAQ,EAAE,GAAA,EAAK,GAAA;AAAI,OACpB,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA2B,KAAA,CAAgB,OAAO,CAAA,CAAE,CAAA;AAAA,IACtE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAM,GAAA,EAA4B;AACtC,IAAA,IAAI;AACF,MAAA,MAAMA,uBAAM,IAAA,CAAK,CAAA,EAAG,IAAA,CAAK,MAAM,kBAAkB,IAAA,EAAM;AAAA,QACrD,MAAA,EAAQ,EAAE,GAAA,EAAK,GAAA;AAAI,OACpB,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA6B,KAAA,CAAgB,OAAO,CAAA,CAAE,CAAA;AAAA,IACxE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,GAAgC;AACpC,IAAA,IAAI;AACF,MAAA,MAAMA,sBAAA,CAAM,IAAA,CAAK,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,eAAA,CAAiB,CAAA;AAChD,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAA,GAA8B;AAClC,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,MAAMA,sBAAA,CAAM,KAAK,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,eAAA,CAAiB,CAAA;AACjE,MAAA,OAAO,SAAS,IAAA,CAAK,OAAA;AAAA,IACvB,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4BAAA,EAAgC,KAAA,CAAgB,OAAO,CAAA,CAAE,CAAA;AAAA,IAC3E;AAAA,EACF;AACF;AC7GO,IAAM,gBAAN,MAA+C;AAAA,EAC5C,MAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA,GAAiB,0BAAA;AAAA,EAEzB,YAAY,MAAA,EAAsB;AAChC,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AACrB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,MAAM,MAAA,CAAO,GAAA;AAClB,IAAA,IAAA,CAAK,UAAA,GAAa,OAAO,UAAA,IAAc,8BAAA;AAEvC,IAAA,IAAI,CAAC,KAAK,GAAA,KAAQ,CAAC,KAAK,MAAA,IAAU,CAAC,KAAK,SAAA,CAAA,EAAY;AAClD,MAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,IAChE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,UAAA,GAAqC;AAC3C,IAAA,IAAI,KAAK,GAAA,EAAK;AACZ,MAAA,OAAO;AAAA,QACL,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,GAAG,CAAA;AAAA,OACnC;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,gBAAgB,IAAA,CAAK,MAAA;AAAA,MACrB,uBAAuB,IAAA,CAAK;AAAA,KAC9B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAA,CAAO,IAAA,EAAgC,OAAA,EAAgD;AAC3F,IAAA,IAAI;AACF,MAAA,IAAI,MAAA;AAGJ,MAAA,IAAI,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,EAAG;AACzB,QAAA,MAAA,GAAS,IAAA;AAAA,MACX,CAAA,MAAA,IAAW,OAAO,IAAA,KAAS,QAAA,EAAU;AACnC,QAAA,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,OAAO,CAAA;AAAA,MACpC,CAAA,MAAO;AACL,QAAA,MAAA,GAAS,OAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,IAAI,GAAG,OAAO,CAAA;AAAA,MACpD;AAGA,MAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAC9B,MAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,CAAC,MAAM,CAAA,EAAG,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,IAAQ,0BAAA,EAA4B,CAAA;AACrF,MAAA,QAAA,CAAS,MAAA,CAAO,MAAA,EAAQ,IAAA,EAAM,MAAM,CAAA;AAGpC,MAAA,IAAI,SAAS,QAAA,EAAU;AACrB,QAAA,QAAA,CAAS,OAAO,gBAAA,EAAkB,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAAA,MACpE;AAGA,MAAA,MAAM,QAAA,GAAW,MAAMA,sBAAAA,CAAM,IAAA,CAAK,GAAG,IAAA,CAAK,MAAM,0BAA0B,QAAA,EAAU;AAAA,QAClF,OAAA,EAAS;AAAA,UACP,GAAG,KAAK,UAAA,EAAW;AAAA,UACnB,cAAA,EAAgB;AAAA;AAClB,OACD,CAAA;AAED,MAAA,MAAM,GAAA,GAAM,SAAS,IAAA,CAAK,QAAA;AAE1B,MAAA,OAAO;AAAA,QACL,GAAA;AAAA,QACA,GAAA,EAAK,UAAU,GAAG,CAAA,CAAA;AAAA,QAClB,IAAA,EAAM,SAAS,IAAA,CAAK;AAAA,OACtB;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4BAAA,EAAgC,KAAA,CAAgB,OAAO,CAAA,CAAE,CAAA;AAAA,IAC3E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,GAAA,EAA8B;AAC3C,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAMA,sBAAAA,CAAM,GAAA,CAAI,GAAG,IAAA,CAAK,UAAU,CAAA,MAAA,EAAS,GAAG,CAAA,CAAA,EAAI;AAAA,QACjE,YAAA,EAAc;AAAA,OACf,CAAA;AAED,MAAA,OAAO,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA;AAAA,IAClC,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gCAAA,EAAoC,KAAA,CAAgB,OAAO,CAAA,CAAE,CAAA;AAAA,IAC/E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,IAAI,GAAA,EAA4B;AACpC,IAAA,IAAI;AACF,MAAA,MAAMA,sBAAAA,CAAM,IAAA;AAAA,QACV,CAAA,EAAG,KAAK,MAAM,CAAA,kBAAA,CAAA;AAAA,QACd;AAAA,UACE,SAAA,EAAW;AAAA,SACb;AAAA,QACA;AAAA,UACE,OAAA,EAAS,KAAK,UAAA;AAAW;AAC3B,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA2B,KAAA,CAAgB,OAAO,CAAA,CAAE,CAAA;AAAA,IACtE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAM,GAAA,EAA4B;AACtC,IAAA,IAAI;AACF,MAAA,MAAMA,uBAAM,MAAA,CAAO,CAAA,EAAG,KAAK,MAAM,CAAA,eAAA,EAAkB,GAAG,CAAA,CAAA,EAAI;AAAA,QACxD,OAAA,EAAS,KAAK,UAAA;AAAW,OAC1B,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA6B,KAAA,CAAgB,OAAO,CAAA,CAAE,CAAA;AAAA,IACxE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAA,GAAuC;AAC3C,IAAA,IAAI;AACF,MAAA,MAAMA,sBAAAA,CAAM,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,wBAAA,CAAA,EAA4B;AAAA,QACxD,OAAA,EAAS,KAAK,UAAA;AAAW,OAC1B,CAAA;AACD,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACF;;;AC5IO,IAAM,cAAN,MAA6C;AAAA,EAC1C,OAAA;AAAA,EAER,YAAY,MAAA,EAAoB;AAC9B,IAAA,IAAA,CAAK,OAAA,GAAU;AAAA,MACb,OAAA,EAAS,SAAA;AAAA,MACT,KAAA,EAAO,UAAA;AAAA,MACP,GAAG;AAAA,KACL;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,4BAAA,EAA+B,IAAA,CAAK,OAAA,CAAQ,OAAO,CAAA,CAAE,CAAA;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,MAAA,CAAO,KAAA,EAAiC,QAAA,EAAiD;AAC7F,IAAA,IAAI;AAEF,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IAmBF,SAAS,KAAA,EAAY;AACnB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,IACxD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,GAAA,EAA8B;AAC3C,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,oBAAA,EAAuB,GAAG,CAAA,CAAE,CAAA;AACzD,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,WAAA,EAAY;AACxC,MAAA,OAAO,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,IACzB,SAAS,KAAA,EAAY;AACnB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,IAC1D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,IAAI,IAAA,EAA6B;AAAA,EAEvC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAM,IAAA,EAA6B;AAAA,EAEzC;AACF","file":"index.js","sourcesContent":["/**\n * Local IPFS Storage Provider\n * Uses HTTP API client to interact with local IPFS daemon\n */\n\nimport axios from 'axios';\nimport { StorageProvider, UploadOptions, UploadResult } from '../../types';\n\nexport class IPFSLocalStorage implements StorageProvider {\n private apiUrl: string;\n private gatewayUrl: string;\n\n constructor(apiUrl: string = 'http://localhost:5001', gatewayUrl: string = 'http://localhost:8080') {\n this.apiUrl = apiUrl;\n this.gatewayUrl = gatewayUrl;\n }\n\n /**\n * Upload data to local IPFS\n */\n async upload(data: Buffer | string | object, options?: UploadOptions): Promise<UploadResult> {\n try {\n let buffer: Buffer;\n\n // Convert data to buffer\n if (Buffer.isBuffer(data)) {\n buffer = data;\n } else if (typeof data === 'string') {\n buffer = Buffer.from(data, 'utf-8');\n } else {\n buffer = Buffer.from(JSON.stringify(data), 'utf-8');\n }\n\n // Create form data\n const formData = new FormData();\n const blob = new Blob([buffer], { type: options?.mime || 'application/octet-stream' });\n formData.append('file', blob);\n\n // Upload to IPFS\n const response = await axios.post(`${this.apiUrl}/api/v0/add`, formData, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n params: {\n pin: options?.pin !== false, // Pin by default\n },\n });\n\n const cid = response.data.Hash;\n\n return {\n cid,\n uri: `ipfs://${cid}`,\n size: response.data.Size,\n };\n } catch (error) {\n throw new Error(`Failed to upload to IPFS: ${(error as Error).message}`);\n }\n }\n\n /**\n * Download data from IPFS\n */\n async download(cid: string): Promise<Buffer> {\n try {\n const response = await axios.get(`${this.gatewayUrl}/ipfs/${cid}`, {\n responseType: 'arraybuffer',\n });\n\n return Buffer.from(response.data);\n } catch (error) {\n throw new Error(`Failed to download from IPFS: ${(error as Error).message}`);\n }\n }\n\n /**\n * Pin content\n */\n async pin(cid: string): Promise<void> {\n try {\n await axios.post(`${this.apiUrl}/api/v0/pin/add`, null, {\n params: { arg: cid },\n });\n } catch (error) {\n throw new Error(`Failed to pin content: ${(error as Error).message}`);\n }\n }\n\n /**\n * Unpin content\n */\n async unpin(cid: string): Promise<void> {\n try {\n await axios.post(`${this.apiUrl}/api/v0/pin/rm`, null, {\n params: { arg: cid },\n });\n } catch (error) {\n throw new Error(`Failed to unpin content: ${(error as Error).message}`);\n }\n }\n\n /**\n * Check if IPFS daemon is running\n */\n async isAvailable(): Promise<boolean> {\n try {\n await axios.post(`${this.apiUrl}/api/v0/version`);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Get IPFS version\n */\n async getVersion(): Promise<string> {\n try {\n const response = await axios.post(`${this.apiUrl}/api/v0/version`);\n return response.data.Version;\n } catch (error) {\n throw new Error(`Failed to get IPFS version: ${(error as Error).message}`);\n }\n }\n}\n\n","/**\n * Pinata IPFS Storage Provider\n * Cloud-based IPFS pinning service\n */\n\nimport axios from 'axios';\nimport { StorageProvider, UploadOptions, UploadResult } from '../../types';\n\nexport interface PinataConfig {\n apiKey?: string;\n apiSecret?: string;\n jwt?: string;\n gatewayUrl?: string;\n}\n\nexport class PinataStorage implements StorageProvider {\n private apiKey?: string;\n private apiSecret?: string;\n private jwt?: string;\n private gatewayUrl: string;\n private apiUrl: string = 'https://api.pinata.cloud';\n\n constructor(config: PinataConfig) {\n this.apiKey = config.apiKey;\n this.apiSecret = config.apiSecret;\n this.jwt = config.jwt;\n this.gatewayUrl = config.gatewayUrl || 'https://gateway.pinata.cloud';\n\n if (!this.jwt && (!this.apiKey || !this.apiSecret)) {\n throw new Error('Pinata requires either JWT or API key/secret');\n }\n }\n\n /**\n * Get authorization headers\n */\n private getHeaders(): Record<string, string> {\n if (this.jwt) {\n return {\n Authorization: `Bearer ${this.jwt}`,\n };\n }\n return {\n pinata_api_key: this.apiKey!,\n pinata_secret_api_key: this.apiSecret!,\n };\n }\n\n /**\n * Upload data to Pinata\n */\n async upload(data: Buffer | string | object, options?: UploadOptions): Promise<UploadResult> {\n try {\n let buffer: Buffer;\n\n // Convert data to buffer\n if (Buffer.isBuffer(data)) {\n buffer = data;\n } else if (typeof data === 'string') {\n buffer = Buffer.from(data, 'utf-8');\n } else {\n buffer = Buffer.from(JSON.stringify(data), 'utf-8');\n }\n\n // Create form data\n const formData = new FormData();\n const blob = new Blob([buffer], { type: options?.mime || 'application/octet-stream' });\n formData.append('file', blob, 'file');\n\n // Add metadata if provided\n if (options?.metadata) {\n formData.append('pinataMetadata', JSON.stringify(options.metadata));\n }\n\n // Upload to Pinata\n const response = await axios.post(`${this.apiUrl}/pinning/pinFileToIPFS`, formData, {\n headers: {\n ...this.getHeaders(),\n 'Content-Type': 'multipart/form-data',\n },\n });\n\n const cid = response.data.IpfsHash;\n\n return {\n cid,\n uri: `ipfs://${cid}`,\n size: response.data.PinSize,\n };\n } catch (error) {\n throw new Error(`Failed to upload to Pinata: ${(error as Error).message}`);\n }\n }\n\n /**\n * Download data from Pinata gateway\n */\n async download(cid: string): Promise<Buffer> {\n try {\n const response = await axios.get(`${this.gatewayUrl}/ipfs/${cid}`, {\n responseType: 'arraybuffer',\n });\n\n return Buffer.from(response.data);\n } catch (error) {\n throw new Error(`Failed to download from Pinata: ${(error as Error).message}`);\n }\n }\n\n /**\n * Pin existing IPFS content\n */\n async pin(cid: string): Promise<void> {\n try {\n await axios.post(\n `${this.apiUrl}/pinning/pinByHash`,\n {\n hashToPin: cid,\n },\n {\n headers: this.getHeaders(),\n }\n );\n } catch (error) {\n throw new Error(`Failed to pin content: ${(error as Error).message}`);\n }\n }\n\n /**\n * Unpin content\n */\n async unpin(cid: string): Promise<void> {\n try {\n await axios.delete(`${this.apiUrl}/pinning/unpin/${cid}`, {\n headers: this.getHeaders(),\n });\n } catch (error) {\n throw new Error(`Failed to unpin content: ${(error as Error).message}`);\n }\n }\n\n /**\n * Test authentication\n */\n async testAuthentication(): Promise<boolean> {\n try {\n await axios.get(`${this.apiUrl}/data/testAuthentication`, {\n headers: this.getHeaders(),\n });\n return true;\n } catch {\n return false;\n }\n }\n}\n\n","/**\n * Irys (Arweave) storage provider for ChaosChain SDK\n * Provides permanent storage via Arweave blockchain\n */\n\nimport { StorageProvider, UploadOptions, UploadResult } from '../../types';\n\nexport interface IrysConfig {\n walletKey: string;\n network?: 'mainnet' | 'devnet';\n token?: string;\n providerUrl?: string;\n}\n\nexport class IrysStorage implements StorageProvider {\n private _config: IrysConfig;\n\n constructor(config: IrysConfig) {\n this._config = {\n network: 'mainnet' as 'mainnet' | 'devnet',\n token: 'ethereum',\n ...config,\n };\n // Config stored for future use when @irys/sdk is installed\n console.log(`Irys storage configured for ${this._config.network}`);\n }\n\n /**\n * Upload data to Arweave via Irys\n * Note: Requires @irys/sdk to be installed\n */\n async upload(_data: Buffer | string | object, _options?: UploadOptions): Promise<UploadResult> {\n try {\n // This is a placeholder - actual implementation requires @irys/sdk\n throw new Error(\n 'Irys storage requires @irys/sdk to be installed: npm install @irys/sdk'\n );\n\n // In production with @irys/sdk installed:\n // const Irys = require('@irys/sdk').default;\n // const irys = new Irys({\n // network: this._config.network,\n // token: this._config.token,\n // key: this._config.walletKey,\n // });\n //\n // const buffer = this.toBuffer(_data);\n // const tx = await irys.upload(buffer, {\n // tags: [{ name: 'Content-Type', value: _options?.contentType || 'application/json' }],\n // });\n //\n // return {\n // cid: tx.id,\n // uri: `https://arweave.net/${tx.id}`,\n // };\n } catch (error: any) {\n throw new Error(`Irys upload failed: ${error.message}`);\n }\n }\n\n /**\n * Download data from Arweave\n */\n async download(cid: string): Promise<Buffer> {\n try {\n const response = await fetch(`https://arweave.net/${cid}`);\n const data = await response.arrayBuffer();\n return Buffer.from(data);\n } catch (error: any) {\n throw new Error(`Irys download failed: ${error.message}`);\n }\n }\n\n /**\n * Pin - no-op for Arweave (content is permanent)\n */\n async pin(_cid: string): Promise<void> {\n // No-op: Arweave content is permanent\n }\n\n /**\n * Unpin - no-op for Arweave (content is permanent)\n */\n async unpin(_cid: string): Promise<void> {\n // No-op: Arweave content is permanent\n }\n}\n"]}
@@ -0,0 +1,278 @@
1
+ import axios from 'axios';
2
+
3
+ // src/providers/storage/IPFSLocal.ts
4
+ var IPFSLocalStorage = class {
5
+ apiUrl;
6
+ gatewayUrl;
7
+ constructor(apiUrl = "http://localhost:5001", gatewayUrl = "http://localhost:8080") {
8
+ this.apiUrl = apiUrl;
9
+ this.gatewayUrl = gatewayUrl;
10
+ }
11
+ /**
12
+ * Upload data to local IPFS
13
+ */
14
+ async upload(data, options) {
15
+ try {
16
+ let buffer;
17
+ if (Buffer.isBuffer(data)) {
18
+ buffer = data;
19
+ } else if (typeof data === "string") {
20
+ buffer = Buffer.from(data, "utf-8");
21
+ } else {
22
+ buffer = Buffer.from(JSON.stringify(data), "utf-8");
23
+ }
24
+ const formData = new FormData();
25
+ const blob = new Blob([buffer], { type: options?.mime || "application/octet-stream" });
26
+ formData.append("file", blob);
27
+ const response = await axios.post(`${this.apiUrl}/api/v0/add`, formData, {
28
+ headers: {
29
+ "Content-Type": "multipart/form-data"
30
+ },
31
+ params: {
32
+ pin: options?.pin !== false
33
+ // Pin by default
34
+ }
35
+ });
36
+ const cid = response.data.Hash;
37
+ return {
38
+ cid,
39
+ uri: `ipfs://${cid}`,
40
+ size: response.data.Size
41
+ };
42
+ } catch (error) {
43
+ throw new Error(`Failed to upload to IPFS: ${error.message}`);
44
+ }
45
+ }
46
+ /**
47
+ * Download data from IPFS
48
+ */
49
+ async download(cid) {
50
+ try {
51
+ const response = await axios.get(`${this.gatewayUrl}/ipfs/${cid}`, {
52
+ responseType: "arraybuffer"
53
+ });
54
+ return Buffer.from(response.data);
55
+ } catch (error) {
56
+ throw new Error(`Failed to download from IPFS: ${error.message}`);
57
+ }
58
+ }
59
+ /**
60
+ * Pin content
61
+ */
62
+ async pin(cid) {
63
+ try {
64
+ await axios.post(`${this.apiUrl}/api/v0/pin/add`, null, {
65
+ params: { arg: cid }
66
+ });
67
+ } catch (error) {
68
+ throw new Error(`Failed to pin content: ${error.message}`);
69
+ }
70
+ }
71
+ /**
72
+ * Unpin content
73
+ */
74
+ async unpin(cid) {
75
+ try {
76
+ await axios.post(`${this.apiUrl}/api/v0/pin/rm`, null, {
77
+ params: { arg: cid }
78
+ });
79
+ } catch (error) {
80
+ throw new Error(`Failed to unpin content: ${error.message}`);
81
+ }
82
+ }
83
+ /**
84
+ * Check if IPFS daemon is running
85
+ */
86
+ async isAvailable() {
87
+ try {
88
+ await axios.post(`${this.apiUrl}/api/v0/version`);
89
+ return true;
90
+ } catch {
91
+ return false;
92
+ }
93
+ }
94
+ /**
95
+ * Get IPFS version
96
+ */
97
+ async getVersion() {
98
+ try {
99
+ const response = await axios.post(`${this.apiUrl}/api/v0/version`);
100
+ return response.data.Version;
101
+ } catch (error) {
102
+ throw new Error(`Failed to get IPFS version: ${error.message}`);
103
+ }
104
+ }
105
+ };
106
+ var PinataStorage = class {
107
+ apiKey;
108
+ apiSecret;
109
+ jwt;
110
+ gatewayUrl;
111
+ apiUrl = "https://api.pinata.cloud";
112
+ constructor(config) {
113
+ this.apiKey = config.apiKey;
114
+ this.apiSecret = config.apiSecret;
115
+ this.jwt = config.jwt;
116
+ this.gatewayUrl = config.gatewayUrl || "https://gateway.pinata.cloud";
117
+ if (!this.jwt && (!this.apiKey || !this.apiSecret)) {
118
+ throw new Error("Pinata requires either JWT or API key/secret");
119
+ }
120
+ }
121
+ /**
122
+ * Get authorization headers
123
+ */
124
+ getHeaders() {
125
+ if (this.jwt) {
126
+ return {
127
+ Authorization: `Bearer ${this.jwt}`
128
+ };
129
+ }
130
+ return {
131
+ pinata_api_key: this.apiKey,
132
+ pinata_secret_api_key: this.apiSecret
133
+ };
134
+ }
135
+ /**
136
+ * Upload data to Pinata
137
+ */
138
+ async upload(data, options) {
139
+ try {
140
+ let buffer;
141
+ if (Buffer.isBuffer(data)) {
142
+ buffer = data;
143
+ } else if (typeof data === "string") {
144
+ buffer = Buffer.from(data, "utf-8");
145
+ } else {
146
+ buffer = Buffer.from(JSON.stringify(data), "utf-8");
147
+ }
148
+ const formData = new FormData();
149
+ const blob = new Blob([buffer], { type: options?.mime || "application/octet-stream" });
150
+ formData.append("file", blob, "file");
151
+ if (options?.metadata) {
152
+ formData.append("pinataMetadata", JSON.stringify(options.metadata));
153
+ }
154
+ const response = await axios.post(`${this.apiUrl}/pinning/pinFileToIPFS`, formData, {
155
+ headers: {
156
+ ...this.getHeaders(),
157
+ "Content-Type": "multipart/form-data"
158
+ }
159
+ });
160
+ const cid = response.data.IpfsHash;
161
+ return {
162
+ cid,
163
+ uri: `ipfs://${cid}`,
164
+ size: response.data.PinSize
165
+ };
166
+ } catch (error) {
167
+ throw new Error(`Failed to upload to Pinata: ${error.message}`);
168
+ }
169
+ }
170
+ /**
171
+ * Download data from Pinata gateway
172
+ */
173
+ async download(cid) {
174
+ try {
175
+ const response = await axios.get(`${this.gatewayUrl}/ipfs/${cid}`, {
176
+ responseType: "arraybuffer"
177
+ });
178
+ return Buffer.from(response.data);
179
+ } catch (error) {
180
+ throw new Error(`Failed to download from Pinata: ${error.message}`);
181
+ }
182
+ }
183
+ /**
184
+ * Pin existing IPFS content
185
+ */
186
+ async pin(cid) {
187
+ try {
188
+ await axios.post(
189
+ `${this.apiUrl}/pinning/pinByHash`,
190
+ {
191
+ hashToPin: cid
192
+ },
193
+ {
194
+ headers: this.getHeaders()
195
+ }
196
+ );
197
+ } catch (error) {
198
+ throw new Error(`Failed to pin content: ${error.message}`);
199
+ }
200
+ }
201
+ /**
202
+ * Unpin content
203
+ */
204
+ async unpin(cid) {
205
+ try {
206
+ await axios.delete(`${this.apiUrl}/pinning/unpin/${cid}`, {
207
+ headers: this.getHeaders()
208
+ });
209
+ } catch (error) {
210
+ throw new Error(`Failed to unpin content: ${error.message}`);
211
+ }
212
+ }
213
+ /**
214
+ * Test authentication
215
+ */
216
+ async testAuthentication() {
217
+ try {
218
+ await axios.get(`${this.apiUrl}/data/testAuthentication`, {
219
+ headers: this.getHeaders()
220
+ });
221
+ return true;
222
+ } catch {
223
+ return false;
224
+ }
225
+ }
226
+ };
227
+
228
+ // src/providers/storage/Irys.ts
229
+ var IrysStorage = class {
230
+ _config;
231
+ constructor(config) {
232
+ this._config = {
233
+ network: "mainnet",
234
+ token: "ethereum",
235
+ ...config
236
+ };
237
+ console.log(`Irys storage configured for ${this._config.network}`);
238
+ }
239
+ /**
240
+ * Upload data to Arweave via Irys
241
+ * Note: Requires @irys/sdk to be installed
242
+ */
243
+ async upload(_data, _options) {
244
+ try {
245
+ throw new Error(
246
+ "Irys storage requires @irys/sdk to be installed: npm install @irys/sdk"
247
+ );
248
+ } catch (error) {
249
+ throw new Error(`Irys upload failed: ${error.message}`);
250
+ }
251
+ }
252
+ /**
253
+ * Download data from Arweave
254
+ */
255
+ async download(cid) {
256
+ try {
257
+ const response = await fetch(`https://arweave.net/${cid}`);
258
+ const data = await response.arrayBuffer();
259
+ return Buffer.from(data);
260
+ } catch (error) {
261
+ throw new Error(`Irys download failed: ${error.message}`);
262
+ }
263
+ }
264
+ /**
265
+ * Pin - no-op for Arweave (content is permanent)
266
+ */
267
+ async pin(_cid) {
268
+ }
269
+ /**
270
+ * Unpin - no-op for Arweave (content is permanent)
271
+ */
272
+ async unpin(_cid) {
273
+ }
274
+ };
275
+
276
+ export { IPFSLocalStorage, IrysStorage, PinataStorage };
277
+ //# sourceMappingURL=index.mjs.map
278
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/providers/storage/IPFSLocal.ts","../../../src/providers/storage/IPFSPinata.ts","../../../src/providers/storage/Irys.ts"],"names":["axios"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Local IPFS Storage Provider\n * Uses HTTP API client to interact with local IPFS daemon\n */\n\nimport axios from 'axios';\nimport { StorageProvider, UploadOptions, UploadResult } from '../../types';\n\nexport class IPFSLocalStorage implements StorageProvider {\n private apiUrl: string;\n private gatewayUrl: string;\n\n constructor(apiUrl: string = 'http://localhost:5001', gatewayUrl: string = 'http://localhost:8080') {\n this.apiUrl = apiUrl;\n this.gatewayUrl = gatewayUrl;\n }\n\n /**\n * Upload data to local IPFS\n */\n async upload(data: Buffer | string | object, options?: UploadOptions): Promise<UploadResult> {\n try {\n let buffer: Buffer;\n\n // Convert data to buffer\n if (Buffer.isBuffer(data)) {\n buffer = data;\n } else if (typeof data === 'string') {\n buffer = Buffer.from(data, 'utf-8');\n } else {\n buffer = Buffer.from(JSON.stringify(data), 'utf-8');\n }\n\n // Create form data\n const formData = new FormData();\n const blob = new Blob([buffer], { type: options?.mime || 'application/octet-stream' });\n formData.append('file', blob);\n\n // Upload to IPFS\n const response = await axios.post(`${this.apiUrl}/api/v0/add`, formData, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n params: {\n pin: options?.pin !== false, // Pin by default\n },\n });\n\n const cid = response.data.Hash;\n\n return {\n cid,\n uri: `ipfs://${cid}`,\n size: response.data.Size,\n };\n } catch (error) {\n throw new Error(`Failed to upload to IPFS: ${(error as Error).message}`);\n }\n }\n\n /**\n * Download data from IPFS\n */\n async download(cid: string): Promise<Buffer> {\n try {\n const response = await axios.get(`${this.gatewayUrl}/ipfs/${cid}`, {\n responseType: 'arraybuffer',\n });\n\n return Buffer.from(response.data);\n } catch (error) {\n throw new Error(`Failed to download from IPFS: ${(error as Error).message}`);\n }\n }\n\n /**\n * Pin content\n */\n async pin(cid: string): Promise<void> {\n try {\n await axios.post(`${this.apiUrl}/api/v0/pin/add`, null, {\n params: { arg: cid },\n });\n } catch (error) {\n throw new Error(`Failed to pin content: ${(error as Error).message}`);\n }\n }\n\n /**\n * Unpin content\n */\n async unpin(cid: string): Promise<void> {\n try {\n await axios.post(`${this.apiUrl}/api/v0/pin/rm`, null, {\n params: { arg: cid },\n });\n } catch (error) {\n throw new Error(`Failed to unpin content: ${(error as Error).message}`);\n }\n }\n\n /**\n * Check if IPFS daemon is running\n */\n async isAvailable(): Promise<boolean> {\n try {\n await axios.post(`${this.apiUrl}/api/v0/version`);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Get IPFS version\n */\n async getVersion(): Promise<string> {\n try {\n const response = await axios.post(`${this.apiUrl}/api/v0/version`);\n return response.data.Version;\n } catch (error) {\n throw new Error(`Failed to get IPFS version: ${(error as Error).message}`);\n }\n }\n}\n\n","/**\n * Pinata IPFS Storage Provider\n * Cloud-based IPFS pinning service\n */\n\nimport axios from 'axios';\nimport { StorageProvider, UploadOptions, UploadResult } from '../../types';\n\nexport interface PinataConfig {\n apiKey?: string;\n apiSecret?: string;\n jwt?: string;\n gatewayUrl?: string;\n}\n\nexport class PinataStorage implements StorageProvider {\n private apiKey?: string;\n private apiSecret?: string;\n private jwt?: string;\n private gatewayUrl: string;\n private apiUrl: string = 'https://api.pinata.cloud';\n\n constructor(config: PinataConfig) {\n this.apiKey = config.apiKey;\n this.apiSecret = config.apiSecret;\n this.jwt = config.jwt;\n this.gatewayUrl = config.gatewayUrl || 'https://gateway.pinata.cloud';\n\n if (!this.jwt && (!this.apiKey || !this.apiSecret)) {\n throw new Error('Pinata requires either JWT or API key/secret');\n }\n }\n\n /**\n * Get authorization headers\n */\n private getHeaders(): Record<string, string> {\n if (this.jwt) {\n return {\n Authorization: `Bearer ${this.jwt}`,\n };\n }\n return {\n pinata_api_key: this.apiKey!,\n pinata_secret_api_key: this.apiSecret!,\n };\n }\n\n /**\n * Upload data to Pinata\n */\n async upload(data: Buffer | string | object, options?: UploadOptions): Promise<UploadResult> {\n try {\n let buffer: Buffer;\n\n // Convert data to buffer\n if (Buffer.isBuffer(data)) {\n buffer = data;\n } else if (typeof data === 'string') {\n buffer = Buffer.from(data, 'utf-8');\n } else {\n buffer = Buffer.from(JSON.stringify(data), 'utf-8');\n }\n\n // Create form data\n const formData = new FormData();\n const blob = new Blob([buffer], { type: options?.mime || 'application/octet-stream' });\n formData.append('file', blob, 'file');\n\n // Add metadata if provided\n if (options?.metadata) {\n formData.append('pinataMetadata', JSON.stringify(options.metadata));\n }\n\n // Upload to Pinata\n const response = await axios.post(`${this.apiUrl}/pinning/pinFileToIPFS`, formData, {\n headers: {\n ...this.getHeaders(),\n 'Content-Type': 'multipart/form-data',\n },\n });\n\n const cid = response.data.IpfsHash;\n\n return {\n cid,\n uri: `ipfs://${cid}`,\n size: response.data.PinSize,\n };\n } catch (error) {\n throw new Error(`Failed to upload to Pinata: ${(error as Error).message}`);\n }\n }\n\n /**\n * Download data from Pinata gateway\n */\n async download(cid: string): Promise<Buffer> {\n try {\n const response = await axios.get(`${this.gatewayUrl}/ipfs/${cid}`, {\n responseType: 'arraybuffer',\n });\n\n return Buffer.from(response.data);\n } catch (error) {\n throw new Error(`Failed to download from Pinata: ${(error as Error).message}`);\n }\n }\n\n /**\n * Pin existing IPFS content\n */\n async pin(cid: string): Promise<void> {\n try {\n await axios.post(\n `${this.apiUrl}/pinning/pinByHash`,\n {\n hashToPin: cid,\n },\n {\n headers: this.getHeaders(),\n }\n );\n } catch (error) {\n throw new Error(`Failed to pin content: ${(error as Error).message}`);\n }\n }\n\n /**\n * Unpin content\n */\n async unpin(cid: string): Promise<void> {\n try {\n await axios.delete(`${this.apiUrl}/pinning/unpin/${cid}`, {\n headers: this.getHeaders(),\n });\n } catch (error) {\n throw new Error(`Failed to unpin content: ${(error as Error).message}`);\n }\n }\n\n /**\n * Test authentication\n */\n async testAuthentication(): Promise<boolean> {\n try {\n await axios.get(`${this.apiUrl}/data/testAuthentication`, {\n headers: this.getHeaders(),\n });\n return true;\n } catch {\n return false;\n }\n }\n}\n\n","/**\n * Irys (Arweave) storage provider for ChaosChain SDK\n * Provides permanent storage via Arweave blockchain\n */\n\nimport { StorageProvider, UploadOptions, UploadResult } from '../../types';\n\nexport interface IrysConfig {\n walletKey: string;\n network?: 'mainnet' | 'devnet';\n token?: string;\n providerUrl?: string;\n}\n\nexport class IrysStorage implements StorageProvider {\n private _config: IrysConfig;\n\n constructor(config: IrysConfig) {\n this._config = {\n network: 'mainnet' as 'mainnet' | 'devnet',\n token: 'ethereum',\n ...config,\n };\n // Config stored for future use when @irys/sdk is installed\n console.log(`Irys storage configured for ${this._config.network}`);\n }\n\n /**\n * Upload data to Arweave via Irys\n * Note: Requires @irys/sdk to be installed\n */\n async upload(_data: Buffer | string | object, _options?: UploadOptions): Promise<UploadResult> {\n try {\n // This is a placeholder - actual implementation requires @irys/sdk\n throw new Error(\n 'Irys storage requires @irys/sdk to be installed: npm install @irys/sdk'\n );\n\n // In production with @irys/sdk installed:\n // const Irys = require('@irys/sdk').default;\n // const irys = new Irys({\n // network: this._config.network,\n // token: this._config.token,\n // key: this._config.walletKey,\n // });\n //\n // const buffer = this.toBuffer(_data);\n // const tx = await irys.upload(buffer, {\n // tags: [{ name: 'Content-Type', value: _options?.contentType || 'application/json' }],\n // });\n //\n // return {\n // cid: tx.id,\n // uri: `https://arweave.net/${tx.id}`,\n // };\n } catch (error: any) {\n throw new Error(`Irys upload failed: ${error.message}`);\n }\n }\n\n /**\n * Download data from Arweave\n */\n async download(cid: string): Promise<Buffer> {\n try {\n const response = await fetch(`https://arweave.net/${cid}`);\n const data = await response.arrayBuffer();\n return Buffer.from(data);\n } catch (error: any) {\n throw new Error(`Irys download failed: ${error.message}`);\n }\n }\n\n /**\n * Pin - no-op for Arweave (content is permanent)\n */\n async pin(_cid: string): Promise<void> {\n // No-op: Arweave content is permanent\n }\n\n /**\n * Unpin - no-op for Arweave (content is permanent)\n */\n async unpin(_cid: string): Promise<void> {\n // No-op: Arweave content is permanent\n }\n}\n"]}