safehands-pharos 1.5.0 → 2.8.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 -444
- 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 +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +29 -1
- 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 +0 -0
- package/dist/demo.d.ts.map +1 -1
- package/dist/demo.js +43 -8
- package/dist/demo.js.map +1 -1
- package/dist/handsafe.zip +0 -0
- package/dist/index.d.ts +0 -0
- package/dist/index.d.ts.map +0 -0
- package/dist/index.js +212 -135
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +0 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +72 -10
- package/dist/init.js.map +1 -1
- package/dist/lib/analysis/abiWords.d.ts +17 -0
- package/dist/lib/analysis/abiWords.d.ts.map +1 -0
- package/dist/lib/analysis/abiWords.js +48 -0
- package/dist/lib/analysis/abiWords.js.map +1 -0
- 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 +189 -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 +464 -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 +246 -97
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +334 -127
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/dodoApi.d.ts +26 -3
- package/dist/lib/dodoApi.d.ts.map +1 -1
- package/dist/lib/dodoApi.js +80 -17
- package/dist/lib/dodoApi.js.map +1 -1
- package/dist/lib/ecosystemRegistry.d.ts +126 -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 +0 -0
- package/dist/lib/envLoader.d.ts.map +0 -0
- package/dist/lib/envLoader.js +39 -18
- package/dist/lib/envLoader.js.map +1 -1
- 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 +0 -1
- package/dist/lib/http.d.ts.map +1 -1
- package/dist/lib/http.js +297 -32
- 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 +5 -10
- package/dist/lib/pharosClient.d.ts.map +1 -1
- package/dist/lib/pharosClient.js +9 -16
- package/dist/lib/pharosClient.js.map +1 -1
- package/dist/lib/policy/actionPolicyEngine.d.ts +37 -1
- package/dist/lib/policy/actionPolicyEngine.d.ts.map +1 -1
- package/dist/lib/policy/actionPolicyEngine.js +213 -52
- 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 +19 -0
- package/dist/lib/riskEngine.d.ts.map +1 -1
- package/dist/lib/riskEngine.js +107 -38
- 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 +3 -3
- package/dist/lib/signer/index.d.ts.map +1 -1
- package/dist/lib/signer/index.js +33 -11
- 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 +6 -1
- package/dist/lib/toolResponse.d.ts.map +1 -1
- package/dist/lib/toolResponse.js +13 -9
- 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 +8 -12
- package/dist/lib/wallet/index.d.ts.map +1 -1
- package/dist/lib/wallet/index.js +48 -35
- 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 +31 -10
- package/dist/tools/approveToken.d.ts.map +1 -1
- package/dist/tools/approveToken.js +91 -24
- package/dist/tools/approveToken.js.map +1 -1
- package/dist/tools/assessRisk.d.ts +13 -26
- package/dist/tools/assessRisk.d.ts.map +1 -1
- package/dist/tools/assessRisk.js +34 -75
- package/dist/tools/assessRisk.js.map +1 -1
- package/dist/tools/checkAllowance.d.ts +9 -3
- package/dist/tools/checkAllowance.d.ts.map +1 -1
- package/dist/tools/checkAllowance.js +27 -5
- package/dist/tools/checkAllowance.js.map +1 -1
- package/dist/tools/checkTokenSecurity.d.ts +62 -5
- package/dist/tools/checkTokenSecurity.d.ts.map +1 -1
- package/dist/tools/checkTokenSecurity.js +166 -21
- package/dist/tools/checkTokenSecurity.js.map +1 -1
- package/dist/tools/createAgentWallet.d.ts +4 -2
- package/dist/tools/createAgentWallet.d.ts.map +1 -1
- package/dist/tools/createAgentWallet.js +36 -31
- package/dist/tools/createAgentWallet.js.map +1 -1
- package/dist/tools/estimateGas.d.ts +7 -2
- package/dist/tools/estimateGas.d.ts.map +1 -1
- package/dist/tools/estimateGas.js +16 -10
- package/dist/tools/estimateGas.js.map +1 -1
- package/dist/tools/executeSwap.d.ts +56 -8
- package/dist/tools/executeSwap.d.ts.map +1 -1
- package/dist/tools/executeSwap.js +194 -46
- package/dist/tools/executeSwap.js.map +1 -1
- package/dist/tools/explainRisk.d.ts +9 -9
- package/dist/tools/explainRisk.d.ts.map +1 -1
- package/dist/tools/explainRisk.js +5 -4
- 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 +1 -1
- package/dist/tools/getAgentWallet.d.ts.map +1 -1
- package/dist/tools/getAgentWallet.js +11 -1
- package/dist/tools/getAgentWallet.js.map +1 -1
- package/dist/tools/getAgentWalletBalance.d.ts +1 -1
- package/dist/tools/getAgentWalletBalance.d.ts.map +1 -1
- package/dist/tools/getAgentWalletBalance.js +58 -26
- package/dist/tools/getAgentWalletBalance.js.map +1 -1
- package/dist/tools/getExecutionHistory.d.ts +1 -1
- package/dist/tools/getExecutionHistory.d.ts.map +1 -1
- package/dist/tools/getExecutionHistory.js +13 -19
- package/dist/tools/getExecutionHistory.js.map +1 -1
- package/dist/tools/getGasPrice.d.ts +3 -3
- package/dist/tools/getGasPrice.d.ts.map +0 -0
- package/dist/tools/getGasPrice.js +7 -7
- package/dist/tools/getGasPrice.js.map +1 -1
- package/dist/tools/getPoolInfo.d.ts +17 -17
- package/dist/tools/getPoolInfo.d.ts.map +1 -1
- package/dist/tools/getPoolInfo.js +14 -9
- 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 +28 -85
- package/dist/tools/getTokenPrice.d.ts.map +1 -1
- package/dist/tools/getTokenPrice.js +87 -94
- package/dist/tools/getTokenPrice.js.map +1 -1
- package/dist/tools/getTransactionStatus.d.ts +2 -2
- package/dist/tools/getTransactionStatus.d.ts.map +0 -0
- package/dist/tools/getTransactionStatus.js +0 -0
- package/dist/tools/getTransactionStatus.js.map +0 -0
- package/dist/tools/getWalletBalance.d.ts +38 -3
- package/dist/tools/getWalletBalance.d.ts.map +1 -1
- package/dist/tools/getWalletBalance.js +92 -52
- package/dist/tools/getWalletBalance.js.map +1 -1
- package/dist/tools/publishRiskScore.d.ts +36 -14
- package/dist/tools/publishRiskScore.d.ts.map +1 -1
- package/dist/tools/publishRiskScore.js +80 -32
- 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 +14 -14
- package/dist/tools/queryRiskRegistry.d.ts.map +1 -1
- package/dist/tools/queryRiskRegistry.js +34 -30
- package/dist/tools/queryRiskRegistry.js.map +1 -1
- package/dist/tools/safehandsPreflightCheck.d.ts +29 -14
- package/dist/tools/safehandsPreflightCheck.d.ts.map +1 -1
- package/dist/tools/safehandsPreflightCheck.js +133 -6
- package/dist/tools/safehandsPreflightCheck.js.map +1 -1
- package/dist/tools/safehandsRiskReport.d.ts +29 -14
- package/dist/tools/safehandsRiskReport.d.ts.map +1 -1
- package/dist/tools/safehandsRiskReport.js +23 -3
- package/dist/tools/safehandsRiskReport.js.map +1 -1
- package/dist/tools/safehandsSafeExecute.d.ts +1 -1
- package/dist/tools/safehandsSafeExecute.d.ts.map +1 -1
- package/dist/tools/safehandsSafeExecute.js +100 -17
- package/dist/tools/safehandsSafeExecute.js.map +1 -1
- package/dist/tools/safehandsWalletHealth.d.ts +15 -1
- package/dist/tools/safehandsWalletHealth.d.ts.map +1 -1
- package/dist/tools/safehandsWalletHealth.js +67 -25
- package/dist/tools/safehandsWalletHealth.js.map +1 -1
- package/dist/tools/safehandsX402Preflight.d.ts +3 -3
- package/dist/tools/safehandsX402Preflight.d.ts.map +1 -1
- package/dist/tools/safehandsX402Preflight.js +24 -3
- package/dist/tools/safehandsX402Preflight.js.map +1 -1
- package/dist/tools/sendPayment.d.ts +10 -4
- package/dist/tools/sendPayment.d.ts.map +1 -1
- package/dist/tools/sendPayment.js +63 -36
- 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 +7 -3
- package/dist/tools/simulateTransaction.d.ts.map +1 -1
- package/dist/tools/simulateTransaction.js +42 -9
- package/dist/tools/simulateTransaction.js.map +1 -1
- package/dist/tools/tokenRegistryStatus.d.ts +25 -5
- package/dist/tools/tokenRegistryStatus.d.ts.map +1 -1
- package/dist/tools/tokenRegistryStatus.js +61 -31
- 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 +15 -9
- package/dist/tools/x402PayAndFetch.d.ts.map +1 -1
- package/dist/tools/x402PayAndFetch.js +163 -20
- 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 +144 -35
- 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 +131 -73
- 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 -397
- 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/dist/lib/dodoApi.d.ts
CHANGED
|
@@ -35,7 +35,7 @@ export interface DodoQuote {
|
|
|
35
35
|
rawResponse: DodoRouteResponse;
|
|
36
36
|
}
|
|
37
37
|
/**
|
|
38
|
-
* Resolves a token symbol (e.g. "
|
|
38
|
+
* Resolves a token symbol (e.g. "PROS") or address to its on-chain address.
|
|
39
39
|
*/
|
|
40
40
|
export declare function resolveTokenAddress(token: string): `0x${string}`;
|
|
41
41
|
/**
|
|
@@ -51,6 +51,28 @@ export declare function toWei(amount: string, decimals: number): string;
|
|
|
51
51
|
* Also handles the case where the API returns a decimal string directly.
|
|
52
52
|
*/
|
|
53
53
|
export declare function fromWei(weiInput: string | number, decimals: number): string;
|
|
54
|
+
/**
|
|
55
|
+
* Resolves the FaroSwap AUTO slippage tolerance based on token pair types.
|
|
56
|
+
* @see https://docs.faroswap.xyz
|
|
57
|
+
*/
|
|
58
|
+
export declare function resolveAutoSlippage(fromToken: string, toToken: string): number;
|
|
59
|
+
/**
|
|
60
|
+
* Structured "provider not configured for this chain" failure. Callers must
|
|
61
|
+
* surface this as SWAP_LIQUIDITY_NOT_CONFIGURED — it is a permanent
|
|
62
|
+
* configuration state, not a transient provider outage.
|
|
63
|
+
*/
|
|
64
|
+
export declare class DodoNotConfiguredError extends Error {
|
|
65
|
+
readonly code: "SWAP_LIQUIDITY_NOT_CONFIGURED";
|
|
66
|
+
constructor(chainId: number);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Chains the DODO route API is treated as configured for. Defaults to Atlantic
|
|
70
|
+
* Testnet (688689) and Pacific Mainnet (1672) — both confirmed to serve routes.
|
|
71
|
+
* Any other chain fails closed until an operator opts in via
|
|
72
|
+
* DODO_API_SUPPORTED_CHAIN_IDS with evidence the API supports it.
|
|
73
|
+
*/
|
|
74
|
+
export declare function dodoApiSupportedChainIds(): number[];
|
|
75
|
+
export declare function isDodoApiConfiguredForChain(chainId?: number): boolean;
|
|
54
76
|
/**
|
|
55
77
|
* Fetches a swap route from the DODO aggregation API.
|
|
56
78
|
*/
|
|
@@ -63,7 +85,8 @@ export declare function _getDodoRouteCore(params: {
|
|
|
63
85
|
}): Promise<DodoQuote>;
|
|
64
86
|
/**
|
|
65
87
|
* Smart wrapper around _getDodoRouteCore that automatically falls back to alternative token sources
|
|
66
|
-
* (like
|
|
88
|
+
* (like alternate USDC) if the canonical tokens have no liquidity on Atlantic Testnet.
|
|
89
|
+
* Pacific Mainnet never falls back to non-Pacific token addresses.
|
|
67
90
|
*/
|
|
68
91
|
export declare function getDodoRoute(params: {
|
|
69
92
|
fromToken: string;
|
|
@@ -73,7 +96,7 @@ export declare function getDodoRoute(params: {
|
|
|
73
96
|
slippage?: number;
|
|
74
97
|
}): Promise<DodoQuote>;
|
|
75
98
|
/**
|
|
76
|
-
* Checks whether a token is the native
|
|
99
|
+
* Checks whether a token is the native PROS token.
|
|
77
100
|
*/
|
|
78
101
|
export declare function isNativeToken(token: string): boolean;
|
|
79
102
|
//# sourceMappingURL=dodoApi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dodoApi.d.ts","sourceRoot":"","sources":["../../src/lib/dodoApi.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dodoApi.d.ts","sourceRoot":"","sources":["../../src/lib/dodoApi.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/dodoApi.js
CHANGED
|
@@ -1,18 +1,26 @@
|
|
|
1
1
|
// ─── DODO Route API Client ─────────────────────────────────────────────
|
|
2
|
-
// Fetches swap routes from DODO's aggregation API
|
|
3
|
-
//
|
|
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.
|
|
4
11
|
// ────────────────────────────────────────────────────────────────────────
|
|
5
12
|
import { isAddress } from "viem";
|
|
6
|
-
import { DODO_API_BASE, DODO_API_KEY, DODO_DEFAULT_SLIPPAGE, DODO_ROUTE_ENDPOINT, CHAIN_ID,
|
|
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";
|
|
7
14
|
import { fetchWithTimeoutAndRetry } from "./http.js";
|
|
8
15
|
// ─── Helpers ───────────────────────────────────────────────────────────
|
|
9
16
|
/**
|
|
10
|
-
* Resolves a token symbol (e.g. "
|
|
17
|
+
* Resolves a token symbol (e.g. "PROS") or address to its on-chain address.
|
|
11
18
|
*/
|
|
12
19
|
export function resolveTokenAddress(token) {
|
|
13
20
|
const upper = token.toUpperCase();
|
|
14
|
-
|
|
15
|
-
|
|
21
|
+
const map = activeTokenMap();
|
|
22
|
+
if (map[upper])
|
|
23
|
+
return map[upper];
|
|
16
24
|
if (isAddress(token))
|
|
17
25
|
return token;
|
|
18
26
|
throw new Error(`INVALID_TOKEN_ADDRESS: Unknown token or invalid address: ${token}`);
|
|
@@ -22,11 +30,12 @@ export function resolveTokenAddress(token) {
|
|
|
22
30
|
*/
|
|
23
31
|
export function resolveTokenDecimals(token) {
|
|
24
32
|
const upper = token.toUpperCase();
|
|
25
|
-
|
|
26
|
-
|
|
33
|
+
const decimals = activeTokenDecimals();
|
|
34
|
+
if (decimals[upper] !== undefined)
|
|
35
|
+
return decimals[upper];
|
|
27
36
|
const lower = token.toLowerCase();
|
|
28
|
-
if (
|
|
29
|
-
return
|
|
37
|
+
if (decimals[lower] !== undefined)
|
|
38
|
+
return decimals[lower];
|
|
30
39
|
return 18; // unknown custom token fallback
|
|
31
40
|
}
|
|
32
41
|
/**
|
|
@@ -57,13 +66,66 @@ export function fromWei(weiInput, decimals) {
|
|
|
57
66
|
const fracStr = remainder.toString().padStart(decimals, "0").replace(/0+$/, "");
|
|
58
67
|
return `${whole}.${fracStr}`;
|
|
59
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
|
+
}
|
|
60
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
|
+
}
|
|
61
120
|
/**
|
|
62
121
|
* Fetches a swap route from the DODO aggregation API.
|
|
63
122
|
*/
|
|
64
123
|
export async function _getDodoRouteCore(params) {
|
|
65
124
|
const trimmedApiKey = DODO_API_KEY?.trim();
|
|
66
125
|
const usedApiKey = Boolean(trimmedApiKey);
|
|
126
|
+
if (!isDodoApiConfiguredForChain(CHAIN_ID)) {
|
|
127
|
+
throw new DodoNotConfiguredError(CHAIN_ID);
|
|
128
|
+
}
|
|
67
129
|
if (!isAddress(params.walletAddress)) {
|
|
68
130
|
throw new Error(`INVALID_WALLET_ADDRESS: ${params.walletAddress}`);
|
|
69
131
|
}
|
|
@@ -74,7 +136,7 @@ export async function _getDodoRouteCore(params) {
|
|
|
74
136
|
const fromDecimals = resolveTokenDecimals(params.fromToken);
|
|
75
137
|
const toDecimals = resolveTokenDecimals(params.toToken);
|
|
76
138
|
const amountInWei = toWei(params.amountHuman, fromDecimals);
|
|
77
|
-
const slippage = params.slippage ??
|
|
139
|
+
const slippage = params.slippage ?? resolveAutoSlippage(params.fromToken, params.toToken);
|
|
78
140
|
const deadline = Math.floor(Date.now() / 1000) + 600;
|
|
79
141
|
const url = new URL(`${DODO_API_BASE}${DODO_ROUTE_ENDPOINT}`);
|
|
80
142
|
url.searchParams.set("chainId", String(CHAIN_ID));
|
|
@@ -153,11 +215,12 @@ export async function _getDodoRouteCore(params) {
|
|
|
153
215
|
}
|
|
154
216
|
/**
|
|
155
217
|
* Smart wrapper around _getDodoRouteCore that automatically falls back to alternative token sources
|
|
156
|
-
* (like
|
|
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.
|
|
157
220
|
*/
|
|
158
221
|
export async function getDodoRoute(params) {
|
|
159
|
-
|
|
160
|
-
if (!quote.routeAvailable) {
|
|
222
|
+
const quote = await _getDodoRouteCore(params);
|
|
223
|
+
if (!quote.routeAvailable && !IS_MAINNET) {
|
|
161
224
|
const fromUpper = params.fromToken.toUpperCase();
|
|
162
225
|
const toUpper = params.toToken.toUpperCase();
|
|
163
226
|
// Smart Fallback: If swapping TO canonical USDC failed, try Alternate Circle USDC
|
|
@@ -186,12 +249,12 @@ export async function getDodoRoute(params) {
|
|
|
186
249
|
return quote;
|
|
187
250
|
}
|
|
188
251
|
/**
|
|
189
|
-
* Checks whether a token is the native
|
|
252
|
+
* Checks whether a token is the native PROS token.
|
|
190
253
|
*/
|
|
191
254
|
export function isNativeToken(token) {
|
|
192
255
|
const upper = token.toUpperCase();
|
|
193
|
-
if (upper === "
|
|
256
|
+
if (upper === "PROS")
|
|
194
257
|
return true;
|
|
195
|
-
return token.toLowerCase() ===
|
|
258
|
+
return token.toLowerCase() === PROS_ADDRESS.toLowerCase();
|
|
196
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":"AAAA,0EAA0E;AAC1E,8DAA8D;AAC9D,EAAE;AACF,iFAAiF;AACjF,gFAAgF;AAChF,8EAA8E;AAC9E,+EAA+E;AAC/E,iFAAiF;AACjF,iFAAiF;AACjF,iEAAiE;AACjE,2EAA2E;AAE3E,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EACL,aAAa,EACb,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,EACnB,QAAQ,EACR,cAAc,EACd,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,UAAU,GACX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AA0CrD,0EAA0E;AAE1E;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;IAC7B,IAAI,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,SAAS,CAAC,KAAK,CAAC;QAAE,OAAO,KAAsB,CAAC;IACpD,MAAM,IAAI,KAAK,CAAC,4DAA4D,KAAK,EAAE,CAAC,CAAC;AACvF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IACvC,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1D,OAAO,EAAE,CAAC,CAAC,gCAAgC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,MAAc,EAAE,QAAgB;IACpD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACjE,OAAO,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,QAAyB,EAAE,QAAgB;IACjE,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IACxC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,GAAG,GAAG,OAAO,CAAC;IAC5B,MAAM,SAAS,GAAG,GAAG,GAAG,OAAO,CAAC;IAChC,IAAI,SAAS,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC9C,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAChF,OAAO,GAAG,KAAK,IAAI,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAiB,EAAE,OAAe;IACpE,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAEjC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IAC5E,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QACjD,OAAO,GAAG,CAAC,CAAC,4BAA4B;IAC1C,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IACtF,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QACvC,OAAO,GAAG,CAAC,CAAC,uBAAuB;IACrC,CAAC;IAED,OAAO,qBAAqB,CAAC,CAAC,4BAA4B;AAC5D,CAAC;AAED,0EAA0E;AAE1E;;;;GAIG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IACtC,IAAI,GAAG,+BAAwC,CAAC;IACzD,YAAY,OAAe;QACzB,KAAK,CACH,4FAA4F,OAAO,IAAI;YACrG,+EAA+E;YAC/E,oBAAoB,wBAAwB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,8EAA8E,CACpJ,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB;IACtC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;IACrD,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QACtB,OAAO,GAAG;aACP,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;aAClC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,UAAkB,QAAQ;IACpE,OAAO,wBAAwB,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAMvC;IACC,MAAM,aAAa,GAAG,YAAY,EAAE,IAAI,EAAE,CAAC;IAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAE1C,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,2BAA2B,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,aAAa,GAAG,WAAW,CAAC;IAClC,MAAM,WAAW,GAAG,SAAS,CAAC;IAC9B,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,mBAAmB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1F,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IAErD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,aAAa,GAAG,mBAAmB,EAAE,CAAC,CAAC;IAC9D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;IACtD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;IAClD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAChD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IACvD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;IACnD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC5C,0EAA0E;IAC1E,qEAAqE;IACrE,yEAAyE;IACzE,qBAAqB;IACrB,IAAI,aAAa,EAAE,CAAC;QAClB,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAChD,CAAC;IACD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEnD,MAAM,QAAQ,GAAG,MAAM,wBAAwB,CAAC,GAAG,EAAE;QACnD,SAAS,EAAE,MAAM;QACjB,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,GAAG;KAClB,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CACb,8DAA8D,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,mEAAmE,EAAE,CACtK,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAsB,CAAC;IAE1D,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACnD,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACnI,MAAM,IAAI,KAAK,CACb,8DAA8D,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,mEAAmE,EAAE,CACtK,CAAC;QACJ,CAAC;QACD,OAAO;YACL,SAAS,EAAE,GAAG;YACd,YAAY,EAAE,GAAG;YACjB,WAAW,EAAE,GAAG;YAChB,QAAQ,EAAE,GAAG;YACb,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,IAAI;YACd,EAAE,EAAE,EAAE;YACN,cAAc,EAAE,EAAE;YAClB,cAAc,EAAE,KAAK;YACrB,YAAY,EAAE,oBAAoB;YAClC,UAAU;YACV,aAAa;YACb,WAAW;YACX,cAAc,EAAE,KAAK;YACrB,WAAW,EAAE,IAAI;SAClB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;IACpB,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACzC,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC;QAC5C,YAAY,EAAE,YAAY;QAC1B,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC;QACnD,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;QACtB,QAAQ,EAAE,CAAC,CAAC,IAAI;QAChB,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,cAAc,EAAE,CAAC,CAAC,iBAAiB;QACnC,cAAc,EAAE,IAAI;QACpB,YAAY,EAAE,IAAI;QAClB,UAAU;QACV,aAAa;QACb,WAAW;QACX,cAAc,EAAE,KAAK;QACrB,WAAW,EAAE,IAAI;KAClB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAMlC;IACC,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,UAAU,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAE7C,kFAAkF;QAClF,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC;YACjE,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;YAC3F,IAAI,aAAa,CAAC,cAAc,EAAE,CAAC;gBACjC,OAAO;oBACL,GAAG,aAAa;oBAChB,cAAc,EAAE,IAAI;oBACpB,gBAAgB,EAAE,wCAAwC,YAAY,iCAAiC,mBAAmB,sDAAsD;iBACjL,CAAC;YACJ,CAAC;QACH,CAAC;QAED,oFAAoF;QACpF,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC;YACrE,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,CAAC;YAC7F,IAAI,aAAa,CAAC,cAAc,EAAE,CAAC;gBACjC,OAAO;oBACL,GAAG,aAAa;oBAChB,cAAc,EAAE,IAAI;oBACpB,gBAAgB,EAAE,0CAA0C,YAAY,iCAAiC,mBAAmB,sDAAsD;iBACnL,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,KAAK,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,WAAW,EAAE,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
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
|
+
/**
|
|
29
|
+
* keccak256 of the contract's deployed bytecode at verification time. Lets the
|
|
30
|
+
* hosted engine recognize a byte-identical copy at a DIFFERENT address (e.g. a
|
|
31
|
+
* factory-minted vault) and detect a silent change if this address's live code
|
|
32
|
+
* ever stops matching. Recognition only, never canonical trust.
|
|
33
|
+
*/
|
|
34
|
+
codeHash?: `0x${string}`;
|
|
35
|
+
/** For an EIP-1967 proxy: the implementation address and its bytecode hash at verification time. */
|
|
36
|
+
implAddress?: `0x${string}`;
|
|
37
|
+
implCodeHash?: `0x${string}`;
|
|
38
|
+
note?: string;
|
|
39
|
+
}
|
|
40
|
+
export type RegistryProviderKind = "rpc" | "price_feed" | "security_intel" | "subgraph" | "indexer" | "json_api" | "explorer_api" | "x402";
|
|
41
|
+
export interface RegistryProvider {
|
|
42
|
+
kind: RegistryProviderKind;
|
|
43
|
+
/** null = deliberately NOT_CONFIGURED — never invent an endpoint. */
|
|
44
|
+
endpoint: string | null;
|
|
45
|
+
/** Env var an operator can use to configure/override this provider. */
|
|
46
|
+
configVia: string | null;
|
|
47
|
+
status: "implemented" | "experimental" | "not_configured" | "not_implemented";
|
|
48
|
+
note?: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* How an item may be used by safety logic:
|
|
52
|
+
* • allow_eligible — address-verified canonical; may contribute to ALLOW.
|
|
53
|
+
* • recognition_only — may label/inform; never relaxes risk.
|
|
54
|
+
* • escalate_only — recognition triggers extra caution (bridges, cross-chain,
|
|
55
|
+
* unverified protocols); never relaxes risk.
|
|
56
|
+
*/
|
|
57
|
+
export type RegistrySafetyUse = "allow_eligible" | "recognition_only" | "escalate_only";
|
|
58
|
+
export interface EcosystemItem {
|
|
59
|
+
/** Stable slug, e.g. "token:pacific-mainnet:usdc". */
|
|
60
|
+
id: string;
|
|
61
|
+
name: string;
|
|
62
|
+
/** Names/symbols that resolve to this item — recognition and impersonation detection only. */
|
|
63
|
+
aliases: string[];
|
|
64
|
+
category: EcosystemItemCategory;
|
|
65
|
+
/** null = chain-agnostic (deterministic CREATE2 deployments). */
|
|
66
|
+
chainId: number | null;
|
|
67
|
+
ecosystemStatus: EcosystemItemStatus;
|
|
68
|
+
verificationStatus: RegistryVerificationStatus;
|
|
69
|
+
/** REQUIRED non-empty for verificationStatus VERIFIED. */
|
|
70
|
+
evidenceSources: RegistryEvidenceSource[];
|
|
71
|
+
/** Empty = no on-chain footprint claimed. */
|
|
72
|
+
contracts: RegistryContract[];
|
|
73
|
+
providers: RegistryProvider[];
|
|
74
|
+
safetyUse: RegistrySafetyUse;
|
|
75
|
+
notes: string;
|
|
76
|
+
}
|
|
77
|
+
/** The canonical registry (see src/data/ecosystemRegistry.data.ts). */
|
|
78
|
+
export declare const ECOSYSTEM_REGISTRY: readonly EcosystemItem[];
|
|
79
|
+
/**
|
|
80
|
+
* Validate the registry against the fail-closed truth-model rules. Returns a
|
|
81
|
+
* list of human-readable violations (empty = valid). Enforced by tests so a
|
|
82
|
+
* registry edit that weakens the rules fails CI.
|
|
83
|
+
*/
|
|
84
|
+
export declare function validateEcosystemRegistry(items?: readonly EcosystemItem[]): string[];
|
|
85
|
+
interface AddressLookupResult {
|
|
86
|
+
item: EcosystemItem;
|
|
87
|
+
contract: RegistryContract;
|
|
88
|
+
}
|
|
89
|
+
/** Address-matched lookup — the only lookup that may feed allow_eligible handling. */
|
|
90
|
+
export declare function lookupRegistryByAddress(address: string): AddressLookupResult | undefined;
|
|
91
|
+
export interface AddressTrustEvidence {
|
|
92
|
+
/** Address matched a registry contract registered for the given chain. */
|
|
93
|
+
recognized: boolean;
|
|
94
|
+
/**
|
|
95
|
+
* VERIFIED item + VERIFIED contract + allow_eligible + chain match — the ONLY
|
|
96
|
+
* state that may relax risk. Recognition without this is informational only.
|
|
97
|
+
*/
|
|
98
|
+
verifiedCanonical: boolean;
|
|
99
|
+
itemId: string | null;
|
|
100
|
+
itemName: string | null;
|
|
101
|
+
contractLabel: string | null;
|
|
102
|
+
safetyUse: RegistrySafetyUse | null;
|
|
103
|
+
verificationStatus: RegistryVerificationStatus | null;
|
|
104
|
+
/** Registry chainId of the matched item (null = chain-agnostic). */
|
|
105
|
+
registryChainId: number | null;
|
|
106
|
+
note: string | null;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Registry-driven trust evaluation for a single address on a given chain.
|
|
110
|
+
* This is the ONLY sanctioned way for risk logic to derive spender/counterparty
|
|
111
|
+
* trust: hardcoded "known address" maps outside the registry are forbidden
|
|
112
|
+
* (truth-model rule: do not upgrade anything to VERIFIED without evidence).
|
|
113
|
+
* An address registered for a different chainId gets NO recognition — testnet
|
|
114
|
+
* provenance never carries to mainnet.
|
|
115
|
+
*/
|
|
116
|
+
export declare function addressTrustEvidence(address: string, chainId: number): AddressTrustEvidence;
|
|
117
|
+
/**
|
|
118
|
+
* Name/alias lookup — recognition only. A name match carries NO address
|
|
119
|
+
* verification and must never relax a decision, regardless of the item's
|
|
120
|
+
* safetyUse (which applies to address-matched evidence only).
|
|
121
|
+
*/
|
|
122
|
+
export declare function lookupRegistryByName(name: string): EcosystemItem | undefined;
|
|
123
|
+
/** Registry item by stable id. */
|
|
124
|
+
export declare function getRegistryItem(id: string): EcosystemItem | undefined;
|
|
125
|
+
export {};
|
|
126
|
+
//# 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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"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
// ─── SafeHands Canonical Ecosystem Registry (types + validation) ────────
|
|
2
|
+
// The single machine-readable source of truth for repo-bundled ecosystem
|
|
3
|
+
// knowledge: canonical contracts, canonical tokens, price feeds, the SafeHands
|
|
4
|
+
// on-chain contracts, provider endpoints, and known-but-unverified protocols.
|
|
5
|
+
//
|
|
6
|
+
// Truth-model rules enforced here (see docs/DECISION_CONTRACT.md §Evidence):
|
|
7
|
+
// • `safetyUse: "allow_eligible"` — the ONLY safetyUse that may contribute to
|
|
8
|
+
// an ALLOW — requires verificationStatus VERIFIED, at least one verified
|
|
9
|
+
// contract address, and at least one cited evidence source. Enforced by
|
|
10
|
+
// validateEcosystemRegistry(), not convention.
|
|
11
|
+
// • Name/alias matches are recognition only: an alias match without an
|
|
12
|
+
// address match must never relax risk.
|
|
13
|
+
// • `endpoint: null` is a first-class honest value meaning NOT_CONFIGURED —
|
|
14
|
+
// generators and consumers must never fill it in.
|
|
15
|
+
// • KNOWN_ECOSYSTEM (the name is real in the Pharos ecosystem) is deliberately
|
|
16
|
+
// distinct from verificationStatus VERIFIED (SafeHands holds evidence).
|
|
17
|
+
//
|
|
18
|
+
// Provider *awareness* entries (CCIP, LayerZero, Fordefi, …) stay in
|
|
19
|
+
// src/lib/pharos/ecosystem.ts — they carry no bundled addresses/endpoints and
|
|
20
|
+
// are not part of this registry. The Anvita hosted-skill asset JSONs are
|
|
21
|
+
// GENERATED from this registry by scripts/sync-anvita-assets.ts.
|
|
22
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
23
|
+
import { ECOSYSTEM_REGISTRY_ITEMS } from "../data/ecosystemRegistry.data.js";
|
|
24
|
+
/** The canonical registry (see src/data/ecosystemRegistry.data.ts). */
|
|
25
|
+
export const ECOSYSTEM_REGISTRY = ECOSYSTEM_REGISTRY_ITEMS;
|
|
26
|
+
const ADDRESS_RE = /^0x[0-9a-fA-F]{40}$/;
|
|
27
|
+
/**
|
|
28
|
+
* Validate the registry against the fail-closed truth-model rules. Returns a
|
|
29
|
+
* list of human-readable violations (empty = valid). Enforced by tests so a
|
|
30
|
+
* registry edit that weakens the rules fails CI.
|
|
31
|
+
*/
|
|
32
|
+
export function validateEcosystemRegistry(items = ECOSYSTEM_REGISTRY) {
|
|
33
|
+
const errors = [];
|
|
34
|
+
const seenIds = new Set();
|
|
35
|
+
for (const item of items) {
|
|
36
|
+
const at = `item "${item.id}"`;
|
|
37
|
+
if (seenIds.has(item.id))
|
|
38
|
+
errors.push(`${at}: duplicate id.`);
|
|
39
|
+
seenIds.add(item.id);
|
|
40
|
+
if (!item.name.trim())
|
|
41
|
+
errors.push(`${at}: empty name.`);
|
|
42
|
+
for (const c of item.contracts) {
|
|
43
|
+
if (!ADDRESS_RE.test(c.address))
|
|
44
|
+
errors.push(`${at}: invalid contract address "${c.address}".`);
|
|
45
|
+
if (!c.label.trim())
|
|
46
|
+
errors.push(`${at}: contract ${c.address} has an empty label.`);
|
|
47
|
+
}
|
|
48
|
+
const addrs = item.contracts.map((c) => c.address.toLowerCase());
|
|
49
|
+
if (new Set(addrs).size !== addrs.length)
|
|
50
|
+
errors.push(`${at}: duplicate contract addresses.`);
|
|
51
|
+
// VERIFIED requires citations — an uncited entry is a claim, not truth.
|
|
52
|
+
if (item.verificationStatus === "VERIFIED" && item.evidenceSources.length === 0) {
|
|
53
|
+
errors.push(`${at}: verificationStatus VERIFIED requires at least one evidence source.`);
|
|
54
|
+
}
|
|
55
|
+
// allow_eligible is the only safetyUse that can contribute to ALLOW — gate it hard.
|
|
56
|
+
if (item.safetyUse === "allow_eligible") {
|
|
57
|
+
if (item.verificationStatus !== "VERIFIED") {
|
|
58
|
+
errors.push(`${at}: allow_eligible requires verificationStatus VERIFIED (got ${item.verificationStatus}).`);
|
|
59
|
+
}
|
|
60
|
+
if (item.ecosystemStatus !== "VERIFIED") {
|
|
61
|
+
errors.push(`${at}: allow_eligible requires ecosystemStatus VERIFIED (got ${item.ecosystemStatus}).`);
|
|
62
|
+
}
|
|
63
|
+
if (item.contracts.length === 0) {
|
|
64
|
+
errors.push(`${at}: allow_eligible requires at least one contract address (name alone must never produce ALLOW).`);
|
|
65
|
+
}
|
|
66
|
+
if (item.contracts.some((c) => c.verificationStatus !== "VERIFIED")) {
|
|
67
|
+
errors.push(`${at}: allow_eligible requires every contract to be VERIFIED.`);
|
|
68
|
+
}
|
|
69
|
+
if (item.evidenceSources.length === 0) {
|
|
70
|
+
errors.push(`${at}: allow_eligible requires cited evidence sources.`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
for (const p of item.providers) {
|
|
74
|
+
if (p.endpoint === null && p.status !== "not_configured" && p.status !== "not_implemented") {
|
|
75
|
+
// price_feed/rpc-style providers whose "endpoint" is on-chain or env-only are
|
|
76
|
+
// allowed to be implemented without a URL, but must say so via configVia/note.
|
|
77
|
+
const onChainOrEnv = p.kind === "price_feed" || p.configVia !== null;
|
|
78
|
+
if (!onChainOrEnv) {
|
|
79
|
+
errors.push(`${at}: provider kind=${p.kind} has no endpoint but claims status "${p.status}"; must be not_configured/not_implemented, or document configVia.`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (p.endpoint !== null && !p.endpoint.startsWith("https://")) {
|
|
83
|
+
errors.push(`${at}: provider kind=${p.kind} endpoint must be https (got "${p.endpoint}").`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (item.ecosystemStatus === "NOT_CONFIGURED") {
|
|
87
|
+
if (item.providers.length === 0 || item.providers.some((p) => p.endpoint !== null)) {
|
|
88
|
+
errors.push(`${at}: NOT_CONFIGURED requires providers with null endpoints only.`);
|
|
89
|
+
}
|
|
90
|
+
if (item.safetyUse === "allow_eligible") {
|
|
91
|
+
errors.push(`${at}: NOT_CONFIGURED can never be allow_eligible.`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (item.ecosystemStatus === "KNOWN_ECOSYSTEM" && item.safetyUse === "allow_eligible") {
|
|
95
|
+
errors.push(`${at}: KNOWN_ECOSYSTEM (name recognition) can never be allow_eligible: knowing a name is not holding proof.`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return errors;
|
|
99
|
+
}
|
|
100
|
+
const ADDRESS_INDEX = (() => {
|
|
101
|
+
const m = new Map();
|
|
102
|
+
for (const item of ECOSYSTEM_REGISTRY) {
|
|
103
|
+
for (const contract of item.contracts) {
|
|
104
|
+
m.set(contract.address.toLowerCase(), { item, contract });
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return m;
|
|
108
|
+
})();
|
|
109
|
+
/** Address-matched lookup — the only lookup that may feed allow_eligible handling. */
|
|
110
|
+
export function lookupRegistryByAddress(address) {
|
|
111
|
+
if (!address)
|
|
112
|
+
return undefined;
|
|
113
|
+
return ADDRESS_INDEX.get(address.trim().toLowerCase());
|
|
114
|
+
}
|
|
115
|
+
const NO_TRUST = {
|
|
116
|
+
recognized: false,
|
|
117
|
+
verifiedCanonical: false,
|
|
118
|
+
itemId: null,
|
|
119
|
+
itemName: null,
|
|
120
|
+
contractLabel: null,
|
|
121
|
+
safetyUse: null,
|
|
122
|
+
verificationStatus: null,
|
|
123
|
+
registryChainId: null,
|
|
124
|
+
note: null,
|
|
125
|
+
};
|
|
126
|
+
/**
|
|
127
|
+
* Registry-driven trust evaluation for a single address on a given chain.
|
|
128
|
+
* This is the ONLY sanctioned way for risk logic to derive spender/counterparty
|
|
129
|
+
* trust: hardcoded "known address" maps outside the registry are forbidden
|
|
130
|
+
* (truth-model rule: do not upgrade anything to VERIFIED without evidence).
|
|
131
|
+
* An address registered for a different chainId gets NO recognition — testnet
|
|
132
|
+
* provenance never carries to mainnet.
|
|
133
|
+
*/
|
|
134
|
+
export function addressTrustEvidence(address, chainId) {
|
|
135
|
+
const hit = lookupRegistryByAddress(address);
|
|
136
|
+
if (!hit)
|
|
137
|
+
return NO_TRUST;
|
|
138
|
+
const base = {
|
|
139
|
+
itemId: hit.item.id,
|
|
140
|
+
itemName: hit.item.name,
|
|
141
|
+
contractLabel: hit.contract.label,
|
|
142
|
+
safetyUse: hit.item.safetyUse,
|
|
143
|
+
verificationStatus: hit.item.verificationStatus,
|
|
144
|
+
registryChainId: hit.item.chainId,
|
|
145
|
+
};
|
|
146
|
+
const chainMatches = hit.item.chainId === null || hit.item.chainId === chainId;
|
|
147
|
+
if (!chainMatches) {
|
|
148
|
+
return {
|
|
149
|
+
...NO_TRUST,
|
|
150
|
+
...base,
|
|
151
|
+
note: `Address matches registry entry "${hit.contract.label}" registered for chainId ${hit.item.chainId}, not the active chain ${chainId}; recognition does not carry across chains.`,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
...base,
|
|
156
|
+
recognized: true,
|
|
157
|
+
verifiedCanonical: hit.item.safetyUse === "allow_eligible" &&
|
|
158
|
+
hit.item.verificationStatus === "VERIFIED" &&
|
|
159
|
+
hit.contract.verificationStatus === "VERIFIED",
|
|
160
|
+
note: hit.contract.note ?? null,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Name/alias lookup — recognition only. A name match carries NO address
|
|
165
|
+
* verification and must never relax a decision, regardless of the item's
|
|
166
|
+
* safetyUse (which applies to address-matched evidence only).
|
|
167
|
+
*/
|
|
168
|
+
export function lookupRegistryByName(name) {
|
|
169
|
+
const q = (name ?? "").trim().toLowerCase();
|
|
170
|
+
if (!q)
|
|
171
|
+
return undefined;
|
|
172
|
+
return ECOSYSTEM_REGISTRY.find((item) => item.name.toLowerCase() === q || item.aliases.some((a) => a.toLowerCase() === q));
|
|
173
|
+
}
|
|
174
|
+
/** Registry item by stable id. */
|
|
175
|
+
export function getRegistryItem(id) {
|
|
176
|
+
return ECOSYSTEM_REGISTRY.find((item) => item.id === id);
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=ecosystemRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ecosystemRegistry.js","sourceRoot":"","sources":["../../src/lib/ecosystemRegistry.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/envLoader.d.ts
CHANGED
|
File without changes
|
|
File without changes
|