@andrewkimjoseph/celina-sdk 0.15.1 → 0.15.2

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 (361) hide show
  1. package/build/config/celina-tag.d.ts +5 -0
  2. package/build/config/celina-tag.js +67 -3
  3. package/build/config/celina-tag.js.map +1 -1
  4. package/build/index.d.ts +1 -1
  5. package/build/index.js +1 -1
  6. package/build/index.js.map +1 -1
  7. package/build/src/a2a/agent-card.d.ts +37 -0
  8. package/build/src/a2a/agent-card.js +46 -0
  9. package/build/src/a2a/agent-card.js.map +1 -0
  10. package/build/src/a2a/index.d.ts +2 -0
  11. package/build/src/a2a/index.js +3 -0
  12. package/build/src/a2a/index.js.map +1 -0
  13. package/build/src/a2a/skills.d.ts +18 -0
  14. package/build/src/a2a/skills.js +106 -0
  15. package/build/src/a2a/skills.js.map +1 -0
  16. package/build/src/aa/create-aa-client.d.ts +44 -0
  17. package/build/src/aa/create-aa-client.js +115 -0
  18. package/build/src/aa/create-aa-client.js.map +1 -0
  19. package/build/src/aa/gas-sponsorship.d.ts +27 -0
  20. package/build/src/aa/gas-sponsorship.js +65 -0
  21. package/build/src/aa/gas-sponsorship.js.map +1 -0
  22. package/build/src/aa/index.d.ts +4 -0
  23. package/build/src/aa/index.js +4 -0
  24. package/build/src/aa/index.js.map +1 -0
  25. package/build/src/aa/prepared-calls.d.ts +8 -0
  26. package/build/src/aa/prepared-calls.js +27 -0
  27. package/build/src/aa/prepared-calls.js.map +1 -0
  28. package/build/src/aa/types.d.ts +61 -0
  29. package/build/src/aa/types.js +2 -0
  30. package/build/src/aa/types.js.map +1 -0
  31. package/build/src/abis/aave-pool.d.ts +37 -0
  32. package/build/src/abis/aave-pool.js +26 -0
  33. package/build/src/abis/aave-pool.js.map +1 -0
  34. package/build/src/abis/accounts.d.ts +13 -0
  35. package/build/src/abis/accounts.js +10 -0
  36. package/build/src/abis/accounts.js.map +1 -0
  37. package/build/src/abis/election.d.ts +124 -0
  38. package/build/src/abis/election.js +88 -0
  39. package/build/src/abis/election.js.map +1 -0
  40. package/build/src/abis/gooddollar-broker.d.ts +77 -0
  41. package/build/src/abis/gooddollar-broker.js +44 -0
  42. package/build/src/abis/gooddollar-broker.js.map +1 -0
  43. package/build/src/abis/gooddollar-identity.d.ts +85 -0
  44. package/build/src/abis/gooddollar-identity.js +52 -0
  45. package/build/src/abis/gooddollar-identity.js.map +1 -0
  46. package/build/src/abis/governance.d.ts +86 -0
  47. package/build/src/abis/governance.js +68 -0
  48. package/build/src/abis/governance.js.map +1 -0
  49. package/build/src/abis/locked-gold.d.ts +10 -0
  50. package/build/src/abis/locked-gold.js +10 -0
  51. package/build/src/abis/locked-gold.js.map +1 -0
  52. package/build/src/abis/nft.d.ts +107 -0
  53. package/build/src/abis/nft.js +75 -0
  54. package/build/src/abis/nft.js.map +1 -0
  55. package/build/src/abis/permit2.d.ts +43 -0
  56. package/build/src/abis/permit2.js +30 -0
  57. package/build/src/abis/permit2.js.map +1 -0
  58. package/build/src/abis/self-registry.d.ts +194 -0
  59. package/build/src/abis/self-registry.js +120 -0
  60. package/build/src/abis/self-registry.js.map +1 -0
  61. package/build/src/abis/ubi-scheme.d.ts +91 -0
  62. package/build/src/abis/ubi-scheme.js +66 -0
  63. package/build/src/abis/ubi-scheme.js.map +1 -0
  64. package/build/src/abis/uniswap-state-view.d.ts +34 -0
  65. package/build/src/abis/uniswap-state-view.js +22 -0
  66. package/build/src/abis/uniswap-state-view.js.map +1 -0
  67. package/build/src/abis/uniswap-v4-quoter.d.ts +86 -0
  68. package/build/src/abis/uniswap-v4-quoter.js +64 -0
  69. package/build/src/abis/uniswap-v4-quoter.js.map +1 -0
  70. package/build/src/abis/universal-router.d.ts +16 -0
  71. package/build/src/abis/universal-router.js +14 -0
  72. package/build/src/abis/universal-router.js.map +1 -0
  73. package/build/src/abis/validators-minimal.d.ts +65 -0
  74. package/build/src/abis/validators-minimal.js +39 -0
  75. package/build/src/abis/validators-minimal.js.map +1 -0
  76. package/build/src/analytics/amplitude.d.ts +11 -0
  77. package/build/src/analytics/amplitude.js +76 -0
  78. package/build/src/analytics/amplitude.js.map +1 -0
  79. package/build/src/analytics/config.d.ts +7 -0
  80. package/build/src/analytics/config.js +25 -0
  81. package/build/src/analytics/config.js.map +1 -0
  82. package/build/src/analytics/consumer-package.d.ts +9 -0
  83. package/build/src/analytics/consumer-package.js +143 -0
  84. package/build/src/analytics/consumer-package.js.map +1 -0
  85. package/build/src/analytics/mcp-tool-events.d.ts +5 -0
  86. package/build/src/analytics/mcp-tool-events.js +53 -0
  87. package/build/src/analytics/mcp-tool-events.js.map +1 -0
  88. package/build/src/analytics/wallet-context.d.ts +11 -0
  89. package/build/src/analytics/wallet-context.js +81 -0
  90. package/build/src/analytics/wallet-context.js.map +1 -0
  91. package/build/src/analytics/wallet-extract.d.ts +9 -0
  92. package/build/src/analytics/wallet-extract.js +21 -0
  93. package/build/src/analytics/wallet-extract.js.map +1 -0
  94. package/build/src/analytics/wrap-service.d.ts +5 -0
  95. package/build/src/analytics/wrap-service.js +38 -0
  96. package/build/src/analytics/wrap-service.js.map +1 -0
  97. package/build/src/clients/celo-client.d.ts +19 -0
  98. package/build/src/clients/celo-client.js +32 -0
  99. package/build/src/clients/celo-client.js.map +1 -0
  100. package/build/src/clients/ens-client.d.ts +17 -0
  101. package/build/src/clients/ens-client.js +30 -0
  102. package/build/src/clients/ens-client.js.map +1 -0
  103. package/build/src/clients/mento-sdk.d.ts +2 -0
  104. package/build/src/clients/mento-sdk.js +9 -0
  105. package/build/src/clients/mento-sdk.js.map +1 -0
  106. package/build/src/clients/self-api.d.ts +82 -0
  107. package/build/src/clients/self-api.js +242 -0
  108. package/build/src/clients/self-api.js.map +1 -0
  109. package/build/src/clients/uniswap-sdk.d.ts +4 -0
  110. package/build/src/clients/uniswap-sdk.js +13 -0
  111. package/build/src/clients/uniswap-sdk.js.map +1 -0
  112. package/build/src/config/aave.d.ts +17 -0
  113. package/build/src/config/aave.js +77 -0
  114. package/build/src/config/aave.js.map +1 -0
  115. package/build/src/config/celina-tag.d.ts +55 -0
  116. package/build/src/config/celina-tag.js +234 -0
  117. package/build/src/config/celina-tag.js.map +1 -0
  118. package/build/src/config/celo-core-contracts.d.ts +8 -0
  119. package/build/src/config/celo-core-contracts.js +9 -0
  120. package/build/src/config/celo-core-contracts.js.map +1 -0
  121. package/build/src/config/chains.d.ts +937 -0
  122. package/build/src/config/chains.js +319 -0
  123. package/build/src/config/chains.js.map +1 -0
  124. package/build/src/config/gooddollar.d.ts +16 -0
  125. package/build/src/config/gooddollar.js +24 -0
  126. package/build/src/config/gooddollar.js.map +1 -0
  127. package/build/src/config/sdk-config.d.ts +44 -0
  128. package/build/src/config/sdk-config.js +28 -0
  129. package/build/src/config/sdk-config.js.map +1 -0
  130. package/build/src/config/self.d.ts +22 -0
  131. package/build/src/config/self.js +27 -0
  132. package/build/src/config/self.js.map +1 -0
  133. package/build/src/config/uniswap.d.ts +42 -0
  134. package/build/src/config/uniswap.js +76 -0
  135. package/build/src/config/uniswap.js.map +1 -0
  136. package/build/src/index.d.ts +127 -0
  137. package/build/src/index.js +72 -0
  138. package/build/src/index.js.map +1 -0
  139. package/build/src/oasf/index.d.ts +2 -0
  140. package/build/src/oasf/index.js +3 -0
  141. package/build/src/oasf/index.js.map +1 -0
  142. package/build/src/oasf/record.d.ts +39 -0
  143. package/build/src/oasf/record.js +35 -0
  144. package/build/src/oasf/record.js.map +1 -0
  145. package/build/src/oasf/taxonomy.d.ts +19 -0
  146. package/build/src/oasf/taxonomy.js +46 -0
  147. package/build/src/oasf/taxonomy.js.map +1 -0
  148. package/build/src/services/aave.service.d.ts +59 -0
  149. package/build/src/services/aave.service.js +210 -0
  150. package/build/src/services/aave.service.js.map +1 -0
  151. package/build/src/services/account.service.d.ts +22 -0
  152. package/build/src/services/account.service.js +29 -0
  153. package/build/src/services/account.service.js.map +1 -0
  154. package/build/src/services/agentkarma.service.d.ts +89 -0
  155. package/build/src/services/agentkarma.service.js +102 -0
  156. package/build/src/services/agentkarma.service.js.map +1 -0
  157. package/build/src/services/blockchain.service.d.ts +126 -0
  158. package/build/src/services/blockchain.service.js +188 -0
  159. package/build/src/services/blockchain.service.js.map +1 -0
  160. package/build/src/services/contract.service.d.ts +78 -0
  161. package/build/src/services/contract.service.js +117 -0
  162. package/build/src/services/contract.service.js.map +1 -0
  163. package/build/src/services/ens.service.d.ts +44 -0
  164. package/build/src/services/ens.service.js +92 -0
  165. package/build/src/services/ens.service.js.map +1 -0
  166. package/build/src/services/gooddollar.service.d.ts +184 -0
  167. package/build/src/services/gooddollar.service.js +675 -0
  168. package/build/src/services/gooddollar.service.js.map +1 -0
  169. package/build/src/services/governance.service.d.ts +96 -0
  170. package/build/src/services/governance.service.js +255 -0
  171. package/build/src/services/governance.service.js.map +1 -0
  172. package/build/src/services/mento-fx.service.d.ts +81 -0
  173. package/build/src/services/mento-fx.service.js +318 -0
  174. package/build/src/services/mento-fx.service.js.map +1 -0
  175. package/build/src/services/nft.service.d.ts +58 -0
  176. package/build/src/services/nft.service.js +222 -0
  177. package/build/src/services/nft.service.js.map +1 -0
  178. package/build/src/services/self-session-store.d.ts +19 -0
  179. package/build/src/services/self-session-store.js +28 -0
  180. package/build/src/services/self-session-store.js.map +1 -0
  181. package/build/src/services/self.service.d.ts +241 -0
  182. package/build/src/services/self.service.js +699 -0
  183. package/build/src/services/self.service.js.map +1 -0
  184. package/build/src/services/staking.service.d.ts +140 -0
  185. package/build/src/services/staking.service.js +444 -0
  186. package/build/src/services/staking.service.js.map +1 -0
  187. package/build/src/services/token.service.d.ts +110 -0
  188. package/build/src/services/token.service.js +189 -0
  189. package/build/src/services/token.service.js.map +1 -0
  190. package/build/src/services/transaction.service.d.ts +69 -0
  191. package/build/src/services/transaction.service.js +197 -0
  192. package/build/src/services/transaction.service.js.map +1 -0
  193. package/build/src/services/uniswap-path-router.d.ts +40 -0
  194. package/build/src/services/uniswap-path-router.js +168 -0
  195. package/build/src/services/uniswap-path-router.js.map +1 -0
  196. package/build/src/services/uniswap-pool-discovery.d.ts +55 -0
  197. package/build/src/services/uniswap-pool-discovery.js +198 -0
  198. package/build/src/services/uniswap-pool-discovery.js.map +1 -0
  199. package/build/src/services/uniswap.service.d.ts +83 -0
  200. package/build/src/services/uniswap.service.js +352 -0
  201. package/build/src/services/uniswap.service.js.map +1 -0
  202. package/build/src/simulation/index.d.ts +5 -0
  203. package/build/src/simulation/index.js +2 -0
  204. package/build/src/simulation/index.js.map +1 -0
  205. package/build/src/simulation/simulate-prepared-step.d.ts +17 -0
  206. package/build/src/simulation/simulate-prepared-step.js +42 -0
  207. package/build/src/simulation/simulate-prepared-step.js.map +1 -0
  208. package/build/src/tools/catalog.d.ts +11 -0
  209. package/build/src/tools/catalog.js +43 -0
  210. package/build/src/tools/catalog.js.map +1 -0
  211. package/build/src/tools/domains/aave.d.ts +2 -0
  212. package/build/src/tools/domains/aave.js +115 -0
  213. package/build/src/tools/domains/aave.js.map +1 -0
  214. package/build/src/tools/domains/agentkarma.d.ts +2 -0
  215. package/build/src/tools/domains/agentkarma.js +92 -0
  216. package/build/src/tools/domains/agentkarma.js.map +1 -0
  217. package/build/src/tools/domains/blockchain.d.ts +2 -0
  218. package/build/src/tools/domains/blockchain.js +122 -0
  219. package/build/src/tools/domains/blockchain.js.map +1 -0
  220. package/build/src/tools/domains/browser.d.ts +2 -0
  221. package/build/src/tools/domains/browser.js +45 -0
  222. package/build/src/tools/domains/browser.js.map +1 -0
  223. package/build/src/tools/domains/contract.d.ts +2 -0
  224. package/build/src/tools/domains/contract.js +67 -0
  225. package/build/src/tools/domains/contract.js.map +1 -0
  226. package/build/src/tools/domains/ens.d.ts +2 -0
  227. package/build/src/tools/domains/ens.js +16 -0
  228. package/build/src/tools/domains/ens.js.map +1 -0
  229. package/build/src/tools/domains/gooddollar.d.ts +2 -0
  230. package/build/src/tools/domains/gooddollar.js +171 -0
  231. package/build/src/tools/domains/gooddollar.js.map +1 -0
  232. package/build/src/tools/domains/governance.d.ts +2 -0
  233. package/build/src/tools/domains/governance.js +41 -0
  234. package/build/src/tools/domains/governance.js.map +1 -0
  235. package/build/src/tools/domains/index.d.ts +1 -0
  236. package/build/src/tools/domains/index.js +33 -0
  237. package/build/src/tools/domains/index.js.map +1 -0
  238. package/build/src/tools/domains/mento-fx.d.ts +2 -0
  239. package/build/src/tools/domains/mento-fx.js +67 -0
  240. package/build/src/tools/domains/mento-fx.js.map +1 -0
  241. package/build/src/tools/domains/nft.d.ts +2 -0
  242. package/build/src/tools/domains/nft.js +38 -0
  243. package/build/src/tools/domains/nft.js.map +1 -0
  244. package/build/src/tools/domains/self.d.ts +2 -0
  245. package/build/src/tools/domains/self.js +187 -0
  246. package/build/src/tools/domains/self.js.map +1 -0
  247. package/build/src/tools/domains/staking.d.ts +2 -0
  248. package/build/src/tools/domains/staking.js +74 -0
  249. package/build/src/tools/domains/staking.js.map +1 -0
  250. package/build/src/tools/domains/token.d.ts +2 -0
  251. package/build/src/tools/domains/token.js +74 -0
  252. package/build/src/tools/domains/token.js.map +1 -0
  253. package/build/src/tools/domains/transaction.d.ts +2 -0
  254. package/build/src/tools/domains/transaction.js +120 -0
  255. package/build/src/tools/domains/transaction.js.map +1 -0
  256. package/build/src/tools/domains/uniswap.d.ts +2 -0
  257. package/build/src/tools/domains/uniswap.js +67 -0
  258. package/build/src/tools/domains/uniswap.js.map +1 -0
  259. package/build/src/tools/filter.d.ts +2 -0
  260. package/build/src/tools/filter.js +50 -0
  261. package/build/src/tools/filter.js.map +1 -0
  262. package/build/src/tools/index.d.ts +7 -0
  263. package/build/src/tools/index.js +7 -0
  264. package/build/src/tools/index.js.map +1 -0
  265. package/build/src/tools/schemas/common.d.ts +165 -0
  266. package/build/src/tools/schemas/common.js +207 -0
  267. package/build/src/tools/schemas/common.js.map +1 -0
  268. package/build/src/tools/schemas/wallet-params.d.ts +9 -0
  269. package/build/src/tools/schemas/wallet-params.js +52 -0
  270. package/build/src/tools/schemas/wallet-params.js.map +1 -0
  271. package/build/src/tools/swap-routing.d.ts +25 -0
  272. package/build/src/tools/swap-routing.js +174 -0
  273. package/build/src/tools/swap-routing.js.map +1 -0
  274. package/build/src/tools/types.d.ts +124 -0
  275. package/build/src/tools/types.js +2 -0
  276. package/build/src/tools/types.js.map +1 -0
  277. package/build/src/tools/utils/normalize-token.d.ts +2 -0
  278. package/build/src/tools/utils/normalize-token.js +12 -0
  279. package/build/src/tools/utils/normalize-token.js.map +1 -0
  280. package/build/src/tools/utils/wallet.d.ts +4 -0
  281. package/build/src/tools/utils/wallet.js +8 -0
  282. package/build/src/tools/utils/wallet.js.map +1 -0
  283. package/build/src/tools/website-sync.d.ts +28 -0
  284. package/build/src/tools/website-sync.js +198 -0
  285. package/build/src/tools/website-sync.js.map +1 -0
  286. package/build/src/types/prepared.d.ts +43 -0
  287. package/build/src/types/prepared.js +15 -0
  288. package/build/src/types/prepared.js.map +1 -0
  289. package/build/src/utils/celo-format.d.ts +6 -0
  290. package/build/src/utils/celo-format.js +17 -0
  291. package/build/src/utils/celo-format.js.map +1 -0
  292. package/build/src/utils/erc20-allowance-storage.d.ts +20 -0
  293. package/build/src/utils/erc20-allowance-storage.js +64 -0
  294. package/build/src/utils/erc20-allowance-storage.js.map +1 -0
  295. package/build/src/utils/format-date.d.ts +2 -0
  296. package/build/src/utils/format-date.js +13 -0
  297. package/build/src/utils/format-date.js.map +1 -0
  298. package/build/src/utils/format-duration.d.ts +2 -0
  299. package/build/src/utils/format-duration.js +17 -0
  300. package/build/src/utils/format-duration.js.map +1 -0
  301. package/build/src/utils/format-unix-datetime.d.ts +4 -0
  302. package/build/src/utils/format-unix-datetime.js +18 -0
  303. package/build/src/utils/format-unix-datetime.js.map +1 -0
  304. package/build/src/utils/gooddollar-ubi-period.d.ts +23 -0
  305. package/build/src/utils/gooddollar-ubi-period.js +23 -0
  306. package/build/src/utils/gooddollar-ubi-period.js.map +1 -0
  307. package/build/src/utils/normalize-address.d.ts +7 -0
  308. package/build/src/utils/normalize-address.js +16 -0
  309. package/build/src/utils/normalize-address.js.map +1 -0
  310. package/build/src/utils/self-format.d.ts +28 -0
  311. package/build/src/utils/self-format.js +79 -0
  312. package/build/src/utils/self-format.js.map +1 -0
  313. package/build/src/utils/self-signing.d.ts +4 -0
  314. package/build/src/utils/self-signing.js +38 -0
  315. package/build/src/utils/self-signing.js.map +1 -0
  316. package/build/src/utils/transaction-errors.d.ts +3 -0
  317. package/build/src/utils/transaction-errors.js +17 -0
  318. package/build/src/utils/transaction-errors.js.map +1 -0
  319. package/build/tests/catalog/domains/blockchain.d.ts +2 -0
  320. package/build/tests/catalog/domains/blockchain.js +127 -0
  321. package/build/tests/catalog/domains/blockchain.js.map +1 -0
  322. package/build/tests/catalog/domains/chain-ext.d.ts +5 -0
  323. package/build/tests/catalog/domains/chain-ext.js +207 -0
  324. package/build/tests/catalog/domains/chain-ext.js.map +1 -0
  325. package/build/tests/catalog/domains/defi.d.ts +6 -0
  326. package/build/tests/catalog/domains/defi.js +581 -0
  327. package/build/tests/catalog/domains/defi.js.map +1 -0
  328. package/build/tests/catalog/domains/self.d.ts +2 -0
  329. package/build/tests/catalog/domains/self.js +208 -0
  330. package/build/tests/catalog/domains/self.js.map +1 -0
  331. package/build/tests/catalog/domains/token.d.ts +2 -0
  332. package/build/tests/catalog/domains/token.js +70 -0
  333. package/build/tests/catalog/domains/token.js.map +1 -0
  334. package/build/tests/catalog/domains/transaction.d.ts +2 -0
  335. package/build/tests/catalog/domains/transaction.js +96 -0
  336. package/build/tests/catalog/domains/transaction.js.map +1 -0
  337. package/build/tests/catalog/index.d.ts +2 -0
  338. package/build/tests/catalog/index.js +2 -0
  339. package/build/tests/catalog/index.js.map +1 -0
  340. package/build/tests/catalog/operations.d.ts +12 -0
  341. package/build/tests/catalog/operations.js +29 -0
  342. package/build/tests/catalog/operations.js.map +1 -0
  343. package/build/tests/catalog/types.d.ts +24 -0
  344. package/build/tests/catalog/types.js +2 -0
  345. package/build/tests/catalog/types.js.map +1 -0
  346. package/build/tests/fixtures/mainnet.d.ts +54 -0
  347. package/build/tests/fixtures/mainnet.js +53 -0
  348. package/build/tests/fixtures/mainnet.js.map +1 -0
  349. package/build/tests/helpers/assert.d.ts +4 -0
  350. package/build/tests/helpers/assert.js +24 -0
  351. package/build/tests/helpers/assert.js.map +1 -0
  352. package/build/tests/helpers/env.d.ts +12 -0
  353. package/build/tests/helpers/env.js +29 -0
  354. package/build/tests/helpers/env.js.map +1 -0
  355. package/build/tests/helpers/gating.d.ts +3 -0
  356. package/build/tests/helpers/gating.js +23 -0
  357. package/build/tests/helpers/gating.js.map +1 -0
  358. package/build/tests/testing-entry.d.ts +6 -0
  359. package/build/tests/testing-entry.js +6 -0
  360. package/build/tests/testing-entry.js.map +1 -0
  361. package/package.json +1 -1
@@ -0,0 +1,352 @@
1
+ /**
2
+ * Uniswap v4 swaps on Celo mainnet: quote, estimate, and prepare flows.
3
+ * Uses V4Quoter for pricing and Universal Router + Permit2 for execution calldata.
4
+ * Pool discovery prefers the v4 subgraph; falls back to on-chain hub probing when unavailable.
5
+ */
6
+ import { encodeFunctionData, erc20Abi, formatUnits, maxUint256, } from "viem";
7
+ import { permit2Abi } from "../abis/permit2.js";
8
+ import { universalRouterAbi } from "../abis/universal-router.js";
9
+ import { Actions, CommandType, RoutePlanner, V4Planner, } from "../clients/uniswap-sdk.js";
10
+ import { appendCelinaCalldataTag } from "../config/celina-tag.js";
11
+ import { UNISWAP_V4, uniswapInputTokenAddress, toUniswapRoutingCurrency, } from "../config/uniswap.js";
12
+ import { ALLOWANCE_MAPPING_SLOTS, erc20AllowanceStateOverride, isLikelyTransferFailed, } from "../utils/erc20-allowance-storage.js";
13
+ import { serializePreparedFlow, } from "../types/prepared.js";
14
+ import { CHAIN } from "../config/chains.js";
15
+ import { findBestUniswapRoute, applySlippage } from "./uniswap-path-router.js";
16
+ import { TokenService } from "./token.service.js";
17
+ const DEFAULT_SLIPPAGE = 0.5;
18
+ const DEFAULT_DEADLINE_MINUTES = 5;
19
+ const PERMIT2_MAX_UINT160 = (1n << 160n) - 1n;
20
+ function trimDisplayDecimals(value) {
21
+ const num = Number(value);
22
+ if (!Number.isFinite(num))
23
+ return value;
24
+ if (Math.abs(num) >= 1000) {
25
+ return num.toLocaleString(undefined, { maximumFractionDigits: 2 });
26
+ }
27
+ if (Math.abs(num) >= 1) {
28
+ return num.toLocaleString(undefined, { maximumFractionDigits: 4 });
29
+ }
30
+ return num.toLocaleString(undefined, { maximumSignificantDigits: 6 });
31
+ }
32
+ function swapOptions(params) {
33
+ const slippageTolerance = params?.slippageTolerance ?? DEFAULT_SLIPPAGE;
34
+ const deadlineMinutes = params?.deadlineMinutes ?? DEFAULT_DEADLINE_MINUTES;
35
+ const deadline = BigInt(Math.floor(Date.now() / 1000) + deadlineMinutes * 60);
36
+ return { slippageTolerance, deadlineMinutes, deadline };
37
+ }
38
+ function formatUniswapError(error, tokenIn, tokenOut) {
39
+ const message = error instanceof Error ? error.message : String(error);
40
+ if (/insufficient liquidity|amountOut.*0/i.test(message)) {
41
+ throw new Error(`Insufficient liquidity in Uniswap v4 pools for ${tokenIn} → ${tokenOut}.`);
42
+ }
43
+ throw error instanceof Error ? error : new Error(message);
44
+ }
45
+ /** Uniswap v4 quotes, gas estimates, and `prepareSwap` flows on Celo mainnet. */
46
+ export class UniswapService {
47
+ clientFactory;
48
+ tokenService;
49
+ attributionTags;
50
+ constructor(clientFactory) {
51
+ this.clientFactory = clientFactory;
52
+ this.tokenService = new TokenService(clientFactory);
53
+ this.attributionTags = clientFactory.getConfig().attributionTags;
54
+ }
55
+ resolvePair(tokenIn, tokenOut) {
56
+ const resolvedIn = this.tokenService.resolveToken(tokenIn);
57
+ const resolvedOut = this.tokenService.resolveToken(tokenOut);
58
+ const routingIn = toUniswapRoutingCurrency(resolvedIn.address);
59
+ const routingOut = toUniswapRoutingCurrency(resolvedOut.address);
60
+ const inputToken = uniswapInputTokenAddress(resolvedIn.address);
61
+ return { resolvedIn, resolvedOut, routingIn, routingOut, inputToken };
62
+ }
63
+ baseQuoteFields(resolvedIn, resolvedOut, amount, expectedOutWei, routeHops, indexSource) {
64
+ return {
65
+ protocol: "uniswap_v4",
66
+ network: "mainnet",
67
+ tokenIn: resolvedIn.symbol,
68
+ tokenOut: resolvedOut.symbol,
69
+ amountIn: amount,
70
+ expectedOut: formatUnits(expectedOutWei, resolvedOut.decimals),
71
+ routeHops,
72
+ indexSource,
73
+ };
74
+ }
75
+ async buildSwapRoute(tokenIn, tokenOut, amount, params, from) {
76
+ const { public: client } = this.clientFactory.getClients();
77
+ const { resolvedIn, resolvedOut, routingIn, routingOut, inputToken } = this.resolvePair(tokenIn, tokenOut);
78
+ if (routingIn.toLowerCase() === routingOut.toLowerCase()) {
79
+ throw new Error("tokenIn and tokenOut must be different.");
80
+ }
81
+ const amountInWei = this.tokenService.parseAmount(amount, resolvedIn.decimals);
82
+ if (from) {
83
+ const celoHint = resolvedIn.address === "native"
84
+ ? " Uniswap v4 swaps require wrapped CELO (WCELO), not native CELO."
85
+ : "";
86
+ await this.tokenService.assertSpendableBalance(from, resolvedIn, amount, {
87
+ spendToken: inputToken === "native" ? "native" : inputToken,
88
+ hint: celoHint,
89
+ });
90
+ }
91
+ const quote = await findBestUniswapRoute(client, routingIn, routingOut, amountInWei);
92
+ if (!quote) {
93
+ throw new Error(`No Uniswap v4 route for ${resolvedIn.symbol} → ${resolvedOut.symbol}.`);
94
+ }
95
+ const { slippageTolerance, deadlineMinutes, deadline } = swapOptions(params);
96
+ const amountOutMin = applySlippage(quote.amountOut, slippageTolerance);
97
+ return {
98
+ client,
99
+ resolvedIn,
100
+ resolvedOut,
101
+ routingIn,
102
+ routingOut,
103
+ inputToken,
104
+ amountInWei,
105
+ route: quote.route,
106
+ expectedOutWei: quote.amountOut,
107
+ amountOutMin,
108
+ slippageTolerance,
109
+ deadlineMinutes,
110
+ deadline,
111
+ indexSource: quote.indexSource,
112
+ };
113
+ }
114
+ buildUniversalRouterCalldata(built, _recipient) {
115
+ const { route, amountInWei, amountOutMin, deadline, routingIn, routingOut, } = built;
116
+ const v4Planner = new V4Planner();
117
+ const routePlanner = new RoutePlanner();
118
+ const amountIn = amountInWei.toString();
119
+ const amountOutMinimum = amountOutMin.toString();
120
+ if (route.hops === 1) {
121
+ const poolKey = route.pools[0];
122
+ const zeroForOne = routingIn.toLowerCase() === poolKey.currency0.toLowerCase();
123
+ v4Planner.addAction(Actions.SWAP_EXACT_IN_SINGLE, [
124
+ {
125
+ poolKey,
126
+ zeroForOne,
127
+ amountIn,
128
+ amountOutMinimum,
129
+ hookData: "0x",
130
+ },
131
+ ]);
132
+ v4Planner.addAction(Actions.SETTLE_ALL, [routingIn, amountIn]);
133
+ v4Planner.addAction(Actions.TAKE_ALL, [routingOut, amountOutMinimum]);
134
+ }
135
+ else {
136
+ v4Planner.addAction(Actions.SWAP_EXACT_IN, [
137
+ {
138
+ currencyIn: routingIn,
139
+ path: route.pathKeys,
140
+ amountIn,
141
+ amountOutMinimum,
142
+ },
143
+ ]);
144
+ v4Planner.addAction(Actions.SETTLE_ALL, [routingIn, amountIn]);
145
+ v4Planner.addAction(Actions.TAKE_ALL, [routingOut, amountOutMinimum]);
146
+ }
147
+ routePlanner.addCommand(CommandType.V4_SWAP, [
148
+ v4Planner.actions,
149
+ v4Planner.params,
150
+ ]);
151
+ const data = encodeFunctionData({
152
+ abi: universalRouterAbi,
153
+ functionName: "execute",
154
+ args: [
155
+ routePlanner.commands,
156
+ [v4Planner.finalize()],
157
+ deadline,
158
+ ],
159
+ });
160
+ return {
161
+ to: UNISWAP_V4.universalRouter,
162
+ data,
163
+ value: 0n,
164
+ };
165
+ }
166
+ async getApprovalSteps(client, from, inputToken, tokenSymbol, amountInWei, deadline) {
167
+ if (inputToken === "native") {
168
+ return [];
169
+ }
170
+ const steps = [];
171
+ const token = inputToken;
172
+ const erc20Allowance = await client.readContract({
173
+ address: token,
174
+ abi: erc20Abi,
175
+ functionName: "allowance",
176
+ args: [from, UNISWAP_V4.permit2],
177
+ });
178
+ if (erc20Allowance < amountInWei) {
179
+ steps.push({
180
+ kind: "erc20",
181
+ to: token,
182
+ data: appendCelinaCalldataTag(encodeFunctionData({
183
+ abi: erc20Abi,
184
+ functionName: "approve",
185
+ args: [UNISWAP_V4.permit2, maxUint256],
186
+ }), this.attributionTags),
187
+ value: "0",
188
+ description: `Approve ${tokenSymbol} for Uniswap Permit2`,
189
+ });
190
+ }
191
+ const permit2Allowance = await client.readContract({
192
+ address: UNISWAP_V4.permit2,
193
+ abi: permit2Abi,
194
+ functionName: "allowance",
195
+ args: [from, token, UNISWAP_V4.universalRouter],
196
+ });
197
+ const now = BigInt(Math.floor(Date.now() / 1000));
198
+ if (permit2Allowance[0] < amountInWei ||
199
+ BigInt(permit2Allowance[1]) <= now) {
200
+ steps.push({
201
+ kind: "contract",
202
+ to: UNISWAP_V4.permit2,
203
+ data: appendCelinaCalldataTag(encodeFunctionData({
204
+ abi: permit2Abi,
205
+ functionName: "approve",
206
+ args: [
207
+ token,
208
+ UNISWAP_V4.universalRouter,
209
+ PERMIT2_MAX_UINT160,
210
+ Number(deadline),
211
+ ],
212
+ }), this.attributionTags),
213
+ value: "0",
214
+ description: `Permit2 approve ${tokenSymbol} for Uniswap Universal Router`,
215
+ });
216
+ }
217
+ return steps;
218
+ }
219
+ async estimateCallGas(client, from, to, data, value = 0n) {
220
+ const gas = await client.estimateGas({
221
+ account: from,
222
+ to,
223
+ data,
224
+ value,
225
+ });
226
+ return gas.toString();
227
+ }
228
+ async estimateSwapGasWithAllowance(client, from, to, data, token, amount) {
229
+ const request = { account: from, to, data, value: 0n };
230
+ for (const mappingSlot of ALLOWANCE_MAPPING_SLOTS) {
231
+ try {
232
+ const gas = await client.estimateGas({
233
+ ...request,
234
+ stateOverride: erc20AllowanceStateOverride(token, from, UNISWAP_V4.permit2, amount, mappingSlot),
235
+ });
236
+ return gas.toString();
237
+ }
238
+ catch (error) {
239
+ if (!isLikelyTransferFailed(error)) {
240
+ throw error;
241
+ }
242
+ }
243
+ }
244
+ throw new Error("Could not estimate Uniswap swap gas: failed to simulate ERC-20 allowance for this token.");
245
+ }
246
+ /**
247
+ * Expected Uniswap v4 output for a token pair — no wallet required.
248
+ * @param tokenIn - Input token symbol or address
249
+ * @param tokenOut - Output token symbol or address
250
+ * @param amount - Human-readable input amount
251
+ * @param _from - Deprecated; ignored. Balance checks run on prepare/estimate only.
252
+ */
253
+ async getSwapQuote(tokenIn, tokenOut, amount, _from) {
254
+ try {
255
+ const built = await this.buildSwapRoute(tokenIn, tokenOut, amount, undefined, undefined);
256
+ return {
257
+ ...this.baseQuoteFields(built.resolvedIn, built.resolvedOut, amount, built.expectedOutWei, built.route.hops, built.indexSource),
258
+ route: {
259
+ pools: built.route.pools,
260
+ },
261
+ };
262
+ }
263
+ catch (error) {
264
+ formatUniswapError(error, tokenIn, tokenOut);
265
+ }
266
+ }
267
+ /**
268
+ * Simulate gas for a Uniswap v4 swap from `from`, including Permit2 approvals when needed.
269
+ * @param from - Sender wallet address
270
+ * @param tokenIn - Input token symbol or address
271
+ * @param tokenOut - Output token symbol or address
272
+ * @param amount - Human-readable input amount
273
+ * @param params - Optional slippage, deadline, and recipient
274
+ */
275
+ async estimateSwap(from, tokenIn, tokenOut, amount, params) {
276
+ try {
277
+ const built = await this.buildSwapRoute(tokenIn, tokenOut, amount, params, from);
278
+ const recipient = params?.recipient ?? from;
279
+ const approvalSteps = await this.getApprovalSteps(built.client, from, built.inputToken, built.resolvedIn.symbol, built.amountInWei, built.deadline);
280
+ const swapTx = this.buildUniversalRouterCalldata(built, recipient);
281
+ const taggedSwapData = appendCelinaCalldataTag(swapTx.data, this.attributionTags);
282
+ const approvalGasEntries = await Promise.all(approvalSteps.map(async (step) => this.estimateCallGas(built.client, from, step.to, step.data)));
283
+ let swapGas;
284
+ let swapGasEstimated = true;
285
+ try {
286
+ swapGas =
287
+ built.inputToken !== "native" && approvalSteps.length > 0
288
+ ? await this.estimateSwapGasWithAllowance(built.client, from, swapTx.to, taggedSwapData, built.inputToken, built.amountInWei)
289
+ : await this.estimateCallGas(built.client, from, swapTx.to, taggedSwapData);
290
+ }
291
+ catch {
292
+ swapGasEstimated = false;
293
+ }
294
+ return {
295
+ ...this.baseQuoteFields(built.resolvedIn, built.resolvedOut, amount, built.expectedOutWei, built.route.hops, built.indexSource),
296
+ from,
297
+ recipient,
298
+ amountOutMin: formatUnits(built.amountOutMin, built.resolvedOut.decimals),
299
+ approvalStepsNeeded: approvalSteps.length,
300
+ approvalGas: approvalGasEntries,
301
+ swapGas,
302
+ swapGasEstimated,
303
+ slippageTolerance: built.slippageTolerance,
304
+ deadline: built.deadline.toString(),
305
+ deadlineMinutes: built.deadlineMinutes,
306
+ };
307
+ }
308
+ catch (error) {
309
+ formatUniswapError(error, tokenIn, tokenOut);
310
+ }
311
+ }
312
+ /**
313
+ * Build unsigned Uniswap v4 steps (ERC-20 approve → Permit2 approve → swap when needed).
314
+ * @param from - Sender wallet address
315
+ * @param tokenIn - Input token symbol or address
316
+ * @param tokenOut - Output token symbol or address
317
+ * @param amount - Human-readable input amount
318
+ * @param params - Optional slippage, deadline, and recipient
319
+ * @returns 1–3 step `SerializedPreparedFlow` for sequential wallet signing
320
+ */
321
+ async prepareSwap(from, tokenIn, tokenOut, amount, params) {
322
+ try {
323
+ const built = await this.buildSwapRoute(tokenIn, tokenOut, amount, params, from);
324
+ const recipient = params?.recipient ?? from;
325
+ const displayIn = trimDisplayDecimals(amount);
326
+ const displayOut = trimDisplayDecimals(formatUnits(built.expectedOutWei, built.resolvedOut.decimals));
327
+ const approvalSteps = await this.getApprovalSteps(built.client, from, built.inputToken, built.resolvedIn.symbol, built.amountInWei, built.deadline);
328
+ const swapTx = this.buildUniversalRouterCalldata(built, recipient);
329
+ const steps = [
330
+ ...approvalSteps,
331
+ {
332
+ kind: "contract",
333
+ to: swapTx.to,
334
+ data: appendCelinaCalldataTag(swapTx.data, this.attributionTags),
335
+ value: swapTx.value.toString(),
336
+ description: `Swap ${displayIn} ${built.resolvedIn.symbol} → ~${displayOut} ${built.resolvedOut.symbol} via Uniswap v4`,
337
+ },
338
+ ];
339
+ const flow = {
340
+ chainId: CHAIN.id,
341
+ from,
342
+ summary: `Uniswap v4: ${displayIn} ${built.resolvedIn.symbol} → ${displayOut} ${built.resolvedOut.symbol}${recipient !== from ? ` (recipient ${recipient})` : ""}`,
343
+ steps,
344
+ };
345
+ return serializePreparedFlow(flow);
346
+ }
347
+ catch (error) {
348
+ formatUniswapError(error, tokenIn, tokenOut);
349
+ }
350
+ }
351
+ }
352
+ //# sourceMappingURL=uniswap.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniswap.service.js","sourceRoot":"","sources":["../../../src/services/uniswap.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Browser-safe prepared-step simulation (no Node analytics / wallet product logic).
3
+ */
4
+ export type { PreparedTx } from "../types/prepared.js";
5
+ export { simulatePreparedStep, type SimulatePreparedStepOptions, type SimulatePreparedStepParams, } from "./simulate-prepared-step.js";
@@ -0,0 +1,2 @@
1
+ export { simulatePreparedStep, } from "./simulate-prepared-step.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/simulation/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,oBAAoB,GAGrB,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type PublicClient, type StateOverride } from "viem";
2
+ import type { PreparedTx } from "../types/prepared.js";
3
+ /** Optional host overrides for Celo fee abstraction or custom state. */
4
+ export type SimulatePreparedStepOptions = {
5
+ /** Celo fee-abstraction currency — host-provided, never auto-resolved by the SDK. */
6
+ feeCurrency?: `0x${string}`;
7
+ stateOverride?: StateOverride;
8
+ };
9
+ export type SimulatePreparedStepParams = {
10
+ account: `0x${string}`;
11
+ step: PreparedTx;
12
+ };
13
+ /**
14
+ * Simulate a prepared transaction step against current chain state.
15
+ * Throws when the transaction would revert — call immediately before send.
16
+ */
17
+ export declare function simulatePreparedStep(publicClient: PublicClient, params: SimulatePreparedStepParams, options?: SimulatePreparedStepOptions): Promise<void>;
@@ -0,0 +1,42 @@
1
+ import { isInsufficientBalanceSimulationError } from "../utils/transaction-errors.js";
2
+ function stepRequest(account, step) {
3
+ return {
4
+ account,
5
+ to: step.to,
6
+ data: (step.data ?? "0x"),
7
+ value: step.value ? BigInt(step.value) : 0n,
8
+ };
9
+ }
10
+ function simulationErrorMessage(step, cause) {
11
+ const base = cause instanceof Error ? cause.message : String(cause);
12
+ if (isInsufficientBalanceSimulationError(cause)) {
13
+ return (`Simulation failed for "${step.description}": insufficient balance. (${base})`);
14
+ }
15
+ return `Simulation failed for "${step.description}": ${base}`;
16
+ }
17
+ /**
18
+ * Simulate a prepared transaction step against current chain state.
19
+ * Throws when the transaction would revert — call immediately before send.
20
+ */
21
+ export async function simulatePreparedStep(publicClient, params, options) {
22
+ const request = stepRequest(params.account, params.step);
23
+ const stateOverride = options?.stateOverride;
24
+ try {
25
+ if (options?.feeCurrency) {
26
+ await publicClient.estimateGas({
27
+ ...request,
28
+ feeCurrency: options.feeCurrency,
29
+ ...(stateOverride ? { stateOverride } : {}),
30
+ });
31
+ return;
32
+ }
33
+ await publicClient.call({
34
+ ...request,
35
+ ...(stateOverride ? { stateOverride } : {}),
36
+ });
37
+ }
38
+ catch (error) {
39
+ throw new Error(simulationErrorMessage(params.step, error));
40
+ }
41
+ }
42
+ //# sourceMappingURL=simulate-prepared-step.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulate-prepared-step.js","sourceRoot":"","sources":["../../../src/simulation/simulate-prepared-step.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oCAAoC,EAAE,MAAM,gCAAgC,CAAC;AActF,SAAS,WAAW,CAClB,OAAsB,EACtB,IAAgB;IAOhB,OAAO;QACL,OAAO;QACP,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAQ;QAChC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;KAC5C,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAgB,EAAE,KAAc;IAC9D,MAAM,IAAI,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEpE,IAAI,oCAAoC,CAAC,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO,CACL,0BAA0B,IAAI,CAAC,WAAW,6BAA6B,IAAI,GAAG,CAC/E,CAAC;IACJ,CAAC;IAED,OAAO,0BAA0B,IAAI,CAAC,WAAW,MAAM,IAAI,EAAE,CAAC;AAChE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,YAA0B,EAC1B,MAAkC,EAClC,OAAqC;IAErC,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,CAAC;IAE7C,IAAI,CAAC;QACH,IAAI,OAAO,EAAE,WAAW,EAAE,CAAC;YACzB,MAAM,YAAY,CAAC,WAAW,CAAC;gBAC7B,GAAG,OAAO;gBACV,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACE,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QAED,MAAM,YAAY,CAAC,IAAI,CAAC;YACtB,GAAG,OAAO;YACV,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5C,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { FilterToolsOptions, ToolDefinition, ToolFamily } from "./types.js";
2
+ export declare const ALL_TOOL_DEFINITIONS: ToolDefinition[];
3
+ export declare function getToolNames(options?: FilterToolsOptions): string[];
4
+ export declare function getMcpToolNames(options?: Omit<FilterToolsOptions, "surface">): string[];
5
+ export declare function getBrowserToolNames(options?: Omit<FilterToolsOptions, "surface">): string[];
6
+ export declare function getToolsByFamily(family: ToolFamily): ToolDefinition[];
7
+ export declare function getToolDefinition(name: string): ToolDefinition | undefined;
8
+ export declare function assertSnakeCaseRecordKeys(label: string, keys: string[]): void;
9
+ export declare function getToolInputSchemaShape(definition: ToolDefinition): Record<string, unknown> | undefined;
10
+ export declare function assertSnakeCaseInputKeys(definition: ToolDefinition): void;
11
+ export declare function validateToolCatalogSnakeCase(): void;
@@ -0,0 +1,43 @@
1
+ import { allDomainToolDefinitions } from "./domains/index.js";
2
+ import { filterToolDefinitions } from "./filter.js";
3
+ export const ALL_TOOL_DEFINITIONS = allDomainToolDefinitions;
4
+ export function getToolNames(options = {}) {
5
+ return filterToolDefinitions(ALL_TOOL_DEFINITIONS, options).map((d) => d.name);
6
+ }
7
+ export function getMcpToolNames(options = {}) {
8
+ return getToolNames({ ...options, surface: "mcp" });
9
+ }
10
+ export function getBrowserToolNames(options = {}) {
11
+ return getToolNames({ ...options, surface: "browser" });
12
+ }
13
+ export function getToolsByFamily(family) {
14
+ return filterToolDefinitions(ALL_TOOL_DEFINITIONS, { families: [family] });
15
+ }
16
+ export function getToolDefinition(name) {
17
+ return ALL_TOOL_DEFINITIONS.find((d) => d.name === name);
18
+ }
19
+ const SNAKE_CASE_KEY = /^[a-z][a-z0-9]*(_[a-z0-9]+)*$/;
20
+ export function assertSnakeCaseRecordKeys(label, keys) {
21
+ for (const key of keys) {
22
+ if (!SNAKE_CASE_KEY.test(key)) {
23
+ throw new Error(`${label}: key "${key}" must be snake_case (lowercase letters, digits, underscores).`);
24
+ }
25
+ }
26
+ }
27
+ export function getToolInputSchemaShape(definition) {
28
+ const shape = definition.inputSchema;
29
+ if (!shape || typeof shape !== "object" || !("shape" in shape)) {
30
+ return undefined;
31
+ }
32
+ return shape.shape;
33
+ }
34
+ export function assertSnakeCaseInputKeys(definition) {
35
+ const keys = Object.keys(getToolInputSchemaShape(definition) ?? {});
36
+ assertSnakeCaseRecordKeys(`Tool "${definition.name}" input`, keys);
37
+ }
38
+ export function validateToolCatalogSnakeCase() {
39
+ for (const def of ALL_TOOL_DEFINITIONS) {
40
+ assertSnakeCaseInputKeys(def);
41
+ }
42
+ }
43
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/tools/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGpD,MAAM,CAAC,MAAM,oBAAoB,GAAqB,wBAAwB,CAAC;AAE/E,MAAM,UAAU,YAAY,CAAC,UAA8B,EAAE;IAC3D,OAAO,qBAAqB,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,UAA+C,EAAE;IAEjD,OAAO,YAAY,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,UAA+C,EAAE;IAEjD,OAAO,YAAY,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAkB;IACjD,OAAO,qBAAqB,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,cAAc,GAAG,+BAA+B,CAAC;AAEvD,MAAM,UAAU,yBAAyB,CAAC,KAAa,EAAE,IAAc;IACrE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,UAAU,GAAG,gEAAgE,CACtF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,UAA0B;IAE1B,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,CAAC;IACrC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,EAAE,CAAC;QAC/D,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAQ,KAA4C,CAAC,KAAK,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,UAA0B;IACjE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IACpE,yBAAyB,CAAC,SAAS,UAAU,CAAC,IAAI,SAAS,EAAE,IAAI,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC1C,KAAK,MAAM,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACvC,wBAAwB,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ToolDefinition } from "../types.js";
2
+ export declare const aaveToolDefinitions: ToolDefinition[];
@@ -0,0 +1,115 @@
1
+ import { z } from "zod";
2
+ import { AAVE_SUPPORTED_SYMBOLS, resolveAaveAsset, } from "../../config/aave.js";
3
+ import { optionalWalletAddressSchema, tokenSymbolSchema } from "../schemas/common.js";
4
+ import { resolveWalletFromRuntime } from "../utils/wallet.js";
5
+ const supported = AAVE_SUPPORTED_SYMBOLS.join(", ");
6
+ const aaveTokenField = tokenSymbolSchema.describe(`Aave asset symbol on Celo (${supported}). Pass the symbol only.`);
7
+ const readOnly = {
8
+ readOnlyHint: true,
9
+ idempotentHint: true,
10
+ };
11
+ export const aaveToolDefinitions = [
12
+ {
13
+ name: "get_aave_balances",
14
+ description: `Read supplied Aave V3 balances (aToken holdings) on Celo in underlying token units including accrued interest. Each balance has formatted (human-readable, e.g. "0.000002") and raw (atomic units — do not quote raw to users). Supported: ${supported}. Omit address to use the session wallet when CELO_PRIVATE_KEY is set.`,
15
+ inputSchema: z.object({
16
+ address: optionalWalletAddressSchema,
17
+ tokens: z.array(aaveTokenField).optional(),
18
+ include_zero: z.boolean().optional(),
19
+ }),
20
+ families: ["read"],
21
+ mcp: { title: "Get Aave Balances", annotations: readOnly },
22
+ handler: async (runtime, input) => {
23
+ const target = resolveWalletFromRuntime(runtime, {
24
+ address: input.address,
25
+ });
26
+ return runtime.celina.aave.getBalances(target, {
27
+ tokens: input.tokens,
28
+ includeZero: input.include_zero,
29
+ });
30
+ },
31
+ },
32
+ {
33
+ name: "supply_aave",
34
+ description: `Supply tokens to Aave V3 on Celo. Supported: ${supported}. Requires CELO_PRIVATE_KEY.`,
35
+ inputSchema: z.object({
36
+ token: aaveTokenField,
37
+ amount: z.string(),
38
+ }),
39
+ families: ["execute"],
40
+ surfaces: ["mcp"],
41
+ requiresEnv: ["CELO_PRIVATE_KEY"],
42
+ mcp: {
43
+ title: "Supply Aave",
44
+ annotations: { destructiveHint: true, openWorldHint: true },
45
+ },
46
+ handler: async (runtime, input) => {
47
+ const aave = runtime.executors?.aave;
48
+ if (!aave)
49
+ throw new Error("Aave executor not configured.");
50
+ const asset = resolveAaveAsset(input.token);
51
+ return aave.supply(asset.symbol, input.amount);
52
+ },
53
+ },
54
+ {
55
+ name: "withdraw_aave",
56
+ description: `Withdraw tokens from Aave V3 on Celo. Supported: ${supported}. Requires CELO_PRIVATE_KEY.`,
57
+ inputSchema: z.object({
58
+ token: aaveTokenField,
59
+ amount: z.string().optional(),
60
+ withdraw_max: z.boolean().optional(),
61
+ }),
62
+ families: ["execute"],
63
+ surfaces: ["mcp"],
64
+ requiresEnv: ["CELO_PRIVATE_KEY"],
65
+ mcp: {
66
+ title: "Withdraw Aave",
67
+ annotations: { destructiveHint: true, openWorldHint: true },
68
+ },
69
+ handler: async (runtime, input) => {
70
+ const aave = runtime.executors?.aave;
71
+ if (!aave)
72
+ throw new Error("Aave executor not configured.");
73
+ const asset = resolveAaveAsset(input.token);
74
+ return aave.withdraw(asset.symbol, input.amount, input.withdraw_max);
75
+ },
76
+ },
77
+ {
78
+ name: "prepare_aave_supply",
79
+ description: "Prepare unsigned Aave V3 supply steps. User signs in wallet.",
80
+ inputSchema: z.object({
81
+ token: z.string(),
82
+ amount: z.string(),
83
+ from: optionalWalletAddressSchema,
84
+ }),
85
+ families: ["prepare"],
86
+ surfaces: ["browser"],
87
+ handler: async (runtime, input) => {
88
+ const sender = resolveWalletFromRuntime(runtime, {
89
+ from: input.from,
90
+ });
91
+ const asset = resolveAaveAsset(input.token);
92
+ return runtime.celina.aave.prepareSupply(sender, asset.symbol, input.amount);
93
+ },
94
+ },
95
+ {
96
+ name: "prepare_aave_withdraw",
97
+ description: "Prepare unsigned Aave V3 withdraw. User signs in wallet. For full/max/all withdrawals set withdraw_max true — do not pass a human amount unless the user names a specific partial amount.",
98
+ inputSchema: z.object({
99
+ token: z.string(),
100
+ amount: z.string().optional(),
101
+ withdraw_max: z.boolean().optional(),
102
+ from: optionalWalletAddressSchema,
103
+ }),
104
+ families: ["prepare"],
105
+ surfaces: ["browser"],
106
+ handler: async (runtime, input) => {
107
+ const sender = resolveWalletFromRuntime(runtime, {
108
+ from: input.from,
109
+ });
110
+ const asset = resolveAaveAsset(input.token);
111
+ return runtime.celina.aave.prepareWithdraw(sender, asset.symbol, input.amount, input.withdraw_max);
112
+ },
113
+ },
114
+ ];
115
+ //# sourceMappingURL=aave.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aave.js","sourceRoot":"","sources":["../../../../src/tools/domains/aave.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEtF,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpD,MAAM,cAAc,GAAG,iBAAiB,CAAC,QAAQ,CAC/C,8BAA8B,SAAS,0BAA0B,CAClE,CAAC;AAEF,MAAM,QAAQ,GAAG;IACf,YAAY,EAAE,IAAI;IAClB,cAAc,EAAE,IAAI;CACZ,CAAC;AAEX,MAAM,CAAC,MAAM,mBAAmB,GAAqB;IACnD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,8OAA8O,SAAS,wEAAwE;QAC5U,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,OAAO,EAAE,2BAA2B;YACpC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;YAC1C,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;SACrC,CAAC;QACF,QAAQ,EAAE,CAAC,MAAM,CAAC;QAClB,GAAG,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,QAAQ,EAAE;QAC1D,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,EAAE;gBAC/C,OAAO,EAAE,KAAK,CAAC,OAA6B;aAC7C,CAAC,CAAC;YACH,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;gBAC7C,MAAM,EAAE,KAAK,CAAC,MAA8B;gBAC5C,WAAW,EAAE,KAAK,CAAC,YAAmC;aACvD,CAAC,CAAC;QACL,CAAC;KACF;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,gDAAgD,SAAS,8BAA8B;QACpG,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,KAAK,EAAE,cAAc;YACrB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;SACnB,CAAC;QACF,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,QAAQ,EAAE,CAAC,KAAK,CAAC;QACjB,WAAW,EAAE,CAAC,kBAAkB,CAAC;QACjC,GAAG,EAAE;YACH,KAAK,EAAE,aAAa;YACpB,WAAW,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;SAC5D;QACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;YACrC,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAe,CAAC,CAAC;YACtD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAgB,CAAC,CAAC;QAC3D,CAAC;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,oDAAoD,SAAS,8BAA8B;QACxG,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,KAAK,EAAE,cAAc;YACrB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC7B,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;SACrC,CAAC;QACF,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,QAAQ,EAAE,CAAC,KAAK,CAAC;QACjB,WAAW,EAAE,CAAC,kBAAkB,CAAC;QACjC,GAAG,EAAE;YACH,KAAK,EAAE,eAAe;YACtB,WAAW,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;SAC5D;QACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;YACrC,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAe,CAAC,CAAC;YACtD,OAAO,IAAI,CAAC,QAAQ,CAClB,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,MAA4B,EAClC,KAAK,CAAC,YAAmC,CAC1C,CAAC;QACJ,CAAC;KACF;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,8DAA8D;QAC3E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;YAClB,IAAI,EAAE,2BAA2B;SAClC,CAAC;QACF,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,EAAE;gBAC/C,IAAI,EAAE,KAAK,CAAC,IAA0B;aACvC,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAe,CAAC,CAAC;YACtD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CACtC,MAAM,EACN,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,MAAgB,CACvB,CAAC;QACJ,CAAC;KACF;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EACT,2LAA2L;QAC7L,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC7B,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;YACpC,IAAI,EAAE,2BAA2B;SAClC,CAAC;QACF,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,EAAE;gBAC/C,IAAI,EAAE,KAAK,CAAC,IAA0B;aACvC,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAe,CAAC,CAAC;YACtD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CACxC,MAAM,EACN,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,MAA4B,EAClC,KAAK,CAAC,YAAmC,CAC1C,CAAC;QACJ,CAAC;KACF;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ToolDefinition } from "../types.js";
2
+ export declare const agentKarmaToolDefinitions: ToolDefinition[];