@oakagentkit/core 0.2.4 → 0.2.5

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 (448) hide show
  1. package/build/dist/api/amounts.d.ts +2 -0
  2. package/build/dist/api/amounts.js +1 -1
  3. package/build/dist/api/args.js +1 -1
  4. package/build/dist/api/gas.js +1 -1
  5. package/build/dist/api/grandfather.js +1 -1
  6. package/build/dist/api/guards.js +1 -1
  7. package/build/dist/api/history.js +1 -1
  8. package/build/dist/api/http.js +1 -1
  9. package/build/dist/api/merkle.js +1 -1
  10. package/build/dist/api/module.js +1 -1
  11. package/build/dist/api/modules/beefy/boosts.js +1 -1
  12. package/build/dist/api/modules/beefy/clm.js +1 -1
  13. package/build/dist/api/modules/beefy/guard.js +1 -1
  14. package/build/dist/api/modules/beefy/index.js +1 -1
  15. package/build/dist/api/modules/beefy/liquidity.js +1 -1
  16. package/build/dist/api/modules/beefy/management.js +1 -1
  17. package/build/dist/api/modules/beefy/vaults.js +1 -1
  18. package/build/dist/api/modules/borro/abi.d.ts +149 -0
  19. package/build/dist/api/modules/borro/abi.js +1 -0
  20. package/build/dist/api/modules/borro/actions.d.ts +2 -0
  21. package/build/dist/api/modules/borro/actions.js +1 -0
  22. package/build/dist/api/modules/borro/checks.d.ts +151 -0
  23. package/build/dist/api/modules/borro/checks.js +1 -0
  24. package/build/dist/api/modules/borro/copy.d.ts +174 -0
  25. package/build/dist/api/modules/borro/copy.js +1 -0
  26. package/build/dist/api/modules/borro/index.d.ts +13 -0
  27. package/build/dist/api/modules/borro/index.js +1 -0
  28. package/build/dist/api/modules/borro/liquidity.d.ts +4 -0
  29. package/build/dist/api/modules/borro/liquidity.js +1 -0
  30. package/build/dist/api/modules/borro/pins.d.ts +264 -0
  31. package/build/dist/api/modules/borro/pins.js +1 -0
  32. package/build/dist/api/modules/borro/positions.d.ts +8 -0
  33. package/build/dist/api/modules/borro/positions.js +1 -0
  34. package/build/dist/api/modules/borro/rates.d.ts +20 -0
  35. package/build/dist/api/modules/borro/rates.js +1 -0
  36. package/build/dist/api/modules/borro/reader.d.ts +32 -0
  37. package/build/dist/api/modules/borro/reader.js +1 -0
  38. package/build/dist/api/modules/borro/types.d.ts +120 -0
  39. package/build/dist/api/modules/borro/types.js +0 -0
  40. package/build/dist/api/modules/clanker/extensions.js +1 -1
  41. package/build/dist/api/modules/clanker/index.js +1 -1
  42. package/build/dist/api/modules/clanker/manage.js +1 -1
  43. package/build/dist/api/modules/clanker/pool-config.js +1 -1
  44. package/build/dist/api/modules/clanker/protocol.js +1 -1
  45. package/build/dist/api/modules/clanker/state.js +1 -1
  46. package/build/dist/api/modules/earn/copy.d.ts +2 -2
  47. package/build/dist/api/modules/earn/copy.js +1 -1
  48. package/build/dist/api/modules/earn/index.js +1 -1
  49. package/build/dist/api/modules/earn/lp.js +1 -1
  50. package/build/dist/api/modules/earn/options.js +1 -1
  51. package/build/dist/api/modules/erc8004/common.js +1 -1
  52. package/build/dist/api/modules/erc8004/domain.js +1 -1
  53. package/build/dist/api/modules/erc8004/index.js +1 -1
  54. package/build/dist/api/modules/erc8004/management.js +1 -1
  55. package/build/dist/api/modules/erc8004/reputation.js +1 -1
  56. package/build/dist/api/modules/erc8004/services.js +1 -1
  57. package/build/dist/api/modules/erc8004/validation.js +1 -1
  58. package/build/dist/api/modules/grove/index.js +1 -1
  59. package/build/dist/api/modules/heyresearch/builder-feed.js +1 -1
  60. package/build/dist/api/modules/heyresearch/index.js +1 -1
  61. package/build/dist/api/modules/heyresearch/proof-reads.js +1 -1
  62. package/build/dist/api/modules/heyresearch/public-reads.js +1 -1
  63. package/build/dist/api/modules/heyresearch/scan.js +1 -1
  64. package/build/dist/api/modules/heyresearch/token-facts.js +1 -1
  65. package/build/dist/api/modules/hoodag/chain-reads.js +1 -1
  66. package/build/dist/api/modules/hoodag/index.js +1 -1
  67. package/build/dist/api/modules/hoodag/management.js +1 -1
  68. package/build/dist/api/modules/hoodag/public-reads.js +1 -1
  69. package/build/dist/api/modules/hoodag/reconstruct.js +1 -1
  70. package/build/dist/api/modules/hoodlock/airdrop.js +1 -1
  71. package/build/dist/api/modules/hoodlock/commerce.js +1 -1
  72. package/build/dist/api/modules/hoodlock/fee.js +1 -1
  73. package/build/dist/api/modules/hoodlock/guard.js +1 -1
  74. package/build/dist/api/modules/hoodlock/index.js +1 -1
  75. package/build/dist/api/modules/hoodlock/lifecycle.js +1 -1
  76. package/build/dist/api/modules/hoodlock/locks-burn.js +1 -1
  77. package/build/dist/api/modules/hoodlock/public.js +1 -1
  78. package/build/dist/api/modules/hookr/actions.js +1 -1
  79. package/build/dist/api/modules/hookr/addons.js +1 -1
  80. package/build/dist/api/modules/hookr/agent-gate.js +1 -1
  81. package/build/dist/api/modules/hookr/contracts.js +1 -1
  82. package/build/dist/api/modules/hookr/create-cancel.js +1 -1
  83. package/build/dist/api/modules/hookr/discovery.js +1 -1
  84. package/build/dist/api/modules/hookr/fill-bounty.js +1 -1
  85. package/build/dist/api/modules/hookr/index.js +1 -1
  86. package/build/dist/api/modules/hookr/launch-options.js +1 -1
  87. package/build/dist/api/modules/hookr/launch-receipt.js +1 -1
  88. package/build/dist/api/modules/hookr/launch.js +1 -1
  89. package/build/dist/api/modules/hookr/liquidity.js +1 -1
  90. package/build/dist/api/modules/hookr/lp-positions.js +1 -1
  91. package/build/dist/api/modules/hookr/lp-reads.js +1 -1
  92. package/build/dist/api/modules/hookr/lp-receipt.js +1 -1
  93. package/build/dist/api/modules/hookr/lp-state.js +1 -1
  94. package/build/dist/api/modules/hookr/public-reads.js +1 -1
  95. package/build/dist/api/modules/hookr/read-utils.js +1 -1
  96. package/build/dist/api/modules/hookr/relay.js +1 -1
  97. package/build/dist/api/modules/hookr/revenue.js +1 -1
  98. package/build/dist/api/modules/kyberswap/index.js +1 -1
  99. package/build/dist/api/modules/kyberswap/source-pools.js +1 -1
  100. package/build/dist/api/modules/layerbank/actions.js +1 -1
  101. package/build/dist/api/modules/layerbank/checks.js +1 -1
  102. package/build/dist/api/modules/layerbank/index.js +1 -1
  103. package/build/dist/api/modules/layerbank/merkl.js +1 -1
  104. package/build/dist/api/modules/layerbank/reader.js +1 -1
  105. package/build/dist/api/modules/layerbank/reserve.js +1 -1
  106. package/build/dist/api/modules/lighter/index.js +1 -1
  107. package/build/dist/api/modules/longbow/administration.js +1 -1
  108. package/build/dist/api/modules/longbow/analytics.js +1 -1
  109. package/build/dist/api/modules/longbow/fixed.js +1 -1
  110. package/build/dist/api/modules/longbow/index.js +1 -1
  111. package/build/dist/api/modules/longbow/nft.js +1 -1
  112. package/build/dist/api/modules/longbow/rebates.js +1 -1
  113. package/build/dist/api/modules/longbow/staking.js +1 -1
  114. package/build/dist/api/modules/meridian/index.js +1 -1
  115. package/build/dist/api/modules/meridian/markets.js +1 -1
  116. package/build/dist/api/modules/meridian/perps-batch.js +1 -1
  117. package/build/dist/api/modules/meridian/perps-common.js +1 -1
  118. package/build/dist/api/modules/meridian/perps-guards.js +1 -1
  119. package/build/dist/api/modules/meridian/perps-intents.js +1 -1
  120. package/build/dist/api/modules/meridian/perps-stream.js +1 -1
  121. package/build/dist/api/modules/meridian/perps.d.ts +1 -0
  122. package/build/dist/api/modules/meridian/perps.js +1 -1
  123. package/build/dist/api/modules/meridian/predict-read.js +1 -1
  124. package/build/dist/api/modules/meridian/rfq.js +1 -1
  125. package/build/dist/api/modules/merkl/discovery.js +1 -1
  126. package/build/dist/api/modules/merkl/index.js +1 -1
  127. package/build/dist/api/modules/merkl/manage.js +1 -1
  128. package/build/dist/api/modules/merkl/protocol.js +1 -1
  129. package/build/dist/api/modules/morpho/allocator.js +1 -1
  130. package/build/dist/api/modules/morpho/bundles.js +1 -1
  131. package/build/dist/api/modules/morpho/in-kind.js +1 -1
  132. package/build/dist/api/modules/morpho/index.js +1 -1
  133. package/build/dist/api/modules/morpho/local-guard.js +1 -1
  134. package/build/dist/api/modules/morpho/midnight.js +1 -1
  135. package/build/dist/api/modules/morpho/protocol.js +1 -1
  136. package/build/dist/api/modules/morpho/vault-management.js +1 -1
  137. package/build/dist/api/modules/morpho/vault-tools.js +1 -1
  138. package/build/dist/api/modules/morpho/vault-v2.js +1 -1
  139. package/build/dist/api/modules/netnet/card-plan.js +1 -1
  140. package/build/dist/api/modules/netnet/card-read.js +1 -1
  141. package/build/dist/api/modules/netnet/card-recovery.js +1 -1
  142. package/build/dist/api/modules/netnet/desk-action.js +1 -1
  143. package/build/dist/api/modules/netnet/financial.js +1 -1
  144. package/build/dist/api/modules/netnet/index.js +1 -1
  145. package/build/dist/api/modules/netnet/staking.js +1 -1
  146. package/build/dist/api/modules/orbio/gateway.js +1 -1
  147. package/build/dist/api/modules/orbio/index.js +1 -1
  148. package/build/dist/api/modules/orbio/positions.js +1 -1
  149. package/build/dist/api/modules/pendle/convert.js +1 -1
  150. package/build/dist/api/modules/pendle/costs.js +1 -1
  151. package/build/dist/api/modules/pendle/index.js +1 -1
  152. package/build/dist/api/modules/pendle/markets.js +1 -1
  153. package/build/dist/api/modules/pendle/positions.js +1 -1
  154. package/build/dist/api/modules/pendle/pricecheck.js +1 -1
  155. package/build/dist/api/modules/pendle/reader.js +1 -1
  156. package/build/dist/api/modules/pendle/redeem.js +1 -1
  157. package/build/dist/api/modules/pendle/trade.js +1 -1
  158. package/build/dist/api/modules/pendle/types.d.ts +16 -1
  159. package/build/dist/api/modules/pendle/validate.js +1 -1
  160. package/build/dist/api/modules/pendle/verify.js +1 -1
  161. package/build/dist/api/modules/pons/claim.js +1 -1
  162. package/build/dist/api/modules/pons/holder-directory.js +1 -1
  163. package/build/dist/api/modules/pons/index.js +1 -1
  164. package/build/dist/api/modules/pons/launch-status.js +1 -1
  165. package/build/dist/api/modules/pons/prices.js +1 -1
  166. package/build/dist/api/modules/pons/reads.js +1 -1
  167. package/build/dist/api/modules/pons/swap-terms.js +1 -1
  168. package/build/dist/api/modules/pons/trade.js +1 -1
  169. package/build/dist/api/modules/poolstrade/index.js +1 -1
  170. package/build/dist/api/modules/priors/coverage.js +1 -1
  171. package/build/dist/api/modules/priors/discovery.js +1 -1
  172. package/build/dist/api/modules/priors/features.js +1 -1
  173. package/build/dist/api/modules/priors/holdings.js +1 -1
  174. package/build/dist/api/modules/priors/index.js +1 -1
  175. package/build/dist/api/modules/priors/integration.js +1 -1
  176. package/build/dist/api/modules/priors/market.js +1 -1
  177. package/build/dist/api/modules/priors/pt.js +1 -1
  178. package/build/dist/api/modules/priors/savings-exit.js +1 -1
  179. package/build/dist/api/modules/priors/starter-line.js +1 -1
  180. package/build/dist/api/modules/priors/stock-swap.js +1 -1
  181. package/build/dist/api/modules/relay/api.js +1 -1
  182. package/build/dist/api/modules/relay/bootstrap.js +1 -1
  183. package/build/dist/api/modules/relay/discovery.js +1 -1
  184. package/build/dist/api/modules/relay/inbound.d.ts +2 -0
  185. package/build/dist/api/modules/relay/inbound.js +1 -1
  186. package/build/dist/api/modules/relay/index.js +1 -1
  187. package/build/dist/api/modules/relay/order.js +1 -1
  188. package/build/dist/api/modules/relay/outbound-status.js +1 -1
  189. package/build/dist/api/modules/relay/readiness.js +1 -1
  190. package/build/dist/api/modules/relay/reads.js +1 -1
  191. package/build/dist/api/modules/relay/vaults.js +1 -1
  192. package/build/dist/api/modules/spark/actions.js +1 -1
  193. package/build/dist/api/modules/spark/details.js +1 -1
  194. package/build/dist/api/modules/spark/index.js +1 -1
  195. package/build/dist/api/modules/spark/management.js +1 -1
  196. package/build/dist/api/modules/steakhouse/analytics.js +1 -1
  197. package/build/dist/api/modules/steakhouse/erc4626.js +1 -1
  198. package/build/dist/api/modules/steakhouse/index.js +1 -1
  199. package/build/dist/api/modules/steakhouse/local-guard.js +1 -1
  200. package/build/dist/api/modules/steakhouse/management.js +1 -1
  201. package/build/dist/api/modules/steakhouse/v2-exit.js +1 -1
  202. package/build/dist/api/modules/tickerspring/basket-routes.js +1 -1
  203. package/build/dist/api/modules/tickerspring/contract-reads.js +1 -1
  204. package/build/dist/api/modules/tickerspring/exit-preview.js +1 -1
  205. package/build/dist/api/modules/tickerspring/guards.js +1 -1
  206. package/build/dist/api/modules/tickerspring/index.js +1 -1
  207. package/build/dist/api/modules/tickerspring/journeys.js +1 -1
  208. package/build/dist/api/modules/tickerspring/ladder.js +1 -1
  209. package/build/dist/api/modules/tickerspring/maker.js +1 -1
  210. package/build/dist/api/modules/tickerspring/order-accounting.js +1 -1
  211. package/build/dist/api/modules/tickerspring/research.js +1 -1
  212. package/build/dist/api/modules/tickerspring/strategies.js +1 -1
  213. package/build/dist/api/modules/uniswap/auction-create.js +1 -1
  214. package/build/dist/api/modules/uniswap/auction.js +1 -1
  215. package/build/dist/api/modules/uniswap/batch.js +1 -1
  216. package/build/dist/api/modules/uniswap/common.js +1 -1
  217. package/build/dist/api/modules/uniswap/fees.js +1 -1
  218. package/build/dist/api/modules/uniswap/index.js +1 -1
  219. package/build/dist/api/modules/uniswap/local-guard.js +1 -1
  220. package/build/dist/api/modules/uniswap/oracle.js +1 -1
  221. package/build/dist/api/modules/uniswap/pool-math.js +1 -1
  222. package/build/dist/api/modules/uniswap/pools.js +1 -1
  223. package/build/dist/api/modules/uniswap/position.js +1 -1
  224. package/build/dist/api/modules/uniswap/protocol.js +1 -1
  225. package/build/dist/api/modules/uniswap/token-jar.js +1 -1
  226. package/build/dist/api/modules/uniswap/trade-batch.js +1 -1
  227. package/build/dist/api/modules/uniswap/trade.js +1 -1
  228. package/build/dist/api/modules/uniswap/v2.js +1 -1
  229. package/build/dist/api/modules/uniswap/v3.d.ts +11 -1
  230. package/build/dist/api/modules/uniswap/v3.js +1 -1
  231. package/build/dist/api/modules/uniswap/v4.js +1 -1
  232. package/build/dist/api/modules/uniswap/wrap.js +1 -1
  233. package/build/dist/api/modules/velora/claims.js +1 -1
  234. package/build/dist/api/modules/velora/delta-reads.js +1 -1
  235. package/build/dist/api/modules/velora/index.js +1 -1
  236. package/build/dist/api/modules/wormhole/index.js +1 -1
  237. package/build/dist/api/modules/wormhole/scan-text.js +1 -1
  238. package/build/dist/api/modules/wormhole/token-check.js +1 -1
  239. package/build/dist/api/positions.js +1 -1
  240. package/build/dist/api/pricenote.js +1 -1
  241. package/build/dist/api/prices.js +1 -1
  242. package/build/dist/api/pricing.js +1 -1
  243. package/build/dist/api/routes.js +1 -1
  244. package/build/dist/api/send.js +1 -1
  245. package/build/dist/api/signing-registry.js +1 -1
  246. package/build/dist/api/simulate.js +1 -1
  247. package/build/dist/api/swap.js +1 -1
  248. package/build/dist/api/tokens.d.ts +1 -0
  249. package/build/dist/api/tokens.js +1 -1
  250. package/build/dist/api/tool-policy.js +1 -1
  251. package/build/dist/api/tx.js +1 -1
  252. package/build/dist/api/vendor-limits.js +1 -1
  253. package/build/dist/chunks/{BAAXGB4K.js → 2KYAMXTS.js} +1 -1
  254. package/build/dist/chunks/{WVONJOWN.js → 2MAMJJJC.js} +1 -1
  255. package/build/dist/chunks/{MKAPRRKF.js → 2TK3ETUO.js} +1 -1
  256. package/build/dist/chunks/{CTMA4BTM.js → 326QMOTR.js} +1 -1
  257. package/build/dist/chunks/{ALRRW7SF.js → 3FUVMSCF.js} +1 -1
  258. package/build/dist/chunks/{YPM2UITD.js → 3GOHSYHW.js} +1 -1
  259. package/build/dist/chunks/{HTXKERNS.js → 3MLUCYCB.js} +1 -1
  260. package/build/dist/chunks/{GHPREYQK.js → 3NJ5KQ3Q.js} +1 -1
  261. package/build/dist/chunks/{WPFAEBE7.js → 3XNZUIRU.js} +1 -1
  262. package/build/dist/chunks/3XXBLNEX.js +1 -0
  263. package/build/dist/chunks/{PBQSJSZO.js → 43LI5NKJ.js} +1 -1
  264. package/build/dist/chunks/{NZXQWDGF.js → 45BRW2ZF.js} +1 -1
  265. package/build/dist/chunks/{QVYCJ6WV.js → 46KWRAYK.js} +1 -1
  266. package/build/dist/chunks/{UHRCM7AG.js → 4HG6FRVH.js} +1 -1
  267. package/build/dist/chunks/{TBCSZDAF.js → 4MXM6Q4W.js} +1 -1
  268. package/build/dist/chunks/{ZCOFMGPS.js → 4PY3UFNR.js} +1 -1
  269. package/build/dist/chunks/{WIVYKLQM.js → 52ELWNXJ.js} +1 -1
  270. package/build/dist/chunks/{F3BSEE52.js → 553UE2ZQ.js} +1 -1
  271. package/build/dist/chunks/{S2TAJHHK.js → 57MEFFCU.js} +1 -1
  272. package/build/dist/chunks/{ENX72ARB.js → 5APS4T2D.js} +1 -1
  273. package/build/dist/chunks/{UA4O226F.js → 5SMVQCAP.js} +1 -1
  274. package/build/dist/chunks/{6PY3IRDS.js → 64GOINYS.js} +1 -1
  275. package/build/dist/chunks/{5ZLOCQA4.js → 66F5ZH34.js} +1 -1
  276. package/build/dist/chunks/{HVM2EEXB.js → 6B3VVISQ.js} +1 -1
  277. package/build/dist/chunks/{E6RRXNV2.js → 6D5DJA5B.js} +1 -1
  278. package/build/dist/chunks/{XDZRO5JQ.js → 6I4NTKB2.js} +1 -1
  279. package/build/dist/chunks/{MFCPL6LF.js → 6OGDTEGH.js} +1 -1
  280. package/build/dist/chunks/6PBGEPUK.js +20 -0
  281. package/build/dist/chunks/{43CSMYDO.js → 6WD4HHID.js} +1 -1
  282. package/build/dist/chunks/{XJEOEMDS.js → 6WZX7C4T.js} +1 -1
  283. package/build/dist/chunks/{NA7R6J5N.js → 74Y2KDNR.js} +1 -1
  284. package/build/dist/chunks/{IKEJCBYU.js → 7WSHW7KW.js} +1 -1
  285. package/build/dist/chunks/{UPMGGK34.js → AFBEZXNV.js} +1 -1
  286. package/build/dist/chunks/{AUOXDNUO.js → AKYF5264.js} +1 -1
  287. package/build/dist/chunks/{BXHNYCH2.js → APGLZXIW.js} +1 -1
  288. package/build/dist/chunks/{7UOOIDR3.js → AVG4W3Y7.js} +1 -1
  289. package/build/dist/chunks/{Y7PRJOIK.js → B3RXD5ET.js} +1 -1
  290. package/build/dist/chunks/{JPNYUEQP.js → BBS3ODWZ.js} +1 -1
  291. package/build/dist/chunks/{I4TGMF2C.js → BJ2VGRF4.js} +1 -1
  292. package/build/dist/chunks/{WD37MEMZ.js → BTD5SMOW.js} +1 -1
  293. package/build/dist/chunks/{57JFKIMK.js → BTPXJAUX.js} +1 -1
  294. package/build/dist/chunks/{BIRMUW7Z.js → C36BFZH6.js} +1 -1
  295. package/build/dist/chunks/{ZGKVXFM5.js → C7AXJHBT.js} +1 -1
  296. package/build/dist/chunks/{5U7TCKX2.js → CBG5HARQ.js} +1 -1
  297. package/build/dist/chunks/{ET23SES4.js → CCTXCMH4.js} +1 -1
  298. package/build/dist/chunks/{5N4A5XAW.js → CHXBOXOD.js} +1 -1
  299. package/build/dist/chunks/D3YLXQPW.js +1 -0
  300. package/build/dist/chunks/{L7OQUHM5.js → DJN3JAWB.js} +1 -1
  301. package/build/dist/chunks/{CERNEJ2F.js → DW4V5PUY.js} +1 -1
  302. package/build/dist/chunks/E3RACZUY.js +1 -0
  303. package/build/dist/chunks/{TPL4U3AQ.js → E674J2MD.js} +1 -1
  304. package/build/dist/chunks/EE64JSLY.js +1 -0
  305. package/build/dist/chunks/EJ7O75A7.js +1 -0
  306. package/build/dist/chunks/{3AXVB23N.js → ELSXLZN5.js} +1 -1
  307. package/build/dist/chunks/{IQGY5FW7.js → ER47KGRM.js} +1 -1
  308. package/build/dist/chunks/FQ6UZCM6.js +1 -0
  309. package/build/dist/chunks/{WPAF55SP.js → GEIFITAQ.js} +1 -1
  310. package/build/dist/chunks/{4ALMYJJV.js → GGSAKCND.js} +1 -1
  311. package/build/dist/chunks/{EKNSLLJK.js → GL4NCUMH.js} +1 -1
  312. package/build/dist/chunks/GNC6RXLT.js +1 -0
  313. package/build/dist/chunks/{VVA72C6O.js → GQ5GYUEH.js} +1 -1
  314. package/build/dist/chunks/{6AAARNZ3.js → GW626GG2.js} +1 -1
  315. package/build/dist/chunks/{LROVANUR.js → H2XDMFQQ.js} +1 -1
  316. package/build/dist/chunks/H43RNCX2.js +1 -0
  317. package/build/dist/chunks/{VHLINDDS.js → HAQPIBYR.js} +1 -1
  318. package/build/dist/chunks/{ZE7EU2CS.js → HCUHMCBW.js} +1 -1
  319. package/build/dist/chunks/{64WKYWZV.js → HKEMQBFA.js} +1 -1
  320. package/build/dist/chunks/{4YFVAYKR.js → HM72DH4V.js} +1 -1
  321. package/build/dist/chunks/HSCQZ66A.js +1 -0
  322. package/build/dist/chunks/{QRC4ZPDA.js → I26DMNJG.js} +1 -1
  323. package/build/dist/chunks/{S3FPF537.js → IMO3GDA5.js} +1 -1
  324. package/build/dist/chunks/{ECWGKLBW.js → INOZIE55.js} +1 -1
  325. package/build/dist/chunks/{BQICZFLR.js → IOYRL6AY.js} +1 -1
  326. package/build/dist/chunks/IX3GZMTM.js +1 -0
  327. package/build/dist/chunks/IY7BXLT4.js +1 -0
  328. package/build/dist/chunks/{NYNJITCM.js → J2OT4KAH.js} +1 -1
  329. package/build/dist/chunks/{Y7RPSDD2.js → JKD2B6OX.js} +1 -1
  330. package/build/dist/chunks/{PSVOVZH7.js → JUZ5JU6D.js} +5 -5
  331. package/build/dist/chunks/{YEXUSRIZ.js → JVLLVNF2.js} +1 -1
  332. package/build/dist/chunks/{SSIENQVU.js → K3RDPI5J.js} +1 -1
  333. package/build/dist/chunks/{PADWZX7J.js → K4DHHQBI.js} +1 -1
  334. package/build/dist/chunks/KIFSRO5K.js +1 -0
  335. package/build/dist/chunks/{NB3LYS3G.js → KIFZ5ZSK.js} +1 -1
  336. package/build/dist/chunks/{QSN6Y2K6.js → KPCY5V35.js} +1 -1
  337. package/build/dist/chunks/{3ESNHZT5.js → L4N2RSK2.js} +1 -1
  338. package/build/dist/chunks/{EYFBVQ46.js → L5BLHY34.js} +1 -1
  339. package/build/dist/chunks/{E6UU7DL2.js → LSXUAHOE.js} +1 -1
  340. package/build/dist/chunks/{BNG2IWZL.js → M37654RL.js} +1 -1
  341. package/build/dist/chunks/{XFKVU46U.js → MJ6WEWMI.js} +1 -1
  342. package/build/dist/chunks/{47YN4OUI.js → MR5L7V6Z.js} +1 -1
  343. package/build/dist/chunks/{DVVFT42J.js → MRMR4QHA.js} +1 -1
  344. package/build/dist/chunks/{WWHCEMNB.js → N4Q6GN65.js} +1 -1
  345. package/build/dist/chunks/{S5WICHIS.js → NAZPDRIF.js} +1 -1
  346. package/build/dist/chunks/{MKBNLGDD.js → NDCLTVIU.js} +1 -1
  347. package/build/dist/chunks/{5WUKOQIJ.js → NEEZBJBC.js} +1 -1
  348. package/build/dist/chunks/{HSFOWJ3Z.js → NKZKKCK2.js} +1 -1
  349. package/build/dist/chunks/{5KUWLUPM.js → NWNYJ26T.js} +1 -1
  350. package/build/dist/chunks/{KBXU7U6Q.js → O7HCEPQY.js} +1 -1
  351. package/build/dist/chunks/{LDT3QTSY.js → OJ4WJUPP.js} +1 -1
  352. package/build/dist/chunks/{QJFXLYZG.js → OJPG45AC.js} +1 -1
  353. package/build/dist/chunks/{5MQ5KSSV.js → OKUO3BVM.js} +1 -1
  354. package/build/dist/chunks/OTXSKFUD.js +1 -0
  355. package/build/dist/chunks/{4TQQH7N6.js → P3S4BR5G.js} +1 -1
  356. package/build/dist/chunks/P56RZC2M.js +1 -0
  357. package/build/dist/chunks/{BK23XJXE.js → P5PYFK7L.js} +1 -1
  358. package/build/dist/chunks/{ZYH4B2GR.js → P7I62KFR.js} +1 -1
  359. package/build/dist/chunks/{SQL6HD5E.js → PK66GCDT.js} +1 -1
  360. package/build/dist/chunks/{6FTYNYGF.js → PSBQWDYI.js} +1 -1
  361. package/build/dist/chunks/{W76QC2AW.js → PV5FDT6O.js} +1 -1
  362. package/build/dist/chunks/{42DQTKEO.js → PXT5YTWU.js} +1 -1
  363. package/build/dist/chunks/{IMRXZ7JB.js → Q42YI3EP.js} +1 -1
  364. package/build/dist/chunks/{ZBFKKUNP.js → QA3UHEO3.js} +1 -1
  365. package/build/dist/chunks/QC3HH5UD.js +3 -0
  366. package/build/dist/chunks/{MQYOG66Q.js → QF52OIBS.js} +1 -1
  367. package/build/dist/chunks/{7WQEPZJY.js → QO3KCJMP.js} +1 -1
  368. package/build/dist/chunks/QQECG3WP.js +1 -0
  369. package/build/dist/chunks/QSHCBASA.js +1 -0
  370. package/build/dist/chunks/{RVO3QK2B.js → QU5XKRGK.js} +1 -1
  371. package/build/dist/chunks/{GVPX5XCL.js → QZZ4O34L.js} +1 -1
  372. package/build/dist/chunks/{A6YQ5H24.js → RQ4GHJXE.js} +1 -1
  373. package/build/dist/chunks/{3WXK2FUA.js → RUC7KH7A.js} +1 -1
  374. package/build/dist/chunks/{MBTARLZQ.js → RUX3RY7Y.js} +1 -1
  375. package/build/dist/chunks/{3VAJW6TQ.js → RVDUSNWW.js} +1 -1
  376. package/build/dist/chunks/{SDHPFXRM.js → S47VUTHM.js} +1 -1
  377. package/build/dist/chunks/{OTIXQZ3X.js → S7IFAQPG.js} +1 -1
  378. package/build/dist/chunks/{WMNRP3YH.js → SIYUNOLI.js} +1 -1
  379. package/build/dist/chunks/{TNKVRVTH.js → SJJR4ZBZ.js} +1 -1
  380. package/build/dist/chunks/{UFVPMWPJ.js → SMYWWIE6.js} +1 -1
  381. package/build/dist/chunks/{Z4SRGAVL.js → SPJCSEKP.js} +1 -1
  382. package/build/dist/chunks/{IQIWASRD.js → SSHCD6RZ.js} +1 -1
  383. package/build/dist/chunks/{SGEZIYJW.js → T2WHOZXM.js} +1 -1
  384. package/build/dist/chunks/{WOEKXQAH.js → T3AJSQYT.js} +1 -1
  385. package/build/dist/chunks/{SKMPKAZI.js → TAEZTP4L.js} +1 -1
  386. package/build/dist/chunks/{E3UBHTJO.js → TEJ7W534.js} +1 -1
  387. package/build/dist/chunks/{AWXJV2YH.js → TFDPEAVZ.js} +1 -1
  388. package/build/dist/chunks/{MGPHD4VV.js → TM2XCRU7.js} +1 -1
  389. package/build/dist/chunks/{UOGHQLQX.js → TMVO2DAK.js} +1 -1
  390. package/build/dist/chunks/{MXW2TP5P.js → TVWMTMEF.js} +1 -1
  391. package/build/dist/chunks/{GRIGSPD4.js → TX2EOIRS.js} +1 -1
  392. package/build/dist/chunks/{VV2HEIFI.js → U5PMVP56.js} +1 -1
  393. package/build/dist/chunks/{K72EYD6R.js → U67J4BCH.js} +1 -1
  394. package/build/dist/chunks/{MDDHG34Y.js → UHTRW2R6.js} +1 -1
  395. package/build/dist/chunks/{PQC5635W.js → UHVSINR5.js} +1 -1
  396. package/build/dist/chunks/{MOPETB64.js → UMIZMJWW.js} +1 -1
  397. package/build/dist/chunks/{F26FK47J.js → UNJJRQIU.js} +1 -1
  398. package/build/dist/chunks/V74F6IDY.js +1 -0
  399. package/build/dist/chunks/{MYFAKCQI.js → VEQBHI6O.js} +1 -1
  400. package/build/dist/chunks/VHV6WQ5F.js +1 -0
  401. package/build/dist/chunks/{EOQYLFXA.js → VJS4DHQQ.js} +1 -1
  402. package/build/dist/chunks/{AG67Z3SC.js → VOMGT5SG.js} +1 -1
  403. package/build/dist/chunks/{D6ZJPNK7.js → VY7XRHZQ.js} +1 -1
  404. package/build/dist/chunks/{W2OJ57ZO.js → VYAJXLND.js} +1 -1
  405. package/build/dist/chunks/{LVLVP5KQ.js → VYN2NRAP.js} +1 -1
  406. package/build/dist/chunks/{MDV7GECM.js → VYYSL557.js} +1 -1
  407. package/build/dist/chunks/{KA7BPBCV.js → W2BYU5JQ.js} +1 -1
  408. package/build/dist/chunks/W6BS3T7S.js +1 -0
  409. package/build/dist/chunks/WCNHZYQQ.js +1 -0
  410. package/build/dist/chunks/{ALPYEM7B.js → WDK6VOG4.js} +1 -1
  411. package/build/dist/chunks/{K22EXPWN.js → WIRBCS4W.js} +1 -1
  412. package/build/dist/chunks/{YRXT3HTW.js → WLMWWEP7.js} +1 -1
  413. package/build/dist/chunks/{NDW5DAFL.js → WP6RHXGN.js} +1 -1
  414. package/build/dist/chunks/{PLZKXQ76.js → WTXC3XKW.js} +1 -1
  415. package/build/dist/chunks/{WGL46F3S.js → WU7XIAXB.js} +1 -1
  416. package/build/dist/chunks/{5OKJEGBH.js → WV3A3OUU.js} +1 -1
  417. package/build/dist/chunks/{4ISR2U72.js → X2KFXCVD.js} +1 -1
  418. package/build/dist/chunks/{RPNAFUM5.js → X3BYCOWS.js} +1 -1
  419. package/build/dist/chunks/{6L5KTE6Y.js → X3PQMS4N.js} +1 -1
  420. package/build/dist/chunks/{RNC463IM.js → XBE3B6Y2.js} +1 -1
  421. package/build/dist/chunks/XLOYBLFI.js +1 -0
  422. package/build/dist/chunks/{2ZUP7ZEV.js → XR7VK24E.js} +1 -1
  423. package/build/dist/chunks/{ZSQOMSOC.js → Y25EXZCO.js} +1 -1
  424. package/build/dist/chunks/{TJWVY4VO.js → YCZPSMZ5.js} +1 -1
  425. package/build/dist/chunks/{JZXYLHI7.js → YDNTY67T.js} +1 -1
  426. package/build/dist/chunks/{2DUCTO5C.js → YN56C7PN.js} +1 -1
  427. package/build/dist/chunks/{G7XSFUDL.js → YWRDZQI6.js} +1 -1
  428. package/build/dist/chunks/{DP2NIYBP.js → YXTSWRV5.js} +1 -1
  429. package/build/dist/chunks/{I6KUORFT.js → Z43BTOTE.js} +1 -1
  430. package/build/dist/chunks/{PWH464CJ.js → Z4FZVJ5Z.js} +1 -1
  431. package/build/dist/chunks/{YAJYDD6C.js → ZMFRMWHR.js} +1 -1
  432. package/build/dist/chunks/{OFI3Y55L.js → ZQAFFWDK.js} +1 -1
  433. package/build/dist/chunks/{TBIVTEP5.js → ZSN4IRI5.js} +1 -1
  434. package/build/dist/chunks/{ZET37EIG.js → ZV5HIQXC.js} +1 -1
  435. package/package.json +1 -1
  436. package/build/dist/chunks/24CQ2SPB.js +0 -1
  437. package/build/dist/chunks/2OJAOVMG.js +0 -1
  438. package/build/dist/chunks/65EQECL3.js +0 -1
  439. package/build/dist/chunks/6YYCGUCU.js +0 -1
  440. package/build/dist/chunks/EU3OAJU2.js +0 -1
  441. package/build/dist/chunks/H4NYYJ3Z.js +0 -1
  442. package/build/dist/chunks/JG27HM4P.js +0 -1
  443. package/build/dist/chunks/L6D26AMO.js +0 -1
  444. package/build/dist/chunks/O6L4BJP4.js +0 -1
  445. package/build/dist/chunks/SUFA2GKR.js +0 -1
  446. package/build/dist/chunks/UP7FBDMJ.js +0 -1
  447. package/build/dist/chunks/YHRUAQQK.js +0 -1
  448. package/build/dist/chunks/ZCUXM52B.js +0 -1
@@ -1 +1 @@
1
- import{a as H,b as z}from"./LIUXNOLP.js";import{a as _}from"./U4JGEMKT.js";import{a as O,b as B}from"./PBQSJSZO.js";import{b as D,c as E,d as U}from"./BQICZFLR.js";import{a as $,b as M,i as R,s as S}from"./FWD4L3CJ.js";import{a as u,b as N,c as I,e as F}from"./XSD5NL7J.js";import{decodeFunctionResult as J,encodeFunctionData as Q,erc20Abi as q,getAddress as G,isAddress as X,toEventSelector as Y,toHex as v,zeroAddress as Z}from"viem";var C="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";function ee(e){let r=e.toLowerCase();return r===Z||r===C?C:e}var te=Y("Transfer(address,address,uint256)"),K="Preview note: simulation transfer-based token changes exclude gas and do not prove external settlement.";function A(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function P(){throw new u("The endpoint returned an unexpected simulation response.")}async function L(e,r,d,a){let s=await e.getChainId();if(s!==r)throw new u(`Preview is on chain ${r}, but the endpoint reports chain ${s}.`);let i=await H(e),t=await z(e,i);if(i.number===null||typeof i.baseFeePerGas!="bigint"||i.baseFeePerGas<0n||typeof t!="bigint"||t<0n)throw new u("Current block base fee and gas price are unavailable or inconsistent. Retry the preview.");let n=t<i.baseFeePerGas?i.baseFeePerGas:t,y=D(i.gasLimit),b=d.map(f=>({from:a,to:f.to,data:f.data,value:v(BigInt(f.value)),gasPrice:v(n),gas:v(y)})),w=()=>e.request({method:"eth_simulateV1",params:[{blockStateCalls:[{blockOverrides:{baseFeePerGas:v(i.baseFeePerGas)},calls:b}],validation:!1,traceTransfers:!0},v(i.number)]},{retryCount:0});try{return await w()}catch(f){if(!I(f))throw f;let o=await e.getBalance({address:a,blockNumber:i.number}),c=await Promise.all(d.map(m=>e.estimateGas({account:a,to:m.to,data:m.data,value:BigInt(m.value),gas:y,blockNumber:i.number}).catch(()=>{}))),p=o;for(let[m,l]of b.entries()){let g=BigInt(l.value),x=U(D(i.gasLimit,c[m]),p,g,n,a,r),T=c[m];if(T!==void 0&&T>x)throw new u(E(a,r,o-p+g+T*n,o));l.gas=v(x),p-=g}let h=await w();if(Array.isArray(h)&&A(h[0])&&Array.isArray(h[0].calls))for(let[m,l]of h[0].calls.entries()){let g=b[m];if(g&&A(l)&&l.status==="0x0"&&typeof l.gasUsed=="string"&&/^0x[0-9a-f]+$/i.test(l.gasUsed)&&BigInt(l.gasUsed)>=BigInt(g.gas))throw new u(E(a,r,BigInt(g.value)+(BigInt(g.gas)+1n)*n,o))}return h}}function V(e,r,d,a){(!Array.isArray(e)||e.length!==1||!A(e[0])||!Array.isArray(e[0].calls)||e[0].calls.length!==r)&&P();let s=new Map;for(let[i,t]of e[0].calls.entries()){if(A(t)||P(),t.status==="0x0")throw new u(`Preview call ${i+1} on chain ${a} reverted. ${F(t.error)}`);(t.status!=="0x1"||t.error||!Array.isArray(t.logs))&&P();for(let n of t.logs){if((!A(n)||!Array.isArray(n.topics))&&P(),typeof n.topics[0]!="string"||n.topics[0].toLowerCase()!==te||n.topics.length===4)continue;(n.topics.length!==3||typeof n.address!="string"||!X(n.address,{strict:!1})||typeof n.data!="string"||!/^0x[0-9a-fA-F]{64}$/.test(n.data)||!n.topics.slice(1).every(c=>typeof c=="string"&&/^0x0{24}[0-9a-fA-F]{40}$/.test(c)))&&P();let y=n.topics[1].slice(-40).toLowerCase(),b=n.topics[2].slice(-40).toLowerCase(),w=d.slice(2).toLowerCase(),f=BigInt(n.data),o=(b===w?f:0n)-(y===w?f:0n);if(o!==0n){let c=ee(n.address.toLowerCase());s.set(c,(s.get(c)??0n)+o)}}}return s}async function W(e,r,d,a){let s=r===$?S.mainnet:r===M?S.testnet:void 0,i=s&&[{address:s.usdg,symbol:"USDG",decimals:6},{address:s.weth,symbol:"WETH",decimals:18},...r===$?[{address:R[4663].meridian.CollateralToken_USDe.address,symbol:"USDe",decimals:18}]:[]].find(n=>n.address.toLowerCase()===e);if(i)return{...i,address:G(e),chainId:r};let t;if(e===C){let n=d.chain?.nativeCurrency??(r===4663?{symbol:"ETH",decimals:18}:void 0);if(!n)throw new u(`Native token metadata is unavailable for chain ${r}.`);t={address:e,chainId:r,symbol:n.symbol,decimals:n.decimals}}else if(a)t=await a(e,r,d);else{let n=await _(d,r,e,"decimals");t={address:e,chainId:r,symbol:e,decimals:n}}if(!t||typeof t.address!="string"||t.address.toLowerCase()!==e||t.chainId!==r||typeof t.symbol!="string"||!t.symbol.trim()||!Number.isInteger(t.decimals)||t.decimals<0||t.decimals>255)throw new u(`Invalid token metadata for ${e} on chain ${r}.`);return{address:e===C?e:G(e),chainId:r,symbol:e===C?t.symbol:G(e),decimals:t.decimals}}function le(e){return async(r,d)=>{O(d);let a=r.map(B),s=a[0]?.chainId;if(s===void 0)return{txs:a,changes:[],summary:K};let i=a.find(t=>t.chainId!==s);if(i)throw new u(`Preview cannot combine chain ${s} with chain ${i.chainId}. Preview each chain separately.`);try{let t=e.clientFor(s),n;try{n=await L(t,s,a,d)}catch(o){if(!N(o,-32601,-32004)||!e.anvilFor)throw o;t=await e.anvilFor(s),n=await L(t,s,a,d)}let y=V(n,a.length,d,s),b=new Map,w=[];for(let[o,c]of y)if(c!==0n)try{b.set(o,await W(o,s,t,e.tokenFor))}catch(p){if(o===C||e.tokenFor||(await t.getCode({address:o})??"0x")!=="0x")throw p;w.push(o)}if(w.length){let o=w.flatMap(m=>["symbol","decimals"].map(l=>B({to:m,data:Q({abi:q,functionName:l}),value:"0",chainId:s,description:`Read simulated token ${l}.`}))),c=await L(t,s,[...a,...o],d);(!Array.isArray(c)||c.length!==1||!A(c[0])||!Array.isArray(c[0].calls)||c[0].calls.length!==a.length+o.length)&&P();let p=c[0].calls,h=V([{calls:p.slice(0,a.length)}],a.length,d,s);if(y.size!==h.size||[...y].some(([m,l])=>h.get(m)!==l))throw new u("Simulation changed while reading new-token metadata. Refresh the preview.");for(let[m,l]of w.entries()){let g=(T,j)=>{let k=p[a.length+m*2+j];if(!A(k)||k.status!=="0x1"||k.error||typeof k.returnData!="string"||!/^0x[0-9a-fA-F]+$/.test(k.returnData))throw new u(`Invalid simulated token metadata for ${l} on chain ${s}.`);return J({abi:q,functionName:T,data:k.returnData})},x={address:l,chainId:s,symbol:g("symbol",0),decimals:g("decimals",1)};b.set(l,await W(l,s,t,async()=>x))}}let f=[...y].filter(([,o])=>o!==0n).map(([o,c])=>({token:b.get(o),amount:c.toString()}));return{txs:a,changes:f,summary:K}}catch(t){throw new u(`Preview on chain ${s} failed: ${F(t)}`)}}}export{C as a,ee as b,le as c};
1
+ import{a as H,b as z}from"./LIUXNOLP.js";import{a as _}from"./U4JGEMKT.js";import{a as O,b as B}from"./43LI5NKJ.js";import{b as D,c as E,d as U}from"./IOYRL6AY.js";import{a as $,b as M,i as R,s as S}from"./FWD4L3CJ.js";import{a as u,b as N,c as I,e as F}from"./XSD5NL7J.js";import{decodeFunctionResult as J,encodeFunctionData as Q,erc20Abi as q,getAddress as G,isAddress as X,toEventSelector as Y,toHex as v,zeroAddress as Z}from"viem";var C="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";function ee(e){let r=e.toLowerCase();return r===Z||r===C?C:e}var te=Y("Transfer(address,address,uint256)"),K="Preview note: simulation transfer-based token changes exclude gas and do not prove external settlement.";function A(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function P(){throw new u("The endpoint returned an unexpected simulation response.")}async function L(e,r,d,a){let s=await e.getChainId();if(s!==r)throw new u(`Preview is on chain ${r}, but the endpoint reports chain ${s}.`);let i=await H(e),t=await z(e,i);if(i.number===null||typeof i.baseFeePerGas!="bigint"||i.baseFeePerGas<0n||typeof t!="bigint"||t<0n)throw new u("Current block base fee and gas price are unavailable or inconsistent. Retry the preview.");let n=t<i.baseFeePerGas?i.baseFeePerGas:t,y=D(i.gasLimit),b=d.map(f=>({from:a,to:f.to,data:f.data,value:v(BigInt(f.value)),gasPrice:v(n),gas:v(y)})),w=()=>e.request({method:"eth_simulateV1",params:[{blockStateCalls:[{blockOverrides:{baseFeePerGas:v(i.baseFeePerGas)},calls:b}],validation:!1,traceTransfers:!0},v(i.number)]},{retryCount:0});try{return await w()}catch(f){if(!I(f))throw f;let o=await e.getBalance({address:a,blockNumber:i.number}),c=await Promise.all(d.map(m=>e.estimateGas({account:a,to:m.to,data:m.data,value:BigInt(m.value),gas:y,blockNumber:i.number}).catch(()=>{}))),p=o;for(let[m,l]of b.entries()){let g=BigInt(l.value),x=U(D(i.gasLimit,c[m]),p,g,n,a,r),T=c[m];if(T!==void 0&&T>x)throw new u(E(a,r,o-p+g+T*n,o));l.gas=v(x),p-=g}let h=await w();if(Array.isArray(h)&&A(h[0])&&Array.isArray(h[0].calls))for(let[m,l]of h[0].calls.entries()){let g=b[m];if(g&&A(l)&&l.status==="0x0"&&typeof l.gasUsed=="string"&&/^0x[0-9a-f]+$/i.test(l.gasUsed)&&BigInt(l.gasUsed)>=BigInt(g.gas))throw new u(E(a,r,BigInt(g.value)+(BigInt(g.gas)+1n)*n,o))}return h}}function V(e,r,d,a){(!Array.isArray(e)||e.length!==1||!A(e[0])||!Array.isArray(e[0].calls)||e[0].calls.length!==r)&&P();let s=new Map;for(let[i,t]of e[0].calls.entries()){if(A(t)||P(),t.status==="0x0")throw new u(`Preview call ${i+1} on chain ${a} reverted. ${F(t.error)}`);(t.status!=="0x1"||t.error||!Array.isArray(t.logs))&&P();for(let n of t.logs){if((!A(n)||!Array.isArray(n.topics))&&P(),typeof n.topics[0]!="string"||n.topics[0].toLowerCase()!==te||n.topics.length===4)continue;(n.topics.length!==3||typeof n.address!="string"||!X(n.address,{strict:!1})||typeof n.data!="string"||!/^0x[0-9a-fA-F]{64}$/.test(n.data)||!n.topics.slice(1).every(c=>typeof c=="string"&&/^0x0{24}[0-9a-fA-F]{40}$/.test(c)))&&P();let y=n.topics[1].slice(-40).toLowerCase(),b=n.topics[2].slice(-40).toLowerCase(),w=d.slice(2).toLowerCase(),f=BigInt(n.data),o=(b===w?f:0n)-(y===w?f:0n);if(o!==0n){let c=ee(n.address.toLowerCase());s.set(c,(s.get(c)??0n)+o)}}}return s}async function W(e,r,d,a){let s=r===$?S.mainnet:r===M?S.testnet:void 0,i=s&&[{address:s.usdg,symbol:"USDG",decimals:6},{address:s.weth,symbol:"WETH",decimals:18},...r===$?[{address:R[4663].meridian.CollateralToken_USDe.address,symbol:"USDe",decimals:18}]:[]].find(n=>n.address.toLowerCase()===e);if(i)return{...i,address:G(e),chainId:r};let t;if(e===C){let n=d.chain?.nativeCurrency??(r===4663?{symbol:"ETH",decimals:18}:void 0);if(!n)throw new u(`Native token metadata is unavailable for chain ${r}.`);t={address:e,chainId:r,symbol:n.symbol,decimals:n.decimals}}else if(a)t=await a(e,r,d);else{let n=await _(d,r,e,"decimals");t={address:e,chainId:r,symbol:e,decimals:n}}if(!t||typeof t.address!="string"||t.address.toLowerCase()!==e||t.chainId!==r||typeof t.symbol!="string"||!t.symbol.trim()||!Number.isInteger(t.decimals)||t.decimals<0||t.decimals>255)throw new u(`Invalid token metadata for ${e} on chain ${r}.`);return{address:e===C?e:G(e),chainId:r,symbol:e===C?t.symbol:G(e),decimals:t.decimals}}function le(e){return async(r,d)=>{O(d);let a=r.map(B),s=a[0]?.chainId;if(s===void 0)return{txs:a,changes:[],summary:K};let i=a.find(t=>t.chainId!==s);if(i)throw new u(`Preview cannot combine chain ${s} with chain ${i.chainId}. Preview each chain separately.`);try{let t=e.clientFor(s),n;try{n=await L(t,s,a,d)}catch(o){if(!N(o,-32601,-32004)||!e.anvilFor)throw o;t=await e.anvilFor(s),n=await L(t,s,a,d)}let y=V(n,a.length,d,s),b=new Map,w=[];for(let[o,c]of y)if(c!==0n)try{b.set(o,await W(o,s,t,e.tokenFor))}catch(p){if(o===C||e.tokenFor||(await t.getCode({address:o})??"0x")!=="0x")throw p;w.push(o)}if(w.length){let o=w.flatMap(m=>["symbol","decimals"].map(l=>B({to:m,data:Q({abi:q,functionName:l}),value:"0",chainId:s,description:`Read simulated token ${l}.`}))),c=await L(t,s,[...a,...o],d);(!Array.isArray(c)||c.length!==1||!A(c[0])||!Array.isArray(c[0].calls)||c[0].calls.length!==a.length+o.length)&&P();let p=c[0].calls,h=V([{calls:p.slice(0,a.length)}],a.length,d,s);if(y.size!==h.size||[...y].some(([m,l])=>h.get(m)!==l))throw new u("Simulation changed while reading new-token metadata. Refresh the preview.");for(let[m,l]of w.entries()){let g=(T,j)=>{let k=p[a.length+m*2+j];if(!A(k)||k.status!=="0x1"||k.error||typeof k.returnData!="string"||!/^0x[0-9a-fA-F]+$/.test(k.returnData))throw new u(`Invalid simulated token metadata for ${l} on chain ${s}.`);return J({abi:q,functionName:T,data:k.returnData})},x={address:l,chainId:s,symbol:g("symbol",0),decimals:g("decimals",1)};b.set(l,await W(l,s,t,async()=>x))}}let f=[...y].filter(([,o])=>o!==0n).map(([o,c])=>({token:b.get(o),amount:c.toString()}));return{txs:a,changes:f,summary:K}}catch(t){throw new u(`Preview on chain ${s} failed: ${F(t)}`)}}}export{C as a,ee as b,le as c};
@@ -1 +1 @@
1
- import{b as B}from"./BK23XJXE.js";import{a as te,d as ne,e as oe}from"./OFI3Y55L.js";import{d as re}from"./NDW5DAFL.js";import{b as T}from"./HTXKERNS.js";import{a as f,b as H,c as ee}from"./PBQSJSZO.js";import{c as z}from"./YHRUAQQK.js";import{a as o,d as q}from"./UP7FBDMJ.js";import{a as x,i as $,w as U,x as y,y as Z,z as J}from"./FWD4L3CJ.js";import{a as r}from"./XSD5NL7J.js";import{decodeFunctionData as R,encodeFunctionData as L,parseAbi as se}from"viem";var we=60,G=50,Qe=200;var Ae="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",W="0x0000000000000000000000000000000000000000",P=$[4663].routes.kyberswap.address,Q=$[4663].routes.velora.address,X=U[4663].kyberswap.toLowerCase(),ie=U[4663].velora.toLowerCase(),ge="0x0000000000000000000000000000000000000000000000000000000000000000",_=se(["function swap((address callTarget, address approveTarget, bytes targetData, (address srcToken, address dstToken, address[] srcReceivers, uint256[] srcAmounts, address[] feeReceivers, uint256[] feeAmounts, address dstReceiver, uint256 amount, uint256 minReturnAmount, uint256 flags, bytes permit) desc, bytes clientData) execution) payable returns (uint256 returnAmount, uint256 gasUsed)"]),N=se(["function swapExactAmountIn(address executor, (address srcToken, address destToken, uint256 fromAmount, uint256 toAmount, uint256 quotedAmount, bytes32 metadata, address beneficiary) swapData, uint256 partnerAndFee, bytes permit, bytes executorData) payable returns (uint256 receivedAmount, uint256 submittedAmount, uint256 augustusFeeAmount)"]),D=class extends r{name="NoRouteError";constructor(t="No swap route is available for this token pair and amount."){super(t)}},F=class extends r{name="ExpiredQuoteError";constructor(t="Quote has expired. Request a fresh quote."){super(t)}},ve=1e3,h=new Map;function ue(e){for(let[t,n]of h)BigInt(e)>=o(n.expiresAt)&&h.delete(t)}function K(e){return{...e,...e.sourcePoolRoute!==void 0?{sourcePoolRoute:structuredClone(e.sourcePoolRoute)}:{},...e.txs?{txs:e.txs.map(t=>({...t}))}:{}}}function ae(e){let t=K(e);return t.txs&&(t.txs.forEach(Object.freeze),Object.freeze(t.txs)),Object.freeze(t)}var Se=["router","from","to","wallet","amountIn","amountOut","minAmountOut","expiresAt","chainId","spender","value","ponsCurveToken","ponsPoolToken","blockNumber","calldataMinAmountOut","expectedSpend","expectedRefund"];function M(e,t,n=!1){for(let s of Se)if(!(s==="expiresAt"&&n&&o(e.expiresAt)<=o(t.expiresAt))&&e[s]!==void 0&&String(e[s]).toLowerCase()!==String(t[s]).toLowerCase())throw new r(`Quote ${s} does not match the accepted quote.`)}function V(e=Date.now){let t=e();if(!Number.isFinite(t)||t<0)throw new r("Clock must return a non-negative timestamp.");return t>1e11?Math.floor(t/1e3):Math.floor(t)}function C(e){let t=e.toLowerCase();return t===Ae.toLowerCase()||t===W.toLowerCase()}function he(e,t=G){if(!Number.isInteger(t)||t<0||t>=1e4)throw new r("Slippage must be an integer from 0 to 9999 bps.");return q(e,String(1e4-t),"10000","floor")}var be=200;function _e(e){if(typeof e!="number"||!Number.isFinite(e)||!/^\d+(?:\.\d{1,2})?$/.test(String(e)))throw new r("Velora returned an unsupported venue fee. Request a fresh quote.");let[t,n=""]=String(e).split("."),s=Number(t)*100+Number(n.padEnd(2,"0"));return Y(s),s}function Y(e){if(!Number.isInteger(e)||e<0||e>be)throw new r("Velora returned an unsupported venue fee. Request a fresh quote.")}function de(e,t=1){return Y(t),o(e)*10000n/BigInt(1e4-t)+1n}function Oe(e,t){Y(t);let n=e>>96n,s=Z>>96n,a=0x3fffn,d=1n<<92n,l=e&(1n<<96n)-1n;if(n!==s&&!(n===0n&&t===0)||(l&a)!==BigInt(t)||(l&~(d|a))!==0n)throw new r("Velora partnerAndFee must match the accepted venue fee and recipient.")}function ce(e){if(e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak charges 0 swap fee; venue fees must never be counted as Oak income.");let t=e.provider??"venue";return`Venue fee: ${e.venueFee} base units (${e.venueFeeBps} bps) retained by ${t}; Oak swap fee: 0 (venue fee is never Oak income).`}function xe(e){f(e.from),f(e.to),f(e.wallet);let t=e.callTarget??y[x].kyberswap.address,n=e.approveTarget??W;f(t),f(n);let s=o(e.amountIn),a=o(e.minAmountOut);return L({abi:_,functionName:"swap",args:[{callTarget:t,approveTarget:n,targetData:e.targetData??"0x",desc:{srcToken:e.from,dstToken:e.to,srcReceivers:C(e.from)?[]:[t],srcAmounts:C(e.from)?[]:[s],feeReceivers:[],feeAmounts:[],dstReceiver:e.wallet,amount:s,minReturnAmount:a,flags:0n,permit:"0x"},clientData:e.clientData??"0x"}]})}function Ie(e){f(e.from),f(e.to),f(e.wallet);let t=e.executor??y[x].velora.address;return f(t),L({abi:N,functionName:"swapExactAmountIn",args:[t,{srcToken:e.from,destToken:e.to,fromAmount:o(e.amountIn),toAmount:o(e.minAmountOut),quotedAmount:o(e.amountOut),metadata:e.metadata??ge,beneficiary:e.wallet},e.partnerAndFee??0n,"0x",e.executorData??"0x"]})}function De(e){if(typeof e!="string"||!/^0x([0-9a-fA-F]{2})+$/.test(e)||e.length<10)throw new r("Swap calldata must contain a 4-byte function selector.");let t=e.slice(0,10).toLowerCase();if(t===X)return R({abi:_,data:e}).args[0].desc.minReturnAmount;if(t===ie)return R({abi:N,data:e}).args[1].toAmount;if(t==="0x3593564c")return ne(e).swap.amountOutMinimum;let n=R({abi:te,data:e});if(n.functionName==="buy"||n.functionName==="sell")return n.args[1];throw new r(`Unsupported swap router selector ${t}.`)}function le(e,t,n=!1){let s=o(t),a=De(e);if(a<=0n||s<=0n||a!==s&&!(n&&(a>s||e.slice(0,10).toLowerCase()===X&&a+1n===s)))throw new r(`Built swap calldata minimum output (${a}) does not match the accepted quote minimum (${s}).`);return a}function me(e,t){let{from:n,to:s,wallet:a,amountIn:d}=t;if(!n||!s||!a||d===void 0)throw new r("Accepted quote must include input, output, amount and wallet.");for(let u of[n,s,a,t.router,e.to])f(u);let l=(u,p,A)=>{if(u.toLowerCase()!==p.toLowerCase())throw new r(`Built swap ${A} does not match the accepted quote.`)};if(l(e.to,t.router,"router"),e.chainId!==(t.chainId??x))throw new r("Built swap chain does not match the accepted quote.");let g=C(n)?o(d):0n;if(o(e.value)!==g||t.value!==void 0&&o(t.value)!==g)throw new r("Built swap value does not match the accepted quote input.");let w=e.data.slice(0,10).toLowerCase(),i=t.router.toLowerCase(),c;if(i===P.toLowerCase()&&w===X){l(t.spender??t.router,P,"spender");let u=R({abi:_,data:e.data});if(L({abi:_,...u}).toLowerCase()!==e.data.toLowerCase())throw new r("KyberSwap calldata must be canonically decodable.");let{callTarget:p,approveTarget:A,desc:m}=u.args[0];l(p,y[x].kyberswap.address,"executor"),l(A,W,"executor approval target");let b=C(n);if(m.srcReceivers.length!==m.srcAmounts.length||(b?m.srcReceivers.length!==0:m.srcReceivers.length===0||m.srcAmounts.some(v=>v<=0n)||m.srcAmounts.reduce((v,S)=>v+S,0n)!==o(d)))throw new r("KyberSwap source transfers must send the exact input to the pinned executor or verified input pool.");for(let v of m.srcReceivers)if(v.toLowerCase()!==p.toLowerCase()&&!re(n,v,e.data))throw new r(`KyberSwap source transfers: receiver ${v} is not a verified input pool or the pinned executor.`);if(m.feeReceivers.length||m.feeAmounts.length||m.flags!==0n&&m.flags!==512n||m.permit!=="0x")throw new r("KyberSwap fee recipients, fee amounts, flags and permit must match the pinned zero-fee policy.");c={from:m.srcToken,to:m.dstToken,wallet:m.dstReceiver,amount:m.amount}}else if(i===Q.toLowerCase()&&w===ie){l(t.spender??t.router,Q,"spender");let u=R({abi:N,data:e.data});if(L({abi:N,...u}).toLowerCase()!==e.data.toLowerCase())throw new r("Velora calldata must be canonically decodable.");let[p,A,m,b]=u.args;if(!J.some(v=>v.toLowerCase()===p.toLowerCase()))throw new r("Built swap executor does not match the accepted quote.");if(b!=="0x")throw new r("Velora permit must match the pinned empty-permit policy.");if((t.calldataMinAmountOut!==void 0||m!==0n)&&Oe(m,t.venueFeeBps??0),t.calldataMinAmountOut!==void 0&&o(t.calldataMinAmountOut)!==de(t.minAmountOut,t.venueFeeBps??1))throw new r("Velora calldata minimum must cover the accepted net output, venue fee and router dust.");if(t.calldataMinAmountOut!==void 0&&(A.quotedAmount!==o(t.grossAmountOut??"0")||A.quotedAmount<o(t.calldataMinAmountOut)))throw new r("Velora quoted gross output must match the accepted quote and cover its calldata minimum.");if(m!==0n&&t.calldataMinAmountOut===void 0)throw new r("Velora venue fee requires a fee-adjusted calldata minimum.");c={from:A.srcToken,to:A.destToken,wallet:A.beneficiary,amount:A.fromAmount}}else if(t.provider==="pons"&&(t.ponsPoolToken||t.ponsCurveToken))c=oe(e,{...t,from:n,to:s,wallet:a});else throw new r("Built swap selector does not match the accepted router.");if(l(c.from,n,"input token"),l(c.to,s,"output token"),l(c.wallet,a,"recipient"),c.amount!==o(d))throw new r("Built swap input amount does not match the accepted quote.");le(e.data,t.calldataMinAmountOut??t.minAmountOut,i===P.toLowerCase())}function j(e,t={}){if(!e||typeof e.quoteId!="string"||!e.quoteId.trim())throw new r("Quote must include a non-empty quoteId.");if(f(e.router),e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak charges 0 swap fee; venue fees must never be counted as Oak income.");let n=o(e.amountOut),s=e.destAmountAfterFee??e.netAmountOut,a,d,l;if(s!==void 0){if(d=o(s),a=e.grossAmountOut!==void 0?o(e.grossAmountOut):n>=d?n:d,a<d)throw new r("Gross output cannot be less than net output.");l=e.venueFee!==void 0?o(e.venueFee):a-d}else if(e.grossAmountOut!==void 0){if(a=o(e.grossAmountOut),d=n,a<d)throw new r("Gross output cannot be less than net output.");l=e.venueFee!==void 0?o(e.venueFee):a-d}else e.venueFee!==void 0?(l=o(e.venueFee),d=n,a=d+l):(d=n,a=n,l=0n);if(d<=0n)throw new D("Quote output amount must be positive.");let g=t.slippageBps??e.slippageBps??G,w=e.minAmountOut!==void 0?o(e.minAmountOut):o(he(d.toString(),g));if(w<=0n||w>a)throw new r("Quote minAmountOut must be positive and not exceed gross output.");if((t.provider??e.provider)==="velora"&&e.calldataMinAmountOut!==void 0){if(o(e.calldataMinAmountOut)!==de(w.toString(),e.venueFeeBps??1)||o(e.calldataMinAmountOut)>a)throw new r("Velora calldata minimum must cover the accepted net output, venue fee and router dust.")}else if(e.calldataMinAmountOut!==void 0||e.ponsCurveToken!==void 0){if((t.provider??e.provider)!=="pons"||!e.ponsCurveToken)throw new r("Curve minimum requires a Pons curve quote.");f(e.ponsCurveToken);let O=o(t.amountIn??e.amountIn??"0"),I=o(e.expectedSpend??"0"),pe=o(e.expectedRefund??"0"),fe=o(e.calldataMinAmountOut??"0");if(O<=0n||I<=0n||I+pe!==O||fe*I/O!==w)throw new r("Pons actual minimum and refund do not match the encoded minimum.")}let i=V(t.now),c=BigInt(i+we),u=e.expiresAt!==void 0?o(e.expiresAt):c,p=(u>c?c:u).toString(),A=l.toString(),m=e.venueFeeBps??(a>0n&&l>0n?Number((l*10000n+a/2n)/a):0),b=t.provider??e.provider??(e.router.toLowerCase()===Q.toLowerCase()?"velora":"kyberswap"),v=b==="pons"&&e.feeDisclosure?e.feeDisclosure:ce({provider:b,venueFee:A,venueFeeBps:m,oakFee:"0"}),S={...e,quoteId:e.quoteId,amountOut:d.toString(),minAmountOut:w.toString(),router:e.router,expiresAt:p,provider:b,grossAmountOut:a.toString(),destAmountAfterFee:d.toString(),netAmountOut:d.toString(),venueFee:A,venueFeeBps:m,oakFee:"0",feeDisclosure:v,...t.from??e.from?{from:T(t.from??e.from)}:{},...t.to??e.to?{to:T(t.to??e.to)}:{},...t.amountIn??e.amountIn?{amountIn:t.amountIn??e.amountIn}:{},...t.wallet??e.wallet?{wallet:t.wallet??e.wallet}:{},slippageBps:g,chainId:t.chainId??e.chainId??x,spender:e.spender??e.router,...t.allowance??e.allowance?{allowance:t.allowance??e.allowance}:{}};if(BigInt(i)>=o(p))throw new F;if(t.cache===!1)return S;if(ue(i),BigInt(i)>=o(p))throw new F;let k=h.get(S.quoteId);if(k){M(S,k,!0);let O=ae({...k,expiresAt:S.expiresAt});return h.set(O.quoteId,O),K(O)}for(;h.size>=ve;)h.delete(h.keys().next().value);let E=ae(S);return h.set(E.quoteId,E),K(E)}async function Ne(e,t,n={}){e={...e},f(e.from),f(e.to),f(e.wallet),e.from=T(e.from),e.to=T(e.to);let s=o(e.amountIn);if(s<=0n)throw new r("Swap amountIn must be greater than zero.");let a=e.slippageBps??G;if(!Number.isInteger(a)||a<0||a>=1e4)throw new r("Slippage must be an integer from 0 to 9999 bps.");if(!Array.isArray(t)||t.length===0)throw new D;let d={from:e.from,to:e.to,amountIn:s.toString(),slippageBps:a},l=await Promise.allSettled(t.map(async i=>{let c=await(i.quotePrices??i.quote).call(i,{...d},e.wallet);return{quote:j(c,{provider:i.name,from:e.from,to:e.to,amountIn:s.toString(),wallet:e.wallet,slippageBps:a,chainId:e.chainId??x,allowance:e.allowance,now:e.now,cache:!1}),provider:i}})),g,w=[];for(let i of l)i.status==="rejected"&&(g??=z(i.reason)),i.status==="fulfilled"&&o(i.value.quote.expiresAt)>BigInt(V(e.now))&&w.push(i.value);if(w.length===0){let i=l.some(c=>c.status==="rejected"&&c.reason instanceof Error&&c.reason.message===B)&&l.every(c=>c.status==="rejected"&&(c.reason instanceof D||c.reason instanceof Error&&c.reason.message===B));throw g??new D(i?B:void 0)}w.sort((i,c)=>{let p=o(c.quote.amountOut)-o(i.quote.amountOut)||o(c.quote.minAmountOut)-o(i.quote.minAmountOut);return p>0n?1:p<0n?-1:0});for(let{quote:i,provider:c}of w)try{if(BigInt(V(e.now))>=o(i.expiresAt))continue;if(n.deferBuild||!c.prepareQuote)return j(i,{now:e.now});let u=await c.prepareQuote(i.quoteId,e.wallet);if(u.quoteId!==i.quoteId)throw new r("Prepared quote ID does not match the selected route.");if(M(u,i,!0),!u.data)throw new r("Selected route did not return swap calldata.");let p={...i,expiresAt:u.expiresAt,data:u.data,value:u.value,allowance:u.allowance??i.allowance};return me(H({to:p.router,data:u.data,value:u.value??"0",chainId:p.chainId??x,description:"Selected swap route"}),p),j(p,{now:e.now})}catch(u){g??=z(u);continue}throw g??new D}function Me(e,t={}){if(!e||typeof e.quoteId!="string"||!e.quoteId.trim())throw new r("Provide a valid quote to build a swap.");f(e.router);let n=h.get(e.quoteId),s=V(t.now);if(ue(s),!n||BigInt(s)>=o(n.expiresAt))throw h.delete(e.quoteId),new F;if(e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak charges 0 swap fee; venue fees must never be counted as Oak income.");M(e,n),M({...n,...t},n);let a=n.from,d=n.to,l=n.amountIn,g=n.wallet;if(!a||!d||!g||l===void 0)throw new r("Accepted quote must include input, output, amount and wallet.");let w=n.chainId??x,i=n.spender??n.router,c=t.allowance??e.allowance??n?.allowance??"0";f(a),f(d),f(g),f(i);let u=o(l);if(u<=0n)throw new r("Swap amountIn must be greater than zero.");let p=o(n.minAmountOut);if(p<=0n)throw new r("Swap minAmountOut must be greater than zero.");let A=e.router.toLowerCase()===Q.toLowerCase(),m=t.data??e.data??n?.data??(A?Ie({from:a,to:d,amountIn:u.toString(),amountOut:n.amountOut,minAmountOut:p.toString(),wallet:g}):xe({from:a,to:d,amountIn:u.toString(),minAmountOut:p.toString(),wallet:g}));le(m,n.calldataMinAmountOut??p.toString(),n.router.toLowerCase()===P.toLowerCase());let b=n.venueFee??"0",v=n.venueFeeBps??0,S=n.provider??(A?"velora":"kyberswap"),k=n.feeDisclosure??ce({provider:S,venueFee:b,venueFeeBps:v,oakFee:"0"}),E=C(a),O=t.value??e.value??n?.value??(E?u.toString():"0"),I=H({to:e.router,data:m,value:O,chainId:w,description:`Swap ${u} base units of ${a} for at least ${p} base units of ${d} via ${S} (${e.router}). ${k}`});return me(I,n),E||o(c)>=u?[I]:[ee(a,i,u.toString(),w),I]}export{we as a,G as b,Qe as c,Ae as d,W as e,_ as f,D as g,F as h,ve as i,K as j,ae as k,M as l,V as m,C as n,he as o,be as p,_e as q,de as r,Oe as s,ce as t,xe as u,Ie as v,De as w,le as x,me as y,j as z,Ne as A,Me as B};
1
+ import{b as B}from"./P5PYFK7L.js";import{a as te,d as ne,e as oe}from"./ZQAFFWDK.js";import{d as re}from"./WP6RHXGN.js";import{b as T}from"./3MLUCYCB.js";import{a as f,b as H,c as ee}from"./43LI5NKJ.js";import{c as z}from"./OTXSKFUD.js";import{b as o,e as q}from"./IX3GZMTM.js";import{a as x,i as $,w as U,x as y,y as Z,z as J}from"./FWD4L3CJ.js";import{a as r}from"./XSD5NL7J.js";import{decodeFunctionData as R,encodeFunctionData as L,parseAbi as se}from"viem";var we=60,G=50,Qe=200;var Ae="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",W="0x0000000000000000000000000000000000000000",P=$[4663].routes.kyberswap.address,Q=$[4663].routes.velora.address,X=U[4663].kyberswap.toLowerCase(),ie=U[4663].velora.toLowerCase(),ge="0x0000000000000000000000000000000000000000000000000000000000000000",_=se(["function swap((address callTarget, address approveTarget, bytes targetData, (address srcToken, address dstToken, address[] srcReceivers, uint256[] srcAmounts, address[] feeReceivers, uint256[] feeAmounts, address dstReceiver, uint256 amount, uint256 minReturnAmount, uint256 flags, bytes permit) desc, bytes clientData) execution) payable returns (uint256 returnAmount, uint256 gasUsed)"]),N=se(["function swapExactAmountIn(address executor, (address srcToken, address destToken, uint256 fromAmount, uint256 toAmount, uint256 quotedAmount, bytes32 metadata, address beneficiary) swapData, uint256 partnerAndFee, bytes permit, bytes executorData) payable returns (uint256 receivedAmount, uint256 submittedAmount, uint256 augustusFeeAmount)"]),D=class extends r{name="NoRouteError";constructor(t="No swap route is available for this token pair and amount."){super(t)}},F=class extends r{name="ExpiredQuoteError";constructor(t="Quote has expired. Request a fresh quote."){super(t)}},ve=1e3,h=new Map;function ue(e){for(let[t,n]of h)BigInt(e)>=o(n.expiresAt)&&h.delete(t)}function K(e){return{...e,...e.sourcePoolRoute!==void 0?{sourcePoolRoute:structuredClone(e.sourcePoolRoute)}:{},...e.txs?{txs:e.txs.map(t=>({...t}))}:{}}}function ae(e){let t=K(e);return t.txs&&(t.txs.forEach(Object.freeze),Object.freeze(t.txs)),Object.freeze(t)}var Se=["router","from","to","wallet","amountIn","amountOut","minAmountOut","expiresAt","chainId","spender","value","ponsCurveToken","ponsPoolToken","blockNumber","calldataMinAmountOut","expectedSpend","expectedRefund"];function M(e,t,n=!1){for(let s of Se)if(!(s==="expiresAt"&&n&&o(e.expiresAt)<=o(t.expiresAt))&&e[s]!==void 0&&String(e[s]).toLowerCase()!==String(t[s]).toLowerCase())throw new r(`Quote ${s} does not match the accepted quote.`)}function V(e=Date.now){let t=e();if(!Number.isFinite(t)||t<0)throw new r("Clock must return a non-negative timestamp.");return t>1e11?Math.floor(t/1e3):Math.floor(t)}function C(e){let t=e.toLowerCase();return t===Ae.toLowerCase()||t===W.toLowerCase()}function he(e,t=G){if(!Number.isInteger(t)||t<0||t>=1e4)throw new r("Slippage must be an integer from 0 to 9999 bps.");return q(e,String(1e4-t),"10000","floor")}var be=200;function _e(e){if(typeof e!="number"||!Number.isFinite(e)||!/^\d+(?:\.\d{1,2})?$/.test(String(e)))throw new r("Velora returned an unsupported venue fee. Request a fresh quote.");let[t,n=""]=String(e).split("."),s=Number(t)*100+Number(n.padEnd(2,"0"));return Y(s),s}function Y(e){if(!Number.isInteger(e)||e<0||e>be)throw new r("Velora returned an unsupported venue fee. Request a fresh quote.")}function de(e,t=1){return Y(t),o(e)*10000n/BigInt(1e4-t)+1n}function Oe(e,t){Y(t);let n=e>>96n,s=Z>>96n,a=0x3fffn,d=1n<<92n,l=e&(1n<<96n)-1n;if(n!==s&&!(n===0n&&t===0)||(l&a)!==BigInt(t)||(l&~(d|a))!==0n)throw new r("Velora partnerAndFee must match the accepted venue fee and recipient.")}function ce(e){if(e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak charges 0 swap fee; venue fees must never be counted as Oak income.");let t=e.provider??"venue";return`Venue fee: ${e.venueFee} base units (${e.venueFeeBps} bps) retained by ${t}; Oak swap fee: 0 (venue fee is never Oak income).`}function xe(e){f(e.from),f(e.to),f(e.wallet);let t=e.callTarget??y[x].kyberswap.address,n=e.approveTarget??W;f(t),f(n);let s=o(e.amountIn),a=o(e.minAmountOut);return L({abi:_,functionName:"swap",args:[{callTarget:t,approveTarget:n,targetData:e.targetData??"0x",desc:{srcToken:e.from,dstToken:e.to,srcReceivers:C(e.from)?[]:[t],srcAmounts:C(e.from)?[]:[s],feeReceivers:[],feeAmounts:[],dstReceiver:e.wallet,amount:s,minReturnAmount:a,flags:0n,permit:"0x"},clientData:e.clientData??"0x"}]})}function Ie(e){f(e.from),f(e.to),f(e.wallet);let t=e.executor??y[x].velora.address;return f(t),L({abi:N,functionName:"swapExactAmountIn",args:[t,{srcToken:e.from,destToken:e.to,fromAmount:o(e.amountIn),toAmount:o(e.minAmountOut),quotedAmount:o(e.amountOut),metadata:e.metadata??ge,beneficiary:e.wallet},e.partnerAndFee??0n,"0x",e.executorData??"0x"]})}function De(e){if(typeof e!="string"||!/^0x([0-9a-fA-F]{2})+$/.test(e)||e.length<10)throw new r("Swap calldata must contain a 4-byte function selector.");let t=e.slice(0,10).toLowerCase();if(t===X)return R({abi:_,data:e}).args[0].desc.minReturnAmount;if(t===ie)return R({abi:N,data:e}).args[1].toAmount;if(t==="0x3593564c")return ne(e).swap.amountOutMinimum;let n=R({abi:te,data:e});if(n.functionName==="buy"||n.functionName==="sell")return n.args[1];throw new r(`Unsupported swap router selector ${t}.`)}function le(e,t,n=!1){let s=o(t),a=De(e);if(a<=0n||s<=0n||a!==s&&!(n&&(a>s||e.slice(0,10).toLowerCase()===X&&a+1n===s)))throw new r(`Built swap calldata minimum output (${a}) does not match the accepted quote minimum (${s}).`);return a}function me(e,t){let{from:n,to:s,wallet:a,amountIn:d}=t;if(!n||!s||!a||d===void 0)throw new r("Accepted quote must include input, output, amount and wallet.");for(let u of[n,s,a,t.router,e.to])f(u);let l=(u,p,A)=>{if(u.toLowerCase()!==p.toLowerCase())throw new r(`Built swap ${A} does not match the accepted quote.`)};if(l(e.to,t.router,"router"),e.chainId!==(t.chainId??x))throw new r("Built swap chain does not match the accepted quote.");let g=C(n)?o(d):0n;if(o(e.value)!==g||t.value!==void 0&&o(t.value)!==g)throw new r("Built swap value does not match the accepted quote input.");let w=e.data.slice(0,10).toLowerCase(),i=t.router.toLowerCase(),c;if(i===P.toLowerCase()&&w===X){l(t.spender??t.router,P,"spender");let u=R({abi:_,data:e.data});if(L({abi:_,...u}).toLowerCase()!==e.data.toLowerCase())throw new r("KyberSwap calldata must be canonically decodable.");let{callTarget:p,approveTarget:A,desc:m}=u.args[0];l(p,y[x].kyberswap.address,"executor"),l(A,W,"executor approval target");let b=C(n);if(m.srcReceivers.length!==m.srcAmounts.length||(b?m.srcReceivers.length!==0:m.srcReceivers.length===0||m.srcAmounts.some(v=>v<=0n)||m.srcAmounts.reduce((v,S)=>v+S,0n)!==o(d)))throw new r("KyberSwap source transfers must send the exact input to the pinned executor or verified input pool.");for(let v of m.srcReceivers)if(v.toLowerCase()!==p.toLowerCase()&&!re(n,v,e.data))throw new r(`KyberSwap source transfers: receiver ${v} is not a verified input pool or the pinned executor.`);if(m.feeReceivers.length||m.feeAmounts.length||m.flags!==0n&&m.flags!==512n||m.permit!=="0x")throw new r("KyberSwap fee recipients, fee amounts, flags and permit must match the pinned zero-fee policy.");c={from:m.srcToken,to:m.dstToken,wallet:m.dstReceiver,amount:m.amount}}else if(i===Q.toLowerCase()&&w===ie){l(t.spender??t.router,Q,"spender");let u=R({abi:N,data:e.data});if(L({abi:N,...u}).toLowerCase()!==e.data.toLowerCase())throw new r("Velora calldata must be canonically decodable.");let[p,A,m,b]=u.args;if(!J.some(v=>v.toLowerCase()===p.toLowerCase()))throw new r("Built swap executor does not match the accepted quote.");if(b!=="0x")throw new r("Velora permit must match the pinned empty-permit policy.");if((t.calldataMinAmountOut!==void 0||m!==0n)&&Oe(m,t.venueFeeBps??0),t.calldataMinAmountOut!==void 0&&o(t.calldataMinAmountOut)!==de(t.minAmountOut,t.venueFeeBps??1))throw new r("Velora calldata minimum must cover the accepted net output, venue fee and router dust.");if(t.calldataMinAmountOut!==void 0&&(A.quotedAmount!==o(t.grossAmountOut??"0")||A.quotedAmount<o(t.calldataMinAmountOut)))throw new r("Velora quoted gross output must match the accepted quote and cover its calldata minimum.");if(m!==0n&&t.calldataMinAmountOut===void 0)throw new r("Velora venue fee requires a fee-adjusted calldata minimum.");c={from:A.srcToken,to:A.destToken,wallet:A.beneficiary,amount:A.fromAmount}}else if(t.provider==="pons"&&(t.ponsPoolToken||t.ponsCurveToken))c=oe(e,{...t,from:n,to:s,wallet:a});else throw new r("Built swap selector does not match the accepted router.");if(l(c.from,n,"input token"),l(c.to,s,"output token"),l(c.wallet,a,"recipient"),c.amount!==o(d))throw new r("Built swap input amount does not match the accepted quote.");le(e.data,t.calldataMinAmountOut??t.minAmountOut,i===P.toLowerCase())}function j(e,t={}){if(!e||typeof e.quoteId!="string"||!e.quoteId.trim())throw new r("Quote must include a non-empty quoteId.");if(f(e.router),e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak charges 0 swap fee; venue fees must never be counted as Oak income.");let n=o(e.amountOut),s=e.destAmountAfterFee??e.netAmountOut,a,d,l;if(s!==void 0){if(d=o(s),a=e.grossAmountOut!==void 0?o(e.grossAmountOut):n>=d?n:d,a<d)throw new r("Gross output cannot be less than net output.");l=e.venueFee!==void 0?o(e.venueFee):a-d}else if(e.grossAmountOut!==void 0){if(a=o(e.grossAmountOut),d=n,a<d)throw new r("Gross output cannot be less than net output.");l=e.venueFee!==void 0?o(e.venueFee):a-d}else e.venueFee!==void 0?(l=o(e.venueFee),d=n,a=d+l):(d=n,a=n,l=0n);if(d<=0n)throw new D("Quote output amount must be positive.");let g=t.slippageBps??e.slippageBps??G,w=e.minAmountOut!==void 0?o(e.minAmountOut):o(he(d.toString(),g));if(w<=0n||w>a)throw new r("Quote minAmountOut must be positive and not exceed gross output.");if((t.provider??e.provider)==="velora"&&e.calldataMinAmountOut!==void 0){if(o(e.calldataMinAmountOut)!==de(w.toString(),e.venueFeeBps??1)||o(e.calldataMinAmountOut)>a)throw new r("Velora calldata minimum must cover the accepted net output, venue fee and router dust.")}else if(e.calldataMinAmountOut!==void 0||e.ponsCurveToken!==void 0){if((t.provider??e.provider)!=="pons"||!e.ponsCurveToken)throw new r("Curve minimum requires a Pons curve quote.");f(e.ponsCurveToken);let O=o(t.amountIn??e.amountIn??"0"),I=o(e.expectedSpend??"0"),pe=o(e.expectedRefund??"0"),fe=o(e.calldataMinAmountOut??"0");if(O<=0n||I<=0n||I+pe!==O||fe*I/O!==w)throw new r("Pons actual minimum and refund do not match the encoded minimum.")}let i=V(t.now),c=BigInt(i+we),u=e.expiresAt!==void 0?o(e.expiresAt):c,p=(u>c?c:u).toString(),A=l.toString(),m=e.venueFeeBps??(a>0n&&l>0n?Number((l*10000n+a/2n)/a):0),b=t.provider??e.provider??(e.router.toLowerCase()===Q.toLowerCase()?"velora":"kyberswap"),v=b==="pons"&&e.feeDisclosure?e.feeDisclosure:ce({provider:b,venueFee:A,venueFeeBps:m,oakFee:"0"}),S={...e,quoteId:e.quoteId,amountOut:d.toString(),minAmountOut:w.toString(),router:e.router,expiresAt:p,provider:b,grossAmountOut:a.toString(),destAmountAfterFee:d.toString(),netAmountOut:d.toString(),venueFee:A,venueFeeBps:m,oakFee:"0",feeDisclosure:v,...t.from??e.from?{from:T(t.from??e.from)}:{},...t.to??e.to?{to:T(t.to??e.to)}:{},...t.amountIn??e.amountIn?{amountIn:t.amountIn??e.amountIn}:{},...t.wallet??e.wallet?{wallet:t.wallet??e.wallet}:{},slippageBps:g,chainId:t.chainId??e.chainId??x,spender:e.spender??e.router,...t.allowance??e.allowance?{allowance:t.allowance??e.allowance}:{}};if(BigInt(i)>=o(p))throw new F;if(t.cache===!1)return S;if(ue(i),BigInt(i)>=o(p))throw new F;let k=h.get(S.quoteId);if(k){M(S,k,!0);let O=ae({...k,expiresAt:S.expiresAt});return h.set(O.quoteId,O),K(O)}for(;h.size>=ve;)h.delete(h.keys().next().value);let E=ae(S);return h.set(E.quoteId,E),K(E)}async function Ne(e,t,n={}){e={...e},f(e.from),f(e.to),f(e.wallet),e.from=T(e.from),e.to=T(e.to);let s=o(e.amountIn);if(s<=0n)throw new r("Swap amountIn must be greater than zero.");let a=e.slippageBps??G;if(!Number.isInteger(a)||a<0||a>=1e4)throw new r("Slippage must be an integer from 0 to 9999 bps.");if(!Array.isArray(t)||t.length===0)throw new D;let d={from:e.from,to:e.to,amountIn:s.toString(),slippageBps:a},l=await Promise.allSettled(t.map(async i=>{let c=await(i.quotePrices??i.quote).call(i,{...d},e.wallet);return{quote:j(c,{provider:i.name,from:e.from,to:e.to,amountIn:s.toString(),wallet:e.wallet,slippageBps:a,chainId:e.chainId??x,allowance:e.allowance,now:e.now,cache:!1}),provider:i}})),g,w=[];for(let i of l)i.status==="rejected"&&(g??=z(i.reason)),i.status==="fulfilled"&&o(i.value.quote.expiresAt)>BigInt(V(e.now))&&w.push(i.value);if(w.length===0){let i=l.some(c=>c.status==="rejected"&&c.reason instanceof Error&&c.reason.message===B)&&l.every(c=>c.status==="rejected"&&(c.reason instanceof D||c.reason instanceof Error&&c.reason.message===B));throw g??new D(i?B:void 0)}w.sort((i,c)=>{let p=o(c.quote.amountOut)-o(i.quote.amountOut)||o(c.quote.minAmountOut)-o(i.quote.minAmountOut);return p>0n?1:p<0n?-1:0});for(let{quote:i,provider:c}of w)try{if(BigInt(V(e.now))>=o(i.expiresAt))continue;if(n.deferBuild||!c.prepareQuote)return j(i,{now:e.now});let u=await c.prepareQuote(i.quoteId,e.wallet);if(u.quoteId!==i.quoteId)throw new r("Prepared quote ID does not match the selected route.");if(M(u,i,!0),!u.data)throw new r("Selected route did not return swap calldata.");let p={...i,expiresAt:u.expiresAt,data:u.data,value:u.value,allowance:u.allowance??i.allowance};return me(H({to:p.router,data:u.data,value:u.value??"0",chainId:p.chainId??x,description:"Selected swap route"}),p),j(p,{now:e.now})}catch(u){g??=z(u);continue}throw g??new D}function Me(e,t={}){if(!e||typeof e.quoteId!="string"||!e.quoteId.trim())throw new r("Provide a valid quote to build a swap.");f(e.router);let n=h.get(e.quoteId),s=V(t.now);if(ue(s),!n||BigInt(s)>=o(n.expiresAt))throw h.delete(e.quoteId),new F;if(e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak charges 0 swap fee; venue fees must never be counted as Oak income.");M(e,n),M({...n,...t},n);let a=n.from,d=n.to,l=n.amountIn,g=n.wallet;if(!a||!d||!g||l===void 0)throw new r("Accepted quote must include input, output, amount and wallet.");let w=n.chainId??x,i=n.spender??n.router,c=t.allowance??e.allowance??n?.allowance??"0";f(a),f(d),f(g),f(i);let u=o(l);if(u<=0n)throw new r("Swap amountIn must be greater than zero.");let p=o(n.minAmountOut);if(p<=0n)throw new r("Swap minAmountOut must be greater than zero.");let A=e.router.toLowerCase()===Q.toLowerCase(),m=t.data??e.data??n?.data??(A?Ie({from:a,to:d,amountIn:u.toString(),amountOut:n.amountOut,minAmountOut:p.toString(),wallet:g}):xe({from:a,to:d,amountIn:u.toString(),minAmountOut:p.toString(),wallet:g}));le(m,n.calldataMinAmountOut??p.toString(),n.router.toLowerCase()===P.toLowerCase());let b=n.venueFee??"0",v=n.venueFeeBps??0,S=n.provider??(A?"velora":"kyberswap"),k=n.feeDisclosure??ce({provider:S,venueFee:b,venueFeeBps:v,oakFee:"0"}),E=C(a),O=t.value??e.value??n?.value??(E?u.toString():"0"),I=H({to:e.router,data:m,value:O,chainId:w,description:`Swap ${u} base units of ${a} for at least ${p} base units of ${d} via ${S} (${e.router}). ${k}`});return me(I,n),E||o(c)>=u?[I]:[ee(a,i,u.toString(),w),I]}export{we as a,G as b,Qe as c,Ae as d,W as e,_ as f,D as g,F as h,ve as i,K as j,ae as k,M as l,V as m,C as n,he as o,be as p,_e as q,de as r,Oe as s,ce as t,xe as u,Ie as v,De as w,le as x,me as y,j as z,Ne as A,Me as B};
@@ -1 +1 @@
1
- import{b as P,e as _,f as m}from"./KBXU7U6Q.js";import{c as p,f as r,g as f,h as N,i as S,k as D,p as x,q}from"./QVYCJ6WV.js";import{b as I}from"./5ZLOCQA4.js";import{h as A}from"./5KUWLUPM.js";import{randomInt as U,randomUUID as H}from"node:crypto";import{isDeepStrictEqual as b}from"node:util";import{recoverTypedDataAddress as z}from"viem";function j(t){Object.keys(t).some(u=>!["subaccount","subaccountId","instructions","failureBehavior","continuation","signature"].includes(u))&&r("Use the Meridian batch schema."),D(t.subaccountId),(!Array.isArray(t.instructions)||t.instructions.length<1||t.instructions.length>20)&&r("A Meridian batch needs 1\u201320 instructions."),["ContinueOnFailure","StopOnFailure"].includes(String(t.failureBehavior))||r("Choose ContinueOnFailure or StopOnFailure explicitly; a batch does not roll back earlier results.");let c=new Set;return t.instructions.map(u=>{let e=f(u),a=e.kind;a!=="NEW"&&a!=="CANCEL"&&r("Each Meridian batch instruction needs kind NEW or CANCEL.");let o=a==="NEW"?P.order:["orderId","clientOrderId"];Object.keys(e).some(i=>i!=="kind"&&!o.includes(i))&&r("Unsupported Meridian batch instruction fields."),a==="CANCEL"&&e.orderId===void 0==(e.clientOrderId===void 0)&&r("Each batch cancellation needs exactly one orderId or clientOrderId.");for(let i of a==="NEW"?["clientOrderId"]:["orderId","clientOrderId"])if(e[i]!==void 0){let g=`${a}:${i}:${e[i]}`;c.has(g)&&r("Duplicate Meridian batch order identifiers."),c.add(g)}let d={subaccountId:t.subaccountId,...t.subaccount===void 0?{}:{subaccount:t.subaccount}};return a==="CANCEL"?{action:"cancel",kind:a,args:{...d,...e.orderId===void 0?{clientOrderIds:[e.clientOrderId]}:{orderIds:[e.orderId]}}}:{action:"order",kind:a,args:{...d,...Object.fromEntries(Object.entries(e).filter(([i])=>i!=="kind"))}}})}function M(t,c,u,e,a){let o=j(t);(!Number.isInteger(c)||c<0||c>=o.length)&&r("Invalid Meridian batch signing index.");let d=o[c],i=_(d.action,d.args,u,e,a);return d.kind==="CANCEL"&&(i.data={sender:u,subaccount:i.data.subaccount,nonce:e,...i.data.orderIds?{orderId:i.data.orderIds[0]}:{clientOrderId:i.data.clientOrderIds[0]}}),i}function ee(t,c,u,e,a,o){(e.stage!=="perps_batch_sign"||e.chainId!==p||!A(e.wallet,c)||typeof e.requestId!="string"||!e.requestId||typeof e.index!="number"||typeof e.signedAt!="number"||typeof e.expiresAt!="number"||e.expiresAt<=o||e.expiresAt>o+120||e.signedAt<o-120||e.signedAt>o+10)&&r("Meridian batch signing round is invalid or expired."),(a?a.requestId!==e.requestId||Number(a.index)+1!==e.index||a.expiresAt!==e.expiresAt:e.index!==0)&&r("Unexpected Meridian batch signing order.");let d=M(t,e.index,c,N(e.nonce,"the nonce",!1,64),e.signedAt),i=m(d,f(e.signatureTypes));(!b(e.request,i)||!b(e.data,d.data)||!b(u,[{kind:"typedData",request:i}]))&&r("Meridian batch signing fields differ from the local instruction.")}function te(t,c){let u=new Map;return{name:"meridian_perps_batch",inputSchema:{type:"object",additionalProperties:!1,required:["subaccountId","instructions","failureBehavior"],description:"Sign 1\u201320 NEW/CANCEL instructions locally and submit one batch. failureBehavior is explicit. Cancel/replace is not atomic. Reconcile each result and check fills after submission.",properties:{subaccountId:{type:"string",format:"uuid"},subaccount:{type:"string"},failureBehavior:{type:"string",enum:["ContinueOnFailure","StopOnFailure"]},instructions:{type:"array",minItems:1,maxItems:20,items:{type:"object",properties:{kind:{type:"string",enum:["NEW","CANCEL"]},quantity:I("D9 quantity base units."),price:I("D9 price base units."),stopPrice:I("D9 stop price base units."),expiresAt:I("Unix seconds.")},additionalProperties:!0}},continuation:{type:"object"},signature:{type:"string"}}},execute:async(e,a)=>{let o=S(a),d=j(e);d.forEach((s,n)=>M(e,n,o,"0",Math.floor(Date.now()/1e3)));let i=s=>({steps:[{kind:"typedData",request:structuredClone(s.round.request)}],continuation:structuredClone(s.round),summary:`Review and confirm Meridian batch instruction ${Number(s.round.index)+1}/${d.length}. D9 signed quantities and prices have 9 decimals. Every instruction is separately signed; no API submission occurs until all signatures are collected. ${e.failureBehavior}; earlier successful results are never rolled back.`});if(e.continuation!==void 0){let s=f(e.continuation),n=u.get(String(s.requestId));(!n||!A(s.wallet,o)||!b(n.round,s)||!b(n.args,Object.fromEntries(Object.entries(e).filter(([l])=>!["continuation","signature"].includes(l)))))&&r("Meridian batch continuation is lost, expired or changed. Check orders before restarting."),u.delete(String(s.requestId));let F=s.request;(typeof s.expiresAt!="number"||s.expiresAt<=Math.floor(Date.now()/1e3))&&(clearTimeout(n.timer),r("Meridian batch expired. Check orders before restarting."));try{(typeof e.signature!="string"||!/^0x[0-9a-fA-F]{130}$/.test(e.signature)||!A(await z({...F,signature:e.signature}),o))&&r("The local Meridian batch signature does not match this wallet.");let l=Number(s.index),L=n.values[l];if(n.signed.push({type:d[l].kind,data:L.data,signature:e.signature}),l+1<d.length){let h=n.values[l+1],$=f(s.signatureTypes);return n.round={...s,index:l+1,nonce:h.message.nonce,data:h.data,request:m(h,$),review:n.reviews[l+1]},u.set(String(s.requestId),n),i(n)}clearTimeout(n.timer),(t.network==="testnet"||await t.clientFor(p).getChainId()!==p)&&r("Meridian batch requires chain 4663.");let W=await q(t);return n.values.some(h=>!b(m(h,W).types,m(h,f(s.signatureTypes)).types))&&r("Meridian batch signing types changed; check orders before restarting."),{result:await x(t,"/v1/order/batch",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({failureBehavior:e.failureBehavior,instructions:n.signed})}),chainId:p,summary:"Meridian batch API responded. Inspect every instruction result and subsequent order/fill state. HTTP success is not atomic success or proof of execution."}}catch(l){throw clearTimeout(n.timer),l}}e.signature!==void 0&&r("Meridian batch signatures require an active local signing round."),u.size>=1e3&&r("Too many pending Meridian batches. Try again shortly."),(t.network==="testnet"||await t.clientFor(p).getChainId()!==p)&&r("Meridian batch requires chain 4663.");let g=await q(t),y=f(await x(t,"/v1/time")).time;(typeof y!="number"||!Number.isSafeInteger(y)||Math.abs(y-Date.now())>3e4)&&r("Synchronize the clock before signing a Meridian batch.");let C=Math.floor(y/1e3),B=BigInt(y)*1000000n+BigInt(U(999980)),w=d.map((s,n)=>M(e,n,o,(B+BigInt(n)).toString(),C)),T=[];for(let[s,n]of d.entries())T.push(await c(n.action,n.args,o,w[s].data));let k=H(),v=w[0],R={stage:"perps_batch_sign",chainId:p,wallet:o,requestId:k,index:0,signedAt:C,expiresAt:C+90,nonce:v.message.nonce,data:v.data,request:m(v,g),signatureTypes:{TradeOrder:g.TradeOrder,CancelOrder:g.CancelOrder},review:T[0]},O=setTimeout(()=>u.delete(k),9e4);O.unref?.();let E={args:structuredClone(e),round:R,values:w,reviews:T,signed:[],timer:O};return u.set(k,E),i(E)}}}export{ee as a,te as b};
1
+ import{b as P,e as _,f as m}from"./O7HCEPQY.js";import{c as p,f as r,g as f,h as N,i as S,k as D,p as x,q}from"./46KWRAYK.js";import{b as I}from"./66F5ZH34.js";import{h as A}from"./NWNYJ26T.js";import{randomInt as U,randomUUID as H}from"node:crypto";import{isDeepStrictEqual as b}from"node:util";import{recoverTypedDataAddress as z}from"viem";function j(t){Object.keys(t).some(u=>!["subaccount","subaccountId","instructions","failureBehavior","continuation","signature"].includes(u))&&r("Use the Meridian batch schema."),D(t.subaccountId),(!Array.isArray(t.instructions)||t.instructions.length<1||t.instructions.length>20)&&r("A Meridian batch needs 1\u201320 instructions."),["ContinueOnFailure","StopOnFailure"].includes(String(t.failureBehavior))||r("Choose ContinueOnFailure or StopOnFailure explicitly; a batch does not roll back earlier results.");let c=new Set;return t.instructions.map(u=>{let e=f(u),a=e.kind;a!=="NEW"&&a!=="CANCEL"&&r("Each Meridian batch instruction needs kind NEW or CANCEL.");let o=a==="NEW"?P.order:["orderId","clientOrderId"];Object.keys(e).some(i=>i!=="kind"&&!o.includes(i))&&r("Unsupported Meridian batch instruction fields."),a==="CANCEL"&&e.orderId===void 0==(e.clientOrderId===void 0)&&r("Each batch cancellation needs exactly one orderId or clientOrderId.");for(let i of a==="NEW"?["clientOrderId"]:["orderId","clientOrderId"])if(e[i]!==void 0){let g=`${a}:${i}:${e[i]}`;c.has(g)&&r("Duplicate Meridian batch order identifiers."),c.add(g)}let d={subaccountId:t.subaccountId,...t.subaccount===void 0?{}:{subaccount:t.subaccount}};return a==="CANCEL"?{action:"cancel",kind:a,args:{...d,...e.orderId===void 0?{clientOrderIds:[e.clientOrderId]}:{orderIds:[e.orderId]}}}:{action:"order",kind:a,args:{...d,...Object.fromEntries(Object.entries(e).filter(([i])=>i!=="kind"))}}})}function M(t,c,u,e,a){let o=j(t);(!Number.isInteger(c)||c<0||c>=o.length)&&r("Invalid Meridian batch signing index.");let d=o[c],i=_(d.action,d.args,u,e,a);return d.kind==="CANCEL"&&(i.data={sender:u,subaccount:i.data.subaccount,nonce:e,...i.data.orderIds?{orderId:i.data.orderIds[0]}:{clientOrderId:i.data.clientOrderIds[0]}}),i}function ee(t,c,u,e,a,o){(e.stage!=="perps_batch_sign"||e.chainId!==p||!A(e.wallet,c)||typeof e.requestId!="string"||!e.requestId||typeof e.index!="number"||typeof e.signedAt!="number"||typeof e.expiresAt!="number"||e.expiresAt<=o||e.expiresAt>o+120||e.signedAt<o-120||e.signedAt>o+10)&&r("Meridian batch signing round is invalid or expired."),(a?a.requestId!==e.requestId||Number(a.index)+1!==e.index||a.expiresAt!==e.expiresAt:e.index!==0)&&r("Unexpected Meridian batch signing order.");let d=M(t,e.index,c,N(e.nonce,"the nonce",!1,64),e.signedAt),i=m(d,f(e.signatureTypes));(!b(e.request,i)||!b(e.data,d.data)||!b(u,[{kind:"typedData",request:i}]))&&r("Meridian batch signing fields differ from the local instruction.")}function te(t,c){let u=new Map;return{name:"meridian_perps_batch",inputSchema:{type:"object",additionalProperties:!1,required:["subaccountId","instructions","failureBehavior"],description:"Sign 1\u201320 NEW/CANCEL instructions locally and submit one batch. failureBehavior is explicit. Cancel/replace is not atomic. Reconcile each result and check fills after submission.",properties:{subaccountId:{type:"string",format:"uuid"},subaccount:{type:"string"},failureBehavior:{type:"string",enum:["ContinueOnFailure","StopOnFailure"]},instructions:{type:"array",minItems:1,maxItems:20,items:{type:"object",properties:{kind:{type:"string",enum:["NEW","CANCEL"]},quantity:I("D9 quantity base units."),price:I("D9 price base units."),stopPrice:I("D9 stop price base units."),expiresAt:I("Unix seconds.")},additionalProperties:!0}},continuation:{type:"object"},signature:{type:"string"}}},execute:async(e,a)=>{let o=S(a),d=j(e);d.forEach((s,n)=>M(e,n,o,"0",Math.floor(Date.now()/1e3)));let i=s=>({steps:[{kind:"typedData",request:structuredClone(s.round.request)}],continuation:structuredClone(s.round),summary:`Review and confirm Meridian batch instruction ${Number(s.round.index)+1}/${d.length}. D9 signed quantities and prices have 9 decimals. Every instruction is separately signed; no API submission occurs until all signatures are collected. ${e.failureBehavior}; earlier successful results are never rolled back.`});if(e.continuation!==void 0){let s=f(e.continuation),n=u.get(String(s.requestId));(!n||!A(s.wallet,o)||!b(n.round,s)||!b(n.args,Object.fromEntries(Object.entries(e).filter(([l])=>!["continuation","signature"].includes(l)))))&&r("Meridian batch continuation is lost, expired or changed. Check orders before restarting."),u.delete(String(s.requestId));let F=s.request;(typeof s.expiresAt!="number"||s.expiresAt<=Math.floor(Date.now()/1e3))&&(clearTimeout(n.timer),r("Meridian batch expired. Check orders before restarting."));try{(typeof e.signature!="string"||!/^0x[0-9a-fA-F]{130}$/.test(e.signature)||!A(await z({...F,signature:e.signature}),o))&&r("The local Meridian batch signature does not match this wallet.");let l=Number(s.index),L=n.values[l];if(n.signed.push({type:d[l].kind,data:L.data,signature:e.signature}),l+1<d.length){let h=n.values[l+1],$=f(s.signatureTypes);return n.round={...s,index:l+1,nonce:h.message.nonce,data:h.data,request:m(h,$),review:n.reviews[l+1]},u.set(String(s.requestId),n),i(n)}clearTimeout(n.timer),(t.network==="testnet"||await t.clientFor(p).getChainId()!==p)&&r("Meridian batch requires chain 4663.");let W=await q(t);return n.values.some(h=>!b(m(h,W).types,m(h,f(s.signatureTypes)).types))&&r("Meridian batch signing types changed; check orders before restarting."),{result:await x(t,"/v1/order/batch",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({failureBehavior:e.failureBehavior,instructions:n.signed})}),chainId:p,summary:"Meridian batch API responded. Inspect every instruction result and subsequent order/fill state. HTTP success is not atomic success or proof of execution."}}catch(l){throw clearTimeout(n.timer),l}}e.signature!==void 0&&r("Meridian batch signatures require an active local signing round."),u.size>=1e3&&r("Too many pending Meridian batches. Try again shortly."),(t.network==="testnet"||await t.clientFor(p).getChainId()!==p)&&r("Meridian batch requires chain 4663.");let g=await q(t),y=f(await x(t,"/v1/time")).time;(typeof y!="number"||!Number.isSafeInteger(y)||Math.abs(y-Date.now())>3e4)&&r("Synchronize the clock before signing a Meridian batch.");let C=Math.floor(y/1e3),B=BigInt(y)*1000000n+BigInt(U(999980)),w=d.map((s,n)=>M(e,n,o,(B+BigInt(n)).toString(),C)),T=[];for(let[s,n]of d.entries())T.push(await c(n.action,n.args,o,w[s].data));let k=H(),v=w[0],R={stage:"perps_batch_sign",chainId:p,wallet:o,requestId:k,index:0,signedAt:C,expiresAt:C+90,nonce:v.message.nonce,data:v.data,request:m(v,g),signatureTypes:{TradeOrder:g.TradeOrder,CancelOrder:g.CancelOrder},review:T[0]},O=setTimeout(()=>u.delete(k),9e4);O.unref?.();let E={args:structuredClone(e),round:R,values:w,reviews:T,signed:[],timer:O};return u.set(k,E),i(E)}}}export{ee as a,te as b};
@@ -0,0 +1 @@
1
+ import{a as z}from"./JKD2B6OX.js";import{b as J,d as K,e as Z}from"./V74F6IDY.js";import{a as W}from"./HSCQZ66A.js";import{a as j,c as O,d as v,h as H,i as E,j as F}from"./D3YLXQPW.js";import{Z as $,ca as G}from"./6PBGEPUK.js";import{a as R}from"./E3RACZUY.js";import{j as L}from"./57MEFFCU.js";import{j as M}from"./P56RZC2M.js";import{a as D}from"./IOYRL6AY.js";import{e as V,h as N}from"./NWNYJ26T.js";import{a as u}from"./XSD5NL7J.js";import{erc20Abi as X,formatUnits as I,parseAbiItem as Y}from"viem";var q=Y("event CreateVaultV2(address indexed caller,address indexed owner,bytes32 salt,address indexed vault)"),ee=t=>G("unverified",{...t?{vaultLabel:t}:{}});function te(t){if(!V(t)||!V(t.chain)||t.chain.id!==4663||!Array.isArray(t.contracts)||!Array.isArray(t.markets)||t.contracts.length>1e3||t.markets.length>1e3)throw new u("Borro vault discovery returned an unreadable candidate list.");let a=[...t.contracts.filter(V).filter(e=>e.name==="BorroUSDGVault").map(e=>e.address),...t.markets.filter(V).map(e=>V(e.vault)?e.vault.address:void 0)];return[...new Set(a.map(O))]}function re(t){return t.sort((a,e)=>+(e.symbol==="USDG")-+(a.symbol==="USDG")||0)}function se(t,a={}){let e=a.resolveAllowedAsset??E(a.officialStockTokens),d=F({resolveAllowedAsset:e}),m=async(o,r={})=>{let n=await H(o),s={vaults:[],refused:[],sources:[],incomplete:!1,warnings:[],measuredAtBlock:n.toString()},y=new Map,b=()=>{if(r.signal?.aborted)throw new u("Borro read was cancelled.")};b();try{for(let l of te(await J(t.http,"contracts",r.signal)))y.set(l.toLowerCase(),{vault:l});s.sources.push("contracts.json")}catch{s.incomplete=!0,s.warnings.push("Borro candidate discovery is unavailable; this inventory may be incomplete.")}if(a.factoryEvents!==!1)try{let l=new Map;for(let c=BigInt(R.factory.fromBlock);c<=n;c+=10000000n){b();let i=c+9999999n<n?c+9999999n:n,p=await o.getLogs({address:R.factory.address,event:q,fromBlock:c,toBlock:i,strict:!0});if(p.length>1e3)throw new u("Borro factory inventory exceeds the read limit.");for(let f of p){let h=O(f.args.vault);if(f.removed||!N(f.address,R.factory.address)||f.blockNumber===null||f.blockNumber<c||f.blockNumber>i||l.has(h.toLowerCase()))throw new u("Borro factory events are unreadable.");l.set(h.toLowerCase(),{vault:h,block:f.blockNumber})}if(l.size>1e3)throw new u("Borro factory inventory exceeds the read limit.")}for(let[c,i]of l)y.set(c,i);s.sources.push("factory-events")}catch{s.incomplete=!0,s.warnings.push("Borro factory discovery is unavailable; vault creation dates or inventory may be incomplete.")}b();let C=e;if(!a.resolveAllowedAsset&&!a.officialStockTokens)try{C=E(await M({http:t.http,allowAmbiguousSymbols:!0}))}catch{s.incomplete=!0,s.warnings.push("Official stock identities could not be checked; held-share exits remain available by vault address.")}let x=F({resolveAllowedAsset:C}),g=[...y.values()];for(let l=0;l<g.length;l+=4){b();let c=await Promise.all(g.slice(l,l+4).map(async i=>{try{let p=await x(o,i.vault,r.wallet?"withdraw":"deposit",{blockNumber:n,...r.wallet?{wallet:r.wallet}:{}});if(i.block!==void 0)try{let f=await o.getBlock({blockNumber:i.block}),h=v(f.timestamp);h<=8640000000000n&&f.number===i.block&&(p.deployedAt=new Date(Number(h)*1e3).toISOString())}catch{}return{facts:p}}catch{return{rejected:{vault:i.vault,reason:ee(i.vault)}}}}));for(let i of c)i.facts&&(!r.asset||i.facts.symbol.toUpperCase()===r.asset.toUpperCase())&&s.vaults.push(i.facts),i.rejected&&s.refused.push(i.rejected)}return re(s.vaults),s};return{discoverVaults:m,verifyVault:d,resolveVault:async(o,r,n,s)=>{if(r.asset!==void 0&&!/^[A-Za-z0-9.$_-]{1,32}$/.test(r.asset))throw new u("Provide an official asset symbol.");if(r.vault){let b=await d(o,r.vault,n,{wallet:s});if(r.asset&&b.symbol.toUpperCase()!==r.asset.toUpperCase())throw new u("The asset symbol does not match the verified vault.");return b}if(!r.asset)throw new u("Provide an asset symbol or the vault address.");let y=await m(o,{asset:r.asset,...n==="withdraw"?{wallet:s}:{}});if(y.incomplete)throw new u("Borro discovery is incomplete. Provide the vault address for on-chain verification.");if(y.vaults.length!==1)throw new u(y.vaults.length?"More than one Borro vault uses this symbol. Provide the vault address.":"No verified Borro vault matched this asset. Provide the vault address to check it on chain.");return{...y.vaults[0],mode:n}}}}var P=(t,a)=>({token:t,amount:a.toString()});async function ae(t,a,e){try{let[d,m]=await Promise.all([a.getGasPrice(),L("ETH",{client:a,http:t.http,chainId:4663,blockNumber:e})]);if(!/^\d+$/.test(m.usdE18)||BigInt(m.usdE18)<=0n||v(d)===0n)return{};let w=n=>Number(I(n*d*BigInt(m.usdE18)/10n**18n,18)),o=w(D*2n),r=w(D);return[o,r].every(n=>Number.isFinite(n)&&n>0)?{gasInUsd:o,gasOutUsd:r}:{}}catch{return{}}}async function oe(t,a,e,d,m=new Map){let w={vault:e.vault,verified:!0,symbol:e.symbol,vaultSymbol:e.vaultSymbol,setup:e.setup,measuredAtBlock:e.measuredAtBlock,...e.owner?{owner:e.owner}:{},...e.curator?{curator:e.curator}:{},...e.deployedAt?{deployedAt:e.deployedAt}:{}};try{let o=BigInt(e.measuredAtBlock),r={address:e.asset,symbol:e.symbol,decimals:e.assetDecimals,chainId:4663},n={address:e.vault,symbol:e.vaultSymbol,decimals:18,chainId:4663},s=(B,k,T=[])=>a.readContract({address:B,abi:[...j,...X],functionName:k,args:T,blockNumber:o}),[y,b,C,x,g,l,c]=await Promise.all([s(e.vault,"totalAssets"),s(e.vault,"performanceFee"),s(e.asset,"balanceOf",[d]),s(e.vault,"balanceOf",[d]),W(a,e,o),ae(t,a,o),a.getBlock({blockNumber:o})]),i=v(x),p=v(b);if(p>10n**18n)throw new u("Borro performance fee is unreadable.");let f=v(await s(e.vault,"convertToAssets",[i])),h={};if(e.owner)try{let[B,k]=await Promise.all([s(e.owner,"getThreshold"),s(e.owner,"getOwners")]),T=v(B);if(!Array.isArray(k)||k.length>1e3||new Set(k.map(O)).size!==k.length||T<1n||T>BigInt(k.length))throw new u("Unreadable group wallet.");h={safeThreshold:Number(T),safeOwners:k.length}}catch{}let U;if(N(e.asset,R.assetRule.usdg.address))try{let B=(await z(a,o)).rateBasePct;Number.isFinite(B)&&B>=0&&(U=B)}catch{}let A=Z(m,r,e.vault);if(c.number!==o)throw new u("Borro block timestamp could not be verified.");let _=Number(v(c.timestamp)),S=e.deployedAt?Date.parse(e.deployedAt)/1e3:void 0,Q=$({symbol:e.symbol,kind:N(e.asset,R.assetRule.usdg.address)?"usdg":"stock",nowSeconds:_,...S===void 0?{}:{deployedAtSeconds:S},threshold:h.safeThreshold,owners:h.safeOwners,borroRatePct:A.apr===void 0?void 0:A.apr*100,feePct:Number(I(p,16)),layerbankRatePct:U,totalAmount:I(v(y),e.assetDecimals),readyAmount:g.readyBase===void 0?void 0:I(g.readyBase,e.assetDecimals),gasInUsd:l.gasInUsd===void 0?void 0:`up to $${l.gasInUsd.toFixed(4)}`,gasOutUsd:l.gasOutUsd===void 0?void 0:`up to $${l.gasOutUsd.toFixed(4)}`});return{...w,asset:r,shares:n,totalAssets:P(r,v(y)),performanceFeeWad:p.toString(),walletAssetBalance:P(r,v(C)),walletShares:P(n,i),walletShareValue:P(r,f),liquidityKind:g.kind,...g.readyBase===void 0?{}:{cashOnHand:P(r,g.readyBase)},...h,...l,...U===void 0?{}:{layerbankRateBasePct:U},...A.apr===void 0?{}:{apr:A.apr,rateSource:A.source},...A.readyToWithdraw?{vendorReadyToWithdraw:A.readyToWithdraw}:{},...S!==void 0&&S<=_?{ageSeconds:String(Math.floor(_-S))}:{},risk:{title:"Lending on Borro",text:Q,source:"Oak"}}}catch{return{...w,error:"This Borro vault can't be read right now. Please try again."}}}async function be(t,a,e={},d={}){if(e.vault&&!d.resolveAllowedAsset&&!d.officialStockTokens)try{d={...d,officialStockTokens:await M({http:t.http,allowAmbiguousSymbols:!0})}}catch{}let m=t.clientFor(4663),w=se(t,d);O(a);let o;if(e.vault){let s=await w.resolveVault(m,e,"deposit",a);o={vaults:[s],refused:[],sources:[],incomplete:!1,warnings:[],measuredAtBlock:s.measuredAtBlock}}else o=await w.discoverVaults(m,e.asset?{asset:e.asset}:{});let r=await K(t.http),n=[];for(let s of o.vaults)n.push(await oe(t,m,s,a,r));return{...o,vaults:n}}export{te as a,re as b,se as c,P as d,oe as e,be as f};
@@ -1 +1 @@
1
- import{a as m}from"./UP7FBDMJ.js";import{a as i}from"./XSD5NL7J.js";import{encodeFunctionData as d,erc20Abi as f,isAddress as g,parseAbi as h}from"viem";var p=h(["function deposit(uint256 assets,address receiver) returns (uint256 shares)","function redeem(uint256 shares,address receiver,address owner) returns (uint256 assets)"]),l=(1n<<256n)-1n;function a(e){if(typeof e!="string"||!g(e,{strict:!1}))throw new i("Provide a valid contract or wallet address.")}function o(e){let t=m(e);if(t>l)throw new i("Amount exceeds the uint256 range.");return t}function u(e){a(e.to);let t=e.chainId??4663;if(!Number.isSafeInteger(t)||t<=0)throw new i("Provide a positive integer chain ID.");if(typeof e.data!="string"||!/^0x([0-9a-fA-F]{2})*$/.test(e.data))throw new i("Transaction data must be hex-encoded bytes.");if(typeof e.description!="string"||!e.description.trim())throw new i("Provide a transaction description.");return{to:e.to,data:e.data,value:o(e.value).toString(),chainId:t,description:e.description}}function A(e,t,s,r=4663){a(t);let n=o(s);return u({to:e,data:d({abi:f,functionName:"approve",args:[t,n]}),value:"0",chainId:r,description:`Approve ${n} token base units for ${t}.`})}function w(e,t,s,r,n=4663){a(r);let c=o(s);return{txs:[A(t,e,s,n),u({to:e,data:d({abi:p,functionName:"deposit",args:[c,r]}),value:"0",chainId:n,description:`Deposit ${c} asset base units into ${e}.`})],summary:"Approve the exact asset amount, then deposit into the vault."}}function y(e,t,s,r=4663){a(s);let n=o(t);return{txs:[u({to:e,data:d({abi:p,functionName:"redeem",args:[n,s,s]}),value:"0",chainId:r,description:`Redeem the full ${n} share base units from ${e}.`})],summary:"Redeem the supplied full share balance to the wallet."}}export{a,u as b,A as c,w as d,y as e};
1
+ import{b as m}from"./IX3GZMTM.js";import{a as i}from"./XSD5NL7J.js";import{encodeFunctionData as d,erc20Abi as f,isAddress as g,parseAbi as h}from"viem";var p=h(["function deposit(uint256 assets,address receiver) returns (uint256 shares)","function redeem(uint256 shares,address receiver,address owner) returns (uint256 assets)"]),l=(1n<<256n)-1n;function a(e){if(typeof e!="string"||!g(e,{strict:!1}))throw new i("Provide a valid contract or wallet address.")}function o(e){let t=m(e);if(t>l)throw new i("Amount exceeds the uint256 range.");return t}function u(e){a(e.to);let t=e.chainId??4663;if(!Number.isSafeInteger(t)||t<=0)throw new i("Provide a positive integer chain ID.");if(typeof e.data!="string"||!/^0x([0-9a-fA-F]{2})*$/.test(e.data))throw new i("Transaction data must be hex-encoded bytes.");if(typeof e.description!="string"||!e.description.trim())throw new i("Provide a transaction description.");return{to:e.to,data:e.data,value:o(e.value).toString(),chainId:t,description:e.description}}function A(e,t,s,r=4663){a(t);let n=o(s);return u({to:e,data:d({abi:f,functionName:"approve",args:[t,n]}),value:"0",chainId:r,description:`Approve ${n} token base units for ${t}.`})}function w(e,t,s,r,n=4663){a(r);let c=o(s);return{txs:[A(t,e,s,n),u({to:e,data:d({abi:p,functionName:"deposit",args:[c,r]}),value:"0",chainId:n,description:`Deposit ${c} asset base units into ${e}.`})],summary:"Approve the exact asset amount, then deposit into the vault."}}function y(e,t,s,r=4663){a(s);let n=o(t);return{txs:[u({to:e,data:d({abi:p,functionName:"redeem",args:[n,s,s]}),value:"0",chainId:r,description:`Redeem the full ${n} share base units from ${e}.`})],summary:"Redeem the supplied full share balance to the wallet."}}export{a,u as b,A as c,w as d,y as e};
@@ -1 +1 @@
1
- import{C as V,H as W,I as D,L as X,a as w,z as B}from"./5WUKOQIJ.js";import{a as Q}from"./5ZLOCQA4.js";import{f as J,g as E}from"./5KUWLUPM.js";import{a as K,c as U}from"./UP7FBDMJ.js";import{a as b}from"./FWD4L3CJ.js";import{a as r}from"./XSD5NL7J.js";import{encodeFunctionData as ee,erc20Abi as oe,getAddress as I,parseAbi as te}from"viem";var N="https://hookr.fun/api/mcp",Y=te(["function fill(uint256 orderId) returns (uint256)","function fillGasFloor(uint256 orderId) view returns (uint256)"]),P={type:"string",pattern:"^[1-9][0-9]*$"},Z={type:"string",pattern:"^0x[0-9a-fA-F]{64}$"},ne={cursor:P,limit:{type:"integer",minimum:1,maximum:32}};function C(t,m){if(typeof t!="string"||!/^[1-9][0-9]*$/.test(t)||t.length>78||BigInt(t)>=1n<<256n)throw new r(`Provide ${m} as a positive decimal integer string.`);return BigInt(t)}function h(t){return J(t,"Hookr returned an invalid read response. Retry later.")}function v(t,m,e,o){return{name:t,inputSchema:{type:"object",description:`Read ${t.replace("hookr_","Hookr ")}. No signature or transaction.`,properties:m,required:e,additionalProperties:!1},execute:async(n,s)=>{if(Object.keys(n).some(a=>!Object.hasOwn(m,a))||e.some(a=>n[a]===void 0))throw new r(`Provide the documented arguments for ${t}.`);return o(n,s)}}}function F(t){if(typeof t!="string"||!/^0x[0-9a-fA-F]{64}$/.test(t))throw new r("Provide a 32-byte Hookr poolId.");return t}function $(t,m){let e=h(t),o=h(e.key);if(typeof o.fee!="number"||!Number.isInteger(o.fee)||o.fee<0||o.fee>16777215||typeof o.tickSpacing!="number"||!Number.isInteger(o.tickSpacing)||o.tickSpacing<=0||o.tickSpacing>8388607)throw new r("Hookr pool key is invalid.");let n={currency0:I(String(o.currency0)),currency1:I(String(o.currency1)),fee:o.fee,tickSpacing:o.tickSpacing,hooks:I(String(o.hooks))},s=m??F(e.poolId);if(BigInt(n.currency0)>=BigInt(n.currency1)||!E(V(n),s))throw new r("Hookr pool key does not match its PoolId.");let a=h(e.token),u=h(e.quote),c=i=>{let k=I(String(i.address));if(typeof i.symbol!="string"||!i.symbol.trim()||typeof i.decimals!="number"||!Number.isInteger(i.decimals)||i.decimals<0||i.decimals>255||![n.currency0,n.currency1].includes(k))throw new r("Hookr listed token metadata is invalid.");return{...i,address:k,chainId:b}},d=c(a),l=c(u);if(d.address===l.address)throw new r("Hookr listed token pair is invalid.");return{...e,poolId:s,key:n,token:d,quote:l}}async function re(t,m,e){try{let o=await t.http(N,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:1,method:"tools/call",params:{name:m,arguments:e}}),signal:AbortSignal.timeout(15e3),redirect:"error"});if(!o.ok)throw new Error(`HTTP ${o.status}`);let n=h(await o.json());if(n.error||n.id!==1)throw new Error("RPC failure");let s=h(n.result);if(s.isError)throw new Error("Tool failure");let a=h(s.structuredContent);if(a.status==="unavailable"||a.error)throw new Error("Unavailable");return a}catch{throw new r(`Hookr ${m} read is unavailable. Retry later; unavailable data is not an empty result.`)}}var O=re;function me(t){let m=e=>v(e?"hookr_orders":"hookr_open_orders",ne,[],async(o,n)=>{let s=o.limit??16;if(typeof s!="number"||!Number.isInteger(s)||s<1||s>32)throw new r("Hookr page limit must be an integer from 1 to 32.");let a=t.clientFor(b),u=await a.getBlock();if(typeof u.number!="bigint"||typeof u.timestamp!="bigint"||u.timestamp<=0n)throw new r("Hookr order reads need a valid chain block and timestamp.");let c=new Proxy(X(a),{get(y,f,p){return f==="readContract"?g=>y.readContract({...g,blockNumber:u.number}):Reflect.get(y,f,p)}}),d={...t,clientFor:()=>c},l=await c.readContract({address:w,abi:B,functionName:"lastOrderId"});if(typeof l!="bigint"||l<0n)throw new r("Could not read the last Hookr order ID. Coverage is unknown.");let i=o.cursor===void 0?l:C(o.cursor,"cursor");if(i>l)throw new r("Hookr cursor exceeds the latest order ID. Restart pagination.");let k=[],T=new Map,A=i,S=i>BigInt(s)?i-BigInt(s):0n;for(;i>S;){let y=i--,f=W(await c.readContract({address:w,abi:B,functionName:"getOrder",args:[y]}));if(Number(f.status)===0||BigInt(f.owner)===0n)throw new r(`Hookr order #${y} is missing. Coverage is unknown.`);if(e?!E(f.owner,n):Number(f.status)!==1)continue;let p=await D(d,y,{order:f,tokens:T});if(e){k.push(p);continue}let g=null,q=null,M=null,j=null,z=BigInt(p.expiry)<u.timestamp,G=p.fillable&&!z;if(G)try{let _=await c.readContract({address:w,abi:Y,functionName:"fillGasFloor",args:[BigInt(p.orderId)]}),R=await a.estimateGas({account:n,to:w,data:ee({abi:Y,functionName:"fill",args:[BigInt(p.orderId)]}),blockNumber:u.number}),H=await a.getGasPrice();if(typeof _!="bigint"||_<0n||typeof R!="bigint"||R<=0n||typeof H!="bigint"||H<0n)throw new Error("Invalid gas data");let L=(_*6n+4n)/5n,x=R>L?R:L;g=x.toString(),q=H.toString(),M=(x*H).toString(),j=(BigInt(p.bounty)-x*H).toString()}catch{}k.push({...p,fillable:G,expired:z,economics:{gasLimit:g,gasPrice:q,estimatedGasCost:M,bountyLessEstimatedGas:j,note:"Estimate only; excludes bounty claim gas and competition. Recheck the fill preview."}})}return{chainId:b,book:w,blockNumber:u.number.toString(),chainTime:u.timestamp.toString(),orders:k,scanned:{from:A.toString(),through:(i+1n).toString()},nextCursor:i>0n?i.toString():null,complete:i===0n}});return[m(!1),m(!0),v("hookr_order",{orderId:P},["orderId"],async e=>D(t,C(e.orderId,"orderId"))),v("hookr_pools",{token:{type:"string"},limit:{type:"integer",minimum:1,maximum:50},cursor:{type:"string",pattern:"^[0-9]{1,6}$"}},[],async e=>{if(e.token!==void 0)try{I(String(e.token))}catch{throw new r("Provide a valid token address.")}if(e.limit!==void 0&&(typeof e.limit!="number"||!Number.isInteger(e.limit)||e.limit<1||e.limit>50))throw new r("Pool page limit must be from 1 to 50.");if(e.cursor!==void 0&&(typeof e.cursor!="string"||!/^[0-9]{1,6}$/.test(e.cursor)))throw new r("Provide the pool nextCursor from the previous page.");let o=await O(t,"hookr_pools",e);if(!Array.isArray(o.pools))throw new r("Hookr pool coverage is unknown. Retry later.");return{...o,pools:o.pools.map(n=>$(n)),chainId:b,source:N}}),v("hookr_pool",{poolId:Z,side:{type:"string",enum:["buy","sell"]},amountIn:P,minAmountOut:P},["poolId"],async e=>{let o=F(e.poolId),n=[e.side,e.amountIn,e.minAmountOut].some(g=>g!==void 0);if(n&&(e.side!=="buy"&&e.side!=="sell"||e.amountIn===void 0||e.minAmountOut===void 0))throw new r("Provide side, amountIn and minAmountOut together for order-specific bounty bounds.");let s=n?C(e.amountIn,"amountIn"):void 0,a=n?C(e.minAmountOut,"minAmountOut"):void 0;if(s!==void 0&&(s>=1n<<128n||a>=1n<<128n))throw new r("Hookr order amounts must fit uint128 base units.");let u=await O(t,"hookr_pool",{poolId:o}),c=u.listing?$(u.listing,o):void 0,d={...u,...c?{listing:c}:{},chainId:b,source:N};if(!n)return{...d,bountyBounds:{status:"requires-order-terms",note:"The keeper bounty floor depends on the order. Supply side, amountIn and minAmountOut in base units. The batch-1 0.0005 ETH observation is not a permanent floor."}};if(!c)throw new r("Hookr pool key is unavailable; bounty floor is unknown.");let l=c.key,i=h(e.side==="buy"?c.quote:c.token),k=I(String(i.address))===l.currency0,T=t.clientFor(b),A=await T.getBlock(),S=await T.readContract({address:w,abi:B,functionName:"bountyBounds",args:[l,k,s,a],blockNumber:A.number});if(!Array.isArray(S)||S.length!==3||S.some(g=>typeof g!="bigint"||g<0n||g>=1n<<128n))throw new r("Hookr bounty bounds are unavailable; the floor is unknown.");let[y,f,p]=S;return{...d,bountyBounds:{status:"available",blockNumber:A.number.toString(),token:{address:"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",symbol:"ETH",decimals:18,chainId:b},minBounty:y.toString(),defaultBounty:f.toString(),maxBounty:p.toString(),effectiveFloor:(y>0n?y:f).toString(),note:"ETH wei for this order at this block. Oak create uses the positive minimum, or the default when minimum is zero; recheck at creation."}}}),v("hookr_quote",{poolId:Z,side:{type:"string",enum:["buy","sell"]},amountIn:Q()},["poolId","side","amountIn"],async(e,o)=>{let n=F(e.poolId);if(e.side!=="buy"&&e.side!=="sell")throw new r("Hookr side must be buy or sell.");if(typeof e.amountIn!="string"||K(e.amountIn)<=0n)throw new r("Provide a positive amountIn in base units.");let s=await O(t,"hookr_pool",{poolId:n}),a=$(s.listing,n),u=h(e.side==="buy"?a.quote:a.token),c=I(String(u.address)),d=c==="0x0000000000000000000000000000000000000000"?18:await t.clientFor(b).readContract({address:c,abi:oe,functionName:"decimals"});if(typeof d!="number"||!Number.isInteger(d)||d<0||d>255||typeof u.symbol!="string")throw new r("Hookr input token metadata is unavailable.");let l=U(e.amountIn,d),i=await O(t,"hookr_quote",{poolId:n,side:e.side,amount:l,payer:o}),k=await O(t,"hookr_check_trade",{poolId:n,side:e.side,amount:l,wallet:o});return{chainId:b,source:N,input:{token:{address:c,symbol:u.symbol,decimals:d,chainId:b},amount:e.amountIn},quote:i,check:k,note:"Informational quote. Review pool rules; unknown trade checks do not authorize a trade."}})]}export{re as a,me as b};
1
+ import{C as V,H as W,I as D,L as X,a as w,z as B}from"./NEEZBJBC.js";import{a as Q}from"./66F5ZH34.js";import{f as J,g as E}from"./NWNYJ26T.js";import{b as K,d as U}from"./IX3GZMTM.js";import{a as b}from"./FWD4L3CJ.js";import{a as r}from"./XSD5NL7J.js";import{encodeFunctionData as ee,erc20Abi as oe,getAddress as I,parseAbi as te}from"viem";var N="https://hookr.fun/api/mcp",Y=te(["function fill(uint256 orderId) returns (uint256)","function fillGasFloor(uint256 orderId) view returns (uint256)"]),P={type:"string",pattern:"^[1-9][0-9]*$"},Z={type:"string",pattern:"^0x[0-9a-fA-F]{64}$"},ne={cursor:P,limit:{type:"integer",minimum:1,maximum:32}};function C(t,m){if(typeof t!="string"||!/^[1-9][0-9]*$/.test(t)||t.length>78||BigInt(t)>=1n<<256n)throw new r(`Provide ${m} as a positive decimal integer string.`);return BigInt(t)}function h(t){return J(t,"Hookr returned an invalid read response. Retry later.")}function v(t,m,e,o){return{name:t,inputSchema:{type:"object",description:`Read ${t.replace("hookr_","Hookr ")}. No signature or transaction.`,properties:m,required:e,additionalProperties:!1},execute:async(n,s)=>{if(Object.keys(n).some(a=>!Object.hasOwn(m,a))||e.some(a=>n[a]===void 0))throw new r(`Provide the documented arguments for ${t}.`);return o(n,s)}}}function F(t){if(typeof t!="string"||!/^0x[0-9a-fA-F]{64}$/.test(t))throw new r("Provide a 32-byte Hookr poolId.");return t}function $(t,m){let e=h(t),o=h(e.key);if(typeof o.fee!="number"||!Number.isInteger(o.fee)||o.fee<0||o.fee>16777215||typeof o.tickSpacing!="number"||!Number.isInteger(o.tickSpacing)||o.tickSpacing<=0||o.tickSpacing>8388607)throw new r("Hookr pool key is invalid.");let n={currency0:I(String(o.currency0)),currency1:I(String(o.currency1)),fee:o.fee,tickSpacing:o.tickSpacing,hooks:I(String(o.hooks))},s=m??F(e.poolId);if(BigInt(n.currency0)>=BigInt(n.currency1)||!E(V(n),s))throw new r("Hookr pool key does not match its PoolId.");let a=h(e.token),u=h(e.quote),c=i=>{let k=I(String(i.address));if(typeof i.symbol!="string"||!i.symbol.trim()||typeof i.decimals!="number"||!Number.isInteger(i.decimals)||i.decimals<0||i.decimals>255||![n.currency0,n.currency1].includes(k))throw new r("Hookr listed token metadata is invalid.");return{...i,address:k,chainId:b}},d=c(a),l=c(u);if(d.address===l.address)throw new r("Hookr listed token pair is invalid.");return{...e,poolId:s,key:n,token:d,quote:l}}async function re(t,m,e){try{let o=await t.http(N,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:1,method:"tools/call",params:{name:m,arguments:e}}),signal:AbortSignal.timeout(15e3),redirect:"error"});if(!o.ok)throw new Error(`HTTP ${o.status}`);let n=h(await o.json());if(n.error||n.id!==1)throw new Error("RPC failure");let s=h(n.result);if(s.isError)throw new Error("Tool failure");let a=h(s.structuredContent);if(a.status==="unavailable"||a.error)throw new Error("Unavailable");return a}catch{throw new r(`Hookr ${m} read is unavailable. Retry later; unavailable data is not an empty result.`)}}var O=re;function me(t){let m=e=>v(e?"hookr_orders":"hookr_open_orders",ne,[],async(o,n)=>{let s=o.limit??16;if(typeof s!="number"||!Number.isInteger(s)||s<1||s>32)throw new r("Hookr page limit must be an integer from 1 to 32.");let a=t.clientFor(b),u=await a.getBlock();if(typeof u.number!="bigint"||typeof u.timestamp!="bigint"||u.timestamp<=0n)throw new r("Hookr order reads need a valid chain block and timestamp.");let c=new Proxy(X(a),{get(y,f,p){return f==="readContract"?g=>y.readContract({...g,blockNumber:u.number}):Reflect.get(y,f,p)}}),d={...t,clientFor:()=>c},l=await c.readContract({address:w,abi:B,functionName:"lastOrderId"});if(typeof l!="bigint"||l<0n)throw new r("Could not read the last Hookr order ID. Coverage is unknown.");let i=o.cursor===void 0?l:C(o.cursor,"cursor");if(i>l)throw new r("Hookr cursor exceeds the latest order ID. Restart pagination.");let k=[],T=new Map,A=i,S=i>BigInt(s)?i-BigInt(s):0n;for(;i>S;){let y=i--,f=W(await c.readContract({address:w,abi:B,functionName:"getOrder",args:[y]}));if(Number(f.status)===0||BigInt(f.owner)===0n)throw new r(`Hookr order #${y} is missing. Coverage is unknown.`);if(e?!E(f.owner,n):Number(f.status)!==1)continue;let p=await D(d,y,{order:f,tokens:T});if(e){k.push(p);continue}let g=null,q=null,M=null,j=null,z=BigInt(p.expiry)<u.timestamp,G=p.fillable&&!z;if(G)try{let _=await c.readContract({address:w,abi:Y,functionName:"fillGasFloor",args:[BigInt(p.orderId)]}),R=await a.estimateGas({account:n,to:w,data:ee({abi:Y,functionName:"fill",args:[BigInt(p.orderId)]}),blockNumber:u.number}),H=await a.getGasPrice();if(typeof _!="bigint"||_<0n||typeof R!="bigint"||R<=0n||typeof H!="bigint"||H<0n)throw new Error("Invalid gas data");let L=(_*6n+4n)/5n,x=R>L?R:L;g=x.toString(),q=H.toString(),M=(x*H).toString(),j=(BigInt(p.bounty)-x*H).toString()}catch{}k.push({...p,fillable:G,expired:z,economics:{gasLimit:g,gasPrice:q,estimatedGasCost:M,bountyLessEstimatedGas:j,note:"Estimate only; excludes bounty claim gas and competition. Recheck the fill preview."}})}return{chainId:b,book:w,blockNumber:u.number.toString(),chainTime:u.timestamp.toString(),orders:k,scanned:{from:A.toString(),through:(i+1n).toString()},nextCursor:i>0n?i.toString():null,complete:i===0n}});return[m(!1),m(!0),v("hookr_order",{orderId:P},["orderId"],async e=>D(t,C(e.orderId,"orderId"))),v("hookr_pools",{token:{type:"string"},limit:{type:"integer",minimum:1,maximum:50},cursor:{type:"string",pattern:"^[0-9]{1,6}$"}},[],async e=>{if(e.token!==void 0)try{I(String(e.token))}catch{throw new r("Provide a valid token address.")}if(e.limit!==void 0&&(typeof e.limit!="number"||!Number.isInteger(e.limit)||e.limit<1||e.limit>50))throw new r("Pool page limit must be from 1 to 50.");if(e.cursor!==void 0&&(typeof e.cursor!="string"||!/^[0-9]{1,6}$/.test(e.cursor)))throw new r("Provide the pool nextCursor from the previous page.");let o=await O(t,"hookr_pools",e);if(!Array.isArray(o.pools))throw new r("Hookr pool coverage is unknown. Retry later.");return{...o,pools:o.pools.map(n=>$(n)),chainId:b,source:N}}),v("hookr_pool",{poolId:Z,side:{type:"string",enum:["buy","sell"]},amountIn:P,minAmountOut:P},["poolId"],async e=>{let o=F(e.poolId),n=[e.side,e.amountIn,e.minAmountOut].some(g=>g!==void 0);if(n&&(e.side!=="buy"&&e.side!=="sell"||e.amountIn===void 0||e.minAmountOut===void 0))throw new r("Provide side, amountIn and minAmountOut together for order-specific bounty bounds.");let s=n?C(e.amountIn,"amountIn"):void 0,a=n?C(e.minAmountOut,"minAmountOut"):void 0;if(s!==void 0&&(s>=1n<<128n||a>=1n<<128n))throw new r("Hookr order amounts must fit uint128 base units.");let u=await O(t,"hookr_pool",{poolId:o}),c=u.listing?$(u.listing,o):void 0,d={...u,...c?{listing:c}:{},chainId:b,source:N};if(!n)return{...d,bountyBounds:{status:"requires-order-terms",note:"The keeper bounty floor depends on the order. Supply side, amountIn and minAmountOut in base units. The batch-1 0.0005 ETH observation is not a permanent floor."}};if(!c)throw new r("Hookr pool key is unavailable; bounty floor is unknown.");let l=c.key,i=h(e.side==="buy"?c.quote:c.token),k=I(String(i.address))===l.currency0,T=t.clientFor(b),A=await T.getBlock(),S=await T.readContract({address:w,abi:B,functionName:"bountyBounds",args:[l,k,s,a],blockNumber:A.number});if(!Array.isArray(S)||S.length!==3||S.some(g=>typeof g!="bigint"||g<0n||g>=1n<<128n))throw new r("Hookr bounty bounds are unavailable; the floor is unknown.");let[y,f,p]=S;return{...d,bountyBounds:{status:"available",blockNumber:A.number.toString(),token:{address:"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",symbol:"ETH",decimals:18,chainId:b},minBounty:y.toString(),defaultBounty:f.toString(),maxBounty:p.toString(),effectiveFloor:(y>0n?y:f).toString(),note:"ETH wei for this order at this block. Oak create uses the positive minimum, or the default when minimum is zero; recheck at creation."}}}),v("hookr_quote",{poolId:Z,side:{type:"string",enum:["buy","sell"]},amountIn:Q()},["poolId","side","amountIn"],async(e,o)=>{let n=F(e.poolId);if(e.side!=="buy"&&e.side!=="sell")throw new r("Hookr side must be buy or sell.");if(typeof e.amountIn!="string"||K(e.amountIn)<=0n)throw new r("Provide a positive amountIn in base units.");let s=await O(t,"hookr_pool",{poolId:n}),a=$(s.listing,n),u=h(e.side==="buy"?a.quote:a.token),c=I(String(u.address)),d=c==="0x0000000000000000000000000000000000000000"?18:await t.clientFor(b).readContract({address:c,abi:oe,functionName:"decimals"});if(typeof d!="number"||!Number.isInteger(d)||d<0||d>255||typeof u.symbol!="string")throw new r("Hookr input token metadata is unavailable.");let l=U(e.amountIn,d),i=await O(t,"hookr_quote",{poolId:n,side:e.side,amount:l,payer:o}),k=await O(t,"hookr_check_trade",{poolId:n,side:e.side,amount:l,wallet:o});return{chainId:b,source:N,input:{token:{address:c,symbol:u.symbol,decimals:d,chainId:b},amount:e.amountIn},quote:i,check:k,note:"Informational quote. Review pool rules; unknown trade checks do not authorize a trade."}})]}export{re as a,me as b};
@@ -1 +1 @@
1
- import{f as u,h as c,i as g,l as f}from"./5KUWLUPM.js";import{a as p}from"./XSD5NL7J.js";import{formatUnits as w,parseAbi as l,parseAbiParameters as M,stringToHex as A}from"viem";var y="0xD540F47F214dC7D6D244E62A6aE7e06B586Ef44A",P="https://api.meridian.xyz",h=4663,$=l(["function deposit(bytes32 subaccount,address depositToken,uint256 amount,bytes32 referralCode)","function finalizeWithdraw(address account,bytes32 withdrawDigest) payable"]),m={name:"Meridian",version:"1",chainId:h,verifyingContract:y};function i(n){throw new p(n)}function a(n){return u(n,"Meridian perps returned an invalid object.")}function x(n,e,t=!1,o=256){return(typeof n!="string"||!/^(0|[1-9][0-9]*)$/.test(n)||n.length>78||BigInt(n)>=1n<<BigInt(o)||t&&n==="0")&&i(`Provide ${e} as a ${t?"positive ":""}decimal base-unit string.`),n}function D(n){let e="Provide a nonzero Meridian perps address.";return f(g(n,e),e)}function b(n){return(typeof n!="string"||!/^0x[0-9a-fA-F]{64}$/.test(n))&&i("Provide a bytes32 Meridian perps identifier."),n}function k(n){return(typeof n!="string"||!/^[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}$/i.test(n))&&i("Provide the Meridian API UUID."),n}function B(n="primary"){return typeof n=="string"&&/^0x[0-9a-fA-F]{64}$/.test(n)?b(n):((typeof n!="string"||!/^[A-Za-z0-9_-]{1,32}$/.test(n))&&i("Provide a subaccount name of 1\u201332 ASCII letters, digits, underscores or hyphens, or its bytes32 encoding."),A(n,{size:32}))}function E(n){(typeof n!="string"||n.length>100||!/^(0|[1-9][0-9]*)(\.[0-9]{1,9})?$/.test(n))&&i("Meridian perps returned an invalid D9 decimal.");let[e,t=""]=n.split(".");return BigInt(e)*1000000000n+BigInt(t.padEnd(9,"0"))}function H(n,e){let t=BigInt(x(n,"the token amount",!0)),o=10n**BigInt(Math.abs(e-9));return e>9&&t%o!==0n&&i("Meridian transfers support at most nine decimal places; reduce the token amount precision."),e>=9?t/o:t*o}function z(n){return w(BigInt(x(n,"the D9 amount",!1,128)),9)}async function d(n,e,t,o="api"){let r,s=o==="archive"?"https://archive.meridian.xyz":o==="candles"?"https://trading-view.meridian.xyz":P;try{r=await n.http(new URL(e,s),{...t,redirect:"error",signal:AbortSignal.timeout(3e4)})}catch{return i("Meridian perps request is unavailable. Check order and transfer history before retrying an action.")}r.ok||i(`Meridian perps returned HTTP ${r.status}. Check order and transfer history before retrying an action.`);try{return await r.json()}catch{return i("Meridian perps returned invalid JSON. Check history before retrying an action.")}}async function S(n){let e=a(await d(n,"/v1/rpc/config")),t=a(e.domain);return(t.name!==m.name||t.version!==m.version||t.chainId!==h||!c(t.verifyingContract,y)||Object.keys(t).length!==4)&&i("Meridian perps signing domain changed. Verify the deployment before updating Oak."),a(e.signatureTypes)}function _(n,e,t){let o=n[e];(typeof o!="string"||o.length>2e3)&&i("Meridian perps signing type is unavailable.");let r;try{r=M(o)}catch{return i("Meridian perps signing type is malformed.")}return(r.length!==Object.keys(t).length||r.some(s=>!s.name||t[s.name]!==s.type)||new Set(r.map(s=>s.name)).size!==r.length)&&i("Meridian perps signing fields changed. Verify the protocol before updating Oak."),{[e]:r.map(s=>({name:s.name,type:s.type}))}}async function v(n,e,t,o){let r=a(await d(n,`/v1/subaccount/${k(e)}`));return(r.id!==e||!c(r.account,t)||o&&!c(r.name,o))&&i("Meridian perps subaccount does not match this wallet and name."),b(r.name),(typeof r.registeredBlockNumber!="string"||!/^[0-9]+$/.test(r.registeredBlockNumber))&&i("Meridian perps subaccount registration is pending. Wait for the deposit to settle."),r}async function T(n,e){let t=a(await d(n,`/v1/token/${k(e)}`));return t.id!==e&&i("Meridian perps returned a different token."),t}export{y as a,P as b,h as c,$ as d,m as e,i as f,a as g,x as h,D as i,b as j,k,B as l,E as m,H as n,z as o,d as p,S as q,_ as r,v as s,T as t};
1
+ import{f as u,h as c,i as g,l as f}from"./NWNYJ26T.js";import{a as p}from"./XSD5NL7J.js";import{formatUnits as w,parseAbi as l,parseAbiParameters as M,stringToHex as A}from"viem";var y="0xD540F47F214dC7D6D244E62A6aE7e06B586Ef44A",P="https://api.meridian.xyz",h=4663,$=l(["function deposit(bytes32 subaccount,address depositToken,uint256 amount,bytes32 referralCode)","function finalizeWithdraw(address account,bytes32 withdrawDigest) payable"]),m={name:"Meridian",version:"1",chainId:h,verifyingContract:y};function i(n){throw new p(n)}function a(n){return u(n,"Meridian perps returned an invalid object.")}function x(n,e,t=!1,o=256){return(typeof n!="string"||!/^(0|[1-9][0-9]*)$/.test(n)||n.length>78||BigInt(n)>=1n<<BigInt(o)||t&&n==="0")&&i(`Provide ${e} as a ${t?"positive ":""}decimal base-unit string.`),n}function D(n){let e="Provide a nonzero Meridian perps address.";return f(g(n,e),e)}function b(n){return(typeof n!="string"||!/^0x[0-9a-fA-F]{64}$/.test(n))&&i("Provide a bytes32 Meridian perps identifier."),n}function k(n){return(typeof n!="string"||!/^[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}$/i.test(n))&&i("Provide the Meridian API UUID."),n}function B(n="primary"){return typeof n=="string"&&/^0x[0-9a-fA-F]{64}$/.test(n)?b(n):((typeof n!="string"||!/^[A-Za-z0-9_-]{1,32}$/.test(n))&&i("Provide a subaccount name of 1\u201332 ASCII letters, digits, underscores or hyphens, or its bytes32 encoding."),A(n,{size:32}))}function E(n){(typeof n!="string"||n.length>100||!/^(0|[1-9][0-9]*)(\.[0-9]{1,9})?$/.test(n))&&i("Meridian perps returned an invalid D9 decimal.");let[e,t=""]=n.split(".");return BigInt(e)*1000000000n+BigInt(t.padEnd(9,"0"))}function H(n,e){let t=BigInt(x(n,"the token amount",!0)),o=10n**BigInt(Math.abs(e-9));return e>9&&t%o!==0n&&i("Meridian transfers support at most nine decimal places; reduce the token amount precision."),e>=9?t/o:t*o}function z(n){return w(BigInt(x(n,"the D9 amount",!1,128)),9)}async function d(n,e,t,o="api"){let r,s=o==="archive"?"https://archive.meridian.xyz":o==="candles"?"https://trading-view.meridian.xyz":P;try{r=await n.http(new URL(e,s),{...t,redirect:"error",signal:AbortSignal.timeout(3e4)})}catch{return i("Meridian perps request is unavailable. Check order and transfer history before retrying an action.")}r.ok||i(`Meridian perps returned HTTP ${r.status}. Check order and transfer history before retrying an action.`);try{return await r.json()}catch{return i("Meridian perps returned invalid JSON. Check history before retrying an action.")}}async function S(n){let e=a(await d(n,"/v1/rpc/config")),t=a(e.domain);return(t.name!==m.name||t.version!==m.version||t.chainId!==h||!c(t.verifyingContract,y)||Object.keys(t).length!==4)&&i("Meridian perps signing domain changed. Verify the deployment before updating Oak."),a(e.signatureTypes)}function _(n,e,t){let o=n[e];(typeof o!="string"||o.length>2e3)&&i("Meridian perps signing type is unavailable.");let r;try{r=M(o)}catch{return i("Meridian perps signing type is malformed.")}return(r.length!==Object.keys(t).length||r.some(s=>!s.name||t[s.name]!==s.type)||new Set(r.map(s=>s.name)).size!==r.length)&&i("Meridian perps signing fields changed. Verify the protocol before updating Oak."),{[e]:r.map(s=>({name:s.name,type:s.type}))}}async function v(n,e,t,o){let r=a(await d(n,`/v1/subaccount/${k(e)}`));return(r.id!==e||!c(r.account,t)||o&&!c(r.name,o))&&i("Meridian perps subaccount does not match this wallet and name."),b(r.name),(typeof r.registeredBlockNumber!="string"||!/^[0-9]+$/.test(r.registeredBlockNumber))&&i("Meridian perps subaccount registration is pending. Wait for the deposit to settle."),r}async function T(n,e){let t=a(await d(n,`/v1/token/${k(e)}`));return t.id!==e&&i("Meridian perps returned a different token."),t}export{y as a,P as b,h as c,$ as d,m as e,i as f,a as g,x as h,D as i,b as j,k,B as l,E as m,H as n,z as o,d as p,S as q,_ as r,v as s,T as t};
@@ -1 +1 @@
1
- import{c as i,d as T,e as O,f as C}from"./EU3OAJU2.js";import{b as A}from"./PBQSJSZO.js";import{a as F,i as R}from"./FWD4L3CJ.js";import{a as y}from"./XSD5NL7J.js";import{decodeFunctionData as U,encodeFunctionData as N,parseAbi as Q,zeroAddress as S}from"viem";var v=R[4663].pendle.router.address,I=Q(["struct SwapData { uint8 swapType; address extRouter; bytes extCalldata; bool needScale; }","struct TokenInput { address tokenIn; uint256 netTokenIn; address tokenMintSy; address pendleSwap; SwapData swapData; }","struct TokenOutput { address tokenOut; uint256 minTokenOut; address tokenRedeemSy; address pendleSwap; SwapData swapData; }","struct ApproxParams { uint256 guessMin; uint256 guessMax; uint256 guessOffchain; uint256 maxIteration; uint256 eps; }","struct Order { uint256 salt; uint256 expiry; uint256 nonce; uint8 orderType; address token; address YT; address maker; address receiver; uint256 makingAmount; uint256 lnImpliedRate; uint256 failSafeRate; bytes permit; }","struct FillOrderParams { Order order; bytes signature; uint256 makingAmount; }","struct LimitOrderData { address limitRouter; uint256 epsSkipMarket; FillOrderParams[] normalFills; FillOrderParams[] flashFills; bytes optData; }","function swapExactTokenForPt(address receiver,address market,uint256 minPtOut,ApproxParams approx,TokenInput input,LimitOrderData limit) payable returns(uint256,uint256,uint256)","function swapExactPtForToken(address receiver,address market,uint256 netPtIn,TokenOutput output,LimitOrderData limit) returns(uint256,uint256,uint256)","function redeemPyToToken(address receiver,address YT,uint256 netPyIn,TokenOutput output) returns(uint256,uint256)"]);function e(n,t){if(!n)throw new y(`Pendle quote refused: ${t}. Nothing was signed.`)}function a(n,t){return typeof n=="string"&&n.toLowerCase()===t.toLowerCase()}function Y(n,t){return e(Number.isInteger(t)&&t>=0&&t<=1e4,"invalid slippage limit"),n*BigInt(1e4-t)/10000n}function M(n){e(a(n.pendleSwap,S),"unexpected swap contract"),e(n.swapData.swapType===0,"unexpected swap type"),e(a(n.swapData.extRouter,S),"unexpected external router"),e(n.swapData.extCalldata==="0x","unexpected external calldata"),e(n.swapData.needScale===!1,"unexpected swap scaling")}function V(n){e(a(n.limitRouter,S),"limit orders are not supported"),e(n.normalFills.length===0,"unexpected normal limit fills"),e(n.flashFills.length===0,"unexpected flash limit fills"),e(n.optData==="0x","unexpected limit order data"),e(n.epsSkipMarket===0n,"unexpected limit order tolerance")}function E(n,t,d){let g=C(n),s=i(g.tx);e(a(s.to,v),"wrong router"),e(s.value===void 0||s.value==="0","unexpected or malformed ETH value"),e(t.amount>0n&&t.amount<1n<<256n,"invalid requested amount");let P=g.outputs;e(P.length===1,"expected exactly one output token");let h=i(P[0]);e(a(O(h.token),d==="buy"?t.market.pt:t.market.inputToken),"wrong quoted output token");let w=T(h.amount);e(w>0n,"empty quoted output");let q=Y(w,t.slippageBps),D=i(n).requiredApprovals;e(D.length===1,"expected exactly one approval");let p=i(D[0]);e(a(O(p.token),d==="buy"?t.market.inputToken:t.market.pt),"wrong approval token"),e(T(p.amount)===t.amount,"wrong approval amount"),e(p.spender===void 0||a(p.spender,v),"wrong approval spender");let l=i(g.data),m=i(l.fee);e(typeof l.priceImpact=="number"&&Number.isFinite(l.priceImpact),"unreadable price impact"),e(typeof m.usd=="number"&&Number.isFinite(m.usd)&&m.usd>=0,"unreadable trading fee");let o;try{o=$(s.data)}catch{throw new y("Pendle quote refused: unknown or malformed router call. Nothing was signed.")}let c,k;if(d==="buy"){e(o.functionName==="swapExactTokenForPt","wrong buy selector");let[f,x,b,r,u,L]=o.args;e(a(f,t.wallet),"wrong receiver"),e(a(x,t.market.market),"wrong market"),e(a(u.tokenIn,t.market.inputToken),"wrong input token"),e(a(u.tokenMintSy,t.market.inputToken),"wrong SY mint token"),e(u.netTokenIn===t.amount,"wrong input amount"),M(u),V(L),e(r.guessMin<=r.guessOffchain,"invalid lower approximation guess"),e(r.guessOffchain<=r.guessMax,"invalid upper approximation guess"),e(r.maxIteration<=256n,"too many approximation iterations"),c=b,k=N({abi:I,functionName:o.functionName,args:o.args})}else{e(o.functionName==="swapExactPtForToken","wrong sell selector");let[f,x,b,r,u]=o.args;e(a(f,t.wallet),"wrong receiver"),e(a(x,t.market.market),"wrong market"),e(b===t.amount,"wrong PT input amount"),e(a(r.tokenOut,t.market.inputToken),"wrong output token"),e(a(r.tokenRedeemSy,t.market.inputToken),"wrong SY redeem token"),M(r),V(u),c=r.minTokenOut,k=N({abi:I,functionName:o.functionName,args:o.args})}return e(c>=q,"minimum output is below Oak\u2019s slippage floor"),e(k.toLowerCase()===s.data.toLowerCase(),"calldata does not match Oak\u2019s encoding"),{tx:A({to:v,data:k,value:"0",chainId:F,description:d==="buy"?"Buy Pendle PT with the exact input amount.":"Sell Pendle PT to the market input token."}),amountOut:w,minOut:c,feeUsd:m.usd,priceImpact:l.priceImpact}}function $(n){return U({abi:I,data:n})}function G(n,t){return E(n,t,"buy")}function J(n,t){return E(n,t,"sell")}export{v as a,I as b,e as c,a as d,Y as e,G as f,J as g};
1
+ import{c as i,d as T,e as O,f as C}from"./H43RNCX2.js";import{b as A}from"./43LI5NKJ.js";import{a as F,i as R}from"./FWD4L3CJ.js";import{a as y}from"./XSD5NL7J.js";import{decodeFunctionData as U,encodeFunctionData as N,parseAbi as Q,zeroAddress as S}from"viem";var v=R[4663].pendle.router.address,I=Q(["struct SwapData { uint8 swapType; address extRouter; bytes extCalldata; bool needScale; }","struct TokenInput { address tokenIn; uint256 netTokenIn; address tokenMintSy; address pendleSwap; SwapData swapData; }","struct TokenOutput { address tokenOut; uint256 minTokenOut; address tokenRedeemSy; address pendleSwap; SwapData swapData; }","struct ApproxParams { uint256 guessMin; uint256 guessMax; uint256 guessOffchain; uint256 maxIteration; uint256 eps; }","struct Order { uint256 salt; uint256 expiry; uint256 nonce; uint8 orderType; address token; address YT; address maker; address receiver; uint256 makingAmount; uint256 lnImpliedRate; uint256 failSafeRate; bytes permit; }","struct FillOrderParams { Order order; bytes signature; uint256 makingAmount; }","struct LimitOrderData { address limitRouter; uint256 epsSkipMarket; FillOrderParams[] normalFills; FillOrderParams[] flashFills; bytes optData; }","function swapExactTokenForPt(address receiver,address market,uint256 minPtOut,ApproxParams approx,TokenInput input,LimitOrderData limit) payable returns(uint256,uint256,uint256)","function swapExactPtForToken(address receiver,address market,uint256 netPtIn,TokenOutput output,LimitOrderData limit) returns(uint256,uint256,uint256)","function redeemPyToToken(address receiver,address YT,uint256 netPyIn,TokenOutput output) returns(uint256,uint256)"]);function e(n,t){if(!n)throw new y(`Pendle quote refused: ${t}. Nothing was signed.`)}function a(n,t){return typeof n=="string"&&n.toLowerCase()===t.toLowerCase()}function Y(n,t){return e(Number.isInteger(t)&&t>=0&&t<=1e4,"invalid slippage limit"),n*BigInt(1e4-t)/10000n}function M(n){e(a(n.pendleSwap,S),"unexpected swap contract"),e(n.swapData.swapType===0,"unexpected swap type"),e(a(n.swapData.extRouter,S),"unexpected external router"),e(n.swapData.extCalldata==="0x","unexpected external calldata"),e(n.swapData.needScale===!1,"unexpected swap scaling")}function V(n){e(a(n.limitRouter,S),"limit orders are not supported"),e(n.normalFills.length===0,"unexpected normal limit fills"),e(n.flashFills.length===0,"unexpected flash limit fills"),e(n.optData==="0x","unexpected limit order data"),e(n.epsSkipMarket===0n,"unexpected limit order tolerance")}function E(n,t,d){let g=C(n),s=i(g.tx);e(a(s.to,v),"wrong router"),e(s.value===void 0||s.value==="0","unexpected or malformed ETH value"),e(t.amount>0n&&t.amount<1n<<256n,"invalid requested amount");let P=g.outputs;e(P.length===1,"expected exactly one output token");let h=i(P[0]);e(a(O(h.token),d==="buy"?t.market.pt:t.market.inputToken),"wrong quoted output token");let w=T(h.amount);e(w>0n,"empty quoted output");let q=Y(w,t.slippageBps),D=i(n).requiredApprovals;e(D.length===1,"expected exactly one approval");let p=i(D[0]);e(a(O(p.token),d==="buy"?t.market.inputToken:t.market.pt),"wrong approval token"),e(T(p.amount)===t.amount,"wrong approval amount"),e(p.spender===void 0||a(p.spender,v),"wrong approval spender");let l=i(g.data),m=i(l.fee);e(typeof l.priceImpact=="number"&&Number.isFinite(l.priceImpact),"unreadable price impact"),e(typeof m.usd=="number"&&Number.isFinite(m.usd)&&m.usd>=0,"unreadable trading fee");let o;try{o=$(s.data)}catch{throw new y("Pendle quote refused: unknown or malformed router call. Nothing was signed.")}let c,k;if(d==="buy"){e(o.functionName==="swapExactTokenForPt","wrong buy selector");let[f,x,b,r,u,L]=o.args;e(a(f,t.wallet),"wrong receiver"),e(a(x,t.market.market),"wrong market"),e(a(u.tokenIn,t.market.inputToken),"wrong input token"),e(a(u.tokenMintSy,t.market.inputToken),"wrong SY mint token"),e(u.netTokenIn===t.amount,"wrong input amount"),M(u),V(L),e(r.guessMin<=r.guessOffchain,"invalid lower approximation guess"),e(r.guessOffchain<=r.guessMax,"invalid upper approximation guess"),e(r.maxIteration<=256n,"too many approximation iterations"),c=b,k=N({abi:I,functionName:o.functionName,args:o.args})}else{e(o.functionName==="swapExactPtForToken","wrong sell selector");let[f,x,b,r,u]=o.args;e(a(f,t.wallet),"wrong receiver"),e(a(x,t.market.market),"wrong market"),e(b===t.amount,"wrong PT input amount"),e(a(r.tokenOut,t.market.inputToken),"wrong output token"),e(a(r.tokenRedeemSy,t.market.inputToken),"wrong SY redeem token"),M(r),V(u),c=r.minTokenOut,k=N({abi:I,functionName:o.functionName,args:o.args})}return e(c>=q,"minimum output is below Oak\u2019s slippage floor"),e(k.toLowerCase()===s.data.toLowerCase(),"calldata does not match Oak\u2019s encoding"),{tx:A({to:v,data:k,value:"0",chainId:F,description:d==="buy"?"Buy Pendle PT with the exact input amount.":"Sell Pendle PT to the market input token."}),amountOut:w,minOut:c,feeUsd:m.usd,priceImpact:l.priceImpact}}function $(n){return U({abi:I,data:n})}function G(n,t){return E(n,t,"buy")}function J(n,t){return E(n,t,"sell")}export{v as a,I as b,e as c,a as d,Y as e,G as f,J as g};
@@ -1 +1 @@
1
- import{a as k}from"./4TQQH7N6.js";import{a as U}from"./7WQEPZJY.js";import{b as I}from"./I4TGMF2C.js";import{c as $}from"./WOEKXQAH.js";import{g as w}from"./MFCPL6LF.js";import{c as G}from"./XSRIJUFU.js";import{a as b}from"./ECWGKLBW.js";import{b as E}from"./Z4SRGAVL.js";import{a as h}from"./PBQSJSZO.js";import{a as C}from"./5ZLOCQA4.js";import{g as P,n as y}from"./5KUWLUPM.js";import{a as s,d as D,i as S}from"./FWD4L3CJ.js";import{a as m}from"./XSD5NL7J.js";import{encodeFunctionData as v,parseAbi as j}from"viem";var a=S[s].vaults.netnet.address,d={address:S[s].tokens.USDG.address,chainId:s,decimals:D,symbol:"USDG"},N={address:a,chainId:s,decimals:18,symbol:"nnUSDG"},o=j(["function asset() view returns (address)","function decimals() view returns (uint8)","function totalAssets() view returns (uint256)","function balanceOf(address owner) view returns (uint256)","function convertToAssets(uint256 shares) view returns (uint256)","function deposit(uint256 assets,address receiver) returns (uint256 shares)","function withdraw(uint256 assets,address receiver,address owner) returns (uint256 shares)","function redeem(uint256 shares,address receiver,address owner) returns (uint256 assets)"]),_=C("Positive USDG amount in integer base units (6 decimals)."),O="Preview amounts are estimates; these ERC-4626 calls have no on-chain minimum output argument. No transaction was sent.";function M(e){return y(e,"Amount must be positive and fit in uint256.",{notString:"Provide an integer amount string in base units.",positive:!0})}function g(e,f){if(Object.keys(e).some(l=>!f.includes(l)))throw new m("Unsupported NetNet argument.")}var q=e=>{async function f(t){try{return await t()}catch(n){throw new m(e.plainError(n))}}async function l(){let t=e.clientFor(s);if(await t.getChainId()!==s)throw new m("NetNet requires chain 4663.");let[n,r]=await Promise.all([t.readContract({address:a,abi:o,functionName:"asset"}),t.readContract({address:a,abi:o,functionName:"decimals"})]);if(!P(n,d.address))throw new m("NetNet does not report the pinned USDG asset.");if(r!==N.decimals)throw new m("NetNet share decimals do not match the pinned metadata.");return t}async function A(t,n,r){let i=await e.preview(t,n),p=i.changes.map(({token:c,amount:u})=>{let T=u.startsWith("-");return`${T?"-":"+"}${e.formatAmount(T?u.slice(1):u,c.decimals)} ${c.symbol}`}).join(", ");return{txs:t,preview:i,summary:`${r} ${i.summary} ${p?`Estimated changes: ${p}. `:""}${O}`}}async function R(t){return f(async()=>{h(t);let n=await l(),r=await n.readContract({address:a,abi:o,functionName:"balanceOf",args:[t]});if(r===0n)return[];let i=await n.readContract({address:a,abi:o,functionName:"convertToAssets",args:[r]});return[{module:"netnet",id:`${s}:${a}`,chainId:s,assets:[{token:{...d},amount:i.toString()}],description:`${e.formatAmount(r.toString(),N.decimals)} nnUSDG shares in NetNet Credit (${a}); underlying USDG is an estimate, not a liquidity guarantee.`}]})}return{positions:R,tools:[{name:"netnet_list",inputSchema:{type:"object",properties:{},additionalProperties:!1},execute:t=>f(async()=>{g(t,[]);let r=await(await l()).readContract({address:a,abi:o,functionName:"totalAssets"});return[{address:a,name:"NetNet Credit",chainId:s,asset:{...d},shares:{...N},totalAssets:{token:{...d},amount:r.toString()}}]})},{name:"netnet_deposit",inputSchema:{type:"object",description:"Deposit USDG in base units (1 USDG = 1000000) for nnUSDG vault shares. Exit with netnet_withdraw; check positions after confirmation.",properties:{amount:_},required:["amount"],additionalProperties:!1},execute:(t,n)=>f(async()=>{g(t,["amount"]),h(n);let r=M(t.amount);await l();let i=[e.approval(d.address,a,r.toString(),s),e.unsignedTx({to:a,data:v({abi:o,functionName:"deposit",args:[r,n]}),value:"0",chainId:s,description:`Deposit ${e.formatAmount(r.toString(),d.decimals)} USDG into NetNet Credit.`})];return A(i,n,"Approve the exact USDG amount, then deposit into NetNet Credit.")})},{name:"netnet_withdraw",inputSchema:{type:"object",description:"Withdraw USDG in 6-decimal base units, or amount max to redeem every nnUSDG share for USDG. Check positions after confirmation.",properties:{amount:{anyOf:[_,{const:"max",description:"Redeem the fresh full nnUSDG share balance."}]}},required:["amount"],additionalProperties:!1},execute:(t,n)=>f(async()=>{g(t,["amount"]),h(n);let r=t.amount==="max"?void 0:M(t.amount),i=await l(),p,c;if(r===void 0){let u=await i.readContract({address:a,abi:o,functionName:"balanceOf",args:[n]});if(u===0n)throw new m("This wallet has no NetNet shares to redeem.");p=v({abi:o,functionName:"redeem",args:[u,n,n]}),c=`Redeem all ${e.formatAmount(u.toString(),N.decimals)} nnUSDG shares for USDG.`}else p=v({abi:o,functionName:"withdraw",args:[r,n,n]}),c=`Withdraw ${e.formatAmount(r.toString(),d.decimals)} USDG from NetNet Credit (unmeasured on the recorded fork; full exit uses amount "max" redeem).`;return A([e.unsignedTx({to:a,data:p,value:"0",chainId:s,description:c})],n,c)})}]}};function ie(e){return E("netnet",[q(e),w(e),$(e),G(e),k(e),U(e),I(e),{tools:b(e,"netnet",[{vault:a,asset:d}])}])}export{q as a,ie as b};
1
+ import{b as I}from"./BJ2VGRF4.js";import{c as $}from"./T3AJSQYT.js";import{g as w}from"./6OGDTEGH.js";import{a as k}from"./P3S4BR5G.js";import{a as U}from"./QO3KCJMP.js";import{c as G}from"./XSRIJUFU.js";import{a as b}from"./INOZIE55.js";import{b as E}from"./SPJCSEKP.js";import{a as h}from"./43LI5NKJ.js";import{a as C}from"./66F5ZH34.js";import{g as P,n as y}from"./NWNYJ26T.js";import{a as s,d as D,i as S}from"./FWD4L3CJ.js";import{a as m}from"./XSD5NL7J.js";import{encodeFunctionData as v,parseAbi as j}from"viem";var a=S[s].vaults.netnet.address,d={address:S[s].tokens.USDG.address,chainId:s,decimals:D,symbol:"USDG"},N={address:a,chainId:s,decimals:18,symbol:"nnUSDG"},o=j(["function asset() view returns (address)","function decimals() view returns (uint8)","function totalAssets() view returns (uint256)","function balanceOf(address owner) view returns (uint256)","function convertToAssets(uint256 shares) view returns (uint256)","function deposit(uint256 assets,address receiver) returns (uint256 shares)","function withdraw(uint256 assets,address receiver,address owner) returns (uint256 shares)","function redeem(uint256 shares,address receiver,address owner) returns (uint256 assets)"]),_=C("Positive USDG amount in integer base units (6 decimals)."),O="Preview amounts are estimates; these ERC-4626 calls have no on-chain minimum output argument. No transaction was sent.";function M(e){return y(e,"Amount must be positive and fit in uint256.",{notString:"Provide an integer amount string in base units.",positive:!0})}function g(e,f){if(Object.keys(e).some(l=>!f.includes(l)))throw new m("Unsupported NetNet argument.")}var q=e=>{async function f(t){try{return await t()}catch(n){throw new m(e.plainError(n))}}async function l(){let t=e.clientFor(s);if(await t.getChainId()!==s)throw new m("NetNet requires chain 4663.");let[n,r]=await Promise.all([t.readContract({address:a,abi:o,functionName:"asset"}),t.readContract({address:a,abi:o,functionName:"decimals"})]);if(!P(n,d.address))throw new m("NetNet does not report the pinned USDG asset.");if(r!==N.decimals)throw new m("NetNet share decimals do not match the pinned metadata.");return t}async function A(t,n,r){let i=await e.preview(t,n),p=i.changes.map(({token:c,amount:u})=>{let T=u.startsWith("-");return`${T?"-":"+"}${e.formatAmount(T?u.slice(1):u,c.decimals)} ${c.symbol}`}).join(", ");return{txs:t,preview:i,summary:`${r} ${i.summary} ${p?`Estimated changes: ${p}. `:""}${O}`}}async function R(t){return f(async()=>{h(t);let n=await l(),r=await n.readContract({address:a,abi:o,functionName:"balanceOf",args:[t]});if(r===0n)return[];let i=await n.readContract({address:a,abi:o,functionName:"convertToAssets",args:[r]});return[{module:"netnet",id:`${s}:${a}`,chainId:s,assets:[{token:{...d},amount:i.toString()}],description:`${e.formatAmount(r.toString(),N.decimals)} nnUSDG shares in NetNet Credit (${a}); underlying USDG is an estimate, not a liquidity guarantee.`}]})}return{positions:R,tools:[{name:"netnet_list",inputSchema:{type:"object",properties:{},additionalProperties:!1},execute:t=>f(async()=>{g(t,[]);let r=await(await l()).readContract({address:a,abi:o,functionName:"totalAssets"});return[{address:a,name:"NetNet Credit",chainId:s,asset:{...d},shares:{...N},totalAssets:{token:{...d},amount:r.toString()}}]})},{name:"netnet_deposit",inputSchema:{type:"object",description:"Deposit USDG in base units (1 USDG = 1000000) for nnUSDG vault shares. Exit with netnet_withdraw; check positions after confirmation.",properties:{amount:_},required:["amount"],additionalProperties:!1},execute:(t,n)=>f(async()=>{g(t,["amount"]),h(n);let r=M(t.amount);await l();let i=[e.approval(d.address,a,r.toString(),s),e.unsignedTx({to:a,data:v({abi:o,functionName:"deposit",args:[r,n]}),value:"0",chainId:s,description:`Deposit ${e.formatAmount(r.toString(),d.decimals)} USDG into NetNet Credit.`})];return A(i,n,"Approve the exact USDG amount, then deposit into NetNet Credit.")})},{name:"netnet_withdraw",inputSchema:{type:"object",description:"Withdraw USDG in 6-decimal base units, or amount max to redeem every nnUSDG share for USDG. Check positions after confirmation.",properties:{amount:{anyOf:[_,{const:"max",description:"Redeem the fresh full nnUSDG share balance."}]}},required:["amount"],additionalProperties:!1},execute:(t,n)=>f(async()=>{g(t,["amount"]),h(n);let r=t.amount==="max"?void 0:M(t.amount),i=await l(),p,c;if(r===void 0){let u=await i.readContract({address:a,abi:o,functionName:"balanceOf",args:[n]});if(u===0n)throw new m("This wallet has no NetNet shares to redeem.");p=v({abi:o,functionName:"redeem",args:[u,n,n]}),c=`Redeem all ${e.formatAmount(u.toString(),N.decimals)} nnUSDG shares for USDG.`}else p=v({abi:o,functionName:"withdraw",args:[r,n,n]}),c=`Withdraw ${e.formatAmount(r.toString(),d.decimals)} USDG from NetNet Credit (unmeasured on the recorded fork; full exit uses amount "max" redeem).`;return A([e.unsignedTx({to:a,data:p,value:"0",chainId:s,description:c})],n,c)})}]}};function ie(e){return E("netnet",[q(e),w(e),$(e),G(e),k(e),U(e),I(e),{tools:b(e,"netnet",[{vault:a,asset:d}])}])}export{q as a,ie as b};
@@ -1 +1 @@
1
- import{a as E}from"./MYFAKCQI.js";import{e as f}from"./5KUWLUPM.js";import{a as k}from"./XSD5NL7J.js";import{createHash as N,createPublicKey as I,verify as x}from"node:crypto";import{getAddress as R,isAddress as C}from"viem";var v="https://dashboard.agentwormhole.com",h=4663,$="name,symbol,description,logo",L="wormhole-x402@0.11.0",D=5e3,A=65536,O="MCowBQYDK2VwAyEAgzc6812eT397nvzP/off3M93Z+yM5/BmEefSnRnS7o0=",B=I({key:Buffer.from(O,"base64"),format:"der",type:"spki"}),P=N("sha256").update(Buffer.from(O,"base64")).digest("hex"),S=/^[0-9a-f]{64}$/,H=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/,b=["v","metadata_hash","scope","chain_id","token","bundle_hash","verdict","codes","ruleset","issued_at","expires_at"];function z(e){return JSON.stringify(Object.fromEntries(b.map(t=>[t,e[t]])))}function J(e){return f(e)&&Object.keys(e).length===b.length&&b.every(t=>Object.hasOwn(e,t))&&e.v===2&&typeof e.metadata_hash=="string"&&S.test(e.metadata_hash)&&typeof e.bundle_hash=="string"&&S.test(e.bundle_hash)&&typeof e.scope=="string"&&Number.isSafeInteger(e.chain_id)&&typeof e.token=="string"&&/^0x[0-9a-f]{40}$/.test(e.token)&&["clean_by_rules","flagged"].includes(String(e.verdict))&&Array.isArray(e.codes)&&e.codes.length<=100&&e.codes.every(t=>typeof t=="string"&&/^[A-Z0-9_-]{1,40}$/.test(t))&&typeof e.ruleset=="string"&&/^wormhole-x402@\d+\.\d+\.\d+$/.test(e.ruleset)&&[e.issued_at,e.expires_at].every(t=>typeof t=="string"&&H.test(t)&&Number.isFinite(Date.parse(t))&&new Date(t).toISOString()===t)}async function K(e,t){let i=e.headers.get("content-length");if(i&&(!/^\d+$/.test(i)||Number(i)>A))throw e.body?.cancel().catch(()=>{}),new Error("oversized_response");let a=e.body?.getReader();if(!a)throw new Error("invalid_response");let d=[],s=0,c=()=>{a.cancel().catch(()=>{})};t.addEventListener("abort",c,{once:!0});try{for(;;){if(t.aborted)throw new Error("timeout");let{value:u,done:l}=await a.read();if(l)break;if(s+=u.byteLength,s>A)throw new Error("oversized_response");d.push(u)}if(t.aborted)throw new Error("timeout");return JSON.parse(Buffer.concat(d).toString("utf8"))}finally{t.removeEventListener("abort",c),a.cancel().catch(()=>{}),a.releaseLock()}}async function F(e,t){if(!f(t)||Object.keys(t).length!==1||typeof t.token!="string"||!C(t.token,{strict:!0})||t.token.toLowerCase()==="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee")throw new k("Provide only token: a valid ERC-20 contract address on Robinhood Chain 4663.");let i=R(t.token),a=`${v}/api/v1/token/${h}/${i.toLowerCase()}`,d={token:{address:i,chainId:h},contentBound:!1,mutationCountAuthenticated:!1,attribution:{provider:"Agent Wormhole",source:a,page:`${v}/t/${h}/${i.toLowerCase()}`},keyId:P,unknowns:["Fresh full metadata is not available in the free response; description/logo and current displayed bytes are not bound.","The key was bootstrapped from the same origin, not independently authenticated; key rotation policy is unknown.","No contract code, economics, sellability, linked pages or image bytes were checked. Rules are evadable."]},s=(o,n=!1)=>({...d,status:"unchecked",verdict:null,signatureValid:n,codes:[],reason:o}),c=new AbortController,u,l=new Promise((o,n)=>{u=setTimeout(()=>{c.abort(),n(new Error("timeout"))},D)});try{return await Promise.race([l,(async()=>{let o=await e(a,{method:"GET",redirect:"error",credentials:"omit",headers:{accept:"application/json"},signal:c.signal}).catch(y=>{if(y instanceof E)return y.response;throw y});if(c.signal.aborted)throw new Error("timeout");if(o.redirected)return o.body?.cancel().catch(()=>{}),s("redirect_refused");if(!o.ok)return o.body?.cancel().catch(()=>{}),o.status===404?{...d,status:"unobserved",verdict:null,signatureValid:!1,codes:[],reason:"No attestation. Absence is not a verdict."}:s(o.status===429?"rate_limited":`http_${o.status}`);let n=await K(o,c.signal);if(!f(n)||!J(n.attestation)||typeof n.signature!="string"||!/^[A-Za-z0-9+/]{86}==$/.test(n.signature))return s("invalid_attestation");let r=n.attestation,m=Buffer.from(n.signature,"base64");if(m.length!==64||m.toString("base64")!==n.signature||!x(null,Buffer.from(z(r)),B,m))return s("invalid_signature");if(r.chain_id!==h||r.token!==i.toLowerCase()||r.scope!==$)return s("identity_or_scope_mismatch",!0);if(N("sha256").update(JSON.stringify({v:2,chainId:h,address:r.token,metadataHash:r.metadata_hash})).digest("hex")!==r.bundle_hash)return s("bundle_mismatch",!0);if(n.observed!==!0||n.chain_id!==h||typeof n.token!="string"||n.token.toLowerCase()!==r.token||n.bundle_hash!==r.bundle_hash||n.verdict!==r.verdict||JSON.stringify(n.codes)!==JSON.stringify(r.codes))return s("record_mismatch",!0);let p=Date.parse(r.issued_at),g=Date.parse(r.expires_at),w=Date.now();if(p>w||g<=p||g-p>864e5)return s("invalid_time_window",!0);let _=[...w>=g?["expired"]:[],...r.ruleset!==L?["unrecognized_ruleset"]:[],...n.attestation_current!==!0||n.re_attestation!=="current"?["service_reports_not_current"]:[]],T={attestation:r,signature:n.signature,scope:r.scope,metadataHash:r.metadata_hash,bundleHash:r.bundle_hash,ruleset:r.ruleset,issuedAt:r.issued_at,expiresAt:r.expires_at,bundleIdentityValid:!0};return{...d,status:_.length?"stale":"verified",verdict:_.length?null:r.verdict,signatureValid:!0,codes:r.codes,evidence:T,staleReasons:_,mutationCount:Number.isSafeInteger(n.mutations)&&Number(n.mutations)>=0?n.mutations:null,notice:"A verified metadata snapshot is not a safety certificate. Unsigned service history and freshness do not prove no mutation since the scan."}})()])}catch(o){return s(c.signal.aborted||o instanceof Error&&o.message==="timeout"?"timeout":"unavailable_or_malformed_response")}finally{u!==void 0&&clearTimeout(u)}}export{D as a,F as b};
1
+ import{a as E}from"./VEQBHI6O.js";import{e as f}from"./NWNYJ26T.js";import{a as k}from"./XSD5NL7J.js";import{createHash as N,createPublicKey as I,verify as x}from"node:crypto";import{getAddress as R,isAddress as C}from"viem";var v="https://dashboard.agentwormhole.com",h=4663,$="name,symbol,description,logo",L="wormhole-x402@0.11.0",D=5e3,A=65536,O="MCowBQYDK2VwAyEAgzc6812eT397nvzP/off3M93Z+yM5/BmEefSnRnS7o0=",B=I({key:Buffer.from(O,"base64"),format:"der",type:"spki"}),P=N("sha256").update(Buffer.from(O,"base64")).digest("hex"),S=/^[0-9a-f]{64}$/,H=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/,b=["v","metadata_hash","scope","chain_id","token","bundle_hash","verdict","codes","ruleset","issued_at","expires_at"];function z(e){return JSON.stringify(Object.fromEntries(b.map(t=>[t,e[t]])))}function J(e){return f(e)&&Object.keys(e).length===b.length&&b.every(t=>Object.hasOwn(e,t))&&e.v===2&&typeof e.metadata_hash=="string"&&S.test(e.metadata_hash)&&typeof e.bundle_hash=="string"&&S.test(e.bundle_hash)&&typeof e.scope=="string"&&Number.isSafeInteger(e.chain_id)&&typeof e.token=="string"&&/^0x[0-9a-f]{40}$/.test(e.token)&&["clean_by_rules","flagged"].includes(String(e.verdict))&&Array.isArray(e.codes)&&e.codes.length<=100&&e.codes.every(t=>typeof t=="string"&&/^[A-Z0-9_-]{1,40}$/.test(t))&&typeof e.ruleset=="string"&&/^wormhole-x402@\d+\.\d+\.\d+$/.test(e.ruleset)&&[e.issued_at,e.expires_at].every(t=>typeof t=="string"&&H.test(t)&&Number.isFinite(Date.parse(t))&&new Date(t).toISOString()===t)}async function K(e,t){let i=e.headers.get("content-length");if(i&&(!/^\d+$/.test(i)||Number(i)>A))throw e.body?.cancel().catch(()=>{}),new Error("oversized_response");let a=e.body?.getReader();if(!a)throw new Error("invalid_response");let d=[],s=0,c=()=>{a.cancel().catch(()=>{})};t.addEventListener("abort",c,{once:!0});try{for(;;){if(t.aborted)throw new Error("timeout");let{value:u,done:l}=await a.read();if(l)break;if(s+=u.byteLength,s>A)throw new Error("oversized_response");d.push(u)}if(t.aborted)throw new Error("timeout");return JSON.parse(Buffer.concat(d).toString("utf8"))}finally{t.removeEventListener("abort",c),a.cancel().catch(()=>{}),a.releaseLock()}}async function F(e,t){if(!f(t)||Object.keys(t).length!==1||typeof t.token!="string"||!C(t.token,{strict:!0})||t.token.toLowerCase()==="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee")throw new k("Provide only token: a valid ERC-20 contract address on Robinhood Chain 4663.");let i=R(t.token),a=`${v}/api/v1/token/${h}/${i.toLowerCase()}`,d={token:{address:i,chainId:h},contentBound:!1,mutationCountAuthenticated:!1,attribution:{provider:"Agent Wormhole",source:a,page:`${v}/t/${h}/${i.toLowerCase()}`},keyId:P,unknowns:["Fresh full metadata is not available in the free response; description/logo and current displayed bytes are not bound.","The key was bootstrapped from the same origin, not independently authenticated; key rotation policy is unknown.","No contract code, economics, sellability, linked pages or image bytes were checked. Rules are evadable."]},s=(o,n=!1)=>({...d,status:"unchecked",verdict:null,signatureValid:n,codes:[],reason:o}),c=new AbortController,u,l=new Promise((o,n)=>{u=setTimeout(()=>{c.abort(),n(new Error("timeout"))},D)});try{return await Promise.race([l,(async()=>{let o=await e(a,{method:"GET",redirect:"error",credentials:"omit",headers:{accept:"application/json"},signal:c.signal}).catch(y=>{if(y instanceof E)return y.response;throw y});if(c.signal.aborted)throw new Error("timeout");if(o.redirected)return o.body?.cancel().catch(()=>{}),s("redirect_refused");if(!o.ok)return o.body?.cancel().catch(()=>{}),o.status===404?{...d,status:"unobserved",verdict:null,signatureValid:!1,codes:[],reason:"No attestation. Absence is not a verdict."}:s(o.status===429?"rate_limited":`http_${o.status}`);let n=await K(o,c.signal);if(!f(n)||!J(n.attestation)||typeof n.signature!="string"||!/^[A-Za-z0-9+/]{86}==$/.test(n.signature))return s("invalid_attestation");let r=n.attestation,m=Buffer.from(n.signature,"base64");if(m.length!==64||m.toString("base64")!==n.signature||!x(null,Buffer.from(z(r)),B,m))return s("invalid_signature");if(r.chain_id!==h||r.token!==i.toLowerCase()||r.scope!==$)return s("identity_or_scope_mismatch",!0);if(N("sha256").update(JSON.stringify({v:2,chainId:h,address:r.token,metadataHash:r.metadata_hash})).digest("hex")!==r.bundle_hash)return s("bundle_mismatch",!0);if(n.observed!==!0||n.chain_id!==h||typeof n.token!="string"||n.token.toLowerCase()!==r.token||n.bundle_hash!==r.bundle_hash||n.verdict!==r.verdict||JSON.stringify(n.codes)!==JSON.stringify(r.codes))return s("record_mismatch",!0);let p=Date.parse(r.issued_at),g=Date.parse(r.expires_at),w=Date.now();if(p>w||g<=p||g-p>864e5)return s("invalid_time_window",!0);let _=[...w>=g?["expired"]:[],...r.ruleset!==L?["unrecognized_ruleset"]:[],...n.attestation_current!==!0||n.re_attestation!=="current"?["service_reports_not_current"]:[]],T={attestation:r,signature:n.signature,scope:r.scope,metadataHash:r.metadata_hash,bundleHash:r.bundle_hash,ruleset:r.ruleset,issuedAt:r.issued_at,expiresAt:r.expires_at,bundleIdentityValid:!0};return{...d,status:_.length?"stale":"verified",verdict:_.length?null:r.verdict,signatureValid:!0,codes:r.codes,evidence:T,staleReasons:_,mutationCount:Number.isSafeInteger(n.mutations)&&Number(n.mutations)>=0?n.mutations:null,notice:"A verified metadata snapshot is not a safety certificate. Unsigned service history and freshness do not prove no mutation since the scan."}})()])}catch(o){return s(c.signal.aborted||o instanceof Error&&o.message==="timeout"?"timeout":"unavailable_or_malformed_response")}finally{u!==void 0&&clearTimeout(u)}}export{D as a,F as b};
@@ -1,2 +1,2 @@
1
- import{c as O}from"./DVVFT42J.js";import{b as w,i as D}from"./IMRXZ7JB.js";import{d as S,e as x,f as C,g as f}from"./SK2VBNAU.js";import{a as m}from"./FWD4L3CJ.js";import{a as P}from"./XSD5NL7J.js";var I=/^PT-[\p{L}\p{N}._-]{1,40}$/u,L=10n**18n,N=t=>new Date(t*1e3).toISOString().slice(0,10);async function E(t,o,e){let i=await f(t,e.map(s=>({address:s.pt,abi:C,functionName:"balanceOf",args:[o]}))),a=new Map;return e.forEach((s,l)=>{let n=i[l];if(!n.ok||typeof n.value!="bigint")throw new P("Oak couldn't read every Pendle balance, so it won't show this wallet's terms as complete.");a.set(s.pt.toLowerCase(),n.value)}),a}function M(t,o,e){let[i,a=""]=t.formatAmount(o.toString(),e).split("."),s=a.slice(0,6).replace(/0+$/,"");return s?`${i}.${s}`:i}function Y(t){let o=`Your fixed term on Pendle ended on ${t.endDate}.`;if(t.kind==="stable"){let a=t.unitAmount?`Your ${t.ptAmount} tokens are worth ${t.unitAmount} USDG now.`:`Your ${t.ptAmount} tokens can be cashed out to USDG now.`;return`${o} ${a}
1
+ import{c as O}from"./MRMR4QHA.js";import{b as w,i as D}from"./Q42YI3EP.js";import{d as S,e as x,f as C,g as f}from"./SK2VBNAU.js";import{a as m}from"./FWD4L3CJ.js";import{a as P}from"./XSD5NL7J.js";var I=/^PT-[\p{L}\p{N}._-]{1,40}$/u,L=10n**18n,N=t=>new Date(t*1e3).toISOString().slice(0,10);async function E(t,o,e){let i=await f(t,e.map(s=>({address:s.pt,abi:C,functionName:"balanceOf",args:[o]}))),a=new Map;return e.forEach((s,l)=>{let n=i[l];if(!n.ok||typeof n.value!="bigint")throw new P("Oak couldn't read every Pendle balance, so it won't show this wallet's terms as complete.");a.set(s.pt.toLowerCase(),n.value)}),a}function M(t,o,e){let[i,a=""]=t.formatAmount(o.toString(),e).split("."),s=a.slice(0,6).replace(/0+$/,"");return s?`${i}.${s}`:i}function Y(t){let o=`Your fixed term on Pendle ended on ${t.endDate}.`;if(t.kind==="stable"){let a=t.unitAmount?`Your ${t.ptAmount} tokens are worth ${t.unitAmount} USDG now.`:`Your ${t.ptAmount} tokens can be cashed out to USDG now.`;return`${o} ${a}
2
2
  Want me to cash out to USDG, or start a new term? One "yes" is enough; say "cash out" or "new term".`}let e=t.unitAddress?`${t.unitSymbol} (token ${t.unitAddress})`:t.unitSymbol,i=t.unitAmount?`Your ${t.ptAmount} tokens pay out about ${t.unitAmount} ${e} now.`:`Your ${t.ptAmount} tokens can be cashed out for ${e} now.`;return`${o} ${i} Want me to cash out and swap that to USDG, or start a new term? One "yes" is enough.`}async function T(t,o){let e=new Map,i=await f(t,o.map(n=>({address:n.facts.verified.yt,abi:x,functionName:"pyIndexStored"}))),a=o.map((n,d)=>{let r=i[d];if(!r.ok||typeof r.value!="bigint")return;let p=r.value>n.facts.syExchangeRate?r.value:n.facts.syExchangeRate;return p>0n?n.balance*L/p:void 0}),s=o.flatMap((n,d)=>a[d]===void 0?[]:[{item:n,amount:a[d]}]),l=await f(t,s.map(({item:n,amount:d})=>({address:n.facts.verified.sy,abi:S,functionName:"previewRedeem",args:[n.facts.verified.inputToken,d]})));return s.forEach(({item:n},d)=>{let r=l[d];r.ok&&typeof r.value=="bigint"&&e.set(n.row.market.toLowerCase(),r.value)}),e}async function F(t,o,e={}){let i=t.clientFor(m),a=e.now!==void 0?{now:e.now}:{},s=await D(t,{allowChain:!0,...a,...e.signal?{signal:e.signal}:{}});w(e.signal);let l=await E(i,o,s.rows),n=s.rows.filter(u=>(l.get(u.pt.toLowerCase())??0n)>0n);w(e.signal);let{ok:d}=await O(i,n,a),r=d.map(u=>({...u,balance:l.get(u.row.pt.toLowerCase())}));w(e.signal);let p=await T(i,r.filter(u=>u.facts.verified.expired));return r.map(({row:u,facts:b,balance:k})=>{let c=b.verified,y=M(t,k,c.ptDecimals),g=N(c.expiry),h=I.test(b.ptSymbol)?b.ptSymbol:"PT",A={module:"pendle",id:`${m}:${c.pt}`,chainId:m,assets:[{token:{address:c.pt,chainId:m,symbol:h,decimals:c.ptDecimals},amount:k.toString()}]};if(!c.expired)return{...A,description:`${y} ${h} in the Pendle term ending ${g}. It pays out at the end date if held until then; leaving early sells at that day's market price.`};let $=p.get(u.market.toLowerCase()),v=$===void 0?void 0:M(t,$,c.inputDecimals),R=Y({kind:c.kind,endDate:g,ptAmount:y,unitSymbol:c.inputSymbol,...v!==void 0?{unitAmount:v}:{},...u.source==="chain"?{unitAddress:c.inputToken}:{}});return{...A,matured:!0,oakNotice:R,description:`${y} ${h} in a Pendle term that ended ${g}; ready to cash out.`}})}export{N as a,E as b,M as c,Y as d,F as e};
@@ -1 +1 @@
1
- import{a as ne,b as re,d as ae,e as se,f as ce,g as de}from"./PQC5635W.js";import{A as J}from"./WPAF55SP.js";import{c as te,d as ie}from"./NA7R6J5N.js";import{a as m,e as T,f as q,h as _,i as E,j as n,k as oe,l as B,m as x,n as C,o as P,p as A,q as I,r as M,t as N}from"./YEXUSRIZ.js";import{f as Y,g as Z,i as ee}from"./MQK6OP7S.js";import{a as W}from"./HTXKERNS.js";import{a as s}from"./XSD5NL7J.js";import{encodeFunctionData as fe,zeroAddress as S}from"viem";var le=["hookr_lp_add","hookr_lp_remove","hookr_lp_collect"],ye=t=>le.includes(t),F=t=>({type:"object",additionalProperties:!1,properties:t,required:Object.keys(t)}),j=ce.oneOf[0],ue={hookr_lp_add:F({target:F({position:j}),liquidity:m,amount0Max:m,amount1Max:m,deadline:m}),hookr_lp_remove:F({position:j,liquidity:m,amount0Min:m,amount1Min:m,deadline:m}),hookr_lp_collect:F({position:j,deadline:m})};function he(t,r){if(!ye(t))throw new s("Choose a supported Hookr family LP action.");let d=ue[t],i=T(r,Object.keys(d.properties),d.required),e=t==="hookr_lp_add",l=t==="hookr_lp_collect",o=de(e?T(i.target,["position"],["position"]).position:i.position),a=l?0n:q(i.liquidity,127);if(!l&&!a)throw new s("Hookr add/remove liquidity must be an exact positive integer; use collect for fees only.");let v=l?0n:q(i[e?"amount0Max":"amount0Min"],e?128:256),k=l?0n:q(i[e?"amount1Max":"amount1Min"],e?128:256);return{position:o,adding:e,collecting:l,liquidity:a,bound0:v,bound1:k,deadline:q(i.deadline,64)}}async function ke(t,r,d){let{block:i,poolId:e,position:l,pc:o,core:a,role:v}=r,k=(p,L=[])=>A(t,a,P(v),p,L,i.number),[$,H,O,R]=await Promise.all([k("config",[e]),A(t,M,P("registry"),"admission",[I,a],i.number),k("configSchemaHash"),k("recaptureConfig",[e])]),y=x($),u=x(H),f=x(u.caps),g=x(o.caps);if(u.implementation!==a||u.codeHash!==Y(a).codeHash||u.schemaHash!==_(O)||n(u.kind,8)!==0n||!n(u.gasLimit,32)||n(f.maxLpFeePips,24)>600000n||n(f.maxQuoteTakePips,24)>=1000000n||n(f.maxSubjectTakeBps,16)>1000n)throw new s("Hookr core admission or fee caps are unavailable or outside the reviewed limits.");let h=n(g.maxLpFeePips,24),b=n(g.maxQuoteTakePips,24),c=n(g.maxSubjectTakeBps,16),w=n(y.burnBps,16),pe=n(y.lpBps,16),D=n(y.protocolShareBps,16);if(h>600000n||h>n(f.maxLpFeePips,24)||n(o.baseLpFeePips,24)>h||n(y.maxFeePips,24)>h||b>n(f.maxQuoteTakePips,24)||c>n(f.maxSubjectTakeBps,16)||w+pe>1000n||D<2000n||D>5000n)throw new s("Hookr pool fee settings exceed the reviewed entry caps. Exit tools remain available.");let U=E(o.advisory),z={gated:!1};if(U!==S){if(U!==N||o.advisoryFailOpen!==!1||n(o.advisoryPhases,8)!==1n)throw new s("Hookr entry requires the reviewed fail-closed agent gate configuration.");await Z(t,i.number,[N]);let p=await te(t,i.number,d),L=await ie(t,i.number,e,l.launcher,U);if(!p.healthyIdentityOnly||!p.walletAgent||!("liquidityEntryAllowed"in L)||!L.liquidityEntryAllowed)throw new s("Hookr family entry needs a healthy gate and a current on-chain agent identity. Collect/remove do not need Hookr gate eligibility.");let me=x(L.terms),X=q(me.tierPips,24);if(X>50000n||n(o.baseLpFeePips,24)+X>h||n(o.advisoryGasLimit,32)<400000n||n(o.advisoryGasLimit,32)>2000000n)throw new s("Hookr gate surcharge or gas exceeds the pool caps.");z=L}let V=x(B(R,3)[0]);oe(V.on);let G=null,K=BigInt(_(await t.getStorageAt({address:I,slot:re(e),blockNumber:i.number})));if(BigInt(l.launcher)!==(K&(1n<<160n)-1n))throw new s("Hookr frozen Root record differs from the family Launcher.");let Q=(K>>200n&255n)!==0n;if(Q){let p=B(await A(t,M,P("registry"),"activeLaneOf",[I],i.number),4);if(E(p[0]),_(p[1]),n(p[2],32),n(p[3],16)>10000n)throw new s("Hookr recapture switch is malformed.");G=C({activeSwapSwitch:p,swapExecutorUsedByLpAction:!1,liquidityCallbackFloor:300000n+300000n/63n+5000n,floorSource:"Pinned HookrLane._flush; sender estimates the complete transaction, including EIP-150 overhead."})}return C({config:y,poolCaps:g,gateStatus:z,reportedRecaptureConfig:V,laneLiquidity:Q,lane:G})}async function ge(t,r,d,i){let e=he(t,d);if(r.network==="testnet")throw new s("Hookr family LP actions require Robinhood Chain 4663.");let l=r.clientFor(4663),o=await ae(l,i,e.position);if(e.deadline<=o.block.timestamp||e.deadline>o.block.timestamp+300n)throw new s("Set a fresh Hookr LP deadline within the next 300 seconds of chain time.");if(!e.adding&&e.liquidity>o.liquidity)throw new s("Remove no more than the exact remaining Hookr family liquidity.");if(e.adding&&e.liquidity+o.liquidity>=1n<<127n)throw new s("Hookr resulting liquidity must fit int128 max.");let a=J({liquidity:e.liquidity,tickLower:o.tickLower,tickUpper:o.tickUpper,sqrtPriceX96:o.sqrtPriceX96,roundUp:e.adding});if(e.adding&&(!a.amount0&&!a.amount1||a.amount0>=1n<<127n||a.amount1>=1n<<127n||a.amount0>e.bound0||a.amount1>e.bound1))throw new s("Hookr rounded-up principal debts must fit the exact finite funding caps.");let v=t==="hookr_lp_remove"?await se(l,o):null;if(v?.currentlyLocked)throw new s("Hookr principal is locked on the parent-block clock. Collect fees now or wait until all principal locks expire.");let k=e.adding?await ke(l,o,i):null,$=null,H=null;try{$=(await Promise.all([o.key.currency0,o.key.currency1].map(c=>A(l,o.core,P("rulesV1"),"poolAccrued",[o.poolId,c],o.block.number)))).map((c,w)=>({token:o.tokens[w],amount:n(c).toString()}))}catch{H="Core credit forecast unavailable; receipt verification must identify any core payment separately. No zero is inferred."}let O=e.adding?"Add":e.collecting?"Collect LP fees with zero principal removed from":"Remove",R=`${o.key.currency0} / ${o.key.currency1}`,y=`${O} Hookr family ${e.position.familyId}, member ${e.position.member}, Launcher ${e.position.launcher}. ${e.adding||!e.collecting?`Exact liquidity ${e.liquidity}; existing ticks ${o.tickLower} to ${o.tickUpper}.`:""} Recipient ${i}. Currencies ${R} (base units; decimals ${o.tokens[0].decimals}/${o.tokens[1].decimals}). ${e.adding?`Deposit caps ${e.bound0}/${e.bound1}; current rounded-up principal debts ${a.amount0}/${a.amount1}. Exact finite approvals are reset first and revoked after the add; unused funding returns to ${i} in the add transaction.`:`Principal minimums ${e.bound0}/${e.bound1}; current principal forecast ${a.amount0}/${a.amount1}. Fees cannot satisfy a principal minimum.`} Uncollected LP fee forecast ${o.fees[0]}/${o.fees[1]}, paid separately from principal. Any family accrual moved into the wallet\u2019s core claim ledger is reported separately after mining; this credit is not a wallet token receipt; pool pending recapture is not earned position fees. ${H??"Core credit forecast is separate in terms."} Deadline ${e.deadline}.`,u=[],f=[],g=[];if(e.adding)for(let[b,c]of[o.key.currency0,o.key.currency1].entries()){let w=b===0?e.bound0:e.bound1;w&&(g.push({token:c===S?W:c,amount:w,...c===S?{to:e.position.launcher}:{}}),c!==S&&(u.push(r.approval(c,e.position.launcher,"0",4663),r.approval(c,e.position.launcher,w.toString(),4663)),f.push(r.approval(c,e.position.launcher,"0",4663))))}let h=u.length;return u.push(r.unsignedTx({to:e.position.launcher,chainId:4663,value:e.adding&&o.key.currency0===S?e.bound0.toString():"0",description:y,data:fe({abi:ne(e.position),functionName:e.adding?"addLiquidity":"withdraw",args:e.adding?[e.position.familyId,Number(e.position.member),e.liquidity,e.bound0,e.bound1,e.deadline]:[e.position.familyId,Number(e.position.member),e.liquidity,e.bound0,e.bound1,i,e.deadline]})}),...f),await ee(l,o.block),{txs:u,inputs:g,summary:y,state:o,request:e,actionIndex:h,terms:C({request:d,blockNumber:o.block.number,blockHash:o.block.hash,poolId:o.poolId,poolKey:o.key,owner:i,recipient:i,range:{tickLower:o.tickLower,tickUpper:o.tickUpper},liquidityBefore:o.liquidity,liquidityDelta:e.adding?e.liquidity:-e.liquidity,principal:a,principalBounds:[e.bound0,e.bound1],uncollectedLpFees:o.fees.map((b,c)=>({token:o.tokens[c],amount:b})),coreCredits:$,coreCreditsReason:H,locks:v,entry:k,exactApprovals:u.filter((b,c)=>c!==h),refunds:e.adding?[e.bound0-a.amount0,e.bound1-a.amount1]:null,gasEstimate:null,gasEstimateReason:"Local sender estimates the ordered calls and confirms the maximum network fee."})}}function be(t){if(!Array.isArray(t)||!t.length||t.length>7)throw new s("Hookr LP requires only its exact finite approvals, one family action and cleanup.");for(let r of t)T(r,["to","data","value","chainId","description"],["to","data","value","chainId","description"])}function $e(t,r){if(be(t),t.length!==r.length||t.some((d,i)=>d.to!==r[i].to||d.data!==r[i].data||d.value!==r[i].value||d.chainId!==4663))throw new s("Hookr LP differs from the locally reconstructed exact family action, recipient, bounds, approvals or cleanup.")}function Te(t){return le.map(r=>({name:r,inputSchema:ue[r],execute:async(d,i)=>{let e=await ge(r,t,d,i);return{txs:e.txs,preview:await t.preview(e.txs,i),terms:e.terms,summary:e.summary}}}))}export{le as a,ye as b,ue as c,he as d,ge as e,be as f,$e as g,Te as h};
1
+ import{a as ne,b as re,d as ae,e as se,f as ce,g as de}from"./UHVSINR5.js";import{A as J}from"./GEIFITAQ.js";import{c as te,d as ie}from"./74Y2KDNR.js";import{a as m,e as T,f as q,h as _,i as E,j as n,k as oe,l as B,m as x,n as C,o as P,p as A,q as I,r as M,t as N}from"./JVLLVNF2.js";import{f as Y,g as Z,i as ee}from"./MQK6OP7S.js";import{a as W}from"./3MLUCYCB.js";import{a as s}from"./XSD5NL7J.js";import{encodeFunctionData as fe,zeroAddress as S}from"viem";var le=["hookr_lp_add","hookr_lp_remove","hookr_lp_collect"],ye=t=>le.includes(t),F=t=>({type:"object",additionalProperties:!1,properties:t,required:Object.keys(t)}),j=ce.oneOf[0],ue={hookr_lp_add:F({target:F({position:j}),liquidity:m,amount0Max:m,amount1Max:m,deadline:m}),hookr_lp_remove:F({position:j,liquidity:m,amount0Min:m,amount1Min:m,deadline:m}),hookr_lp_collect:F({position:j,deadline:m})};function he(t,r){if(!ye(t))throw new s("Choose a supported Hookr family LP action.");let d=ue[t],i=T(r,Object.keys(d.properties),d.required),e=t==="hookr_lp_add",l=t==="hookr_lp_collect",o=de(e?T(i.target,["position"],["position"]).position:i.position),a=l?0n:q(i.liquidity,127);if(!l&&!a)throw new s("Hookr add/remove liquidity must be an exact positive integer; use collect for fees only.");let v=l?0n:q(i[e?"amount0Max":"amount0Min"],e?128:256),k=l?0n:q(i[e?"amount1Max":"amount1Min"],e?128:256);return{position:o,adding:e,collecting:l,liquidity:a,bound0:v,bound1:k,deadline:q(i.deadline,64)}}async function ke(t,r,d){let{block:i,poolId:e,position:l,pc:o,core:a,role:v}=r,k=(p,L=[])=>A(t,a,P(v),p,L,i.number),[$,H,O,R]=await Promise.all([k("config",[e]),A(t,M,P("registry"),"admission",[I,a],i.number),k("configSchemaHash"),k("recaptureConfig",[e])]),y=x($),u=x(H),f=x(u.caps),g=x(o.caps);if(u.implementation!==a||u.codeHash!==Y(a).codeHash||u.schemaHash!==_(O)||n(u.kind,8)!==0n||!n(u.gasLimit,32)||n(f.maxLpFeePips,24)>600000n||n(f.maxQuoteTakePips,24)>=1000000n||n(f.maxSubjectTakeBps,16)>1000n)throw new s("Hookr core admission or fee caps are unavailable or outside the reviewed limits.");let h=n(g.maxLpFeePips,24),b=n(g.maxQuoteTakePips,24),c=n(g.maxSubjectTakeBps,16),w=n(y.burnBps,16),pe=n(y.lpBps,16),D=n(y.protocolShareBps,16);if(h>600000n||h>n(f.maxLpFeePips,24)||n(o.baseLpFeePips,24)>h||n(y.maxFeePips,24)>h||b>n(f.maxQuoteTakePips,24)||c>n(f.maxSubjectTakeBps,16)||w+pe>1000n||D<2000n||D>5000n)throw new s("Hookr pool fee settings exceed the reviewed entry caps. Exit tools remain available.");let U=E(o.advisory),z={gated:!1};if(U!==S){if(U!==N||o.advisoryFailOpen!==!1||n(o.advisoryPhases,8)!==1n)throw new s("Hookr entry requires the reviewed fail-closed agent gate configuration.");await Z(t,i.number,[N]);let p=await te(t,i.number,d),L=await ie(t,i.number,e,l.launcher,U);if(!p.healthyIdentityOnly||!p.walletAgent||!("liquidityEntryAllowed"in L)||!L.liquidityEntryAllowed)throw new s("Hookr family entry needs a healthy gate and a current on-chain agent identity. Collect/remove do not need Hookr gate eligibility.");let me=x(L.terms),X=q(me.tierPips,24);if(X>50000n||n(o.baseLpFeePips,24)+X>h||n(o.advisoryGasLimit,32)<400000n||n(o.advisoryGasLimit,32)>2000000n)throw new s("Hookr gate surcharge or gas exceeds the pool caps.");z=L}let V=x(B(R,3)[0]);oe(V.on);let G=null,K=BigInt(_(await t.getStorageAt({address:I,slot:re(e),blockNumber:i.number})));if(BigInt(l.launcher)!==(K&(1n<<160n)-1n))throw new s("Hookr frozen Root record differs from the family Launcher.");let Q=(K>>200n&255n)!==0n;if(Q){let p=B(await A(t,M,P("registry"),"activeLaneOf",[I],i.number),4);if(E(p[0]),_(p[1]),n(p[2],32),n(p[3],16)>10000n)throw new s("Hookr recapture switch is malformed.");G=C({activeSwapSwitch:p,swapExecutorUsedByLpAction:!1,liquidityCallbackFloor:300000n+300000n/63n+5000n,floorSource:"Pinned HookrLane._flush; sender estimates the complete transaction, including EIP-150 overhead."})}return C({config:y,poolCaps:g,gateStatus:z,reportedRecaptureConfig:V,laneLiquidity:Q,lane:G})}async function ge(t,r,d,i){let e=he(t,d);if(r.network==="testnet")throw new s("Hookr family LP actions require Robinhood Chain 4663.");let l=r.clientFor(4663),o=await ae(l,i,e.position);if(e.deadline<=o.block.timestamp||e.deadline>o.block.timestamp+300n)throw new s("Set a fresh Hookr LP deadline within the next 300 seconds of chain time.");if(!e.adding&&e.liquidity>o.liquidity)throw new s("Remove no more than the exact remaining Hookr family liquidity.");if(e.adding&&e.liquidity+o.liquidity>=1n<<127n)throw new s("Hookr resulting liquidity must fit int128 max.");let a=J({liquidity:e.liquidity,tickLower:o.tickLower,tickUpper:o.tickUpper,sqrtPriceX96:o.sqrtPriceX96,roundUp:e.adding});if(e.adding&&(!a.amount0&&!a.amount1||a.amount0>=1n<<127n||a.amount1>=1n<<127n||a.amount0>e.bound0||a.amount1>e.bound1))throw new s("Hookr rounded-up principal debts must fit the exact finite funding caps.");let v=t==="hookr_lp_remove"?await se(l,o):null;if(v?.currentlyLocked)throw new s("Hookr principal is locked on the parent-block clock. Collect fees now or wait until all principal locks expire.");let k=e.adding?await ke(l,o,i):null,$=null,H=null;try{$=(await Promise.all([o.key.currency0,o.key.currency1].map(c=>A(l,o.core,P("rulesV1"),"poolAccrued",[o.poolId,c],o.block.number)))).map((c,w)=>({token:o.tokens[w],amount:n(c).toString()}))}catch{H="Core credit forecast unavailable; receipt verification must identify any core payment separately. No zero is inferred."}let O=e.adding?"Add":e.collecting?"Collect LP fees with zero principal removed from":"Remove",R=`${o.key.currency0} / ${o.key.currency1}`,y=`${O} Hookr family ${e.position.familyId}, member ${e.position.member}, Launcher ${e.position.launcher}. ${e.adding||!e.collecting?`Exact liquidity ${e.liquidity}; existing ticks ${o.tickLower} to ${o.tickUpper}.`:""} Recipient ${i}. Currencies ${R} (base units; decimals ${o.tokens[0].decimals}/${o.tokens[1].decimals}). ${e.adding?`Deposit caps ${e.bound0}/${e.bound1}; current rounded-up principal debts ${a.amount0}/${a.amount1}. Exact finite approvals are reset first and revoked after the add; unused funding returns to ${i} in the add transaction.`:`Principal minimums ${e.bound0}/${e.bound1}; current principal forecast ${a.amount0}/${a.amount1}. Fees cannot satisfy a principal minimum.`} Uncollected LP fee forecast ${o.fees[0]}/${o.fees[1]}, paid separately from principal. Any family accrual moved into the wallet\u2019s core claim ledger is reported separately after mining; this credit is not a wallet token receipt; pool pending recapture is not earned position fees. ${H??"Core credit forecast is separate in terms."} Deadline ${e.deadline}.`,u=[],f=[],g=[];if(e.adding)for(let[b,c]of[o.key.currency0,o.key.currency1].entries()){let w=b===0?e.bound0:e.bound1;w&&(g.push({token:c===S?W:c,amount:w,...c===S?{to:e.position.launcher}:{}}),c!==S&&(u.push(r.approval(c,e.position.launcher,"0",4663),r.approval(c,e.position.launcher,w.toString(),4663)),f.push(r.approval(c,e.position.launcher,"0",4663))))}let h=u.length;return u.push(r.unsignedTx({to:e.position.launcher,chainId:4663,value:e.adding&&o.key.currency0===S?e.bound0.toString():"0",description:y,data:fe({abi:ne(e.position),functionName:e.adding?"addLiquidity":"withdraw",args:e.adding?[e.position.familyId,Number(e.position.member),e.liquidity,e.bound0,e.bound1,e.deadline]:[e.position.familyId,Number(e.position.member),e.liquidity,e.bound0,e.bound1,i,e.deadline]})}),...f),await ee(l,o.block),{txs:u,inputs:g,summary:y,state:o,request:e,actionIndex:h,terms:C({request:d,blockNumber:o.block.number,blockHash:o.block.hash,poolId:o.poolId,poolKey:o.key,owner:i,recipient:i,range:{tickLower:o.tickLower,tickUpper:o.tickUpper},liquidityBefore:o.liquidity,liquidityDelta:e.adding?e.liquidity:-e.liquidity,principal:a,principalBounds:[e.bound0,e.bound1],uncollectedLpFees:o.fees.map((b,c)=>({token:o.tokens[c],amount:b})),coreCredits:$,coreCreditsReason:H,locks:v,entry:k,exactApprovals:u.filter((b,c)=>c!==h),refunds:e.adding?[e.bound0-a.amount0,e.bound1-a.amount1]:null,gasEstimate:null,gasEstimateReason:"Local sender estimates the ordered calls and confirms the maximum network fee."})}}function be(t){if(!Array.isArray(t)||!t.length||t.length>7)throw new s("Hookr LP requires only its exact finite approvals, one family action and cleanup.");for(let r of t)T(r,["to","data","value","chainId","description"],["to","data","value","chainId","description"])}function $e(t,r){if(be(t),t.length!==r.length||t.some((d,i)=>d.to!==r[i].to||d.data!==r[i].data||d.value!==r[i].value||d.chainId!==4663))throw new s("Hookr LP differs from the locally reconstructed exact family action, recipient, bounds, approvals or cleanup.")}function Te(t){return le.map(r=>({name:r,inputSchema:ue[r],execute:async(d,i)=>{let e=await ge(r,t,d,i);return{txs:e.txs,preview:await t.preview(e.txs,i),terms:e.terms,summary:e.summary}}}))}export{le as a,ye as b,ue as c,he as d,ge as e,be as f,$e as g,Te as h};
@@ -1 +1 @@
1
- import{m as v,n as F}from"./MDV7GECM.js";import{b as A,i as U,n as X,o as V,q as j}from"./WGL46F3S.js";import{a as q}from"./43CSMYDO.js";import{b as z,e as C,n as Y}from"./65EQECL3.js";import{a as w,b as S}from"./HTXKERNS.js";import{a as k}from"./LIUXNOLP.js";import{a as x}from"./U4JGEMKT.js";import{a as B}from"./Z4SRGAVL.js";import{b as $}from"./MYFAKCQI.js";import{a as T}from"./UP7FBDMJ.js";import{o as y}from"./ABPL3ZZI.js";import{a as u,b as f,c as H,d as P,i as g,j as R,k as W,p as K}from"./FWD4L3CJ.js";import{a as o}from"./XSD5NL7J.js";import{a as N,b as L}from"./JXOEJPJ4.js";import{getAddress as b,isAddress as J,parseAbi as se}from"viem";var Q=[{inputs:[],name:"available",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"ethUsdE18",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"liquidityUsdgE6",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"phase",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"priceSigner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"signer",type:"address"}],name:"setPriceSigner",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"spotOakPerEthE18",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"supplyNet",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"syncPhase",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"wallet",type:"address"},{internalType:"uint256",name:"oakPerEthE18",type:"uint256"},{internalType:"uint64",name:"timestamp",type:"uint64"},{internalType:"bytes32",name:"nonce",type:"bytes32"}],internalType:"struct PriceNote",name:"n",type:"tuple"},{internalType:"bytes",name:"sig",type:"bytes"},{internalType:"address",name:"boundWallet",type:"address"}],name:"verifyNote",outputs:[{internalType:"uint256",name:"oakPerEthE18",type:"uint256"}],stateMutability:"view",type:"function"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"signer",type:"address"}],name:"PriceSignerSet",type:"event"},{inputs:[],name:"NotReady",type:"error"},{inputs:[],name:"NoteBadSignature",type:"error"},{inputs:[],name:"NoteExpired",type:"error"},{inputs:[],name:"NoteNotYetValid",type:"error"},{inputs:[{internalType:"uint256",name:"spot",type:"uint256"},{internalType:"uint256",name:"note",type:"uint256"}],name:"NoteOutsideGuard",type:"error"},{inputs:[],name:"NoteWrongWallet",type:"error"},{inputs:[{internalType:"address",name:"source",type:"address"}],name:"OracleUnreadable",type:"error"}];var M=300,oe="1000000000000000000",ee=b(g[u].tokens.USDG.address),te=b(g[f].deployments.test_USDG.address),O=b(g[u].tokens.WETH.address),_=b(g[f].deployments.test_WETH.address);function ne(n){let e=n.address.toLowerCase();return n.chainId===u?e===ee.toLowerCase():n.chainId===f?e===te.toLowerCase():!1}function re(n){return n.chainId!==u&&n.chainId!==f?!1:S(n.address)===w}function ie(n){let e=n.address.toLowerCase();return n.chainId===u?e===O.toLowerCase():n.chainId===f?e===_.toLowerCase():!1}function de(n){return re(n)||ie(n)}var ce=-887272,me=887272,ue=(1n<<256n)-1n,fe=se(["function observe(uint32[] secondsAgos) view returns (int56[] tickCumulatives, uint160[] secondsPerLiquidityCumulativeX128s)","function slot0() view returns (uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked)"]);function I(n,e){if(typeof n=="bigint")return n;if(typeof n=="number"){if(!Number.isSafeInteger(n))throw new o(`Invalid ${e} timestamp.`);return BigInt(n)}if(typeof n=="string"&&/^-?\d+$/.test(n.trim()))return BigInt(n.trim());throw new o(`Invalid ${e} timestamp.`)}function Oe(n,e=BigInt(Math.floor(Date.now()/1e3)),t=M){try{return l(n,e,t),!0}catch{return!1}}function l(n,e=BigInt(Math.floor(Date.now()/1e3)),t=M){if(!Number.isInteger(t)||t<0)throw new o("Maximum price age must be a non-negative integer.");let s=I(n,"price"),a=I(e,"current");if(s<=0n)throw new o("Price timestamp must be positive.");if(s>a)throw new o("Price timestamp is in the future.");let r=a-s;if(r>BigInt(t))throw new o(`Price is stale: age ${r}s exceeds ${t}s.`);return s.toString()}function le(n){if(!Number.isInteger(n)||n<ce||n>me)throw new o(`Tick ${n} is outside valid Uniswap bounds.`);let e=BigInt(n<0?-n:n),t=(e&0x1n)!==0n?0xfffcb933bd6fad37aa2d162d1a594001n:0x100000000000000000000000000000000n;return(e&0x2n)!==0n&&(t=t*0xfff97272373d413259a46990580e213an>>128n),(e&0x4n)!==0n&&(t=t*0xfff2e50f5f656932ef12357cf3c7fdccn>>128n),(e&0x8n)!==0n&&(t=t*0xffe5caca7e10e4e61c3624eaa0941cd0n>>128n),(e&0x10n)!==0n&&(t=t*0xffcb9843d60f6159c9db58835c926644n>>128n),(e&0x20n)!==0n&&(t=t*0xff973b41fa98c081472e6896dfb254c0n>>128n),(e&0x40n)!==0n&&(t=t*0xff2ea16466c96a3843ec78b326b52861n>>128n),(e&0x80n)!==0n&&(t=t*0xfe5dee046a99a2a811c461f1969c3053n>>128n),(e&0x100n)!==0n&&(t=t*0xfcbe86c7900a88aedcffc83b479aa3a4n>>128n),(e&0x200n)!==0n&&(t=t*0xf987a7253ac413176f2b074cf7815e54n>>128n),(e&0x400n)!==0n&&(t=t*0xf3392b0822b70005940c7a398e4b70f3n>>128n),(e&0x800n)!==0n&&(t=t*0xe7159475a2c29b7443b29c7fa6e889d9n>>128n),(e&0x1000n)!==0n&&(t=t*0xd097f3bdfd2022b8845ad8f792aa5825n>>128n),(e&0x2000n)!==0n&&(t=t*0xa9f746462d870fdf8a65dc1f90e061e5n>>128n),(e&0x4000n)!==0n&&(t=t*0x70d869a156d2a1b890bb3df62baf32f7n>>128n),(e&0x8000n)!==0n&&(t=t*0x31be135f97d08fd981231505542fcfa6n>>128n),(e&0x10000n)!==0n&&(t=t*0x9aa508b5b7a84e1c677de54f3e99bc9n>>128n),(e&0x20000n)!==0n&&(t=t*0x5d6af8dedb81196699c329225ee604n>>128n),(e&0x40000n)!==0n&&(t=t*0x2216e584f5fa1ea926041bedfe98n>>128n),(e&0x80000n)!==0n&&(t=t*0x48a170391f7dc42444e8fa2n>>128n),n>0&&(t=ue/t),(t>>32n)+(t%(1n<<32n)===0n?0n:1n)}async function Z(n,e,t,s){let a=async()=>{throw new o("Price identity resolution is read-only.")},r=B({network:e===f?"testnet":"mainnet",clientFor:i=>t.client??y(t.rpcUrl,i),http:t.http??$(),preview:a,quoteSwap:a,buildSwap:a}),c=await Y(n,{context:r,oakTokenAddress:t.oakTokenAddress??process.env.OAK_TOKEN_ADDRESS,officialStockTokens:t.officialStockTokens,tokenMetadata:s,blockNumber:t.blockNumber,readMetadata:async i=>{let d=t.client??y(t.rpcUrl,e),[m,p]=await Promise.all([x(d,e,i,"symbol",t.blockNumber),x(d,e,i,"decimals",t.blockNumber)]);return{address:i,symbol:m,decimals:p,chainId:e}}});return{address:c.address,symbol:c.kind==="erc20"&&s?s.symbol:c.symbol,decimals:c.decimals,chainId:c.chainId}}async function be(n,e,t){if(typeof n=="object"&&n!==null){let i=n.chainId??e,d=S(n.address)===w?w:b(n.address),m={address:d,symbol:n.symbol,decimals:n.decimals,chainId:i};return ne(m)?{address:d,symbol:"USDG",decimals:P,chainId:i}:re(m)?{address:w,symbol:"ETH",decimals:18,chainId:i}:ie(m)?{address:d,symbol:"WETH",decimals:18,chainId:i}:Z(m.address,i,t,m)}let s=n.trim(),a=s.toUpperCase(),r=s.toLowerCase();if(a==="ETH"||J(s,{strict:!1})&&S(s)===w)return{...z,chainId:e};if(a==="WETH"||e===u&&r===O.toLowerCase()||e===f&&r===_.toLowerCase()){if(e!==u&&e!==f)throw new o(`No canonical WETH address configured for chain ${e}.`);return{address:e===f?_:O,symbol:"WETH",decimals:18,chainId:e}}if(a==="USDG"||e===u&&r===R.toLowerCase()||e===f&&r===W.toLowerCase()){if(e!==u&&e!==f)throw new o(`No canonical USDG address configured for chain ${e}.`);return{address:e===f?te:ee,symbol:"USDG",decimals:P,chainId:e}}if(e===u&&(a==="USDE"||r===C.address.toLowerCase()))return{...C,chainId:e};let c=t.oakTokenAddress??process.env.OAK_TOKEN_ADDRESS;if(a==="OAK"||c&&s.toLowerCase()===c.toLowerCase()){if(!c&&!J(s,{strict:!1}))throw new o("OAK token address is required to price OAK.");return{address:b(c??s),symbol:"OAK",decimals:H,chainId:e}}return Z(n,e,t)}async function h(n,e,t){if(e)return(await n.readContract({address:e,abi:Q,functionName:"ethUsdE18",blockNumber:t})).toString();let a=(await n.readContract({address:b(K),abi:fe,functionName:"observe",args:[[A,0]],blockNumber:t}))[0];if(!a||a.length<2)throw new o("ETH/USDG pool observation returned insufficient tick cumulatives.");let r=X(a[0],a[1],A),c=le(r);return V(c)}async function D(n,e,t,s){if(n.timestamp!==void 0)return l(n.timestamp,t(),s);if(e&&typeof e.getBlock=="function"){let r=await k(e,n.blockNumber);return l(r.timestamp,t(),s)}let a=t();return l(a,a,s)}async function _e(n,e={}){let t=e.chainId??u,s=e.maxAgeSeconds??M,a=()=>e.now!==void 0?I(e.now,"current"):BigInt(Math.floor(Date.now()/1e3)),r=await be(n,t,e);if((L(r.symbol)||r.symbol.length>256)&&(r.symbol=N(r.symbol)),e.signedNote||e.priceNote){let i=e.signedNote?e.signedNote.note:e.priceNote,d=l(i.timestamp,a(),s);if(e.spotOakPerEthE18!==void 0&&!v(i.oakPerEthE18,e.spotOakPerEthE18))throw new o("Price note is outside the 50% spot guard band.");let m=e.signedNote?.signature??e.signature,p=e.signedNote?.consumer??e.consumer;if(m&&p){let G=await F({note:i,signature:m,consumer:p,signer:e.signer,now:a(),spotOakPerEthE18:e.spotOakPerEthE18,chainId:t});if(!G.valid)throw new o(G.error??"Price note verification failed.")}let E=e.ethUsdE18!==void 0?e.ethUsdE18.toString():await h(e.client??y(e.rpcUrl,t),e.oracleAddress);return{token:r,usdE18:U(E,i.oakPerEthE18),timestamp:d}}if(e.trades){let i=await D(e,e.client,a,s),d=j(e.trades,{now:a(),windowStart:e.windowStart,windowEnd:e.windowEnd});if(e.spotOakPerEthE18!==void 0&&!v(d,e.spotOakPerEthE18))throw new o("30-minute average is outside the 50% spot guard band.");let m=e.ethUsdE18!==void 0?e.ethUsdE18.toString():await h(e.client??y(e.rpcUrl,t),e.oracleAddress);return{token:r,usdE18:U(m,d),timestamp:i}}if(e.usdE18!==void 0){let i=await D(e,e.client,a,s),d=T(e.usdE18.toString());if(d<=0n)throw new o("USD price must be positive.");return{token:r,usdE18:d.toString(),timestamp:i}}if(e.resolver){let i=await e.resolver(r),d=l(i.timestamp,a(),s),m=T(i.usdE18);if(m<=0n)throw new o("USD price must be positive.");return{token:r,usdE18:m.toString(),timestamp:d}}let c=e.client??y(e.rpcUrl,t);if(ne(r)){let i=await D(e,c,a,s);return{token:r,usdE18:oe,timestamp:i}}if(de(r)){let i=await D(e,c,a,s),d=await h(c,e.oracleAddress,e.blockNumber);return{token:r,usdE18:d,timestamp:i}}if(r.chainId===u)try{let i=await k(c,e.blockNumber),d=l(i.timestamp,a(),s);if(i.number===null)throw new o("Pons reference requires a mined block.");let[m,p]=await Promise.all([q(r,c,i.number),h(c,e.oracleAddress,i.number)]),E=T(p)*m.numerator/m.denominator;if(E<=0n)throw new o("Pons USD reference price must be positive.");return{token:r,usdE18:E.toString(),timestamp:d}}catch{}throw new o(`No fresh on-chain price source available for token ${N(r.symbol)} (${r.address}).`)}export{M as a,oe as b,ne as c,re as d,ie as e,de as f,Oe as g,l as h,le as i,_e as j};
1
+ import{m as v,n as F}from"./VYYSL557.js";import{b as A,i as U,n as X,o as V,q as j}from"./WU7XIAXB.js";import{a as q}from"./6WD4HHID.js";import{b as z,e as C,o as Y}from"./P56RZC2M.js";import{a as w,b as S}from"./3MLUCYCB.js";import{a as k}from"./LIUXNOLP.js";import{a as x}from"./U4JGEMKT.js";import{a as B}from"./SPJCSEKP.js";import{b as $}from"./VEQBHI6O.js";import{b as T}from"./IX3GZMTM.js";import{o as y}from"./ABPL3ZZI.js";import{a as u,b as f,c as H,d as P,i as g,j as R,k as W,p as K}from"./FWD4L3CJ.js";import{a as o}from"./XSD5NL7J.js";import{a as N,b as L}from"./JXOEJPJ4.js";import{getAddress as b,isAddress as J,parseAbi as se}from"viem";var Q=[{inputs:[],name:"available",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"ethUsdE18",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"liquidityUsdgE6",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"phase",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"priceSigner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"signer",type:"address"}],name:"setPriceSigner",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"spotOakPerEthE18",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"supplyNet",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"syncPhase",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"wallet",type:"address"},{internalType:"uint256",name:"oakPerEthE18",type:"uint256"},{internalType:"uint64",name:"timestamp",type:"uint64"},{internalType:"bytes32",name:"nonce",type:"bytes32"}],internalType:"struct PriceNote",name:"n",type:"tuple"},{internalType:"bytes",name:"sig",type:"bytes"},{internalType:"address",name:"boundWallet",type:"address"}],name:"verifyNote",outputs:[{internalType:"uint256",name:"oakPerEthE18",type:"uint256"}],stateMutability:"view",type:"function"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"signer",type:"address"}],name:"PriceSignerSet",type:"event"},{inputs:[],name:"NotReady",type:"error"},{inputs:[],name:"NoteBadSignature",type:"error"},{inputs:[],name:"NoteExpired",type:"error"},{inputs:[],name:"NoteNotYetValid",type:"error"},{inputs:[{internalType:"uint256",name:"spot",type:"uint256"},{internalType:"uint256",name:"note",type:"uint256"}],name:"NoteOutsideGuard",type:"error"},{inputs:[],name:"NoteWrongWallet",type:"error"},{inputs:[{internalType:"address",name:"source",type:"address"}],name:"OracleUnreadable",type:"error"}];var M=300,oe="1000000000000000000",ee=b(g[u].tokens.USDG.address),te=b(g[f].deployments.test_USDG.address),O=b(g[u].tokens.WETH.address),_=b(g[f].deployments.test_WETH.address);function ne(n){let e=n.address.toLowerCase();return n.chainId===u?e===ee.toLowerCase():n.chainId===f?e===te.toLowerCase():!1}function re(n){return n.chainId!==u&&n.chainId!==f?!1:S(n.address)===w}function ie(n){let e=n.address.toLowerCase();return n.chainId===u?e===O.toLowerCase():n.chainId===f?e===_.toLowerCase():!1}function de(n){return re(n)||ie(n)}var ce=-887272,me=887272,ue=(1n<<256n)-1n,fe=se(["function observe(uint32[] secondsAgos) view returns (int56[] tickCumulatives, uint160[] secondsPerLiquidityCumulativeX128s)","function slot0() view returns (uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked)"]);function I(n,e){if(typeof n=="bigint")return n;if(typeof n=="number"){if(!Number.isSafeInteger(n))throw new o(`Invalid ${e} timestamp.`);return BigInt(n)}if(typeof n=="string"&&/^-?\d+$/.test(n.trim()))return BigInt(n.trim());throw new o(`Invalid ${e} timestamp.`)}function Oe(n,e=BigInt(Math.floor(Date.now()/1e3)),t=M){try{return l(n,e,t),!0}catch{return!1}}function l(n,e=BigInt(Math.floor(Date.now()/1e3)),t=M){if(!Number.isInteger(t)||t<0)throw new o("Maximum price age must be a non-negative integer.");let s=I(n,"price"),a=I(e,"current");if(s<=0n)throw new o("Price timestamp must be positive.");if(s>a)throw new o("Price timestamp is in the future.");let r=a-s;if(r>BigInt(t))throw new o(`Price is stale: age ${r}s exceeds ${t}s.`);return s.toString()}function le(n){if(!Number.isInteger(n)||n<ce||n>me)throw new o(`Tick ${n} is outside valid Uniswap bounds.`);let e=BigInt(n<0?-n:n),t=(e&0x1n)!==0n?0xfffcb933bd6fad37aa2d162d1a594001n:0x100000000000000000000000000000000n;return(e&0x2n)!==0n&&(t=t*0xfff97272373d413259a46990580e213an>>128n),(e&0x4n)!==0n&&(t=t*0xfff2e50f5f656932ef12357cf3c7fdccn>>128n),(e&0x8n)!==0n&&(t=t*0xffe5caca7e10e4e61c3624eaa0941cd0n>>128n),(e&0x10n)!==0n&&(t=t*0xffcb9843d60f6159c9db58835c926644n>>128n),(e&0x20n)!==0n&&(t=t*0xff973b41fa98c081472e6896dfb254c0n>>128n),(e&0x40n)!==0n&&(t=t*0xff2ea16466c96a3843ec78b326b52861n>>128n),(e&0x80n)!==0n&&(t=t*0xfe5dee046a99a2a811c461f1969c3053n>>128n),(e&0x100n)!==0n&&(t=t*0xfcbe86c7900a88aedcffc83b479aa3a4n>>128n),(e&0x200n)!==0n&&(t=t*0xf987a7253ac413176f2b074cf7815e54n>>128n),(e&0x400n)!==0n&&(t=t*0xf3392b0822b70005940c7a398e4b70f3n>>128n),(e&0x800n)!==0n&&(t=t*0xe7159475a2c29b7443b29c7fa6e889d9n>>128n),(e&0x1000n)!==0n&&(t=t*0xd097f3bdfd2022b8845ad8f792aa5825n>>128n),(e&0x2000n)!==0n&&(t=t*0xa9f746462d870fdf8a65dc1f90e061e5n>>128n),(e&0x4000n)!==0n&&(t=t*0x70d869a156d2a1b890bb3df62baf32f7n>>128n),(e&0x8000n)!==0n&&(t=t*0x31be135f97d08fd981231505542fcfa6n>>128n),(e&0x10000n)!==0n&&(t=t*0x9aa508b5b7a84e1c677de54f3e99bc9n>>128n),(e&0x20000n)!==0n&&(t=t*0x5d6af8dedb81196699c329225ee604n>>128n),(e&0x40000n)!==0n&&(t=t*0x2216e584f5fa1ea926041bedfe98n>>128n),(e&0x80000n)!==0n&&(t=t*0x48a170391f7dc42444e8fa2n>>128n),n>0&&(t=ue/t),(t>>32n)+(t%(1n<<32n)===0n?0n:1n)}async function Z(n,e,t,s){let a=async()=>{throw new o("Price identity resolution is read-only.")},r=B({network:e===f?"testnet":"mainnet",clientFor:i=>t.client??y(t.rpcUrl,i),http:t.http??$(),preview:a,quoteSwap:a,buildSwap:a}),c=await Y(n,{context:r,oakTokenAddress:t.oakTokenAddress??process.env.OAK_TOKEN_ADDRESS,officialStockTokens:t.officialStockTokens,tokenMetadata:s,blockNumber:t.blockNumber,readMetadata:async i=>{let d=t.client??y(t.rpcUrl,e),[m,p]=await Promise.all([x(d,e,i,"symbol",t.blockNumber),x(d,e,i,"decimals",t.blockNumber)]);return{address:i,symbol:m,decimals:p,chainId:e}}});return{address:c.address,symbol:c.kind==="erc20"&&s?s.symbol:c.symbol,decimals:c.decimals,chainId:c.chainId}}async function be(n,e,t){if(typeof n=="object"&&n!==null){let i=n.chainId??e,d=S(n.address)===w?w:b(n.address),m={address:d,symbol:n.symbol,decimals:n.decimals,chainId:i};return ne(m)?{address:d,symbol:"USDG",decimals:P,chainId:i}:re(m)?{address:w,symbol:"ETH",decimals:18,chainId:i}:ie(m)?{address:d,symbol:"WETH",decimals:18,chainId:i}:Z(m.address,i,t,m)}let s=n.trim(),a=s.toUpperCase(),r=s.toLowerCase();if(a==="ETH"||J(s,{strict:!1})&&S(s)===w)return{...z,chainId:e};if(a==="WETH"||e===u&&r===O.toLowerCase()||e===f&&r===_.toLowerCase()){if(e!==u&&e!==f)throw new o(`No canonical WETH address configured for chain ${e}.`);return{address:e===f?_:O,symbol:"WETH",decimals:18,chainId:e}}if(a==="USDG"||e===u&&r===R.toLowerCase()||e===f&&r===W.toLowerCase()){if(e!==u&&e!==f)throw new o(`No canonical USDG address configured for chain ${e}.`);return{address:e===f?te:ee,symbol:"USDG",decimals:P,chainId:e}}if(e===u&&(a==="USDE"||r===C.address.toLowerCase()))return{...C,chainId:e};let c=t.oakTokenAddress??process.env.OAK_TOKEN_ADDRESS;if(a==="OAK"||c&&s.toLowerCase()===c.toLowerCase()){if(!c&&!J(s,{strict:!1}))throw new o("OAK token address is required to price OAK.");return{address:b(c??s),symbol:"OAK",decimals:H,chainId:e}}return Z(n,e,t)}async function h(n,e,t){if(e)return(await n.readContract({address:e,abi:Q,functionName:"ethUsdE18",blockNumber:t})).toString();let a=(await n.readContract({address:b(K),abi:fe,functionName:"observe",args:[[A,0]],blockNumber:t}))[0];if(!a||a.length<2)throw new o("ETH/USDG pool observation returned insufficient tick cumulatives.");let r=X(a[0],a[1],A),c=le(r);return V(c)}async function D(n,e,t,s){if(n.timestamp!==void 0)return l(n.timestamp,t(),s);if(e&&typeof e.getBlock=="function"){let r=await k(e,n.blockNumber);return l(r.timestamp,t(),s)}let a=t();return l(a,a,s)}async function _e(n,e={}){let t=e.chainId??u,s=e.maxAgeSeconds??M,a=()=>e.now!==void 0?I(e.now,"current"):BigInt(Math.floor(Date.now()/1e3)),r=await be(n,t,e);if((L(r.symbol)||r.symbol.length>256)&&(r.symbol=N(r.symbol)),e.signedNote||e.priceNote){let i=e.signedNote?e.signedNote.note:e.priceNote,d=l(i.timestamp,a(),s);if(e.spotOakPerEthE18!==void 0&&!v(i.oakPerEthE18,e.spotOakPerEthE18))throw new o("Price note is outside the 50% spot guard band.");let m=e.signedNote?.signature??e.signature,p=e.signedNote?.consumer??e.consumer;if(m&&p){let G=await F({note:i,signature:m,consumer:p,signer:e.signer,now:a(),spotOakPerEthE18:e.spotOakPerEthE18,chainId:t});if(!G.valid)throw new o(G.error??"Price note verification failed.")}let E=e.ethUsdE18!==void 0?e.ethUsdE18.toString():await h(e.client??y(e.rpcUrl,t),e.oracleAddress);return{token:r,usdE18:U(E,i.oakPerEthE18),timestamp:d}}if(e.trades){let i=await D(e,e.client,a,s),d=j(e.trades,{now:a(),windowStart:e.windowStart,windowEnd:e.windowEnd});if(e.spotOakPerEthE18!==void 0&&!v(d,e.spotOakPerEthE18))throw new o("30-minute average is outside the 50% spot guard band.");let m=e.ethUsdE18!==void 0?e.ethUsdE18.toString():await h(e.client??y(e.rpcUrl,t),e.oracleAddress);return{token:r,usdE18:U(m,d),timestamp:i}}if(e.usdE18!==void 0){let i=await D(e,e.client,a,s),d=T(e.usdE18.toString());if(d<=0n)throw new o("USD price must be positive.");return{token:r,usdE18:d.toString(),timestamp:i}}if(e.resolver){let i=await e.resolver(r),d=l(i.timestamp,a(),s),m=T(i.usdE18);if(m<=0n)throw new o("USD price must be positive.");return{token:r,usdE18:m.toString(),timestamp:d}}let c=e.client??y(e.rpcUrl,t);if(ne(r)){let i=await D(e,c,a,s);return{token:r,usdE18:oe,timestamp:i}}if(de(r)){let i=await D(e,c,a,s),d=await h(c,e.oracleAddress,e.blockNumber);return{token:r,usdE18:d,timestamp:i}}if(r.chainId===u)try{let i=await k(c,e.blockNumber),d=l(i.timestamp,a(),s);if(i.number===null)throw new o("Pons reference requires a mined block.");let[m,p]=await Promise.all([q(r,c,i.number),h(c,e.oracleAddress,i.number)]),E=T(p)*m.numerator/m.denominator;if(E<=0n)throw new o("Pons USD reference price must be positive.");return{token:r,usdE18:E.toString(),timestamp:d}}catch{}throw new o(`No fresh on-chain price source available for token ${N(r.symbol)} (${r.address}).`)}export{M as a,oe as b,ne as c,re as d,ie as e,de as f,Oe as g,l as h,le as i,_e as j};
@@ -1 +1 @@
1
- import{a as $}from"./O6L4BJP4.js";import{b as S,d as A,e as j,f as T,g as O,h as I,i as P,m as k,n as M,q as f,s as B}from"./6PY3IRDS.js";import{a as w,e as _}from"./5KUWLUPM.js";import{a as p}from"./FWD4L3CJ.js";import{a as d}from"./XSD5NL7J.js";function U(u){return{...u,token:{...u.token,symbol:f(u.token.symbol)??"unknown"}}}var J=u=>{let R=B(u);async function z(n,i){let g=T(i),r=I(n.originChainId),e=I(n.destinationChainId);if(r!==p&&e!==p)throw new d(`A Relay quote must start or end on chain ${p}.`);let h=O(n.originCurrency??S),b=O(n.destinationCurrency??S),c=T(n.recipient??g),a=P(n.amount);if(a==="0")throw new d("Provide a positive bridge amount.");let t=n.tradeType??"EXACT_INPUT";if(!["EXACT_INPUT","EXACT_OUTPUT","EXPECTED_OUTPUT"].includes(String(t)))throw new d("Choose EXACT_INPUT, EXACT_OUTPUT or EXPECTED_OUTPUT.");let m={};for(let E of["includedSwapSources","excludedSwapSources","includedOriginSwapSources","includedDestinationSwapSources"]){let y=n[E];if(y!==void 0){if(!Array.isArray(y)||y.length>100||y.some(x=>typeof x!="string"||!/^[A-Za-z0-9._ -]{1,128}$/.test(x)))throw new d("Provide valid Relay swap source names.");m[E]=y}}let N=await R("/quote/v2",{user:g,recipient:c,originChainId:r,destinationChainId:e,originCurrency:h,destinationCurrency:b,amount:a,tradeType:t,...m}),o=A(N.details),l=U(k(o.currencyIn)),s=U(k(o.currencyOut)),C=P(A(o.currencyOut).minimumAmount);M(T(o.sender)===g&&T(o.recipient)===c&&l.token.chainId===r&&l.token.address===h&&(t==="EXACT_INPUT"?l.amount===a:s.amount===a)&&s.token.chainId===e&&s.token.address===b&&BigInt(C)<=BigInt(s.amount));let F=Object.fromEntries(Object.entries(A(N.fees)).map(([E,y])=>[E,U(k(y))])),v=typeof o.timeEstimate=="number"&&Number.isFinite(o.timeEstimate)&&o.timeEstimate>=0?o.timeEstimate:void 0,X=e===p,q=X?"relay_bridge_in":"relay_bridge_out",D=t==="EXACT_INPUT"&&Object.keys(m).length===0&&r!==e&&(!X||$(r)!==void 0);return{executable:!1,nextAction:D?q:void 0,originChainId:r,destinationChainId:e,recipient:c,tradeType:t,amountIn:l,amountOut:s,minAmountOut:{token:s.token,amount:C},fees:F,slippage:{source:"provider",minimumAmount:C},...v===void 0?{}:{timeEstimateSeconds:v},summary:`Read-only Relay estimate: ${l.amount} base units of ${l.token.symbol} (${l.token.decimals} decimals) on chain ${r} for about ${s.amount}, minimum ${C}, base units of ${s.token.symbol} (${s.token.decimals} decimals) on chain ${e} for ${c}. Slippage: selected by Relay; Oak sent no slippage setting. The returned minimum above is the quote floor. Relay fees are already deducted from the output; origin gas is separate. Nothing was built or signed, and this estimate cannot be executed. ${D?`To bridge, call ${q}; it fetches a fresh quote and shows its own preview for human confirmation.`:"This estimate shape has no matching Oak execution path. No action will preserve these trade type or routing options."}`}}async function Z(n){let i=n.chainId===void 0?void 0:I(n.chainId),r=j((await R("/chains")).chains).map(A).flatMap(e=>{if(typeof e.id!="number"||!Number.isSafeInteger(e.id)||e.id<=0)return[];if(i!==void 0&&e.id!==i)return[];let h=e.disabled===!1,b=_(e.currency)?e.currency:{},c={chainId:e.id,name:f(e.displayName,"name")??f(e.name,"name")??String(e.id),vmType:f(e.vmType),nativeCurrency:{symbol:f(b.symbol),decimals:typeof b.decimals=="number"?b.decimals:void 0},bridgeIn:e.id!==p&&h&&$(e.id)!==void 0,bridgeOut:e.id!==p&&h&&e.vmType==="evm"};if(i===void 0)return[c];let a=new Map;for(let t of[...Array.isArray(e.featuredTokens)?e.featuredTokens:[],...Array.isArray(e.erc20Currencies)?e.erc20Currencies:[]]){if(!_(t)||typeof t.address!="string"||!new RegExp(w).test(t.address)||typeof t.decimals!="number"||!Number.isInteger(t.decimals)||t.decimals<0||t.decimals>255)continue;let m=T(t.address);a.has(m)||a.set(m,{address:m,symbol:f(t.symbol)??"unknown",decimals:t.decimals,bridgeable:t.supportsBridging===!0})}return[{...c,currencies:[...a.values()]}]});if(i!==void 0&&!r.length)throw new d(`Relay does not list chain ${i}.`);return{chains:r,summary:`${r.length} Relay chain${r.length===1?"":"s"}. bridgeIn marks origins relay_bridge_in can build from; bridgeOut marks destinations relay_bridge_out can reach. Currency lists are Relay-reported display data; bridgeable false means Relay does not bridge that token. Confirm token addresses before bridging.`}}return{tools:[{name:"relay_quote",inputSchema:{type:"object",additionalProperties:!1,required:["originChainId","destinationChainId","amount"],properties:{originChainId:{type:"integer",minimum:1},destinationChainId:{type:"integer",minimum:1},originCurrency:{type:"string",pattern:w},destinationCurrency:{type:"string",pattern:w},amount:{type:"string",pattern:"^[1-9][0-9]*$"},recipient:{type:"string",pattern:w},tradeType:{type:"string",enum:["EXACT_INPUT","EXACT_OUTPUT","EXPECTED_OUTPUT"]},...Object.fromEntries(["includedSwapSources","excludedSwapSources","includedOriginSwapSources","includedDestinationSwapSources"].map(n=>[n,{type:"array",maxItems:100,items:{type:"string",pattern:"^[A-Za-z0-9._ -]{1,128}$"}}]))}},execute:async(n,i)=>{try{return await z(n,i)}catch(g){throw new d(u.plainError(g))}}},{name:"relay_chains",inputSchema:{type:"object",additionalProperties:!1,properties:{chainId:{type:"integer",minimum:1}}},execute:async n=>{try{return await Z(n)}catch(i){throw new d(u.plainError(i))}}}]}};export{J as a};
1
+ import{c as $}from"./FQ6UZCM6.js";import{b as S,d as A,e as j,f as T,g as O,h as I,i as P,m as k,n as M,q as f,s as B}from"./64GOINYS.js";import{a as w,e as _}from"./NWNYJ26T.js";import{a as p}from"./FWD4L3CJ.js";import{a as d}from"./XSD5NL7J.js";function U(u){return{...u,token:{...u.token,symbol:f(u.token.symbol)??"unknown"}}}var J=u=>{let R=B(u);async function z(n,i){let g=T(i),r=I(n.originChainId),e=I(n.destinationChainId);if(r!==p&&e!==p)throw new d(`A Relay quote must start or end on chain ${p}.`);let h=O(n.originCurrency??S),b=O(n.destinationCurrency??S),c=T(n.recipient??g),a=P(n.amount);if(a==="0")throw new d("Provide a positive bridge amount.");let t=n.tradeType??"EXACT_INPUT";if(!["EXACT_INPUT","EXACT_OUTPUT","EXPECTED_OUTPUT"].includes(String(t)))throw new d("Choose EXACT_INPUT, EXACT_OUTPUT or EXPECTED_OUTPUT.");let m={};for(let E of["includedSwapSources","excludedSwapSources","includedOriginSwapSources","includedDestinationSwapSources"]){let y=n[E];if(y!==void 0){if(!Array.isArray(y)||y.length>100||y.some(x=>typeof x!="string"||!/^[A-Za-z0-9._ -]{1,128}$/.test(x)))throw new d("Provide valid Relay swap source names.");m[E]=y}}let N=await R("/quote/v2",{user:g,recipient:c,originChainId:r,destinationChainId:e,originCurrency:h,destinationCurrency:b,amount:a,tradeType:t,...m}),o=A(N.details),l=U(k(o.currencyIn)),s=U(k(o.currencyOut)),C=P(A(o.currencyOut).minimumAmount);M(T(o.sender)===g&&T(o.recipient)===c&&l.token.chainId===r&&l.token.address===h&&(t==="EXACT_INPUT"?l.amount===a:s.amount===a)&&s.token.chainId===e&&s.token.address===b&&BigInt(C)<=BigInt(s.amount));let F=Object.fromEntries(Object.entries(A(N.fees)).map(([E,y])=>[E,U(k(y))])),v=typeof o.timeEstimate=="number"&&Number.isFinite(o.timeEstimate)&&o.timeEstimate>=0?o.timeEstimate:void 0,X=e===p,q=X?"relay_bridge_in":"relay_bridge_out",D=t==="EXACT_INPUT"&&Object.keys(m).length===0&&r!==e&&(!X||$(r)!==void 0);return{executable:!1,nextAction:D?q:void 0,originChainId:r,destinationChainId:e,recipient:c,tradeType:t,amountIn:l,amountOut:s,minAmountOut:{token:s.token,amount:C},fees:F,slippage:{source:"provider",minimumAmount:C},...v===void 0?{}:{timeEstimateSeconds:v},summary:`Read-only Relay estimate: ${l.amount} base units of ${l.token.symbol} (${l.token.decimals} decimals) on chain ${r} for about ${s.amount}, minimum ${C}, base units of ${s.token.symbol} (${s.token.decimals} decimals) on chain ${e} for ${c}. Slippage: selected by Relay; Oak sent no slippage setting. The returned minimum above is the quote floor. Relay fees are already deducted from the output; origin gas is separate. Nothing was built or signed, and this estimate cannot be executed. ${D?`To bridge, call ${q}; it fetches a fresh quote and shows its own preview for human confirmation.`:"This estimate shape has no matching Oak execution path. No action will preserve these trade type or routing options."}`}}async function Z(n){let i=n.chainId===void 0?void 0:I(n.chainId),r=j((await R("/chains")).chains).map(A).flatMap(e=>{if(typeof e.id!="number"||!Number.isSafeInteger(e.id)||e.id<=0)return[];if(i!==void 0&&e.id!==i)return[];let h=e.disabled===!1,b=_(e.currency)?e.currency:{},c={chainId:e.id,name:f(e.displayName,"name")??f(e.name,"name")??String(e.id),vmType:f(e.vmType),nativeCurrency:{symbol:f(b.symbol),decimals:typeof b.decimals=="number"?b.decimals:void 0},bridgeIn:e.id!==p&&h&&$(e.id)!==void 0,bridgeOut:e.id!==p&&h&&e.vmType==="evm"};if(i===void 0)return[c];let a=new Map;for(let t of[...Array.isArray(e.featuredTokens)?e.featuredTokens:[],...Array.isArray(e.erc20Currencies)?e.erc20Currencies:[]]){if(!_(t)||typeof t.address!="string"||!new RegExp(w).test(t.address)||typeof t.decimals!="number"||!Number.isInteger(t.decimals)||t.decimals<0||t.decimals>255)continue;let m=T(t.address);a.has(m)||a.set(m,{address:m,symbol:f(t.symbol)??"unknown",decimals:t.decimals,bridgeable:t.supportsBridging===!0})}return[{...c,currencies:[...a.values()]}]});if(i!==void 0&&!r.length)throw new d(`Relay does not list chain ${i}.`);return{chains:r,summary:`${r.length} Relay chain${r.length===1?"":"s"}. bridgeIn marks origins relay_bridge_in can build from; bridgeOut marks destinations relay_bridge_out can reach. Currency lists are Relay-reported display data; bridgeable false means Relay does not bridge that token. Confirm token addresses before bridging.`}}return{tools:[{name:"relay_quote",inputSchema:{type:"object",additionalProperties:!1,required:["originChainId","destinationChainId","amount"],properties:{originChainId:{type:"integer",minimum:1},destinationChainId:{type:"integer",minimum:1},originCurrency:{type:"string",pattern:w},destinationCurrency:{type:"string",pattern:w},amount:{type:"string",pattern:"^[1-9][0-9]*$"},recipient:{type:"string",pattern:w},tradeType:{type:"string",enum:["EXACT_INPUT","EXACT_OUTPUT","EXPECTED_OUTPUT"]},...Object.fromEntries(["includedSwapSources","excludedSwapSources","includedOriginSwapSources","includedDestinationSwapSources"].map(n=>[n,{type:"array",maxItems:100,items:{type:"string",pattern:"^[A-Za-z0-9._ -]{1,128}$"}}]))}},execute:async(n,i)=>{try{return await z(n,i)}catch(g){throw new d(u.plainError(g))}}},{name:"relay_chains",inputSchema:{type:"object",additionalProperties:!1,properties:{chainId:{type:"integer",minimum:1}}},execute:async n=>{try{return await Z(n)}catch(i){throw new d(u.plainError(i))}}}]}};export{J as a};
@@ -1 +1 @@
1
- import{a as T}from"./PBQSJSZO.js";import{a as C}from"./5ZLOCQA4.js";import{g as k,m as I,n as _}from"./5KUWLUPM.js";import{a as u,i as G,j as N}from"./FWD4L3CJ.js";import{a as n}from"./XSD5NL7J.js";import{encodeFunctionData as w,erc20Abi as R,getAddress as D,parseAbi as z}from"viem";var d=D(G[u].vaults.spark.address),l={address:D(N),symbol:"USDG",decimals:6,chainId:u},E={address:d,symbol:"spUSDG",decimals:6,chainId:u},m=z(["function asset() view returns (address)","function decimals() view returns (uint8)","function maxMint(address) view returns (uint256)","function maxRedeem(address) view returns (uint256)","function maxDeposit(address) view returns (uint256)","function previewMint(uint256) view returns (uint256)","function previewRedeem(uint256) view returns (uint256)","function previewDeposit(uint256) view returns (uint256)","function mint(uint256 shares,address receiver) returns (uint256)","function mint(uint256 shares,address receiver,uint16 referral) returns (uint256)","function deposit(uint256 assets,address receiver,uint16 referral) returns (uint256)","function redeem(uint256 shares,address receiver,address owner) returns (uint256)"]),Q=C("Positive decimal base-unit integer; USDG and spUSDG both have 6 decimals."),J={type:"integer",minimum:0,maximum:65535};function M(s){return _(s,"Amount must be positive and fit uint256.",{notString:"Amount must be a positive base-unit integer string.",positive:!0})}function j(s){return I(s,"Invalid Spark integer read.")}function Z(s){return["mint","redeem","deposit_referral","return_liquidity"].map(r=>{let t=r==="mint",a=r==="redeem",h=r==="deposit_referral",x=t?["shares","maxAssets","referral"]:a?["shares"]:h?["amount","referral"]:["amount"],O=t?["shares","maxAssets"]:a?["shares"]:h?["amount","referral"]:["amount"];return{name:`spark_${r}`,inputSchema:{type:"object",additionalProperties:!1,required:O,properties:Object.fromEntries(x.map(c=>[c,c==="referral"?J:Q]))},execute:async(c,o)=>{try{if(T(o),Object.keys(c).some(p=>!x.includes(p)))throw new n("Unexpected Spark action argument.");let e=M(c[t||a?"shares":"amount"]),P=t?M(c.maxAssets):void 0,i=c.referral;if((h||i!==void 0)&&(typeof i!="number"||!Number.isInteger(i)||i<0||i>65535))throw new n("Referral must be a uint16 integer.");let f=s.clientFor(u);if(await f.getChainId()!==u)throw new n("Spark requires chain 4663.");let[q,B,F]=await Promise.all([f.readContract({address:d,abi:m,functionName:"asset"}),f.readContract({address:d,abi:m,functionName:"decimals"}),f.readContract({address:l.address,abi:R,functionName:"decimals"})]);if(typeof q!="string"||D(q)!==l.address||B!==6||F!==6)throw new n("Spark requires the pinned USDG/share metadata.");let v=r==="return_liquidity"?e:j(await f.readContract({address:d,abi:m,functionName:t?"previewMint":a?"previewRedeem":"previewDeposit",args:[e]}));if(v===0n)throw new n("Spark returned a zero action quote.");if(r!=="return_liquidity"){let p=j(await f.readContract({address:d,abi:m,functionName:t?"maxMint":a?"maxRedeem":"maxDeposit",args:[o]}));if(e>p)throw new n("The amount exceeds Spark\u2019s current action capacity.")}if(t&&v>P)throw new n("The mint quote exceeds maxAssets.");let U=t?v:e,H=t?i===void 0?w({abi:m,functionName:"mint",args:[e,o]}):w({abi:m,functionName:"mint",args:[e,o,i]}):a?w({abi:m,functionName:"redeem",args:[e,o,o]}):h?w({abi:m,functionName:"deposit",args:[e,o,i]}):w({abi:R,functionName:"transfer",args:[d,e]}),A=`${r} ${e} ${t||a?"spUSDG share":"USDG asset"} base units; ${r==="return_liquidity"?`USDG goes to ${d}, with no shares minted`:`beneficiary ${o}`}${i===void 0?"":`; event-only referral ${i}`}.`,$=[...t||h?[s.approval(l.address,d,U.toString(),u)]:[],s.unsignedTx({to:r==="return_liquidity"?l.address:d,data:H,value:"0",chainId:u,description:A})],g=await s.preview($,o),S=p=>g.changes.filter(b=>b.token.chainId===u&&k(b.token.address,p.address)).reduce((b,y)=>{if(y.token.decimals!==p.decimals||!/^-?\d+$/.test(y.amount))throw new n("Invalid Spark preview metadata.");return b+BigInt(y.amount)},0n);if(a?S(E)!==-e||S(l)<=0n:S(l)!==-U||r!=="return_liquidity"&&S(E)<(t?e:1n))throw new n("Spark preview does not match the requested outflow and receipt.");return{txs:$,preview:g,summary:`${A} Quoted ${v} ${a?"USDG asset":t||r==="return_liquidity"?"USDG input":"spUSDG share"} base units. ${g.summary} Standard ERC-4626 encodes no output minimum; the exact mint approval can become insufficient as interest accrues. Re-preview before signing.`}}catch(e){throw new n(s.plainError(e))}}}})}export{Z as a};
1
+ import{a as T}from"./43LI5NKJ.js";import{a as C}from"./66F5ZH34.js";import{g as k,m as I,n as _}from"./NWNYJ26T.js";import{a as u,i as G,j as N}from"./FWD4L3CJ.js";import{a as n}from"./XSD5NL7J.js";import{encodeFunctionData as w,erc20Abi as R,getAddress as D,parseAbi as z}from"viem";var d=D(G[u].vaults.spark.address),l={address:D(N),symbol:"USDG",decimals:6,chainId:u},E={address:d,symbol:"spUSDG",decimals:6,chainId:u},m=z(["function asset() view returns (address)","function decimals() view returns (uint8)","function maxMint(address) view returns (uint256)","function maxRedeem(address) view returns (uint256)","function maxDeposit(address) view returns (uint256)","function previewMint(uint256) view returns (uint256)","function previewRedeem(uint256) view returns (uint256)","function previewDeposit(uint256) view returns (uint256)","function mint(uint256 shares,address receiver) returns (uint256)","function mint(uint256 shares,address receiver,uint16 referral) returns (uint256)","function deposit(uint256 assets,address receiver,uint16 referral) returns (uint256)","function redeem(uint256 shares,address receiver,address owner) returns (uint256)"]),Q=C("Positive decimal base-unit integer; USDG and spUSDG both have 6 decimals."),J={type:"integer",minimum:0,maximum:65535};function M(s){return _(s,"Amount must be positive and fit uint256.",{notString:"Amount must be a positive base-unit integer string.",positive:!0})}function j(s){return I(s,"Invalid Spark integer read.")}function Z(s){return["mint","redeem","deposit_referral","return_liquidity"].map(r=>{let t=r==="mint",a=r==="redeem",h=r==="deposit_referral",x=t?["shares","maxAssets","referral"]:a?["shares"]:h?["amount","referral"]:["amount"],O=t?["shares","maxAssets"]:a?["shares"]:h?["amount","referral"]:["amount"];return{name:`spark_${r}`,inputSchema:{type:"object",additionalProperties:!1,required:O,properties:Object.fromEntries(x.map(c=>[c,c==="referral"?J:Q]))},execute:async(c,o)=>{try{if(T(o),Object.keys(c).some(p=>!x.includes(p)))throw new n("Unexpected Spark action argument.");let e=M(c[t||a?"shares":"amount"]),P=t?M(c.maxAssets):void 0,i=c.referral;if((h||i!==void 0)&&(typeof i!="number"||!Number.isInteger(i)||i<0||i>65535))throw new n("Referral must be a uint16 integer.");let f=s.clientFor(u);if(await f.getChainId()!==u)throw new n("Spark requires chain 4663.");let[q,B,F]=await Promise.all([f.readContract({address:d,abi:m,functionName:"asset"}),f.readContract({address:d,abi:m,functionName:"decimals"}),f.readContract({address:l.address,abi:R,functionName:"decimals"})]);if(typeof q!="string"||D(q)!==l.address||B!==6||F!==6)throw new n("Spark requires the pinned USDG/share metadata.");let v=r==="return_liquidity"?e:j(await f.readContract({address:d,abi:m,functionName:t?"previewMint":a?"previewRedeem":"previewDeposit",args:[e]}));if(v===0n)throw new n("Spark returned a zero action quote.");if(r!=="return_liquidity"){let p=j(await f.readContract({address:d,abi:m,functionName:t?"maxMint":a?"maxRedeem":"maxDeposit",args:[o]}));if(e>p)throw new n("The amount exceeds Spark\u2019s current action capacity.")}if(t&&v>P)throw new n("The mint quote exceeds maxAssets.");let U=t?v:e,H=t?i===void 0?w({abi:m,functionName:"mint",args:[e,o]}):w({abi:m,functionName:"mint",args:[e,o,i]}):a?w({abi:m,functionName:"redeem",args:[e,o,o]}):h?w({abi:m,functionName:"deposit",args:[e,o,i]}):w({abi:R,functionName:"transfer",args:[d,e]}),A=`${r} ${e} ${t||a?"spUSDG share":"USDG asset"} base units; ${r==="return_liquidity"?`USDG goes to ${d}, with no shares minted`:`beneficiary ${o}`}${i===void 0?"":`; event-only referral ${i}`}.`,$=[...t||h?[s.approval(l.address,d,U.toString(),u)]:[],s.unsignedTx({to:r==="return_liquidity"?l.address:d,data:H,value:"0",chainId:u,description:A})],g=await s.preview($,o),S=p=>g.changes.filter(b=>b.token.chainId===u&&k(b.token.address,p.address)).reduce((b,y)=>{if(y.token.decimals!==p.decimals||!/^-?\d+$/.test(y.amount))throw new n("Invalid Spark preview metadata.");return b+BigInt(y.amount)},0n);if(a?S(E)!==-e||S(l)<=0n:S(l)!==-U||r!=="return_liquidity"&&S(E)<(t?e:1n))throw new n("Spark preview does not match the requested outflow and receipt.");return{txs:$,preview:g,summary:`${A} Quoted ${v} ${a?"USDG asset":t||r==="return_liquidity"?"USDG input":"spUSDG share"} base units. ${g.summary} Standard ERC-4626 encodes no output minimum; the exact mint approval can become insufficient as interest accrues. Re-preview before signing.`}}catch(e){throw new n(s.plainError(e))}}}})}export{Z as a};
@@ -1 +1 @@
1
- import{a as h,c as A}from"./MYFAKCQI.js";import{d as l,e as m,f as y,j as w}from"./5KUWLUPM.js";import{a as t}from"./XSD5NL7J.js";import{a as f}from"./JXOEJPJ4.js";import{erc20Abi as g,parseAbi as R}from"viem";var x="https://api.relay.link",I="0x0000000000000000000000000000000000000000",L=R(["function depositNative(address depositor, bytes32 id) payable","function depositErc20(address depositor, address token, uint256 amount, bytes32 id)"]),k=(1n<<256n)-1n;function p(e){return y(e,"Relay returned an unexpected response.")}function _(e){if(!Array.isArray(e))throw new t("Relay returned an unexpected list.");return e}function b(e){return w(e,"Provide a valid wallet or token address.",l)}function S(e){let n=b(e);return n==="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"?I:n}function E(e){if(typeof e!="number"||!Number.isSafeInteger(e)||e<=0)throw new t("Provide a positive integer chain ID.");return e}function P(e){if(typeof e!="string"||!/^(0|[1-9]\d*)$/.test(e)||BigInt(e)>k)throw new t("Amounts must be decimal base-unit strings within the uint256 range.");return e}function $(e){if(typeof e!="number"||!Number.isSafeInteger(e)||e<=0)throw new t("Relay returned an invalid order or refund deadline. Request a fresh quote.");return e}function q(e){if(typeof e!="string"||!/^0x[0-9a-fA-F]{64}$/.test(e))throw new t("Provide a valid Relay request or order ID.");return e}function T(e){let n=p(e);if(typeof n.symbol!="string"||!n.symbol.trim()||typeof n.decimals!="number"||!Number.isInteger(n.decimals)||n.decimals<0||n.decimals>255)throw new t("Relay returned invalid token metadata.");return{address:b(n.address),chainId:E(n.chainId),decimals:n.decimals,symbol:n.symbol}}function D(e){let n=p(e);return{token:T(n.currency),amount:P(n.amount)}}function M(e){if(!e)throw new t("Relay quote does not match the requested amount, chain, recipient, minimum or transaction.")}function V(e){return e===void 0?[]:_(e).map(q)}function z(e){if(!(e==null||e==="N/A")){if(typeof e!="string")throw new t("Relay returned an invalid failure reason.");return f(e)}}function H(e,n="symbol"){if(!(typeof e!="string"||!e.trim()))return(n==="symbol"?/^[A-Za-z0-9._-]{1,32}$/:/^[A-Za-z0-9 ()+-]{1,32}$/).test(e)?e:f(e)}async function J(e,n,r,o,s,c){let i=await e.clientFor(s).readContract({address:n,abi:g,functionName:"allowance",args:[c,r]});if(typeof i!="bigint"||i<0n||i>k)throw new t("Could not read the Relay token allowance.");return[...i>0n?[e.approval(n,r,"0",s)]:[],e.approval(n,r,o,s)]}function j(e){return async(n,r)=>p(await v(e)(n,r))}function v(e){return async(n,r)=>{let o=process.env.OAK_RELAY_API_KEY?.trim(),s=n.split("?")[0],c=s==="/quote/v2",i=s==="/requests/v3"||/^\/balance\/[^/]+\/events$/.test(s);if(!o&&i)throw new t("Configure OAK_RELAY_API_KEY on the server: Relay request history and balance events require an API key. A missing key does not mean this wallet has no requests or events. Check a saved request with relay_status.");if(!o&&c)throw new t("Configure the Relay API key (OAK_RELAY_API_KEY) on the server: Relay quote/v2 requires a valid API key since October 2, 2026. Status and chain reads remain available without it.");try{return await A(e.http,`${x}${n}`,{method:r===void 0?"GET":"POST",headers:{...o?{"x-api-key":o}:{},"Content-Type":"application/json","User-Agent":"oak-relay/1.0"},...r===void 0?{}:{body:JSON.stringify(r)}},a=>m(a)||Array.isArray(a))}catch(a){let d=a instanceof h?a.response.status:void 0,u=e.plainError(a);throw d===401||d===403||/HTTP (401|403)\b/.test(u)?new t("Relay requires an authorized API key for this endpoint. Ask the operator to configure a valid OAK_RELAY_API_KEY on the server with access to this resource; never pass keys in tool arguments."):s==="/prices/rates"&&(d!==void 0&&d>=500||/HTTP 5\d\d\b/.test(u))?new t("Relay exchange rates are unavailable because the upstream service failed. Retry later; no rates were returned. Use relay_token_price with chainId and address for an individual token."):new t(o?u.replaceAll(o,"[redacted]"):u)}}}export{x as a,I as b,L as c,p as d,_ as e,b as f,S as g,E as h,P as i,$ as j,q as k,T as l,D as m,M as n,V as o,z as p,H as q,J as r,j as s,v as t};
1
+ import{a as h,c as A}from"./VEQBHI6O.js";import{d as l,e as m,f as y,j as w}from"./NWNYJ26T.js";import{a as t}from"./XSD5NL7J.js";import{a as f}from"./JXOEJPJ4.js";import{erc20Abi as g,parseAbi as R}from"viem";var x="https://api.relay.link",I="0x0000000000000000000000000000000000000000",L=R(["function depositNative(address depositor, bytes32 id) payable","function depositErc20(address depositor, address token, uint256 amount, bytes32 id)"]),k=(1n<<256n)-1n;function p(e){return y(e,"Relay returned an unexpected response.")}function _(e){if(!Array.isArray(e))throw new t("Relay returned an unexpected list.");return e}function b(e){return w(e,"Provide a valid wallet or token address.",l)}function S(e){let n=b(e);return n==="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"?I:n}function E(e){if(typeof e!="number"||!Number.isSafeInteger(e)||e<=0)throw new t("Provide a positive integer chain ID.");return e}function P(e){if(typeof e!="string"||!/^(0|[1-9]\d*)$/.test(e)||BigInt(e)>k)throw new t("Amounts must be decimal base-unit strings within the uint256 range.");return e}function $(e){if(typeof e!="number"||!Number.isSafeInteger(e)||e<=0)throw new t("Relay returned an invalid order or refund deadline. Request a fresh quote.");return e}function q(e){if(typeof e!="string"||!/^0x[0-9a-fA-F]{64}$/.test(e))throw new t("Provide a valid Relay request or order ID.");return e}function T(e){let n=p(e);if(typeof n.symbol!="string"||!n.symbol.trim()||typeof n.decimals!="number"||!Number.isInteger(n.decimals)||n.decimals<0||n.decimals>255)throw new t("Relay returned invalid token metadata.");return{address:b(n.address),chainId:E(n.chainId),decimals:n.decimals,symbol:n.symbol}}function D(e){let n=p(e);return{token:T(n.currency),amount:P(n.amount)}}function M(e){if(!e)throw new t("Relay quote does not match the requested amount, chain, recipient, minimum or transaction.")}function V(e){return e===void 0?[]:_(e).map(q)}function z(e){if(!(e==null||e==="N/A")){if(typeof e!="string")throw new t("Relay returned an invalid failure reason.");return f(e)}}function H(e,n="symbol"){if(!(typeof e!="string"||!e.trim()))return(n==="symbol"?/^[A-Za-z0-9._-]{1,32}$/:/^[A-Za-z0-9 ()+-]{1,32}$/).test(e)?e:f(e)}async function J(e,n,r,o,s,c){let i=await e.clientFor(s).readContract({address:n,abi:g,functionName:"allowance",args:[c,r]});if(typeof i!="bigint"||i<0n||i>k)throw new t("Could not read the Relay token allowance.");return[...i>0n?[e.approval(n,r,"0",s)]:[],e.approval(n,r,o,s)]}function j(e){return async(n,r)=>p(await v(e)(n,r))}function v(e){return async(n,r)=>{let o=process.env.OAK_RELAY_API_KEY?.trim(),s=n.split("?")[0],c=s==="/quote/v2",i=s==="/requests/v3"||/^\/balance\/[^/]+\/events$/.test(s);if(!o&&i)throw new t("Configure OAK_RELAY_API_KEY on the server: Relay request history and balance events require an API key. A missing key does not mean this wallet has no requests or events. Check a saved request with relay_status.");if(!o&&c)throw new t("Configure the Relay API key (OAK_RELAY_API_KEY) on the server: Relay quote/v2 requires a valid API key since October 2, 2026. Status and chain reads remain available without it.");try{return await A(e.http,`${x}${n}`,{method:r===void 0?"GET":"POST",headers:{...o?{"x-api-key":o}:{},"Content-Type":"application/json","User-Agent":"oak-relay/1.0"},...r===void 0?{}:{body:JSON.stringify(r)}},a=>m(a)||Array.isArray(a))}catch(a){let d=a instanceof h?a.response.status:void 0,u=e.plainError(a);throw d===401||d===403||/HTTP (401|403)\b/.test(u)?new t("Relay requires an authorized API key for this endpoint. Ask the operator to configure a valid OAK_RELAY_API_KEY on the server with access to this resource; never pass keys in tool arguments."):s==="/prices/rates"&&(d!==void 0&&d>=500||/HTTP 5\d\d\b/.test(u))?new t("Relay exchange rates are unavailable because the upstream service failed. Retry later; no rates were returned. Use relay_token_price with chainId and address for an individual token."):new t(o?u.replaceAll(o,"[redacted]"):u)}}}export{x as a,I as b,L as c,p as d,_ as e,b as f,S as g,E as h,P as i,$ as j,q as k,T as l,D as m,M as n,V as o,z as p,H as q,J as r,j as s,v as t};