safehands-pharos 1.4.0 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/policies/default.json +15 -0
- package/.env.example +81 -64
- package/README.md +301 -333
- package/SECURITY.md +112 -0
- package/SKILL.md +59 -0
- package/contracts/SafeHandsAttestation.sol +182 -0
- package/contracts/SafeHandsRegistry.sol +149 -0
- package/dist/agent/SafeHandsGuardianAgent.d.ts +39 -0
- package/dist/agent/SafeHandsGuardianAgent.d.ts.map +1 -0
- package/dist/agent/SafeHandsGuardianAgent.js +98 -0
- package/dist/agent/SafeHandsGuardianAgent.js.map +1 -0
- package/dist/agent/agentDecisionFormatter.d.ts +43 -0
- package/dist/agent/agentDecisionFormatter.d.ts.map +1 -0
- package/dist/agent/agentDecisionFormatter.js +96 -0
- package/dist/agent/agentDecisionFormatter.js.map +1 -0
- package/dist/agent/agentEnrich.d.ts +28 -0
- package/dist/agent/agentEnrich.d.ts.map +1 -0
- package/dist/agent/agentEnrich.js +99 -0
- package/dist/agent/agentEnrich.js.map +1 -0
- package/dist/agent/agentIntentClassifier.d.ts +44 -0
- package/dist/agent/agentIntentClassifier.d.ts.map +1 -0
- package/dist/agent/agentIntentClassifier.js +77 -0
- package/dist/agent/agentIntentClassifier.js.map +1 -0
- package/dist/agent/agentPolicyResolver.d.ts +44 -0
- package/dist/agent/agentPolicyResolver.d.ts.map +1 -0
- package/dist/agent/agentPolicyResolver.js +94 -0
- package/dist/agent/agentPolicyResolver.js.map +1 -0
- package/dist/agent/agentRuntime.d.ts +12 -0
- package/dist/agent/agentRuntime.d.ts.map +1 -0
- package/dist/agent/agentRuntime.js +31 -0
- package/dist/agent/agentRuntime.js.map +1 -0
- package/dist/agent/agentToolRouter.d.ts +24 -0
- package/dist/agent/agentToolRouter.d.ts.map +1 -0
- package/dist/agent/agentToolRouter.js +89 -0
- package/dist/agent/agentToolRouter.js.map +1 -0
- package/dist/agent/guardianOperator.d.ts +35 -0
- package/dist/agent/guardianOperator.d.ts.map +1 -0
- package/dist/agent/guardianOperator.js +65 -0
- package/dist/agent/guardianOperator.js.map +1 -0
- package/dist/agent/index.d.ts +8 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +14 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/api/activityRoutes.d.ts +70 -0
- package/dist/api/activityRoutes.d.ts.map +1 -0
- package/dist/api/activityRoutes.js +100 -0
- package/dist/api/activityRoutes.js.map +1 -0
- package/dist/api/agentRoutes.d.ts +16 -0
- package/dist/api/agentRoutes.d.ts.map +1 -0
- package/dist/api/agentRoutes.js +37 -0
- package/dist/api/agentRoutes.js.map +1 -0
- package/dist/api/broadcastRoutes.d.ts +34 -0
- package/dist/api/broadcastRoutes.d.ts.map +1 -0
- package/dist/api/broadcastRoutes.js +147 -0
- package/dist/api/broadcastRoutes.js.map +1 -0
- package/dist/api/consolePage.d.ts +2 -0
- package/dist/api/consolePage.d.ts.map +1 -0
- package/dist/api/consolePage.js +206 -0
- package/dist/api/consolePage.js.map +1 -0
- package/dist/api/httpHardening.d.ts +75 -0
- package/dist/api/httpHardening.d.ts.map +1 -0
- package/dist/api/httpHardening.js +122 -0
- package/dist/api/httpHardening.js.map +1 -0
- package/dist/api/indexerRoutes.d.ts +46 -0
- package/dist/api/indexerRoutes.d.ts.map +1 -0
- package/dist/api/indexerRoutes.js +75 -0
- package/dist/api/indexerRoutes.js.map +1 -0
- package/dist/api/paidRoutes.d.ts +8 -0
- package/dist/api/paidRoutes.d.ts.map +1 -0
- package/dist/api/paidRoutes.js +175 -0
- package/dist/api/paidRoutes.js.map +1 -0
- package/dist/api/prepareRoutes.d.ts +58 -0
- package/dist/api/prepareRoutes.d.ts.map +1 -0
- package/dist/api/prepareRoutes.js +90 -0
- package/dist/api/prepareRoutes.js.map +1 -0
- package/dist/api/response.d.ts +39 -0
- package/dist/api/response.d.ts.map +1 -0
- package/dist/api/response.js +53 -0
- package/dist/api/response.js.map +1 -0
- package/dist/api/routes.d.ts +175 -0
- package/dist/api/routes.d.ts.map +1 -0
- package/dist/api/routes.js +276 -0
- package/dist/api/routes.js.map +1 -0
- package/dist/api/schemas.d.ts +147 -0
- package/dist/api/schemas.d.ts.map +1 -0
- package/dist/api/schemas.js +81 -0
- package/dist/api/schemas.js.map +1 -0
- package/dist/api/server.d.ts +11 -0
- package/dist/api/server.d.ts.map +1 -0
- package/dist/api/server.js +505 -0
- package/dist/api/server.js.map +1 -0
- package/dist/api/toolRoutes.d.ts +14 -0
- package/dist/api/toolRoutes.d.ts.map +1 -0
- package/dist/api/toolRoutes.js +138 -0
- package/dist/api/toolRoutes.js.map +1 -0
- package/dist/api/walletPrepareRoutes.d.ts +74 -0
- package/dist/api/walletPrepareRoutes.d.ts.map +1 -0
- package/dist/api/walletPrepareRoutes.js +127 -0
- package/dist/api/walletPrepareRoutes.js.map +1 -0
- package/dist/api/x402Gate.d.ts +51 -0
- package/dist/api/x402Gate.d.ts.map +1 -0
- package/dist/api/x402Gate.js +184 -0
- package/dist/api/x402Gate.js.map +1 -0
- package/dist/cli.d.ts +5 -5
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +154 -124
- package/dist/cli.js.map +1 -1
- package/dist/data/ecosystemRegistry.data.d.ts +3 -0
- package/dist/data/ecosystemRegistry.data.d.ts.map +1 -0
- package/dist/data/ecosystemRegistry.data.js +582 -0
- package/dist/data/ecosystemRegistry.data.js.map +1 -0
- package/dist/demo.d.ts +1 -1
- package/dist/demo.d.ts.map +1 -1
- package/dist/demo.js +206 -171
- package/dist/demo.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +249 -164
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +127 -65
- package/dist/init.js.map +1 -1
- package/dist/lib/analysis/approval.d.ts +29 -0
- package/dist/lib/analysis/approval.d.ts.map +1 -0
- package/dist/lib/analysis/approval.js +162 -0
- package/dist/lib/analysis/approval.js.map +1 -0
- package/dist/lib/analysis/calldata.d.ts +60 -0
- package/dist/lib/analysis/calldata.d.ts.map +1 -0
- package/dist/lib/analysis/calldata.js +349 -0
- package/dist/lib/analysis/calldata.js.map +1 -0
- package/dist/lib/analysis/contractIntel.d.ts +65 -0
- package/dist/lib/analysis/contractIntel.d.ts.map +1 -0
- package/dist/lib/analysis/contractIntel.js +320 -0
- package/dist/lib/analysis/contractIntel.js.map +1 -0
- package/dist/lib/analysis/evm.d.ts +42 -0
- package/dist/lib/analysis/evm.d.ts.map +1 -0
- package/dist/lib/analysis/evm.js +185 -0
- package/dist/lib/analysis/evm.js.map +1 -0
- package/dist/lib/analysis/gas.d.ts +4 -0
- package/dist/lib/analysis/gas.d.ts.map +1 -0
- package/dist/lib/analysis/gas.js +13 -0
- package/dist/lib/analysis/gas.js.map +1 -0
- package/dist/lib/analysis/index.d.ts +11 -0
- package/dist/lib/analysis/index.d.ts.map +1 -0
- package/dist/lib/analysis/index.js +16 -0
- package/dist/lib/analysis/index.js.map +1 -0
- package/dist/lib/analysis/pharosTokens.d.ts +31 -0
- package/dist/lib/analysis/pharosTokens.d.ts.map +1 -0
- package/dist/lib/analysis/pharosTokens.js +78 -0
- package/dist/lib/analysis/pharosTokens.js.map +1 -0
- package/dist/lib/analysis/safeTx.d.ts +27 -0
- package/dist/lib/analysis/safeTx.d.ts.map +1 -0
- package/dist/lib/analysis/safeTx.js +118 -0
- package/dist/lib/analysis/safeTx.js.map +1 -0
- package/dist/lib/analysis/token.d.ts +21 -0
- package/dist/lib/analysis/token.d.ts.map +1 -0
- package/dist/lib/analysis/token.js +151 -0
- package/dist/lib/analysis/token.js.map +1 -0
- package/dist/lib/analysis/types.d.ts +49 -0
- package/dist/lib/analysis/types.d.ts.map +1 -0
- package/dist/lib/analysis/types.js +10 -0
- package/dist/lib/analysis/types.js.map +1 -0
- package/dist/lib/analysis/x402.d.ts +24 -0
- package/dist/lib/analysis/x402.d.ts.map +1 -0
- package/dist/lib/analysis/x402.js +60 -0
- package/dist/lib/analysis/x402.js.map +1 -0
- package/dist/lib/auditLog.d.ts +1 -0
- package/dist/lib/auditLog.d.ts.map +1 -1
- package/dist/lib/auditLog.js +0 -0
- package/dist/lib/auditLog.js.map +1 -1
- package/dist/lib/config.d.ts +77 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +120 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/constants.d.ts +452 -291
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +509 -292
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/dodoApi.d.ts +101 -78
- package/dist/lib/dodoApi.d.ts.map +1 -1
- package/dist/lib/dodoApi.js +259 -196
- package/dist/lib/dodoApi.js.map +1 -1
- package/dist/lib/ecosystemRegistry.d.ts +116 -0
- package/dist/lib/ecosystemRegistry.d.ts.map +1 -0
- package/dist/lib/ecosystemRegistry.js +178 -0
- package/dist/lib/ecosystemRegistry.js.map +1 -0
- package/dist/lib/envLoader.d.ts +2 -0
- package/dist/lib/envLoader.d.ts.map +1 -0
- package/dist/lib/envLoader.js +65 -0
- package/dist/lib/envLoader.js.map +1 -0
- package/dist/lib/goldsky.d.ts +58 -0
- package/dist/lib/goldsky.d.ts.map +1 -0
- package/dist/lib/goldsky.js +275 -0
- package/dist/lib/goldsky.js.map +1 -0
- package/dist/lib/guardian/decision.d.ts +23 -0
- package/dist/lib/guardian/decision.d.ts.map +1 -0
- package/dist/lib/guardian/decision.js +40 -0
- package/dist/lib/guardian/decision.js.map +1 -0
- package/dist/lib/http.d.ts +13 -14
- package/dist/lib/http.d.ts.map +1 -1
- package/dist/lib/http.js +383 -118
- package/dist/lib/http.js.map +1 -1
- package/dist/lib/managedExecution.d.ts +19 -0
- package/dist/lib/managedExecution.d.ts.map +1 -0
- package/dist/lib/managedExecution.js +64 -0
- package/dist/lib/managedExecution.js.map +1 -0
- package/dist/lib/merkleBatcher.d.ts +23 -0
- package/dist/lib/merkleBatcher.d.ts.map +1 -0
- package/dist/lib/merkleBatcher.js +62 -0
- package/dist/lib/merkleBatcher.js.map +1 -0
- package/dist/lib/networks.d.ts +48 -0
- package/dist/lib/networks.d.ts.map +1 -0
- package/dist/lib/networks.js +103 -0
- package/dist/lib/networks.js.map +1 -0
- package/dist/lib/observability/accessContext.d.ts +29 -0
- package/dist/lib/observability/accessContext.d.ts.map +1 -0
- package/dist/lib/observability/accessContext.js +50 -0
- package/dist/lib/observability/accessContext.js.map +1 -0
- package/dist/lib/observability/activityStore.d.ts +70 -0
- package/dist/lib/observability/activityStore.d.ts.map +1 -0
- package/dist/lib/observability/activityStore.js +149 -0
- package/dist/lib/observability/activityStore.js.map +1 -0
- package/dist/lib/observability/apiKey.d.ts +55 -0
- package/dist/lib/observability/apiKey.d.ts.map +1 -0
- package/dist/lib/observability/apiKey.js +141 -0
- package/dist/lib/observability/apiKey.js.map +1 -0
- package/dist/lib/observability/logger.d.ts +30 -0
- package/dist/lib/observability/logger.d.ts.map +1 -0
- package/dist/lib/observability/logger.js +30 -0
- package/dist/lib/observability/logger.js.map +1 -0
- package/dist/lib/observability/quota.d.ts +33 -0
- package/dist/lib/observability/quota.d.ts.map +1 -0
- package/dist/lib/observability/quota.js +49 -0
- package/dist/lib/observability/quota.js.map +1 -0
- package/dist/lib/observability/requestId.d.ts +8 -0
- package/dist/lib/observability/requestId.d.ts.map +1 -0
- package/dist/lib/observability/requestId.js +24 -0
- package/dist/lib/observability/requestId.js.map +1 -0
- package/dist/lib/observability/sanitize.d.ts +77 -0
- package/dist/lib/observability/sanitize.d.ts.map +1 -0
- package/dist/lib/observability/sanitize.js +228 -0
- package/dist/lib/observability/sanitize.js.map +1 -0
- package/dist/lib/observability/scopes.d.ts +20 -0
- package/dist/lib/observability/scopes.d.ts.map +1 -0
- package/dist/lib/observability/scopes.js +77 -0
- package/dist/lib/observability/scopes.js.map +1 -0
- package/dist/lib/okxDexApi.d.ts +106 -0
- package/dist/lib/okxDexApi.d.ts.map +1 -0
- package/dist/lib/okxDexApi.js +221 -0
- package/dist/lib/okxDexApi.js.map +1 -0
- package/dist/lib/persistentJsonStore.d.ts +5 -0
- package/dist/lib/persistentJsonStore.d.ts.map +1 -0
- package/dist/lib/persistentJsonStore.js +39 -0
- package/dist/lib/persistentJsonStore.js.map +1 -0
- package/dist/lib/pharos/attestationPublisher.d.ts +50 -0
- package/dist/lib/pharos/attestationPublisher.d.ts.map +1 -0
- package/dist/lib/pharos/attestationPublisher.js +262 -0
- package/dist/lib/pharos/attestationPublisher.js.map +1 -0
- package/dist/lib/pharos/ecosystem.d.ts +52 -0
- package/dist/lib/pharos/ecosystem.d.ts.map +1 -0
- package/dist/lib/pharos/ecosystem.js +431 -0
- package/dist/lib/pharos/ecosystem.js.map +1 -0
- package/dist/lib/pharos/ecosystemEvidence.d.ts +53 -0
- package/dist/lib/pharos/ecosystemEvidence.d.ts.map +1 -0
- package/dist/lib/pharos/ecosystemEvidence.js +133 -0
- package/dist/lib/pharos/ecosystemEvidence.js.map +1 -0
- package/dist/lib/pharos/rpc.d.ts +44 -0
- package/dist/lib/pharos/rpc.d.ts.map +1 -0
- package/dist/lib/pharos/rpc.js +90 -0
- package/dist/lib/pharos/rpc.js.map +1 -0
- package/dist/lib/pharos/rpcEvidence.d.ts +49 -0
- package/dist/lib/pharos/rpcEvidence.d.ts.map +1 -0
- package/dist/lib/pharos/rpcEvidence.js +46 -0
- package/dist/lib/pharos/rpcEvidence.js.map +1 -0
- package/dist/lib/pharos/rpcMethods.d.ts +46 -0
- package/dist/lib/pharos/rpcMethods.d.ts.map +1 -0
- package/dist/lib/pharos/rpcMethods.js +176 -0
- package/dist/lib/pharos/rpcMethods.js.map +1 -0
- package/dist/lib/pharos/spvVerifier.d.ts +47 -0
- package/dist/lib/pharos/spvVerifier.d.ts.map +1 -0
- package/dist/lib/pharos/spvVerifier.js +105 -0
- package/dist/lib/pharos/spvVerifier.js.map +1 -0
- package/dist/lib/pharos/userSignedBroadcaster.d.ts +10 -0
- package/dist/lib/pharos/userSignedBroadcaster.d.ts.map +1 -0
- package/dist/lib/pharos/userSignedBroadcaster.js +50 -0
- package/dist/lib/pharos/userSignedBroadcaster.js.map +1 -0
- package/dist/lib/pharosClient.d.ts +53 -58
- package/dist/lib/pharosClient.d.ts.map +1 -1
- package/dist/lib/pharosClient.js +56 -63
- package/dist/lib/pharosClient.js.map +1 -1
- package/dist/lib/policy/actionPolicyEngine.d.ts +89 -53
- package/dist/lib/policy/actionPolicyEngine.d.ts.map +1 -1
- package/dist/lib/policy/actionPolicyEngine.js +373 -212
- package/dist/lib/policy/actionPolicyEngine.js.map +1 -1
- package/dist/lib/policy/agentPolicy.d.ts +29 -0
- package/dist/lib/policy/agentPolicy.d.ts.map +1 -0
- package/dist/lib/policy/agentPolicy.js +154 -0
- package/dist/lib/policy/agentPolicy.js.map +1 -0
- package/dist/lib/policy/policyPresets.d.ts +30 -0
- package/dist/lib/policy/policyPresets.d.ts.map +1 -0
- package/dist/lib/policy/policyPresets.js +124 -0
- package/dist/lib/policy/policyPresets.js.map +1 -0
- package/dist/lib/policy/writeExecutionGate.d.ts +23 -0
- package/dist/lib/policy/writeExecutionGate.d.ts.map +1 -0
- package/dist/lib/policy/writeExecutionGate.js +65 -0
- package/dist/lib/policy/writeExecutionGate.js.map +1 -0
- package/dist/lib/preparedTxStore.d.ts +21 -0
- package/dist/lib/preparedTxStore.d.ts.map +1 -0
- package/dist/lib/preparedTxStore.js +90 -0
- package/dist/lib/preparedTxStore.js.map +1 -0
- package/dist/lib/price/chainlinkPushProvider.d.ts +34 -0
- package/dist/lib/price/chainlinkPushProvider.d.ts.map +1 -0
- package/dist/lib/price/chainlinkPushProvider.js +36 -0
- package/dist/lib/price/chainlinkPushProvider.js.map +1 -0
- package/dist/lib/price/feedRegistry.d.ts +26 -0
- package/dist/lib/price/feedRegistry.d.ts.map +1 -0
- package/dist/lib/price/feedRegistry.js +67 -0
- package/dist/lib/price/feedRegistry.js.map +1 -0
- package/dist/lib/price/priceResolver.d.ts +35 -0
- package/dist/lib/price/priceResolver.d.ts.map +1 -0
- package/dist/lib/price/priceResolver.js +246 -0
- package/dist/lib/price/priceResolver.js.map +1 -0
- package/dist/lib/price/supraProvider.d.ts +9 -0
- package/dist/lib/price/supraProvider.d.ts.map +1 -0
- package/dist/lib/price/supraProvider.js +17 -0
- package/dist/lib/price/supraProvider.js.map +1 -0
- package/dist/lib/price/types.d.ts +67 -0
- package/dist/lib/price/types.d.ts.map +1 -0
- package/dist/lib/price/types.js +7 -0
- package/dist/lib/price/types.js.map +1 -0
- package/dist/lib/productionGuards.d.ts +16 -0
- package/dist/lib/productionGuards.d.ts.map +1 -0
- package/dist/lib/productionGuards.js +93 -0
- package/dist/lib/productionGuards.js.map +1 -0
- package/dist/lib/recipientSafety.d.ts +5 -0
- package/dist/lib/recipientSafety.d.ts.map +1 -0
- package/dist/lib/recipientSafety.js +28 -0
- package/dist/lib/recipientSafety.js.map +1 -0
- package/dist/lib/riskEngine.d.ts +45 -26
- package/dist/lib/riskEngine.d.ts.map +1 -1
- package/dist/lib/riskEngine.js +346 -283
- package/dist/lib/riskEngine.js.map +1 -1
- package/dist/lib/riskInclusion.d.ts +72 -0
- package/dist/lib/riskInclusion.d.ts.map +1 -0
- package/dist/lib/riskInclusion.js +252 -0
- package/dist/lib/riskInclusion.js.map +1 -0
- package/dist/lib/safeHandsRegistry.d.ts +32 -0
- package/dist/lib/safeHandsRegistry.d.ts.map +1 -0
- package/dist/lib/safeHandsRegistry.js +151 -0
- package/dist/lib/safeHandsRegistry.js.map +1 -0
- package/dist/lib/signer/index.d.ts +24 -24
- package/dist/lib/signer/index.d.ts.map +1 -1
- package/dist/lib/signer/index.js +110 -88
- package/dist/lib/signer/index.js.map +1 -1
- package/dist/lib/spendAccumulator.d.ts +24 -1
- package/dist/lib/spendAccumulator.d.ts.map +1 -1
- package/dist/lib/spendAccumulator.js +76 -6
- package/dist/lib/spendAccumulator.js.map +1 -1
- package/dist/lib/toolResponse.d.ts +30 -25
- package/dist/lib/toolResponse.d.ts.map +1 -1
- package/dist/lib/toolResponse.js +57 -53
- package/dist/lib/toolResponse.js.map +1 -1
- package/dist/lib/validation.d.ts +7 -0
- package/dist/lib/validation.d.ts.map +1 -0
- package/dist/lib/validation.js +62 -0
- package/dist/lib/validation.js.map +1 -0
- package/dist/lib/wallet/index.d.ts +33 -37
- package/dist/lib/wallet/index.d.ts.map +1 -1
- package/dist/lib/wallet/index.js +141 -128
- package/dist/lib/wallet/index.js.map +1 -1
- package/dist/lib/x402ReplayStore.d.ts +6 -0
- package/dist/lib/x402ReplayStore.d.ts.map +1 -0
- package/dist/lib/x402ReplayStore.js +79 -0
- package/dist/lib/x402ReplayStore.js.map +1 -0
- package/dist/safehands.zip +0 -0
- package/dist/sdk.d.ts +14 -0
- package/dist/sdk.d.ts.map +1 -0
- package/dist/sdk.js +25 -0
- package/dist/sdk.js.map +1 -0
- package/dist/tools/approveToken.d.ts +66 -45
- package/dist/tools/approveToken.d.ts.map +1 -1
- package/dist/tools/approveToken.js +152 -85
- package/dist/tools/approveToken.js.map +1 -1
- package/dist/tools/assessRisk.d.ts +66 -79
- package/dist/tools/assessRisk.d.ts.map +1 -1
- package/dist/tools/assessRisk.js +63 -104
- package/dist/tools/assessRisk.js.map +1 -1
- package/dist/tools/checkAllowance.d.ts +49 -43
- package/dist/tools/checkAllowance.d.ts.map +1 -1
- package/dist/tools/checkAllowance.js +78 -56
- package/dist/tools/checkAllowance.js.map +1 -1
- package/dist/tools/checkTokenSecurity.d.ts +103 -46
- package/dist/tools/checkTokenSecurity.d.ts.map +1 -1
- package/dist/tools/checkTokenSecurity.js +240 -95
- package/dist/tools/checkTokenSecurity.js.map +1 -1
- package/dist/tools/createAgentWallet.d.ts +30 -26
- package/dist/tools/createAgentWallet.d.ts.map +1 -1
- package/dist/tools/createAgentWallet.js +87 -58
- package/dist/tools/createAgentWallet.js.map +1 -1
- package/dist/tools/estimateGas.d.ts +84 -79
- package/dist/tools/estimateGas.d.ts.map +1 -1
- package/dist/tools/estimateGas.js +130 -124
- package/dist/tools/estimateGas.js.map +1 -1
- package/dist/tools/executeSwap.d.ts +109 -61
- package/dist/tools/executeSwap.d.ts.map +1 -1
- package/dist/tools/executeSwap.js +289 -141
- package/dist/tools/executeSwap.js.map +1 -1
- package/dist/tools/explainRisk.d.ts +29 -29
- package/dist/tools/explainRisk.d.ts.map +1 -1
- package/dist/tools/explainRisk.js +33 -32
- package/dist/tools/explainRisk.js.map +1 -1
- package/dist/tools/getAgentPolicy.d.ts +15 -0
- package/dist/tools/getAgentPolicy.d.ts.map +1 -0
- package/dist/tools/getAgentPolicy.js +16 -0
- package/dist/tools/getAgentPolicy.js.map +1 -0
- package/dist/tools/getAgentReputation.d.ts +31 -0
- package/dist/tools/getAgentReputation.d.ts.map +1 -0
- package/dist/tools/getAgentReputation.js +44 -0
- package/dist/tools/getAgentReputation.js.map +1 -0
- package/dist/tools/getAgentWallet.d.ts +21 -21
- package/dist/tools/getAgentWallet.d.ts.map +1 -1
- package/dist/tools/getAgentWallet.js +37 -27
- package/dist/tools/getAgentWallet.js.map +1 -1
- package/dist/tools/getAgentWalletBalance.d.ts +11 -11
- package/dist/tools/getAgentWalletBalance.d.ts.map +1 -1
- package/dist/tools/getAgentWalletBalance.js +102 -70
- package/dist/tools/getAgentWalletBalance.js.map +1 -1
- package/dist/tools/getExecutionHistory.d.ts +49 -49
- package/dist/tools/getExecutionHistory.d.ts.map +1 -1
- package/dist/tools/getExecutionHistory.js +148 -154
- package/dist/tools/getExecutionHistory.js.map +1 -1
- package/dist/tools/getGasPrice.d.ts +43 -43
- package/dist/tools/getGasPrice.d.ts.map +0 -0
- package/dist/tools/getGasPrice.js +59 -59
- package/dist/tools/getGasPrice.js.map +1 -1
- package/dist/tools/getPoolInfo.d.ts +75 -75
- package/dist/tools/getPoolInfo.d.ts.map +1 -1
- package/dist/tools/getPoolInfo.js +142 -137
- package/dist/tools/getPoolInfo.js.map +1 -1
- package/dist/tools/getSpvProof.d.ts +24 -0
- package/dist/tools/getSpvProof.d.ts.map +1 -0
- package/dist/tools/getSpvProof.js +64 -0
- package/dist/tools/getSpvProof.js.map +1 -0
- package/dist/tools/getTokenPrice.d.ts +56 -113
- package/dist/tools/getTokenPrice.d.ts.map +1 -1
- package/dist/tools/getTokenPrice.js +110 -117
- package/dist/tools/getTokenPrice.js.map +1 -1
- package/dist/tools/getTransactionStatus.d.ts +43 -43
- package/dist/tools/getTransactionStatus.d.ts.map +0 -0
- package/dist/tools/getTransactionStatus.js +59 -59
- package/dist/tools/getTransactionStatus.js.map +0 -0
- package/dist/tools/getWalletBalance.d.ts +103 -68
- package/dist/tools/getWalletBalance.d.ts.map +1 -1
- package/dist/tools/getWalletBalance.js +127 -87
- package/dist/tools/getWalletBalance.js.map +1 -1
- package/dist/tools/publishRiskScore.d.ts +85 -63
- package/dist/tools/publishRiskScore.d.ts.map +1 -1
- package/dist/tools/publishRiskScore.js +136 -88
- package/dist/tools/publishRiskScore.js.map +1 -1
- package/dist/tools/queryGoldsky.d.ts +20 -0
- package/dist/tools/queryGoldsky.d.ts.map +1 -0
- package/dist/tools/queryGoldsky.js +29 -0
- package/dist/tools/queryGoldsky.js.map +1 -0
- package/dist/tools/queryRiskRegistry.d.ts +38 -38
- package/dist/tools/queryRiskRegistry.d.ts.map +1 -1
- package/dist/tools/queryRiskRegistry.js +59 -55
- package/dist/tools/queryRiskRegistry.js.map +1 -1
- package/dist/tools/safehandsPreflightCheck.d.ts +92 -77
- package/dist/tools/safehandsPreflightCheck.d.ts.map +1 -1
- package/dist/tools/safehandsPreflightCheck.js +174 -47
- package/dist/tools/safehandsPreflightCheck.js.map +1 -1
- package/dist/tools/safehandsRiskReport.d.ts +96 -81
- package/dist/tools/safehandsRiskReport.d.ts.map +1 -1
- package/dist/tools/safehandsRiskReport.js +48 -28
- package/dist/tools/safehandsRiskReport.js.map +1 -1
- package/dist/tools/safehandsSafeExecute.d.ts +20 -20
- package/dist/tools/safehandsSafeExecute.d.ts.map +1 -1
- package/dist/tools/safehandsSafeExecute.js +164 -81
- package/dist/tools/safehandsSafeExecute.js.map +1 -1
- package/dist/tools/safehandsWalletHealth.d.ts +28 -14
- package/dist/tools/safehandsWalletHealth.d.ts.map +1 -1
- package/dist/tools/safehandsWalletHealth.js +145 -103
- package/dist/tools/safehandsWalletHealth.js.map +1 -1
- package/dist/tools/safehandsX402Preflight.d.ts +26 -26
- package/dist/tools/safehandsX402Preflight.d.ts.map +1 -1
- package/dist/tools/safehandsX402Preflight.js +86 -65
- package/dist/tools/safehandsX402Preflight.js.map +1 -1
- package/dist/tools/sendPayment.d.ts +63 -57
- package/dist/tools/sendPayment.d.ts.map +1 -1
- package/dist/tools/sendPayment.js +144 -117
- package/dist/tools/sendPayment.js.map +1 -1
- package/dist/tools/setAgentPolicy.d.ts +75 -0
- package/dist/tools/setAgentPolicy.d.ts.map +1 -0
- package/dist/tools/setAgentPolicy.js +80 -0
- package/dist/tools/setAgentPolicy.js.map +1 -0
- package/dist/tools/simulateTransaction.d.ts +64 -60
- package/dist/tools/simulateTransaction.d.ts.map +1 -1
- package/dist/tools/simulateTransaction.js +116 -83
- package/dist/tools/simulateTransaction.js.map +1 -1
- package/dist/tools/tokenRegistryStatus.d.ts +46 -26
- package/dist/tools/tokenRegistryStatus.d.ts.map +1 -1
- package/dist/tools/tokenRegistryStatus.js +126 -96
- package/dist/tools/tokenRegistryStatus.js.map +1 -1
- package/dist/tools/verifyRiskInclusion.d.ts +59 -0
- package/dist/tools/verifyRiskInclusion.d.ts.map +1 -0
- package/dist/tools/verifyRiskInclusion.js +40 -0
- package/dist/tools/verifyRiskInclusion.js.map +1 -0
- package/dist/tools/x402PayAndFetch.d.ts +87 -81
- package/dist/tools/x402PayAndFetch.d.ts.map +1 -1
- package/dist/tools/x402PayAndFetch.js +295 -152
- package/dist/tools/x402PayAndFetch.js.map +1 -1
- package/dist/worker.d.ts +3 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +39 -0
- package/dist/worker.js.map +1 -0
- package/dist/x402Server.d.ts +1 -1
- package/dist/x402Server.d.ts.map +1 -1
- package/dist/x402Server.js +409 -252
- package/dist/x402Server.js.map +1 -1
- package/docs/REVIEWER_QUICKSTART.md +113 -0
- package/docs/SAFEHANDS_REVIEWER_DEMO_SCRIPT.md +228 -0
- package/package.json +130 -83
- package/contracts/RiskRegistry.json +0 -223
- package/contracts/RiskRegistry.sol +0 -58
- package/dist/lib/testDodoLive.d.ts +0 -2
- package/dist/lib/testDodoLive.d.ts.map +0 -1
- package/dist/lib/testDodoLive.js +0 -105
- package/dist/lib/testDodoLive.js.map +0 -1
- package/dist/lib/testLiveSafehands.d.ts +0 -2
- package/dist/lib/testLiveSafehands.d.ts.map +0 -1
- package/dist/lib/testLiveSafehands.js +0 -93
- package/dist/lib/testLiveSafehands.js.map +0 -1
- package/dist/lib/testRpc.d.ts +0 -2
- package/dist/lib/testRpc.d.ts.map +0 -1
- package/dist/lib/testRpc.js +0 -30
- package/dist/lib/testRpc.js.map +0 -1
- package/dist/lib/testRpcLive.d.ts +0 -2
- package/dist/lib/testRpcLive.d.ts.map +0 -1
- package/dist/lib/testRpcLive.js +0 -89
- package/dist/lib/testRpcLive.js.map +0 -1
- package/dist/lib/testTools.d.ts +0 -2
- package/dist/lib/testTools.d.ts.map +0 -1
- package/dist/lib/testTools.js +0 -398
- package/dist/lib/testTools.js.map +0 -1
- package/dist/lib/testX402Live.d.ts +0 -2
- package/dist/lib/testX402Live.d.ts.map +0 -1
- package/dist/lib/testX402Live.js +0 -160
- package/dist/lib/testX402Live.js.map +0 -1
- package/dist/scripts/checkDeploy.d.ts +0 -2
- package/dist/scripts/checkDeploy.d.ts.map +0 -1
- package/dist/scripts/checkDeploy.js +0 -25
- package/dist/scripts/checkDeploy.js.map +0 -1
- package/dist/scripts/deployRegistry.d.ts +0 -2
- package/dist/scripts/deployRegistry.d.ts.map +0 -1
- package/dist/scripts/deployRegistry.js +0 -101
- package/dist/scripts/deployRegistry.js.map +0 -1
- package/dist/scripts/testRegistry.d.ts +0 -2
- package/dist/scripts/testRegistry.d.ts.map +0 -1
- package/dist/scripts/testRegistry.js +0 -44
- package/dist/scripts/testRegistry.js.map +0 -1
- package/examples/dashboard/index.html +0 -337
- package/examples/pharos-skill-engine/SKILL.safehands.md +0 -85
- package/examples/pharos-skill-engine/assets/safehands/example-actions.json +0 -49
- package/examples/pharos-skill-engine/assets/safehands/policy-defaults.json +0 -11
- package/examples/pharos-skill-engine/references/safehands.md +0 -345
- package/examples/scenario-hack.ts +0 -38
- package/skill/SKILL.md +0 -133
- package/skill/assets/safehands/example-actions.json +0 -49
- package/skill/assets/safehands/policy-defaults.json +0 -11
- package/skill/references/safehands.md +0 -345
package/dist/lib/dodoApi.js
CHANGED
|
@@ -1,197 +1,260 @@
|
|
|
1
|
-
// ─── DODO Route API Client ─────────────────────────────────────────────
|
|
2
|
-
// Fetches swap routes from DODO's aggregation API
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
//
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const
|
|
75
|
-
const
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
const
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
if (
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
if (
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
1
|
+
// ─── DODO Route API Client ─────────────────────────────────────────────
|
|
2
|
+
// Fetches swap routes from DODO's aggregation API (FaroSwap).
|
|
3
|
+
//
|
|
4
|
+
// CHAIN SUPPORT IS EVIDENCE-GATED. This integration is confirmed working against
|
|
5
|
+
// Pharos Atlantic Testnet (688689) and Pharos Pacific Mainnet (1672) — both are
|
|
6
|
+
// in the default supported set. Route fetches on any OTHER (unverified) chain
|
|
7
|
+
// fail closed with a structured SWAP_LIQUIDITY_NOT_CONFIGURED error instead of
|
|
8
|
+
// quietly querying an endpoint that may answer for the wrong network. The set is
|
|
9
|
+
// overridable via DODO_API_SUPPORTED_CHAIN_IDS (comma-separated chain IDs) — set
|
|
10
|
+
// it only with evidence the DODO API actually serves that chain.
|
|
11
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
12
|
+
import { isAddress } from "viem";
|
|
13
|
+
import { DODO_API_BASE, DODO_API_KEY, DODO_DEFAULT_SLIPPAGE, DODO_ROUTE_ENDPOINT, CHAIN_ID, activeTokenMap, activeTokenDecimals, PROS_ADDRESS, USDC_ADDRESS, CIRCLE_USDC_ADDRESS, IS_MAINNET, } from "./constants.js";
|
|
14
|
+
import { fetchWithTimeoutAndRetry } from "./http.js";
|
|
15
|
+
// ─── Helpers ───────────────────────────────────────────────────────────
|
|
16
|
+
/**
|
|
17
|
+
* Resolves a token symbol (e.g. "PROS") or address to its on-chain address.
|
|
18
|
+
*/
|
|
19
|
+
export function resolveTokenAddress(token) {
|
|
20
|
+
const upper = token.toUpperCase();
|
|
21
|
+
const map = activeTokenMap();
|
|
22
|
+
if (map[upper])
|
|
23
|
+
return map[upper];
|
|
24
|
+
if (isAddress(token))
|
|
25
|
+
return token;
|
|
26
|
+
throw new Error(`INVALID_TOKEN_ADDRESS: Unknown token or invalid address: ${token}`);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Resolves the decimal count for a token symbol or address.
|
|
30
|
+
*/
|
|
31
|
+
export function resolveTokenDecimals(token) {
|
|
32
|
+
const upper = token.toUpperCase();
|
|
33
|
+
const decimals = activeTokenDecimals();
|
|
34
|
+
if (decimals[upper] !== undefined)
|
|
35
|
+
return decimals[upper];
|
|
36
|
+
const lower = token.toLowerCase();
|
|
37
|
+
if (decimals[lower] !== undefined)
|
|
38
|
+
return decimals[lower];
|
|
39
|
+
return 18; // unknown custom token fallback
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Converts a human-readable amount to wei string.
|
|
43
|
+
*/
|
|
44
|
+
export function toWei(amount, decimals) {
|
|
45
|
+
if (!/^\d+(\.\d+)?$/.test(amount)) {
|
|
46
|
+
throw new Error(`INVALID_AMOUNT: ${amount}`);
|
|
47
|
+
}
|
|
48
|
+
const [whole, frac = ""] = amount.split(".");
|
|
49
|
+
const paddedFrac = frac.padEnd(decimals, "0").slice(0, decimals);
|
|
50
|
+
return BigInt(whole + paddedFrac).toString();
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Converts a wei string to human-readable amount.
|
|
54
|
+
* Also handles the case where the API returns a decimal string directly.
|
|
55
|
+
*/
|
|
56
|
+
export function fromWei(weiInput, decimals) {
|
|
57
|
+
const weiStr = String(weiInput);
|
|
58
|
+
if (weiStr.includes("."))
|
|
59
|
+
return weiStr;
|
|
60
|
+
const wei = BigInt(weiStr);
|
|
61
|
+
const divisor = BigInt(10) ** BigInt(decimals);
|
|
62
|
+
const whole = wei / divisor;
|
|
63
|
+
const remainder = wei % divisor;
|
|
64
|
+
if (remainder === 0n)
|
|
65
|
+
return whole.toString();
|
|
66
|
+
const fracStr = remainder.toString().padStart(decimals, "0").replace(/0+$/, "");
|
|
67
|
+
return `${whole}.${fracStr}`;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Resolves the FaroSwap AUTO slippage tolerance based on token pair types.
|
|
71
|
+
* @see https://docs.faroswap.xyz
|
|
72
|
+
*/
|
|
73
|
+
export function resolveAutoSlippage(fromToken, toToken) {
|
|
74
|
+
const from = fromToken.toUpperCase();
|
|
75
|
+
const to = toToken.toUpperCase();
|
|
76
|
+
const stablecoins = new Set(["USDT", "USDC", "DAI", "BUSD", "CIRCLE_USDC"]);
|
|
77
|
+
if (stablecoins.has(from) && stablecoins.has(to)) {
|
|
78
|
+
return 0.1; // 0.1% for stablecoin pairs
|
|
79
|
+
}
|
|
80
|
+
const majors = new Set(["BTC", "WBTC", "ETH", "WETH", "USDT", "USDC", "CIRCLE_USDC"]);
|
|
81
|
+
if (majors.has(from) && majors.has(to)) {
|
|
82
|
+
return 0.5; // 0.5% for major pairs
|
|
83
|
+
}
|
|
84
|
+
return DODO_DEFAULT_SLIPPAGE; // 3% default for all others
|
|
85
|
+
}
|
|
86
|
+
// ─── DODO Route Fetch ──────────────────────────────────────────────────
|
|
87
|
+
/**
|
|
88
|
+
* Structured "provider not configured for this chain" failure. Callers must
|
|
89
|
+
* surface this as SWAP_LIQUIDITY_NOT_CONFIGURED — it is a permanent
|
|
90
|
+
* configuration state, not a transient provider outage.
|
|
91
|
+
*/
|
|
92
|
+
export class DodoNotConfiguredError extends Error {
|
|
93
|
+
code = "SWAP_LIQUIDITY_NOT_CONFIGURED";
|
|
94
|
+
constructor(chainId) {
|
|
95
|
+
super(`SWAP_LIQUIDITY_NOT_CONFIGURED: the DODO route API is not a verified provider for chainId ${chainId}. ` +
|
|
96
|
+
`Swap liquidity, slippage, and route quotes cannot be served on this network. ` +
|
|
97
|
+
`Verified chains: ${dodoApiSupportedChainIds().join(", ") || "none"} (override with DODO_API_SUPPORTED_CHAIN_IDS only with evidence of support).`);
|
|
98
|
+
this.name = "DodoNotConfiguredError";
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Chains the DODO route API is treated as configured for. Defaults to Atlantic
|
|
103
|
+
* Testnet (688689) and Pacific Mainnet (1672) — both confirmed to serve routes.
|
|
104
|
+
* Any other chain fails closed until an operator opts in via
|
|
105
|
+
* DODO_API_SUPPORTED_CHAIN_IDS with evidence the API supports it.
|
|
106
|
+
*/
|
|
107
|
+
export function dodoApiSupportedChainIds() {
|
|
108
|
+
const raw = process.env.DODO_API_SUPPORTED_CHAIN_IDS;
|
|
109
|
+
if (raw && raw.trim()) {
|
|
110
|
+
return raw
|
|
111
|
+
.split(",")
|
|
112
|
+
.map((s) => parseInt(s.trim(), 10))
|
|
113
|
+
.filter((n) => Number.isFinite(n) && n > 0);
|
|
114
|
+
}
|
|
115
|
+
return [688689, 1672];
|
|
116
|
+
}
|
|
117
|
+
export function isDodoApiConfiguredForChain(chainId = CHAIN_ID) {
|
|
118
|
+
return dodoApiSupportedChainIds().includes(chainId);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Fetches a swap route from the DODO aggregation API.
|
|
122
|
+
*/
|
|
123
|
+
export async function _getDodoRouteCore(params) {
|
|
124
|
+
const trimmedApiKey = DODO_API_KEY?.trim();
|
|
125
|
+
const usedApiKey = Boolean(trimmedApiKey);
|
|
126
|
+
if (!isDodoApiConfiguredForChain(CHAIN_ID)) {
|
|
127
|
+
throw new DodoNotConfiguredError(CHAIN_ID);
|
|
128
|
+
}
|
|
129
|
+
if (!isAddress(params.walletAddress)) {
|
|
130
|
+
throw new Error(`INVALID_WALLET_ADDRESS: ${params.walletAddress}`);
|
|
131
|
+
}
|
|
132
|
+
const fromAddress = resolveTokenAddress(params.fromToken);
|
|
133
|
+
const toAddress = resolveTokenAddress(params.toToken);
|
|
134
|
+
const usedFromToken = fromAddress;
|
|
135
|
+
const usedToToken = toAddress;
|
|
136
|
+
const fromDecimals = resolveTokenDecimals(params.fromToken);
|
|
137
|
+
const toDecimals = resolveTokenDecimals(params.toToken);
|
|
138
|
+
const amountInWei = toWei(params.amountHuman, fromDecimals);
|
|
139
|
+
const slippage = params.slippage ?? resolveAutoSlippage(params.fromToken, params.toToken);
|
|
140
|
+
const deadline = Math.floor(Date.now() / 1000) + 600;
|
|
141
|
+
const url = new URL(`${DODO_API_BASE}${DODO_ROUTE_ENDPOINT}`);
|
|
142
|
+
url.searchParams.set("chainId", String(CHAIN_ID));
|
|
143
|
+
url.searchParams.set("fromTokenAddress", fromAddress);
|
|
144
|
+
url.searchParams.set("toTokenAddress", toAddress);
|
|
145
|
+
url.searchParams.set("fromAmount", amountInWei);
|
|
146
|
+
url.searchParams.set("userAddr", params.walletAddress);
|
|
147
|
+
url.searchParams.set("slippage", String(slippage));
|
|
148
|
+
url.searchParams.set("source", "dodoV2AndMixWasm");
|
|
149
|
+
url.searchParams.set("estimateGas", "true");
|
|
150
|
+
// DODO/FaroSwap read-only route queries should prefer public mode when no
|
|
151
|
+
// API key is configured. Never hardcode a default credential. If the
|
|
152
|
+
// provider rejects public mode, surface a structured auth-required error
|
|
153
|
+
// at the tool layer.
|
|
154
|
+
if (trimmedApiKey) {
|
|
155
|
+
url.searchParams.set("apikey", trimmedApiKey);
|
|
156
|
+
}
|
|
157
|
+
url.searchParams.set("deadLine", String(deadline));
|
|
158
|
+
const response = await fetchWithTimeoutAndRetry(url, {
|
|
159
|
+
timeoutMs: 10_000,
|
|
160
|
+
retries: 2,
|
|
161
|
+
retryDelayMs: 300,
|
|
162
|
+
});
|
|
163
|
+
if (!response.ok) {
|
|
164
|
+
if (response.status === 401 || response.status === 403) {
|
|
165
|
+
throw new Error(`DODO_API_AUTH_REQUIRED: DODO route API rejected public mode${usedApiKey ? " or provided key" : "; configure DODO_API_KEY if this endpoint requires authentication"}`);
|
|
166
|
+
}
|
|
167
|
+
if (response.status === 429) {
|
|
168
|
+
throw new Error(`DODO_API_RATE_LIMITED: ${response.status} ${response.statusText}`);
|
|
169
|
+
}
|
|
170
|
+
throw new Error(`DODO_API_UNAVAILABLE: ${response.status} ${response.statusText}`);
|
|
171
|
+
}
|
|
172
|
+
const json = (await response.json());
|
|
173
|
+
if (!json.data || json.status !== 200) {
|
|
174
|
+
const message = (json.message || "").toLowerCase();
|
|
175
|
+
if (message.includes("api key") || message.includes("apikey") || message.includes("unauthorized") || message.includes("forbidden")) {
|
|
176
|
+
throw new Error(`DODO_API_AUTH_REQUIRED: DODO route API rejected public mode${usedApiKey ? " or provided key" : "; configure DODO_API_KEY if this endpoint requires authentication"}`);
|
|
177
|
+
}
|
|
178
|
+
return {
|
|
179
|
+
amountOut: "0",
|
|
180
|
+
amountOutWei: "0",
|
|
181
|
+
priceImpact: 100,
|
|
182
|
+
gasLimit: "0",
|
|
183
|
+
value: "0",
|
|
184
|
+
calldata: "0x",
|
|
185
|
+
to: "",
|
|
186
|
+
approveAddress: "",
|
|
187
|
+
routeAvailable: false,
|
|
188
|
+
sourceStatus: "no_route_available",
|
|
189
|
+
usedApiKey,
|
|
190
|
+
usedFromToken,
|
|
191
|
+
usedToToken,
|
|
192
|
+
wasSubstituted: false,
|
|
193
|
+
rawResponse: json,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
const d = json.data;
|
|
197
|
+
const resAmountStr = String(d.resAmount);
|
|
198
|
+
return {
|
|
199
|
+
amountOut: fromWei(resAmountStr, toDecimals),
|
|
200
|
+
amountOutWei: resAmountStr,
|
|
201
|
+
priceImpact: parseFloat(String(d.priceImpact)) || 0,
|
|
202
|
+
gasLimit: String(d.gasLimit),
|
|
203
|
+
value: String(d.value),
|
|
204
|
+
calldata: d.data,
|
|
205
|
+
to: d.to,
|
|
206
|
+
approveAddress: d.targetApproveAddr,
|
|
207
|
+
routeAvailable: true,
|
|
208
|
+
sourceStatus: "ok",
|
|
209
|
+
usedApiKey,
|
|
210
|
+
usedFromToken,
|
|
211
|
+
usedToToken,
|
|
212
|
+
wasSubstituted: false,
|
|
213
|
+
rawResponse: json,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Smart wrapper around _getDodoRouteCore that automatically falls back to alternative token sources
|
|
218
|
+
* (like alternate USDC) if the canonical tokens have no liquidity on Atlantic Testnet.
|
|
219
|
+
* Pacific Mainnet never falls back to non-Pacific token addresses.
|
|
220
|
+
*/
|
|
221
|
+
export async function getDodoRoute(params) {
|
|
222
|
+
const quote = await _getDodoRouteCore(params);
|
|
223
|
+
if (!quote.routeAvailable && !IS_MAINNET) {
|
|
224
|
+
const fromUpper = params.fromToken.toUpperCase();
|
|
225
|
+
const toUpper = params.toToken.toUpperCase();
|
|
226
|
+
// Smart Fallback: If swapping TO canonical USDC failed, try Alternate Circle USDC
|
|
227
|
+
if (toUpper === "USDC" || toUpper === USDC_ADDRESS.toUpperCase()) {
|
|
228
|
+
const fallbackQuote = await _getDodoRouteCore({ ...params, toToken: CIRCLE_USDC_ADDRESS });
|
|
229
|
+
if (fallbackQuote.routeAvailable) {
|
|
230
|
+
return {
|
|
231
|
+
...fallbackQuote,
|
|
232
|
+
wasSubstituted: true,
|
|
233
|
+
substitutionNote: `toToken substituted: canonical USDC (${USDC_ADDRESS}) had no route; used altUSDC (${CIRCLE_USDC_ADDRESS}). Ensure your approval targets the correct address.`,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// Smart Fallback: If swapping FROM canonical USDC failed, try Alternate Circle USDC
|
|
238
|
+
if (fromUpper === "USDC" || fromUpper === USDC_ADDRESS.toUpperCase()) {
|
|
239
|
+
const fallbackQuote = await _getDodoRouteCore({ ...params, fromToken: CIRCLE_USDC_ADDRESS });
|
|
240
|
+
if (fallbackQuote.routeAvailable) {
|
|
241
|
+
return {
|
|
242
|
+
...fallbackQuote,
|
|
243
|
+
wasSubstituted: true,
|
|
244
|
+
substitutionNote: `fromToken substituted: canonical USDC (${USDC_ADDRESS}) had no route; used altUSDC (${CIRCLE_USDC_ADDRESS}). Ensure your allowance covers the correct address.`,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return quote;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Checks whether a token is the native PROS token.
|
|
253
|
+
*/
|
|
254
|
+
export function isNativeToken(token) {
|
|
255
|
+
const upper = token.toUpperCase();
|
|
256
|
+
if (upper === "PROS")
|
|
257
|
+
return true;
|
|
258
|
+
return token.toLowerCase() === PROS_ADDRESS.toLowerCase();
|
|
259
|
+
}
|
|
197
260
|
//# sourceMappingURL=dodoApi.js.map
|
package/dist/lib/dodoApi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dodoApi.js","sourceRoot":"","sources":["../../src/lib/dodoApi.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,
|
|
1
|
+
{"version":3,"file":"dodoApi.js","sourceRoot":"","sources":["../../src/lib/dodoApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
export type EcosystemItemCategory = "token" | "protocol" | "bridge" | "oracle" | "infrastructure" | "provider" | "explorer" | "payment";
|
|
2
|
+
/** Ecosystem recognition status — knowing a name is never holding proof. */
|
|
3
|
+
export type EcosystemItemStatus = "VERIFIED" | "KNOWN_ECOSYSTEM" | "NOT_CONFIGURED" | "UNKNOWN";
|
|
4
|
+
/** Evidence-backed verification status (docs/REFERENCES.md ledger vocabulary). */
|
|
5
|
+
export type RegistryVerificationStatus = "VERIFIED" | "TO_VERIFY" | "UNVERIFIED";
|
|
6
|
+
export type RegistryEvidenceSourceType = "onchain" | "official_docs" | "official_github" | "verified_explorer" | "provider";
|
|
7
|
+
export interface RegistryEvidenceSource {
|
|
8
|
+
type: RegistryEvidenceSourceType;
|
|
9
|
+
/** URL or repo-relative citation — never invented. */
|
|
10
|
+
ref: string;
|
|
11
|
+
/** ISO date the citation was last checked; null = never independently re-checked. */
|
|
12
|
+
verifiedAt: string | null;
|
|
13
|
+
}
|
|
14
|
+
export interface RegistryContract {
|
|
15
|
+
address: `0x${string}`;
|
|
16
|
+
label: string;
|
|
17
|
+
role: string;
|
|
18
|
+
/** Same address across EVM chains by deterministic deployment (CREATE2). */
|
|
19
|
+
deterministic: boolean;
|
|
20
|
+
verificationStatus: RegistryVerificationStatus;
|
|
21
|
+
/** Token/feed symbol, when the contract is a token or price feed. */
|
|
22
|
+
symbol?: string;
|
|
23
|
+
decimals?: number;
|
|
24
|
+
/** Price pair for oracle feed contracts (e.g. "PROS/USD"). */
|
|
25
|
+
pair?: string;
|
|
26
|
+
/** Price reads supported, but no token identity/balance claims (e.g. USDT). */
|
|
27
|
+
feedOnly?: boolean;
|
|
28
|
+
note?: string;
|
|
29
|
+
}
|
|
30
|
+
export type RegistryProviderKind = "rpc" | "price_feed" | "security_intel" | "subgraph" | "indexer" | "json_api" | "explorer_api" | "x402";
|
|
31
|
+
export interface RegistryProvider {
|
|
32
|
+
kind: RegistryProviderKind;
|
|
33
|
+
/** null = deliberately NOT_CONFIGURED — never invent an endpoint. */
|
|
34
|
+
endpoint: string | null;
|
|
35
|
+
/** Env var an operator can use to configure/override this provider. */
|
|
36
|
+
configVia: string | null;
|
|
37
|
+
status: "implemented" | "experimental" | "not_configured" | "not_implemented";
|
|
38
|
+
note?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* How an item may be used by safety logic:
|
|
42
|
+
* • allow_eligible — address-verified canonical; may contribute to ALLOW.
|
|
43
|
+
* • recognition_only — may label/inform; never relaxes risk.
|
|
44
|
+
* • escalate_only — recognition triggers extra caution (bridges, cross-chain,
|
|
45
|
+
* unverified protocols); never relaxes risk.
|
|
46
|
+
*/
|
|
47
|
+
export type RegistrySafetyUse = "allow_eligible" | "recognition_only" | "escalate_only";
|
|
48
|
+
export interface EcosystemItem {
|
|
49
|
+
/** Stable slug, e.g. "token:pacific-mainnet:usdc". */
|
|
50
|
+
id: string;
|
|
51
|
+
name: string;
|
|
52
|
+
/** Names/symbols that resolve to this item — recognition and impersonation detection only. */
|
|
53
|
+
aliases: string[];
|
|
54
|
+
category: EcosystemItemCategory;
|
|
55
|
+
/** null = chain-agnostic (deterministic CREATE2 deployments). */
|
|
56
|
+
chainId: number | null;
|
|
57
|
+
ecosystemStatus: EcosystemItemStatus;
|
|
58
|
+
verificationStatus: RegistryVerificationStatus;
|
|
59
|
+
/** REQUIRED non-empty for verificationStatus VERIFIED. */
|
|
60
|
+
evidenceSources: RegistryEvidenceSource[];
|
|
61
|
+
/** Empty = no on-chain footprint claimed. */
|
|
62
|
+
contracts: RegistryContract[];
|
|
63
|
+
providers: RegistryProvider[];
|
|
64
|
+
safetyUse: RegistrySafetyUse;
|
|
65
|
+
notes: string;
|
|
66
|
+
}
|
|
67
|
+
/** The canonical registry (see src/data/ecosystemRegistry.data.ts). */
|
|
68
|
+
export declare const ECOSYSTEM_REGISTRY: readonly EcosystemItem[];
|
|
69
|
+
/**
|
|
70
|
+
* Validate the registry against the fail-closed truth-model rules. Returns a
|
|
71
|
+
* list of human-readable violations (empty = valid). Enforced by tests so a
|
|
72
|
+
* registry edit that weakens the rules fails CI.
|
|
73
|
+
*/
|
|
74
|
+
export declare function validateEcosystemRegistry(items?: readonly EcosystemItem[]): string[];
|
|
75
|
+
interface AddressLookupResult {
|
|
76
|
+
item: EcosystemItem;
|
|
77
|
+
contract: RegistryContract;
|
|
78
|
+
}
|
|
79
|
+
/** Address-matched lookup — the only lookup that may feed allow_eligible handling. */
|
|
80
|
+
export declare function lookupRegistryByAddress(address: string): AddressLookupResult | undefined;
|
|
81
|
+
export interface AddressTrustEvidence {
|
|
82
|
+
/** Address matched a registry contract registered for the given chain. */
|
|
83
|
+
recognized: boolean;
|
|
84
|
+
/**
|
|
85
|
+
* VERIFIED item + VERIFIED contract + allow_eligible + chain match — the ONLY
|
|
86
|
+
* state that may relax risk. Recognition without this is informational only.
|
|
87
|
+
*/
|
|
88
|
+
verifiedCanonical: boolean;
|
|
89
|
+
itemId: string | null;
|
|
90
|
+
itemName: string | null;
|
|
91
|
+
contractLabel: string | null;
|
|
92
|
+
safetyUse: RegistrySafetyUse | null;
|
|
93
|
+
verificationStatus: RegistryVerificationStatus | null;
|
|
94
|
+
/** Registry chainId of the matched item (null = chain-agnostic). */
|
|
95
|
+
registryChainId: number | null;
|
|
96
|
+
note: string | null;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Registry-driven trust evaluation for a single address on a given chain.
|
|
100
|
+
* This is the ONLY sanctioned way for risk logic to derive spender/counterparty
|
|
101
|
+
* trust: hardcoded "known address" maps outside the registry are forbidden
|
|
102
|
+
* (truth-model rule: do not upgrade anything to VERIFIED without evidence).
|
|
103
|
+
* An address registered for a different chainId gets NO recognition — testnet
|
|
104
|
+
* provenance never carries to mainnet.
|
|
105
|
+
*/
|
|
106
|
+
export declare function addressTrustEvidence(address: string, chainId: number): AddressTrustEvidence;
|
|
107
|
+
/**
|
|
108
|
+
* Name/alias lookup — recognition only. A name match carries NO address
|
|
109
|
+
* verification and must never relax a decision, regardless of the item's
|
|
110
|
+
* safetyUse (which applies to address-matched evidence only).
|
|
111
|
+
*/
|
|
112
|
+
export declare function lookupRegistryByName(name: string): EcosystemItem | undefined;
|
|
113
|
+
/** Registry item by stable id. */
|
|
114
|
+
export declare function getRegistryItem(id: string): EcosystemItem | undefined;
|
|
115
|
+
export {};
|
|
116
|
+
//# sourceMappingURL=ecosystemRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ecosystemRegistry.d.ts","sourceRoot":"","sources":["../../src/lib/ecosystemRegistry.ts"],"names":[],"mappings":"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"}
|