@oakagentkit/core 0.3.5 → 0.3.6

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 (517) hide show
  1. package/build/dist/api/addresses.d.ts +14 -0
  2. package/build/dist/api/addresses.js +1 -1
  3. package/build/dist/api/chain.js +1 -1
  4. package/build/dist/api/history.d.ts +2 -0
  5. package/build/dist/api/history.js +1 -1
  6. package/build/dist/api/identity-link.js +1 -1
  7. package/build/dist/api/metadata.js +1 -1
  8. package/build/dist/api/modules/beefy/boosts.js +1 -1
  9. package/build/dist/api/modules/beefy/clm.js +1 -1
  10. package/build/dist/api/modules/beefy/guard.js +1 -1
  11. package/build/dist/api/modules/beefy/index.js +1 -1
  12. package/build/dist/api/modules/beefy/liquidity.js +1 -1
  13. package/build/dist/api/modules/beefy/management.js +1 -1
  14. package/build/dist/api/modules/beefy/vaults.js +1 -1
  15. package/build/dist/api/modules/borro/actions.js +1 -1
  16. package/build/dist/api/modules/borro/index.js +1 -1
  17. package/build/dist/api/modules/borro/liquidity.js +1 -1
  18. package/build/dist/api/modules/borro/positions.js +1 -1
  19. package/build/dist/api/modules/borro/reader.js +1 -1
  20. package/build/dist/api/modules/chop/display.js +1 -1
  21. package/build/dist/api/modules/chop/guard.js +1 -1
  22. package/build/dist/api/modules/chop/index.js +1 -1
  23. package/build/dist/api/modules/clanker/extensions.js +1 -1
  24. package/build/dist/api/modules/clanker/index.js +1 -1
  25. package/build/dist/api/modules/clanker/manage.js +1 -1
  26. package/build/dist/api/modules/clanker/pool-config.js +1 -1
  27. package/build/dist/api/modules/clanker/protocol.js +1 -1
  28. package/build/dist/api/modules/clanker/state.js +1 -1
  29. package/build/dist/api/modules/earn/index.js +1 -1
  30. package/build/dist/api/modules/erc8004/common.js +1 -1
  31. package/build/dist/api/modules/erc8004/domain.js +1 -1
  32. package/build/dist/api/modules/erc8004/index.js +1 -1
  33. package/build/dist/api/modules/erc8004/management.js +1 -1
  34. package/build/dist/api/modules/erc8004/reputation.js +1 -1
  35. package/build/dist/api/modules/erc8004/services.js +1 -1
  36. package/build/dist/api/modules/erc8004/thesis.js +1 -1
  37. package/build/dist/api/modules/erc8004/validation.js +1 -1
  38. package/build/dist/api/modules/fobo/index.js +1 -1
  39. package/build/dist/api/modules/fobo/intent.js +1 -1
  40. package/build/dist/api/modules/fobo/steps.js +1 -1
  41. package/build/dist/api/modules/fobo/verify.js +1 -1
  42. package/build/dist/api/modules/grove/index.js +1 -1
  43. package/build/dist/api/modules/heyresearch/builder-feed.js +1 -1
  44. package/build/dist/api/modules/heyresearch/index.js +1 -1
  45. package/build/dist/api/modules/heyresearch/public-reads.js +1 -1
  46. package/build/dist/api/modules/heyresearch/token-facts.js +1 -1
  47. package/build/dist/api/modules/hoodag/chain-reads.js +1 -1
  48. package/build/dist/api/modules/hoodag/index.js +1 -1
  49. package/build/dist/api/modules/hoodag/management.js +1 -1
  50. package/build/dist/api/modules/hoodag/public-reads.js +1 -1
  51. package/build/dist/api/modules/hoodag/reconstruct.js +1 -1
  52. package/build/dist/api/modules/hoodlock/airdrop.js +1 -1
  53. package/build/dist/api/modules/hoodlock/buyback.js +1 -1
  54. package/build/dist/api/modules/hoodlock/commerce.js +1 -1
  55. package/build/dist/api/modules/hoodlock/fee.js +1 -1
  56. package/build/dist/api/modules/hoodlock/guard.js +1 -1
  57. package/build/dist/api/modules/hoodlock/index.js +1 -1
  58. package/build/dist/api/modules/hoodlock/lifecycle.js +1 -1
  59. package/build/dist/api/modules/hoodlock/locks-burn.js +1 -1
  60. package/build/dist/api/modules/hoodlock/public.js +1 -1
  61. package/build/dist/api/modules/hookr/actions.d.ts +39 -2
  62. package/build/dist/api/modules/hookr/actions.js +1 -1
  63. package/build/dist/api/modules/hookr/addons.js +1 -1
  64. package/build/dist/api/modules/hookr/agent-gate.d.ts +14 -2
  65. package/build/dist/api/modules/hookr/agent-gate.js +1 -1
  66. package/build/dist/api/modules/hookr/agent-link.d.ts +17 -0
  67. package/build/dist/api/modules/hookr/agent-link.js +1 -0
  68. package/build/dist/api/modules/hookr/api-client.d.ts +9 -0
  69. package/build/dist/api/modules/hookr/api-client.js +1 -0
  70. package/build/dist/api/modules/hookr/blocks/advisory.d.ts +41 -0
  71. package/build/dist/api/modules/hookr/blocks/advisory.js +1 -0
  72. package/build/dist/api/modules/hookr/blocks/buy-sell-block.d.ts +7 -0
  73. package/build/dist/api/modules/hookr/blocks/buy-sell-block.js +1 -0
  74. package/build/dist/api/modules/hookr/blocks/core-settings.d.ts +6 -0
  75. package/build/dist/api/modules/hookr/blocks/core-settings.js +1 -0
  76. package/build/dist/api/modules/hookr/blocks/exit-clock.d.ts +14 -0
  77. package/build/dist/api/modules/hookr/blocks/exit-clock.js +1 -0
  78. package/build/dist/api/modules/hookr/blocks/holder-pot.d.ts +30 -0
  79. package/build/dist/api/modules/hookr/blocks/holder-pot.js +1 -0
  80. package/build/dist/api/modules/hookr/blocks/managed-fee.d.ts +96 -0
  81. package/build/dist/api/modules/hookr/blocks/managed-fee.js +1 -0
  82. package/build/dist/api/modules/hookr/blocks/market-guard.d.ts +116 -0
  83. package/build/dist/api/modules/hookr/blocks/market-guard.js +1 -0
  84. package/build/dist/api/modules/hookr/blocks/market-hours-fee.d.ts +87 -0
  85. package/build/dist/api/modules/hookr/blocks/market-hours-fee.js +1 -0
  86. package/build/dist/api/modules/hookr/blocks/pay-later.d.ts +199 -0
  87. package/build/dist/api/modules/hookr/blocks/pay-later.js +1 -0
  88. package/build/dist/api/modules/hookr/blocks/sandwich-guard.d.ts +3 -0
  89. package/build/dist/api/modules/hookr/blocks/sandwich-guard.js +1 -0
  90. package/build/dist/api/modules/hookr/blocks/storm-fee.d.ts +3 -0
  91. package/build/dist/api/modules/hookr/blocks/storm-fee.js +1 -0
  92. package/build/dist/api/modules/hookr/blocks/swap-cut.d.ts +3 -0
  93. package/build/dist/api/modules/hookr/blocks/swap-cut.js +1 -0
  94. package/build/dist/api/modules/hookr/blocks/swap-reward-mint.d.ts +125 -0
  95. package/build/dist/api/modules/hookr/blocks/swap-reward-mint.js +1 -0
  96. package/build/dist/api/modules/hookr/blocks/wallet-cap.d.ts +3 -0
  97. package/build/dist/api/modules/hookr/blocks/wallet-cap.js +1 -0
  98. package/build/dist/api/modules/hookr/blocks/zap-source.d.ts +161 -0
  99. package/build/dist/api/modules/hookr/blocks/zap-source.js +1 -0
  100. package/build/dist/api/modules/hookr/blocks/zap-target.d.ts +51 -0
  101. package/build/dist/api/modules/hookr/blocks/zap-target.js +1 -0
  102. package/build/dist/api/modules/hookr/claims.d.ts +53 -0
  103. package/build/dist/api/modules/hookr/claims.js +1 -0
  104. package/build/dist/api/modules/hookr/contracts.d.ts +3 -1
  105. package/build/dist/api/modules/hookr/contracts.js +1 -1
  106. package/build/dist/api/modules/hookr/create-cancel.js +1 -1
  107. package/build/dist/api/modules/hookr/discovery.d.ts +2 -2
  108. package/build/dist/api/modules/hookr/discovery.js +1 -1
  109. package/build/dist/api/modules/hookr/fill-bounty.d.ts +2 -0
  110. package/build/dist/api/modules/hookr/fill-bounty.js +1 -1
  111. package/build/dist/api/modules/hookr/gas.d.ts +48 -0
  112. package/build/dist/api/modules/hookr/gas.js +1 -0
  113. package/build/dist/api/modules/hookr/gates.d.ts +51 -0
  114. package/build/dist/api/modules/hookr/gates.js +1 -0
  115. package/build/dist/api/modules/hookr/hook-blocks.d.ts +304 -0
  116. package/build/dist/api/modules/hookr/hook-blocks.js +1 -0
  117. package/build/dist/api/modules/hookr/index.d.ts +4 -2
  118. package/build/dist/api/modules/hookr/index.js +1 -1
  119. package/build/dist/api/modules/hookr/jobs.d.ts +7 -0
  120. package/build/dist/api/modules/hookr/jobs.js +1 -0
  121. package/build/dist/api/modules/hookr/launch-options.d.ts +52 -3
  122. package/build/dist/api/modules/hookr/launch-options.js +1 -1
  123. package/build/dist/api/modules/hookr/launch-profile.d.ts +8 -0
  124. package/build/dist/api/modules/hookr/launch-profile.js +1 -1
  125. package/build/dist/api/modules/hookr/launch-receipt.js +1 -1
  126. package/build/dist/api/modules/hookr/launch.d.ts +24 -0
  127. package/build/dist/api/modules/hookr/launch.js +1 -1
  128. package/build/dist/api/modules/hookr/liquidity.js +1 -1
  129. package/build/dist/api/modules/hookr/lp-positions.js +1 -1
  130. package/build/dist/api/modules/hookr/lp-reads.js +1 -1
  131. package/build/dist/api/modules/hookr/lp-receipt.js +1 -1
  132. package/build/dist/api/modules/hookr/lp-state.d.ts +90 -2
  133. package/build/dist/api/modules/hookr/lp-state.js +1 -1
  134. package/build/dist/api/modules/hookr/pay-later-actions.d.ts +52 -0
  135. package/build/dist/api/modules/hookr/pay-later-actions.js +1 -0
  136. package/build/dist/api/modules/hookr/pins.d.ts +5 -0
  137. package/build/dist/api/modules/hookr/pins.js +1 -1
  138. package/build/dist/api/modules/hookr/pm-liquidity.d.ts +215 -0
  139. package/build/dist/api/modules/hookr/pm-liquidity.js +1 -0
  140. package/build/dist/api/modules/hookr/public-reads.d.ts +1 -1
  141. package/build/dist/api/modules/hookr/public-reads.js +1 -1
  142. package/build/dist/api/modules/hookr/read-utils.js +1 -1
  143. package/build/dist/api/modules/hookr/relay.js +1 -1
  144. package/build/dist/api/modules/hookr/revenue.d.ts +4 -1
  145. package/build/dist/api/modules/hookr/revenue.js +1 -1
  146. package/build/dist/api/modules/hookr/scan.d.ts +25 -0
  147. package/build/dist/api/modules/hookr/scan.js +1 -0
  148. package/build/dist/api/modules/hookr/swap.d.ts +161 -0
  149. package/build/dist/api/modules/hookr/swap.js +1 -0
  150. package/build/dist/api/modules/kyberswap/index.js +1 -1
  151. package/build/dist/api/modules/kyberswap/source-pools.js +1 -1
  152. package/build/dist/api/modules/layerbank/abi.js +1 -1
  153. package/build/dist/api/modules/layerbank/actions.js +1 -1
  154. package/build/dist/api/modules/layerbank/checks.js +1 -1
  155. package/build/dist/api/modules/layerbank/index.js +1 -1
  156. package/build/dist/api/modules/layerbank/merkl.js +1 -1
  157. package/build/dist/api/modules/layerbank/reader.js +1 -1
  158. package/build/dist/api/modules/layerbank/reserve.js +1 -1
  159. package/build/dist/api/modules/lighter/index.js +1 -1
  160. package/build/dist/api/modules/longbow/administration.js +1 -1
  161. package/build/dist/api/modules/longbow/analytics.js +1 -1
  162. package/build/dist/api/modules/longbow/fixed.js +1 -1
  163. package/build/dist/api/modules/longbow/index.js +1 -1
  164. package/build/dist/api/modules/longbow/nft.js +1 -1
  165. package/build/dist/api/modules/longbow/rebates.js +1 -1
  166. package/build/dist/api/modules/longbow/staking.js +1 -1
  167. package/build/dist/api/modules/meridian/index.js +1 -1
  168. package/build/dist/api/modules/meridian/markets.js +1 -1
  169. package/build/dist/api/modules/meridian/rfq.js +1 -1
  170. package/build/dist/api/modules/merkl/discovery.js +1 -1
  171. package/build/dist/api/modules/merkl/index.js +1 -1
  172. package/build/dist/api/modules/merkl/manage.js +1 -1
  173. package/build/dist/api/modules/merkl/protocol.js +1 -1
  174. package/build/dist/api/modules/morpho/allocator.js +1 -1
  175. package/build/dist/api/modules/morpho/bundles.js +1 -1
  176. package/build/dist/api/modules/morpho/in-kind.js +1 -1
  177. package/build/dist/api/modules/morpho/index.js +1 -1
  178. package/build/dist/api/modules/morpho/local-guard.js +1 -1
  179. package/build/dist/api/modules/morpho/midnight.js +1 -1
  180. package/build/dist/api/modules/morpho/protocol.js +1 -1
  181. package/build/dist/api/modules/morpho/vault-management.js +1 -1
  182. package/build/dist/api/modules/morpho/vault-tools.js +1 -1
  183. package/build/dist/api/modules/morpho/vault-v2.js +1 -1
  184. package/build/dist/api/modules/netnet/card-plan.js +1 -1
  185. package/build/dist/api/modules/netnet/card-read.js +1 -1
  186. package/build/dist/api/modules/netnet/card-recovery.js +1 -1
  187. package/build/dist/api/modules/netnet/desk-action.js +1 -1
  188. package/build/dist/api/modules/netnet/desk-read.js +1 -1
  189. package/build/dist/api/modules/netnet/financial.js +1 -1
  190. package/build/dist/api/modules/netnet/index.js +1 -1
  191. package/build/dist/api/modules/netnet/staking.js +1 -1
  192. package/build/dist/api/modules/orbio/index.js +1 -1
  193. package/build/dist/api/modules/orbio/positions.js +1 -1
  194. package/build/dist/api/modules/pendle/costs.js +1 -1
  195. package/build/dist/api/modules/pendle/index.js +1 -1
  196. package/build/dist/api/modules/pendle/markets.js +1 -1
  197. package/build/dist/api/modules/pendle/positions.js +1 -1
  198. package/build/dist/api/modules/pendle/pricecheck.js +1 -1
  199. package/build/dist/api/modules/pendle/reader.js +1 -1
  200. package/build/dist/api/modules/pendle/redeem.js +1 -1
  201. package/build/dist/api/modules/pendle/trade.js +1 -1
  202. package/build/dist/api/modules/pendle/validate.js +1 -1
  203. package/build/dist/api/modules/pendle/verify.js +1 -1
  204. package/build/dist/api/modules/pons/claim.js +1 -1
  205. package/build/dist/api/modules/pons/index.js +1 -1
  206. package/build/dist/api/modules/pons/launch-status.js +1 -1
  207. package/build/dist/api/modules/pons/prices.js +1 -1
  208. package/build/dist/api/modules/pons/reads.js +1 -1
  209. package/build/dist/api/modules/pons/swap-terms.js +1 -1
  210. package/build/dist/api/modules/pons/trade.js +1 -1
  211. package/build/dist/api/modules/poolstrade/index.js +1 -1
  212. package/build/dist/api/modules/priors/coverage.js +1 -1
  213. package/build/dist/api/modules/priors/discovery.js +1 -1
  214. package/build/dist/api/modules/priors/features.js +1 -1
  215. package/build/dist/api/modules/priors/holdings.js +1 -1
  216. package/build/dist/api/modules/priors/index.js +1 -1
  217. package/build/dist/api/modules/priors/integration.js +1 -1
  218. package/build/dist/api/modules/priors/market.js +1 -1
  219. package/build/dist/api/modules/priors/pt.js +1 -1
  220. package/build/dist/api/modules/priors/savings-exit.js +1 -1
  221. package/build/dist/api/modules/priors/starter-line.js +1 -1
  222. package/build/dist/api/modules/priors/stock-swap.js +1 -1
  223. package/build/dist/api/modules/raeto/index.js +1 -1
  224. package/build/dist/api/modules/relay/bootstrap.js +1 -1
  225. package/build/dist/api/modules/relay/discovery.js +1 -1
  226. package/build/dist/api/modules/relay/inbound.js +1 -1
  227. package/build/dist/api/modules/relay/index.js +1 -1
  228. package/build/dist/api/modules/relay/outbound-status.js +1 -1
  229. package/build/dist/api/modules/relay/reads.js +1 -1
  230. package/build/dist/api/modules/spark/actions.js +1 -1
  231. package/build/dist/api/modules/spark/details.js +1 -1
  232. package/build/dist/api/modules/spark/index.js +1 -1
  233. package/build/dist/api/modules/spark/management.js +1 -1
  234. package/build/dist/api/modules/steakhouse/analytics.js +1 -1
  235. package/build/dist/api/modules/steakhouse/erc4626.js +1 -1
  236. package/build/dist/api/modules/steakhouse/index.js +1 -1
  237. package/build/dist/api/modules/steakhouse/local-guard.js +1 -1
  238. package/build/dist/api/modules/steakhouse/management.js +1 -1
  239. package/build/dist/api/modules/steakhouse/v2-exit.js +1 -1
  240. package/build/dist/api/modules/tickerspring/basket-routes.js +1 -1
  241. package/build/dist/api/modules/tickerspring/contract-reads.js +1 -1
  242. package/build/dist/api/modules/tickerspring/discovery.js +1 -1
  243. package/build/dist/api/modules/tickerspring/exit-preview.js +1 -1
  244. package/build/dist/api/modules/tickerspring/guards.js +1 -1
  245. package/build/dist/api/modules/tickerspring/index.js +1 -1
  246. package/build/dist/api/modules/tickerspring/journeys.js +1 -1
  247. package/build/dist/api/modules/tickerspring/ladder.js +1 -1
  248. package/build/dist/api/modules/tickerspring/maker.js +1 -1
  249. package/build/dist/api/modules/tickerspring/order-accounting.js +1 -1
  250. package/build/dist/api/modules/tickerspring/research.js +1 -1
  251. package/build/dist/api/modules/tickerspring/strategies.js +1 -1
  252. package/build/dist/api/modules/uniswap/auction-create.js +1 -1
  253. package/build/dist/api/modules/uniswap/auction.js +1 -1
  254. package/build/dist/api/modules/uniswap/batch.js +1 -1
  255. package/build/dist/api/modules/uniswap/common.js +1 -1
  256. package/build/dist/api/modules/uniswap/fees.js +1 -1
  257. package/build/dist/api/modules/uniswap/index.js +1 -1
  258. package/build/dist/api/modules/uniswap/local-guard.js +1 -1
  259. package/build/dist/api/modules/uniswap/oracle.js +1 -1
  260. package/build/dist/api/modules/uniswap/pool-math.js +1 -1
  261. package/build/dist/api/modules/uniswap/pools.js +1 -1
  262. package/build/dist/api/modules/uniswap/position.js +1 -1
  263. package/build/dist/api/modules/uniswap/protocol.js +1 -1
  264. package/build/dist/api/modules/uniswap/quote-guard.js +1 -1
  265. package/build/dist/api/modules/uniswap/stock-prices.d.ts +25 -0
  266. package/build/dist/api/modules/uniswap/stock-prices.js +1 -1
  267. package/build/dist/api/modules/uniswap/stocks.js +1 -1
  268. package/build/dist/api/modules/uniswap/token-jar.js +1 -1
  269. package/build/dist/api/modules/uniswap/trade-batch.js +1 -1
  270. package/build/dist/api/modules/uniswap/trade.js +1 -1
  271. package/build/dist/api/modules/uniswap/v2.js +1 -1
  272. package/build/dist/api/modules/uniswap/v3.js +1 -1
  273. package/build/dist/api/modules/uniswap/v4.js +1 -1
  274. package/build/dist/api/modules/uniswap/wrap.js +1 -1
  275. package/build/dist/api/modules/upoch/index.js +1 -1
  276. package/build/dist/api/modules/upoch/reads.js +1 -1
  277. package/build/dist/api/modules/velora/claims.js +1 -1
  278. package/build/dist/api/modules/velora/delta-reads.js +1 -1
  279. package/build/dist/api/modules/velora/index.js +1 -1
  280. package/build/dist/api/modules/wormhole/index.js +1 -1
  281. package/build/dist/api/modules/wormhole/scan-text.d.ts +1 -1
  282. package/build/dist/api/positions.js +1 -1
  283. package/build/dist/api/pricenote.js +1 -1
  284. package/build/dist/api/prices.js +1 -1
  285. package/build/dist/api/rpc.js +1 -1
  286. package/build/dist/api/send.js +1 -1
  287. package/build/dist/api/signing-registry.js +1 -1
  288. package/build/dist/api/signing.js +1 -1
  289. package/build/dist/api/simulate.js +1 -1
  290. package/build/dist/api/swap.d.ts +2 -0
  291. package/build/dist/api/swap.js +1 -1
  292. package/build/dist/api/tokens.d.ts +9 -1
  293. package/build/dist/api/tokens.js +1 -1
  294. package/build/dist/api/tool-policy.js +1 -1
  295. package/build/dist/api/universal-router.js +1 -1
  296. package/build/dist/api/usd-estimate.js +1 -1
  297. package/build/dist/chunks/{DMDOSHV7.js → 266VIESP.js} +1 -1
  298. package/build/dist/chunks/{R66NSNNQ.js → 2BKZLF5A.js} +1 -1
  299. package/build/dist/chunks/{HFVXNKA5.js → 2BM2WX2G.js} +1 -1
  300. package/build/dist/chunks/{OY5W7ZSL.js → 2H2OZE6X.js} +1 -1
  301. package/build/dist/chunks/{E76Z2TT4.js → 2QQ5CGQI.js} +1 -1
  302. package/build/dist/chunks/{4PLLS6CT.js → 2VYA6WIN.js} +1 -1
  303. package/build/dist/chunks/{LCH6F5HT.js → 342OZP53.js} +1 -1
  304. package/build/dist/chunks/{C57DITTF.js → 3HF6WE4L.js} +1 -1
  305. package/build/dist/chunks/3M7RMROZ.js +1 -0
  306. package/build/dist/chunks/3RGED2KO.js +1 -0
  307. package/build/dist/chunks/{4HQEJHCD.js → 3XIJCHT7.js} +1 -1
  308. package/build/dist/chunks/3XY44BP5.js +1 -0
  309. package/build/dist/chunks/3YNXQ3EZ.js +1 -0
  310. package/build/dist/chunks/45QP74CE.js +1 -0
  311. package/build/dist/chunks/{SX5YNFHG.js → 4GAU3JLN.js} +1 -1
  312. package/build/dist/chunks/{Y2QADJOB.js → 4P6DRKY3.js} +1 -1
  313. package/build/dist/chunks/{W3DGFMQE.js → 4RTXP2YP.js} +1 -1
  314. package/build/dist/chunks/{QMIH6HXH.js → 4SXRXNHG.js} +1 -1
  315. package/build/dist/chunks/{ZTKT3ZQK.js → 53VBLEYS.js} +1 -1
  316. package/build/dist/chunks/{FRT6AC6M.js → 5677LZOV.js} +1 -1
  317. package/build/dist/chunks/{ADIPEGNN.js → 5AO2QPWE.js} +1 -1
  318. package/build/dist/chunks/{GQITAJVF.js → 5BPFF7NX.js} +1 -1
  319. package/build/dist/chunks/{JDHPMS7X.js → 5DWQUEBA.js} +1 -1
  320. package/build/dist/chunks/{WAKZWSHB.js → 5KKAN7XQ.js} +1 -1
  321. package/build/dist/chunks/{VVAM3EAK.js → 5N6YJFFA.js} +1 -1
  322. package/build/dist/chunks/{QIB6OMQV.js → 5O67QQIY.js} +1 -1
  323. package/build/dist/chunks/5PNFV7HH.js +1 -0
  324. package/build/dist/chunks/5RAZFRO4.js +1 -0
  325. package/build/dist/chunks/{FAH7FKUT.js → 5UWVXEPD.js} +1 -1
  326. package/build/dist/chunks/5VKVAUFQ.js +1 -0
  327. package/build/dist/chunks/5Y457HYC.js +1 -0
  328. package/build/dist/chunks/64LAWFBE.js +1 -0
  329. package/build/dist/chunks/{3BQ5XHDJ.js → 6EWSLHXL.js} +1 -1
  330. package/build/dist/chunks/{6F527FLN.js → 6HNQAYBM.js} +1 -1
  331. package/build/dist/chunks/{FUP53K6G.js → 6LDC5D2S.js} +1 -1
  332. package/build/dist/chunks/{TZ7S5KRB.js → 6QXTL65K.js} +1 -1
  333. package/build/dist/chunks/6RVAV6BB.js +1 -0
  334. package/build/dist/chunks/{WSILNJS2.js → 6STUQOFL.js} +1 -1
  335. package/build/dist/chunks/{RUHNLNVX.js → 6Y2546JA.js} +1 -1
  336. package/build/dist/chunks/{4Z3IGMU6.js → 7AYP4ATZ.js} +1 -1
  337. package/build/dist/chunks/{YGW4ODAP.js → 7EPU3XGY.js} +1 -1
  338. package/build/dist/chunks/7GL547YZ.js +1 -0
  339. package/build/dist/chunks/7JTXYMNP.js +1 -0
  340. package/build/dist/chunks/{A3BJSQ23.js → 7VU5VCTL.js} +1 -1
  341. package/build/dist/chunks/{Z7FGEWO2.js → 7WXAS54T.js} +1 -1
  342. package/build/dist/chunks/{WQ2XTDHO.js → 7X5JVF3F.js} +1 -1
  343. package/build/dist/chunks/{DRLBTB4E.js → A72ADVYF.js} +1 -1
  344. package/build/dist/chunks/{ANIF3JMV.js → AG66NM3J.js} +1 -1
  345. package/build/dist/chunks/AODUTN65.js +1 -0
  346. package/build/dist/chunks/{DBOGRUPS.js → AONO47JX.js} +1 -1
  347. package/build/dist/chunks/{JTPHZCO3.js → AQJLEG6B.js} +1 -1
  348. package/build/dist/chunks/AZBTNUXF.js +1 -0
  349. package/build/dist/chunks/{TOIKOIY6.js → B5BU645H.js} +1 -1
  350. package/build/dist/chunks/{ZX43P4BK.js → B75SS7H6.js} +1 -1
  351. package/build/dist/chunks/{GBIBRYOV.js → B7HVPHSS.js} +1 -1
  352. package/build/dist/chunks/{LT5P6PZW.js → B7WZJHIJ.js} +1 -1
  353. package/build/dist/chunks/{3A2IKFTV.js → BIFANUTV.js} +1 -1
  354. package/build/dist/chunks/BM4KHOFB.js +1 -0
  355. package/build/dist/chunks/{N65J3L2H.js → BSV65PCA.js} +1 -1
  356. package/build/dist/chunks/{ZVY7GGSP.js → BW755PNH.js} +1 -1
  357. package/build/dist/chunks/{VXCGMALF.js → BWE5PXRE.js} +1 -1
  358. package/build/dist/chunks/{7U62MMUQ.js → BY2OWKZB.js} +1 -1
  359. package/build/dist/chunks/{CNDIAF3P.js → C2H3BWN5.js} +1 -1
  360. package/build/dist/chunks/{F7MGYRPU.js → CCPG6PRL.js} +1 -1
  361. package/build/dist/chunks/{OI3N4EW4.js → CG7ABZXH.js} +1 -1
  362. package/build/dist/chunks/CJMVRV34.js +1 -0
  363. package/build/dist/chunks/CQPIR6ER.js +1 -0
  364. package/build/dist/chunks/{A4K5GXVO.js → CR7DPGI6.js} +1 -1
  365. package/build/dist/chunks/{UUF4Z6K6.js → CVVNAFUE.js} +1 -1
  366. package/build/dist/chunks/{MI5HZDMH.js → D6JOXK7Q.js} +1 -1
  367. package/build/dist/chunks/{2PS4GCOZ.js → DJRS3TR5.js} +1 -1
  368. package/build/dist/chunks/{IZFED3R2.js → DLNDJZR4.js} +1 -1
  369. package/build/dist/chunks/{MQXSCNUL.js → DPSFR3ZS.js} +1 -1
  370. package/build/dist/chunks/{LKUZAJPZ.js → DV2HVFTM.js} +1 -1
  371. package/build/dist/chunks/{NMJVQX5M.js → DWRRIFXS.js} +1 -1
  372. package/build/dist/chunks/{3ZH5SOC2.js → EFOC337C.js} +1 -1
  373. package/build/dist/chunks/EHQRAA3R.js +1 -0
  374. package/build/dist/chunks/{A4FLWHLP.js → EJIP7RBG.js} +1 -1
  375. package/build/dist/chunks/EWZFZUVF.js +1 -0
  376. package/build/dist/chunks/{OB7BFDOV.js → EYE3ZAJB.js} +1 -1
  377. package/build/dist/chunks/{MQ5F2VOK.js → EZUQMTLE.js} +1 -1
  378. package/build/dist/chunks/{O2QBSINK.js → F36IA5RI.js} +1 -1
  379. package/build/dist/chunks/{XTXXWRN2.js → F74ARK4H.js} +1 -1
  380. package/build/dist/chunks/{HPS4KOU4.js → FGGDAAHW.js} +1 -1
  381. package/build/dist/chunks/FMEO7RX7.js +1 -0
  382. package/build/dist/chunks/{FHB7QYJO.js → FN6XY6ET.js} +1 -1
  383. package/build/dist/chunks/G4IX4CYN.js +1 -0
  384. package/build/dist/chunks/G53U6Y4L.js +1 -0
  385. package/build/dist/chunks/{HDBZZOHJ.js → GBIL2I2K.js} +1 -1
  386. package/build/dist/chunks/{MJGEGNDU.js → GCFHKJIO.js} +1 -1
  387. package/build/dist/chunks/{O5QTITN6.js → GRHBE4MQ.js} +1 -1
  388. package/build/dist/chunks/GTJ6LBGB.js +1 -0
  389. package/build/dist/chunks/GV6Z3MET.js +1 -0
  390. package/build/dist/chunks/{GK3D7OKG.js → GVCNTGLC.js} +1 -1
  391. package/build/dist/chunks/GX2RCAHG.js +1 -0
  392. package/build/dist/chunks/{7TRO6MBQ.js → H5KU4DUU.js} +1 -1
  393. package/build/dist/chunks/H7ZJ7LAB.js +1 -0
  394. package/build/dist/chunks/{DCGNVMKG.js → HC3QFA5I.js} +1 -1
  395. package/build/dist/chunks/{6CKCZJ3F.js → HEQBTHFS.js} +1 -1
  396. package/build/dist/chunks/{C76D54YG.js → HGSFRN57.js} +1 -1
  397. package/build/dist/chunks/HJI7KO6F.js +1 -0
  398. package/build/dist/chunks/{KO7ANIKY.js → HNBYPHTA.js} +1 -1
  399. package/build/dist/chunks/{MSRCJ2BS.js → HPBTSJW7.js} +1 -1
  400. package/build/dist/chunks/HPO673QQ.js +1 -0
  401. package/build/dist/chunks/{4IOHSX3Z.js → HRGLFGFL.js} +1 -1
  402. package/build/dist/chunks/{DGDMRATN.js → ICHT3H3W.js} +1 -1
  403. package/build/dist/chunks/IJVBCEA2.js +1 -0
  404. package/build/dist/chunks/{N742W5KX.js → IKVRFAUP.js} +1 -1
  405. package/build/dist/chunks/IM7ZF7XZ.js +1 -0
  406. package/build/dist/chunks/{I4473OC6.js → IMD33NQS.js} +1 -1
  407. package/build/dist/chunks/IR7KDBFU.js +1 -0
  408. package/build/dist/chunks/{X24YTJST.js → IY7FWTAL.js} +1 -1
  409. package/build/dist/chunks/IYOWMW5B.js +1 -0
  410. package/build/dist/chunks/J2J73XYU.js +1 -0
  411. package/build/dist/chunks/JCS24YBB.js +1 -0
  412. package/build/dist/chunks/JQVTHPUO.js +1 -0
  413. package/build/dist/chunks/{USGMGKAG.js → JTWJT2O3.js} +1 -1
  414. package/build/dist/chunks/{W7BFM6CK.js → K4CYAWNL.js} +1 -1
  415. package/build/dist/chunks/{7VH6JQ2H.js → K5C6QBOO.js} +1 -1
  416. package/build/dist/chunks/K5OXLIPK.js +1 -0
  417. package/build/dist/chunks/{ZKBOPZH5.js → K6GECT3F.js} +1 -1
  418. package/build/dist/chunks/{6LVHN33V.js → KB2JWQZ4.js} +1 -1
  419. package/build/dist/chunks/{YW4W3LPQ.js → KHLM6NIZ.js} +1 -1
  420. package/build/dist/chunks/{OIQTZOBN.js → KKGHXNM4.js} +1 -1
  421. package/build/dist/chunks/{SUNTJ6IU.js → KYANIEPX.js} +1 -1
  422. package/build/dist/chunks/{JJSCDDQO.js → L3IAEXQR.js} +1 -1
  423. package/build/dist/chunks/{ZZ6FZGHF.js → L4UFGM7M.js} +1 -1
  424. package/build/dist/chunks/{YWVPK3DV.js → L76P6WIH.js} +1 -1
  425. package/build/dist/chunks/{QMNUB2GM.js → LBT6WR4U.js} +1 -1
  426. package/build/dist/chunks/LD3A2KLN.js +1 -0
  427. package/build/dist/chunks/{WRUTW6CG.js → LFSNAQ7V.js} +1 -1
  428. package/build/dist/chunks/{ZQPC54J5.js → LKRAUTYI.js} +1 -1
  429. package/build/dist/chunks/{23HNDJ76.js → M2SWILNG.js} +1 -1
  430. package/build/dist/chunks/{IT2JLILU.js → MFKDNAHB.js} +1 -1
  431. package/build/dist/chunks/MFQTBUSD.js +1 -0
  432. package/build/dist/chunks/{V4UJMUIB.js → MLN5KTG7.js} +1 -1
  433. package/build/dist/chunks/{S4JUFCT4.js → MSQNOK3I.js} +1 -1
  434. package/build/dist/chunks/{O4P5IQCP.js → MXI7LX2F.js} +1 -1
  435. package/build/dist/chunks/N6YNJGEF.js +1 -0
  436. package/build/dist/chunks/{DXAPKN7H.js → NLC36QHL.js} +1 -1
  437. package/build/dist/chunks/NUTTPUYJ.js +1 -0
  438. package/build/dist/chunks/{O4S6XAYV.js → O7L55XM3.js} +1 -1
  439. package/build/dist/chunks/{NAO7VWZF.js → OCIEVYPR.js} +1 -1
  440. package/build/dist/chunks/{4NBXBKOX.js → OD7CY6BY.js} +1 -1
  441. package/build/dist/chunks/{RUTSEGGD.js → OHZHQSCA.js} +1 -1
  442. package/build/dist/chunks/{E47UYYK4.js → OIGTTRN5.js} +1 -1
  443. package/build/dist/chunks/{2I7XHRTI.js → P6JE2NRA.js} +1 -1
  444. package/build/dist/chunks/PD5NXIRT.js +1 -0
  445. package/build/dist/chunks/{TXGZ6NWN.js → PG7HZIZL.js} +1 -1
  446. package/build/dist/chunks/{VREGY7E6.js → PMFR47H3.js} +1 -1
  447. package/build/dist/chunks/{PV7FEVBD.js → PXVF2SHU.js} +1 -1
  448. package/build/dist/chunks/{2FOI2625.js → Q43WPRYU.js} +1 -1
  449. package/build/dist/chunks/QAAKUIWE.js +1 -0
  450. package/build/dist/chunks/{ZXFJKW6H.js → QAVP3CWL.js} +1 -1
  451. package/build/dist/chunks/{YXXK6EPI.js → QBHY2QRC.js} +1 -1
  452. package/build/dist/chunks/{ELHRXA5U.js → QFK335LC.js} +1 -1
  453. package/build/dist/chunks/{3PHJUFU2.js → QFUSCK5C.js} +1 -1
  454. package/build/dist/chunks/{IPU656WB.js → QKH7ED6B.js} +1 -1
  455. package/build/dist/chunks/{XW3VGWXK.js → QMWHQRYC.js} +1 -1
  456. package/build/dist/chunks/{ZXRIJG6H.js → QP2B7AYX.js} +1 -1
  457. package/build/dist/chunks/{TJU644I7.js → QZ6V6J6W.js} +1 -1
  458. package/build/dist/chunks/{MDLJFCT4.js → R5Z4HPCA.js} +1 -1
  459. package/build/dist/chunks/RKJFSDGV.js +1 -0
  460. package/build/dist/chunks/RKS3M7L5.js +1 -0
  461. package/build/dist/chunks/{GDOHHXNH.js → RLX6YTNT.js} +1 -1
  462. package/build/dist/chunks/{IZP3EKKS.js → RYEQIZ2H.js} +1 -1
  463. package/build/dist/chunks/{USEF3QKG.js → S432S6NA.js} +1 -1
  464. package/build/dist/chunks/{2OVJ2BTJ.js → SEXKWYUM.js} +1 -1
  465. package/build/dist/chunks/{KKTOBXIT.js → SRYX65GZ.js} +1 -1
  466. package/build/dist/chunks/{GKUPC4DO.js → TMENUIBC.js} +1 -1
  467. package/build/dist/chunks/{BSX4LFYI.js → TNHU5UBQ.js} +1 -1
  468. package/build/dist/chunks/{PDPTJMTJ.js → TT2ST3Q3.js} +1 -1
  469. package/build/dist/chunks/TTBB6EFN.js +1 -0
  470. package/build/dist/chunks/{FRVCSDKU.js → TWVDWNTG.js} +1 -1
  471. package/build/dist/chunks/TZG7HTVM.js +1 -0
  472. package/build/dist/chunks/{OVM4QIET.js → U4MSIH4G.js} +1 -1
  473. package/build/dist/chunks/{G5AMH4IP.js → UGFRBJDQ.js} +1 -1
  474. package/build/dist/chunks/{OB3YMTDI.js → UIVOYAO2.js} +1 -1
  475. package/build/dist/chunks/{XRDLMTBJ.js → UMY6SP7C.js} +1 -1
  476. package/build/dist/chunks/UNBRUWSV.js +1 -0
  477. package/build/dist/chunks/{LGLWEGPY.js → UPX3OWKA.js} +1 -1
  478. package/build/dist/chunks/{TGXEKBLV.js → URTQNYWU.js} +1 -1
  479. package/build/dist/chunks/{4RCYYN6O.js → V7HTGO23.js} +1 -1
  480. package/build/dist/chunks/{HZSYMGJ2.js → VS7ZA4OF.js} +1 -1
  481. package/build/dist/chunks/{BJ2U2VXJ.js → VTWAVH74.js} +1 -1
  482. package/build/dist/chunks/{LZM3DO5Q.js → W5GWK72I.js} +1 -1
  483. package/build/dist/chunks/{65OITTDL.js → W73SLWBT.js} +1 -1
  484. package/build/dist/chunks/{3YH5B5NQ.js → WUONMIA2.js} +1 -1
  485. package/build/dist/chunks/{XL3W7DAQ.js → X3BB6WME.js} +1 -1
  486. package/build/dist/chunks/{XADHV2DT.js → X53QVHBC.js} +1 -1
  487. package/build/dist/chunks/{GBPB7JIB.js → XSQJOOEY.js} +1 -1
  488. package/build/dist/chunks/XUDQYSPU.js +1 -0
  489. package/build/dist/chunks/{S37D7HOK.js → XWZ5SL5Q.js} +1 -1
  490. package/build/dist/chunks/{NIWAVMDR.js → XXLQDQEX.js} +1 -1
  491. package/build/dist/chunks/{QBNASL3T.js → Y5T36EEU.js} +1 -1
  492. package/build/dist/chunks/{R73R4KN3.js → YBLJ2MCR.js} +1 -1
  493. package/build/dist/chunks/ZSGW2ZSO.js +1 -0
  494. package/build/dist/chunks/{HRAHGYNK.js → ZTNBX4VH.js} +1 -1
  495. package/package.json +1 -1
  496. package/build/dist/chunks/5H7NVE6O.js +0 -1
  497. package/build/dist/chunks/7OOCAZBE.js +0 -1
  498. package/build/dist/chunks/DFM4T6ZE.js +0 -1
  499. package/build/dist/chunks/FCVH4FYH.js +0 -1
  500. package/build/dist/chunks/GDUKZYE2.js +0 -1
  501. package/build/dist/chunks/GYPMUYB5.js +0 -1
  502. package/build/dist/chunks/J7OZLXSG.js +0 -1
  503. package/build/dist/chunks/JFC2QCMW.js +0 -1
  504. package/build/dist/chunks/M6JNGU4E.js +0 -1
  505. package/build/dist/chunks/M7OVMIIE.js +0 -1
  506. package/build/dist/chunks/MQK6OP7S.js +0 -1
  507. package/build/dist/chunks/N624NR7Y.js +0 -1
  508. package/build/dist/chunks/OSMOBKRQ.js +0 -1
  509. package/build/dist/chunks/Q3Q3YHEX.js +0 -1
  510. package/build/dist/chunks/QQD4PV64.js +0 -1
  511. package/build/dist/chunks/RN3WUJIO.js +0 -1
  512. package/build/dist/chunks/RP5VCG54.js +0 -1
  513. package/build/dist/chunks/TI727O2H.js +0 -1
  514. package/build/dist/chunks/UHIJMDD2.js +0 -1
  515. package/build/dist/chunks/W32UECOL.js +0 -1
  516. package/build/dist/chunks/WWNAGOCD.js +0 -1
  517. package/build/dist/chunks/XWC6IC5E.js +0 -1
@@ -1 +1 @@
1
- import{c as ee}from"./GK3D7OKG.js";import{a as B}from"./Z7FGEWO2.js";import{a as q}from"./IOYRL6AY.js";import{c as J,d as X,j as Y,l as Z}from"./NWNYJ26T.js";import{b as w,j as G}from"./TI727O2H.js";import{a as f}from"./XSD5NL7J.js";import{a as Q}from"./JXOEJPJ4.js";import{encodeAbiParameters as de,encodeFunctionData as N,erc20Abi as ne,keccak256 as ue,parseAbi as oe,zeroAddress as le}from"viem";var s=oe(["function launchFactory() view returns (address)","function curve() view returns (address)","function factory() view returns (address)","function feeEscrow() view returns (address)","function memeHook() view returns (address)","function buybackVault() view returns (address)","function getLaunchedToken(address) view returns ((address token,address curve,address deployer,address creatorFeeRecipient,address pairToken,uint256 graduationThreshold,uint24 poolFee,int24 tickSpacing,uint16 creatorTaxBps,bool buybackEnabled,uint8 phase,uint256 sweptQuote,uint256 sweptTokens,uint256 sweptAt,bool exists))","function balanceOf(address) view returns (uint256)","function balanceOfToken(address account,address token) view returns (uint256)","function quoteFeeBalance() view returns (uint256)","function creatorTaxBalance() view returns (uint256)","function pendingFees(bytes32,address) view returns (uint256)","function pendingCreatorTax(bytes32,address) view returns (uint256)","function releasable(address token) view returns (uint256)","function vestedAmount(address token) view returns (uint256)"]),h=oe(["function sweepFees(uint256 minBuybackTokensOut)","function sweepPoolFees(bytes32 poolId,uint256 minConversionQuoteOut,uint256 minBuybackTokensOut)","function claim()","function claimToken(address token)","function release(address token)","error InternalSwapRequiresOperator()"]),ae={address:B,chainId:w,symbol:"ETH",decimals:18},te=G[w].pons;function c(o){let d=Y(o,"Provide a valid Pons coin address.",X);return Z(d,"Provide a nonzero Pons coin or contract address.")}function pe(o){let d=new Set;for(;o&&typeof o=="object"&&!d.has(o)&&d.size<16;){d.add(o);let l=o;if(l.data==="0x31cdb504"||l.data&&typeof l.data=="object"&&l.data.errorName==="InternalSwapRequiresOperator")return!0;o=l.cause}return!1}async function fe(o,d,l,k=!1,t){let i=c(d),b=c(l),e=o.clientFor(w);if(t===void 0&&await e.getChainId()!==w)throw new f(`Pons claims require chain ${w}.`);let n=t??await e.getBlockNumber(),[R,se]=await Promise.all([e.readContract({address:i,abi:s,functionName:"launchFactory",blockNumber:n}),e.readContract({address:i,abi:s,functionName:"curve",blockNumber:n})]),P=c(te.factory.address);if(c(R)!==P)throw new f("The coin must belong to the pinned Pons factory.");let y=c(se),[r,re,ie]=await Promise.all([e.readContract({address:P,abi:s,functionName:"getLaunchedToken",args:[i],blockNumber:n}),e.readContract({address:y,abi:s,functionName:"factory",blockNumber:n}),e.readContract({address:y,abi:s,functionName:"feeEscrow",blockNumber:n})]);if(!r.exists||c(r.token)!==i||c(r.curve)!==y||c(re)!==P)throw new f("The coin does not resolve to a consistent Pons launch.");if(r.phase<0||r.phase>3)throw new f("This Pons launch phase is unsupported.");let H=c(r.creatorFeeRecipient),A=H===b;if(k&&!A)throw new f("Only the current creator fee recipient can claim these fees. Use the recipient wallet or Safe.");let g=r.pairToken.toLowerCase(),S=g===le,m=c(ie),M=async a=>{let[u,p]=await Promise.all([e.readContract({address:a,abi:ne,functionName:"symbol",blockNumber:n}),e.readContract({address:a,abi:ne,functionName:"decimals",blockNumber:n})]);return{address:a,chainId:w,symbol:Q(u),decimals:p}},[v,T,_,j,$]=await Promise.all([M(i),S?ae:M(g),e.readContract({address:m,abi:s,functionName:"balanceOf",args:[b],blockNumber:n}),S?0n:e.readContract({address:m,abi:s,functionName:"balanceOfToken",args:[b,g],blockNumber:n}),e.readContract({address:m,abi:s,functionName:"balanceOfToken",args:[b,i],blockNumber:n})]),x=[],F=[],E,C=(a,u,p)=>o.unsignedTx({to:a,data:u,value:"0",chainId:w,description:p});if(r.phase===0){let[a,u]=await Promise.all([e.readContract({address:y,abi:s,functionName:"quoteFeeBalance",blockNumber:n}),e.readContract({address:y,abi:s,functionName:"creatorTaxBalance",blockNumber:n})]);a+u>0n&&(F.push({token:T,amount:(a+u).toString()}),r.buybackEnabled?E="buyback":A&&(await e.simulateContract({address:y,abi:h,functionName:"sweepFees",args:[0n],account:b,gas:q,blockNumber:n}),x.push(C(y,N({abi:h,functionName:"sweepFees",args:[0n]}),`Sweep ${T.symbol} curve fees into the recipient escrow.`))))}else if(r.phase===2){let a=c(await e.readContract({address:P,abi:s,functionName:"memeHook",blockNumber:n})),u=ee(g,i,r.poolFee,r.tickSpacing),p=ue(de([{type:"address"},{type:"address"},{type:"uint24"},{type:"int24"},{type:"address"}],[u.currency0,u.currency1,r.poolFee,r.tickSpacing,a])),[V,z,W,U]=await Promise.all([e.readContract({address:a,abi:s,functionName:"pendingFees",args:[p,g],blockNumber:n}),e.readContract({address:a,abi:s,functionName:"pendingCreatorTax",args:[p,g],blockNumber:n}),e.readContract({address:a,abi:s,functionName:"pendingFees",args:[p,i],blockNumber:n}),e.readContract({address:a,abi:s,functionName:"pendingCreatorTax",args:[p,i],blockNumber:n})]);if(V+z>0n&&F.push({token:T,amount:(V+z).toString()}),W+U>0n&&F.push({token:v,amount:(W+U).toString()}),F.length)if(r.buybackEnabled)E="buyback";else if(A)try{await e.simulateContract({address:a,abi:h,functionName:"sweepPoolFees",args:[p,0n,0n],account:b,gas:q,blockNumber:n}),x.push(C(a,N({abi:h,functionName:"sweepPoolFees",args:[p,0n,0n]}),`Sweep ${T.symbol} pool fees into the recipient escrow.`))}catch(K){if(!pe(K))throw K;E="conversion"}else W+U>0n&&(E="conversion")}let I=0n,L=0n,D;if(r.buybackEnabled||$>0n||A){let a=c(await e.readContract({address:P,abi:s,functionName:"buybackVault",blockNumber:n}));if(a===c(te.buybackVault.address)){let[u,p,V]=await Promise.all([e.readContract({address:a,abi:s,functionName:"feeEscrow",blockNumber:n}),e.readContract({address:a,abi:s,functionName:"releasable",args:[i],blockNumber:n}),e.readContract({address:a,abi:s,functionName:"vestedAmount",args:[i],blockNumber:n})]);if(c(u)!==m)throw new f("The Pons buyback vault credits a different escrow than this coin.");[D,I,L]=[a,p,V]}else if(k)throw new f("The Pons factory reports a buyback vault outside the pinned deployment.")}let O=[...x];if(k){I>0n&&O.push(C(D,N({abi:h,functionName:"release",args:[i]}),`Release the vested ${v.symbol} buyback into the recipient escrow.`));let a=S&&x.length>0,u=!S&&x.length>0;(_>0n||a)&&O.push(C(m,N({abi:h,functionName:"claim"}),"Claim the caller\u2019s full native ETH escrow balance across all coins.")),(j>0n||u)&&O.push(C(m,N({abi:h,functionName:"claimToken",args:[g]}),`Claim the caller\u2019s full ${T.symbol} escrow balance across all coins.`)),($>0n||I>0n)&&O.push(C(m,N({abi:h,functionName:"claimToken",args:[i]}),`Claim the caller\u2019s released ${v.symbol} escrow balance.`))}let ce=[{token:ae,amount:_.toString()},...S?[]:[{token:T,amount:j.toString()}],{token:v,amount:$.toString()}];return{coin:v,pair:T,phase:r.phase,recipient:H,holder:b,isRecipient:A,escrow:m,blockNumber:n.toString(),credited:ce,pendingBeforeSweep:F,operatorWait:E,txs:O,buybackVest:{enabled:r.buybackEnabled,vault:D??null,releasable:{token:v,amount:I.toString()},vested:{token:v,amount:L.toString()},note:"Releasable is the gross vested amount; the release splits it with the Pons protocol before crediting the recipient escrow, and the preview shows the net claim."}}}function be(o){return o==="buyback"?"Buyback-enabled fee sweeps are not built here; pending fees await Pons\u2019s operator.":o==="conversion"?"Pending token-side conversion is awaiting Pons\u2019s keeper; the hook sweep was skipped.":""}async function me(o,d,l){if(!d||Object.keys(d).some(R=>R!=="token"))throw new f("Unsupported input. Provide only the Pons coin token address.");let k=c(d.token),t=await fe(o,k,c(l),!0),{txs:i}=t,b=await o.preview(i,l),e=t.credited[t.pair.address===B?0:1],n=[i.length?`Unsigned Pons fee claim prepared for the current recipient. Claims withdraw every ${t.pair.address===B?"native ETH":`native ETH and ${t.pair.symbol}`} balance owed to this wallet on this escrow across its coins.`:"No claim is available from this escrow.",be(t.operatorWait),BigInt(t.buybackVest.releasable.amount)>0n?`The buyback vest has ${t.buybackVest.releasable.amount} ${t.coin.symbol} base units releasable (gross); the release credits the escrow and the claim withdraws it.`:"","Pending amounts are pre-sweep fee and tax totals, not a guaranteed creator payout. Preview excludes gas. No transaction was sent."].filter(Boolean).join(" ");return{txs:i,summary:n,preview:b,claimable:e,credited:t.credited,pendingBeforeSweep:t.pendingBeforeSweep,waitingForKeeper:t.operatorWait!==void 0,operatorWait:t.operatorWait??null,buybackVest:t.buybackVest,recipient:t.recipient,escrow:t.escrow,phase:t.phase,blockNumber:t.blockNumber}}var Ne=o=>({tools:[{name:"pons_claim",inputSchema:{type:"object",additionalProperties:!1,required:["token"],properties:{token:{...J,description:"Pons coin address on chain 4663."}}},execute:async(d,l)=>{try{return await me(o,d,l)}catch(k){throw new f(o.plainError(k))}}}]});export{fe as a,be as b,Ne as c};
1
+ import{c as ee}from"./GVCNTGLC.js";import{a as B}from"./7WXAS54T.js";import{a as q}from"./IOYRL6AY.js";import{c as J,d as X,j as Y,l as Z}from"./NWNYJ26T.js";import{b as w,j as G}from"./EWZFZUVF.js";import{a as f}from"./XSD5NL7J.js";import{a as Q}from"./JXOEJPJ4.js";import{encodeAbiParameters as de,encodeFunctionData as N,erc20Abi as ne,keccak256 as ue,parseAbi as oe,zeroAddress as le}from"viem";var s=oe(["function launchFactory() view returns (address)","function curve() view returns (address)","function factory() view returns (address)","function feeEscrow() view returns (address)","function memeHook() view returns (address)","function buybackVault() view returns (address)","function getLaunchedToken(address) view returns ((address token,address curve,address deployer,address creatorFeeRecipient,address pairToken,uint256 graduationThreshold,uint24 poolFee,int24 tickSpacing,uint16 creatorTaxBps,bool buybackEnabled,uint8 phase,uint256 sweptQuote,uint256 sweptTokens,uint256 sweptAt,bool exists))","function balanceOf(address) view returns (uint256)","function balanceOfToken(address account,address token) view returns (uint256)","function quoteFeeBalance() view returns (uint256)","function creatorTaxBalance() view returns (uint256)","function pendingFees(bytes32,address) view returns (uint256)","function pendingCreatorTax(bytes32,address) view returns (uint256)","function releasable(address token) view returns (uint256)","function vestedAmount(address token) view returns (uint256)"]),h=oe(["function sweepFees(uint256 minBuybackTokensOut)","function sweepPoolFees(bytes32 poolId,uint256 minConversionQuoteOut,uint256 minBuybackTokensOut)","function claim()","function claimToken(address token)","function release(address token)","error InternalSwapRequiresOperator()"]),ae={address:B,chainId:w,symbol:"ETH",decimals:18},te=G[w].pons;function c(o){let d=Y(o,"Provide a valid Pons coin address.",X);return Z(d,"Provide a nonzero Pons coin or contract address.")}function pe(o){let d=new Set;for(;o&&typeof o=="object"&&!d.has(o)&&d.size<16;){d.add(o);let l=o;if(l.data==="0x31cdb504"||l.data&&typeof l.data=="object"&&l.data.errorName==="InternalSwapRequiresOperator")return!0;o=l.cause}return!1}async function fe(o,d,l,k=!1,t){let i=c(d),b=c(l),e=o.clientFor(w);if(t===void 0&&await e.getChainId()!==w)throw new f(`Pons claims require chain ${w}.`);let n=t??await e.getBlockNumber(),[R,se]=await Promise.all([e.readContract({address:i,abi:s,functionName:"launchFactory",blockNumber:n}),e.readContract({address:i,abi:s,functionName:"curve",blockNumber:n})]),P=c(te.factory.address);if(c(R)!==P)throw new f("The coin must belong to the pinned Pons factory.");let y=c(se),[r,re,ie]=await Promise.all([e.readContract({address:P,abi:s,functionName:"getLaunchedToken",args:[i],blockNumber:n}),e.readContract({address:y,abi:s,functionName:"factory",blockNumber:n}),e.readContract({address:y,abi:s,functionName:"feeEscrow",blockNumber:n})]);if(!r.exists||c(r.token)!==i||c(r.curve)!==y||c(re)!==P)throw new f("The coin does not resolve to a consistent Pons launch.");if(r.phase<0||r.phase>3)throw new f("This Pons launch phase is unsupported.");let H=c(r.creatorFeeRecipient),A=H===b;if(k&&!A)throw new f("Only the current creator fee recipient can claim these fees. Use the recipient wallet or Safe.");let g=r.pairToken.toLowerCase(),S=g===le,m=c(ie),M=async a=>{let[u,p]=await Promise.all([e.readContract({address:a,abi:ne,functionName:"symbol",blockNumber:n}),e.readContract({address:a,abi:ne,functionName:"decimals",blockNumber:n})]);return{address:a,chainId:w,symbol:Q(u),decimals:p}},[v,T,_,j,$]=await Promise.all([M(i),S?ae:M(g),e.readContract({address:m,abi:s,functionName:"balanceOf",args:[b],blockNumber:n}),S?0n:e.readContract({address:m,abi:s,functionName:"balanceOfToken",args:[b,g],blockNumber:n}),e.readContract({address:m,abi:s,functionName:"balanceOfToken",args:[b,i],blockNumber:n})]),x=[],F=[],E,C=(a,u,p)=>o.unsignedTx({to:a,data:u,value:"0",chainId:w,description:p});if(r.phase===0){let[a,u]=await Promise.all([e.readContract({address:y,abi:s,functionName:"quoteFeeBalance",blockNumber:n}),e.readContract({address:y,abi:s,functionName:"creatorTaxBalance",blockNumber:n})]);a+u>0n&&(F.push({token:T,amount:(a+u).toString()}),r.buybackEnabled?E="buyback":A&&(await e.simulateContract({address:y,abi:h,functionName:"sweepFees",args:[0n],account:b,gas:q,blockNumber:n}),x.push(C(y,N({abi:h,functionName:"sweepFees",args:[0n]}),`Sweep ${T.symbol} curve fees into the recipient escrow.`))))}else if(r.phase===2){let a=c(await e.readContract({address:P,abi:s,functionName:"memeHook",blockNumber:n})),u=ee(g,i,r.poolFee,r.tickSpacing),p=ue(de([{type:"address"},{type:"address"},{type:"uint24"},{type:"int24"},{type:"address"}],[u.currency0,u.currency1,r.poolFee,r.tickSpacing,a])),[V,z,W,U]=await Promise.all([e.readContract({address:a,abi:s,functionName:"pendingFees",args:[p,g],blockNumber:n}),e.readContract({address:a,abi:s,functionName:"pendingCreatorTax",args:[p,g],blockNumber:n}),e.readContract({address:a,abi:s,functionName:"pendingFees",args:[p,i],blockNumber:n}),e.readContract({address:a,abi:s,functionName:"pendingCreatorTax",args:[p,i],blockNumber:n})]);if(V+z>0n&&F.push({token:T,amount:(V+z).toString()}),W+U>0n&&F.push({token:v,amount:(W+U).toString()}),F.length)if(r.buybackEnabled)E="buyback";else if(A)try{await e.simulateContract({address:a,abi:h,functionName:"sweepPoolFees",args:[p,0n,0n],account:b,gas:q,blockNumber:n}),x.push(C(a,N({abi:h,functionName:"sweepPoolFees",args:[p,0n,0n]}),`Sweep ${T.symbol} pool fees into the recipient escrow.`))}catch(K){if(!pe(K))throw K;E="conversion"}else W+U>0n&&(E="conversion")}let I=0n,L=0n,D;if(r.buybackEnabled||$>0n||A){let a=c(await e.readContract({address:P,abi:s,functionName:"buybackVault",blockNumber:n}));if(a===c(te.buybackVault.address)){let[u,p,V]=await Promise.all([e.readContract({address:a,abi:s,functionName:"feeEscrow",blockNumber:n}),e.readContract({address:a,abi:s,functionName:"releasable",args:[i],blockNumber:n}),e.readContract({address:a,abi:s,functionName:"vestedAmount",args:[i],blockNumber:n})]);if(c(u)!==m)throw new f("The Pons buyback vault credits a different escrow than this coin.");[D,I,L]=[a,p,V]}else if(k)throw new f("The Pons factory reports a buyback vault outside the pinned deployment.")}let O=[...x];if(k){I>0n&&O.push(C(D,N({abi:h,functionName:"release",args:[i]}),`Release the vested ${v.symbol} buyback into the recipient escrow.`));let a=S&&x.length>0,u=!S&&x.length>0;(_>0n||a)&&O.push(C(m,N({abi:h,functionName:"claim"}),"Claim the caller\u2019s full native ETH escrow balance across all coins.")),(j>0n||u)&&O.push(C(m,N({abi:h,functionName:"claimToken",args:[g]}),`Claim the caller\u2019s full ${T.symbol} escrow balance across all coins.`)),($>0n||I>0n)&&O.push(C(m,N({abi:h,functionName:"claimToken",args:[i]}),`Claim the caller\u2019s released ${v.symbol} escrow balance.`))}let ce=[{token:ae,amount:_.toString()},...S?[]:[{token:T,amount:j.toString()}],{token:v,amount:$.toString()}];return{coin:v,pair:T,phase:r.phase,recipient:H,holder:b,isRecipient:A,escrow:m,blockNumber:n.toString(),credited:ce,pendingBeforeSweep:F,operatorWait:E,txs:O,buybackVest:{enabled:r.buybackEnabled,vault:D??null,releasable:{token:v,amount:I.toString()},vested:{token:v,amount:L.toString()},note:"Releasable is the gross vested amount; the release splits it with the Pons protocol before crediting the recipient escrow, and the preview shows the net claim."}}}function be(o){return o==="buyback"?"Buyback-enabled fee sweeps are not built here; pending fees await Pons\u2019s operator.":o==="conversion"?"Pending token-side conversion is awaiting Pons\u2019s keeper; the hook sweep was skipped.":""}async function me(o,d,l){if(!d||Object.keys(d).some(R=>R!=="token"))throw new f("Unsupported input. Provide only the Pons coin token address.");let k=c(d.token),t=await fe(o,k,c(l),!0),{txs:i}=t,b=await o.preview(i,l),e=t.credited[t.pair.address===B?0:1],n=[i.length?`Unsigned Pons fee claim prepared for the current recipient. Claims withdraw every ${t.pair.address===B?"native ETH":`native ETH and ${t.pair.symbol}`} balance owed to this wallet on this escrow across its coins.`:"No claim is available from this escrow.",be(t.operatorWait),BigInt(t.buybackVest.releasable.amount)>0n?`The buyback vest has ${t.buybackVest.releasable.amount} ${t.coin.symbol} base units releasable (gross); the release credits the escrow and the claim withdraws it.`:"","Pending amounts are pre-sweep fee and tax totals, not a guaranteed creator payout. Preview excludes gas. No transaction was sent."].filter(Boolean).join(" ");return{txs:i,summary:n,preview:b,claimable:e,credited:t.credited,pendingBeforeSweep:t.pendingBeforeSweep,waitingForKeeper:t.operatorWait!==void 0,operatorWait:t.operatorWait??null,buybackVest:t.buybackVest,recipient:t.recipient,escrow:t.escrow,phase:t.phase,blockNumber:t.blockNumber}}var Ne=o=>({tools:[{name:"pons_claim",inputSchema:{type:"object",additionalProperties:!1,required:["token"],properties:{token:{...J,description:"Pons coin address on chain 4663."}}},execute:async(d,l)=>{try{return await me(o,d,l)}catch(k){throw new f(o.plainError(k))}}}]});export{fe as a,be as b,Ne as c};
@@ -1 +1 @@
1
- import{a as N,b as O,e as F,f as i,k as B,m as b,o as S}from"./IZFED3R2.js";import{a as T}from"./KNROSKUG.js";import{c as I,e as A}from"./MDLJFCT4.js";import{h as x}from"./BSX4LFYI.js";import{a as o,e as k}from"./XSD5NL7J.js";function c(t,a){if(t.version!==1||t.chainId!==4663||!Object.hasOwn(F,t.kind))throw new o("Invalid FOBO pending action. Nothing further was signed.");if(!Number.isSafeInteger(a)||!Number.isSafeInteger(t.quotedAt)||a<t.quotedAt||a-t.quotedAt>=N)throw new o("This FOBO action expired. Nothing further was signed. Ask for a fresh summary, then say yes or no.")}function y(t,a){return typeof t=="string"&&t.toLowerCase()===a.toLowerCase()}function _(t){if(typeof t!="number"&&typeof t!="string"||!/^\d+$/.test(String(t)))throw new o("FOBO returned an invalid Permit2 nonce.");let a=Number(t);if(!Number.isSafeInteger(a)||a<0||a>=2**48)throw new o("FOBO returned an invalid Permit2 nonce.");return a}function v(t,a,n){let e=i(a),w=i(e.domain),d=i(e.message),u=i(d.details);if(!["buy","sell"].includes(t.kind)||![4663,"0x1237"].includes(w.chainId)||!y(w.verifyingContract,O.permit2)||e.primaryType!=="PermitSingle"||!y(d.spender,O.router)||!y(u.token,t.request._currencyIn)||!t.terms.amountIn)throw new o("FOBO permit does not match the approved token, spender or chain. Nothing further was signed.");return I({token:t.request._currencyIn,amount:BigInt(t.terms.amountIn),nonce:_(u.nonce),now:n})}async function*M(t,a,n){let e=structuredClone(a);c(e,n.now());let w=!1,d,u;try{if(e.kind==="launch"){let g=await T(t),m=async r=>{c(e,n.now());let s=i(await t.call("sign_in_start",r));if(c(e,n.now()),s.success===!1||s.ok===!1||s.isError===!0)throw new o("FOBO sign-in was refused. Nothing was signed.");if(typeof s.message!="string"||typeof s.ticket!="string"||!s.ticket||s.ticket.length>2e3)throw new o("FOBO returned an invalid sign-in ticket. Nothing was signed.");return A(s.message,e.wallet,n.now()),{message:s.message,ticket:s.ticket}},h;try{h=await m({account:e.wallet,...g})}catch(r){if(Object.keys(g).length===0)throw r;h=await m({account:e.wallet})}let l=await n.signMessage(h.message);c(e,n.now());let p=i(await t.call("sign_in_finish",{account:e.wallet,ticket:h.ticket,signature:l}));if(p.success===!1||p.ok===!1||p.isError===!0)throw new o("FOBO sign-in was refused. Nothing further was signed.");yield{kind:"signin",status:"signed"}}for(let g=0;g<4;g++){c(e,n.now());let m={...B(e),...d?{permit:d}:{}},l=g===0&&["limitOrder","cancel","claim"].includes(e.kind)&&typeof e.request._prepared=="string"?b({status:"ready",transactions:JSON.parse(String(e.request._prepared)).map(r=>({...r,from:e.wallet,gas:r.gasLimit}))}):b(await t.call(F[e.kind],m));c(e,n.now());let p=await S(e,l,n.now(),d?.message,n.readContract);if(l.status==="needs_approval"){if(w||d)throw new o("FOBO requested a repeated approval. Nothing further was signed. Ask for a fresh summary.");for(let r of p){c(e,n.now());let s=await n.sendTransaction(r);w=!0,await n.waitForReceipt(s),yield{kind:"approval",hash:s,tx:r,status:"mined"}}continue}if(l.status==="needs_signature"){if(d)throw new o("FOBO requested a repeated permit. Nothing further was signed.");u=v(e,l.typedData,n.now()),c(e,n.now());let r=await n.signTypedData(u);d={message:i(u).message,signature:r},yield{kind:"permit",status:"signed"};continue}if(u){let r=i(i(u).message),s=i(r.details);for(let P of p){let f=x(P.data,["0x0Af57F62982D03066ef917AcAd87F771c06528Ec","0x0000000000000000000000000000000000000000"]).permit;if(!f||!y(f.token,s.token)||f.amount!==BigInt(String(s.amount))||f.nonce!==Number(s.nonce)||f.expiration!==Number(s.expiration)||!y(f.spender,r.spender)||f.sigDeadline!==BigInt(String(r.sigDeadline)))throw new o("FOBO changed the exact signed permit in the swap. Nothing further was signed.")}}for(let r of p){c(e,n.now());let s=await n.sendTransaction(r);await n.waitForReceipt(s),yield{kind:"transaction",hash:s,tx:r,status:"mined"}}return}throw new o("FOBO preparation did not finish. Nothing further was signed. Ask for a fresh summary.")}catch(g){let m=w?" An exact approval was already sent; use oak_cleanup_allowances to review any allowance left.":"";throw new o(`${k(g).replaceAll("Nothing was signed.","Nothing further was signed.")} FOBO execution stopped; nothing further was signed.${m}`)}}export{v as a,M as b};
1
+ import{a as N,b as O,e as F,f as i,k as B,m as b,o as S}from"./DLNDJZR4.js";import{a as T}from"./KNROSKUG.js";import{c as I,e as A}from"./R5Z4HPCA.js";import{h as x}from"./TNHU5UBQ.js";import{a as o,e as k}from"./XSD5NL7J.js";function c(t,a){if(t.version!==1||t.chainId!==4663||!Object.hasOwn(F,t.kind))throw new o("Invalid FOBO pending action. Nothing further was signed.");if(!Number.isSafeInteger(a)||!Number.isSafeInteger(t.quotedAt)||a<t.quotedAt||a-t.quotedAt>=N)throw new o("This FOBO action expired. Nothing further was signed. Ask for a fresh summary, then say yes or no.")}function y(t,a){return typeof t=="string"&&t.toLowerCase()===a.toLowerCase()}function _(t){if(typeof t!="number"&&typeof t!="string"||!/^\d+$/.test(String(t)))throw new o("FOBO returned an invalid Permit2 nonce.");let a=Number(t);if(!Number.isSafeInteger(a)||a<0||a>=2**48)throw new o("FOBO returned an invalid Permit2 nonce.");return a}function v(t,a,n){let e=i(a),w=i(e.domain),d=i(e.message),u=i(d.details);if(!["buy","sell"].includes(t.kind)||![4663,"0x1237"].includes(w.chainId)||!y(w.verifyingContract,O.permit2)||e.primaryType!=="PermitSingle"||!y(d.spender,O.router)||!y(u.token,t.request._currencyIn)||!t.terms.amountIn)throw new o("FOBO permit does not match the approved token, spender or chain. Nothing further was signed.");return I({token:t.request._currencyIn,amount:BigInt(t.terms.amountIn),nonce:_(u.nonce),now:n})}async function*M(t,a,n){let e=structuredClone(a);c(e,n.now());let w=!1,d,u;try{if(e.kind==="launch"){let g=await T(t),m=async r=>{c(e,n.now());let s=i(await t.call("sign_in_start",r));if(c(e,n.now()),s.success===!1||s.ok===!1||s.isError===!0)throw new o("FOBO sign-in was refused. Nothing was signed.");if(typeof s.message!="string"||typeof s.ticket!="string"||!s.ticket||s.ticket.length>2e3)throw new o("FOBO returned an invalid sign-in ticket. Nothing was signed.");return A(s.message,e.wallet,n.now()),{message:s.message,ticket:s.ticket}},h;try{h=await m({account:e.wallet,...g})}catch(r){if(Object.keys(g).length===0)throw r;h=await m({account:e.wallet})}let l=await n.signMessage(h.message);c(e,n.now());let p=i(await t.call("sign_in_finish",{account:e.wallet,ticket:h.ticket,signature:l}));if(p.success===!1||p.ok===!1||p.isError===!0)throw new o("FOBO sign-in was refused. Nothing further was signed.");yield{kind:"signin",status:"signed"}}for(let g=0;g<4;g++){c(e,n.now());let m={...B(e),...d?{permit:d}:{}},l=g===0&&["limitOrder","cancel","claim"].includes(e.kind)&&typeof e.request._prepared=="string"?b({status:"ready",transactions:JSON.parse(String(e.request._prepared)).map(r=>({...r,from:e.wallet,gas:r.gasLimit}))}):b(await t.call(F[e.kind],m));c(e,n.now());let p=await S(e,l,n.now(),d?.message,n.readContract);if(l.status==="needs_approval"){if(w||d)throw new o("FOBO requested a repeated approval. Nothing further was signed. Ask for a fresh summary.");for(let r of p){c(e,n.now());let s=await n.sendTransaction(r);w=!0,await n.waitForReceipt(s),yield{kind:"approval",hash:s,tx:r,status:"mined"}}continue}if(l.status==="needs_signature"){if(d)throw new o("FOBO requested a repeated permit. Nothing further was signed.");u=v(e,l.typedData,n.now()),c(e,n.now());let r=await n.signTypedData(u);d={message:i(u).message,signature:r},yield{kind:"permit",status:"signed"};continue}if(u){let r=i(i(u).message),s=i(r.details);for(let P of p){let f=x(P.data,["0x0Af57F62982D03066ef917AcAd87F771c06528Ec","0x0000000000000000000000000000000000000000"]).permit;if(!f||!y(f.token,s.token)||f.amount!==BigInt(String(s.amount))||f.nonce!==Number(s.nonce)||f.expiration!==Number(s.expiration)||!y(f.spender,r.spender)||f.sigDeadline!==BigInt(String(r.sigDeadline)))throw new o("FOBO changed the exact signed permit in the swap. Nothing further was signed.")}}for(let r of p){c(e,n.now());let s=await n.sendTransaction(r);await n.waitForReceipt(s),yield{kind:"transaction",hash:s,tx:r,status:"mined"}}return}throw new o("FOBO preparation did not finish. Nothing further was signed. Ask for a fresh summary.")}catch(g){let m=w?" An exact approval was already sent; use oak_cleanup_allowances to review any allowance left.":"";throw new o(`${k(g).replaceAll("Nothing was signed.","Nothing further was signed.")} FOBO execution stopped; nothing further was signed.${m}`)}}export{v as a,M as b};
@@ -1 +1 @@
1
- import{b as C}from"./YZHJ4BAP.js";import{a as O,c as P,g as B}from"./GQ3XZFRL.js";import{b as h,e as r,g as F}from"./NWNYJ26T.js";import{b as g}from"./TI727O2H.js";import{a as y}from"./XSD5NL7J.js";import{a as E,b as x}from"./JXOEJPJ4.js";import{getAddress as T}from"viem";var q=["pons_status","pons_holders","pons_launch_info"],v=["getPartnerScanCard","getProjectSnapshot"],V=/^[a-z0-9][a-z0-9-]{0,79}$/,$=/^[0-9]{1,78}$/,K=/\b(?:unsafe|safe|safety|risks?|risky|recommend\w*|buy\w*|sell\w*)\b/i,z="https://heyresearch.xyz",D=["curve","pending pool creation","graduated","rescued"],G="This describes the project, not this token. HEY Research Lab does not tie this token to that activity.",X="Buyback-vault vesting only. It is not proof of vesting for any other address and not a liquidity lock. Unread figures say not read.",Z="An empty or missing source proves nothing; unread figures say not read, never zero. Address counts are Pons index figures, not on-chain counts; addresses are not people.",M=/rank|scor|trend|market|lock|sell|rating|price|signal|verdict|safe/i,c=(n,e)=>typeof n=="string"&&n.length>0&&n.length<=e&&!x(n)?n:null,k=n=>typeof n=="string"&&$.test(n)?n:null,Q=n=>typeof n=="number"&&Number.isSafeInteger(n)&&n>=0?n:null,L=n=>typeof n=="number"&&Number.isSafeInteger(n)?n:null,m=n=>typeof n=="string"&&h.test(n)?T(n):null,w=n=>(r(n)?k(n.amount):null)??"not read",d=n=>k(n)??"not read",R=n=>Q(n)??"not read",J=n=>L(n)??"not read";function W(n){if(typeof n!="string"||!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?Z$/.test(n))return null;let e=Date.parse(n);return Number.isFinite(e)&&new Date(e).toISOString().slice(0,19)===n.slice(0,19)&&e<=Date.now()+3e5?n:null}function nn(n,e){if(typeof n!="string"||n.length>2048||/[\s<>\\]/.test(n)||x(n))return null;try{let t=new URL(n);return t.origin===z&&!t.username&&!t.password&&t.pathname===`/project/${e}`?n:null}catch{return null}}function tn(n){return typeof n!="string"?null:/^untrusted "(?:[^"\\]|\\.)*"$/.test(n)?n:E(n)}function en(n){return n instanceof Error&&/supported Pons factory/i.test(n.message)}function N(n,e){if(!r(n)||n.chainId!==g||typeof n.address!="string"||!h.test(n.address)||!F(n.address,e))return null;let t=n.decimals,s=tn(n.symbol);return typeof t!="number"||!Number.isInteger(t)||t<0||t>255||!s?null:{address:T(e),chainId:g,symbol:s,decimals:t}}function _(n){if(!r(n)||!r(n.token))return null;let e=m(n.token.address);return e?N(n.token,e):null}function sn(n,e){if(!r(n))return;let t=N(n.token,e),s=k(n.blockNumber),o=L(n.phase);if(!t||!s||o===null||o<0||o>3||n.phaseName!==D[o])return;let a=n.pool,l=r(a)&&typeof a.id=="string"&&/^0x[0-9a-fA-F]{1,64}$/.test(a.id)?a.id:null,i=r(a)?k(a.liquidity):null,p=r(a)&&l&&i?{id:l,liquidity:i,sqrtPriceX96:d(a.sqrtPriceX96),tick:J(a.tick),lpFee:R(a.lpFee),protocolFee:R(a.protocolFee)}:null;return{token:t,block:s,launch:{phase:o,phaseName:D[o],curve:m(n.curve),creatorFeeRecipient:m(n.creatorFeeRecipient),progressPpm:d(n.progressPpm),graduationThreshold:w(n.graduationThreshold),raised:w(n.raised),totalSupply:w(n.totalSupply),amountUnits:{graduationThreshold:_(n.graduationThreshold),raised:_(n.raised),totalSupply:_(n.totalSupply)},pool:p}}}function on(n,e){if(!r(n))return;let t=N(n.token,e),s=k(n.statusBlock);if(!t||!s)return;let o=r(n.sources)?n.sources:{},a=(Array.isArray(n.exclusions)?n.exclusions.slice(0,10):[]).flatMap(i=>{let p=r(i)?c(i.reason,120):null;return r(i)&&p?[{reason:p,indexedBalance:d(i.indexedBalance),countedInIndex:typeof i.countedInIndex=="boolean"?i.countedInIndex:null}]:[]}),l=r(n.indexAsOf)?n.indexAsOf:null;return{token:t,addresses:{statusBlock:s,addressCountKind:"indexed",addressCount:R(n.holderCount),indexAddressCount:R(n.indexHolderCount),totalSupply:d(n.totalSupply),indexSupply:d(n.indexSupply),burned:d(n.burned),circulating:d(n.circulating),amountUnits:{totalSupply:t,indexSupply:t,burned:t,circulating:t,indexedBalance:t},exclusions:a,indexAsOf:l?{rollupBucket:c(l.rollupBucket,40),tailFromBlock:d(l.tailFromBlock)}:null,sources:{addressCount:c(o.holderCount,300)??"Pons balances index (an indexed figure, not an on-chain count)",totalSupply:c(o.totalSupply,300),burned:c(o.burned,300),circulating:c(o.circulating,300)}}}}function rn(n,e){if(!r(n)||!r(n.buybackVest))return;let t=N(n.token,e),s=k(n.statusBlock);if(!t||!s)return;let o=n.buybackVest,a={locked:d(o.locked),released:d(o.released),vested:d(o.vested),releasable:d(o.releasable),vestingStart:d(o.vestingStart),vestingDurationSeconds:d(o.vestingDurationSeconds)};return{token:t,vest:{statusBlock:s,vault:m(o.vault),enabled:typeof o.enabled=="boolean"?o.enabled:null,...a,amountUnits:{locked:t,released:t,vested:t,releasable:t},unknownFields:Object.entries(a).filter(([,l])=>l==="not read").map(([l])=>l),scope:X,source:`On-chain reads of the Pons buyback vault at block ${s}.`}}}async function I(n,e,t,s){if(!q.includes(e))throw new y("Unsupported Pons read.");try{let o=s(await n(e,{token:t}),t);return o===void 0?{state:"unavailable",value:null}:{state:"available",value:o}}catch(o){return{state:en(o)?"unsupported-origin":"unavailable",value:null}}}async function H(n,e,t){if(!v.includes(e))throw new y("Unsupported HEY read.");try{let s=await n("heyresearch_read",{operation:e,parameters:t,detail:"full"});return r(s)&&s.operation===e&&r(s.data)?s.data:null}catch{return null}}function an(n){let e={};if(!r(n))return e;for(let[t,s]of Object.entries(n).slice(0,40))!/^[A-Za-z][A-Za-z0-9_]{0,39}$/.test(t)||M.test(t)||(s===null?e[t]="not read":(typeof s=="boolean"||typeof s=="number"&&Number.isFinite(s)||c(s,300)!==null&&!K.test(s))&&(e[t]=s));return e}function ln(n,e){let t=n?W(n.asOf):null;if(!n||!t)return null;let s=r(n.links)?n.links:{};return{asOf:t,page:nn(s.page,e),disclaimer:c(n.disclaimer,1e3),build:an(n.build),textIsData:!0}}async function bn(n,e){if(typeof n!="string"||!h.test(n)||/^0x(?:0{40}|e{40})$/i.test(n))throw new y("Provide a full token contract address on Robinhood Chain 4663.");let t=T(n),[s,o,a,l]=await Promise.all([H(e,"getPartnerScanCard",{chain:g,token:t}),I(e,"pons_status",t,sn),I(e,"pons_holders",t,on),I(e,"pons_launch_info",t,rn)]),i=s?C(s.found===!1&&s.contractAddress===void 0?{...s,contractAddress:t}:s,g,t):void 0,p=i?i.found?"available":"not-indexed":"unavailable",f=i?.found&&r(s?.project)?s.project:null,b=f&&typeof f.slug=="string"&&V.test(f.slug)?f.slug:null,U="not-read",S=null;b&&(S=ln(await H(e,"getProjectSnapshot",{slug:b}),b),U=S?"available":"unavailable");let u=i?.found?i:null,A=u?u.activity_applies_to_token&&u.token_verification==="VERIFIED"?"token":"project-only":null,j=u?.activity.last_ship&&u.activity.last_ship_url?{date:u.activity.last_ship,url:u.activity.last_ship_url,sourceHost:new URL(u.activity.last_ship_url).hostname}:null,Y=o.value?.token??a.value?.token??l.value?.token??null;return{chainId:g,token:t,checkedAt:new Date().toISOString(),hey:{provider:"HEY Research Lab",statusNote:"show exactly",status:u?B(u.status_label,u.status_help):i?.found===!1?P:"HEY Research Lab context unavailable",tie:A,qualification:A==="project-only"?G:null,tieLabel:A==="token"?O:null,verifiedBuilder:u?.verified_builder??null,projectSlug:b,projectLink:u?.project_link??null,asOf:u?.as_of??null,lastShip:j,snapshot:S},oak:{token:Y,statusBlock:o.value?.block??"not read",launch:o.value?.launch??null,addresses:a.value?.addresses??null,buybackVest:l.value?.vest??null},coverage:{hey:{scan:p,snapshot:U},oak:{status:o.state,addresses:a.state,launchInfo:l.state},note:Z}}}export{on as a,bn as b};
1
+ import{b as C}from"./YZHJ4BAP.js";import{a as O,c as P,g as B}from"./GQ3XZFRL.js";import{b as h,e as r,g as F}from"./NWNYJ26T.js";import{b as g}from"./EWZFZUVF.js";import{a as y}from"./XSD5NL7J.js";import{a as E,b as x}from"./JXOEJPJ4.js";import{getAddress as T}from"viem";var q=["pons_status","pons_holders","pons_launch_info"],v=["getPartnerScanCard","getProjectSnapshot"],V=/^[a-z0-9][a-z0-9-]{0,79}$/,$=/^[0-9]{1,78}$/,K=/\b(?:unsafe|safe|safety|risks?|risky|recommend\w*|buy\w*|sell\w*)\b/i,z="https://heyresearch.xyz",D=["curve","pending pool creation","graduated","rescued"],G="This describes the project, not this token. HEY Research Lab does not tie this token to that activity.",X="Buyback-vault vesting only. It is not proof of vesting for any other address and not a liquidity lock. Unread figures say not read.",Z="An empty or missing source proves nothing; unread figures say not read, never zero. Address counts are Pons index figures, not on-chain counts; addresses are not people.",M=/rank|scor|trend|market|lock|sell|rating|price|signal|verdict|safe/i,c=(n,e)=>typeof n=="string"&&n.length>0&&n.length<=e&&!x(n)?n:null,k=n=>typeof n=="string"&&$.test(n)?n:null,Q=n=>typeof n=="number"&&Number.isSafeInteger(n)&&n>=0?n:null,L=n=>typeof n=="number"&&Number.isSafeInteger(n)?n:null,m=n=>typeof n=="string"&&h.test(n)?T(n):null,w=n=>(r(n)?k(n.amount):null)??"not read",d=n=>k(n)??"not read",R=n=>Q(n)??"not read",J=n=>L(n)??"not read";function W(n){if(typeof n!="string"||!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?Z$/.test(n))return null;let e=Date.parse(n);return Number.isFinite(e)&&new Date(e).toISOString().slice(0,19)===n.slice(0,19)&&e<=Date.now()+3e5?n:null}function nn(n,e){if(typeof n!="string"||n.length>2048||/[\s<>\\]/.test(n)||x(n))return null;try{let t=new URL(n);return t.origin===z&&!t.username&&!t.password&&t.pathname===`/project/${e}`?n:null}catch{return null}}function tn(n){return typeof n!="string"?null:/^untrusted "(?:[^"\\]|\\.)*"$/.test(n)?n:E(n)}function en(n){return n instanceof Error&&/supported Pons factory/i.test(n.message)}function N(n,e){if(!r(n)||n.chainId!==g||typeof n.address!="string"||!h.test(n.address)||!F(n.address,e))return null;let t=n.decimals,s=tn(n.symbol);return typeof t!="number"||!Number.isInteger(t)||t<0||t>255||!s?null:{address:T(e),chainId:g,symbol:s,decimals:t}}function _(n){if(!r(n)||!r(n.token))return null;let e=m(n.token.address);return e?N(n.token,e):null}function sn(n,e){if(!r(n))return;let t=N(n.token,e),s=k(n.blockNumber),o=L(n.phase);if(!t||!s||o===null||o<0||o>3||n.phaseName!==D[o])return;let a=n.pool,l=r(a)&&typeof a.id=="string"&&/^0x[0-9a-fA-F]{1,64}$/.test(a.id)?a.id:null,i=r(a)?k(a.liquidity):null,p=r(a)&&l&&i?{id:l,liquidity:i,sqrtPriceX96:d(a.sqrtPriceX96),tick:J(a.tick),lpFee:R(a.lpFee),protocolFee:R(a.protocolFee)}:null;return{token:t,block:s,launch:{phase:o,phaseName:D[o],curve:m(n.curve),creatorFeeRecipient:m(n.creatorFeeRecipient),progressPpm:d(n.progressPpm),graduationThreshold:w(n.graduationThreshold),raised:w(n.raised),totalSupply:w(n.totalSupply),amountUnits:{graduationThreshold:_(n.graduationThreshold),raised:_(n.raised),totalSupply:_(n.totalSupply)},pool:p}}}function on(n,e){if(!r(n))return;let t=N(n.token,e),s=k(n.statusBlock);if(!t||!s)return;let o=r(n.sources)?n.sources:{},a=(Array.isArray(n.exclusions)?n.exclusions.slice(0,10):[]).flatMap(i=>{let p=r(i)?c(i.reason,120):null;return r(i)&&p?[{reason:p,indexedBalance:d(i.indexedBalance),countedInIndex:typeof i.countedInIndex=="boolean"?i.countedInIndex:null}]:[]}),l=r(n.indexAsOf)?n.indexAsOf:null;return{token:t,addresses:{statusBlock:s,addressCountKind:"indexed",addressCount:R(n.holderCount),indexAddressCount:R(n.indexHolderCount),totalSupply:d(n.totalSupply),indexSupply:d(n.indexSupply),burned:d(n.burned),circulating:d(n.circulating),amountUnits:{totalSupply:t,indexSupply:t,burned:t,circulating:t,indexedBalance:t},exclusions:a,indexAsOf:l?{rollupBucket:c(l.rollupBucket,40),tailFromBlock:d(l.tailFromBlock)}:null,sources:{addressCount:c(o.holderCount,300)??"Pons balances index (an indexed figure, not an on-chain count)",totalSupply:c(o.totalSupply,300),burned:c(o.burned,300),circulating:c(o.circulating,300)}}}}function rn(n,e){if(!r(n)||!r(n.buybackVest))return;let t=N(n.token,e),s=k(n.statusBlock);if(!t||!s)return;let o=n.buybackVest,a={locked:d(o.locked),released:d(o.released),vested:d(o.vested),releasable:d(o.releasable),vestingStart:d(o.vestingStart),vestingDurationSeconds:d(o.vestingDurationSeconds)};return{token:t,vest:{statusBlock:s,vault:m(o.vault),enabled:typeof o.enabled=="boolean"?o.enabled:null,...a,amountUnits:{locked:t,released:t,vested:t,releasable:t},unknownFields:Object.entries(a).filter(([,l])=>l==="not read").map(([l])=>l),scope:X,source:`On-chain reads of the Pons buyback vault at block ${s}.`}}}async function I(n,e,t,s){if(!q.includes(e))throw new y("Unsupported Pons read.");try{let o=s(await n(e,{token:t}),t);return o===void 0?{state:"unavailable",value:null}:{state:"available",value:o}}catch(o){return{state:en(o)?"unsupported-origin":"unavailable",value:null}}}async function H(n,e,t){if(!v.includes(e))throw new y("Unsupported HEY read.");try{let s=await n("heyresearch_read",{operation:e,parameters:t,detail:"full"});return r(s)&&s.operation===e&&r(s.data)?s.data:null}catch{return null}}function an(n){let e={};if(!r(n))return e;for(let[t,s]of Object.entries(n).slice(0,40))!/^[A-Za-z][A-Za-z0-9_]{0,39}$/.test(t)||M.test(t)||(s===null?e[t]="not read":(typeof s=="boolean"||typeof s=="number"&&Number.isFinite(s)||c(s,300)!==null&&!K.test(s))&&(e[t]=s));return e}function ln(n,e){let t=n?W(n.asOf):null;if(!n||!t)return null;let s=r(n.links)?n.links:{};return{asOf:t,page:nn(s.page,e),disclaimer:c(n.disclaimer,1e3),build:an(n.build),textIsData:!0}}async function bn(n,e){if(typeof n!="string"||!h.test(n)||/^0x(?:0{40}|e{40})$/i.test(n))throw new y("Provide a full token contract address on Robinhood Chain 4663.");let t=T(n),[s,o,a,l]=await Promise.all([H(e,"getPartnerScanCard",{chain:g,token:t}),I(e,"pons_status",t,sn),I(e,"pons_holders",t,on),I(e,"pons_launch_info",t,rn)]),i=s?C(s.found===!1&&s.contractAddress===void 0?{...s,contractAddress:t}:s,g,t):void 0,p=i?i.found?"available":"not-indexed":"unavailable",f=i?.found&&r(s?.project)?s.project:null,b=f&&typeof f.slug=="string"&&V.test(f.slug)?f.slug:null,U="not-read",S=null;b&&(S=ln(await H(e,"getProjectSnapshot",{slug:b}),b),U=S?"available":"unavailable");let u=i?.found?i:null,A=u?u.activity_applies_to_token&&u.token_verification==="VERIFIED"?"token":"project-only":null,j=u?.activity.last_ship&&u.activity.last_ship_url?{date:u.activity.last_ship,url:u.activity.last_ship_url,sourceHost:new URL(u.activity.last_ship_url).hostname}:null,Y=o.value?.token??a.value?.token??l.value?.token??null;return{chainId:g,token:t,checkedAt:new Date().toISOString(),hey:{provider:"HEY Research Lab",statusNote:"show exactly",status:u?B(u.status_label,u.status_help):i?.found===!1?P:"HEY Research Lab context unavailable",tie:A,qualification:A==="project-only"?G:null,tieLabel:A==="token"?O:null,verifiedBuilder:u?.verified_builder??null,projectSlug:b,projectLink:u?.project_link??null,asOf:u?.as_of??null,lastShip:j,snapshot:S},oak:{token:Y,statusBlock:o.value?.block??"not read",launch:o.value?.launch??null,addresses:a.value?.addresses??null,buybackVest:l.value?.vest??null},coverage:{hey:{scan:p,snapshot:U},oak:{status:o.state,addresses:a.state,launchInfo:l.state},note:Z}}}export{on as a,bn as b};
@@ -1 +1 @@
1
- import{a,e as A}from"./VXCGMALF.js";import{a as x}from"./66F5ZH34.js";import{c as P}from"./NWNYJ26T.js";import{b as w}from"./TI727O2H.js";import{a as e}from"./XSD5NL7J.js";import{encodeFunctionData as g,getAddress as m,parseAbi as v}from"viem";var r=v(["function asset() view returns (address)","function adaptersLength() view returns (uint256)","function adapters(uint256) view returns (address)","function forceDeallocatePenalty(address) view returns (uint256)","function forceDeallocate(address adapter,bytes data,uint256 assets,address onBehalf) returns (uint256)","function withdraw(uint256 assets,address receiver,address onBehalf) returns (uint256)","function multicall(bytes[] data)"]),y=v(["function morpho() view returns (address)","function marketIdsLength() view returns (uint256)","function marketIds(uint256) view returns (bytes32)","function expectedSupplyAssets(bytes32) view returns (uint256)"]),_=v(["function idToMarketParams(bytes32) view returns (address loanToken,address collateralToken,address oracle,address irm,uint256 lltv)"]),T="(address loanToken,address collateralToken,address oracle,address irm,uint256 lltv)",U=v([`function market(${T})`]),G={amount:x('USDG to withdraw to this wallet, in base units (USDG has 6 decimals). Example: "1000000" = 1 USDG.')};function z(p){return{tools:[{name:"priors_savings_liquidity",inputSchema:{type:"object",properties:{},additionalProperties:!1},async execute(){let t=p.clientFor(w),s=await t.readContract({address:a.savings,abi:r,functionName:"asset"});if(m(s)!==a.usdg)throw new e("Savings vault asset is not USDG.");let o=await t.readContract({address:a.savings,abi:r,functionName:"adaptersLength"});if(o>100n)throw new e("Savings vault has more adapters than this bounded reader supports.");let n=await Promise.all(Array.from({length:Number(o)},async(N,h)=>{let d=await t.readContract({address:a.savings,abi:r,functionName:"adapters",args:[BigInt(h)]}),c=await t.readContract({address:a.savings,abi:r,functionName:"forceDeallocatePenalty",args:[d]}),f=await t.readContract({address:d,abi:y,functionName:"marketIdsLength"});if(f>100n)throw new e("Adapter has too many markets for this bounded reader.");let b=await Promise.all(Array.from({length:Number(f)},async(l,i)=>{let k=await t.readContract({address:d,abi:y,functionName:"marketIds",args:[BigInt(i)]}),S=await t.readContract({address:d,abi:y,functionName:"expectedSupplyAssets",args:[k]});return{marketId:k,supplied:S.toString()}}));return{adapter:d,penalty:c.toString(),markets:b}}));return{chainId:w,vault:a.savings,adapters:n,caveat:"Supplied assets are not necessarily liquid. Force exit requires a zero penalty and a successful atomic preview."}}},{name:"priors_savings_force_withdraw",inputSchema:{type:"object",properties:{...G,allocations:{type:"array",minItems:1,maxItems:16,description:"One to 16 zero-penalty markets to deallocate from first; read priors_savings_liquidity.",items:{type:"object",properties:{adapter:{...P,description:"Address of a registered savings vault adapter, from priors_savings_liquidity."},marketId:{type:"string",pattern:"^0x[0-9a-fA-F]{64}$",description:"Morpho market id under that adapter: 0x followed by 64 hex digits (bytes32)."},amount:x('USDG to deallocate from this market, in base units (USDG has 6 decimals). Example: "1000000" = 1 USDG.')},required:["adapter","marketId","amount"],additionalProperties:!1}}},required:["amount","allocations"],additionalProperties:!1},async execute(t,s){if(p.network==="testnet")throw new e("Priors savings is mainnet only.");s=m(s);let o=A(t.amount,"amount");if(o===0n||!Array.isArray(t.allocations)||t.allocations.length<1||t.allocations.length>16)throw new e("Provide positive amount and 1 to 16 zero-penalty allocations.");let n=p.clientFor(w),N=await n.readContract({address:a.savings,abi:r,functionName:"asset"});if(m(N)!==a.usdg)throw new e("Savings asset is not USDG.");let h=await n.readContract({address:a.savings,abi:r,functionName:"adaptersLength"});if(h>100n)throw new e("Too many savings adapters to verify.");let d=await Promise.all(Array.from({length:Number(h)},(l,i)=>n.readContract({address:a.savings,abi:r,functionName:"adapters",args:[BigInt(i)]}))),c=[];for(let l of t.allocations){let i=m(l.adapter);if(!d.some(D=>m(D)===i)||!/^0x[0-9a-fA-F]{64}$/.test(l.marketId))throw new e("Allocation must name a registered adapter and a bytes32 market.");if(await n.readContract({address:a.savings,abi:r,functionName:"forceDeallocatePenalty",args:[i]})!==0n)throw new e("This force exit charges a penalty; Oak only builds the public zero-penalty route.");let S=await n.readContract({address:i,abi:y,functionName:"morpho"}),u=await n.readContract({address:S,abi:_,functionName:"idToMarketParams",args:[l.marketId]});if(m(u[0])!==a.usdg)throw new e("Force exit market loan token is not USDG.");let I=A(l.amount,"allocation amount");if(I===0n)throw new e("Allocation amount must be positive.");let C=`0x${g({abi:U,functionName:"market",args:[{loanToken:u[0],collateralToken:u[1],oracle:u[2],irm:u[3],lltv:u[4]}]}).slice(10)}`;c.push(g({abi:r,functionName:"forceDeallocate",args:[i,C,I,"0x0000000000000000000000000000000000000001"]}))}c.push(g({abi:r,functionName:"withdraw",args:[o,s,s]}));let f=[p.unsignedTx({to:a.savings,data:g({abi:r,functionName:"multicall",args:[c]}),value:"0",chainId:w,description:`Zero-penalty liquidity recovery then withdraw ${o} USDG base units atomically to this wallet.`})],b=await p.preview(f,s);return{txs:f,summary:`Force deallocate ${c.length-1} registered savings market allocation(s) with zero-penalty guard, then withdraw exactly ${o} USDG base units to ${s}. Market liquidity can still prevent exit. ${b.summary}`}}}]}}export{r as a,z as b};
1
+ import{a,e as A}from"./BWE5PXRE.js";import{a as x}from"./66F5ZH34.js";import{c as P}from"./NWNYJ26T.js";import{b as w}from"./EWZFZUVF.js";import{a as e}from"./XSD5NL7J.js";import{encodeFunctionData as g,getAddress as m,parseAbi as v}from"viem";var r=v(["function asset() view returns (address)","function adaptersLength() view returns (uint256)","function adapters(uint256) view returns (address)","function forceDeallocatePenalty(address) view returns (uint256)","function forceDeallocate(address adapter,bytes data,uint256 assets,address onBehalf) returns (uint256)","function withdraw(uint256 assets,address receiver,address onBehalf) returns (uint256)","function multicall(bytes[] data)"]),y=v(["function morpho() view returns (address)","function marketIdsLength() view returns (uint256)","function marketIds(uint256) view returns (bytes32)","function expectedSupplyAssets(bytes32) view returns (uint256)"]),_=v(["function idToMarketParams(bytes32) view returns (address loanToken,address collateralToken,address oracle,address irm,uint256 lltv)"]),T="(address loanToken,address collateralToken,address oracle,address irm,uint256 lltv)",U=v([`function market(${T})`]),G={amount:x('USDG to withdraw to this wallet, in base units (USDG has 6 decimals). Example: "1000000" = 1 USDG.')};function z(p){return{tools:[{name:"priors_savings_liquidity",inputSchema:{type:"object",properties:{},additionalProperties:!1},async execute(){let t=p.clientFor(w),s=await t.readContract({address:a.savings,abi:r,functionName:"asset"});if(m(s)!==a.usdg)throw new e("Savings vault asset is not USDG.");let o=await t.readContract({address:a.savings,abi:r,functionName:"adaptersLength"});if(o>100n)throw new e("Savings vault has more adapters than this bounded reader supports.");let n=await Promise.all(Array.from({length:Number(o)},async(N,h)=>{let d=await t.readContract({address:a.savings,abi:r,functionName:"adapters",args:[BigInt(h)]}),c=await t.readContract({address:a.savings,abi:r,functionName:"forceDeallocatePenalty",args:[d]}),f=await t.readContract({address:d,abi:y,functionName:"marketIdsLength"});if(f>100n)throw new e("Adapter has too many markets for this bounded reader.");let b=await Promise.all(Array.from({length:Number(f)},async(l,i)=>{let k=await t.readContract({address:d,abi:y,functionName:"marketIds",args:[BigInt(i)]}),S=await t.readContract({address:d,abi:y,functionName:"expectedSupplyAssets",args:[k]});return{marketId:k,supplied:S.toString()}}));return{adapter:d,penalty:c.toString(),markets:b}}));return{chainId:w,vault:a.savings,adapters:n,caveat:"Supplied assets are not necessarily liquid. Force exit requires a zero penalty and a successful atomic preview."}}},{name:"priors_savings_force_withdraw",inputSchema:{type:"object",properties:{...G,allocations:{type:"array",minItems:1,maxItems:16,description:"One to 16 zero-penalty markets to deallocate from first; read priors_savings_liquidity.",items:{type:"object",properties:{adapter:{...P,description:"Address of a registered savings vault adapter, from priors_savings_liquidity."},marketId:{type:"string",pattern:"^0x[0-9a-fA-F]{64}$",description:"Morpho market id under that adapter: 0x followed by 64 hex digits (bytes32)."},amount:x('USDG to deallocate from this market, in base units (USDG has 6 decimals). Example: "1000000" = 1 USDG.')},required:["adapter","marketId","amount"],additionalProperties:!1}}},required:["amount","allocations"],additionalProperties:!1},async execute(t,s){if(p.network==="testnet")throw new e("Priors savings is mainnet only.");s=m(s);let o=A(t.amount,"amount");if(o===0n||!Array.isArray(t.allocations)||t.allocations.length<1||t.allocations.length>16)throw new e("Provide positive amount and 1 to 16 zero-penalty allocations.");let n=p.clientFor(w),N=await n.readContract({address:a.savings,abi:r,functionName:"asset"});if(m(N)!==a.usdg)throw new e("Savings asset is not USDG.");let h=await n.readContract({address:a.savings,abi:r,functionName:"adaptersLength"});if(h>100n)throw new e("Too many savings adapters to verify.");let d=await Promise.all(Array.from({length:Number(h)},(l,i)=>n.readContract({address:a.savings,abi:r,functionName:"adapters",args:[BigInt(i)]}))),c=[];for(let l of t.allocations){let i=m(l.adapter);if(!d.some(D=>m(D)===i)||!/^0x[0-9a-fA-F]{64}$/.test(l.marketId))throw new e("Allocation must name a registered adapter and a bytes32 market.");if(await n.readContract({address:a.savings,abi:r,functionName:"forceDeallocatePenalty",args:[i]})!==0n)throw new e("This force exit charges a penalty; Oak only builds the public zero-penalty route.");let S=await n.readContract({address:i,abi:y,functionName:"morpho"}),u=await n.readContract({address:S,abi:_,functionName:"idToMarketParams",args:[l.marketId]});if(m(u[0])!==a.usdg)throw new e("Force exit market loan token is not USDG.");let I=A(l.amount,"allocation amount");if(I===0n)throw new e("Allocation amount must be positive.");let C=`0x${g({abi:U,functionName:"market",args:[{loanToken:u[0],collateralToken:u[1],oracle:u[2],irm:u[3],lltv:u[4]}]}).slice(10)}`;c.push(g({abi:r,functionName:"forceDeallocate",args:[i,C,I,"0x0000000000000000000000000000000000000001"]}))}c.push(g({abi:r,functionName:"withdraw",args:[o,s,s]}));let f=[p.unsignedTx({to:a.savings,data:g({abi:r,functionName:"multicall",args:[c]}),value:"0",chainId:w,description:`Zero-penalty liquidity recovery then withdraw ${o} USDG base units atomically to this wallet.`})],b=await p.preview(f,s);return{txs:f,summary:`Force deallocate ${c.length-1} registered savings market allocation(s) with zero-penalty guard, then withdraw exactly ${o} USDG base units to ${s}. Market liquidity can still prevent exit. ${b.summary}`}}}]}}export{r as a,z as b};
@@ -1 +1 @@
1
- import{a as v}from"./OVM4QIET.js";import{h as w}from"./2GXHYI23.js";import{a as y}from"./MSRCJ2BS.js";import{b as P,c as k,d as l}from"./WAKZWSHB.js";import{o as h}from"./7OOCAZBE.js";import{a as f}from"./43LI5NKJ.js";import{m as b,n as B}from"./NWNYJ26T.js";import{b as d}from"./TI727O2H.js";import{a as s}from"./XSD5NL7J.js";import{erc20Abi as L,formatUnits as R}from"viem";var U=70515n,C=250202n,S=568341n;function N(a,r){return{token:{...a},amount:r.toString()}}function A(a){if(a.network!==void 0&&a.network!=="mainnet")throw new s("LayerBank requires chain 4663.")}async function g(a,r,n,e){try{return b(await a.readContract({address:r.address,abi:L,functionName:"balanceOf",args:[n],blockNumber:e}),"LayerBank returned a malformed wallet balance read.")}catch(t){throw t instanceof s?t:new s("LayerBank wallet balance could not be read. Please try again.")}}async function T(a,r,n){try{let[e,t]=await Promise.all([r.getGasPrice(),h("ETH",{client:r,http:a.http,chainId:d,blockNumber:n})]),i=B(t.usdE18,"LayerBank gas reference is unavailable.",{positive:!0}),c=b(e,"LayerBank gas reference is unavailable.");if(c===0n)throw new s("LayerBank gas reference is unavailable.");let u=m=>Number(R(m*c*i/10n**18n,18)),o=u(U+C),p=u(S);if(![o,p].every(m=>Number.isFinite(m)&&m>0))throw new s("LayerBank gas reference is unavailable.");return{gasInUsd:o,gasOutUsd:p}}catch{throw new s("LayerBank gas costs could not be checked against a fresh ETH/USD reference. Please try again.")}}async function x(a,r){A(a),f(r);let n=a.clientFor(d),e=await y(n),[t,i,c,u]=await Promise.all([g(n,k,r,e.blockNumber),g(n,l,r,e.blockNumber),v(a.http),T(a,n,e.blockNumber)]),o=[...c.checks,"Gas costs use measured USDG calls plus 20% headroom; entry includes approval and supply."];e.active||o.push("LayerBank reserve is inactive."),e.frozen&&o.push("LayerBank reserve is frozen for deposits."),e.paused&&o.push("LayerBank reserve is paused."),e.capRoomBase===0n&&o.push("LayerBank supply cap has no room left.");let p={rateBasePct:e.rateBasePct,...c.bonus==="unavailable"?{}:{bonus:c.bonus},cashUsdgBase:e.cashUsdgBase,capRoomBase:e.capRoomBase,open:e.active&&!e.frozen&&!e.paused&&e.capRoomBase>0n,walletUsdgBase:t,walletReceiptBase:i,...u,checks:o};return{reserve:e,reading:p}}function F(a){return async r=>{try{return(await x(a,r)).reading}catch(n){return{rateBasePct:0,cashUsdgBase:0n,capRoomBase:0n,open:!1,walletUsdgBase:0n,walletReceiptBase:0n,gasInUsd:0,gasOutUsd:0,checks:[n instanceof s?a.plainError(n):"LayerBank could not be checked right now. Please try again."]}}}}async function W(a,r){A(a),f(r);let n=a.clientFor(d),e=await y(n),t=await g(n,l,r,e.blockNumber);if(t===0n)return[];let i=a.formatAmount(t.toString(),6);return[{module:"layerbank",id:`${d}:${P}`,chainId:d,assets:[N(l,t)],economics:{principal:[w("redeemable",{token:{...k},amount:t.toString(),source:"layerbank.receiptBalance",heldAs:l.address,measuredAtBlock:e.blockNumber.toString()})],debt:[],rewards:[],backing:[],coverage:{complete:!0}},description:`${i} lRobUSDG = ${i} USDG; base supply rate ${e.rateBasePct}% a year, read now.`}]}export{U as a,C as b,S as c,N as d,A as e,g as f,x as g,F as h,W as i};
1
+ import{a as v}from"./U4MSIH4G.js";import{h as w}from"./2GXHYI23.js";import{a as y}from"./HPBTSJW7.js";import{b as P,c as k,d as l}from"./5KKAN7XQ.js";import{o as h}from"./IR7KDBFU.js";import{a as f}from"./43LI5NKJ.js";import{m as b,n as B}from"./NWNYJ26T.js";import{b as d}from"./EWZFZUVF.js";import{a as s}from"./XSD5NL7J.js";import{erc20Abi as L,formatUnits as R}from"viem";var U=70515n,C=250202n,S=568341n;function N(a,r){return{token:{...a},amount:r.toString()}}function A(a){if(a.network!==void 0&&a.network!=="mainnet")throw new s("LayerBank requires chain 4663.")}async function g(a,r,n,e){try{return b(await a.readContract({address:r.address,abi:L,functionName:"balanceOf",args:[n],blockNumber:e}),"LayerBank returned a malformed wallet balance read.")}catch(t){throw t instanceof s?t:new s("LayerBank wallet balance could not be read. Please try again.")}}async function T(a,r,n){try{let[e,t]=await Promise.all([r.getGasPrice(),h("ETH",{client:r,http:a.http,chainId:d,blockNumber:n})]),i=B(t.usdE18,"LayerBank gas reference is unavailable.",{positive:!0}),c=b(e,"LayerBank gas reference is unavailable.");if(c===0n)throw new s("LayerBank gas reference is unavailable.");let u=m=>Number(R(m*c*i/10n**18n,18)),o=u(U+C),p=u(S);if(![o,p].every(m=>Number.isFinite(m)&&m>0))throw new s("LayerBank gas reference is unavailable.");return{gasInUsd:o,gasOutUsd:p}}catch{throw new s("LayerBank gas costs could not be checked against a fresh ETH/USD reference. Please try again.")}}async function x(a,r){A(a),f(r);let n=a.clientFor(d),e=await y(n),[t,i,c,u]=await Promise.all([g(n,k,r,e.blockNumber),g(n,l,r,e.blockNumber),v(a.http),T(a,n,e.blockNumber)]),o=[...c.checks,"Gas costs use measured USDG calls plus 20% headroom; entry includes approval and supply."];e.active||o.push("LayerBank reserve is inactive."),e.frozen&&o.push("LayerBank reserve is frozen for deposits."),e.paused&&o.push("LayerBank reserve is paused."),e.capRoomBase===0n&&o.push("LayerBank supply cap has no room left.");let p={rateBasePct:e.rateBasePct,...c.bonus==="unavailable"?{}:{bonus:c.bonus},cashUsdgBase:e.cashUsdgBase,capRoomBase:e.capRoomBase,open:e.active&&!e.frozen&&!e.paused&&e.capRoomBase>0n,walletUsdgBase:t,walletReceiptBase:i,...u,checks:o};return{reserve:e,reading:p}}function F(a){return async r=>{try{return(await x(a,r)).reading}catch(n){return{rateBasePct:0,cashUsdgBase:0n,capRoomBase:0n,open:!1,walletUsdgBase:0n,walletReceiptBase:0n,gasInUsd:0,gasOutUsd:0,checks:[n instanceof s?a.plainError(n):"LayerBank could not be checked right now. Please try again."]}}}}async function W(a,r){A(a),f(r);let n=a.clientFor(d),e=await y(n),t=await g(n,l,r,e.blockNumber);if(t===0n)return[];let i=a.formatAmount(t.toString(),6);return[{module:"layerbank",id:`${d}:${P}`,chainId:d,assets:[N(l,t)],economics:{principal:[w("redeemable",{token:{...k},amount:t.toString(),source:"layerbank.receiptBalance",heldAs:l.address,measuredAtBlock:e.blockNumber.toString()})],debt:[],rewards:[],backing:[],coverage:{complete:!0}},description:`${i} lRobUSDG = ${i} USDG; base supply rate ${e.rateBasePct}% a year, read now.`}]}export{U as a,C as b,S as c,N as d,A as e,g as f,x as g,F as h,W as i};
@@ -1 +1 @@
1
- import{b as I,c as M}from"./2OVJ2BTJ.js";import{a as b,c as s,d as k,f as E}from"./GQITAJVF.js";import{g}from"./OUROA7XR.js";import{a as N}from"./43LI5NKJ.js";import{b as C,j as D,k as i}from"./TI727O2H.js";import{a as y}from"./XSD5NL7J.js";import{erc20Abi as U,parseAbi as P}from"viem";var o=P(["function isValidMarket(address market) view returns(bool)","function readTokens() view returns(address sy,address pt,address yt)","function expiry() view returns(uint256)","function isExpired() view returns(bool)","function getTokensIn() view returns(address[])","function getTokensOut() view returns(address[])"]);async function H(u,r,d){if(N(r),I(d,!0),u.network==="testnet")throw new y("Pendle is available on chain 4663 only.");let e=u.clientFor(C),w=await e.getBlock(),t=w.number;s(await e.readContract({address:D[4663].pendle.marketFactory.address,abi:o,functionName:"isValidMarket",args:[r],blockNumber:t})===!0,"market is not verified by Pendle\u2019s factory");let[[c,m,O],p,h]=await Promise.all([e.readContract({address:r,abi:o,functionName:"readTokens",blockNumber:t}),e.readContract({address:r,abi:o,functionName:"expiry",blockNumber:t}),e.readContract({address:r,abi:o,functionName:"isExpired",blockNumber:t})]),[v,T]=await Promise.all([e.readContract({address:c,abi:o,functionName:"getTokensIn",blockNumber:t}),e.readContract({address:c,abi:o,functionName:"getTokensOut",blockNumber:t})]);s(v.some(n=>k(n,i)),"the earn cost comparison requires a USDG term"),s(T.some(n=>k(n,i)),"this term cannot cash out to USDG"),s(!h&&p>w.timestamp&&p<=BigInt(Number.MAX_SAFE_INTEGER),"this term has ended or its end date is unreadable");let l=n=>e.readContract({address:n,abi:U,functionName:"decimals",blockNumber:t}),[S,x,R]=await Promise.all([l(i),l(m),l(c)]),A={market:r,sy:c,pt:m,yt:O,expiry:Number(p),expired:h,kind:"stable",inputToken:i,inputSymbol:"USDG",inputDecimals:S,ptDecimals:x,syDecimals:R,tokensIn:[...v],tokensOut:[...T]},f=await g(u.http,{inputToken:i,outputToken:m,amount:d,wallet:b,slippageBps:50}),a=E(f.body,{market:A,wallet:b,amount:d,slippageBps:50});if(Math.abs(a.priceImpact)>.03)throw new y("This is a thin market and your size moves the price too much. Try a smaller amount.");return await M(e,A,"buy",d,a.amountOut,a.priceImpact),s(Date.now()-f.receivedAt>=0&&Date.now()-f.receivedAt<=3e4,"display quote is too old; try again"),{feeUsd:a.feeUsd,impactPct:Math.abs(a.priceImpact)*100,ptOutBase:a.amountOut}}export{H as a};
1
+ import{b as I,c as M}from"./SEXKWYUM.js";import{a as b,c as s,d as k,f as E}from"./5BPFF7NX.js";import{g}from"./OUROA7XR.js";import{a as N}from"./43LI5NKJ.js";import{b as C,j as D,k as i}from"./EWZFZUVF.js";import{a as y}from"./XSD5NL7J.js";import{erc20Abi as U,parseAbi as P}from"viem";var o=P(["function isValidMarket(address market) view returns(bool)","function readTokens() view returns(address sy,address pt,address yt)","function expiry() view returns(uint256)","function isExpired() view returns(bool)","function getTokensIn() view returns(address[])","function getTokensOut() view returns(address[])"]);async function H(u,r,d){if(N(r),I(d,!0),u.network==="testnet")throw new y("Pendle is available on chain 4663 only.");let e=u.clientFor(C),w=await e.getBlock(),t=w.number;s(await e.readContract({address:D[4663].pendle.marketFactory.address,abi:o,functionName:"isValidMarket",args:[r],blockNumber:t})===!0,"market is not verified by Pendle\u2019s factory");let[[c,m,O],p,h]=await Promise.all([e.readContract({address:r,abi:o,functionName:"readTokens",blockNumber:t}),e.readContract({address:r,abi:o,functionName:"expiry",blockNumber:t}),e.readContract({address:r,abi:o,functionName:"isExpired",blockNumber:t})]),[v,T]=await Promise.all([e.readContract({address:c,abi:o,functionName:"getTokensIn",blockNumber:t}),e.readContract({address:c,abi:o,functionName:"getTokensOut",blockNumber:t})]);s(v.some(n=>k(n,i)),"the earn cost comparison requires a USDG term"),s(T.some(n=>k(n,i)),"this term cannot cash out to USDG"),s(!h&&p>w.timestamp&&p<=BigInt(Number.MAX_SAFE_INTEGER),"this term has ended or its end date is unreadable");let l=n=>e.readContract({address:n,abi:U,functionName:"decimals",blockNumber:t}),[S,x,R]=await Promise.all([l(i),l(m),l(c)]),A={market:r,sy:c,pt:m,yt:O,expiry:Number(p),expired:h,kind:"stable",inputToken:i,inputSymbol:"USDG",inputDecimals:S,ptDecimals:x,syDecimals:R,tokensIn:[...v],tokensOut:[...T]},f=await g(u.http,{inputToken:i,outputToken:m,amount:d,wallet:b,slippageBps:50}),a=E(f.body,{market:A,wallet:b,amount:d,slippageBps:50});if(Math.abs(a.priceImpact)>.03)throw new y("This is a thin market and your size moves the price too much. Try a smaller amount.");return await M(e,A,"buy",d,a.amountOut,a.priceImpact),s(Date.now()-f.receivedAt>=0&&Date.now()-f.receivedAt<=3e4,"display quote is too old; try again"),{feeUsd:a.feeUsd,impactPct:Math.abs(a.priceImpact)*100,ptOutBase:a.amountOut}}export{H as a};
@@ -1,2 +1,2 @@
1
- import{t as T}from"./MQXSCNUL.js";import{b as C,c as N,d as E}from"./3PU2SD3U.js";import{b as M}from"./WAKZWSHB.js";import{b as O,la as S}from"./V5YSJKRH.js";import{a as R}from"./P4UQGWCP.js";import{c as v}from"./SCG5HWMN.js";import{e as y}from"./NWNYJ26T.js";import{b as m,j as _}from"./TI727O2H.js";import{a as p}from"./XSD5NL7J.js";import{getAddress as x,isAddress as k}from"viem";function P(i){if(typeof i!="string"||!i.trim()||i.length>200)throw new p("Provide nonempty filter text of at most 200 characters.");return i}function $(i,u){if(typeof i!="number"||!Number.isSafeInteger(i)||i<0||i>u)throw new p(`Choose a pagination integer from 0 to ${u}.`);return i}var w={morpho:{assess:"morpho_status",enter:"morpho_supply_collateral",exit:"morpho_withdraw_collateral"},steakhouse:{assess:"steakhouse_list",enter:"steakhouse_deposit",exit:"steakhouse_withdraw"},spark:{assess:"spark_list",enter:"spark_deposit",exit:"spark_withdraw"},netnet:{assess:"netnet_list",enter:"netnet_deposit",exit:"netnet_withdraw"},longbow:{assess:"longbow_list",enter:"longbow_deposit",exit:"longbow_withdraw"},grove:{assess:"grove_list",enter:"grove_deposit",exit:"grove_withdraw"},beefy:{assess:"beefy_list",enter:"beefy_deposit",exit:"beefy_withdraw"},uniswap:{assess:"uniswap_list_positions",enter:"uniswap_add",exit:"uniswap_remove"},layerbank:{assess:"layerbank_list",enter:"layerbank_deposit",exit:"layerbank_withdraw"}},h=_[m].vaults,L={steakhouse:[h.steakhouse.address],spark:[h.spark.address],netnet:[h.netnet.address],longbow:[h.longbowCore.address,h.longbowFrontier.address,h.longbowEth.address],grove:[h.groveAlm.address],beefy:R.vaults.map(i=>i.earnContractAddress),layerbank:[M]},U=new Set(T.map(i=>i.marketId.toLowerCase()));function q(i,u){return Object.hasOwn(L,i)&&typeof u=="string"&&k(u,{strict:!1})&&L[i].some(g=>g.toLowerCase()===u.toLowerCase())}var Z=i=>{let u=(t,n,r)=>({name:`merkl_${t}`,inputSchema:{type:"object",properties:n,additionalProperties:!1},execute:async(c,e)=>{try{let s=Object.keys(c).find(d=>!Object.hasOwn(n,d));if(s)throw new p(`Unsupported Merkl input: ${s}.`);return await r(c,e)}catch(s){throw new p(i.plainError(s))}}}),g={page:{type:"integer",minimum:0,maximum:1e4,description:"Zero-based page number."},items:{type:"integer",minimum:1,maximum:100,description:"Maximum entries per page, from 1 to 100."}},A=async(t,n)=>{let r=new URL(`https://api.merkl.xyz/v4/${t}`);for(let[c,e]of Object.entries(n))r.searchParams.set(c,e);return v(i.http,r.toString(),{method:"GET",headers:{"User-Agent":"oak-core/merkl"}},c=>Array.isArray(c)||y(c))},b=t=>{let n=$(t.items??20,100);if(!n)throw new p("Choose at least one item per page.");return{page:String($(t.page??0,1e4)),items:String(n)}};return{tools:[u("opportunities",{...g,protocol:{type:"string",description:"Protocol identifier to filter opportunities."},name:{type:"string",description:"Opportunity name search text."},explorerAddress:{type:"string",description:"Pool or market contract address to filter opportunities."}},async t=>{let n={chainId:String(m),campaigns:"true",...b(t)};if(t.protocol!==void 0&&(n.mainProtocolId=P(t.protocol)),t.name!==void 0&&(n.name=P(t.name)),t.explorerAddress!==void 0){if(typeof t.explorerAddress!="string"||!k(t.explorerAddress,{strict:!1}))throw new p("Provide a pool or market explorer address.");n.explorerAddress=x(t.explorerAddress)}let r=await A("opportunities",n);if(!Array.isArray(r)||!r.every(e=>y(e)&&typeof e.id=="string"&&Number.isSafeInteger(e.chainId)))throw new p("Merkl returned unexpected opportunities.");return{opportunities:r.filter(e=>e.chainId===m).map(e=>{let s=(y(e.protocol)?e.protocol.id:void 0)??e.mainProtocolId??e.mainProtocol,d=typeof s=="string"?s.toLowerCase():"",o;d==="morpho"&&e.action==="LEND"?e.type==="MORPHOCOLLATERAL"?[e.marketId,e.identifier,e.explorerAddress].some(I=>typeof I=="string"&&U.has(I.toLowerCase()))&&(o=w.morpho):typeof e.type=="string"&&(e.type==="ERC20LOGPROCESSOR"||e.type.includes("MORPHOVAULT"))&&typeof e.explorerAddress=="string"&&k(e.explorerAddress,{strict:!1})&&x(e.explorerAddress)===_[m].vaults.steakhouse.address&&(o=w.steakhouse):d==="uniswap"?e.type==="UNISWAP_V4"&&e.action==="POOL"&&(o=w.uniswap):q(d,e.explorerAddress)&&(e.action==="LEND"||e.action==="STAKE")&&(o=w[d]);let l=e.action==="POOL"||o?.enter==="uniswap_add",a=l?E(e.campaigns,Math.floor(Date.now()/1e3)):void 0,f=l&&a?{lpWarning:`Illustration for $100; no deposit amount has been selected.
1
+ import{t as T}from"./DPSFR3ZS.js";import{b as C,c as N,d as E}from"./3PU2SD3U.js";import{b as M}from"./5KKAN7XQ.js";import{b as O,la as S}from"./V5YSJKRH.js";import{a as R}from"./P4UQGWCP.js";import{c as v}from"./SCG5HWMN.js";import{e as y}from"./NWNYJ26T.js";import{b as m,j as _}from"./EWZFZUVF.js";import{a as p}from"./XSD5NL7J.js";import{getAddress as x,isAddress as k}from"viem";function P(i){if(typeof i!="string"||!i.trim()||i.length>200)throw new p("Provide nonempty filter text of at most 200 characters.");return i}function $(i,u){if(typeof i!="number"||!Number.isSafeInteger(i)||i<0||i>u)throw new p(`Choose a pagination integer from 0 to ${u}.`);return i}var w={morpho:{assess:"morpho_status",enter:"morpho_supply_collateral",exit:"morpho_withdraw_collateral"},steakhouse:{assess:"steakhouse_list",enter:"steakhouse_deposit",exit:"steakhouse_withdraw"},spark:{assess:"spark_list",enter:"spark_deposit",exit:"spark_withdraw"},netnet:{assess:"netnet_list",enter:"netnet_deposit",exit:"netnet_withdraw"},longbow:{assess:"longbow_list",enter:"longbow_deposit",exit:"longbow_withdraw"},grove:{assess:"grove_list",enter:"grove_deposit",exit:"grove_withdraw"},beefy:{assess:"beefy_list",enter:"beefy_deposit",exit:"beefy_withdraw"},uniswap:{assess:"uniswap_list_positions",enter:"uniswap_add",exit:"uniswap_remove"},layerbank:{assess:"layerbank_list",enter:"layerbank_deposit",exit:"layerbank_withdraw"}},h=_[m].vaults,L={steakhouse:[h.steakhouse.address],spark:[h.spark.address],netnet:[h.netnet.address],longbow:[h.longbowCore.address,h.longbowFrontier.address,h.longbowEth.address],grove:[h.groveAlm.address],beefy:R.vaults.map(i=>i.earnContractAddress),layerbank:[M]},U=new Set(T.map(i=>i.marketId.toLowerCase()));function q(i,u){return Object.hasOwn(L,i)&&typeof u=="string"&&k(u,{strict:!1})&&L[i].some(g=>g.toLowerCase()===u.toLowerCase())}var Z=i=>{let u=(t,n,r)=>({name:`merkl_${t}`,inputSchema:{type:"object",properties:n,additionalProperties:!1},execute:async(c,e)=>{try{let s=Object.keys(c).find(d=>!Object.hasOwn(n,d));if(s)throw new p(`Unsupported Merkl input: ${s}.`);return await r(c,e)}catch(s){throw new p(i.plainError(s))}}}),g={page:{type:"integer",minimum:0,maximum:1e4,description:"Zero-based page number."},items:{type:"integer",minimum:1,maximum:100,description:"Maximum entries per page, from 1 to 100."}},A=async(t,n)=>{let r=new URL(`https://api.merkl.xyz/v4/${t}`);for(let[c,e]of Object.entries(n))r.searchParams.set(c,e);return v(i.http,r.toString(),{method:"GET",headers:{"User-Agent":"oak-core/merkl"}},c=>Array.isArray(c)||y(c))},b=t=>{let n=$(t.items??20,100);if(!n)throw new p("Choose at least one item per page.");return{page:String($(t.page??0,1e4)),items:String(n)}};return{tools:[u("opportunities",{...g,protocol:{type:"string",description:"Protocol identifier to filter opportunities."},name:{type:"string",description:"Opportunity name search text."},explorerAddress:{type:"string",description:"Pool or market contract address to filter opportunities."}},async t=>{let n={chainId:String(m),campaigns:"true",...b(t)};if(t.protocol!==void 0&&(n.mainProtocolId=P(t.protocol)),t.name!==void 0&&(n.name=P(t.name)),t.explorerAddress!==void 0){if(typeof t.explorerAddress!="string"||!k(t.explorerAddress,{strict:!1}))throw new p("Provide a pool or market explorer address.");n.explorerAddress=x(t.explorerAddress)}let r=await A("opportunities",n);if(!Array.isArray(r)||!r.every(e=>y(e)&&typeof e.id=="string"&&Number.isSafeInteger(e.chainId)))throw new p("Merkl returned unexpected opportunities.");return{opportunities:r.filter(e=>e.chainId===m).map(e=>{let s=(y(e.protocol)?e.protocol.id:void 0)??e.mainProtocolId??e.mainProtocol,d=typeof s=="string"?s.toLowerCase():"",o;d==="morpho"&&e.action==="LEND"?e.type==="MORPHOCOLLATERAL"?[e.marketId,e.identifier,e.explorerAddress].some(I=>typeof I=="string"&&U.has(I.toLowerCase()))&&(o=w.morpho):typeof e.type=="string"&&(e.type==="ERC20LOGPROCESSOR"||e.type.includes("MORPHOVAULT"))&&typeof e.explorerAddress=="string"&&k(e.explorerAddress,{strict:!1})&&x(e.explorerAddress)===_[m].vaults.steakhouse.address&&(o=w.steakhouse):d==="uniswap"?e.type==="UNISWAP_V4"&&e.action==="POOL"&&(o=w.uniswap):q(d,e.explorerAddress)&&(e.action==="LEND"||e.action==="STAKE")&&(o=w[d]);let l=e.action==="POOL"||o?.enter==="uniswap_add",a=l?E(e.campaigns,Math.floor(Date.now()/1e3)):void 0,f=l&&a?{lpWarning:`Illustration for $100; no deposit amount has been selected.
2
2
  ${C({apr:typeof e.apr=="number"?e.apr:a.aprPct,endDate:typeof e.endTimestamp=="number"||typeof e.endTimestamp=="string"?e.endTimestamp:a.endsAt,amountUsd:100,outOfRangeIncentivized:a.outOfRangeIncentivized,feeWeightPct:a.feeWeightPct,creator:d==="uniswap"?a.creator:void 0})}`}:{};return{...e,oak:{...o?{candidateTools:o}:{},...f,destinationVerificationRequired:!0,eligibility:"Read campaign conditions; no wallet eligibility has been verified."}}}),...b(t),hasMore:r.length===Number(n.items),summary:"Powered by Merkl \u2014 https://app.merkl.xyz. Public, untrusted campaign data includes conditions and destinations. Candidate Oak tools require a matching verified market/vault and a supported entry AND exit. APR is indicative; no rewards are promised."}}),u("campaigns",{...g,creator:{type:"string",description:"Campaign creator address to filter."},tokenSymbol:{type:"string",description:"Reward token symbol to filter campaigns."},opportunityId:{type:"string",pattern:"^\\d{1,30}$",description:"Merkl opportunity identifier as a decimal string of 1 to 30 digits."}},async t=>{if(t.opportunityId!==void 0&&(t.creator!==void 0||t.tokenSymbol!==void 0))throw new p("Use creator and tokenSymbol without opportunityId; the opportunity endpoint does not support those filters.");if(t.opportunityId!==void 0&&(typeof t.opportunityId!="string"||!/^\d{1,30}$/.test(t.opportunityId)))throw new p("Provide an opportunityId as a decimal string of 1 to 30 digits.");let n={chainId:String(m),withOpportunity:"true",...b(t)};if(t.creator!==void 0){if(typeof t.creator!="string"||!k(t.creator,{strict:!1}))throw new p("Provide a creator address.");n.creatorAddress=x(t.creator)}t.tokenSymbol!==void 0&&(n.tokenSymbol=P(t.tokenSymbol));let r=t.opportunityId===void 0?"campaigns":`opportunities/${t.opportunityId}/campaigns`,c=await A(r,t.opportunityId===void 0?n:{}),e=t.opportunityId!==void 0&&y(c)?c:void 0;if(e&&e.chainId!==m)throw new p(`Merkl opportunity must be on chain ${m}.`);let s=t.opportunityId===void 0?c:e?.campaigns;if(!Array.isArray(s)||!s.every(f=>y(f)&&(typeof f.id=="string"||typeof f.id=="number")))throw new p("Merkl returned unexpected campaigns.");let d=e?s.filter(f=>f.distributionChainId===m):s,o=Number(n.page)*Number(n.items),l=t.opportunityId===void 0?d:d.slice(o,o+Number(n.items)),a=t.opportunityId===void 0?d.length===Number(n.items):o+Number(n.items)<d.length;return{campaigns:l,...e?{opportunity:{id:e.id,name:e.name,chainId:e.chainId,protocol:y(e.protocol)?{id:e.protocol.id,name:e.protocol.name}:void 0,explorerAddress:e.explorerAddress,identifier:e.identifier}}:{},chainId:m,...b(t),hasMore:a,summary:"Powered by Merkl \u2014 https://app.merkl.xyz. Campaign rules, budgets, timing, exclusions and configuration are public API data; verify the reward distribution chain and destination before entering."}}),u("earning_status",{view:{enum:["active","breakdowns","stats","claims"],description:"active lists earning opportunities; breakdowns shows reward details; stats shows totals; claims lists claims."},...g},async(t,n)=>{if(!k(n,{strict:!1}))throw new p("Provide a valid connected wallet address.");let r=t.view??"active";if(!["active","breakdowns","stats","claims"].includes(String(r)))throw new p("Choose active, breakdowns, stats or claims.");let c=r==="claims"?"claims":r==="breakdowns"?`users/${n}/rewards/chains/${m}/breakdowns`:`users/${n}/rewards/${r==="active"?"active-opportunities":"stats"}`,{page:e,items:s}=b(t),d=r==="breakdowns"?{}:{chainId:String(m)};r==="claims"&&(d.recipient=n);let o=await A(c,d),l=Number(e)*Number(s),a=Array.isArray(o)?o:r==="breakdowns"&&y(o)&&Array.isArray(o.opportunities)?o.opportunities:void 0,f=a?Array.isArray(o)?a.slice(l,l+Number(s)):{...o,opportunities:a.slice(l,l+Number(s))}:o,D=r==="active"&&Array.isArray(a)&&a.length===0?`${O(S,{after_deposit:N()})} `:"";return{view:r,chainId:m,wallet:n,data:f,...a?{page:e,items:s,hasMore:l+Number(s)<a.length}:{},summary:`${D}Powered by Merkl \u2014 https://app.merkl.xyz. API earning attribution and history can lag onchain state; pending earnings are not claimable. Private or restricted attribution may be omitted by Merkl. Recheck merkl_rewards before a claim.`}})]}};export{Z as a};
@@ -1 +1 @@
1
- import{c as d,d as n,h as C}from"./4CEV4FDG.js";import{h as r}from"./NWNYJ26T.js";import{b as I,j as x}from"./TI727O2H.js";import{decodeAbiParameters as j,encodeAbiParameters as R,erc20Abi as b,getAddress as F,keccak256 as D,parseAbi as G,parseAbiParameters as J,zeroAddress as K}from"viem";var Q=G(["function adaptersLength() view returns (uint256)","function adapters(uint256) view returns (address)","function liquidityAdapter() view returns (address)","function liquidityData() view returns (bytes)","function parentVault() view returns (address)","function asset() view returns (address)","function morpho() view returns (address)","function marketIdsLength() view returns (uint256)","function marketIds(uint256) view returns (bytes32)","function expectedSupplyAssets(bytes32) view returns (uint256)","function realAssets() view returns (uint256)","function morphoVaultV1() view returns (address)","function idToMarketParams(bytes32) view returns (address loanToken,address collateralToken,address oracle,address irm,uint256 lltv)","function market(bytes32) view returns (uint128 totalSupplyAssets,uint128 totalSupplyShares,uint128 totalBorrowAssets,uint128 totalBorrowShares,uint128 lastUpdate,uint128 fee)"]),V=J("(address loanToken,address collateralToken,address oracle,address irm,uint256 lltv)"),p=F(x[I].morpho.morpho_blue.address),P=(a,t)=>a<t?a:t;async function _(a,t,u,z){let e=(w,i,m=[])=>a.readContract({address:w,abi:Q,functionName:i,args:m,blockNumber:u}),[O,$,B,f]=await Promise.all([a.readContract({address:t.asset,abi:b,functionName:"balanceOf",args:[t.vault],blockNumber:u}),e(t.vault,"adaptersLength"),e(t.vault,"liquidityAdapter"),e(t.vault,"liquidityData")]),g=n(O),v=n($);if(v>64n||typeof f!="string")return{kind:"unknown"};if(r(B,K))return{kind:"unknown"};let s=d(B),A=await Promise.all(Array.from({length:Number(v)},async(w,i)=>d(await e(t.vault,"adapters",[BigInt(i)]))));if(new Set(A).size!==A.length||!A.includes(s)||!r(await e(s,"parentVault"),t.vault))return{kind:"unknown"};if(/^0x[0-9a-f]{320}$/i.test(f)){if(v!==1n||!r(await e(s,"asset"),t.asset)||!r(await e(s,"morpho"),p))return{kind:"unknown"};let[w]=j(V,f),i=D(R(V,[w])),m=n(await e(s,"marketIdsLength"));if(m>64n)return{kind:"unknown"};let y=await Promise.all(Array.from({length:Number(m)},(o,U)=>e(s,"marketIds",[BigInt(U)])));if(y.some(o=>typeof o!="string"||!/^0x[0-9a-f]{64}$/i.test(o))||new Set(y.map(o=>String(o).toLowerCase())).size!==y.length||!y.some(o=>r(o,i)))return{kind:"unknown"};let[l,c,M,N]=await Promise.all([e(p,"idToMarketParams",[i]),e(p,"market",[i]),e(s,"expectedSupplyAssets",[i]),a.readContract({address:t.asset,abi:b,functionName:"balanceOf",args:[p],blockNumber:u})]);if(!Array.isArray(l)||l.length!==5||!Array.isArray(c)||c.length!==6)return{kind:"unknown"};let T={loanToken:d(l[0]),collateralToken:d(l[1]),oracle:d(l[2]),irm:d(l[3]),lltv:n(l[4])};if(!r(D(R(V,[T])),i)||!r(T.loanToken,t.asset))return{kind:"unknown"};for(let o of c)if(n(o)>=1n<<128n)return{kind:"unknown"};let q=n(c[0]),L=n(c[2]);return L>q?{kind:"unknown"}:{kind:"morpho-market",readyBase:g+P(n(N),P(n(M),q-L))}}if(f!=="0x"||!z)return{kind:"unknown"};let[E,H]=await Promise.all([e(s,"realAssets"),e(s,"morphoVaultV1")]),k=d(H);if(r(k,t.vault)||!r(await e(k,"asset"),t.asset))return{kind:"unknown"};let h=n(E);if(n(await a.readContract({address:t.asset,abi:b,functionName:"balanceOf",args:[k],blockNumber:u}))>=h)return{kind:"parked-vault",readyBase:g+h};let S=await _(a,{...t,vault:k},u,!1).catch(()=>({kind:"unknown",readyBase:void 0}));return S.readyBase===void 0?{kind:"unknown"}:{kind:"parked-vault",readyBase:g+P(h,S.readyBase)}}async function W(a,t,u){try{return await _(a,t,await C(a,u),!0)}catch{return{kind:"unknown"}}}var at=(a,t)=>W(a,t);export{W as a,at as b};
1
+ import{c as d,d as n,h as C}from"./4CEV4FDG.js";import{h as r}from"./NWNYJ26T.js";import{b as I,j as x}from"./EWZFZUVF.js";import{decodeAbiParameters as j,encodeAbiParameters as R,erc20Abi as b,getAddress as F,keccak256 as D,parseAbi as G,parseAbiParameters as J,zeroAddress as K}from"viem";var Q=G(["function adaptersLength() view returns (uint256)","function adapters(uint256) view returns (address)","function liquidityAdapter() view returns (address)","function liquidityData() view returns (bytes)","function parentVault() view returns (address)","function asset() view returns (address)","function morpho() view returns (address)","function marketIdsLength() view returns (uint256)","function marketIds(uint256) view returns (bytes32)","function expectedSupplyAssets(bytes32) view returns (uint256)","function realAssets() view returns (uint256)","function morphoVaultV1() view returns (address)","function idToMarketParams(bytes32) view returns (address loanToken,address collateralToken,address oracle,address irm,uint256 lltv)","function market(bytes32) view returns (uint128 totalSupplyAssets,uint128 totalSupplyShares,uint128 totalBorrowAssets,uint128 totalBorrowShares,uint128 lastUpdate,uint128 fee)"]),V=J("(address loanToken,address collateralToken,address oracle,address irm,uint256 lltv)"),p=F(x[I].morpho.morpho_blue.address),P=(a,t)=>a<t?a:t;async function _(a,t,u,z){let e=(w,i,m=[])=>a.readContract({address:w,abi:Q,functionName:i,args:m,blockNumber:u}),[O,$,B,f]=await Promise.all([a.readContract({address:t.asset,abi:b,functionName:"balanceOf",args:[t.vault],blockNumber:u}),e(t.vault,"adaptersLength"),e(t.vault,"liquidityAdapter"),e(t.vault,"liquidityData")]),g=n(O),v=n($);if(v>64n||typeof f!="string")return{kind:"unknown"};if(r(B,K))return{kind:"unknown"};let s=d(B),A=await Promise.all(Array.from({length:Number(v)},async(w,i)=>d(await e(t.vault,"adapters",[BigInt(i)]))));if(new Set(A).size!==A.length||!A.includes(s)||!r(await e(s,"parentVault"),t.vault))return{kind:"unknown"};if(/^0x[0-9a-f]{320}$/i.test(f)){if(v!==1n||!r(await e(s,"asset"),t.asset)||!r(await e(s,"morpho"),p))return{kind:"unknown"};let[w]=j(V,f),i=D(R(V,[w])),m=n(await e(s,"marketIdsLength"));if(m>64n)return{kind:"unknown"};let y=await Promise.all(Array.from({length:Number(m)},(o,U)=>e(s,"marketIds",[BigInt(U)])));if(y.some(o=>typeof o!="string"||!/^0x[0-9a-f]{64}$/i.test(o))||new Set(y.map(o=>String(o).toLowerCase())).size!==y.length||!y.some(o=>r(o,i)))return{kind:"unknown"};let[l,c,M,N]=await Promise.all([e(p,"idToMarketParams",[i]),e(p,"market",[i]),e(s,"expectedSupplyAssets",[i]),a.readContract({address:t.asset,abi:b,functionName:"balanceOf",args:[p],blockNumber:u})]);if(!Array.isArray(l)||l.length!==5||!Array.isArray(c)||c.length!==6)return{kind:"unknown"};let T={loanToken:d(l[0]),collateralToken:d(l[1]),oracle:d(l[2]),irm:d(l[3]),lltv:n(l[4])};if(!r(D(R(V,[T])),i)||!r(T.loanToken,t.asset))return{kind:"unknown"};for(let o of c)if(n(o)>=1n<<128n)return{kind:"unknown"};let q=n(c[0]),L=n(c[2]);return L>q?{kind:"unknown"}:{kind:"morpho-market",readyBase:g+P(n(N),P(n(M),q-L))}}if(f!=="0x"||!z)return{kind:"unknown"};let[E,H]=await Promise.all([e(s,"realAssets"),e(s,"morphoVaultV1")]),k=d(H);if(r(k,t.vault)||!r(await e(k,"asset"),t.asset))return{kind:"unknown"};let h=n(E);if(n(await a.readContract({address:t.asset,abi:b,functionName:"balanceOf",args:[k],blockNumber:u}))>=h)return{kind:"parked-vault",readyBase:g+h};let S=await _(a,{...t,vault:k},u,!1).catch(()=>({kind:"unknown",readyBase:void 0}));return S.readyBase===void 0?{kind:"unknown"}:{kind:"parked-vault",readyBase:g+P(h,S.readyBase)}}async function W(a,t,u){try{return await _(a,t,await C(a,u),!0)}catch{return{kind:"unknown"}}}var at=(a,t)=>W(a,t);export{W as a,at as b};
@@ -0,0 +1 @@
1
+ import{m as R,s as S,t as B,u as U}from"./TZG7HTVM.js";import{a as f,b as P,e as x,f as H,h as C,n as O}from"./UMY6SP7C.js";import{b as I,j as w,k as v}from"./CJMVRV34.js";import{a as d}from"./XSD5NL7J.js";import{getAddress as L,toFunctionSelector as u,zeroAddress as j}from"viem";var E=["hookr_pay_later_create","hookr_pay_later_transfer","hookr_pay_later_cancel","hookr_pay_later_accept","hookr_pay_later_release","hookr_pay_later_accept_back","hookr_pay_later_withdraw_earnings","hookr_pay_later_withdraw_inventory"],V="hookr_pay_later_vault",D=e=>E.includes(e),Y="function createVault(bytes32 familyId, uint8 member, (uint16 premiumBps,uint16 strikeMarkupBps,uint32 tenor,uint16 priceWindowBlocks,uint16 maxBlockDepthBps,uint32 anchorDecayBlocks,uint16 topGuardBps,uint128 minOrderUnits,uint128 maxOrderUnits,uint128 maxUnitsPerBlock,uint128 maxActiveUnits,uint128 maxInventory,uint128 minPremium) terms)",b={hookr_pay_later_create:{step:"create",target:"factory",selector:u(Y),next:"The vault exists and holds nothing yet; next: hookr_pay_later_transfer."},hookr_pay_later_transfer:{step:"transfer",target:"launcher",selector:u("function transferFamily(bytes32,address,uint16)"),next:"The transfer is pending and nothing has moved; next: hookr_pay_later_accept, or hookr_pay_later_cancel to undo it."},hookr_pay_later_cancel:{step:"cancel",target:"launcher",selector:u("function transferFamily(bytes32,address,uint16)"),next:"No transfer is pending and this wallet keeps the family; next: hookr_pay_later_transfer to start again, or nothing."},hookr_pay_later_accept:{step:"accept",target:"vault",selector:u("function acceptFamily()"),next:"The vault owns the family; to take it back, next: hookr_pay_later_release, then hookr_pay_later_accept_back."},hookr_pay_later_release:{step:"release",target:"vault",selector:u("function releaseFamily()"),next:"The vault still owns the family until this wallet accepts it back; next: hookr_pay_later_accept_back."},hookr_pay_later_accept_back:{step:"accept-back",target:"launcher",selector:u("function acceptFamily(bytes32)"),next:"This wallet owns the family again; next: hookr_pay_later_vault to read what remains, then hookr_pay_later_withdraw_inventory or hookr_pay_later_withdraw_earnings."},hookr_pay_later_withdraw_earnings:{step:"withdraw-earnings",target:"vault",selector:u("function withdrawEarnings(address,address,uint256)"),next:"next: hookr_pay_later_vault to read what the vault still owes."},hookr_pay_later_withdraw_inventory:{step:"withdraw-inventory",target:"vault",selector:u("function withdrawInventory(address,uint128)"),next:"next: hookr_pay_later_vault to read the remaining free and reserved inventory."}},ae=e=>b[e].step,re=e=>b[e].target,M={type:"string",pattern:"^0x[0-9a-fA-F]{40}$"},A=e=>({type:"object",properties:e,required:Object.keys(e),additionalProperties:!1}),K={premiumBps:"Nonrefundable upfront premium rate in bps, 100 to 5000; the minimum premium can dominate.",strikeMarkupBps:"Strike markup in bps, 0 to 5000.",tenor:"Order lifetime in seconds, 300 to 604800; exercise must precede expiry.",priceWindowBlocks:"Price lookback in blocks, 1 to 64.",maxBlockDepthBps:"Maximum reference-band depth per block in bps, 1 to 100.",anchorDecayBlocks:"Anchor decay window in blocks, 300 to 50400.",topGuardBps:"Top price guard in bps, 0 to 5000 and at least the live factory floor.",minOrderUnits:"Minimum subject-token order size in base units, positive.",maxOrderUnits:"Maximum subject-token order size in base units, at least minOrderUnits.",maxUnitsPerBlock:"Maximum subject base units reserved per block, at least maxOrderUnits.",maxActiveUnits:"Maximum subject base units reserved by active orders, at least maxUnitsPerBlock.",maxInventory:"Maximum subject-token inventory in base units, at least maxActiveUnits and at most 10^36.",minPremium:"Minimum upfront quote-currency premium in base units."},m={...P,description:"Launcher family id, 0x plus 64 hex digits. The vault is the one the factory records for this family and the signing wallet; no vault address is accepted."},F={hookr_pay_later_create:{familyId:{...P,description:"Existing Launcher family id, 0x plus 64 hex digits; the signing wallet must own the whole family and becomes the vault beneficiary."},member:{...f,description:"Reference family member index as a decimal string, 0 to 7 and below the live member count."},terms:{...A(Object.fromEntries(Object.entries(K).map(([e,a])=>[e,{...f,description:a}]))),description:"All thirteen immutable Pay Later economic terms, each an explicit decimal string."},protocolRecipient:{...M,description:"Expected nonzero protocol premium recipient, checked against the reference Rules contract."},protocolShareBps:{...f,description:"Expected protocol premium share in bps, 2000 to 5000; checked against the factory and created vault."}},hookr_pay_later_transfer:{familyId:m,claims:{...f,description:'Decimal uint16 bit mask: bits 2i and 2i+1 select member i currency0 and currency1 fees as PoolManager claims that Oak cannot redeem; use "0" for tokens.'}},hookr_pay_later_cancel:{familyId:m},hookr_pay_later_accept:{familyId:m},hookr_pay_later_release:{familyId:m},hookr_pay_later_accept_back:{familyId:m},hookr_pay_later_withdraw_earnings:{familyId:m,currency:{...M,description:"Currency address to withdraw to the signing wallet; the zero address means native ETH."},amount:{...f,description:"Amount in base units, above zero and at most what the vault owes the beneficiary in this currency."}},hookr_pay_later_withdraw_inventory:{familyId:m,amount:{...f,description:"Subject-token amount in base units, above zero and at most the vault free inventory; reserved inventory cannot be withdrawn. The payout always goes to the signing wallet."}}},W=e=>A(F[e]),$=A({familyId:m});function q(e,a,n){let o=b[e],t=a.to.toLowerCase(),i={factory:R.toLowerCase(),launcher:I.launcherV1.toLowerCase()};if(!(o.target==="vault"?t!==i.factory&&t!==i.launcher&&t!==j&&(n===void 0||t===n.toLowerCase()):t===i[o.target])||a.data.slice(0,10).toLowerCase()!==o.selector)throw new d("Pay Later transaction is not the one reviewed call of this custody step.")}async function G(e,a,n,o){if(a.network==="testnet")throw new d("Pay Later requires Robinhood Chain 4663.");if(!D(e))throw new d("Choose a dedicated Pay Later custody action.");let t=Object.keys(F[e]),i=x(n,t,t),c=a.clientFor(4663),h=await w(c),r=await B(c,h.number,i,o,b[e].step),{summary:y}=r,p=C(r.familyId),l=L(r.vault),s=L(r.beneficiary);if(s!==L(o))throw new d("Pay Later beneficiary is not the signing wallet.");q(e,r.action,e==="hookr_pay_later_create"?void 0:l);let _=[a.unsignedTx({to:r.action.to,data:r.action.data,value:"0",chainId:4663,description:y})];return await v(c,h),{txs:_,inputs:[],summary:y,name:e,step:r.step,familyId:p,member:r.member,vault:l,beneficiary:s,...e==="hookr_pay_later_transfer"?{claims:Number(H(i.claims,16))}:{},terms:O({blockNumber:h.number,blockHash:h.hash,step:r.step,familyId:p,member:r.member,vault:l,beneficiary:s,to:r.action.to,data:r.action.data,summary:y})}}function J(e){if(!Array.isArray(e)||e.length!==1)throw new d("Pay Later requires exactly one separately confirmed custody call.");x(e[0],["to","data","value","chainId","description"],["to","data","value","chainId","description"])}function oe(e,a,n){J(a);let o=a[0],t=n[0];if(!D(e)||!t||n.length!==1||o.chainId!==4663||o.value!=="0"||o.to.toLowerCase()!==t.to.toLowerCase()||o.data.toLowerCase()!==t.data.toLowerCase())throw new d("Pay Later transaction differs from the locally checked custody step.");q(e,o)}function ne(e){return[...E.map(a=>({name:a,inputSchema:W(a),execute:async(n,o)=>{let t=await G(a,e,n,o);return{txs:t.txs,summary:t.summary,terms:t.terms,step:t.step,familyId:t.familyId,vault:t.vault,beneficiary:t.beneficiary,preview:await e.preview(t.txs,o)}}})),{name:V,inputSchema:$,execute:async(a,n)=>{if(e.network==="testnet")throw new d("Pay Later requires Robinhood Chain 4663.");let o=x(a,["familyId"],["familyId"]),t=e.clientFor(4663),i=await w(t);return U(t,i.number,{familyId:o.familyId},n)}}]}async function ie(e,a,n,o){let t=()=>{throw new d("Pay Later mined but custody verification failed. Inspect this receipt; do not repeat the action.")},[i,c]=await Promise.all([e.getTransactionReceipt({hash:o}),e.getTransaction({hash:o})]),h=a.txs[0],r=(k,z)=>typeof k=="string"&&k.toLowerCase()===z.toLowerCase();(i.status!=="success"||!r(i.transactionHash,o)||!r(c.hash,o)||c.chainId!==4663||!r(c.from,n)||!r(c.to,h.to)||!r(c.input,h.data)||c.value!==0n)&&t();let y=await w(e,i.blockNumber);y.hash!==i.blockHash&&t();let p=await S(e,y.number,a.familyId,n).catch(t),{vault:l}=a,{step:s}=a,_=k=>r(p.familyOwner,k),g=k=>r(p.pendingOwner,k),N=s==="create"?!0:s==="transfer"?_(n)&&g(l)&&p.pendingClaims===a.claims:s==="cancel"?_(n)&&g(j):s==="accept"?_(l):s==="release"?_(l)&&g(n):s==="accept-back"?_(n):!0;(!r(p.vault,l)||!r(p.owner,n)||!N)&&t(),await v(e,y);let{next:T}=b[a.name];return{receiptStatus:"verified",step:s,familyId:a.familyId,vault:l,beneficiary:a.beneficiary,blockNumber:y.number.toString(),next:T,summary:`Pay Later ${s} receipt and vault verified. ${T}`}}export{E as a,V as b,D as c,ae as d,re as e,W as f,$ as g,G as h,J as i,oe as j,ne as k,ie as l};
@@ -1 +1 @@
1
- import{d as R}from"./6LVHN33V.js";import{a as N,f as L,g as v}from"./ZXRIJG6H.js";import{I as H,K as j,L as O,b as p,d as l,z as D}from"./FRT6AC6M.js";import{g as d}from"./NWNYJ26T.js";import{b as x}from"./TI727O2H.js";import{a as e}from"./XSD5NL7J.js";import{decodeAbiParameters as J,decodeFunctionData as b,encodeAbiParameters as K,encodeFunctionData as Q,erc20Abi as W,getAddress as Y,parseAbi as Z,parseAbiParameters as ee}from"viem";var U=Z(["function modifyLiquidities(bytes unlockData,uint256 deadline) payable"]),V=ee("bytes actions,bytes[] params");function de(f,$){return{tools:[{name:"uniswap_batch",inputSchema:{type:"object",additionalProperties:!1,required:["operations"],properties:{operations:{description:"One to twenty v4 liquidity operations to execute atomically; each must use a distinct position NFT.",type:"array",minItems:1,maxItems:20,items:{type:"object",additionalProperties:!1,required:["name","arguments"],properties:{name:{description:'Choose "uniswap_add" to add liquidity, "uniswap_collect" to collect fees or "uniswap_remove" to remove liquidity.',type:"string",enum:["uniswap_add","uniswap_collect","uniswap_remove"]},arguments:{description:"Arguments for the selected v4 add, collect or remove operation; explicitly select version v4.",anyOf:[H,j,O]}}}}}},async execute(a,A){if(v(a,["operations"]),!Array.isArray(a.operations)||a.operations.length<1||a.operations.length>20)throw new e("Provide 1 to 20 v4 liquidity operations.");let s="0x",c,h=[],P=0n,w=new Map,_=new Set,E=new Set;for(let t of a.operations){if(!t||typeof t!="object"||Array.isArray(t))throw new e("Each operation needs name and arguments.");let n=t;if(v(n,["name","arguments"]),!["uniswap_add","uniswap_collect","uniswap_remove"].includes(String(n.name))||!n.arguments||typeof n.arguments!="object"||Array.isArray(n.arguments))throw new e("Batch supports v4 add, collect and remove operations only.");let r=n.arguments;if(r.version!=="v4")throw new e("Every batch operation must explicitly select version v4.");if(r.initialPrice!==void 0||r.sqrtPriceX96!==void 0)throw new e("Create a pool before batching its liquidity operations.");if(r.tokenId!==void 0){let o=N(r.tokenId,"tokenId").toString();if(E.has(o))throw new e("Batch tokenIds must be distinct decimal strings.");E.add(o)}else if(n.name!=="uniswap_add")throw new e("Existing-position operations require tokenId.");let I=await $.tools.find(o=>o.name===n.name).execute(r,A),u=I.txs.at(-1);if(!u||!d(u.to,p))throw new e("Batch operation returned an unexpected destination.");P+=BigInt(u.value);for(let o of I.txs.slice(0,-1)){if(BigInt(o.value)!==0n)throw new e("Batch prerequisite cannot send native currency.");if(d(o.to,l)){let i=b({abi:R,data:o.data}),[M,G,X,z]=i.args;if(!d(G,p))throw new e("Batch Permit2 spender must be PositionManager.");let T=M.toLowerCase(),m=w.get(T),B=BigInt(z),C=(m?.amount??0n)+X;if(C>=1n<<160n)throw new e("Batch approval exceeds uint160.");w.set(T,{token:M,amount:C,expiration:m&&m.expiration<B?m.expiration:B})}else{let i=b({abi:W,data:o.data});if(i.functionName!=="approve"||!d(i.args[0],l))throw new e("Unexpected batch prerequisite.")}}let S=b({abi:U,data:u.data}),[F,y]=J(V,S.args[0]),k=F.slice(2).match(/../g)??[];if(k.length!==y.length)throw new e("Batch action/parameter count differs.");k.forEach((o,i)=>{o==="14"?_.add(y[i]):(s=`${s}${o}`,h.push(y[i]))});let q=S.args[1];c=c===void 0||q<c?q:c}for(let t of _)s=`${s}14`,h.push(t);let g=[];for(let t of w.values())g.push(f.approval(Y(t.token),l,t.amount.toString(),x),D(t.token,p,t.amount.toString(),t.expiration.toString()));return g.push(f.unsignedTx({to:p,data:Q({abi:U,functionName:"modifyLiquidities",args:[K(V,[s,h]),c]}),value:P.toString(),chainId:x,description:`Atomically modify ${a.operations.length} v4 positions; recipients are the signing wallet.`})),L(f,g,A,"Atomic v4 batch: every operation must succeed. Each position retains its own minimums; preview covers the complete action stream.")}}]}}export{U as a,V as b,de as c};
1
+ import{d as R}from"./KB2JWQZ4.js";import{a as N,f as L,g as v}from"./QP2B7AYX.js";import{I as H,K as j,L as O,b as p,d as l,z as D}from"./5677LZOV.js";import{g as d}from"./NWNYJ26T.js";import{b as x}from"./EWZFZUVF.js";import{a as e}from"./XSD5NL7J.js";import{decodeAbiParameters as J,decodeFunctionData as b,encodeAbiParameters as K,encodeFunctionData as Q,erc20Abi as W,getAddress as Y,parseAbi as Z,parseAbiParameters as ee}from"viem";var U=Z(["function modifyLiquidities(bytes unlockData,uint256 deadline) payable"]),V=ee("bytes actions,bytes[] params");function de(f,$){return{tools:[{name:"uniswap_batch",inputSchema:{type:"object",additionalProperties:!1,required:["operations"],properties:{operations:{description:"One to twenty v4 liquidity operations to execute atomically; each must use a distinct position NFT.",type:"array",minItems:1,maxItems:20,items:{type:"object",additionalProperties:!1,required:["name","arguments"],properties:{name:{description:'Choose "uniswap_add" to add liquidity, "uniswap_collect" to collect fees or "uniswap_remove" to remove liquidity.',type:"string",enum:["uniswap_add","uniswap_collect","uniswap_remove"]},arguments:{description:"Arguments for the selected v4 add, collect or remove operation; explicitly select version v4.",anyOf:[H,j,O]}}}}}},async execute(a,A){if(v(a,["operations"]),!Array.isArray(a.operations)||a.operations.length<1||a.operations.length>20)throw new e("Provide 1 to 20 v4 liquidity operations.");let s="0x",c,h=[],P=0n,w=new Map,_=new Set,E=new Set;for(let t of a.operations){if(!t||typeof t!="object"||Array.isArray(t))throw new e("Each operation needs name and arguments.");let n=t;if(v(n,["name","arguments"]),!["uniswap_add","uniswap_collect","uniswap_remove"].includes(String(n.name))||!n.arguments||typeof n.arguments!="object"||Array.isArray(n.arguments))throw new e("Batch supports v4 add, collect and remove operations only.");let r=n.arguments;if(r.version!=="v4")throw new e("Every batch operation must explicitly select version v4.");if(r.initialPrice!==void 0||r.sqrtPriceX96!==void 0)throw new e("Create a pool before batching its liquidity operations.");if(r.tokenId!==void 0){let o=N(r.tokenId,"tokenId").toString();if(E.has(o))throw new e("Batch tokenIds must be distinct decimal strings.");E.add(o)}else if(n.name!=="uniswap_add")throw new e("Existing-position operations require tokenId.");let I=await $.tools.find(o=>o.name===n.name).execute(r,A),u=I.txs.at(-1);if(!u||!d(u.to,p))throw new e("Batch operation returned an unexpected destination.");P+=BigInt(u.value);for(let o of I.txs.slice(0,-1)){if(BigInt(o.value)!==0n)throw new e("Batch prerequisite cannot send native currency.");if(d(o.to,l)){let i=b({abi:R,data:o.data}),[M,G,X,z]=i.args;if(!d(G,p))throw new e("Batch Permit2 spender must be PositionManager.");let T=M.toLowerCase(),m=w.get(T),B=BigInt(z),C=(m?.amount??0n)+X;if(C>=1n<<160n)throw new e("Batch approval exceeds uint160.");w.set(T,{token:M,amount:C,expiration:m&&m.expiration<B?m.expiration:B})}else{let i=b({abi:W,data:o.data});if(i.functionName!=="approve"||!d(i.args[0],l))throw new e("Unexpected batch prerequisite.")}}let S=b({abi:U,data:u.data}),[F,y]=J(V,S.args[0]),k=F.slice(2).match(/../g)??[];if(k.length!==y.length)throw new e("Batch action/parameter count differs.");k.forEach((o,i)=>{o==="14"?_.add(y[i]):(s=`${s}${o}`,h.push(y[i]))});let q=S.args[1];c=c===void 0||q<c?q:c}for(let t of _)s=`${s}14`,h.push(t);let g=[];for(let t of w.values())g.push(f.approval(Y(t.token),l,t.amount.toString(),x),D(t.token,p,t.amount.toString(),t.expiration.toString()));return g.push(f.unsignedTx({to:p,data:Q({abi:U,functionName:"modifyLiquidities",args:[K(V,[s,h]),c]}),value:P.toString(),chainId:x,description:`Atomically modify ${a.operations.length} v4 positions; recipients are the signing wallet.`})),L(f,g,A,"Atomic v4 batch: every operation must succeed. Each position retains its own minimums; preview covers the complete action stream.")}}]}}export{U as a,V as b,de as c};
@@ -1 +1 @@
1
- import{a as c,f as d,g as s}from"./ZXRIJG6H.js";import{f as a}from"./FRT6AC6M.js";import{a as p}from"./66F5ZH34.js";import{b as i}from"./TI727O2H.js";import{a as e}from"./XSD5NL7J.js";import{encodeFunctionData as m,erc20Abi as h,parseAbi as E}from"viem";var w=E(["function deposit() payable","function withdraw(uint256)"]);function y(n){return{tools:[{name:"uniswap_wrap",inputSchema:{type:"object",additionalProperties:!1,required:["direction","amount"],properties:{direction:{description:'Choose "wrap" to exchange ETH for WETH, or "unwrap" to exchange WETH for ETH.',type:"string",enum:["wrap","unwrap"]},amount:p('Amount of ETH or WETH in base units (18 decimals). Example: "1000000000000000000" = 1 ETH or WETH.')}},async execute(t,u){if(s(t,["direction","amount"]),t.direction!=="wrap"&&t.direction!=="unwrap")throw new e("Choose direction wrap or unwrap.");let o=c(t.amount,"amount");if(t.direction==="unwrap"){let r=await n.clientFor(i).readContract({address:a,abi:h,functionName:"balanceOf",args:[u]});if(r===0n)throw new e("You have no WETH to unwrap. Wrap ETH or receive WETH first.");if(r<o)throw new e(`You do not have enough WETH to unwrap this amount. Request ${r} base units or less.`)}let f=t.direction==="wrap"?m({abi:w,functionName:"deposit"}):m({abi:w,functionName:"withdraw",args:[o]});return d(n,[n.unsignedTx({to:a,data:f,value:t.direction==="wrap"?o.toString():"0",chainId:i,description:`${t.direction} ${o} ETH/WETH base units to the signing wallet.`})],u,"Wrap or unwrap native ETH at the pinned WETH contract. Ratio 1:1; network gas is additional.")}}]}}export{w as a,y as b};
1
+ import{a as c,f as d,g as s}from"./QP2B7AYX.js";import{f as a}from"./5677LZOV.js";import{a as p}from"./66F5ZH34.js";import{b as i}from"./EWZFZUVF.js";import{a as e}from"./XSD5NL7J.js";import{encodeFunctionData as m,erc20Abi as h,parseAbi as E}from"viem";var w=E(["function deposit() payable","function withdraw(uint256)"]);function y(n){return{tools:[{name:"uniswap_wrap",inputSchema:{type:"object",additionalProperties:!1,required:["direction","amount"],properties:{direction:{description:'Choose "wrap" to exchange ETH for WETH, or "unwrap" to exchange WETH for ETH.',type:"string",enum:["wrap","unwrap"]},amount:p('Amount of ETH or WETH in base units (18 decimals). Example: "1000000000000000000" = 1 ETH or WETH.')}},async execute(t,u){if(s(t,["direction","amount"]),t.direction!=="wrap"&&t.direction!=="unwrap")throw new e("Choose direction wrap or unwrap.");let o=c(t.amount,"amount");if(t.direction==="unwrap"){let r=await n.clientFor(i).readContract({address:a,abi:h,functionName:"balanceOf",args:[u]});if(r===0n)throw new e("You have no WETH to unwrap. Wrap ETH or receive WETH first.");if(r<o)throw new e(`You do not have enough WETH to unwrap this amount. Request ${r} base units or less.`)}let f=t.direction==="wrap"?m({abi:w,functionName:"deposit"}):m({abi:w,functionName:"withdraw",args:[o]});return d(n,[n.unsignedTx({to:a,data:f,value:t.direction==="wrap"?o.toString():"0",chainId:i,description:`${t.direction} ${o} ETH/WETH base units to the signing wallet.`})],u,"Wrap or unwrap native ETH at the pinned WETH contract. Ratio 1:1; network gas is additional.")}}]}}export{w as a,y as b};
@@ -1 +1 @@
1
- import{a as O}from"./XADHV2DT.js";import{a as j}from"./USEF3QKG.js";import{j as E}from"./2GXHYI23.js";import{b as D}from"./SPJCSEKP.js";import{a as R}from"./43LI5NKJ.js";import{c as H}from"./SCG5HWMN.js";import{c as b,e as h,g as v,i as _,l as B}from"./NWNYJ26T.js";import{b as L}from"./IX3GZMTM.js";import{b as u,j as M}from"./TI727O2H.js";import{a as p}from"./XSD5NL7J.js";import{a as z}from"./JXOEJPJ4.js";import{encodeFunctionData as S,parseAbi as ne,zeroAddress as P}from"viem";import{encodeAbiParameters as F,encodeFunctionData as X,keccak256 as U,parseAbi as Y}from"viem";var I=M[u].merkl.distributor.address,A="Claim rewards on Merkl (Powered by Merkl \u2014 https://app.merkl.xyz)",W=`${A}. No claimable rewards on Robinhood Chain. Pending rewards must settle into a Merkle root before they can be claimed.`,C=Y(["function claimed(address user,address token) view returns (uint208 amount,uint48 timestamp,bytes32 merkleRoot)","function getMerkleRoot() view returns (bytes32)","function claim(address[] users,address[] tokens,uint256[] amounts,bytes32[][] proofs)"]);function J(s){return typeof s=="string"&&/^0x[0-9a-fA-F]{64}$/.test(s)}function k(){throw new p("Merkl returned an unexpected response. Please refetch rewards.")}function T(s){typeof s!="string"&&k();let d=L(s);if(d>=1n<<256n)throw new p("The Merkl reward amount exceeds the uint256 range.");return d.toString()}function ee(s){let d=[],m=new Set;for(let c of s)if((!h(c)||!h(c.chain)||!Number.isSafeInteger(c.chain.id))&&k(),c.chain.id===u){Array.isArray(c.rewards)||k();for(let r of c.rewards){if((!h(r)||typeof r.distributionLayer!="string"||!h(r.token))&&k(),r.distributionLayer!=="TREE"||(Number.isSafeInteger(r.token.chainId)||k(),r.token.chainId!==u)||(Array.isArray(r.proofs)||k(),!r.proofs.length))continue;(!r.proofs.every(J)||typeof r.token.address!="string"||typeof r.token.symbol!="string"||!r.token.symbol.trim()||typeof r.token.decimals!="number"||!Number.isInteger(r.token.decimals)||r.token.decimals<0||r.token.decimals>255)&&k(),R(r.token.address);let t=T(r.amount),n=T(r.pending);if(BigInt(t)===0n)continue;let e=r.token.address.toLowerCase();if(m.has(e))throw new p("Merkl returned duplicate token leaves. Please refetch rewards.");m.add(e),d.push({token:{address:r.token.address,chainId:u,decimals:r.token.decimals,symbol:r.token.symbol},amount:t,pending:n,proofs:r.proofs})}}return d}function re(s,d,m){let c=U(F([{type:"address"},{type:"address"},{type:"uint256"}],[s,d.token.address,BigInt(d.amount)]));for(let r of d.proofs){let t=BigInt(c)<BigInt(r)?[c,r]:[r,c];c=U(F([{type:"bytes32"},{type:"bytes32"}],t))}if(!v(c,m))throw new p("The Merkl proof does not match the active root. Please refetch rewards.")}function Z(s){if(!h(s)||Object.keys(s).length)throw new p("This Merkl tool takes no arguments and uses the connected wallet.")}async function q(s,d){let m=await K(s,d),c=new Map,r=[],t=new Set;for(let n of m)if((!h(n)||!h(n.chain)||!Number.isSafeInteger(n.chain.id))&&k(),n.chain.id===u){Array.isArray(n.rewards)||k();for(let e of n.rewards){if((!h(e)||typeof e.distributionLayer!="string"||!h(e.token)||!Number.isSafeInteger(e.token.chainId))&&k(),e.token.chainId!==u)continue;(typeof e.token.address!="string"||typeof e.token.symbol!="string"||!e.token.symbol.trim()||typeof e.token.decimals!="number"||!Number.isInteger(e.token.decimals)||e.token.decimals<0||e.token.decimals>255)&&k(),R(e.token.address);let a=T(e.amount),i=T(e.pending),o=`${e.distributionLayer}:${e.token.address.toLowerCase()}`;if(t.has(o))throw new p("Merkl returned duplicate earning rows. Please refetch rewards.");t.add(o);let l={address:e.token.address,symbol:e.token.symbol,decimals:e.token.decimals,chainId:u},f="0";if(e.distributionLayer==="TREE"){let g=await s.clientFor(u).readContract({address:I,abi:C,functionName:"claimed",args:[d,l.address]});(!Array.isArray(g)||typeof g[0]!="bigint"||g[0]<0n||g[0]>=1n<<208n)&&k(),f=g[0].toString(),c.set(l.address.toLowerCase(),f)}r.push({token:l,amount:a,pending:i,claimed:f,claimable:"0",distributionLayer:e.distributionLayer,status:e.distributionLayer!=="TREE"?"unsupported_distribution_layer":BigInt(a)>BigInt(f)?"awaiting_verified_proof":BigInt(i)>0n?"pending_settlement":"settled"})}}return{body:m,earnings:r,claimedSnapshot:c}}async function K(s,d){return R(d),H(s.http,`https://api.merkl.xyz/v4/users/${d}/rewards/summary?chainId=${u}`,{method:"GET",headers:{"User-Agent":"oak-core/merkl"}},m=>Array.isArray(m))}async function x(s,d,m){return N(s,d,m)}async function N(s,d,m,c){R(d);let r=ee(m??await K(s,d)),t=s.clientFor(u),n=[];for(let a of r){let i=c?.get(a.token.address.toLowerCase());if(i===void 0){let o=await t.readContract({address:I,abi:C,functionName:"claimed",args:[d,a.token.address]});if(!Array.isArray(o)||typeof o[0]!="bigint"||o[0]<0n||o[0]>=1n<<208n)throw new p("The Merkl claimed balance could not be read. Please try again.");i=o[0].toString()}BigInt(a.amount)<=BigInt(i)||n.push({...a,claimed:i,claimable:(BigInt(a.amount)-BigInt(i)).toString()})}if(!n.length)return[];let e=await t.readContract({address:I,abi:C,functionName:"getMerkleRoot"});if(!J(e))throw new p("The active Merkl root could not be read. Please try again.");for(let a of n)re(d,a,e);return n}var te=s=>{async function d(t){try{return await t()}catch(n){throw new p(s.plainError(n))}}function m(t){let n=t.amount.startsWith("-"),e=n?t.amount.slice(1):t.amount;return`${n?"-":""}${s.formatAmount(e,t.token.decimals)} ${z(t.token.symbol)} (${t.token.address}, chain ${t.token.chainId}, ${t.token.decimals} decimals)`}let c=t=>x(s,t);return{tools:[{name:"merkl_rewards",description:"Read claimable rewards (Powered by Merkl \u2014 https://app.merkl.xyz).",inputSchema:{type:"object",properties:{},additionalProperties:!1,description:"Read rewards (Powered by Merkl \u2014 https://app.merkl.xyz)."},execute:(t,n)=>d(async()=>{Z(t);let{body:e,earnings:a,claimedSnapshot:i}=await q(s,n),o=await N(s,n,e,i);for(let l of a){let f=o.find(g=>v(g.token.address,l.token.address)&&l.distributionLayer==="TREE");f&&(l.claimed=f.claimed,l.claimable=f.claimable,l.status="claimable")}return{earnings:a,rewards:o.map(({proofs:l,...f})=>f),summary:o.length?`${A}. Claimable reward leaves: ${o.map(l=>m({token:l.token,amount:l.claimable})).join("; ")}. Wrapped leaves may transfer underlying tokens; claim preview shows the received assets. Pending rewards appear separately in earnings and are excluded from claimable amounts.`:`${W} Earnings include pending-only and unsupported distribution layers; an unverified amount is never presented as claimable.`}})},{name:"merkl_claim",description:A,inputSchema:{type:"object",properties:{},additionalProperties:!1,description:A},execute:(t,n)=>d(async()=>{Z(t);let e=await c(n);if(!e.length)return{txs:[],summary:W};let a=[s.unsignedTx({to:I,chainId:u,value:"0",description:A,data:X({abi:C,functionName:"claim",args:[e.map(()=>n),e.map(o=>o.token.address),e.map(o=>BigInt(o.amount)),e.map(o=>o.proofs)]})})],i=await s.preview(a,n);return{txs:a,summary:`${A}. Prepared unsigned claim. Expected wallet changes: ${i.changes.length?i.changes.map(m).join("; "):"no token transfers in simulation"}. ${i.summary}`}})}],positions:t=>d(async()=>{let{body:n,earnings:e,claimedSnapshot:a}=await q(s,t),i=await N(s,t,n,a);return e.flatMap(o=>{let l=o.distributionLayer==="TREE"?i.find(V=>v(V.token.address,o.token.address)):void 0,f=BigInt(o.pending)>0n;if(!l&&!f)return[];let g="Merkl pending rewards are not yet claimable and are excluded from valuation.";return[{module:"merkl",id:`${u}:${o.token.address.toLowerCase()}${o.distributionLayer==="TREE"?"":`:${o.distributionLayer}`}`,chainId:u,assets:l?[{token:l.token,amount:l.claimable}]:[],economics:{principal:[],debt:[],backing:[],coverage:f?{complete:!1,reason:g}:{complete:!0},rewards:[...l?[E("claimable",{token:l.token,amount:l.claimable,source:"merkl.claimable",claim:{tool:"merkl_claim",args:{}}})]:[],...f?[E("unpaid",{token:o.token,amount:null,source:"merkl.pending",unknownReason:g})]:[]]},description:`${A}. Unclaimed reward leaf; wrapped rewards may transfer underlying assets. Pending rewards are excluded from valuation.`}]})})}},ge=s=>D("merkl",[te(s),O(s),G(s),j(s)]);var $=M[u].merkl.distributor.address,w=ne(["function operators(address,address) view returns (uint256)","function claimRecipient(address,address) view returns (address)","function toggleOperator(address,address)","function setClaimRecipient(address,address)","function claim(address[],address[],uint256[],bytes32[][])","function claimWithRecipient(address[],address[],uint256[],bytes32[][],address[],bytes[])"]),Q="Provide a valid address.";function y(s,d=!1){let m=_(s,Q);return d?m:B(m,Q)}var G=s=>{let d=()=>s.clientFor(u),m=async(r,t,n)=>{let e=[s.unsignedTx({to:$,chainId:u,value:"0",data:r,description:t})],a=await s.preview(e,n);return{txs:e,preview:a,summary:`Powered by Merkl \u2014 https://app.merkl.xyz. ${t} ${a.summary}`}},c=(r,t,n,e)=>({name:`merkl_${r}`,inputSchema:{type:"object",properties:t,required:n,additionalProperties:!1},execute:async(a,i)=>{try{let o=Object.keys(a).find(l=>!Object.hasOwn(t,l));if(o)throw new p(`Unsupported Merkl input: ${o}.`);return await e(a,y(i))}catch(o){throw new p(s.plainError(o))}}});return{tools:[c("claim_config",{token:{...b,description:"Reward token address; zero address selects the global setting where supported."},operator:{...b,description:"Address of the operator whose claim permission is read or changed."}},[],async(r,t)=>{let n=y(r.token??P,!0),e=y(await d().readContract({address:$,abi:w,functionName:"claimRecipient",args:[t,P]}),!0),a=y(await d().readContract({address:$,abi:w,functionName:"claimRecipient",args:[t,n]}),!0),i;if(r.operator!==void 0){let o=await d().readContract({address:$,abi:w,functionName:"operators",args:[t,y(r.operator,!0)]});if(o!==0n&&o!==1n)throw new p("Merkl returned invalid operator authorization.");i=o===1n}return{chainId:u,wallet:t,token:n,defaultRecipient:e,tokenRecipient:a,effectiveRecipient:a!==P?a:e!==P?e:t,...i===void 0?{}:{operatorEnabled:i},summary:"Powered by Merkl \u2014 https://app.merkl.xyz. Zero recipient restores self-claims. Token overrides take precedence over the global recipient."}}),c("set_operator",{operator:{...b,description:"Address of the operator whose claim permission is read or changed."},enabled:{type:"boolean",description:"true grants claim permission; false revokes it."}},["operator","enabled"],async(r,t)=>{let n=y(r.operator,!0);if(typeof r.enabled!="boolean")throw new p("Provide enabled as boolean.");let e=await d().readContract({address:$,abi:w,functionName:"operators",args:[t,n]});if(e!==0n&&e!==1n)throw new p("Merkl returned invalid operator authorization.");return e===1n===r.enabled?{txs:[],summary:"Powered by Merkl \u2014 https://app.merkl.xyz. Operator already has the requested state; no transaction needed."}:m(S({abi:w,functionName:"toggleOperator",args:[t,n]}),`${r.enabled?"Authorize":"Revoke"} Merkl claims by ${n} for ${t}. Zero operator grants permissionless claiming; configured recipients still apply. The contract toggles the observed state; preview and confirmation must remain current.`,t)}),c("set_recipient",{recipient:{...b,description:"Address to receive rewards; zero restores the default where supported."},token:{...b,description:"Reward token address; zero address selects the global setting where supported."}},["recipient"],async(r,t)=>{let n=y(r.recipient,!0),e=y(r.token??P,!0);return m(S({abi:w,functionName:"setClaimRecipient",args:[n,e]}),`Set Merkl reward recipient for ${e===P?"all tokens":e} to ${n===P?`self (${t})`:n}. This redirects future claims; token-specific overrides remain authoritative.`,t)}),c("claim_to",{recipient:{...b,description:"Address to receive rewards; zero restores the default where supported."},token:{...b,description:"Reward token address; zero address selects the global setting where supported."},data:{type:"string",pattern:"^0x([0-9a-fA-F]{2})*$",maxLength:16386,description:"Optional recipient callback data as 0x-prefixed hex bytes."}},["recipient"],async(r,t)=>{let n=y(r.recipient),e=r.token===void 0?void 0:y(r.token),a=r.data??"0x";if(typeof a!="string"||!/^0x([0-9a-fA-F]{2})*$/.test(a)||a.length>16386)throw new p("Provide callback data as at most 8192 hexadecimal bytes.");let i=(await x(s,t)).filter(o=>!e||v(o.token.address,e));return i.length?m(S({abi:w,functionName:"claimWithRecipient",args:[i.map(()=>t),i.map(o=>o.token.address),i.map(o=>BigInt(o.amount)),i.map(o=>o.proofs),i.map(()=>n),i.map(()=>a)]}),`Claim ${i.map(o=>`${o.claimable} ${o.token.symbol} base units (token ${o.token.address}, decimals ${o.token.decimals})`).join("; ")} to ${n}, overriding saved claim recipients for this claim only. Callback data for each leaf: ${a}. Inspect all callback effects in preview.`,t):{txs:[],summary:"Powered by Merkl \u2014 https://app.merkl.xyz. No verified claimable rewards for the selected token."}}),c("claim_for",{user:{...b,description:"Address of the user whose rewards are claimed."},token:{...b,description:"Reward token address; zero address selects the global setting where supported."}},["user"],async(r,t)=>{let n=y(r.user),e=r.token===void 0?void 0:y(r.token),a=(await x(s,n)).filter(i=>!e||v(i.token.address,e));return a.length?m(S({abi:w,functionName:"claim",args:[a.map(()=>n),a.map(i=>i.token.address),a.map(i=>BigInt(i.amount)),a.map(i=>i.proofs)]}),`Claim Merkl rewards for ${n}; caller ${t} pays gas. The user's saved recipients control payment. Claim authorization and actual receipts must pass preview.`,t):{txs:[],summary:"Powered by Merkl \u2014 https://app.merkl.xyz. No verified claimable rewards for this user."}})]}};export{G as a,x as b,te as c,ge as d};
1
+ import{a as O}from"./X53QVHBC.js";import{a as j}from"./S432S6NA.js";import{j as E}from"./2GXHYI23.js";import{b as D}from"./SPJCSEKP.js";import{a as R}from"./43LI5NKJ.js";import{c as H}from"./SCG5HWMN.js";import{c as b,e as h,g as v,i as _,l as B}from"./NWNYJ26T.js";import{b as L}from"./IX3GZMTM.js";import{b as u,j as M}from"./EWZFZUVF.js";import{a as p}from"./XSD5NL7J.js";import{a as z}from"./JXOEJPJ4.js";import{encodeFunctionData as S,parseAbi as ne,zeroAddress as P}from"viem";import{encodeAbiParameters as F,encodeFunctionData as X,keccak256 as U,parseAbi as Y}from"viem";var I=M[u].merkl.distributor.address,A="Claim rewards on Merkl (Powered by Merkl \u2014 https://app.merkl.xyz)",W=`${A}. No claimable rewards on Robinhood Chain. Pending rewards must settle into a Merkle root before they can be claimed.`,C=Y(["function claimed(address user,address token) view returns (uint208 amount,uint48 timestamp,bytes32 merkleRoot)","function getMerkleRoot() view returns (bytes32)","function claim(address[] users,address[] tokens,uint256[] amounts,bytes32[][] proofs)"]);function J(s){return typeof s=="string"&&/^0x[0-9a-fA-F]{64}$/.test(s)}function k(){throw new p("Merkl returned an unexpected response. Please refetch rewards.")}function T(s){typeof s!="string"&&k();let d=L(s);if(d>=1n<<256n)throw new p("The Merkl reward amount exceeds the uint256 range.");return d.toString()}function ee(s){let d=[],m=new Set;for(let c of s)if((!h(c)||!h(c.chain)||!Number.isSafeInteger(c.chain.id))&&k(),c.chain.id===u){Array.isArray(c.rewards)||k();for(let r of c.rewards){if((!h(r)||typeof r.distributionLayer!="string"||!h(r.token))&&k(),r.distributionLayer!=="TREE"||(Number.isSafeInteger(r.token.chainId)||k(),r.token.chainId!==u)||(Array.isArray(r.proofs)||k(),!r.proofs.length))continue;(!r.proofs.every(J)||typeof r.token.address!="string"||typeof r.token.symbol!="string"||!r.token.symbol.trim()||typeof r.token.decimals!="number"||!Number.isInteger(r.token.decimals)||r.token.decimals<0||r.token.decimals>255)&&k(),R(r.token.address);let t=T(r.amount),n=T(r.pending);if(BigInt(t)===0n)continue;let e=r.token.address.toLowerCase();if(m.has(e))throw new p("Merkl returned duplicate token leaves. Please refetch rewards.");m.add(e),d.push({token:{address:r.token.address,chainId:u,decimals:r.token.decimals,symbol:r.token.symbol},amount:t,pending:n,proofs:r.proofs})}}return d}function re(s,d,m){let c=U(F([{type:"address"},{type:"address"},{type:"uint256"}],[s,d.token.address,BigInt(d.amount)]));for(let r of d.proofs){let t=BigInt(c)<BigInt(r)?[c,r]:[r,c];c=U(F([{type:"bytes32"},{type:"bytes32"}],t))}if(!v(c,m))throw new p("The Merkl proof does not match the active root. Please refetch rewards.")}function Z(s){if(!h(s)||Object.keys(s).length)throw new p("This Merkl tool takes no arguments and uses the connected wallet.")}async function q(s,d){let m=await K(s,d),c=new Map,r=[],t=new Set;for(let n of m)if((!h(n)||!h(n.chain)||!Number.isSafeInteger(n.chain.id))&&k(),n.chain.id===u){Array.isArray(n.rewards)||k();for(let e of n.rewards){if((!h(e)||typeof e.distributionLayer!="string"||!h(e.token)||!Number.isSafeInteger(e.token.chainId))&&k(),e.token.chainId!==u)continue;(typeof e.token.address!="string"||typeof e.token.symbol!="string"||!e.token.symbol.trim()||typeof e.token.decimals!="number"||!Number.isInteger(e.token.decimals)||e.token.decimals<0||e.token.decimals>255)&&k(),R(e.token.address);let a=T(e.amount),i=T(e.pending),o=`${e.distributionLayer}:${e.token.address.toLowerCase()}`;if(t.has(o))throw new p("Merkl returned duplicate earning rows. Please refetch rewards.");t.add(o);let l={address:e.token.address,symbol:e.token.symbol,decimals:e.token.decimals,chainId:u},f="0";if(e.distributionLayer==="TREE"){let g=await s.clientFor(u).readContract({address:I,abi:C,functionName:"claimed",args:[d,l.address]});(!Array.isArray(g)||typeof g[0]!="bigint"||g[0]<0n||g[0]>=1n<<208n)&&k(),f=g[0].toString(),c.set(l.address.toLowerCase(),f)}r.push({token:l,amount:a,pending:i,claimed:f,claimable:"0",distributionLayer:e.distributionLayer,status:e.distributionLayer!=="TREE"?"unsupported_distribution_layer":BigInt(a)>BigInt(f)?"awaiting_verified_proof":BigInt(i)>0n?"pending_settlement":"settled"})}}return{body:m,earnings:r,claimedSnapshot:c}}async function K(s,d){return R(d),H(s.http,`https://api.merkl.xyz/v4/users/${d}/rewards/summary?chainId=${u}`,{method:"GET",headers:{"User-Agent":"oak-core/merkl"}},m=>Array.isArray(m))}async function x(s,d,m){return N(s,d,m)}async function N(s,d,m,c){R(d);let r=ee(m??await K(s,d)),t=s.clientFor(u),n=[];for(let a of r){let i=c?.get(a.token.address.toLowerCase());if(i===void 0){let o=await t.readContract({address:I,abi:C,functionName:"claimed",args:[d,a.token.address]});if(!Array.isArray(o)||typeof o[0]!="bigint"||o[0]<0n||o[0]>=1n<<208n)throw new p("The Merkl claimed balance could not be read. Please try again.");i=o[0].toString()}BigInt(a.amount)<=BigInt(i)||n.push({...a,claimed:i,claimable:(BigInt(a.amount)-BigInt(i)).toString()})}if(!n.length)return[];let e=await t.readContract({address:I,abi:C,functionName:"getMerkleRoot"});if(!J(e))throw new p("The active Merkl root could not be read. Please try again.");for(let a of n)re(d,a,e);return n}var te=s=>{async function d(t){try{return await t()}catch(n){throw new p(s.plainError(n))}}function m(t){let n=t.amount.startsWith("-"),e=n?t.amount.slice(1):t.amount;return`${n?"-":""}${s.formatAmount(e,t.token.decimals)} ${z(t.token.symbol)} (${t.token.address}, chain ${t.token.chainId}, ${t.token.decimals} decimals)`}let c=t=>x(s,t);return{tools:[{name:"merkl_rewards",description:"Read claimable rewards (Powered by Merkl \u2014 https://app.merkl.xyz).",inputSchema:{type:"object",properties:{},additionalProperties:!1,description:"Read rewards (Powered by Merkl \u2014 https://app.merkl.xyz)."},execute:(t,n)=>d(async()=>{Z(t);let{body:e,earnings:a,claimedSnapshot:i}=await q(s,n),o=await N(s,n,e,i);for(let l of a){let f=o.find(g=>v(g.token.address,l.token.address)&&l.distributionLayer==="TREE");f&&(l.claimed=f.claimed,l.claimable=f.claimable,l.status="claimable")}return{earnings:a,rewards:o.map(({proofs:l,...f})=>f),summary:o.length?`${A}. Claimable reward leaves: ${o.map(l=>m({token:l.token,amount:l.claimable})).join("; ")}. Wrapped leaves may transfer underlying tokens; claim preview shows the received assets. Pending rewards appear separately in earnings and are excluded from claimable amounts.`:`${W} Earnings include pending-only and unsupported distribution layers; an unverified amount is never presented as claimable.`}})},{name:"merkl_claim",description:A,inputSchema:{type:"object",properties:{},additionalProperties:!1,description:A},execute:(t,n)=>d(async()=>{Z(t);let e=await c(n);if(!e.length)return{txs:[],summary:W};let a=[s.unsignedTx({to:I,chainId:u,value:"0",description:A,data:X({abi:C,functionName:"claim",args:[e.map(()=>n),e.map(o=>o.token.address),e.map(o=>BigInt(o.amount)),e.map(o=>o.proofs)]})})],i=await s.preview(a,n);return{txs:a,summary:`${A}. Prepared unsigned claim. Expected wallet changes: ${i.changes.length?i.changes.map(m).join("; "):"no token transfers in simulation"}. ${i.summary}`}})}],positions:t=>d(async()=>{let{body:n,earnings:e,claimedSnapshot:a}=await q(s,t),i=await N(s,t,n,a);return e.flatMap(o=>{let l=o.distributionLayer==="TREE"?i.find(V=>v(V.token.address,o.token.address)):void 0,f=BigInt(o.pending)>0n;if(!l&&!f)return[];let g="Merkl pending rewards are not yet claimable and are excluded from valuation.";return[{module:"merkl",id:`${u}:${o.token.address.toLowerCase()}${o.distributionLayer==="TREE"?"":`:${o.distributionLayer}`}`,chainId:u,assets:l?[{token:l.token,amount:l.claimable}]:[],economics:{principal:[],debt:[],backing:[],coverage:f?{complete:!1,reason:g}:{complete:!0},rewards:[...l?[E("claimable",{token:l.token,amount:l.claimable,source:"merkl.claimable",claim:{tool:"merkl_claim",args:{}}})]:[],...f?[E("unpaid",{token:o.token,amount:null,source:"merkl.pending",unknownReason:g})]:[]]},description:`${A}. Unclaimed reward leaf; wrapped rewards may transfer underlying assets. Pending rewards are excluded from valuation.`}]})})}},ge=s=>D("merkl",[te(s),O(s),G(s),j(s)]);var $=M[u].merkl.distributor.address,w=ne(["function operators(address,address) view returns (uint256)","function claimRecipient(address,address) view returns (address)","function toggleOperator(address,address)","function setClaimRecipient(address,address)","function claim(address[],address[],uint256[],bytes32[][])","function claimWithRecipient(address[],address[],uint256[],bytes32[][],address[],bytes[])"]),Q="Provide a valid address.";function y(s,d=!1){let m=_(s,Q);return d?m:B(m,Q)}var G=s=>{let d=()=>s.clientFor(u),m=async(r,t,n)=>{let e=[s.unsignedTx({to:$,chainId:u,value:"0",data:r,description:t})],a=await s.preview(e,n);return{txs:e,preview:a,summary:`Powered by Merkl \u2014 https://app.merkl.xyz. ${t} ${a.summary}`}},c=(r,t,n,e)=>({name:`merkl_${r}`,inputSchema:{type:"object",properties:t,required:n,additionalProperties:!1},execute:async(a,i)=>{try{let o=Object.keys(a).find(l=>!Object.hasOwn(t,l));if(o)throw new p(`Unsupported Merkl input: ${o}.`);return await e(a,y(i))}catch(o){throw new p(s.plainError(o))}}});return{tools:[c("claim_config",{token:{...b,description:"Reward token address; zero address selects the global setting where supported."},operator:{...b,description:"Address of the operator whose claim permission is read or changed."}},[],async(r,t)=>{let n=y(r.token??P,!0),e=y(await d().readContract({address:$,abi:w,functionName:"claimRecipient",args:[t,P]}),!0),a=y(await d().readContract({address:$,abi:w,functionName:"claimRecipient",args:[t,n]}),!0),i;if(r.operator!==void 0){let o=await d().readContract({address:$,abi:w,functionName:"operators",args:[t,y(r.operator,!0)]});if(o!==0n&&o!==1n)throw new p("Merkl returned invalid operator authorization.");i=o===1n}return{chainId:u,wallet:t,token:n,defaultRecipient:e,tokenRecipient:a,effectiveRecipient:a!==P?a:e!==P?e:t,...i===void 0?{}:{operatorEnabled:i},summary:"Powered by Merkl \u2014 https://app.merkl.xyz. Zero recipient restores self-claims. Token overrides take precedence over the global recipient."}}),c("set_operator",{operator:{...b,description:"Address of the operator whose claim permission is read or changed."},enabled:{type:"boolean",description:"true grants claim permission; false revokes it."}},["operator","enabled"],async(r,t)=>{let n=y(r.operator,!0);if(typeof r.enabled!="boolean")throw new p("Provide enabled as boolean.");let e=await d().readContract({address:$,abi:w,functionName:"operators",args:[t,n]});if(e!==0n&&e!==1n)throw new p("Merkl returned invalid operator authorization.");return e===1n===r.enabled?{txs:[],summary:"Powered by Merkl \u2014 https://app.merkl.xyz. Operator already has the requested state; no transaction needed."}:m(S({abi:w,functionName:"toggleOperator",args:[t,n]}),`${r.enabled?"Authorize":"Revoke"} Merkl claims by ${n} for ${t}. Zero operator grants permissionless claiming; configured recipients still apply. The contract toggles the observed state; preview and confirmation must remain current.`,t)}),c("set_recipient",{recipient:{...b,description:"Address to receive rewards; zero restores the default where supported."},token:{...b,description:"Reward token address; zero address selects the global setting where supported."}},["recipient"],async(r,t)=>{let n=y(r.recipient,!0),e=y(r.token??P,!0);return m(S({abi:w,functionName:"setClaimRecipient",args:[n,e]}),`Set Merkl reward recipient for ${e===P?"all tokens":e} to ${n===P?`self (${t})`:n}. This redirects future claims; token-specific overrides remain authoritative.`,t)}),c("claim_to",{recipient:{...b,description:"Address to receive rewards; zero restores the default where supported."},token:{...b,description:"Reward token address; zero address selects the global setting where supported."},data:{type:"string",pattern:"^0x([0-9a-fA-F]{2})*$",maxLength:16386,description:"Optional recipient callback data as 0x-prefixed hex bytes."}},["recipient"],async(r,t)=>{let n=y(r.recipient),e=r.token===void 0?void 0:y(r.token),a=r.data??"0x";if(typeof a!="string"||!/^0x([0-9a-fA-F]{2})*$/.test(a)||a.length>16386)throw new p("Provide callback data as at most 8192 hexadecimal bytes.");let i=(await x(s,t)).filter(o=>!e||v(o.token.address,e));return i.length?m(S({abi:w,functionName:"claimWithRecipient",args:[i.map(()=>t),i.map(o=>o.token.address),i.map(o=>BigInt(o.amount)),i.map(o=>o.proofs),i.map(()=>n),i.map(()=>a)]}),`Claim ${i.map(o=>`${o.claimable} ${o.token.symbol} base units (token ${o.token.address}, decimals ${o.token.decimals})`).join("; ")} to ${n}, overriding saved claim recipients for this claim only. Callback data for each leaf: ${a}. Inspect all callback effects in preview.`,t):{txs:[],summary:"Powered by Merkl \u2014 https://app.merkl.xyz. No verified claimable rewards for the selected token."}}),c("claim_for",{user:{...b,description:"Address of the user whose rewards are claimed."},token:{...b,description:"Reward token address; zero address selects the global setting where supported."}},["user"],async(r,t)=>{let n=y(r.user),e=r.token===void 0?void 0:y(r.token),a=(await x(s,n)).filter(i=>!e||v(i.token.address,e));return a.length?m(S({abi:w,functionName:"claim",args:[a.map(()=>n),a.map(i=>i.token.address),a.map(i=>BigInt(i.amount)),a.map(i=>i.proofs)]}),`Claim Merkl rewards for ${n}; caller ${t} pays gas. The user's saved recipients control payment. Claim authorization and actual receipts must pass preview.`,t):{txs:[],summary:"Powered by Merkl \u2014 https://app.merkl.xyz. No verified claimable rewards for this user."}})]}};export{G as a,x as b,te as c,ge as d};
@@ -1 +1 @@
1
- import{g as m}from"./YXXK6EPI.js";import{a as U}from"./43LI5NKJ.js";import{a as w}from"./66F5ZH34.js";import{h as x}from"./NWNYJ26T.js";import{b as l,j as E}from"./TI727O2H.js";import{a as n}from"./XSD5NL7J.js";import{encodeFunctionData as k,getAddress as D,parseAbi as T,parseAbiItem as P,zeroAddress as R}from"viem";var b=D("0x23e99d72e24dc538c955b9bade710d2ce3a7fca4"),I={address:D(E[l].tokens.USDG.address),symbol:"USDG",decimals:6,chainId:l},f=T(["function rewardToken() view returns (address)","function owner() view returns (address)","function publisher() view returns (address)","function epochs(uint256) view returns (bytes32 root,uint128 total,uint128 claimed,uint64 expiry,bool swept)","function hasClaimed(uint256,address) view returns (bool)","function claimable(uint256 epochId,address account,uint256 amount,bytes32[] proof) view returns (bool)","function claim(uint256 epochId,uint256 amount,bytes32[] proof)","function setPublisher(address publisher)","function sweep(uint256 epochId,address to)","function fundEpoch(uint256 epochId,bytes32 root,uint256 total,uint64 expiry)","function transferOwnership(address newOwner)","function renounceOwnership()"]),C=P("event EpochFunded(uint256 indexed epochId,bytes32 root,uint256 total,uint64 expiry)"),O=p=>{if(typeof p!="string"||!/^0x[0-9a-f]{64}$/i.test(p))throw new n("Provide a bytes32 Merkle root or proof element.");return p};function G(p){if(!Array.isArray(p)||p.length>64)throw new n("Provide the publisher\u2019s Merkle proof array (at most 64 elements).");return p.map(O)}var j=p=>{async function v(){let e=p.clientFor(l);if(await e.getChainId()!==l)throw new n("Longbow rebates require chain 4663.");let a=await e.getBlock(),s=(o,c=[])=>e.readContract({address:b,abi:f,functionName:o,args:c,blockNumber:a.number}),i=await s("rewardToken");if(!x(i,I.address))throw new n("The Longbow rebate distributor does not report canonical USDG.");return{client:e,block:a,read:s}}async function S(e,a,s,i){let[o,c]=await Promise.all([s("epochs",[e]),s("hasClaimed",[e,a])]);if(!Array.isArray(o)||o.length!==5||typeof c!="boolean")throw new n("Invalid rebate epoch state.");let[r,d,u,h,t]=o;if(typeof d!="bigint"||typeof u!="bigint"||u>d||typeof h!="bigint"||typeof t!="boolean")throw new n("Invalid rebate epoch amounts.");return{epochId:e.toString(),root:O(r),total:d.toString(),claimedAmount:u.toString(),outstanding:(t?0n:d-u).toString(),expiry:h.toString(),swept:t,hasClaimed:c,open:r!==`0x${"0".repeat(64)}`&&!t&&i<h}}let A=(e,a,s,i)=>({name:e,inputSchema:{type:"object",properties:a,required:s,additionalProperties:!1},execute:async(o,c)=>{try{if(U(c),Object.keys(o).some(r=>!Object.hasOwn(a,r)))throw new n("Unsupported Longbow rebate argument.");return await i(o,c)}catch(r){throw new n(p.plainError(r))}}});return{tools:[A("longbow_rebates",{epochIds:{type:"array",maxItems:100,description:"Rebate epoch ids to read, at most 100. Use this or fromBlock, not both.",items:w("Rebate epoch id, as a decimal string.")},fromBlock:w("Block number to start scanning for funded epochs, as a decimal string. Default is the last 100000 blocks; at most 1000000 blocks are scanned.")},[],async(e,a)=>{let{client:s,read:i,block:o}=await v();if(e.epochIds!==void 0&&e.fromBlock!==void 0)throw new n("Use epochIds or fromBlock, not both.");let c,r;if(e.epochIds!==void 0){if(!Array.isArray(e.epochIds)||e.epochIds.length>100)throw new n("Provide at most 100 rebate epochIds.");c=e.epochIds.map(t=>m(t))}else{if(r=e.fromBlock===void 0?o.number>100000n?o.number-100000n:0n:m(e.fromBlock),r>o.number||o.number-r>1000000n)throw new n("Read at most 1000000 blocks per rebate discovery window.");let t=await s.getLogs({address:b,event:C,fromBlock:r,toBlock:o.number,strict:!0});if(c=[...new Set(t.map(y=>y.args.epochId))],c.length>100)throw new n("Too many rebate epochs; narrow the block window.")}let[d,u,h]=await Promise.all([i("owner"),i("publisher"),Promise.all(c.map(t=>S(t,a,i,o.timestamp)))]);return{chainId:l,distributor:b,token:I,blockNumber:o.number.toString(),owner:d,publisher:u,epochs:h,scannedFromBlock:r?.toString()??null,caveat:"Discovery covers only these IDs or this event window. Amounts/proofs require the publisher\u2019s tree; the app does not expose a verified proof endpoint. Claims expire at each on-chain expiry, even if app prose says otherwise."}}),A("longbow_claim_rebate",{epochId:w("Rebate epoch id to claim from, as a decimal string."),amount:w('Amount of USDG you are entitled to in this epoch, in base units (USDG has 6 decimals). Example: "1000000" = 1 USDG.'),proof:{type:"array",maxItems:64,description:"Merkle proof for this wallet and amount from the rebate publisher, as 0x-prefixed 32-byte hex strings.",items:{type:"string"}}},["epochId","amount","proof"],async(e,a)=>{let s=m(e.epochId),i=m(e.amount),o=G(e.proof),{read:c,block:r}=await v(),d=await S(s,a,c,r.timestamp);if(!d.open||d.hasClaimed||i===0n||await c("claimable",[s,a,i,o])!==!0)throw new n("Rebate is closed, already claimed or not proven for this wallet and amount.");let u=`Claim ${i} USDG base units from Longbow rebate epoch ${s} to this wallet ${a}. No approvals.`,h=[p.unsignedTx({to:b,data:k({abi:f,functionName:"claim",args:[s,i,o]}),value:"0",chainId:l,description:u})],t=await p.preview(h,a);if(t.changes.filter(g=>g.token.chainId===l&&x(g.token.address,I.address)&&g.token.decimals===6).reduce((g,B)=>g+BigInt(B.amount),0n)!==i)throw new n("Rebate preview does not return the exact proven USDG amount.");return{txs:h,preview:t,summary:`${u} ${t.summary}`}}),A("longbow_manage_rebates",{operation:{enum:["setPublisher","fundEpoch","sweep","transferOwnership","renounceOwnership"],description:"Distributor admin call: set the publisher, fund an epoch (publisher), sweep an expired epoch, transfer ownership, or renounce it permanently (owner)."},epochId:w("Rebate epoch id, as a decimal string. Used by fundEpoch and sweep."),root:{type:"string",description:"Merkle root of the epoch claims, as 0x followed by 64 hex digits. Used by fundEpoch."},amount:w('Total USDG funded into the epoch, in base units (USDG has 6 decimals). Example: "1000000" = 1 USDG. Used by fundEpoch.'),expiry:w("Unix seconds when claims close; must be at least 30 days ahead. Used by fundEpoch."),account:{type:"string",description:"Address that receives the role or funds: new publisher, new owner, or the sweep recipient."}},["operation"],async(e,a)=>{let{read:s,block:i}=await v(),o=e.operation==="fundEpoch";if(!x(await s(o?"publisher":"owner"),a))throw new n("This wallet lacks the rebate publisher/owner role.");let c=o?["operation","epochId","root","amount","expiry"]:e.operation==="sweep"?["operation","epochId","account"]:e.operation==="renounceOwnership"?["operation"]:["operation","account"];if(Object.keys(e).some(t=>!c.includes(t)))throw new n("Unexpected fields for this rebate management operation.");let r,d=0n;if(o){let t=m(e.expiry,64);if(d=m(e.amount,128),d===0n||t<i.timestamp+30n*86400n)throw new n("Fund a positive rebate amount with at least 30 days to claim.");r=k({abi:f,functionName:"fundEpoch",args:[m(e.epochId),O(e.root),d,t]})}else if(e.operation==="renounceOwnership")r=k({abi:f,functionName:"renounceOwnership"});else{if(typeof e.account!="string")throw new n("Provide the explicit publisher, owner or sweep recipient.");U(e.account);let t=D(e.account);if(t===R)throw new n("The rebate recipient/role cannot be zero.");if(e.operation==="sweep"){let y=await S(m(e.epochId),a,s,i.timestamp);if(y.swept||i.timestamp<BigInt(y.expiry))throw new n("Only expired, unswept rebate epochs can be swept.");r=k({abi:f,functionName:"sweep",args:[m(e.epochId),t]})}else if(e.operation==="setPublisher"||e.operation==="transferOwnership")r=k({abi:f,functionName:e.operation,args:[t]});else throw new n("Choose a supported rebate management operation.")}let u=`Longbow rebate ${String(e.operation)}: ${JSON.stringify(e)}. ${e.operation==="renounceOwnership"?"Owner administration is permanently relinquished.":""}`,h=[...o?[p.approval(I.address,b,d.toString(),l)]:[],p.unsignedTx({to:b,data:r,value:"0",chainId:l,description:u})];return{txs:h,preview:await p.preview(h,a),summary:u}})]}};export{b as a,f as b,j as c};
1
+ import{g as m}from"./QBHY2QRC.js";import{a as U}from"./43LI5NKJ.js";import{a as w}from"./66F5ZH34.js";import{h as x}from"./NWNYJ26T.js";import{b as l,j as E}from"./EWZFZUVF.js";import{a as n}from"./XSD5NL7J.js";import{encodeFunctionData as k,getAddress as D,parseAbi as T,parseAbiItem as P,zeroAddress as R}from"viem";var b=D("0x23e99d72e24dc538c955b9bade710d2ce3a7fca4"),I={address:D(E[l].tokens.USDG.address),symbol:"USDG",decimals:6,chainId:l},f=T(["function rewardToken() view returns (address)","function owner() view returns (address)","function publisher() view returns (address)","function epochs(uint256) view returns (bytes32 root,uint128 total,uint128 claimed,uint64 expiry,bool swept)","function hasClaimed(uint256,address) view returns (bool)","function claimable(uint256 epochId,address account,uint256 amount,bytes32[] proof) view returns (bool)","function claim(uint256 epochId,uint256 amount,bytes32[] proof)","function setPublisher(address publisher)","function sweep(uint256 epochId,address to)","function fundEpoch(uint256 epochId,bytes32 root,uint256 total,uint64 expiry)","function transferOwnership(address newOwner)","function renounceOwnership()"]),C=P("event EpochFunded(uint256 indexed epochId,bytes32 root,uint256 total,uint64 expiry)"),O=p=>{if(typeof p!="string"||!/^0x[0-9a-f]{64}$/i.test(p))throw new n("Provide a bytes32 Merkle root or proof element.");return p};function G(p){if(!Array.isArray(p)||p.length>64)throw new n("Provide the publisher\u2019s Merkle proof array (at most 64 elements).");return p.map(O)}var j=p=>{async function v(){let e=p.clientFor(l);if(await e.getChainId()!==l)throw new n("Longbow rebates require chain 4663.");let a=await e.getBlock(),s=(o,c=[])=>e.readContract({address:b,abi:f,functionName:o,args:c,blockNumber:a.number}),i=await s("rewardToken");if(!x(i,I.address))throw new n("The Longbow rebate distributor does not report canonical USDG.");return{client:e,block:a,read:s}}async function S(e,a,s,i){let[o,c]=await Promise.all([s("epochs",[e]),s("hasClaimed",[e,a])]);if(!Array.isArray(o)||o.length!==5||typeof c!="boolean")throw new n("Invalid rebate epoch state.");let[r,d,u,h,t]=o;if(typeof d!="bigint"||typeof u!="bigint"||u>d||typeof h!="bigint"||typeof t!="boolean")throw new n("Invalid rebate epoch amounts.");return{epochId:e.toString(),root:O(r),total:d.toString(),claimedAmount:u.toString(),outstanding:(t?0n:d-u).toString(),expiry:h.toString(),swept:t,hasClaimed:c,open:r!==`0x${"0".repeat(64)}`&&!t&&i<h}}let A=(e,a,s,i)=>({name:e,inputSchema:{type:"object",properties:a,required:s,additionalProperties:!1},execute:async(o,c)=>{try{if(U(c),Object.keys(o).some(r=>!Object.hasOwn(a,r)))throw new n("Unsupported Longbow rebate argument.");return await i(o,c)}catch(r){throw new n(p.plainError(r))}}});return{tools:[A("longbow_rebates",{epochIds:{type:"array",maxItems:100,description:"Rebate epoch ids to read, at most 100. Use this or fromBlock, not both.",items:w("Rebate epoch id, as a decimal string.")},fromBlock:w("Block number to start scanning for funded epochs, as a decimal string. Default is the last 100000 blocks; at most 1000000 blocks are scanned.")},[],async(e,a)=>{let{client:s,read:i,block:o}=await v();if(e.epochIds!==void 0&&e.fromBlock!==void 0)throw new n("Use epochIds or fromBlock, not both.");let c,r;if(e.epochIds!==void 0){if(!Array.isArray(e.epochIds)||e.epochIds.length>100)throw new n("Provide at most 100 rebate epochIds.");c=e.epochIds.map(t=>m(t))}else{if(r=e.fromBlock===void 0?o.number>100000n?o.number-100000n:0n:m(e.fromBlock),r>o.number||o.number-r>1000000n)throw new n("Read at most 1000000 blocks per rebate discovery window.");let t=await s.getLogs({address:b,event:C,fromBlock:r,toBlock:o.number,strict:!0});if(c=[...new Set(t.map(y=>y.args.epochId))],c.length>100)throw new n("Too many rebate epochs; narrow the block window.")}let[d,u,h]=await Promise.all([i("owner"),i("publisher"),Promise.all(c.map(t=>S(t,a,i,o.timestamp)))]);return{chainId:l,distributor:b,token:I,blockNumber:o.number.toString(),owner:d,publisher:u,epochs:h,scannedFromBlock:r?.toString()??null,caveat:"Discovery covers only these IDs or this event window. Amounts/proofs require the publisher\u2019s tree; the app does not expose a verified proof endpoint. Claims expire at each on-chain expiry, even if app prose says otherwise."}}),A("longbow_claim_rebate",{epochId:w("Rebate epoch id to claim from, as a decimal string."),amount:w('Amount of USDG you are entitled to in this epoch, in base units (USDG has 6 decimals). Example: "1000000" = 1 USDG.'),proof:{type:"array",maxItems:64,description:"Merkle proof for this wallet and amount from the rebate publisher, as 0x-prefixed 32-byte hex strings.",items:{type:"string"}}},["epochId","amount","proof"],async(e,a)=>{let s=m(e.epochId),i=m(e.amount),o=G(e.proof),{read:c,block:r}=await v(),d=await S(s,a,c,r.timestamp);if(!d.open||d.hasClaimed||i===0n||await c("claimable",[s,a,i,o])!==!0)throw new n("Rebate is closed, already claimed or not proven for this wallet and amount.");let u=`Claim ${i} USDG base units from Longbow rebate epoch ${s} to this wallet ${a}. No approvals.`,h=[p.unsignedTx({to:b,data:k({abi:f,functionName:"claim",args:[s,i,o]}),value:"0",chainId:l,description:u})],t=await p.preview(h,a);if(t.changes.filter(g=>g.token.chainId===l&&x(g.token.address,I.address)&&g.token.decimals===6).reduce((g,B)=>g+BigInt(B.amount),0n)!==i)throw new n("Rebate preview does not return the exact proven USDG amount.");return{txs:h,preview:t,summary:`${u} ${t.summary}`}}),A("longbow_manage_rebates",{operation:{enum:["setPublisher","fundEpoch","sweep","transferOwnership","renounceOwnership"],description:"Distributor admin call: set the publisher, fund an epoch (publisher), sweep an expired epoch, transfer ownership, or renounce it permanently (owner)."},epochId:w("Rebate epoch id, as a decimal string. Used by fundEpoch and sweep."),root:{type:"string",description:"Merkle root of the epoch claims, as 0x followed by 64 hex digits. Used by fundEpoch."},amount:w('Total USDG funded into the epoch, in base units (USDG has 6 decimals). Example: "1000000" = 1 USDG. Used by fundEpoch.'),expiry:w("Unix seconds when claims close; must be at least 30 days ahead. Used by fundEpoch."),account:{type:"string",description:"Address that receives the role or funds: new publisher, new owner, or the sweep recipient."}},["operation"],async(e,a)=>{let{read:s,block:i}=await v(),o=e.operation==="fundEpoch";if(!x(await s(o?"publisher":"owner"),a))throw new n("This wallet lacks the rebate publisher/owner role.");let c=o?["operation","epochId","root","amount","expiry"]:e.operation==="sweep"?["operation","epochId","account"]:e.operation==="renounceOwnership"?["operation"]:["operation","account"];if(Object.keys(e).some(t=>!c.includes(t)))throw new n("Unexpected fields for this rebate management operation.");let r,d=0n;if(o){let t=m(e.expiry,64);if(d=m(e.amount,128),d===0n||t<i.timestamp+30n*86400n)throw new n("Fund a positive rebate amount with at least 30 days to claim.");r=k({abi:f,functionName:"fundEpoch",args:[m(e.epochId),O(e.root),d,t]})}else if(e.operation==="renounceOwnership")r=k({abi:f,functionName:"renounceOwnership"});else{if(typeof e.account!="string")throw new n("Provide the explicit publisher, owner or sweep recipient.");U(e.account);let t=D(e.account);if(t===R)throw new n("The rebate recipient/role cannot be zero.");if(e.operation==="sweep"){let y=await S(m(e.epochId),a,s,i.timestamp);if(y.swept||i.timestamp<BigInt(y.expiry))throw new n("Only expired, unswept rebate epochs can be swept.");r=k({abi:f,functionName:"sweep",args:[m(e.epochId),t]})}else if(e.operation==="setPublisher"||e.operation==="transferOwnership")r=k({abi:f,functionName:e.operation,args:[t]});else throw new n("Choose a supported rebate management operation.")}let u=`Longbow rebate ${String(e.operation)}: ${JSON.stringify(e)}. ${e.operation==="renounceOwnership"?"Owner administration is permanently relinquished.":""}`,h=[...o?[p.approval(I.address,b,d.toString(),l)]:[],p.unsignedTx({to:b,data:r,value:"0",chainId:l,description:u})];return{txs:h,preview:await p.preview(h,a),summary:u}})]}};export{b as a,f as b,j as c};
@@ -0,0 +1 @@
1
+ import{e as g,f as i,i as G,j as o,k as q,m as $,p as y,s as H}from"./UMY6SP7C.js";import{a as n}from"./XSD5NL7J.js";import{decodeAbiParameters as _,decodeFunctionResult as S,encodeAbiParameters as ee,encodeFunctionData as I,erc20Abi as O,keccak256 as j,parseAbi as v,stringToHex as te,zeroAddress as C}from"viem";var B={id:"market-guard",supported:!0,contract:"HookrMarketGuard",address:"0xFc5CAE364FDEE4347D97E2aEB82f3155068693A4",source:"hook-blocks/market-guard/src/HookrMarketGuard.sol",advisoryTerms:"feed:address, knobs:(mode:uint8, flags:uint8, bandBps:uint16, rampBps:uint16, staleness:uint32, surchargePips:uint24, minDepth:uint128)",payment:"Returns an LP fee surcharge; the advisory takes no quote.",wiring:"Requires a separate advisory binding, admitted feed checks and phase, gas and fee-cap handling."},E=[{type:"address"},{type:"tuple",components:[{name:"mode",type:"uint8"},{name:"flags",type:"uint8"},{name:"bandBps",type:"uint16"},{name:"rampBps",type:"uint16"},{name:"staleness",type:"uint32"},{name:"surchargePips",type:"uint24"},{name:"minDepth",type:"uint128"}]}];function N(t){let e=["feed","mode","flags","bandBps","rampBps","staleness","surchargePips","minDepth"];g(t,e,e);let r=G(t.feed),a={mode:Number(i(t.mode,8)),flags:Number(i(t.flags,8)),bandBps:Number(i(t.bandBps,16)),rampBps:Number(i(t.rampBps,16)),staleness:Number(i(t.staleness,32)),surchargePips:Number(i(t.surchargePips,24)),minDepth:i(t.minDepth,128)};if(r===C||![1,2].includes(a.mode)||a.flags>1||a.bandBps<50||a.bandBps>5e3||a.rampBps<50||a.rampBps>5e3||a.staleness<60||a.staleness>345600||a.minDepth>10n**30n||(a.mode===1?a.surchargePips!==0:a.surchargePips<1||a.surchargePips>1e5))throw new n("Invalid market-guard advisory terms.");return ee(E,[r,a])}function L(t){let[e,r]=_(E,t),a=Object.fromEntries(Object.entries(r).map(([p,c])=>[p,String(c)]));if(N({feed:e,...a}).toLowerCase()!==t.toLowerCase())throw new n("Non-canonical market-guard advisory terms.");return{feed:e,...r}}function ae(t){let e=L(t);return`Market Guard feed ${e.feed}: mode ${e.mode===1?"refuse":"surcharge"}, band ${e.bandBps} bps, ramp ${e.rampBps} bps, staleness ${e.staleness} seconds, surcharge up to ${e.surchargePips} pips, minimum depth ${e.minDepth} quote units, feed direction ${e.flags===1?"quote in subject":"subject in quote"}. The advisory takes no quote; any surcharge is an LP fee for in-range LPs. Feed failures stop swaps while fail-closed; the feed operator can change its answers.`}var se={address:B.address,codeHash:"0x68fa83ace73756dea7650094b34b7c25140d1ecc166c7559c370a23d1dbf7d32",schemaHash:j(te("MarketGuardConfig(address feed,MarketGuardKnobs knobs)MarketGuardKnobs(uint8 mode,uint8 flags,uint16 bandBps,uint16 rampBps,uint32 staleness,uint24 surchargePips,uint128 minDepth)")),phaseMask:3,feeOnly:!0,failOpen:!1,gasMin:35e4},R=v(["function poolManager() view returns (address)","function feedOf(address) view returns ((bytes32 codeHash,uint8 decimals,uint32 maxStaleness,bool admitted))"]),T=v(["function decimals() view returns (uint8)","function latestRoundData() view returns (uint80 roundId,int256 answer,uint256 startedAt,uint256 updatedAt,uint80 answeredInRound)"]);function F(t){if(t<2n)return t;let e=1n<<BigInt(Math.ceil(t.toString(2).length/2));for(;;){let r=e+t/e>>1n;if(r>=e)return e;e=r}}async function ie(t,e,r,a){g(r,["terms"],["terms"]);let p=["feed","mode","flags","bandBps","rampBps","staleness","surchargePips","minDepth"],c=N(g(r.terms,p,p)),s=L(c);if(!Number.isInteger(a.tickSpacing)||a.tickSpacing<=0||a.tickSpacing>32767)throw new n("Invalid market-guard tick spacing.");let K=Math.ceil(Math.log1p(s.bandBps/1e4)/Math.log(1.0001)),z=Math.ceil(Math.log1p(s.rampBps/1e4)/Math.log(1.0001));if(Math.floor((2*K+z)/(a.tickSpacing*256))+2>4)throw new n("Market-guard band exceeds the tick bitmap walk limit.");let M=async Z=>{let w=await t.call({to:Z,data:I({abi:O,functionName:"decimals"}),gas:60000n,blockNumber:e});if(!w.data||w.data.length!==66)throw new n("Market-guard decimals response is malformed.");return S({abi:O,functionName:"decimals",data:w.data})},[Q,U,V,l,x,P,J]=await Promise.all([y(t,B.address,R,"poolManager",[],e),y(t,B.address,R,"feedOf",[s.feed],e),M(s.feed),t.call({to:s.feed,data:I({abi:T,functionName:"latestRoundData"}),gas:80000n,blockNumber:e}),t.getBytecode({address:s.feed,blockNumber:e}),t.getBlock({blockNumber:e}),a.quote===C?Promise.resolve(18):M(a.quote)]),u=$(U),m=o(V,8),h=o(J,8);if(Q!==H||!q(u.admitted)||!x||j(x)!==u.codeHash||o(u.decimals,8)!==m||m>36n||h>36n||BigInt(s.staleness)>o(u.maxStaleness,32))throw new n("Market-guard manager or feed admission differs at the named block.");if(!l.data||l.data.length!==322)throw new n("Market-guard feed returned malformed round data.");let d=S({abi:T,functionName:"latestRoundData",data:l.data});if(!Array.isArray(d)||d.length!==5||typeof d[1]!="bigint"||d[1]<=0n||d[1]>=1n<<96n)throw new n("Market-guard feed answer is invalid.");let f=o(d[3]);if(f===0n||f>P.timestamp||P.timestamp-f>BigInt(s.staleness))throw new n("Market-guard feed answer is stale or future-dated.");let W=s.flags===1?h:18n,X=s.flags===1?18n:h,k=d[1]*10n**X,b=10n**(m+W),A=k/b;if(A>=1n<<128n)throw new n("Market-guard feed price is outside the supported pool price range.");let D=A<1n<<64n?F(k*(1n<<192n)/b):F(k*(1n<<64n)/b)<<64n;if(D<4295128739n||D>=1461446703485210103287273052203988822378723970342n)throw new n("Market-guard feed price is outside the supported pool price range.");let Y=s.mode===1?3:1;return{data:c,summary:`${ae(c)} Feed code hash ${u.codeHash}, decimals ${m}, latest answer ${d[1]} updated ${f}; admission can be retired by its owner.`,descriptor:se,phases:Y,requiredCaps:{maxLpFeePips:BigInt(s.surchargePips),maxQuoteTakePips:0n,maxSubjectTakeBps:0n}}}export{B as a,N as b,L as c,ae as d,se as e,R as f,T as g,ie as h};