@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
|
@@ -4,12 +4,75 @@ exports.MessageSigner = void 0;
|
|
|
4
4
|
const ethers_1 = require("ethers");
|
|
5
5
|
const errors_1 = require("../errors");
|
|
6
6
|
const eip712_1 = require("../types/eip712");
|
|
7
|
+
/**
|
|
8
|
+
* MessageSigner - Cryptographic signing for ACTP messages with EIP-712
|
|
9
|
+
* Reference: Yellow Paper §11.4.2
|
|
10
|
+
*
|
|
11
|
+
* V4 Security Enhancement: Optional nonce replay protection via ReceivedNonceTracker
|
|
12
|
+
*
|
|
13
|
+
* IMPORTANT: Use MessageSigner.create() factory method to ensure domain is initialized.
|
|
14
|
+
*/
|
|
7
15
|
class MessageSigner {
|
|
16
|
+
/**
|
|
17
|
+
* SECURITY FIX (H-5): Private constructor - MUST use MessageSigner.create() factory method
|
|
18
|
+
*
|
|
19
|
+
* This ensures EIP-712 domain is ALWAYS initialized before use (prevents race conditions).
|
|
20
|
+
* Direct construction would allow calling sign/verify without domain initialization.
|
|
21
|
+
*/
|
|
8
22
|
constructor(signer, nonceTracker) {
|
|
9
23
|
this.signer = signer;
|
|
10
24
|
this.nonceTracker = nonceTracker;
|
|
11
25
|
this.domain = null;
|
|
12
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* SECURITY FIX (H-4): Factory method to create MessageSigner with guaranteed domain initialization
|
|
29
|
+
*
|
|
30
|
+
* This factory ensures the EIP-712 domain is always properly initialized before use.
|
|
31
|
+
* Prevents the common bug of calling sign/verify without initializing domain first.
|
|
32
|
+
*
|
|
33
|
+
* @param signer - Ethers signer for signing messages
|
|
34
|
+
* @param kernelAddress - Address of ACTP Kernel contract (for domain separation)
|
|
35
|
+
* @param options - Optional configuration (chainId, nonceTracker)
|
|
36
|
+
* @returns Promise resolving to initialized MessageSigner
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const messageSigner = await MessageSigner.create(
|
|
41
|
+
* signer,
|
|
42
|
+
* KERNEL_ADDRESS,
|
|
43
|
+
* { chainId: 84532 }
|
|
44
|
+
* );
|
|
45
|
+
* const signature = await messageSigner.signMessage(message);
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
static async create(signer, kernelAddress, options) {
|
|
49
|
+
const messageSigner = new MessageSigner(signer, options?.nonceTracker);
|
|
50
|
+
await messageSigner.initDomain(kernelAddress, options?.chainId);
|
|
51
|
+
return messageSigner;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Check if domain is initialized
|
|
55
|
+
* @returns true if domain has been initialized
|
|
56
|
+
*/
|
|
57
|
+
isDomainInitialized() {
|
|
58
|
+
return this.domain !== null;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get the current domain (throws if not initialized)
|
|
62
|
+
* @returns Current EIP-712 domain
|
|
63
|
+
* @throws Error if domain not initialized
|
|
64
|
+
*/
|
|
65
|
+
getDomain() {
|
|
66
|
+
if (!this.domain) {
|
|
67
|
+
throw new Error('Domain not initialized. Use MessageSigner.create() factory or call initDomain() first.');
|
|
68
|
+
}
|
|
69
|
+
return this.domain;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Initialize EIP-712 domain (must be called before signing)
|
|
73
|
+
* @param kernelAddress - Address of ACTP Kernel contract
|
|
74
|
+
* @param chainId - Optional chainId (defaults to signer's chainId or 84532 for Base Sepolia)
|
|
75
|
+
*/
|
|
13
76
|
async initDomain(kernelAddress, chainId) {
|
|
14
77
|
let resolvedChainId;
|
|
15
78
|
if (chainId !== undefined) {
|
|
@@ -17,30 +80,70 @@ class MessageSigner {
|
|
|
17
80
|
}
|
|
18
81
|
else {
|
|
19
82
|
try {
|
|
83
|
+
// ethers v6: signer.provider might be null, check first
|
|
20
84
|
if (this.signer.provider) {
|
|
21
85
|
const network = await this.signer.provider.getNetwork();
|
|
22
86
|
resolvedChainId = Number(network.chainId);
|
|
23
87
|
}
|
|
24
88
|
else {
|
|
89
|
+
// Fallback to Base Sepolia for testing without provider
|
|
25
90
|
resolvedChainId = 84532;
|
|
26
91
|
}
|
|
27
92
|
}
|
|
28
93
|
catch (error) {
|
|
94
|
+
// Fallback to Base Sepolia for testing without provider
|
|
29
95
|
resolvedChainId = 84532;
|
|
30
96
|
}
|
|
31
97
|
}
|
|
98
|
+
// SECURITY FIX (H-6): Standardize domain name to 'AGIRAILS' for brand consistency
|
|
99
|
+
// Note: This change requires coordination with any existing signed messages
|
|
32
100
|
this.domain = {
|
|
33
|
-
name: '
|
|
101
|
+
name: 'AGIRAILS',
|
|
34
102
|
version: '1.0',
|
|
35
103
|
chainId: resolvedChainId,
|
|
36
104
|
verifyingContract: kernelAddress
|
|
37
105
|
};
|
|
38
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* Sign ACTP message using EIP-712 typed data
|
|
109
|
+
* Uses ECDSA (secp256k1) with domain separation per Yellow Paper §11.4.2
|
|
110
|
+
*
|
|
111
|
+
* SECURITY FIX (H-3): Validates nonce format and warns about sequential nonces
|
|
112
|
+
*
|
|
113
|
+
* Generic ACTPMessage format (backward compatible).
|
|
114
|
+
* For strict typed AIP messages, use signQuoteRequest/signQuoteResponse/signDeliveryProof
|
|
115
|
+
*/
|
|
39
116
|
async signMessage(message) {
|
|
40
117
|
if (!this.domain) {
|
|
41
|
-
throw new Error('Domain not initialized.
|
|
118
|
+
throw new Error('Domain not initialized. Use MessageSigner.create() factory or call initDomain() first.');
|
|
42
119
|
}
|
|
43
120
|
const { type, version, from, to, timestamp, nonce, signature, ...payload } = message;
|
|
121
|
+
// SECURITY FIX (H-3): Validate nonce format (must be bytes32)
|
|
122
|
+
if (!nonce || !/^0x[a-fA-F0-9]{64}$/.test(nonce)) {
|
|
123
|
+
throw new Error(`Invalid nonce format: "${nonce}". ` +
|
|
124
|
+
`Nonce MUST be a bytes32 hex string (0x + 64 hex chars). ` +
|
|
125
|
+
`Use SecureNonce.generateSecureNonce() to generate cryptographically secure nonces. ` +
|
|
126
|
+
`Never use sequential integers (1, 2, 3...) or timestamps as nonces.`);
|
|
127
|
+
}
|
|
128
|
+
// SECURITY FIX (H-3): Warn about sequential nonces (low entropy)
|
|
129
|
+
// Sequential nonces like 0x0000...0001, 0x0000...0002 are weak
|
|
130
|
+
// Check if nonce has low entropy (e.g., last 8 bytes are zero, or all same digits)
|
|
131
|
+
const nonceValue = BigInt(nonce);
|
|
132
|
+
if (nonceValue < 0xffffffffn) {
|
|
133
|
+
// Nonce is suspiciously small (< 4 billion = likely sequential)
|
|
134
|
+
console.warn(`[SECURITY WARNING] Nonce ${nonce} appears to be sequential (value < 2^32). ` +
|
|
135
|
+
`This makes replay attacks easier. ` +
|
|
136
|
+
`Use SecureNonce.generateSecureNonce() for cryptographically secure random nonces.`);
|
|
137
|
+
}
|
|
138
|
+
// Check if nonce has all same digits (e.g., 0x111...111 or 0x000...000)
|
|
139
|
+
const hexDigits = nonce.slice(2); // Remove '0x'
|
|
140
|
+
const firstDigit = hexDigits[0];
|
|
141
|
+
if (hexDigits.split('').every(d => d === firstDigit)) {
|
|
142
|
+
console.warn(`[SECURITY WARNING] Nonce ${nonce} has low entropy (all digits are '${firstDigit}'). ` +
|
|
143
|
+
`This is NOT cryptographically secure. ` +
|
|
144
|
+
`Use SecureNonce.generateSecureNonce() instead.`);
|
|
145
|
+
}
|
|
146
|
+
// Generic ACTPMessage with payload encoding (backward compatible)
|
|
44
147
|
const abiCoder = ethers_1.AbiCoder.defaultAbiCoder();
|
|
45
148
|
const payloadBytes = abiCoder.encode(['string'], [this.canonicalizePayload(payload)]);
|
|
46
149
|
const typedMessage = {
|
|
@@ -52,42 +155,62 @@ class MessageSigner {
|
|
|
52
155
|
nonce,
|
|
53
156
|
payload: payloadBytes
|
|
54
157
|
};
|
|
158
|
+
// Use generic ACTPMessage types
|
|
55
159
|
const messageTypes = (0, eip712_1.getMessageTypes)('default');
|
|
160
|
+
// Sign using EIP-712 (ethers v6 API)
|
|
56
161
|
const signer = this.signer;
|
|
57
162
|
const sig = await signer.signTypedData(this.domain, messageTypes, typedMessage);
|
|
58
163
|
return sig;
|
|
59
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* Sign typed QuoteRequest message
|
|
167
|
+
*/
|
|
60
168
|
async signQuoteRequest(data) {
|
|
61
169
|
if (!this.domain) {
|
|
62
|
-
throw new Error('Domain not initialized.
|
|
170
|
+
throw new Error('Domain not initialized. Use MessageSigner.create() factory or call initDomain() first.');
|
|
63
171
|
}
|
|
64
172
|
const messageTypes = (0, eip712_1.getMessageTypes)('quote.request');
|
|
65
173
|
const signer = this.signer;
|
|
66
174
|
return await signer.signTypedData(this.domain, messageTypes, data);
|
|
67
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* Sign typed QuoteResponse message
|
|
178
|
+
*/
|
|
68
179
|
async signQuoteResponse(data) {
|
|
69
180
|
if (!this.domain) {
|
|
70
|
-
throw new Error('Domain not initialized.
|
|
181
|
+
throw new Error('Domain not initialized. Use MessageSigner.create() factory or call initDomain() first.');
|
|
71
182
|
}
|
|
72
183
|
const messageTypes = (0, eip712_1.getMessageTypes)('quote.response');
|
|
73
184
|
const signer = this.signer;
|
|
74
185
|
return await signer.signTypedData(this.domain, messageTypes, data);
|
|
75
186
|
}
|
|
187
|
+
/**
|
|
188
|
+
* Sign typed DeliveryProof message
|
|
189
|
+
*/
|
|
76
190
|
async signDeliveryProof(data) {
|
|
77
191
|
if (!this.domain) {
|
|
78
|
-
throw new Error('Domain not initialized.
|
|
192
|
+
throw new Error('Domain not initialized. Use MessageSigner.create() factory or call initDomain() first.');
|
|
79
193
|
}
|
|
80
194
|
const messageTypes = (0, eip712_1.getMessageTypes)('delivery.proof');
|
|
81
195
|
const signer = this.signer;
|
|
82
196
|
return await signer.signTypedData(this.domain, messageTypes, data);
|
|
83
197
|
}
|
|
198
|
+
/**
|
|
199
|
+
* Convenience helper to sign a DeliveryProof generated by ProofGenerator
|
|
200
|
+
*/
|
|
84
201
|
async signGeneratedDeliveryProof(proof) {
|
|
85
202
|
const typedData = (0, eip712_1.deliveryProofDataFromProof)(proof);
|
|
86
203
|
return await this.signDeliveryProof(typedData);
|
|
87
204
|
}
|
|
205
|
+
/**
|
|
206
|
+
* Verify message signature using EIP-712
|
|
207
|
+
* Uses generic ACTPMessage types (backward compatible)
|
|
208
|
+
*
|
|
209
|
+
* V4 Security: If nonceTracker is configured, validates nonce for replay protection
|
|
210
|
+
*/
|
|
88
211
|
async verifySignature(message, signature) {
|
|
89
212
|
if (!this.domain) {
|
|
90
|
-
throw new Error('Domain not initialized.
|
|
213
|
+
throw new Error('Domain not initialized. Use MessageSigner.create() factory or call initDomain() first.');
|
|
91
214
|
}
|
|
92
215
|
const { type, version, from, to, timestamp, nonce, signature: _, ...payload } = message;
|
|
93
216
|
const abiCoder = ethers_1.AbiCoder.defaultAbiCoder();
|
|
@@ -101,20 +224,28 @@ class MessageSigner {
|
|
|
101
224
|
nonce,
|
|
102
225
|
payload: payloadBytes
|
|
103
226
|
};
|
|
227
|
+
// Use generic ACTPMessage types (backward compatible)
|
|
104
228
|
const messageTypes = (0, eip712_1.getMessageTypes)('default');
|
|
105
229
|
const recoveredAddress = ethers_1.ethers.verifyTypedData(this.domain, messageTypes, typedMessage, signature);
|
|
106
230
|
const expectedAddress = this.didToAddress(from);
|
|
231
|
+
// Verify signature matches sender
|
|
107
232
|
if (recoveredAddress.toLowerCase() !== expectedAddress.toLowerCase()) {
|
|
108
233
|
return false;
|
|
109
234
|
}
|
|
235
|
+
// V4 Security: Validate nonce for replay protection (if tracker configured)
|
|
110
236
|
if (this.nonceTracker) {
|
|
111
237
|
const nonceValidation = this.nonceTracker.validateAndRecord(from, type, nonce);
|
|
112
238
|
if (!nonceValidation.valid) {
|
|
239
|
+
// Nonce replay detected - return false
|
|
113
240
|
return false;
|
|
114
241
|
}
|
|
115
242
|
}
|
|
116
243
|
return true;
|
|
117
244
|
}
|
|
245
|
+
/**
|
|
246
|
+
* Verify signature and throw if invalid
|
|
247
|
+
* V4 Security: Throws specific error for nonce replay detection
|
|
248
|
+
*/
|
|
118
249
|
async verifySignatureOrThrow(message, signature) {
|
|
119
250
|
if (!this.domain) {
|
|
120
251
|
throw new Error('Domain not initialized');
|
|
@@ -126,28 +257,41 @@ class MessageSigner {
|
|
|
126
257
|
const messageTypes = (0, eip712_1.getMessageTypes)('default');
|
|
127
258
|
const recoveredAddress = ethers_1.ethers.verifyTypedData(this.domain, messageTypes, typedMessage, signature);
|
|
128
259
|
const expectedAddress = this.didToAddress(from);
|
|
260
|
+
// Check signature validity first
|
|
129
261
|
if (recoveredAddress.toLowerCase() !== expectedAddress.toLowerCase()) {
|
|
130
262
|
throw new errors_1.SignatureVerificationError(expectedAddress, recoveredAddress);
|
|
131
263
|
}
|
|
264
|
+
// V4 Security: Validate nonce for replay protection (if tracker configured)
|
|
132
265
|
if (this.nonceTracker) {
|
|
133
266
|
const nonceValidation = this.nonceTracker.validateAndRecord(from, type, nonce);
|
|
134
267
|
if (!nonceValidation.valid) {
|
|
268
|
+
// Throw specific error for nonce replay
|
|
135
269
|
throw new Error(`Nonce replay attack detected: ${nonceValidation.reason}. ` +
|
|
136
270
|
`Received nonce: ${nonceValidation.receivedNonce}. ` +
|
|
137
271
|
(nonceValidation.expectedMinimum ? `Expected minimum: ${nonceValidation.expectedMinimum}` : ''));
|
|
138
272
|
}
|
|
139
273
|
}
|
|
140
274
|
}
|
|
275
|
+
/**
|
|
276
|
+
* Canonicalize payload to deterministic string (recursively sorted keys)
|
|
277
|
+
* Prevents JSON serialization ambiguity across different JS runtimes
|
|
278
|
+
* Recursively handles nested objects and arrays
|
|
279
|
+
*/
|
|
141
280
|
canonicalizePayload(payload) {
|
|
142
281
|
return JSON.stringify(this.recursiveSort(payload));
|
|
143
282
|
}
|
|
283
|
+
/**
|
|
284
|
+
* Recursively sort object keys for deterministic JSON encoding
|
|
285
|
+
*/
|
|
144
286
|
recursiveSort(obj) {
|
|
145
287
|
if (obj === null || obj === undefined) {
|
|
146
288
|
return obj;
|
|
147
289
|
}
|
|
290
|
+
// Handle arrays: recursively sort each element
|
|
148
291
|
if (Array.isArray(obj)) {
|
|
149
292
|
return obj.map((item) => this.recursiveSort(item));
|
|
150
293
|
}
|
|
294
|
+
// Handle objects: sort keys and recursively sort values
|
|
151
295
|
if (typeof obj === 'object' && obj.constructor === Object) {
|
|
152
296
|
const sortedKeys = Object.keys(obj).sort();
|
|
153
297
|
const canonical = {};
|
|
@@ -156,21 +300,83 @@ class MessageSigner {
|
|
|
156
300
|
}
|
|
157
301
|
return canonical;
|
|
158
302
|
}
|
|
303
|
+
// Primitives (string, number, boolean)
|
|
159
304
|
return obj;
|
|
160
305
|
}
|
|
306
|
+
/**
|
|
307
|
+
* Convert DID to Ethereum address
|
|
308
|
+
*
|
|
309
|
+
* SECURITY FIX (DID-FORMAT): Handles both DID formats:
|
|
310
|
+
* - Legacy: did:ethr:<address>
|
|
311
|
+
* - Canonical (EIP-3770): did:ethr:<chainId>:<address>
|
|
312
|
+
*
|
|
313
|
+
* Examples:
|
|
314
|
+
* - "did:ethr:0x1234...abcd" → "0x1234...abcd"
|
|
315
|
+
* - "did:ethr:84532:0x1234...abcd" → "0x1234...abcd"
|
|
316
|
+
* - "0x1234...abcd" → "0x1234...abcd" (raw address passthrough)
|
|
317
|
+
*/
|
|
161
318
|
didToAddress(did) {
|
|
162
|
-
|
|
163
|
-
|
|
319
|
+
// Check for DID format first
|
|
320
|
+
const DID_PREFIX = 'did:ethr:';
|
|
321
|
+
if (did.startsWith(DID_PREFIX)) {
|
|
322
|
+
const remainder = did.slice(DID_PREFIX.length);
|
|
323
|
+
// Check if it's canonical format: did:ethr:<chainId>:<address>
|
|
324
|
+
// chainId is numeric, address starts with 0x
|
|
325
|
+
const parts = remainder.split(':');
|
|
326
|
+
if (parts.length === 2) {
|
|
327
|
+
// Canonical format: did:ethr:<chainId>:<address>
|
|
328
|
+
const [chainIdStr, address] = parts;
|
|
329
|
+
const chainId = parseInt(chainIdStr, 10);
|
|
330
|
+
if (isNaN(chainId)) {
|
|
331
|
+
throw new Error(`Invalid DID format: ${did}. ` +
|
|
332
|
+
`Expected did:ethr:<chainId>:<address> but chainId "${chainIdStr}" is not a number.`);
|
|
333
|
+
}
|
|
334
|
+
if (!ethers_1.ethers.isAddress(address)) {
|
|
335
|
+
throw new Error(`Invalid DID format: ${did}. ` +
|
|
336
|
+
`Expected did:ethr:<chainId>:<address> but "${address}" is not a valid Ethereum address.`);
|
|
337
|
+
}
|
|
338
|
+
// SECURITY: Optionally validate chainId matches domain chainId
|
|
339
|
+
// This prevents cross-chain replay attacks where a message signed for one chain
|
|
340
|
+
// is replayed on another. For now, we just extract the address but log a warning.
|
|
341
|
+
if (this.domain && this.domain.chainId !== chainId) {
|
|
342
|
+
console.warn(`[SECURITY WARNING] DID chainId (${chainId}) does not match domain chainId (${this.domain.chainId}). ` +
|
|
343
|
+
`This could indicate a cross-chain replay attempt. DID: ${did}`);
|
|
344
|
+
}
|
|
345
|
+
return address;
|
|
346
|
+
}
|
|
347
|
+
else if (parts.length === 1 && ethers_1.ethers.isAddress(parts[0])) {
|
|
348
|
+
// Legacy format: did:ethr:<address>
|
|
349
|
+
return parts[0];
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
throw new Error(`Invalid DID format: ${did}. ` +
|
|
353
|
+
`Expected did:ethr:<address> or did:ethr:<chainId>:<address>.`);
|
|
354
|
+
}
|
|
164
355
|
}
|
|
356
|
+
// If already an address (raw 0x format), return as-is
|
|
165
357
|
if (ethers_1.ethers.isAddress(did)) {
|
|
166
358
|
return did;
|
|
167
359
|
}
|
|
168
|
-
throw new Error(`Invalid DID format: ${did}`
|
|
360
|
+
throw new Error(`Invalid DID format: ${did}. ` +
|
|
361
|
+
`Expected Ethereum address (0x...) or DID (did:ethr:...).`);
|
|
169
362
|
}
|
|
363
|
+
/**
|
|
364
|
+
* Convert Ethereum address to DID
|
|
365
|
+
*
|
|
366
|
+
* SECURITY FIX (DID-FORMAT): Now generates canonical DID format
|
|
367
|
+
* with chainId when domain is initialized: did:ethr:<chainId>:<address>
|
|
368
|
+
*
|
|
369
|
+
* Falls back to legacy format if domain not initialized.
|
|
370
|
+
*/
|
|
170
371
|
addressToDID(address) {
|
|
171
372
|
if (!ethers_1.ethers.isAddress(address)) {
|
|
172
373
|
throw new Error(`Invalid Ethereum address: ${address}`);
|
|
173
374
|
}
|
|
375
|
+
// Use canonical format with chainId if domain is initialized
|
|
376
|
+
if (this.domain && this.domain.chainId) {
|
|
377
|
+
return `did:ethr:${this.domain.chainId}:${address}`;
|
|
378
|
+
}
|
|
379
|
+
// Fallback to legacy format (backward compatible)
|
|
174
380
|
return `did:ethr:${address}`;
|
|
175
381
|
}
|
|
176
382
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageSigner.js","sourceRoot":"","sources":["../../src/protocol/MessageSigner.ts"],"names":[],"mappings":";;;AAAA,mCAAkD;AAElD,sCAAuD;AACvD,4CAOyB;
|
|
1
|
+
{"version":3,"file":"MessageSigner.js","sourceRoot":"","sources":["../../src/protocol/MessageSigner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,115 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
1
2
|
import { BytesLike } from 'ethers';
|
|
2
3
|
import { DeliveryProof } from '../types';
|
|
3
4
|
import { DeliveryProofData } from '../types/eip712';
|
|
5
|
+
/**
|
|
6
|
+
* SECURITY FIX (MEDIUM-2): URL validation configuration for SSRF prevention
|
|
7
|
+
*/
|
|
8
|
+
export interface URLValidationConfig {
|
|
9
|
+
/**
|
|
10
|
+
* Allowed URL protocols (default: ['https:'])
|
|
11
|
+
* Set to ['https:', 'http:'] to allow HTTP in development
|
|
12
|
+
*/
|
|
13
|
+
allowedProtocols?: string[];
|
|
14
|
+
/**
|
|
15
|
+
* Allow localhost URLs (default: false in production, true in dev)
|
|
16
|
+
*/
|
|
17
|
+
allowLocalhost?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Maximum response size in bytes (default: 10MB)
|
|
20
|
+
*/
|
|
21
|
+
maxSize?: number;
|
|
22
|
+
/**
|
|
23
|
+
* Request timeout in milliseconds (default: 30000)
|
|
24
|
+
*/
|
|
25
|
+
timeout?: number;
|
|
26
|
+
/**
|
|
27
|
+
* Blocked hostnames (e.g., internal services)
|
|
28
|
+
*/
|
|
29
|
+
blockedHosts?: string[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* ProofGenerator - Content hashing and delivery proofs
|
|
33
|
+
* Reference: Yellow Paper §11.4.1
|
|
34
|
+
*
|
|
35
|
+
* SECURITY FIX (MEDIUM-2): Now includes URL validation for SSRF prevention
|
|
36
|
+
*/
|
|
4
37
|
export declare class ProofGenerator {
|
|
38
|
+
private readonly urlConfig;
|
|
39
|
+
/**
|
|
40
|
+
* Create ProofGenerator with optional URL validation config
|
|
41
|
+
*
|
|
42
|
+
* @param urlConfig - URL validation configuration for hashFromUrl()
|
|
43
|
+
*/
|
|
44
|
+
constructor(urlConfig?: URLValidationConfig);
|
|
45
|
+
/**
|
|
46
|
+
* Hash deliverable content
|
|
47
|
+
* Uses Keccak256 per Yellow Paper §11.4.1
|
|
48
|
+
*/
|
|
5
49
|
hashContent(content: string | Buffer): string;
|
|
50
|
+
/**
|
|
51
|
+
* Generate delivery proof (AIP-4)
|
|
52
|
+
* Reference: Yellow Paper §8.2
|
|
53
|
+
* Complete schema with type field for AIP compliance
|
|
54
|
+
* Computed fields (size, mimeType) cannot be overwritten
|
|
55
|
+
*/
|
|
6
56
|
generateDeliveryProof(params: {
|
|
7
57
|
txId: string;
|
|
8
58
|
deliverable: string | Buffer;
|
|
9
59
|
deliveryUrl?: string;
|
|
10
60
|
metadata?: Record<string, any>;
|
|
11
61
|
}): DeliveryProof;
|
|
62
|
+
/**
|
|
63
|
+
* Convert a generated delivery proof into typed EIP-712 data
|
|
64
|
+
*/
|
|
12
65
|
toDeliveryProofTypedData(proof: DeliveryProof): DeliveryProofData;
|
|
66
|
+
/**
|
|
67
|
+
* Encode proof for on-chain submission
|
|
68
|
+
*/
|
|
13
69
|
encodeProof(proof: DeliveryProof): BytesLike;
|
|
70
|
+
/**
|
|
71
|
+
* Decode proof from on-chain data
|
|
72
|
+
*/
|
|
14
73
|
decodeProof(proofData: BytesLike): {
|
|
15
74
|
txId: string;
|
|
16
75
|
contentHash: string;
|
|
17
76
|
timestamp: number;
|
|
18
77
|
};
|
|
78
|
+
/**
|
|
79
|
+
* Verify deliverable matches expected hash
|
|
80
|
+
*/
|
|
19
81
|
verifyDeliverable(deliverable: string | Buffer, expectedHash: string): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Generate content hash from URL (for IPFS/Arweave)
|
|
84
|
+
*
|
|
85
|
+
* SECURITY FIX (MEDIUM-2): Now includes:
|
|
86
|
+
* - Protocol validation (HTTPS only by default)
|
|
87
|
+
* - Hostname blocklist (prevents SSRF to internal services)
|
|
88
|
+
* - Size limits (prevents DoS via large responses)
|
|
89
|
+
* - Request timeout
|
|
90
|
+
*
|
|
91
|
+
* @param url - URL to fetch content from
|
|
92
|
+
* @returns Keccak256 hash of content
|
|
93
|
+
* @throws Error if URL is blocked, too large, or fetch fails
|
|
94
|
+
*/
|
|
20
95
|
hashFromUrl(url: string): Promise<string>;
|
|
96
|
+
/**
|
|
97
|
+
* SECURITY FIX (MEDIUM-2): Validate URL against security rules
|
|
98
|
+
*
|
|
99
|
+
* @param url - URL to validate
|
|
100
|
+
* @throws Error if URL is not allowed
|
|
101
|
+
*/
|
|
102
|
+
private validateUrl;
|
|
103
|
+
/**
|
|
104
|
+
* Check if hostname is a private IP address
|
|
105
|
+
*
|
|
106
|
+
* @param hostname - Hostname to check
|
|
107
|
+
* @returns true if hostname is a private IP
|
|
108
|
+
*/
|
|
109
|
+
private isPrivateIP;
|
|
110
|
+
/**
|
|
111
|
+
* Get the URL validation config (for testing/inspection)
|
|
112
|
+
*/
|
|
113
|
+
getUrlConfig(): Required<URLValidationConfig>;
|
|
21
114
|
}
|
|
22
115
|
//# sourceMappingURL=ProofGenerator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProofGenerator.d.ts","sourceRoot":"","sources":["../../src/protocol/ProofGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAA8B,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"ProofGenerator.d.ts","sourceRoot":"","sources":["../../src/protocol/ProofGenerator.ts"],"names":[],"mappings":";AAAA,OAAO,EAAoC,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAA8B,MAAM,iBAAiB,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE5B;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAqBD;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgC;IAE1D;;;;OAIG;gBACS,SAAS,CAAC,EAAE,mBAAmB;IAa3C;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;IAM7C;;;;;OAKG;IACH,qBAAqB,CAAC,MAAM,EAAE;QAC5B,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;QAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAChC,GAAG,aAAa;IA2BjB;;OAEG;IACH,wBAAwB,CAAC,KAAK,EAAE,aAAa,GAAG,iBAAiB;IAIjE;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS;IAQ5C;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,SAAS,GAAG;QACjC,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACnB;IAcD;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;IAK9E;;;;;;;;;;;;OAYG;IACG,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA2E/C;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAmCnB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAoBnB;;OAEG;IACH,YAAY,IAAI,QAAQ,CAAC,mBAAmB,CAAC;CAG9C"}
|