@agirails/sdk 2.0.1-beta → 2.0.2
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/LICENSE +190 -0
- package/README.md +116 -108
- package/bin/actp +10 -0
- package/dist/ACTPClient.d.ts +456 -33
- package/dist/ACTPClient.d.ts.map +1 -1
- package/dist/ACTPClient.js +477 -93
- package/dist/ACTPClient.js.map +1 -1
- package/dist/abi/AgentRegistry.json +782 -0
- package/dist/abi/EscrowVault.json +106 -38
- package/dist/abi/IdentityRegistry.json +316 -0
- package/dist/adapters/BaseAdapter.d.ts +231 -0
- package/dist/adapters/BaseAdapter.d.ts.map +1 -0
- package/dist/adapters/BaseAdapter.js +393 -0
- package/dist/adapters/BaseAdapter.js.map +1 -0
- package/dist/adapters/BeginnerAdapter.d.ts +152 -0
- package/dist/adapters/BeginnerAdapter.d.ts.map +1 -0
- package/dist/adapters/BeginnerAdapter.js +168 -0
- package/dist/adapters/BeginnerAdapter.js.map +1 -0
- package/dist/adapters/IntermediateAdapter.d.ts +211 -0
- package/dist/adapters/IntermediateAdapter.d.ts.map +1 -0
- package/dist/adapters/IntermediateAdapter.js +260 -0
- package/dist/adapters/IntermediateAdapter.js.map +1 -0
- package/dist/adapters/index.d.ts +15 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +26 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/builders/DeliveryProofBuilder.d.ts +60 -1
- package/dist/builders/DeliveryProofBuilder.d.ts.map +1 -1
- package/dist/builders/DeliveryProofBuilder.js +81 -5
- package/dist/builders/DeliveryProofBuilder.js.map +1 -1
- package/dist/builders/QuoteBuilder.d.ts +101 -0
- package/dist/builders/QuoteBuilder.d.ts.map +1 -1
- package/dist/builders/QuoteBuilder.js +120 -3
- package/dist/builders/QuoteBuilder.js.map +1 -1
- package/dist/builders/index.d.ts +4 -0
- package/dist/builders/index.d.ts.map +1 -1
- package/dist/builders/index.js +4 -0
- package/dist/builders/index.js.map +1 -1
- package/dist/cli/commands/balance.d.ts +13 -0
- package/dist/cli/commands/balance.d.ts.map +1 -0
- package/dist/cli/commands/balance.js +89 -0
- package/dist/cli/commands/balance.js.map +1 -0
- package/dist/cli/commands/batch.d.ts +24 -0
- package/dist/cli/commands/batch.d.ts.map +1 -0
- package/dist/cli/commands/batch.js +424 -0
- package/dist/cli/commands/batch.js.map +1 -0
- package/dist/cli/commands/config.d.ts +13 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +192 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/init.d.ts +19 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +143 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/mint.d.ts +13 -0
- package/dist/cli/commands/mint.d.ts.map +1 -0
- package/dist/cli/commands/mint.js +91 -0
- package/dist/cli/commands/mint.js.map +1 -0
- package/dist/cli/commands/pay.d.ts +18 -0
- package/dist/cli/commands/pay.d.ts.map +1 -0
- package/dist/cli/commands/pay.js +87 -0
- package/dist/cli/commands/pay.js.map +1 -0
- package/dist/cli/commands/simulate.d.ts +32 -0
- package/dist/cli/commands/simulate.d.ts.map +1 -0
- package/dist/cli/commands/simulate.js +290 -0
- package/dist/cli/commands/simulate.js.map +1 -0
- package/dist/cli/commands/time.d.ts +29 -0
- package/dist/cli/commands/time.d.ts.map +1 -0
- package/dist/cli/commands/time.js +252 -0
- package/dist/cli/commands/time.js.map +1 -0
- package/dist/cli/commands/tx.d.ts +16 -0
- package/dist/cli/commands/tx.d.ts.map +1 -0
- package/dist/cli/commands/tx.js +379 -0
- package/dist/cli/commands/tx.js.map +1 -0
- package/dist/cli/commands/watch.d.ts +20 -0
- package/dist/cli/commands/watch.d.ts.map +1 -0
- package/dist/cli/commands/watch.js +160 -0
- package/dist/cli/commands/watch.js.map +1 -0
- package/dist/cli/index.d.ts +17 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +104 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/client.d.ts +70 -0
- package/dist/cli/utils/client.d.ts.map +1 -0
- package/dist/cli/utils/client.js +240 -0
- package/dist/cli/utils/client.js.map +1 -0
- package/dist/cli/utils/config.d.ts +91 -0
- package/dist/cli/utils/config.d.ts.map +1 -0
- package/dist/cli/utils/config.js +240 -0
- package/dist/cli/utils/config.js.map +1 -0
- package/dist/cli/utils/output.d.ts +174 -0
- package/dist/cli/utils/output.d.ts.map +1 -0
- package/dist/cli/utils/output.js +380 -0
- package/dist/cli/utils/output.js.map +1 -0
- package/dist/config/networks.d.ts +28 -0
- package/dist/config/networks.d.ts.map +1 -1
- package/dist/config/networks.js +60 -12
- package/dist/config/networks.js.map +1 -1
- package/dist/errors/index.d.ts +165 -2
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +260 -2
- package/dist/errors/index.js.map +1 -1
- package/dist/index.d.ts +61 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +141 -36
- package/dist/index.js.map +1 -1
- package/dist/level0/Provider.d.ts +106 -0
- package/dist/level0/Provider.d.ts.map +1 -0
- package/dist/level0/Provider.js +10 -0
- package/dist/level0/Provider.js.map +1 -0
- package/dist/level0/ServiceDirectory.d.ts +74 -0
- package/dist/level0/ServiceDirectory.d.ts.map +1 -0
- package/dist/level0/ServiceDirectory.js +122 -0
- package/dist/level0/ServiceDirectory.js.map +1 -0
- package/dist/level0/index.d.ts +10 -0
- package/dist/level0/index.d.ts.map +1 -0
- package/dist/level0/index.js +15 -0
- package/dist/level0/index.js.map +1 -0
- package/dist/level0/provide.d.ts +51 -0
- package/dist/level0/provide.d.ts.map +1 -0
- package/dist/level0/provide.js +113 -0
- package/dist/level0/provide.js.map +1 -0
- package/dist/level0/request.d.ts +53 -0
- package/dist/level0/request.d.ts.map +1 -0
- package/dist/level0/request.js +462 -0
- package/dist/level0/request.js.map +1 -0
- package/dist/level1/Agent.d.ts +472 -0
- package/dist/level1/Agent.d.ts.map +1 -0
- package/dist/level1/Agent.js +1091 -0
- package/dist/level1/Agent.js.map +1 -0
- package/dist/level1/index.d.ts +10 -0
- package/dist/level1/index.d.ts.map +1 -0
- package/dist/level1/index.js +30 -0
- package/dist/level1/index.js.map +1 -0
- package/dist/level1/pricing/PriceCalculator.d.ts +62 -0
- package/dist/level1/pricing/PriceCalculator.d.ts.map +1 -0
- package/dist/level1/pricing/PriceCalculator.js +237 -0
- package/dist/level1/pricing/PriceCalculator.js.map +1 -0
- package/dist/level1/pricing/PricingStrategy.d.ts +179 -0
- package/dist/level1/pricing/PricingStrategy.d.ts.map +1 -0
- package/dist/level1/pricing/PricingStrategy.js +11 -0
- package/dist/level1/pricing/PricingStrategy.js.map +1 -0
- package/dist/level1/types/Job.d.ts +166 -0
- package/dist/level1/types/Job.d.ts.map +1 -0
- package/dist/level1/types/Job.js +11 -0
- package/dist/level1/types/Job.js.map +1 -0
- package/dist/level1/types/Options.d.ts +258 -0
- package/dist/level1/types/Options.d.ts.map +1 -0
- package/dist/level1/types/Options.js +8 -0
- package/dist/level1/types/Options.js.map +1 -0
- package/dist/level1/types/index.d.ts +8 -0
- package/dist/level1/types/index.d.ts.map +1 -0
- package/dist/level1/types/index.js +8 -0
- package/dist/level1/types/index.js.map +1 -0
- package/dist/protocol/ACTPKernel.d.ts +229 -2
- package/dist/protocol/ACTPKernel.d.ts.map +1 -1
- package/dist/protocol/ACTPKernel.js +367 -33
- package/dist/protocol/ACTPKernel.js.map +1 -1
- package/dist/protocol/AgentRegistry.d.ts +177 -0
- package/dist/protocol/AgentRegistry.d.ts.map +1 -0
- package/dist/protocol/AgentRegistry.js +449 -0
- package/dist/protocol/AgentRegistry.js.map +1 -0
- package/dist/protocol/DIDManager.d.ts +289 -0
- package/dist/protocol/DIDManager.d.ts.map +1 -0
- package/dist/protocol/DIDManager.js +481 -0
- package/dist/protocol/DIDManager.js.map +1 -0
- package/dist/protocol/DIDResolver.d.ts +236 -0
- package/dist/protocol/DIDResolver.d.ts.map +1 -0
- package/dist/protocol/DIDResolver.js +495 -0
- package/dist/protocol/DIDResolver.js.map +1 -0
- package/dist/protocol/EASHelper.d.ts +57 -2
- package/dist/protocol/EASHelper.d.ts.map +1 -1
- package/dist/protocol/EASHelper.js +230 -37
- package/dist/protocol/EASHelper.js.map +1 -1
- package/dist/protocol/EscrowVault.d.ts +93 -2
- package/dist/protocol/EscrowVault.d.ts.map +1 -1
- package/dist/protocol/EscrowVault.js +122 -33
- package/dist/protocol/EscrowVault.js.map +1 -1
- package/dist/protocol/EventMonitor.d.ts +45 -1
- package/dist/protocol/EventMonitor.d.ts.map +1 -1
- package/dist/protocol/EventMonitor.js +64 -8
- package/dist/protocol/EventMonitor.js.map +1 -1
- package/dist/protocol/MessageSigner.d.ts +116 -2
- package/dist/protocol/MessageSigner.d.ts.map +1 -1
- package/dist/protocol/MessageSigner.js +215 -9
- package/dist/protocol/MessageSigner.js.map +1 -1
- package/dist/protocol/ProofGenerator.d.ts +93 -0
- package/dist/protocol/ProofGenerator.d.ts.map +1 -1
- package/dist/protocol/ProofGenerator.js +194 -9
- package/dist/protocol/ProofGenerator.js.map +1 -1
- package/dist/protocol/QuoteBuilder.d.ts +8 -0
- package/dist/protocol/QuoteBuilder.d.ts.map +1 -1
- package/dist/protocol/QuoteBuilder.js +8 -0
- package/dist/protocol/QuoteBuilder.js.map +1 -1
- package/dist/runtime/BlockchainRuntime.d.ts +360 -0
- package/dist/runtime/BlockchainRuntime.d.ts.map +1 -0
- package/dist/runtime/BlockchainRuntime.js +767 -0
- package/dist/runtime/BlockchainRuntime.js.map +1 -0
- package/dist/runtime/IACTPRuntime.d.ts +271 -0
- package/dist/runtime/IACTPRuntime.d.ts.map +1 -0
- package/dist/runtime/IACTPRuntime.js +15 -0
- package/dist/runtime/IACTPRuntime.js.map +1 -0
- package/dist/runtime/MockRuntime.d.ts +445 -0
- package/dist/runtime/MockRuntime.d.ts.map +1 -0
- package/dist/runtime/MockRuntime.js +1065 -0
- package/dist/runtime/MockRuntime.js.map +1 -0
- package/dist/runtime/MockStateManager.d.ts +233 -0
- package/dist/runtime/MockStateManager.d.ts.map +1 -0
- package/dist/runtime/MockStateManager.js +533 -0
- package/dist/runtime/MockStateManager.js.map +1 -0
- package/dist/runtime/index.d.ts +14 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +42 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/types/MockState.d.ts +167 -0
- package/dist/runtime/types/MockState.d.ts.map +1 -0
- package/dist/runtime/types/MockState.js +43 -0
- package/dist/runtime/types/MockState.js.map +1 -0
- package/dist/types/agent.d.ts +76 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +8 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/did.d.ts +192 -0
- package/dist/types/did.d.ts.map +1 -0
- package/dist/types/did.js +38 -0
- package/dist/types/did.js.map +1 -0
- package/dist/types/eip712.d.ts +34 -0
- package/dist/types/eip712.d.ts.map +1 -1
- package/dist/types/eip712.js +31 -5
- package/dist/types/eip712.js.map +1 -1
- package/dist/types/escrow.d.ts +17 -10
- package/dist/types/escrow.d.ts.map +1 -1
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/message.d.ts +32 -0
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/message.js +4 -0
- package/dist/types/message.js.map +1 -1
- package/dist/types/state.d.ts +28 -0
- package/dist/types/state.d.ts.map +1 -1
- package/dist/types/state.js +37 -6
- package/dist/types/state.js.map +1 -1
- package/dist/types/transaction.d.ts +17 -0
- package/dist/types/transaction.d.ts.map +1 -1
- package/dist/utils/ErrorRecoveryGuide.d.ts +125 -0
- package/dist/utils/ErrorRecoveryGuide.d.ts.map +1 -0
- package/dist/utils/ErrorRecoveryGuide.js +579 -0
- package/dist/utils/ErrorRecoveryGuide.js.map +1 -0
- package/dist/utils/Helpers.d.ts +453 -0
- package/dist/utils/Helpers.d.ts.map +1 -0
- package/dist/utils/Helpers.js +623 -0
- package/dist/utils/Helpers.js.map +1 -0
- package/dist/utils/IPFSClient.d.ts +113 -0
- package/dist/utils/IPFSClient.d.ts.map +1 -1
- package/dist/utils/IPFSClient.js +128 -7
- package/dist/utils/IPFSClient.js.map +1 -1
- package/dist/utils/Logger.d.ts +195 -0
- package/dist/utils/Logger.d.ts.map +1 -0
- package/dist/utils/Logger.js +382 -0
- package/dist/utils/Logger.js.map +1 -0
- package/dist/utils/NonceManager.d.ts +234 -1
- package/dist/utils/NonceManager.d.ts.map +1 -1
- package/dist/utils/NonceManager.js +372 -7
- package/dist/utils/NonceManager.js.map +1 -1
- package/dist/utils/RateLimiter.d.ts +253 -0
- package/dist/utils/RateLimiter.d.ts.map +1 -0
- package/dist/utils/RateLimiter.js +424 -0
- package/dist/utils/RateLimiter.js.map +1 -0
- package/dist/utils/ReceivedNonceTracker.d.ts +175 -0
- package/dist/utils/ReceivedNonceTracker.d.ts.map +1 -1
- package/dist/utils/ReceivedNonceTracker.js +261 -5
- package/dist/utils/ReceivedNonceTracker.js.map +1 -1
- package/dist/utils/SDKLifecycle.d.ts +156 -0
- package/dist/utils/SDKLifecycle.d.ts.map +1 -0
- package/dist/utils/SDKLifecycle.js +347 -0
- package/dist/utils/SDKLifecycle.js.map +1 -0
- package/dist/utils/SecureNonce.d.ts +57 -0
- package/dist/utils/SecureNonce.d.ts.map +1 -0
- package/dist/utils/SecureNonce.js +80 -0
- package/dist/utils/SecureNonce.js.map +1 -0
- package/dist/utils/Semaphore.d.ts +123 -0
- package/dist/utils/Semaphore.d.ts.map +1 -0
- package/dist/utils/Semaphore.js +247 -0
- package/dist/utils/Semaphore.js.map +1 -0
- package/dist/utils/UsedAttestationTracker.d.ts +167 -0
- package/dist/utils/UsedAttestationTracker.d.ts.map +1 -0
- package/dist/utils/UsedAttestationTracker.js +309 -0
- package/dist/utils/UsedAttestationTracker.js.map +1 -0
- package/dist/utils/canonicalJson.d.ts +22 -0
- package/dist/utils/canonicalJson.d.ts.map +1 -1
- package/dist/utils/canonicalJson.js +26 -3
- package/dist/utils/canonicalJson.js.map +1 -1
- package/dist/utils/computeTypeHash.d.ts +14 -0
- package/dist/utils/computeTypeHash.d.ts.map +1 -1
- package/dist/utils/computeTypeHash.js +19 -2
- package/dist/utils/computeTypeHash.js.map +1 -1
- package/dist/utils/fsSafe.d.ts +14 -0
- package/dist/utils/fsSafe.d.ts.map +1 -0
- package/dist/utils/fsSafe.js +89 -0
- package/dist/utils/fsSafe.js.map +1 -0
- package/dist/utils/index.d.ts +15 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +51 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/security.d.ts +147 -0
- package/dist/utils/security.d.ts.map +1 -0
- package/dist/utils/security.js +391 -0
- package/dist/utils/security.js.map +1 -0
- package/dist/utils/validation.d.ts +40 -0
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +184 -7
- package/dist/utils/validation.js.map +1 -1
- package/package.json +54 -37
- package/src/ACTPClient.ts +692 -178
- package/src/abi/AgentRegistry.json +782 -0
- package/src/abi/EscrowVault.json +106 -38
- package/src/abi/IdentityRegistry.json +316 -0
- package/src/adapters/BaseAdapter.ts +473 -0
- package/src/adapters/BeginnerAdapter.ts +232 -0
- package/src/adapters/IntermediateAdapter.ts +316 -0
- package/src/adapters/index.ts +25 -0
- package/src/builders/DeliveryProofBuilder.ts +3 -2
- package/src/cli/commands/balance.ts +110 -0
- package/src/cli/commands/batch.ts +487 -0
- package/src/cli/commands/config.ts +231 -0
- package/src/cli/commands/init.ts +161 -0
- package/src/cli/commands/mint.ts +116 -0
- package/src/cli/commands/pay.ts +113 -0
- package/src/cli/commands/simulate.ts +345 -0
- package/src/cli/commands/time.ts +303 -0
- package/src/cli/commands/tx.ts +448 -0
- package/src/cli/commands/watch.ts +211 -0
- package/src/cli/index.ts +116 -0
- package/src/cli/utils/client.ts +249 -0
- package/src/cli/utils/config.ts +282 -0
- package/src/cli/utils/output.ts +465 -0
- package/src/config/networks.ts +32 -9
- package/src/errors/index.ts +298 -1
- package/src/index.ts +207 -71
- package/src/level0/Provider.ts +117 -0
- package/src/level0/ServiceDirectory.ts +131 -0
- package/src/level0/index.ts +10 -0
- package/src/level0/provide.ts +131 -0
- package/src/level0/request.ts +494 -0
- package/src/level1/Agent.ts +1432 -0
- package/src/level1/index.ts +10 -0
- package/src/level1/pricing/PriceCalculator.ts +255 -0
- package/src/level1/pricing/PricingStrategy.ts +198 -0
- package/src/level1/types/Job.ts +179 -0
- package/src/level1/types/Options.ts +291 -0
- package/src/level1/types/index.ts +8 -0
- package/src/protocol/ACTPKernel.ts +175 -23
- package/src/protocol/AgentRegistry.ts +559 -0
- package/src/protocol/DIDManager.ts +629 -0
- package/src/protocol/DIDResolver.ts +554 -0
- package/src/protocol/EASHelper.ts +230 -46
- package/src/protocol/EscrowVault.ts +68 -50
- package/src/protocol/EventMonitor.ts +44 -15
- package/src/protocol/MessageSigner.ts +193 -13
- package/src/protocol/ProofGenerator.ts +223 -4
- package/src/runtime/BlockchainRuntime.ts +993 -0
- package/src/runtime/IACTPRuntime.ts +284 -0
- package/src/runtime/MockRuntime.ts +1244 -0
- package/src/runtime/MockStateManager.ts +576 -0
- package/src/runtime/index.ts +25 -0
- package/src/runtime/types/MockState.ts +227 -0
- package/src/types/agent.ts +79 -0
- package/src/types/did.ts +223 -0
- package/src/types/escrow.ts +12 -11
- package/src/types/index.ts +5 -1
- package/src/types/state.ts +12 -3
- package/src/types/transaction.ts +4 -1
- package/src/utils/ErrorRecoveryGuide.ts +675 -0
- package/src/utils/Helpers.ts +688 -0
- package/src/utils/IPFSClient.ts +122 -5
- package/src/utils/Logger.ts +484 -0
- package/src/utils/NonceManager.ts +305 -8
- package/src/utils/RateLimiter.ts +534 -0
- package/src/utils/ReceivedNonceTracker.ts +170 -0
- package/src/utils/SDKLifecycle.ts +416 -0
- package/src/utils/SecureNonce.ts +78 -0
- package/src/utils/Semaphore.ts +276 -0
- package/src/utils/UsedAttestationTracker.ts +387 -0
- package/src/utils/fsSafe.ts +75 -0
- package/src/utils/index.ts +80 -0
- package/src/utils/security.ts +418 -0
- package/src/utils/validation.ts +164 -0
- package/src/__tests__/ProofGenerator.test.ts +0 -124
- package/src/__tests__/QuoteBuilder.test.ts +0 -516
- package/src/__tests__/StateMachine.test.ts +0 -82
- package/src/__tests__/builders/DeliveryProofBuilder.test.ts +0 -581
- package/src/__tests__/integration/ACTPClient.test.ts +0 -263
- package/src/__tests__/integration.test.ts +0 -289
- package/src/__tests__/protocol/EASHelper.test.ts +0 -472
- package/src/__tests__/protocol/EventMonitor.test.ts +0 -382
- package/src/__tests__/security/ACTPKernel.security.test.ts +0 -1167
- package/src/__tests__/security/EscrowVault.security.test.ts +0 -570
- package/src/__tests__/security/MessageSigner.security.test.ts +0 -286
- package/src/__tests__/security/NonceReplay.security.test.ts +0 -501
- package/src/__tests__/security/validation.security.test.ts +0 -376
- package/src/__tests__/utils/IPFSClient.test.ts +0 -262
- package/src/__tests__/utils/NonceManager.test.ts +0 -205
- package/src/__tests__/utils/canonicalJson.test.ts +0 -153
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider - Return type of provide() function
|
|
3
|
+
*
|
|
4
|
+
* Provides control and observability for a running service provider.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { Job } from '../level1/types/Job';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Provider status
|
|
13
|
+
*/
|
|
14
|
+
export type ProviderStatus = 'starting' | 'running' | 'paused' | 'stopped';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Provider statistics
|
|
18
|
+
*/
|
|
19
|
+
export interface ProviderStats {
|
|
20
|
+
jobsCompleted: number;
|
|
21
|
+
jobsFailed: number;
|
|
22
|
+
totalEarned: number;
|
|
23
|
+
averageJobTime: number;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Provider balance
|
|
28
|
+
*/
|
|
29
|
+
export interface ProviderBalance {
|
|
30
|
+
eth: string;
|
|
31
|
+
usdc: string;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Provider interface
|
|
36
|
+
*
|
|
37
|
+
* Returned by provide() to control the provider lifecycle.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* const provider = provide('echo', async (job) => job.input);
|
|
42
|
+
*
|
|
43
|
+
* // Monitor events
|
|
44
|
+
* provider.on('job:received', (job) => {
|
|
45
|
+
* console.log(`Received job: ${job.id}`);
|
|
46
|
+
* });
|
|
47
|
+
*
|
|
48
|
+
* provider.on('payment:received', (amount) => {
|
|
49
|
+
* console.log(`Earned ${amount} USDC`);
|
|
50
|
+
* });
|
|
51
|
+
*
|
|
52
|
+
* // Control lifecycle
|
|
53
|
+
* provider.pause(); // Stop accepting new jobs
|
|
54
|
+
* provider.resume(); // Resume
|
|
55
|
+
* await provider.stop(); // Graceful shutdown
|
|
56
|
+
*
|
|
57
|
+
* // Check statistics
|
|
58
|
+
* console.log(`Completed: ${provider.stats.jobsCompleted}`);
|
|
59
|
+
* console.log(`Earned: $${provider.stats.totalEarned}`);
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export interface Provider {
|
|
63
|
+
/**
|
|
64
|
+
* Current status
|
|
65
|
+
*/
|
|
66
|
+
status: ProviderStatus;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Provider's Ethereum address
|
|
70
|
+
*/
|
|
71
|
+
address: string;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Balance information
|
|
75
|
+
*/
|
|
76
|
+
balance: ProviderBalance;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Pause the provider
|
|
80
|
+
*
|
|
81
|
+
* Stops accepting new jobs but keeps running jobs active.
|
|
82
|
+
*/
|
|
83
|
+
pause(): void;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Resume the provider
|
|
87
|
+
*
|
|
88
|
+
* Resumes accepting new jobs after pause.
|
|
89
|
+
*/
|
|
90
|
+
resume(): void;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Stop the provider
|
|
94
|
+
*
|
|
95
|
+
* Gracefully shuts down, waiting for active jobs to complete.
|
|
96
|
+
*/
|
|
97
|
+
stop(): Promise<void>;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Register event listener
|
|
101
|
+
*
|
|
102
|
+
* Supported events:
|
|
103
|
+
* - 'job:received': (job: Job) => void
|
|
104
|
+
* - 'job:completed': (job: Job, result: any) => void
|
|
105
|
+
* - 'job:failed': (job: Job, error: Error) => void
|
|
106
|
+
* - 'payment:received': (amount: number) => void
|
|
107
|
+
*/
|
|
108
|
+
on(event: 'job:received', handler: (job: Job) => void): void;
|
|
109
|
+
on(event: 'job:completed', handler: (job: Job, result: any) => void): void;
|
|
110
|
+
on(event: 'job:failed', handler: (job: Job, error: Error) => void): void;
|
|
111
|
+
on(event: 'payment:received', handler: (amount: number) => void): void;
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Statistics
|
|
115
|
+
*/
|
|
116
|
+
stats: ProviderStats;
|
|
117
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ServiceDirectory - Hardcoded provider mapping for MVP
|
|
3
|
+
*
|
|
4
|
+
* In MVP, we use hardcoded service-to-provider mapping.
|
|
5
|
+
* In V2+, this will be replaced by on-chain AgentRegistry queries.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { validateServiceName, isValidAddress } from '../utils/security';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* In-memory service directory
|
|
14
|
+
*
|
|
15
|
+
* Maps service names to provider addresses.
|
|
16
|
+
* This is a singleton that can be updated by provide() calls.
|
|
17
|
+
*
|
|
18
|
+
* SECURITY FIXES:
|
|
19
|
+
* - H-5: Address validation to prevent poisoning
|
|
20
|
+
* - H-2: Service name validation
|
|
21
|
+
*/
|
|
22
|
+
class ServiceDirectory {
|
|
23
|
+
/**
|
|
24
|
+
* Service -> Provider address mapping
|
|
25
|
+
*/
|
|
26
|
+
private directory = new Map<string, Set<string>>();
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Register a provider for a service
|
|
30
|
+
*
|
|
31
|
+
* SECURITY FIX (H-5): Validate address format before registration
|
|
32
|
+
* SECURITY FIX (H-2): Validate service name
|
|
33
|
+
*
|
|
34
|
+
* @param service - Service name
|
|
35
|
+
* @param provider - Provider address
|
|
36
|
+
* @throws Error if service name or provider address is invalid
|
|
37
|
+
*/
|
|
38
|
+
register(service: string, provider: string): void {
|
|
39
|
+
// SECURITY FIX (H-2): Validate service name
|
|
40
|
+
const validatedService = validateServiceName(service);
|
|
41
|
+
|
|
42
|
+
// SECURITY FIX (H-5): Validate Ethereum address format
|
|
43
|
+
if (!isValidAddress(provider)) {
|
|
44
|
+
throw new Error(
|
|
45
|
+
`Invalid provider address: "${provider}". Must be a valid Ethereum address (0x followed by 40 hex characters).`
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (!this.directory.has(validatedService)) {
|
|
50
|
+
this.directory.set(validatedService, new Set());
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
this.directory.get(validatedService)!.add(provider);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Unregister a provider from a service
|
|
58
|
+
*
|
|
59
|
+
* SECURITY FIX (H-5): Validate address format
|
|
60
|
+
* SECURITY FIX (H-2): Validate service name
|
|
61
|
+
*
|
|
62
|
+
* @param service - Service name
|
|
63
|
+
* @param provider - Provider address
|
|
64
|
+
*/
|
|
65
|
+
unregister(service: string, provider: string): void {
|
|
66
|
+
// SECURITY FIX (H-2): Validate service name
|
|
67
|
+
const validatedService = validateServiceName(service);
|
|
68
|
+
|
|
69
|
+
// SECURITY FIX (H-5): Validate address format
|
|
70
|
+
if (!isValidAddress(provider)) {
|
|
71
|
+
throw new Error(`Invalid provider address: "${provider}"`);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const providers = this.directory.get(validatedService);
|
|
75
|
+
if (providers) {
|
|
76
|
+
providers.delete(provider);
|
|
77
|
+
if (providers.size === 0) {
|
|
78
|
+
this.directory.delete(validatedService);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Find providers for a service
|
|
85
|
+
*
|
|
86
|
+
* SECURITY FIX (H-2): Validate service name
|
|
87
|
+
*
|
|
88
|
+
* @param service - Service name
|
|
89
|
+
* @returns Array of provider addresses
|
|
90
|
+
*/
|
|
91
|
+
findProviders(service: string): string[] {
|
|
92
|
+
// SECURITY FIX (H-2): Validate service name
|
|
93
|
+
try {
|
|
94
|
+
const validatedService = validateServiceName(service);
|
|
95
|
+
const providers = this.directory.get(validatedService);
|
|
96
|
+
return providers ? Array.from(providers) : [];
|
|
97
|
+
} catch (error) {
|
|
98
|
+
// If service name is invalid, return empty array instead of throwing
|
|
99
|
+
// This allows graceful degradation in search scenarios
|
|
100
|
+
return [];
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Get all registered services
|
|
106
|
+
*
|
|
107
|
+
* @returns Array of service names
|
|
108
|
+
*/
|
|
109
|
+
getServices(): string[] {
|
|
110
|
+
return Array.from(this.directory.keys());
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Clear all registrations
|
|
115
|
+
*/
|
|
116
|
+
clear(): void {
|
|
117
|
+
this.directory.clear();
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Get directory size (for debugging)
|
|
122
|
+
*/
|
|
123
|
+
get size(): number {
|
|
124
|
+
return this.directory.size;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Singleton instance
|
|
130
|
+
*/
|
|
131
|
+
export const serviceDirectory = new ServiceDirectory();
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Basic API - Simple service provision and requests
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export { provide } from './provide';
|
|
8
|
+
export { request } from './request';
|
|
9
|
+
export { Provider, ProviderStatus, ProviderStats, ProviderBalance } from './Provider';
|
|
10
|
+
export { serviceDirectory } from './ServiceDirectory';
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* provide() - Basic API for service providers
|
|
3
|
+
*
|
|
4
|
+
* The simplest way to provide a service on AGIRAILS.
|
|
5
|
+
* Just write a function, and AGIRAILS handles the rest.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { Agent } from '../level1/Agent';
|
|
11
|
+
import { JobHandler } from '../level1/types/Job';
|
|
12
|
+
import { ProvideOptions } from '../level1/types/Options';
|
|
13
|
+
import { Provider } from './Provider';
|
|
14
|
+
import { serviceDirectory } from './ServiceDirectory';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Provide a service
|
|
18
|
+
*
|
|
19
|
+
* This is the simplest way to provide a service on AGIRAILS.
|
|
20
|
+
* You provide a service name and a handler function, and AGIRAILS
|
|
21
|
+
* takes care of wallet management, transactions, and payments.
|
|
22
|
+
*
|
|
23
|
+
* @param service - Service name (e.g., 'translation', 'echo')
|
|
24
|
+
* @param handler - Job handler function
|
|
25
|
+
* @param options - Optional configuration
|
|
26
|
+
* @returns Provider interface for lifecycle control
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* // Simplest example
|
|
31
|
+
* provide('echo', async (job) => {
|
|
32
|
+
* return job.input;
|
|
33
|
+
* });
|
|
34
|
+
*
|
|
35
|
+
* // With filtering
|
|
36
|
+
* provide('translation', async (job) => {
|
|
37
|
+
* const { text, from, to } = job.input;
|
|
38
|
+
* return { translated: await translate(text, from, to) };
|
|
39
|
+
* }, {
|
|
40
|
+
* filter: { minBudget: 5 },
|
|
41
|
+
* network: 'testnet'
|
|
42
|
+
* });
|
|
43
|
+
*
|
|
44
|
+
* // With events
|
|
45
|
+
* const provider = provide('image-gen', async (job) => {
|
|
46
|
+
* return { imageUrl: await generateImage(job.input.prompt) };
|
|
47
|
+
* });
|
|
48
|
+
*
|
|
49
|
+
* provider.on('payment:received', (amount) => {
|
|
50
|
+
* console.log(`Earned ${amount} USDC!`);
|
|
51
|
+
* });
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export function provide(
|
|
55
|
+
service: string,
|
|
56
|
+
handler: JobHandler,
|
|
57
|
+
options?: ProvideOptions
|
|
58
|
+
): Provider {
|
|
59
|
+
// Create an Agent instance under the hood
|
|
60
|
+
const agent = new Agent({
|
|
61
|
+
name: `Provider:${service}`,
|
|
62
|
+
description: `Auto-generated provider for ${service}`,
|
|
63
|
+
network: options?.network || 'mock',
|
|
64
|
+
wallet: options?.wallet,
|
|
65
|
+
stateDirectory: options?.stateDirectory,
|
|
66
|
+
rpcUrl: options?.rpcUrl,
|
|
67
|
+
behavior: {
|
|
68
|
+
autoAccept: options?.autoAccept ?? true,
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
// Register the service with filter options
|
|
73
|
+
agent.provide(
|
|
74
|
+
{
|
|
75
|
+
name: service,
|
|
76
|
+
filter: options?.filter,
|
|
77
|
+
},
|
|
78
|
+
handler
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
// Start the agent immediately (async)
|
|
82
|
+
agent.start().then(() => {
|
|
83
|
+
// Register in service directory after agent has started and has an address
|
|
84
|
+
serviceDirectory.register(service, agent.address);
|
|
85
|
+
}).catch((error) => {
|
|
86
|
+
console.error(`Failed to start provider for ${service}:`, error);
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
// Return Provider interface (adapter over Agent)
|
|
90
|
+
const provider: Provider = {
|
|
91
|
+
get status() {
|
|
92
|
+
return agent.status as any;
|
|
93
|
+
},
|
|
94
|
+
|
|
95
|
+
get address() {
|
|
96
|
+
return agent.address;
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
get balance() {
|
|
100
|
+
return agent.balance;
|
|
101
|
+
},
|
|
102
|
+
|
|
103
|
+
pause() {
|
|
104
|
+
agent.pause();
|
|
105
|
+
},
|
|
106
|
+
|
|
107
|
+
resume() {
|
|
108
|
+
agent.resume();
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
async stop() {
|
|
112
|
+
await agent.stop();
|
|
113
|
+
serviceDirectory.unregister(service, agent.address);
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
on(event: any, handler: any) {
|
|
117
|
+
agent.on(event, handler);
|
|
118
|
+
},
|
|
119
|
+
|
|
120
|
+
get stats() {
|
|
121
|
+
return {
|
|
122
|
+
jobsCompleted: agent.stats.jobsCompleted,
|
|
123
|
+
jobsFailed: agent.stats.jobsFailed,
|
|
124
|
+
totalEarned: agent.stats.totalEarned,
|
|
125
|
+
averageJobTime: agent.stats.averageJobTime,
|
|
126
|
+
};
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
return provider;
|
|
131
|
+
}
|