@oakagentkit/core 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/build/dist/api/addresses.d.ts +93 -0
  2. package/build/dist/api/addresses.js +1 -1
  3. package/build/dist/api/chain.js +1 -1
  4. package/build/dist/api/history.js +1 -1
  5. package/build/dist/api/identity-link.js +1 -1
  6. package/build/dist/api/metadata.js +1 -1
  7. package/build/dist/api/modules/beefy/boosts.js +1 -1
  8. package/build/dist/api/modules/beefy/clm.js +1 -1
  9. package/build/dist/api/modules/beefy/guard.js +1 -1
  10. package/build/dist/api/modules/beefy/index.js +1 -1
  11. package/build/dist/api/modules/beefy/liquidity.js +1 -1
  12. package/build/dist/api/modules/beefy/management.js +1 -1
  13. package/build/dist/api/modules/beefy/vaults.js +1 -1
  14. package/build/dist/api/modules/clanker/extensions.js +1 -1
  15. package/build/dist/api/modules/clanker/index.js +1 -1
  16. package/build/dist/api/modules/clanker/manage.js +1 -1
  17. package/build/dist/api/modules/clanker/pool-config.js +1 -1
  18. package/build/dist/api/modules/clanker/protocol.js +1 -1
  19. package/build/dist/api/modules/clanker/state.js +1 -1
  20. package/build/dist/api/modules/erc8004/common.js +1 -1
  21. package/build/dist/api/modules/erc8004/domain.js +1 -1
  22. package/build/dist/api/modules/erc8004/index.js +1 -1
  23. package/build/dist/api/modules/erc8004/management.js +1 -1
  24. package/build/dist/api/modules/erc8004/reputation.js +1 -1
  25. package/build/dist/api/modules/erc8004/services.js +1 -1
  26. package/build/dist/api/modules/erc8004/validation.js +1 -1
  27. package/build/dist/api/modules/grove/index.js +1 -1
  28. package/build/dist/api/modules/heyresearch/backoff.d.ts +6 -0
  29. package/build/dist/api/modules/heyresearch/backoff.js +1 -0
  30. package/build/dist/api/modules/heyresearch/builder-feed.d.ts +62 -0
  31. package/build/dist/api/modules/heyresearch/builder-feed.js +1 -0
  32. package/build/dist/api/modules/heyresearch/index.d.ts +3 -0
  33. package/build/dist/api/modules/heyresearch/index.js +1 -1
  34. package/build/dist/api/modules/heyresearch/proof-reads.d.ts +7 -0
  35. package/build/dist/api/modules/heyresearch/proof-reads.js +1 -0
  36. package/build/dist/api/modules/heyresearch/public-reads.d.ts +1 -0
  37. package/build/dist/api/modules/heyresearch/public-reads.js +1 -1
  38. package/build/dist/api/modules/heyresearch/scan.d.ts +31 -0
  39. package/build/dist/api/modules/heyresearch/scan.js +1 -0
  40. package/build/dist/api/modules/heyresearch/status-labels.d.ts +5 -0
  41. package/build/dist/api/modules/heyresearch/status-labels.js +1 -0
  42. package/build/dist/api/modules/heyresearch/token-facts.d.ts +123 -0
  43. package/build/dist/api/modules/heyresearch/token-facts.js +1 -0
  44. package/build/dist/api/modules/hoodag/chain-reads.js +1 -1
  45. package/build/dist/api/modules/hoodag/index.js +1 -1
  46. package/build/dist/api/modules/hoodag/management.js +1 -1
  47. package/build/dist/api/modules/hoodag/public-reads.js +1 -1
  48. package/build/dist/api/modules/hoodag/reconstruct.js +1 -1
  49. package/build/dist/api/modules/hoodlock/airdrop.js +1 -1
  50. package/build/dist/api/modules/hoodlock/buyback.js +1 -1
  51. package/build/dist/api/modules/hoodlock/commerce.js +1 -1
  52. package/build/dist/api/modules/hoodlock/fee.js +1 -1
  53. package/build/dist/api/modules/hoodlock/guard.js +1 -1
  54. package/build/dist/api/modules/hoodlock/index.js +1 -1
  55. package/build/dist/api/modules/hoodlock/lifecycle.js +1 -1
  56. package/build/dist/api/modules/hoodlock/locks-burn.js +1 -1
  57. package/build/dist/api/modules/hoodlock/public.js +1 -1
  58. package/build/dist/api/modules/hookr/actions.d.ts +1 -1
  59. package/build/dist/api/modules/hookr/actions.js +1 -1
  60. package/build/dist/api/modules/hookr/addons.js +1 -1
  61. package/build/dist/api/modules/hookr/agent-gate.d.ts +63 -0
  62. package/build/dist/api/modules/hookr/agent-gate.js +1 -0
  63. package/build/dist/api/modules/hookr/contracts.js +1 -1
  64. package/build/dist/api/modules/hookr/create-cancel.js +1 -1
  65. package/build/dist/api/modules/hookr/discovery.js +1 -1
  66. package/build/dist/api/modules/hookr/fill-bounty.js +1 -1
  67. package/build/dist/api/modules/hookr/index.d.ts +1 -0
  68. package/build/dist/api/modules/hookr/index.js +1 -1
  69. package/build/dist/api/modules/hookr/launch-options.d.ts +119 -0
  70. package/build/dist/api/modules/hookr/launch-options.js +1 -0
  71. package/build/dist/api/modules/hookr/launch-profile.d.ts +5 -0
  72. package/build/dist/api/modules/hookr/launch-profile.js +1 -0
  73. package/build/dist/api/modules/hookr/launch-receipt.d.ts +144 -0
  74. package/build/dist/api/modules/hookr/launch-receipt.js +1 -0
  75. package/build/dist/api/modules/hookr/launch.d.ts +58 -0
  76. package/build/dist/api/modules/hookr/launch.js +1 -0
  77. package/build/dist/api/modules/hookr/liquidity.d.ts +48 -0
  78. package/build/dist/api/modules/hookr/liquidity.js +1 -0
  79. package/build/dist/api/modules/hookr/lp-positions.d.ts +2 -0
  80. package/build/dist/api/modules/hookr/lp-positions.js +1 -0
  81. package/build/dist/api/modules/hookr/lp-reads.d.ts +52 -0
  82. package/build/dist/api/modules/hookr/lp-reads.js +1 -0
  83. package/build/dist/api/modules/hookr/lp-receipt.d.ts +136 -0
  84. package/build/dist/api/modules/hookr/lp-receipt.js +1 -0
  85. package/build/dist/api/modules/hookr/lp-state.d.ts +33 -0
  86. package/build/dist/api/modules/hookr/lp-state.js +1 -0
  87. package/build/dist/api/modules/hookr/pins.d.ts +43 -0
  88. package/build/dist/api/modules/hookr/pins.js +1 -0
  89. package/build/dist/api/modules/hookr/public-reads.js +1 -1
  90. package/build/dist/api/modules/hookr/read-utils.d.ts +59 -0
  91. package/build/dist/api/modules/hookr/read-utils.js +1 -0
  92. package/build/dist/api/modules/hookr/relay.js +1 -1
  93. package/build/dist/api/modules/hookr/revenue.js +1 -1
  94. package/build/dist/api/modules/kyberswap/index.js +1 -1
  95. package/build/dist/api/modules/kyberswap/source-pools.js +1 -1
  96. package/build/dist/api/modules/lighter/index.js +1 -1
  97. package/build/dist/api/modules/longbow/administration.js +1 -1
  98. package/build/dist/api/modules/longbow/analytics.js +1 -1
  99. package/build/dist/api/modules/longbow/fixed.js +1 -1
  100. package/build/dist/api/modules/longbow/index.js +1 -1
  101. package/build/dist/api/modules/longbow/nft.js +1 -1
  102. package/build/dist/api/modules/longbow/rebates.js +1 -1
  103. package/build/dist/api/modules/longbow/staking.js +1 -1
  104. package/build/dist/api/modules/meridian/index.js +1 -1
  105. package/build/dist/api/modules/meridian/markets.js +1 -1
  106. package/build/dist/api/modules/meridian/rfq.js +1 -1
  107. package/build/dist/api/modules/merkl/discovery.js +1 -1
  108. package/build/dist/api/modules/merkl/index.js +1 -1
  109. package/build/dist/api/modules/merkl/manage.js +1 -1
  110. package/build/dist/api/modules/merkl/protocol.js +1 -1
  111. package/build/dist/api/modules/morpho/allocator.js +1 -1
  112. package/build/dist/api/modules/morpho/bundles.js +1 -1
  113. package/build/dist/api/modules/morpho/in-kind.js +1 -1
  114. package/build/dist/api/modules/morpho/index.js +1 -1
  115. package/build/dist/api/modules/morpho/local-guard.js +1 -1
  116. package/build/dist/api/modules/morpho/midnight.js +1 -1
  117. package/build/dist/api/modules/morpho/protocol.js +1 -1
  118. package/build/dist/api/modules/morpho/vault-management.js +1 -1
  119. package/build/dist/api/modules/morpho/vault-tools.js +1 -1
  120. package/build/dist/api/modules/morpho/vault-v2.js +1 -1
  121. package/build/dist/api/modules/netnet/card-plan.js +1 -1
  122. package/build/dist/api/modules/netnet/card-read.js +1 -1
  123. package/build/dist/api/modules/netnet/card-recovery.js +1 -1
  124. package/build/dist/api/modules/netnet/desk-action.js +1 -1
  125. package/build/dist/api/modules/netnet/desk-read.js +1 -1
  126. package/build/dist/api/modules/netnet/financial.js +1 -1
  127. package/build/dist/api/modules/netnet/index.js +1 -1
  128. package/build/dist/api/modules/netnet/staking.js +1 -1
  129. package/build/dist/api/modules/orbio/index.js +1 -1
  130. package/build/dist/api/modules/pons/claim.js +1 -1
  131. package/build/dist/api/modules/pons/index.js +1 -1
  132. package/build/dist/api/modules/pons/launch-status.js +1 -1
  133. package/build/dist/api/modules/pons/prices.js +1 -1
  134. package/build/dist/api/modules/pons/reads.js +1 -1
  135. package/build/dist/api/modules/pons/swap-terms.js +1 -1
  136. package/build/dist/api/modules/pons/trade.js +1 -1
  137. package/build/dist/api/modules/poolstrade/index.js +1 -1
  138. package/build/dist/api/modules/priors/coverage.js +1 -1
  139. package/build/dist/api/modules/priors/discovery.js +1 -1
  140. package/build/dist/api/modules/priors/features.js +1 -1
  141. package/build/dist/api/modules/priors/index.js +1 -1
  142. package/build/dist/api/modules/priors/integration.js +1 -1
  143. package/build/dist/api/modules/priors/market.js +1 -1
  144. package/build/dist/api/modules/priors/pt.js +1 -1
  145. package/build/dist/api/modules/priors/savings-exit.js +1 -1
  146. package/build/dist/api/modules/priors/starter-line.js +1 -1
  147. package/build/dist/api/modules/priors/stock-swap.js +1 -1
  148. package/build/dist/api/modules/relay/bootstrap.js +1 -1
  149. package/build/dist/api/modules/relay/discovery.js +1 -1
  150. package/build/dist/api/modules/relay/inbound.js +1 -1
  151. package/build/dist/api/modules/relay/index.js +1 -1
  152. package/build/dist/api/modules/relay/outbound-status.js +1 -1
  153. package/build/dist/api/modules/relay/reads.js +1 -1
  154. package/build/dist/api/modules/spark/actions.js +1 -1
  155. package/build/dist/api/modules/spark/details.js +1 -1
  156. package/build/dist/api/modules/spark/index.js +1 -1
  157. package/build/dist/api/modules/spark/management.js +1 -1
  158. package/build/dist/api/modules/steakhouse/analytics.js +1 -1
  159. package/build/dist/api/modules/steakhouse/erc4626.js +1 -1
  160. package/build/dist/api/modules/steakhouse/index.js +1 -1
  161. package/build/dist/api/modules/steakhouse/local-guard.js +1 -1
  162. package/build/dist/api/modules/steakhouse/management.js +1 -1
  163. package/build/dist/api/modules/steakhouse/v2-exit.js +1 -1
  164. package/build/dist/api/modules/tickerspring/basket-routes.js +1 -1
  165. package/build/dist/api/modules/tickerspring/contract-reads.js +1 -1
  166. package/build/dist/api/modules/tickerspring/discovery.js +1 -1
  167. package/build/dist/api/modules/tickerspring/exit-preview.js +1 -1
  168. package/build/dist/api/modules/tickerspring/guards.js +1 -1
  169. package/build/dist/api/modules/tickerspring/index.js +1 -1
  170. package/build/dist/api/modules/tickerspring/journeys.js +1 -1
  171. package/build/dist/api/modules/tickerspring/ladder.js +1 -1
  172. package/build/dist/api/modules/tickerspring/maker.js +1 -1
  173. package/build/dist/api/modules/tickerspring/order-accounting.js +1 -1
  174. package/build/dist/api/modules/tickerspring/research.js +1 -1
  175. package/build/dist/api/modules/tickerspring/strategies.js +1 -1
  176. package/build/dist/api/modules/uniswap/auction-create.js +1 -1
  177. package/build/dist/api/modules/uniswap/auction.js +1 -1
  178. package/build/dist/api/modules/uniswap/batch.js +1 -1
  179. package/build/dist/api/modules/uniswap/common.js +1 -1
  180. package/build/dist/api/modules/uniswap/fees.js +1 -1
  181. package/build/dist/api/modules/uniswap/index.js +1 -1
  182. package/build/dist/api/modules/uniswap/local-guard.js +1 -1
  183. package/build/dist/api/modules/uniswap/oracle.js +1 -1
  184. package/build/dist/api/modules/uniswap/pool-math.js +1 -1
  185. package/build/dist/api/modules/uniswap/pools.js +1 -1
  186. package/build/dist/api/modules/uniswap/position.js +1 -1
  187. package/build/dist/api/modules/uniswap/protocol.js +1 -1
  188. package/build/dist/api/modules/uniswap/token-jar.js +1 -1
  189. package/build/dist/api/modules/uniswap/trade-batch.js +1 -1
  190. package/build/dist/api/modules/uniswap/trade.js +1 -1
  191. package/build/dist/api/modules/uniswap/v2.js +1 -1
  192. package/build/dist/api/modules/uniswap/v3.js +1 -1
  193. package/build/dist/api/modules/uniswap/v4.js +1 -1
  194. package/build/dist/api/modules/uniswap/wrap.js +1 -1
  195. package/build/dist/api/modules/velora/claims.js +1 -1
  196. package/build/dist/api/modules/velora/delta-reads.js +1 -1
  197. package/build/dist/api/modules/velora/index.js +1 -1
  198. package/build/dist/api/modules/wormhole/index.d.ts +5 -0
  199. package/build/dist/api/modules/wormhole/index.js +1 -0
  200. package/build/dist/api/modules/wormhole/license.d.ts +2 -0
  201. package/build/dist/api/modules/wormhole/license.js +1 -0
  202. package/build/dist/api/modules/wormhole/quotetext.d.ts +36 -0
  203. package/build/dist/api/modules/wormhole/quotetext.js +1 -0
  204. package/build/dist/api/modules/wormhole/scan-text.d.ts +40 -0
  205. package/build/dist/api/modules/wormhole/scan-text.js +1 -0
  206. package/build/dist/api/modules/wormhole/token-check.d.ts +54 -0
  207. package/build/dist/api/modules/wormhole/token-check.js +1 -0
  208. package/build/dist/api/positions.js +1 -1
  209. package/build/dist/api/pricenote.js +1 -1
  210. package/build/dist/api/prices.js +1 -1
  211. package/build/dist/api/pricing.js +1 -1
  212. package/build/dist/api/rpc.js +1 -1
  213. package/build/dist/api/send.js +1 -1
  214. package/build/dist/api/signing-registry.js +1 -1
  215. package/build/dist/api/signing.js +1 -1
  216. package/build/dist/api/simulate.js +1 -1
  217. package/build/dist/api/swap.js +1 -1
  218. package/build/dist/api/tokens.d.ts +4 -0
  219. package/build/dist/api/tokens.js +1 -1
  220. package/build/dist/api/tool-policy.js +1 -1
  221. package/build/dist/api/types.d.ts +7 -0
  222. package/build/dist/chunks/{QHHZDXRG.js → 2FSX7MMR.js} +1 -1
  223. package/build/dist/chunks/{RTBOMWCB.js → 2LM7U4S7.js} +1 -1
  224. package/build/dist/chunks/{XKRWJCYE.js → 2MSQ6JII.js} +1 -1
  225. package/build/dist/chunks/{T6MTTMLQ.js → 2UU5TBBB.js} +1 -1
  226. package/build/dist/chunks/{OW7GOYKA.js → 2W46IRX6.js} +1 -1
  227. package/build/dist/chunks/{6LLOTPH2.js → 3EFV4FQF.js} +1 -1
  228. package/build/dist/chunks/{64AF7ECA.js → 3NDVXEBR.js} +1 -1
  229. package/build/dist/chunks/3SC5UI35.js +1 -0
  230. package/build/dist/chunks/{TCS3ICNE.js → 3WBDHUV2.js} +1 -1
  231. package/build/dist/chunks/{UPPYXY74.js → 4AKIXLXH.js} +1 -1
  232. package/build/dist/chunks/{RRSODRGT.js → 4GAWMCQC.js} +1 -1
  233. package/build/dist/chunks/{ZGXNTWYG.js → 4GHVIBL5.js} +1 -1
  234. package/build/dist/chunks/{NHCRJC5X.js → 4KQZTPMS.js} +1 -1
  235. package/build/dist/chunks/{N77ANGBT.js → 4X2JOQ2L.js} +1 -1
  236. package/build/dist/chunks/{ZPM2MFXZ.js → 52DHGSG4.js} +1 -1
  237. package/build/dist/chunks/{ITV52TIE.js → 57HAXNQV.js} +1 -1
  238. package/build/dist/chunks/5IIR3GIN.js +1 -0
  239. package/build/dist/chunks/{CAU44UWP.js → 5O5ZE3ZV.js} +1 -1
  240. package/build/dist/chunks/5OEHZJ6X.js +1 -0
  241. package/build/dist/chunks/{CBA776XQ.js → 5VHH5PW3.js} +1 -1
  242. package/build/dist/chunks/{O5SU2I3G.js → 66VBACC2.js} +1 -1
  243. package/build/dist/chunks/{6HV5BR7P.js → 6AWTAE4Q.js} +1 -1
  244. package/build/dist/chunks/{JRVTSGAT.js → 6UPPUHCL.js} +1 -1
  245. package/build/dist/chunks/{3ACEWCKZ.js → 6ZYLNB2B.js} +1 -1
  246. package/build/dist/chunks/7XLEYOZH.js +1 -0
  247. package/build/dist/chunks/{QCD33HMD.js → AAGDMH54.js} +1 -1
  248. package/build/dist/chunks/ACN2BFMA.js +1 -0
  249. package/build/dist/chunks/{L24EOVLT.js → AJP5LDM2.js} +1 -1
  250. package/build/dist/chunks/{F2YH72GF.js → ALK6NKFP.js} +1 -1
  251. package/build/dist/chunks/{EC5W3UZD.js → AMICUXS6.js} +1 -1
  252. package/build/dist/chunks/{5FTSKYQH.js → BX7XQANB.js} +1 -1
  253. package/build/dist/chunks/{QNPEKNWM.js → CEIPDEXZ.js} +1 -1
  254. package/build/dist/chunks/{HFQS5344.js → CQCVFRQ5.js} +1 -1
  255. package/build/dist/chunks/{OJLMF5AR.js → CUNQ5RG5.js} +1 -1
  256. package/build/dist/chunks/{IWALIX7Q.js → CXLEQCP3.js} +1 -1
  257. package/build/dist/chunks/{VJ3W2V3B.js → CY75R4FK.js} +1 -1
  258. package/build/dist/chunks/{65QFM4JU.js → DCTUYDWF.js} +1 -1
  259. package/build/dist/chunks/DHOBTJRD.js +1 -0
  260. package/build/dist/chunks/{NO57NGRV.js → DRWWPBOQ.js} +1 -1
  261. package/build/dist/chunks/{7B5UH2VS.js → DZGEQBO7.js} +1 -1
  262. package/build/dist/chunks/{RFJCG4NA.js → E7R3J4H7.js} +1 -1
  263. package/build/dist/chunks/{7T4BYFD4.js → EGUMOD3A.js} +1 -1
  264. package/build/dist/chunks/ELZNT5Q3.js +1 -0
  265. package/build/dist/chunks/EPZ7SWKM.js +1 -0
  266. package/build/dist/chunks/{WDGPCPQJ.js → EXRKBBX2.js} +1 -1
  267. package/build/dist/chunks/{U3FMCX3L.js → FBSUTF3B.js} +1 -1
  268. package/build/dist/chunks/FUXT7GRK.js +1 -0
  269. package/build/dist/chunks/G6HCV67X.js +1 -0
  270. package/build/dist/chunks/{HNMOB76J.js → GGUEKSR4.js} +1 -1
  271. package/build/dist/chunks/{GZ5TW3WB.js → GIV5JMTE.js} +1 -1
  272. package/build/dist/chunks/{ZYR5LSVB.js → GJY3P6OG.js} +1 -1
  273. package/build/dist/chunks/HOEQVPY7.js +1 -0
  274. package/build/dist/chunks/{R7D256HG.js → IBXYIN7Q.js} +1 -1
  275. package/build/dist/chunks/{SXX52Y27.js → IUE6RASI.js} +1 -1
  276. package/build/dist/chunks/J2XAEVKC.js +1 -0
  277. package/build/dist/chunks/{AYM5L6L7.js → J3GFCBZZ.js} +1 -1
  278. package/build/dist/chunks/JNZZLA2A.js +1 -0
  279. package/build/dist/chunks/JPOYTTTW.js +1 -0
  280. package/build/dist/chunks/{4IPW5WZ4.js → JST5JGAP.js} +1 -1
  281. package/build/dist/chunks/{ZCGVBK5K.js → JVI26KQO.js} +1 -1
  282. package/build/dist/chunks/JWCOXLYA.js +1 -0
  283. package/build/dist/chunks/{G7UKNO2I.js → KHJFXJBU.js} +1 -1
  284. package/build/dist/chunks/{HQVC6X3T.js → KSZMMNXK.js} +1 -1
  285. package/build/dist/chunks/{JC4SYMBV.js → L3ZM77SJ.js} +1 -1
  286. package/build/dist/chunks/{QRUC7EFE.js → L62M7LOB.js} +1 -1
  287. package/build/dist/chunks/{5VXNQFYJ.js → L7YBCMZU.js} +1 -1
  288. package/build/dist/chunks/{H6ED3RHF.js → LMVB3B6T.js} +1 -1
  289. package/build/dist/chunks/{UIIJWIR6.js → LQGPMOD2.js} +1 -1
  290. package/build/dist/chunks/{BXN3MDS4.js → LQUDJCAR.js} +1 -1
  291. package/build/dist/chunks/LT5P6PZW.js +1 -0
  292. package/build/dist/chunks/M7U3A4EH.js +3 -0
  293. package/build/dist/chunks/MFNP4KOK.js +1 -0
  294. package/build/dist/chunks/MKQVS3IO.js +1 -0
  295. package/build/dist/chunks/{7US6PD56.js → MLPWQTBS.js} +1 -1
  296. package/build/dist/chunks/{5XFXH2JT.js → NATG6YA6.js} +1 -1
  297. package/build/dist/chunks/{O47JXRXN.js → NAYRD43N.js} +1 -1
  298. package/build/dist/chunks/NMYGNJIJ.js +1 -0
  299. package/build/dist/chunks/NRBIXV7V.js +1 -0
  300. package/build/dist/chunks/{D6VP3N27.js → NSOEDRBU.js} +1 -1
  301. package/build/dist/chunks/{HL2MLC3O.js → NU4K3TEZ.js} +1 -1
  302. package/build/dist/chunks/NWSPC3NH.js +1 -0
  303. package/build/dist/chunks/{SDICP7BT.js → OE3CLZHR.js} +1 -1
  304. package/build/dist/chunks/{2NA6JLEC.js → OQVZVR2S.js} +1 -1
  305. package/build/dist/chunks/{D3OWLDVB.js → OVK4EEOD.js} +1 -1
  306. package/build/dist/chunks/{Q2VMH2LB.js → PARWLWXW.js} +1 -1
  307. package/build/dist/chunks/{DHXVYHT4.js → PTAWEHKB.js} +1 -1
  308. package/build/dist/chunks/{KQFDLDHL.js → PWBL4WKB.js} +1 -1
  309. package/build/dist/chunks/{55NX776C.js → PZHR4ITH.js} +1 -1
  310. package/build/dist/chunks/{ANQ43XJA.js → Q356HHCL.js} +1 -1
  311. package/build/dist/chunks/{OG5HRQU4.js → QRDDKA4I.js} +1 -1
  312. package/build/dist/chunks/{YR3QJVJQ.js → QXNPPCOU.js} +1 -1
  313. package/build/dist/chunks/{6NR7SVRO.js → QYYFRAWY.js} +1 -1
  314. package/build/dist/chunks/{7BTELNNI.js → R53P2K3C.js} +1 -1
  315. package/build/dist/chunks/{5HW6JKME.js → R7FXNZRM.js} +1 -1
  316. package/build/dist/chunks/{CCEWSOBT.js → R7QPJQP6.js} +1 -1
  317. package/build/dist/chunks/{SLSPWXR6.js → R7SXC74O.js} +1 -1
  318. package/build/dist/chunks/{IHGVCPVA.js → RAKUK5VR.js} +1 -1
  319. package/build/dist/chunks/{7LDAJ6BM.js → S3HNPTXA.js} +1 -1
  320. package/build/dist/chunks/SI6GCOAS.js +1 -0
  321. package/build/dist/chunks/{WIDTTGSH.js → SJPM5ST4.js} +1 -1
  322. package/build/dist/chunks/{GHDDVBPK.js → SJPYXNOK.js} +1 -1
  323. package/build/dist/chunks/{VY3P34PY.js → SKQGLGES.js} +1 -1
  324. package/build/dist/chunks/{ZT67OMLW.js → SOYQOE5P.js} +1 -1
  325. package/build/dist/chunks/{BFVLBENV.js → SQZRVIVF.js} +1 -1
  326. package/build/dist/chunks/{N6RL3SUZ.js → SSTROLQM.js} +1 -1
  327. package/build/dist/chunks/{IUXOUKQN.js → SXAIXD56.js} +1 -1
  328. package/build/dist/chunks/{TNRDCBGO.js → SXX3VTBP.js} +1 -1
  329. package/build/dist/chunks/{UXG67LH3.js → TCPPYBGQ.js} +1 -1
  330. package/build/dist/chunks/TFVWAYHY.js +1 -0
  331. package/build/dist/chunks/{67TJOOBI.js → TLJPVYRJ.js} +1 -1
  332. package/build/dist/chunks/{HRG2VVPY.js → TMGWXDCZ.js} +1 -1
  333. package/build/dist/chunks/{NMFVXBTL.js → TNSKEHPC.js} +1 -1
  334. package/build/dist/chunks/{C2FEXLMA.js → TQL7UDFL.js} +1 -1
  335. package/build/dist/chunks/{SQH7A4O3.js → TWCSCRFS.js} +1 -1
  336. package/build/dist/chunks/{2EDXKJ3B.js → TWSTOFN3.js} +1 -1
  337. package/build/dist/chunks/{JREVERSC.js → U3F6DDML.js} +1 -1
  338. package/build/dist/chunks/{6PU2CMQZ.js → UFS2RVEZ.js} +1 -1
  339. package/build/dist/chunks/{Y2IWPNEW.js → UNZRE3YU.js} +1 -1
  340. package/build/dist/chunks/{K463HFGC.js → USSOVTD5.js} +1 -1
  341. package/build/dist/chunks/V2OOOV6B.js +1 -0
  342. package/build/dist/chunks/{WQZLYX64.js → V5LTA42G.js} +1 -1
  343. package/build/dist/chunks/{TAI63P6E.js → VC2RCYQE.js} +1 -1
  344. package/build/dist/chunks/{2SNQWKHA.js → VFSRRDLY.js} +1 -1
  345. package/build/dist/chunks/{XW7RH7YY.js → VVEUJ36E.js} +1 -1
  346. package/build/dist/chunks/{5EHQM6DM.js → WQ6H62DM.js} +1 -1
  347. package/build/dist/chunks/{FSPNOVKB.js → WQQJ7UPJ.js} +1 -1
  348. package/build/dist/chunks/{F3TJCOVV.js → WTSMPDT5.js} +1 -1
  349. package/build/dist/chunks/{BYXBS45D.js → WVXW6VL3.js} +1 -1
  350. package/build/dist/chunks/WWFOYZT2.js +1 -0
  351. package/build/dist/chunks/WWNAGOCD.js +1 -0
  352. package/build/dist/chunks/X2NJSQUY.js +203 -0
  353. package/build/dist/chunks/{PJ65ZOQ7.js → XMA25DXR.js} +1 -1
  354. package/build/dist/chunks/{C3ZZSGSP.js → XQUPZ3GU.js} +1 -1
  355. package/build/dist/chunks/XQXLFF7Y.js +1 -0
  356. package/build/dist/chunks/XV2HQKND.js +1 -0
  357. package/build/dist/chunks/{QZM7CWZW.js → XVFLT275.js} +1 -1
  358. package/build/dist/chunks/{BV3AHLH5.js → XWEFKXKA.js} +1 -1
  359. package/build/dist/chunks/{QZTUMSQY.js → Y2KH6DCE.js} +1 -1
  360. package/build/dist/chunks/{GSI5COTD.js → YA5WWDEW.js} +1 -1
  361. package/build/dist/chunks/YHB55C5T.js +1 -0
  362. package/build/dist/chunks/YQUKU2LS.js +1 -0
  363. package/build/dist/chunks/{A25P24G2.js → YZSTP2E6.js} +1 -1
  364. package/build/dist/chunks/{T3NPRRTY.js → Z7RL4NGX.js} +1 -1
  365. package/build/dist/chunks/{LI7FYINH.js → ZT47KN7A.js} +1 -1
  366. package/build/dist/chunks/{QQWF6A4P.js → ZUG6MG46.js} +1 -1
  367. package/package.json +2 -2
  368. package/build/dist/chunks/46ZA2R5L.js +0 -1
  369. package/build/dist/chunks/6SCCW74G.js +0 -1
  370. package/build/dist/chunks/74BPMUAG.js +0 -1
  371. package/build/dist/chunks/7Z5IM2QZ.js +0 -1
  372. package/build/dist/chunks/DLIOZCEG.js +0 -1
  373. package/build/dist/chunks/EYYUWFUR.js +0 -1
  374. package/build/dist/chunks/G4PDM3MX.js +0 -1
  375. package/build/dist/chunks/JRO6WTK4.js +0 -1
  376. package/build/dist/chunks/NBRMUFJP.js +0 -1
  377. package/build/dist/chunks/NIOBE2LK.js +0 -1
  378. package/build/dist/chunks/OJMYESQU.js +0 -1
  379. package/build/dist/chunks/UMK564HS.js +0 -1
  380. package/build/dist/chunks/XPFVT2EA.js +0 -1
@@ -1 +1 @@
1
- import{b as pe,c as De}from"./SQ5BNSXR.js";import{c as Te,d as a,r as xe}from"./53N7PNJH.js";import{o as ce}from"./CAU44UWP.js";import{a as M}from"./VJ3W2V3B.js";import{a as ve}from"./6IM6A5VA.js";import{a as te}from"./UWOFA6GV.js";import{c as H,j as Ce}from"./73N3TOJL.js";import{a as ke}from"./RETS2ZEK.js";import{a as R,i as qe}from"./XPFVT2EA.js";import{a as e}from"./5YS5V2LK.js";import{decodeFunctionData as Ee,erc20Abi as Ne}from"viem";var je="https://api.relay.link",q="0x0000000000000000000000000000000000000000",Le=60,Se=30,n=qe[R].relay.depository.address.toLowerCase(),ne="0x59916da825d2d2ec1bf878d71c88826f6633ecca",Oe=new Map([[1,{chainId:"ethereum",depository:n}],[10,{chainId:"optimism",depository:n}],[25,{chainId:"cronos",depository:ne}],[56,{chainId:"bnb",depository:n}],[100,{chainId:"gnosis",depository:n}],[130,{chainId:"unichain",depository:n}],[137,{chainId:"polygon",depository:n}],[143,{chainId:"monad",depository:n}],[146,{chainId:"sonic",depository:n}],[169,{chainId:"manta",depository:n}],[196,{chainId:"xlayer",depository:n}],[288,{chainId:"boba",depository:n}],[324,{chainId:"zksync",depository:n}],[360,{chainId:"shape",depository:n}],[480,{chainId:"worldchain",depository:n}],[747,{chainId:"flow",depository:n}],[988,{chainId:"stable",depository:n}],[999,{chainId:"hyperevm",depository:n}],[1088,{chainId:"metis",depository:ne}],[1135,{chainId:"lisk",depository:n}],[1868,{chainId:"soneium",depository:n}],[2020,{chainId:"ronin",depository:n}],[2741,{chainId:"abstract",depository:n}],[2818,{chainId:"morph",depository:n}],[4217,{chainId:"tempo",depository:n}],[4326,{chainId:"megaeth",depository:n}],[5e3,{chainId:"mantle",depository:ne}],[5031,{chainId:"somnia",depository:n}],[5042,{chainId:"arc",depository:n}],[8453,{chainId:"base",depository:n}],[9745,{chainId:"plasma",depository:n}],[33139,{chainId:"apechain",depository:n}],[34443,{chainId:"mode",depository:n}],[42018,{chainId:"mythos",depository:n}],[42161,{chainId:"arbitrum",depository:n}],[42220,{chainId:"celo",depository:n}],[43114,{chainId:"avalanche",depository:n}],[48900,{chainId:"zircuit",depository:n}],[57073,{chainId:"ink",depository:n}],[59144,{chainId:"linea",depository:ne}],[60808,{chainId:"bob",depository:n}],[80094,{chainId:"berachain",depository:n}],[97477,{chainId:"doma",depository:n}],[98866,{chainId:"plume",depository:n}],[534352,{chainId:"scroll",depository:n}],[685689,{chainId:"gensyn",depository:n}],[747474,{chainId:"katana",depository:n}],[5064014,{chainId:"ethereal",depository:n}],[7777777,{chainId:"zora",depository:n}]]);function nt(t){return Oe.get(t)?.depository}function F(t){return Ce(t,"Provide a token or wallet address.")}function I(t){let o=F(t);return o===M?q:o}function f(t,o){return F(t)===F(o)}function l(t){if(typeof t!="string")throw new e("Provide a decimal base-unit amount string.");return ke(t),t}function oe(t){let o=l(t);if(BigInt(o)<=0n)throw new e("Provide a positive base-unit amount.");return o}function ze(t){if(typeof t!="number"||!Number.isSafeInteger(t)||t<=0)throw new e("Provide a positive integer origin chain ID.");return t}function Pe(t,o){if(typeof t!="number"||!Number.isSafeInteger(t)||t<=0)throw new e(`${o} is missing or invalid.`);return t}async function G(t,o,c,i,p){let r=a(c);if(r.chainId!==i||I(r.address)!==p||typeof r.symbol!="string"||!/^[A-Za-z0-9._-]{1,32}$/.test(r.symbol))throw new e("Relay quote token metadata does not match the requested chain and address.");if(p===q){if(r.decimals!==18)throw new e("Native token decimals must be 18.");return{address:M,chainId:i,symbol:r.symbol,decimals:18}}let g=`${i}:${p}`,m=o.get(g);if(m===void 0){let d=await t.clientFor(i).readContract({address:p,abi:Ne,functionName:"decimals"}),w=typeof d=="bigint"?Number(d):d;if(typeof w!="number"||!Number.isInteger(w)||w<0||w>255)throw new e("Could not read valid ERC-20 decimals() on-chain.");m=w,o.set(g,m)}return{address:p,chainId:i,symbol:r.symbol,decimals:m}}async function Ke(t,o,c,i,p,r,g){if(c.swap===void 0)return[];let m=a(c.swap),d=a(m.from);if(d.chainId!==p)throw new e("The swap prerequisite token must be on the origin chain.");let w=await G(t,o,d,p,I(d.address)),j=r===q?M:r;if(f(w.address,j))throw new e("The swap prerequisite must use a different input token.");let me=oe(m.amountIn),y=m.slippageBps;if(y!==void 0&&(typeof y!="number"||!Number.isInteger(y)||y<0||y>1e4))throw new e("Provide swap slippage in basis points from 0 to 10000.");let E=await t.quoteSwap({from:w.address,to:j,amountIn:me,...y===void 0?{}:{slippageBps:y}},i);if(BigInt(l(E.expiresAt))<=BigInt(Math.floor(Date.now()/1e3)))throw new e("The swap prerequisite quote expired. Request a fresh quote.");if(BigInt(l(E.minAmountOut))<BigInt(g))throw new e("The swap prerequisite minimum cannot cover the bridge amount.");let k=await t.buildSwap(E.quoteId,i);if(!("txs"in k)||!k.txs.length)throw new e("The swap prerequisite must return unsigned transactions.");if(k.txs.some(S=>S.chainId!==p))throw new e("The injected swap coordinator does not support this origin chain.");return k.txs.map(S=>t.unsignedTx(S))}async function Ue(t,o,c){ve(c);let i=ze(o.originChainId);if(i===R)throw new e("Inbound bridging requires an origin chain other than 4663.");let p=Oe.get(i);if(!p)throw new e("Relay inbound does not support this origin chain.");if(o.destinationChainId!==void 0&&o.destinationChainId!==R)throw new e("Inbound bridge destination must be chain 4663.");let r=I(o.originCurrency??M),g=I(o.destinationCurrency??M),m=F(o.recipient??c),d=oe(o.amount),w=o.minAmountOut===void 0?void 0:l(o.minAmountOut),j=o.slippageBps===void 0?pe:o.slippageBps;if(ce("0",j),await t.clientFor(i).getChainId()!==i)throw new e("The RPC chain does not match the inbound origin chain.");let y=new Map,E=await Ke(t,y,o,c,i,r,d),k,S=process.env.OAK_RELAY_API_KEY?.trim();if(!S)throw new e("Configure 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{let s=await t.http(`${je}/quote/v2`,{method:"POST",headers:{"content-type":"application/json","user-agent":"oak-core/0.1.0","x-api-key":S},body:JSON.stringify({user:c,recipient:m,originChainId:i,destinationChainId:R,originCurrency:r,destinationCurrency:g,amount:d,tradeType:"EXACT_INPUT",...r===q?{}:{explicitDeposit:!0}})});if(!s.ok)throw new Error("Relay HTTP failure.");k=await s.json()}catch{throw new e("Relay quote request failed. Please try again.")}let b=a(k);if(typeof b.requestId!="string"||!/^0x[0-9a-fA-F]{64}$/.test(b.requestId))throw new e("Relay returned an invalid request ID.");let P=b.requestId,he=`/intents/status/v3?requestId=${P}`,L=a(b.details);if(!f(L.sender,c)||!f(L.recipient,m))throw new e("Relay quote sender or recipient does not match the request.");let ye=a(L.currencyIn),ie=a(L.currencyOut),N=await G(t,y,ye.currency,i,r),O=await G(t,y,ie.currency,R,g);if(l(ye.amount)!==d)throw new e("Relay quote input amount does not match the request.");let _=oe(ie.amount),C=oe(ie.minimumAmount);if(BigInt(C)>BigInt(_))throw new e("Relay quote minimum output exceeds the expected output.");if(w!==void 0){if(C!==w)throw new e("Relay order minimum must exactly match minAmountOut. Request a new quote.")}else{let s=ce(_,j);if(BigInt(C)<BigInt(s))throw De(_,C)}let le=a(a(b.fees).relayer),fe=a(le.currency),Q=await G(t,y,fe,i,I(fe.address)),we={token:Q,amount:l(le.amount)},Ie=a(L.refundCurrency),_e=a(Ie.currency),z=await G(t,y,_e,i,r),re=l(Ie.amount),K=a(a(b.protocol).v2);if(typeof K.orderId!="string"||!/^0x[0-9a-fA-F]{64}$/.test(K.orderId))throw new e("Relay returned an invalid order ID.");let V=K.orderId.toLowerCase(),W=a(K.paymentDetails),$=F(W.depository);if(W.chainId!==p.chainId||$!==p.depository||I(W.currency)!==r||l(W.amount)!==d)throw new e("Relay payment details do not match the origin chain depository and input.");let J=a(K.orderData),v=a(J.output);if(v.chainId!=="robinhood"||!Array.isArray(v.calls)||v.calls.length!==0||!Array.isArray(v.payments)||v.payments.length!==1)throw new e("Relay order output does not match destination chain 4663.");let X=a(v.payments[0]);if(!f(X.recipient,m)||I(X.currency)!==g||l(X.minimumAmount)!==C||l(X.expectedAmount)!==_)throw new e("Relay order output payment does not match the quoted recipient and amounts.");let se=Pe(v.deadline,"Relay order output deadline");if(!Array.isArray(J.inputs)||!J.inputs.length)throw new e("Relay order has no inputs.");let Z=[],ae=[];for(let s of J.inputs){let u=a(s),x=a(u.payment);if(x.chainId!==p.chainId||I(x.currency)!==r||l(x.amount)!==d||!Array.isArray(u.refunds)||!u.refunds.length)throw new e("Relay order input does not match the quoted input.");for(let D of u.refunds){let h=a(D);if(!f(h.recipient,c))throw new e("Relay refund recipient does not match the agent wallet. Request a new quote.");if(Z.push(Pe(h.deadline,"Relay order refund deadline")),ae.push(l(h.minimumAmount)),!(h.chainId===p.chainId?f(h.recipient,c)&&I(h.currency)===r:h.chainId==="robinhood"&&I(h.currency)===g))throw new e("Relay order refund terms do not match the sender or recipient.")}}let ge=Math.min(se,...Z),U=0,be=()=>{let s=Math.floor(Date.now()/1e3),u=U||s+Le;if(ge-s<=Se)throw new e("Relay order deadline is expired or too soon to sign safely. Request a new quote.");if(U=Math.min(u,ge-Se),U<=s)throw new e("Relay quote expired before signing. Request a new quote.")};if(be(),!Array.isArray(b.steps)||!b.steps.length)throw new e("Relay returned no origin transactions.");let T=[];for(let s of b.steps){let u=a(s);if(u.kind!=="transaction"||u.requestId!==P||!Array.isArray(u.items)||!u.items.length)throw new e("Relay returned an unsupported origin step.");for(let x of u.items){let D=a(x),h=a(D.data),ue=a(D.check);if(D.status!=="incomplete"||h.chainId!==i||!f(h.from,c))throw new e("Relay transaction does not match the origin chain and sender.");if(ue.method!=="GET"||ue.endpoint!==he)throw new e("Relay status endpoint does not match the request ID.");T.push(t.unsignedTx({to:F(h.to),data:h.data,value:l(h.value),chainId:i,description:`Relay inbound deposit for request ${P}; destination chain 4663.`}))}}if(!T.length)throw new e("Relay returned no origin transactions.");if(r===q&&T.length!==1)throw new e("Relay native deposit must be a single depositNative transaction.");if(r!==q&&T.length>2)throw new e("Relay ERC-20 deposit allows at most one exact-amount approval before depositErc20.");for(let s of T.slice(0,-1)){if(!s.data.toLowerCase().startsWith("0x095ea7b3"))throw new e("Relay returned an unsupported prerequisite transaction.");let u=Ee({abi:Ne,data:s.data});if(u.functionName!=="approve")throw new e("Relay returned an invalid approval.");let[x,D]=u.args;if(r===q||!f(s.to,r)||!f(x,$)||D!==BigInt(d)||s.value!=="0")throw new e("Relay approval must authorize the exact input amount for the origin depository.");s.description=`Approve exactly ${t.formatAmount(d,N.decimals)} ${N.symbol} (${d} base units of ${r}) for ${$} on chain ${i}.`}let B=T[T.length-1],Y=r===q,ee=Y?"depositNative":"depositErc20",Ae=Y?"depositNative(address,bytes32)":"depositErc20(address,address,uint256,bytes32)";if(!f(B.to,$)||B.value!==(Y?d:"0")||!(Y?/^0x[0-9a-fA-F]{136}$/:/^0x[0-9a-fA-F]{264}$/).test(B.data))throw new e(`Relay deposit transaction does not target the origin depository with ${ee} calldata.`);let A;try{A=Ee({abi:Te,data:B.data})}catch{throw new e(`Relay deposit transaction must call ${Ae}.`)}if(A.functionName!==ee)throw new e(`Relay deposit transaction must call ${Ae}.`);let Be=A.args[0],Me=A.functionName==="depositErc20"?A.args[3]:A.args[1];if(A.functionName==="depositErc20"&&(!f(A.args[1],r)||A.args[2]!==BigInt(d)))throw new e("Relay depositErc20 token or amount does not match the quoted input.");if(!f(Be,c)||Me.toLowerCase()!==V)throw new e(`Relay ${ee} depositor or orderId does not match the wallet and quoted protocol.v2.orderId.`);B.description=`Relay inbound ${ee} for order ${V} (request ${P}); destination chain 4663.`;let de=Y?[]:await xe(t,r,$,d,i,c);for(let[s,u]of de.entries())u.description=de.length===2&&s===0?`Reset the existing ${N.symbol} allowance for ${$} on chain ${i} to zero.`:`Approve exactly ${t.formatAmount(d,N.decimals)} ${N.symbol} (${d} base units of ${r}) for ${$} on chain ${i}.`;let $e=[...E,...de,B],Re=await t.preview($e,c);be();let Fe=Re.changes.map(s=>{let u=s.amount.startsWith("-");return`${u?"-":""}${t.formatAmount(u?s.amount.slice(1):s.amount,s.token.decimals)} ${s.token.symbol} (${s.token.address}, chain ${s.token.chainId})`});return{txs:$e,preview:Re,requestId:P,orderId:V,depository:$,originChainId:i,destinationChainId:R,recipient:m,amountIn:{token:N,amount:d},amountOut:{token:O,amount:_},minAmountOut:C,relayerFee:we,refundCurrency:{token:z,amount:re,minimumAmounts:ae},orderDeadline:String(se),refundDeadlines:Z.map(String),expiresAt:String(U),status:"pending",statusEndpoint:he,summary:`${E.length?"Swap prerequisite first, then ":""}Relay inbound from chain ${i} to chain 4663 for ${m}; expected ${t.formatAmount(_,O.decimals)} ${O.symbol}, minimum ${t.formatAmount(C,O.decimals)} ${O.symbol} (${O.address}). Quoted relay fee ${t.formatAmount(we.amount,Q.decimals)} ${Q.symbol} (${Q.address}, chain ${i}); output is net of quoted fees. Order ${V} (request ${P}); output deadline ${se}, refund deadlines ${Z.join(", ")}, quote expires ${U}. Refund terms: details.refundCurrency quotes ${t.formatAmount(re,z.decimals)} ${z.symbol} (${re} base units) on chain ${z.chainId} (${z.address}), but protocol.v2 order refund floor is ${ae.join(", ")} base units. ${Fe.join("; ")}. Unsigned origin transactions only; destination fulfillment remains pending. Track with relay_status; timeout or refund is not fulfillment.`}}var ot=t=>({tools:[{name:"relay_bridge_in",inputSchema:{type:"object",additionalProperties:!1,required:["originChainId","amount"],properties:{originChainId:{type:"integer",minimum:1},destinationChainId:{const:R},originCurrency:H,destinationCurrency:H,amount:te(),minAmountOut:te(),slippageBps:{type:"integer",minimum:0,maximum:9999,default:pe},recipient:H,swap:{type:"object",additionalProperties:!1,required:["from","amountIn"],properties:{from:{type:"object",additionalProperties:!1,required:["address","chainId","symbol","decimals"],properties:{address:H,chainId:{type:"integer",minimum:1},symbol:{type:"string"},decimals:{type:"integer",minimum:0,maximum:255}}},amountIn:te(),slippageBps:{type:"integer",minimum:0,maximum:1e4}}}}},async execute(o,c){try{return await Ue(t,o,c)}catch(i){throw new e(t.plainError(i))}}}]});export{nt as a,ot as b};
1
+ import{b as pe,c as De}from"./SQ5BNSXR.js";import{c as Te,d as a,r as xe}from"./53N7PNJH.js";import{o as ce}from"./5O5ZE3ZV.js";import{a as M}from"./CY75R4FK.js";import{a as ve}from"./6IM6A5VA.js";import{a as te}from"./UWOFA6GV.js";import{c as H,j as Ce}from"./73N3TOJL.js";import{a as ke}from"./RETS2ZEK.js";import{a as R,i as qe}from"./G6HCV67X.js";import{a as e}from"./5YS5V2LK.js";import{decodeFunctionData as Ee,erc20Abi as Ne}from"viem";var je="https://api.relay.link",q="0x0000000000000000000000000000000000000000",Le=60,Se=30,n=qe[R].relay.depository.address.toLowerCase(),ne="0x59916da825d2d2ec1bf878d71c88826f6633ecca",Oe=new Map([[1,{chainId:"ethereum",depository:n}],[10,{chainId:"optimism",depository:n}],[25,{chainId:"cronos",depository:ne}],[56,{chainId:"bnb",depository:n}],[100,{chainId:"gnosis",depository:n}],[130,{chainId:"unichain",depository:n}],[137,{chainId:"polygon",depository:n}],[143,{chainId:"monad",depository:n}],[146,{chainId:"sonic",depository:n}],[169,{chainId:"manta",depository:n}],[196,{chainId:"xlayer",depository:n}],[288,{chainId:"boba",depository:n}],[324,{chainId:"zksync",depository:n}],[360,{chainId:"shape",depository:n}],[480,{chainId:"worldchain",depository:n}],[747,{chainId:"flow",depository:n}],[988,{chainId:"stable",depository:n}],[999,{chainId:"hyperevm",depository:n}],[1088,{chainId:"metis",depository:ne}],[1135,{chainId:"lisk",depository:n}],[1868,{chainId:"soneium",depository:n}],[2020,{chainId:"ronin",depository:n}],[2741,{chainId:"abstract",depository:n}],[2818,{chainId:"morph",depository:n}],[4217,{chainId:"tempo",depository:n}],[4326,{chainId:"megaeth",depository:n}],[5e3,{chainId:"mantle",depository:ne}],[5031,{chainId:"somnia",depository:n}],[5042,{chainId:"arc",depository:n}],[8453,{chainId:"base",depository:n}],[9745,{chainId:"plasma",depository:n}],[33139,{chainId:"apechain",depository:n}],[34443,{chainId:"mode",depository:n}],[42018,{chainId:"mythos",depository:n}],[42161,{chainId:"arbitrum",depository:n}],[42220,{chainId:"celo",depository:n}],[43114,{chainId:"avalanche",depository:n}],[48900,{chainId:"zircuit",depository:n}],[57073,{chainId:"ink",depository:n}],[59144,{chainId:"linea",depository:ne}],[60808,{chainId:"bob",depository:n}],[80094,{chainId:"berachain",depository:n}],[97477,{chainId:"doma",depository:n}],[98866,{chainId:"plume",depository:n}],[534352,{chainId:"scroll",depository:n}],[685689,{chainId:"gensyn",depository:n}],[747474,{chainId:"katana",depository:n}],[5064014,{chainId:"ethereal",depository:n}],[7777777,{chainId:"zora",depository:n}]]);function nt(t){return Oe.get(t)?.depository}function F(t){return Ce(t,"Provide a token or wallet address.")}function I(t){let o=F(t);return o===M?q:o}function f(t,o){return F(t)===F(o)}function l(t){if(typeof t!="string")throw new e("Provide a decimal base-unit amount string.");return ke(t),t}function oe(t){let o=l(t);if(BigInt(o)<=0n)throw new e("Provide a positive base-unit amount.");return o}function ze(t){if(typeof t!="number"||!Number.isSafeInteger(t)||t<=0)throw new e("Provide a positive integer origin chain ID.");return t}function Pe(t,o){if(typeof t!="number"||!Number.isSafeInteger(t)||t<=0)throw new e(`${o} is missing or invalid.`);return t}async function G(t,o,c,i,p){let r=a(c);if(r.chainId!==i||I(r.address)!==p||typeof r.symbol!="string"||!/^[A-Za-z0-9._-]{1,32}$/.test(r.symbol))throw new e("Relay quote token metadata does not match the requested chain and address.");if(p===q){if(r.decimals!==18)throw new e("Native token decimals must be 18.");return{address:M,chainId:i,symbol:r.symbol,decimals:18}}let g=`${i}:${p}`,m=o.get(g);if(m===void 0){let d=await t.clientFor(i).readContract({address:p,abi:Ne,functionName:"decimals"}),w=typeof d=="bigint"?Number(d):d;if(typeof w!="number"||!Number.isInteger(w)||w<0||w>255)throw new e("Could not read valid ERC-20 decimals() on-chain.");m=w,o.set(g,m)}return{address:p,chainId:i,symbol:r.symbol,decimals:m}}async function Ke(t,o,c,i,p,r,g){if(c.swap===void 0)return[];let m=a(c.swap),d=a(m.from);if(d.chainId!==p)throw new e("The swap prerequisite token must be on the origin chain.");let w=await G(t,o,d,p,I(d.address)),j=r===q?M:r;if(f(w.address,j))throw new e("The swap prerequisite must use a different input token.");let me=oe(m.amountIn),y=m.slippageBps;if(y!==void 0&&(typeof y!="number"||!Number.isInteger(y)||y<0||y>1e4))throw new e("Provide swap slippage in basis points from 0 to 10000.");let E=await t.quoteSwap({from:w.address,to:j,amountIn:me,...y===void 0?{}:{slippageBps:y}},i);if(BigInt(l(E.expiresAt))<=BigInt(Math.floor(Date.now()/1e3)))throw new e("The swap prerequisite quote expired. Request a fresh quote.");if(BigInt(l(E.minAmountOut))<BigInt(g))throw new e("The swap prerequisite minimum cannot cover the bridge amount.");let k=await t.buildSwap(E.quoteId,i);if(!("txs"in k)||!k.txs.length)throw new e("The swap prerequisite must return unsigned transactions.");if(k.txs.some(S=>S.chainId!==p))throw new e("The injected swap coordinator does not support this origin chain.");return k.txs.map(S=>t.unsignedTx(S))}async function Ue(t,o,c){ve(c);let i=ze(o.originChainId);if(i===R)throw new e("Inbound bridging requires an origin chain other than 4663.");let p=Oe.get(i);if(!p)throw new e("Relay inbound does not support this origin chain.");if(o.destinationChainId!==void 0&&o.destinationChainId!==R)throw new e("Inbound bridge destination must be chain 4663.");let r=I(o.originCurrency??M),g=I(o.destinationCurrency??M),m=F(o.recipient??c),d=oe(o.amount),w=o.minAmountOut===void 0?void 0:l(o.minAmountOut),j=o.slippageBps===void 0?pe:o.slippageBps;if(ce("0",j),await t.clientFor(i).getChainId()!==i)throw new e("The RPC chain does not match the inbound origin chain.");let y=new Map,E=await Ke(t,y,o,c,i,r,d),k,S=process.env.OAK_RELAY_API_KEY?.trim();if(!S)throw new e("Configure 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{let s=await t.http(`${je}/quote/v2`,{method:"POST",headers:{"content-type":"application/json","user-agent":"oak-core/0.1.0","x-api-key":S},body:JSON.stringify({user:c,recipient:m,originChainId:i,destinationChainId:R,originCurrency:r,destinationCurrency:g,amount:d,tradeType:"EXACT_INPUT",...r===q?{}:{explicitDeposit:!0}})});if(!s.ok)throw new Error("Relay HTTP failure.");k=await s.json()}catch{throw new e("Relay quote request failed. Please try again.")}let b=a(k);if(typeof b.requestId!="string"||!/^0x[0-9a-fA-F]{64}$/.test(b.requestId))throw new e("Relay returned an invalid request ID.");let P=b.requestId,he=`/intents/status/v3?requestId=${P}`,L=a(b.details);if(!f(L.sender,c)||!f(L.recipient,m))throw new e("Relay quote sender or recipient does not match the request.");let ye=a(L.currencyIn),ie=a(L.currencyOut),N=await G(t,y,ye.currency,i,r),O=await G(t,y,ie.currency,R,g);if(l(ye.amount)!==d)throw new e("Relay quote input amount does not match the request.");let _=oe(ie.amount),C=oe(ie.minimumAmount);if(BigInt(C)>BigInt(_))throw new e("Relay quote minimum output exceeds the expected output.");if(w!==void 0){if(C!==w)throw new e("Relay order minimum must exactly match minAmountOut. Request a new quote.")}else{let s=ce(_,j);if(BigInt(C)<BigInt(s))throw De(_,C)}let le=a(a(b.fees).relayer),fe=a(le.currency),Q=await G(t,y,fe,i,I(fe.address)),we={token:Q,amount:l(le.amount)},Ie=a(L.refundCurrency),_e=a(Ie.currency),z=await G(t,y,_e,i,r),re=l(Ie.amount),K=a(a(b.protocol).v2);if(typeof K.orderId!="string"||!/^0x[0-9a-fA-F]{64}$/.test(K.orderId))throw new e("Relay returned an invalid order ID.");let V=K.orderId.toLowerCase(),W=a(K.paymentDetails),$=F(W.depository);if(W.chainId!==p.chainId||$!==p.depository||I(W.currency)!==r||l(W.amount)!==d)throw new e("Relay payment details do not match the origin chain depository and input.");let J=a(K.orderData),v=a(J.output);if(v.chainId!=="robinhood"||!Array.isArray(v.calls)||v.calls.length!==0||!Array.isArray(v.payments)||v.payments.length!==1)throw new e("Relay order output does not match destination chain 4663.");let X=a(v.payments[0]);if(!f(X.recipient,m)||I(X.currency)!==g||l(X.minimumAmount)!==C||l(X.expectedAmount)!==_)throw new e("Relay order output payment does not match the quoted recipient and amounts.");let se=Pe(v.deadline,"Relay order output deadline");if(!Array.isArray(J.inputs)||!J.inputs.length)throw new e("Relay order has no inputs.");let Z=[],ae=[];for(let s of J.inputs){let u=a(s),x=a(u.payment);if(x.chainId!==p.chainId||I(x.currency)!==r||l(x.amount)!==d||!Array.isArray(u.refunds)||!u.refunds.length)throw new e("Relay order input does not match the quoted input.");for(let D of u.refunds){let h=a(D);if(!f(h.recipient,c))throw new e("Relay refund recipient does not match the agent wallet. Request a new quote.");if(Z.push(Pe(h.deadline,"Relay order refund deadline")),ae.push(l(h.minimumAmount)),!(h.chainId===p.chainId?f(h.recipient,c)&&I(h.currency)===r:h.chainId==="robinhood"&&I(h.currency)===g))throw new e("Relay order refund terms do not match the sender or recipient.")}}let ge=Math.min(se,...Z),U=0,be=()=>{let s=Math.floor(Date.now()/1e3),u=U||s+Le;if(ge-s<=Se)throw new e("Relay order deadline is expired or too soon to sign safely. Request a new quote.");if(U=Math.min(u,ge-Se),U<=s)throw new e("Relay quote expired before signing. Request a new quote.")};if(be(),!Array.isArray(b.steps)||!b.steps.length)throw new e("Relay returned no origin transactions.");let T=[];for(let s of b.steps){let u=a(s);if(u.kind!=="transaction"||u.requestId!==P||!Array.isArray(u.items)||!u.items.length)throw new e("Relay returned an unsupported origin step.");for(let x of u.items){let D=a(x),h=a(D.data),ue=a(D.check);if(D.status!=="incomplete"||h.chainId!==i||!f(h.from,c))throw new e("Relay transaction does not match the origin chain and sender.");if(ue.method!=="GET"||ue.endpoint!==he)throw new e("Relay status endpoint does not match the request ID.");T.push(t.unsignedTx({to:F(h.to),data:h.data,value:l(h.value),chainId:i,description:`Relay inbound deposit for request ${P}; destination chain 4663.`}))}}if(!T.length)throw new e("Relay returned no origin transactions.");if(r===q&&T.length!==1)throw new e("Relay native deposit must be a single depositNative transaction.");if(r!==q&&T.length>2)throw new e("Relay ERC-20 deposit allows at most one exact-amount approval before depositErc20.");for(let s of T.slice(0,-1)){if(!s.data.toLowerCase().startsWith("0x095ea7b3"))throw new e("Relay returned an unsupported prerequisite transaction.");let u=Ee({abi:Ne,data:s.data});if(u.functionName!=="approve")throw new e("Relay returned an invalid approval.");let[x,D]=u.args;if(r===q||!f(s.to,r)||!f(x,$)||D!==BigInt(d)||s.value!=="0")throw new e("Relay approval must authorize the exact input amount for the origin depository.");s.description=`Approve exactly ${t.formatAmount(d,N.decimals)} ${N.symbol} (${d} base units of ${r}) for ${$} on chain ${i}.`}let B=T[T.length-1],Y=r===q,ee=Y?"depositNative":"depositErc20",Ae=Y?"depositNative(address,bytes32)":"depositErc20(address,address,uint256,bytes32)";if(!f(B.to,$)||B.value!==(Y?d:"0")||!(Y?/^0x[0-9a-fA-F]{136}$/:/^0x[0-9a-fA-F]{264}$/).test(B.data))throw new e(`Relay deposit transaction does not target the origin depository with ${ee} calldata.`);let A;try{A=Ee({abi:Te,data:B.data})}catch{throw new e(`Relay deposit transaction must call ${Ae}.`)}if(A.functionName!==ee)throw new e(`Relay deposit transaction must call ${Ae}.`);let Be=A.args[0],Me=A.functionName==="depositErc20"?A.args[3]:A.args[1];if(A.functionName==="depositErc20"&&(!f(A.args[1],r)||A.args[2]!==BigInt(d)))throw new e("Relay depositErc20 token or amount does not match the quoted input.");if(!f(Be,c)||Me.toLowerCase()!==V)throw new e(`Relay ${ee} depositor or orderId does not match the wallet and quoted protocol.v2.orderId.`);B.description=`Relay inbound ${ee} for order ${V} (request ${P}); destination chain 4663.`;let de=Y?[]:await xe(t,r,$,d,i,c);for(let[s,u]of de.entries())u.description=de.length===2&&s===0?`Reset the existing ${N.symbol} allowance for ${$} on chain ${i} to zero.`:`Approve exactly ${t.formatAmount(d,N.decimals)} ${N.symbol} (${d} base units of ${r}) for ${$} on chain ${i}.`;let $e=[...E,...de,B],Re=await t.preview($e,c);be();let Fe=Re.changes.map(s=>{let u=s.amount.startsWith("-");return`${u?"-":""}${t.formatAmount(u?s.amount.slice(1):s.amount,s.token.decimals)} ${s.token.symbol} (${s.token.address}, chain ${s.token.chainId})`});return{txs:$e,preview:Re,requestId:P,orderId:V,depository:$,originChainId:i,destinationChainId:R,recipient:m,amountIn:{token:N,amount:d},amountOut:{token:O,amount:_},minAmountOut:C,relayerFee:we,refundCurrency:{token:z,amount:re,minimumAmounts:ae},orderDeadline:String(se),refundDeadlines:Z.map(String),expiresAt:String(U),status:"pending",statusEndpoint:he,summary:`${E.length?"Swap prerequisite first, then ":""}Relay inbound from chain ${i} to chain 4663 for ${m}; expected ${t.formatAmount(_,O.decimals)} ${O.symbol}, minimum ${t.formatAmount(C,O.decimals)} ${O.symbol} (${O.address}). Quoted relay fee ${t.formatAmount(we.amount,Q.decimals)} ${Q.symbol} (${Q.address}, chain ${i}); output is net of quoted fees. Order ${V} (request ${P}); output deadline ${se}, refund deadlines ${Z.join(", ")}, quote expires ${U}. Refund terms: details.refundCurrency quotes ${t.formatAmount(re,z.decimals)} ${z.symbol} (${re} base units) on chain ${z.chainId} (${z.address}), but protocol.v2 order refund floor is ${ae.join(", ")} base units. ${Fe.join("; ")}. Unsigned origin transactions only; destination fulfillment remains pending. Track with relay_status; timeout or refund is not fulfillment.`}}var ot=t=>({tools:[{name:"relay_bridge_in",inputSchema:{type:"object",additionalProperties:!1,required:["originChainId","amount"],properties:{originChainId:{type:"integer",minimum:1},destinationChainId:{const:R},originCurrency:H,destinationCurrency:H,amount:te(),minAmountOut:te(),slippageBps:{type:"integer",minimum:0,maximum:9999,default:pe},recipient:H,swap:{type:"object",additionalProperties:!1,required:["from","amountIn"],properties:{from:{type:"object",additionalProperties:!1,required:["address","chainId","symbol","decimals"],properties:{address:H,chainId:{type:"integer",minimum:1},symbol:{type:"string"},decimals:{type:"integer",minimum:0,maximum:255}}},amountIn:te(),slippageBps:{type:"integer",minimum:0,maximum:1e4}}}}},async execute(o,c){try{return await Ue(t,o,c)}catch(i){throw new e(t.plainError(i))}}}]});export{nt as a,ot as b};
@@ -1 +1 @@
1
- import{K as O}from"./JC4SYMBV.js";import{a as d}from"./O47JXRXN.js";import{a as v}from"./6IM6A5VA.js";import{a as A}from"./UWOFA6GV.js";import{d as k,i as T}from"./73N3TOJL.js";import{a as p}from"./XPFVT2EA.js";import{a as r}from"./5YS5V2LK.js";import{a as g}from"./JXOEJPJ4.js";import{encodeFunctionData as C,getAddress as l,parseAbi as E,zeroAddress as N}from"viem";var w=E(["function owner() view returns (address)","function paused() view returns (bool)","function maximumLoanDuration() view returns (uint256)","function adminFeeInBasisPoints() view returns (uint16)","function pause()","function unpause()","function updateAdminFee(uint16)","function updateMaximumLoanDuration(uint256)","function setERC20Permit(address,bool)","function setERC20Permits(address[],bool[])","function getERC20Permit(address) view returns (bool)","function requestTransferOwnership(address)","function cancelTransferOwnership()","function acceptTransferOwnership()","function rejectTransferOwnership()"]),P=["pause","unpause","updateAdminFee","updateMaximumLoanDuration","setERC20Permit","setERC20Permits","requestTransferOwnership","cancelTransferOwnership","acceptTransferOwnership","rejectTransferOwnership"];function m(u){return T(u,"Provide an explicit checksummed address.",k)}var S=u=>{let h=(n,i,c,e)=>({name:n,inputSchema:{type:"object",properties:i,required:c,additionalProperties:!1},execute:async(s,t)=>{try{if(v(t),Object.keys(s).some(a=>!Object.hasOwn(i,a)))throw new r("Unsupported Longbow administration argument.");return await e(s,t)}catch(a){throw new r(u.plainError(a))}}});async function b(){let n=u.clientFor(p);if(await n.getChainId()!==p)throw new r("Longbow requires chain 4663.");return n}return{tools:[h("longbow_nft_admin",{token:{type:"string"}},[],async n=>{let i=await b(),c=["owner","paused","maximumLoanDuration","adminFeeInBasisPoints"],e=await Promise.all(c.map(s=>i.readContract({address:d,abi:w,functionName:s})));return{chainId:p,contract:d,...Object.fromEntries(c.map((s,t)=>[s,typeof e[t]=="bigint"?String(e[t]):e[t]])),...n.token===void 0?{}:{token:m(n.token),permitted:await i.readContract({address:d,abi:w,functionName:"getERC20Permit",args:[m(n.token)]})}}}),h("longbow_manage_nft",{operation:{type:"string",enum:P},value:A(),account:{type:"string"},enabled:{type:"boolean"},tokens:{type:"array",maxItems:32,items:{type:"string"}},permissions:{type:"array",maxItems:32,items:{type:"boolean"}}},["operation"],async(n,i)=>{if(typeof n.operation!="string"||!P.includes(n.operation))throw new r("Choose a documented NFT administration operation.");let c=await b(),e=n.operation,s=e.startsWith("update")?["operation","value"]:e==="setERC20Permit"?["operation","account","enabled"]:e==="setERC20Permits"?["operation","tokens","permissions"]:e==="requestTransferOwnership"?["operation","account"]:["operation"];if(Object.keys(n).some(o=>!s.includes(o)))throw new r("Unexpected fields for this NFT administration operation.");if(!["acceptTransferOwnership","rejectTransferOwnership"].includes(e)){let o=await c.readContract({address:d,abi:w,functionName:"owner"});if(l(o)!==l(i))throw new r("This wallet lacks the NFT loan owner role.")}let t=[];if(e.startsWith("update")){let o=O(n.value,!0);if(o>(e==="updateAdminFee"?10000n:(1n<<32n)-1n))throw new r("NFT fee/duration exceeds the contract limit.");t=[e==="updateAdminFee"?Number(o):o]}else if(e==="setERC20Permit"){if(typeof n.enabled!="boolean")throw new r("Provide enabled as a boolean.");t=[m(n.account),n.enabled]}else if(e==="setERC20Permits"){if(!Array.isArray(n.tokens)||!Array.isArray(n.permissions)||!n.tokens.length||n.tokens.length>32||n.tokens.length!==n.permissions.length||n.permissions.some(f=>typeof f!="boolean"))throw new r("Provide equal bounded token and permission arrays.");let o=n.tokens.map(m);if(new Set(o).size!==o.length)throw new r("Currency tokens must be unique.");t=[o,n.permissions]}else if(e==="requestTransferOwnership"){let o=m(n.account);if(o===N)throw new r("New owner must be nonzero.");t=[o]}let a=`Longbow NFT protocol administration ${e} on ${d}, values ${JSON.stringify(t,(o,f)=>typeof f=="bigint"?String(f):f)}. This changes protocol-wide settings or authority. Ownership acceptance/rejection requires the pending owner; the contract preview verifies that role. Permitting a currency here does not qualify it for Oak\u2019s borrower tools.`,y=[u.unsignedTx({to:d,data:C({abi:w,functionName:e,args:t}),value:"0",chainId:p,description:a})];return{txs:y,preview:await u.preview(y,i),summary:a}}),h("longbow_referral",{},[],async(n,i)=>{let c=await u.http(`https://longbow.credit/api/referral/stats/${l(i)}`,{method:"GET",redirect:"error"});if(!c.ok)throw new r(`Longbow referral service returned HTTP ${c.status}; referral state is unavailable.`);let e=await c.json();if(!e||typeof e!="object"||m(e.address)!==l(i))throw new r("Referral response does not match this wallet.");let s=a=>{if(typeof a!="number"||!Number.isSafeInteger(a)||a<0)throw new r("Invalid referral count.");return a},t=e.bonusEarnedAllTime;if(typeof t!="number"||!Number.isFinite(t)||t<0)throw new r("Invalid referral bonus estimate.");if(e.code!==null&&e.code!==void 0&&(typeof e.code!="string"||!/^[a-zA-Z0-9_-]{1,64}$/.test(e.code)))throw new r("Invalid referral code.");return{address:l(i),chainId:p,code:e.code??null,referrals:s(e.referrals),activeThisEpoch:s(e.activeThisEpoch),bonusEstimateUsd:t,source:"Longbow public referral service; off-chain estimates, not verified payments.",warning:g("Referral links are permanent according to the app. Registration/linking publishes wallet associations and requires a separate authorized publication flow. This tool only reads stats; no payout or claim is promised.")}})]}};export{w as a,S as b};
1
+ import{K as O}from"./L3ZM77SJ.js";import{a as d}from"./NAYRD43N.js";import{a as v}from"./6IM6A5VA.js";import{a as A}from"./UWOFA6GV.js";import{d as k,i as T}from"./73N3TOJL.js";import{a as p}from"./G6HCV67X.js";import{a as r}from"./5YS5V2LK.js";import{a as g}from"./JXOEJPJ4.js";import{encodeFunctionData as C,getAddress as l,parseAbi as E,zeroAddress as N}from"viem";var w=E(["function owner() view returns (address)","function paused() view returns (bool)","function maximumLoanDuration() view returns (uint256)","function adminFeeInBasisPoints() view returns (uint16)","function pause()","function unpause()","function updateAdminFee(uint16)","function updateMaximumLoanDuration(uint256)","function setERC20Permit(address,bool)","function setERC20Permits(address[],bool[])","function getERC20Permit(address) view returns (bool)","function requestTransferOwnership(address)","function cancelTransferOwnership()","function acceptTransferOwnership()","function rejectTransferOwnership()"]),P=["pause","unpause","updateAdminFee","updateMaximumLoanDuration","setERC20Permit","setERC20Permits","requestTransferOwnership","cancelTransferOwnership","acceptTransferOwnership","rejectTransferOwnership"];function m(u){return T(u,"Provide an explicit checksummed address.",k)}var S=u=>{let h=(n,i,c,e)=>({name:n,inputSchema:{type:"object",properties:i,required:c,additionalProperties:!1},execute:async(s,t)=>{try{if(v(t),Object.keys(s).some(a=>!Object.hasOwn(i,a)))throw new r("Unsupported Longbow administration argument.");return await e(s,t)}catch(a){throw new r(u.plainError(a))}}});async function b(){let n=u.clientFor(p);if(await n.getChainId()!==p)throw new r("Longbow requires chain 4663.");return n}return{tools:[h("longbow_nft_admin",{token:{type:"string"}},[],async n=>{let i=await b(),c=["owner","paused","maximumLoanDuration","adminFeeInBasisPoints"],e=await Promise.all(c.map(s=>i.readContract({address:d,abi:w,functionName:s})));return{chainId:p,contract:d,...Object.fromEntries(c.map((s,t)=>[s,typeof e[t]=="bigint"?String(e[t]):e[t]])),...n.token===void 0?{}:{token:m(n.token),permitted:await i.readContract({address:d,abi:w,functionName:"getERC20Permit",args:[m(n.token)]})}}}),h("longbow_manage_nft",{operation:{type:"string",enum:P},value:A(),account:{type:"string"},enabled:{type:"boolean"},tokens:{type:"array",maxItems:32,items:{type:"string"}},permissions:{type:"array",maxItems:32,items:{type:"boolean"}}},["operation"],async(n,i)=>{if(typeof n.operation!="string"||!P.includes(n.operation))throw new r("Choose a documented NFT administration operation.");let c=await b(),e=n.operation,s=e.startsWith("update")?["operation","value"]:e==="setERC20Permit"?["operation","account","enabled"]:e==="setERC20Permits"?["operation","tokens","permissions"]:e==="requestTransferOwnership"?["operation","account"]:["operation"];if(Object.keys(n).some(o=>!s.includes(o)))throw new r("Unexpected fields for this NFT administration operation.");if(!["acceptTransferOwnership","rejectTransferOwnership"].includes(e)){let o=await c.readContract({address:d,abi:w,functionName:"owner"});if(l(o)!==l(i))throw new r("This wallet lacks the NFT loan owner role.")}let t=[];if(e.startsWith("update")){let o=O(n.value,!0);if(o>(e==="updateAdminFee"?10000n:(1n<<32n)-1n))throw new r("NFT fee/duration exceeds the contract limit.");t=[e==="updateAdminFee"?Number(o):o]}else if(e==="setERC20Permit"){if(typeof n.enabled!="boolean")throw new r("Provide enabled as a boolean.");t=[m(n.account),n.enabled]}else if(e==="setERC20Permits"){if(!Array.isArray(n.tokens)||!Array.isArray(n.permissions)||!n.tokens.length||n.tokens.length>32||n.tokens.length!==n.permissions.length||n.permissions.some(f=>typeof f!="boolean"))throw new r("Provide equal bounded token and permission arrays.");let o=n.tokens.map(m);if(new Set(o).size!==o.length)throw new r("Currency tokens must be unique.");t=[o,n.permissions]}else if(e==="requestTransferOwnership"){let o=m(n.account);if(o===N)throw new r("New owner must be nonzero.");t=[o]}let a=`Longbow NFT protocol administration ${e} on ${d}, values ${JSON.stringify(t,(o,f)=>typeof f=="bigint"?String(f):f)}. This changes protocol-wide settings or authority. Ownership acceptance/rejection requires the pending owner; the contract preview verifies that role. Permitting a currency here does not qualify it for Oak\u2019s borrower tools.`,y=[u.unsignedTx({to:d,data:C({abi:w,functionName:e,args:t}),value:"0",chainId:p,description:a})];return{txs:y,preview:await u.preview(y,i),summary:a}}),h("longbow_referral",{},[],async(n,i)=>{let c=await u.http(`https://longbow.credit/api/referral/stats/${l(i)}`,{method:"GET",redirect:"error"});if(!c.ok)throw new r(`Longbow referral service returned HTTP ${c.status}; referral state is unavailable.`);let e=await c.json();if(!e||typeof e!="object"||m(e.address)!==l(i))throw new r("Referral response does not match this wallet.");let s=a=>{if(typeof a!="number"||!Number.isSafeInteger(a)||a<0)throw new r("Invalid referral count.");return a},t=e.bonusEarnedAllTime;if(typeof t!="number"||!Number.isFinite(t)||t<0)throw new r("Invalid referral bonus estimate.");if(e.code!==null&&e.code!==void 0&&(typeof e.code!="string"||!/^[a-zA-Z0-9_-]{1,64}$/.test(e.code)))throw new r("Invalid referral code.");return{address:l(i),chainId:p,code:e.code??null,referrals:s(e.referrals),activeThisEpoch:s(e.activeThisEpoch),bonusEstimateUsd:t,source:"Longbow public referral service; off-chain estimates, not verified payments.",warning:g("Referral links are permanent according to the app. Registration/linking publishes wallet associations and requires a separate authorized publication flow. This tool only reads stats; no payout or claim is promised.")}})]}};export{w as a,S as b};
@@ -1 +1 @@
1
- import{c as g,d as H,m as M}from"./7Z5IM2QZ.js";import{d,e as s,y as C}from"./ANQ43XJA.js";import{f as _,g as k}from"./64AF7ECA.js";import{g as h}from"./73N3TOJL.js";import{a as w}from"./XPFVT2EA.js";import{a as t}from"./5YS5V2LK.js";import{decodeFunctionData as b,encodeFunctionData as B,erc20Abi as $,getAddress as O}from"viem";function K(u){return{tools:[{name:"uniswap_swap_batch",inputSchema:{type:"object",additionalProperties:!1,required:["routes"],properties:{routes:{type:"array",minItems:1,maxItems:20,items:{type:"object",description:"Complete uniswap_swap arguments, including an absolute minAmountOut or maxAmountIn."}}}},async execute(n,v){if(k(n,["routes"]),!Array.isArray(n.routes)||n.routes.length<1||n.routes.length>20)throw new t("Provide 1 to 20 explicit bounded Uniswap routes.");let c=new Map,i="0x",A=0n,a,m=[],y=new Set;for(let e of n.routes){if(!e||typeof e!="object"||Array.isArray(e))throw new t("Each route must contain uniswap_swap arguments.");let I=await M(u,e,v,!1);if(!("txs"in I))throw new t("Route did not build swap transactions.");let E=I.txs;for(let r of E.slice(0,-1))if(h(r.to,d)){let[o,D,N,S]=b({abi:H,data:r.data}).args;if(D!==s)throw new t("Unexpected route approval spender.");let T=o.toLowerCase(),p=c.get(T),U=(p?.amount??0n)+N;if(U>=1n<<160n)throw new t("Combined input approvals exceed uint160.");c.set(T,{token:o,amount:U,expiration:p&&p.expiration<BigInt(S)?p.expiration:BigInt(S)})}else{let o=b({abi:$,data:r.data});if(o.functionName!=="approve"||!h(o.args[0],d))throw new t("Unexpected route prerequisite.")}let f=E.at(-1);if(f.to!==s)throw new t("Route does not use the pinned Universal Router.");A+=BigInt(f.value);let[j,x,P]=b({abi:g,data:f.data}).args,R=j.slice(2).match(/../g)??[];if(R.length!==x.length)throw new t("Unexpected route command/parameter count.");R.forEach((r,o)=>{r==="04"?y.add(x[o]):(i=`${i}${r}`,m.push(x[o]))}),a=a===void 0||P<a?P:a}for(let e of y)i=`${i}04`,m.push(e);let l=[];for(let e of c.values())l.push(u.approval(O(e.token),d,e.amount.toString(),w),C(e.token,s,e.amount.toString(),e.expiration.toString()));return l.push(u.unsignedTx({to:s,data:B({abi:g,functionName:"execute",args:[i,m,a]}),value:A.toString(),chainId:w,description:`Atomically execute ${n.routes.length} caller-selected v2/v3/v4 routes, preserving each route's trade bound.`})),_(u,l,v,"Explicit mixed-version/split routes; every route must meet its own bound. No automatic best-route search or allow-revert branch. The wallet must fund each independently previewed route.")}}]}}export{K as a};
1
+ import{c as g,d as H,m as M}from"./J2XAEVKC.js";import{f as k,g as C}from"./3NDVXEBR.js";import{d,e as s,y as _}from"./Q356HHCL.js";import{g as h}from"./73N3TOJL.js";import{a as w}from"./G6HCV67X.js";import{a as t}from"./5YS5V2LK.js";import{decodeFunctionData as b,encodeFunctionData as B,erc20Abi as $,getAddress as O}from"viem";function K(u){return{tools:[{name:"uniswap_swap_batch",inputSchema:{type:"object",additionalProperties:!1,required:["routes"],properties:{routes:{type:"array",minItems:1,maxItems:20,items:{type:"object",description:"Complete uniswap_swap arguments, including an absolute minAmountOut or maxAmountIn."}}}},async execute(n,v){if(C(n,["routes"]),!Array.isArray(n.routes)||n.routes.length<1||n.routes.length>20)throw new t("Provide 1 to 20 explicit bounded Uniswap routes.");let c=new Map,i="0x",A=0n,a,m=[],y=new Set;for(let e of n.routes){if(!e||typeof e!="object"||Array.isArray(e))throw new t("Each route must contain uniswap_swap arguments.");let I=await M(u,e,v,!1);if(!("txs"in I))throw new t("Route did not build swap transactions.");let E=I.txs;for(let r of E.slice(0,-1))if(h(r.to,d)){let[o,D,N,S]=b({abi:H,data:r.data}).args;if(D!==s)throw new t("Unexpected route approval spender.");let T=o.toLowerCase(),p=c.get(T),U=(p?.amount??0n)+N;if(U>=1n<<160n)throw new t("Combined input approvals exceed uint160.");c.set(T,{token:o,amount:U,expiration:p&&p.expiration<BigInt(S)?p.expiration:BigInt(S)})}else{let o=b({abi:$,data:r.data});if(o.functionName!=="approve"||!h(o.args[0],d))throw new t("Unexpected route prerequisite.")}let f=E.at(-1);if(f.to!==s)throw new t("Route does not use the pinned Universal Router.");A+=BigInt(f.value);let[j,x,P]=b({abi:g,data:f.data}).args,R=j.slice(2).match(/../g)??[];if(R.length!==x.length)throw new t("Unexpected route command/parameter count.");R.forEach((r,o)=>{r==="04"?y.add(x[o]):(i=`${i}${r}`,m.push(x[o]))}),a=a===void 0||P<a?P:a}for(let e of y)i=`${i}04`,m.push(e);let l=[];for(let e of c.values())l.push(u.approval(O(e.token),d,e.amount.toString(),w),_(e.token,s,e.amount.toString(),e.expiration.toString()));return l.push(u.unsignedTx({to:s,data:B({abi:g,functionName:"execute",args:[i,m,a]}),value:A.toString(),chainId:w,description:`Atomically execute ${n.routes.length} caller-selected v2/v3/v4 routes, preserving each route's trade bound.`})),k(u,l,v,"Explicit mixed-version/split routes; every route must meet its own bound. No automatic best-route search or allow-revert branch. The wallet must fund each independently previewed route.")}}]}}export{K as a};
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@oakagentkit/core",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "type": "module",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "engines": {
7
- "node": ">=22"
7
+ "node": ">=22.12.0"
8
8
  },
9
9
  "scripts": {
10
10
  "lint": "eslint \"src/**/*.{js,mjs,cjs,ts,mts,cts,tsx}\" \"test/**/*.{js,mjs,cjs,ts,mts,cts,tsx}\" --no-error-on-unmatched-pattern --global AbortSignal --max-warnings 0",
@@ -1 +0,0 @@
1
- import{a as de}from"./UIIJWIR6.js";import{c as ce}from"./D6VP3N27.js";import{a as W}from"./QZM7CWZW.js";import{a as L,b as P}from"./VJ3W2V3B.js";import{a as O}from"./OG5HRQU4.js";import{a as ae}from"./P4UQGWCP.js";import{a as E}from"./6IM6A5VA.js";import{b as re,c as ie}from"./MYBDO5SA.js";import{a as ne,b as j,c as se}from"./5HCXZWUH.js";import{l as te,n as R,o as oe}from"./IWALIX7Q.js";import{a as g,b as U,c as $,d as Y,i as _,j as ee,s as D}from"./XPFVT2EA.js";import{a as k}from"./5YS5V2LK.js";import{a as w,b as H,c as V}from"./JXOEJPJ4.js";import{decodeFunctionResult as Ce,encodeFunctionData as xe,erc20Abi as G,getAddress as h,isAddress as K,parseAbi as Q}from"viem";var pe="https://api.robinhood.com/rhj/assets",Oe={address:L,symbol:"ETH",decimals:18,chainId:g},Z={address:h(ee),symbol:"USDG",decimals:Y,chainId:g},z={address:h(_[4663].tokens.WETH.address),symbol:"WETH",decimals:18,chainId:g},ye={address:h(_[4663].meridian.CollateralToken_USDe.address),symbol:"USDe",decimals:18,chainId:g};function M(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function q(e,s=g,t={}){let n=Array.isArray(e)?e:M(e)&&Array.isArray(e.assets)?e.assets:void 0;if(!n)throw new k("Official stock asset list response is malformed.");let a=new Map,i=new Map;if(n.length>1e4)throw new k("Official stock asset list exceeds the lookup limit.");for(let o of n){if(!M(o))continue;let r=o;if(typeof r.tokenSymbol!="string"||!r.tokenSymbol.trim()||!Array.isArray(r.deployments))continue;if(r.deployments.length>100)throw new k("Official stock deployment list exceeds the lookup limit.");let l=r.tokenSymbol.trim();if(!/^[A-Za-z0-9.$_-]{1,32}$/.test(l))throw new k(`Invalid official stock ticker ${w(l)}.`);let m=typeof r.tokenDecimals=="number"&&Number.isInteger(r.tokenDecimals)&&r.tokenDecimals>=0&&r.tokenDecimals<=255?r.tokenDecimals:18;for(let u of r.deployments){if(!M(u))continue;let f=u;if(f.chainId!==s||typeof f.contractAddress!="string"||!K(f.contractAddress,{strict:!1}))continue;let b=h(f.contractAddress),p=b.toLowerCase(),C=l.toUpperCase(),c=i.get(C);if(!t.allowAmbiguousSymbols&&c&&c!==p)throw new k(`Ambiguous official stock ticker ${w(l)} across multiple addresses.`);i.set(C,p),a.set(p,{address:b,symbol:l,decimals:m,chainId:s,...t.includeNames&&typeof r.tokenName=="string"&&r.tokenName.trim()?{name:r.tokenName.trim()}:{}})}}return[...a.values()]}function Ie(e,s){if(typeof e.address!="string"||!K(e.address,{strict:!1}))return!1;let t=e.chainId??g,n=e.address.toLowerCase();return s.some(a=>a.chainId===t&&a.address.toLowerCase()===n&&a.symbol===e.symbol)}function le(e,s){E(e.address);let t=e.chainId??g,n=h(e.address),a=n.toLowerCase(),i=e.symbol.trim().toUpperCase(),o=s.find(l=>l.chainId===t&&l.address.toLowerCase()===a),r=s.find(l=>l.chainId===t&&l.symbol.toUpperCase()===i);if(o){if(e.symbol!==o.symbol)throw new k(`Token at ${n} does not match official stock ticker ${w(o.symbol)} (received ${w(e.symbol)}).`);if(e.decimals!==void 0&&e.decimals!==o.decimals)throw new k(`Token ${w(o.symbol)} at ${n} does not match official decimals ${o.decimals}.`);return o}if(r)throw new k(`Token symbol ${w(e.symbol)} at ${n} does not match the official stock contract address ${r.address}.`);return{address:n,symbol:e.symbol.trim(),decimals:e.decimals??18,chainId:t}}var ue=new WeakMap,J=new WeakMap;function B(e,s){return(J.get(e)??R)(s)}async function be(e){let s=e?.http??re(),t=e?.url??pe,n=e?.chainId??g,a=se(s),i=ue.get(a);i||(i=new ne(3e4),ue.set(a,i));let{value:o}=await B(s,()=>i.read(`${n}:${t}`,async()=>{let r=await R(l=>ie(a,t,{method:"GET",signal:l},m=>M(m)||Array.isArray(m)));return q(r,n,{allowAmbiguousSymbols:!0}),r}));return q(o,n,e)}var De=Q(["function aggregate3((address target, bool allowFailure, bytes callData)[] calls) payable returns ((bool success, bytes returnData)[] returnData)"]);function me(e){let s=e,t=new Set;for(;s&&typeof s=="object"&&!t.has(s)&&t.size<10;){t.add(s);let n=s;if(n.name==="ContractFunctionZeroDataError"||n.name==="AbiDecodingZeroDataError")return!0;let a=`${typeof n.shortMessage=="string"?n.shortMessage:""} ${typeof n.message=="string"?n.message:""}`;if(/returned no data \("0x"\)|Cannot decode zero data/i.test(a))return!0;s=n.cause}return!1}function Pe(e){return e instanceof k?/RPC endpoint|too many requests|malformed JSON/i.test(e.message):e instanceof Error?/fetch failed|network|ECONNREFUSED|ETIMEDOUT|HTTP \d{3}|rate limit|too many requests/i.test(e.message):!1}async function _e(e,s,t){if(typeof e.getCode=="function")try{let n=await e.getCode({address:s});return!n||n==="0x"}catch{return me(t)}return me(t)}async function fe(e,s,t){if(s.length===0)return[];let n=await Promise.allSettled(s.map(a=>e.readContract({address:a.address,abi:G,functionName:"balanceOf",args:[t]})));if(n.every(a=>a.status==="rejected")&&n[0]?.status==="rejected"&&Pe(n[0].reason))throw n[0].reason;return n.map(a=>{if(a.status!=="fulfilled"||a.value===void 0||a.value===null)return{ok:!1};try{let i=typeof a.value=="bigint"?a.value:BigInt(a.value);return i>=0n?{ok:!0,amount:i}:{ok:!1}}catch{return{ok:!1}}})}async function we(e,s,t,n){if(t.length===0)return[];let a=te(s,e);if(!a)return fe(e,t,n);let i=t.map(r=>({target:r.address,allowFailure:!0,callData:xe({abi:G,functionName:"balanceOf",args:[n]})})),o;try{o=await e.readContract({address:a,abi:De,functionName:"aggregate3",args:[i]})}catch(r){if(await _e(e,a,r))return fe(e,t,n);throw r}if(!Array.isArray(o)||o.length!==t.length)throw new k("Multicall3 aggregate3 returned an invalid result list.");return o.map(r=>{let l=r,m=Array.isArray(l)?l[0]:l?.success,u=Array.isArray(l)?l[1]:l?.returnData;if(!m||typeof u!="string"||u==="0x")return{ok:!1};try{let f=Ce({abi:G,functionName:"balanceOf",data:u}),b=typeof f=="bigint"?f:BigInt(f);return b>=0n?{ok:!0,amount:b}:{ok:!1}}catch{return{ok:!1}}})}async function Xe(e,s={}){E(e);let t=h(e),n=s.chainId??g,a=s.client??oe(s.rpcUrl,n),i=[];if(s.stockTokens?i=[...s.stockTokens]:s.stockAssetsPayload!==void 0?i=q(s.stockAssetsPayload,n):s.includeStockTokens!==!1&&n!==U&&(i=await be({http:s.http,url:s.stockAssetsUrl,chainId:n})),s.tokens)for(let c of s.tokens)le(c,i);let o=n===g?[Z,z,ye,...s.oakTokenAddress||process.env.OAK_TOKEN_ADDRESS?[{address:h(s.oakTokenAddress??process.env.OAK_TOKEN_ADDRESS),symbol:"OAK",decimals:$,chainId:n}]:[]]:n===U?[{...Z,address:h(D.testnet.usdg),chainId:n},{...z,address:h(D.testnet.weth),chainId:n},...s.oakTokenAddress?[{address:h(s.oakTokenAddress),symbol:"OAK",decimals:$,chainId:n}]:[]]:[],r=n===g&&s.includePoolTokens!==!1?ae.vaults.flatMap(c=>[{address:h(c.tokenAddress),symbol:h(c.tokenAddress),decimals:c.tokenDecimals,chainId:n},{address:h(c.earnContractAddress),symbol:h(c.earnContractAddress),decimals:18,chainId:n}]):[],l=new Set(r.map(c=>c.address.toLowerCase())),m=[],u=new Set;for(let c of[...o,...i,...s.tokens??[],...r]){if(c.chainId!==n||P(c.address)===L)continue;let d=le(c,i),y=d.address.toLowerCase();u.has(y)||(u.add(y),m.push(d))}let[f,b]=await Promise.all([a.getBalance({address:t}),we(a,n,m,t)]),p=[],C={address:L,symbol:"ETH",decimals:18,chainId:n};(f>0n||s.includeZero)&&p.push({token:C,amount:f.toString()});for(let c=0;c<m.length;c++){let d=m[c],y=o.some(A=>S(A.address,d.address))||i.some(A=>S(A.address,d.address))?d.symbol:w(d.symbol),v=b[c]??{ok:!1};if(!v.ok){p.push({token:{address:d.address,symbol:y,decimals:d.decimals,chainId:d.chainId},amount:"unavailable"});continue}let T=v.amount;if(T>0n&&l.has(d.address.toLowerCase()))try{let[A,N]=await Promise.all([O(a,n,d.address,"symbol"),O(a,n,d.address,"decimals")]);y=w(A),d.decimals=N}catch{}(T>0n||s.includeZero)&&p.push({token:{address:d.address,symbol:y,decimals:d.decimals,chainId:d.chainId},amount:T.toString()})}return p}async function Qe(e,s,t){if(E(e),s.length>1e4)throw new k("Journal token discovery exceeds the balance lookup limit.");let n=[...new Set(s.map(o=>(E(o),h(o))))].filter(o=>P(o)!==L).map(o=>({address:o,symbol:o,decimals:0,chainId:t.chainId})),a=await we(t.client,t.chainId,n,h(e)),i=n.flatMap((o,r)=>{let l=a[r];return l.ok&&l.amount===0n?[]:[{token:o,amount:l.ok?l.amount.toString():"unavailable"}]});return Promise.all(i.map(async({token:o,amount:r})=>{let[l,m]=await Promise.all([O(t.client,t.chainId,o.address,"symbol").catch(()=>o.address),O(t.client,t.chainId,o.address,"decimals").catch(()=>{throw new k(`Token decimals are unavailable for journal-received token ${o.address}; retry balances when RPC metadata is available.`)})]);return{token:{...o,symbol:w(l),decimals:m},amount:r}}))}var S=(e,s)=>e.toLowerCase()===s.toLowerCase(),x=e=>V(e.normalize("NFKC")).toLowerCase().replace(/[^\p{L}\p{N}]/gu,"");function ge(e){let s=e.context.network??"mainnet",{chainId:t,usdg:n,weth:a}=D[s],i=(o,r,l)=>({...o,address:P(h(o.address)),name:r,kind:l,verified:!0,source:"Oak fixed addresses",warnings:[]});return[i({...Oe,chainId:t},"Ether","native"),i({...Z,address:n,chainId:t},"Global Dollar","stablecoin"),i({...z,address:a,chainId:t},"Wrapped Ether","wrapped"),...s==="mainnet"?[i(ye,"USDe","stablecoin")]:[],...e.oakTokenAddress?[i({address:e.oakTokenAddress,symbol:"OAK",decimals:$,chainId:t},"Oak","oak")]:[]]}async function Te(e){if(e.context.network==="testnet")return[];let s=await be({http:e.context.http,includeNames:!0,allowAmbiguousSymbols:!0});return s.filter(t=>Ie(t,s)).map(t=>({...t,name:t.name??t.symbol,kind:"official_stock",verified:!0,source:pe,warnings:[]}))}async function X(e,s,t=!0){let{chainId:n}=D[s.context.network??"mainnet"],a=s.context.clientFor(n);if(await a.getChainId()!==n)throw new k(`Token lookup requires Robinhood Chain ${n}.`);let[i,o,r]=await Promise.all([B(a,()=>O(a,n,e,"name")).catch(l=>{if(t)throw l;return""}),B(a,()=>O(a,n,e,"symbol")),B(a,()=>O(a,n,e,"decimals"))]);if(typeof i!="string"||t&&!i.trim()||typeof o!="string"||!o.trim()||!Number.isInteger(r)||r<0||r>255)throw new k("The contract returned invalid token metadata.");return{address:h(e),name:i||o,symbol:o,decimals:r,chainId:n}}async function ke(e,s){let t=await s.context.clientFor(g).readContract({address:_[g].clanker.factory.address,abi:Q(["function tokenDeploymentInfo(address) view returns ((address,address,address,address[]))"]),functionName:"tokenDeploymentInfo",args:[e]});return Array.isArray(t)&&t.length===4&&typeof t[0]=="string"&&S(t[0],e)}async function Ee(e,s){let t=s.context.clientFor(g),n=_[g].poolsTrade,a=[n.instantLaunchStrategyFeesOn.address,n.instantLaunchStrategyFeesOff.address],i=Q(["event TokenLaunched(bytes32 indexed poolId,address indexed token,address indexed feeSplitter,(address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks) poolKey)"])[0],o=await t.getBlockNumber(),r=new Set,l=0,m=0;for(let u=63127652n;u<=o;u+=10000000n){if(++l>Ae)throw new k("Token origin scan limit reached.");let f=u+9999999n>o?o:u+9999999n,b=await t.getLogs({address:a,event:i,args:{token:e},fromBlock:u,toBlock:f,strict:!0});for(let p of b){if(p.removed||!a.some(c=>S(c,p.address))||!p.args.token||!S(p.args.token,e)||!p.transactionHash||r.has(p.transactionHash))continue;if(r.add(p.transactionHash),++m>20)throw new k("Token origin receipt limit reached.");let C=await t.getTransactionReceipt({hash:p.transactionHash});if(de(C).some(c=>S(c.token,e)))return h(C.from)}}}var Ae=5,Le=100,Ne=500,Fe=3e4;function Se(e){let s=Date.now()+Fe,t=0,n=new Map,a=o=>{let r=s-Date.now();if(r<=0)throw new k("Token lookup time budget reached; results are partial.");return R(o,Math.min(1e4,r))},i=j((o,r)=>a(async l=>{let m=await e.context.http(o,{...r,signal:l});return new Proxy(m,{get(u,f){if(f==="json")return()=>a(()=>u.json());let b=Reflect.get(u,f,u);return typeof b=="function"?b.bind(u):b}})}),e.context.http);return J.set(i,a),{...e,context:{...e.context,http:i,clientFor:o=>{if(!n.has(o)){let r=e.context.clientFor(o),l=m=>{if(++t>Ne)throw new k("Token lookup RPC budget reached; results are partial.");return a(m)};n.set(o,j(new Proxy(r,{get(m,u){let f=Reflect.get(m,u);return typeof f!="function"?f:(...b)=>l(()=>f.apply(m,b))}}),r)),J.set(n.get(o),l)}return n.get(o)}}}}function he(e){return e.source==="Oak fixed addresses"?e:{...e,symbol:w(e.symbol),name:w(e.name)}}async function Ve(e,s){if(s=Se(s),typeof e!="string"||e.length>256||!x(e))throw new k("Provide a token name, symbol or address to find_token.");let t=x(e),n=K(e.trim(),{strict:!1})?P(h(e.trim())):void 0,{chainId:a}=D[s.context.network??"mainnet"],i=[],o=ge(s),r=!1;try{o.push(...await Te(s))}catch{r=!0,i.push("The official stock list is unavailable; results are partial and stock identities and lookalikes could not be checked.")}let l=c=>n?S(c.address,n):x(c.symbol).includes(t)||x(c.name).includes(t),m=o.filter(l),u=[],f=(c,d)=>[c.symbol,c.name??""].some(y=>[d.symbol,d.name].some(v=>{let T=x(y),A=x(v);return!!T&&!!A&&(T.includes(A)||A.includes(T))})),b=(c,d={})=>{if(u.some(T=>S(T.address,c.address)))return;let y=[`Token ${w(c.symbol)} at ${c.address} is an unverified ${d.launchpad?"launchpad token":"token"}. Use its address, not its name or symbol.`];(H(c.symbol)||H(c.name)||o.some(T=>!S(T.address,c.address)&&f(c,T)))&&y.push(`Lookalike warning: ${w(c.symbol)} at ${c.address} resembles a verified token's name or symbol.`);let v={...c,...d,kind:d.launchpad?"launchpad":"erc20",verified:!1,source:d.launchpad?`${d.launchpad} origin and on-chain metadata; not a verified token`:"On-chain metadata only",warnings:y};u.push(v),i.push(...y)};if(n&&!m.length){let c=await X(n,s),d={};if(a===g){try{await ke(n,s)&&(d.launchpad="clanker")}catch{i.push("Clanker origin lookup was unavailable for this address.")}if(d.launchpad==="clanker")try{let v=(await W(s.context,{q:n,limit:20})).tokens.find(T=>S(T.contract_address,n));v&&(d.creator=h(v.msg_sender),d.creatorSource="Clanker indexer msg_sender")}catch{i.push("Clanker creator lookup is unavailable.")}else try{let y=await ce(s.context,n);d.launchpad="pons",d.creator=h(y.creator),d.creatorSource="Pons factory deployer"}catch{i.push("Pons launch origin could not be confirmed for this address.")}if(!d.launchpad)try{let y=await Ee(n,s);y&&(d.launchpad="pools.trade",d.creator=y,d.creatorSource="Launch transaction sender; may be a relayer")}catch{r=!0,i.push("pools.trade launch receipt lookup is unavailable; origin results are partial.")}}b(c,d)}else if(!n&&a===g){let c=new Set,d=new Set,y,v=0,T=0;try{do{if(++v>Ae)throw new k("Token search page limit reached.");let A=await W(s.context,{q:e.trim(),limit:20,...y?{cursor:y}:{}});for(let N of A.tokens){if(++T>Le)throw new k("Token candidate limit reached.");let I=h(N.contract_address);if(!(d.has(I)||o.some(F=>S(F.address,I)))){d.add(I);try{let F=await X(I,s);if(!l(F))continue;let ve=await ke(I,s)?{launchpad:"clanker",creator:h(N.msg_sender),creatorSource:"Clanker indexer msg_sender"}:{};b(F,ve)}catch{r=!0,i.push(`Could not read Clanker candidate ${I}; it was omitted from these partial results.`)}}}if(A.cursor&&c.has(A.cursor))throw new k("The Clanker indexer repeated a pagination cursor.");A.cursor&&c.add(A.cursor),y=A.cursor??void 0}while(y)}catch{r=!0,i.push("Clanker name search is unavailable, incomplete or reached its scan limit; results are partial.")}i.push("Pons and pools.trade require a token address; name search does not cover those launchpads.")}a===U&&i.push("Testnet lookup covers pinned tokens and explicit token addresses; stock and launchpad discovery are unavailable.");let p=c=>[...new Map(c.map(d=>[d.address.toLowerCase(),d])).values()],C=p([...m,...u]);for(let c of C)if(C.some(d=>!S(d.address,c.address)&&(x(c.symbol)===x(d.symbol)||x(c.name)===x(d.name)))){let d=`Duplicate warning: several tokens share the symbol or name of ${c.address}. Choose the intended address; do not guess from the name.`;c.warnings.push(d),i.push(d)}return m.length>1&&i.push("Several verified tokens match this search, including possible substring matches. Choose an exact address; the search does not select a quote token."),{query:w(e.trim()),chainId:a,partial:r,matches:p(m).map(he),unverified:p(u).map(he),warnings:i}}async function Ye(e,s){if(typeof e!="string"||!e.trim())throw new k("Provide a token address or verified symbol; use find_token to look it up.");let t=e.trim(),n=K(t,{strict:!1})?P(h(t)):void 0,a=ge(s),i=n&&a.find(f=>S(f.address,n));if(i)return i;let o=[],r=[];try{o=await Te(s)}catch{if(!n)throw new k("The official stock list is unavailable; stock identities and symbol ambiguity cannot be checked. Use find_token and retry, or quote an explicit address.");r.push("The official stock list is unavailable; this address is unverified.")}if(n){let f=o.find(p=>S(p.address,n));if(f)return{...f,name:w(f.name)};let b=await X(n,Se(s),!1);return{...b,symbol:w(b.symbol),name:w(b.name),kind:"erc20",verified:!1,source:"On-chain metadata only",warnings:[...r,"This token address is unverified. On-chain names and symbols do not prove identity."]}}let l=t.toUpperCase()==="$OAK"?"OAK":t.toUpperCase(),m=[...a,...o].filter(f=>f.symbol.toUpperCase()===l);if(m.length!==1)throw new k(`Token symbol ${w(t)} is ${m.length?"ambiguous":"unverified"}; use find_token and choose an explicit address.`);let u=m[0];return u.source==="Oak fixed addresses"?u:{...u,name:w(u.name)}}export{pe as a,Oe as b,Z as c,z as d,ye as e,q as f,Ie as g,le as h,be as i,De as j,Xe as k,Qe as l,Ve as m,Ye as n};
@@ -1 +0,0 @@
1
- function c(r,t){return r==="hoodlock_airdrop_claim"&&!Object.hasOwn(t,"id")}var h=new Map([]),_="find_tool",l="run_tool",n=["oak_setup","oak_identity_unlink","oak_subscribe","oak_renew","send","hoodlock_feature_buy","hoodlock_feature_claim","hoodlock_referral_register"],d={oak:["account","balances","find_token","price","quote","swap","positions","send","oak_setup","oak_subscribe","oak_renew","oak_identity_unlink"],kyberswap:[],velora:[],steakhouse:["steakhouse_deposit","steakhouse_withdraw"],spark:["spark_deposit","spark_withdraw"],netnet:["netnet_deposit","netnet_withdraw"],longbow:["longbow_list","longbow_deposit","longbow_withdraw"],grove:["grove_deposit","grove_withdraw"],beefy:["beefy_list","beefy_deposit","beefy_withdraw"],pons:["pons_browse","pons_buy","pons_sell","pons_launch"],orbio:["orbio_credit_status","orbio_buy_credit"],hoodlock:["hoodlock_list_locks","hoodlock_lock","hoodlock_withdraw"],merkl:["merkl_rewards","merkl_claim"],relay:["relay_bridge_in","relay_bridge_out","relay_status"],lighter:["lighter_funding"],erc8004:["erc8004_identity"],hoodag:["hoodag_resolve","hoodag_register"],heyresearch:["heyresearch_research_project"],priors:["priors_status","priors_lend","priors_withdraw","priors_borrow","priors_repay"],morpho:["morpho_status","morpho_supply","morpho_withdraw","morpho_supply_collateral","morpho_withdraw_collateral","morpho_borrow","morpho_repay"],uniswap:["uniswap_list_positions","uniswap_add","uniswap_remove","uniswap_collect"],hookr:["hookr_orders","hookr_create","hookr_cancel"],meridian:["meridian_browse","meridian_positions","meridian_sell","meridian_redeem"],tickerspring:["tickerspring_account","tickerspring_create","tickerspring_cancel","tickerspring_claim"],clanker:["clanker_browse","clanker_launch"],poolstrade:["poolstrade_status","poolstrade_buy","poolstrade_sell","poolstrade_launch"]};function w(r,t){let i=new Set(r),s=new Set;for(let[e,a]of Object.entries(d))for(let o of a){if(s.has(o))throw new Error(`Visible tool ${o} is listed twice.`);if(e!=="oak"&&!o.startsWith(`${e}_`))throw new Error(`Visible tool ${o} is filed under ${e}.`);if(n.includes(o)||i.has(o))s.add(o);else if(t==="mainnet")throw new Error(`Visible tool ${o} is not registered.`)}for(let e of[_,l,...n])if(i.has(e))throw new Error(`Tool name ${e} is reserved for the add-on.`);return s}export{c as a,h as b,_ as c,l as d,n as e,d as f,w as g};
@@ -1 +0,0 @@
1
- import{a as p,e as C}from"./HNMOB76J.js";import{a as A}from"./UWOFA6GV.js";import{a as u}from"./XPFVT2EA.js";import{a as f}from"./5YS5V2LK.js";import{encodeFunctionData as E,erc20Abi as v,getAddress as i,parseAbi as F}from"viem";var s={chainId:4663,usdg:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",v4:{poolManager:"0x8366a39CC670B4001A1121B8F6A443A643e40951",swapper:"0x7Cd4E04E433E69e588728c86A3832753B5F846d4",quoter:"0x8dc178efb8111bb0973dd9d722ebeff267c98f94",stateView:"0xf3334192d15450cdd385c8b70e03f9a6bd9e673b"},v3:{router:"0xCaf681a66D020601342297493863E78C959E5cb2",quoter:"0x33e885eD0Ec9bF04EcfB19341582aADCb4c8A9E7",factory:"0x1f7d7550B1b028f7571E69A784071F0205FD2EfA"},tokens:[{symbol:"AAPL",token:"0xaF3D76f1834A1d425780943C99Ea8A608f8a93f9",pools:[{v:3,fee:500,pool:"0xAae0d815EE56e4092a5E5C2911E676Fea50B2d6D"},{v:4,fee:3e3,tickSpacing:60,id:"0xc748f4671a867db48b552f6b7650bf3255e05f80f00e3f7aad1b17ccb7898fdb"},{v:3,fee:3e3,pool:"0x783C9bbB765047CFdD2b84b92b2Ca9F11D34b7Ed"}]},{symbol:"AMD",token:"0x86923f96303D656E4aa86D9d42D1e57ad2023fdC",pools:[{v:3,fee:3e3,pool:"0x48D284A2A4d3DC1b3Da08231Fe44317e7e7Aa51f"}]},{symbol:"AMZN",token:"0x12f190a9F9d7D37a250758b26824B97CE941bF54",pools:[{v:3,fee:3e3,pool:"0x8AC92DA74AB5F3b1d024Dc1943Ad7e15Dc4179Ef"},{v:4,fee:2400,tickSpacing:24,id:"0xefc94885c96b02696b9b45de43eeeb8ac53c0199cab42b4daae4911b96fb8825"}]},{symbol:"ASML",token:"0x47F93d52cBeC7C6D2CfC080e154002370a60dAEA",pools:[{v:3,fee:1e4,pool:"0xedb22516B14Eb2d1C86927Db373B0E8bF70F5cD1"}]},{symbol:"BABA",token:"0xad25Ac6C84D497db898fa1E8387bf6Af3532a1c4",pools:[{v:4,fee:1e3,tickSpacing:10,id:"0x1791fc651cc794a282e5dbcb56d0b2b38eff8754b677c8876e86901521ecc439"},{v:3,fee:3e3,pool:"0xa57ab582b310dd6f9e934EA1EEEa152741545E6A"}]},{symbol:"COIN",token:"0x6330D8C3178a418788dF01a47479c0ce7CCF450b",pools:[{v:4,fee:2500,tickSpacing:25,id:"0xe2e1a0e32205e854525e0fb1d3667a53bd3b4919f032b9bcd2a038b6b6dac314"},{v:4,fee:1e4,tickSpacing:200,id:"0x007a13fa152f6dc383cad20a8eaab4e1e2538b606936eae2a424f8aa47d6db31"}]},{symbol:"CRCL",token:"0xdF0992E440dD0be65BD8439b609d6D4366bf1CB5",pools:[{v:3,fee:3e3,pool:"0x654E4143e82a5824445Ade0824351C2A9ACD95a8"},{v:4,fee:3e3,tickSpacing:30,id:"0x628c98ab436ee34a6a7decd606242890582591bdf7c9a35d90e0d08021c31ea0"},{v:4,fee:1500,tickSpacing:15,id:"0x5177eac8c2176468bbf15e44081e151d35c2e7d068e96d3db94f496a4dc944b2"}]},{symbol:"CRWV",token:"0x5f10A1C971B69e47e059e1dC91901B59b3fB49C3",pools:[{v:4,fee:9e3,tickSpacing:90,id:"0x237014478f7ef98afbe7412ac35b6a3f96b8fb111de48b7c4dbf49dba4bd9c4b"}]},{symbol:"DELL",token:"0x941AE714EC6D8130c7B75d67160Ca08f1e7d11Dd",pools:[{v:3,fee:1e4,pool:"0xc30c89cB7815A1488b7998D15eEC73961707Fc5a"}]},{symbol:"GME",token:"0x1b0E319c6A659F002271B69dB8A7df2F911c153E",pools:[{v:3,fee:500,pool:"0xE2b46c905E12Ab8E2f864e4821a4325884C1B126"}]},{symbol:"GOOGL",token:"0x2e0847E8910a9732eB3fb1bb4b70a580ADAD4FE3",pools:[{v:3,fee:500,pool:"0x34D0dC122CF9A8Eb296fC5e0D3A233625D7d19b7"},{v:4,fee:300,tickSpacing:3,id:"0x43fe16b75cabbf38f5b185d16142b02d1d9200d8f1ba17cb6cf899f562c6197f"},{v:4,fee:3e3,tickSpacing:60,id:"0xd4ecb79fdc521d7725d22b33ed43cb4e47aa96bfad76aa29577e3151f723ac5e"}]},{symbol:"INTC",token:"0xc72b96e0E48ecd4DC75E1e45396e26300BC39681",pools:[{v:3,fee:3e3,pool:"0x2e5a92f5013a64661A49312111be2e8aBd33F56a"}]},{symbol:"META",token:"0xc0D6457C16Cc70d6790Dd43521C899C87ce02f35",pools:[{v:4,fee:310,tickSpacing:3,id:"0xc58bb68060bcb7b3ea0f6d4a4afef1e57f628722e808db12afb6d1733552872f"},{v:3,fee:3e3,pool:"0x107a7Cb40d8665360ba10E59471Af06150A50922"},{v:4,fee:3e3,tickSpacing:60,id:"0x5875d407a42965b0e768c8925cea290e06fa50603ef34fc99eb92a1050e6ae36"}]},{symbol:"MSFT",token:"0xe93237C50D904957Cf27E7B1133b510C669c2e74",pools:[{v:3,fee:3e3,pool:"0xeb60bCD1D920ad6E102690CCFC6fB488899E1510"},{v:4,fee:3e3,tickSpacing:60,id:"0x9194a557b6a6bb2236b49ea7e2bbccec5d3eeb705aef00903be4b3de1d949579"}]},{symbol:"MSTR",token:"0xec262a75e413fAfD0dF80480274532C79D42da09",pools:[{v:4,fee:2500,tickSpacing:25,id:"0x319bac87e616a89e241c10aeb8afd4892a852cdd8b373cd9765ecddc40b87cfe"},{v:4,fee:2400,tickSpacing:24,id:"0xc105b8300ff65d750a0e4e63c7a879e20504069b770713464a5315e797735326"}]},{symbol:"MU",token:"0xfF080c8ce2E5feadaCa0Da81314Ae59D232d4afD",pools:[{v:3,fee:3e3,pool:"0xd057B1Bc54917855BBee58eAd58647f47caB35E5"}]},{symbol:"NBIS",token:"0x9D9c6684F596F66a64C030B93A886D51Fd4D7931",pools:[{v:4,fee:9900,tickSpacing:99,id:"0x7c2f9ce1214ba9baf56d1b6a1fc640c1b63e9a711172c0c7d10e5a9c4a3d4f0c"}]},{symbol:"NVDA",token:"0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC",pools:[{v:3,fee:500,pool:"0xd4EB21209C4D6093f80B5b84f5C45cc093EA14a3"},{v:4,fee:100,tickSpacing:1,id:"0x6444a8e0b267406a15db74ca00c4a24bdfa81ed3180f5b6d0851f8ed6f4f29c5"},{v:4,fee:3e3,tickSpacing:60,id:"0x3bb34a44f1b2b5f32c034c38a53065a521a47b199700fa9bd19d60985ff24bf1"}]},{symbol:"ORCL",token:"0xb0992820E760d836549ba69BC7598b4af75dEE03",pools:[{v:4,fee:1e4,tickSpacing:200,id:"0xc2ce4784e1e72cf0221b51b30c8aaadf6c0b12863cf03ab3687854fb7b1d850a"}]},{symbol:"PLTR",token:"0x894E1EC2D74FFE5AEF8Dc8A9e84686acCB964F2A",pools:[{v:4,fee:1500,tickSpacing:15,id:"0xc59eaeda6d1a6f031bc7e1d039772f2d675e7b4de2c8668610f4471bd60b3802"},{v:3,fee:3e3,pool:"0x851680416A4f4E1c463d45171d61ACDdBc8554c0"}]},{symbol:"QQQ",token:"0xD5f3879160bc7c32ebb4dC785F8a4F505888de68",pools:[{v:3,fee:500,pool:"0xD60A5d14dB690B7Afad71F76B108071D7175597d"}]},{symbol:"SGOV",token:"0x92FD66527192E3e61d4DDd13322Aa222DE86F9B5",pools:[{v:3,fee:500,pool:"0x6Ba50150B17Ffd0972915Aaf04fFd5E8f4Fa49b4"},{v:3,fee:3e3,pool:"0xfAb520051f96F4D2a32c22B6a3dD7fFfdf231bFe"}]},{symbol:"SLV",token:"0x411eFb0E7f985935DAec3D4C3ebaEa0d0AD7D89f",pools:[{v:3,fee:3e3,pool:"0x8cB787e6c315D464775289BaD00FDD67d53Ecb3D"},{v:3,fee:1e4,pool:"0x0Fa7BC480885DCf58Ad2ef63eC7289cF2481D51c"}]},{symbol:"SNDK",token:"0xB90A19fF0Af67f7779afF50A882A9CfF42446400",pools:[{v:4,fee:1e4,tickSpacing:200,id:"0x2707cb88a6a40fa0f948f58958051ba097d6f6a3cf7f87929bd68ccc5becea24"}]},{symbol:"SPCX",token:"0x4a0E65A3EcceC6dBe60AE065F2e7bb85Fae35eEa",pools:[{v:3,fee:500,pool:"0xc61284332117c3FB23A2A56cceFFD07F7aF60029"},{v:3,fee:3e3,pool:"0xEb07d9587eFD1778dFb9c385Ec43EF6d5F9fE401"}]},{symbol:"SPY",token:"0x117cc2133c37B721F49dE2A7a74833232B3B4C0C",pools:[{v:4,fee:100,tickSpacing:1,id:"0xe1ae6a4c6ccc9f037389a8d50a4f577bde1a9fe01d85d88ecbbd39955ce53288"},{v:3,fee:500,pool:"0xa7Bb1AC63BBaB0C44316E6c8C455213441689167"},{v:4,fee:500,tickSpacing:5,id:"0xe5923c8a8be481ec89a2ca784a2bbfa4235de6d88f92260fd66b660c4babf907"}]},{symbol:"TSLA",token:"0x322F0929c4625eD5bAd873c95208D54E1c003b2d",pools:[{v:3,fee:3e3,pool:"0xf4ACdAEEB7022862A763C9B1B885e11191c889E3"},{v:4,fee:3e3,tickSpacing:60,id:"0x8517f8071ae5b831b738052f12125e8e3d6c158b78728aa44ce3b25e5104d32e"}]},{symbol:"TSM",token:"0x58FfE4a942d3885bAa22D7520691F611EF09e7AA",pools:[{v:4,fee:7500,tickSpacing:75,id:"0x0ba5d53d2f6255f334b7c8ead4f56b6aef5af3402c5e4d11180afd38c6b85fb1"},{v:3,fee:1e4,pool:"0x07e8Ea83D4C1340774c8965125e26e12bf943bf1"}]},{symbol:"USAR",token:"0xd917B029C761D264c6A312BBbcDA868658eF86a6",pools:[{v:3,fee:3e3,pool:"0x04391780F519B7d3ba59c9590459D76e23d225C4"}]},{symbol:"USO",token:"0xa30FA36Db767ad9eD3f7a60fC79526fB4d56D344",pools:[{v:4,fee:1200,tickSpacing:15,id:"0x1f2ad5a274a776d8e1408292bde1d92d8fa7b6444acf14ad60b9c3e4e5b66420"},{v:3,fee:3e3,pool:"0x02175608F1b5E6b5ed221cCFdC7Be197D111D915"}]}],notOffered:{CLSK:"thin",EWY:"thin",IONQ:"thin",RGTI:"thin",RKLB:"thin"},sourceCommit:"02230282d8888e00794207ed271ee01b4ce30309"};var g="(address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks)",w="(address tokenIn,address tokenOut,uint24 fee,address recipient,uint256 amountIn,uint256 amountOutMinimum,uint160 sqrtPriceLimitX96)",y=F([`function swapExactIn(${g} key,bool zeroForOne,uint128 amountIn,uint256 minOut,uint160 sqrtPriceLimitX96,address to,uint256 deadline) returns (uint256 paid,uint256 out)`,`function exactInputSingle(${w} params) payable returns (uint256 amountOut)`,"function multicall(uint256 deadline,bytes[] data) payable returns (bytes[] results)"]),O=F(["function quoteExactInputSingle((address tokenIn,address tokenOut,uint256 amountIn,uint24 fee,uint160 sqrtPriceLimitX96) params) returns (uint256 amountOut,uint160 sqrtPriceX96After,uint32 initializedTicksCrossed,uint256 gasEstimate)"]),P=F([`function quoteExactInputSingle((${g} poolKey,bool zeroForOne,uint128 exactAmount,bytes hookData) params) returns (uint256 amountOut,uint256 gasEstimate)`]),q="0x0000000000000000000000000000000000000000",D={symbol:{type:"string",enum:s.tokens.map(o=>o.symbol)},side:{type:"string",enum:["buy","sell"]},amountIn:A()};function B(o){let t=s.tokens.find(e=>e.symbol===o.symbol);if(!t||o.side!=="buy"&&o.side!=="sell")throw new f("Choose a published stock symbol and buy or sell.");let a=C(o.amountIn,"amountIn",128);if(a===0n)throw new f("amountIn must be positive base units.");return{token:t,amount:a,input:o.side==="buy"?p.usdg:i(t.token),output:o.side==="buy"?i(t.token):p.usdg}}function S(o,t,a){let[e,n]=BigInt(p.usdg)<BigInt(o)?[p.usdg,o]:[o,p.usdg];return{currency0:e,currency1:n,fee:t,tickSpacing:a,hooks:q}}function j(o){return{tools:[{name:"priors_stock_quote",inputSchema:{type:"object",properties:D,required:Object.keys(D),additionalProperties:!1},async execute(t,a){if(o.network==="testnet")throw new f("Priors stock swaps require mainnet chain 4663.");let e=B(t),n=o.clientFor(u),c=await n.getBlockNumber({cacheTime:0}),m=await Promise.all(e.token.pools.map(async(b,l)=>{try{let r=S(i(e.token.token),b.fee,"tickSpacing"in b?b.tickSpacing:0),x=b.v===3?await n.simulateContract({address:i(s.v3.quoter),abi:O,functionName:"quoteExactInputSingle",args:[{tokenIn:e.input,tokenOut:e.output,amountIn:e.amount,fee:b.fee,sqrtPriceLimitX96:0n}],account:a,blockNumber:c}):await n.simulateContract({address:i(s.v4.quoter),abi:P,functionName:"quoteExactInputSingle",args:[{poolKey:r,zeroForOne:e.input===r.currency0,exactAmount:e.amount,hookData:"0x"}],account:a,blockNumber:c});return{poolIndex:l,version:b.v,amountOut:x.result[0].toString()}}catch(r){return{poolIndex:l,version:b.v,error:o.plainError(r)}}})),[d,k]=await Promise.all([n.readContract({address:i(e.token.token),abi:v,functionName:"decimals"}),n.readContract({address:i(e.token.token),abi:v,functionName:"symbol"})]);return{chainId:u,blockNumber:c.toString(),token:{address:i(e.token.token),symbol:k,decimals:d,chainId:u},quotes:m,warning:"Use explicit minimum output with priors_stock_swap and inspect its preview. Issuer restrictions can prevent sale. Quote is no promise of an exit; local regional eligibility remains required."}}},{name:"priors_stock_swap",inputSchema:{type:"object",properties:{...D,poolIndex:{type:"integer",minimum:0,maximum:2},minOut:A(),deadline:A(),eligible:{type:"boolean",description:"Operator/user affirms eligibility for this stock-token trade in their jurisdiction."}},required:[...Object.keys(D),"poolIndex","minOut","deadline","eligible"],additionalProperties:!1},async execute(t,a){if(o.network==="testnet")throw new f("Priors stock swaps require mainnet chain 4663.");if(a=i(a),t.eligible!==!0)throw new f("Confirm local eligibility for Robinhood stock tokens before trading.");let e=B(t),n=C(t.minOut,"minOut"),c=C(t.deadline,"deadline"),m=BigInt(Math.floor(Date.now()/1e3));if(n===0n||c<=m||c>m+1800n||!Number.isSafeInteger(t.poolIndex))throw new f("Provide positive minOut, poolIndex and a deadline within 30 minutes.");let d=e.token.pools[t.poolIndex];if(!d)throw new f("No published pool at that index. Read priors_stock_quote.");let k=S(i(e.token.token),d.fee,"tickSpacing"in d?d.tickSpacing:0),b=e.input===k.currency0,l=i(d.v===3?s.v3.router:s.v4.swapper),r=d.v===3?E({abi:y,functionName:"multicall",args:[c,[E({abi:y,functionName:"exactInputSingle",args:[{tokenIn:e.input,tokenOut:e.output,fee:d.fee,recipient:a,amountIn:e.amount,amountOutMinimum:n,sqrtPriceLimitX96:0n}]})]]}):E({abi:y,functionName:"swapExactIn",args:[k,b,e.amount,n,b?4295128740n:1461446703485210103287273052203988822378723970341n,a,c]}),x=[o.approval(e.input,l,e.amount.toString(),u),o.unsignedTx({to:l,data:r,value:"0",chainId:u,description:`Priors stock ${t.side}: ${e.amount} input base units; minimum ${n}; pinned V${d.v} pool.`})],I=await o.preview(x,a);return{txs:x,expiresAt:c.toString(),summary:`Stock ${t.side} ${t.symbol}: input ${e.amount} base units (${e.input}), minimum output ${n} (${e.output}), receiver ${a}, deadline ${c}. Issuer transfer/sale restrictions apply. Price impact is not measured by this builder; inspect minOut and the preview. ${I.summary}`}}}]}}export{y as a,j as b};
@@ -1 +0,0 @@
1
- import{b as J,e as Y}from"./FSPNOVKB.js";import{d as U,e as D,v as _}from"./ANQ43XJA.js";import{a as R,b as Q,c as H,d as L,e as $,f as G,g as W}from"./64AF7ECA.js";import{a as E}from"./EG6M6SSO.js";import{a as S}from"./UWOFA6GV.js";import{c as l,g as B}from"./73N3TOJL.js";import{a as g,i as N}from"./XPFVT2EA.js";import{a as o}from"./5YS5V2LK.js";import{encodeAbiParameters as x,encodeFunctionData as Z,encodePacked as pe,getAddress as ie,parseAbi as V,parseAbiParameters as A,zeroAddress as w}from"viem";var ee=ie("0x33e885ed0ec9bf04ecfb19341582aadcb4c8a9e7"),te=ie(N[4663].ponsTrade.quoter.address),de=V(["function execute(bytes commands,bytes[] inputs,uint256 deadline) payable"]),me=V(["function approve(address token,address spender,uint160 amount,uint48 expiration)"]),ne=V(["function factory() view returns (address)","function quoteExactInput(bytes path,uint256 amountIn) returns (uint256,uint160[],uint32[],uint256)","function quoteExactOutput(bytes path,uint256 amountOut) returns (uint256,uint160[],uint32[],uint256)"]),M="(address intermediateCurrency,uint24 fee,int24 tickSpacing,address hooks,bytes hookData)",z="(address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks)",oe=V([`function quoteExactInput((address exactCurrency,${M}[] path,uint128 exactAmount) params) returns (uint256,uint256)`,`function quoteExactOutput((address exactCurrency,${M}[] path,uint128 exactAmount) params) returns (uint256,uint256)`,`function quoteExactInputSingle((${z} poolKey,bool zeroForOne,uint128 exactAmount,bytes hookData) params) returns (uint256,uint256)`,`function quoteExactOutputSingle((${z} poolKey,bool zeroForOne,uint128 exactAmount,bytes hookData) params) returns (uint256,uint256)`]),fe=A(`(address exactCurrency,${M}[] path,uint256[] minHopPriceX36,uint128 amount,uint128 limit)`);function ye(u,t,i,d){let a=[],e=d?i:t,r=new Set([e]);for(let n of d?[...u].reverse():u){let s=n.currency0===e?n.currency1:n.currency1===e?n.currency0:void 0;if(!s||r.has(s))throw new o("V4 poolKeys must form a continuous route without repeated currencies.");a.push({intermediateCurrency:s,fee:n.fee,tickSpacing:n.tickSpacing,hooks:n.hooks,hookData:"0x"}),e=s,r.add(e)}if(e!==(d?t:i))throw new o("V4 route does not end at the requested currency.");return a}var le=A(`(${z} poolKey,bool zeroForOne,uint128 amount,uint128 limit,uint256 minHopPriceX36,bytes hookData)`),he=A("address recipient,uint256 amount,uint256 limit,bytes path,bool payerIsUser,uint256[] minHopPriceX36"),xe=A("address recipient,uint256 amount,uint256 limit,address[] path,bool payerIsUser,uint256[] minHopPriceX36"),re=A("address,uint256"),be=A("bytes,bytes[]");function we(u,t,i){let d=i?[...u].reverse():u,a=i?[...t].reverse():t,e=d[0];return a.forEach((r,n)=>{e=`${e}${pe(["uint24","address"],[r,d[n+1]]).slice(2)}`}),e}var ue={version:{type:"string",enum:["v2","v3","v4"]},tokenIn:l,tokenOut:l,path:{type:"array",minItems:2,maxItems:6,items:l},fees:{type:"array",items:{type:"integer",minimum:0,maximum:1e6}},poolKeys:{type:"array",minItems:1,maxItems:5,items:{type:"object",required:["currency0","currency1","fee","tickSpacing","hooks"],properties:{currency0:l,currency1:l,fee:{type:"integer"},tickSpacing:{type:"integer"},hooks:l},additionalProperties:!1}},poolKey:{type:"object",properties:{currency0:l,currency1:l,fee:{type:"integer"},tickSpacing:{type:"integer"},hooks:l},required:["currency0","currency1","fee","tickSpacing","hooks"],additionalProperties:!1},amountIn:S(),amountOut:S(),minAmountOut:S(),maxAmountIn:S(),slippageBps:{type:"integer",minimum:0,maximum:9999}};async function Ae(u,t,i,d=!1){W(t,Object.keys(ue));let a=t.version;if(!["v2","v3","v4"].includes(String(a)))throw new o("Provide version v2, v3 or v4.");let e=t.amountOut!==void 0;if(t.amountIn!==void 0===e)throw new o("Provide exactly one of amountIn or amountOut.");if(e&&t.minAmountOut!==void 0||!e&&t.maxAmountIn!==void 0)throw new o("Use maxAmountIn for exact output, minAmountOut for exact input.");let r=R(e?t.amountOut:t.amountIn,e?"amountOut":"amountIn",a==="v4"?128:160),n=H(t.tokenIn),s=H(t.tokenOut);if(n===s)throw new o("Swap requires different input and output currencies.");let v=u.clientFor(g),y=await v.getBlock(),F=L(t.slippageBps),I,m,q,k,h,c,C;if(a==="v4"){if(t.path!==void 0||t.fees!==void 0)throw new o("V4 uses poolKey or poolKeys; omit path and fees.");if(t.poolKey===void 0==(t.poolKeys===void 0))throw new o("Provide poolKey or poolKeys, not both.");if(t.poolKeys!==void 0){if(!Array.isArray(t.poolKeys)||t.poolKeys.length<1||t.poolKeys.length>5)throw new o("Provide 1 to 5 v4 poolKeys.");let p=t.poolKeys.map(P=>_(P));I=ye(p,n,s,e),m=(await v.simulateContract({address:te,abi:oe,functionName:e?"quoteExactOutput":"quoteExactInput",args:[{exactCurrency:e?s:n,path:I,exactAmount:r}],account:i,gas:E,blockNumber:y.number})).result[0]}else{if(h=_(t.poolKey),![h.currency0,h.currency1].includes(n)||![h.currency0,h.currency1].includes(s))throw new o("PoolKey currencies differ from the requested swap.");m=(await v.simulateContract({address:te,abi:oe,functionName:e?"quoteExactOutputSingle":"quoteExactInputSingle",args:[{poolKey:h,zeroForOne:n===h.currency0,exactAmount:r,hookData:"0x"}],account:i,gas:E,blockNumber:y.number})).result[0]}k="0x10"}else{if(t.poolKey!==void 0||t.poolKeys!==void 0||n===w||s===w)throw new o("V2/v3 routes use ERC-20 tokens; wrap ETH to WETH first.");if(c=Array.isArray(t.path)?t.path.map(Q):[n,s],c.length<2||c.length>6||c[0]!==n||c.at(-1)!==s||new Set(c).size!==c.length||c.includes(w))throw new o("Path must contain 2 to 6 distinct ERC-20 tokens in input-to-output order.");if(a==="v2"){if(t.fees!==void 0)throw new o("V2 fees are fixed by the pair; omit fees.");let p=await v.readContract({address:J,abi:Y,functionName:e?"getAmountsIn":"getAmountsOut",args:[r,c],blockNumber:y.number});m=e?p[0]:p.at(-1),k=e?"0x09":"0x08"}else{let p=t.fees;if(!Array.isArray(p)||p.length!==c.length-1||p.some(P=>typeof P!="number"||!Number.isInteger(P)||P<0||P>1e6))throw new o("Provide one integer v3 fee in pips per path hop.");if(!B(await v.readContract({address:ee,abi:ne,functionName:"factory",blockNumber:y.number}),N[4663].uniswap.v3_factory.address))throw new o("V3 quoter is not configured for the pinned factory.");C=we(c,p,e),m=(await v.simulateContract({address:ee,abi:ne,functionName:e?"quoteExactOutput":"quoteExactInput",args:[C,r],account:i,gas:E,blockNumber:y.number})).result[0],k=e?"0x01":"0x00"}}if(m<=0n)throw new o("No positive Uniswap quote is available.");let T=e?t.maxAmountIn:t.minAmountOut;if(!d&&T===void 0)throw new o(`Provide ${e?"maxAmountIn":"minAmountOut"} from uniswap_quote to confirm the trade bound.`);let f=T===void 0?e?(m*BigInt(1e4+F)+9999n)/10000n:m*BigInt(1e4-F)/10000n:R(T,e?"maxAmountIn":"minAmountOut",a==="v4"?128:160);if(f<=0n||(e?f<m:f>m))throw new o("The fresh quote does not satisfy the confirmed swap bound.");let b=e?f:r;if(b>=1n<<160n||a==="v4"&&(b>=1n<<128n||f>=1n<<128n))throw new o("Swap bounds exceed the router amount range.");let[ae,se]=await Promise.all([$(u,n,y.number),$(u,s,y.number)]),j={version:a,input:{token:ae,amount:(e?m:r).toString()},output:{token:se,amount:(e?r:m).toString()},[e?"maxAmountIn":"minAmountOut"]:f.toString(),blockNumber:y.number.toString(),expiresAt:(y.timestamp+60n).toString()};if(d)return{quote:j,summary:"Read-only on-chain quote. Repeat the same route with the returned bound in uniswap_swap; execution gets a fresh quote and preview."};let O=y.timestamp+300n,K=[];if(n!==w&&(K.push(u.approval(n,U,b.toString(),g)),K.push(u.unsignedTx({to:U,data:Z({abi:me,functionName:"approve",args:[n,D,b,Number(O)]}),value:"0",chainId:g,description:`Permit exactly ${b} input base units to Universal Router until ${O}.`}))),a==="v4"){let p=I?x(fe,[{exactCurrency:e?s:n,path:I,minHopPriceX36:[],amount:r,limit:f}]):x(le,[{poolKey:h,zeroForOne:n===h.currency0,amount:r,limit:f,minHopPriceX36:0n,hookData:"0x"}]);q=x(be,[I?e?"0x090c0f":"0x070c0f":e?"0x080c0f":"0x060c0f",[p,x(re,[n,b]),x(re,[s,e?r:f])]])}else a==="v2"?q=x(xe,[i,r,f,c,!0,[]]):q=x(he,[i,r,f,C,!0,[]]);let X=[q];return n===w&&e&&(k=`${k}04`,X.push(x(A("address,address,uint256"),[w,i,0n]))),K.push(u.unsignedTx({to:D,data:Z({abi:de,functionName:"execute",args:[k,X,O]}),value:n===w?b.toString():"0",chainId:g,description:`Uniswap ${a} ${e?"exact output":"exact input"} swap; recipient ${i}; deadline ${O}.`})),{...await G(u,K,i,"Swap through Universal Router 2.1.2. Exact approvals, fixed output/input bound and five-minute on-chain deadline. Venue fees included; gas excluded."),quote:j}}function Ee(u){return{tools:[!0,!1].map(t=>({name:t?"uniswap_quote":"uniswap_swap",inputSchema:{type:"object",additionalProperties:!1,required:["version","tokenIn","tokenOut"],properties:ue},execute:(i,d)=>Ae(u,i,d,t)}))}}export{ee as a,te as b,de as c,me as d,ne as e,oe as f,fe as g,ye as h,le as i,he as j,xe as k,we as l,Ae as m,Ee as n};
@@ -1 +0,0 @@
1
- import{d as R}from"./7Z5IM2QZ.js";import{H as O,J as L,K as N,b as p,d as l,y as j}from"./ANQ43XJA.js";import{a as D,f as H,g as b}from"./64AF7ECA.js";import{g as d}from"./73N3TOJL.js";import{a as y}from"./XPFVT2EA.js";import{a as e}from"./5YS5V2LK.js";import{decodeAbiParameters as J,decodeFunctionData as A,encodeAbiParameters as K,encodeFunctionData as Q,erc20Abi as W,getAddress as Y,parseAbi as Z,parseAbiParameters as ee}from"viem";var U=Z(["function modifyLiquidities(bytes unlockData,uint256 deadline) payable"]),V=ee("bytes actions,bytes[] params");function de(f,$){return{tools:[{name:"uniswap_batch",inputSchema:{type:"object",additionalProperties:!1,required:["operations"],properties:{operations:{type:"array",minItems:1,maxItems:20,items:{type:"object",additionalProperties:!1,required:["name","arguments"],properties:{name:{type:"string",enum:["uniswap_add","uniswap_collect","uniswap_remove"]},arguments:{anyOf:[O,L,N]}}}}}},async execute(a,v){if(b(a,["operations"]),!Array.isArray(a.operations)||a.operations.length<1||a.operations.length>20)throw new e("Provide 1 to 20 v4 liquidity operations.");let s="0x",c,h=[],P=0n,g=new Map,_=new Set,E=new Set;for(let t of a.operations){if(!t||typeof t!="object"||Array.isArray(t))throw new e("Each operation needs name and arguments.");let o=t;if(b(o,["name","arguments"]),!["uniswap_add","uniswap_collect","uniswap_remove"].includes(String(o.name))||!o.arguments||typeof o.arguments!="object"||Array.isArray(o.arguments))throw new e("Batch supports v4 add, collect and remove operations only.");let r=o.arguments;if(r.version!=="v4")throw new e("Every batch operation must explicitly select version v4.");if(r.initialPrice!==void 0||r.sqrtPriceX96!==void 0)throw new e("Create a pool before batching its liquidity operations.");if(r.tokenId!==void 0){let n=D(r.tokenId,"tokenId").toString();if(E.has(n))throw new e("Batch tokenIds must be distinct decimal strings.");E.add(n)}else if(o.name!=="uniswap_add")throw new e("Existing-position operations require tokenId.");let I=await $.tools.find(n=>n.name===o.name).execute(r,v),u=I.txs.at(-1);if(!u||!d(u.to,p))throw new e("Batch operation returned an unexpected destination.");P+=BigInt(u.value);for(let n of I.txs.slice(0,-1)){if(BigInt(n.value)!==0n)throw new e("Batch prerequisite cannot send native currency.");if(d(n.to,l)){let i=A({abi:R,data:n.data}),[B,G,X,z]=i.args;if(!d(G,p))throw new e("Batch Permit2 spender must be PositionManager.");let T=B.toLowerCase(),m=g.get(T),q=BigInt(z),C=(m?.amount??0n)+X;if(C>=1n<<160n)throw new e("Batch approval exceeds uint160.");g.set(T,{token:B,amount:C,expiration:m&&m.expiration<q?m.expiration:q})}else{let i=A({abi:W,data:n.data});if(i.functionName!=="approve"||!d(i.args[0],l))throw new e("Unexpected batch prerequisite.")}}let S=A({abi:U,data:u.data}),[F,x]=J(V,S.args[0]),k=F.slice(2).match(/../g)??[];if(k.length!==x.length)throw new e("Batch action/parameter count differs.");k.forEach((n,i)=>{n==="14"?_.add(x[i]):(s=`${s}${n}`,h.push(x[i]))});let M=S.args[1];c=c===void 0||M<c?M:c}for(let t of _)s=`${s}14`,h.push(t);let w=[];for(let t of g.values())w.push(f.approval(Y(t.token),l,t.amount.toString(),y),j(t.token,p,t.amount.toString(),t.expiration.toString()));return w.push(f.unsignedTx({to:p,data:Q({abi:U,functionName:"modifyLiquidities",args:[K(V,[s,h]),c]}),value:P.toString(),chainId:y,description:`Atomically modify ${a.operations.length} v4 positions; recipients are the signing wallet.`})),H(f,w,v,"Atomic v4 batch: every operation must succeed. Each position retains its own minimums; preview covers the complete action stream.")}}]}}export{U as a,V as b,de as c};