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
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type SignerResult, type SignerPurpose } from "./signer/index.js";
|
|
2
|
+
import { type ToolFailure } from "./toolResponse.js";
|
|
3
|
+
export interface ManagedExecutionReady {
|
|
4
|
+
signer: SignerResult;
|
|
5
|
+
}
|
|
6
|
+
export declare function isManagedExecutionFailure(r: ManagedExecutionReady | ToolFailure): r is ToolFailure;
|
|
7
|
+
/**
|
|
8
|
+
* Resolves a signer that is cleared for managed/mainnet execution, or returns
|
|
9
|
+
* a structured ToolFailure describing exactly which gate failed.
|
|
10
|
+
*
|
|
11
|
+
* Failure codes:
|
|
12
|
+
* - WRITE_TOOLS_DISABLED writes are off by default
|
|
13
|
+
* - NO_SIGNER_AVAILABLE / INVALID_PRIVATE_KEY / WALLET_ENCRYPTION_KEY_REQUIRED
|
|
14
|
+
* - REQUIRE_AUTHORIZATION managed wallet not authorized in SafeHandsRegistry
|
|
15
|
+
*/
|
|
16
|
+
export declare function requireManagedExecutionReady(toolName: string, agentId?: string, options?: {
|
|
17
|
+
purpose?: SignerPurpose;
|
|
18
|
+
}): Promise<ManagedExecutionReady | ToolFailure>;
|
|
19
|
+
//# sourceMappingURL=managedExecution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managedExecution.d.ts","sourceRoot":"","sources":["../../src/lib/managedExecution.ts"],"names":[],"mappings":"AAgBA,OAAO,EAA8B,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEtG,OAAO,EAAQ,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAI3D,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,wBAAgB,yBAAyB,CACvC,CAAC,EAAE,qBAAqB,GAAG,WAAW,GACrC,CAAC,IAAI,WAAW,CAElB;AAED;;;;;;;;GAQG;AACH,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,aAAa,CAAA;CAAO,GACxC,OAAO,CAAC,qBAAqB,GAAG,WAAW,CAAC,CAiD9C"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// ─── Managed Execution Gate ────────────────────────────────────────────
|
|
2
|
+
// Centralized safety gate shared by every write/payment tool so that direct
|
|
3
|
+
// calls (send_payment, execute_swap, approve_token, x402_pay_and_fetch,
|
|
4
|
+
// publish_risk_score) are exactly as safe as going through
|
|
5
|
+
// safehands_safe_execute.
|
|
6
|
+
//
|
|
7
|
+
// Safety hierarchy enforced here:
|
|
8
|
+
// 1. WRITE_TOOLS_ENABLED must be true.
|
|
9
|
+
// 2. A signer must be available.
|
|
10
|
+
// 3. For managed-mainnet signers, the wallet must be authorized in
|
|
11
|
+
// SafeHandsRegistry (when REQUIRE_AUTHORIZED_AGENT_FOR_WRITE is on).
|
|
12
|
+
//
|
|
13
|
+
// Funding and per-agent policy are evaluated by each tool after this gate
|
|
14
|
+
// (funding via balance checks, policy via evaluateActionPolicy with agentId).
|
|
15
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
16
|
+
import { getSigner, isSignerFailure } from "./signer/index.js";
|
|
17
|
+
import { checkManagedWalletAuthorization } from "./safeHandsRegistry.js";
|
|
18
|
+
import { fail } from "./toolResponse.js";
|
|
19
|
+
import { REQUIRE_AUTHORIZED_AGENT_FOR_WRITE } from "./constants.js";
|
|
20
|
+
import { getActiveNetwork } from "./networks.js";
|
|
21
|
+
export function isManagedExecutionFailure(r) {
|
|
22
|
+
return "success" in r && r.success === false;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Resolves a signer that is cleared for managed/mainnet execution, or returns
|
|
26
|
+
* a structured ToolFailure describing exactly which gate failed.
|
|
27
|
+
*
|
|
28
|
+
* Failure codes:
|
|
29
|
+
* - WRITE_TOOLS_DISABLED writes are off by default
|
|
30
|
+
* - NO_SIGNER_AVAILABLE / INVALID_PRIVATE_KEY / WALLET_ENCRYPTION_KEY_REQUIRED
|
|
31
|
+
* - REQUIRE_AUTHORIZATION managed wallet not authorized in SafeHandsRegistry
|
|
32
|
+
*/
|
|
33
|
+
export async function requireManagedExecutionReady(toolName, agentId, options = {}) {
|
|
34
|
+
// 1. Write tools must be explicitly enabled.
|
|
35
|
+
if (process.env.WRITE_TOOLS_ENABLED !== "true") {
|
|
36
|
+
return fail("WRITE_TOOLS_DISABLED", `${toolName} is disabled by default. Set WRITE_TOOLS_ENABLED=true only for trusted mainnet execution.`, false, toolName);
|
|
37
|
+
}
|
|
38
|
+
// 1b. The active network must permit execution (executionAllowed). NOTE: Pharos
|
|
39
|
+
// Pacific Mainnet has executionAllowed=true — this gate does NOT block mainnet.
|
|
40
|
+
// The real safety margin on mainnet is WRITE_TOOLS_ENABLED (checked above) + an
|
|
41
|
+
// available signer + registry authorization (below), NOT this network flag.
|
|
42
|
+
const activeNetwork = getActiveNetwork();
|
|
43
|
+
if (!activeNetwork.executionAllowed) {
|
|
44
|
+
return fail("EXECUTION_DISABLED_ON_NETWORK", `${activeNetwork.label} is read-only in SafeHands: execution/write/payment is disabled on this network. ` +
|
|
45
|
+
`Set SAFEHANDS_NETWORK=pacific-mainnet for advanced self-hosted mainnet execution.`, false, toolName);
|
|
46
|
+
}
|
|
47
|
+
// 2. A signer must be available.
|
|
48
|
+
const signer = await getSigner(agentId, options);
|
|
49
|
+
if (isSignerFailure(signer)) {
|
|
50
|
+
return fail(signer.error.code, signer.error.message, false, toolName);
|
|
51
|
+
}
|
|
52
|
+
// 3. Managed-mainnet wallets must be authorized in SafeHandsRegistry.
|
|
53
|
+
if (signer.mode === "managed-mainnet" && REQUIRE_AUTHORIZED_AGENT_FOR_WRITE) {
|
|
54
|
+
const authCheck = await checkManagedWalletAuthorization(signer.address);
|
|
55
|
+
if (!authCheck.authorized) {
|
|
56
|
+
return fail("REQUIRE_AUTHORIZATION", authCheck.errorMessage ||
|
|
57
|
+
`Managed wallet ${signer.address} is not authorized in SafeHandsRegistry. ` +
|
|
58
|
+
`The contract owner must call setAuthorizedAgent(${signer.address}, true), ` +
|
|
59
|
+
`or enable AUTO_AUTHORIZE_AGENT_WALLET=true with RISK_REGISTRY_OWNER_PRIVATE_KEY.`, false, toolName);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return { signer };
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=managedExecution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managedExecution.js","sourceRoot":"","sources":["../../src/lib/managedExecution.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,4EAA4E;AAC5E,wEAAwE;AACxE,2DAA2D;AAC3D,0BAA0B;AAC1B,EAAE;AACF,kCAAkC;AAClC,yCAAyC;AACzC,mCAAmC;AACnC,qEAAqE;AACrE,0EAA0E;AAC1E,EAAE;AACF,0EAA0E;AAC1E,8EAA8E;AAC9E,2EAA2E;AAE3E,OAAO,EAAE,SAAS,EAAE,eAAe,EAAyC,MAAM,mBAAmB,CAAC;AACtG,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,IAAI,EAAoB,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,kCAAkC,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAMjD,MAAM,UAAU,yBAAyB,CACvC,CAAsC;IAEtC,OAAO,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC;AAC/C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,QAAgB,EAChB,OAAgB,EAChB,UAAuC,EAAE;IAEzC,6CAA6C;IAC7C,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,MAAM,EAAE,CAAC;QAC/C,OAAO,IAAI,CACT,sBAAsB,EACtB,GAAG,QAAQ,2FAA2F,EACtG,KAAK,EACL,QAAQ,CACT,CAAC;IACJ,CAAC;IAED,gFAAgF;IAChF,oFAAoF;IACpF,oFAAoF;IACpF,gFAAgF;IAChF,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IACzC,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;QACpC,OAAO,IAAI,CACT,+BAA+B,EAC/B,GAAG,aAAa,CAAC,KAAK,mFAAmF;YACvG,mFAAmF,EACrF,KAAK,EACL,QAAQ,CACT,CAAC;IACJ,CAAC;IAED,iCAAiC;IACjC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACjD,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACxE,CAAC;IAED,sEAAsE;IACtE,IAAI,MAAM,CAAC,IAAI,KAAK,iBAAiB,IAAI,kCAAkC,EAAE,CAAC;QAC5E,MAAM,SAAS,GAAG,MAAM,+BAA+B,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;YAC1B,OAAO,IAAI,CACT,uBAAuB,EACvB,SAAS,CAAC,YAAY;gBACpB,kBAAkB,MAAM,CAAC,OAAO,2CAA2C;oBACzE,mDAAmD,MAAM,CAAC,OAAO,WAAW;oBAC5E,kFAAkF,EACtF,KAAK,EACL,QAAQ,CACT,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { MerkleTree } from "merkletreejs";
|
|
2
|
+
export interface RiskRecordInput {
|
|
3
|
+
target: string;
|
|
4
|
+
actionHash: string;
|
|
5
|
+
score: number;
|
|
6
|
+
level: number;
|
|
7
|
+
recommendation: number;
|
|
8
|
+
policyVersionHash: string;
|
|
9
|
+
evidenceHash: string;
|
|
10
|
+
expiresAt: bigint;
|
|
11
|
+
}
|
|
12
|
+
export declare function queueRiskRecord(record: RiskRecordInput): void;
|
|
13
|
+
export declare function getPendingRecords(): RiskRecordInput[];
|
|
14
|
+
export declare function clearPendingRecords(): void;
|
|
15
|
+
/**
|
|
16
|
+
* Compute the Merkle leaf for a single risk record. This is the canonical leaf
|
|
17
|
+
* encoding — both the writer (buildMerkleTree) and any reader (inclusion proof
|
|
18
|
+
* verification) MUST derive leaves through here so they can never drift from the
|
|
19
|
+
* on-chain SafeHandsRegistry.verifyRiskRecord double-keccak scheme.
|
|
20
|
+
*/
|
|
21
|
+
export declare function computeRiskLeaf(record: RiskRecordInput): `0x${string}`;
|
|
22
|
+
export declare function buildMerkleTree(records: RiskRecordInput[]): MerkleTree;
|
|
23
|
+
//# sourceMappingURL=merkleBatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merkleBatcher.d.ts","sourceRoot":"","sources":["../../src/lib/merkleBatcher.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,QAoBtD;AAED,wBAAgB,iBAAiB,IAAI,eAAe,EAAE,CASrD;AAED,wBAAgB,mBAAmB,SAIlC;AAID;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,KAAK,MAAM,EAAE,CAatE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,UAAU,CAGtE"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { keccak256, encodeAbiParameters, parseAbiParameters } from "viem";
|
|
4
|
+
import { MerkleTree } from "merkletreejs";
|
|
5
|
+
const BATCH_FILE = process.env.SAFEHANDS_RISK_QUEUE_PATH || path.join(process.env.SAFEHANDS_STATE_DIR || process.env.STATE_DIR || ".safehands", "pending_risks.json");
|
|
6
|
+
export function queueRiskRecord(record) {
|
|
7
|
+
let pending = [];
|
|
8
|
+
if (existsSync(BATCH_FILE)) {
|
|
9
|
+
try {
|
|
10
|
+
pending = JSON.parse(readFileSync(BATCH_FILE, "utf-8"), (k, v) => (typeof v === "string" && /^\d+n$/.test(v) ? BigInt(v.slice(0, -1)) : v));
|
|
11
|
+
}
|
|
12
|
+
catch (e) {
|
|
13
|
+
console.warn("Failed to parse pending_risks.json, starting fresh.");
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
pending.push(record);
|
|
17
|
+
const dir = path.dirname(BATCH_FILE);
|
|
18
|
+
if (!existsSync(dir))
|
|
19
|
+
mkdirSync(dir, { recursive: true });
|
|
20
|
+
writeFileSync(BATCH_FILE, JSON.stringify(pending, (k, v) => (typeof v === "bigint" ? v.toString() + "n" : v), 2));
|
|
21
|
+
}
|
|
22
|
+
export function getPendingRecords() {
|
|
23
|
+
if (!existsSync(BATCH_FILE))
|
|
24
|
+
return [];
|
|
25
|
+
try {
|
|
26
|
+
return JSON.parse(readFileSync(BATCH_FILE, "utf-8"), (k, v) => (typeof v === "string" && /^\d+n$/.test(v) ? BigInt(v.slice(0, -1)) : v));
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export function clearPendingRecords() {
|
|
33
|
+
if (existsSync(BATCH_FILE)) {
|
|
34
|
+
writeFileSync(BATCH_FILE, "[]");
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const LEAF_ABI = parseAbiParameters("address, bytes32, uint8, uint8, uint8, bytes32, bytes32, uint64");
|
|
38
|
+
/**
|
|
39
|
+
* Compute the Merkle leaf for a single risk record. This is the canonical leaf
|
|
40
|
+
* encoding — both the writer (buildMerkleTree) and any reader (inclusion proof
|
|
41
|
+
* verification) MUST derive leaves through here so they can never drift from the
|
|
42
|
+
* on-chain SafeHandsRegistry.verifyRiskRecord double-keccak scheme.
|
|
43
|
+
*/
|
|
44
|
+
export function computeRiskLeaf(record) {
|
|
45
|
+
const leafData = encodeAbiParameters(LEAF_ABI, [
|
|
46
|
+
record.target,
|
|
47
|
+
record.actionHash,
|
|
48
|
+
record.score,
|
|
49
|
+
record.level,
|
|
50
|
+
record.recommendation,
|
|
51
|
+
record.policyVersionHash,
|
|
52
|
+
record.evidenceHash,
|
|
53
|
+
record.expiresAt
|
|
54
|
+
]);
|
|
55
|
+
// Double keccak256 to match the Smart Contract.
|
|
56
|
+
return keccak256(keccak256(leafData));
|
|
57
|
+
}
|
|
58
|
+
export function buildMerkleTree(records) {
|
|
59
|
+
const leaves = records.map(computeRiskLeaf);
|
|
60
|
+
return new MerkleTree(leaves, keccak256, { sortPairs: true });
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=merkleBatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merkleBatcher.js","sourceRoot":"","sources":["../../src/lib/merkleBatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export type NetworkName = "pacific-mainnet" | "atlantic-testnet";
|
|
2
|
+
export interface PharosNetwork {
|
|
3
|
+
name: NetworkName;
|
|
4
|
+
label: string;
|
|
5
|
+
chainId: number;
|
|
6
|
+
nativeToken: string;
|
|
7
|
+
/** Public, key-free default RPC endpoint. */
|
|
8
|
+
defaultRpcUrl: string;
|
|
9
|
+
explorerUrl: string;
|
|
10
|
+
socialScanUrl?: string;
|
|
11
|
+
isMainnet: boolean;
|
|
12
|
+
/** Read-only SafeHands checks are always allowed. */
|
|
13
|
+
readOnlyChecks: boolean;
|
|
14
|
+
/** Whether execution/write/payment is permitted on this network at all. */
|
|
15
|
+
executionAllowed: boolean;
|
|
16
|
+
}
|
|
17
|
+
/** Mainnet-first default. */
|
|
18
|
+
export declare const DEFAULT_NETWORK_NAME: NetworkName;
|
|
19
|
+
export declare const NETWORKS: Record<NetworkName, PharosNetwork>;
|
|
20
|
+
export declare function isNetworkName(value: string | undefined): value is NetworkName;
|
|
21
|
+
/** Resolve the active network name from SAFEHANDS_NETWORK (default mainnet-first). */
|
|
22
|
+
export declare function getActiveNetworkName(): NetworkName;
|
|
23
|
+
export declare function getActiveNetwork(): PharosNetwork;
|
|
24
|
+
export declare function getNetworkByChainId(chainId: number): PharosNetwork | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Resolve the RPC URL for a network. Priority:
|
|
27
|
+
* 1. Network-specific override env var
|
|
28
|
+
* 2. Optional provider env vars (ZAN > Alchemy > Nirvana) — mainnet only
|
|
29
|
+
* 3. The public, key-free default RPC
|
|
30
|
+
* Premium/keyed URLs are NEVER hardcoded — they are only ever read from env.
|
|
31
|
+
*/
|
|
32
|
+
export declare function resolveRpcUrl(network: PharosNetwork): string;
|
|
33
|
+
export type RpcProviderName = "zan" | "alchemy" | "nirvana" | "custom" | "pharos-public";
|
|
34
|
+
/**
|
|
35
|
+
* Redacted RPC provider descriptor — the provider NAME and whether it came from
|
|
36
|
+
* env, but NEVER the URL or API key. Safe to expose in /public-config and
|
|
37
|
+
* /infra/status. The provider name is inferred from which env var is set (an
|
|
38
|
+
* explicit PHAROS_RPC_PROVIDER label wins for custom URLs).
|
|
39
|
+
*/
|
|
40
|
+
export interface RpcProviderDescriptor {
|
|
41
|
+
name: RpcProviderName;
|
|
42
|
+
configuredViaEnv: boolean;
|
|
43
|
+
usingPublicDefault: boolean;
|
|
44
|
+
}
|
|
45
|
+
export declare function resolveRpcProvider(network: PharosNetwork): RpcProviderDescriptor;
|
|
46
|
+
/** Build the explorer transaction-link base (e.g. https://www.pharosscan.xyz/tx/). */
|
|
47
|
+
export declare function explorerTxBase(network: PharosNetwork): string;
|
|
48
|
+
//# sourceMappingURL=networks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"networks.d.ts","sourceRoot":"","sources":["../../src/lib/networks.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG,kBAAkB,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,qDAAqD;IACrD,cAAc,EAAE,OAAO,CAAC;IACxB,2EAA2E;IAC3E,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,6BAA6B;AAC7B,eAAO,MAAM,oBAAoB,EAAE,WAA+B,CAAC;AAEnE,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE,aAAa,CA8BvD,CAAC;AAEF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,IAAI,WAAW,CAE7E;AAED,sFAAsF;AACtF,wBAAgB,oBAAoB,IAAI,WAAW,CAGlD;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CAEhD;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAE9E;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAc5D;AAED,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,eAAe,CAAC;AAEzF;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,eAAe,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,GAAG,qBAAqB,CAgBhF;AAED,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAG7D"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// ─── SafeHands Network Registry ────────────────────────────────────────
|
|
2
|
+
// Mainnet-first: Pharos Pacific Mainnet is the DEFAULT active network for
|
|
3
|
+
// read-only SafeHands checks. Atlantic Testnet remains available via the
|
|
4
|
+
// SAFEHANDS_NETWORK env var for demo, compatibility, contract testing, and
|
|
5
|
+
// x402 testing.
|
|
6
|
+
//
|
|
7
|
+
// Read-only by default. No private keys and no premium/keyed RPC URLs are
|
|
8
|
+
// hardcoded here — optional provider URLs (ZAN/Alchemy/Nirvana) are read from
|
|
9
|
+
// the environment only.
|
|
10
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
11
|
+
/** Mainnet-first default. */
|
|
12
|
+
export const DEFAULT_NETWORK_NAME = "pacific-mainnet";
|
|
13
|
+
export const NETWORKS = {
|
|
14
|
+
"pacific-mainnet": {
|
|
15
|
+
name: "pacific-mainnet",
|
|
16
|
+
label: "Pharos Pacific Mainnet",
|
|
17
|
+
chainId: 1672,
|
|
18
|
+
nativeToken: "PROS",
|
|
19
|
+
defaultRpcUrl: "https://rpc.pharos.xyz",
|
|
20
|
+
explorerUrl: "https://www.pharosscan.xyz",
|
|
21
|
+
socialScanUrl: "https://pharos.socialscan.io",
|
|
22
|
+
isMainnet: true,
|
|
23
|
+
readOnlyChecks: true,
|
|
24
|
+
// Execution at the network level targets Pacific Mainnet (all-mainnet), but
|
|
25
|
+
// every write stays gated by WRITE_TOOLS_ENABLED + MANAGED_WALLET_ENABLED
|
|
26
|
+
// (both default false) — a hosted deployment is read-only by default.
|
|
27
|
+
executionAllowed: true,
|
|
28
|
+
},
|
|
29
|
+
"atlantic-testnet": {
|
|
30
|
+
name: "atlantic-testnet",
|
|
31
|
+
label: "Pharos Atlantic Testnet",
|
|
32
|
+
chainId: 688689,
|
|
33
|
+
nativeToken: "PROS",
|
|
34
|
+
defaultRpcUrl: "https://atlantic.dplabs-internal.com/",
|
|
35
|
+
explorerUrl: "https://atlantic.pharosscan.xyz/",
|
|
36
|
+
socialScanUrl: "https://pharos.socialscan.io",
|
|
37
|
+
isMainnet: false,
|
|
38
|
+
readOnlyChecks: true,
|
|
39
|
+
// No mainnet execution — SafeHands is all-mainnet. Atlantic remains for
|
|
40
|
+
// read-only checks / compatibility only.
|
|
41
|
+
executionAllowed: false,
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
export function isNetworkName(value) {
|
|
45
|
+
return value === "pacific-mainnet" || value === "atlantic-testnet";
|
|
46
|
+
}
|
|
47
|
+
/** Resolve the active network name from SAFEHANDS_NETWORK (default mainnet-first). */
|
|
48
|
+
export function getActiveNetworkName() {
|
|
49
|
+
const raw = process.env.SAFEHANDS_NETWORK;
|
|
50
|
+
return isNetworkName(raw) ? raw : DEFAULT_NETWORK_NAME;
|
|
51
|
+
}
|
|
52
|
+
export function getActiveNetwork() {
|
|
53
|
+
return NETWORKS[getActiveNetworkName()];
|
|
54
|
+
}
|
|
55
|
+
export function getNetworkByChainId(chainId) {
|
|
56
|
+
return Object.values(NETWORKS).find((n) => n.chainId === chainId);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Resolve the RPC URL for a network. Priority:
|
|
60
|
+
* 1. Network-specific override env var
|
|
61
|
+
* 2. Optional provider env vars (ZAN > Alchemy > Nirvana) — mainnet only
|
|
62
|
+
* 3. The public, key-free default RPC
|
|
63
|
+
* Premium/keyed URLs are NEVER hardcoded — they are only ever read from env.
|
|
64
|
+
*/
|
|
65
|
+
export function resolveRpcUrl(network) {
|
|
66
|
+
if (network.name === "pacific-mainnet") {
|
|
67
|
+
return (process.env.PHAROS_MAINNET_RPC_URL ||
|
|
68
|
+
process.env.PHAROS_PACIFIC_RPC_URL ||
|
|
69
|
+
process.env.PHAROS_RPC_URL ||
|
|
70
|
+
process.env.ZAN_PHAROS_MAINNET_RPC_URL ||
|
|
71
|
+
process.env.PHAROS_ZAN_RPC_URL ||
|
|
72
|
+
process.env.ALCHEMY_PHAROS_MAINNET_RPC_URL ||
|
|
73
|
+
process.env.NIRVANA_PHAROS_MAINNET_RPC_URL ||
|
|
74
|
+
network.defaultRpcUrl);
|
|
75
|
+
}
|
|
76
|
+
return process.env.PHAROS_ATLANTIC_RPC_URL || network.defaultRpcUrl;
|
|
77
|
+
}
|
|
78
|
+
export function resolveRpcProvider(network) {
|
|
79
|
+
const explicit = process.env.PHAROS_RPC_PROVIDER?.trim().toLowerCase();
|
|
80
|
+
const labelled = (fallback) => explicit === "zan" || explicit === "alchemy" || explicit === "nirvana" || explicit === "custom" || explicit === "pharos-public"
|
|
81
|
+
? explicit
|
|
82
|
+
: fallback;
|
|
83
|
+
if (network.name === "pacific-mainnet") {
|
|
84
|
+
if (process.env.PHAROS_MAINNET_RPC_URL || process.env.PHAROS_PACIFIC_RPC_URL || process.env.PHAROS_RPC_URL)
|
|
85
|
+
return { name: labelled("custom"), configuredViaEnv: true, usingPublicDefault: false };
|
|
86
|
+
if (process.env.ZAN_PHAROS_MAINNET_RPC_URL || process.env.PHAROS_ZAN_RPC_URL)
|
|
87
|
+
return { name: "zan", configuredViaEnv: true, usingPublicDefault: false };
|
|
88
|
+
if (process.env.ALCHEMY_PHAROS_MAINNET_RPC_URL)
|
|
89
|
+
return { name: "alchemy", configuredViaEnv: true, usingPublicDefault: false };
|
|
90
|
+
if (process.env.NIRVANA_PHAROS_MAINNET_RPC_URL)
|
|
91
|
+
return { name: "nirvana", configuredViaEnv: true, usingPublicDefault: false };
|
|
92
|
+
return { name: "pharos-public", configuredViaEnv: false, usingPublicDefault: true };
|
|
93
|
+
}
|
|
94
|
+
if (process.env.PHAROS_ATLANTIC_RPC_URL)
|
|
95
|
+
return { name: labelled("custom"), configuredViaEnv: true, usingPublicDefault: false };
|
|
96
|
+
return { name: "pharos-public", configuredViaEnv: false, usingPublicDefault: true };
|
|
97
|
+
}
|
|
98
|
+
/** Build the explorer transaction-link base (e.g. https://www.pharosscan.xyz/tx/). */
|
|
99
|
+
export function explorerTxBase(network) {
|
|
100
|
+
const base = network.explorerUrl.replace(/\/+$/, "");
|
|
101
|
+
return `${base}/tx/`;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=networks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"networks.js","sourceRoot":"","sources":["../../src/lib/networks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ApiKeyResolution } from "./apiKey.js";
|
|
2
|
+
import type { Scope } from "./scopes.js";
|
|
3
|
+
export type CallerType = "anonymous" | "api-key" | "agent" | "a2a";
|
|
4
|
+
export interface AccessContext {
|
|
5
|
+
callerType: CallerType;
|
|
6
|
+
/** keyId (hash prefix) for a valid key — never the raw key. */
|
|
7
|
+
keyId: string | null;
|
|
8
|
+
/** Granted scopes for a valid key (empty for anonymous). */
|
|
9
|
+
scopes: Scope[];
|
|
10
|
+
/** Sanitized, untrusted, display-only. */
|
|
11
|
+
agentId: string | null;
|
|
12
|
+
a2aPeerId: string | null;
|
|
13
|
+
requestId: string | null;
|
|
14
|
+
}
|
|
15
|
+
/** Validate + normalize an untrusted id; returns null if missing/malformed. */
|
|
16
|
+
export declare function sanitizeId(value: unknown): string | null;
|
|
17
|
+
/** Derive the access tier from the endpoint + key status. */
|
|
18
|
+
export declare function callerTypeFor(path: string, resolution: ApiKeyResolution): CallerType;
|
|
19
|
+
/**
|
|
20
|
+
* Build the sanitized access context. Reads only whitelisted identity fields —
|
|
21
|
+
* raw key/headers/IP/payload are never copied in.
|
|
22
|
+
*/
|
|
23
|
+
export declare function buildAccessContext(args: {
|
|
24
|
+
path: string;
|
|
25
|
+
resolution: ApiKeyResolution;
|
|
26
|
+
body: unknown;
|
|
27
|
+
requestId?: string | null;
|
|
28
|
+
}): AccessContext;
|
|
29
|
+
//# sourceMappingURL=accessContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accessContext.d.ts","sourceRoot":"","sources":["../../../src/lib/observability/accessContext.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,UAAU,CAAC;IACvB,+DAA+D;IAC/D,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,4DAA4D;IAC5D,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAKD,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAIxD;AAOD,6DAA6D;AAC7D,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,GAAG,UAAU,CAKpF;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,gBAAgB,CAAC;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,GAAG,aAAa,CAUhB"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// ─── Access Context ──────────────────────────────────────────────
|
|
2
|
+
// Builds a SANITIZED, secret-free caller identity for a request. It carries the
|
|
3
|
+
// access tier (callerType), the keyId (hash prefix) + granted scopes for a valid
|
|
4
|
+
// key, and length/charset-capped agentId/a2aPeerId pulled from the request body.
|
|
5
|
+
//
|
|
6
|
+
// NEVER captured: raw API keys, Authorization/other headers, client IP, or raw
|
|
7
|
+
// payloads. agentId/a2aPeerId are UNTRUSTED display-only identity (validated +
|
|
8
|
+
// dropped if malformed) — they are not used for any security decision. Pure +
|
|
9
|
+
// offline; no signing/wallet/write primitives.
|
|
10
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
11
|
+
/** Safe identity charset: short, printable, no whitespace/control chars. */
|
|
12
|
+
const ID_RE = /^[A-Za-z0-9._:-]{1,64}$/;
|
|
13
|
+
/** Validate + normalize an untrusted id; returns null if missing/malformed. */
|
|
14
|
+
export function sanitizeId(value) {
|
|
15
|
+
if (typeof value !== "string")
|
|
16
|
+
return null;
|
|
17
|
+
const trimmed = value.trim();
|
|
18
|
+
return ID_RE.test(trimmed) ? trimmed : null;
|
|
19
|
+
}
|
|
20
|
+
function bodyString(body, key) {
|
|
21
|
+
if (!body || typeof body !== "object")
|
|
22
|
+
return undefined;
|
|
23
|
+
return body[key];
|
|
24
|
+
}
|
|
25
|
+
/** Derive the access tier from the endpoint + key status. */
|
|
26
|
+
export function callerTypeFor(path, resolution) {
|
|
27
|
+
if (path === "/agent/a2a/check")
|
|
28
|
+
return "a2a";
|
|
29
|
+
if (path === "/agent/check")
|
|
30
|
+
return "agent";
|
|
31
|
+
if (resolution.status === "valid")
|
|
32
|
+
return "api-key";
|
|
33
|
+
return "anonymous";
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Build the sanitized access context. Reads only whitelisted identity fields —
|
|
37
|
+
* raw key/headers/IP/payload are never copied in.
|
|
38
|
+
*/
|
|
39
|
+
export function buildAccessContext(args) {
|
|
40
|
+
const { path, resolution, body } = args;
|
|
41
|
+
return {
|
|
42
|
+
callerType: callerTypeFor(path, resolution),
|
|
43
|
+
keyId: resolution.status === "valid" ? resolution.keyId : null,
|
|
44
|
+
scopes: resolution.scopes ? [...resolution.scopes] : [],
|
|
45
|
+
agentId: sanitizeId(bodyString(body, "agentId")),
|
|
46
|
+
a2aPeerId: sanitizeId(bodyString(body, "callerAgent") ?? bodyString(body, "a2aPeerId")),
|
|
47
|
+
requestId: typeof args.requestId === "string" ? args.requestId : null,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=accessContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accessContext.js","sourceRoot":"","sources":["../../../src/lib/observability/accessContext.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,gFAAgF;AAChF,iFAAiF;AACjF,iFAAiF;AACjF,EAAE;AACF,+EAA+E;AAC/E,+EAA+E;AAC/E,8EAA8E;AAC9E,+CAA+C;AAC/C,2EAA2E;AAmB3E,4EAA4E;AAC5E,MAAM,KAAK,GAAG,yBAAyB,CAAC;AAExC,+EAA+E;AAC/E,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9C,CAAC;AAED,SAAS,UAAU,CAAC,IAAa,EAAE,GAAW;IAC5C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACxD,OAAQ,IAAgC,CAAC,GAAG,CAAC,CAAC;AAChD,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,UAA4B;IACtE,IAAI,IAAI,KAAK,kBAAkB;QAAE,OAAO,KAAK,CAAC;IAC9C,IAAI,IAAI,KAAK,cAAc;QAAE,OAAO,OAAO,CAAC;IAC5C,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC;IACpD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAKlC;IACC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IACxC,OAAO;QACL,UAAU,EAAE,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC;QAC3C,KAAK,EAAE,UAAU,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;QAC9D,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;QACvD,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAChD,SAAS,EAAE,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACvF,SAAS,EAAE,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;KACtE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { ActivityItem, CallerType } from "./sanitize.js";
|
|
2
|
+
type DecisionKey = "ALLOW" | "BLOCK" | "REQUIRE_CONFIRMATION" | "PREPARE_ONLY" | "NONE";
|
|
3
|
+
type RiskKey = "CRITICAL" | "HIGH" | "MEDIUM" | "LOW" | "UNKNOWN";
|
|
4
|
+
type AccessTierKey = "anonymous" | "api-key" | "agent" | "a2a";
|
|
5
|
+
export interface ActivitySummary {
|
|
6
|
+
window: {
|
|
7
|
+
capacity: number;
|
|
8
|
+
size: number;
|
|
9
|
+
};
|
|
10
|
+
totals: {
|
|
11
|
+
recorded: number;
|
|
12
|
+
rateLimited: number;
|
|
13
|
+
byCaller: Record<CallerType, number>;
|
|
14
|
+
byAccessTier: Record<AccessTierKey, number>;
|
|
15
|
+
byDecision: Record<DecisionKey, number>;
|
|
16
|
+
byRisk: Record<RiskKey, number>;
|
|
17
|
+
byEndpoint: Record<string, number>;
|
|
18
|
+
byPolicyPreset: Record<string, number>;
|
|
19
|
+
};
|
|
20
|
+
lastActivityAt: string | null;
|
|
21
|
+
}
|
|
22
|
+
export interface ActivityMetrics {
|
|
23
|
+
uptimeSeconds: number;
|
|
24
|
+
totalChecks: number;
|
|
25
|
+
totalAgentChecks: number;
|
|
26
|
+
totalA2AChecks: number;
|
|
27
|
+
totalBlocked: number;
|
|
28
|
+
totalRequireConfirmation: number;
|
|
29
|
+
totalPrepareOnly: number;
|
|
30
|
+
totalAllowed: number;
|
|
31
|
+
totalRateLimited: number;
|
|
32
|
+
rateLimitedByTier: Record<AccessTierKey, number>;
|
|
33
|
+
ring: {
|
|
34
|
+
capacity: number;
|
|
35
|
+
size: number;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export declare class ActivityStore {
|
|
39
|
+
private capacity;
|
|
40
|
+
private buf;
|
|
41
|
+
private head;
|
|
42
|
+
private size;
|
|
43
|
+
private startedAtMs;
|
|
44
|
+
private lastActivityAt;
|
|
45
|
+
private recorded;
|
|
46
|
+
private rateLimited;
|
|
47
|
+
private rateLimitedByTier;
|
|
48
|
+
private byCaller;
|
|
49
|
+
private byAccessTier;
|
|
50
|
+
private byDecision;
|
|
51
|
+
private byRisk;
|
|
52
|
+
private byEndpoint;
|
|
53
|
+
private byPolicyPreset;
|
|
54
|
+
constructor(capacity?: number);
|
|
55
|
+
/** Resize/reset the ring (used at server start from env). Clears all state. */
|
|
56
|
+
configure(capacity: number): void;
|
|
57
|
+
/** Clear the buffer + counters (tests + reconfigure). */
|
|
58
|
+
reset(): void;
|
|
59
|
+
record(item: ActivityItem): void;
|
|
60
|
+
/** Count a rate-limited (429) request that never reached a handler. */
|
|
61
|
+
recordRateLimited(tier?: string): void;
|
|
62
|
+
/** Newest-first slice of the most recent items (sanitized copies). */
|
|
63
|
+
recent(limit: number): ActivityItem[];
|
|
64
|
+
summary(): ActivitySummary;
|
|
65
|
+
metrics(): ActivityMetrics;
|
|
66
|
+
}
|
|
67
|
+
/** Process-wide singleton used by the server + activity routes. */
|
|
68
|
+
export declare const activityStore: ActivityStore;
|
|
69
|
+
export {};
|
|
70
|
+
//# sourceMappingURL=activityStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activityStore.d.ts","sourceRoot":"","sources":["../../../src/lib/observability/activityStore.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAM9D,KAAK,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,sBAAsB,GAAG,cAAc,GAAG,MAAM,CAAC;AACxF,KAAK,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;AAYlE,KAAK,aAAa,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,CAAC;AAK/D,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACrC,YAAY,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC5C,UAAU,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAChC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACxC,CAAC;IACF,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,wBAAwB,EAAE,MAAM,CAAC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACjD,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C;AAOD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,GAAG,CAA+B;IAC1C,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAuB;IAE7C,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,iBAAiB,CAAsB;IAC/C,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,cAAc,CAA8B;gBAExC,QAAQ,GAAE,MAAyB;IAK/C,+EAA+E;IAC/E,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKjC,yDAAyD;IACzD,KAAK,IAAI,IAAI;IAiBb,MAAM,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAsBhC,uEAAuE;IACvE,iBAAiB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAKtC,sEAAsE;IACtE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE;IAWrC,OAAO,IAAI,eAAe;IAiB1B,OAAO,IAAI,eAAe;CAe3B;AAED,mEAAmE;AACnE,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|