@opendatalabs/vana-sdk 0.1.0-alpha.9b6ddbc → 0.1.0-alpha.9bbda27
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/README.md +67 -351
- 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/contracts.config.cjs +403 -0
- package/dist/config/contracts.config.cjs.map +1 -0
- package/dist/config/contracts.config.d.ts +84 -0
- package/dist/config/contracts.config.js +378 -0
- package/dist/config/contracts.config.js.map +1 -0
- package/dist/contracts/contractController.cjs +1 -1
- package/dist/contracts/contractController.cjs.map +1 -1
- package/dist/contracts/contractController.js +1 -1
- 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/accessSettlement.cjs +289 -0
- package/dist/controllers/accessSettlement.cjs.map +1 -0
- package/dist/controllers/accessSettlement.d.ts +157 -0
- package/dist/controllers/accessSettlement.js +265 -0
- package/dist/controllers/accessSettlement.js.map +1 -0
- package/dist/controllers/accessSettlement.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 +279 -160
- package/dist/controllers/data.cjs.map +1 -1
- package/dist/controllers/data.d.ts +34 -19
- package/dist/controllers/data.js +292 -163
- package/dist/controllers/data.js.map +1 -1
- package/dist/controllers/dataset.cjs +357 -0
- package/dist/controllers/dataset.cjs.map +1 -0
- package/dist/controllers/dataset.d.ts +178 -0
- package/dist/controllers/dataset.js +333 -0
- package/dist/controllers/dataset.js.map +1 -0
- package/dist/controllers/dataset.test.d.ts +1 -0
- 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 +606 -214
- package/dist/controllers/permissions.cjs.map +1 -1
- package/dist/controllers/permissions.d.ts +141 -34
- package/dist/controllers/permissions.js +606 -214
- package/dist/controllers/permissions.js.map +1 -1
- package/dist/controllers/runtimePermissions.cjs +285 -0
- package/dist/controllers/runtimePermissions.cjs.map +1 -0
- package/dist/controllers/runtimePermissions.d.ts +152 -0
- package/dist/controllers/runtimePermissions.js +264 -0
- package/dist/controllers/runtimePermissions.js.map +1 -0
- package/dist/controllers/runtimePermissions.test.d.ts +1 -0
- package/dist/controllers/schemas.cjs +82 -5
- package/dist/controllers/schemas.cjs.map +1 -1
- package/dist/controllers/schemas.d.ts +41 -0
- package/dist/controllers/schemas.js +82 -5
- package/dist/controllers/schemas.js.map +1 -1
- package/dist/controllers/server.cjs +184 -49
- package/dist/controllers/server.cjs.map +1 -1
- package/dist/controllers/server.d.ts +74 -13
- package/dist/controllers/server.js +184 -49
- 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/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 +67 -1
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.ts +63 -3
- package/dist/core.js +67 -1
- package/dist/core.js.map +1 -1
- package/dist/crypto/ecies/__tests__/constants.test.d.ts +1 -1
- package/dist/crypto/ecies/__tests__/interface.test.d.ts +1 -0
- package/dist/crypto/ecies/__tests__/serialization.test.d.ts +8 -0
- package/dist/crypto/ecies/__tests__/utils.test.d.ts +1 -0
- package/dist/crypto/ecies/base.cjs +59 -23
- package/dist/crypto/ecies/base.cjs.map +1 -1
- package/dist/crypto/ecies/base.js +59 -23
- package/dist/crypto/ecies/base.js.map +1 -1
- package/dist/crypto/ecies/constants.cjs +2 -10
- package/dist/crypto/ecies/constants.cjs.map +1 -1
- package/dist/crypto/ecies/constants.d.ts +0 -9
- package/dist/crypto/ecies/constants.js +1 -8
- package/dist/crypto/ecies/constants.js.map +1 -1
- package/dist/crypto/ecies/index.cjs.map +1 -1
- package/dist/crypto/ecies/index.d.ts +10 -2
- package/dist/crypto/ecies/index.js.map +1 -1
- package/dist/crypto/ecies/interface.cjs +19 -2
- package/dist/crypto/ecies/interface.cjs.map +1 -1
- package/dist/crypto/ecies/interface.js +19 -2
- package/dist/crypto/ecies/interface.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/AccessSettlementImplementation.cjs +635 -0
- package/dist/generated/abi/AccessSettlementImplementation.cjs.map +1 -0
- package/dist/generated/abi/AccessSettlementImplementation.d.ts +468 -0
- package/dist/generated/abi/AccessSettlementImplementation.js +611 -0
- package/dist/generated/abi/AccessSettlementImplementation.js.map +1 -0
- package/dist/generated/abi/AttestationPolicyImplementation.cjs +614 -0
- package/dist/generated/abi/AttestationPolicyImplementation.cjs.map +1 -0
- package/dist/generated/abi/AttestationPolicyImplementation.d.ts +449 -0
- package/dist/generated/abi/AttestationPolicyImplementation.js +590 -0
- package/dist/generated/abi/AttestationPolicyImplementation.js.map +1 -0
- package/dist/generated/abi/ComputeEngineImplementation.cjs.map +1 -1
- package/dist/generated/abi/ComputeEngineImplementation.js.map +1 -1
- package/dist/generated/abi/{DLPTreasuryImplementation.cjs → ComputeEngineTreasuryImplementation.cjs} +16 -92
- package/dist/generated/abi/ComputeEngineTreasuryImplementation.cjs.map +1 -0
- package/dist/generated/abi/{DLPTreasuryImplementation.d.ts → ComputeEngineTreasuryImplementation.d.ts} +9 -67
- package/dist/generated/abi/{DLPTreasuryImplementation.js → ComputeEngineTreasuryImplementation.js} +12 -88
- package/dist/generated/abi/ComputeEngineTreasuryImplementation.js.map +1 -0
- package/dist/generated/abi/ComputeInstructionRegistryImplementation.cjs.map +1 -1
- package/dist/generated/abi/ComputeInstructionRegistryImplementation.js.map +1 -1
- package/dist/generated/abi/DATFactoryImplementation.cjs.map +1 -1
- package/dist/generated/abi/DATFactoryImplementation.js.map +1 -1
- package/dist/generated/abi/DATImplementation.cjs.map +1 -1
- package/dist/generated/abi/DATImplementation.js.map +1 -1
- package/dist/generated/abi/DATPausableImplementation.cjs.map +1 -1
- package/dist/generated/abi/DATPausableImplementation.js.map +1 -1
- package/dist/generated/abi/DATVotesImplementation.cjs.map +1 -1
- package/dist/generated/abi/DATVotesImplementation.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/DLPRegistryTreasuryImplementation.cjs.map +1 -1
- package/dist/generated/abi/DLPRegistryTreasuryImplementation.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/DLPRewardSwapImplementation.cjs.map +1 -1
- package/dist/generated/abi/DLPRewardSwapImplementation.js.map +1 -1
- package/dist/generated/abi/DataLiquidityPoolImplementation.cjs +282 -100
- package/dist/generated/abi/DataLiquidityPoolImplementation.cjs.map +1 -1
- package/dist/generated/abi/DataLiquidityPoolImplementation.d.ts +218 -79
- package/dist/generated/abi/DataLiquidityPoolImplementation.js +281 -99
- package/dist/generated/abi/DataLiquidityPoolImplementation.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/DataRefinerRegistryImplementation.cjs.map +1 -1
- package/dist/generated/abi/DataRefinerRegistryImplementation.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/DatasetRegistryImplementation.cjs +751 -0
- package/dist/generated/abi/DatasetRegistryImplementation.cjs.map +1 -0
- package/dist/generated/abi/DatasetRegistryImplementation.d.ts +557 -0
- package/dist/generated/abi/DatasetRegistryImplementation.js +727 -0
- package/dist/generated/abi/DatasetRegistryImplementation.js.map +1 -0
- package/dist/generated/abi/ProtocolConfigImplementation.cjs +578 -0
- package/dist/generated/abi/ProtocolConfigImplementation.cjs.map +1 -0
- package/dist/generated/abi/ProtocolConfigImplementation.d.ts +423 -0
- package/dist/generated/abi/ProtocolConfigImplementation.js +554 -0
- package/dist/generated/abi/ProtocolConfigImplementation.js.map +1 -0
- package/dist/generated/abi/QueryEngineImplementation.cjs.map +1 -1
- package/dist/generated/abi/QueryEngineImplementation.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/TeePoolDedicatedGpuImplementation.cjs.map +1 -1
- package/dist/generated/abi/TeePoolDedicatedGpuImplementation.js.map +1 -1
- package/dist/generated/abi/TeePoolDedicatedStandardImplementation.cjs.map +1 -1
- package/dist/generated/abi/TeePoolDedicatedStandardImplementation.js.map +1 -1
- package/dist/generated/abi/TeePoolEphemeralStandardImplementation.cjs.map +1 -1
- package/dist/generated/abi/TeePoolEphemeralStandardImplementation.js.map +1 -1
- package/dist/generated/abi/TeePoolPersistentGpuImplementation.cjs.map +1 -1
- package/dist/generated/abi/TeePoolPersistentGpuImplementation.js.map +1 -1
- package/dist/generated/abi/TeePoolPersistentStandardImplementation.cjs.map +1 -1
- package/dist/generated/abi/TeePoolPersistentStandardImplementation.js.map +1 -1
- package/dist/generated/abi/TeePoolPhalaImplementation.cjs.map +1 -1
- package/dist/generated/abi/TeePoolPhalaImplementation.js.map +1 -1
- package/dist/generated/abi/UniswapV3NonfungiblePositionManagerImplementation.cjs +1251 -0
- package/dist/generated/abi/UniswapV3NonfungiblePositionManagerImplementation.cjs.map +1 -0
- package/dist/generated/abi/UniswapV3NonfungiblePositionManagerImplementation.d.ts +948 -0
- package/dist/generated/abi/UniswapV3NonfungiblePositionManagerImplementation.js +1227 -0
- package/dist/generated/abi/UniswapV3NonfungiblePositionManagerImplementation.js.map +1 -0
- package/dist/generated/abi/UniswapV3QuoterV2Implementation.cjs +297 -0
- package/dist/generated/abi/UniswapV3QuoterV2Implementation.cjs.map +1 -0
- package/dist/generated/abi/UniswapV3QuoterV2Implementation.d.ts +206 -0
- package/dist/generated/abi/UniswapV3QuoterV2Implementation.js +273 -0
- package/dist/generated/abi/UniswapV3QuoterV2Implementation.js.map +1 -0
- 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/VanaPoolTreasuryImplementation.cjs.map +1 -1
- package/dist/generated/abi/VanaPoolTreasuryImplementation.js.map +1 -1
- package/dist/generated/abi/VanaRuntimePermissionsImplementation.cjs +759 -0
- package/dist/generated/abi/VanaRuntimePermissionsImplementation.cjs.map +1 -0
- package/dist/generated/abi/VanaRuntimePermissionsImplementation.d.ts +563 -0
- package/dist/generated/abi/VanaRuntimePermissionsImplementation.js +735 -0
- package/dist/generated/abi/VanaRuntimePermissionsImplementation.js.map +1 -0
- package/dist/generated/abi/VanaRuntimeServersImplementation.cjs +820 -0
- package/dist/generated/abi/VanaRuntimeServersImplementation.cjs.map +1 -0
- package/dist/generated/abi/VanaRuntimeServersImplementation.d.ts +609 -0
- package/dist/generated/abi/VanaRuntimeServersImplementation.js +796 -0
- package/dist/generated/abi/VanaRuntimeServersImplementation.js.map +1 -0
- package/dist/generated/abi/VanaTreasuryImplementation.cjs +536 -0
- package/dist/generated/abi/VanaTreasuryImplementation.cjs.map +1 -0
- package/dist/generated/abi/VanaTreasuryImplementation.d.ts +393 -0
- package/dist/generated/abi/VanaTreasuryImplementation.js +512 -0
- package/dist/generated/abi/VanaTreasuryImplementation.js.map +1 -0
- package/dist/generated/abi/WVANAImplementation.cjs +339 -0
- package/dist/generated/abi/WVANAImplementation.cjs.map +1 -0
- package/dist/generated/abi/WVANAImplementation.d.ts +244 -0
- package/dist/generated/abi/WVANAImplementation.js +315 -0
- package/dist/generated/abi/WVANAImplementation.js.map +1 -0
- package/dist/generated/abi/index.cjs +79 -47
- package/dist/generated/abi/index.cjs.map +1 -1
- package/dist/generated/abi/index.d.ts +15783 -10449
- package/dist/generated/abi/index.js +65 -43
- package/dist/generated/abi/index.js.map +1 -1
- package/dist/{config → generated}/addresses.cjs +174 -75
- package/dist/generated/addresses.cjs.map +1 -0
- package/dist/{config → generated}/addresses.d.ts +174 -165
- package/dist/{config → generated}/addresses.js +174 -75
- package/dist/generated/addresses.js.map +1 -0
- package/dist/generated/event-types.cjs.map +1 -1
- package/dist/generated/event-types.d.ts +482 -399
- package/dist/generated/eventRegistry.cjs +2601 -724
- package/dist/generated/eventRegistry.cjs.map +1 -1
- package/dist/generated/eventRegistry.d.ts +2 -2
- package/dist/generated/eventRegistry.js +2601 -724
- 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 +31 -11
- 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 +7 -1
- package/dist/index.browser.js +26 -1
- package/dist/index.browser.js.map +1 -1
- package/dist/index.node.cjs +47 -1
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.d.ts +55 -6
- package/dist/index.node.js +43 -2
- 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/server/relayerHandler.cjs +313 -75
- package/dist/server/relayerHandler.cjs.map +1 -1
- package/dist/server/relayerHandler.d.ts +35 -2
- package/dist/server/relayerHandler.js +313 -75
- 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/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/tests/data-upload-owner-validation.test.d.ts +1 -0
- package/dist/types/accessSettlement.cjs +17 -0
- package/dist/types/accessSettlement.cjs.map +1 -0
- package/dist/types/accessSettlement.d.ts +66 -0
- package/dist/types/accessSettlement.js +1 -0
- package/dist/types/accessSettlement.js.map +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/config.cjs.map +1 -1
- package/dist/types/config.d.ts +32 -0
- package/dist/types/config.js.map +1 -1
- 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 +7 -4
- package/dist/types/dataset.cjs +17 -0
- package/dist/types/dataset.cjs.map +1 -0
- package/dist/types/dataset.d.ts +51 -0
- package/dist/types/dataset.js +1 -0
- package/dist/types/dataset.js.map +1 -0
- package/dist/types/generics.cjs.map +1 -1
- package/dist/types/generics.d.ts +1 -1
- package/dist/types/index.cjs.map +1 -1
- package/dist/types/index.d.ts +7 -2
- 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 +8 -52
- 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 +4 -0
- package/dist/types/relayer.cjs.map +1 -1
- package/dist/types/relayer.d.ts +55 -10
- package/dist/types/runtimePermissions.cjs +17 -0
- package/dist/types/runtimePermissions.cjs.map +1 -0
- package/dist/types/runtimePermissions.d.ts +122 -0
- package/dist/types/runtimePermissions.js +1 -0
- package/dist/types/runtimePermissions.js.map +1 -0
- package/dist/types/utils.cjs.map +1 -1
- package/dist/types/utils.d.ts +0 -49
- 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/blockchain/registry.cjs +1 -1
- package/dist/utils/blockchain/registry.cjs.map +1 -1
- package/dist/utils/blockchain/registry.js +1 -1
- package/dist/utils/blockchain/registry.js.map +1 -1
- 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.js +4 -1
- package/dist/utils/grantFiles.js.map +1 -1
- package/dist/utils/ipfs.cjs +1 -3
- package/dist/utils/ipfs.cjs.map +1 -1
- package/dist/utils/ipfs.d.ts +4 -4
- package/dist/utils/ipfs.js +1 -3
- package/dist/utils/ipfs.js.map +1 -1
- package/dist/utils/multicall.cjs +1 -1
- package/dist/utils/multicall.cjs.map +1 -1
- package/dist/utils/multicall.js +1 -1
- package/dist/utils/multicall.js.map +1 -1
- package/dist/utils/runtimeGrantFiles.cjs +84 -0
- package/dist/utils/runtimeGrantFiles.cjs.map +1 -0
- package/dist/utils/runtimeGrantFiles.d.ts +66 -0
- package/dist/utils/runtimeGrantFiles.js +58 -0
- package/dist/utils/runtimeGrantFiles.js.map +1 -0
- 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/package.json +7 -2
- package/dist/config/addresses.cjs.map +0 -1
- package/dist/config/addresses.js.map +0 -1
- package/dist/generated/abi/DLPTreasuryImplementation.cjs.map +0 -1
- package/dist/generated/abi/DLPTreasuryImplementation.js.map +0 -1
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var dataset_exports = {};
|
|
20
|
+
__export(dataset_exports, {
|
|
21
|
+
DatasetController: () => DatasetController
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(dataset_exports);
|
|
24
|
+
var import_viem = require("viem");
|
|
25
|
+
var import_base = require("./base");
|
|
26
|
+
var import_addresses = require("../generated/addresses");
|
|
27
|
+
var import_abi = require("../generated/abi");
|
|
28
|
+
var import_transactionHelpers = require("../utils/transactionHelpers");
|
|
29
|
+
var import_errors = require("../errors");
|
|
30
|
+
var import_multicall = require("../utils/multicall");
|
|
31
|
+
class DatasetController extends import_base.BaseController {
|
|
32
|
+
/**
|
|
33
|
+
* Create a new dataset on the Vana network.
|
|
34
|
+
*
|
|
35
|
+
* @remarks
|
|
36
|
+
* Creates a dataset with the caller as the owner. The dataset will
|
|
37
|
+
* use the specified schema for file validation. Files can be added
|
|
38
|
+
* through the contribute workflow and must be accepted by the owner.
|
|
39
|
+
*
|
|
40
|
+
* @param schemaId - Schema ID defining file structure and validation
|
|
41
|
+
* @param options - Optional transaction parameters (gas, nonce, etc.)
|
|
42
|
+
* @returns Transaction result with DatasetCreated event
|
|
43
|
+
* @throws {ReadOnlyError} When no wallet is configured
|
|
44
|
+
* @throws {BlockchainError} When dataset creation fails
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const tx = await vana.dataset.createDataset(42);
|
|
49
|
+
* const events = await vana.waitForTransactionEvents(tx);
|
|
50
|
+
* console.log(`Dataset ${events.datasetId} created`);
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
async createDataset(schemaId, options) {
|
|
54
|
+
this.assertWallet();
|
|
55
|
+
try {
|
|
56
|
+
const chainId = await this.context.publicClient.getChainId();
|
|
57
|
+
const address = (0, import_addresses.getContractAddress)(chainId, "DatasetRegistry");
|
|
58
|
+
const abi = (0, import_abi.getAbi)("DatasetRegistry");
|
|
59
|
+
const account = this.context.walletClient.account ?? this.context.userAddress;
|
|
60
|
+
if (!account) {
|
|
61
|
+
throw new Error("No account found");
|
|
62
|
+
}
|
|
63
|
+
const accountAddress = typeof account === "string" ? account : account.address;
|
|
64
|
+
const hash = await this.context.walletClient.writeContract({
|
|
65
|
+
address,
|
|
66
|
+
abi,
|
|
67
|
+
functionName: "createDataset",
|
|
68
|
+
args: [accountAddress, BigInt(schemaId)],
|
|
69
|
+
account,
|
|
70
|
+
chain: this.context.walletClient.chain,
|
|
71
|
+
...this.spreadTransactionOptions(options)
|
|
72
|
+
});
|
|
73
|
+
return (0, import_transactionHelpers.tx)({
|
|
74
|
+
hash,
|
|
75
|
+
from: accountAddress,
|
|
76
|
+
contract: "DatasetRegistry",
|
|
77
|
+
fn: "createDataset"
|
|
78
|
+
});
|
|
79
|
+
} catch (error) {
|
|
80
|
+
throw new import_errors.BlockchainError(
|
|
81
|
+
`Failed to create dataset: ${error instanceof Error ? error.message : String(error)}`,
|
|
82
|
+
error
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Accept a pending file into the dataset.
|
|
88
|
+
*
|
|
89
|
+
* @remarks
|
|
90
|
+
* Validates and accepts a contributor's file submission. Only the
|
|
91
|
+
* dataset owner can accept files. Once accepted, the file becomes
|
|
92
|
+
* part of the dataset and can be used in operations.
|
|
93
|
+
*
|
|
94
|
+
* @param datasetId - Dataset ID to accept the file into
|
|
95
|
+
* @param fileId - File ID to accept from pending queue
|
|
96
|
+
* @param options - Optional transaction parameters
|
|
97
|
+
* @returns Transaction result with FileAccepted event
|
|
98
|
+
* @throws {ReadOnlyError} When no wallet is configured
|
|
99
|
+
* @throws {BlockchainError} When file acceptance fails
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```typescript
|
|
103
|
+
* const tx = await vana.dataset.acceptFile(1, 42);
|
|
104
|
+
* await vana.publicClient.waitForTransactionReceipt({ hash: tx.hash });
|
|
105
|
+
* console.log(`File ${fileId} accepted into dataset ${datasetId}`);
|
|
106
|
+
* ```
|
|
107
|
+
*/
|
|
108
|
+
async acceptFile(datasetId, fileId, options) {
|
|
109
|
+
this.assertWallet();
|
|
110
|
+
try {
|
|
111
|
+
const chainId = await this.context.publicClient.getChainId();
|
|
112
|
+
const address = (0, import_addresses.getContractAddress)(chainId, "DatasetRegistry");
|
|
113
|
+
const abi = (0, import_abi.getAbi)("DatasetRegistry");
|
|
114
|
+
const account = this.context.walletClient.account ?? this.context.userAddress;
|
|
115
|
+
if (!account) {
|
|
116
|
+
throw new Error("No account found");
|
|
117
|
+
}
|
|
118
|
+
const accountAddress = typeof account === "string" ? account : account.address;
|
|
119
|
+
const hash = await this.context.walletClient.writeContract({
|
|
120
|
+
address,
|
|
121
|
+
abi,
|
|
122
|
+
functionName: "acceptFile",
|
|
123
|
+
args: [BigInt(datasetId), BigInt(fileId)],
|
|
124
|
+
account,
|
|
125
|
+
chain: this.context.walletClient.chain,
|
|
126
|
+
...this.spreadTransactionOptions(options)
|
|
127
|
+
});
|
|
128
|
+
return (0, import_transactionHelpers.tx)({
|
|
129
|
+
hash,
|
|
130
|
+
from: accountAddress,
|
|
131
|
+
contract: "DatasetRegistry",
|
|
132
|
+
fn: "acceptFile"
|
|
133
|
+
});
|
|
134
|
+
} catch (error) {
|
|
135
|
+
throw new import_errors.BlockchainError(
|
|
136
|
+
`Failed to accept file: ${error instanceof Error ? error.message : String(error)}`,
|
|
137
|
+
error
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Reject a pending file submission.
|
|
143
|
+
*
|
|
144
|
+
* @remarks
|
|
145
|
+
* Removes a file from the pending queue without accepting it.
|
|
146
|
+
* Only the dataset owner can reject files. The file remains in
|
|
147
|
+
* the DataRegistry but is not part of this dataset.
|
|
148
|
+
*
|
|
149
|
+
* @param datasetId - Dataset ID to reject the file from
|
|
150
|
+
* @param fileId - File ID to reject from pending queue
|
|
151
|
+
* @param options - Optional transaction parameters
|
|
152
|
+
* @returns Transaction result with FileRejected event
|
|
153
|
+
* @throws {ReadOnlyError} When no wallet is configured
|
|
154
|
+
* @throws {BlockchainError} When file rejection fails
|
|
155
|
+
*
|
|
156
|
+
* @example
|
|
157
|
+
* ```typescript
|
|
158
|
+
* const tx = await vana.dataset.rejectFile(1, 42);
|
|
159
|
+
* await vana.publicClient.waitForTransactionReceipt({ hash: tx.hash });
|
|
160
|
+
* ```
|
|
161
|
+
*/
|
|
162
|
+
async rejectFile(datasetId, fileId, options) {
|
|
163
|
+
this.assertWallet();
|
|
164
|
+
try {
|
|
165
|
+
const chainId = await this.context.publicClient.getChainId();
|
|
166
|
+
const address = (0, import_addresses.getContractAddress)(chainId, "DatasetRegistry");
|
|
167
|
+
const abi = (0, import_abi.getAbi)("DatasetRegistry");
|
|
168
|
+
const account = this.context.walletClient.account ?? this.context.userAddress;
|
|
169
|
+
if (!account) {
|
|
170
|
+
throw new Error("No account found");
|
|
171
|
+
}
|
|
172
|
+
const accountAddress = typeof account === "string" ? account : account.address;
|
|
173
|
+
const hash = await this.context.walletClient.writeContract({
|
|
174
|
+
address,
|
|
175
|
+
abi,
|
|
176
|
+
functionName: "rejectFile",
|
|
177
|
+
args: [BigInt(datasetId), BigInt(fileId)],
|
|
178
|
+
account,
|
|
179
|
+
chain: this.context.walletClient.chain,
|
|
180
|
+
...this.spreadTransactionOptions(options)
|
|
181
|
+
});
|
|
182
|
+
return (0, import_transactionHelpers.tx)({
|
|
183
|
+
hash,
|
|
184
|
+
from: accountAddress,
|
|
185
|
+
contract: "DatasetRegistry",
|
|
186
|
+
fn: "rejectFile"
|
|
187
|
+
});
|
|
188
|
+
} catch (error) {
|
|
189
|
+
throw new import_errors.BlockchainError(
|
|
190
|
+
`Failed to reject file: ${error instanceof Error ? error.message : String(error)}`,
|
|
191
|
+
error
|
|
192
|
+
);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Get dataset details including file lists.
|
|
197
|
+
*
|
|
198
|
+
* @remarks
|
|
199
|
+
* Retrieves complete dataset state including owner, pending files,
|
|
200
|
+
* accepted files, schema, and creation time. This is a read-only
|
|
201
|
+
* operation that doesn't require a wallet.
|
|
202
|
+
*
|
|
203
|
+
* @param datasetId - Dataset ID to query
|
|
204
|
+
* @returns Dataset object with all details
|
|
205
|
+
* @throws {BlockchainError} When dataset query fails
|
|
206
|
+
*
|
|
207
|
+
* @example
|
|
208
|
+
* ```typescript
|
|
209
|
+
* const dataset = await vana.dataset.getDataset(1);
|
|
210
|
+
* console.log(`Owner: ${dataset.owner}`);
|
|
211
|
+
* console.log(`Pending: ${dataset.pendingFileIds.length}`);
|
|
212
|
+
* console.log(`Accepted: ${dataset.fileIds.length}`);
|
|
213
|
+
* ```
|
|
214
|
+
*/
|
|
215
|
+
async getDataset(datasetId) {
|
|
216
|
+
try {
|
|
217
|
+
const chainId = await this.context.publicClient.getChainId();
|
|
218
|
+
const address = (0, import_addresses.getContractAddress)(chainId, "DatasetRegistry");
|
|
219
|
+
const abi = (0, import_abi.getAbi)("DatasetRegistry");
|
|
220
|
+
const contract = (0, import_viem.getContract)({
|
|
221
|
+
address,
|
|
222
|
+
abi,
|
|
223
|
+
client: this.context.publicClient
|
|
224
|
+
});
|
|
225
|
+
const data = await contract.read.getDataset([BigInt(datasetId)]);
|
|
226
|
+
return {
|
|
227
|
+
owner: data.owner,
|
|
228
|
+
pendingFileIds: data.pendingFileIds.map(Number),
|
|
229
|
+
fileIds: data.fileIds.map(Number),
|
|
230
|
+
schemaId: Number(data.schemaId),
|
|
231
|
+
createdAt: Number(data.createdAt)
|
|
232
|
+
};
|
|
233
|
+
} catch (error) {
|
|
234
|
+
throw new import_errors.BlockchainError(
|
|
235
|
+
`Failed to get dataset: ${error instanceof Error ? error.message : String(error)}`,
|
|
236
|
+
error
|
|
237
|
+
);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Get all datasets owned by a specific address.
|
|
242
|
+
*
|
|
243
|
+
* @remarks
|
|
244
|
+
* Queries all datasets created by the specified owner. Uses the subgraph
|
|
245
|
+
* when available for efficient querying, with fallback to RPC via event
|
|
246
|
+
* logs and multicall for guaranteed real-time accuracy.
|
|
247
|
+
*
|
|
248
|
+
* This method will be optimized when datasets are added to the subgraph.
|
|
249
|
+
* Until then, it efficiently queries the chain using event logs to find
|
|
250
|
+
* dataset IDs, then uses multicall to batch-read dataset details.
|
|
251
|
+
*
|
|
252
|
+
* @param params - Query parameters
|
|
253
|
+
* @param params.owner - Owner address to query datasets for
|
|
254
|
+
* @param params.subgraphUrl - Optional custom subgraph URL
|
|
255
|
+
* @param options - Optional consistency and pagination settings
|
|
256
|
+
* @returns Array of datasets with their IDs
|
|
257
|
+
* @throws {BlockchainError} When dataset query fails
|
|
258
|
+
*
|
|
259
|
+
* @example
|
|
260
|
+
* ```typescript
|
|
261
|
+
* // Get all datasets for an address
|
|
262
|
+
* const datasets = await vana.dataset.getUserDatasets({
|
|
263
|
+
* owner: "0x123..."
|
|
264
|
+
* });
|
|
265
|
+
*
|
|
266
|
+
* // With pagination
|
|
267
|
+
* const page1 = await vana.dataset.getUserDatasets(
|
|
268
|
+
* { owner: "0x123..." },
|
|
269
|
+
* { limit: 10, offset: 0 }
|
|
270
|
+
* );
|
|
271
|
+
*
|
|
272
|
+
* // Require recent data from chain
|
|
273
|
+
* const recent = await vana.dataset.getUserDatasets(
|
|
274
|
+
* { owner: "0x123..." },
|
|
275
|
+
* { source: "chain" }
|
|
276
|
+
* );
|
|
277
|
+
* ```
|
|
278
|
+
*/
|
|
279
|
+
async getUserDatasets(params, options) {
|
|
280
|
+
const { owner } = params;
|
|
281
|
+
const dataSource = "chain";
|
|
282
|
+
if (dataSource === "chain") {
|
|
283
|
+
try {
|
|
284
|
+
const chainId = await this.context.publicClient.getChainId();
|
|
285
|
+
const contractAddress = (0, import_addresses.getContractAddress)(chainId, "DatasetRegistry");
|
|
286
|
+
const abi = (0, import_abi.getAbi)("DatasetRegistry");
|
|
287
|
+
const BATCH_SIZE = 100;
|
|
288
|
+
const MAX_DATASET_ID = 1e5;
|
|
289
|
+
let currentId = 1;
|
|
290
|
+
const userDatasets = [];
|
|
291
|
+
let reachedEnd = false;
|
|
292
|
+
while (currentId <= MAX_DATASET_ID && !reachedEnd) {
|
|
293
|
+
const batchEnd = Math.min(currentId + BATCH_SIZE, MAX_DATASET_ID + 1);
|
|
294
|
+
const calls = [];
|
|
295
|
+
for (let id = currentId; id < batchEnd; id++) {
|
|
296
|
+
calls.push({
|
|
297
|
+
address: contractAddress,
|
|
298
|
+
abi,
|
|
299
|
+
functionName: "getDataset",
|
|
300
|
+
args: [BigInt(id)]
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
const results = await (0, import_multicall.gasAwareMulticall)(
|
|
304
|
+
this.context.publicClient,
|
|
305
|
+
{
|
|
306
|
+
contracts: calls,
|
|
307
|
+
allowFailure: true
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
allowFailure: true
|
|
311
|
+
}
|
|
312
|
+
);
|
|
313
|
+
for (let i = 0; i < results.length; i++) {
|
|
314
|
+
const result = results[i];
|
|
315
|
+
const datasetId = currentId + i;
|
|
316
|
+
if (result.status === "failure" || !result.result) {
|
|
317
|
+
reachedEnd = true;
|
|
318
|
+
break;
|
|
319
|
+
}
|
|
320
|
+
const data = result.result;
|
|
321
|
+
const datasetOwner = data.owner;
|
|
322
|
+
if (!datasetOwner || datasetOwner === "0x0000000000000000000000000000000000000000") {
|
|
323
|
+
reachedEnd = true;
|
|
324
|
+
break;
|
|
325
|
+
}
|
|
326
|
+
if (datasetOwner.toLowerCase() === owner.toLowerCase()) {
|
|
327
|
+
userDatasets.push({
|
|
328
|
+
id: datasetId,
|
|
329
|
+
owner: datasetOwner,
|
|
330
|
+
pendingFileIds: data.pendingFileIds.map(Number),
|
|
331
|
+
fileIds: data.fileIds.map(Number),
|
|
332
|
+
schemaId: Number(data.schemaId),
|
|
333
|
+
createdAt: Number(data.createdAt)
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
currentId = batchEnd;
|
|
338
|
+
}
|
|
339
|
+
const limit = options?.fetchAll ? userDatasets.length : options?.limit ?? 100;
|
|
340
|
+
const offset = options?.offset ?? 0;
|
|
341
|
+
userDatasets.sort((a, b) => b.createdAt - a.createdAt);
|
|
342
|
+
return userDatasets.slice(offset, offset + limit);
|
|
343
|
+
} catch (error) {
|
|
344
|
+
throw new import_errors.BlockchainError(
|
|
345
|
+
`Failed to get user datasets: ${error instanceof Error ? error.message : String(error)}`,
|
|
346
|
+
error
|
|
347
|
+
);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
throw new Error("Subgraph dataset queries not yet implemented");
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
354
|
+
0 && (module.exports = {
|
|
355
|
+
DatasetController
|
|
356
|
+
});
|
|
357
|
+
//# sourceMappingURL=dataset.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/controllers/dataset.ts"],"sourcesContent":["/**\n * Controller for managing datasets and contributor workflows.\n *\n * @remarks\n * Handles dataset creation, file acceptance/rejection, and querying\n * through the DatasetRegistry contract. Implements the Contributor\n * Workflow where files are submitted as pending and must be accepted\n * by the dataset owner.\n *\n * @category Controllers\n */\n\nimport { getContract, type Address } from \"viem\";\nimport { BaseController } from \"./base\";\nimport type {\n TransactionOptions,\n TransactionResult,\n} from \"../types/operations\";\nimport type { Dataset } from \"../types/dataset\";\nimport type { ConsistencyOptions, PaginationOptions } from \"../types/options\";\nimport { getContractAddress } from \"../generated/addresses\";\nimport { getAbi } from \"../generated/abi\";\nimport { tx } from \"../utils/transactionHelpers\";\nimport { BlockchainError } from \"../errors\";\nimport { gasAwareMulticall } from \"../utils/multicall\";\n\n/**\n * Dataset management controller implementing the Contributor Workflow.\n *\n * @remarks\n * Separates dataset management from raw file operations (DataController).\n * Handles the logical grouping of files and owner approval workflow.\n *\n * Key responsibilities:\n * - Creating new datasets with schema validation\n * - Managing pending file approval queue\n * - Accepting/rejecting contributor files\n * - Querying dataset state and file lists\n *\n * @example\n * ```typescript\n * // Create a dataset\n * const result = await vana.dataset.createDataset(schemaId);\n * const datasetId = await vana.waitForTransactionEvents(result);\n *\n * // Get pending files\n * const dataset = await vana.dataset.getDataset(datasetId);\n * console.log(`${dataset.pendingFileIds.length} files awaiting approval`);\n *\n * // Accept a file\n * await vana.dataset.acceptFile(datasetId, fileId);\n * ```\n */\nexport class DatasetController extends BaseController {\n /**\n * Create a new dataset on the Vana network.\n *\n * @remarks\n * Creates a dataset with the caller as the owner. The dataset will\n * use the specified schema for file validation. Files can be added\n * through the contribute workflow and must be accepted by the owner.\n *\n * @param schemaId - Schema ID defining file structure and validation\n * @param options - Optional transaction parameters (gas, nonce, etc.)\n * @returns Transaction result with DatasetCreated event\n * @throws {ReadOnlyError} When no wallet is configured\n * @throws {BlockchainError} When dataset creation fails\n *\n * @example\n * ```typescript\n * const tx = await vana.dataset.createDataset(42);\n * const events = await vana.waitForTransactionEvents(tx);\n * console.log(`Dataset ${events.datasetId} created`);\n * ```\n */\n async createDataset(\n schemaId: number,\n options?: TransactionOptions,\n ): Promise<TransactionResult<\"DatasetRegistry\", \"createDataset\">> {\n this.assertWallet();\n\n try {\n const chainId = await this.context.publicClient.getChainId();\n const address = getContractAddress(chainId, \"DatasetRegistry\");\n const abi = getAbi(\"DatasetRegistry\");\n const account =\n this.context.walletClient.account ?? this.context.userAddress;\n\n if (!account) {\n throw new Error(\"No account found\");\n }\n\n const accountAddress =\n typeof account === \"string\" ? account : account.address;\n\n const hash = await this.context.walletClient.writeContract({\n address,\n abi,\n functionName: \"createDataset\",\n args: [accountAddress, BigInt(schemaId)],\n account,\n chain: this.context.walletClient.chain,\n ...this.spreadTransactionOptions(options),\n });\n\n return tx({\n hash,\n from: accountAddress,\n contract: \"DatasetRegistry\",\n fn: \"createDataset\",\n });\n } catch (error) {\n throw new BlockchainError(\n `Failed to create dataset: ${error instanceof Error ? error.message : String(error)}`,\n error as Error,\n );\n }\n }\n\n /**\n * Accept a pending file into the dataset.\n *\n * @remarks\n * Validates and accepts a contributor's file submission. Only the\n * dataset owner can accept files. Once accepted, the file becomes\n * part of the dataset and can be used in operations.\n *\n * @param datasetId - Dataset ID to accept the file into\n * @param fileId - File ID to accept from pending queue\n * @param options - Optional transaction parameters\n * @returns Transaction result with FileAccepted event\n * @throws {ReadOnlyError} When no wallet is configured\n * @throws {BlockchainError} When file acceptance fails\n *\n * @example\n * ```typescript\n * const tx = await vana.dataset.acceptFile(1, 42);\n * await vana.publicClient.waitForTransactionReceipt({ hash: tx.hash });\n * console.log(`File ${fileId} accepted into dataset ${datasetId}`);\n * ```\n */\n async acceptFile(\n datasetId: number,\n fileId: number,\n options?: TransactionOptions,\n ): Promise<TransactionResult<\"DatasetRegistry\", \"acceptFile\">> {\n this.assertWallet();\n\n try {\n const chainId = await this.context.publicClient.getChainId();\n const address = getContractAddress(chainId, \"DatasetRegistry\");\n const abi = getAbi(\"DatasetRegistry\");\n const account =\n this.context.walletClient.account ?? this.context.userAddress;\n\n if (!account) {\n throw new Error(\"No account found\");\n }\n\n const accountAddress =\n typeof account === \"string\" ? account : account.address;\n\n const hash = await this.context.walletClient.writeContract({\n address,\n abi,\n functionName: \"acceptFile\",\n args: [BigInt(datasetId), BigInt(fileId)],\n account,\n chain: this.context.walletClient.chain,\n ...this.spreadTransactionOptions(options),\n });\n\n return tx({\n hash,\n from: accountAddress,\n contract: \"DatasetRegistry\",\n fn: \"acceptFile\",\n });\n } catch (error) {\n throw new BlockchainError(\n `Failed to accept file: ${error instanceof Error ? error.message : String(error)}`,\n error as Error,\n );\n }\n }\n\n /**\n * Reject a pending file submission.\n *\n * @remarks\n * Removes a file from the pending queue without accepting it.\n * Only the dataset owner can reject files. The file remains in\n * the DataRegistry but is not part of this dataset.\n *\n * @param datasetId - Dataset ID to reject the file from\n * @param fileId - File ID to reject from pending queue\n * @param options - Optional transaction parameters\n * @returns Transaction result with FileRejected event\n * @throws {ReadOnlyError} When no wallet is configured\n * @throws {BlockchainError} When file rejection fails\n *\n * @example\n * ```typescript\n * const tx = await vana.dataset.rejectFile(1, 42);\n * await vana.publicClient.waitForTransactionReceipt({ hash: tx.hash });\n * ```\n */\n async rejectFile(\n datasetId: number,\n fileId: number,\n options?: TransactionOptions,\n ): Promise<TransactionResult<\"DatasetRegistry\", \"rejectFile\">> {\n this.assertWallet();\n\n try {\n const chainId = await this.context.publicClient.getChainId();\n const address = getContractAddress(chainId, \"DatasetRegistry\");\n const abi = getAbi(\"DatasetRegistry\");\n const account =\n this.context.walletClient.account ?? this.context.userAddress;\n\n if (!account) {\n throw new Error(\"No account found\");\n }\n\n const accountAddress =\n typeof account === \"string\" ? account : account.address;\n\n const hash = await this.context.walletClient.writeContract({\n address,\n abi,\n functionName: \"rejectFile\",\n args: [BigInt(datasetId), BigInt(fileId)],\n account,\n chain: this.context.walletClient.chain,\n ...this.spreadTransactionOptions(options),\n });\n\n return tx({\n hash,\n from: accountAddress,\n contract: \"DatasetRegistry\",\n fn: \"rejectFile\",\n });\n } catch (error) {\n throw new BlockchainError(\n `Failed to reject file: ${error instanceof Error ? error.message : String(error)}`,\n error as Error,\n );\n }\n }\n\n /**\n * Get dataset details including file lists.\n *\n * @remarks\n * Retrieves complete dataset state including owner, pending files,\n * accepted files, schema, and creation time. This is a read-only\n * operation that doesn't require a wallet.\n *\n * @param datasetId - Dataset ID to query\n * @returns Dataset object with all details\n * @throws {BlockchainError} When dataset query fails\n *\n * @example\n * ```typescript\n * const dataset = await vana.dataset.getDataset(1);\n * console.log(`Owner: ${dataset.owner}`);\n * console.log(`Pending: ${dataset.pendingFileIds.length}`);\n * console.log(`Accepted: ${dataset.fileIds.length}`);\n * ```\n */\n async getDataset(datasetId: number): Promise<Dataset> {\n try {\n const chainId = await this.context.publicClient.getChainId();\n const address = getContractAddress(chainId, \"DatasetRegistry\");\n const abi = getAbi(\"DatasetRegistry\");\n\n const contract = getContract({\n address,\n abi,\n client: this.context.publicClient,\n });\n\n const data = (await contract.read.getDataset([BigInt(datasetId)])) as any;\n\n // Map contract struct to SDK type\n return {\n owner: data.owner as `0x${string}`,\n pendingFileIds: data.pendingFileIds.map(Number),\n fileIds: data.fileIds.map(Number),\n schemaId: Number(data.schemaId),\n createdAt: Number(data.createdAt),\n };\n } catch (error) {\n throw new BlockchainError(\n `Failed to get dataset: ${error instanceof Error ? error.message : String(error)}`,\n error as Error,\n );\n }\n }\n\n /**\n * Get all datasets owned by a specific address.\n *\n * @remarks\n * Queries all datasets created by the specified owner. Uses the subgraph\n * when available for efficient querying, with fallback to RPC via event\n * logs and multicall for guaranteed real-time accuracy.\n *\n * This method will be optimized when datasets are added to the subgraph.\n * Until then, it efficiently queries the chain using event logs to find\n * dataset IDs, then uses multicall to batch-read dataset details.\n *\n * @param params - Query parameters\n * @param params.owner - Owner address to query datasets for\n * @param params.subgraphUrl - Optional custom subgraph URL\n * @param options - Optional consistency and pagination settings\n * @returns Array of datasets with their IDs\n * @throws {BlockchainError} When dataset query fails\n *\n * @example\n * ```typescript\n * // Get all datasets for an address\n * const datasets = await vana.dataset.getUserDatasets({\n * owner: \"0x123...\"\n * });\n *\n * // With pagination\n * const page1 = await vana.dataset.getUserDatasets(\n * { owner: \"0x123...\" },\n * { limit: 10, offset: 0 }\n * );\n *\n * // Require recent data from chain\n * const recent = await vana.dataset.getUserDatasets(\n * { owner: \"0x123...\" },\n * { source: \"chain\" }\n * );\n * ```\n */\n async getUserDatasets(\n params: {\n owner: Address;\n subgraphUrl?: string;\n },\n options?: ConsistencyOptions & PaginationOptions,\n ): Promise<Array<Dataset & { id: number }>> {\n const { owner } = params;\n\n // Note: Subgraph doesn't have dataset entities yet, so we always use chain\n // This will be optimized when datasets are added to the subgraph schema\n const dataSource = \"chain\";\n\n // For now, we only support chain queries\n // Future: Add subgraph query path when datasets are in the subgraph\n if (dataSource === \"chain\") {\n try {\n const chainId = await this.context.publicClient.getChainId();\n const contractAddress = getContractAddress(chainId, \"DatasetRegistry\");\n const abi = getAbi(\"DatasetRegistry\");\n\n // Strategy: Batch-read datasets with multicall, starting from ID 1\n // Dataset IDs are sequential, so we stop as soon as we hit a non-existent dataset\n // This avoids eth_getLogs which has range limits\n\n const BATCH_SIZE = 100; // Read 100 datasets at a time\n const MAX_DATASET_ID = 100000; // Safety limit to prevent infinite loops\n\n let currentId = 1;\n const userDatasets: Array<Dataset & { id: number }> = [];\n let reachedEnd = false;\n\n while (currentId <= MAX_DATASET_ID && !reachedEnd) {\n // Build batch of calls\n const batchEnd = Math.min(currentId + BATCH_SIZE, MAX_DATASET_ID + 1);\n const calls = [];\n for (let id = currentId; id < batchEnd; id++) {\n calls.push({\n address: contractAddress,\n abi,\n functionName: \"getDataset\",\n args: [BigInt(id)],\n });\n }\n\n // Batch-read datasets using multicall\n const results = await gasAwareMulticall(\n this.context.publicClient,\n {\n contracts: calls,\n allowFailure: true,\n },\n {\n allowFailure: true,\n },\n );\n\n // Process results and filter by owner\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n const datasetId = currentId + i;\n\n // If we hit a non-existent dataset (failed call or zero owner), we've reached the end\n if (result.status === \"failure\" || !result.result) {\n reachedEnd = true;\n break;\n }\n\n const data = result.result as any;\n const datasetOwner = data.owner as `0x${string}`;\n\n // Check for zero address (non-existent dataset)\n if (\n !datasetOwner ||\n datasetOwner === \"0x0000000000000000000000000000000000000000\"\n ) {\n reachedEnd = true;\n break;\n }\n\n // If this dataset is owned by the user, add it\n if (datasetOwner.toLowerCase() === owner.toLowerCase()) {\n userDatasets.push({\n id: datasetId,\n owner: datasetOwner,\n pendingFileIds: data.pendingFileIds.map(Number),\n fileIds: data.fileIds.map(Number),\n schemaId: Number(data.schemaId),\n createdAt: Number(data.createdAt),\n });\n }\n }\n\n currentId = batchEnd;\n }\n\n // Apply pagination to results\n const limit = options?.fetchAll\n ? userDatasets.length\n : (options?.limit ?? 100);\n const offset = options?.offset ?? 0;\n\n // Sort by creation time descending (most recent first)\n userDatasets.sort((a, b) => b.createdAt - a.createdAt);\n\n return userDatasets.slice(offset, offset + limit);\n } catch (error) {\n throw new BlockchainError(\n `Failed to get user datasets: ${error instanceof Error ? error.message : String(error)}`,\n error as Error,\n );\n }\n }\n\n // Future: When subgraph has dataset entities, implement this path\n // For now, this code path is unreachable but prepared for future enhancement\n throw new Error(\"Subgraph dataset queries not yet implemented\");\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Controller for managing datasets and contributor workflows.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* Handles dataset creation, file acceptance/rejection, and querying
|
|
6
|
+
* through the DatasetRegistry contract. Implements the Contributor
|
|
7
|
+
* Workflow where files are submitted as pending and must be accepted
|
|
8
|
+
* by the dataset owner.
|
|
9
|
+
*
|
|
10
|
+
* @category Controllers
|
|
11
|
+
*/
|
|
12
|
+
import { type Address } from "viem";
|
|
13
|
+
import { BaseController } from "./base";
|
|
14
|
+
import type { TransactionOptions, TransactionResult } from "../types/operations";
|
|
15
|
+
import type { Dataset } from "../types/dataset";
|
|
16
|
+
import type { ConsistencyOptions, PaginationOptions } from "../types/options";
|
|
17
|
+
/**
|
|
18
|
+
* Dataset management controller implementing the Contributor Workflow.
|
|
19
|
+
*
|
|
20
|
+
* @remarks
|
|
21
|
+
* Separates dataset management from raw file operations (DataController).
|
|
22
|
+
* Handles the logical grouping of files and owner approval workflow.
|
|
23
|
+
*
|
|
24
|
+
* Key responsibilities:
|
|
25
|
+
* - Creating new datasets with schema validation
|
|
26
|
+
* - Managing pending file approval queue
|
|
27
|
+
* - Accepting/rejecting contributor files
|
|
28
|
+
* - Querying dataset state and file lists
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* // Create a dataset
|
|
33
|
+
* const result = await vana.dataset.createDataset(schemaId);
|
|
34
|
+
* const datasetId = await vana.waitForTransactionEvents(result);
|
|
35
|
+
*
|
|
36
|
+
* // Get pending files
|
|
37
|
+
* const dataset = await vana.dataset.getDataset(datasetId);
|
|
38
|
+
* console.log(`${dataset.pendingFileIds.length} files awaiting approval`);
|
|
39
|
+
*
|
|
40
|
+
* // Accept a file
|
|
41
|
+
* await vana.dataset.acceptFile(datasetId, fileId);
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare class DatasetController extends BaseController {
|
|
45
|
+
/**
|
|
46
|
+
* Create a new dataset on the Vana network.
|
|
47
|
+
*
|
|
48
|
+
* @remarks
|
|
49
|
+
* Creates a dataset with the caller as the owner. The dataset will
|
|
50
|
+
* use the specified schema for file validation. Files can be added
|
|
51
|
+
* through the contribute workflow and must be accepted by the owner.
|
|
52
|
+
*
|
|
53
|
+
* @param schemaId - Schema ID defining file structure and validation
|
|
54
|
+
* @param options - Optional transaction parameters (gas, nonce, etc.)
|
|
55
|
+
* @returns Transaction result with DatasetCreated event
|
|
56
|
+
* @throws {ReadOnlyError} When no wallet is configured
|
|
57
|
+
* @throws {BlockchainError} When dataset creation fails
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```typescript
|
|
61
|
+
* const tx = await vana.dataset.createDataset(42);
|
|
62
|
+
* const events = await vana.waitForTransactionEvents(tx);
|
|
63
|
+
* console.log(`Dataset ${events.datasetId} created`);
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
createDataset(schemaId: number, options?: TransactionOptions): Promise<TransactionResult<"DatasetRegistry", "createDataset">>;
|
|
67
|
+
/**
|
|
68
|
+
* Accept a pending file into the dataset.
|
|
69
|
+
*
|
|
70
|
+
* @remarks
|
|
71
|
+
* Validates and accepts a contributor's file submission. Only the
|
|
72
|
+
* dataset owner can accept files. Once accepted, the file becomes
|
|
73
|
+
* part of the dataset and can be used in operations.
|
|
74
|
+
*
|
|
75
|
+
* @param datasetId - Dataset ID to accept the file into
|
|
76
|
+
* @param fileId - File ID to accept from pending queue
|
|
77
|
+
* @param options - Optional transaction parameters
|
|
78
|
+
* @returns Transaction result with FileAccepted event
|
|
79
|
+
* @throws {ReadOnlyError} When no wallet is configured
|
|
80
|
+
* @throws {BlockchainError} When file acceptance fails
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```typescript
|
|
84
|
+
* const tx = await vana.dataset.acceptFile(1, 42);
|
|
85
|
+
* await vana.publicClient.waitForTransactionReceipt({ hash: tx.hash });
|
|
86
|
+
* console.log(`File ${fileId} accepted into dataset ${datasetId}`);
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
acceptFile(datasetId: number, fileId: number, options?: TransactionOptions): Promise<TransactionResult<"DatasetRegistry", "acceptFile">>;
|
|
90
|
+
/**
|
|
91
|
+
* Reject a pending file submission.
|
|
92
|
+
*
|
|
93
|
+
* @remarks
|
|
94
|
+
* Removes a file from the pending queue without accepting it.
|
|
95
|
+
* Only the dataset owner can reject files. The file remains in
|
|
96
|
+
* the DataRegistry but is not part of this dataset.
|
|
97
|
+
*
|
|
98
|
+
* @param datasetId - Dataset ID to reject the file from
|
|
99
|
+
* @param fileId - File ID to reject from pending queue
|
|
100
|
+
* @param options - Optional transaction parameters
|
|
101
|
+
* @returns Transaction result with FileRejected event
|
|
102
|
+
* @throws {ReadOnlyError} When no wallet is configured
|
|
103
|
+
* @throws {BlockchainError} When file rejection fails
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```typescript
|
|
107
|
+
* const tx = await vana.dataset.rejectFile(1, 42);
|
|
108
|
+
* await vana.publicClient.waitForTransactionReceipt({ hash: tx.hash });
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
rejectFile(datasetId: number, fileId: number, options?: TransactionOptions): Promise<TransactionResult<"DatasetRegistry", "rejectFile">>;
|
|
112
|
+
/**
|
|
113
|
+
* Get dataset details including file lists.
|
|
114
|
+
*
|
|
115
|
+
* @remarks
|
|
116
|
+
* Retrieves complete dataset state including owner, pending files,
|
|
117
|
+
* accepted files, schema, and creation time. This is a read-only
|
|
118
|
+
* operation that doesn't require a wallet.
|
|
119
|
+
*
|
|
120
|
+
* @param datasetId - Dataset ID to query
|
|
121
|
+
* @returns Dataset object with all details
|
|
122
|
+
* @throws {BlockchainError} When dataset query fails
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* ```typescript
|
|
126
|
+
* const dataset = await vana.dataset.getDataset(1);
|
|
127
|
+
* console.log(`Owner: ${dataset.owner}`);
|
|
128
|
+
* console.log(`Pending: ${dataset.pendingFileIds.length}`);
|
|
129
|
+
* console.log(`Accepted: ${dataset.fileIds.length}`);
|
|
130
|
+
* ```
|
|
131
|
+
*/
|
|
132
|
+
getDataset(datasetId: number): Promise<Dataset>;
|
|
133
|
+
/**
|
|
134
|
+
* Get all datasets owned by a specific address.
|
|
135
|
+
*
|
|
136
|
+
* @remarks
|
|
137
|
+
* Queries all datasets created by the specified owner. Uses the subgraph
|
|
138
|
+
* when available for efficient querying, with fallback to RPC via event
|
|
139
|
+
* logs and multicall for guaranteed real-time accuracy.
|
|
140
|
+
*
|
|
141
|
+
* This method will be optimized when datasets are added to the subgraph.
|
|
142
|
+
* Until then, it efficiently queries the chain using event logs to find
|
|
143
|
+
* dataset IDs, then uses multicall to batch-read dataset details.
|
|
144
|
+
*
|
|
145
|
+
* @param params - Query parameters
|
|
146
|
+
* @param params.owner - Owner address to query datasets for
|
|
147
|
+
* @param params.subgraphUrl - Optional custom subgraph URL
|
|
148
|
+
* @param options - Optional consistency and pagination settings
|
|
149
|
+
* @returns Array of datasets with their IDs
|
|
150
|
+
* @throws {BlockchainError} When dataset query fails
|
|
151
|
+
*
|
|
152
|
+
* @example
|
|
153
|
+
* ```typescript
|
|
154
|
+
* // Get all datasets for an address
|
|
155
|
+
* const datasets = await vana.dataset.getUserDatasets({
|
|
156
|
+
* owner: "0x123..."
|
|
157
|
+
* });
|
|
158
|
+
*
|
|
159
|
+
* // With pagination
|
|
160
|
+
* const page1 = await vana.dataset.getUserDatasets(
|
|
161
|
+
* { owner: "0x123..." },
|
|
162
|
+
* { limit: 10, offset: 0 }
|
|
163
|
+
* );
|
|
164
|
+
*
|
|
165
|
+
* // Require recent data from chain
|
|
166
|
+
* const recent = await vana.dataset.getUserDatasets(
|
|
167
|
+
* { owner: "0x123..." },
|
|
168
|
+
* { source: "chain" }
|
|
169
|
+
* );
|
|
170
|
+
* ```
|
|
171
|
+
*/
|
|
172
|
+
getUserDatasets(params: {
|
|
173
|
+
owner: Address;
|
|
174
|
+
subgraphUrl?: string;
|
|
175
|
+
}, options?: ConsistencyOptions & PaginationOptions): Promise<Array<Dataset & {
|
|
176
|
+
id: number;
|
|
177
|
+
}>>;
|
|
178
|
+
}
|