safehands-pharos 1.4.0 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/policies/default.json +15 -0
- package/.env.example +81 -64
- package/README.md +301 -333
- package/SECURITY.md +112 -0
- package/SKILL.md +59 -0
- package/contracts/SafeHandsAttestation.sol +182 -0
- package/contracts/SafeHandsRegistry.sol +149 -0
- package/dist/agent/SafeHandsGuardianAgent.d.ts +39 -0
- package/dist/agent/SafeHandsGuardianAgent.d.ts.map +1 -0
- package/dist/agent/SafeHandsGuardianAgent.js +98 -0
- package/dist/agent/SafeHandsGuardianAgent.js.map +1 -0
- package/dist/agent/agentDecisionFormatter.d.ts +43 -0
- package/dist/agent/agentDecisionFormatter.d.ts.map +1 -0
- package/dist/agent/agentDecisionFormatter.js +96 -0
- package/dist/agent/agentDecisionFormatter.js.map +1 -0
- package/dist/agent/agentEnrich.d.ts +28 -0
- package/dist/agent/agentEnrich.d.ts.map +1 -0
- package/dist/agent/agentEnrich.js +99 -0
- package/dist/agent/agentEnrich.js.map +1 -0
- package/dist/agent/agentIntentClassifier.d.ts +44 -0
- package/dist/agent/agentIntentClassifier.d.ts.map +1 -0
- package/dist/agent/agentIntentClassifier.js +77 -0
- package/dist/agent/agentIntentClassifier.js.map +1 -0
- package/dist/agent/agentPolicyResolver.d.ts +44 -0
- package/dist/agent/agentPolicyResolver.d.ts.map +1 -0
- package/dist/agent/agentPolicyResolver.js +94 -0
- package/dist/agent/agentPolicyResolver.js.map +1 -0
- package/dist/agent/agentRuntime.d.ts +12 -0
- package/dist/agent/agentRuntime.d.ts.map +1 -0
- package/dist/agent/agentRuntime.js +31 -0
- package/dist/agent/agentRuntime.js.map +1 -0
- package/dist/agent/agentToolRouter.d.ts +24 -0
- package/dist/agent/agentToolRouter.d.ts.map +1 -0
- package/dist/agent/agentToolRouter.js +89 -0
- package/dist/agent/agentToolRouter.js.map +1 -0
- package/dist/agent/guardianOperator.d.ts +35 -0
- package/dist/agent/guardianOperator.d.ts.map +1 -0
- package/dist/agent/guardianOperator.js +65 -0
- package/dist/agent/guardianOperator.js.map +1 -0
- package/dist/agent/index.d.ts +8 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +14 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/api/activityRoutes.d.ts +70 -0
- package/dist/api/activityRoutes.d.ts.map +1 -0
- package/dist/api/activityRoutes.js +100 -0
- package/dist/api/activityRoutes.js.map +1 -0
- package/dist/api/agentRoutes.d.ts +16 -0
- package/dist/api/agentRoutes.d.ts.map +1 -0
- package/dist/api/agentRoutes.js +37 -0
- package/dist/api/agentRoutes.js.map +1 -0
- package/dist/api/broadcastRoutes.d.ts +34 -0
- package/dist/api/broadcastRoutes.d.ts.map +1 -0
- package/dist/api/broadcastRoutes.js +147 -0
- package/dist/api/broadcastRoutes.js.map +1 -0
- package/dist/api/consolePage.d.ts +2 -0
- package/dist/api/consolePage.d.ts.map +1 -0
- package/dist/api/consolePage.js +206 -0
- package/dist/api/consolePage.js.map +1 -0
- package/dist/api/httpHardening.d.ts +75 -0
- package/dist/api/httpHardening.d.ts.map +1 -0
- package/dist/api/httpHardening.js +122 -0
- package/dist/api/httpHardening.js.map +1 -0
- package/dist/api/indexerRoutes.d.ts +46 -0
- package/dist/api/indexerRoutes.d.ts.map +1 -0
- package/dist/api/indexerRoutes.js +75 -0
- package/dist/api/indexerRoutes.js.map +1 -0
- package/dist/api/paidRoutes.d.ts +8 -0
- package/dist/api/paidRoutes.d.ts.map +1 -0
- package/dist/api/paidRoutes.js +175 -0
- package/dist/api/paidRoutes.js.map +1 -0
- package/dist/api/prepareRoutes.d.ts +58 -0
- package/dist/api/prepareRoutes.d.ts.map +1 -0
- package/dist/api/prepareRoutes.js +90 -0
- package/dist/api/prepareRoutes.js.map +1 -0
- package/dist/api/response.d.ts +39 -0
- package/dist/api/response.d.ts.map +1 -0
- package/dist/api/response.js +53 -0
- package/dist/api/response.js.map +1 -0
- package/dist/api/routes.d.ts +175 -0
- package/dist/api/routes.d.ts.map +1 -0
- package/dist/api/routes.js +276 -0
- package/dist/api/routes.js.map +1 -0
- package/dist/api/schemas.d.ts +147 -0
- package/dist/api/schemas.d.ts.map +1 -0
- package/dist/api/schemas.js +81 -0
- package/dist/api/schemas.js.map +1 -0
- package/dist/api/server.d.ts +11 -0
- package/dist/api/server.d.ts.map +1 -0
- package/dist/api/server.js +505 -0
- package/dist/api/server.js.map +1 -0
- package/dist/api/toolRoutes.d.ts +14 -0
- package/dist/api/toolRoutes.d.ts.map +1 -0
- package/dist/api/toolRoutes.js +138 -0
- package/dist/api/toolRoutes.js.map +1 -0
- package/dist/api/walletPrepareRoutes.d.ts +74 -0
- package/dist/api/walletPrepareRoutes.d.ts.map +1 -0
- package/dist/api/walletPrepareRoutes.js +127 -0
- package/dist/api/walletPrepareRoutes.js.map +1 -0
- package/dist/api/x402Gate.d.ts +51 -0
- package/dist/api/x402Gate.d.ts.map +1 -0
- package/dist/api/x402Gate.js +184 -0
- package/dist/api/x402Gate.js.map +1 -0
- package/dist/cli.d.ts +5 -5
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +154 -124
- package/dist/cli.js.map +1 -1
- package/dist/data/ecosystemRegistry.data.d.ts +3 -0
- package/dist/data/ecosystemRegistry.data.d.ts.map +1 -0
- package/dist/data/ecosystemRegistry.data.js +582 -0
- package/dist/data/ecosystemRegistry.data.js.map +1 -0
- package/dist/demo.d.ts +1 -1
- package/dist/demo.d.ts.map +1 -1
- package/dist/demo.js +206 -171
- package/dist/demo.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +249 -164
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +127 -65
- package/dist/init.js.map +1 -1
- package/dist/lib/analysis/approval.d.ts +29 -0
- package/dist/lib/analysis/approval.d.ts.map +1 -0
- package/dist/lib/analysis/approval.js +162 -0
- package/dist/lib/analysis/approval.js.map +1 -0
- package/dist/lib/analysis/calldata.d.ts +60 -0
- package/dist/lib/analysis/calldata.d.ts.map +1 -0
- package/dist/lib/analysis/calldata.js +349 -0
- package/dist/lib/analysis/calldata.js.map +1 -0
- package/dist/lib/analysis/contractIntel.d.ts +65 -0
- package/dist/lib/analysis/contractIntel.d.ts.map +1 -0
- package/dist/lib/analysis/contractIntel.js +320 -0
- package/dist/lib/analysis/contractIntel.js.map +1 -0
- package/dist/lib/analysis/evm.d.ts +42 -0
- package/dist/lib/analysis/evm.d.ts.map +1 -0
- package/dist/lib/analysis/evm.js +185 -0
- package/dist/lib/analysis/evm.js.map +1 -0
- package/dist/lib/analysis/gas.d.ts +4 -0
- package/dist/lib/analysis/gas.d.ts.map +1 -0
- package/dist/lib/analysis/gas.js +13 -0
- package/dist/lib/analysis/gas.js.map +1 -0
- package/dist/lib/analysis/index.d.ts +11 -0
- package/dist/lib/analysis/index.d.ts.map +1 -0
- package/dist/lib/analysis/index.js +16 -0
- package/dist/lib/analysis/index.js.map +1 -0
- package/dist/lib/analysis/pharosTokens.d.ts +31 -0
- package/dist/lib/analysis/pharosTokens.d.ts.map +1 -0
- package/dist/lib/analysis/pharosTokens.js +78 -0
- package/dist/lib/analysis/pharosTokens.js.map +1 -0
- package/dist/lib/analysis/safeTx.d.ts +27 -0
- package/dist/lib/analysis/safeTx.d.ts.map +1 -0
- package/dist/lib/analysis/safeTx.js +118 -0
- package/dist/lib/analysis/safeTx.js.map +1 -0
- package/dist/lib/analysis/token.d.ts +21 -0
- package/dist/lib/analysis/token.d.ts.map +1 -0
- package/dist/lib/analysis/token.js +151 -0
- package/dist/lib/analysis/token.js.map +1 -0
- package/dist/lib/analysis/types.d.ts +49 -0
- package/dist/lib/analysis/types.d.ts.map +1 -0
- package/dist/lib/analysis/types.js +10 -0
- package/dist/lib/analysis/types.js.map +1 -0
- package/dist/lib/analysis/x402.d.ts +24 -0
- package/dist/lib/analysis/x402.d.ts.map +1 -0
- package/dist/lib/analysis/x402.js +60 -0
- package/dist/lib/analysis/x402.js.map +1 -0
- package/dist/lib/auditLog.d.ts +1 -0
- package/dist/lib/auditLog.d.ts.map +1 -1
- package/dist/lib/auditLog.js +0 -0
- package/dist/lib/auditLog.js.map +1 -1
- package/dist/lib/config.d.ts +77 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +120 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/constants.d.ts +452 -291
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +509 -292
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/dodoApi.d.ts +101 -78
- package/dist/lib/dodoApi.d.ts.map +1 -1
- package/dist/lib/dodoApi.js +259 -196
- package/dist/lib/dodoApi.js.map +1 -1
- package/dist/lib/ecosystemRegistry.d.ts +116 -0
- package/dist/lib/ecosystemRegistry.d.ts.map +1 -0
- package/dist/lib/ecosystemRegistry.js +178 -0
- package/dist/lib/ecosystemRegistry.js.map +1 -0
- package/dist/lib/envLoader.d.ts +2 -0
- package/dist/lib/envLoader.d.ts.map +1 -0
- package/dist/lib/envLoader.js +65 -0
- package/dist/lib/envLoader.js.map +1 -0
- package/dist/lib/goldsky.d.ts +58 -0
- package/dist/lib/goldsky.d.ts.map +1 -0
- package/dist/lib/goldsky.js +275 -0
- package/dist/lib/goldsky.js.map +1 -0
- package/dist/lib/guardian/decision.d.ts +23 -0
- package/dist/lib/guardian/decision.d.ts.map +1 -0
- package/dist/lib/guardian/decision.js +40 -0
- package/dist/lib/guardian/decision.js.map +1 -0
- package/dist/lib/http.d.ts +13 -14
- package/dist/lib/http.d.ts.map +1 -1
- package/dist/lib/http.js +383 -118
- package/dist/lib/http.js.map +1 -1
- package/dist/lib/managedExecution.d.ts +19 -0
- package/dist/lib/managedExecution.d.ts.map +1 -0
- package/dist/lib/managedExecution.js +64 -0
- package/dist/lib/managedExecution.js.map +1 -0
- package/dist/lib/merkleBatcher.d.ts +23 -0
- package/dist/lib/merkleBatcher.d.ts.map +1 -0
- package/dist/lib/merkleBatcher.js +62 -0
- package/dist/lib/merkleBatcher.js.map +1 -0
- package/dist/lib/networks.d.ts +48 -0
- package/dist/lib/networks.d.ts.map +1 -0
- package/dist/lib/networks.js +103 -0
- package/dist/lib/networks.js.map +1 -0
- package/dist/lib/observability/accessContext.d.ts +29 -0
- package/dist/lib/observability/accessContext.d.ts.map +1 -0
- package/dist/lib/observability/accessContext.js +50 -0
- package/dist/lib/observability/accessContext.js.map +1 -0
- package/dist/lib/observability/activityStore.d.ts +70 -0
- package/dist/lib/observability/activityStore.d.ts.map +1 -0
- package/dist/lib/observability/activityStore.js +149 -0
- package/dist/lib/observability/activityStore.js.map +1 -0
- package/dist/lib/observability/apiKey.d.ts +55 -0
- package/dist/lib/observability/apiKey.d.ts.map +1 -0
- package/dist/lib/observability/apiKey.js +141 -0
- package/dist/lib/observability/apiKey.js.map +1 -0
- package/dist/lib/observability/logger.d.ts +30 -0
- package/dist/lib/observability/logger.d.ts.map +1 -0
- package/dist/lib/observability/logger.js +30 -0
- package/dist/lib/observability/logger.js.map +1 -0
- package/dist/lib/observability/quota.d.ts +33 -0
- package/dist/lib/observability/quota.d.ts.map +1 -0
- package/dist/lib/observability/quota.js +49 -0
- package/dist/lib/observability/quota.js.map +1 -0
- package/dist/lib/observability/requestId.d.ts +8 -0
- package/dist/lib/observability/requestId.d.ts.map +1 -0
- package/dist/lib/observability/requestId.js +24 -0
- package/dist/lib/observability/requestId.js.map +1 -0
- package/dist/lib/observability/sanitize.d.ts +77 -0
- package/dist/lib/observability/sanitize.d.ts.map +1 -0
- package/dist/lib/observability/sanitize.js +228 -0
- package/dist/lib/observability/sanitize.js.map +1 -0
- package/dist/lib/observability/scopes.d.ts +20 -0
- package/dist/lib/observability/scopes.d.ts.map +1 -0
- package/dist/lib/observability/scopes.js +77 -0
- package/dist/lib/observability/scopes.js.map +1 -0
- package/dist/lib/okxDexApi.d.ts +106 -0
- package/dist/lib/okxDexApi.d.ts.map +1 -0
- package/dist/lib/okxDexApi.js +221 -0
- package/dist/lib/okxDexApi.js.map +1 -0
- package/dist/lib/persistentJsonStore.d.ts +5 -0
- package/dist/lib/persistentJsonStore.d.ts.map +1 -0
- package/dist/lib/persistentJsonStore.js +39 -0
- package/dist/lib/persistentJsonStore.js.map +1 -0
- package/dist/lib/pharos/attestationPublisher.d.ts +50 -0
- package/dist/lib/pharos/attestationPublisher.d.ts.map +1 -0
- package/dist/lib/pharos/attestationPublisher.js +262 -0
- package/dist/lib/pharos/attestationPublisher.js.map +1 -0
- package/dist/lib/pharos/ecosystem.d.ts +52 -0
- package/dist/lib/pharos/ecosystem.d.ts.map +1 -0
- package/dist/lib/pharos/ecosystem.js +431 -0
- package/dist/lib/pharos/ecosystem.js.map +1 -0
- package/dist/lib/pharos/ecosystemEvidence.d.ts +53 -0
- package/dist/lib/pharos/ecosystemEvidence.d.ts.map +1 -0
- package/dist/lib/pharos/ecosystemEvidence.js +133 -0
- package/dist/lib/pharos/ecosystemEvidence.js.map +1 -0
- package/dist/lib/pharos/rpc.d.ts +44 -0
- package/dist/lib/pharos/rpc.d.ts.map +1 -0
- package/dist/lib/pharos/rpc.js +90 -0
- package/dist/lib/pharos/rpc.js.map +1 -0
- package/dist/lib/pharos/rpcEvidence.d.ts +49 -0
- package/dist/lib/pharos/rpcEvidence.d.ts.map +1 -0
- package/dist/lib/pharos/rpcEvidence.js +46 -0
- package/dist/lib/pharos/rpcEvidence.js.map +1 -0
- package/dist/lib/pharos/rpcMethods.d.ts +46 -0
- package/dist/lib/pharos/rpcMethods.d.ts.map +1 -0
- package/dist/lib/pharos/rpcMethods.js +176 -0
- package/dist/lib/pharos/rpcMethods.js.map +1 -0
- package/dist/lib/pharos/spvVerifier.d.ts +47 -0
- package/dist/lib/pharos/spvVerifier.d.ts.map +1 -0
- package/dist/lib/pharos/spvVerifier.js +105 -0
- package/dist/lib/pharos/spvVerifier.js.map +1 -0
- package/dist/lib/pharos/userSignedBroadcaster.d.ts +10 -0
- package/dist/lib/pharos/userSignedBroadcaster.d.ts.map +1 -0
- package/dist/lib/pharos/userSignedBroadcaster.js +50 -0
- package/dist/lib/pharos/userSignedBroadcaster.js.map +1 -0
- package/dist/lib/pharosClient.d.ts +53 -58
- package/dist/lib/pharosClient.d.ts.map +1 -1
- package/dist/lib/pharosClient.js +56 -63
- package/dist/lib/pharosClient.js.map +1 -1
- package/dist/lib/policy/actionPolicyEngine.d.ts +89 -53
- package/dist/lib/policy/actionPolicyEngine.d.ts.map +1 -1
- package/dist/lib/policy/actionPolicyEngine.js +373 -212
- package/dist/lib/policy/actionPolicyEngine.js.map +1 -1
- package/dist/lib/policy/agentPolicy.d.ts +29 -0
- package/dist/lib/policy/agentPolicy.d.ts.map +1 -0
- package/dist/lib/policy/agentPolicy.js +154 -0
- package/dist/lib/policy/agentPolicy.js.map +1 -0
- package/dist/lib/policy/policyPresets.d.ts +30 -0
- package/dist/lib/policy/policyPresets.d.ts.map +1 -0
- package/dist/lib/policy/policyPresets.js +124 -0
- package/dist/lib/policy/policyPresets.js.map +1 -0
- package/dist/lib/policy/writeExecutionGate.d.ts +23 -0
- package/dist/lib/policy/writeExecutionGate.d.ts.map +1 -0
- package/dist/lib/policy/writeExecutionGate.js +65 -0
- package/dist/lib/policy/writeExecutionGate.js.map +1 -0
- package/dist/lib/preparedTxStore.d.ts +21 -0
- package/dist/lib/preparedTxStore.d.ts.map +1 -0
- package/dist/lib/preparedTxStore.js +90 -0
- package/dist/lib/preparedTxStore.js.map +1 -0
- package/dist/lib/price/chainlinkPushProvider.d.ts +34 -0
- package/dist/lib/price/chainlinkPushProvider.d.ts.map +1 -0
- package/dist/lib/price/chainlinkPushProvider.js +36 -0
- package/dist/lib/price/chainlinkPushProvider.js.map +1 -0
- package/dist/lib/price/feedRegistry.d.ts +26 -0
- package/dist/lib/price/feedRegistry.d.ts.map +1 -0
- package/dist/lib/price/feedRegistry.js +67 -0
- package/dist/lib/price/feedRegistry.js.map +1 -0
- package/dist/lib/price/priceResolver.d.ts +35 -0
- package/dist/lib/price/priceResolver.d.ts.map +1 -0
- package/dist/lib/price/priceResolver.js +246 -0
- package/dist/lib/price/priceResolver.js.map +1 -0
- package/dist/lib/price/supraProvider.d.ts +9 -0
- package/dist/lib/price/supraProvider.d.ts.map +1 -0
- package/dist/lib/price/supraProvider.js +17 -0
- package/dist/lib/price/supraProvider.js.map +1 -0
- package/dist/lib/price/types.d.ts +67 -0
- package/dist/lib/price/types.d.ts.map +1 -0
- package/dist/lib/price/types.js +7 -0
- package/dist/lib/price/types.js.map +1 -0
- package/dist/lib/productionGuards.d.ts +16 -0
- package/dist/lib/productionGuards.d.ts.map +1 -0
- package/dist/lib/productionGuards.js +93 -0
- package/dist/lib/productionGuards.js.map +1 -0
- package/dist/lib/recipientSafety.d.ts +5 -0
- package/dist/lib/recipientSafety.d.ts.map +1 -0
- package/dist/lib/recipientSafety.js +28 -0
- package/dist/lib/recipientSafety.js.map +1 -0
- package/dist/lib/riskEngine.d.ts +45 -26
- package/dist/lib/riskEngine.d.ts.map +1 -1
- package/dist/lib/riskEngine.js +346 -283
- package/dist/lib/riskEngine.js.map +1 -1
- package/dist/lib/riskInclusion.d.ts +72 -0
- package/dist/lib/riskInclusion.d.ts.map +1 -0
- package/dist/lib/riskInclusion.js +252 -0
- package/dist/lib/riskInclusion.js.map +1 -0
- package/dist/lib/safeHandsRegistry.d.ts +32 -0
- package/dist/lib/safeHandsRegistry.d.ts.map +1 -0
- package/dist/lib/safeHandsRegistry.js +151 -0
- package/dist/lib/safeHandsRegistry.js.map +1 -0
- package/dist/lib/signer/index.d.ts +24 -24
- package/dist/lib/signer/index.d.ts.map +1 -1
- package/dist/lib/signer/index.js +110 -88
- package/dist/lib/signer/index.js.map +1 -1
- package/dist/lib/spendAccumulator.d.ts +24 -1
- package/dist/lib/spendAccumulator.d.ts.map +1 -1
- package/dist/lib/spendAccumulator.js +76 -6
- package/dist/lib/spendAccumulator.js.map +1 -1
- package/dist/lib/toolResponse.d.ts +30 -25
- package/dist/lib/toolResponse.d.ts.map +1 -1
- package/dist/lib/toolResponse.js +57 -53
- package/dist/lib/toolResponse.js.map +1 -1
- package/dist/lib/validation.d.ts +7 -0
- package/dist/lib/validation.d.ts.map +1 -0
- package/dist/lib/validation.js +62 -0
- package/dist/lib/validation.js.map +1 -0
- package/dist/lib/wallet/index.d.ts +33 -37
- package/dist/lib/wallet/index.d.ts.map +1 -1
- package/dist/lib/wallet/index.js +141 -128
- package/dist/lib/wallet/index.js.map +1 -1
- package/dist/lib/x402ReplayStore.d.ts +6 -0
- package/dist/lib/x402ReplayStore.d.ts.map +1 -0
- package/dist/lib/x402ReplayStore.js +79 -0
- package/dist/lib/x402ReplayStore.js.map +1 -0
- package/dist/safehands.zip +0 -0
- package/dist/sdk.d.ts +14 -0
- package/dist/sdk.d.ts.map +1 -0
- package/dist/sdk.js +25 -0
- package/dist/sdk.js.map +1 -0
- package/dist/tools/approveToken.d.ts +66 -45
- package/dist/tools/approveToken.d.ts.map +1 -1
- package/dist/tools/approveToken.js +152 -85
- package/dist/tools/approveToken.js.map +1 -1
- package/dist/tools/assessRisk.d.ts +66 -79
- package/dist/tools/assessRisk.d.ts.map +1 -1
- package/dist/tools/assessRisk.js +63 -104
- package/dist/tools/assessRisk.js.map +1 -1
- package/dist/tools/checkAllowance.d.ts +49 -43
- package/dist/tools/checkAllowance.d.ts.map +1 -1
- package/dist/tools/checkAllowance.js +78 -56
- package/dist/tools/checkAllowance.js.map +1 -1
- package/dist/tools/checkTokenSecurity.d.ts +103 -46
- package/dist/tools/checkTokenSecurity.d.ts.map +1 -1
- package/dist/tools/checkTokenSecurity.js +240 -95
- package/dist/tools/checkTokenSecurity.js.map +1 -1
- package/dist/tools/createAgentWallet.d.ts +30 -26
- package/dist/tools/createAgentWallet.d.ts.map +1 -1
- package/dist/tools/createAgentWallet.js +87 -58
- package/dist/tools/createAgentWallet.js.map +1 -1
- package/dist/tools/estimateGas.d.ts +84 -79
- package/dist/tools/estimateGas.d.ts.map +1 -1
- package/dist/tools/estimateGas.js +130 -124
- package/dist/tools/estimateGas.js.map +1 -1
- package/dist/tools/executeSwap.d.ts +109 -61
- package/dist/tools/executeSwap.d.ts.map +1 -1
- package/dist/tools/executeSwap.js +289 -141
- package/dist/tools/executeSwap.js.map +1 -1
- package/dist/tools/explainRisk.d.ts +29 -29
- package/dist/tools/explainRisk.d.ts.map +1 -1
- package/dist/tools/explainRisk.js +33 -32
- package/dist/tools/explainRisk.js.map +1 -1
- package/dist/tools/getAgentPolicy.d.ts +15 -0
- package/dist/tools/getAgentPolicy.d.ts.map +1 -0
- package/dist/tools/getAgentPolicy.js +16 -0
- package/dist/tools/getAgentPolicy.js.map +1 -0
- package/dist/tools/getAgentReputation.d.ts +31 -0
- package/dist/tools/getAgentReputation.d.ts.map +1 -0
- package/dist/tools/getAgentReputation.js +44 -0
- package/dist/tools/getAgentReputation.js.map +1 -0
- package/dist/tools/getAgentWallet.d.ts +21 -21
- package/dist/tools/getAgentWallet.d.ts.map +1 -1
- package/dist/tools/getAgentWallet.js +37 -27
- package/dist/tools/getAgentWallet.js.map +1 -1
- package/dist/tools/getAgentWalletBalance.d.ts +11 -11
- package/dist/tools/getAgentWalletBalance.d.ts.map +1 -1
- package/dist/tools/getAgentWalletBalance.js +102 -70
- package/dist/tools/getAgentWalletBalance.js.map +1 -1
- package/dist/tools/getExecutionHistory.d.ts +49 -49
- package/dist/tools/getExecutionHistory.d.ts.map +1 -1
- package/dist/tools/getExecutionHistory.js +148 -154
- package/dist/tools/getExecutionHistory.js.map +1 -1
- package/dist/tools/getGasPrice.d.ts +43 -43
- package/dist/tools/getGasPrice.d.ts.map +0 -0
- package/dist/tools/getGasPrice.js +59 -59
- package/dist/tools/getGasPrice.js.map +1 -1
- package/dist/tools/getPoolInfo.d.ts +75 -75
- package/dist/tools/getPoolInfo.d.ts.map +1 -1
- package/dist/tools/getPoolInfo.js +142 -137
- package/dist/tools/getPoolInfo.js.map +1 -1
- package/dist/tools/getSpvProof.d.ts +24 -0
- package/dist/tools/getSpvProof.d.ts.map +1 -0
- package/dist/tools/getSpvProof.js +64 -0
- package/dist/tools/getSpvProof.js.map +1 -0
- package/dist/tools/getTokenPrice.d.ts +56 -113
- package/dist/tools/getTokenPrice.d.ts.map +1 -1
- package/dist/tools/getTokenPrice.js +110 -117
- package/dist/tools/getTokenPrice.js.map +1 -1
- package/dist/tools/getTransactionStatus.d.ts +43 -43
- package/dist/tools/getTransactionStatus.d.ts.map +0 -0
- package/dist/tools/getTransactionStatus.js +59 -59
- package/dist/tools/getTransactionStatus.js.map +0 -0
- package/dist/tools/getWalletBalance.d.ts +103 -68
- package/dist/tools/getWalletBalance.d.ts.map +1 -1
- package/dist/tools/getWalletBalance.js +127 -87
- package/dist/tools/getWalletBalance.js.map +1 -1
- package/dist/tools/publishRiskScore.d.ts +85 -63
- package/dist/tools/publishRiskScore.d.ts.map +1 -1
- package/dist/tools/publishRiskScore.js +136 -88
- package/dist/tools/publishRiskScore.js.map +1 -1
- package/dist/tools/queryGoldsky.d.ts +20 -0
- package/dist/tools/queryGoldsky.d.ts.map +1 -0
- package/dist/tools/queryGoldsky.js +29 -0
- package/dist/tools/queryGoldsky.js.map +1 -0
- package/dist/tools/queryRiskRegistry.d.ts +38 -38
- package/dist/tools/queryRiskRegistry.d.ts.map +1 -1
- package/dist/tools/queryRiskRegistry.js +59 -55
- package/dist/tools/queryRiskRegistry.js.map +1 -1
- package/dist/tools/safehandsPreflightCheck.d.ts +92 -77
- package/dist/tools/safehandsPreflightCheck.d.ts.map +1 -1
- package/dist/tools/safehandsPreflightCheck.js +174 -47
- package/dist/tools/safehandsPreflightCheck.js.map +1 -1
- package/dist/tools/safehandsRiskReport.d.ts +96 -81
- package/dist/tools/safehandsRiskReport.d.ts.map +1 -1
- package/dist/tools/safehandsRiskReport.js +48 -28
- package/dist/tools/safehandsRiskReport.js.map +1 -1
- package/dist/tools/safehandsSafeExecute.d.ts +20 -20
- package/dist/tools/safehandsSafeExecute.d.ts.map +1 -1
- package/dist/tools/safehandsSafeExecute.js +164 -81
- package/dist/tools/safehandsSafeExecute.js.map +1 -1
- package/dist/tools/safehandsWalletHealth.d.ts +28 -14
- package/dist/tools/safehandsWalletHealth.d.ts.map +1 -1
- package/dist/tools/safehandsWalletHealth.js +145 -103
- package/dist/tools/safehandsWalletHealth.js.map +1 -1
- package/dist/tools/safehandsX402Preflight.d.ts +26 -26
- package/dist/tools/safehandsX402Preflight.d.ts.map +1 -1
- package/dist/tools/safehandsX402Preflight.js +86 -65
- package/dist/tools/safehandsX402Preflight.js.map +1 -1
- package/dist/tools/sendPayment.d.ts +63 -57
- package/dist/tools/sendPayment.d.ts.map +1 -1
- package/dist/tools/sendPayment.js +144 -117
- package/dist/tools/sendPayment.js.map +1 -1
- package/dist/tools/setAgentPolicy.d.ts +75 -0
- package/dist/tools/setAgentPolicy.d.ts.map +1 -0
- package/dist/tools/setAgentPolicy.js +80 -0
- package/dist/tools/setAgentPolicy.js.map +1 -0
- package/dist/tools/simulateTransaction.d.ts +64 -60
- package/dist/tools/simulateTransaction.d.ts.map +1 -1
- package/dist/tools/simulateTransaction.js +116 -83
- package/dist/tools/simulateTransaction.js.map +1 -1
- package/dist/tools/tokenRegistryStatus.d.ts +46 -26
- package/dist/tools/tokenRegistryStatus.d.ts.map +1 -1
- package/dist/tools/tokenRegistryStatus.js +126 -96
- package/dist/tools/tokenRegistryStatus.js.map +1 -1
- package/dist/tools/verifyRiskInclusion.d.ts +59 -0
- package/dist/tools/verifyRiskInclusion.d.ts.map +1 -0
- package/dist/tools/verifyRiskInclusion.js +40 -0
- package/dist/tools/verifyRiskInclusion.js.map +1 -0
- package/dist/tools/x402PayAndFetch.d.ts +87 -81
- package/dist/tools/x402PayAndFetch.d.ts.map +1 -1
- package/dist/tools/x402PayAndFetch.js +295 -152
- package/dist/tools/x402PayAndFetch.js.map +1 -1
- package/dist/worker.d.ts +3 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +39 -0
- package/dist/worker.js.map +1 -0
- package/dist/x402Server.d.ts +1 -1
- package/dist/x402Server.d.ts.map +1 -1
- package/dist/x402Server.js +409 -252
- package/dist/x402Server.js.map +1 -1
- package/docs/REVIEWER_QUICKSTART.md +113 -0
- package/docs/SAFEHANDS_REVIEWER_DEMO_SCRIPT.md +228 -0
- package/package.json +130 -83
- package/contracts/RiskRegistry.json +0 -223
- package/contracts/RiskRegistry.sol +0 -58
- package/dist/lib/testDodoLive.d.ts +0 -2
- package/dist/lib/testDodoLive.d.ts.map +0 -1
- package/dist/lib/testDodoLive.js +0 -105
- package/dist/lib/testDodoLive.js.map +0 -1
- package/dist/lib/testLiveSafehands.d.ts +0 -2
- package/dist/lib/testLiveSafehands.d.ts.map +0 -1
- package/dist/lib/testLiveSafehands.js +0 -93
- package/dist/lib/testLiveSafehands.js.map +0 -1
- package/dist/lib/testRpc.d.ts +0 -2
- package/dist/lib/testRpc.d.ts.map +0 -1
- package/dist/lib/testRpc.js +0 -30
- package/dist/lib/testRpc.js.map +0 -1
- package/dist/lib/testRpcLive.d.ts +0 -2
- package/dist/lib/testRpcLive.d.ts.map +0 -1
- package/dist/lib/testRpcLive.js +0 -89
- package/dist/lib/testRpcLive.js.map +0 -1
- package/dist/lib/testTools.d.ts +0 -2
- package/dist/lib/testTools.d.ts.map +0 -1
- package/dist/lib/testTools.js +0 -398
- package/dist/lib/testTools.js.map +0 -1
- package/dist/lib/testX402Live.d.ts +0 -2
- package/dist/lib/testX402Live.d.ts.map +0 -1
- package/dist/lib/testX402Live.js +0 -160
- package/dist/lib/testX402Live.js.map +0 -1
- package/dist/scripts/checkDeploy.d.ts +0 -2
- package/dist/scripts/checkDeploy.d.ts.map +0 -1
- package/dist/scripts/checkDeploy.js +0 -25
- package/dist/scripts/checkDeploy.js.map +0 -1
- package/dist/scripts/deployRegistry.d.ts +0 -2
- package/dist/scripts/deployRegistry.d.ts.map +0 -1
- package/dist/scripts/deployRegistry.js +0 -101
- package/dist/scripts/deployRegistry.js.map +0 -1
- package/dist/scripts/testRegistry.d.ts +0 -2
- package/dist/scripts/testRegistry.d.ts.map +0 -1
- package/dist/scripts/testRegistry.js +0 -44
- package/dist/scripts/testRegistry.js.map +0 -1
- package/examples/dashboard/index.html +0 -337
- package/examples/pharos-skill-engine/SKILL.safehands.md +0 -85
- package/examples/pharos-skill-engine/assets/safehands/example-actions.json +0 -49
- package/examples/pharos-skill-engine/assets/safehands/policy-defaults.json +0 -11
- package/examples/pharos-skill-engine/references/safehands.md +0 -345
- package/examples/scenario-hack.ts +0 -38
- package/skill/SKILL.md +0 -133
- package/skill/assets/safehands/example-actions.json +0 -49
- package/skill/assets/safehands/policy-defaults.json +0 -11
- package/skill/references/safehands.md +0 -345
|
@@ -1,96 +1,241 @@
|
|
|
1
|
-
// ─── Tool: check_token_security ─────────────────────────────────────────
|
|
2
|
-
// Fetches token security intelligence from GoPlus Security API.
|
|
3
|
-
// ────────────────────────────────────────────────────────────────────────
|
|
4
|
-
import { z } from "zod";
|
|
5
|
-
import { isAddress } from "viem";
|
|
6
|
-
import { CHAIN_ID, PHAROS_ENVIRONMENT } from "../lib/constants.js";
|
|
7
|
-
import { fetchWithTimeoutAndRetry } from "../lib/http.js";
|
|
8
|
-
import { classifyExternalError, fail, ok } from "../lib/toolResponse.js";
|
|
9
|
-
export const checkTokenSecuritySchema = z.object({
|
|
10
|
-
tokenAddress: z.string(),
|
|
11
|
-
chainId: z.number().optional().default(CHAIN_ID),
|
|
12
|
-
});
|
|
13
|
-
export const checkTokenSecurityTool = {
|
|
14
|
-
name: "check_token_security",
|
|
15
|
-
description: "Check token contract security (honeypot, mintable, ownership privileges, tax) via GoPlus Security API.",
|
|
16
|
-
inputSchema: checkTokenSecuritySchema,
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
1
|
+
// ─── Tool: check_token_security ─────────────────────────────────────────
|
|
2
|
+
// Fetches token security intelligence from GoPlus Security API.
|
|
3
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { isAddress } from "viem";
|
|
6
|
+
import { CHAIN_ID, IS_MAINNET, PHAROS_ENVIRONMENT, SAFEHANDS_USER_AGENT, activeTokenMap } from "../lib/constants.js";
|
|
7
|
+
import { fetchWithTimeoutAndRetry } from "../lib/http.js";
|
|
8
|
+
import { classifyExternalError, fail, ok } from "../lib/toolResponse.js";
|
|
9
|
+
export const checkTokenSecuritySchema = z.object({
|
|
10
|
+
tokenAddress: z.string(),
|
|
11
|
+
chainId: z.number().optional().default(CHAIN_ID),
|
|
12
|
+
});
|
|
13
|
+
export const checkTokenSecurityTool = {
|
|
14
|
+
name: "check_token_security",
|
|
15
|
+
description: "Check token contract security (honeypot, mintable, ownership privileges, tax) via GoPlus Security API.",
|
|
16
|
+
inputSchema: checkTokenSecuritySchema,
|
|
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
|
+
}
|
|
136
|
+
export async function handleCheckTokenSecurity(raw) {
|
|
137
|
+
const input = checkTokenSecuritySchema.parse(raw);
|
|
138
|
+
const address = input.tokenAddress.toLowerCase().trim();
|
|
139
|
+
const chainId = input.chainId;
|
|
140
|
+
if (!isAddress(address)) {
|
|
141
|
+
return fail("INVALID_TOKEN_ADDRESS", `Invalid token address: ${input.tokenAddress}`, false, "check_token_security");
|
|
142
|
+
}
|
|
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}`;
|
|
147
|
+
try {
|
|
148
|
+
const res = await fetchGoplus(url);
|
|
149
|
+
if (!res.ok) {
|
|
150
|
+
throw new Error(`GoPlus API returned status ${res.status}`);
|
|
151
|
+
}
|
|
152
|
+
const data = (await res.json());
|
|
153
|
+
if (data.code !== 1 || !data.result || !data.result[address]) {
|
|
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");
|
|
155
|
+
}
|
|
156
|
+
const details = data.result[address];
|
|
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;
|
|
163
|
+
let riskScore = 0;
|
|
164
|
+
const flags = [];
|
|
165
|
+
if (isHoneypot) {
|
|
166
|
+
riskScore += 80;
|
|
167
|
+
flags.push("Honeypot contract detected - buy at your own peril (cannot sell)");
|
|
168
|
+
}
|
|
169
|
+
if (buyTax > 10) {
|
|
170
|
+
riskScore += 15;
|
|
171
|
+
flags.push(`High buy tax: ${buyTax.toFixed(2)}%`);
|
|
172
|
+
}
|
|
173
|
+
if (sellTax > 10) {
|
|
174
|
+
riskScore += 15;
|
|
175
|
+
flags.push(`High sell tax: ${sellTax.toFixed(2)}%`);
|
|
176
|
+
}
|
|
177
|
+
if (isMintable) {
|
|
178
|
+
riskScore += 10;
|
|
179
|
+
flags.push("Token is mintable by owner/creator");
|
|
180
|
+
}
|
|
181
|
+
if (transferPausable) {
|
|
182
|
+
riskScore += 15;
|
|
183
|
+
flags.push("Trading/transfers can be paused by owner");
|
|
184
|
+
}
|
|
185
|
+
const safetyScore = Math.max(0, 100 - riskScore);
|
|
186
|
+
return ok({
|
|
187
|
+
...tokenSecurityNetworkMetadata(chainId),
|
|
188
|
+
tokenAddress: address,
|
|
189
|
+
tokenName: profile.tokenName,
|
|
190
|
+
tokenSymbol: profile.tokenSymbol,
|
|
191
|
+
securityProfile: {
|
|
192
|
+
safetyScore,
|
|
193
|
+
isHoneypot,
|
|
194
|
+
buyTaxPercent: buyTax,
|
|
195
|
+
sellTaxPercent: sellTax,
|
|
196
|
+
isMintable,
|
|
197
|
+
transferPausable,
|
|
198
|
+
isProxy: profile.isProxy,
|
|
199
|
+
ownerAddress: profile.ownerAddress,
|
|
200
|
+
creatorAddress: profile.creatorAddress,
|
|
201
|
+
},
|
|
202
|
+
flags,
|
|
203
|
+
source: "goplus_api",
|
|
204
|
+
sourceStatus: "ok",
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
catch (err) {
|
|
208
|
+
return classifyExternalError("goplus_api", err);
|
|
209
|
+
}
|
|
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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"}
|
|
@@ -1,27 +1,31 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { type ToolResponse } from "../lib/toolResponse.js";
|
|
3
|
-
export declare const createAgentWalletSchema: z.ZodObject<{
|
|
4
|
-
agentId: z.ZodString;
|
|
5
|
-
overwrite: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
6
|
-
}, "strip", z.ZodTypeAny, {
|
|
7
|
-
agentId: string;
|
|
8
|
-
overwrite: boolean;
|
|
9
|
-
}, {
|
|
10
|
-
agentId: string;
|
|
11
|
-
overwrite?: boolean | undefined;
|
|
12
|
-
}>;
|
|
13
|
-
export type CreateAgentWalletParams = z.infer<typeof createAgentWalletSchema>;
|
|
14
|
-
interface CreateAgentWalletData {
|
|
15
|
-
agentId: string;
|
|
16
|
-
address: string;
|
|
17
|
-
environment: string;
|
|
18
|
-
chainId: number;
|
|
19
|
-
isMainnet: boolean;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type ToolResponse } from "../lib/toolResponse.js";
|
|
3
|
+
export declare const createAgentWalletSchema: z.ZodObject<{
|
|
4
|
+
agentId: z.ZodString;
|
|
5
|
+
overwrite: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
agentId: string;
|
|
8
|
+
overwrite: boolean;
|
|
9
|
+
}, {
|
|
10
|
+
agentId: string;
|
|
11
|
+
overwrite?: boolean | undefined;
|
|
12
|
+
}>;
|
|
13
|
+
export type CreateAgentWalletParams = z.infer<typeof createAgentWalletSchema>;
|
|
14
|
+
interface CreateAgentWalletData {
|
|
15
|
+
agentId: string;
|
|
16
|
+
address: string;
|
|
17
|
+
environment: string;
|
|
18
|
+
chainId: number;
|
|
19
|
+
isMainnet: boolean;
|
|
20
|
+
createdAt: string;
|
|
21
|
+
warning: string;
|
|
22
|
+
instructions: string;
|
|
23
|
+
riskRegistryVersion: "safehands-registry";
|
|
24
|
+
riskRegistryAddress: string;
|
|
25
|
+
riskRegistryAuthorized: boolean;
|
|
26
|
+
riskRegistryAuthTxHash: string | null;
|
|
27
|
+
riskRegistryMessage: string;
|
|
28
|
+
}
|
|
29
|
+
export declare function handleCreateAgentWallet(params: unknown): Promise<ToolResponse<CreateAgentWalletData>>;
|
|
30
|
+
export {};
|
|
27
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;
|
|
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"}
|
|
@@ -1,59 +1,88 @@
|
|
|
1
|
-
// ─── create_agent_wallet ────────────────────────────────────────────────
|
|
2
|
-
// Creates a new managed testnet agent wallet.
|
|
3
|
-
// Private key is AES-256-GCM encrypted before storage, never returned in response.
|
|
4
|
-
// ────────────────────────────────────────────────────────────────────────
|
|
5
|
-
import { z } from "zod";
|
|
6
|
-
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
|
|
7
|
-
import { ok, fail } from "../lib/toolResponse.js";
|
|
8
|
-
import { walletStore, encryptKey, usesPersistentWalletStore, getEffectiveEncryptionKey } from "../lib/wallet/index.js";
|
|
9
|
-
import { CHAIN_ID, PHAROS_ENVIRONMENT, IS_MAINNET } from "../lib/constants.js";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
.
|
|
14
|
-
.
|
|
15
|
-
.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
.
|
|
19
|
-
.
|
|
20
|
-
.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const
|
|
35
|
-
//
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
});
|
|
58
|
-
|
|
1
|
+
// ─── create_agent_wallet ────────────────────────────────────────────────
|
|
2
|
+
// Creates a new managed testnet agent wallet.
|
|
3
|
+
// Private key is AES-256-GCM encrypted before storage, never returned in response.
|
|
4
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
|
|
7
|
+
import { ok, fail } from "../lib/toolResponse.js";
|
|
8
|
+
import { walletStore, encryptKey, usesPersistentWalletStore, getEffectiveEncryptionKey } from "../lib/wallet/index.js";
|
|
9
|
+
import { CHAIN_ID, PHAROS_ENVIRONMENT, IS_MAINNET, SAFEHANDS_REGISTRY_ADDRESS } from "../lib/constants.js";
|
|
10
|
+
import { tryAutoAuthorize } from "../lib/safeHandsRegistry.js";
|
|
11
|
+
export const createAgentWalletSchema = z.object({
|
|
12
|
+
agentId: z
|
|
13
|
+
.string()
|
|
14
|
+
.min(1)
|
|
15
|
+
.max(64)
|
|
16
|
+
.describe("Unique identifier for this agent wallet (e.g. 'trading-agent-1')"),
|
|
17
|
+
overwrite: z
|
|
18
|
+
.boolean()
|
|
19
|
+
.optional()
|
|
20
|
+
.default(false)
|
|
21
|
+
.describe("If true, overwrite existing wallet for this agentId"),
|
|
22
|
+
});
|
|
23
|
+
export async function handleCreateAgentWallet(params) {
|
|
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;
|
|
35
|
+
// Check if wallet already exists
|
|
36
|
+
const existing = await walletStore.get(agentId);
|
|
37
|
+
if (existing && !overwrite) {
|
|
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");
|
|
39
|
+
}
|
|
40
|
+
if (usesPersistentWalletStore() && !process.env.WALLET_ENCRYPTION_KEY) {
|
|
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");
|
|
42
|
+
}
|
|
43
|
+
// Generate new wallet
|
|
44
|
+
const privateKey = generatePrivateKey();
|
|
45
|
+
const account = privateKeyToAccount(privateKey);
|
|
46
|
+
// Encrypt key before storage (AES-256-GCM)
|
|
47
|
+
const encryptedKey = encryptKey(privateKey, getEffectiveEncryptionKey());
|
|
48
|
+
// Store wallet
|
|
49
|
+
await walletStore.set(agentId, {
|
|
50
|
+
agentId,
|
|
51
|
+
address: account.address,
|
|
52
|
+
encryptedKey,
|
|
53
|
+
environment: "pacific-mainnet",
|
|
54
|
+
chainId: 1672,
|
|
55
|
+
isMainnet: true,
|
|
56
|
+
createdAt: new Date().toISOString(),
|
|
57
|
+
});
|
|
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.`;
|
|
72
|
+
return ok({
|
|
73
|
+
agentId,
|
|
74
|
+
address: account.address,
|
|
75
|
+
environment: PHAROS_ENVIRONMENT,
|
|
76
|
+
chainId: CHAIN_ID,
|
|
77
|
+
isMainnet: IS_MAINNET,
|
|
78
|
+
createdAt: new Date().toISOString(),
|
|
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,
|
|
83
|
+
riskRegistryAuthorized,
|
|
84
|
+
riskRegistryAuthTxHash,
|
|
85
|
+
riskRegistryMessage,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
59
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,MAAM,qBAAqB,CAAC;AAE/
|
|
1
|
+
{"version":3,"file":"createAgentWallet.js","sourceRoot":"","sources":["../../src/tools/createAgentWallet.ts"],"names":[],"mappings":"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"}
|