@fluxpointstudios/orynq-sdk-storage-adapters 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.
Files changed (50) hide show
  1. package/LICENSE +21 -0
  2. package/dist/adapters/arweave/arweave-adapter.d.ts +52 -0
  3. package/dist/adapters/arweave/arweave-adapter.d.ts.map +1 -0
  4. package/dist/adapters/arweave/arweave-adapter.js +200 -0
  5. package/dist/adapters/arweave/arweave-adapter.js.map +1 -0
  6. package/dist/adapters/arweave/index.d.ts +2 -0
  7. package/dist/adapters/arweave/index.d.ts.map +1 -0
  8. package/dist/adapters/arweave/index.js +2 -0
  9. package/dist/adapters/arweave/index.js.map +1 -0
  10. package/dist/adapters/ipfs/index.d.ts +3 -0
  11. package/dist/adapters/ipfs/index.d.ts.map +1 -0
  12. package/dist/adapters/ipfs/index.js +3 -0
  13. package/dist/adapters/ipfs/index.js.map +1 -0
  14. package/dist/adapters/ipfs/ipfs-adapter.d.ts +51 -0
  15. package/dist/adapters/ipfs/ipfs-adapter.d.ts.map +1 -0
  16. package/dist/adapters/ipfs/ipfs-adapter.js +186 -0
  17. package/dist/adapters/ipfs/ipfs-adapter.js.map +1 -0
  18. package/dist/adapters/ipfs/pinning-service.d.ts +68 -0
  19. package/dist/adapters/ipfs/pinning-service.d.ts.map +1 -0
  20. package/dist/adapters/ipfs/pinning-service.js +249 -0
  21. package/dist/adapters/ipfs/pinning-service.js.map +1 -0
  22. package/dist/adapters/s3/index.d.ts +2 -0
  23. package/dist/adapters/s3/index.d.ts.map +1 -0
  24. package/dist/adapters/s3/index.js +2 -0
  25. package/dist/adapters/s3/index.js.map +1 -0
  26. package/dist/adapters/s3/s3-adapter.d.ts +79 -0
  27. package/dist/adapters/s3/s3-adapter.d.ts.map +1 -0
  28. package/dist/adapters/s3/s3-adapter.js +275 -0
  29. package/dist/adapters/s3/s3-adapter.js.map +1 -0
  30. package/dist/index.d.ts +40 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +43 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/types.d.ts +182 -0
  35. package/dist/types.d.ts.map +1 -0
  36. package/dist/types.js +27 -0
  37. package/dist/types.js.map +1 -0
  38. package/dist/utils/content-addressing.d.ts +50 -0
  39. package/dist/utils/content-addressing.d.ts.map +1 -0
  40. package/dist/utils/content-addressing.js +101 -0
  41. package/dist/utils/content-addressing.js.map +1 -0
  42. package/dist/utils/index.d.ts +3 -0
  43. package/dist/utils/index.d.ts.map +1 -0
  44. package/dist/utils/index.js +3 -0
  45. package/dist/utils/index.js.map +1 -0
  46. package/dist/utils/replication.d.ts +64 -0
  47. package/dist/utils/replication.d.ts.map +1 -0
  48. package/dist/utils/replication.js +217 -0
  49. package/dist/utils/replication.js.map +1 -0
  50. package/package.json +68 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Flux Point Studios
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Arweave Storage Adapter.
3
+ * Stores data permanently on the Arweave network.
4
+ */
5
+ import type { StorageAdapter, StorageRef, StorableManifest, ArweaveAdapterConfig } from "../../types.js";
6
+ /**
7
+ * Storage adapter for Arweave permanent storage.
8
+ */
9
+ export declare class ArweaveAdapter implements StorageAdapter {
10
+ readonly type: "arweave";
11
+ private readonly gateway;
12
+ private readonly wallet;
13
+ private readonly timeoutMs;
14
+ private arweaveClient;
15
+ constructor(config: ArweaveAdapterConfig);
16
+ /**
17
+ * Store data on Arweave.
18
+ */
19
+ store(data: Uint8Array): Promise<StorageRef>;
20
+ /**
21
+ * Store a manifest on Arweave.
22
+ */
23
+ storeManifest(manifest: StorableManifest): Promise<StorageRef>;
24
+ /**
25
+ * Fetch data from Arweave.
26
+ */
27
+ fetch(ref: StorageRef): Promise<Uint8Array>;
28
+ /**
29
+ * Fetch a manifest from Arweave.
30
+ */
31
+ fetchManifest(ref: StorageRef): Promise<StorableManifest>;
32
+ /**
33
+ * Verify data integrity.
34
+ */
35
+ verify(ref: StorageRef): Promise<boolean>;
36
+ /**
37
+ * Check if a transaction is confirmed.
38
+ */
39
+ isConfirmed(ref: StorageRef): Promise<boolean>;
40
+ /**
41
+ * Get the gateway URL for a reference.
42
+ */
43
+ getGatewayUrl(ref: StorageRef): string;
44
+ private getArweaveClient;
45
+ private uploadData;
46
+ private extractTxId;
47
+ }
48
+ /**
49
+ * Create an Arweave storage adapter.
50
+ */
51
+ export declare function createArweaveAdapter(config?: ArweaveAdapterConfig): ArweaveAdapter;
52
+ //# sourceMappingURL=arweave-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arweave-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/arweave/arweave-adapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EAErB,MAAM,gBAAgB,CAAC;AAyBxB;;GAEG;AACH,qBAAa,cAAe,YAAW,cAAc;IACnD,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC,OAAO,CAAC,aAAa,CAA4B;gBAErC,MAAM,EAAE,oBAAoB;IAMxC;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAsBlD;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IA0BpE;;OAEG;IACG,KAAK,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAmCjD;;OAEG;IACG,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAe/D;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAU/C;;OAEG;IACG,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAYpD;;OAEG;IACH,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM;YAOxB,gBAAgB;YA0BhB,UAAU;IAqCxB,OAAO,CAAC,WAAW;CAcpB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,oBAAyB,GAAG,cAAc,CAEtF"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Arweave Storage Adapter.
3
+ * Stores data permanently on the Arweave network.
4
+ */
5
+ import { StorageError, StorageException } from "../../types.js";
6
+ import { sha256 } from "../../utils/content-addressing.js";
7
+ /**
8
+ * Storage adapter for Arweave permanent storage.
9
+ */
10
+ export class ArweaveAdapter {
11
+ type = "arweave";
12
+ gateway;
13
+ wallet;
14
+ timeoutMs;
15
+ arweaveClient;
16
+ constructor(config) {
17
+ this.gateway = config.gateway ?? "https://arweave.net";
18
+ this.wallet = config.wallet;
19
+ this.timeoutMs = config.timeoutMs ?? 60000;
20
+ }
21
+ /**
22
+ * Store data on Arweave.
23
+ */
24
+ async store(data) {
25
+ if (!this.wallet) {
26
+ throw new StorageException(StorageError.INVALID_CONFIG, "Arweave wallet required for storing data");
27
+ }
28
+ const hash = sha256(data, "chunk");
29
+ const txId = await this.uploadData(data, [
30
+ { name: "Content-Type", value: "application/octet-stream" },
31
+ { name: "poi-hash", value: hash },
32
+ ]);
33
+ return {
34
+ type: "arweave",
35
+ uri: `ar://${txId}`,
36
+ hash,
37
+ size: data.length,
38
+ };
39
+ }
40
+ /**
41
+ * Store a manifest on Arweave.
42
+ */
43
+ async storeManifest(manifest) {
44
+ if (!this.wallet) {
45
+ throw new StorageException(StorageError.INVALID_CONFIG, "Arweave wallet required for storing data");
46
+ }
47
+ const json = JSON.stringify(manifest, null, 2);
48
+ const data = new TextEncoder().encode(json);
49
+ const hash = manifest.manifestHash ?? sha256(data, "manifest");
50
+ const txId = await this.uploadData(data, [
51
+ { name: "Content-Type", value: "application/json" },
52
+ { name: "poi-hash", value: hash },
53
+ { name: "poi-session", value: manifest.sessionId },
54
+ ]);
55
+ return {
56
+ type: "arweave",
57
+ uri: `ar://${txId}`,
58
+ hash,
59
+ size: data.length,
60
+ };
61
+ }
62
+ /**
63
+ * Fetch data from Arweave.
64
+ */
65
+ async fetch(ref) {
66
+ const txId = this.extractTxId(ref.uri);
67
+ try {
68
+ // Try gateway first for faster access
69
+ const response = await fetch(`${this.gateway}/${txId}`, {
70
+ signal: AbortSignal.timeout(this.timeoutMs),
71
+ });
72
+ if (!response.ok) {
73
+ throw new Error(`Gateway fetch failed: ${response.status}`);
74
+ }
75
+ const buffer = await response.arrayBuffer();
76
+ return new Uint8Array(buffer);
77
+ }
78
+ catch (error) {
79
+ // Fall back to Arweave client
80
+ try {
81
+ const client = await this.getArweaveClient();
82
+ const data = await client.transactions.getData(txId, { decode: true });
83
+ if (typeof data === "string") {
84
+ return new TextEncoder().encode(data);
85
+ }
86
+ return data;
87
+ }
88
+ catch (clientError) {
89
+ throw new StorageException(StorageError.FETCH_FAILED, `Failed to fetch from Arweave: ${error instanceof Error ? error.message : String(error)}`, error instanceof Error ? error : undefined);
90
+ }
91
+ }
92
+ }
93
+ /**
94
+ * Fetch a manifest from Arweave.
95
+ */
96
+ async fetchManifest(ref) {
97
+ const data = await this.fetch(ref);
98
+ const json = new TextDecoder().decode(data);
99
+ try {
100
+ return JSON.parse(json);
101
+ }
102
+ catch (error) {
103
+ throw new StorageException(StorageError.FETCH_FAILED, "Failed to parse manifest JSON", error instanceof Error ? error : undefined);
104
+ }
105
+ }
106
+ /**
107
+ * Verify data integrity.
108
+ */
109
+ async verify(ref) {
110
+ try {
111
+ const data = await this.fetch(ref);
112
+ const hash = sha256(data, "chunk");
113
+ return hash === ref.hash;
114
+ }
115
+ catch {
116
+ return false;
117
+ }
118
+ }
119
+ /**
120
+ * Check if a transaction is confirmed.
121
+ */
122
+ async isConfirmed(ref) {
123
+ const txId = this.extractTxId(ref.uri);
124
+ try {
125
+ const client = await this.getArweaveClient();
126
+ const status = await client.transactions.getStatus(txId);
127
+ return status.confirmed !== null;
128
+ }
129
+ catch {
130
+ return false;
131
+ }
132
+ }
133
+ /**
134
+ * Get the gateway URL for a reference.
135
+ */
136
+ getGatewayUrl(ref) {
137
+ const txId = this.extractTxId(ref.uri);
138
+ return `${this.gateway}/${txId}`;
139
+ }
140
+ // === Private Methods ===
141
+ async getArweaveClient() {
142
+ if (this.arweaveClient) {
143
+ return this.arweaveClient;
144
+ }
145
+ try {
146
+ const ArweaveLib = await import("arweave");
147
+ const Arweave = ArweaveLib.default;
148
+ const gatewayUrl = new URL(this.gateway);
149
+ this.arweaveClient = Arweave.init({
150
+ host: gatewayUrl.hostname,
151
+ port: gatewayUrl.port ? parseInt(gatewayUrl.port, 10) : 443,
152
+ protocol: gatewayUrl.protocol.replace(":", ""),
153
+ });
154
+ return this.arweaveClient;
155
+ }
156
+ catch (error) {
157
+ throw new StorageException(StorageError.INVALID_CONFIG, "Arweave library not available. Install arweave to use Arweave adapter.", error instanceof Error ? error : undefined);
158
+ }
159
+ }
160
+ async uploadData(data, tags) {
161
+ if (!this.wallet) {
162
+ throw new StorageException(StorageError.INVALID_CONFIG, "Arweave wallet required");
163
+ }
164
+ const client = await this.getArweaveClient();
165
+ try {
166
+ const tx = await client.createTransaction({ data }, this.wallet);
167
+ for (const tag of tags) {
168
+ tx.addTag(tag.name, tag.value);
169
+ }
170
+ await client.transactions.sign(tx, this.wallet);
171
+ const response = await client.transactions.post(tx);
172
+ if (response.status !== 200 && response.status !== 202) {
173
+ throw new Error(`Transaction post failed: ${response.status}`);
174
+ }
175
+ return tx.id;
176
+ }
177
+ catch (error) {
178
+ throw new StorageException(StorageError.STORE_FAILED, `Arweave upload failed: ${error instanceof Error ? error.message : String(error)}`, error instanceof Error ? error : undefined);
179
+ }
180
+ }
181
+ extractTxId(uri) {
182
+ // ar://txid
183
+ if (uri.startsWith("ar://")) {
184
+ return uri.slice(5);
185
+ }
186
+ // https://arweave.net/txid
187
+ const match = uri.match(/arweave\.net\/(\w+)/);
188
+ if (match?.[1]) {
189
+ return match[1];
190
+ }
191
+ return uri;
192
+ }
193
+ }
194
+ /**
195
+ * Create an Arweave storage adapter.
196
+ */
197
+ export function createArweaveAdapter(config = {}) {
198
+ return new ArweaveAdapter(config);
199
+ }
200
+ //# sourceMappingURL=arweave-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arweave-adapter.js","sourceRoot":"","sources":["../../../src/adapters/arweave/arweave-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { ArweaveAdapter, createArweaveAdapter } from "./arweave-adapter.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/arweave/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ArweaveAdapter, createArweaveAdapter } from "./arweave-adapter.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/arweave/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { IpfsAdapter, createIpfsAdapter } from "./ipfs-adapter.js";
2
+ export { type PinningService, PinataPinningService, InfuraPinningService, Web3StoragePinningService, createPinningService, } from "./pinning-service.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/ipfs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EACL,KAAK,cAAc,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { IpfsAdapter, createIpfsAdapter } from "./ipfs-adapter.js";
2
+ export { PinataPinningService, InfuraPinningService, Web3StoragePinningService, createPinningService, } from "./pinning-service.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/ipfs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAEL,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * IPFS Storage Adapter.
3
+ * Stores data on IPFS with optional pinning service integration.
4
+ */
5
+ import type { StorageAdapter, StorageRef, StorableManifest, IpfsAdapterConfig } from "../../types.js";
6
+ /**
7
+ * Storage adapter for IPFS.
8
+ */
9
+ export declare class IpfsAdapter implements StorageAdapter {
10
+ readonly type: "ipfs";
11
+ private readonly gateway;
12
+ private readonly apiEndpoint;
13
+ private readonly timeoutMs;
14
+ private readonly pinningService;
15
+ constructor(config: IpfsAdapterConfig);
16
+ /**
17
+ * Store data on IPFS.
18
+ */
19
+ store(data: Uint8Array): Promise<StorageRef>;
20
+ /**
21
+ * Store a manifest on IPFS.
22
+ */
23
+ storeManifest(manifest: StorableManifest): Promise<StorageRef>;
24
+ /**
25
+ * Fetch data from IPFS.
26
+ */
27
+ fetch(ref: StorageRef): Promise<Uint8Array>;
28
+ /**
29
+ * Fetch a manifest from IPFS.
30
+ */
31
+ fetchManifest(ref: StorageRef): Promise<StorableManifest>;
32
+ /**
33
+ * Verify data integrity.
34
+ */
35
+ verify(ref: StorageRef): Promise<boolean>;
36
+ /**
37
+ * Pin data on IPFS (via pinning service if configured).
38
+ */
39
+ pin(ref: StorageRef): Promise<void>;
40
+ /**
41
+ * Get the gateway URL for a reference.
42
+ */
43
+ getGatewayUrl(ref: StorageRef): string;
44
+ private addToIpfs;
45
+ private extractCid;
46
+ }
47
+ /**
48
+ * Create an IPFS storage adapter.
49
+ */
50
+ export declare function createIpfsAdapter(config: IpfsAdapterConfig): IpfsAdapter;
51
+ //# sourceMappingURL=ipfs-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ipfs-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/ipfs/ipfs-adapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AAcxB;;GAEG;AACH,qBAAa,WAAY,YAAW,cAAc;IAChD,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;gBAEhD,MAAM,EAAE,iBAAiB;IAUrC;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAYlD;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAcpE;;OAEG;IACG,KAAK,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IA2BjD;;OAEG;IACG,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAe/D;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAU/C;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCzC;;OAEG;IACH,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM;YAOxB,SAAS;IA4CvB,OAAO,CAAC,UAAU;CAenB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,CAExE"}
@@ -0,0 +1,186 @@
1
+ /**
2
+ * IPFS Storage Adapter.
3
+ * Stores data on IPFS with optional pinning service integration.
4
+ */
5
+ import { StorageError, StorageException } from "../../types.js";
6
+ import { sha256 } from "../../utils/content-addressing.js";
7
+ import { createPinningService } from "./pinning-service.js";
8
+ /**
9
+ * Storage adapter for IPFS.
10
+ */
11
+ export class IpfsAdapter {
12
+ type = "ipfs";
13
+ gateway;
14
+ apiEndpoint;
15
+ timeoutMs;
16
+ pinningService;
17
+ constructor(config) {
18
+ this.gateway = config.gateway.replace(/\/$/, "");
19
+ this.apiEndpoint = config.apiEndpoint?.replace(/\/$/, "");
20
+ this.timeoutMs = config.timeoutMs ?? 30000;
21
+ if (config.pinningService) {
22
+ this.pinningService = createPinningService(config.pinningService);
23
+ }
24
+ }
25
+ /**
26
+ * Store data on IPFS.
27
+ */
28
+ async store(data) {
29
+ const cid = await this.addToIpfs(data);
30
+ const hash = sha256(data, "chunk");
31
+ return {
32
+ type: "ipfs",
33
+ uri: `ipfs://${cid}`,
34
+ hash,
35
+ size: data.length,
36
+ };
37
+ }
38
+ /**
39
+ * Store a manifest on IPFS.
40
+ */
41
+ async storeManifest(manifest) {
42
+ const json = JSON.stringify(manifest, null, 2);
43
+ const data = new TextEncoder().encode(json);
44
+ const cid = await this.addToIpfs(data, `${manifest.sessionId}.json`);
45
+ const hash = manifest.manifestHash ?? sha256(data, "manifest");
46
+ return {
47
+ type: "ipfs",
48
+ uri: `ipfs://${cid}`,
49
+ hash,
50
+ size: data.length,
51
+ };
52
+ }
53
+ /**
54
+ * Fetch data from IPFS.
55
+ */
56
+ async fetch(ref) {
57
+ const cid = this.extractCid(ref.uri);
58
+ try {
59
+ const response = await fetch(`${this.gateway}/ipfs/${cid}`, {
60
+ signal: AbortSignal.timeout(this.timeoutMs),
61
+ });
62
+ if (!response.ok) {
63
+ throw new StorageException(StorageError.FETCH_FAILED, `Failed to fetch from IPFS: ${response.status} ${response.statusText}`);
64
+ }
65
+ const buffer = await response.arrayBuffer();
66
+ return new Uint8Array(buffer);
67
+ }
68
+ catch (error) {
69
+ if (error instanceof StorageException)
70
+ throw error;
71
+ throw new StorageException(StorageError.FETCH_FAILED, `Failed to fetch from IPFS: ${error instanceof Error ? error.message : String(error)}`, error instanceof Error ? error : undefined);
72
+ }
73
+ }
74
+ /**
75
+ * Fetch a manifest from IPFS.
76
+ */
77
+ async fetchManifest(ref) {
78
+ const data = await this.fetch(ref);
79
+ const json = new TextDecoder().decode(data);
80
+ try {
81
+ return JSON.parse(json);
82
+ }
83
+ catch (error) {
84
+ throw new StorageException(StorageError.FETCH_FAILED, "Failed to parse manifest JSON", error instanceof Error ? error : undefined);
85
+ }
86
+ }
87
+ /**
88
+ * Verify data integrity.
89
+ */
90
+ async verify(ref) {
91
+ try {
92
+ const data = await this.fetch(ref);
93
+ const hash = sha256(data, "chunk");
94
+ return hash === ref.hash;
95
+ }
96
+ catch {
97
+ return false;
98
+ }
99
+ }
100
+ /**
101
+ * Pin data on IPFS (via pinning service if configured).
102
+ */
103
+ async pin(ref) {
104
+ const cid = this.extractCid(ref.uri);
105
+ if (this.pinningService) {
106
+ await this.pinningService.pin(cid);
107
+ return;
108
+ }
109
+ // Pin via local IPFS node
110
+ if (this.apiEndpoint) {
111
+ try {
112
+ const response = await fetch(`${this.apiEndpoint}/api/v0/pin/add?arg=${cid}`, {
113
+ method: "POST",
114
+ signal: AbortSignal.timeout(this.timeoutMs),
115
+ });
116
+ if (!response.ok) {
117
+ throw new Error(`Pin failed: ${response.status}`);
118
+ }
119
+ }
120
+ catch (error) {
121
+ throw new StorageException(StorageError.PIN_FAILED, `Failed to pin CID ${cid}`, error instanceof Error ? error : undefined);
122
+ }
123
+ }
124
+ }
125
+ /**
126
+ * Get the gateway URL for a reference.
127
+ */
128
+ getGatewayUrl(ref) {
129
+ const cid = this.extractCid(ref.uri);
130
+ return `${this.gateway}/ipfs/${cid}`;
131
+ }
132
+ // === Private Methods ===
133
+ async addToIpfs(data, filename) {
134
+ // Try pinning service first
135
+ if (this.pinningService) {
136
+ return this.pinningService.upload(data, filename);
137
+ }
138
+ // Fall back to local IPFS node
139
+ if (!this.apiEndpoint) {
140
+ throw new StorageException(StorageError.INVALID_CONFIG, "No IPFS API endpoint or pinning service configured");
141
+ }
142
+ try {
143
+ const formData = new FormData();
144
+ // Create a new ArrayBuffer to ensure type compatibility
145
+ const buffer = new ArrayBuffer(data.byteLength);
146
+ new Uint8Array(buffer).set(data);
147
+ const blob = new Blob([buffer]);
148
+ formData.append("file", blob, filename ?? "data.bin");
149
+ const response = await fetch(`${this.apiEndpoint}/api/v0/add`, {
150
+ method: "POST",
151
+ body: formData,
152
+ signal: AbortSignal.timeout(this.timeoutMs),
153
+ });
154
+ if (!response.ok) {
155
+ throw new Error(`IPFS add failed: ${response.status}`);
156
+ }
157
+ const result = await response.json();
158
+ return result.Hash;
159
+ }
160
+ catch (error) {
161
+ if (error instanceof StorageException)
162
+ throw error;
163
+ throw new StorageException(StorageError.STORE_FAILED, `Failed to store on IPFS: ${error instanceof Error ? error.message : String(error)}`, error instanceof Error ? error : undefined);
164
+ }
165
+ }
166
+ extractCid(uri) {
167
+ // Handle ipfs:// URIs
168
+ if (uri.startsWith("ipfs://")) {
169
+ return uri.slice(7);
170
+ }
171
+ // Handle /ipfs/ paths
172
+ const match = uri.match(/\/ipfs\/(\w+)/);
173
+ if (match?.[1]) {
174
+ return match[1];
175
+ }
176
+ // Assume it's a raw CID
177
+ return uri;
178
+ }
179
+ }
180
+ /**
181
+ * Create an IPFS storage adapter.
182
+ */
183
+ export function createIpfsAdapter(config) {
184
+ return new IpfsAdapter(config);
185
+ }
186
+ //# sourceMappingURL=ipfs-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ipfs-adapter.js","sourceRoot":"","sources":["../../../src/adapters/ipfs/ipfs-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Pinning service integrations for IPFS.
3
+ * Supports Pinata, Infura, and web3.storage.
4
+ */
5
+ import type { PinningServiceConfig } from "../../types.js";
6
+ /**
7
+ * Abstract pinning service interface.
8
+ */
9
+ export interface PinningService {
10
+ /**
11
+ * Upload data and return CID.
12
+ */
13
+ upload(data: Uint8Array, filename?: string): Promise<string>;
14
+ /**
15
+ * Pin an existing CID.
16
+ */
17
+ pin(cid: string): Promise<void>;
18
+ /**
19
+ * Unpin a CID.
20
+ */
21
+ unpin?(cid: string): Promise<void>;
22
+ /**
23
+ * Check if a CID is pinned.
24
+ */
25
+ isPinned?(cid: string): Promise<boolean>;
26
+ }
27
+ /**
28
+ * Pinata pinning service.
29
+ */
30
+ export declare class PinataPinningService implements PinningService {
31
+ private readonly apiKey;
32
+ private readonly apiSecret;
33
+ private readonly endpoint;
34
+ constructor(config: PinningServiceConfig);
35
+ upload(data: Uint8Array, filename?: string): Promise<string>;
36
+ pin(cid: string): Promise<void>;
37
+ unpin(cid: string): Promise<void>;
38
+ isPinned(cid: string): Promise<boolean>;
39
+ private getAuthHeaders;
40
+ }
41
+ /**
42
+ * Infura IPFS pinning service.
43
+ */
44
+ export declare class InfuraPinningService implements PinningService {
45
+ private readonly projectId;
46
+ private readonly projectSecret;
47
+ private readonly endpoint;
48
+ constructor(config: PinningServiceConfig);
49
+ upload(data: Uint8Array, filename?: string): Promise<string>;
50
+ pin(cid: string): Promise<void>;
51
+ unpin(cid: string): Promise<void>;
52
+ private getAuthHeaders;
53
+ }
54
+ /**
55
+ * web3.storage pinning service.
56
+ */
57
+ export declare class Web3StoragePinningService implements PinningService {
58
+ private readonly token;
59
+ private readonly endpoint;
60
+ constructor(config: PinningServiceConfig);
61
+ upload(data: Uint8Array, filename?: string): Promise<string>;
62
+ pin(cid: string): Promise<void>;
63
+ }
64
+ /**
65
+ * Create a pinning service based on configuration.
66
+ */
67
+ export declare function createPinningService(config: PinningServiceConfig): PinningService;
68
+ //# sourceMappingURL=pinning-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pinning-service.d.ts","sourceRoot":"","sources":["../../../src/adapters/ipfs/pinning-service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAG3D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7D;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhC;;OAEG;IACH,KAAK,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC;;OAEG;IACH,QAAQ,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1C;AAED;;GAEG;AACH,qBAAa,oBAAqB,YAAW,cAAc;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,MAAM,EAAE,oBAAoB;IAMlC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA+B5D,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB/B,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBjC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB7C,OAAO,CAAC,cAAc;CAWvB;AAED;;GAEG;AACH,qBAAa,oBAAqB,YAAW,cAAc;IACzD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,MAAM,EAAE,oBAAoB;IAMlC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA8B5D,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB/B,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBvC,OAAO,CAAC,cAAc;CASvB;AAED;;GAEG;AACH,qBAAa,yBAA0B,YAAW,cAAc;IAC9D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,MAAM,EAAE,oBAAoB;IAKlC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA8B5D,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAyBtC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,cAAc,CAmBjF"}