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.
Files changed (566) hide show
  1. package/.agents/policies/default.json +15 -0
  2. package/.env.example +81 -64
  3. package/README.md +301 -444
  4. package/SECURITY.md +112 -0
  5. package/SKILL.md +59 -0
  6. package/contracts/SafeHandsAttestation.sol +182 -0
  7. package/contracts/SafeHandsRegistry.sol +149 -0
  8. package/dist/agent/SafeHandsGuardianAgent.d.ts +39 -0
  9. package/dist/agent/SafeHandsGuardianAgent.d.ts.map +1 -0
  10. package/dist/agent/SafeHandsGuardianAgent.js +98 -0
  11. package/dist/agent/SafeHandsGuardianAgent.js.map +1 -0
  12. package/dist/agent/agentDecisionFormatter.d.ts +43 -0
  13. package/dist/agent/agentDecisionFormatter.d.ts.map +1 -0
  14. package/dist/agent/agentDecisionFormatter.js +96 -0
  15. package/dist/agent/agentDecisionFormatter.js.map +1 -0
  16. package/dist/agent/agentEnrich.d.ts +28 -0
  17. package/dist/agent/agentEnrich.d.ts.map +1 -0
  18. package/dist/agent/agentEnrich.js +99 -0
  19. package/dist/agent/agentEnrich.js.map +1 -0
  20. package/dist/agent/agentIntentClassifier.d.ts +44 -0
  21. package/dist/agent/agentIntentClassifier.d.ts.map +1 -0
  22. package/dist/agent/agentIntentClassifier.js +77 -0
  23. package/dist/agent/agentIntentClassifier.js.map +1 -0
  24. package/dist/agent/agentPolicyResolver.d.ts +44 -0
  25. package/dist/agent/agentPolicyResolver.d.ts.map +1 -0
  26. package/dist/agent/agentPolicyResolver.js +94 -0
  27. package/dist/agent/agentPolicyResolver.js.map +1 -0
  28. package/dist/agent/agentRuntime.d.ts +12 -0
  29. package/dist/agent/agentRuntime.d.ts.map +1 -0
  30. package/dist/agent/agentRuntime.js +31 -0
  31. package/dist/agent/agentRuntime.js.map +1 -0
  32. package/dist/agent/agentToolRouter.d.ts +24 -0
  33. package/dist/agent/agentToolRouter.d.ts.map +1 -0
  34. package/dist/agent/agentToolRouter.js +89 -0
  35. package/dist/agent/agentToolRouter.js.map +1 -0
  36. package/dist/agent/guardianOperator.d.ts +35 -0
  37. package/dist/agent/guardianOperator.d.ts.map +1 -0
  38. package/dist/agent/guardianOperator.js +65 -0
  39. package/dist/agent/guardianOperator.js.map +1 -0
  40. package/dist/agent/index.d.ts +8 -0
  41. package/dist/agent/index.d.ts.map +1 -0
  42. package/dist/agent/index.js +14 -0
  43. package/dist/agent/index.js.map +1 -0
  44. package/dist/api/activityRoutes.d.ts +70 -0
  45. package/dist/api/activityRoutes.d.ts.map +1 -0
  46. package/dist/api/activityRoutes.js +100 -0
  47. package/dist/api/activityRoutes.js.map +1 -0
  48. package/dist/api/agentRoutes.d.ts +16 -0
  49. package/dist/api/agentRoutes.d.ts.map +1 -0
  50. package/dist/api/agentRoutes.js +37 -0
  51. package/dist/api/agentRoutes.js.map +1 -0
  52. package/dist/api/broadcastRoutes.d.ts +34 -0
  53. package/dist/api/broadcastRoutes.d.ts.map +1 -0
  54. package/dist/api/broadcastRoutes.js +147 -0
  55. package/dist/api/broadcastRoutes.js.map +1 -0
  56. package/dist/api/consolePage.d.ts +2 -0
  57. package/dist/api/consolePage.d.ts.map +1 -0
  58. package/dist/api/consolePage.js +206 -0
  59. package/dist/api/consolePage.js.map +1 -0
  60. package/dist/api/httpHardening.d.ts +75 -0
  61. package/dist/api/httpHardening.d.ts.map +1 -0
  62. package/dist/api/httpHardening.js +122 -0
  63. package/dist/api/httpHardening.js.map +1 -0
  64. package/dist/api/indexerRoutes.d.ts +46 -0
  65. package/dist/api/indexerRoutes.d.ts.map +1 -0
  66. package/dist/api/indexerRoutes.js +75 -0
  67. package/dist/api/indexerRoutes.js.map +1 -0
  68. package/dist/api/paidRoutes.d.ts +8 -0
  69. package/dist/api/paidRoutes.d.ts.map +1 -0
  70. package/dist/api/paidRoutes.js +175 -0
  71. package/dist/api/paidRoutes.js.map +1 -0
  72. package/dist/api/prepareRoutes.d.ts +58 -0
  73. package/dist/api/prepareRoutes.d.ts.map +1 -0
  74. package/dist/api/prepareRoutes.js +90 -0
  75. package/dist/api/prepareRoutes.js.map +1 -0
  76. package/dist/api/response.d.ts +39 -0
  77. package/dist/api/response.d.ts.map +1 -0
  78. package/dist/api/response.js +53 -0
  79. package/dist/api/response.js.map +1 -0
  80. package/dist/api/routes.d.ts +175 -0
  81. package/dist/api/routes.d.ts.map +1 -0
  82. package/dist/api/routes.js +276 -0
  83. package/dist/api/routes.js.map +1 -0
  84. package/dist/api/schemas.d.ts +147 -0
  85. package/dist/api/schemas.d.ts.map +1 -0
  86. package/dist/api/schemas.js +81 -0
  87. package/dist/api/schemas.js.map +1 -0
  88. package/dist/api/server.d.ts +11 -0
  89. package/dist/api/server.d.ts.map +1 -0
  90. package/dist/api/server.js +505 -0
  91. package/dist/api/server.js.map +1 -0
  92. package/dist/api/toolRoutes.d.ts +14 -0
  93. package/dist/api/toolRoutes.d.ts.map +1 -0
  94. package/dist/api/toolRoutes.js +138 -0
  95. package/dist/api/toolRoutes.js.map +1 -0
  96. package/dist/api/walletPrepareRoutes.d.ts +74 -0
  97. package/dist/api/walletPrepareRoutes.d.ts.map +1 -0
  98. package/dist/api/walletPrepareRoutes.js +127 -0
  99. package/dist/api/walletPrepareRoutes.js.map +1 -0
  100. package/dist/api/x402Gate.d.ts +51 -0
  101. package/dist/api/x402Gate.d.ts.map +1 -0
  102. package/dist/api/x402Gate.js +184 -0
  103. package/dist/api/x402Gate.js.map +1 -0
  104. package/dist/cli.d.ts +1 -1
  105. package/dist/cli.d.ts.map +1 -1
  106. package/dist/cli.js +29 -1
  107. package/dist/cli.js.map +1 -1
  108. package/dist/data/ecosystemRegistry.data.d.ts +3 -0
  109. package/dist/data/ecosystemRegistry.data.d.ts.map +1 -0
  110. package/dist/data/ecosystemRegistry.data.js +582 -0
  111. package/dist/data/ecosystemRegistry.data.js.map +1 -0
  112. package/dist/demo.d.ts +0 -0
  113. package/dist/demo.d.ts.map +1 -1
  114. package/dist/demo.js +43 -8
  115. package/dist/demo.js.map +1 -1
  116. package/dist/handsafe.zip +0 -0
  117. package/dist/index.d.ts +0 -0
  118. package/dist/index.d.ts.map +0 -0
  119. package/dist/index.js +212 -135
  120. package/dist/index.js.map +1 -1
  121. package/dist/init.d.ts +0 -0
  122. package/dist/init.d.ts.map +1 -1
  123. package/dist/init.js +72 -10
  124. package/dist/init.js.map +1 -1
  125. package/dist/lib/analysis/abiWords.d.ts +17 -0
  126. package/dist/lib/analysis/abiWords.d.ts.map +1 -0
  127. package/dist/lib/analysis/abiWords.js +48 -0
  128. package/dist/lib/analysis/abiWords.js.map +1 -0
  129. package/dist/lib/analysis/approval.d.ts +29 -0
  130. package/dist/lib/analysis/approval.d.ts.map +1 -0
  131. package/dist/lib/analysis/approval.js +189 -0
  132. package/dist/lib/analysis/approval.js.map +1 -0
  133. package/dist/lib/analysis/calldata.d.ts +60 -0
  134. package/dist/lib/analysis/calldata.d.ts.map +1 -0
  135. package/dist/lib/analysis/calldata.js +464 -0
  136. package/dist/lib/analysis/calldata.js.map +1 -0
  137. package/dist/lib/analysis/contractIntel.d.ts +65 -0
  138. package/dist/lib/analysis/contractIntel.d.ts.map +1 -0
  139. package/dist/lib/analysis/contractIntel.js +320 -0
  140. package/dist/lib/analysis/contractIntel.js.map +1 -0
  141. package/dist/lib/analysis/evm.d.ts +42 -0
  142. package/dist/lib/analysis/evm.d.ts.map +1 -0
  143. package/dist/lib/analysis/evm.js +185 -0
  144. package/dist/lib/analysis/evm.js.map +1 -0
  145. package/dist/lib/analysis/gas.d.ts +4 -0
  146. package/dist/lib/analysis/gas.d.ts.map +1 -0
  147. package/dist/lib/analysis/gas.js +13 -0
  148. package/dist/lib/analysis/gas.js.map +1 -0
  149. package/dist/lib/analysis/index.d.ts +11 -0
  150. package/dist/lib/analysis/index.d.ts.map +1 -0
  151. package/dist/lib/analysis/index.js +16 -0
  152. package/dist/lib/analysis/index.js.map +1 -0
  153. package/dist/lib/analysis/pharosTokens.d.ts +31 -0
  154. package/dist/lib/analysis/pharosTokens.d.ts.map +1 -0
  155. package/dist/lib/analysis/pharosTokens.js +78 -0
  156. package/dist/lib/analysis/pharosTokens.js.map +1 -0
  157. package/dist/lib/analysis/safeTx.d.ts +27 -0
  158. package/dist/lib/analysis/safeTx.d.ts.map +1 -0
  159. package/dist/lib/analysis/safeTx.js +118 -0
  160. package/dist/lib/analysis/safeTx.js.map +1 -0
  161. package/dist/lib/analysis/token.d.ts +21 -0
  162. package/dist/lib/analysis/token.d.ts.map +1 -0
  163. package/dist/lib/analysis/token.js +151 -0
  164. package/dist/lib/analysis/token.js.map +1 -0
  165. package/dist/lib/analysis/types.d.ts +49 -0
  166. package/dist/lib/analysis/types.d.ts.map +1 -0
  167. package/dist/lib/analysis/types.js +10 -0
  168. package/dist/lib/analysis/types.js.map +1 -0
  169. package/dist/lib/analysis/x402.d.ts +24 -0
  170. package/dist/lib/analysis/x402.d.ts.map +1 -0
  171. package/dist/lib/analysis/x402.js +60 -0
  172. package/dist/lib/analysis/x402.js.map +1 -0
  173. package/dist/lib/auditLog.d.ts +1 -0
  174. package/dist/lib/auditLog.d.ts.map +1 -1
  175. package/dist/lib/auditLog.js +0 -0
  176. package/dist/lib/auditLog.js.map +1 -1
  177. package/dist/lib/config.d.ts +77 -0
  178. package/dist/lib/config.d.ts.map +1 -0
  179. package/dist/lib/config.js +120 -0
  180. package/dist/lib/config.js.map +1 -0
  181. package/dist/lib/constants.d.ts +246 -97
  182. package/dist/lib/constants.d.ts.map +1 -1
  183. package/dist/lib/constants.js +334 -127
  184. package/dist/lib/constants.js.map +1 -1
  185. package/dist/lib/dodoApi.d.ts +26 -3
  186. package/dist/lib/dodoApi.d.ts.map +1 -1
  187. package/dist/lib/dodoApi.js +80 -17
  188. package/dist/lib/dodoApi.js.map +1 -1
  189. package/dist/lib/ecosystemRegistry.d.ts +126 -0
  190. package/dist/lib/ecosystemRegistry.d.ts.map +1 -0
  191. package/dist/lib/ecosystemRegistry.js +178 -0
  192. package/dist/lib/ecosystemRegistry.js.map +1 -0
  193. package/dist/lib/envLoader.d.ts +0 -0
  194. package/dist/lib/envLoader.d.ts.map +0 -0
  195. package/dist/lib/envLoader.js +39 -18
  196. package/dist/lib/envLoader.js.map +1 -1
  197. package/dist/lib/goldsky.d.ts +58 -0
  198. package/dist/lib/goldsky.d.ts.map +1 -0
  199. package/dist/lib/goldsky.js +275 -0
  200. package/dist/lib/goldsky.js.map +1 -0
  201. package/dist/lib/guardian/decision.d.ts +23 -0
  202. package/dist/lib/guardian/decision.d.ts.map +1 -0
  203. package/dist/lib/guardian/decision.js +40 -0
  204. package/dist/lib/guardian/decision.js.map +1 -0
  205. package/dist/lib/http.d.ts +0 -1
  206. package/dist/lib/http.d.ts.map +1 -1
  207. package/dist/lib/http.js +297 -32
  208. package/dist/lib/http.js.map +1 -1
  209. package/dist/lib/managedExecution.d.ts +19 -0
  210. package/dist/lib/managedExecution.d.ts.map +1 -0
  211. package/dist/lib/managedExecution.js +64 -0
  212. package/dist/lib/managedExecution.js.map +1 -0
  213. package/dist/lib/merkleBatcher.d.ts +23 -0
  214. package/dist/lib/merkleBatcher.d.ts.map +1 -0
  215. package/dist/lib/merkleBatcher.js +62 -0
  216. package/dist/lib/merkleBatcher.js.map +1 -0
  217. package/dist/lib/networks.d.ts +48 -0
  218. package/dist/lib/networks.d.ts.map +1 -0
  219. package/dist/lib/networks.js +103 -0
  220. package/dist/lib/networks.js.map +1 -0
  221. package/dist/lib/observability/accessContext.d.ts +29 -0
  222. package/dist/lib/observability/accessContext.d.ts.map +1 -0
  223. package/dist/lib/observability/accessContext.js +50 -0
  224. package/dist/lib/observability/accessContext.js.map +1 -0
  225. package/dist/lib/observability/activityStore.d.ts +70 -0
  226. package/dist/lib/observability/activityStore.d.ts.map +1 -0
  227. package/dist/lib/observability/activityStore.js +149 -0
  228. package/dist/lib/observability/activityStore.js.map +1 -0
  229. package/dist/lib/observability/apiKey.d.ts +55 -0
  230. package/dist/lib/observability/apiKey.d.ts.map +1 -0
  231. package/dist/lib/observability/apiKey.js +141 -0
  232. package/dist/lib/observability/apiKey.js.map +1 -0
  233. package/dist/lib/observability/logger.d.ts +30 -0
  234. package/dist/lib/observability/logger.d.ts.map +1 -0
  235. package/dist/lib/observability/logger.js +30 -0
  236. package/dist/lib/observability/logger.js.map +1 -0
  237. package/dist/lib/observability/quota.d.ts +33 -0
  238. package/dist/lib/observability/quota.d.ts.map +1 -0
  239. package/dist/lib/observability/quota.js +49 -0
  240. package/dist/lib/observability/quota.js.map +1 -0
  241. package/dist/lib/observability/requestId.d.ts +8 -0
  242. package/dist/lib/observability/requestId.d.ts.map +1 -0
  243. package/dist/lib/observability/requestId.js +24 -0
  244. package/dist/lib/observability/requestId.js.map +1 -0
  245. package/dist/lib/observability/sanitize.d.ts +77 -0
  246. package/dist/lib/observability/sanitize.d.ts.map +1 -0
  247. package/dist/lib/observability/sanitize.js +228 -0
  248. package/dist/lib/observability/sanitize.js.map +1 -0
  249. package/dist/lib/observability/scopes.d.ts +20 -0
  250. package/dist/lib/observability/scopes.d.ts.map +1 -0
  251. package/dist/lib/observability/scopes.js +77 -0
  252. package/dist/lib/observability/scopes.js.map +1 -0
  253. package/dist/lib/okxDexApi.d.ts +106 -0
  254. package/dist/lib/okxDexApi.d.ts.map +1 -0
  255. package/dist/lib/okxDexApi.js +221 -0
  256. package/dist/lib/okxDexApi.js.map +1 -0
  257. package/dist/lib/persistentJsonStore.d.ts +5 -0
  258. package/dist/lib/persistentJsonStore.d.ts.map +1 -0
  259. package/dist/lib/persistentJsonStore.js +39 -0
  260. package/dist/lib/persistentJsonStore.js.map +1 -0
  261. package/dist/lib/pharos/attestationPublisher.d.ts +50 -0
  262. package/dist/lib/pharos/attestationPublisher.d.ts.map +1 -0
  263. package/dist/lib/pharos/attestationPublisher.js +262 -0
  264. package/dist/lib/pharos/attestationPublisher.js.map +1 -0
  265. package/dist/lib/pharos/ecosystem.d.ts +52 -0
  266. package/dist/lib/pharos/ecosystem.d.ts.map +1 -0
  267. package/dist/lib/pharos/ecosystem.js +431 -0
  268. package/dist/lib/pharos/ecosystem.js.map +1 -0
  269. package/dist/lib/pharos/ecosystemEvidence.d.ts +53 -0
  270. package/dist/lib/pharos/ecosystemEvidence.d.ts.map +1 -0
  271. package/dist/lib/pharos/ecosystemEvidence.js +133 -0
  272. package/dist/lib/pharos/ecosystemEvidence.js.map +1 -0
  273. package/dist/lib/pharos/rpc.d.ts +44 -0
  274. package/dist/lib/pharos/rpc.d.ts.map +1 -0
  275. package/dist/lib/pharos/rpc.js +90 -0
  276. package/dist/lib/pharos/rpc.js.map +1 -0
  277. package/dist/lib/pharos/rpcEvidence.d.ts +49 -0
  278. package/dist/lib/pharos/rpcEvidence.d.ts.map +1 -0
  279. package/dist/lib/pharos/rpcEvidence.js +46 -0
  280. package/dist/lib/pharos/rpcEvidence.js.map +1 -0
  281. package/dist/lib/pharos/rpcMethods.d.ts +46 -0
  282. package/dist/lib/pharos/rpcMethods.d.ts.map +1 -0
  283. package/dist/lib/pharos/rpcMethods.js +176 -0
  284. package/dist/lib/pharos/rpcMethods.js.map +1 -0
  285. package/dist/lib/pharos/spvVerifier.d.ts +47 -0
  286. package/dist/lib/pharos/spvVerifier.d.ts.map +1 -0
  287. package/dist/lib/pharos/spvVerifier.js +105 -0
  288. package/dist/lib/pharos/spvVerifier.js.map +1 -0
  289. package/dist/lib/pharos/userSignedBroadcaster.d.ts +10 -0
  290. package/dist/lib/pharos/userSignedBroadcaster.d.ts.map +1 -0
  291. package/dist/lib/pharos/userSignedBroadcaster.js +50 -0
  292. package/dist/lib/pharos/userSignedBroadcaster.js.map +1 -0
  293. package/dist/lib/pharosClient.d.ts +5 -10
  294. package/dist/lib/pharosClient.d.ts.map +1 -1
  295. package/dist/lib/pharosClient.js +9 -16
  296. package/dist/lib/pharosClient.js.map +1 -1
  297. package/dist/lib/policy/actionPolicyEngine.d.ts +37 -1
  298. package/dist/lib/policy/actionPolicyEngine.d.ts.map +1 -1
  299. package/dist/lib/policy/actionPolicyEngine.js +213 -52
  300. package/dist/lib/policy/actionPolicyEngine.js.map +1 -1
  301. package/dist/lib/policy/agentPolicy.d.ts +29 -0
  302. package/dist/lib/policy/agentPolicy.d.ts.map +1 -0
  303. package/dist/lib/policy/agentPolicy.js +154 -0
  304. package/dist/lib/policy/agentPolicy.js.map +1 -0
  305. package/dist/lib/policy/policyPresets.d.ts +30 -0
  306. package/dist/lib/policy/policyPresets.d.ts.map +1 -0
  307. package/dist/lib/policy/policyPresets.js +124 -0
  308. package/dist/lib/policy/policyPresets.js.map +1 -0
  309. package/dist/lib/policy/writeExecutionGate.d.ts +23 -0
  310. package/dist/lib/policy/writeExecutionGate.d.ts.map +1 -0
  311. package/dist/lib/policy/writeExecutionGate.js +65 -0
  312. package/dist/lib/policy/writeExecutionGate.js.map +1 -0
  313. package/dist/lib/preparedTxStore.d.ts +21 -0
  314. package/dist/lib/preparedTxStore.d.ts.map +1 -0
  315. package/dist/lib/preparedTxStore.js +90 -0
  316. package/dist/lib/preparedTxStore.js.map +1 -0
  317. package/dist/lib/price/chainlinkPushProvider.d.ts +34 -0
  318. package/dist/lib/price/chainlinkPushProvider.d.ts.map +1 -0
  319. package/dist/lib/price/chainlinkPushProvider.js +36 -0
  320. package/dist/lib/price/chainlinkPushProvider.js.map +1 -0
  321. package/dist/lib/price/feedRegistry.d.ts +26 -0
  322. package/dist/lib/price/feedRegistry.d.ts.map +1 -0
  323. package/dist/lib/price/feedRegistry.js +67 -0
  324. package/dist/lib/price/feedRegistry.js.map +1 -0
  325. package/dist/lib/price/priceResolver.d.ts +35 -0
  326. package/dist/lib/price/priceResolver.d.ts.map +1 -0
  327. package/dist/lib/price/priceResolver.js +246 -0
  328. package/dist/lib/price/priceResolver.js.map +1 -0
  329. package/dist/lib/price/supraProvider.d.ts +9 -0
  330. package/dist/lib/price/supraProvider.d.ts.map +1 -0
  331. package/dist/lib/price/supraProvider.js +17 -0
  332. package/dist/lib/price/supraProvider.js.map +1 -0
  333. package/dist/lib/price/types.d.ts +67 -0
  334. package/dist/lib/price/types.d.ts.map +1 -0
  335. package/dist/lib/price/types.js +7 -0
  336. package/dist/lib/price/types.js.map +1 -0
  337. package/dist/lib/productionGuards.d.ts +16 -0
  338. package/dist/lib/productionGuards.d.ts.map +1 -0
  339. package/dist/lib/productionGuards.js +93 -0
  340. package/dist/lib/productionGuards.js.map +1 -0
  341. package/dist/lib/recipientSafety.d.ts +5 -0
  342. package/dist/lib/recipientSafety.d.ts.map +1 -0
  343. package/dist/lib/recipientSafety.js +28 -0
  344. package/dist/lib/recipientSafety.js.map +1 -0
  345. package/dist/lib/riskEngine.d.ts +19 -0
  346. package/dist/lib/riskEngine.d.ts.map +1 -1
  347. package/dist/lib/riskEngine.js +107 -38
  348. package/dist/lib/riskEngine.js.map +1 -1
  349. package/dist/lib/riskInclusion.d.ts +72 -0
  350. package/dist/lib/riskInclusion.d.ts.map +1 -0
  351. package/dist/lib/riskInclusion.js +252 -0
  352. package/dist/lib/riskInclusion.js.map +1 -0
  353. package/dist/lib/safeHandsRegistry.d.ts +32 -0
  354. package/dist/lib/safeHandsRegistry.d.ts.map +1 -0
  355. package/dist/lib/safeHandsRegistry.js +151 -0
  356. package/dist/lib/safeHandsRegistry.js.map +1 -0
  357. package/dist/lib/signer/index.d.ts +3 -3
  358. package/dist/lib/signer/index.d.ts.map +1 -1
  359. package/dist/lib/signer/index.js +33 -11
  360. package/dist/lib/signer/index.js.map +1 -1
  361. package/dist/lib/spendAccumulator.d.ts +24 -1
  362. package/dist/lib/spendAccumulator.d.ts.map +1 -1
  363. package/dist/lib/spendAccumulator.js +76 -6
  364. package/dist/lib/spendAccumulator.js.map +1 -1
  365. package/dist/lib/toolResponse.d.ts +6 -1
  366. package/dist/lib/toolResponse.d.ts.map +1 -1
  367. package/dist/lib/toolResponse.js +13 -9
  368. package/dist/lib/toolResponse.js.map +1 -1
  369. package/dist/lib/validation.d.ts +7 -0
  370. package/dist/lib/validation.d.ts.map +1 -0
  371. package/dist/lib/validation.js +62 -0
  372. package/dist/lib/validation.js.map +1 -0
  373. package/dist/lib/wallet/index.d.ts +8 -12
  374. package/dist/lib/wallet/index.d.ts.map +1 -1
  375. package/dist/lib/wallet/index.js +48 -35
  376. package/dist/lib/wallet/index.js.map +1 -1
  377. package/dist/lib/x402ReplayStore.d.ts +6 -0
  378. package/dist/lib/x402ReplayStore.d.ts.map +1 -0
  379. package/dist/lib/x402ReplayStore.js +79 -0
  380. package/dist/lib/x402ReplayStore.js.map +1 -0
  381. package/dist/safehands.zip +0 -0
  382. package/dist/sdk.d.ts +14 -0
  383. package/dist/sdk.d.ts.map +1 -0
  384. package/dist/sdk.js +25 -0
  385. package/dist/sdk.js.map +1 -0
  386. package/dist/tools/approveToken.d.ts +31 -10
  387. package/dist/tools/approveToken.d.ts.map +1 -1
  388. package/dist/tools/approveToken.js +91 -24
  389. package/dist/tools/approveToken.js.map +1 -1
  390. package/dist/tools/assessRisk.d.ts +13 -26
  391. package/dist/tools/assessRisk.d.ts.map +1 -1
  392. package/dist/tools/assessRisk.js +34 -75
  393. package/dist/tools/assessRisk.js.map +1 -1
  394. package/dist/tools/checkAllowance.d.ts +9 -3
  395. package/dist/tools/checkAllowance.d.ts.map +1 -1
  396. package/dist/tools/checkAllowance.js +27 -5
  397. package/dist/tools/checkAllowance.js.map +1 -1
  398. package/dist/tools/checkTokenSecurity.d.ts +62 -5
  399. package/dist/tools/checkTokenSecurity.d.ts.map +1 -1
  400. package/dist/tools/checkTokenSecurity.js +166 -21
  401. package/dist/tools/checkTokenSecurity.js.map +1 -1
  402. package/dist/tools/createAgentWallet.d.ts +4 -2
  403. package/dist/tools/createAgentWallet.d.ts.map +1 -1
  404. package/dist/tools/createAgentWallet.js +36 -31
  405. package/dist/tools/createAgentWallet.js.map +1 -1
  406. package/dist/tools/estimateGas.d.ts +7 -2
  407. package/dist/tools/estimateGas.d.ts.map +1 -1
  408. package/dist/tools/estimateGas.js +16 -10
  409. package/dist/tools/estimateGas.js.map +1 -1
  410. package/dist/tools/executeSwap.d.ts +56 -8
  411. package/dist/tools/executeSwap.d.ts.map +1 -1
  412. package/dist/tools/executeSwap.js +194 -46
  413. package/dist/tools/executeSwap.js.map +1 -1
  414. package/dist/tools/explainRisk.d.ts +9 -9
  415. package/dist/tools/explainRisk.d.ts.map +1 -1
  416. package/dist/tools/explainRisk.js +5 -4
  417. package/dist/tools/explainRisk.js.map +1 -1
  418. package/dist/tools/getAgentPolicy.d.ts +15 -0
  419. package/dist/tools/getAgentPolicy.d.ts.map +1 -0
  420. package/dist/tools/getAgentPolicy.js +16 -0
  421. package/dist/tools/getAgentPolicy.js.map +1 -0
  422. package/dist/tools/getAgentReputation.d.ts +31 -0
  423. package/dist/tools/getAgentReputation.d.ts.map +1 -0
  424. package/dist/tools/getAgentReputation.js +44 -0
  425. package/dist/tools/getAgentReputation.js.map +1 -0
  426. package/dist/tools/getAgentWallet.d.ts +1 -1
  427. package/dist/tools/getAgentWallet.d.ts.map +1 -1
  428. package/dist/tools/getAgentWallet.js +11 -1
  429. package/dist/tools/getAgentWallet.js.map +1 -1
  430. package/dist/tools/getAgentWalletBalance.d.ts +1 -1
  431. package/dist/tools/getAgentWalletBalance.d.ts.map +1 -1
  432. package/dist/tools/getAgentWalletBalance.js +58 -26
  433. package/dist/tools/getAgentWalletBalance.js.map +1 -1
  434. package/dist/tools/getExecutionHistory.d.ts +1 -1
  435. package/dist/tools/getExecutionHistory.d.ts.map +1 -1
  436. package/dist/tools/getExecutionHistory.js +13 -19
  437. package/dist/tools/getExecutionHistory.js.map +1 -1
  438. package/dist/tools/getGasPrice.d.ts +3 -3
  439. package/dist/tools/getGasPrice.d.ts.map +0 -0
  440. package/dist/tools/getGasPrice.js +7 -7
  441. package/dist/tools/getGasPrice.js.map +1 -1
  442. package/dist/tools/getPoolInfo.d.ts +17 -17
  443. package/dist/tools/getPoolInfo.d.ts.map +1 -1
  444. package/dist/tools/getPoolInfo.js +14 -9
  445. package/dist/tools/getPoolInfo.js.map +1 -1
  446. package/dist/tools/getSpvProof.d.ts +24 -0
  447. package/dist/tools/getSpvProof.d.ts.map +1 -0
  448. package/dist/tools/getSpvProof.js +64 -0
  449. package/dist/tools/getSpvProof.js.map +1 -0
  450. package/dist/tools/getTokenPrice.d.ts +28 -85
  451. package/dist/tools/getTokenPrice.d.ts.map +1 -1
  452. package/dist/tools/getTokenPrice.js +87 -94
  453. package/dist/tools/getTokenPrice.js.map +1 -1
  454. package/dist/tools/getTransactionStatus.d.ts +2 -2
  455. package/dist/tools/getTransactionStatus.d.ts.map +0 -0
  456. package/dist/tools/getTransactionStatus.js +0 -0
  457. package/dist/tools/getTransactionStatus.js.map +0 -0
  458. package/dist/tools/getWalletBalance.d.ts +38 -3
  459. package/dist/tools/getWalletBalance.d.ts.map +1 -1
  460. package/dist/tools/getWalletBalance.js +92 -52
  461. package/dist/tools/getWalletBalance.js.map +1 -1
  462. package/dist/tools/publishRiskScore.d.ts +36 -14
  463. package/dist/tools/publishRiskScore.d.ts.map +1 -1
  464. package/dist/tools/publishRiskScore.js +80 -32
  465. package/dist/tools/publishRiskScore.js.map +1 -1
  466. package/dist/tools/queryGoldsky.d.ts +20 -0
  467. package/dist/tools/queryGoldsky.d.ts.map +1 -0
  468. package/dist/tools/queryGoldsky.js +29 -0
  469. package/dist/tools/queryGoldsky.js.map +1 -0
  470. package/dist/tools/queryRiskRegistry.d.ts +14 -14
  471. package/dist/tools/queryRiskRegistry.d.ts.map +1 -1
  472. package/dist/tools/queryRiskRegistry.js +34 -30
  473. package/dist/tools/queryRiskRegistry.js.map +1 -1
  474. package/dist/tools/safehandsPreflightCheck.d.ts +29 -14
  475. package/dist/tools/safehandsPreflightCheck.d.ts.map +1 -1
  476. package/dist/tools/safehandsPreflightCheck.js +133 -6
  477. package/dist/tools/safehandsPreflightCheck.js.map +1 -1
  478. package/dist/tools/safehandsRiskReport.d.ts +29 -14
  479. package/dist/tools/safehandsRiskReport.d.ts.map +1 -1
  480. package/dist/tools/safehandsRiskReport.js +23 -3
  481. package/dist/tools/safehandsRiskReport.js.map +1 -1
  482. package/dist/tools/safehandsSafeExecute.d.ts +1 -1
  483. package/dist/tools/safehandsSafeExecute.d.ts.map +1 -1
  484. package/dist/tools/safehandsSafeExecute.js +100 -17
  485. package/dist/tools/safehandsSafeExecute.js.map +1 -1
  486. package/dist/tools/safehandsWalletHealth.d.ts +15 -1
  487. package/dist/tools/safehandsWalletHealth.d.ts.map +1 -1
  488. package/dist/tools/safehandsWalletHealth.js +67 -25
  489. package/dist/tools/safehandsWalletHealth.js.map +1 -1
  490. package/dist/tools/safehandsX402Preflight.d.ts +3 -3
  491. package/dist/tools/safehandsX402Preflight.d.ts.map +1 -1
  492. package/dist/tools/safehandsX402Preflight.js +24 -3
  493. package/dist/tools/safehandsX402Preflight.js.map +1 -1
  494. package/dist/tools/sendPayment.d.ts +10 -4
  495. package/dist/tools/sendPayment.d.ts.map +1 -1
  496. package/dist/tools/sendPayment.js +63 -36
  497. package/dist/tools/sendPayment.js.map +1 -1
  498. package/dist/tools/setAgentPolicy.d.ts +75 -0
  499. package/dist/tools/setAgentPolicy.d.ts.map +1 -0
  500. package/dist/tools/setAgentPolicy.js +80 -0
  501. package/dist/tools/setAgentPolicy.js.map +1 -0
  502. package/dist/tools/simulateTransaction.d.ts +7 -3
  503. package/dist/tools/simulateTransaction.d.ts.map +1 -1
  504. package/dist/tools/simulateTransaction.js +42 -9
  505. package/dist/tools/simulateTransaction.js.map +1 -1
  506. package/dist/tools/tokenRegistryStatus.d.ts +25 -5
  507. package/dist/tools/tokenRegistryStatus.d.ts.map +1 -1
  508. package/dist/tools/tokenRegistryStatus.js +61 -31
  509. package/dist/tools/tokenRegistryStatus.js.map +1 -1
  510. package/dist/tools/verifyRiskInclusion.d.ts +59 -0
  511. package/dist/tools/verifyRiskInclusion.d.ts.map +1 -0
  512. package/dist/tools/verifyRiskInclusion.js +40 -0
  513. package/dist/tools/verifyRiskInclusion.js.map +1 -0
  514. package/dist/tools/x402PayAndFetch.d.ts +15 -9
  515. package/dist/tools/x402PayAndFetch.d.ts.map +1 -1
  516. package/dist/tools/x402PayAndFetch.js +163 -20
  517. package/dist/tools/x402PayAndFetch.js.map +1 -1
  518. package/dist/worker.d.ts +3 -0
  519. package/dist/worker.d.ts.map +1 -0
  520. package/dist/worker.js +39 -0
  521. package/dist/worker.js.map +1 -0
  522. package/dist/x402Server.d.ts +1 -1
  523. package/dist/x402Server.d.ts.map +1 -1
  524. package/dist/x402Server.js +144 -35
  525. package/dist/x402Server.js.map +1 -1
  526. package/docs/REVIEWER_QUICKSTART.md +113 -0
  527. package/docs/SAFEHANDS_REVIEWER_DEMO_SCRIPT.md +228 -0
  528. package/package.json +131 -73
  529. package/contracts/RiskRegistry.json +0 -223
  530. package/contracts/RiskRegistry.sol +0 -58
  531. package/dist/lib/testDodoLive.d.ts +0 -2
  532. package/dist/lib/testDodoLive.d.ts.map +0 -1
  533. package/dist/lib/testDodoLive.js +0 -105
  534. package/dist/lib/testDodoLive.js.map +0 -1
  535. package/dist/lib/testLiveSafehands.d.ts +0 -2
  536. package/dist/lib/testLiveSafehands.d.ts.map +0 -1
  537. package/dist/lib/testLiveSafehands.js +0 -93
  538. package/dist/lib/testLiveSafehands.js.map +0 -1
  539. package/dist/lib/testRpc.d.ts +0 -2
  540. package/dist/lib/testRpc.d.ts.map +0 -1
  541. package/dist/lib/testRpc.js +0 -30
  542. package/dist/lib/testRpc.js.map +0 -1
  543. package/dist/lib/testRpcLive.d.ts +0 -2
  544. package/dist/lib/testRpcLive.d.ts.map +0 -1
  545. package/dist/lib/testRpcLive.js +0 -89
  546. package/dist/lib/testRpcLive.js.map +0 -1
  547. package/dist/lib/testTools.d.ts +0 -2
  548. package/dist/lib/testTools.d.ts.map +0 -1
  549. package/dist/lib/testTools.js +0 -397
  550. package/dist/lib/testTools.js.map +0 -1
  551. package/dist/lib/testX402Live.d.ts +0 -2
  552. package/dist/lib/testX402Live.d.ts.map +0 -1
  553. package/dist/lib/testX402Live.js +0 -160
  554. package/dist/lib/testX402Live.js.map +0 -1
  555. package/dist/scripts/checkDeploy.d.ts +0 -2
  556. package/dist/scripts/checkDeploy.d.ts.map +0 -1
  557. package/dist/scripts/checkDeploy.js +0 -25
  558. package/dist/scripts/checkDeploy.js.map +0 -1
  559. package/dist/scripts/deployRegistry.d.ts +0 -2
  560. package/dist/scripts/deployRegistry.d.ts.map +0 -1
  561. package/dist/scripts/deployRegistry.js +0 -101
  562. package/dist/scripts/deployRegistry.js.map +0 -1
  563. package/dist/scripts/testRegistry.d.ts +0 -2
  564. package/dist/scripts/testRegistry.d.ts.map +0 -1
  565. package/dist/scripts/testRegistry.js +0 -44
  566. package/dist/scripts/testRegistry.js.map +0 -1
@@ -6,9 +6,11 @@ export declare const x402PayAndFetchSchema: z.ZodObject<{
6
6
  rpcUrl: z.ZodOptional<z.ZodString>;
7
7
  agentId: z.ZodOptional<z.ZodString>;
8
8
  maxPaymentUsdc: z.ZodDefault<z.ZodOptional<z.ZodString>>;
9
- }, "strip", z.ZodTypeAny, {
10
- url: string;
9
+ confirm: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
10
+ }, "strict", z.ZodTypeAny, {
11
11
  method: "GET" | "POST" | "PUT" | "DELETE";
12
+ url: string;
13
+ confirm: boolean;
12
14
  maxPaymentUsdc: string;
13
15
  body?: string | undefined;
14
16
  agentId?: string | undefined;
@@ -18,6 +20,7 @@ export declare const x402PayAndFetchSchema: z.ZodObject<{
18
20
  body?: string | undefined;
19
21
  method?: "GET" | "POST" | "PUT" | "DELETE" | undefined;
20
22
  agentId?: string | undefined;
23
+ confirm?: boolean | undefined;
21
24
  rpcUrl?: string | undefined;
22
25
  maxPaymentUsdc?: string | undefined;
23
26
  }>;
@@ -32,9 +35,11 @@ export declare const x402PayAndFetchTool: {
32
35
  rpcUrl: z.ZodOptional<z.ZodString>;
33
36
  agentId: z.ZodOptional<z.ZodString>;
34
37
  maxPaymentUsdc: z.ZodDefault<z.ZodOptional<z.ZodString>>;
35
- }, "strip", z.ZodTypeAny, {
36
- url: string;
38
+ confirm: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
39
+ }, "strict", z.ZodTypeAny, {
37
40
  method: "GET" | "POST" | "PUT" | "DELETE";
41
+ url: string;
42
+ confirm: boolean;
38
43
  maxPaymentUsdc: string;
39
44
  body?: string | undefined;
40
45
  agentId?: string | undefined;
@@ -44,11 +49,12 @@ export declare const x402PayAndFetchTool: {
44
49
  body?: string | undefined;
45
50
  method?: "GET" | "POST" | "PUT" | "DELETE" | undefined;
46
51
  agentId?: string | undefined;
52
+ confirm?: boolean | undefined;
47
53
  rpcUrl?: string | undefined;
48
54
  maxPaymentUsdc?: string | undefined;
49
55
  }>;
50
56
  };
51
- export declare function handleX402PayAndFetch(raw: X402PayAndFetchInput): Promise<import("../lib/toolResponse.js").ToolFailure | import("../lib/toolResponse.js").ToolSuccess<{
57
+ export declare function handleX402PayAndFetch(raw: X402PayAndFetchInput): Promise<import("../sdk.js").ToolFailure | import("../sdk.js").ToolSuccess<{
52
58
  status: number;
53
59
  statusText: string;
54
60
  data: unknown;
@@ -57,9 +63,9 @@ export declare function handleX402PayAndFetch(raw: X402PayAndFetchInput): Promis
57
63
  chainId: number;
58
64
  environment: string;
59
65
  isMainnet: boolean;
60
- policy: import("../lib/policy/actionPolicyEngine.js").ActionPolicyResult;
66
+ policy: import("../sdk.js").ActionPolicyResult;
61
67
  source: string;
62
- }> | import("../lib/toolResponse.js").ToolSuccess<{
68
+ }> | import("../sdk.js").ToolSuccess<{
63
69
  status: number;
64
70
  statusText: string;
65
71
  data: unknown;
@@ -75,8 +81,8 @@ export declare function handleX402PayAndFetch(raw: X402PayAndFetchInput): Promis
75
81
  chainId: number;
76
82
  environment: string;
77
83
  isMainnet: boolean;
78
- policy: import("../lib/policy/actionPolicyEngine.js").ActionPolicyResult;
79
- testnetPayment: boolean;
84
+ policy: import("../sdk.js").ActionPolicyResult;
85
+ mainnetPayment: boolean;
80
86
  source: string;
81
87
  }>>;
82
88
  //# sourceMappingURL=x402PayAndFetch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"x402PayAndFetch.d.ts","sourceRoot":"","sources":["../../src/tools/x402PayAndFetch.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;EAOhC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEzE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;CAM/B,CAAC;AA0BF,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA6HpE"}
1
+ {"version":3,"file":"x402PayAndFetch.d.ts","sourceRoot":"","sources":["../../src/tools/x402PayAndFetch.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;EAQvB,CAAC;AAEZ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEzE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAM/B,CAAC;AA+DF,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAkPpE"}
@@ -5,23 +5,29 @@
5
5
  import { z } from "zod";
6
6
  import { wrapFetchWithPayment, x402Client } from "@x402/fetch";
7
7
  import { registerExactEvmScheme } from "@x402/evm/exact/client";
8
- import { CHAIN_ID, PHAROS_ENVIRONMENT, RPC_URL, MAX_X402_PAYMENT_USDC, X402_PAYMENT_TOKEN_ADDRESS } from "../lib/constants.js";
8
+ import { CHAIN_ID, PHAROS_ENVIRONMENT, RPC_URL, MAX_X402_PAYMENT_USDC, X402_PAYMENT_TOKEN_ADDRESS, IS_MAINNET, activeX402AllowedTokenAddresses } from "../lib/constants.js";
9
9
  import { assertSafeFetchUrl, fetchWithTimeoutAndRetry } from "../lib/http.js";
10
10
  import { fail, ok, requireWriteToolsEnabled } from "../lib/toolResponse.js";
11
11
  import { getSigner, isSignerFailure } from "../lib/signer/index.js";
12
+ import { checkManagedWalletAuthorization } from "../lib/safeHandsRegistry.js";
13
+ import { REQUIRE_AUTHORIZED_AGENT_FOR_X402 } from "../lib/constants.js";
12
14
  import { evaluateActionPolicy } from "../lib/policy/actionPolicyEngine.js";
15
+ import { enforceWriteDecision } from "../lib/policy/writeExecutionGate.js";
16
+ import { validatePositiveAmount } from "../lib/validation.js";
17
+ import { reserveDailyLimit, releaseReservation, estimateUsd } from "../lib/spendAccumulator.js";
13
18
  export const x402PayAndFetchSchema = z.object({
14
19
  url: z.string().describe("Target URL of the protected resource requiring x402 payment"),
15
20
  method: z.enum(["GET", "POST", "PUT", "DELETE"]).optional().default("GET").describe("HTTP method to use"),
16
21
  body: z.string().optional().describe("Optional stringified JSON request body"),
17
- rpcUrl: z.string().optional().describe("Custom RPC URL for payment verification (defaults to Atlantic Testnet RPC)"),
18
- agentId: z.string().optional().describe("Managed testnet wallet agentId when WALLET_MODE=managed-testnet"),
22
+ rpcUrl: z.string().optional().describe("Custom RPC URL for payment verification"),
23
+ agentId: z.string().optional().describe("Managed wallet agentId when WALLET_MODE=managed-mainnet"),
19
24
  maxPaymentUsdc: z.string().optional().default(MAX_X402_PAYMENT_USDC),
20
- });
25
+ confirm: z.boolean().optional().default(false).describe("Explicit acknowledgement to proceed when SafeHands returns REQUIRE_CONFIRMATION for the payment. Hard BLOCK / SSRF / over-limit / unsupported-token are never overridable."),
26
+ }).strict();
21
27
  export const x402PayAndFetchTool = {
22
28
  name: "x402_pay_and_fetch",
23
29
  description: "Fetch resources from an HTTP x402 payment-gated server. " +
24
- "If the server challenges with HTTP 402, this tool signs the required testnet payment payload and completes the fetch.",
30
+ "If the server challenges with HTTP 402, this tool signs the required mainnet payment payload and completes the fetch.",
25
31
  inputSchema: x402PayAndFetchSchema,
26
32
  };
27
33
  async function readResponseBody(res) {
@@ -47,8 +53,56 @@ function buildFetchOptions(input) {
47
53
  fetchOptions.body = input.body;
48
54
  return fetchOptions;
49
55
  }
56
+ function x402AllowedTokenSet() {
57
+ return new Set(activeX402AllowedTokenAddresses().map((a) => a.toLowerCase()));
58
+ }
59
+ function validateX402Challenge(challengeHeader, maxPaymentUsdc) {
60
+ if (!challengeHeader)
61
+ return null;
62
+ try {
63
+ const decoded = JSON.parse(Buffer.from(challengeHeader, "base64").toString("utf-8"));
64
+ if (decoded.maxAmountRequired) {
65
+ const challengeAmount = Number(decoded.maxAmountRequired) / 1e6;
66
+ if (challengeAmount > Number(maxPaymentUsdc)) {
67
+ return `x402 challenge amount (${challengeAmount} USDC) exceeds maxPaymentUsdc (${maxPaymentUsdc}).`;
68
+ }
69
+ }
70
+ if (decoded.network) {
71
+ const parts = String(decoded.network).split(":");
72
+ const challengeChainId = parts.length === 2 ? Number(parts[1]) : Number(decoded.network);
73
+ if (Number.isFinite(challengeChainId) && challengeChainId !== CHAIN_ID) {
74
+ return `x402 challenge targets chain ${challengeChainId}, expected ${PHAROS_ENVIRONMENT} (${CHAIN_ID}).`;
75
+ }
76
+ }
77
+ if (decoded.asset) {
78
+ const asset = String(decoded.asset).toLowerCase();
79
+ if (!x402AllowedTokenSet().has(asset)) {
80
+ const allowed = activeX402AllowedTokenAddresses().join(", ");
81
+ return `x402 challenge requests payment in unsupported token ${decoded.asset}. Supported for ${PHAROS_ENVIRONMENT}: ${allowed}.`;
82
+ }
83
+ }
84
+ }
85
+ catch {
86
+ // Challenge header not parseable — proceed with caution but don't block
87
+ }
88
+ return null;
89
+ }
50
90
  export async function handleX402PayAndFetch(raw) {
51
- const input = x402PayAndFetchSchema.parse(raw);
91
+ let input;
92
+ try {
93
+ input = x402PayAndFetchSchema.parse(raw);
94
+ }
95
+ catch (err) {
96
+ const msg = err instanceof z.ZodError
97
+ ? err.issues.map((i) => `${i.path.join(".")}: ${i.message}`).join("; ")
98
+ : String(err);
99
+ return fail("VALIDATION_ERROR", `x402_pay_and_fetch input validation failed: ${msg}`, false, "x402_pay_and_fetch");
100
+ }
101
+ if (input.maxPaymentUsdc) {
102
+ const amtErr = validatePositiveAmount(input.maxPaymentUsdc, "maxPaymentUsdc");
103
+ if (amtErr)
104
+ return fail("VALIDATION_ERROR", amtErr, false, "x402_pay_and_fetch");
105
+ }
52
106
  try {
53
107
  await assertSafeFetchUrl(input.url);
54
108
  }
@@ -57,24 +111,43 @@ export async function handleX402PayAndFetch(raw) {
57
111
  }
58
112
  const staticPolicy = evaluateActionPolicy({
59
113
  actionType: "x402_pay_and_fetch",
114
+ agentId: input.agentId,
60
115
  url: input.url,
61
116
  paymentAmountUsdc: input.maxPaymentUsdc,
62
117
  paymentTokenAddress: X402_PAYMENT_TOKEN_ADDRESS,
63
118
  chainId: CHAIN_ID,
64
119
  environment: PHAROS_ENVIRONMENT,
65
- isMainnet: false,
120
+ isMainnet: IS_MAINNET,
66
121
  });
67
122
  if (staticPolicy.decision === "BLOCK") {
68
123
  return fail("POLICY_BLOCKED", staticPolicy.reasons.join(" ") || "x402 request blocked by SafeHands policy.", false, "x402_pay_and_fetch");
69
124
  }
70
125
  const fetchOptions = buildFetchOptions(input);
126
+ // Daily-cap reservation state, hoisted above the try so the catch block can
127
+ // return the budget if the paying fetch throws after the reserve.
128
+ let reservedUsd = 0;
129
+ let reservedWallet = null;
71
130
  try {
72
- const initial = await fetchWithTimeoutAndRetry(input.url, {
73
- ...fetchOptions,
74
- timeoutMs: 10_000,
75
- retries: 1,
76
- retryDelayMs: 250,
77
- });
131
+ let initial;
132
+ try {
133
+ initial = await fetchWithTimeoutAndRetry(input.url, {
134
+ ...fetchOptions,
135
+ timeoutMs: 10_000,
136
+ retries: 1,
137
+ retryDelayMs: 250,
138
+ });
139
+ }
140
+ catch (err) {
141
+ // fetchWithTimeoutAndRetry follows redirects internally and re-validates
142
+ // SSRF on every hop (initial URL and every redirect target). Surface
143
+ // that as the same clean SSRF_BLOCKED error code used for the upfront
144
+ // check, instead of falling through to the generic X402_PAYMENT_FAILED.
145
+ const msg = err instanceof Error ? err.message : String(err);
146
+ if (msg.includes("SSRF_BLOCKED")) {
147
+ return fail("SSRF_BLOCKED", msg.replace(/^SSRF_BLOCKED:\s*/, ""), false, "x402_pay_and_fetch");
148
+ }
149
+ throw err;
150
+ }
78
151
  if (initial.status !== 402) {
79
152
  const data = await readResponseBody(initial);
80
153
  return ok({
@@ -85,11 +158,16 @@ export async function handleX402PayAndFetch(raw) {
85
158
  paymentDetails: null,
86
159
  chainId: CHAIN_ID,
87
160
  environment: PHAROS_ENVIRONMENT,
88
- isMainnet: false,
161
+ isMainnet: IS_MAINNET,
89
162
  policy: staticPolicy,
90
163
  source: "x402_fetch",
91
164
  });
92
165
  }
166
+ const challengeHeader = initial.headers.get("PAYMENT-REQUIRED");
167
+ const challengeError = validateX402Challenge(challengeHeader, input.maxPaymentUsdc);
168
+ if (challengeError) {
169
+ return fail("X402_CHALLENGE_INVALID", challengeError, false, "x402_pay_and_fetch");
170
+ }
93
171
  const writeGuard = requireWriteToolsEnabled("x402_pay_and_fetch");
94
172
  if (writeGuard)
95
173
  return writeGuard;
@@ -97,20 +175,42 @@ export async function handleX402PayAndFetch(raw) {
97
175
  if (isSignerFailure(signer)) {
98
176
  return fail("X402_PAYMENT_REQUIRED", `The resource returned HTTP 402, but no safe x402 signer is available: ${signer.error.message}`, false, "x402_pay_and_fetch");
99
177
  }
178
+ // x402 is permissionless-first: self-signed x402 (mode "x402-env") never needs
179
+ // registry authorization. A managed/custodial x402 payment is allowlist-gated
180
+ // ONLY when explicitly opted in via REQUIRE_AUTHORIZED_AGENT_FOR_X402=true.
181
+ if (signer.mode === "managed-mainnet" && REQUIRE_AUTHORIZED_AGENT_FOR_X402) {
182
+ const authCheck = await checkManagedWalletAuthorization(signer.address);
183
+ if (!authCheck.authorized) {
184
+ return fail("REQUIRE_AUTHORIZATION", authCheck.errorMessage || "Managed wallet is not authorized in SafeHandsRegistry.", false, "x402_pay_and_fetch");
185
+ }
186
+ }
100
187
  const paymentPolicy = evaluateActionPolicy({
101
188
  actionType: "x402_pay_and_fetch",
189
+ agentId: input.agentId,
102
190
  url: input.url,
103
191
  paymentAmountUsdc: input.maxPaymentUsdc,
104
192
  paymentTokenAddress: X402_PAYMENT_TOKEN_ADDRESS,
105
193
  chainId: CHAIN_ID,
106
194
  environment: PHAROS_ENVIRONMENT,
107
- isMainnet: false,
195
+ isMainnet: IS_MAINNET,
108
196
  signerAvailable: true,
109
197
  requiresSigner: true,
110
198
  });
111
- if (paymentPolicy.decision === "BLOCK") {
112
- return fail("POLICY_BLOCKED", paymentPolicy.reasons.join(" ") || "x402 payment blocked by SafeHands policy.", false, "x402_pay_and_fetch");
199
+ const paymentGate = enforceWriteDecision(paymentPolicy, { confirmed: input.confirm === true, toolName: "x402_pay_and_fetch" });
200
+ if (paymentGate)
201
+ return paymentGate;
202
+ // x402 payments count toward the same per-wallet daily USD cap as
203
+ // send_payment / execute_swap — otherwise a looping agent could drain the
204
+ // wallet in per-call-cap increments. Reserve the payment BOUND
205
+ // (maxPaymentUsdc; the 402 challenge amount is validated to be ≤ this)
206
+ // atomically before the paying fetch, and release it if no payment settles.
207
+ const reserveUsd = estimateUsd(input.maxPaymentUsdc, "USDC");
208
+ const reservation = reserveDailyLimit(signer.address, reserveUsd);
209
+ if (!reservation.allowed) {
210
+ return fail("DAILY_SPEND_LIMIT_EXCEEDED", `Daily spend limit reached. Spent $${reservation.currentUsd.toFixed(2)} of $${reservation.limitUsd.toFixed(2)} USD today. Remaining: $${reservation.remainingUsd.toFixed(2)}. Resets at UTC midnight.`, false, "x402_pay_and_fetch");
113
211
  }
212
+ reservedUsd = reserveUsd;
213
+ reservedWallet = signer.address;
114
214
  const rpc = input.rpcUrl || process.env.PHAROS_RPC_URL || RPC_URL;
115
215
  const client = new x402Client();
116
216
  registerExactEvmScheme(client, {
@@ -119,10 +219,46 @@ export async function handleX402PayAndFetch(raw) {
119
219
  [CHAIN_ID]: { rpcUrl: rpc },
120
220
  },
121
221
  });
122
- const fetchWithPayment = wrapFetchWithPayment(fetch, client);
222
+ // wrapFetchWithPayment always invokes the supplied fetch with a single
223
+ // Request object (it builds one internally via `new Request(input, init)`
224
+ // and clones it for retries/hooks). This guard re-derives the URL/method/
225
+ // headers/body from that Request and routes the actual network call
226
+ // through fetchWithTimeoutAndRetry, so the payment-carrying request — the
227
+ // most sensitive call in this flow — gets the same DNS-pinned SSRF
228
+ // protection as the initial request instead of bypassing it via the raw
229
+ // global fetch.
230
+ const guardedFetch = async (requestInput, requestInit) => {
231
+ const req = requestInput instanceof Request ? requestInput : new Request(requestInput, requestInit);
232
+ const method = req.method || "GET";
233
+ const headersInit = {};
234
+ req.headers.forEach((value, key) => {
235
+ headersInit[key] = value;
236
+ });
237
+ let body;
238
+ if (method !== "GET" && method !== "HEAD") {
239
+ const buf = await req.arrayBuffer();
240
+ if (buf.byteLength > 0)
241
+ body = new Uint8Array(buf);
242
+ }
243
+ return fetchWithTimeoutAndRetry(req.url, {
244
+ method,
245
+ headers: headersInit,
246
+ body,
247
+ timeoutMs: 10_000,
248
+ retries: 0, // avoid duplicate payment submission on a transient error
249
+ });
250
+ };
251
+ const fetchWithPayment = wrapFetchWithPayment(guardedFetch, client);
123
252
  const paidResponse = await fetchWithPayment(input.url, fetchOptions);
124
253
  const data = await readResponseBody(paidResponse);
125
254
  const paymentResponseHeader = paidResponse.headers.get("PAYMENT-RESPONSE");
255
+ if (!paymentResponseHeader) {
256
+ // No payment actually settled (e.g. the resource stopped charging) —
257
+ // return the reserved budget so unpaid fetches never consume the cap.
258
+ releaseReservation(signer.address, reservedUsd);
259
+ reservedUsd = 0;
260
+ reservedWallet = null;
261
+ }
126
262
  return ok({
127
263
  status: paidResponse.status,
128
264
  statusText: paidResponse.statusText,
@@ -140,13 +276,20 @@ export async function handleX402PayAndFetch(raw) {
140
276
  maxPaymentUsdc: input.maxPaymentUsdc,
141
277
  chainId: CHAIN_ID,
142
278
  environment: PHAROS_ENVIRONMENT,
143
- isMainnet: false,
279
+ isMainnet: IS_MAINNET,
144
280
  policy: paymentPolicy,
145
- testnetPayment: true,
281
+ mainnetPayment: true,
146
282
  source: "x402_fetch",
147
283
  });
148
284
  }
149
285
  catch (err) {
286
+ // A payment that failed in flight is ambiguous (it MAY have settled), but
287
+ // the x402 replay store makes a re-submission of the same authorization
288
+ // safe — release the reservation so a transient fetch error does not
289
+ // permanently consume the daily budget.
290
+ if (reservedWallet && reservedUsd > 0) {
291
+ releaseReservation(reservedWallet, reservedUsd);
292
+ }
150
293
  return fail("X402_PAYMENT_FAILED", err instanceof Error ? err.message : String(err), true, "x402_pay_and_fetch");
151
294
  }
152
295
  }
@@ -1 +1 @@
1
- {"version":3,"file":"x402PayAndFetch.js","sourceRoot":"","sources":["../../src/tools/x402PayAndFetch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"x402PayAndFetch.js","sourceRoot":"","sources":["../../src/tools/x402PayAndFetch.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,qEAAqE;AACrE,gFAAgF;AAChF,4EAA4E;AAE5E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,UAAU,EAAE,+BAA+B,EAAE,MAAM,qBAAqB,CAAC;AAC5K,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,iCAAiC,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEhG,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;IACvF,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACzG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAC9E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IACjF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;IAClG,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC;IACpE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,4KAA4K,CAAC;CACtO,CAAC,CAAC,MAAM,EAAE,CAAC;AAIZ,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,0DAA0D;QAC1D,uHAAuH;IACzH,WAAW,EAAE,qBAAqB;CACnC,CAAC;AAEF,KAAK,UAAU,gBAAgB,CAAC,GAAa;IAC3C,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAC1D,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC7C,IAAI,CAAC;YACH,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,iBAAiB,CAAC,KAA4C;IACrE,MAAM,YAAY,GAAgB;QAChC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;SACnC;KACF,CAAC;IAEF,IAAI,KAAK,CAAC,IAAI;QAAE,YAAY,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAC/C,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO,IAAI,GAAG,CAAC,+BAA+B,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,qBAAqB,CAAC,eAA8B,EAAE,cAAsB;IACnF,IAAI,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAErF,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAC9B,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC;YAChE,IAAI,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC7C,OAAO,0BAA0B,eAAe,kCAAkC,cAAc,IAAI,CAAC;YACvG,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACjD,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACzF,IAAI,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,gBAAgB,KAAK,QAAQ,EAAE,CAAC;gBACvE,OAAO,gCAAgC,gBAAgB,cAAc,kBAAkB,KAAK,QAAQ,IAAI,CAAC;YAC3G,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;YAClD,IAAI,CAAC,mBAAmB,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtC,MAAM,OAAO,GAAG,+BAA+B,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7D,OAAO,wDAAwD,OAAO,CAAC,KAAK,mBAAmB,kBAAkB,KAAK,OAAO,GAAG,CAAC;YACnI,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;IAC1E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,GAAyB;IACnE,IAAI,KAA4C,CAAC;IACjD,IAAI,CAAC;QACH,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,CAAC,CAAC,QAAQ;YACnC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACvE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC,kBAAkB,EAAE,+CAA+C,GAAG,EAAE,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;IACrH,CAAC;IAED,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;QAC9E,IAAI,MAAM;YAAE,OAAO,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;IACnF,CAAC;IAED,IAAI,CAAC;QACH,MAAM,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,IAAI,CACT,cAAc,EACd,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EACjF,KAAK,EACL,oBAAoB,CACrB,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,oBAAoB,CAAC;QACxC,UAAU,EAAE,oBAAoB;QAChC,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,iBAAiB,EAAE,KAAK,CAAC,cAAc;QACvC,mBAAmB,EAAE,0BAA0B;QAC/C,OAAO,EAAE,QAAQ;QACjB,WAAW,EAAE,kBAAkB;QAC/B,SAAS,EAAE,UAAU;KACtB,CAAC,CAAC;IACH,IAAI,YAAY,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,2CAA2C,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;IAC5I,CAAC;IAED,MAAM,YAAY,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAE9C,4EAA4E;IAC5E,kEAAkE;IAClE,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,cAAc,GAAkB,IAAI,CAAC;IAEzC,IAAI,CAAC;QACH,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,wBAAwB,CAAC,KAAK,CAAC,GAAG,EAAE;gBAClD,GAAG,YAAY;gBACf,SAAS,EAAE,MAAM;gBACjB,OAAO,EAAE,CAAC;gBACV,YAAY,EAAE,GAAG;aAClB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,yEAAyE;YACzE,qEAAqE;YACrE,sEAAsE;YACtE,wEAAwE;YACxE,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBACjC,OAAO,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;YACjG,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC7C,OAAO,EAAE,CAAC;gBACR,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,IAAI;gBACJ,eAAe,EAAE,KAAK;gBACtB,cAAc,EAAE,IAAI;gBACpB,OAAO,EAAE,QAAQ;gBACjB,WAAW,EAAE,kBAAkB;gBAC/B,SAAS,EAAE,UAAU;gBACrB,MAAM,EAAE,YAAY;gBACpB,MAAM,EAAE,YAAY;aACrB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChE,MAAM,cAAc,GAAG,qBAAqB,CAAC,eAAe,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;QACpF,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,wBAAwB,EAAE,cAAc,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;QACrF,CAAC;QAED,MAAM,UAAU,GAAG,wBAAwB,CAAC,oBAAoB,CAAC,CAAC;QAClE,IAAI,UAAU;YAAE,OAAO,UAAU,CAAC;QAElC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACnE,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CACT,uBAAuB,EACvB,yEAAyE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAC/F,KAAK,EACL,oBAAoB,CACrB,CAAC;QACJ,CAAC;QAED,+EAA+E;QAC/E,8EAA8E;QAC9E,4EAA4E;QAC5E,IAAI,MAAM,CAAC,IAAI,KAAK,iBAAiB,IAAI,iCAAiC,EAAE,CAAC;YAC3E,MAAM,SAAS,GAAG,MAAM,+BAA+B,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACxE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;gBAC1B,OAAO,IAAI,CACT,uBAAuB,EACvB,SAAS,CAAC,YAAY,IAAI,wDAAwD,EAClF,KAAK,EACL,oBAAoB,CACrB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,oBAAoB,CAAC;YACzC,UAAU,EAAE,oBAAoB;YAChC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,iBAAiB,EAAE,KAAK,CAAC,cAAc;YACvC,mBAAmB,EAAE,0BAA0B;YAC/C,OAAO,EAAE,QAAQ;YACjB,WAAW,EAAE,kBAAkB;YAC/B,SAAS,EAAE,UAAU;YACrB,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,oBAAoB,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,CAAC,CAAC;QAC/H,IAAI,WAAW;YAAE,OAAO,WAAW,CAAC;QAEpC,kEAAkE;QAClE,0EAA0E;QAC1E,+DAA+D;QAC/D,uEAAuE;QACvE,4EAA4E;QAC5E,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAClE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,IAAI,CACT,4BAA4B,EAC5B,qCAAqC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,EACtM,KAAK,EACL,oBAAoB,CACrB,CAAC;QACJ,CAAC;QACD,WAAW,GAAG,UAAU,CAAC;QACzB,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC;QAEhC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC;QAClE,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,sBAAsB,CAAC,MAAM,EAAE;YAC7B,MAAM,EAAE,MAAM,CAAC,OAAc;YAC7B,aAAa,EAAE;gBACb,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;aAC5B;SACF,CAAC,CAAC;QAEH,uEAAuE;QACvE,0EAA0E;QAC1E,0EAA0E;QAC1E,oEAAoE;QACpE,0EAA0E;QAC1E,mEAAmE;QACnE,wEAAwE;QACxE,gBAAgB;QAChB,MAAM,YAAY,GAAiB,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE;YACrE,MAAM,GAAG,GAAG,YAAY,YAAY,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YACpG,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC;YACnC,MAAM,WAAW,GAA2B,EAAE,CAAC;YAC/C,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBACjC,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,IAAI,IAA0B,CAAC;YAC/B,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC1C,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;gBACpC,IAAI,GAAG,CAAC,UAAU,GAAG,CAAC;oBAAE,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,CAAwB,CAAC;YAC5E,CAAC;YAED,OAAO,wBAAwB,CAAC,GAAG,CAAC,GAAG,EAAE;gBACvC,MAAM;gBACN,OAAO,EAAE,WAAW;gBACpB,IAAI;gBACJ,SAAS,EAAE,MAAM;gBACjB,OAAO,EAAE,CAAC,EAAE,0DAA0D;aACvE,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACpE,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAClD,MAAM,qBAAqB,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAE3E,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3B,qEAAqE;YACrE,sEAAsE;YACtE,kBAAkB,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAChD,WAAW,GAAG,CAAC,CAAC;YAChB,cAAc,GAAG,IAAI,CAAC;QACxB,CAAC;QAED,OAAO,EAAE,CAAC;YACR,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,IAAI;YACJ,eAAe,EAAE,CAAC,CAAC,qBAAqB;YACxC,cAAc,EAAE,qBAAqB;gBACnC,CAAC,CAAC;oBACE,cAAc,EAAE,IAAI;oBACpB,IAAI,EAAE,yGAAyG;iBAChH;gBACH,CAAC,CAAC,IAAI;YACR,UAAU,EAAE,MAAM,CAAC,IAAI;YACvB,aAAa,EAAE,MAAM,CAAC,OAAO;YAC7B,YAAY,EAAE,0BAA0B;YACxC,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,OAAO,EAAE,QAAQ;YACjB,WAAW,EAAE,kBAAkB;YAC/B,SAAS,EAAE,UAAU;YACrB,MAAM,EAAE,aAAa;YACrB,cAAc,EAAE,IAAI;YACpB,MAAM,EAAE,YAAY;SACrB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,0EAA0E;QAC1E,wEAAwE;QACxE,qEAAqE;QACrE,wCAAwC;QACxC,IAAI,cAAc,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACtC,kBAAkB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,IAAI,CACT,qBAAqB,EACrB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAChD,IAAI,EACJ,oBAAoB,CACrB,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import "./lib/envLoader.js";
3
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":";AASA,OAAO,oBAAoB,CAAC"}
package/dist/worker.js ADDED
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env node
2
+ // ─── SafeHands Background Worker ───────────────────────────────────────
3
+ // Runs durable background jobs for the hosted/full-enabled deployment.
4
+ // Keep this as a separate service on Railway/Fly/VPS so public HTTP latency is
5
+ // not tied to retry loops. Current jobs:
6
+ // - attestation retry queue from SAFEHANDS_ATTESTATION_STORE_PATH
7
+ // Future jobs can be added here (risk-root batching, DA uploads, indexing).
8
+ // ────────────────────────────────────────────────────────────────────────
9
+ import "./lib/envLoader.js";
10
+ import { retryPendingAttestations, startAttestationRetryLoop } from "./lib/pharos/attestationPublisher.js";
11
+ import { assertProductionPosture } from "./lib/productionGuards.js";
12
+ // Same fail-fast posture check as the API server (active only when
13
+ // NODE_ENV=production) — the worker can hold an attester key, so it must not
14
+ // silently boot into a custody-unsafe configuration either.
15
+ assertProductionPosture();
16
+ const intervalMs = Number(process.env.SAFEHANDS_WORKER_HEARTBEAT_MS || 60_000);
17
+ process.on("unhandledRejection", (reason) => {
18
+ console.error("SafeHands worker unhandled rejection:", reason);
19
+ });
20
+ process.on("uncaughtException", (error) => {
21
+ console.error("SafeHands worker uncaught exception:", error);
22
+ process.exit(1);
23
+ });
24
+ console.log("🛡️ SafeHands worker started");
25
+ console.log(` Attestation retry enabled: ${process.env.SAFEHANDS_ATTESTATION_RETRY_ENABLED !== "false"}`);
26
+ console.log(` Store: ${process.env.SAFEHANDS_ATTESTATION_STORE_PATH || process.env.SAFEHANDS_STATE_DIR || ".safehands"}`);
27
+ startAttestationRetryLoop();
28
+ // Run once immediately so a restarted worker drains due records without waiting
29
+ // for the first interval. The loop imported above continues afterwards.
30
+ retryPendingAttestations()
31
+ .then((count) => console.log(` Initial attestation retry attempts: ${count}`))
32
+ .catch((err) => console.error(" Initial attestation retry failed:", err instanceof Error ? err.message : String(err)));
33
+ setInterval(() => {
34
+ console.log(`SafeHands worker heartbeat ${new Date().toISOString()}`);
35
+ }, intervalMs);
36
+ // The ref'ed interval above keeps Railway/Fly/VPS worker processes alive.
37
+ // Avoid an unsettled top-level await here because Node may terminate ESM modules
38
+ // with warning code 13 when the only remaining work is an unresolved Promise.
39
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":";AACA,0EAA0E;AAC1E,uEAAuE;AACvE,+EAA+E;AAC/E,yCAAyC;AACzC,oEAAoE;AACpE,4EAA4E;AAC5E,2EAA2E;AAE3E,OAAO,oBAAoB,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAC3G,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,mEAAmE;AACnE,6EAA6E;AAC7E,4DAA4D;AAC5D,uBAAuB,EAAE,CAAC;AAE1B,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,MAAM,CAAC,CAAC;AAE/E,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1C,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,MAAM,CAAC,CAAC;AACjE,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;IACxC,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;IAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;AAC7C,OAAO,CAAC,GAAG,CAAC,iCAAiC,OAAO,CAAC,GAAG,CAAC,mCAAmC,KAAK,OAAO,EAAE,CAAC,CAAC;AAC5G,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,GAAG,CAAC,gCAAgC,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,YAAY,EAAE,CAAC,CAAC;AAE5H,yBAAyB,EAAE,CAAC;AAE5B,gFAAgF;AAChF,wEAAwE;AACxE,wBAAwB,EAAE;KACvB,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,0CAA0C,KAAK,EAAE,CAAC,CAAC;KAC/E,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE3H,WAAW,CAAC,GAAG,EAAE;IACf,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACxE,CAAC,EAAE,UAAU,CAAC,CAAC;AAEf,0EAA0E;AAC1E,iFAAiF;AACjF,8EAA8E"}
@@ -1,2 +1,2 @@
1
- export {};
1
+ import "./lib/envLoader.js";
2
2
  //# sourceMappingURL=x402Server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"x402Server.d.ts","sourceRoot":"","sources":["../src/x402Server.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"x402Server.d.ts","sourceRoot":"","sources":["../src/x402Server.ts"],"names":[],"mappings":"AAMA,OAAO,oBAAoB,CAAC"}