@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,495 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DIDResolver = void 0;
|
|
4
|
+
const ethers_1 = require("ethers");
|
|
5
|
+
// NOTE: These imports require npm packages to be installed:
|
|
6
|
+
// - did-resolver
|
|
7
|
+
// - ethr-did-resolver
|
|
8
|
+
const did_resolver_1 = require("did-resolver");
|
|
9
|
+
const ethr_did_resolver_1 = require("ethr-did-resolver");
|
|
10
|
+
const networks_1 = require("../config/networks");
|
|
11
|
+
const errors_1 = require("../errors");
|
|
12
|
+
/**
|
|
13
|
+
* DIDResolver - Resolve DIDs to DID Documents (AIP-7 §2.2)
|
|
14
|
+
*
|
|
15
|
+
* Uses ethr-did-resolver library for resolution against AGIRAILS Identity Registry.
|
|
16
|
+
* Supports did:ethr method with explicit chainId format: did:ethr:<chainId>:<address>
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const resolver = await DIDResolver.create({ network: 'base-sepolia' });
|
|
21
|
+
*
|
|
22
|
+
* // Resolve DID to DID Document
|
|
23
|
+
* const result = await resolver.resolve('did:ethr:84532:0x742d35cc6634c0532925a3b844bc9e7595f0beb');
|
|
24
|
+
* console.log(result.didDocument);
|
|
25
|
+
*
|
|
26
|
+
* // Verify signature
|
|
27
|
+
* const isValid = await resolver.verifySignature(
|
|
28
|
+
* 'did:ethr:84532:0x742d35cc...',
|
|
29
|
+
* 'Hello AGIRAILS',
|
|
30
|
+
* '0x1234...',
|
|
31
|
+
* { chainId: 84532 }
|
|
32
|
+
* );
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @security
|
|
36
|
+
* - Always validates DID format before resolution
|
|
37
|
+
* - Checks chainId matches expected network
|
|
38
|
+
* - Verifies signatures using ethers.js verifyMessage
|
|
39
|
+
* - Prevents cross-chain replay attacks via chainId validation
|
|
40
|
+
*/
|
|
41
|
+
class DIDResolver {
|
|
42
|
+
/**
|
|
43
|
+
* Private constructor - use DIDResolver.create() factory method
|
|
44
|
+
*/
|
|
45
|
+
constructor(config) {
|
|
46
|
+
this.config = config;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Factory method to create DIDResolver instance
|
|
50
|
+
*
|
|
51
|
+
* @param config - Configuration options
|
|
52
|
+
* @returns Configured DIDResolver instance
|
|
53
|
+
* @throws ValidationError if configuration is invalid
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* // Using predefined network
|
|
58
|
+
* const resolver = await DIDResolver.create({ network: 'base-sepolia' });
|
|
59
|
+
*
|
|
60
|
+
* // Using custom RPC and registry
|
|
61
|
+
* const resolver = await DIDResolver.create({
|
|
62
|
+
* chainId: 84532,
|
|
63
|
+
* rpcUrl: 'https://sepolia.base.org',
|
|
64
|
+
* registryAddress: '0x...'
|
|
65
|
+
* });
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
static async create(config = {}) {
|
|
69
|
+
// Resolve configuration with defaults
|
|
70
|
+
const resolvedConfig = DIDResolver.resolveConfig(config);
|
|
71
|
+
// Validate configuration
|
|
72
|
+
DIDResolver.validateConfig(resolvedConfig);
|
|
73
|
+
// Initialize did-resolver with ethr-did-resolver
|
|
74
|
+
const providerConfig = {
|
|
75
|
+
networks: [
|
|
76
|
+
{
|
|
77
|
+
name: resolvedConfig.network || `chain-${resolvedConfig.chainId}`,
|
|
78
|
+
chainId: `0x${resolvedConfig.chainId.toString(16)}`,
|
|
79
|
+
rpcUrl: resolvedConfig.rpcUrl,
|
|
80
|
+
registry: resolvedConfig.registryAddress
|
|
81
|
+
}
|
|
82
|
+
]
|
|
83
|
+
};
|
|
84
|
+
const ethrResolver = (0, ethr_did_resolver_1.getResolver)(providerConfig);
|
|
85
|
+
const resolver = new did_resolver_1.Resolver(ethrResolver);
|
|
86
|
+
const instance = new DIDResolver(resolvedConfig);
|
|
87
|
+
instance.resolver = resolver;
|
|
88
|
+
return instance;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Resolve configuration with defaults from network config
|
|
92
|
+
*/
|
|
93
|
+
static resolveConfig(config) {
|
|
94
|
+
// If network specified, use network defaults
|
|
95
|
+
if (config.network) {
|
|
96
|
+
const networkConfig = (0, networks_1.getNetwork)(config.network);
|
|
97
|
+
return {
|
|
98
|
+
network: config.network,
|
|
99
|
+
chainId: config.chainId || networkConfig.chainId,
|
|
100
|
+
rpcUrl: config.rpcUrl || networkConfig.rpcUrl,
|
|
101
|
+
registryAddress: config.registryAddress || networkConfig.contracts.agentRegistry || ''
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
// Custom configuration (must provide all required fields)
|
|
105
|
+
if (!config.chainId || !config.rpcUrl) {
|
|
106
|
+
throw new errors_1.ValidationError('config', 'Must provide either network name or (chainId + rpcUrl)');
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
network: config.network || '',
|
|
110
|
+
chainId: config.chainId,
|
|
111
|
+
rpcUrl: config.rpcUrl,
|
|
112
|
+
registryAddress: config.registryAddress || ''
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Validate configuration
|
|
117
|
+
*/
|
|
118
|
+
static validateConfig(config) {
|
|
119
|
+
if (!config.chainId || config.chainId <= 0) {
|
|
120
|
+
throw new errors_1.ValidationError('chainId', 'Invalid chainId');
|
|
121
|
+
}
|
|
122
|
+
if (!config.rpcUrl || !config.rpcUrl.startsWith('http')) {
|
|
123
|
+
throw new errors_1.ValidationError('rpcUrl', 'Invalid RPC URL');
|
|
124
|
+
}
|
|
125
|
+
// Registry address is optional (will use default if not provided)
|
|
126
|
+
// But if provided, must be valid address
|
|
127
|
+
if (config.registryAddress) {
|
|
128
|
+
try {
|
|
129
|
+
(0, ethers_1.getAddress)(config.registryAddress);
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
throw new errors_1.ValidationError('registryAddress', 'Invalid registry address');
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get resolver configuration
|
|
138
|
+
*/
|
|
139
|
+
getConfig() {
|
|
140
|
+
return { ...this.config };
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Resolve DID to DID Document
|
|
144
|
+
*
|
|
145
|
+
* @param did - DID to resolve (format: did:ethr:<chainId>:<address>)
|
|
146
|
+
* @returns DID resolution result with document and metadata
|
|
147
|
+
* @throws ValidationError if DID format is invalid
|
|
148
|
+
*
|
|
149
|
+
* @example
|
|
150
|
+
* ```typescript
|
|
151
|
+
* const result = await resolver.resolve('did:ethr:84532:0x742d35cc6634c0532925a3b844bc9e7595f0beb');
|
|
152
|
+
*
|
|
153
|
+
* if (result.didDocument) {
|
|
154
|
+
* console.log('Identity owner:', result.didDocument.verificationMethod[0].controller);
|
|
155
|
+
* console.log('Service endpoints:', result.didDocument.service);
|
|
156
|
+
* } else {
|
|
157
|
+
* console.error('Resolution failed:', result.didResolutionMetadata.error);
|
|
158
|
+
* }
|
|
159
|
+
* ```
|
|
160
|
+
*/
|
|
161
|
+
async resolve(did) {
|
|
162
|
+
// Validate DID format
|
|
163
|
+
const parsed = DIDResolver.parseDID(did);
|
|
164
|
+
// Check chainId matches expected network
|
|
165
|
+
if (parsed.chainId !== this.config.chainId) {
|
|
166
|
+
return {
|
|
167
|
+
didDocument: null,
|
|
168
|
+
didResolutionMetadata: {
|
|
169
|
+
error: 'invalidDid',
|
|
170
|
+
message: `DID chainId ${parsed.chainId} does not match resolver chainId ${this.config.chainId}`
|
|
171
|
+
},
|
|
172
|
+
didDocumentMetadata: {}
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
// Perform resolution using did-resolver
|
|
176
|
+
const result = await this.resolver.resolve(did);
|
|
177
|
+
return result;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Verify a signature was made by DID controller or authorized delegate
|
|
181
|
+
*
|
|
182
|
+
* @param did - DID of expected signer
|
|
183
|
+
* @param message - Original message that was signed
|
|
184
|
+
* @param signature - Signature to verify (0x-prefixed hex string)
|
|
185
|
+
* @param options - Verification options (chainId validation, domain separation, etc.)
|
|
186
|
+
* @returns Verification result with validity and signer info
|
|
187
|
+
*
|
|
188
|
+
* @security
|
|
189
|
+
* - Validates chainId to prevent cross-chain replay attacks
|
|
190
|
+
* - Uses domain separation to prevent cross-protocol replay attacks (MEDIUM finding fix)
|
|
191
|
+
* - Resolves DID to get current owner and delegates
|
|
192
|
+
* - Checks if signer is owner or valid delegate (MEDIUM finding fix)
|
|
193
|
+
* - Validates delegate expiration timestamps if provided
|
|
194
|
+
*
|
|
195
|
+
* @example
|
|
196
|
+
* ```typescript
|
|
197
|
+
* // With domain separation (recommended - default)
|
|
198
|
+
* const result = await resolver.verifySignature(
|
|
199
|
+
* 'did:ethr:84532:0x742d35cc...',
|
|
200
|
+
* 'Hello AGIRAILS',
|
|
201
|
+
* '0x1234...',
|
|
202
|
+
* { chainId: 84532, useDomainSeparation: true }
|
|
203
|
+
* );
|
|
204
|
+
*
|
|
205
|
+
* // Without domain separation (backwards compatibility only)
|
|
206
|
+
* const legacyResult = await resolver.verifySignature(
|
|
207
|
+
* 'did:ethr:84532:0x742d35cc...',
|
|
208
|
+
* 'Hello AGIRAILS',
|
|
209
|
+
* '0x1234...',
|
|
210
|
+
* { chainId: 84532, useDomainSeparation: false }
|
|
211
|
+
* );
|
|
212
|
+
*
|
|
213
|
+
* if (result.valid) {
|
|
214
|
+
* console.log('Signature is valid!');
|
|
215
|
+
* console.log('Signer:', result.signer);
|
|
216
|
+
* console.log('Is delegate:', result.isDelegate);
|
|
217
|
+
* if (result.isDelegate) {
|
|
218
|
+
* console.log('Delegate type:', result.delegateType);
|
|
219
|
+
* }
|
|
220
|
+
* } else {
|
|
221
|
+
* console.error('Invalid signature:', result.error);
|
|
222
|
+
* }
|
|
223
|
+
* ```
|
|
224
|
+
*/
|
|
225
|
+
async verifySignature(did, message, signature, options) {
|
|
226
|
+
try {
|
|
227
|
+
// Validate DID format
|
|
228
|
+
const parsed = DIDResolver.parseDID(did);
|
|
229
|
+
// Validate chainId matches
|
|
230
|
+
if (parsed.chainId !== options.chainId) {
|
|
231
|
+
return {
|
|
232
|
+
valid: false,
|
|
233
|
+
error: `DID chainId ${parsed.chainId} does not match expected chainId ${options.chainId}`
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
// SECURITY FIX (MEDIUM): Domain separation to prevent cross-protocol replay attacks
|
|
237
|
+
// Default to true for security, but allow opt-out for backwards compatibility
|
|
238
|
+
const useDomainSeparation = options.useDomainSeparation !== false;
|
|
239
|
+
const messageToVerify = useDomainSeparation
|
|
240
|
+
? this.createDomainSeparatedMessage(message, parsed.chainId, did)
|
|
241
|
+
: message;
|
|
242
|
+
// Recover signer from signature
|
|
243
|
+
const recoveredAddress = (0, ethers_1.verifyMessage)(messageToVerify, signature);
|
|
244
|
+
const signerLower = recoveredAddress.toLowerCase();
|
|
245
|
+
const didAddressLower = parsed.address.toLowerCase();
|
|
246
|
+
// Check if signer is the DID address itself (owner)
|
|
247
|
+
if (signerLower === didAddressLower) {
|
|
248
|
+
return {
|
|
249
|
+
valid: true,
|
|
250
|
+
signer: recoveredAddress,
|
|
251
|
+
isDelegate: false
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
// SECURITY FIX (MEDIUM): Implement delegate validation
|
|
255
|
+
// Check if signer is a valid delegate in the DID Document
|
|
256
|
+
const resolution = await this.resolve(did);
|
|
257
|
+
if (resolution.didDocument && resolution.didDocument.authentication) {
|
|
258
|
+
// Iterate through authentication methods to find valid delegates
|
|
259
|
+
for (const auth of resolution.didDocument.authentication) {
|
|
260
|
+
// auth can be a string (reference to verificationMethod) or VerificationMethod object
|
|
261
|
+
const verificationMethod = typeof auth === 'string'
|
|
262
|
+
? resolution.didDocument.verificationMethod?.find(vm => vm.id === auth)
|
|
263
|
+
: auth;
|
|
264
|
+
if (verificationMethod) {
|
|
265
|
+
// Extract delegate address from verification method
|
|
266
|
+
const delegateAddress = this.extractAddressFromVerificationMethod(verificationMethod);
|
|
267
|
+
if (delegateAddress && delegateAddress.toLowerCase() === signerLower) {
|
|
268
|
+
// Check delegate validity if timestamp provided
|
|
269
|
+
if (options.timestamp && verificationMethod.validTo) {
|
|
270
|
+
const validToTimestamp = typeof verificationMethod.validTo === 'bigint'
|
|
271
|
+
? Number(verificationMethod.validTo)
|
|
272
|
+
: verificationMethod.validTo;
|
|
273
|
+
if (options.timestamp > validToTimestamp) {
|
|
274
|
+
return {
|
|
275
|
+
valid: false,
|
|
276
|
+
signer: recoveredAddress,
|
|
277
|
+
error: 'Delegate expired'
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return {
|
|
282
|
+
valid: true,
|
|
283
|
+
signer: recoveredAddress,
|
|
284
|
+
isDelegate: true,
|
|
285
|
+
delegateType: verificationMethod.type
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
// Signer is neither owner nor valid delegate
|
|
292
|
+
return {
|
|
293
|
+
valid: false,
|
|
294
|
+
signer: recoveredAddress,
|
|
295
|
+
error: 'Signer is not the DID controller or a valid delegate'
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
catch (error) {
|
|
299
|
+
return {
|
|
300
|
+
valid: false,
|
|
301
|
+
error: error instanceof Error ? error.message : 'Signature verification failed'
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Build DID from address and chainId
|
|
307
|
+
*
|
|
308
|
+
* @param address - Ethereum address (with or without 0x prefix)
|
|
309
|
+
* @param chainId - Chain ID (e.g., 84532 for Base Sepolia)
|
|
310
|
+
* @returns Canonical DID string (lowercase address)
|
|
311
|
+
*
|
|
312
|
+
* @example
|
|
313
|
+
* ```typescript
|
|
314
|
+
* const did = DIDResolver.buildDID('0x742d35cc6634c0532925a3b844bc9e7595f0beb', 84532);
|
|
315
|
+
* // Returns: 'did:ethr:84532:0x742d35cc6634c0532925a3b844bc9e7595f0beb'
|
|
316
|
+
* ```
|
|
317
|
+
*/
|
|
318
|
+
static buildDID(address, chainId) {
|
|
319
|
+
// Validate and checksum address
|
|
320
|
+
const checksummed = (0, ethers_1.getAddress)(address);
|
|
321
|
+
// Convert to lowercase for canonical format (per AIP-7 §2.1)
|
|
322
|
+
const canonical = checksummed.toLowerCase();
|
|
323
|
+
return `did:ethr:${chainId}:${canonical}`;
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Parse DID to extract components
|
|
327
|
+
*
|
|
328
|
+
* @param did - DID to parse
|
|
329
|
+
* @returns Parsed components
|
|
330
|
+
* @throws ValidationError if DID format is invalid
|
|
331
|
+
*
|
|
332
|
+
* @example
|
|
333
|
+
* ```typescript
|
|
334
|
+
* const parsed = DIDResolver.parseDID('did:ethr:84532:0x742d35cc6634c0532925a3b844bc9e7595f0beb');
|
|
335
|
+
* console.log(parsed.method); // 'ethr'
|
|
336
|
+
* console.log(parsed.chainId); // 84532
|
|
337
|
+
* console.log(parsed.address); // '0x742d35cc6634c0532925a3b844bc9e7595f0beb'
|
|
338
|
+
* ```
|
|
339
|
+
*/
|
|
340
|
+
static parseDID(did) {
|
|
341
|
+
// Validate basic format
|
|
342
|
+
if (!did || typeof did !== 'string') {
|
|
343
|
+
throw new errors_1.ValidationError('did', 'DID must be a non-empty string');
|
|
344
|
+
}
|
|
345
|
+
// DID format: did:ethr:<chainId>:<address>
|
|
346
|
+
const parts = did.split(':');
|
|
347
|
+
if (parts.length !== 4) {
|
|
348
|
+
throw new errors_1.ValidationError('did', 'Invalid DID format. Expected: did:ethr:<chainId>:<address>');
|
|
349
|
+
}
|
|
350
|
+
const [scheme, method, chainIdStr, address] = parts;
|
|
351
|
+
// Validate scheme
|
|
352
|
+
if (scheme !== 'did') {
|
|
353
|
+
throw new errors_1.ValidationError('did', `Invalid DID scheme: ${scheme}. Expected: did`);
|
|
354
|
+
}
|
|
355
|
+
// Validate method
|
|
356
|
+
if (method !== 'ethr') {
|
|
357
|
+
throw new errors_1.ValidationError('did', `Invalid DID method: ${method}. Expected: ethr`);
|
|
358
|
+
}
|
|
359
|
+
// Validate chainId
|
|
360
|
+
const chainId = parseInt(chainIdStr, 10);
|
|
361
|
+
if (isNaN(chainId) || chainId <= 0) {
|
|
362
|
+
throw new errors_1.ValidationError('did', `Invalid chainId: ${chainIdStr}`);
|
|
363
|
+
}
|
|
364
|
+
// Validate address
|
|
365
|
+
try {
|
|
366
|
+
const checksummed = (0, ethers_1.getAddress)(address);
|
|
367
|
+
return {
|
|
368
|
+
method,
|
|
369
|
+
chainId,
|
|
370
|
+
address: checksummed.toLowerCase() // Canonical format per AIP-7
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
catch (error) {
|
|
374
|
+
throw new errors_1.ValidationError('did', `Invalid Ethereum address: ${address}`);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Validate DID format
|
|
379
|
+
*
|
|
380
|
+
* @param did - DID to validate
|
|
381
|
+
* @returns True if valid, false otherwise
|
|
382
|
+
*/
|
|
383
|
+
static isValidDID(did) {
|
|
384
|
+
try {
|
|
385
|
+
DIDResolver.parseDID(did);
|
|
386
|
+
return true;
|
|
387
|
+
}
|
|
388
|
+
catch {
|
|
389
|
+
return false;
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Extract address from DID
|
|
394
|
+
*
|
|
395
|
+
* @param did - DID to extract from
|
|
396
|
+
* @returns Ethereum address (lowercase)
|
|
397
|
+
* @throws ValidationError if DID format is invalid
|
|
398
|
+
*/
|
|
399
|
+
static extractAddress(did) {
|
|
400
|
+
const parsed = DIDResolver.parseDID(did);
|
|
401
|
+
return parsed.address;
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Extract chainId from DID
|
|
405
|
+
*
|
|
406
|
+
* @param did - DID to extract from
|
|
407
|
+
* @returns Chain ID
|
|
408
|
+
* @throws ValidationError if DID format is invalid
|
|
409
|
+
*/
|
|
410
|
+
static extractChainId(did) {
|
|
411
|
+
const parsed = DIDResolver.parseDID(did);
|
|
412
|
+
return parsed.chainId;
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Create domain-separated message to prevent cross-protocol replay attacks
|
|
416
|
+
*
|
|
417
|
+
* @param message - Original message
|
|
418
|
+
* @param chainId - Chain ID for domain separation
|
|
419
|
+
* @param did - DID for additional context binding
|
|
420
|
+
* @returns Domain-separated message
|
|
421
|
+
*
|
|
422
|
+
* @security
|
|
423
|
+
* - Binds signature to AGIRAILS protocol
|
|
424
|
+
* - Binds signature to specific chainId (prevents cross-chain replay)
|
|
425
|
+
* - Binds signature to specific DID (prevents cross-identity replay)
|
|
426
|
+
*
|
|
427
|
+
* @example
|
|
428
|
+
* ```typescript
|
|
429
|
+
* const domainMsg = this.createDomainSeparatedMessage('Hello', 84532, 'did:ethr:84532:0x...');
|
|
430
|
+
* // Returns: "AGIRAILS:84532:did:ethr:84532:0x...\nHello"
|
|
431
|
+
* ```
|
|
432
|
+
*/
|
|
433
|
+
createDomainSeparatedMessage(message, chainId, did) {
|
|
434
|
+
return `AGIRAILS:${chainId}:${did}\n${message}`;
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Extract Ethereum address from a verification method
|
|
438
|
+
*
|
|
439
|
+
* @param vm - Verification method from DID Document
|
|
440
|
+
* @returns Ethereum address (checksummed) or null if not found
|
|
441
|
+
*
|
|
442
|
+
* @security
|
|
443
|
+
* - Handles multiple address formats (blockchainAccountId, ethereumAddress, controller DID)
|
|
444
|
+
* - Validates extracted address format
|
|
445
|
+
* - Returns null instead of throwing for graceful error handling
|
|
446
|
+
*
|
|
447
|
+
* @example
|
|
448
|
+
* ```typescript
|
|
449
|
+
* const vm = {
|
|
450
|
+
* id: 'did:ethr:84532:0x123...#delegate1',
|
|
451
|
+
* type: 'EcdsaSecp256k1RecoveryMethod2020',
|
|
452
|
+
* controller: 'did:ethr:84532:0x123...',
|
|
453
|
+
* blockchainAccountId: '0x456...@eip155:84532'
|
|
454
|
+
* };
|
|
455
|
+
* const address = this.extractAddressFromVerificationMethod(vm);
|
|
456
|
+
* // Returns: '0x456...' (checksummed)
|
|
457
|
+
* ```
|
|
458
|
+
*/
|
|
459
|
+
extractAddressFromVerificationMethod(vm) {
|
|
460
|
+
// Try blockchainAccountId first (CAIP-10 format: "0x123...@eip155:chainId")
|
|
461
|
+
if (vm.blockchainAccountId) {
|
|
462
|
+
const match = vm.blockchainAccountId.match(/^(0x[a-fA-F0-9]{40})@/);
|
|
463
|
+
if (match) {
|
|
464
|
+
try {
|
|
465
|
+
return (0, ethers_1.getAddress)(match[1]); // Checksum the address
|
|
466
|
+
}
|
|
467
|
+
catch {
|
|
468
|
+
return null;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
// Try ethereumAddress field
|
|
473
|
+
if (vm.ethereumAddress) {
|
|
474
|
+
try {
|
|
475
|
+
return (0, ethers_1.getAddress)(vm.ethereumAddress);
|
|
476
|
+
}
|
|
477
|
+
catch {
|
|
478
|
+
return null;
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
// Try extracting from controller DID
|
|
482
|
+
if (vm.controller) {
|
|
483
|
+
try {
|
|
484
|
+
const { address } = DIDResolver.parseDID(vm.controller);
|
|
485
|
+
return (0, ethers_1.getAddress)(address); // Already lowercase, checksum it
|
|
486
|
+
}
|
|
487
|
+
catch {
|
|
488
|
+
return null;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
return null;
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
exports.DIDResolver = DIDResolver;
|
|
495
|
+
//# sourceMappingURL=DIDResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DIDResolver.js","sourceRoot":"","sources":["../../src/protocol/DIDResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Signer } from 'ethers';
|
|
2
2
|
import { DeliveryProof } from '../types';
|
|
3
|
+
import { IUsedAttestationTracker } from '../utils/UsedAttestationTracker';
|
|
3
4
|
export interface EASConfig {
|
|
4
5
|
contractAddress: string;
|
|
5
6
|
deliveryProofSchemaId: string;
|
|
@@ -8,16 +9,70 @@ export interface AttestationResponse {
|
|
|
8
9
|
uid: string;
|
|
9
10
|
transactionHash: string;
|
|
10
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* EASHelper - utility wrapper for Ethereum Attestation Service interactions
|
|
14
|
+
*/
|
|
11
15
|
export declare class EASHelper {
|
|
12
16
|
private readonly config;
|
|
13
17
|
private readonly eas;
|
|
14
|
-
|
|
18
|
+
private readonly attestationTracker;
|
|
19
|
+
/**
|
|
20
|
+
* Create EASHelper instance
|
|
21
|
+
*
|
|
22
|
+
* @param signer - Ethers signer for signing attestations
|
|
23
|
+
* @param config - EAS configuration
|
|
24
|
+
* @param attestationTracker - Optional tracker for replay attack prevention (C-1 fix)
|
|
25
|
+
*
|
|
26
|
+
* SECURITY FIX (NEW-M-2): Validates schema UID format in constructor
|
|
27
|
+
*/
|
|
28
|
+
constructor(signer: Signer, config: EASConfig, attestationTracker?: IUsedAttestationTracker);
|
|
29
|
+
/**
|
|
30
|
+
* Get the attestation tracker for external use
|
|
31
|
+
*/
|
|
32
|
+
getAttestationTracker(): IUsedAttestationTracker;
|
|
33
|
+
/**
|
|
34
|
+
* Create an attestation for a delivery proof. Returns the attestation UID and transaction hash.
|
|
35
|
+
*/
|
|
15
36
|
attestDeliveryProof(proof: DeliveryProof, recipient: string, options?: {
|
|
16
37
|
expirationTime?: number;
|
|
17
38
|
revocable?: boolean;
|
|
18
39
|
}): Promise<AttestationResponse>;
|
|
40
|
+
/**
|
|
41
|
+
* Revoke a previously issued attestation by UID.
|
|
42
|
+
*/
|
|
19
43
|
revokeAttestation(uid: string): Promise<string>;
|
|
20
|
-
|
|
44
|
+
/**
|
|
45
|
+
* Fetch attestation data from the EAS contract.
|
|
46
|
+
*/
|
|
47
|
+
getAttestation(uid: string): Promise<import("@ethereum-attestation-service/eas-sdk").Attestation>;
|
|
48
|
+
/**
|
|
49
|
+
* Verify that a delivery attestation belongs to the specified transaction.
|
|
50
|
+
*
|
|
51
|
+
* SECURITY: ACTPKernel V1 accepts any bytes32 as attestationUID without validation.
|
|
52
|
+
* This means a malicious provider could submit attestation from Transaction A
|
|
53
|
+
* for Transaction B. This method provides SDK-side protection by verifying:
|
|
54
|
+
*
|
|
55
|
+
* 1. Attestation exists and is not revoked
|
|
56
|
+
* 2. Attestation uses the canonical delivery schema UID
|
|
57
|
+
* 3. Attestation's txId matches the expected transaction ID
|
|
58
|
+
* 4. Attestation has not expired
|
|
59
|
+
*
|
|
60
|
+
* @param txId - Expected transaction ID (bytes32)
|
|
61
|
+
* @param attestationUID - Attestation UID to verify (bytes32)
|
|
62
|
+
* @returns true if attestation is valid for this transaction, false otherwise
|
|
63
|
+
* @throws Error if attestation is revoked, expired, schema mismatch, or txId mismatch
|
|
64
|
+
*/
|
|
21
65
|
verifyDeliveryAttestation(txId: string, attestationUID: string): Promise<boolean>;
|
|
66
|
+
/**
|
|
67
|
+
* Verify attestation for escrow release with mandatory replay protection
|
|
68
|
+
*
|
|
69
|
+
* SECURITY FIX (C-4): This method MUST be called before releaseEscrow()
|
|
70
|
+
* to prevent attestation replay attacks.
|
|
71
|
+
*
|
|
72
|
+
* @param txId - Expected transaction ID (bytes32)
|
|
73
|
+
* @param attestationUID - Attestation UID to verify (bytes32)
|
|
74
|
+
* @throws Error if verification fails or replay attack detected
|
|
75
|
+
*/
|
|
76
|
+
verifyAndRecordForRelease(txId: string, attestationUID: string): Promise<void>;
|
|
22
77
|
}
|
|
23
78
|
//# sourceMappingURL=EASHelper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EASHelper.d.ts","sourceRoot":"","sources":["../../src/protocol/EASHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,
|
|
1
|
+
{"version":3,"file":"EASHelper.d.ts","sourceRoot":"","sources":["../../src/protocol/EASHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EACL,uBAAuB,EAExB,MAAM,iCAAiC,CAAC;AAEzC,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,qBAAa,SAAS;IAelB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAdzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA0B;IAE7D;;;;;;;;OAQG;gBAED,MAAM,EAAE,MAAM,EACG,MAAM,EAAE,SAAS,EAClC,kBAAkB,CAAC,EAAE,uBAAuB;IAsC9C;;OAEG;IACH,qBAAqB,IAAI,uBAAuB;IAIhD;;OAEG;IACG,mBAAmB,CACvB,KAAK,EAAE,aAAa,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GACzD,OAAO,CAAC,mBAAmB,CAAC;IA4C/B;;OAEG;IACG,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYrD;;OAEG;IACG,cAAc,CAAC,GAAG,EAAE,MAAM;IAOhC;;;;;;;;;;;;;;;;OAgBG;IACG,yBAAyB,CAC7B,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC;IAwLnB;;;;;;;;;OASG;IACG,yBAAyB,CAC7B,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC;CAIjB"}
|