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
|
@@ -1,28 +1,72 @@
|
|
|
1
1
|
// ─── Daily Spend Accumulator ────────────────────────────────────────────
|
|
2
2
|
// In-memory per-wallet daily spend tracker. Resets at UTC midnight.
|
|
3
3
|
// Enforces MAX_DAILY_SPEND_USD across sendPayment and executeSwap.
|
|
4
|
-
//
|
|
4
|
+
// PROS/WPROS → USD conversion uses PROS_USD_PRICE env var (default 1.0).
|
|
5
5
|
// ────────────────────────────────────────────────────────────────────────
|
|
6
|
+
import path from "path";
|
|
7
|
+
import { readJsonFile, writeJsonFileAtomic } from "./persistentJsonStore.js";
|
|
8
|
+
import { activeTokenMap } from "./constants.js";
|
|
6
9
|
const buckets = new Map();
|
|
10
|
+
const SPEND_FILE = process.env.SAFEHANDS_SPEND_HISTORY_PATH || path.join(process.env.SAFEHANDS_STATE_DIR || process.env.STATE_DIR || ".safehands", "spend_history.json");
|
|
11
|
+
function loadBuckets() {
|
|
12
|
+
const data = readJsonFile(SPEND_FILE, {});
|
|
13
|
+
for (const [k, v] of Object.entries(data)) {
|
|
14
|
+
buckets.set(k, v);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function saveBuckets() {
|
|
18
|
+
try {
|
|
19
|
+
// Atomic write (temp file + rename) — a crash mid-write can no longer
|
|
20
|
+
// truncate the spend history and silently reset the daily caps.
|
|
21
|
+
writeJsonFileAtomic(SPEND_FILE, Object.fromEntries(buckets));
|
|
22
|
+
}
|
|
23
|
+
catch (e) {
|
|
24
|
+
console.error("Failed to save spend history:", e);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
loadBuckets();
|
|
7
28
|
function todayUtc() {
|
|
8
29
|
return new Date().toISOString().slice(0, 10);
|
|
9
30
|
}
|
|
10
31
|
function getPhrsUsdPrice() {
|
|
11
|
-
return parseFloat(process.env.
|
|
32
|
+
return parseFloat(process.env.PROS_USD_PRICE || "1.0");
|
|
12
33
|
}
|
|
13
34
|
export function getMaxDailySpendUsd() {
|
|
14
35
|
return parseFloat(process.env.MAX_DAILY_SPEND_USD || "10");
|
|
15
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Resolve a token symbol OR address to a priceable spend token, or `null` when the
|
|
39
|
+
* token cannot be priced in USD. Addresses are matched against the official
|
|
40
|
+
* active-network token registry so registry USDC passed by address still counts
|
|
41
|
+
* toward the caps instead of slipping past them.
|
|
42
|
+
*/
|
|
43
|
+
export function resolvePriceableToken(token) {
|
|
44
|
+
const trimmed = token.trim();
|
|
45
|
+
const upper = trimmed.toUpperCase();
|
|
46
|
+
if (upper === "PROS" || upper === "WPROS" || upper === "USDC" || upper === "USDT")
|
|
47
|
+
return upper;
|
|
48
|
+
const lower = trimmed.toLowerCase();
|
|
49
|
+
for (const [symbol, addr] of Object.entries(activeTokenMap())) {
|
|
50
|
+
if (typeof addr === "string" && addr.toLowerCase() === lower) {
|
|
51
|
+
const s = symbol.toUpperCase();
|
|
52
|
+
if (s === "PROS" || s === "WPROS" || s === "USDC" || s === "USDT")
|
|
53
|
+
return s;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
16
58
|
export function estimateUsd(amount, token) {
|
|
17
59
|
const n = parseFloat(amount);
|
|
18
60
|
if (isNaN(n))
|
|
19
61
|
return 0;
|
|
20
|
-
const
|
|
21
|
-
if (
|
|
62
|
+
const resolved = resolvePriceableToken(token);
|
|
63
|
+
if (resolved === "PROS" || resolved === "WPROS")
|
|
22
64
|
return n * getPhrsUsdPrice();
|
|
23
|
-
if (
|
|
65
|
+
if (resolved === "USDC" || resolved === "USDT")
|
|
24
66
|
return n;
|
|
25
|
-
|
|
67
|
+
// Unpriceable token — the policy engine DENIES execute_swap on these upstream
|
|
68
|
+
// (swap_notional_unpriceable → BLOCK), so this 0 is never a silent cap escape.
|
|
69
|
+
return 0;
|
|
26
70
|
}
|
|
27
71
|
export function checkDailyLimit(walletAddress, amountUsd) {
|
|
28
72
|
const key = walletAddress.toLowerCase();
|
|
@@ -50,5 +94,31 @@ export function recordSpend(walletAddress, amountUsd) {
|
|
|
50
94
|
else {
|
|
51
95
|
bucket.totalUsd += amountUsd;
|
|
52
96
|
}
|
|
97
|
+
saveBuckets();
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Atomic check-and-reserve. `checkDailyLimit` + `recordSpend` run with NO
|
|
101
|
+
* `await` between them, so within Node's single-threaded event loop the reserve is
|
|
102
|
+
* atomic: two concurrent tool calls can no longer both pass the cap by reading the
|
|
103
|
+
* pre-spend bucket. Reserve immediately BEFORE broadcasting, then `releaseReservation`
|
|
104
|
+
* on any failure so a reverted/failed tx does not permanently consume the cap.
|
|
105
|
+
*/
|
|
106
|
+
export function reserveDailyLimit(walletAddress, amountUsd) {
|
|
107
|
+
const check = checkDailyLimit(walletAddress, amountUsd);
|
|
108
|
+
if (check.allowed && amountUsd > 0) {
|
|
109
|
+
recordSpend(walletAddress, amountUsd);
|
|
110
|
+
}
|
|
111
|
+
return check;
|
|
112
|
+
}
|
|
113
|
+
/** Release a previously reserved amount (call when a reserved tx fails/reverts). */
|
|
114
|
+
export function releaseReservation(walletAddress, amountUsd) {
|
|
115
|
+
if (amountUsd <= 0)
|
|
116
|
+
return;
|
|
117
|
+
const key = walletAddress.toLowerCase();
|
|
118
|
+
const bucket = buckets.get(key);
|
|
119
|
+
if (bucket && bucket.dateUtc === todayUtc()) {
|
|
120
|
+
bucket.totalUsd = Math.max(0, bucket.totalUsd - amountUsd);
|
|
121
|
+
saveBuckets();
|
|
122
|
+
}
|
|
53
123
|
}
|
|
54
124
|
//# sourceMappingURL=spendAccumulator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spendAccumulator.js","sourceRoot":"","sources":["../../src/lib/spendAccumulator.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,oEAAoE;AACpE,mEAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"spendAccumulator.js","sourceRoot":"","sources":["../../src/lib/spendAccumulator.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,oEAAoE;AACpE,mEAAmE;AACnE,yEAAyE;AACzE,2EAA2E;AAE3E,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAOhD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAqB,CAAC;AAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,YAAY,EAAE,oBAAoB,CAAC,CAAC;AAEzK,SAAS,WAAW;IAClB,MAAM,IAAI,GAAG,YAAY,CAA4B,UAAU,EAAE,EAAE,CAAC,CAAC;IACrE,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,sEAAsE;QACtE,gEAAgE;QAChE,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAED,WAAW,EAAE,CAAC;AAEd,SAAS,QAAQ;IACf,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC,CAAC;AAC7D,CAAC;AAID;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAChG,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC;QAC9D,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;YAC7D,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,MAAM;gBAAE,OAAO,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,KAAwC;IAClF,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,KAAK,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IACvB,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,CAAC,GAAG,eAAe,EAAE,CAAC;IAC9E,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,CAAC,CAAC;IACzD,8EAA8E;IAC9E,+EAA+E;IAC/E,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,aAAqB,EACrB,SAAiB;IAEjB,MAAM,GAAG,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC7E,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IACvC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAC;IACxD,OAAO;QACL,OAAO,EAAE,UAAU,GAAG,SAAS,IAAI,QAAQ;QAC3C,UAAU;QACV,QAAQ;QACR,YAAY;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,aAAqB,EAAE,SAAiB;IAClE,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO;IAC3B,MAAM,GAAG,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,QAAQ,IAAI,SAAS,CAAC;IAC/B,CAAC;IACD,WAAW,EAAE,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,aAAqB,EACrB,SAAiB;IAEjB,MAAM,KAAK,GAAG,eAAe,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IACxD,IAAI,KAAK,CAAC,OAAO,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QACnC,WAAW,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,kBAAkB,CAAC,aAAqB,EAAE,SAAiB;IACzE,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO;IAC3B,MAAM,GAAG,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;IACxC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,EAAE,CAAC;QAC5C,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;QAC3D,WAAW,EAAE,CAAC;IAChB,CAAC;AACH,CAAC"}
|
|
@@ -20,7 +20,12 @@ export type ToolResponse<T> = ToolSuccess<T> | ToolFailure;
|
|
|
20
20
|
export declare function ok<T>(data: T, timestamp?: string): ToolSuccess<T>;
|
|
21
21
|
export declare function fail(code: string, message: string, retryable?: boolean, source?: string, timestamp?: string): ToolFailure;
|
|
22
22
|
export declare function errorMessage(err: unknown): string;
|
|
23
|
+
/**
|
|
24
|
+
* In production, never echo raw internal error text (DODO/RPC/viem internals) to
|
|
25
|
+
* clients — return a generic message instead. Outside production, keep the real
|
|
26
|
+
* message for debuggability. (`/paid/*` + `/tools/*` info-leak fix.)
|
|
27
|
+
*/
|
|
28
|
+
export declare function productionSafeMessage(message: string, fallback?: string): string;
|
|
23
29
|
export declare function classifyExternalError(source: string, err: unknown): ToolFailure;
|
|
24
30
|
export declare function requireWriteToolsEnabled(toolName: string): ToolFailure | null;
|
|
25
|
-
export declare function requireEnv(name: string, source: string): string | ToolFailure;
|
|
26
31
|
//# sourceMappingURL=toolResponse.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolResponse.d.ts","sourceRoot":"","sources":["../../src/lib/toolResponse.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,EAAE,IAAI,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,KAAK,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;AAE3D,wBAAgB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,SAA2B,GAAG,WAAW,CAAC,CAAC,CAAC,CAEnF;AAED,wBAAgB,IAAI,CAClB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,SAAS,UAAQ,EACjB,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,SAA2B,GACnC,WAAW,CAOb;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAEjD;AAED,wBAAgB,qBAAqB,CAAC,
|
|
1
|
+
{"version":3,"file":"toolResponse.d.ts","sourceRoot":"","sources":["../../src/lib/toolResponse.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,EAAE,IAAI,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,KAAK,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;AAE3D,wBAAgB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,SAA2B,GAAG,WAAW,CAAC,CAAC,CAAC,CAEnF;AAED,wBAAgB,IAAI,CAClB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,SAAS,UAAQ,EACjB,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,SAA2B,GACnC,WAAW,CAOb;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAoE,GAAG,MAAM,CAE3I;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,WAAW,CAwB/E;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAU7E"}
|
package/dist/lib/toolResponse.js
CHANGED
|
@@ -14,6 +14,14 @@ export function fail(code, message, retryable = false, source, timestamp = new D
|
|
|
14
14
|
export function errorMessage(err) {
|
|
15
15
|
return err instanceof Error ? err.message : String(err);
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* In production, never echo raw internal error text (DODO/RPC/viem internals) to
|
|
19
|
+
* clients — return a generic message instead. Outside production, keep the real
|
|
20
|
+
* message for debuggability. (`/paid/*` + `/tools/*` info-leak fix.)
|
|
21
|
+
*/
|
|
22
|
+
export function productionSafeMessage(message, fallback = "Request could not be processed. Check parameters and try again.") {
|
|
23
|
+
return (process.env.NODE_ENV || "").toLowerCase() === "production" ? fallback : message;
|
|
24
|
+
}
|
|
17
25
|
export function classifyExternalError(source, err) {
|
|
18
26
|
const message = errorMessage(err);
|
|
19
27
|
const lower = message.toLowerCase();
|
|
@@ -36,19 +44,15 @@ export function classifyExternalError(source, err) {
|
|
|
36
44
|
code = isTimeout ? "GOPLUS_API_TIMEOUT" : "GOPLUS_API_UNAVAILABLE";
|
|
37
45
|
if (source === "x402_fetch")
|
|
38
46
|
code = isTimeout ? "X402_FETCH_TIMEOUT" : "X402_FETCH_FAILED";
|
|
39
|
-
|
|
47
|
+
// In production, never echo raw DODO/RPC/viem internals to the caller — keep
|
|
48
|
+
// the specific error CODE (RPC_TIMEOUT, DODO_API_UNAVAILABLE, …) but genericize the
|
|
49
|
+
// human message. Outside production the real message is retained for debuggability.
|
|
50
|
+
return fail(code, productionSafeMessage(message), isRetryable, source);
|
|
40
51
|
}
|
|
41
52
|
export function requireWriteToolsEnabled(toolName) {
|
|
42
53
|
if (process.env.WRITE_TOOLS_ENABLED !== "true") {
|
|
43
|
-
return fail("WRITE_TOOLS_DISABLED", `${toolName} is disabled by default. Set WRITE_TOOLS_ENABLED=true only for trusted
|
|
54
|
+
return fail("WRITE_TOOLS_DISABLED", `${toolName} is disabled by default. Set WRITE_TOOLS_ENABLED=true only for trusted mainnet execution.`, false, toolName);
|
|
44
55
|
}
|
|
45
56
|
return null;
|
|
46
57
|
}
|
|
47
|
-
export function requireEnv(name, source) {
|
|
48
|
-
const value = process.env[name];
|
|
49
|
-
if (!value) {
|
|
50
|
-
return fail("MISSING_ENV", `${name} is not configured.`, false, source);
|
|
51
|
-
}
|
|
52
|
-
return value;
|
|
53
|
-
}
|
|
54
58
|
//# sourceMappingURL=toolResponse.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolResponse.js","sourceRoot":"","sources":["../../src/lib/toolResponse.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,sEAAsE;AAyBtE,MAAM,UAAU,EAAE,CAAI,IAAO,EAAE,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IACjE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,IAAI,CAClB,IAAY,EACZ,OAAe,EACf,SAAS,GAAG,KAAK,EACjB,MAAe,EACf,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IAEpC,OAAO;QACL,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;QAClE,SAAS;KACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAc,EAAE,GAAY;IAChE,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACzE,MAAM,WAAW,GACf,SAAS;QACT,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC9B,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QACzB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QACrB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QACrB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QACrB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExB,IAAI,IAAI,GAAG,8BAA8B,CAAC;IAC1C,IAAI,MAAM,KAAK,YAAY;QAAE,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAClF,IAAI,MAAM,KAAK,UAAU;QAAE,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,sBAAsB,CAAC;IAC1F,IAAI,MAAM,KAAK,cAAc;QAAE,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,0BAA0B,CAAC;IACtG,IAAI,MAAM,KAAK,YAAY;QAAE,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,wBAAwB,CAAC;IAChG,IAAI,MAAM,KAAK,YAAY;QAAE,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,mBAAmB,CAAC;IAE3F,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"toolResponse.js","sourceRoot":"","sources":["../../src/lib/toolResponse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function isValidPositiveAmount(value: unknown): boolean;
|
|
2
|
+
export declare function validatePositiveAmount(value: unknown, fieldName: string): string | null;
|
|
3
|
+
export declare function validateAddress(value: unknown, fieldName: string): string | null;
|
|
4
|
+
export declare function validateNonZeroAddress(value: unknown, fieldName: string): string | null;
|
|
5
|
+
export declare function validateTokenIdentifier(value: unknown, fieldName: string): string | null;
|
|
6
|
+
export declare function collectErrors(errors: (string | null)[]): string[];
|
|
7
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/lib/validation.ts"],"names":[],"mappings":"AAOA,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAM7D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUvF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOhF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOvF;AAID,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQxF;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,CAEjE"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// ─── Shared Validation Helpers ─────────────────────────────────────────
|
|
2
|
+
// Reusable validators for amount, address, and field presence.
|
|
3
|
+
// Used by preflight, handlers, and smoke tests.
|
|
4
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
5
|
+
import { isAddress } from "viem";
|
|
6
|
+
export function isValidPositiveAmount(value) {
|
|
7
|
+
if (value === null || value === undefined)
|
|
8
|
+
return false;
|
|
9
|
+
const str = String(value).trim();
|
|
10
|
+
if (str === "")
|
|
11
|
+
return false;
|
|
12
|
+
const n = Number(str);
|
|
13
|
+
return Number.isFinite(n) && n > 0;
|
|
14
|
+
}
|
|
15
|
+
export function validatePositiveAmount(value, fieldName) {
|
|
16
|
+
if (value === null || value === undefined) {
|
|
17
|
+
return `${fieldName} is required and must be a positive number.`;
|
|
18
|
+
}
|
|
19
|
+
const str = String(value).trim();
|
|
20
|
+
if (str === "")
|
|
21
|
+
return `${fieldName} must not be empty.`;
|
|
22
|
+
const n = Number(str);
|
|
23
|
+
if (!Number.isFinite(n))
|
|
24
|
+
return `${fieldName} must be a valid finite number (got "${str}").`;
|
|
25
|
+
if (n <= 0)
|
|
26
|
+
return `${fieldName} must be positive (got ${n}).`;
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
export function validateAddress(value, fieldName) {
|
|
30
|
+
if (value === null || value === undefined || value === "") {
|
|
31
|
+
return `${fieldName} is required.`;
|
|
32
|
+
}
|
|
33
|
+
const str = String(value).trim();
|
|
34
|
+
if (!isAddress(str))
|
|
35
|
+
return `${fieldName} is not a valid EVM address (got "${str}").`;
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
export function validateNonZeroAddress(value, fieldName) {
|
|
39
|
+
const addrError = validateAddress(value, fieldName);
|
|
40
|
+
if (addrError)
|
|
41
|
+
return addrError;
|
|
42
|
+
if (String(value).trim().toLowerCase() === "0x0000000000000000000000000000000000000000") {
|
|
43
|
+
return `${fieldName} must not be the zero address.`;
|
|
44
|
+
}
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
const KNOWN_TOKEN_SYMBOLS = new Set(["PROS", "USDC", "USDT", "WBTC", "WETH", "WPROS", "CIRCLE_USDC"]);
|
|
48
|
+
export function validateTokenIdentifier(value, fieldName) {
|
|
49
|
+
if (value === null || value === undefined || value === "") {
|
|
50
|
+
return `${fieldName} is required.`;
|
|
51
|
+
}
|
|
52
|
+
const str = String(value).trim();
|
|
53
|
+
if (KNOWN_TOKEN_SYMBOLS.has(str.toUpperCase()))
|
|
54
|
+
return null;
|
|
55
|
+
if (isAddress(str))
|
|
56
|
+
return null;
|
|
57
|
+
return `${fieldName} must be a known token symbol (PROS, USDC, USDT, etc.) or a valid EVM address (got "${str}").`;
|
|
58
|
+
}
|
|
59
|
+
export function collectErrors(errors) {
|
|
60
|
+
return errors.filter((e) => e !== null);
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/lib/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,9 @@ export interface StoredWallet {
|
|
|
2
2
|
agentId: string;
|
|
3
3
|
address: string;
|
|
4
4
|
encryptedKey: string;
|
|
5
|
-
environment: "
|
|
6
|
-
chainId: 688689;
|
|
7
|
-
isMainnet:
|
|
5
|
+
environment: "pacific-mainnet" | "pacific-mainnet";
|
|
6
|
+
chainId: 1672 | 688689;
|
|
7
|
+
isMainnet: boolean;
|
|
8
8
|
createdAt: string;
|
|
9
9
|
}
|
|
10
10
|
export interface WalletStoreInterface {
|
|
@@ -13,20 +13,16 @@ export interface WalletStoreInterface {
|
|
|
13
13
|
has(agentId: string): Promise<boolean>;
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
|
-
* Encrypts a private key with AES-256-GCM.
|
|
17
|
-
* Output
|
|
16
|
+
* Encrypts a private key with AES-256-GCM under a scrypt-derived key.
|
|
17
|
+
* Output: "sh2:" + hex(salt(16) || iv(12) || tag(16) || ciphertext).
|
|
18
18
|
*/
|
|
19
19
|
export declare function encryptKey(privateKey: string, encryptionKey: string): string;
|
|
20
20
|
/**
|
|
21
|
-
* Decrypts a private key.
|
|
22
|
-
* -
|
|
23
|
-
*
|
|
21
|
+
* Decrypts a private key. Supports the current "sh2:" scrypt format and the
|
|
22
|
+
* legacy pure-hex SHA-256 AES-256-GCM format (read-only, for migration). The
|
|
23
|
+
* removed XOR path ("0x"-prefixed) is rejected — those wallets must be recreated.
|
|
24
24
|
*/
|
|
25
25
|
export declare function decryptKey(encrypted: string, encryptionKey: string): string;
|
|
26
|
-
/** @deprecated Use encryptKey / decryptKey. Kept for callers that haven't migrated yet. */
|
|
27
|
-
export declare function obfuscateKey(privateKey: string, encryptionKey: string): string;
|
|
28
|
-
/** @deprecated Use decryptKey. */
|
|
29
|
-
export declare function deobfuscateKey(obfuscated: string, encryptionKey: string): string;
|
|
30
26
|
/**
|
|
31
27
|
* Returns the effective encryption key.
|
|
32
28
|
* - Persistent store: WALLET_ENCRYPTION_KEY must be set (wallets won't survive restarts otherwise).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/wallet/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/wallet/index.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,iBAAiB,GAAG,iBAAiB,CAAC;IACnD,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IACnD,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxC;AA6ED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAS5E;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CA+B3E;AAOD;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAYD,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED,eAAO,MAAM,WAAW,sBAAsB,CAAC"}
|
package/dist/lib/wallet/index.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
// ─── WalletStore ────────────────────────────────────────────────────────
|
|
2
|
-
// Abstraction for storing managed
|
|
3
|
-
// Private keys are AES-256-GCM encrypted before
|
|
4
|
-
//
|
|
5
|
-
//
|
|
2
|
+
// Abstraction for storing managed agent wallets (Pharos Pacific Mainnet).
|
|
3
|
+
// Private keys are AES-256-GCM encrypted under a memory-hard scrypt KDF before
|
|
4
|
+
// storage (versioned "sh2:" format). Pre-scrypt AES records (SHA-256-derived key)
|
|
5
|
+
// are still read for migration. The old XOR-obfuscation path is REMOVED — it was
|
|
6
|
+
// not encryption. Local AES-256-GCM is NOT KMS/HSM-grade — use a DEDICATED,
|
|
7
|
+
// low-value operator wallet for managed execution, never a primary wallet.
|
|
6
8
|
// ────────────────────────────────────────────────────────────────────────
|
|
7
9
|
import { readFileSync, writeFileSync, renameSync, existsSync } from "fs";
|
|
8
|
-
import { randomBytes, createCipheriv, createDecipheriv, createHash } from "node:crypto";
|
|
10
|
+
import { randomBytes, createCipheriv, createDecipheriv, createHash, scryptSync } from "node:crypto";
|
|
9
11
|
// ─── In-Memory Store (tests + default) ─────────────────────────────────
|
|
10
12
|
class InMemoryWalletStore {
|
|
11
13
|
store = new Map();
|
|
@@ -48,35 +50,64 @@ class FileWalletStore {
|
|
|
48
50
|
return agentId in this.data;
|
|
49
51
|
}
|
|
50
52
|
}
|
|
51
|
-
// ─── AES-256-GCM Encryption
|
|
52
|
-
|
|
53
|
+
// ─── AES-256-GCM Encryption (scrypt KDF) ───────────────────────────────
|
|
54
|
+
// New wallets derive the AES key with a memory-hard scrypt KDF and a per-record
|
|
55
|
+
// random salt, so a leaked WALLET_ENCRYPTION_KEY is far costlier to brute-force
|
|
56
|
+
// than the old single-pass SHA-256 derivation. Ciphertext is versioned:
|
|
57
|
+
// "sh2:" + hex(salt[16] || iv[12] || tag[16] || ciphertext) ← current (scrypt)
|
|
58
|
+
// <pure-hex> iv[12] || tag[16] || ciphertext ← legacy read-only
|
|
59
|
+
// (SHA-256-derived key; still decryptable for migration)
|
|
60
|
+
// The old XOR path ("0x"-prefixed) is REMOVED — it was obfuscation, not encryption.
|
|
61
|
+
const SCRYPT_VERSION_PREFIX = "sh2:";
|
|
62
|
+
const SCRYPT_SALT_BYTES = 16;
|
|
63
|
+
// N=16384,r=8,p=1 → ~16 MB, ~10-30 ms per derivation (once per managed signer resolve).
|
|
64
|
+
const SCRYPT_PARAMS = { N: 16384, r: 8, p: 1, maxmem: 64 * 1024 * 1024 };
|
|
65
|
+
function deriveKeyScrypt(encryptionKey, salt) {
|
|
66
|
+
return scryptSync(encryptionKey, salt, 32, SCRYPT_PARAMS);
|
|
67
|
+
}
|
|
68
|
+
/** Legacy single-pass SHA-256 KDF — read-only, for decrypting pre-scrypt wallets. */
|
|
69
|
+
function deriveKeyLegacySha256(encryptionKey) {
|
|
53
70
|
return createHash("sha256").update(encryptionKey).digest();
|
|
54
71
|
}
|
|
55
72
|
/**
|
|
56
|
-
* Encrypts a private key with AES-256-GCM.
|
|
57
|
-
* Output
|
|
73
|
+
* Encrypts a private key with AES-256-GCM under a scrypt-derived key.
|
|
74
|
+
* Output: "sh2:" + hex(salt(16) || iv(12) || tag(16) || ciphertext).
|
|
58
75
|
*/
|
|
59
76
|
export function encryptKey(privateKey, encryptionKey) {
|
|
60
|
-
const
|
|
77
|
+
const salt = randomBytes(SCRYPT_SALT_BYTES);
|
|
78
|
+
const key = deriveKeyScrypt(encryptionKey, salt);
|
|
61
79
|
const iv = randomBytes(12);
|
|
62
80
|
const cipher = createCipheriv("aes-256-gcm", key, iv);
|
|
63
81
|
const plain = Buffer.from(privateKey.replace(/^0x/, ""), "hex");
|
|
64
82
|
const encrypted = Buffer.concat([cipher.update(plain), cipher.final()]);
|
|
65
83
|
const tag = cipher.getAuthTag();
|
|
66
|
-
return Buffer.concat([iv, tag, encrypted]).toString("hex");
|
|
84
|
+
return SCRYPT_VERSION_PREFIX + Buffer.concat([salt, iv, tag, encrypted]).toString("hex");
|
|
67
85
|
}
|
|
68
86
|
/**
|
|
69
|
-
* Decrypts a private key.
|
|
70
|
-
* -
|
|
71
|
-
*
|
|
87
|
+
* Decrypts a private key. Supports the current "sh2:" scrypt format and the
|
|
88
|
+
* legacy pure-hex SHA-256 AES-256-GCM format (read-only, for migration). The
|
|
89
|
+
* removed XOR path ("0x"-prefixed) is rejected — those wallets must be recreated.
|
|
72
90
|
*/
|
|
73
91
|
export function decryptKey(encrypted, encryptionKey) {
|
|
74
92
|
if (encrypted.startsWith("0x")) {
|
|
75
|
-
|
|
76
|
-
|
|
93
|
+
throw new Error("Legacy XOR-obfuscated wallet is no longer supported (it was not real encryption). " +
|
|
94
|
+
"Re-create the managed wallet so it is stored under AES-256-GCM + scrypt.");
|
|
95
|
+
}
|
|
96
|
+
if (encrypted.startsWith(SCRYPT_VERSION_PREFIX)) {
|
|
97
|
+
const data = Buffer.from(encrypted.slice(SCRYPT_VERSION_PREFIX.length), "hex");
|
|
98
|
+
const salt = data.subarray(0, SCRYPT_SALT_BYTES);
|
|
99
|
+
const iv = data.subarray(SCRYPT_SALT_BYTES, SCRYPT_SALT_BYTES + 12);
|
|
100
|
+
const tag = data.subarray(SCRYPT_SALT_BYTES + 12, SCRYPT_SALT_BYTES + 28);
|
|
101
|
+
const ciphertext = data.subarray(SCRYPT_SALT_BYTES + 28);
|
|
102
|
+
const key = deriveKeyScrypt(encryptionKey, salt);
|
|
103
|
+
const decipher = createDecipheriv("aes-256-gcm", key, iv);
|
|
104
|
+
decipher.setAuthTag(tag);
|
|
105
|
+
const decrypted = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
|
|
106
|
+
return "0x" + decrypted.toString("hex");
|
|
77
107
|
}
|
|
78
|
-
|
|
108
|
+
// Legacy pure-hex AES-256-GCM (SHA-256-derived key) — decrypt for migration only.
|
|
79
109
|
const data = Buffer.from(encrypted, "hex");
|
|
110
|
+
const key = deriveKeyLegacySha256(encryptionKey);
|
|
80
111
|
const iv = data.subarray(0, 12);
|
|
81
112
|
const tag = data.subarray(12, 28);
|
|
82
113
|
const ciphertext = data.subarray(28);
|
|
@@ -85,24 +116,6 @@ export function decryptKey(encrypted, encryptionKey) {
|
|
|
85
116
|
const decrypted = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
|
|
86
117
|
return "0x" + decrypted.toString("hex");
|
|
87
118
|
}
|
|
88
|
-
// ─── Legacy XOR helpers (kept for migration read path only) ────────────
|
|
89
|
-
function _xorObfuscate(privateKey, encryptionKey) {
|
|
90
|
-
const keyBytes = Buffer.from(encryptionKey.padEnd(32, "0").slice(0, 32));
|
|
91
|
-
const pkBytes = Buffer.from(privateKey.replace("0x", ""), "hex");
|
|
92
|
-
const result = Buffer.alloc(pkBytes.length);
|
|
93
|
-
for (let i = 0; i < pkBytes.length; i++) {
|
|
94
|
-
result[i] = pkBytes[i] ^ keyBytes[i % keyBytes.length];
|
|
95
|
-
}
|
|
96
|
-
return "0x" + result.toString("hex");
|
|
97
|
-
}
|
|
98
|
-
/** @deprecated Use encryptKey / decryptKey. Kept for callers that haven't migrated yet. */
|
|
99
|
-
export function obfuscateKey(privateKey, encryptionKey) {
|
|
100
|
-
return _xorObfuscate(privateKey, encryptionKey);
|
|
101
|
-
}
|
|
102
|
-
/** @deprecated Use decryptKey. */
|
|
103
|
-
export function deobfuscateKey(obfuscated, encryptionKey) {
|
|
104
|
-
return _xorObfuscate(obfuscated, encryptionKey);
|
|
105
|
-
}
|
|
106
119
|
// ─── Encryption key resolution ─────────────────────────────────────────
|
|
107
120
|
// Random per-process fallback key — never hardcoded, never reused across restarts
|
|
108
121
|
const IN_MEMORY_FALLBACK_KEY = randomBytes(32).toString("hex");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/wallet/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/wallet/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x402ReplayStore.d.ts","sourceRoot":"","sources":["../../src/lib/x402ReplayStore.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,SAAS,GAAG,MAAM,CAAC;CAC7B;AA0DD,wBAAsB,wBAAwB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAUnH"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// ─── x402 Replay Store ─────────────────────────────────────────────────
|
|
2
|
+
// Durable replay protection. Uses Upstash Redis REST when configured, falling
|
|
3
|
+
// back to an atomic local JSON file so a Single-Instance Production Deployment does
|
|
4
|
+
// not lose replay state on process restart.
|
|
5
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
6
|
+
import { createHash } from "crypto";
|
|
7
|
+
import { fetchWithTimeoutAndRetry } from "./http.js";
|
|
8
|
+
import { readJsonFile, stateFile, writeJsonFileAtomic } from "./persistentJsonStore.js";
|
|
9
|
+
const FILE_PATH = stateFile("x402_replay.json", "SAFEHANDS_X402_REPLAY_STORE_PATH");
|
|
10
|
+
function replayKey(paymentHeader) {
|
|
11
|
+
return `x402:${createHash("sha256").update(paymentHeader).digest("hex")}`;
|
|
12
|
+
}
|
|
13
|
+
async function upstashCommand(args) {
|
|
14
|
+
const url = process.env.UPSTASH_REDIS_REST_URL || process.env.SAFEHANDS_REDIS_REST_URL;
|
|
15
|
+
const token = process.env.UPSTASH_REDIS_REST_TOKEN || process.env.SAFEHANDS_REDIS_REST_TOKEN;
|
|
16
|
+
if (!url || !token)
|
|
17
|
+
throw new Error("Upstash Redis REST is not configured");
|
|
18
|
+
// The URL is operator-controlled env, so it goes through the SSRF-safe layer.
|
|
19
|
+
// A failed call falls back to the file store (or throws when
|
|
20
|
+
// SAFEHANDS_X402_REPLAY_REDIS_REQUIRED=true), so the retry budget stays small.
|
|
21
|
+
const res = await fetchWithTimeoutAndRetry(url, {
|
|
22
|
+
method: "POST",
|
|
23
|
+
headers: {
|
|
24
|
+
Authorization: `Bearer ${token}`,
|
|
25
|
+
"Content-Type": "application/json",
|
|
26
|
+
},
|
|
27
|
+
body: JSON.stringify(args),
|
|
28
|
+
timeoutMs: 5_000,
|
|
29
|
+
retries: 1,
|
|
30
|
+
});
|
|
31
|
+
if (!res.ok)
|
|
32
|
+
throw new Error(`Upstash Redis REST returned ${res.status}`);
|
|
33
|
+
const body = await res.json();
|
|
34
|
+
if (body.error)
|
|
35
|
+
throw new Error(body.error);
|
|
36
|
+
return body.result;
|
|
37
|
+
}
|
|
38
|
+
async function checkAndRecordUpstash(paymentHeader, windowMs) {
|
|
39
|
+
const key = replayKey(paymentHeader);
|
|
40
|
+
const exists = await upstashCommand(["GET", key]);
|
|
41
|
+
if (exists !== null && exists !== undefined)
|
|
42
|
+
return { allowed: false, backend: "upstash" };
|
|
43
|
+
const ttlSeconds = Math.max(1, Math.ceil(windowMs / 1000));
|
|
44
|
+
const setResult = await upstashCommand(["SET", key, String(Date.now()), "EX", String(ttlSeconds), "NX"]);
|
|
45
|
+
if (setResult === null)
|
|
46
|
+
return { allowed: false, backend: "upstash" };
|
|
47
|
+
return { allowed: true, backend: "upstash" };
|
|
48
|
+
}
|
|
49
|
+
function checkAndRecordFile(paymentHeader, windowMs) {
|
|
50
|
+
const now = Date.now();
|
|
51
|
+
const key = replayKey(paymentHeader);
|
|
52
|
+
const state = readJsonFile(FILE_PATH, { seen: {} });
|
|
53
|
+
for (const [k, ts] of Object.entries(state.seen)) {
|
|
54
|
+
if (now - ts >= windowMs)
|
|
55
|
+
delete state.seen[k];
|
|
56
|
+
}
|
|
57
|
+
const previous = state.seen[key];
|
|
58
|
+
if (previous !== undefined && now - previous < windowMs) {
|
|
59
|
+
writeJsonFileAtomic(FILE_PATH, state);
|
|
60
|
+
return { allowed: false, backend: "file" };
|
|
61
|
+
}
|
|
62
|
+
state.seen[key] = now;
|
|
63
|
+
writeJsonFileAtomic(FILE_PATH, state);
|
|
64
|
+
return { allowed: true, backend: "file" };
|
|
65
|
+
}
|
|
66
|
+
export async function checkAndRecordX402Replay(paymentHeader, windowMs) {
|
|
67
|
+
const hasUpstash = Boolean((process.env.UPSTASH_REDIS_REST_URL || process.env.SAFEHANDS_REDIS_REST_URL) && (process.env.UPSTASH_REDIS_REST_TOKEN || process.env.SAFEHANDS_REDIS_REST_TOKEN));
|
|
68
|
+
if (hasUpstash) {
|
|
69
|
+
try {
|
|
70
|
+
return await checkAndRecordUpstash(paymentHeader, windowMs);
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
if (process.env.SAFEHANDS_X402_REPLAY_REDIS_REQUIRED === "true")
|
|
74
|
+
throw err;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return checkAndRecordFile(paymentHeader, windowMs);
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=x402ReplayStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x402ReplayStore.js","sourceRoot":"","sources":["../../src/lib/x402ReplayStore.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|
package/dist/sdk.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { evaluateActionPolicy, explainPolicyResult, isUnlimitedApprovalAmount, parseTokenAmountToUnits, } from "./lib/policy/actionPolicyEngine.js";
|
|
2
|
+
export type { ActionPolicyInput, ActionPolicyResult, PolicyDecision, PolicyRiskLevel, PolicyCheck, SafeHandsActionType, } from "./lib/policy/actionPolicyEngine.js";
|
|
3
|
+
export { enforceWriteDecision } from "./lib/policy/writeExecutionGate.js";
|
|
4
|
+
export type { EnforceWriteDecisionOptions } from "./lib/policy/writeExecutionGate.js";
|
|
5
|
+
export { assessRisk } from "./lib/riskEngine.js";
|
|
6
|
+
export type { RiskAssessment, RiskInput, RiskBreakdown, RiskLevel, RiskRecommendation, } from "./lib/riskEngine.js";
|
|
7
|
+
export { evaluateTokenSecurityGate } from "./tools/checkTokenSecurity.js";
|
|
8
|
+
export type { TokenSecurityGateResult, TokenSecurityVerdict } from "./tools/checkTokenSecurity.js";
|
|
9
|
+
export { ok, fail, errorMessage } from "./lib/toolResponse.js";
|
|
10
|
+
export type { ToolResponse, ToolSuccess, ToolFailure, ToolError } from "./lib/toolResponse.js";
|
|
11
|
+
export { getCapabilityFlags, getActiveNetworkConfig, getGates, isReadOnlyMode, isExecutionAvailable, writeToolsEnabled, } from "./lib/config.js";
|
|
12
|
+
export type { CapabilityFlags, SafetyGates, ActiveNetworkConfig } from "./lib/config.js";
|
|
13
|
+
export { CHAIN_ID, PHAROS_ENVIRONMENT, IS_MAINNET } from "./lib/constants.js";
|
|
14
|
+
//# sourceMappingURL=sdk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,oCAAoC,CAAC;AAC5C,YAAY,EACV,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,WAAW,EACX,mBAAmB,GACpB,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,YAAY,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AAGtF,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,YAAY,EACV,cAAc,EACd,SAAS,EACT,aAAa,EACb,SAAS,EACT,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,YAAY,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAGnG,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC/D,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAG/F,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,QAAQ,EACR,cAAc,EACd,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGzF,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
|