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
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
// ────────────────────────────────────────────────────────────────────────
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
import { publicClient } from "../lib/pharosClient.js";
|
|
6
|
-
import { DODO_APPROVE_ADDRESS,
|
|
7
|
-
import { formatUnits, parseUnits } from "viem";
|
|
8
|
-
import { ok } from "../lib/toolResponse.js";
|
|
6
|
+
import { DODO_APPROVE_ADDRESS, ERC20_ABI, CHAIN_ID, PHAROS_ENVIRONMENT, activeTokenMap, activeTokenDecimals, } from "../lib/constants.js";
|
|
7
|
+
import { formatUnits, isAddress, parseUnits } from "viem";
|
|
8
|
+
import { ok, fail } from "../lib/toolResponse.js";
|
|
9
|
+
import { lookupCanonical } from "../lib/analysis/contractIntel.js";
|
|
9
10
|
export const checkAllowanceSchema = z.object({
|
|
10
11
|
walletAddress: z.string().describe("Wallet address to check allowance for"),
|
|
11
12
|
token: z.enum(["USDC", "USDT"]).describe("ERC-20 token to check"),
|
|
@@ -16,11 +17,28 @@ export const checkAllowanceTool = {
|
|
|
16
17
|
description: "Check ERC-20 token allowance granted to DODO_APPROVE_ADDRESS for swaps. Returns current allowance and whether approval is needed.",
|
|
17
18
|
inputSchema: checkAllowanceSchema,
|
|
18
19
|
};
|
|
20
|
+
function resolveAllowanceToken(symbol) {
|
|
21
|
+
const map = activeTokenMap();
|
|
22
|
+
const decimalsMap = activeTokenDecimals();
|
|
23
|
+
const tokenAddress = map[symbol];
|
|
24
|
+
if (!tokenAddress)
|
|
25
|
+
return null;
|
|
26
|
+
return {
|
|
27
|
+
tokenAddress,
|
|
28
|
+
decimals: decimalsMap[symbol] ?? decimalsMap[tokenAddress.toLowerCase()] ?? 18,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
19
31
|
export async function handleCheckAllowance(raw) {
|
|
20
32
|
const input = checkAllowanceSchema.parse(raw);
|
|
33
|
+
if (!isAddress(input.walletAddress)) {
|
|
34
|
+
return fail("INVALID_WALLET_ADDRESS", `Invalid wallet address: ${input.walletAddress}`, false, "check_allowance");
|
|
35
|
+
}
|
|
36
|
+
const resolved = resolveAllowanceToken(input.token);
|
|
37
|
+
if (!resolved) {
|
|
38
|
+
return fail("UNSUPPORTED_TOKEN", `${input.token} is not configured for ${PHAROS_ENVIRONMENT} (${CHAIN_ID}). No allowance query was made against a fallback/testnet address.`, false, "check_allowance");
|
|
39
|
+
}
|
|
21
40
|
const walletAddr = input.walletAddress;
|
|
22
|
-
const tokenAddress
|
|
23
|
-
const decimals = 6;
|
|
41
|
+
const { tokenAddress, decimals } = resolved;
|
|
24
42
|
const allowanceRaw = (await publicClient.readContract({
|
|
25
43
|
address: tokenAddress,
|
|
26
44
|
abi: ERC20_ABI,
|
|
@@ -42,16 +60,20 @@ export async function handleCheckAllowance(raw) {
|
|
|
42
60
|
needsApproval = !isApproved;
|
|
43
61
|
approvalNote = "Heuristic (no amount provided): any nonzero allowance counts as approved. Pass 'amount' for an exact check.";
|
|
44
62
|
}
|
|
63
|
+
const spenderCanonical = lookupCanonical(DODO_APPROVE_ADDRESS);
|
|
45
64
|
return ok({
|
|
46
65
|
token: input.token,
|
|
47
66
|
tokenAddress,
|
|
48
67
|
walletAddress: input.walletAddress,
|
|
49
68
|
spender: DODO_APPROVE_ADDRESS,
|
|
69
|
+
spenderRecognition: { recognized: Boolean(spenderCanonical), label: spenderCanonical?.label ?? "DODO/FaroSwap approve proxy (project-configured allowlist target; not registry-verified)" },
|
|
50
70
|
allowance: allowanceFormatted,
|
|
51
71
|
allowanceRaw: allowanceRaw.toString(),
|
|
52
72
|
isApproved,
|
|
53
73
|
needsApproval,
|
|
54
74
|
approvalNote,
|
|
75
|
+
chainId: CHAIN_ID,
|
|
76
|
+
environment: PHAROS_ENVIRONMENT,
|
|
55
77
|
});
|
|
56
78
|
}
|
|
57
79
|
//# sourceMappingURL=checkAllowance.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkAllowance.js","sourceRoot":"","sources":["../../src/tools/checkAllowance.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,0DAA0D;AAC1D,2EAA2E;AAE3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EACL,oBAAoB,EACpB,
|
|
1
|
+
{"version":3,"file":"checkAllowance.js","sourceRoot":"","sources":["../../src/tools/checkAllowance.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,8 @@ export declare const checkTokenSecuritySchema: z.ZodObject<{
|
|
|
3
3
|
tokenAddress: z.ZodString;
|
|
4
4
|
chainId: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
5
5
|
}, "strip", z.ZodTypeAny, {
|
|
6
|
-
tokenAddress: string;
|
|
7
6
|
chainId: number;
|
|
7
|
+
tokenAddress: string;
|
|
8
8
|
}, {
|
|
9
9
|
tokenAddress: string;
|
|
10
10
|
chainId?: number | undefined;
|
|
@@ -17,18 +17,62 @@ export declare const checkTokenSecurityTool: {
|
|
|
17
17
|
tokenAddress: z.ZodString;
|
|
18
18
|
chainId: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
19
19
|
}, "strip", z.ZodTypeAny, {
|
|
20
|
-
tokenAddress: string;
|
|
21
20
|
chainId: number;
|
|
21
|
+
tokenAddress: string;
|
|
22
22
|
}, {
|
|
23
23
|
tokenAddress: string;
|
|
24
24
|
chainId?: number | undefined;
|
|
25
25
|
}>;
|
|
26
26
|
};
|
|
27
|
-
export
|
|
27
|
+
export interface GoplusTokenProfile {
|
|
28
|
+
/** Display-only identity metadata — never used in scoring or policy decisions. */
|
|
29
|
+
tokenName?: string;
|
|
30
|
+
tokenSymbol?: string;
|
|
31
|
+
isHoneypot: boolean;
|
|
32
|
+
buyTaxPercent: number;
|
|
33
|
+
sellTaxPercent: number;
|
|
34
|
+
isMintable: boolean;
|
|
35
|
+
transferPausable: boolean;
|
|
36
|
+
isProxy: boolean;
|
|
37
|
+
ownerAddress: string;
|
|
38
|
+
creatorAddress: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Parse a GoPlus token_security result entry into a normalized profile, or return
|
|
42
|
+
* `null` when the schema is unrecognized (the honeypot decision field is missing or
|
|
43
|
+
* not a boolean-ish value). Pure + synchronous so the fail-open guard is unit-testable
|
|
44
|
+
* with no network. Callers MUST treat null as "data unavailable" and fail closed.
|
|
45
|
+
*/
|
|
46
|
+
export declare function interpretGoplusTokenResult(details: unknown): GoplusTokenProfile | null;
|
|
47
|
+
/**
|
|
48
|
+
* Best-effort, DISPLAY-ONLY token identity from GoPlus. Reads ONLY token_name /
|
|
49
|
+
* token_symbol and deliberately ignores the security schema: a payload that
|
|
50
|
+
* check_token_security fails closed on (e.g. is_honeypot missing) can still carry
|
|
51
|
+
* identity metadata. Never throws — returns {} on any timeout/network/parse failure.
|
|
52
|
+
* Unlike the security check (which keeps the stronger fetchGoplus retry path),
|
|
53
|
+
* this is optional enrichment: a single attempt with a short 3s timeout so it
|
|
54
|
+
* cannot make token_registry_status slow.
|
|
55
|
+
* MUST NOT be used for risk scoring, policy decisions, write gates, or
|
|
56
|
+
* allow/block logic; it does not verify anything about the token.
|
|
57
|
+
*/
|
|
58
|
+
export declare function fetchGoplusTokenIdentity(tokenAddress: string, chainId?: number): Promise<{
|
|
59
|
+
tokenName?: string;
|
|
60
|
+
tokenSymbol?: string;
|
|
61
|
+
}>;
|
|
62
|
+
/**
|
|
63
|
+
* Network metadata for the tool response, derived from the ACTIVE network
|
|
64
|
+
* instead of a hardcoded `isMainnet: true` (which misreported on
|
|
65
|
+
* atlantic-testnet). Unknown chains report false. Pure + exported for tests.
|
|
66
|
+
*/
|
|
67
|
+
export declare function tokenSecurityNetworkMetadata(chainId: number): {
|
|
28
68
|
chainId: number;
|
|
29
69
|
environment: string;
|
|
30
70
|
isMainnet: boolean;
|
|
71
|
+
};
|
|
72
|
+
export declare function handleCheckTokenSecurity(raw: CheckTokenSecurityInput): Promise<import("../sdk.js").ToolFailure | import("../sdk.js").ToolSuccess<{
|
|
31
73
|
tokenAddress: `0x${string}`;
|
|
74
|
+
tokenName: string | undefined;
|
|
75
|
+
tokenSymbol: string | undefined;
|
|
32
76
|
securityProfile: {
|
|
33
77
|
safetyScore: number;
|
|
34
78
|
isHoneypot: boolean;
|
|
@@ -37,11 +81,24 @@ export declare function handleCheckTokenSecurity(raw: CheckTokenSecurityInput):
|
|
|
37
81
|
isMintable: boolean;
|
|
38
82
|
transferPausable: boolean;
|
|
39
83
|
isProxy: boolean;
|
|
40
|
-
ownerAddress:
|
|
41
|
-
creatorAddress:
|
|
84
|
+
ownerAddress: string;
|
|
85
|
+
creatorAddress: string;
|
|
42
86
|
};
|
|
43
87
|
flags: string[];
|
|
44
88
|
source: string;
|
|
45
89
|
sourceStatus: string;
|
|
90
|
+
chainId: number;
|
|
91
|
+
environment: string;
|
|
92
|
+
isMainnet: boolean;
|
|
46
93
|
}>>;
|
|
94
|
+
export type TokenSecurityVerdict = "ok" | "review" | "block";
|
|
95
|
+
export interface TokenSecurityGateResult {
|
|
96
|
+
verdict: TokenSecurityVerdict;
|
|
97
|
+
/** Value to pass as evaluateActionPolicy input.tokenSecurityStatus. */
|
|
98
|
+
policyStatus: "ok" | "unknown" | "unavailable";
|
|
99
|
+
flags: string[];
|
|
100
|
+
safetyScore?: number;
|
|
101
|
+
detail?: string;
|
|
102
|
+
}
|
|
103
|
+
export declare function evaluateTokenSecurityGate(tokenAddress: string, chainId?: number): Promise<TokenSecurityGateResult>;
|
|
47
104
|
//# sourceMappingURL=checkTokenSecurity.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkTokenSecurity.d.ts","sourceRoot":"","sources":["../../src/tools/checkTokenSecurity.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,wBAAwB;;;;;;;;;EAGnC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE/E,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;CAKlC,CAAC;
|
|
1
|
+
{"version":3,"file":"checkTokenSecurity.d.ts","sourceRoot":"","sources":["../../src/tools/checkTokenSecurity.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,wBAAwB;;;;;;;;;EAGnC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE/E,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;CAKlC,CAAC;AA+CF,MAAM,WAAW,kBAAkB;IACjC,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAiBtF;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,wBAAwB,CAC5C,YAAY,EAAE,MAAM,EACpB,OAAO,SAAW,GACjB,OAAO,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA0BvD;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB,CAMA;AAED,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,uBAAuB;;;;;;;;;;;;;;;;;;aAXhE,MAAM;iBACF,MAAM;eACR,OAAO;IAuGnB;AAgBD,MAAM,MAAM,oBAAoB,GAAG,IAAI,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE7D,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,oBAAoB,CAAC;IAC9B,uEAAuE;IACvE,YAAY,EAAE,IAAI,GAAG,SAAS,GAAG,aAAa,CAAC;IAC/C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAUD,wBAAsB,yBAAyB,CAC7C,YAAY,EAAE,MAAM,EACpB,OAAO,SAAW,GACjB,OAAO,CAAC,uBAAuB,CAAC,CA8BlC"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// ────────────────────────────────────────────────────────────────────────
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
import { isAddress } from "viem";
|
|
6
|
-
import { CHAIN_ID, PHAROS_ENVIRONMENT } from "../lib/constants.js";
|
|
6
|
+
import { CHAIN_ID, IS_MAINNET, PHAROS_ENVIRONMENT, SAFEHANDS_USER_AGENT, activeTokenMap } from "../lib/constants.js";
|
|
7
7
|
import { fetchWithTimeoutAndRetry } from "../lib/http.js";
|
|
8
8
|
import { classifyExternalError, fail, ok } from "../lib/toolResponse.js";
|
|
9
9
|
export const checkTokenSecuritySchema = z.object({
|
|
@@ -15,6 +15,124 @@ export const checkTokenSecurityTool = {
|
|
|
15
15
|
description: "Check token contract security (honeypot, mintable, ownership privileges, tax) via GoPlus Security API.",
|
|
16
16
|
inputSchema: checkTokenSecuritySchema,
|
|
17
17
|
};
|
|
18
|
+
/**
|
|
19
|
+
* GoPlus base URL — env-configurable via GOPLUS_API_BASE (same variable the
|
|
20
|
+
* hosted Anvita engine honors), defaulting to the keyless public API. Read at
|
|
21
|
+
* call time so tests/operators can repoint it without a process restart.
|
|
22
|
+
*/
|
|
23
|
+
function goplusApiBase() {
|
|
24
|
+
return (process.env.GOPLUS_API_BASE || "https://api.gopluslabs.io").replace(/\/+$/, "");
|
|
25
|
+
}
|
|
26
|
+
// GOPLUS_API_BASE is operator-controlled, so both GoPlus call sites go through the
|
|
27
|
+
// SSRF-safe layer (DNS-pinned, blocklist-enforcing) instead of bare fetch. The
|
|
28
|
+
// security check keeps the stronger retry budget; identity enrichment stays
|
|
29
|
+
// single-attempt with a short timeout (see fetchGoplusTokenIdentity).
|
|
30
|
+
function fetchGoplus(url) {
|
|
31
|
+
return fetchWithTimeoutAndRetry(url, {
|
|
32
|
+
timeoutMs: 10_000,
|
|
33
|
+
retries: 2,
|
|
34
|
+
retryDelayMs: 300,
|
|
35
|
+
headers: {
|
|
36
|
+
accept: "application/json",
|
|
37
|
+
"user-agent": SAFEHANDS_USER_AGENT,
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
// ─── GoPlus schema parsing (fail-closed) ───────────────────────────────
|
|
42
|
+
// GoPlus's Pharos (chain 1672) support is new and its response schema is still
|
|
43
|
+
// maturing. GoPlus encodes booleans as "1"/"0" strings; we tolerate numeric/boolean
|
|
44
|
+
// drift too, so a retyped value can't make a real honeypot read as false. Crucially,
|
|
45
|
+
// if the honeypot decision field is absent or in an unrecognized shape,
|
|
46
|
+
// interpretGoplusTokenResult returns null so the caller FAILS CLOSED — it never scores
|
|
47
|
+
// an unreadable response as safetyScore=100 (an effective ALLOW on data never assessed).
|
|
48
|
+
function goplusTruthy(v) {
|
|
49
|
+
return v === "1" || v === 1 || v === true;
|
|
50
|
+
}
|
|
51
|
+
function goplusFlagKnown(v) {
|
|
52
|
+
return v === "1" || v === "0" || v === 1 || v === 0 || v === true || v === false;
|
|
53
|
+
}
|
|
54
|
+
// Untrusted external strings, display-only: trim + cap; absent/non-string → undefined.
|
|
55
|
+
// Identity metadata never influences any fail-closed decision.
|
|
56
|
+
function optionalString(v) {
|
|
57
|
+
return typeof v === "string" && v.trim() ? v.trim().slice(0, 128) : undefined;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Parse a GoPlus token_security result entry into a normalized profile, or return
|
|
61
|
+
* `null` when the schema is unrecognized (the honeypot decision field is missing or
|
|
62
|
+
* not a boolean-ish value). Pure + synchronous so the fail-open guard is unit-testable
|
|
63
|
+
* with no network. Callers MUST treat null as "data unavailable" and fail closed.
|
|
64
|
+
*/
|
|
65
|
+
export function interpretGoplusTokenResult(details) {
|
|
66
|
+
if (!details || typeof details !== "object")
|
|
67
|
+
return null;
|
|
68
|
+
const d = details;
|
|
69
|
+
if (!goplusFlagKnown(d.is_honeypot))
|
|
70
|
+
return null; // schema drift → fail closed, never "safe"
|
|
71
|
+
const zero = "0x0000000000000000000000000000000000000000";
|
|
72
|
+
return {
|
|
73
|
+
tokenName: optionalString(d.token_name),
|
|
74
|
+
tokenSymbol: optionalString(d.token_symbol),
|
|
75
|
+
isHoneypot: goplusTruthy(d.is_honeypot),
|
|
76
|
+
buyTaxPercent: (parseFloat(String(d.buy_tax ?? "")) || 0) * 100,
|
|
77
|
+
sellTaxPercent: (parseFloat(String(d.sell_tax ?? "")) || 0) * 100,
|
|
78
|
+
isMintable: goplusTruthy(d.is_mintable),
|
|
79
|
+
transferPausable: goplusTruthy(d.transfer_pausable),
|
|
80
|
+
isProxy: goplusTruthy(d.is_proxy),
|
|
81
|
+
ownerAddress: (typeof d.owner_address === "string" && d.owner_address) || zero,
|
|
82
|
+
creatorAddress: (typeof d.creator_address === "string" && d.creator_address) || zero,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Best-effort, DISPLAY-ONLY token identity from GoPlus. Reads ONLY token_name /
|
|
87
|
+
* token_symbol and deliberately ignores the security schema: a payload that
|
|
88
|
+
* check_token_security fails closed on (e.g. is_honeypot missing) can still carry
|
|
89
|
+
* identity metadata. Never throws — returns {} on any timeout/network/parse failure.
|
|
90
|
+
* Unlike the security check (which keeps the stronger fetchGoplus retry path),
|
|
91
|
+
* this is optional enrichment: a single attempt with a short 3s timeout so it
|
|
92
|
+
* cannot make token_registry_status slow.
|
|
93
|
+
* MUST NOT be used for risk scoring, policy decisions, write gates, or
|
|
94
|
+
* allow/block logic; it does not verify anything about the token.
|
|
95
|
+
*/
|
|
96
|
+
export async function fetchGoplusTokenIdentity(tokenAddress, chainId = CHAIN_ID) {
|
|
97
|
+
const address = tokenAddress.toLowerCase().trim();
|
|
98
|
+
if (!isAddress(address))
|
|
99
|
+
return {};
|
|
100
|
+
try {
|
|
101
|
+
const res = await fetchWithTimeoutAndRetry(`${goplusApiBase()}/api/v1/token_security/${chainId}?contract_addresses=${address}`, {
|
|
102
|
+
timeoutMs: 3_000,
|
|
103
|
+
retries: 0,
|
|
104
|
+
headers: {
|
|
105
|
+
accept: "application/json",
|
|
106
|
+
"user-agent": SAFEHANDS_USER_AGENT,
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
if (!res.ok)
|
|
110
|
+
return {};
|
|
111
|
+
const data = (await res.json());
|
|
112
|
+
const d = data?.result?.[address];
|
|
113
|
+
if (!d || typeof d !== "object")
|
|
114
|
+
return {};
|
|
115
|
+
return {
|
|
116
|
+
tokenName: optionalString(d.token_name),
|
|
117
|
+
tokenSymbol: optionalString(d.token_symbol),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
return {};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Network metadata for the tool response, derived from the ACTIVE network
|
|
126
|
+
* instead of a hardcoded `isMainnet: true` (which misreported on
|
|
127
|
+
* atlantic-testnet). Unknown chains report false. Pure + exported for tests.
|
|
128
|
+
*/
|
|
129
|
+
export function tokenSecurityNetworkMetadata(chainId) {
|
|
130
|
+
return {
|
|
131
|
+
chainId,
|
|
132
|
+
environment: chainId === CHAIN_ID ? PHAROS_ENVIRONMENT : "custom-chain",
|
|
133
|
+
isMainnet: chainId === CHAIN_ID ? IS_MAINNET : false,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
18
136
|
export async function handleCheckTokenSecurity(raw) {
|
|
19
137
|
const input = checkTokenSecuritySchema.parse(raw);
|
|
20
138
|
const address = input.tokenAddress.toLowerCase().trim();
|
|
@@ -22,16 +140,12 @@ export async function handleCheckTokenSecurity(raw) {
|
|
|
22
140
|
if (!isAddress(address)) {
|
|
23
141
|
return fail("INVALID_TOKEN_ADDRESS", `Invalid token address: ${input.tokenAddress}`, false, "check_token_security");
|
|
24
142
|
}
|
|
25
|
-
// GoPlus
|
|
26
|
-
//
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"Token security data is unavailable for this chain. Use token_registry_status to check " +
|
|
30
|
-
"whether a token address is canonical, custom, or unknown on Pharos.", false, "check_token_security");
|
|
31
|
-
}
|
|
32
|
-
const url = `https://api.gopluslabs.io/api/v1/token_security/${chainId}?contract_addresses=${address}`;
|
|
143
|
+
// GoPlus supports Pharos Mainnet (chain 1672) — a third-party claim; results are
|
|
144
|
+
// risk intel, never identity. Base URL honors GOPLUS_API_BASE like the hosted
|
|
145
|
+
// Anvita engine, so both runtimes point at the same configurable truth source.
|
|
146
|
+
const url = `${goplusApiBase()}/api/v1/token_security/${chainId}?contract_addresses=${address}`;
|
|
33
147
|
try {
|
|
34
|
-
const res = await
|
|
148
|
+
const res = await fetchGoplus(url);
|
|
35
149
|
if (!res.ok) {
|
|
36
150
|
throw new Error(`GoPlus API returned status ${res.status}`);
|
|
37
151
|
}
|
|
@@ -40,11 +154,12 @@ export async function handleCheckTokenSecurity(raw) {
|
|
|
40
154
|
return fail("TOKEN_SECURITY_DATA_UNAVAILABLE", data.message || "Token security data is not available for this contract on the specified chain.", true, "goplus_api");
|
|
41
155
|
}
|
|
42
156
|
const details = data.result[address];
|
|
43
|
-
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
157
|
+
// Refuse to score an unrecognized GoPlus schema as "safe" — fail closed.
|
|
158
|
+
const profile = interpretGoplusTokenResult(details);
|
|
159
|
+
if (!profile) {
|
|
160
|
+
return fail("TOKEN_SECURITY_DATA_UNAVAILABLE", "GoPlus returned an unrecognized token-security schema for this contract (honeypot signal missing or not boolean). Failing closed: token treated as unreviewed, not safe.", true, "goplus_api");
|
|
161
|
+
}
|
|
162
|
+
const { isHoneypot, buyTaxPercent: buyTax, sellTaxPercent: sellTax, isMintable, transferPausable } = profile;
|
|
48
163
|
let riskScore = 0;
|
|
49
164
|
const flags = [];
|
|
50
165
|
if (isHoneypot) {
|
|
@@ -69,10 +184,10 @@ export async function handleCheckTokenSecurity(raw) {
|
|
|
69
184
|
}
|
|
70
185
|
const safetyScore = Math.max(0, 100 - riskScore);
|
|
71
186
|
return ok({
|
|
72
|
-
chainId,
|
|
73
|
-
environment: chainId === CHAIN_ID ? PHAROS_ENVIRONMENT : "custom-chain",
|
|
74
|
-
isMainnet: false,
|
|
187
|
+
...tokenSecurityNetworkMetadata(chainId),
|
|
75
188
|
tokenAddress: address,
|
|
189
|
+
tokenName: profile.tokenName,
|
|
190
|
+
tokenSymbol: profile.tokenSymbol,
|
|
76
191
|
securityProfile: {
|
|
77
192
|
safetyScore,
|
|
78
193
|
isHoneypot,
|
|
@@ -80,9 +195,9 @@ export async function handleCheckTokenSecurity(raw) {
|
|
|
80
195
|
sellTaxPercent: sellTax,
|
|
81
196
|
isMintable,
|
|
82
197
|
transferPausable,
|
|
83
|
-
isProxy:
|
|
84
|
-
ownerAddress:
|
|
85
|
-
creatorAddress:
|
|
198
|
+
isProxy: profile.isProxy,
|
|
199
|
+
ownerAddress: profile.ownerAddress,
|
|
200
|
+
creatorAddress: profile.creatorAddress,
|
|
86
201
|
},
|
|
87
202
|
flags,
|
|
88
203
|
source: "goplus_api",
|
|
@@ -93,4 +208,34 @@ export async function handleCheckTokenSecurity(raw) {
|
|
|
93
208
|
return classifyExternalError("goplus_api", err);
|
|
94
209
|
}
|
|
95
210
|
}
|
|
211
|
+
/** Address is a canonical token in the active-network registry (identity verified). */
|
|
212
|
+
function isRegistryToken(address) {
|
|
213
|
+
const a = address.toLowerCase();
|
|
214
|
+
return Object.values(activeTokenMap()).some((v) => typeof v === "string" && v.toLowerCase() === a);
|
|
215
|
+
}
|
|
216
|
+
export async function evaluateTokenSecurityGate(tokenAddress, chainId = CHAIN_ID) {
|
|
217
|
+
if (!isAddress(tokenAddress)) {
|
|
218
|
+
// Unresolvable token → nothing reviewable → fail closed (not caller-confirmable).
|
|
219
|
+
return { verdict: "review", policyStatus: "unavailable", flags: [], detail: "Token address could not be resolved for security review." };
|
|
220
|
+
}
|
|
221
|
+
const res = await handleCheckTokenSecurity({ tokenAddress, chainId });
|
|
222
|
+
if (!res.success) {
|
|
223
|
+
// GoPlus unavailable / token not indexed → nothing was reviewed. Registry-canonical
|
|
224
|
+
// tokens stay caller-confirmable (identity verified on the official token registry);
|
|
225
|
+
// everything else is "unavailable" and the write gate fails closed on it.
|
|
226
|
+
if (isRegistryToken(tokenAddress)) {
|
|
227
|
+
return { verdict: "review", policyStatus: "unknown", flags: [], detail: `${res.error.message} Token address matches the official active-network token registry: identity verified; GoPlus intel unavailable.` };
|
|
228
|
+
}
|
|
229
|
+
return { verdict: "review", policyStatus: "unavailable", flags: [], detail: res.error.message };
|
|
230
|
+
}
|
|
231
|
+
const data = res.data;
|
|
232
|
+
const p = data.securityProfile;
|
|
233
|
+
if (p.isHoneypot || p.sellTaxPercent >= 25 || p.buyTaxPercent >= 25) {
|
|
234
|
+
return { verdict: "block", policyStatus: "unknown", flags: data.flags, safetyScore: p.safetyScore, detail: "Token flagged as honeypot or extreme-tax by GoPlus." };
|
|
235
|
+
}
|
|
236
|
+
if (p.safetyScore < 70 || p.transferPausable || data.flags.length > 0) {
|
|
237
|
+
return { verdict: "review", policyStatus: "unknown", flags: data.flags, safetyScore: p.safetyScore };
|
|
238
|
+
}
|
|
239
|
+
return { verdict: "ok", policyStatus: "ok", flags: data.flags, safetyScore: p.safetyScore };
|
|
240
|
+
}
|
|
96
241
|
//# sourceMappingURL=checkTokenSecurity.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkTokenSecurity.js","sourceRoot":"","sources":["../../src/tools/checkTokenSecurity.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,gEAAgE;AAChE,2EAA2E;AAE3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"checkTokenSecurity.js","sourceRoot":"","sources":["../../src/tools/checkTokenSecurity.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,13 +17,15 @@ interface CreateAgentWalletData {
|
|
|
17
17
|
environment: string;
|
|
18
18
|
chainId: number;
|
|
19
19
|
isMainnet: boolean;
|
|
20
|
-
isTestnet: boolean;
|
|
21
20
|
createdAt: string;
|
|
22
21
|
warning: string;
|
|
23
22
|
instructions: string;
|
|
23
|
+
riskRegistryVersion: "safehands-registry";
|
|
24
|
+
riskRegistryAddress: string;
|
|
24
25
|
riskRegistryAuthorized: boolean;
|
|
25
26
|
riskRegistryAuthTxHash: string | null;
|
|
27
|
+
riskRegistryMessage: string;
|
|
26
28
|
}
|
|
27
|
-
export declare function handleCreateAgentWallet(params:
|
|
29
|
+
export declare function handleCreateAgentWallet(params: unknown): Promise<ToolResponse<CreateAgentWalletData>>;
|
|
28
30
|
export {};
|
|
29
31
|
//# sourceMappingURL=createAgentWallet.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createAgentWallet.d.ts","sourceRoot":"","sources":["../../src/tools/createAgentWallet.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAKrE,eAAO,MAAM,uBAAuB;;;;;;;;;EAWlC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE9E,UAAU,qBAAqB;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"createAgentWallet.d.ts","sourceRoot":"","sources":["../../src/tools/createAgentWallet.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAKrE,eAAO,MAAM,uBAAuB;;;;;;;;;EAWlC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE9E,UAAU,qBAAqB;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,oBAAoB,CAAC;IAC1C,mBAAmB,EAAE,MAAM,CAAC;IAC5B,sBAAsB,EAAE,OAAO,CAAC;IAChC,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC,CAiF9C"}
|
|
@@ -6,8 +6,8 @@ import { z } from "zod";
|
|
|
6
6
|
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
|
|
7
7
|
import { ok, fail } from "../lib/toolResponse.js";
|
|
8
8
|
import { walletStore, encryptKey, usesPersistentWalletStore, getEffectiveEncryptionKey } from "../lib/wallet/index.js";
|
|
9
|
-
import { CHAIN_ID, PHAROS_ENVIRONMENT, IS_MAINNET,
|
|
10
|
-
import {
|
|
9
|
+
import { CHAIN_ID, PHAROS_ENVIRONMENT, IS_MAINNET, SAFEHANDS_REGISTRY_ADDRESS } from "../lib/constants.js";
|
|
10
|
+
import { tryAutoAuthorize } from "../lib/safeHandsRegistry.js";
|
|
11
11
|
export const createAgentWalletSchema = z.object({
|
|
12
12
|
agentId: z
|
|
13
13
|
.string()
|
|
@@ -21,14 +21,24 @@ export const createAgentWalletSchema = z.object({
|
|
|
21
21
|
.describe("If true, overwrite existing wallet for this agentId"),
|
|
22
22
|
});
|
|
23
23
|
export async function handleCreateAgentWallet(params) {
|
|
24
|
-
|
|
24
|
+
let parsed;
|
|
25
|
+
try {
|
|
26
|
+
parsed = createAgentWalletSchema.parse(params);
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
const msg = err instanceof Error && "issues" in err
|
|
30
|
+
? err.issues.map((i) => `${i.path.join(".")}: ${i.message}`).join("; ")
|
|
31
|
+
: String(err);
|
|
32
|
+
return fail("VALIDATION_ERROR", `create_agent_wallet input validation failed: ${msg}`, false, "create_agent_wallet");
|
|
33
|
+
}
|
|
34
|
+
const { agentId, overwrite } = parsed;
|
|
25
35
|
// Check if wallet already exists
|
|
26
36
|
const existing = await walletStore.get(agentId);
|
|
27
37
|
if (existing && !overwrite) {
|
|
28
38
|
return fail("WALLET_ALREADY_EXISTS", `A wallet for agentId '${agentId}' already exists. Use overwrite:true to replace it, or use get_agent_wallet to retrieve it.`, false, "wallet_store");
|
|
29
39
|
}
|
|
30
40
|
if (usesPersistentWalletStore() && !process.env.WALLET_ENCRYPTION_KEY) {
|
|
31
|
-
return fail("WALLET_ENCRYPTION_KEY_REQUIRED", "WALLET_ENCRYPTION_KEY is required when WALLET_STORE_PATH is used. Use in-memory store for local tests or provide a
|
|
41
|
+
return fail("WALLET_ENCRYPTION_KEY_REQUIRED", "WALLET_ENCRYPTION_KEY is required when WALLET_STORE_PATH is used. Use in-memory store for local tests or provide a mainnet-only encryption key.", false, "wallet_store");
|
|
32
42
|
}
|
|
33
43
|
// Generate new wallet
|
|
34
44
|
const privateKey = generatePrivateKey();
|
|
@@ -40,44 +50,39 @@ export async function handleCreateAgentWallet(params) {
|
|
|
40
50
|
agentId,
|
|
41
51
|
address: account.address,
|
|
42
52
|
encryptedKey,
|
|
43
|
-
environment: "
|
|
44
|
-
chainId:
|
|
45
|
-
isMainnet:
|
|
53
|
+
environment: "pacific-mainnet",
|
|
54
|
+
chainId: 1672,
|
|
55
|
+
isMainnet: true,
|
|
46
56
|
createdAt: new Date().toISOString(),
|
|
47
57
|
});
|
|
48
|
-
//
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
riskRegistryAuthorized = true;
|
|
63
|
-
riskRegistryAuthTxHash = txHash;
|
|
64
|
-
}
|
|
65
|
-
catch {
|
|
66
|
-
// Authorization failed — wallet still created, just not authorized for publish
|
|
67
|
-
}
|
|
68
|
-
}
|
|
58
|
+
// Optional auto-authorization in SafeHandsRegistry.
|
|
59
|
+
// Gated by AUTO_AUTHORIZE_AGENT_WALLET + RISK_REGISTRY_OWNER_PRIVATE_KEY (handled
|
|
60
|
+
// inside tryAutoAuthorize). Wallet creation always succeeds even if this is
|
|
61
|
+
// disabled or fails — the wallet is simply not yet authorized for managed execution.
|
|
62
|
+
const auth = await tryAutoAuthorize(account.address);
|
|
63
|
+
const riskRegistryAuthorized = auth.riskRegistryAuthorized;
|
|
64
|
+
const riskRegistryAuthTxHash = auth.authorizationTxHash ?? null;
|
|
65
|
+
const riskRegistryMessage = riskRegistryAuthorized
|
|
66
|
+
? (auth.autoAuthorized
|
|
67
|
+
? "Wallet auto-authorized in SafeHandsRegistry and ready for managed execution once funded."
|
|
68
|
+
: "Wallet is already authorized in SafeHandsRegistry.")
|
|
69
|
+
: `Wallet is NOT yet authorized for managed execution. ${auth.authorizationReason ?? ""} ` +
|
|
70
|
+
`The SafeHandsRegistry owner must call setAuthorizedAgent(${account.address}, true), ` +
|
|
71
|
+
`or set AUTO_AUTHORIZE_AGENT_WALLET=true with RISK_REGISTRY_OWNER_PRIVATE_KEY.`;
|
|
69
72
|
return ok({
|
|
70
73
|
agentId,
|
|
71
74
|
address: account.address,
|
|
72
75
|
environment: PHAROS_ENVIRONMENT,
|
|
73
76
|
chainId: CHAIN_ID,
|
|
74
77
|
isMainnet: IS_MAINNET,
|
|
75
|
-
isTestnet: true,
|
|
76
78
|
createdAt: new Date().toISOString(),
|
|
77
|
-
warning: "
|
|
78
|
-
instructions: `Fund this wallet with
|
|
79
|
+
warning: "Managed mainnet wallet. Use a DEDICATED low-value operator wallet, never a primary wallet. Private key is AES-256-GCM encrypted locally, not KMS/HSM-grade.",
|
|
80
|
+
instructions: `Fund this wallet with PROS for gas. Managed execution stays disabled until you opt in with WRITE_TOOLS_ENABLED=true and MANAGED_WALLET_ENABLED=true.`,
|
|
81
|
+
riskRegistryVersion: "safehands-registry",
|
|
82
|
+
riskRegistryAddress: SAFEHANDS_REGISTRY_ADDRESS,
|
|
79
83
|
riskRegistryAuthorized,
|
|
80
84
|
riskRegistryAuthTxHash,
|
|
85
|
+
riskRegistryMessage,
|
|
81
86
|
});
|
|
82
87
|
}
|
|
83
88
|
//# sourceMappingURL=createAgentWallet.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createAgentWallet.js","sourceRoot":"","sources":["../../src/tools/createAgentWallet.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,8CAA8C;AAC9C,mFAAmF;AACnF,2EAA2E;AAE3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAqB,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACvH,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"createAgentWallet.js","sourceRoot":"","sources":["../../src/tools/createAgentWallet.ts"],"names":[],"mappings":"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"}
|