@opendatalabs/vana-sdk 0.1.0-alpha.fd33fc9 → 2.0.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.
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.d.ts +33 -1
- package/dist/browser.js.map +1 -1
- package/dist/chains/index.cjs.map +1 -1
- package/dist/chains/index.d.ts +30 -1
- package/dist/chains/index.js.map +1 -1
- package/dist/client/__tests__/enhancedResponse.test.d.ts +1 -0
- package/dist/client/enhancedResponse.cjs +164 -0
- package/dist/client/enhancedResponse.cjs.map +1 -0
- package/dist/client/enhancedResponse.d.ts +120 -0
- package/dist/client/enhancedResponse.js +138 -0
- package/dist/client/enhancedResponse.js.map +1 -0
- package/dist/config/chains.cjs.map +1 -1
- package/dist/config/chains.d.ts +99 -0
- package/dist/config/chains.js.map +1 -1
- package/dist/contracts/contractController.cjs.map +1 -1
- package/dist/contracts/contractController.d.ts +66 -10
- package/dist/contracts/contractController.js.map +1 -1
- package/dist/controllers/__tests__/data-consistency-integration.test.d.ts +7 -0
- package/dist/controllers/__tests__/operations.processQueue.test.d.ts +1 -0
- package/dist/controllers/base.cjs +33 -0
- package/dist/controllers/base.cjs.map +1 -1
- package/dist/controllers/base.d.ts +10 -0
- package/dist/controllers/base.js +33 -0
- package/dist/controllers/base.js.map +1 -1
- package/dist/controllers/data.cjs +417 -276
- package/dist/controllers/data.cjs.map +1 -1
- package/dist/controllers/data.d.ts +246 -193
- package/dist/controllers/data.js +430 -279
- package/dist/controllers/data.js.map +1 -1
- package/dist/controllers/operations.cjs +430 -0
- package/dist/controllers/operations.cjs.map +1 -0
- package/dist/controllers/operations.d.ts +229 -0
- package/dist/controllers/operations.js +406 -0
- package/dist/controllers/operations.js.map +1 -0
- package/dist/controllers/permissions.cjs +690 -209
- package/dist/controllers/permissions.cjs.map +1 -1
- package/dist/controllers/permissions.d.ts +196 -68
- package/dist/controllers/permissions.js +690 -209
- package/dist/controllers/permissions.js.map +1 -1
- package/dist/controllers/protocol.cjs.map +1 -1
- package/dist/controllers/protocol.d.ts +27 -28
- package/dist/controllers/protocol.js.map +1 -1
- package/dist/controllers/schemas.cjs +104 -25
- package/dist/controllers/schemas.cjs.map +1 -1
- package/dist/controllers/schemas.d.ts +88 -40
- package/dist/controllers/schemas.js +104 -25
- package/dist/controllers/schemas.js.map +1 -1
- package/dist/controllers/server.cjs +269 -58
- package/dist/controllers/server.cjs.map +1 -1
- package/dist/controllers/server.d.ts +157 -52
- package/dist/controllers/server.js +269 -58
- package/dist/controllers/server.js.map +1 -1
- package/dist/core/__tests__/health.test.d.ts +1 -0
- package/dist/core/__tests__/inMemoryNonceManager.test.d.ts +1 -0
- package/dist/core/__tests__/nonceManager.test.d.ts +1 -0
- package/dist/core/__tests__/pollingManager.test.d.ts +4 -0
- package/dist/core/apiClient.cjs +53 -3
- package/dist/core/apiClient.cjs.map +1 -1
- package/dist/core/apiClient.d.ts +132 -7
- package/dist/core/apiClient.js +53 -3
- package/dist/core/apiClient.js.map +1 -1
- package/dist/core/generics.cjs +30 -3
- package/dist/core/generics.cjs.map +1 -1
- package/dist/core/generics.d.ts +95 -6
- package/dist/core/generics.js +30 -3
- package/dist/core/generics.js.map +1 -1
- package/dist/core/health.cjs +289 -0
- package/dist/core/health.cjs.map +1 -0
- package/dist/core/health.d.ts +143 -0
- package/dist/core/health.js +265 -0
- package/dist/core/health.js.map +1 -0
- package/dist/core/inMemoryNonceManager.cjs +138 -0
- package/dist/core/inMemoryNonceManager.cjs.map +1 -0
- package/dist/core/inMemoryNonceManager.d.ts +69 -0
- package/dist/core/inMemoryNonceManager.js +114 -0
- package/dist/core/inMemoryNonceManager.js.map +1 -0
- package/dist/core/nonceManager.cjs +304 -0
- package/dist/core/nonceManager.cjs.map +1 -0
- package/dist/core/nonceManager.d.ts +116 -0
- package/dist/core/nonceManager.js +280 -0
- package/dist/core/nonceManager.js.map +1 -0
- package/dist/core/pollingManager.cjs +292 -0
- package/dist/core/pollingManager.cjs.map +1 -0
- package/dist/core/pollingManager.d.ts +120 -0
- package/dist/core/pollingManager.js +268 -0
- package/dist/core/pollingManager.js.map +1 -0
- package/dist/core.cjs +55 -1
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.ts +54 -3
- package/dist/core.js +55 -1
- package/dist/core.js.map +1 -1
- package/dist/crypto/ecies/base.cjs +16 -3
- package/dist/crypto/ecies/base.cjs.map +1 -1
- package/dist/crypto/ecies/base.js +16 -3
- package/dist/crypto/ecies/base.js.map +1 -1
- package/dist/errors.cjs +29 -0
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.ts +64 -0
- package/dist/errors.js +28 -0
- package/dist/errors.js.map +1 -1
- package/dist/generated/abi/ComputeInstructionRegistryImplementation.cjs.map +1 -1
- package/dist/generated/abi/ComputeInstructionRegistryImplementation.js.map +1 -1
- package/dist/generated/abi/DLPPerformanceImplementation.cjs +42 -0
- package/dist/generated/abi/DLPPerformanceImplementation.cjs.map +1 -1
- package/dist/generated/abi/DLPPerformanceImplementation.d.ts +32 -0
- package/dist/generated/abi/DLPPerformanceImplementation.js +42 -0
- package/dist/generated/abi/DLPPerformanceImplementation.js.map +1 -1
- package/dist/generated/abi/DLPRegistryImplementation.cjs +5 -5
- package/dist/generated/abi/DLPRegistryImplementation.cjs.map +1 -1
- package/dist/generated/abi/DLPRegistryImplementation.d.ts +4 -4
- package/dist/generated/abi/DLPRegistryImplementation.js +5 -5
- package/dist/generated/abi/DLPRegistryImplementation.js.map +1 -1
- package/dist/generated/abi/DLPRewardDeployerImplementation.cjs +166 -2
- package/dist/generated/abi/DLPRewardDeployerImplementation.cjs.map +1 -1
- package/dist/generated/abi/DLPRewardDeployerImplementation.d.ts +129 -2
- package/dist/generated/abi/DLPRewardDeployerImplementation.js +166 -2
- package/dist/generated/abi/DLPRewardDeployerImplementation.js.map +1 -1
- package/dist/generated/abi/DataPortabilityGranteesImplementation.cjs +167 -19
- package/dist/generated/abi/DataPortabilityGranteesImplementation.cjs.map +1 -1
- package/dist/generated/abi/DataPortabilityGranteesImplementation.d.ts +127 -14
- package/dist/generated/abi/DataPortabilityGranteesImplementation.js +167 -19
- package/dist/generated/abi/DataPortabilityGranteesImplementation.js.map +1 -1
- package/dist/generated/abi/DataPortabilityPermissionsImplementation.cjs +0 -19
- package/dist/generated/abi/DataPortabilityPermissionsImplementation.cjs.map +1 -1
- package/dist/generated/abi/DataPortabilityPermissionsImplementation.d.ts +0 -14
- package/dist/generated/abi/DataPortabilityPermissionsImplementation.js +0 -19
- package/dist/generated/abi/DataPortabilityPermissionsImplementation.js.map +1 -1
- package/dist/generated/abi/DataPortabilityServersImplementation.cjs +0 -19
- package/dist/generated/abi/DataPortabilityServersImplementation.cjs.map +1 -1
- package/dist/generated/abi/DataPortabilityServersImplementation.d.ts +0 -14
- package/dist/generated/abi/DataPortabilityServersImplementation.js +0 -19
- package/dist/generated/abi/DataPortabilityServersImplementation.js.map +1 -1
- package/dist/generated/abi/DataRegistryImplementation.cjs +0 -13
- package/dist/generated/abi/DataRegistryImplementation.cjs.map +1 -1
- package/dist/generated/abi/DataRegistryImplementation.d.ts +0 -10
- package/dist/generated/abi/DataRegistryImplementation.js +0 -13
- package/dist/generated/abi/DataRegistryImplementation.js.map +1 -1
- package/dist/generated/abi/SwapHelperImplementation.cjs +0 -43
- package/dist/generated/abi/SwapHelperImplementation.cjs.map +1 -1
- package/dist/generated/abi/SwapHelperImplementation.d.ts +0 -35
- package/dist/generated/abi/SwapHelperImplementation.js +0 -43
- package/dist/generated/abi/SwapHelperImplementation.js.map +1 -1
- package/dist/generated/abi/VanaEpochImplementation.cjs +195 -0
- package/dist/generated/abi/VanaEpochImplementation.cjs.map +1 -1
- package/dist/generated/abi/VanaEpochImplementation.d.ts +151 -0
- package/dist/generated/abi/VanaEpochImplementation.js +195 -0
- package/dist/generated/abi/VanaEpochImplementation.js.map +1 -1
- package/dist/generated/abi/VanaPoolEntityImplementation.cjs +22 -65
- package/dist/generated/abi/VanaPoolEntityImplementation.cjs.map +1 -1
- package/dist/generated/abi/VanaPoolEntityImplementation.d.ts +17 -51
- package/dist/generated/abi/VanaPoolEntityImplementation.js +22 -65
- package/dist/generated/abi/VanaPoolEntityImplementation.js.map +1 -1
- package/dist/generated/abi/VanaPoolStakingImplementation.cjs +113 -1
- package/dist/generated/abi/VanaPoolStakingImplementation.cjs.map +1 -1
- package/dist/generated/abi/VanaPoolStakingImplementation.d.ts +85 -1
- package/dist/generated/abi/VanaPoolStakingImplementation.js +113 -1
- package/dist/generated/abi/VanaPoolStakingImplementation.js.map +1 -1
- package/dist/generated/abi/index.d.ts +546 -146
- package/dist/generated/event-types.cjs.map +1 -1
- package/dist/generated/event-types.d.ts +14 -8
- package/dist/generated/eventRegistry.cjs +42 -18
- package/dist/generated/eventRegistry.cjs.map +1 -1
- package/dist/generated/eventRegistry.js +42 -18
- package/dist/generated/eventRegistry.js.map +1 -1
- package/dist/generated/server/server-exports.cjs +22 -0
- package/dist/generated/server/server-exports.cjs.map +1 -1
- package/dist/generated/server/server-exports.d.ts +27 -10
- package/dist/generated/server/server-exports.js +17 -0
- package/dist/generated/server/server-exports.js.map +1 -1
- package/dist/generated/server/server.cjs.map +1 -1
- package/dist/generated/server/server.d.ts +771 -402
- package/dist/generated/subgraph.cjs +797 -32
- package/dist/generated/subgraph.cjs.map +1 -1
- package/dist/generated/subgraph.d.ts +135 -0
- package/dist/generated/subgraph.js +792 -32
- package/dist/generated/subgraph.js.map +1 -1
- package/dist/index.browser.d.ts +2 -0
- package/dist/index.browser.js +10 -0
- package/dist/index.browser.js.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.node.cjs +26 -0
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.d.ts +49 -5
- package/dist/index.node.js +25 -1
- package/dist/index.node.js.map +1 -1
- package/dist/lib/__tests__/redisAtomicStore.test.d.ts +1 -0
- package/dist/lib/redisAtomicStore.cjs +201 -0
- package/dist/lib/redisAtomicStore.cjs.map +1 -0
- package/dist/lib/redisAtomicStore.d.ts +120 -0
- package/dist/lib/redisAtomicStore.js +177 -0
- package/dist/lib/redisAtomicStore.js.map +1 -0
- package/dist/node.cjs.map +1 -1
- package/dist/node.d.ts +39 -1
- package/dist/node.js.map +1 -1
- package/dist/platform/browser.cjs +160 -2
- package/dist/platform/browser.cjs.map +1 -1
- package/dist/platform/browser.d.ts +232 -12
- package/dist/platform/browser.js +160 -2
- package/dist/platform/browser.js.map +1 -1
- package/dist/platform/interface.cjs.map +1 -1
- package/dist/platform/interface.d.ts +283 -90
- package/dist/platform/node.cjs +163 -2
- package/dist/platform/node.cjs.map +1 -1
- package/dist/platform/node.d.ts +69 -6
- package/dist/platform/node.js +163 -2
- package/dist/platform/node.js.map +1 -1
- package/dist/server/relayerHandler.cjs +315 -81
- package/dist/server/relayerHandler.cjs.map +1 -1
- package/dist/server/relayerHandler.d.ts +35 -2
- package/dist/server/relayerHandler.js +315 -81
- package/dist/server/relayerHandler.js.map +1 -1
- package/dist/storage/index.cjs +3 -0
- package/dist/storage/index.cjs.map +1 -1
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.js +2 -0
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/manager.cjs +108 -25
- package/dist/storage/manager.cjs.map +1 -1
- package/dist/storage/manager.d.ts +119 -25
- package/dist/storage/manager.js +108 -25
- package/dist/storage/manager.js.map +1 -1
- package/dist/storage/providers/callback-storage.cjs +86 -15
- package/dist/storage/providers/callback-storage.cjs.map +1 -1
- package/dist/storage/providers/callback-storage.d.ts +109 -20
- package/dist/storage/providers/callback-storage.js +86 -15
- package/dist/storage/providers/callback-storage.js.map +1 -1
- package/dist/storage/providers/dropbox.cjs +237 -0
- package/dist/storage/providers/dropbox.cjs.map +1 -0
- package/dist/storage/providers/dropbox.d.ts +39 -0
- package/dist/storage/providers/dropbox.js +215 -0
- package/dist/storage/providers/dropbox.js.map +1 -0
- package/dist/storage/providers/dropbox.test.d.ts +1 -0
- package/dist/storage/providers/pinata.cjs.map +1 -1
- package/dist/storage/providers/pinata.d.ts +12 -14
- package/dist/storage/providers/pinata.js.map +1 -1
- package/dist/tests/data-upload-owner-validation.test.d.ts +1 -0
- package/dist/tests/permissions-transaction-options.test.d.ts +1 -0
- package/dist/types/atomicStore.cjs +31 -0
- package/dist/types/atomicStore.cjs.map +1 -0
- package/dist/types/atomicStore.d.ts +236 -0
- package/dist/types/atomicStore.js +7 -0
- package/dist/types/atomicStore.js.map +1 -0
- package/dist/types/blockchain.cjs.map +1 -1
- package/dist/types/blockchain.d.ts +39 -11
- package/dist/types/chains.cjs.map +1 -1
- package/dist/types/chains.d.ts +74 -7
- package/dist/types/chains.js.map +1 -1
- package/dist/types/config.cjs.map +1 -1
- package/dist/types/config.d.ts +38 -4
- package/dist/types/config.js.map +1 -1
- package/dist/types/contracts.cjs.map +1 -1
- package/dist/types/contracts.d.ts +71 -7
- package/dist/types/controller-context.cjs.map +1 -1
- package/dist/types/controller-context.d.ts +4 -1
- package/dist/types/data.cjs.map +1 -1
- package/dist/types/data.d.ts +11 -10
- package/dist/types/generics.cjs.map +1 -1
- package/dist/types/generics.d.ts +81 -10
- package/dist/types/index.cjs.map +1 -1
- package/dist/types/index.d.ts +31 -3
- package/dist/types/index.js.map +1 -1
- package/dist/types/operationStore.cjs +17 -0
- package/dist/types/operationStore.cjs.map +1 -0
- package/dist/types/operationStore.d.ts +171 -0
- package/dist/types/operationStore.js +1 -0
- package/dist/types/operationStore.js.map +1 -0
- package/dist/types/operations.cjs +3 -15
- package/dist/types/operations.cjs.map +1 -1
- package/dist/types/operations.d.ts +131 -39
- package/dist/types/operations.js +2 -13
- package/dist/types/operations.js.map +1 -1
- package/dist/types/options.cjs +17 -0
- package/dist/types/options.cjs.map +1 -0
- package/dist/types/options.d.ts +308 -0
- package/dist/types/options.js +1 -0
- package/dist/types/options.js.map +1 -0
- package/dist/types/permissions.cjs.map +1 -1
- package/dist/types/permissions.d.ts +19 -20
- package/dist/types/personal.cjs.map +1 -1
- package/dist/types/personal.d.ts +150 -14
- package/dist/types/relayer.cjs.map +1 -1
- package/dist/types/relayer.d.ts +145 -24
- package/dist/types/storage.cjs.map +1 -1
- package/dist/types/storage.d.ts +9 -21
- package/dist/types/storage.js.map +1 -1
- package/dist/types/utils.cjs.map +1 -1
- package/dist/types/utils.d.ts +0 -45
- package/dist/utils/__tests__/chainQuery.test.d.ts +1 -0
- package/dist/utils/__tests__/subgraphConsistency.test.d.ts +4 -0
- package/dist/utils/__tests__/subgraphPagination.test.d.ts +4 -0
- package/dist/utils/chainQuery.cjs +107 -0
- package/dist/utils/chainQuery.cjs.map +1 -0
- package/dist/utils/chainQuery.d.ts +31 -0
- package/dist/utils/chainQuery.js +82 -0
- package/dist/utils/chainQuery.js.map +1 -0
- package/dist/utils/grantFiles.cjs +4 -1
- package/dist/utils/grantFiles.cjs.map +1 -1
- package/dist/utils/grantFiles.d.ts +10 -20
- package/dist/utils/grantFiles.js +4 -1
- package/dist/utils/grantFiles.js.map +1 -1
- package/dist/utils/grantValidation.cjs.map +1 -1
- package/dist/utils/grantValidation.d.ts +95 -16
- package/dist/utils/grantValidation.js.map +1 -1
- package/dist/utils/grants.cjs.map +1 -1
- package/dist/utils/grants.d.ts +93 -12
- package/dist/utils/grants.js.map +1 -1
- package/dist/utils/ipfs.cjs +2 -4
- package/dist/utils/ipfs.cjs.map +1 -1
- package/dist/utils/ipfs.d.ts +1 -1
- package/dist/utils/ipfs.js +2 -4
- package/dist/utils/ipfs.js.map +1 -1
- package/dist/utils/lazy-import.cjs.map +1 -1
- package/dist/utils/lazy-import.d.ts +32 -7
- package/dist/utils/lazy-import.js.map +1 -1
- package/dist/utils/signatureCache.cjs +8 -2
- package/dist/utils/signatureCache.cjs.map +1 -1
- package/dist/utils/signatureCache.d.ts +49 -8
- package/dist/utils/signatureCache.js +8 -2
- package/dist/utils/signatureCache.js.map +1 -1
- package/dist/utils/subgraphConsistency.cjs +184 -0
- package/dist/utils/subgraphConsistency.cjs.map +1 -0
- package/dist/utils/subgraphConsistency.d.ts +65 -0
- package/dist/utils/subgraphConsistency.js +155 -0
- package/dist/utils/subgraphConsistency.js.map +1 -0
- package/dist/utils/subgraphMetaCache.cjs +101 -0
- package/dist/utils/subgraphMetaCache.cjs.map +1 -0
- package/dist/utils/subgraphMetaCache.d.ts +56 -0
- package/dist/utils/subgraphMetaCache.js +76 -0
- package/dist/utils/subgraphMetaCache.js.map +1 -0
- package/dist/utils/subgraphPagination.cjs +104 -0
- package/dist/utils/subgraphPagination.cjs.map +1 -0
- package/dist/utils/subgraphPagination.d.ts +78 -0
- package/dist/utils/subgraphPagination.js +78 -0
- package/dist/utils/subgraphPagination.js.map +1 -0
- package/dist/utils/transactionHelpers.cjs.map +1 -1
- package/dist/utils/transactionHelpers.d.ts +12 -12
- package/dist/utils/transactionHelpers.js.map +1 -1
- package/dist/utils/typedDataConverter.cjs.map +1 -1
- package/dist/utils/typedDataConverter.d.ts +39 -3
- package/dist/utils/typedDataConverter.js.map +1 -1
- package/dist/utils/urlResolver.cjs +7 -0
- package/dist/utils/urlResolver.cjs.map +1 -1
- package/dist/utils/urlResolver.d.ts +22 -4
- package/dist/utils/urlResolver.js +7 -0
- package/dist/utils/urlResolver.js.map +1 -1
- package/dist/utils/wallet.cjs.map +1 -1
- package/dist/utils/wallet.d.ts +78 -16
- package/dist/utils/wallet.js.map +1 -1
- package/package.json +3 -1
package/dist/storage/index.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { StorageError } from "../types/storage";
|
|
2
2
|
import { GoogleDriveStorage } from "./providers/google-drive";
|
|
3
|
+
import { DropboxStorage } from "./providers/dropbox";
|
|
3
4
|
import { IpfsStorage } from "./providers/ipfs";
|
|
4
5
|
import { PinataStorage } from "./providers/pinata";
|
|
5
6
|
import { CallbackStorage } from "./providers/callback-storage";
|
|
6
7
|
import { StorageManager } from "./manager";
|
|
7
8
|
export {
|
|
8
9
|
CallbackStorage,
|
|
10
|
+
DropboxStorage,
|
|
9
11
|
GoogleDriveStorage,
|
|
10
12
|
IpfsStorage,
|
|
11
13
|
PinataStorage,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/storage/index.ts"],"sourcesContent":["/**\n * Storage API for Vana SDK\n *\n * Provides unified interface for different storage providers\n * to upload, download, and manage user data files.\n *\n * ## Storage Provider Decision Tree\n *\n * Choose your storage provider based on your needs:\n *\n * **Need full CRUD operations and metadata?**\n * - ✅ Use `PinataStorage` - Managed IPFS with listing, deletion, and rich metadata\n *\n * **Want to use your own IPFS infrastructure?**\n * - ✅ Use `IpfsStorage.forInfura()` - Connect to Infura IPFS service\n * - ✅ Use `IpfsStorage.forLocalNode()` - Connect to local IPFS node\n * - ✅ Use `new IpfsStorage()` - Connect to any IPFS-compatible service\n *\n * **Want flexible callback-based storage?**\n * - ✅ Use `CallbackStorage` - Implement storage via custom callbacks (HTTP, WebSocket, etc.)\n *\n * **Need Google Drive integration?**\n * - ✅ Use `GoogleDriveStorage` - Direct Google Drive API with folder management\n *\n * @example\n * ```typescript\n * // Managed IPFS with full features\n * const pinata = new PinataStorage({ jwt: \"your-jwt\" });\n *\n * // Standard IPFS with Infura\n * const ipfs = IpfsStorage.forInfura({ projectId: \"...\", projectSecret: \"...\" });\n *\n * // Callback-based storage (flexible)\n * const storage = new CallbackStorage({\n * async upload(blob, filename) {\n * // Your custom upload logic\n * const response = await fetch('/api/upload', { method: 'POST', body: blob });\n * const data = await response.json();\n * return { url: data.url, size: blob.size, contentType: blob.type };\n * },\n * async download(identifier) {\n * // Your custom download logic\n * const response = await fetch(`/api/download/${identifier}`);\n * return response.blob();\n * }\n * });\n * ```\n */\n\n// Re-export storage types from types module to avoid circular dependencies\nexport type {\n StorageProvider,\n StorageUploadResult,\n StorageFile,\n StorageListOptions,\n StorageProviderConfig,\n} from \"../types/storage\";\n\nexport { StorageError } from \"../types/storage\";\n\n// Export storage providers\nexport { GoogleDriveStorage } from \"./providers/google-drive\";\nexport { IpfsStorage } from \"./providers/ipfs\";\nexport { PinataStorage } from \"./providers/pinata\";\nexport { CallbackStorage } from \"./providers/callback-storage\";\n\n// Export storage manager\nexport { StorageManager } from \"./manager\";\n\n// Export storage callback types\nexport type {\n StorageCallbacks,\n StorageDownloadOptions,\n StorageListResult,\n} from \"../types/config\";\n"],"mappings":"AA0DA,SAAS,oBAAoB;AAG7B,SAAS,0BAA0B;AACnC,SAAS,mBAAmB;AAC5B,SAAS,qBAAqB;AAC9B,SAAS,uBAAuB;AAGhC,SAAS,sBAAsB;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/storage/index.ts"],"sourcesContent":["/**\n * Storage API for Vana SDK\n *\n * Provides unified interface for different storage providers\n * to upload, download, and manage user data files.\n *\n * ## Storage Provider Decision Tree\n *\n * Choose your storage provider based on your needs:\n *\n * **Need full CRUD operations and metadata?**\n * - ✅ Use `PinataStorage` - Managed IPFS with listing, deletion, and rich metadata\n *\n * **Want to use your own IPFS infrastructure?**\n * - ✅ Use `IpfsStorage.forInfura()` - Connect to Infura IPFS service\n * - ✅ Use `IpfsStorage.forLocalNode()` - Connect to local IPFS node\n * - ✅ Use `new IpfsStorage()` - Connect to any IPFS-compatible service\n *\n * **Want flexible callback-based storage?**\n * - ✅ Use `CallbackStorage` - Implement storage via custom callbacks (HTTP, WebSocket, etc.)\n *\n * **Need Google Drive integration?**\n * - ✅ Use `GoogleDriveStorage` - Direct Google Drive API with folder management\n *\n * @example\n * ```typescript\n * // Managed IPFS with full features\n * const pinata = new PinataStorage({ jwt: \"your-jwt\" });\n *\n * // Standard IPFS with Infura\n * const ipfs = IpfsStorage.forInfura({ projectId: \"...\", projectSecret: \"...\" });\n *\n * // Callback-based storage (flexible)\n * const storage = new CallbackStorage({\n * async upload(blob, filename) {\n * // Your custom upload logic\n * const response = await fetch('/api/upload', { method: 'POST', body: blob });\n * const data = await response.json();\n * return { url: data.url, size: blob.size, contentType: blob.type };\n * },\n * async download(identifier) {\n * // Your custom download logic\n * const response = await fetch(`/api/download/${identifier}`);\n * return response.blob();\n * }\n * });\n * ```\n */\n\n// Re-export storage types from types module to avoid circular dependencies\nexport type {\n StorageProvider,\n StorageUploadResult,\n StorageFile,\n StorageListOptions,\n StorageProviderConfig,\n} from \"../types/storage\";\n\nexport { StorageError } from \"../types/storage\";\n\n// Export storage providers\nexport { GoogleDriveStorage } from \"./providers/google-drive\";\nexport { DropboxStorage } from \"./providers/dropbox\";\nexport { IpfsStorage } from \"./providers/ipfs\";\nexport { PinataStorage } from \"./providers/pinata\";\nexport { CallbackStorage } from \"./providers/callback-storage\";\n\n// Export storage manager\nexport { StorageManager } from \"./manager\";\n\n// Export storage callback types\nexport type {\n StorageCallbacks,\n StorageDownloadOptions,\n StorageListResult,\n} from \"../types/config\";\n"],"mappings":"AA0DA,SAAS,oBAAoB;AAG7B,SAAS,0BAA0B;AACnC,SAAS,sBAAsB;AAC/B,SAAS,mBAAmB;AAC5B,SAAS,qBAAqB;AAC9B,SAAS,uBAAuB;AAGhC,SAAS,sBAAsB;","names":[]}
|
package/dist/storage/manager.cjs
CHANGED
|
@@ -51,10 +51,20 @@ class StorageManager {
|
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
/**
|
|
54
|
-
*
|
|
54
|
+
* Retrieves a registered storage provider.
|
|
55
55
|
*
|
|
56
|
-
* @param name - Provider identifier
|
|
57
|
-
*
|
|
56
|
+
* @param name - Provider identifier.
|
|
57
|
+
* If not specified, returns the default provider.
|
|
58
|
+
* @returns The requested storage provider instance
|
|
59
|
+
*
|
|
60
|
+
* @throws {StorageError} With code 'NO_PROVIDER' if no provider available
|
|
61
|
+
* @throws {StorageError} With code 'PROVIDER_NOT_FOUND' if named provider doesn't exist
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```typescript
|
|
65
|
+
* const provider = storage.getProvider('pinata');
|
|
66
|
+
* const config = provider.getConfig();
|
|
67
|
+
* ```
|
|
58
68
|
*/
|
|
59
69
|
getProvider(name) {
|
|
60
70
|
const providerName = name ?? this.defaultProvider;
|
|
@@ -76,25 +86,49 @@ class StorageManager {
|
|
|
76
86
|
return provider;
|
|
77
87
|
}
|
|
78
88
|
/**
|
|
79
|
-
*
|
|
89
|
+
* Lists all registered provider names.
|
|
90
|
+
*
|
|
91
|
+
* @returns Array of registered provider identifiers
|
|
80
92
|
*
|
|
81
|
-
* @
|
|
93
|
+
* @example
|
|
94
|
+
* ```typescript
|
|
95
|
+
* const providers = storage.listProviders();
|
|
96
|
+
* console.log('Available providers:', providers);
|
|
97
|
+
* // Output: ['ipfs', 'pinata', 'google-drive']
|
|
98
|
+
* ```
|
|
82
99
|
*/
|
|
83
100
|
listProviders() {
|
|
84
101
|
return Array.from(this.providers.keys());
|
|
85
102
|
}
|
|
86
103
|
/**
|
|
87
|
-
*
|
|
104
|
+
* Gets the current default provider name.
|
|
88
105
|
*
|
|
89
|
-
* @returns Default provider
|
|
106
|
+
* @returns Default provider identifier or null if none set
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```typescript
|
|
110
|
+
* const defaultName = storage.getDefaultProvider();
|
|
111
|
+
* if (defaultName) {
|
|
112
|
+
* console.log(`Using ${defaultName} by default`);
|
|
113
|
+
* }
|
|
114
|
+
* ```
|
|
90
115
|
*/
|
|
91
116
|
getDefaultProvider() {
|
|
92
117
|
return this.defaultProvider;
|
|
93
118
|
}
|
|
94
119
|
/**
|
|
95
|
-
*
|
|
120
|
+
* Sets the default storage provider.
|
|
121
|
+
*
|
|
122
|
+
* @param name - Provider identifier to set as default.
|
|
123
|
+
* Must be a registered provider name.
|
|
96
124
|
*
|
|
97
|
-
* @
|
|
125
|
+
* @throws {StorageError} With code 'PROVIDER_NOT_FOUND' if provider not registered
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* ```typescript
|
|
129
|
+
* storage.setDefaultProvider('pinata');
|
|
130
|
+
* // Now all operations without provider name will use Pinata
|
|
131
|
+
* ```
|
|
98
132
|
*/
|
|
99
133
|
setDefaultProvider(name) {
|
|
100
134
|
if (!this.providers.has(name)) {
|
|
@@ -133,50 +167,99 @@ class StorageManager {
|
|
|
133
167
|
return provider.upload(file, filename);
|
|
134
168
|
}
|
|
135
169
|
/**
|
|
136
|
-
*
|
|
170
|
+
* Downloads a file from storage.
|
|
171
|
+
*
|
|
172
|
+
* @param url - The storage URL to download from.
|
|
173
|
+
* Format depends on the storage provider.
|
|
174
|
+
* @param providerName - Optional provider identifier.
|
|
175
|
+
* Uses default provider if not specified.
|
|
176
|
+
* @returns The downloaded file as a Blob
|
|
177
|
+
*
|
|
178
|
+
* @throws {StorageError} If download fails or provider unavailable
|
|
137
179
|
*
|
|
138
|
-
* @
|
|
139
|
-
*
|
|
140
|
-
*
|
|
180
|
+
* @example
|
|
181
|
+
* ```typescript
|
|
182
|
+
* const blob = await storage.download('ipfs://QmXxx...');
|
|
183
|
+
* const text = await blob.text();
|
|
184
|
+
* ```
|
|
141
185
|
*/
|
|
142
186
|
async download(url, providerName) {
|
|
143
187
|
const provider = this.getProvider(providerName);
|
|
144
188
|
return provider.download(url);
|
|
145
189
|
}
|
|
146
190
|
/**
|
|
147
|
-
*
|
|
191
|
+
* Lists files in storage.
|
|
192
|
+
*
|
|
193
|
+
* @param options - Optional filtering and pagination.
|
|
194
|
+
* @param options.namePattern - Pattern to filter files.
|
|
195
|
+
* @param options.limit - Maximum files to return.
|
|
196
|
+
* @param providerName - Optional provider identifier.
|
|
197
|
+
* Uses default provider if not specified.
|
|
198
|
+
* @returns Array of file metadata
|
|
199
|
+
*
|
|
200
|
+
* @throws {StorageError} If listing fails or not supported by provider
|
|
148
201
|
*
|
|
149
|
-
* @
|
|
150
|
-
*
|
|
151
|
-
*
|
|
202
|
+
* @example
|
|
203
|
+
* ```typescript
|
|
204
|
+
* const files = await storage.list(
|
|
205
|
+
* { namePattern: '*.json', limit: 10 },
|
|
206
|
+
* 'google-drive'
|
|
207
|
+
* );
|
|
208
|
+
* ```
|
|
152
209
|
*/
|
|
153
210
|
async list(options, providerName) {
|
|
154
211
|
const provider = this.getProvider(providerName);
|
|
155
212
|
return provider.list(options);
|
|
156
213
|
}
|
|
157
214
|
/**
|
|
158
|
-
*
|
|
215
|
+
* Deletes a file from storage.
|
|
159
216
|
*
|
|
160
|
-
* @param url - The storage URL
|
|
161
|
-
*
|
|
162
|
-
* @
|
|
217
|
+
* @param url - The storage URL to delete.
|
|
218
|
+
* Must be a valid URL for the provider.
|
|
219
|
+
* @param providerName - Optional provider identifier.
|
|
220
|
+
* Uses default provider if not specified.
|
|
221
|
+
* @returns True if deletion succeeded, false otherwise
|
|
222
|
+
*
|
|
223
|
+
* @throws {StorageError} If deletion fails or not supported by provider
|
|
224
|
+
*
|
|
225
|
+
* @example
|
|
226
|
+
* ```typescript
|
|
227
|
+
* const success = await storage.delete('ipfs://QmXxx...');
|
|
228
|
+
* if (success) {
|
|
229
|
+
* console.log('File deleted successfully');
|
|
230
|
+
* }
|
|
231
|
+
* ```
|
|
163
232
|
*/
|
|
164
233
|
async delete(url, providerName) {
|
|
165
234
|
const provider = this.getProvider(providerName);
|
|
166
235
|
return provider.delete(url);
|
|
167
236
|
}
|
|
168
237
|
/**
|
|
169
|
-
*
|
|
238
|
+
* Gets all registered storage provider names.
|
|
170
239
|
*
|
|
171
|
-
* @returns Array of provider
|
|
240
|
+
* @returns Array of provider identifiers
|
|
241
|
+
*
|
|
242
|
+
* @deprecated Use `listProviders()` instead
|
|
243
|
+
*
|
|
244
|
+
* @example
|
|
245
|
+
* ```typescript
|
|
246
|
+
* const providers = storage.getStorageProviders();
|
|
247
|
+
* ```
|
|
172
248
|
*/
|
|
173
249
|
getStorageProviders() {
|
|
174
250
|
return Array.from(this.providers.keys());
|
|
175
251
|
}
|
|
176
252
|
/**
|
|
177
|
-
*
|
|
253
|
+
* Gets the default storage provider name.
|
|
178
254
|
*
|
|
179
|
-
* @returns Default provider
|
|
255
|
+
* @returns Default provider identifier or undefined if none set
|
|
256
|
+
*
|
|
257
|
+
* @deprecated Use `getDefaultProvider()` instead
|
|
258
|
+
*
|
|
259
|
+
* @example
|
|
260
|
+
* ```typescript
|
|
261
|
+
* const defaultProvider = storage.getDefaultStorageProvider();
|
|
262
|
+
* ```
|
|
180
263
|
*/
|
|
181
264
|
getDefaultStorageProvider() {
|
|
182
265
|
return this.defaultProvider ?? void 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/storage/manager.ts"],"sourcesContent":["import type {\n StorageProvider,\n StorageUploadResult,\n StorageFile,\n StorageListOptions,\n} from \"../types/storage\";\nimport { StorageError } from \"../types/storage\";\n\n/**\n * Manages multiple storage providers with a unified interface for file operations.\n *\n * @remarks\n * The StorageManager provides a consistent API for uploading, downloading, and managing\n * files across different storage backends including IPFS, Pinata, Google Drive, and\n * server-managed storage. It handles provider registration, default provider selection,\n * and automatic fallback scenarios for robust file operations.\n *\n * Used internally by DataController for encrypted file storage, but can also be used\n * directly for custom storage workflows. Each provider implements the `StorageProvider`\n * interface to ensure consistent behavior across different storage backends.\n *\n * The manager supports provider-specific configurations and features while maintaining\n * a uniform API surface for applications.\n * @example\n * ```typescript\n * import { StorageManager, IPFSStorage, PinataStorage } from '@opendatalabs/vana-sdk';\n *\n * const storage = new StorageManager();\n *\n * // Register multiple providers\n * storage.register('ipfs', new IPFSStorage({\n * apiEndpoint: 'https://api.pinata.cloud/pinning/pinFileToIPFS'\n * }), true);\n * storage.register('pinata', new PinataStorage({\n * jwt: 'your-pinata-jwt-token'\n * }));\n *\n * // Upload to default provider\n * const result = await storage.upload(fileBlob, 'myfile.json');\n *\n * // Upload to specific provider\n * const result2 = await storage.upload(fileBlob, 'myfile.json', 'pinata');\n * ```\n * @category Storage\n * @see {@link https://docs.vana.com/developer/vana-sdk-documentation/core-modules/storage-providers | Storage Providers Guide} for configuration details\n */\nexport class StorageManager {\n private providers: Map<string, StorageProvider> = new Map();\n private defaultProvider: string | null = null;\n\n /**\n * Registers a storage provider with the manager.\n *\n * @remarks\n * This method adds a new storage provider to the manager's registry and optionally\n * sets it as the default provider for subsequent operations. If no default provider\n * is currently set, the first registered provider automatically becomes the default.\n * @param name - Unique identifier for the provider\n * @param provider - The storage provider instance implementing the `StorageProvider` interface\n * @param isDefault - Whether this provider should be set as the default (defaults to `false`)\n * @example\n * ```typescript\n * const pinata = new PinataStorage({ jwt: 'your-jwt-token' });\n * storage.register('pinata', pinata, true); // Set as default\n *\n * const ipfs = new IPFSStorage({ apiEndpoint: 'https://...' });\n * storage.register('ipfs', ipfs); // Not default\n * ```\n */\n register(name: string, provider: StorageProvider, isDefault = false): void {\n this.providers.set(name, provider);\n\n if (isDefault || this.defaultProvider === null) {\n this.defaultProvider = name;\n }\n }\n\n /**\n * Get a registered storage provider\n *\n * @param name - Provider identifier, uses default if not specified\n * @returns Storage provider instance\n */\n getProvider(name?: string): StorageProvider {\n const providerName = name ?? this.defaultProvider;\n\n if (!providerName) {\n throw new StorageError(\n \"No storage provider specified and no default provider set\",\n \"NO_PROVIDER\",\n \"manager\",\n );\n }\n\n const provider = this.providers.get(providerName);\n if (!provider) {\n throw new StorageError(\n `Storage provider '${providerName}' not found`,\n \"PROVIDER_NOT_FOUND\",\n \"manager\",\n );\n }\n\n return provider;\n }\n\n /**\n * List all registered providers\n *\n * @returns Array of provider names\n */\n listProviders(): string[] {\n return Array.from(this.providers.keys());\n }\n\n /**\n * Get the default provider name\n *\n * @returns Default provider name or null\n */\n getDefaultProvider(): string | null {\n return this.defaultProvider;\n }\n\n /**\n * Set the default provider\n *\n * @param name - Provider identifier\n */\n setDefaultProvider(name: string): void {\n if (!this.providers.has(name)) {\n throw new StorageError(\n `Cannot set default provider '${name}': provider not registered`,\n \"PROVIDER_NOT_FOUND\",\n \"manager\",\n );\n }\n this.defaultProvider = name;\n }\n\n /**\n * Uploads a file using the specified or default storage provider.\n *\n * @remarks\n * This method uploads a file to the specified provider or falls back to the default\n * provider if none is specified. The upload result includes the storage URL, file size,\n * content type, and provider-specific metadata that can be used for subsequent operations.\n * @param file - The file blob to upload\n * @param filename - Optional custom filename (defaults to auto-generated name)\n * @param providerName - Optional provider identifier (uses default if not specified)\n * @returns A Promise that resolves to the storage upload result with URL and metadata\n * @throws {StorageError} When no provider is available or upload fails\n * @example\n * ```typescript\n * // Upload to default provider\n * const result = await storage.upload(fileBlob, 'data.json');\n * console.log(`Uploaded to: ${result.url}`);\n *\n * // Upload to specific provider\n * const result2 = await storage.upload(fileBlob, 'data.json', 'pinata');\n * ```\n */\n async upload(\n file: Blob,\n filename?: string,\n providerName?: string,\n ): Promise<StorageUploadResult> {\n const provider = this.getProvider(providerName);\n return provider.upload(file, filename);\n }\n\n /**\n * Download a file using the specified or default provider\n *\n * @param url - The storage URL\n * @param providerName - Optional provider to use\n * @returns Promise with file blob\n */\n async download(url: string, providerName?: string): Promise<Blob> {\n const provider = this.getProvider(providerName);\n return provider.download(url);\n }\n\n /**\n * List files using the specified or default provider\n *\n * @param options - Optional filtering and pagination\n * @param providerName - Optional provider to use\n * @returns Promise with file list\n */\n async list(\n options?: StorageListOptions,\n providerName?: string,\n ): Promise<StorageFile[]> {\n const provider = this.getProvider(providerName);\n return provider.list(options);\n }\n\n /**\n * Delete a file using the specified or default provider\n *\n * @param url - The storage URL\n * @param providerName - Optional provider to use\n * @returns Promise with success status\n */\n async delete(url: string, providerName?: string): Promise<boolean> {\n const provider = this.getProvider(providerName);\n return provider.delete(url);\n }\n\n /**\n * Get list of registered storage provider names\n *\n * @returns Array of provider names\n */\n getStorageProviders(): string[] {\n return Array.from(this.providers.keys());\n }\n\n /**\n * Get the default storage provider name\n *\n * @returns Default provider name or undefined\n */\n getDefaultStorageProvider(): string | undefined {\n return this.defaultProvider ?? undefined;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,qBAA6B;AAwCtB,MAAM,eAAe;AAAA,EAClB,YAA0C,oBAAI,IAAI;AAAA,EAClD,kBAAiC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBzC,SAAS,MAAc,UAA2B,YAAY,OAAa;AACzE,SAAK,UAAU,IAAI,MAAM,QAAQ;AAEjC,QAAI,aAAa,KAAK,oBAAoB,MAAM;AAC9C,WAAK,kBAAkB;AAAA,IACzB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,MAAgC;AAC1C,UAAM,eAAe,QAAQ,KAAK;AAElC,QAAI,CAAC,cAAc;AACjB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,WAAW,KAAK,UAAU,IAAI,YAAY;AAChD,QAAI,CAAC,UAAU;AACb,YAAM,IAAI;AAAA,QACR,qBAAqB,YAAY;AAAA,QACjC;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAA0B;AACxB,WAAO,MAAM,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,qBAAoC;AAClC,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,mBAAmB,MAAoB;AACrC,QAAI,CAAC,KAAK,UAAU,IAAI,IAAI,GAAG;AAC7B,YAAM,IAAI;AAAA,QACR,gCAAgC,IAAI;AAAA,QACpC;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,SAAK,kBAAkB;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA,MAAM,OACJ,MACA,UACA,cAC8B;AAC9B,UAAM,WAAW,KAAK,YAAY,YAAY;AAC9C,WAAO,SAAS,OAAO,MAAM,QAAQ;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,SAAS,KAAa,cAAsC;AAChE,UAAM,WAAW,KAAK,YAAY,YAAY;AAC9C,WAAO,SAAS,SAAS,GAAG;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,KACJ,SACA,cACwB;AACxB,UAAM,WAAW,KAAK,YAAY,YAAY;AAC9C,WAAO,SAAS,KAAK,OAAO;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,OAAO,KAAa,cAAyC;AACjE,UAAM,WAAW,KAAK,YAAY,YAAY;AAC9C,WAAO,SAAS,OAAO,GAAG;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,sBAAgC;AAC9B,WAAO,MAAM,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,4BAAgD;AAC9C,WAAO,KAAK,mBAAmB;AAAA,EACjC;AACF;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/storage/manager.ts"],"sourcesContent":["/**\n * Manages multiple storage providers with a unified interface.\n *\n * @remarks\n * This module provides centralized management of storage providers, enabling\n * applications to work with multiple storage backends through a single API.\n * It handles provider registration, default selection, and operation routing.\n *\n * @category Storage\n * @module storage/manager\n */\n\nimport type {\n StorageProvider,\n StorageUploadResult,\n StorageFile,\n StorageListOptions,\n} from \"../types/storage\";\nimport { StorageError } from \"../types/storage\";\n\n/**\n * Manages multiple storage providers with a unified interface for file operations.\n *\n * @remarks\n * The StorageManager provides a consistent API for uploading, downloading, and managing\n * files across different storage backends including IPFS, Pinata, Google Drive, and\n * server-managed storage. It handles provider registration, default provider selection,\n * and automatic fallback scenarios for robust file operations.\n *\n * Used internally by DataController for encrypted file storage, but can also be used\n * directly for custom storage workflows. Each provider implements the `StorageProvider`\n * interface to ensure consistent behavior across different storage backends.\n *\n * The manager supports provider-specific configurations and features while maintaining\n * a uniform API surface for applications.\n * @example\n * ```typescript\n * import { StorageManager, IPFSStorage, PinataStorage } from '@opendatalabs/vana-sdk';\n *\n * const storage = new StorageManager();\n *\n * // Register multiple providers\n * storage.register('ipfs', new IPFSStorage({\n * apiEndpoint: 'https://api.pinata.cloud/pinning/pinFileToIPFS'\n * }), true);\n * storage.register('pinata', new PinataStorage({\n * jwt: 'your-pinata-jwt-token'\n * }));\n *\n * // Upload to default provider\n * const result = await storage.upload(fileBlob, 'myfile.json');\n *\n * // Upload to specific provider\n * const result2 = await storage.upload(fileBlob, 'myfile.json', 'pinata');\n * ```\n * @category Storage\n * @see {@link https://docs.vana.com/developer/vana-sdk-documentation/core-modules/storage-providers | Storage Providers Guide} for configuration details\n */\nexport class StorageManager {\n private providers: Map<string, StorageProvider> = new Map();\n private defaultProvider: string | null = null;\n\n /**\n * Registers a storage provider with the manager.\n *\n * @remarks\n * This method adds a new storage provider to the manager's registry and optionally\n * sets it as the default provider for subsequent operations. If no default provider\n * is currently set, the first registered provider automatically becomes the default.\n * @param name - Unique identifier for the provider\n * @param provider - The storage provider instance implementing the `StorageProvider` interface\n * @param isDefault - Whether this provider should be set as the default (defaults to `false`)\n * @example\n * ```typescript\n * const pinata = new PinataStorage({ jwt: 'your-jwt-token' });\n * storage.register('pinata', pinata, true); // Set as default\n *\n * const ipfs = new IPFSStorage({ apiEndpoint: 'https://...' });\n * storage.register('ipfs', ipfs); // Not default\n * ```\n */\n register(name: string, provider: StorageProvider, isDefault = false): void {\n this.providers.set(name, provider);\n\n if (isDefault || this.defaultProvider === null) {\n this.defaultProvider = name;\n }\n }\n\n /**\n * Retrieves a registered storage provider.\n *\n * @param name - Provider identifier.\n * If not specified, returns the default provider.\n * @returns The requested storage provider instance\n *\n * @throws {StorageError} With code 'NO_PROVIDER' if no provider available\n * @throws {StorageError} With code 'PROVIDER_NOT_FOUND' if named provider doesn't exist\n *\n * @example\n * ```typescript\n * const provider = storage.getProvider('pinata');\n * const config = provider.getConfig();\n * ```\n */\n getProvider(name?: string): StorageProvider {\n const providerName = name ?? this.defaultProvider;\n\n if (!providerName) {\n throw new StorageError(\n \"No storage provider specified and no default provider set\",\n \"NO_PROVIDER\",\n \"manager\",\n );\n }\n\n const provider = this.providers.get(providerName);\n if (!provider) {\n throw new StorageError(\n `Storage provider '${providerName}' not found`,\n \"PROVIDER_NOT_FOUND\",\n \"manager\",\n );\n }\n\n return provider;\n }\n\n /**\n * Lists all registered provider names.\n *\n * @returns Array of registered provider identifiers\n *\n * @example\n * ```typescript\n * const providers = storage.listProviders();\n * console.log('Available providers:', providers);\n * // Output: ['ipfs', 'pinata', 'google-drive']\n * ```\n */\n listProviders(): string[] {\n return Array.from(this.providers.keys());\n }\n\n /**\n * Gets the current default provider name.\n *\n * @returns Default provider identifier or null if none set\n *\n * @example\n * ```typescript\n * const defaultName = storage.getDefaultProvider();\n * if (defaultName) {\n * console.log(`Using ${defaultName} by default`);\n * }\n * ```\n */\n getDefaultProvider(): string | null {\n return this.defaultProvider;\n }\n\n /**\n * Sets the default storage provider.\n *\n * @param name - Provider identifier to set as default.\n * Must be a registered provider name.\n *\n * @throws {StorageError} With code 'PROVIDER_NOT_FOUND' if provider not registered\n *\n * @example\n * ```typescript\n * storage.setDefaultProvider('pinata');\n * // Now all operations without provider name will use Pinata\n * ```\n */\n setDefaultProvider(name: string): void {\n if (!this.providers.has(name)) {\n throw new StorageError(\n `Cannot set default provider '${name}': provider not registered`,\n \"PROVIDER_NOT_FOUND\",\n \"manager\",\n );\n }\n this.defaultProvider = name;\n }\n\n /**\n * Uploads a file using the specified or default storage provider.\n *\n * @remarks\n * This method uploads a file to the specified provider or falls back to the default\n * provider if none is specified. The upload result includes the storage URL, file size,\n * content type, and provider-specific metadata that can be used for subsequent operations.\n * @param file - The file blob to upload\n * @param filename - Optional custom filename (defaults to auto-generated name)\n * @param providerName - Optional provider identifier (uses default if not specified)\n * @returns A Promise that resolves to the storage upload result with URL and metadata\n * @throws {StorageError} When no provider is available or upload fails\n * @example\n * ```typescript\n * // Upload to default provider\n * const result = await storage.upload(fileBlob, 'data.json');\n * console.log(`Uploaded to: ${result.url}`);\n *\n * // Upload to specific provider\n * const result2 = await storage.upload(fileBlob, 'data.json', 'pinata');\n * ```\n */\n async upload(\n file: Blob,\n filename?: string,\n providerName?: string,\n ): Promise<StorageUploadResult> {\n const provider = this.getProvider(providerName);\n return provider.upload(file, filename);\n }\n\n /**\n * Downloads a file from storage.\n *\n * @param url - The storage URL to download from.\n * Format depends on the storage provider.\n * @param providerName - Optional provider identifier.\n * Uses default provider if not specified.\n * @returns The downloaded file as a Blob\n *\n * @throws {StorageError} If download fails or provider unavailable\n *\n * @example\n * ```typescript\n * const blob = await storage.download('ipfs://QmXxx...');\n * const text = await blob.text();\n * ```\n */\n async download(url: string, providerName?: string): Promise<Blob> {\n const provider = this.getProvider(providerName);\n return provider.download(url);\n }\n\n /**\n * Lists files in storage.\n *\n * @param options - Optional filtering and pagination.\n * @param options.namePattern - Pattern to filter files.\n * @param options.limit - Maximum files to return.\n * @param providerName - Optional provider identifier.\n * Uses default provider if not specified.\n * @returns Array of file metadata\n *\n * @throws {StorageError} If listing fails or not supported by provider\n *\n * @example\n * ```typescript\n * const files = await storage.list(\n * { namePattern: '*.json', limit: 10 },\n * 'google-drive'\n * );\n * ```\n */\n async list(\n options?: StorageListOptions,\n providerName?: string,\n ): Promise<StorageFile[]> {\n const provider = this.getProvider(providerName);\n return provider.list(options);\n }\n\n /**\n * Deletes a file from storage.\n *\n * @param url - The storage URL to delete.\n * Must be a valid URL for the provider.\n * @param providerName - Optional provider identifier.\n * Uses default provider if not specified.\n * @returns True if deletion succeeded, false otherwise\n *\n * @throws {StorageError} If deletion fails or not supported by provider\n *\n * @example\n * ```typescript\n * const success = await storage.delete('ipfs://QmXxx...');\n * if (success) {\n * console.log('File deleted successfully');\n * }\n * ```\n */\n async delete(url: string, providerName?: string): Promise<boolean> {\n const provider = this.getProvider(providerName);\n return provider.delete(url);\n }\n\n /**\n * Gets all registered storage provider names.\n *\n * @returns Array of provider identifiers\n *\n * @deprecated Use `listProviders()` instead\n *\n * @example\n * ```typescript\n * const providers = storage.getStorageProviders();\n * ```\n */\n getStorageProviders(): string[] {\n return Array.from(this.providers.keys());\n }\n\n /**\n * Gets the default storage provider name.\n *\n * @returns Default provider identifier or undefined if none set\n *\n * @deprecated Use `getDefaultProvider()` instead\n *\n * @example\n * ```typescript\n * const defaultProvider = storage.getDefaultStorageProvider();\n * ```\n */\n getDefaultStorageProvider(): string | undefined {\n return this.defaultProvider ?? undefined;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBA,qBAA6B;AAwCtB,MAAM,eAAe;AAAA,EAClB,YAA0C,oBAAI,IAAI;AAAA,EAClD,kBAAiC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBzC,SAAS,MAAc,UAA2B,YAAY,OAAa;AACzE,SAAK,UAAU,IAAI,MAAM,QAAQ;AAEjC,QAAI,aAAa,KAAK,oBAAoB,MAAM;AAC9C,WAAK,kBAAkB;AAAA,IACzB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,YAAY,MAAgC;AAC1C,UAAM,eAAe,QAAQ,KAAK;AAElC,QAAI,CAAC,cAAc;AACjB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,WAAW,KAAK,UAAU,IAAI,YAAY;AAChD,QAAI,CAAC,UAAU;AACb,YAAM,IAAI;AAAA,QACR,qBAAqB,YAAY;AAAA,QACjC;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,gBAA0B;AACxB,WAAO,MAAM,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,qBAAoC;AAClC,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,mBAAmB,MAAoB;AACrC,QAAI,CAAC,KAAK,UAAU,IAAI,IAAI,GAAG;AAC7B,YAAM,IAAI;AAAA,QACR,gCAAgC,IAAI;AAAA,QACpC;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,SAAK,kBAAkB;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA,MAAM,OACJ,MACA,UACA,cAC8B;AAC9B,UAAM,WAAW,KAAK,YAAY,YAAY;AAC9C,WAAO,SAAS,OAAO,MAAM,QAAQ;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,MAAM,SAAS,KAAa,cAAsC;AAChE,UAAM,WAAW,KAAK,YAAY,YAAY;AAC9C,WAAO,SAAS,SAAS,GAAG;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,MAAM,KACJ,SACA,cACwB;AACxB,UAAM,WAAW,KAAK,YAAY,YAAY;AAC9C,WAAO,SAAS,KAAK,OAAO;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,MAAM,OAAO,KAAa,cAAyC;AACjE,UAAM,WAAW,KAAK,YAAY,YAAY;AAC9C,WAAO,SAAS,OAAO,GAAG;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,sBAAgC;AAC9B,WAAO,MAAM,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,4BAAgD;AAC9C,WAAO,KAAK,mBAAmB;AAAA,EACjC;AACF;","names":[]}
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manages multiple storage providers with a unified interface.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* This module provides centralized management of storage providers, enabling
|
|
6
|
+
* applications to work with multiple storage backends through a single API.
|
|
7
|
+
* It handles provider registration, default selection, and operation routing.
|
|
8
|
+
*
|
|
9
|
+
* @category Storage
|
|
10
|
+
* @module storage/manager
|
|
11
|
+
*/
|
|
1
12
|
import type { StorageProvider, StorageUploadResult, StorageFile, StorageListOptions } from "../types/storage";
|
|
2
13
|
/**
|
|
3
14
|
* Manages multiple storage providers with a unified interface for file operations.
|
|
@@ -61,28 +72,62 @@ export declare class StorageManager {
|
|
|
61
72
|
*/
|
|
62
73
|
register(name: string, provider: StorageProvider, isDefault?: boolean): void;
|
|
63
74
|
/**
|
|
64
|
-
*
|
|
75
|
+
* Retrieves a registered storage provider.
|
|
76
|
+
*
|
|
77
|
+
* @param name - Provider identifier.
|
|
78
|
+
* If not specified, returns the default provider.
|
|
79
|
+
* @returns The requested storage provider instance
|
|
65
80
|
*
|
|
66
|
-
* @
|
|
67
|
-
* @
|
|
81
|
+
* @throws {StorageError} With code 'NO_PROVIDER' if no provider available
|
|
82
|
+
* @throws {StorageError} With code 'PROVIDER_NOT_FOUND' if named provider doesn't exist
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* const provider = storage.getProvider('pinata');
|
|
87
|
+
* const config = provider.getConfig();
|
|
88
|
+
* ```
|
|
68
89
|
*/
|
|
69
90
|
getProvider(name?: string): StorageProvider;
|
|
70
91
|
/**
|
|
71
|
-
*
|
|
92
|
+
* Lists all registered provider names.
|
|
93
|
+
*
|
|
94
|
+
* @returns Array of registered provider identifiers
|
|
72
95
|
*
|
|
73
|
-
* @
|
|
96
|
+
* @example
|
|
97
|
+
* ```typescript
|
|
98
|
+
* const providers = storage.listProviders();
|
|
99
|
+
* console.log('Available providers:', providers);
|
|
100
|
+
* // Output: ['ipfs', 'pinata', 'google-drive']
|
|
101
|
+
* ```
|
|
74
102
|
*/
|
|
75
103
|
listProviders(): string[];
|
|
76
104
|
/**
|
|
77
|
-
*
|
|
105
|
+
* Gets the current default provider name.
|
|
106
|
+
*
|
|
107
|
+
* @returns Default provider identifier or null if none set
|
|
78
108
|
*
|
|
79
|
-
* @
|
|
109
|
+
* @example
|
|
110
|
+
* ```typescript
|
|
111
|
+
* const defaultName = storage.getDefaultProvider();
|
|
112
|
+
* if (defaultName) {
|
|
113
|
+
* console.log(`Using ${defaultName} by default`);
|
|
114
|
+
* }
|
|
115
|
+
* ```
|
|
80
116
|
*/
|
|
81
117
|
getDefaultProvider(): string | null;
|
|
82
118
|
/**
|
|
83
|
-
*
|
|
119
|
+
* Sets the default storage provider.
|
|
84
120
|
*
|
|
85
|
-
* @param name - Provider identifier
|
|
121
|
+
* @param name - Provider identifier to set as default.
|
|
122
|
+
* Must be a registered provider name.
|
|
123
|
+
*
|
|
124
|
+
* @throws {StorageError} With code 'PROVIDER_NOT_FOUND' if provider not registered
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* ```typescript
|
|
128
|
+
* storage.setDefaultProvider('pinata');
|
|
129
|
+
* // Now all operations without provider name will use Pinata
|
|
130
|
+
* ```
|
|
86
131
|
*/
|
|
87
132
|
setDefaultProvider(name: string): void;
|
|
88
133
|
/**
|
|
@@ -109,39 +154,88 @@ export declare class StorageManager {
|
|
|
109
154
|
*/
|
|
110
155
|
upload(file: Blob, filename?: string, providerName?: string): Promise<StorageUploadResult>;
|
|
111
156
|
/**
|
|
112
|
-
*
|
|
157
|
+
* Downloads a file from storage.
|
|
158
|
+
*
|
|
159
|
+
* @param url - The storage URL to download from.
|
|
160
|
+
* Format depends on the storage provider.
|
|
161
|
+
* @param providerName - Optional provider identifier.
|
|
162
|
+
* Uses default provider if not specified.
|
|
163
|
+
* @returns The downloaded file as a Blob
|
|
113
164
|
*
|
|
114
|
-
* @
|
|
115
|
-
*
|
|
116
|
-
* @
|
|
165
|
+
* @throws {StorageError} If download fails or provider unavailable
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* ```typescript
|
|
169
|
+
* const blob = await storage.download('ipfs://QmXxx...');
|
|
170
|
+
* const text = await blob.text();
|
|
171
|
+
* ```
|
|
117
172
|
*/
|
|
118
173
|
download(url: string, providerName?: string): Promise<Blob>;
|
|
119
174
|
/**
|
|
120
|
-
*
|
|
175
|
+
* Lists files in storage.
|
|
176
|
+
*
|
|
177
|
+
* @param options - Optional filtering and pagination.
|
|
178
|
+
* @param options.namePattern - Pattern to filter files.
|
|
179
|
+
* @param options.limit - Maximum files to return.
|
|
180
|
+
* @param providerName - Optional provider identifier.
|
|
181
|
+
* Uses default provider if not specified.
|
|
182
|
+
* @returns Array of file metadata
|
|
183
|
+
*
|
|
184
|
+
* @throws {StorageError} If listing fails or not supported by provider
|
|
121
185
|
*
|
|
122
|
-
* @
|
|
123
|
-
*
|
|
124
|
-
*
|
|
186
|
+
* @example
|
|
187
|
+
* ```typescript
|
|
188
|
+
* const files = await storage.list(
|
|
189
|
+
* { namePattern: '*.json', limit: 10 },
|
|
190
|
+
* 'google-drive'
|
|
191
|
+
* );
|
|
192
|
+
* ```
|
|
125
193
|
*/
|
|
126
194
|
list(options?: StorageListOptions, providerName?: string): Promise<StorageFile[]>;
|
|
127
195
|
/**
|
|
128
|
-
*
|
|
196
|
+
* Deletes a file from storage.
|
|
129
197
|
*
|
|
130
|
-
* @param url - The storage URL
|
|
131
|
-
*
|
|
132
|
-
* @
|
|
198
|
+
* @param url - The storage URL to delete.
|
|
199
|
+
* Must be a valid URL for the provider.
|
|
200
|
+
* @param providerName - Optional provider identifier.
|
|
201
|
+
* Uses default provider if not specified.
|
|
202
|
+
* @returns True if deletion succeeded, false otherwise
|
|
203
|
+
*
|
|
204
|
+
* @throws {StorageError} If deletion fails or not supported by provider
|
|
205
|
+
*
|
|
206
|
+
* @example
|
|
207
|
+
* ```typescript
|
|
208
|
+
* const success = await storage.delete('ipfs://QmXxx...');
|
|
209
|
+
* if (success) {
|
|
210
|
+
* console.log('File deleted successfully');
|
|
211
|
+
* }
|
|
212
|
+
* ```
|
|
133
213
|
*/
|
|
134
214
|
delete(url: string, providerName?: string): Promise<boolean>;
|
|
135
215
|
/**
|
|
136
|
-
*
|
|
216
|
+
* Gets all registered storage provider names.
|
|
217
|
+
*
|
|
218
|
+
* @returns Array of provider identifiers
|
|
137
219
|
*
|
|
138
|
-
* @
|
|
220
|
+
* @deprecated Use `listProviders()` instead
|
|
221
|
+
*
|
|
222
|
+
* @example
|
|
223
|
+
* ```typescript
|
|
224
|
+
* const providers = storage.getStorageProviders();
|
|
225
|
+
* ```
|
|
139
226
|
*/
|
|
140
227
|
getStorageProviders(): string[];
|
|
141
228
|
/**
|
|
142
|
-
*
|
|
229
|
+
* Gets the default storage provider name.
|
|
230
|
+
*
|
|
231
|
+
* @returns Default provider identifier or undefined if none set
|
|
232
|
+
*
|
|
233
|
+
* @deprecated Use `getDefaultProvider()` instead
|
|
143
234
|
*
|
|
144
|
-
* @
|
|
235
|
+
* @example
|
|
236
|
+
* ```typescript
|
|
237
|
+
* const defaultProvider = storage.getDefaultStorageProvider();
|
|
238
|
+
* ```
|
|
145
239
|
*/
|
|
146
240
|
getDefaultStorageProvider(): string | undefined;
|
|
147
241
|
}
|
package/dist/storage/manager.js
CHANGED
|
@@ -28,10 +28,20 @@ class StorageManager {
|
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
31
|
+
* Retrieves a registered storage provider.
|
|
32
32
|
*
|
|
33
|
-
* @param name - Provider identifier
|
|
34
|
-
*
|
|
33
|
+
* @param name - Provider identifier.
|
|
34
|
+
* If not specified, returns the default provider.
|
|
35
|
+
* @returns The requested storage provider instance
|
|
36
|
+
*
|
|
37
|
+
* @throws {StorageError} With code 'NO_PROVIDER' if no provider available
|
|
38
|
+
* @throws {StorageError} With code 'PROVIDER_NOT_FOUND' if named provider doesn't exist
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* const provider = storage.getProvider('pinata');
|
|
43
|
+
* const config = provider.getConfig();
|
|
44
|
+
* ```
|
|
35
45
|
*/
|
|
36
46
|
getProvider(name) {
|
|
37
47
|
const providerName = name ?? this.defaultProvider;
|
|
@@ -53,25 +63,49 @@ class StorageManager {
|
|
|
53
63
|
return provider;
|
|
54
64
|
}
|
|
55
65
|
/**
|
|
56
|
-
*
|
|
66
|
+
* Lists all registered provider names.
|
|
67
|
+
*
|
|
68
|
+
* @returns Array of registered provider identifiers
|
|
57
69
|
*
|
|
58
|
-
* @
|
|
70
|
+
* @example
|
|
71
|
+
* ```typescript
|
|
72
|
+
* const providers = storage.listProviders();
|
|
73
|
+
* console.log('Available providers:', providers);
|
|
74
|
+
* // Output: ['ipfs', 'pinata', 'google-drive']
|
|
75
|
+
* ```
|
|
59
76
|
*/
|
|
60
77
|
listProviders() {
|
|
61
78
|
return Array.from(this.providers.keys());
|
|
62
79
|
}
|
|
63
80
|
/**
|
|
64
|
-
*
|
|
81
|
+
* Gets the current default provider name.
|
|
65
82
|
*
|
|
66
|
-
* @returns Default provider
|
|
83
|
+
* @returns Default provider identifier or null if none set
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```typescript
|
|
87
|
+
* const defaultName = storage.getDefaultProvider();
|
|
88
|
+
* if (defaultName) {
|
|
89
|
+
* console.log(`Using ${defaultName} by default`);
|
|
90
|
+
* }
|
|
91
|
+
* ```
|
|
67
92
|
*/
|
|
68
93
|
getDefaultProvider() {
|
|
69
94
|
return this.defaultProvider;
|
|
70
95
|
}
|
|
71
96
|
/**
|
|
72
|
-
*
|
|
97
|
+
* Sets the default storage provider.
|
|
98
|
+
*
|
|
99
|
+
* @param name - Provider identifier to set as default.
|
|
100
|
+
* Must be a registered provider name.
|
|
73
101
|
*
|
|
74
|
-
* @
|
|
102
|
+
* @throws {StorageError} With code 'PROVIDER_NOT_FOUND' if provider not registered
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```typescript
|
|
106
|
+
* storage.setDefaultProvider('pinata');
|
|
107
|
+
* // Now all operations without provider name will use Pinata
|
|
108
|
+
* ```
|
|
75
109
|
*/
|
|
76
110
|
setDefaultProvider(name) {
|
|
77
111
|
if (!this.providers.has(name)) {
|
|
@@ -110,50 +144,99 @@ class StorageManager {
|
|
|
110
144
|
return provider.upload(file, filename);
|
|
111
145
|
}
|
|
112
146
|
/**
|
|
113
|
-
*
|
|
147
|
+
* Downloads a file from storage.
|
|
148
|
+
*
|
|
149
|
+
* @param url - The storage URL to download from.
|
|
150
|
+
* Format depends on the storage provider.
|
|
151
|
+
* @param providerName - Optional provider identifier.
|
|
152
|
+
* Uses default provider if not specified.
|
|
153
|
+
* @returns The downloaded file as a Blob
|
|
154
|
+
*
|
|
155
|
+
* @throws {StorageError} If download fails or provider unavailable
|
|
114
156
|
*
|
|
115
|
-
* @
|
|
116
|
-
*
|
|
117
|
-
*
|
|
157
|
+
* @example
|
|
158
|
+
* ```typescript
|
|
159
|
+
* const blob = await storage.download('ipfs://QmXxx...');
|
|
160
|
+
* const text = await blob.text();
|
|
161
|
+
* ```
|
|
118
162
|
*/
|
|
119
163
|
async download(url, providerName) {
|
|
120
164
|
const provider = this.getProvider(providerName);
|
|
121
165
|
return provider.download(url);
|
|
122
166
|
}
|
|
123
167
|
/**
|
|
124
|
-
*
|
|
168
|
+
* Lists files in storage.
|
|
169
|
+
*
|
|
170
|
+
* @param options - Optional filtering and pagination.
|
|
171
|
+
* @param options.namePattern - Pattern to filter files.
|
|
172
|
+
* @param options.limit - Maximum files to return.
|
|
173
|
+
* @param providerName - Optional provider identifier.
|
|
174
|
+
* Uses default provider if not specified.
|
|
175
|
+
* @returns Array of file metadata
|
|
176
|
+
*
|
|
177
|
+
* @throws {StorageError} If listing fails or not supported by provider
|
|
125
178
|
*
|
|
126
|
-
* @
|
|
127
|
-
*
|
|
128
|
-
*
|
|
179
|
+
* @example
|
|
180
|
+
* ```typescript
|
|
181
|
+
* const files = await storage.list(
|
|
182
|
+
* { namePattern: '*.json', limit: 10 },
|
|
183
|
+
* 'google-drive'
|
|
184
|
+
* );
|
|
185
|
+
* ```
|
|
129
186
|
*/
|
|
130
187
|
async list(options, providerName) {
|
|
131
188
|
const provider = this.getProvider(providerName);
|
|
132
189
|
return provider.list(options);
|
|
133
190
|
}
|
|
134
191
|
/**
|
|
135
|
-
*
|
|
192
|
+
* Deletes a file from storage.
|
|
136
193
|
*
|
|
137
|
-
* @param url - The storage URL
|
|
138
|
-
*
|
|
139
|
-
* @
|
|
194
|
+
* @param url - The storage URL to delete.
|
|
195
|
+
* Must be a valid URL for the provider.
|
|
196
|
+
* @param providerName - Optional provider identifier.
|
|
197
|
+
* Uses default provider if not specified.
|
|
198
|
+
* @returns True if deletion succeeded, false otherwise
|
|
199
|
+
*
|
|
200
|
+
* @throws {StorageError} If deletion fails or not supported by provider
|
|
201
|
+
*
|
|
202
|
+
* @example
|
|
203
|
+
* ```typescript
|
|
204
|
+
* const success = await storage.delete('ipfs://QmXxx...');
|
|
205
|
+
* if (success) {
|
|
206
|
+
* console.log('File deleted successfully');
|
|
207
|
+
* }
|
|
208
|
+
* ```
|
|
140
209
|
*/
|
|
141
210
|
async delete(url, providerName) {
|
|
142
211
|
const provider = this.getProvider(providerName);
|
|
143
212
|
return provider.delete(url);
|
|
144
213
|
}
|
|
145
214
|
/**
|
|
146
|
-
*
|
|
215
|
+
* Gets all registered storage provider names.
|
|
147
216
|
*
|
|
148
|
-
* @returns Array of provider
|
|
217
|
+
* @returns Array of provider identifiers
|
|
218
|
+
*
|
|
219
|
+
* @deprecated Use `listProviders()` instead
|
|
220
|
+
*
|
|
221
|
+
* @example
|
|
222
|
+
* ```typescript
|
|
223
|
+
* const providers = storage.getStorageProviders();
|
|
224
|
+
* ```
|
|
149
225
|
*/
|
|
150
226
|
getStorageProviders() {
|
|
151
227
|
return Array.from(this.providers.keys());
|
|
152
228
|
}
|
|
153
229
|
/**
|
|
154
|
-
*
|
|
230
|
+
* Gets the default storage provider name.
|
|
155
231
|
*
|
|
156
|
-
* @returns Default provider
|
|
232
|
+
* @returns Default provider identifier or undefined if none set
|
|
233
|
+
*
|
|
234
|
+
* @deprecated Use `getDefaultProvider()` instead
|
|
235
|
+
*
|
|
236
|
+
* @example
|
|
237
|
+
* ```typescript
|
|
238
|
+
* const defaultProvider = storage.getDefaultStorageProvider();
|
|
239
|
+
* ```
|
|
157
240
|
*/
|
|
158
241
|
getDefaultStorageProvider() {
|
|
159
242
|
return this.defaultProvider ?? void 0;
|