safehands-pharos 1.5.0 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (566) hide show
  1. package/.agents/policies/default.json +15 -0
  2. package/.env.example +81 -64
  3. package/README.md +301 -444
  4. package/SECURITY.md +112 -0
  5. package/SKILL.md +59 -0
  6. package/contracts/SafeHandsAttestation.sol +182 -0
  7. package/contracts/SafeHandsRegistry.sol +149 -0
  8. package/dist/agent/SafeHandsGuardianAgent.d.ts +39 -0
  9. package/dist/agent/SafeHandsGuardianAgent.d.ts.map +1 -0
  10. package/dist/agent/SafeHandsGuardianAgent.js +98 -0
  11. package/dist/agent/SafeHandsGuardianAgent.js.map +1 -0
  12. package/dist/agent/agentDecisionFormatter.d.ts +43 -0
  13. package/dist/agent/agentDecisionFormatter.d.ts.map +1 -0
  14. package/dist/agent/agentDecisionFormatter.js +96 -0
  15. package/dist/agent/agentDecisionFormatter.js.map +1 -0
  16. package/dist/agent/agentEnrich.d.ts +28 -0
  17. package/dist/agent/agentEnrich.d.ts.map +1 -0
  18. package/dist/agent/agentEnrich.js +99 -0
  19. package/dist/agent/agentEnrich.js.map +1 -0
  20. package/dist/agent/agentIntentClassifier.d.ts +44 -0
  21. package/dist/agent/agentIntentClassifier.d.ts.map +1 -0
  22. package/dist/agent/agentIntentClassifier.js +77 -0
  23. package/dist/agent/agentIntentClassifier.js.map +1 -0
  24. package/dist/agent/agentPolicyResolver.d.ts +44 -0
  25. package/dist/agent/agentPolicyResolver.d.ts.map +1 -0
  26. package/dist/agent/agentPolicyResolver.js +94 -0
  27. package/dist/agent/agentPolicyResolver.js.map +1 -0
  28. package/dist/agent/agentRuntime.d.ts +12 -0
  29. package/dist/agent/agentRuntime.d.ts.map +1 -0
  30. package/dist/agent/agentRuntime.js +31 -0
  31. package/dist/agent/agentRuntime.js.map +1 -0
  32. package/dist/agent/agentToolRouter.d.ts +24 -0
  33. package/dist/agent/agentToolRouter.d.ts.map +1 -0
  34. package/dist/agent/agentToolRouter.js +89 -0
  35. package/dist/agent/agentToolRouter.js.map +1 -0
  36. package/dist/agent/guardianOperator.d.ts +35 -0
  37. package/dist/agent/guardianOperator.d.ts.map +1 -0
  38. package/dist/agent/guardianOperator.js +65 -0
  39. package/dist/agent/guardianOperator.js.map +1 -0
  40. package/dist/agent/index.d.ts +8 -0
  41. package/dist/agent/index.d.ts.map +1 -0
  42. package/dist/agent/index.js +14 -0
  43. package/dist/agent/index.js.map +1 -0
  44. package/dist/api/activityRoutes.d.ts +70 -0
  45. package/dist/api/activityRoutes.d.ts.map +1 -0
  46. package/dist/api/activityRoutes.js +100 -0
  47. package/dist/api/activityRoutes.js.map +1 -0
  48. package/dist/api/agentRoutes.d.ts +16 -0
  49. package/dist/api/agentRoutes.d.ts.map +1 -0
  50. package/dist/api/agentRoutes.js +37 -0
  51. package/dist/api/agentRoutes.js.map +1 -0
  52. package/dist/api/broadcastRoutes.d.ts +34 -0
  53. package/dist/api/broadcastRoutes.d.ts.map +1 -0
  54. package/dist/api/broadcastRoutes.js +147 -0
  55. package/dist/api/broadcastRoutes.js.map +1 -0
  56. package/dist/api/consolePage.d.ts +2 -0
  57. package/dist/api/consolePage.d.ts.map +1 -0
  58. package/dist/api/consolePage.js +206 -0
  59. package/dist/api/consolePage.js.map +1 -0
  60. package/dist/api/httpHardening.d.ts +75 -0
  61. package/dist/api/httpHardening.d.ts.map +1 -0
  62. package/dist/api/httpHardening.js +122 -0
  63. package/dist/api/httpHardening.js.map +1 -0
  64. package/dist/api/indexerRoutes.d.ts +46 -0
  65. package/dist/api/indexerRoutes.d.ts.map +1 -0
  66. package/dist/api/indexerRoutes.js +75 -0
  67. package/dist/api/indexerRoutes.js.map +1 -0
  68. package/dist/api/paidRoutes.d.ts +8 -0
  69. package/dist/api/paidRoutes.d.ts.map +1 -0
  70. package/dist/api/paidRoutes.js +175 -0
  71. package/dist/api/paidRoutes.js.map +1 -0
  72. package/dist/api/prepareRoutes.d.ts +58 -0
  73. package/dist/api/prepareRoutes.d.ts.map +1 -0
  74. package/dist/api/prepareRoutes.js +90 -0
  75. package/dist/api/prepareRoutes.js.map +1 -0
  76. package/dist/api/response.d.ts +39 -0
  77. package/dist/api/response.d.ts.map +1 -0
  78. package/dist/api/response.js +53 -0
  79. package/dist/api/response.js.map +1 -0
  80. package/dist/api/routes.d.ts +175 -0
  81. package/dist/api/routes.d.ts.map +1 -0
  82. package/dist/api/routes.js +276 -0
  83. package/dist/api/routes.js.map +1 -0
  84. package/dist/api/schemas.d.ts +147 -0
  85. package/dist/api/schemas.d.ts.map +1 -0
  86. package/dist/api/schemas.js +81 -0
  87. package/dist/api/schemas.js.map +1 -0
  88. package/dist/api/server.d.ts +11 -0
  89. package/dist/api/server.d.ts.map +1 -0
  90. package/dist/api/server.js +505 -0
  91. package/dist/api/server.js.map +1 -0
  92. package/dist/api/toolRoutes.d.ts +14 -0
  93. package/dist/api/toolRoutes.d.ts.map +1 -0
  94. package/dist/api/toolRoutes.js +138 -0
  95. package/dist/api/toolRoutes.js.map +1 -0
  96. package/dist/api/walletPrepareRoutes.d.ts +74 -0
  97. package/dist/api/walletPrepareRoutes.d.ts.map +1 -0
  98. package/dist/api/walletPrepareRoutes.js +127 -0
  99. package/dist/api/walletPrepareRoutes.js.map +1 -0
  100. package/dist/api/x402Gate.d.ts +51 -0
  101. package/dist/api/x402Gate.d.ts.map +1 -0
  102. package/dist/api/x402Gate.js +184 -0
  103. package/dist/api/x402Gate.js.map +1 -0
  104. package/dist/cli.d.ts +1 -1
  105. package/dist/cli.d.ts.map +1 -1
  106. package/dist/cli.js +29 -1
  107. package/dist/cli.js.map +1 -1
  108. package/dist/data/ecosystemRegistry.data.d.ts +3 -0
  109. package/dist/data/ecosystemRegistry.data.d.ts.map +1 -0
  110. package/dist/data/ecosystemRegistry.data.js +582 -0
  111. package/dist/data/ecosystemRegistry.data.js.map +1 -0
  112. package/dist/demo.d.ts +0 -0
  113. package/dist/demo.d.ts.map +1 -1
  114. package/dist/demo.js +43 -8
  115. package/dist/demo.js.map +1 -1
  116. package/dist/handsafe.zip +0 -0
  117. package/dist/index.d.ts +0 -0
  118. package/dist/index.d.ts.map +0 -0
  119. package/dist/index.js +212 -135
  120. package/dist/index.js.map +1 -1
  121. package/dist/init.d.ts +0 -0
  122. package/dist/init.d.ts.map +1 -1
  123. package/dist/init.js +72 -10
  124. package/dist/init.js.map +1 -1
  125. package/dist/lib/analysis/abiWords.d.ts +17 -0
  126. package/dist/lib/analysis/abiWords.d.ts.map +1 -0
  127. package/dist/lib/analysis/abiWords.js +48 -0
  128. package/dist/lib/analysis/abiWords.js.map +1 -0
  129. package/dist/lib/analysis/approval.d.ts +29 -0
  130. package/dist/lib/analysis/approval.d.ts.map +1 -0
  131. package/dist/lib/analysis/approval.js +189 -0
  132. package/dist/lib/analysis/approval.js.map +1 -0
  133. package/dist/lib/analysis/calldata.d.ts +60 -0
  134. package/dist/lib/analysis/calldata.d.ts.map +1 -0
  135. package/dist/lib/analysis/calldata.js +464 -0
  136. package/dist/lib/analysis/calldata.js.map +1 -0
  137. package/dist/lib/analysis/contractIntel.d.ts +65 -0
  138. package/dist/lib/analysis/contractIntel.d.ts.map +1 -0
  139. package/dist/lib/analysis/contractIntel.js +320 -0
  140. package/dist/lib/analysis/contractIntel.js.map +1 -0
  141. package/dist/lib/analysis/evm.d.ts +42 -0
  142. package/dist/lib/analysis/evm.d.ts.map +1 -0
  143. package/dist/lib/analysis/evm.js +185 -0
  144. package/dist/lib/analysis/evm.js.map +1 -0
  145. package/dist/lib/analysis/gas.d.ts +4 -0
  146. package/dist/lib/analysis/gas.d.ts.map +1 -0
  147. package/dist/lib/analysis/gas.js +13 -0
  148. package/dist/lib/analysis/gas.js.map +1 -0
  149. package/dist/lib/analysis/index.d.ts +11 -0
  150. package/dist/lib/analysis/index.d.ts.map +1 -0
  151. package/dist/lib/analysis/index.js +16 -0
  152. package/dist/lib/analysis/index.js.map +1 -0
  153. package/dist/lib/analysis/pharosTokens.d.ts +31 -0
  154. package/dist/lib/analysis/pharosTokens.d.ts.map +1 -0
  155. package/dist/lib/analysis/pharosTokens.js +78 -0
  156. package/dist/lib/analysis/pharosTokens.js.map +1 -0
  157. package/dist/lib/analysis/safeTx.d.ts +27 -0
  158. package/dist/lib/analysis/safeTx.d.ts.map +1 -0
  159. package/dist/lib/analysis/safeTx.js +118 -0
  160. package/dist/lib/analysis/safeTx.js.map +1 -0
  161. package/dist/lib/analysis/token.d.ts +21 -0
  162. package/dist/lib/analysis/token.d.ts.map +1 -0
  163. package/dist/lib/analysis/token.js +151 -0
  164. package/dist/lib/analysis/token.js.map +1 -0
  165. package/dist/lib/analysis/types.d.ts +49 -0
  166. package/dist/lib/analysis/types.d.ts.map +1 -0
  167. package/dist/lib/analysis/types.js +10 -0
  168. package/dist/lib/analysis/types.js.map +1 -0
  169. package/dist/lib/analysis/x402.d.ts +24 -0
  170. package/dist/lib/analysis/x402.d.ts.map +1 -0
  171. package/dist/lib/analysis/x402.js +60 -0
  172. package/dist/lib/analysis/x402.js.map +1 -0
  173. package/dist/lib/auditLog.d.ts +1 -0
  174. package/dist/lib/auditLog.d.ts.map +1 -1
  175. package/dist/lib/auditLog.js +0 -0
  176. package/dist/lib/auditLog.js.map +1 -1
  177. package/dist/lib/config.d.ts +77 -0
  178. package/dist/lib/config.d.ts.map +1 -0
  179. package/dist/lib/config.js +120 -0
  180. package/dist/lib/config.js.map +1 -0
  181. package/dist/lib/constants.d.ts +246 -97
  182. package/dist/lib/constants.d.ts.map +1 -1
  183. package/dist/lib/constants.js +334 -127
  184. package/dist/lib/constants.js.map +1 -1
  185. package/dist/lib/dodoApi.d.ts +26 -3
  186. package/dist/lib/dodoApi.d.ts.map +1 -1
  187. package/dist/lib/dodoApi.js +80 -17
  188. package/dist/lib/dodoApi.js.map +1 -1
  189. package/dist/lib/ecosystemRegistry.d.ts +126 -0
  190. package/dist/lib/ecosystemRegistry.d.ts.map +1 -0
  191. package/dist/lib/ecosystemRegistry.js +178 -0
  192. package/dist/lib/ecosystemRegistry.js.map +1 -0
  193. package/dist/lib/envLoader.d.ts +0 -0
  194. package/dist/lib/envLoader.d.ts.map +0 -0
  195. package/dist/lib/envLoader.js +39 -18
  196. package/dist/lib/envLoader.js.map +1 -1
  197. package/dist/lib/goldsky.d.ts +58 -0
  198. package/dist/lib/goldsky.d.ts.map +1 -0
  199. package/dist/lib/goldsky.js +275 -0
  200. package/dist/lib/goldsky.js.map +1 -0
  201. package/dist/lib/guardian/decision.d.ts +23 -0
  202. package/dist/lib/guardian/decision.d.ts.map +1 -0
  203. package/dist/lib/guardian/decision.js +40 -0
  204. package/dist/lib/guardian/decision.js.map +1 -0
  205. package/dist/lib/http.d.ts +0 -1
  206. package/dist/lib/http.d.ts.map +1 -1
  207. package/dist/lib/http.js +297 -32
  208. package/dist/lib/http.js.map +1 -1
  209. package/dist/lib/managedExecution.d.ts +19 -0
  210. package/dist/lib/managedExecution.d.ts.map +1 -0
  211. package/dist/lib/managedExecution.js +64 -0
  212. package/dist/lib/managedExecution.js.map +1 -0
  213. package/dist/lib/merkleBatcher.d.ts +23 -0
  214. package/dist/lib/merkleBatcher.d.ts.map +1 -0
  215. package/dist/lib/merkleBatcher.js +62 -0
  216. package/dist/lib/merkleBatcher.js.map +1 -0
  217. package/dist/lib/networks.d.ts +48 -0
  218. package/dist/lib/networks.d.ts.map +1 -0
  219. package/dist/lib/networks.js +103 -0
  220. package/dist/lib/networks.js.map +1 -0
  221. package/dist/lib/observability/accessContext.d.ts +29 -0
  222. package/dist/lib/observability/accessContext.d.ts.map +1 -0
  223. package/dist/lib/observability/accessContext.js +50 -0
  224. package/dist/lib/observability/accessContext.js.map +1 -0
  225. package/dist/lib/observability/activityStore.d.ts +70 -0
  226. package/dist/lib/observability/activityStore.d.ts.map +1 -0
  227. package/dist/lib/observability/activityStore.js +149 -0
  228. package/dist/lib/observability/activityStore.js.map +1 -0
  229. package/dist/lib/observability/apiKey.d.ts +55 -0
  230. package/dist/lib/observability/apiKey.d.ts.map +1 -0
  231. package/dist/lib/observability/apiKey.js +141 -0
  232. package/dist/lib/observability/apiKey.js.map +1 -0
  233. package/dist/lib/observability/logger.d.ts +30 -0
  234. package/dist/lib/observability/logger.d.ts.map +1 -0
  235. package/dist/lib/observability/logger.js +30 -0
  236. package/dist/lib/observability/logger.js.map +1 -0
  237. package/dist/lib/observability/quota.d.ts +33 -0
  238. package/dist/lib/observability/quota.d.ts.map +1 -0
  239. package/dist/lib/observability/quota.js +49 -0
  240. package/dist/lib/observability/quota.js.map +1 -0
  241. package/dist/lib/observability/requestId.d.ts +8 -0
  242. package/dist/lib/observability/requestId.d.ts.map +1 -0
  243. package/dist/lib/observability/requestId.js +24 -0
  244. package/dist/lib/observability/requestId.js.map +1 -0
  245. package/dist/lib/observability/sanitize.d.ts +77 -0
  246. package/dist/lib/observability/sanitize.d.ts.map +1 -0
  247. package/dist/lib/observability/sanitize.js +228 -0
  248. package/dist/lib/observability/sanitize.js.map +1 -0
  249. package/dist/lib/observability/scopes.d.ts +20 -0
  250. package/dist/lib/observability/scopes.d.ts.map +1 -0
  251. package/dist/lib/observability/scopes.js +77 -0
  252. package/dist/lib/observability/scopes.js.map +1 -0
  253. package/dist/lib/okxDexApi.d.ts +106 -0
  254. package/dist/lib/okxDexApi.d.ts.map +1 -0
  255. package/dist/lib/okxDexApi.js +221 -0
  256. package/dist/lib/okxDexApi.js.map +1 -0
  257. package/dist/lib/persistentJsonStore.d.ts +5 -0
  258. package/dist/lib/persistentJsonStore.d.ts.map +1 -0
  259. package/dist/lib/persistentJsonStore.js +39 -0
  260. package/dist/lib/persistentJsonStore.js.map +1 -0
  261. package/dist/lib/pharos/attestationPublisher.d.ts +50 -0
  262. package/dist/lib/pharos/attestationPublisher.d.ts.map +1 -0
  263. package/dist/lib/pharos/attestationPublisher.js +262 -0
  264. package/dist/lib/pharos/attestationPublisher.js.map +1 -0
  265. package/dist/lib/pharos/ecosystem.d.ts +52 -0
  266. package/dist/lib/pharos/ecosystem.d.ts.map +1 -0
  267. package/dist/lib/pharos/ecosystem.js +431 -0
  268. package/dist/lib/pharos/ecosystem.js.map +1 -0
  269. package/dist/lib/pharos/ecosystemEvidence.d.ts +53 -0
  270. package/dist/lib/pharos/ecosystemEvidence.d.ts.map +1 -0
  271. package/dist/lib/pharos/ecosystemEvidence.js +133 -0
  272. package/dist/lib/pharos/ecosystemEvidence.js.map +1 -0
  273. package/dist/lib/pharos/rpc.d.ts +44 -0
  274. package/dist/lib/pharos/rpc.d.ts.map +1 -0
  275. package/dist/lib/pharos/rpc.js +90 -0
  276. package/dist/lib/pharos/rpc.js.map +1 -0
  277. package/dist/lib/pharos/rpcEvidence.d.ts +49 -0
  278. package/dist/lib/pharos/rpcEvidence.d.ts.map +1 -0
  279. package/dist/lib/pharos/rpcEvidence.js +46 -0
  280. package/dist/lib/pharos/rpcEvidence.js.map +1 -0
  281. package/dist/lib/pharos/rpcMethods.d.ts +46 -0
  282. package/dist/lib/pharos/rpcMethods.d.ts.map +1 -0
  283. package/dist/lib/pharos/rpcMethods.js +176 -0
  284. package/dist/lib/pharos/rpcMethods.js.map +1 -0
  285. package/dist/lib/pharos/spvVerifier.d.ts +47 -0
  286. package/dist/lib/pharos/spvVerifier.d.ts.map +1 -0
  287. package/dist/lib/pharos/spvVerifier.js +105 -0
  288. package/dist/lib/pharos/spvVerifier.js.map +1 -0
  289. package/dist/lib/pharos/userSignedBroadcaster.d.ts +10 -0
  290. package/dist/lib/pharos/userSignedBroadcaster.d.ts.map +1 -0
  291. package/dist/lib/pharos/userSignedBroadcaster.js +50 -0
  292. package/dist/lib/pharos/userSignedBroadcaster.js.map +1 -0
  293. package/dist/lib/pharosClient.d.ts +5 -10
  294. package/dist/lib/pharosClient.d.ts.map +1 -1
  295. package/dist/lib/pharosClient.js +9 -16
  296. package/dist/lib/pharosClient.js.map +1 -1
  297. package/dist/lib/policy/actionPolicyEngine.d.ts +37 -1
  298. package/dist/lib/policy/actionPolicyEngine.d.ts.map +1 -1
  299. package/dist/lib/policy/actionPolicyEngine.js +213 -52
  300. package/dist/lib/policy/actionPolicyEngine.js.map +1 -1
  301. package/dist/lib/policy/agentPolicy.d.ts +29 -0
  302. package/dist/lib/policy/agentPolicy.d.ts.map +1 -0
  303. package/dist/lib/policy/agentPolicy.js +154 -0
  304. package/dist/lib/policy/agentPolicy.js.map +1 -0
  305. package/dist/lib/policy/policyPresets.d.ts +30 -0
  306. package/dist/lib/policy/policyPresets.d.ts.map +1 -0
  307. package/dist/lib/policy/policyPresets.js +124 -0
  308. package/dist/lib/policy/policyPresets.js.map +1 -0
  309. package/dist/lib/policy/writeExecutionGate.d.ts +23 -0
  310. package/dist/lib/policy/writeExecutionGate.d.ts.map +1 -0
  311. package/dist/lib/policy/writeExecutionGate.js +65 -0
  312. package/dist/lib/policy/writeExecutionGate.js.map +1 -0
  313. package/dist/lib/preparedTxStore.d.ts +21 -0
  314. package/dist/lib/preparedTxStore.d.ts.map +1 -0
  315. package/dist/lib/preparedTxStore.js +90 -0
  316. package/dist/lib/preparedTxStore.js.map +1 -0
  317. package/dist/lib/price/chainlinkPushProvider.d.ts +34 -0
  318. package/dist/lib/price/chainlinkPushProvider.d.ts.map +1 -0
  319. package/dist/lib/price/chainlinkPushProvider.js +36 -0
  320. package/dist/lib/price/chainlinkPushProvider.js.map +1 -0
  321. package/dist/lib/price/feedRegistry.d.ts +26 -0
  322. package/dist/lib/price/feedRegistry.d.ts.map +1 -0
  323. package/dist/lib/price/feedRegistry.js +67 -0
  324. package/dist/lib/price/feedRegistry.js.map +1 -0
  325. package/dist/lib/price/priceResolver.d.ts +35 -0
  326. package/dist/lib/price/priceResolver.d.ts.map +1 -0
  327. package/dist/lib/price/priceResolver.js +246 -0
  328. package/dist/lib/price/priceResolver.js.map +1 -0
  329. package/dist/lib/price/supraProvider.d.ts +9 -0
  330. package/dist/lib/price/supraProvider.d.ts.map +1 -0
  331. package/dist/lib/price/supraProvider.js +17 -0
  332. package/dist/lib/price/supraProvider.js.map +1 -0
  333. package/dist/lib/price/types.d.ts +67 -0
  334. package/dist/lib/price/types.d.ts.map +1 -0
  335. package/dist/lib/price/types.js +7 -0
  336. package/dist/lib/price/types.js.map +1 -0
  337. package/dist/lib/productionGuards.d.ts +16 -0
  338. package/dist/lib/productionGuards.d.ts.map +1 -0
  339. package/dist/lib/productionGuards.js +93 -0
  340. package/dist/lib/productionGuards.js.map +1 -0
  341. package/dist/lib/recipientSafety.d.ts +5 -0
  342. package/dist/lib/recipientSafety.d.ts.map +1 -0
  343. package/dist/lib/recipientSafety.js +28 -0
  344. package/dist/lib/recipientSafety.js.map +1 -0
  345. package/dist/lib/riskEngine.d.ts +19 -0
  346. package/dist/lib/riskEngine.d.ts.map +1 -1
  347. package/dist/lib/riskEngine.js +107 -38
  348. package/dist/lib/riskEngine.js.map +1 -1
  349. package/dist/lib/riskInclusion.d.ts +72 -0
  350. package/dist/lib/riskInclusion.d.ts.map +1 -0
  351. package/dist/lib/riskInclusion.js +252 -0
  352. package/dist/lib/riskInclusion.js.map +1 -0
  353. package/dist/lib/safeHandsRegistry.d.ts +32 -0
  354. package/dist/lib/safeHandsRegistry.d.ts.map +1 -0
  355. package/dist/lib/safeHandsRegistry.js +151 -0
  356. package/dist/lib/safeHandsRegistry.js.map +1 -0
  357. package/dist/lib/signer/index.d.ts +3 -3
  358. package/dist/lib/signer/index.d.ts.map +1 -1
  359. package/dist/lib/signer/index.js +33 -11
  360. package/dist/lib/signer/index.js.map +1 -1
  361. package/dist/lib/spendAccumulator.d.ts +24 -1
  362. package/dist/lib/spendAccumulator.d.ts.map +1 -1
  363. package/dist/lib/spendAccumulator.js +76 -6
  364. package/dist/lib/spendAccumulator.js.map +1 -1
  365. package/dist/lib/toolResponse.d.ts +6 -1
  366. package/dist/lib/toolResponse.d.ts.map +1 -1
  367. package/dist/lib/toolResponse.js +13 -9
  368. package/dist/lib/toolResponse.js.map +1 -1
  369. package/dist/lib/validation.d.ts +7 -0
  370. package/dist/lib/validation.d.ts.map +1 -0
  371. package/dist/lib/validation.js +62 -0
  372. package/dist/lib/validation.js.map +1 -0
  373. package/dist/lib/wallet/index.d.ts +8 -12
  374. package/dist/lib/wallet/index.d.ts.map +1 -1
  375. package/dist/lib/wallet/index.js +48 -35
  376. package/dist/lib/wallet/index.js.map +1 -1
  377. package/dist/lib/x402ReplayStore.d.ts +6 -0
  378. package/dist/lib/x402ReplayStore.d.ts.map +1 -0
  379. package/dist/lib/x402ReplayStore.js +79 -0
  380. package/dist/lib/x402ReplayStore.js.map +1 -0
  381. package/dist/safehands.zip +0 -0
  382. package/dist/sdk.d.ts +14 -0
  383. package/dist/sdk.d.ts.map +1 -0
  384. package/dist/sdk.js +25 -0
  385. package/dist/sdk.js.map +1 -0
  386. package/dist/tools/approveToken.d.ts +31 -10
  387. package/dist/tools/approveToken.d.ts.map +1 -1
  388. package/dist/tools/approveToken.js +91 -24
  389. package/dist/tools/approveToken.js.map +1 -1
  390. package/dist/tools/assessRisk.d.ts +13 -26
  391. package/dist/tools/assessRisk.d.ts.map +1 -1
  392. package/dist/tools/assessRisk.js +34 -75
  393. package/dist/tools/assessRisk.js.map +1 -1
  394. package/dist/tools/checkAllowance.d.ts +9 -3
  395. package/dist/tools/checkAllowance.d.ts.map +1 -1
  396. package/dist/tools/checkAllowance.js +27 -5
  397. package/dist/tools/checkAllowance.js.map +1 -1
  398. package/dist/tools/checkTokenSecurity.d.ts +62 -5
  399. package/dist/tools/checkTokenSecurity.d.ts.map +1 -1
  400. package/dist/tools/checkTokenSecurity.js +166 -21
  401. package/dist/tools/checkTokenSecurity.js.map +1 -1
  402. package/dist/tools/createAgentWallet.d.ts +4 -2
  403. package/dist/tools/createAgentWallet.d.ts.map +1 -1
  404. package/dist/tools/createAgentWallet.js +36 -31
  405. package/dist/tools/createAgentWallet.js.map +1 -1
  406. package/dist/tools/estimateGas.d.ts +7 -2
  407. package/dist/tools/estimateGas.d.ts.map +1 -1
  408. package/dist/tools/estimateGas.js +16 -10
  409. package/dist/tools/estimateGas.js.map +1 -1
  410. package/dist/tools/executeSwap.d.ts +56 -8
  411. package/dist/tools/executeSwap.d.ts.map +1 -1
  412. package/dist/tools/executeSwap.js +194 -46
  413. package/dist/tools/executeSwap.js.map +1 -1
  414. package/dist/tools/explainRisk.d.ts +9 -9
  415. package/dist/tools/explainRisk.d.ts.map +1 -1
  416. package/dist/tools/explainRisk.js +5 -4
  417. package/dist/tools/explainRisk.js.map +1 -1
  418. package/dist/tools/getAgentPolicy.d.ts +15 -0
  419. package/dist/tools/getAgentPolicy.d.ts.map +1 -0
  420. package/dist/tools/getAgentPolicy.js +16 -0
  421. package/dist/tools/getAgentPolicy.js.map +1 -0
  422. package/dist/tools/getAgentReputation.d.ts +31 -0
  423. package/dist/tools/getAgentReputation.d.ts.map +1 -0
  424. package/dist/tools/getAgentReputation.js +44 -0
  425. package/dist/tools/getAgentReputation.js.map +1 -0
  426. package/dist/tools/getAgentWallet.d.ts +1 -1
  427. package/dist/tools/getAgentWallet.d.ts.map +1 -1
  428. package/dist/tools/getAgentWallet.js +11 -1
  429. package/dist/tools/getAgentWallet.js.map +1 -1
  430. package/dist/tools/getAgentWalletBalance.d.ts +1 -1
  431. package/dist/tools/getAgentWalletBalance.d.ts.map +1 -1
  432. package/dist/tools/getAgentWalletBalance.js +58 -26
  433. package/dist/tools/getAgentWalletBalance.js.map +1 -1
  434. package/dist/tools/getExecutionHistory.d.ts +1 -1
  435. package/dist/tools/getExecutionHistory.d.ts.map +1 -1
  436. package/dist/tools/getExecutionHistory.js +13 -19
  437. package/dist/tools/getExecutionHistory.js.map +1 -1
  438. package/dist/tools/getGasPrice.d.ts +3 -3
  439. package/dist/tools/getGasPrice.d.ts.map +0 -0
  440. package/dist/tools/getGasPrice.js +7 -7
  441. package/dist/tools/getGasPrice.js.map +1 -1
  442. package/dist/tools/getPoolInfo.d.ts +17 -17
  443. package/dist/tools/getPoolInfo.d.ts.map +1 -1
  444. package/dist/tools/getPoolInfo.js +14 -9
  445. package/dist/tools/getPoolInfo.js.map +1 -1
  446. package/dist/tools/getSpvProof.d.ts +24 -0
  447. package/dist/tools/getSpvProof.d.ts.map +1 -0
  448. package/dist/tools/getSpvProof.js +64 -0
  449. package/dist/tools/getSpvProof.js.map +1 -0
  450. package/dist/tools/getTokenPrice.d.ts +28 -85
  451. package/dist/tools/getTokenPrice.d.ts.map +1 -1
  452. package/dist/tools/getTokenPrice.js +87 -94
  453. package/dist/tools/getTokenPrice.js.map +1 -1
  454. package/dist/tools/getTransactionStatus.d.ts +2 -2
  455. package/dist/tools/getTransactionStatus.d.ts.map +0 -0
  456. package/dist/tools/getTransactionStatus.js +0 -0
  457. package/dist/tools/getTransactionStatus.js.map +0 -0
  458. package/dist/tools/getWalletBalance.d.ts +38 -3
  459. package/dist/tools/getWalletBalance.d.ts.map +1 -1
  460. package/dist/tools/getWalletBalance.js +92 -52
  461. package/dist/tools/getWalletBalance.js.map +1 -1
  462. package/dist/tools/publishRiskScore.d.ts +36 -14
  463. package/dist/tools/publishRiskScore.d.ts.map +1 -1
  464. package/dist/tools/publishRiskScore.js +80 -32
  465. package/dist/tools/publishRiskScore.js.map +1 -1
  466. package/dist/tools/queryGoldsky.d.ts +20 -0
  467. package/dist/tools/queryGoldsky.d.ts.map +1 -0
  468. package/dist/tools/queryGoldsky.js +29 -0
  469. package/dist/tools/queryGoldsky.js.map +1 -0
  470. package/dist/tools/queryRiskRegistry.d.ts +14 -14
  471. package/dist/tools/queryRiskRegistry.d.ts.map +1 -1
  472. package/dist/tools/queryRiskRegistry.js +34 -30
  473. package/dist/tools/queryRiskRegistry.js.map +1 -1
  474. package/dist/tools/safehandsPreflightCheck.d.ts +29 -14
  475. package/dist/tools/safehandsPreflightCheck.d.ts.map +1 -1
  476. package/dist/tools/safehandsPreflightCheck.js +133 -6
  477. package/dist/tools/safehandsPreflightCheck.js.map +1 -1
  478. package/dist/tools/safehandsRiskReport.d.ts +29 -14
  479. package/dist/tools/safehandsRiskReport.d.ts.map +1 -1
  480. package/dist/tools/safehandsRiskReport.js +23 -3
  481. package/dist/tools/safehandsRiskReport.js.map +1 -1
  482. package/dist/tools/safehandsSafeExecute.d.ts +1 -1
  483. package/dist/tools/safehandsSafeExecute.d.ts.map +1 -1
  484. package/dist/tools/safehandsSafeExecute.js +100 -17
  485. package/dist/tools/safehandsSafeExecute.js.map +1 -1
  486. package/dist/tools/safehandsWalletHealth.d.ts +15 -1
  487. package/dist/tools/safehandsWalletHealth.d.ts.map +1 -1
  488. package/dist/tools/safehandsWalletHealth.js +67 -25
  489. package/dist/tools/safehandsWalletHealth.js.map +1 -1
  490. package/dist/tools/safehandsX402Preflight.d.ts +3 -3
  491. package/dist/tools/safehandsX402Preflight.d.ts.map +1 -1
  492. package/dist/tools/safehandsX402Preflight.js +24 -3
  493. package/dist/tools/safehandsX402Preflight.js.map +1 -1
  494. package/dist/tools/sendPayment.d.ts +10 -4
  495. package/dist/tools/sendPayment.d.ts.map +1 -1
  496. package/dist/tools/sendPayment.js +63 -36
  497. package/dist/tools/sendPayment.js.map +1 -1
  498. package/dist/tools/setAgentPolicy.d.ts +75 -0
  499. package/dist/tools/setAgentPolicy.d.ts.map +1 -0
  500. package/dist/tools/setAgentPolicy.js +80 -0
  501. package/dist/tools/setAgentPolicy.js.map +1 -0
  502. package/dist/tools/simulateTransaction.d.ts +7 -3
  503. package/dist/tools/simulateTransaction.d.ts.map +1 -1
  504. package/dist/tools/simulateTransaction.js +42 -9
  505. package/dist/tools/simulateTransaction.js.map +1 -1
  506. package/dist/tools/tokenRegistryStatus.d.ts +25 -5
  507. package/dist/tools/tokenRegistryStatus.d.ts.map +1 -1
  508. package/dist/tools/tokenRegistryStatus.js +61 -31
  509. package/dist/tools/tokenRegistryStatus.js.map +1 -1
  510. package/dist/tools/verifyRiskInclusion.d.ts +59 -0
  511. package/dist/tools/verifyRiskInclusion.d.ts.map +1 -0
  512. package/dist/tools/verifyRiskInclusion.js +40 -0
  513. package/dist/tools/verifyRiskInclusion.js.map +1 -0
  514. package/dist/tools/x402PayAndFetch.d.ts +15 -9
  515. package/dist/tools/x402PayAndFetch.d.ts.map +1 -1
  516. package/dist/tools/x402PayAndFetch.js +163 -20
  517. package/dist/tools/x402PayAndFetch.js.map +1 -1
  518. package/dist/worker.d.ts +3 -0
  519. package/dist/worker.d.ts.map +1 -0
  520. package/dist/worker.js +39 -0
  521. package/dist/worker.js.map +1 -0
  522. package/dist/x402Server.d.ts +1 -1
  523. package/dist/x402Server.d.ts.map +1 -1
  524. package/dist/x402Server.js +144 -35
  525. package/dist/x402Server.js.map +1 -1
  526. package/docs/REVIEWER_QUICKSTART.md +113 -0
  527. package/docs/SAFEHANDS_REVIEWER_DEMO_SCRIPT.md +228 -0
  528. package/package.json +131 -73
  529. package/contracts/RiskRegistry.json +0 -223
  530. package/contracts/RiskRegistry.sol +0 -58
  531. package/dist/lib/testDodoLive.d.ts +0 -2
  532. package/dist/lib/testDodoLive.d.ts.map +0 -1
  533. package/dist/lib/testDodoLive.js +0 -105
  534. package/dist/lib/testDodoLive.js.map +0 -1
  535. package/dist/lib/testLiveSafehands.d.ts +0 -2
  536. package/dist/lib/testLiveSafehands.d.ts.map +0 -1
  537. package/dist/lib/testLiveSafehands.js +0 -93
  538. package/dist/lib/testLiveSafehands.js.map +0 -1
  539. package/dist/lib/testRpc.d.ts +0 -2
  540. package/dist/lib/testRpc.d.ts.map +0 -1
  541. package/dist/lib/testRpc.js +0 -30
  542. package/dist/lib/testRpc.js.map +0 -1
  543. package/dist/lib/testRpcLive.d.ts +0 -2
  544. package/dist/lib/testRpcLive.d.ts.map +0 -1
  545. package/dist/lib/testRpcLive.js +0 -89
  546. package/dist/lib/testRpcLive.js.map +0 -1
  547. package/dist/lib/testTools.d.ts +0 -2
  548. package/dist/lib/testTools.d.ts.map +0 -1
  549. package/dist/lib/testTools.js +0 -397
  550. package/dist/lib/testTools.js.map +0 -1
  551. package/dist/lib/testX402Live.d.ts +0 -2
  552. package/dist/lib/testX402Live.d.ts.map +0 -1
  553. package/dist/lib/testX402Live.js +0 -160
  554. package/dist/lib/testX402Live.js.map +0 -1
  555. package/dist/scripts/checkDeploy.d.ts +0 -2
  556. package/dist/scripts/checkDeploy.d.ts.map +0 -1
  557. package/dist/scripts/checkDeploy.js +0 -25
  558. package/dist/scripts/checkDeploy.js.map +0 -1
  559. package/dist/scripts/deployRegistry.d.ts +0 -2
  560. package/dist/scripts/deployRegistry.d.ts.map +0 -1
  561. package/dist/scripts/deployRegistry.js +0 -101
  562. package/dist/scripts/deployRegistry.js.map +0 -1
  563. package/dist/scripts/testRegistry.d.ts +0 -2
  564. package/dist/scripts/testRegistry.d.ts.map +0 -1
  565. package/dist/scripts/testRegistry.js +0 -44
  566. package/dist/scripts/testRegistry.js.map +0 -1
@@ -0,0 +1,464 @@
1
+ // ─── Calldata Decoder (read-only, offline) ─────────────────────────────
2
+ // A canonical superset decoder for the common pre-sign risk selectors that a
3
+ // wallet drainer relies on: ERC-2612 permit, Permit2 approve, setApprovalForAll,
4
+ // transferFrom/transfer, increase/decreaseAllowance, plus a NON-EXHAUSTIVE
5
+ // dangerous-admin selector dictionary (ownership/upgrade/admin). ERC-20 approve
6
+ // (0x095ea7b3) is delegated to analyzeApproval so its behavior/tests stay the
7
+ // single source of truth. Pure: no RPC, no keys, no network, no signer. Never
8
+ // approves, signs, transfers, or sends. This analyzer is a SUB-SIGNAL only — the
9
+ // final verdict is the guardian aggregation (worstDecision), which can only be
10
+ // held or escalated by this decoder, never relaxed.
11
+ // ────────────────────────────────────────────────────────────────────────
12
+ import { decodeFunctionData, getAddress, isAddress } from "viem";
13
+ import { isUnlimitedApprovalAmount } from "../policy/actionPolicyEngine.js";
14
+ import { CHAIN_ID } from "../constants.js";
15
+ import { addressTrustEvidence } from "../ecosystemRegistry.js";
16
+ import { isDenylistedRecipient } from "../recipientSafety.js";
17
+ import { analyzeApproval, APPROVE_SELECTOR } from "./approval.js";
18
+ import { canonicalContractEvidence } from "./contractIntel.js";
19
+ import { tokenRegistryEvidence } from "./pharosTokens.js";
20
+ import { makeResult } from "./types.js";
21
+ import { addressAtWord, calldataBody, calldataWordCount, hasExactWords } from "./abiWords.js";
22
+ // ── Selector constants ─────────────────────────────────────────────────
23
+ export const PERMIT_SELECTOR = "0xd505accf"; // ERC-2612 permit(owner,spender,value,deadline,v,r,s)
24
+ export const PERMIT2_APPROVE_SELECTOR = "0x87517c45"; // Permit2 approve(token,spender,amount,expiration)
25
+ export const SET_APPROVAL_FOR_ALL_SELECTOR = "0xa22cb465"; // setApprovalForAll(operator,approved)
26
+ export const TRANSFER_FROM_SELECTOR = "0x23b872dd"; // transferFrom(from,to,amount)
27
+ export const TRANSFER_SELECTOR = "0xa9059cbb"; // transfer(to,amount)
28
+ export const INCREASE_ALLOWANCE_SELECTOR = "0x39509351"; // increaseAllowance(spender,addedValue)
29
+ export const DECREASE_ALLOWANCE_SELECTOR = "0xa457c2d7"; // decreaseAllowance(spender,subtractedValue)
30
+ // Dangerous / admin selectors — recognition & labeling only, NON-EXHAUSTIVE.
31
+ export const TRANSFER_OWNERSHIP_SELECTOR = "0xf2fde38b"; // transferOwnership(newOwner)
32
+ export const RENOUNCE_OWNERSHIP_SELECTOR = "0x715018a6"; // renounceOwnership()
33
+ export const UPGRADE_TO_SELECTOR = "0x3659cfe6"; // upgradeTo(newImplementation)
34
+ export const UPGRADE_TO_AND_CALL_SELECTOR = "0x4f1ef286"; // upgradeToAndCall(newImplementation,data)
35
+ export const CHANGE_ADMIN_SELECTOR = "0x8f283970"; // changeAdmin(newAdmin)
36
+ /** Canonical Permit2 singleton (lowercased). */
37
+ const PERMIT2_ADDRESS = "0x000000000022d473030f116ddee9f6b43ac78ba3";
38
+ /** Permit2 amounts are uint160; type(uint160).max means "infinite". */
39
+ const PERMIT2_MAX_AMOUNT = (1n << 160n) - 1n;
40
+ /**
41
+ * Selectors this analyzer decodes on its own (i.e. everything EXCEPT approve,
42
+ * which analyzeApproval owns, and MultiSend, which analyzeSafeTx owns). The
43
+ * guardian dispatch uses this to decide when to add the calldata analyzer.
44
+ */
45
+ export const DECODABLE_CALLDATA_SELECTORS = new Set([
46
+ PERMIT_SELECTOR,
47
+ PERMIT2_APPROVE_SELECTOR,
48
+ SET_APPROVAL_FOR_ALL_SELECTOR,
49
+ TRANSFER_FROM_SELECTOR,
50
+ TRANSFER_SELECTOR,
51
+ INCREASE_ALLOWANCE_SELECTOR,
52
+ DECREASE_ALLOWANCE_SELECTOR,
53
+ TRANSFER_OWNERSHIP_SELECTOR,
54
+ RENOUNCE_OWNERSHIP_SELECTOR,
55
+ UPGRADE_TO_SELECTOR,
56
+ UPGRADE_TO_AND_CALL_SELECTOR,
57
+ CHANGE_ADMIN_SELECTOR,
58
+ ]);
59
+ /** True when `analyzeCalldata` can decode this selector (approve delegates in-analyzer). */
60
+ export function isDecodableCalldataSelector(selector) {
61
+ if (!selector)
62
+ return false;
63
+ return selector === APPROVE_SELECTOR || DECODABLE_CALLDATA_SELECTORS.has(selector);
64
+ }
65
+ // ── ABI fragments per selector ─────────────────────────────────────────
66
+ const ABIS = {
67
+ [PERMIT_SELECTOR]: [{ name: "permit", type: "function", stateMutability: "nonpayable", inputs: [
68
+ { name: "owner", type: "address" }, { name: "spender", type: "address" }, { name: "value", type: "uint256" },
69
+ { name: "deadline", type: "uint256" }, { name: "v", type: "uint8" }, { name: "r", type: "bytes32" }, { name: "s", type: "bytes32" }
70
+ ], outputs: [] }],
71
+ [PERMIT2_APPROVE_SELECTOR]: [{ name: "approve", type: "function", stateMutability: "nonpayable", inputs: [
72
+ { name: "token", type: "address" }, { name: "spender", type: "address" }, { name: "amount", type: "uint160" }, { name: "expiration", type: "uint48" }
73
+ ], outputs: [] }],
74
+ [SET_APPROVAL_FOR_ALL_SELECTOR]: [{ name: "setApprovalForAll", type: "function", stateMutability: "nonpayable", inputs: [
75
+ { name: "operator", type: "address" }, { name: "approved", type: "bool" }
76
+ ], outputs: [] }],
77
+ [TRANSFER_FROM_SELECTOR]: [{ name: "transferFrom", type: "function", stateMutability: "nonpayable", inputs: [
78
+ { name: "from", type: "address" }, { name: "to", type: "address" }, { name: "amount", type: "uint256" }
79
+ ], outputs: [{ type: "bool" }] }],
80
+ [TRANSFER_SELECTOR]: [{ name: "transfer", type: "function", stateMutability: "nonpayable", inputs: [
81
+ { name: "to", type: "address" }, { name: "amount", type: "uint256" }
82
+ ], outputs: [{ type: "bool" }] }],
83
+ [INCREASE_ALLOWANCE_SELECTOR]: [{ name: "increaseAllowance", type: "function", stateMutability: "nonpayable", inputs: [
84
+ { name: "spender", type: "address" }, { name: "addedValue", type: "uint256" }
85
+ ], outputs: [{ type: "bool" }] }],
86
+ [DECREASE_ALLOWANCE_SELECTOR]: [{ name: "decreaseAllowance", type: "function", stateMutability: "nonpayable", inputs: [
87
+ { name: "spender", type: "address" }, { name: "subtractedValue", type: "uint256" }
88
+ ], outputs: [{ type: "bool" }] }],
89
+ [TRANSFER_OWNERSHIP_SELECTOR]: [{ name: "transferOwnership", type: "function", stateMutability: "nonpayable", inputs: [{ name: "newOwner", type: "address" }], outputs: [] }],
90
+ [RENOUNCE_OWNERSHIP_SELECTOR]: [{ name: "renounceOwnership", type: "function", stateMutability: "nonpayable", inputs: [], outputs: [] }],
91
+ [UPGRADE_TO_SELECTOR]: [{ name: "upgradeTo", type: "function", stateMutability: "nonpayable", inputs: [{ name: "newImplementation", type: "address" }], outputs: [] }],
92
+ [UPGRADE_TO_AND_CALL_SELECTOR]: [{ name: "upgradeToAndCall", type: "function", stateMutability: "payable", inputs: [{ name: "newImplementation", type: "address" }, { name: "data", type: "bytes" }], outputs: [] }],
93
+ [CHANGE_ADMIN_SELECTOR]: [{ name: "changeAdmin", type: "function", stateMutability: "nonpayable", inputs: [{ name: "newAdmin", type: "address" }], outputs: [] }],
94
+ };
95
+ /**
96
+ * Exact payload shape per selector, mirroring the hosted engine's per-method
97
+ * word-count checks. `words: null` marks a dynamic payload (upgradeToAndCall
98
+ * carries `bytes`), where only a minimum head is required.
99
+ */
100
+ const CALLDATA_SHAPE = {
101
+ [PERMIT_SELECTOR]: { words: 7 },
102
+ [PERMIT2_APPROVE_SELECTOR]: { words: 4 },
103
+ [SET_APPROVAL_FOR_ALL_SELECTOR]: { words: 2 },
104
+ [TRANSFER_FROM_SELECTOR]: { words: 3 },
105
+ [TRANSFER_SELECTOR]: { words: 2 },
106
+ [INCREASE_ALLOWANCE_SELECTOR]: { words: 2 },
107
+ [DECREASE_ALLOWANCE_SELECTOR]: { words: 2 },
108
+ [TRANSFER_OWNERSHIP_SELECTOR]: { words: 1 },
109
+ [RENOUNCE_OWNERSHIP_SELECTOR]: { words: 0 },
110
+ [UPGRADE_TO_SELECTOR]: { words: 1 },
111
+ [CHANGE_ADMIN_SELECTOR]: { words: 1 },
112
+ [UPGRADE_TO_AND_CALL_SELECTOR]: { words: null },
113
+ };
114
+ const DANGEROUS_LABELS = {
115
+ [TRANSFER_OWNERSHIP_SELECTOR]: "transfers contract ownership",
116
+ [RENOUNCE_OWNERSHIP_SELECTOR]: "renounces contract ownership (irreversible)",
117
+ [UPGRADE_TO_SELECTOR]: "upgrades the contract implementation (proxy)",
118
+ [UPGRADE_TO_AND_CALL_SELECTOR]: "upgrades the contract implementation and calls into it (proxy)",
119
+ [CHANGE_ADMIN_SELECTOR]: "changes the proxy admin",
120
+ };
121
+ const EMPTY_DETAILS = {
122
+ method: null, selector: null, category: "unknown", token: null, spender: null, operator: null,
123
+ recipient: null, from: null, amountRaw: null, unlimited: false, isRevoke: false, approved: null,
124
+ counterpartyKnown: false, counterpartyLabel: null, recipientDenylisted: false, dangerous: false,
125
+ canonicalContractEvidence: null, tokenRegistryEvidence: null,
126
+ };
127
+ /**
128
+ * Recognize a spender/operator — registry-driven only. "known" requires canonical
129
+ * metadata or a VERIFIED allow_eligible registry contract on the active chain.
130
+ * Non-verified registry matches yield a label suffixed "recognition only" and
131
+ * NEVER set known (the former hardcoded DODO/FaroSwap entries relaxed risk with
132
+ * testnet-provenance addresses and are gone).
133
+ */
134
+ function classifyKnown(addr) {
135
+ const canonical = isAddress(addr) ? canonicalContractEvidence(addr) : null;
136
+ if (canonical)
137
+ return { known: true, label: canonical.name, canonical };
138
+ const lower = addr.toLowerCase();
139
+ if (lower === PERMIT2_ADDRESS)
140
+ return { known: true, label: "Permit2", canonical: null };
141
+ const registry = isAddress(addr) ? addressTrustEvidence(addr, CHAIN_ID) : null;
142
+ if (registry?.verifiedCanonical) {
143
+ return { known: true, label: registry.contractLabel ?? registry.itemName, canonical: null };
144
+ }
145
+ if (registry?.recognized) {
146
+ return { known: false, label: `${registry.contractLabel} (${registry.verificationStatus}, recognition only)`, canonical: null };
147
+ }
148
+ return { known: false, label: null, canonical: null };
149
+ }
150
+ /** Shared approve-style risk matrix (approve/permit/permit2/increaseAllowance). */
151
+ function approvalRisk(spender, isRevoke, unlimited, known, label) {
152
+ if (!isAddress(spender))
153
+ return { decision: "BLOCK", risk: "CRITICAL", reason: "Spender address is invalid." };
154
+ if (isRevoke)
155
+ return { decision: "ALLOW", risk: "LOW", reason: `Zero/revoke: clearing the allowance for ${spender}${label ? ` (${label})` : ""}.` };
156
+ if (unlimited && !known)
157
+ return { decision: "BLOCK", risk: "CRITICAL", reason: `Unlimited approval to an unknown spender (${spender}); blocked.` };
158
+ if (unlimited && known)
159
+ return { decision: "REQUIRE_CONFIRMATION", risk: "HIGH", reason: `Unlimited approval to a known spender (${label}); high risk, confirm intent.` };
160
+ if (!known)
161
+ return { decision: "REQUIRE_CONFIRMATION", risk: "MEDIUM", reason: `Approval to an unknown spender (${spender}); confirm before approving.` };
162
+ return { decision: "ALLOW", risk: "LOW", reason: `Limited approval to a known spender (${label}).` };
163
+ }
164
+ function result(params) {
165
+ return makeResult({
166
+ analyzer: "calldata",
167
+ decision: params.decision,
168
+ internalDecision: params.decision,
169
+ riskLevel: params.risk,
170
+ reasons: params.reasons,
171
+ warnings: params.warnings,
172
+ analyzerStatus: params.status,
173
+ experimental: params.experimental,
174
+ details: params.details,
175
+ });
176
+ }
177
+ /**
178
+ * Decode and risk-classify a single calldata payload.
179
+ * @param data 0x-prefixed calldata
180
+ * @param token optional token contract address the call targets (for metadata + Permit2 token)
181
+ */
182
+ export function analyzeCalldata(data, token) {
183
+ const hex = (data?.startsWith("0x") ? data : `0x${data ?? ""}`).toLowerCase();
184
+ const selector = hex.length >= 10 ? hex.slice(0, 10) : null;
185
+ const tokenEvidence = token ? tokenRegistryEvidence(token) : null;
186
+ // ERC-20 approve is owned by analyzeApproval — delegate and adapt its result.
187
+ if (selector === APPROVE_SELECTOR) {
188
+ const a = analyzeApproval(data, token);
189
+ const d = a.details;
190
+ return result({
191
+ decision: a.internalDecision ?? "REQUIRE_CONFIRMATION",
192
+ risk: a.riskLevel,
193
+ reasons: a.reasons,
194
+ warnings: a.warnings,
195
+ status: a.analyzerStatus,
196
+ experimental: a.experimental,
197
+ details: {
198
+ ...EMPTY_DETAILS, method: "approve", selector, category: "approval", token: d.token,
199
+ spender: d.spender, amountRaw: d.amountRaw, unlimited: d.unlimited, isRevoke: d.isRevoke,
200
+ counterpartyKnown: d.spenderKnown, counterpartyLabel: d.spenderLabel,
201
+ canonicalContractEvidence: d.canonicalContractEvidence, tokenRegistryEvidence: d.tokenRegistryEvidence,
202
+ },
203
+ });
204
+ }
205
+ if (!selector || !DECODABLE_CALLDATA_SELECTORS.has(selector)) {
206
+ return result({
207
+ decision: "REQUIRE_CONFIRMATION", risk: "UNKNOWN",
208
+ reasons: [`Calldata selector ${selector ?? "n/a"} is not a recognized decodable method; confirm before signing.`],
209
+ warnings: [], status: "unavailable", details: { ...EMPTY_DETAILS, selector },
210
+ });
211
+ }
212
+ const malformedPayload = () => result({
213
+ decision: "REQUIRE_CONFIRMATION", risk: "MEDIUM",
214
+ reasons: ["Calldata matched a known selector but could not be decoded: malformed payload."],
215
+ warnings: ["Malformed calldata for the recognized selector."],
216
+ status: "partial", details: { ...EMPTY_DETAILS, selector },
217
+ });
218
+ // Validate the payload shape before decoding. viem mirrors what the EVM will
219
+ // accept (it masks dirty address padding and tolerates trailing bytes), which
220
+ // would report a clean spender for calldata solc's own decoder reverts on.
221
+ // The hosted engine refuses those payloads, so this side must too.
222
+ const body = calldataBody(hex);
223
+ const shape = CALLDATA_SHAPE[selector];
224
+ // `body` is "" for a zero-argument selector such as renounceOwnership, which
225
+ // is a valid payload: test for null, never for falsiness.
226
+ if (body === null || !shape)
227
+ return malformedPayload();
228
+ if (shape.words === null ? calldataWordCount(body) < 3 : !hasExactWords(body, shape.words)) {
229
+ return malformedPayload();
230
+ }
231
+ let args;
232
+ try {
233
+ const decoded = decodeFunctionData({ abi: ABIS[selector], data: hex });
234
+ args = (decoded.args ?? []);
235
+ }
236
+ catch {
237
+ return malformedPayload();
238
+ }
239
+ const base = { ...EMPTY_DETAILS, selector, token: token ?? null, tokenRegistryEvidence: tokenEvidence };
240
+ /** Address at `index`, or null when the word is not cleanly padded. */
241
+ const strictAddress = (index) => addressAtWord(body, index);
242
+ /**
243
+ * A dirty address word is a hard stop, but everything the payload *does*
244
+ * encode cleanly is still reported: only the untrustworthy address is
245
+ * withheld, never the amount or the method.
246
+ */
247
+ const deceptiveWord = (field, known) => result({
248
+ decision: "BLOCK", risk: "CRITICAL",
249
+ reasons: [`${field} word is not a clean address: malformed or deceptive calldata.`],
250
+ warnings: ["The address word carries dirty upper padding. Standard decoders revert on this; it is never a normal call."],
251
+ status: "ok", details: { ...base, ...known },
252
+ });
253
+ /** Amount word read directly, so it survives a rejected address word. */
254
+ const amountAtWord = (index) => BigInt(`0x${body.slice(index * 64, (index + 1) * 64) || "0"}`);
255
+ switch (selector) {
256
+ case PERMIT_SELECTOR: {
257
+ const spenderWord = strictAddress(1);
258
+ const value = amountAtWord(2);
259
+ if (!spenderWord) {
260
+ return deceptiveWord("permit spender", {
261
+ method: "permit", category: "approval", amountRaw: value.toString(),
262
+ unlimited: isUnlimitedApprovalAmount(value.toString()), isRevoke: value === 0n,
263
+ });
264
+ }
265
+ const spender = getAddress(spenderWord);
266
+ const unlimited = isUnlimitedApprovalAmount(value.toString());
267
+ const isRevoke = value === 0n;
268
+ const { known, label, canonical } = classifyKnown(spender);
269
+ const r = approvalRisk(spender, isRevoke, unlimited, known, label);
270
+ return result({
271
+ decision: r.decision, risk: r.risk, reasons: [r.reason],
272
+ warnings: ["ERC-2612 permit is a gasless, signature-based approval: the allowance is granted off-chain and can later authorize transfers."],
273
+ status: "ok",
274
+ details: { ...base, method: "permit", category: "approval", spender, amountRaw: value.toString(), unlimited, isRevoke, counterpartyKnown: known, counterpartyLabel: label, canonicalContractEvidence: canonical },
275
+ });
276
+ }
277
+ case PERMIT2_APPROVE_SELECTOR: {
278
+ // Only the spender word gates the verdict: a dirty token word grants no
279
+ // authority to anyone (the call reverts), which is why the hosted engine
280
+ // floors on the spender alone.
281
+ const tokenWord = strictAddress(0);
282
+ const spenderWord = strictAddress(1);
283
+ const amount = amountAtWord(2);
284
+ if (!spenderWord) {
285
+ return deceptiveWord("Permit2 approval spender", {
286
+ method: "permit2_approve", category: "approval", token: tokenWord ?? (token ?? null),
287
+ amountRaw: amount.toString(), unlimited: amount >= PERMIT2_MAX_AMOUNT, isRevoke: amount === 0n,
288
+ });
289
+ }
290
+ // A dirty token word falls back to the caller-supplied token, matching the
291
+ // hosted engine's `c.token = wordToAddress(...) || c.token`.
292
+ const permitToken = tokenWord ? getAddress(tokenWord) : (token ?? null);
293
+ const spender = getAddress(spenderWord);
294
+ const expiration = String(args[3]); // uint48 — viem decodes as number
295
+ const unlimited = amount >= PERMIT2_MAX_AMOUNT;
296
+ const isRevoke = amount === 0n;
297
+ const { known, label, canonical } = classifyKnown(spender);
298
+ const r = approvalRisk(spender, isRevoke, unlimited, known, label);
299
+ return result({
300
+ decision: r.decision, risk: r.risk,
301
+ reasons: [r.reason, `Permit2 approval for token ${permitToken}${expiration !== "0" ? ` (expiration ${expiration})` : ""}.`],
302
+ warnings: ["Permit2 approval: authorizes the spender to move the token via Permit2 (signature-driven). Deep PermitSingle/PermitBatch/permitTransferFrom decode is out of scope."],
303
+ status: "ok", experimental: true,
304
+ details: { ...base, method: "permit2_approve", category: "approval", token: permitToken, spender, amountRaw: amount.toString(), unlimited, isRevoke, counterpartyKnown: known, counterpartyLabel: label, canonicalContractEvidence: canonical, tokenRegistryEvidence: permitToken ? tokenRegistryEvidence(permitToken) : tokenEvidence },
305
+ });
306
+ }
307
+ case SET_APPROVAL_FOR_ALL_SELECTOR: {
308
+ const operatorWord = strictAddress(0);
309
+ const approved = args[1];
310
+ if (!operatorWord) {
311
+ return deceptiveWord("setApprovalForAll operator", { method: "setApprovalForAll", category: "approval", approved });
312
+ }
313
+ const operator = getAddress(operatorWord);
314
+ const { known, label, canonical } = classifyKnown(operator);
315
+ let decision;
316
+ let risk;
317
+ let reason;
318
+ if (!isAddress(operator)) {
319
+ decision = "BLOCK";
320
+ risk = "CRITICAL";
321
+ reason = "Operator address is invalid.";
322
+ }
323
+ else if (!approved) {
324
+ decision = "ALLOW";
325
+ risk = "LOW";
326
+ reason = `Revoking blanket operator approval for ${operator}${label ? ` (${label})` : ""}.`;
327
+ }
328
+ else if (!known) {
329
+ decision = "BLOCK";
330
+ risk = "CRITICAL";
331
+ reason = `Blanket collection approval (setApprovalForAll) to an UNKNOWN operator (${operator}); this authorizes transfer of every token in the collection. Blocked.`;
332
+ }
333
+ else {
334
+ decision = "REQUIRE_CONFIRMATION";
335
+ risk = "HIGH";
336
+ reason = `Blanket collection approval to a known operator (${label}); high risk, confirm intent.`;
337
+ }
338
+ return result({
339
+ decision, risk, reasons: [reason],
340
+ warnings: approved ? ["setApprovalForAll grants control over ALL tokens in the collection, a common NFT-drainer vector."] : [],
341
+ status: "ok",
342
+ details: { ...base, method: "setApprovalForAll", category: "approval", operator, approved, counterpartyKnown: known, counterpartyLabel: label, canonicalContractEvidence: canonical },
343
+ });
344
+ }
345
+ case TRANSFER_FROM_SELECTOR: {
346
+ const fromWord = strictAddress(0);
347
+ const toWord = strictAddress(1);
348
+ const amount = amountAtWord(2).toString();
349
+ const known = { method: "transferFrom", category: "transfer", from: fromWord, amountRaw: amount };
350
+ if (!fromWord)
351
+ return deceptiveWord("transferFrom source", known);
352
+ if (!toWord)
353
+ return deceptiveWord("transferFrom recipient", known);
354
+ return transferResult({ ...base, method: "transferFrom", from: getAddress(fromWord), recipient: getAddress(toWord), amountRaw: amount }, getAddress(toWord));
355
+ }
356
+ case TRANSFER_SELECTOR: {
357
+ const toWord = strictAddress(0);
358
+ const amount = amountAtWord(1).toString();
359
+ if (!toWord)
360
+ return deceptiveWord("transfer recipient", { method: "transfer", category: "transfer", amountRaw: amount });
361
+ const to = getAddress(toWord);
362
+ return transferResult({ ...base, method: "transfer", recipient: to, amountRaw: amount }, to);
363
+ }
364
+ case INCREASE_ALLOWANCE_SELECTOR: {
365
+ const spenderWord = strictAddress(0);
366
+ const added = amountAtWord(1);
367
+ if (!spenderWord) {
368
+ return deceptiveWord("increaseAllowance spender", {
369
+ method: "increaseAllowance", category: "approval", amountRaw: added.toString(),
370
+ unlimited: isUnlimitedApprovalAmount(added.toString()), isRevoke: added === 0n,
371
+ });
372
+ }
373
+ const spender = getAddress(spenderWord);
374
+ const unlimited = isUnlimitedApprovalAmount(added.toString());
375
+ const isRevoke = added === 0n;
376
+ const { known, label, canonical } = classifyKnown(spender);
377
+ const r = approvalRisk(spender, isRevoke, unlimited, known, label);
378
+ return result({
379
+ decision: r.decision, risk: r.risk, reasons: [`increaseAllowance: ${r.reason}`],
380
+ warnings: ["increaseAllowance raises an existing allowance on top of the current one."], status: "ok",
381
+ details: { ...base, method: "increaseAllowance", category: "approval", spender, amountRaw: added.toString(), unlimited, isRevoke, counterpartyKnown: known, counterpartyLabel: label, canonicalContractEvidence: canonical },
382
+ });
383
+ }
384
+ case DECREASE_ALLOWANCE_SELECTOR: {
385
+ const spenderWord = strictAddress(0);
386
+ const subtractedRaw = args[1].toString();
387
+ // Lowering an allowance creates no new exposure, so a dirty spender word
388
+ // is held for review rather than blocked (the hosted engine floors at 45,
389
+ // not 90). The decoded spender is still withheld: it was never clean.
390
+ if (!spenderWord) {
391
+ return result({
392
+ decision: "REQUIRE_CONFIRMATION", risk: "MEDIUM",
393
+ reasons: ["decreaseAllowance spender word is not a clean address: malformed calldata, held for review."],
394
+ warnings: [], status: "partial",
395
+ details: { ...base, method: "decreaseAllowance", category: "approval", amountRaw: subtractedRaw },
396
+ });
397
+ }
398
+ const spender = getAddress(spenderWord);
399
+ const subtracted = subtractedRaw;
400
+ const { known, label, canonical } = classifyKnown(spender);
401
+ return result({
402
+ decision: "ALLOW", risk: "LOW", reasons: [`decreaseAllowance: lowering the allowance for ${spender}${label ? ` (${label})` : ""}.`],
403
+ warnings: [], status: "ok",
404
+ details: { ...base, method: "decreaseAllowance", category: "approval", spender, amountRaw: subtracted, counterpartyKnown: known, counterpartyLabel: label, canonicalContractEvidence: canonical },
405
+ });
406
+ }
407
+ default:
408
+ // A dirty target word yields no target at all rather than a masked one;
409
+ // the verdict stays REQUIRE_CONFIRMATION either way (hosted floor 61).
410
+ return dangerousAdmin(selector, shape.words === 0 ? null : strictAddress(0), base);
411
+ }
412
+ }
413
+ /** transfer / transferFrom risk: denylist → BLOCK; otherwise REQUIRE_CONFIRMATION (never LOW — moving assets). */
414
+ function transferResult(details, recipient) {
415
+ const label = details.method === "transferFrom" ? "transferFrom" : "transfer";
416
+ if (!isAddress(recipient)) {
417
+ return result({ decision: "BLOCK", risk: "CRITICAL", reasons: [`${label} recipient address is invalid.`], warnings: [], status: "ok", details: { ...details, category: "transfer" } });
418
+ }
419
+ if (isDenylistedRecipient(recipient)) {
420
+ return result({
421
+ decision: "BLOCK", risk: "CRITICAL",
422
+ reasons: [`${label} recipient ${recipient} is on the operator denylist; blocked.`],
423
+ warnings: [], status: "ok",
424
+ details: { ...details, category: "transfer", recipientDenylisted: true },
425
+ });
426
+ }
427
+ // Unknown / unverified recipient — a token transfer moves assets, so a pre-sign
428
+ // firewall must require confirmation. Never ALLOW/LOW for an unknown recipient.
429
+ return result({
430
+ decision: "REQUIRE_CONFIRMATION", risk: "MEDIUM",
431
+ reasons: [`${label} moves tokens to ${recipient}; recipient is not verified; confirm before signing.`],
432
+ warnings: [], status: "ok",
433
+ details: { ...details, category: "transfer" },
434
+ });
435
+ }
436
+ /** Non-exhaustive dangerous-admin dictionary — recognition/label only, always REQUIRE_CONFIRMATION. */
437
+ function dangerousAdmin(selector, target, base) {
438
+ const label = DANGEROUS_LABELS[selector] ?? "performs a privileged/admin action";
439
+ const targetArg = target && isAddress(target) ? getAddress(target) : null;
440
+ // Recognition of the incoming owner/implementation is reported the same way
441
+ // the hosted engine reports it. It labels the target; it never relaxes the
442
+ // verdict, which stays REQUIRE_CONFIRMATION for every admin call.
443
+ const { known, label: targetLabel, canonical } = targetArg
444
+ ? classifyKnown(targetArg)
445
+ : { known: false, label: null, canonical: null };
446
+ const method = {
447
+ [TRANSFER_OWNERSHIP_SELECTOR]: "transferOwnership", [RENOUNCE_OWNERSHIP_SELECTOR]: "renounceOwnership",
448
+ [UPGRADE_TO_SELECTOR]: "upgradeTo", [UPGRADE_TO_AND_CALL_SELECTOR]: "upgradeToAndCall", [CHANGE_ADMIN_SELECTOR]: "changeAdmin",
449
+ }[selector] ?? null;
450
+ return result({
451
+ decision: "REQUIRE_CONFIRMATION", risk: "HIGH",
452
+ reasons: [`Dangerous/admin call: this transaction ${label}${targetArg ? ` (target ${targetArg})` : ""}; confirm this is intended.`],
453
+ warnings: ["Recognized as a privileged/admin function. This dangerous-selector list is NOT exhaustive; absence of a warning is not proof of safety."],
454
+ status: "ok",
455
+ // The target is the call's subject, not a recipient: an ownership or
456
+ // implementation target receives nothing, so it is reported as `spender`
457
+ // only, matching the hosted engine.
458
+ details: {
459
+ ...base, method, category: "admin", dangerous: true, spender: targetArg,
460
+ counterpartyKnown: known, counterpartyLabel: targetLabel, canonicalContractEvidence: canonical,
461
+ },
462
+ });
463
+ }
464
+ //# sourceMappingURL=calldata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calldata.js","sourceRoot":"","sources":["../../../src/lib/analysis/calldata.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { type NetworkName, type PharosNetwork } from "../networks.js";
2
+ import { type AnalyzerResult, type EvidenceSource, type EvidenceStatus, type ReadOnlyChainAccess } from "./types.js";
3
+ export type CanonicalStandard = "Safe" | "SafeL2" | "MultiSend" | "MultiSendCallOnly" | "MultiCall3" | "Permit2" | "ERC4337EntryPoint" | "ERC4337SenderCreator" | "CreateX" | "Create2Deployer" | "DeterministicDeploymentProxy" | "SafeSingletonFactory";
4
+ export type CanonicalCategory = "smart-account" | "batching" | "approval-router" | "account-abstraction" | "deployer";
5
+ export interface CanonicalContract {
6
+ /** Human label (kept stable — back-compat for spender/allowance recognition). */
7
+ label: string;
8
+ standard: CanonicalStandard;
9
+ category: CanonicalCategory;
10
+ /** Networks on which this canonical address is recognized (per-network). */
11
+ networks: NetworkName[];
12
+ /** Same address across EVM chains by deterministic deployment (CREATE2). */
13
+ deterministic: boolean;
14
+ source: EvidenceSource;
15
+ status: EvidenceStatus;
16
+ riskRelevance: string;
17
+ recommendedSafeHandsBehavior: string;
18
+ note?: string;
19
+ }
20
+ export declare const CANONICAL_CONTRACTS: Record<string, CanonicalContract>;
21
+ /**
22
+ * Raw, network-agnostic lookup by address (returns the entry if the address is a
23
+ * known canonical contract on ANY network). Kept for back-compat with spender /
24
+ * allowance recognition. Use {@link canonicalContractEvidence} for per-network
25
+ * recognition.
26
+ */
27
+ export declare function lookupCanonical(address: string): CanonicalContract | undefined;
28
+ export interface CanonicalContractEvidence {
29
+ name: string;
30
+ category: CanonicalCategory;
31
+ standard: CanonicalStandard;
32
+ network: NetworkName;
33
+ chainId: number;
34
+ address: string;
35
+ deterministic: boolean;
36
+ source: EvidenceSource;
37
+ status: EvidenceStatus;
38
+ riskRelevance: string;
39
+ recommendedSafeHandsBehavior: string;
40
+ }
41
+ /**
42
+ * Per-network canonical recognition evidence. Returns evidence ONLY when the
43
+ * address is a known canonical contract recognized on `network`. A known address
44
+ * that is not recognized on this network (e.g. a Pacific-only Safe address while
45
+ * the active network is Atlantic) returns `null` — fail-safe under-recognition,
46
+ * never a false positive. Recognition is metadata, not a safety guarantee.
47
+ */
48
+ export declare function canonicalContractEvidence(address: string, network?: PharosNetwork): CanonicalContractEvidence | null;
49
+ export interface ContractIntelDetails {
50
+ address: string | null;
51
+ recognized: boolean;
52
+ label: string | null;
53
+ standard: CanonicalStandard | null;
54
+ recognitionSource: "canonical-address" | "none";
55
+ /** Recognition is by address only; on-chain source verification is NOT performed. */
56
+ sourceVerified: false;
57
+ /** Per-network canonical evidence (null when not recognized on the active network). */
58
+ canonicalContractEvidence: CanonicalContractEvidence | null;
59
+ network: NetworkName;
60
+ chainId: number;
61
+ codePresent: boolean | "unknown";
62
+ isContract: boolean | "unknown";
63
+ }
64
+ export declare function analyzeContract(address: string, access?: ReadOnlyChainAccess): Promise<AnalyzerResult<ContractIntelDetails>>;
65
+ //# sourceMappingURL=contractIntel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contractIntel.d.ts","sourceRoot":"","sources":["../../../src/lib/analysis/contractIntel.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAoB,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAExF,OAAO,EAAc,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjI,MAAM,MAAM,iBAAiB,GACzB,MAAM,GACN,QAAQ,GACR,WAAW,GACX,mBAAmB,GACnB,YAAY,GACZ,SAAS,GACT,mBAAmB,GACnB,sBAAsB,GACtB,SAAS,GACT,iBAAiB,GACjB,8BAA8B,GAC9B,sBAAsB,CAAC;AAE3B,MAAM,MAAM,iBAAiB,GACzB,eAAe,GACf,UAAU,GACV,iBAAiB,GACjB,qBAAqB,GACrB,UAAU,CAAC;AAEf,MAAM,WAAW,iBAAiB;IAChC,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,4EAA4E;IAC5E,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,4EAA4E;IAC5E,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,cAAc,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,4BAA4B,EAAE,MAAM,CAAC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA6LD,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAKjE,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAG9E;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,cAAc,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,4BAA4B,EAAE,MAAM,CAAC;CACtC;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,aAAkC,GAC1C,yBAAyB,GAAG,IAAI,CAgBlC;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACnC,iBAAiB,EAAE,mBAAmB,GAAG,MAAM,CAAC;IAChD,qFAAqF;IACrF,cAAc,EAAE,KAAK,CAAC;IACtB,uFAAuF;IACvF,yBAAyB,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAC5D,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,UAAU,EAAE,OAAO,GAAG,SAAS,CAAC;CACjC;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC,CAqF/C"}