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
@@ -0,0 +1,52 @@
1
+ import { type NetworkName, type PharosNetwork } from "../networks.js";
2
+ import type { EvidenceSource } from "../analysis/types.js";
3
+ export type EcosystemCategory = "oracle" | "cross_chain" | "indexing" | "wallet_infrastructure" | "custody_infrastructure" | "evm_wasm_interop" | "payment" | "rpc_provider" | "security" | "identity" | "unknown";
4
+ export type EcosystemStatus = "implemented" | "experimental" | "roadmap" | "to_verify" | "not_implemented";
5
+ export interface EcosystemAddress {
6
+ network: NetworkName;
7
+ chainId: number;
8
+ address: string;
9
+ label?: string;
10
+ }
11
+ export interface EcosystemEntry {
12
+ name: string;
13
+ category: EcosystemCategory;
14
+ /** Official addresses (only when present in the Phase 5A audit). */
15
+ addresses?: EcosystemAddress[];
16
+ officialDocsUrl?: string;
17
+ /** Provenance of the recognition data. */
18
+ source: EvidenceSource;
19
+ /** SafeHands' HONEST status — `implemented` only with code + tests. */
20
+ status: EcosystemStatus;
21
+ riskRelevance: string;
22
+ /** What SafeHands does (awareness/evidence) — never a direct integration claim. */
23
+ safehandsBehavior: string;
24
+ overclaimRisk: string;
25
+ /** Alternate names/aliases for provider-name hint matching. */
26
+ aliases?: string[];
27
+ }
28
+ /**
29
+ * The Pharos ecosystem providers SafeHands is aware of. Order is informational.
30
+ * `status` reflects SafeHands' implementation, NOT the provider's deployment:
31
+ * Pharos may have deployed Chainlink, but SafeHands has no Chainlink integration,
32
+ * so its status here is `roadmap` (awareness only).
33
+ */
34
+ export declare const ECOSYSTEM_PROVIDERS: EcosystemEntry[];
35
+ /** Look up an ecosystem provider by a known official address (any network). */
36
+ export declare function lookupEcosystemByAddress(address: string): {
37
+ entry: EcosystemEntry;
38
+ network: NetworkName;
39
+ chainId: number;
40
+ } | undefined;
41
+ /** Look up an ecosystem provider by name/alias (case-insensitive). */
42
+ export declare function lookupEcosystemByName(name: string): EcosystemEntry | undefined;
43
+ /** Map a recognized canonical contract (Phase 5B) to an ecosystem entry, when applicable. */
44
+ export declare function ecosystemForCanonical(address: string, network?: PharosNetwork): EcosystemEntry | undefined;
45
+ export interface EcosystemRegistrySummary {
46
+ providers: number;
47
+ byCategory: Record<EcosystemCategory, number>;
48
+ byStatus: Record<EcosystemStatus, number>;
49
+ }
50
+ /** Secret-free registry summary for /infra/status and /public-config. */
51
+ export declare function ecosystemRegistrySummary(): EcosystemRegistrySummary;
52
+ //# sourceMappingURL=ecosystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecosystem.d.ts","sourceRoot":"","sources":["../../../src/lib/pharos/ecosystem.ts"],"names":[],"mappings":"AAUA,OAAO,EAAoB,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAExF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,MAAM,iBAAiB,GACzB,QAAQ,GACR,aAAa,GACb,UAAU,GACV,uBAAuB,GACvB,wBAAwB,GACxB,kBAAkB,GAClB,SAAS,GACT,cAAc,GACd,UAAU,GACV,UAAU,GACV,SAAS,CAAC;AAEd,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,cAAc,GAAG,SAAS,GAAG,WAAW,GAAG,iBAAiB,CAAC;AAE3G,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,oEAAoE;IACpE,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0CAA0C;IAC1C,MAAM,EAAE,cAAc,CAAC;IACvB,uEAAuE;IACvE,MAAM,EAAE,eAAe,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,mFAAmF;IACnF,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAeD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,cAAc,EAuX/C,CAAC;AAaF,+EAA+E;AAC/E,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAGtI;AAED,sEAAsE;AACtE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAM9E;AAED,6FAA6F;AAC7F,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkC,GAAG,cAAc,GAAG,SAAS,CAO9H;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IAC9C,QAAQ,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED,yEAAyE;AACzE,wBAAgB,wBAAwB,IAAI,wBAAwB,CAQnE"}
@@ -0,0 +1,431 @@
1
+ // ─── Pharos Ecosystem Registry (read-only, awareness-only) ─────────────
2
+ // A registry of Pharos ecosystem providers SafeHands is AWARE of. It does NOT
3
+ // integrate with, call, or hold keys for any of them. Each entry records what the
4
+ // official Pharos docs say (Phase 5A audit) and SafeHands' honest status —
5
+ // `implemented` is used ONLY where SafeHands has code + tests; everything SafeHands
6
+ // merely recognizes is `roadmap` / `experimental` / `to_verify`. No addresses are
7
+ // invented: only official addresses from the audit are included. Pure data — no RPC,
8
+ // no keys, no external API calls.
9
+ // ───────────────────────────────────────────────────────────────────────
10
+ import { getActiveNetwork } from "../networks.js";
11
+ import { canonicalContractEvidence } from "../analysis/contractIntel.js";
12
+ const DOCS = {
13
+ chainlink: "https://docs.pharos.xyz/tooling-and-infrastructure/oracles/chainlink-pe",
14
+ crossChain: "https://docs.pharos.xyz/tooling-and-infrastructure/cross-chain",
15
+ goldsky: "https://docs.pharos.xyz/tooling-and-infrastructure/indexing/goldsky",
16
+ wallets: "https://docs.pharos.xyz/tooling-and-infrastructure/wallets",
17
+ wasm: "https://docs.pharos.xyz/developer-guide/interoperability/call-evm-from-wasm",
18
+ x402: "https://docs.pharos.xyz/developer-guide/x402",
19
+ zan: "https://docs.pharos.xyz/tooling-and-infrastructure/rpc/zan",
20
+ };
21
+ const BRIDGE_BEHAVIOR = "Bridge-like / cross-chain intent → REQUIRE_CONFIRMATION unless explicitly trusted by policy. SafeHands does NOT call this provider or any cross-chain API.";
22
+ /**
23
+ * The Pharos ecosystem providers SafeHands is aware of. Order is informational.
24
+ * `status` reflects SafeHands' implementation, NOT the provider's deployment:
25
+ * Pharos may have deployed Chainlink, but SafeHands has no Chainlink integration,
26
+ * so its status here is `roadmap` (awareness only).
27
+ */
28
+ export const ECOSYSTEM_PROVIDERS = [
29
+ {
30
+ name: "Chainlink Price Feeds (CRE)",
31
+ category: "oracle",
32
+ aliases: ["chainlink", "chainlink-pe", "chainlink price feed", "cre"],
33
+ addresses: [
34
+ { network: "pacific-mainnet", chainId: 1672, address: "0xc71f7d98d3d9a000Fdfe307fBdb9d94AbD56424B", label: "Chainlink price-feed cache (Pacific)" },
35
+ { network: "atlantic-testnet", chainId: 688689, address: "0x5456fD07A1622d33969f833d52aA5AD2c68C3Fa2", label: "Chainlink price-feed cache (Atlantic)" },
36
+ ],
37
+ officialDocsUrl: DOCS.chainlink,
38
+ source: "official_docs",
39
+ status: "roadmap",
40
+ riskRelevance: "Oracle price dependency: a contract that reads Chainlink feeds inherits oracle/price risk (staleness, manipulation).",
41
+ safehandsBehavior: "Recognize as Pharos-native oracle ecosystem (price-feed cache), evidence only. SafeHands does NOT query Chainlink feeds and has no direct oracle analyzer.",
42
+ overclaimRisk: "HIGH: Chainlink is Pharos-native; do NOT claim a Chainlink integration.",
43
+ },
44
+ {
45
+ name: "Chainlink CCIP",
46
+ category: "cross_chain",
47
+ aliases: ["ccip", "chainlink ccip"],
48
+ officialDocsUrl: DOCS.crossChain,
49
+ source: "official_docs",
50
+ status: "roadmap",
51
+ riskRelevance: "Cross-chain messaging/transfer: bridge/relayer trust and finality risk.",
52
+ safehandsBehavior: BRIDGE_BEHAVIOR,
53
+ overclaimRisk: "Do NOT claim a CCIP integration.",
54
+ },
55
+ {
56
+ name: "Circle CCTP",
57
+ category: "cross_chain",
58
+ aliases: ["cctp", "circle cctp"],
59
+ officialDocsUrl: DOCS.crossChain,
60
+ source: "official_docs",
61
+ status: "roadmap",
62
+ riskRelevance: "Cross-chain USDC transfer: bridge trust, attestation, and finality risk.",
63
+ safehandsBehavior: BRIDGE_BEHAVIOR,
64
+ overclaimRisk: "Do NOT claim a Circle/CCTP integration.",
65
+ },
66
+ {
67
+ name: "LayerZero",
68
+ category: "cross_chain",
69
+ aliases: ["layerzero", "lz"],
70
+ officialDocsUrl: DOCS.crossChain,
71
+ source: "official_docs",
72
+ status: "roadmap",
73
+ riskRelevance: "Cross-chain messaging: relayer/oracle trust and replay risk.",
74
+ safehandsBehavior: BRIDGE_BEHAVIOR,
75
+ overclaimRisk: "Do NOT claim a LayerZero integration.",
76
+ },
77
+ {
78
+ name: "LI.FI",
79
+ category: "cross_chain",
80
+ aliases: ["lifi", "li.fi", "li fi"],
81
+ officialDocsUrl: undefined,
82
+ source: "to_verify",
83
+ status: "to_verify",
84
+ riskRelevance: "Bridge aggregation risk if present.",
85
+ safehandsBehavior: "NOT named on the official Pharos cross-chain page (Phase 5A). Treat any LI.FI-like bridge call as a generic cross-chain intent → REQUIRE_CONFIRMATION. No integration.",
86
+ overclaimRisk: "HIGH: do NOT list LI.FI as a Pharos/SafeHands integration without official confirmation.",
87
+ },
88
+ {
89
+ name: "Jumper",
90
+ category: "cross_chain",
91
+ aliases: ["jumper"],
92
+ officialDocsUrl: undefined,
93
+ source: "to_verify",
94
+ status: "to_verify",
95
+ riskRelevance: "Bridge UI / aggregation risk if present.",
96
+ safehandsBehavior: "NOT named on the official Pharos cross-chain page (Phase 5A). Treat any Jumper-like bridge call as a generic cross-chain intent → REQUIRE_CONFIRMATION. No integration.",
97
+ overclaimRisk: "HIGH: do NOT list Jumper as a Pharos/SafeHands integration without official confirmation.",
98
+ },
99
+ {
100
+ name: "Goldsky",
101
+ category: "indexing",
102
+ aliases: ["goldsky", "subgraph", "mirror"],
103
+ officialDocsUrl: DOCS.goldsky,
104
+ source: "official_docs",
105
+ status: "implemented",
106
+ riskRelevance: "Indexing/data source: could enrich historical evidence; NOT an execution path.",
107
+ safehandsBehavior: "SafeHands MCP provides a native query_goldsky_subgraph tool, allowing AI agents to fetch real-time historical indexing data via GraphQL if a Goldsky endpoint is configured.",
108
+ overclaimRisk: "Do NOT claim a live Goldsky integration; indexing ≠ guardrail logic.",
109
+ },
110
+ {
111
+ name: "Safe (Safe MultiSig)",
112
+ category: "wallet_infrastructure",
113
+ aliases: ["safe", "gnosis safe", "safe multisig", "safel2"],
114
+ officialDocsUrl: DOCS.wallets,
115
+ source: "official_docs",
116
+ status: "experimental",
117
+ riskRelevance: "Smart-account / multisig treasury flows benefit from pre-sign checks (owners/threshold, batch contents).",
118
+ safehandsBehavior: "Recognize canonical Safe/SafeL2 addresses (Phase 5B) and decode Safe/MultiSend batches (experimental). SafeHands holds NO keys, never co-signs, and never custodies; pre-sign verdicts only.",
119
+ overclaimRisk: "Do NOT claim a Safe partnership or any custody capability.",
120
+ },
121
+ {
122
+ name: "Fordefi",
123
+ category: "custody_infrastructure",
124
+ aliases: ["fordefi"],
125
+ officialDocsUrl: DOCS.wallets,
126
+ source: "official_docs",
127
+ status: "roadmap",
128
+ riskRelevance: "MPC custody: treasury/custody flows carry external key-management risk.",
129
+ safehandsBehavior: "External MPC-custody awareness only. SafeHands holds NO keys and never creates/imports/exports/manages private keys; it surfaces pre-sign verdicts to custody UIs.",
130
+ overclaimRisk: "Do NOT claim a Fordefi partnership or custody capability.",
131
+ },
132
+ {
133
+ name: "Dora VM (EVM ↔ WASM interop)",
134
+ category: "evm_wasm_interop",
135
+ aliases: ["dora", "dora vm", "wasm", "stylus", "evm-wasm"],
136
+ officialDocsUrl: DOCS.wasm,
137
+ source: "official_docs",
138
+ status: "experimental",
139
+ riskRelevance: "WASM↔EVM interop calls can bypass naive EVM-only assumptions; relevant once analyzed.",
140
+ safehandsBehavior: "EVM analysis is implemented/aligned; EVM↔WASM interop is experimental (testnet examples; mainnet TO_VERIFY). A WASM-originated/interop intent → REQUIRE_CONFIRMATION. No WASM analyzer exists.",
141
+ overclaimRisk: "Do NOT claim WASM analysis support.",
142
+ },
143
+ {
144
+ name: "x402 payments",
145
+ category: "payment",
146
+ aliases: ["x402"],
147
+ officialDocsUrl: DOCS.x402,
148
+ source: "official_docs",
149
+ status: "implemented",
150
+ riskRelevance: "Payment-before-fetch for agents: URL/SSRF, amount, and token risk.",
151
+ safehandsBehavior: "Support for x402 is recognized primarily on Pharos Atlantic Testnet (Chain ID 688689). SafeHands never signs or settles a payment natively. x402 intents → REQUIRE_CONFIRMATION unless pre-authorized.",
152
+ overclaimRisk: "Do NOT claim mainnet x402 automatic settlement.",
153
+ },
154
+ {
155
+ name: "ZAN RPC",
156
+ category: "rpc_provider",
157
+ aliases: ["zan"],
158
+ officialDocsUrl: DOCS.zan,
159
+ source: "official_docs",
160
+ status: "implemented",
161
+ riskRelevance: "Optional read-only RPC provider; premium keys must never leak.",
162
+ safehandsBehavior: "Optional read-only RPC provider (Phase 5C). Read from env only; the URL/API key is never exposed (only a redacted provider name). Not required by default.",
163
+ overclaimRisk: "Do NOT hardcode/ship ZAN keys.",
164
+ },
165
+ {
166
+ name: "Public Pharos RPC",
167
+ category: "rpc_provider",
168
+ aliases: ["pharos-public", "public rpc", "rpc.pharos.xyz"],
169
+ officialDocsUrl: "https://docs.pharos.xyz/api-and-sdk/json-rpc-methods",
170
+ source: "official_docs",
171
+ status: "implemented",
172
+ riskRelevance: "Default read-only RPC for SafeHands checks.",
173
+ safehandsBehavior: "Default hosted read-only RPC; read methods only (Phase 5C whitelist). No keys required.",
174
+ overclaimRisk: "None.",
175
+ },
176
+ // ── Ecosystem awareness from the public Pharos ecosystem list ────────────
177
+ // Recognized by name only (no official docs URL / addresses bundled), so
178
+ // status/source are `to_verify`. SafeHands does NOT integrate with, call,
179
+ // hold keys for, or execute against any of these — awareness/pre-sign
180
+ // verdicts only. Everything stays read-only and fail-closed.
181
+ // Wallets
182
+ {
183
+ name: "OKX Wallet",
184
+ category: "wallet_infrastructure",
185
+ aliases: ["okx", "okx wallet"],
186
+ source: "to_verify",
187
+ status: "to_verify",
188
+ riskRelevance: "Self-custody wallet UI; pre-sign checks (recipient, calldata, approvals) benefit the signer.",
189
+ safehandsBehavior: "Recognized Pharos-ecosystem wallet (awareness only). SafeHands holds no keys, never custodies or co-signs; pre-sign verdicts only.",
190
+ overclaimRisk: "Do NOT claim an OKX Wallet integration or partnership.",
191
+ },
192
+ {
193
+ name: "TopNod",
194
+ category: "wallet_infrastructure",
195
+ aliases: ["topnod"],
196
+ source: "to_verify",
197
+ status: "to_verify",
198
+ riskRelevance: "Wallet UI; pre-sign checks benefit the signer.",
199
+ safehandsBehavior: "Recognized Pharos-ecosystem wallet (awareness only). SafeHands holds no keys and never custodies; pre-sign verdicts only.",
200
+ overclaimRisk: "Do NOT claim a TopNod integration or partnership.",
201
+ },
202
+ {
203
+ name: "OneKey",
204
+ category: "wallet_infrastructure",
205
+ aliases: ["onekey"],
206
+ source: "to_verify",
207
+ status: "to_verify",
208
+ riskRelevance: "Hardware/self-custody wallet; pre-sign checks benefit the signer.",
209
+ safehandsBehavior: "Recognized Pharos-ecosystem wallet (awareness only). SafeHands holds no keys and never custodies; pre-sign verdicts only.",
210
+ overclaimRisk: "Do NOT claim a OneKey integration or partnership.",
211
+ },
212
+ {
213
+ name: "KuCoin Wallet",
214
+ category: "wallet_infrastructure",
215
+ aliases: ["kucoin", "kucoin wallet"],
216
+ source: "to_verify",
217
+ status: "to_verify",
218
+ riskRelevance: "Self-custody wallet UI; pre-sign checks benefit the signer.",
219
+ safehandsBehavior: "Recognized Pharos-ecosystem wallet (awareness only). SafeHands holds no keys and never custodies; pre-sign verdicts only.",
220
+ overclaimRisk: "Do NOT claim a KuCoin Wallet integration or partnership.",
221
+ },
222
+ // Custody
223
+ {
224
+ name: "Anchorage",
225
+ category: "custody_infrastructure",
226
+ aliases: ["anchorage", "anchorage digital"],
227
+ source: "to_verify",
228
+ status: "to_verify",
229
+ riskRelevance: "Institutional custody: treasury/custody flows carry external key-management risk.",
230
+ safehandsBehavior: "External custody awareness only. SafeHands holds no keys and never creates/imports/exports/manages private keys; it surfaces pre-sign verdicts to custody UIs.",
231
+ overclaimRisk: "Do NOT claim an Anchorage partnership or custody capability.",
232
+ },
233
+ // Payment
234
+ {
235
+ name: "Alchemy Pay",
236
+ category: "payment",
237
+ aliases: ["alchemy pay", "alchemypay"],
238
+ source: "to_verify",
239
+ status: "to_verify",
240
+ riskRelevance: "Fiat on/off-ramp & payment rail: amount, token, and counterparty risk.",
241
+ safehandsBehavior: "Recognized Pharos-ecosystem payment rail (awareness only). Distinct from Alchemy (RPC). SafeHands never signs or settles a payment; payment intents → REQUIRE_CONFIRMATION.",
242
+ overclaimRisk: "Do NOT claim an Alchemy Pay integration or automatic settlement.",
243
+ },
244
+ // Oracle / RPC / indexer
245
+ {
246
+ name: "Supra",
247
+ category: "oracle",
248
+ aliases: ["supra", "supra oracle"],
249
+ source: "to_verify",
250
+ status: "to_verify",
251
+ riskRelevance: "Oracle price dependency: a contract reading Supra feeds inherits oracle/price risk (staleness, manipulation).",
252
+ safehandsBehavior: "Recognized Pharos-ecosystem oracle (awareness only). SafeHands does NOT query Supra feeds and has no Supra analyzer.",
253
+ overclaimRisk: "Do NOT claim a Supra integration.",
254
+ },
255
+ {
256
+ name: "Alchemy",
257
+ category: "rpc_provider",
258
+ aliases: ["alchemy", "alchemy rpc"],
259
+ source: "to_verify",
260
+ status: "to_verify",
261
+ riskRelevance: "Optional read-only RPC/data provider; premium keys must never leak.",
262
+ safehandsBehavior: "Recognized Pharos-ecosystem RPC provider (awareness only). Distinct from Alchemy Pay (payment). Not wired as a default provider; keys are never bundled.",
263
+ overclaimRisk: "Do NOT claim an Alchemy integration or ship Alchemy keys.",
264
+ },
265
+ {
266
+ name: "Nirvana",
267
+ category: "rpc_provider",
268
+ aliases: ["nirvana"],
269
+ source: "to_verify",
270
+ status: "to_verify",
271
+ riskRelevance: "Optional read-only RPC/data provider; keys must never leak.",
272
+ safehandsBehavior: "Recognized Pharos-ecosystem RPC/data provider (awareness only). Not wired as a default provider; keys are never bundled.",
273
+ overclaimRisk: "Do NOT claim a Nirvana integration.",
274
+ },
275
+ {
276
+ name: "Hemera",
277
+ category: "indexing",
278
+ aliases: ["hemera"],
279
+ source: "to_verify",
280
+ status: "to_verify",
281
+ riskRelevance: "Indexing/data source: could enrich historical evidence; NOT an execution path.",
282
+ safehandsBehavior: "Recognized Pharos-ecosystem indexer (awareness only). SafeHands does NOT query Hemera; indexing ≠ guardrail logic.",
283
+ overclaimRisk: "Do NOT claim a Hemera integration.",
284
+ },
285
+ // Security / compliance
286
+ {
287
+ name: "Trusta Labs",
288
+ category: "security",
289
+ aliases: ["trusta", "trusta labs"],
290
+ source: "to_verify",
291
+ status: "to_verify",
292
+ riskRelevance: "External security/reputation intel: could inform risk, not decide it.",
293
+ safehandsBehavior: "Recognized Pharos-ecosystem security provider (awareness only). SafeHands does NOT call Trusta Labs; its own verdicts remain the source of truth.",
294
+ overclaimRisk: "Do NOT claim a Trusta Labs integration, audit, or endorsement.",
295
+ },
296
+ {
297
+ name: "Hypernative",
298
+ category: "security",
299
+ aliases: ["hypernative"],
300
+ source: "to_verify",
301
+ status: "to_verify",
302
+ riskRelevance: "External threat-detection intel: could inform risk, not decide it.",
303
+ safehandsBehavior: "Recognized Pharos-ecosystem security provider (awareness only). SafeHands does NOT call Hypernative; its own verdicts remain the source of truth.",
304
+ overclaimRisk: "Do NOT claim a Hypernative integration or endorsement.",
305
+ },
306
+ {
307
+ name: "Zellic",
308
+ category: "security",
309
+ aliases: ["zellic"],
310
+ source: "to_verify",
311
+ status: "to_verify",
312
+ riskRelevance: "Security audit firm: an audit is evidence about a contract, never a guarantee.",
313
+ safehandsBehavior: "Recognized Pharos-ecosystem audit firm (awareness only). SafeHands does NOT claim any Zellic audit of its own or others' contracts.",
314
+ overclaimRisk: "Do NOT claim a Zellic audit or endorsement.",
315
+ },
316
+ {
317
+ name: "ExVul Security",
318
+ category: "security",
319
+ aliases: ["exvul", "exvul security"],
320
+ source: "to_verify",
321
+ status: "to_verify",
322
+ riskRelevance: "Security audit/monitoring firm: evidence about a contract, never a guarantee.",
323
+ safehandsBehavior: "Recognized Pharos-ecosystem security firm (awareness only). SafeHands does NOT call ExVul or claim an ExVul audit.",
324
+ overclaimRisk: "Do NOT claim an ExVul Security audit or endorsement.",
325
+ },
326
+ {
327
+ name: "OpenZeppelin",
328
+ category: "security",
329
+ aliases: ["openzeppelin", "oz"],
330
+ source: "to_verify",
331
+ status: "to_verify",
332
+ riskRelevance: "Audit firm & contract libraries: recognizing an OZ pattern is not proof of safety.",
333
+ safehandsBehavior: "Recognized Pharos-ecosystem security firm/library (awareness only). SafeHands does NOT claim an OpenZeppelin audit; library usage alone never lowers risk.",
334
+ overclaimRisk: "Do NOT claim an OpenZeppelin audit, partnership, or endorsement.",
335
+ },
336
+ {
337
+ name: "TRM",
338
+ category: "security",
339
+ aliases: ["trm", "trm labs"],
340
+ source: "to_verify",
341
+ status: "to_verify",
342
+ riskRelevance: "Compliance/AML screening intel: could inform risk, not decide it.",
343
+ safehandsBehavior: "Recognized Pharos-ecosystem compliance provider (awareness only). SafeHands does NOT call TRM; its own verdicts remain the source of truth.",
344
+ overclaimRisk: "Do NOT claim a TRM integration or compliance certification.",
345
+ },
346
+ // Identity / NFT / navigation
347
+ {
348
+ name: "PNS",
349
+ category: "identity",
350
+ aliases: ["pns", "pharos name service"],
351
+ source: "to_verify",
352
+ status: "to_verify",
353
+ riskRelevance: "Name service: resolved names can be spoofed/homoglyphed; name ≠ address trust.",
354
+ safehandsBehavior: "Recognized Pharos-ecosystem naming service (awareness only). SafeHands does NOT resolve or trust names as identity; address verification remains required.",
355
+ overclaimRisk: "Do NOT claim a PNS integration or name-resolution capability.",
356
+ },
357
+ {
358
+ name: "ZNS Connect",
359
+ category: "identity",
360
+ aliases: ["zns", "zns connect"],
361
+ source: "to_verify",
362
+ status: "to_verify",
363
+ riskRelevance: "Name service: resolved names can be spoofed/homoglyphed; name ≠ address trust.",
364
+ safehandsBehavior: "Recognized Pharos-ecosystem naming service (awareness only). SafeHands does NOT resolve or trust names as identity; address verification remains required.",
365
+ overclaimRisk: "Do NOT claim a ZNS Connect integration or name-resolution capability.",
366
+ },
367
+ {
368
+ name: "Grandline",
369
+ category: "identity",
370
+ aliases: ["grandline"],
371
+ source: "to_verify",
372
+ status: "to_verify",
373
+ riskRelevance: "Identity/NFT app: recognizing the name grants no trust in its contracts.",
374
+ safehandsBehavior: "Recognized Pharos-ecosystem identity/NFT app (awareness only). SafeHands does NOT integrate; intents to its contracts fail closed without address verification.",
375
+ overclaimRisk: "Do NOT claim a Grandline integration or partnership.",
376
+ },
377
+ {
378
+ name: "Pharosverse",
379
+ category: "identity",
380
+ aliases: ["pharosverse"],
381
+ source: "to_verify",
382
+ status: "to_verify",
383
+ riskRelevance: "Ecosystem navigation/NFT hub: recognizing the name grants no trust in linked contracts.",
384
+ safehandsBehavior: "Recognized Pharos-ecosystem navigation/NFT hub (awareness only). SafeHands does NOT integrate; intents to linked contracts fail closed without address verification.",
385
+ overclaimRisk: "Do NOT claim a Pharosverse integration or partnership.",
386
+ },
387
+ ];
388
+ /** Address index (lowercased) → { entry, network, chainId } for official addresses. */
389
+ const ADDRESS_INDEX = (() => {
390
+ const m = new Map();
391
+ for (const entry of ECOSYSTEM_PROVIDERS) {
392
+ for (const a of entry.addresses ?? []) {
393
+ m.set(a.address.toLowerCase(), { entry, network: a.network, chainId: a.chainId });
394
+ }
395
+ }
396
+ return m;
397
+ })();
398
+ /** Look up an ecosystem provider by a known official address (any network). */
399
+ export function lookupEcosystemByAddress(address) {
400
+ if (!address)
401
+ return undefined;
402
+ return ADDRESS_INDEX.get(address.toLowerCase());
403
+ }
404
+ /** Look up an ecosystem provider by name/alias (case-insensitive). */
405
+ export function lookupEcosystemByName(name) {
406
+ const q = (name ?? "").trim().toLowerCase();
407
+ if (!q)
408
+ return undefined;
409
+ return ECOSYSTEM_PROVIDERS.find((e) => e.name.toLowerCase() === q || (e.aliases ?? []).some((a) => a.toLowerCase() === q));
410
+ }
411
+ /** Map a recognized canonical contract (Phase 5B) to an ecosystem entry, when applicable. */
412
+ export function ecosystemForCanonical(address, network = getActiveNetwork()) {
413
+ const canonical = canonicalContractEvidence(address, network);
414
+ if (!canonical)
415
+ return undefined;
416
+ if (canonical.standard === "Safe" || canonical.standard === "SafeL2") {
417
+ return lookupEcosystemByName("safe");
418
+ }
419
+ return undefined;
420
+ }
421
+ /** Secret-free registry summary for /infra/status and /public-config. */
422
+ export function ecosystemRegistrySummary() {
423
+ const byCategory = {};
424
+ const byStatus = {};
425
+ for (const e of ECOSYSTEM_PROVIDERS) {
426
+ byCategory[e.category] = (byCategory[e.category] ?? 0) + 1;
427
+ byStatus[e.status] = (byStatus[e.status] ?? 0) + 1;
428
+ }
429
+ return { providers: ECOSYSTEM_PROVIDERS.length, byCategory, byStatus };
430
+ }
431
+ //# sourceMappingURL=ecosystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecosystem.js","sourceRoot":"","sources":["../../../src/lib/pharos/ecosystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { type NetworkName, type PharosNetwork } from "../networks.js";
2
+ import type { GuardianDecision } from "../guardian/decision.js";
3
+ import type { EvidenceSource } from "../analysis/types.js";
4
+ import { ECOSYSTEM_PROVIDERS, type EcosystemCategory, type EcosystemStatus } from "./ecosystem.js";
5
+ export type EcosystemDecisionImpact = "REQUIRE_CONFIRMATION" | "none";
6
+ export interface EcosystemEvidence {
7
+ category: EcosystemCategory;
8
+ providerName: string | null;
9
+ status: EcosystemStatus;
10
+ confidence: "high" | "medium" | "low";
11
+ source: EvidenceSource;
12
+ officialDocsUrl: string | null;
13
+ riskRelevance: string;
14
+ safehandsBehavior: string;
15
+ /** Recommendation only — applied escalate-only; NEVER downgrades a decision. */
16
+ recommendedDecisionImpact: EcosystemDecisionImpact;
17
+ network: NetworkName | null;
18
+ chainId: number | null;
19
+ address: string | null;
20
+ }
21
+ export interface EcosystemClassifyInput {
22
+ address?: string;
23
+ /** Provider name/alias hint (e.g. "LayerZero"). */
24
+ provider?: string;
25
+ /** Direct ecosystem category hint. */
26
+ category?: string;
27
+ network?: PharosNetwork;
28
+ }
29
+ /**
30
+ * Classify an ecosystem target. Priority: known official address → recognized
31
+ * canonical Safe → provider-name hint → category hint → unknown.
32
+ */
33
+ export declare function classifyEcosystem(input: EcosystemClassifyInput): EcosystemEvidence;
34
+ /** Minimal request shape (structurally compatible with AgentRequest / parsed API input). */
35
+ export interface EcosystemRequestLike {
36
+ to?: string;
37
+ address?: string;
38
+ token?: string;
39
+ provider?: string;
40
+ ecosystemCategory?: string;
41
+ network?: string;
42
+ }
43
+ /** Classify ecosystem evidence for a request (address/target + optional hints). */
44
+ export declare function ecosystemEvidenceForRequest(req: EcosystemRequestLike): EcosystemEvidence;
45
+ /**
46
+ * Apply ecosystem evidence to a decision — ESCALATE-ONLY. Returns the more severe
47
+ * of the current decision and the evidence's recommended impact; it NEVER downgrades
48
+ * (a BLOCK stays BLOCK; an unlimited-approval BLOCK is never relaxed).
49
+ */
50
+ export declare function applyEcosystemEscalation(decision: GuardianDecision, evidence: EcosystemEvidence): GuardianDecision;
51
+ /** Re-export the registry for callers that want the full provider list. */
52
+ export { ECOSYSTEM_PROVIDERS };
53
+ //# sourceMappingURL=ecosystemEvidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecosystemEvidence.d.ts","sourceRoot":"","sources":["../../../src/lib/pharos/ecosystemEvidence.ts"],"names":[],"mappings":"AAQA,OAAO,EAAwD,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC5H,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EACL,mBAAmB,EAInB,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,uBAAuB,GAAG,sBAAsB,GAAG,MAAM,CAAC;AAEtE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,eAAe,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,MAAM,EAAE,cAAc,CAAC;IACvB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gFAAgF;IAChF,yBAAyB,EAAE,uBAAuB,CAAC;IACnD,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AA0ED,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,iBAAiB,CA+BlF;AAED,4FAA4F;AAC5F,MAAM,WAAW,oBAAoB;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,mFAAmF;AACnF,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,oBAAoB,GAAG,iBAAiB,CAUxF;AAID;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,iBAAiB,GAAG,gBAAgB,CAGlH;AAED,2EAA2E;AAC3E,OAAO,EAAE,mBAAmB,EAAE,CAAC"}