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.
Files changed (571) hide show
  1. package/.agents/policies/default.json +15 -0
  2. package/.env.example +81 -64
  3. package/README.md +301 -333
  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 +5 -5
  105. package/dist/cli.d.ts.map +1 -1
  106. package/dist/cli.js +154 -124
  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 +1 -1
  113. package/dist/demo.d.ts.map +1 -1
  114. package/dist/demo.js +206 -171
  115. package/dist/demo.js.map +1 -1
  116. package/dist/index.d.ts +2 -2
  117. package/dist/index.d.ts.map +1 -1
  118. package/dist/index.js +249 -164
  119. package/dist/index.js.map +1 -1
  120. package/dist/init.d.ts +1 -1
  121. package/dist/init.d.ts.map +1 -1
  122. package/dist/init.js +127 -65
  123. package/dist/init.js.map +1 -1
  124. package/dist/lib/analysis/approval.d.ts +29 -0
  125. package/dist/lib/analysis/approval.d.ts.map +1 -0
  126. package/dist/lib/analysis/approval.js +162 -0
  127. package/dist/lib/analysis/approval.js.map +1 -0
  128. package/dist/lib/analysis/calldata.d.ts +60 -0
  129. package/dist/lib/analysis/calldata.d.ts.map +1 -0
  130. package/dist/lib/analysis/calldata.js +349 -0
  131. package/dist/lib/analysis/calldata.js.map +1 -0
  132. package/dist/lib/analysis/contractIntel.d.ts +65 -0
  133. package/dist/lib/analysis/contractIntel.d.ts.map +1 -0
  134. package/dist/lib/analysis/contractIntel.js +320 -0
  135. package/dist/lib/analysis/contractIntel.js.map +1 -0
  136. package/dist/lib/analysis/evm.d.ts +42 -0
  137. package/dist/lib/analysis/evm.d.ts.map +1 -0
  138. package/dist/lib/analysis/evm.js +185 -0
  139. package/dist/lib/analysis/evm.js.map +1 -0
  140. package/dist/lib/analysis/gas.d.ts +4 -0
  141. package/dist/lib/analysis/gas.d.ts.map +1 -0
  142. package/dist/lib/analysis/gas.js +13 -0
  143. package/dist/lib/analysis/gas.js.map +1 -0
  144. package/dist/lib/analysis/index.d.ts +11 -0
  145. package/dist/lib/analysis/index.d.ts.map +1 -0
  146. package/dist/lib/analysis/index.js +16 -0
  147. package/dist/lib/analysis/index.js.map +1 -0
  148. package/dist/lib/analysis/pharosTokens.d.ts +31 -0
  149. package/dist/lib/analysis/pharosTokens.d.ts.map +1 -0
  150. package/dist/lib/analysis/pharosTokens.js +78 -0
  151. package/dist/lib/analysis/pharosTokens.js.map +1 -0
  152. package/dist/lib/analysis/safeTx.d.ts +27 -0
  153. package/dist/lib/analysis/safeTx.d.ts.map +1 -0
  154. package/dist/lib/analysis/safeTx.js +118 -0
  155. package/dist/lib/analysis/safeTx.js.map +1 -0
  156. package/dist/lib/analysis/token.d.ts +21 -0
  157. package/dist/lib/analysis/token.d.ts.map +1 -0
  158. package/dist/lib/analysis/token.js +151 -0
  159. package/dist/lib/analysis/token.js.map +1 -0
  160. package/dist/lib/analysis/types.d.ts +49 -0
  161. package/dist/lib/analysis/types.d.ts.map +1 -0
  162. package/dist/lib/analysis/types.js +10 -0
  163. package/dist/lib/analysis/types.js.map +1 -0
  164. package/dist/lib/analysis/x402.d.ts +24 -0
  165. package/dist/lib/analysis/x402.d.ts.map +1 -0
  166. package/dist/lib/analysis/x402.js +60 -0
  167. package/dist/lib/analysis/x402.js.map +1 -0
  168. package/dist/lib/auditLog.d.ts +1 -0
  169. package/dist/lib/auditLog.d.ts.map +1 -1
  170. package/dist/lib/auditLog.js +0 -0
  171. package/dist/lib/auditLog.js.map +1 -1
  172. package/dist/lib/config.d.ts +77 -0
  173. package/dist/lib/config.d.ts.map +1 -0
  174. package/dist/lib/config.js +120 -0
  175. package/dist/lib/config.js.map +1 -0
  176. package/dist/lib/constants.d.ts +452 -291
  177. package/dist/lib/constants.d.ts.map +1 -1
  178. package/dist/lib/constants.js +509 -292
  179. package/dist/lib/constants.js.map +1 -1
  180. package/dist/lib/dodoApi.d.ts +101 -78
  181. package/dist/lib/dodoApi.d.ts.map +1 -1
  182. package/dist/lib/dodoApi.js +259 -196
  183. package/dist/lib/dodoApi.js.map +1 -1
  184. package/dist/lib/ecosystemRegistry.d.ts +116 -0
  185. package/dist/lib/ecosystemRegistry.d.ts.map +1 -0
  186. package/dist/lib/ecosystemRegistry.js +178 -0
  187. package/dist/lib/ecosystemRegistry.js.map +1 -0
  188. package/dist/lib/envLoader.d.ts +2 -0
  189. package/dist/lib/envLoader.d.ts.map +1 -0
  190. package/dist/lib/envLoader.js +65 -0
  191. package/dist/lib/envLoader.js.map +1 -0
  192. package/dist/lib/goldsky.d.ts +58 -0
  193. package/dist/lib/goldsky.d.ts.map +1 -0
  194. package/dist/lib/goldsky.js +275 -0
  195. package/dist/lib/goldsky.js.map +1 -0
  196. package/dist/lib/guardian/decision.d.ts +23 -0
  197. package/dist/lib/guardian/decision.d.ts.map +1 -0
  198. package/dist/lib/guardian/decision.js +40 -0
  199. package/dist/lib/guardian/decision.js.map +1 -0
  200. package/dist/lib/http.d.ts +13 -14
  201. package/dist/lib/http.d.ts.map +1 -1
  202. package/dist/lib/http.js +383 -118
  203. package/dist/lib/http.js.map +1 -1
  204. package/dist/lib/managedExecution.d.ts +19 -0
  205. package/dist/lib/managedExecution.d.ts.map +1 -0
  206. package/dist/lib/managedExecution.js +64 -0
  207. package/dist/lib/managedExecution.js.map +1 -0
  208. package/dist/lib/merkleBatcher.d.ts +23 -0
  209. package/dist/lib/merkleBatcher.d.ts.map +1 -0
  210. package/dist/lib/merkleBatcher.js +62 -0
  211. package/dist/lib/merkleBatcher.js.map +1 -0
  212. package/dist/lib/networks.d.ts +48 -0
  213. package/dist/lib/networks.d.ts.map +1 -0
  214. package/dist/lib/networks.js +103 -0
  215. package/dist/lib/networks.js.map +1 -0
  216. package/dist/lib/observability/accessContext.d.ts +29 -0
  217. package/dist/lib/observability/accessContext.d.ts.map +1 -0
  218. package/dist/lib/observability/accessContext.js +50 -0
  219. package/dist/lib/observability/accessContext.js.map +1 -0
  220. package/dist/lib/observability/activityStore.d.ts +70 -0
  221. package/dist/lib/observability/activityStore.d.ts.map +1 -0
  222. package/dist/lib/observability/activityStore.js +149 -0
  223. package/dist/lib/observability/activityStore.js.map +1 -0
  224. package/dist/lib/observability/apiKey.d.ts +55 -0
  225. package/dist/lib/observability/apiKey.d.ts.map +1 -0
  226. package/dist/lib/observability/apiKey.js +141 -0
  227. package/dist/lib/observability/apiKey.js.map +1 -0
  228. package/dist/lib/observability/logger.d.ts +30 -0
  229. package/dist/lib/observability/logger.d.ts.map +1 -0
  230. package/dist/lib/observability/logger.js +30 -0
  231. package/dist/lib/observability/logger.js.map +1 -0
  232. package/dist/lib/observability/quota.d.ts +33 -0
  233. package/dist/lib/observability/quota.d.ts.map +1 -0
  234. package/dist/lib/observability/quota.js +49 -0
  235. package/dist/lib/observability/quota.js.map +1 -0
  236. package/dist/lib/observability/requestId.d.ts +8 -0
  237. package/dist/lib/observability/requestId.d.ts.map +1 -0
  238. package/dist/lib/observability/requestId.js +24 -0
  239. package/dist/lib/observability/requestId.js.map +1 -0
  240. package/dist/lib/observability/sanitize.d.ts +77 -0
  241. package/dist/lib/observability/sanitize.d.ts.map +1 -0
  242. package/dist/lib/observability/sanitize.js +228 -0
  243. package/dist/lib/observability/sanitize.js.map +1 -0
  244. package/dist/lib/observability/scopes.d.ts +20 -0
  245. package/dist/lib/observability/scopes.d.ts.map +1 -0
  246. package/dist/lib/observability/scopes.js +77 -0
  247. package/dist/lib/observability/scopes.js.map +1 -0
  248. package/dist/lib/okxDexApi.d.ts +106 -0
  249. package/dist/lib/okxDexApi.d.ts.map +1 -0
  250. package/dist/lib/okxDexApi.js +221 -0
  251. package/dist/lib/okxDexApi.js.map +1 -0
  252. package/dist/lib/persistentJsonStore.d.ts +5 -0
  253. package/dist/lib/persistentJsonStore.d.ts.map +1 -0
  254. package/dist/lib/persistentJsonStore.js +39 -0
  255. package/dist/lib/persistentJsonStore.js.map +1 -0
  256. package/dist/lib/pharos/attestationPublisher.d.ts +50 -0
  257. package/dist/lib/pharos/attestationPublisher.d.ts.map +1 -0
  258. package/dist/lib/pharos/attestationPublisher.js +262 -0
  259. package/dist/lib/pharos/attestationPublisher.js.map +1 -0
  260. package/dist/lib/pharos/ecosystem.d.ts +52 -0
  261. package/dist/lib/pharos/ecosystem.d.ts.map +1 -0
  262. package/dist/lib/pharos/ecosystem.js +431 -0
  263. package/dist/lib/pharos/ecosystem.js.map +1 -0
  264. package/dist/lib/pharos/ecosystemEvidence.d.ts +53 -0
  265. package/dist/lib/pharos/ecosystemEvidence.d.ts.map +1 -0
  266. package/dist/lib/pharos/ecosystemEvidence.js +133 -0
  267. package/dist/lib/pharos/ecosystemEvidence.js.map +1 -0
  268. package/dist/lib/pharos/rpc.d.ts +44 -0
  269. package/dist/lib/pharos/rpc.d.ts.map +1 -0
  270. package/dist/lib/pharos/rpc.js +90 -0
  271. package/dist/lib/pharos/rpc.js.map +1 -0
  272. package/dist/lib/pharos/rpcEvidence.d.ts +49 -0
  273. package/dist/lib/pharos/rpcEvidence.d.ts.map +1 -0
  274. package/dist/lib/pharos/rpcEvidence.js +46 -0
  275. package/dist/lib/pharos/rpcEvidence.js.map +1 -0
  276. package/dist/lib/pharos/rpcMethods.d.ts +46 -0
  277. package/dist/lib/pharos/rpcMethods.d.ts.map +1 -0
  278. package/dist/lib/pharos/rpcMethods.js +176 -0
  279. package/dist/lib/pharos/rpcMethods.js.map +1 -0
  280. package/dist/lib/pharos/spvVerifier.d.ts +47 -0
  281. package/dist/lib/pharos/spvVerifier.d.ts.map +1 -0
  282. package/dist/lib/pharos/spvVerifier.js +105 -0
  283. package/dist/lib/pharos/spvVerifier.js.map +1 -0
  284. package/dist/lib/pharos/userSignedBroadcaster.d.ts +10 -0
  285. package/dist/lib/pharos/userSignedBroadcaster.d.ts.map +1 -0
  286. package/dist/lib/pharos/userSignedBroadcaster.js +50 -0
  287. package/dist/lib/pharos/userSignedBroadcaster.js.map +1 -0
  288. package/dist/lib/pharosClient.d.ts +53 -58
  289. package/dist/lib/pharosClient.d.ts.map +1 -1
  290. package/dist/lib/pharosClient.js +56 -63
  291. package/dist/lib/pharosClient.js.map +1 -1
  292. package/dist/lib/policy/actionPolicyEngine.d.ts +89 -53
  293. package/dist/lib/policy/actionPolicyEngine.d.ts.map +1 -1
  294. package/dist/lib/policy/actionPolicyEngine.js +373 -212
  295. package/dist/lib/policy/actionPolicyEngine.js.map +1 -1
  296. package/dist/lib/policy/agentPolicy.d.ts +29 -0
  297. package/dist/lib/policy/agentPolicy.d.ts.map +1 -0
  298. package/dist/lib/policy/agentPolicy.js +154 -0
  299. package/dist/lib/policy/agentPolicy.js.map +1 -0
  300. package/dist/lib/policy/policyPresets.d.ts +30 -0
  301. package/dist/lib/policy/policyPresets.d.ts.map +1 -0
  302. package/dist/lib/policy/policyPresets.js +124 -0
  303. package/dist/lib/policy/policyPresets.js.map +1 -0
  304. package/dist/lib/policy/writeExecutionGate.d.ts +23 -0
  305. package/dist/lib/policy/writeExecutionGate.d.ts.map +1 -0
  306. package/dist/lib/policy/writeExecutionGate.js +65 -0
  307. package/dist/lib/policy/writeExecutionGate.js.map +1 -0
  308. package/dist/lib/preparedTxStore.d.ts +21 -0
  309. package/dist/lib/preparedTxStore.d.ts.map +1 -0
  310. package/dist/lib/preparedTxStore.js +90 -0
  311. package/dist/lib/preparedTxStore.js.map +1 -0
  312. package/dist/lib/price/chainlinkPushProvider.d.ts +34 -0
  313. package/dist/lib/price/chainlinkPushProvider.d.ts.map +1 -0
  314. package/dist/lib/price/chainlinkPushProvider.js +36 -0
  315. package/dist/lib/price/chainlinkPushProvider.js.map +1 -0
  316. package/dist/lib/price/feedRegistry.d.ts +26 -0
  317. package/dist/lib/price/feedRegistry.d.ts.map +1 -0
  318. package/dist/lib/price/feedRegistry.js +67 -0
  319. package/dist/lib/price/feedRegistry.js.map +1 -0
  320. package/dist/lib/price/priceResolver.d.ts +35 -0
  321. package/dist/lib/price/priceResolver.d.ts.map +1 -0
  322. package/dist/lib/price/priceResolver.js +246 -0
  323. package/dist/lib/price/priceResolver.js.map +1 -0
  324. package/dist/lib/price/supraProvider.d.ts +9 -0
  325. package/dist/lib/price/supraProvider.d.ts.map +1 -0
  326. package/dist/lib/price/supraProvider.js +17 -0
  327. package/dist/lib/price/supraProvider.js.map +1 -0
  328. package/dist/lib/price/types.d.ts +67 -0
  329. package/dist/lib/price/types.d.ts.map +1 -0
  330. package/dist/lib/price/types.js +7 -0
  331. package/dist/lib/price/types.js.map +1 -0
  332. package/dist/lib/productionGuards.d.ts +16 -0
  333. package/dist/lib/productionGuards.d.ts.map +1 -0
  334. package/dist/lib/productionGuards.js +93 -0
  335. package/dist/lib/productionGuards.js.map +1 -0
  336. package/dist/lib/recipientSafety.d.ts +5 -0
  337. package/dist/lib/recipientSafety.d.ts.map +1 -0
  338. package/dist/lib/recipientSafety.js +28 -0
  339. package/dist/lib/recipientSafety.js.map +1 -0
  340. package/dist/lib/riskEngine.d.ts +45 -26
  341. package/dist/lib/riskEngine.d.ts.map +1 -1
  342. package/dist/lib/riskEngine.js +346 -283
  343. package/dist/lib/riskEngine.js.map +1 -1
  344. package/dist/lib/riskInclusion.d.ts +72 -0
  345. package/dist/lib/riskInclusion.d.ts.map +1 -0
  346. package/dist/lib/riskInclusion.js +252 -0
  347. package/dist/lib/riskInclusion.js.map +1 -0
  348. package/dist/lib/safeHandsRegistry.d.ts +32 -0
  349. package/dist/lib/safeHandsRegistry.d.ts.map +1 -0
  350. package/dist/lib/safeHandsRegistry.js +151 -0
  351. package/dist/lib/safeHandsRegistry.js.map +1 -0
  352. package/dist/lib/signer/index.d.ts +24 -24
  353. package/dist/lib/signer/index.d.ts.map +1 -1
  354. package/dist/lib/signer/index.js +110 -88
  355. package/dist/lib/signer/index.js.map +1 -1
  356. package/dist/lib/spendAccumulator.d.ts +24 -1
  357. package/dist/lib/spendAccumulator.d.ts.map +1 -1
  358. package/dist/lib/spendAccumulator.js +76 -6
  359. package/dist/lib/spendAccumulator.js.map +1 -1
  360. package/dist/lib/toolResponse.d.ts +30 -25
  361. package/dist/lib/toolResponse.d.ts.map +1 -1
  362. package/dist/lib/toolResponse.js +57 -53
  363. package/dist/lib/toolResponse.js.map +1 -1
  364. package/dist/lib/validation.d.ts +7 -0
  365. package/dist/lib/validation.d.ts.map +1 -0
  366. package/dist/lib/validation.js +62 -0
  367. package/dist/lib/validation.js.map +1 -0
  368. package/dist/lib/wallet/index.d.ts +33 -37
  369. package/dist/lib/wallet/index.d.ts.map +1 -1
  370. package/dist/lib/wallet/index.js +141 -128
  371. package/dist/lib/wallet/index.js.map +1 -1
  372. package/dist/lib/x402ReplayStore.d.ts +6 -0
  373. package/dist/lib/x402ReplayStore.d.ts.map +1 -0
  374. package/dist/lib/x402ReplayStore.js +79 -0
  375. package/dist/lib/x402ReplayStore.js.map +1 -0
  376. package/dist/safehands.zip +0 -0
  377. package/dist/sdk.d.ts +14 -0
  378. package/dist/sdk.d.ts.map +1 -0
  379. package/dist/sdk.js +25 -0
  380. package/dist/sdk.js.map +1 -0
  381. package/dist/tools/approveToken.d.ts +66 -45
  382. package/dist/tools/approveToken.d.ts.map +1 -1
  383. package/dist/tools/approveToken.js +152 -85
  384. package/dist/tools/approveToken.js.map +1 -1
  385. package/dist/tools/assessRisk.d.ts +66 -79
  386. package/dist/tools/assessRisk.d.ts.map +1 -1
  387. package/dist/tools/assessRisk.js +63 -104
  388. package/dist/tools/assessRisk.js.map +1 -1
  389. package/dist/tools/checkAllowance.d.ts +49 -43
  390. package/dist/tools/checkAllowance.d.ts.map +1 -1
  391. package/dist/tools/checkAllowance.js +78 -56
  392. package/dist/tools/checkAllowance.js.map +1 -1
  393. package/dist/tools/checkTokenSecurity.d.ts +103 -46
  394. package/dist/tools/checkTokenSecurity.d.ts.map +1 -1
  395. package/dist/tools/checkTokenSecurity.js +240 -95
  396. package/dist/tools/checkTokenSecurity.js.map +1 -1
  397. package/dist/tools/createAgentWallet.d.ts +30 -26
  398. package/dist/tools/createAgentWallet.d.ts.map +1 -1
  399. package/dist/tools/createAgentWallet.js +87 -58
  400. package/dist/tools/createAgentWallet.js.map +1 -1
  401. package/dist/tools/estimateGas.d.ts +84 -79
  402. package/dist/tools/estimateGas.d.ts.map +1 -1
  403. package/dist/tools/estimateGas.js +130 -124
  404. package/dist/tools/estimateGas.js.map +1 -1
  405. package/dist/tools/executeSwap.d.ts +109 -61
  406. package/dist/tools/executeSwap.d.ts.map +1 -1
  407. package/dist/tools/executeSwap.js +289 -141
  408. package/dist/tools/executeSwap.js.map +1 -1
  409. package/dist/tools/explainRisk.d.ts +29 -29
  410. package/dist/tools/explainRisk.d.ts.map +1 -1
  411. package/dist/tools/explainRisk.js +33 -32
  412. package/dist/tools/explainRisk.js.map +1 -1
  413. package/dist/tools/getAgentPolicy.d.ts +15 -0
  414. package/dist/tools/getAgentPolicy.d.ts.map +1 -0
  415. package/dist/tools/getAgentPolicy.js +16 -0
  416. package/dist/tools/getAgentPolicy.js.map +1 -0
  417. package/dist/tools/getAgentReputation.d.ts +31 -0
  418. package/dist/tools/getAgentReputation.d.ts.map +1 -0
  419. package/dist/tools/getAgentReputation.js +44 -0
  420. package/dist/tools/getAgentReputation.js.map +1 -0
  421. package/dist/tools/getAgentWallet.d.ts +21 -21
  422. package/dist/tools/getAgentWallet.d.ts.map +1 -1
  423. package/dist/tools/getAgentWallet.js +37 -27
  424. package/dist/tools/getAgentWallet.js.map +1 -1
  425. package/dist/tools/getAgentWalletBalance.d.ts +11 -11
  426. package/dist/tools/getAgentWalletBalance.d.ts.map +1 -1
  427. package/dist/tools/getAgentWalletBalance.js +102 -70
  428. package/dist/tools/getAgentWalletBalance.js.map +1 -1
  429. package/dist/tools/getExecutionHistory.d.ts +49 -49
  430. package/dist/tools/getExecutionHistory.d.ts.map +1 -1
  431. package/dist/tools/getExecutionHistory.js +148 -154
  432. package/dist/tools/getExecutionHistory.js.map +1 -1
  433. package/dist/tools/getGasPrice.d.ts +43 -43
  434. package/dist/tools/getGasPrice.d.ts.map +0 -0
  435. package/dist/tools/getGasPrice.js +59 -59
  436. package/dist/tools/getGasPrice.js.map +1 -1
  437. package/dist/tools/getPoolInfo.d.ts +75 -75
  438. package/dist/tools/getPoolInfo.d.ts.map +1 -1
  439. package/dist/tools/getPoolInfo.js +142 -137
  440. package/dist/tools/getPoolInfo.js.map +1 -1
  441. package/dist/tools/getSpvProof.d.ts +24 -0
  442. package/dist/tools/getSpvProof.d.ts.map +1 -0
  443. package/dist/tools/getSpvProof.js +64 -0
  444. package/dist/tools/getSpvProof.js.map +1 -0
  445. package/dist/tools/getTokenPrice.d.ts +56 -113
  446. package/dist/tools/getTokenPrice.d.ts.map +1 -1
  447. package/dist/tools/getTokenPrice.js +110 -117
  448. package/dist/tools/getTokenPrice.js.map +1 -1
  449. package/dist/tools/getTransactionStatus.d.ts +43 -43
  450. package/dist/tools/getTransactionStatus.d.ts.map +0 -0
  451. package/dist/tools/getTransactionStatus.js +59 -59
  452. package/dist/tools/getTransactionStatus.js.map +0 -0
  453. package/dist/tools/getWalletBalance.d.ts +103 -68
  454. package/dist/tools/getWalletBalance.d.ts.map +1 -1
  455. package/dist/tools/getWalletBalance.js +127 -87
  456. package/dist/tools/getWalletBalance.js.map +1 -1
  457. package/dist/tools/publishRiskScore.d.ts +85 -63
  458. package/dist/tools/publishRiskScore.d.ts.map +1 -1
  459. package/dist/tools/publishRiskScore.js +136 -88
  460. package/dist/tools/publishRiskScore.js.map +1 -1
  461. package/dist/tools/queryGoldsky.d.ts +20 -0
  462. package/dist/tools/queryGoldsky.d.ts.map +1 -0
  463. package/dist/tools/queryGoldsky.js +29 -0
  464. package/dist/tools/queryGoldsky.js.map +1 -0
  465. package/dist/tools/queryRiskRegistry.d.ts +38 -38
  466. package/dist/tools/queryRiskRegistry.d.ts.map +1 -1
  467. package/dist/tools/queryRiskRegistry.js +59 -55
  468. package/dist/tools/queryRiskRegistry.js.map +1 -1
  469. package/dist/tools/safehandsPreflightCheck.d.ts +92 -77
  470. package/dist/tools/safehandsPreflightCheck.d.ts.map +1 -1
  471. package/dist/tools/safehandsPreflightCheck.js +174 -47
  472. package/dist/tools/safehandsPreflightCheck.js.map +1 -1
  473. package/dist/tools/safehandsRiskReport.d.ts +96 -81
  474. package/dist/tools/safehandsRiskReport.d.ts.map +1 -1
  475. package/dist/tools/safehandsRiskReport.js +48 -28
  476. package/dist/tools/safehandsRiskReport.js.map +1 -1
  477. package/dist/tools/safehandsSafeExecute.d.ts +20 -20
  478. package/dist/tools/safehandsSafeExecute.d.ts.map +1 -1
  479. package/dist/tools/safehandsSafeExecute.js +164 -81
  480. package/dist/tools/safehandsSafeExecute.js.map +1 -1
  481. package/dist/tools/safehandsWalletHealth.d.ts +28 -14
  482. package/dist/tools/safehandsWalletHealth.d.ts.map +1 -1
  483. package/dist/tools/safehandsWalletHealth.js +145 -103
  484. package/dist/tools/safehandsWalletHealth.js.map +1 -1
  485. package/dist/tools/safehandsX402Preflight.d.ts +26 -26
  486. package/dist/tools/safehandsX402Preflight.d.ts.map +1 -1
  487. package/dist/tools/safehandsX402Preflight.js +86 -65
  488. package/dist/tools/safehandsX402Preflight.js.map +1 -1
  489. package/dist/tools/sendPayment.d.ts +63 -57
  490. package/dist/tools/sendPayment.d.ts.map +1 -1
  491. package/dist/tools/sendPayment.js +144 -117
  492. package/dist/tools/sendPayment.js.map +1 -1
  493. package/dist/tools/setAgentPolicy.d.ts +75 -0
  494. package/dist/tools/setAgentPolicy.d.ts.map +1 -0
  495. package/dist/tools/setAgentPolicy.js +80 -0
  496. package/dist/tools/setAgentPolicy.js.map +1 -0
  497. package/dist/tools/simulateTransaction.d.ts +64 -60
  498. package/dist/tools/simulateTransaction.d.ts.map +1 -1
  499. package/dist/tools/simulateTransaction.js +116 -83
  500. package/dist/tools/simulateTransaction.js.map +1 -1
  501. package/dist/tools/tokenRegistryStatus.d.ts +46 -26
  502. package/dist/tools/tokenRegistryStatus.d.ts.map +1 -1
  503. package/dist/tools/tokenRegistryStatus.js +126 -96
  504. package/dist/tools/tokenRegistryStatus.js.map +1 -1
  505. package/dist/tools/verifyRiskInclusion.d.ts +59 -0
  506. package/dist/tools/verifyRiskInclusion.d.ts.map +1 -0
  507. package/dist/tools/verifyRiskInclusion.js +40 -0
  508. package/dist/tools/verifyRiskInclusion.js.map +1 -0
  509. package/dist/tools/x402PayAndFetch.d.ts +87 -81
  510. package/dist/tools/x402PayAndFetch.d.ts.map +1 -1
  511. package/dist/tools/x402PayAndFetch.js +295 -152
  512. package/dist/tools/x402PayAndFetch.js.map +1 -1
  513. package/dist/worker.d.ts +3 -0
  514. package/dist/worker.d.ts.map +1 -0
  515. package/dist/worker.js +39 -0
  516. package/dist/worker.js.map +1 -0
  517. package/dist/x402Server.d.ts +1 -1
  518. package/dist/x402Server.d.ts.map +1 -1
  519. package/dist/x402Server.js +409 -252
  520. package/dist/x402Server.js.map +1 -1
  521. package/docs/REVIEWER_QUICKSTART.md +113 -0
  522. package/docs/SAFEHANDS_REVIEWER_DEMO_SCRIPT.md +228 -0
  523. package/package.json +130 -83
  524. package/contracts/RiskRegistry.json +0 -223
  525. package/contracts/RiskRegistry.sol +0 -58
  526. package/dist/lib/testDodoLive.d.ts +0 -2
  527. package/dist/lib/testDodoLive.d.ts.map +0 -1
  528. package/dist/lib/testDodoLive.js +0 -105
  529. package/dist/lib/testDodoLive.js.map +0 -1
  530. package/dist/lib/testLiveSafehands.d.ts +0 -2
  531. package/dist/lib/testLiveSafehands.d.ts.map +0 -1
  532. package/dist/lib/testLiveSafehands.js +0 -93
  533. package/dist/lib/testLiveSafehands.js.map +0 -1
  534. package/dist/lib/testRpc.d.ts +0 -2
  535. package/dist/lib/testRpc.d.ts.map +0 -1
  536. package/dist/lib/testRpc.js +0 -30
  537. package/dist/lib/testRpc.js.map +0 -1
  538. package/dist/lib/testRpcLive.d.ts +0 -2
  539. package/dist/lib/testRpcLive.d.ts.map +0 -1
  540. package/dist/lib/testRpcLive.js +0 -89
  541. package/dist/lib/testRpcLive.js.map +0 -1
  542. package/dist/lib/testTools.d.ts +0 -2
  543. package/dist/lib/testTools.d.ts.map +0 -1
  544. package/dist/lib/testTools.js +0 -398
  545. package/dist/lib/testTools.js.map +0 -1
  546. package/dist/lib/testX402Live.d.ts +0 -2
  547. package/dist/lib/testX402Live.d.ts.map +0 -1
  548. package/dist/lib/testX402Live.js +0 -160
  549. package/dist/lib/testX402Live.js.map +0 -1
  550. package/dist/scripts/checkDeploy.d.ts +0 -2
  551. package/dist/scripts/checkDeploy.d.ts.map +0 -1
  552. package/dist/scripts/checkDeploy.js +0 -25
  553. package/dist/scripts/checkDeploy.js.map +0 -1
  554. package/dist/scripts/deployRegistry.d.ts +0 -2
  555. package/dist/scripts/deployRegistry.d.ts.map +0 -1
  556. package/dist/scripts/deployRegistry.js +0 -101
  557. package/dist/scripts/deployRegistry.js.map +0 -1
  558. package/dist/scripts/testRegistry.d.ts +0 -2
  559. package/dist/scripts/testRegistry.d.ts.map +0 -1
  560. package/dist/scripts/testRegistry.js +0 -44
  561. package/dist/scripts/testRegistry.js.map +0 -1
  562. package/examples/dashboard/index.html +0 -337
  563. package/examples/pharos-skill-engine/SKILL.safehands.md +0 -85
  564. package/examples/pharos-skill-engine/assets/safehands/example-actions.json +0 -49
  565. package/examples/pharos-skill-engine/assets/safehands/policy-defaults.json +0 -11
  566. package/examples/pharos-skill-engine/references/safehands.md +0 -345
  567. package/examples/scenario-hack.ts +0 -38
  568. package/skill/SKILL.md +0 -133
  569. package/skill/assets/safehands/example-actions.json +0 -49
  570. package/skill/assets/safehands/policy-defaults.json +0 -11
  571. package/skill/references/safehands.md +0 -345
@@ -1,197 +1,260 @@
1
- // ─── DODO Route API Client ─────────────────────────────────────────────
2
- // Fetches swap routes from DODO's aggregation API for FaroSwap on
3
- // Pharos Atlantic Testnet.
4
- // ────────────────────────────────────────────────────────────────────────
5
- import { isAddress } from "viem";
6
- import { DODO_API_BASE, DODO_API_KEY, DODO_DEFAULT_SLIPPAGE, DODO_ROUTE_ENDPOINT, CHAIN_ID, TOKEN_MAP, TOKEN_DECIMALS, PHRS_ADDRESS, USDC_ADDRESS, CIRCLE_USDC_ADDRESS, } from "./constants.js";
7
- import { fetchWithTimeoutAndRetry } from "./http.js";
8
- // ─── Helpers ───────────────────────────────────────────────────────────
9
- /**
10
- * Resolves a token symbol (e.g. "PHRS") or address to its on-chain address.
11
- */
12
- export function resolveTokenAddress(token) {
13
- const upper = token.toUpperCase();
14
- if (TOKEN_MAP[upper])
15
- return TOKEN_MAP[upper];
16
- if (isAddress(token))
17
- return token;
18
- throw new Error(`INVALID_TOKEN_ADDRESS: Unknown token or invalid address: ${token}`);
19
- }
20
- /**
21
- * Resolves the decimal count for a token symbol or address.
22
- */
23
- export function resolveTokenDecimals(token) {
24
- const upper = token.toUpperCase();
25
- if (TOKEN_DECIMALS[upper] !== undefined)
26
- return TOKEN_DECIMALS[upper];
27
- const lower = token.toLowerCase();
28
- if (TOKEN_DECIMALS[lower] !== undefined)
29
- return TOKEN_DECIMALS[lower];
30
- return 18; // unknown custom token fallback
31
- }
32
- /**
33
- * Converts a human-readable amount to wei string.
34
- */
35
- export function toWei(amount, decimals) {
36
- if (!/^\d+(\.\d+)?$/.test(amount)) {
37
- throw new Error(`INVALID_AMOUNT: ${amount}`);
38
- }
39
- const [whole, frac = ""] = amount.split(".");
40
- const paddedFrac = frac.padEnd(decimals, "0").slice(0, decimals);
41
- return BigInt(whole + paddedFrac).toString();
42
- }
43
- /**
44
- * Converts a wei string to human-readable amount.
45
- * Also handles the case where the API returns a decimal string directly.
46
- */
47
- export function fromWei(weiInput, decimals) {
48
- const weiStr = String(weiInput);
49
- if (weiStr.includes("."))
50
- return weiStr;
51
- const wei = BigInt(weiStr);
52
- const divisor = BigInt(10) ** BigInt(decimals);
53
- const whole = wei / divisor;
54
- const remainder = wei % divisor;
55
- if (remainder === 0n)
56
- return whole.toString();
57
- const fracStr = remainder.toString().padStart(decimals, "0").replace(/0+$/, "");
58
- return `${whole}.${fracStr}`;
59
- }
60
- // ─── DODO Route Fetch ──────────────────────────────────────────────────
61
- /**
62
- * Fetches a swap route from the DODO aggregation API.
63
- */
64
- export async function _getDodoRouteCore(params) {
65
- const trimmedApiKey = DODO_API_KEY?.trim();
66
- const usedApiKey = Boolean(trimmedApiKey);
67
- if (!isAddress(params.walletAddress)) {
68
- throw new Error(`INVALID_WALLET_ADDRESS: ${params.walletAddress}`);
69
- }
70
- const fromAddress = resolveTokenAddress(params.fromToken);
71
- const toAddress = resolveTokenAddress(params.toToken);
72
- const usedFromToken = fromAddress;
73
- const usedToToken = toAddress;
74
- const fromDecimals = resolveTokenDecimals(params.fromToken);
75
- const toDecimals = resolveTokenDecimals(params.toToken);
76
- const amountInWei = toWei(params.amountHuman, fromDecimals);
77
- const slippage = params.slippage ?? DODO_DEFAULT_SLIPPAGE;
78
- const deadline = Math.floor(Date.now() / 1000) + 600;
79
- const url = new URL(`${DODO_API_BASE}${DODO_ROUTE_ENDPOINT}`);
80
- url.searchParams.set("chainId", String(CHAIN_ID));
81
- url.searchParams.set("fromTokenAddress", fromAddress);
82
- url.searchParams.set("toTokenAddress", toAddress);
83
- url.searchParams.set("fromAmount", amountInWei);
84
- url.searchParams.set("userAddr", params.walletAddress);
85
- url.searchParams.set("slippage", String(slippage));
86
- url.searchParams.set("source", "dodoV2AndMixWasm");
87
- url.searchParams.set("estimateGas", "true");
88
- // DODO/FaroSwap read-only route queries should prefer public mode when no
89
- // API key is configured. Never hardcode a default credential. If the
90
- // provider rejects public mode, surface a structured auth-required error
91
- // at the tool layer.
92
- if (trimmedApiKey) {
93
- url.searchParams.set("apikey", trimmedApiKey);
94
- }
95
- url.searchParams.set("deadLine", String(deadline));
96
- const response = await fetchWithTimeoutAndRetry(url, {
97
- timeoutMs: 10_000,
98
- retries: 2,
99
- retryDelayMs: 300,
100
- });
101
- if (!response.ok) {
102
- if (response.status === 401 || response.status === 403) {
103
- throw new Error(`DODO_API_AUTH_REQUIRED: DODO route API rejected public mode${usedApiKey ? " or provided key" : "; configure DODO_API_KEY if this endpoint requires authentication"}`);
104
- }
105
- if (response.status === 429) {
106
- throw new Error(`DODO_API_RATE_LIMITED: ${response.status} ${response.statusText}`);
107
- }
108
- throw new Error(`DODO_API_UNAVAILABLE: ${response.status} ${response.statusText}`);
109
- }
110
- const json = (await response.json());
111
- if (!json.data || json.status !== 200) {
112
- const message = (json.message || "").toLowerCase();
113
- if (message.includes("api key") || message.includes("apikey") || message.includes("unauthorized") || message.includes("forbidden")) {
114
- throw new Error(`DODO_API_AUTH_REQUIRED: DODO route API rejected public mode${usedApiKey ? " or provided key" : "; configure DODO_API_KEY if this endpoint requires authentication"}`);
115
- }
116
- return {
117
- amountOut: "0",
118
- amountOutWei: "0",
119
- priceImpact: 100,
120
- gasLimit: "0",
121
- value: "0",
122
- calldata: "0x",
123
- to: "",
124
- approveAddress: "",
125
- routeAvailable: false,
126
- sourceStatus: "no_route_available",
127
- usedApiKey,
128
- usedFromToken,
129
- usedToToken,
130
- wasSubstituted: false,
131
- rawResponse: json,
132
- };
133
- }
134
- const d = json.data;
135
- const resAmountStr = String(d.resAmount);
136
- return {
137
- amountOut: fromWei(resAmountStr, toDecimals),
138
- amountOutWei: resAmountStr,
139
- priceImpact: parseFloat(String(d.priceImpact)) || 0,
140
- gasLimit: String(d.gasLimit),
141
- value: String(d.value),
142
- calldata: d.data,
143
- to: d.to,
144
- approveAddress: d.targetApproveAddr,
145
- routeAvailable: true,
146
- sourceStatus: "ok",
147
- usedApiKey,
148
- usedFromToken,
149
- usedToToken,
150
- wasSubstituted: false,
151
- rawResponse: json,
152
- };
153
- }
154
- /**
155
- * Smart wrapper around _getDodoRouteCore that automatically falls back to alternative token sources
156
- * (like Circle USDC) if the canonical tokens have no liquidity on the testnet.
157
- */
158
- export async function getDodoRoute(params) {
159
- let quote = await _getDodoRouteCore(params);
160
- if (!quote.routeAvailable) {
161
- const fromUpper = params.fromToken.toUpperCase();
162
- const toUpper = params.toToken.toUpperCase();
163
- // Smart Fallback: If swapping TO canonical USDC failed, try Alternate Circle USDC
164
- if (toUpper === "USDC" || toUpper === USDC_ADDRESS.toUpperCase()) {
165
- const fallbackQuote = await _getDodoRouteCore({ ...params, toToken: CIRCLE_USDC_ADDRESS });
166
- if (fallbackQuote.routeAvailable) {
167
- return {
168
- ...fallbackQuote,
169
- wasSubstituted: true,
170
- substitutionNote: `toToken substituted: canonical USDC (${USDC_ADDRESS}) had no route; used altUSDC (${CIRCLE_USDC_ADDRESS}). Ensure your approval targets the correct address.`,
171
- };
172
- }
173
- }
174
- // Smart Fallback: If swapping FROM canonical USDC failed, try Alternate Circle USDC
175
- if (fromUpper === "USDC" || fromUpper === USDC_ADDRESS.toUpperCase()) {
176
- const fallbackQuote = await _getDodoRouteCore({ ...params, fromToken: CIRCLE_USDC_ADDRESS });
177
- if (fallbackQuote.routeAvailable) {
178
- return {
179
- ...fallbackQuote,
180
- wasSubstituted: true,
181
- substitutionNote: `fromToken substituted: canonical USDC (${USDC_ADDRESS}) had no route; used altUSDC (${CIRCLE_USDC_ADDRESS}). Ensure your allowance covers the correct address.`,
182
- };
183
- }
184
- }
185
- }
186
- return quote;
187
- }
188
- /**
189
- * Checks whether a token is the native PHRS token.
190
- */
191
- export function isNativeToken(token) {
192
- const upper = token.toUpperCase();
193
- if (upper === "PHRS")
194
- return true;
195
- return token.toLowerCase() === PHRS_ADDRESS.toLowerCase();
196
- }
1
+ // ─── DODO Route API Client ─────────────────────────────────────────────
2
+ // Fetches swap routes from DODO's aggregation API (FaroSwap).
3
+ //
4
+ // CHAIN SUPPORT IS EVIDENCE-GATED. This integration is confirmed working against
5
+ // Pharos Atlantic Testnet (688689) and Pharos Pacific Mainnet (1672) — both are
6
+ // in the default supported set. Route fetches on any OTHER (unverified) chain
7
+ // fail closed with a structured SWAP_LIQUIDITY_NOT_CONFIGURED error instead of
8
+ // quietly querying an endpoint that may answer for the wrong network. The set is
9
+ // overridable via DODO_API_SUPPORTED_CHAIN_IDS (comma-separated chain IDs) — set
10
+ // it only with evidence the DODO API actually serves that chain.
11
+ // ────────────────────────────────────────────────────────────────────────
12
+ import { isAddress } from "viem";
13
+ import { DODO_API_BASE, DODO_API_KEY, DODO_DEFAULT_SLIPPAGE, DODO_ROUTE_ENDPOINT, CHAIN_ID, activeTokenMap, activeTokenDecimals, PROS_ADDRESS, USDC_ADDRESS, CIRCLE_USDC_ADDRESS, IS_MAINNET, } from "./constants.js";
14
+ import { fetchWithTimeoutAndRetry } from "./http.js";
15
+ // ─── Helpers ───────────────────────────────────────────────────────────
16
+ /**
17
+ * Resolves a token symbol (e.g. "PROS") or address to its on-chain address.
18
+ */
19
+ export function resolveTokenAddress(token) {
20
+ const upper = token.toUpperCase();
21
+ const map = activeTokenMap();
22
+ if (map[upper])
23
+ return map[upper];
24
+ if (isAddress(token))
25
+ return token;
26
+ throw new Error(`INVALID_TOKEN_ADDRESS: Unknown token or invalid address: ${token}`);
27
+ }
28
+ /**
29
+ * Resolves the decimal count for a token symbol or address.
30
+ */
31
+ export function resolveTokenDecimals(token) {
32
+ const upper = token.toUpperCase();
33
+ const decimals = activeTokenDecimals();
34
+ if (decimals[upper] !== undefined)
35
+ return decimals[upper];
36
+ const lower = token.toLowerCase();
37
+ if (decimals[lower] !== undefined)
38
+ return decimals[lower];
39
+ return 18; // unknown custom token fallback
40
+ }
41
+ /**
42
+ * Converts a human-readable amount to wei string.
43
+ */
44
+ export function toWei(amount, decimals) {
45
+ if (!/^\d+(\.\d+)?$/.test(amount)) {
46
+ throw new Error(`INVALID_AMOUNT: ${amount}`);
47
+ }
48
+ const [whole, frac = ""] = amount.split(".");
49
+ const paddedFrac = frac.padEnd(decimals, "0").slice(0, decimals);
50
+ return BigInt(whole + paddedFrac).toString();
51
+ }
52
+ /**
53
+ * Converts a wei string to human-readable amount.
54
+ * Also handles the case where the API returns a decimal string directly.
55
+ */
56
+ export function fromWei(weiInput, decimals) {
57
+ const weiStr = String(weiInput);
58
+ if (weiStr.includes("."))
59
+ return weiStr;
60
+ const wei = BigInt(weiStr);
61
+ const divisor = BigInt(10) ** BigInt(decimals);
62
+ const whole = wei / divisor;
63
+ const remainder = wei % divisor;
64
+ if (remainder === 0n)
65
+ return whole.toString();
66
+ const fracStr = remainder.toString().padStart(decimals, "0").replace(/0+$/, "");
67
+ return `${whole}.${fracStr}`;
68
+ }
69
+ /**
70
+ * Resolves the FaroSwap AUTO slippage tolerance based on token pair types.
71
+ * @see https://docs.faroswap.xyz
72
+ */
73
+ export function resolveAutoSlippage(fromToken, toToken) {
74
+ const from = fromToken.toUpperCase();
75
+ const to = toToken.toUpperCase();
76
+ const stablecoins = new Set(["USDT", "USDC", "DAI", "BUSD", "CIRCLE_USDC"]);
77
+ if (stablecoins.has(from) && stablecoins.has(to)) {
78
+ return 0.1; // 0.1% for stablecoin pairs
79
+ }
80
+ const majors = new Set(["BTC", "WBTC", "ETH", "WETH", "USDT", "USDC", "CIRCLE_USDC"]);
81
+ if (majors.has(from) && majors.has(to)) {
82
+ return 0.5; // 0.5% for major pairs
83
+ }
84
+ return DODO_DEFAULT_SLIPPAGE; // 3% default for all others
85
+ }
86
+ // ─── DODO Route Fetch ──────────────────────────────────────────────────
87
+ /**
88
+ * Structured "provider not configured for this chain" failure. Callers must
89
+ * surface this as SWAP_LIQUIDITY_NOT_CONFIGURED it is a permanent
90
+ * configuration state, not a transient provider outage.
91
+ */
92
+ export class DodoNotConfiguredError extends Error {
93
+ code = "SWAP_LIQUIDITY_NOT_CONFIGURED";
94
+ constructor(chainId) {
95
+ super(`SWAP_LIQUIDITY_NOT_CONFIGURED: the DODO route API is not a verified provider for chainId ${chainId}. ` +
96
+ `Swap liquidity, slippage, and route quotes cannot be served on this network. ` +
97
+ `Verified chains: ${dodoApiSupportedChainIds().join(", ") || "none"} (override with DODO_API_SUPPORTED_CHAIN_IDS only with evidence of support).`);
98
+ this.name = "DodoNotConfiguredError";
99
+ }
100
+ }
101
+ /**
102
+ * Chains the DODO route API is treated as configured for. Defaults to Atlantic
103
+ * Testnet (688689) and Pacific Mainnet (1672) both confirmed to serve routes.
104
+ * Any other chain fails closed until an operator opts in via
105
+ * DODO_API_SUPPORTED_CHAIN_IDS with evidence the API supports it.
106
+ */
107
+ export function dodoApiSupportedChainIds() {
108
+ const raw = process.env.DODO_API_SUPPORTED_CHAIN_IDS;
109
+ if (raw && raw.trim()) {
110
+ return raw
111
+ .split(",")
112
+ .map((s) => parseInt(s.trim(), 10))
113
+ .filter((n) => Number.isFinite(n) && n > 0);
114
+ }
115
+ return [688689, 1672];
116
+ }
117
+ export function isDodoApiConfiguredForChain(chainId = CHAIN_ID) {
118
+ return dodoApiSupportedChainIds().includes(chainId);
119
+ }
120
+ /**
121
+ * Fetches a swap route from the DODO aggregation API.
122
+ */
123
+ export async function _getDodoRouteCore(params) {
124
+ const trimmedApiKey = DODO_API_KEY?.trim();
125
+ const usedApiKey = Boolean(trimmedApiKey);
126
+ if (!isDodoApiConfiguredForChain(CHAIN_ID)) {
127
+ throw new DodoNotConfiguredError(CHAIN_ID);
128
+ }
129
+ if (!isAddress(params.walletAddress)) {
130
+ throw new Error(`INVALID_WALLET_ADDRESS: ${params.walletAddress}`);
131
+ }
132
+ const fromAddress = resolveTokenAddress(params.fromToken);
133
+ const toAddress = resolveTokenAddress(params.toToken);
134
+ const usedFromToken = fromAddress;
135
+ const usedToToken = toAddress;
136
+ const fromDecimals = resolveTokenDecimals(params.fromToken);
137
+ const toDecimals = resolveTokenDecimals(params.toToken);
138
+ const amountInWei = toWei(params.amountHuman, fromDecimals);
139
+ const slippage = params.slippage ?? resolveAutoSlippage(params.fromToken, params.toToken);
140
+ const deadline = Math.floor(Date.now() / 1000) + 600;
141
+ const url = new URL(`${DODO_API_BASE}${DODO_ROUTE_ENDPOINT}`);
142
+ url.searchParams.set("chainId", String(CHAIN_ID));
143
+ url.searchParams.set("fromTokenAddress", fromAddress);
144
+ url.searchParams.set("toTokenAddress", toAddress);
145
+ url.searchParams.set("fromAmount", amountInWei);
146
+ url.searchParams.set("userAddr", params.walletAddress);
147
+ url.searchParams.set("slippage", String(slippage));
148
+ url.searchParams.set("source", "dodoV2AndMixWasm");
149
+ url.searchParams.set("estimateGas", "true");
150
+ // DODO/FaroSwap read-only route queries should prefer public mode when no
151
+ // API key is configured. Never hardcode a default credential. If the
152
+ // provider rejects public mode, surface a structured auth-required error
153
+ // at the tool layer.
154
+ if (trimmedApiKey) {
155
+ url.searchParams.set("apikey", trimmedApiKey);
156
+ }
157
+ url.searchParams.set("deadLine", String(deadline));
158
+ const response = await fetchWithTimeoutAndRetry(url, {
159
+ timeoutMs: 10_000,
160
+ retries: 2,
161
+ retryDelayMs: 300,
162
+ });
163
+ if (!response.ok) {
164
+ if (response.status === 401 || response.status === 403) {
165
+ throw new Error(`DODO_API_AUTH_REQUIRED: DODO route API rejected public mode${usedApiKey ? " or provided key" : "; configure DODO_API_KEY if this endpoint requires authentication"}`);
166
+ }
167
+ if (response.status === 429) {
168
+ throw new Error(`DODO_API_RATE_LIMITED: ${response.status} ${response.statusText}`);
169
+ }
170
+ throw new Error(`DODO_API_UNAVAILABLE: ${response.status} ${response.statusText}`);
171
+ }
172
+ const json = (await response.json());
173
+ if (!json.data || json.status !== 200) {
174
+ const message = (json.message || "").toLowerCase();
175
+ if (message.includes("api key") || message.includes("apikey") || message.includes("unauthorized") || message.includes("forbidden")) {
176
+ throw new Error(`DODO_API_AUTH_REQUIRED: DODO route API rejected public mode${usedApiKey ? " or provided key" : "; configure DODO_API_KEY if this endpoint requires authentication"}`);
177
+ }
178
+ return {
179
+ amountOut: "0",
180
+ amountOutWei: "0",
181
+ priceImpact: 100,
182
+ gasLimit: "0",
183
+ value: "0",
184
+ calldata: "0x",
185
+ to: "",
186
+ approveAddress: "",
187
+ routeAvailable: false,
188
+ sourceStatus: "no_route_available",
189
+ usedApiKey,
190
+ usedFromToken,
191
+ usedToToken,
192
+ wasSubstituted: false,
193
+ rawResponse: json,
194
+ };
195
+ }
196
+ const d = json.data;
197
+ const resAmountStr = String(d.resAmount);
198
+ return {
199
+ amountOut: fromWei(resAmountStr, toDecimals),
200
+ amountOutWei: resAmountStr,
201
+ priceImpact: parseFloat(String(d.priceImpact)) || 0,
202
+ gasLimit: String(d.gasLimit),
203
+ value: String(d.value),
204
+ calldata: d.data,
205
+ to: d.to,
206
+ approveAddress: d.targetApproveAddr,
207
+ routeAvailable: true,
208
+ sourceStatus: "ok",
209
+ usedApiKey,
210
+ usedFromToken,
211
+ usedToToken,
212
+ wasSubstituted: false,
213
+ rawResponse: json,
214
+ };
215
+ }
216
+ /**
217
+ * Smart wrapper around _getDodoRouteCore that automatically falls back to alternative token sources
218
+ * (like alternate USDC) if the canonical tokens have no liquidity on Atlantic Testnet.
219
+ * Pacific Mainnet never falls back to non-Pacific token addresses.
220
+ */
221
+ export async function getDodoRoute(params) {
222
+ const quote = await _getDodoRouteCore(params);
223
+ if (!quote.routeAvailable && !IS_MAINNET) {
224
+ const fromUpper = params.fromToken.toUpperCase();
225
+ const toUpper = params.toToken.toUpperCase();
226
+ // Smart Fallback: If swapping TO canonical USDC failed, try Alternate Circle USDC
227
+ if (toUpper === "USDC" || toUpper === USDC_ADDRESS.toUpperCase()) {
228
+ const fallbackQuote = await _getDodoRouteCore({ ...params, toToken: CIRCLE_USDC_ADDRESS });
229
+ if (fallbackQuote.routeAvailable) {
230
+ return {
231
+ ...fallbackQuote,
232
+ wasSubstituted: true,
233
+ substitutionNote: `toToken substituted: canonical USDC (${USDC_ADDRESS}) had no route; used altUSDC (${CIRCLE_USDC_ADDRESS}). Ensure your approval targets the correct address.`,
234
+ };
235
+ }
236
+ }
237
+ // Smart Fallback: If swapping FROM canonical USDC failed, try Alternate Circle USDC
238
+ if (fromUpper === "USDC" || fromUpper === USDC_ADDRESS.toUpperCase()) {
239
+ const fallbackQuote = await _getDodoRouteCore({ ...params, fromToken: CIRCLE_USDC_ADDRESS });
240
+ if (fallbackQuote.routeAvailable) {
241
+ return {
242
+ ...fallbackQuote,
243
+ wasSubstituted: true,
244
+ substitutionNote: `fromToken substituted: canonical USDC (${USDC_ADDRESS}) had no route; used altUSDC (${CIRCLE_USDC_ADDRESS}). Ensure your allowance covers the correct address.`,
245
+ };
246
+ }
247
+ }
248
+ }
249
+ return quote;
250
+ }
251
+ /**
252
+ * Checks whether a token is the native PROS token.
253
+ */
254
+ export function isNativeToken(token) {
255
+ const upper = token.toUpperCase();
256
+ if (upper === "PROS")
257
+ return true;
258
+ return token.toLowerCase() === PROS_ADDRESS.toLowerCase();
259
+ }
197
260
  //# sourceMappingURL=dodoApi.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dodoApi.js","sourceRoot":"","sources":["../../src/lib/dodoApi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dodoApi.js","sourceRoot":"","sources":["../../src/lib/dodoApi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ export type EcosystemItemCategory = "token" | "protocol" | "bridge" | "oracle" | "infrastructure" | "provider" | "explorer" | "payment";
2
+ /** Ecosystem recognition status — knowing a name is never holding proof. */
3
+ export type EcosystemItemStatus = "VERIFIED" | "KNOWN_ECOSYSTEM" | "NOT_CONFIGURED" | "UNKNOWN";
4
+ /** Evidence-backed verification status (docs/REFERENCES.md ledger vocabulary). */
5
+ export type RegistryVerificationStatus = "VERIFIED" | "TO_VERIFY" | "UNVERIFIED";
6
+ export type RegistryEvidenceSourceType = "onchain" | "official_docs" | "official_github" | "verified_explorer" | "provider";
7
+ export interface RegistryEvidenceSource {
8
+ type: RegistryEvidenceSourceType;
9
+ /** URL or repo-relative citation — never invented. */
10
+ ref: string;
11
+ /** ISO date the citation was last checked; null = never independently re-checked. */
12
+ verifiedAt: string | null;
13
+ }
14
+ export interface RegistryContract {
15
+ address: `0x${string}`;
16
+ label: string;
17
+ role: string;
18
+ /** Same address across EVM chains by deterministic deployment (CREATE2). */
19
+ deterministic: boolean;
20
+ verificationStatus: RegistryVerificationStatus;
21
+ /** Token/feed symbol, when the contract is a token or price feed. */
22
+ symbol?: string;
23
+ decimals?: number;
24
+ /** Price pair for oracle feed contracts (e.g. "PROS/USD"). */
25
+ pair?: string;
26
+ /** Price reads supported, but no token identity/balance claims (e.g. USDT). */
27
+ feedOnly?: boolean;
28
+ note?: string;
29
+ }
30
+ export type RegistryProviderKind = "rpc" | "price_feed" | "security_intel" | "subgraph" | "indexer" | "json_api" | "explorer_api" | "x402";
31
+ export interface RegistryProvider {
32
+ kind: RegistryProviderKind;
33
+ /** null = deliberately NOT_CONFIGURED — never invent an endpoint. */
34
+ endpoint: string | null;
35
+ /** Env var an operator can use to configure/override this provider. */
36
+ configVia: string | null;
37
+ status: "implemented" | "experimental" | "not_configured" | "not_implemented";
38
+ note?: string;
39
+ }
40
+ /**
41
+ * How an item may be used by safety logic:
42
+ * • allow_eligible — address-verified canonical; may contribute to ALLOW.
43
+ * • recognition_only — may label/inform; never relaxes risk.
44
+ * • escalate_only — recognition triggers extra caution (bridges, cross-chain,
45
+ * unverified protocols); never relaxes risk.
46
+ */
47
+ export type RegistrySafetyUse = "allow_eligible" | "recognition_only" | "escalate_only";
48
+ export interface EcosystemItem {
49
+ /** Stable slug, e.g. "token:pacific-mainnet:usdc". */
50
+ id: string;
51
+ name: string;
52
+ /** Names/symbols that resolve to this item — recognition and impersonation detection only. */
53
+ aliases: string[];
54
+ category: EcosystemItemCategory;
55
+ /** null = chain-agnostic (deterministic CREATE2 deployments). */
56
+ chainId: number | null;
57
+ ecosystemStatus: EcosystemItemStatus;
58
+ verificationStatus: RegistryVerificationStatus;
59
+ /** REQUIRED non-empty for verificationStatus VERIFIED. */
60
+ evidenceSources: RegistryEvidenceSource[];
61
+ /** Empty = no on-chain footprint claimed. */
62
+ contracts: RegistryContract[];
63
+ providers: RegistryProvider[];
64
+ safetyUse: RegistrySafetyUse;
65
+ notes: string;
66
+ }
67
+ /** The canonical registry (see src/data/ecosystemRegistry.data.ts). */
68
+ export declare const ECOSYSTEM_REGISTRY: readonly EcosystemItem[];
69
+ /**
70
+ * Validate the registry against the fail-closed truth-model rules. Returns a
71
+ * list of human-readable violations (empty = valid). Enforced by tests so a
72
+ * registry edit that weakens the rules fails CI.
73
+ */
74
+ export declare function validateEcosystemRegistry(items?: readonly EcosystemItem[]): string[];
75
+ interface AddressLookupResult {
76
+ item: EcosystemItem;
77
+ contract: RegistryContract;
78
+ }
79
+ /** Address-matched lookup — the only lookup that may feed allow_eligible handling. */
80
+ export declare function lookupRegistryByAddress(address: string): AddressLookupResult | undefined;
81
+ export interface AddressTrustEvidence {
82
+ /** Address matched a registry contract registered for the given chain. */
83
+ recognized: boolean;
84
+ /**
85
+ * VERIFIED item + VERIFIED contract + allow_eligible + chain match — the ONLY
86
+ * state that may relax risk. Recognition without this is informational only.
87
+ */
88
+ verifiedCanonical: boolean;
89
+ itemId: string | null;
90
+ itemName: string | null;
91
+ contractLabel: string | null;
92
+ safetyUse: RegistrySafetyUse | null;
93
+ verificationStatus: RegistryVerificationStatus | null;
94
+ /** Registry chainId of the matched item (null = chain-agnostic). */
95
+ registryChainId: number | null;
96
+ note: string | null;
97
+ }
98
+ /**
99
+ * Registry-driven trust evaluation for a single address on a given chain.
100
+ * This is the ONLY sanctioned way for risk logic to derive spender/counterparty
101
+ * trust: hardcoded "known address" maps outside the registry are forbidden
102
+ * (truth-model rule: do not upgrade anything to VERIFIED without evidence).
103
+ * An address registered for a different chainId gets NO recognition — testnet
104
+ * provenance never carries to mainnet.
105
+ */
106
+ export declare function addressTrustEvidence(address: string, chainId: number): AddressTrustEvidence;
107
+ /**
108
+ * Name/alias lookup — recognition only. A name match carries NO address
109
+ * verification and must never relax a decision, regardless of the item's
110
+ * safetyUse (which applies to address-matched evidence only).
111
+ */
112
+ export declare function lookupRegistryByName(name: string): EcosystemItem | undefined;
113
+ /** Registry item by stable id. */
114
+ export declare function getRegistryItem(id: string): EcosystemItem | undefined;
115
+ export {};
116
+ //# sourceMappingURL=ecosystemRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecosystemRegistry.d.ts","sourceRoot":"","sources":["../../src/lib/ecosystemRegistry.ts"],"names":[],"mappings":"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"}