@oakagentkit/core 0.2.4 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (510) hide show
  1. package/build/dist/api/amounts.d.ts +2 -0
  2. package/build/dist/api/amounts.js +1 -1
  3. package/build/dist/api/args.js +1 -1
  4. package/build/dist/api/gas.js +1 -1
  5. package/build/dist/api/grandfather.js +1 -1
  6. package/build/dist/api/guards.js +1 -1
  7. package/build/dist/api/history.js +1 -1
  8. package/build/dist/api/http.js +1 -1
  9. package/build/dist/api/merkle.js +1 -1
  10. package/build/dist/api/module.js +1 -1
  11. package/build/dist/api/modules/beefy/boosts.js +1 -1
  12. package/build/dist/api/modules/beefy/clm.js +1 -1
  13. package/build/dist/api/modules/beefy/guard.js +1 -1
  14. package/build/dist/api/modules/beefy/index.js +1 -1
  15. package/build/dist/api/modules/beefy/liquidity.js +1 -1
  16. package/build/dist/api/modules/beefy/management.js +1 -1
  17. package/build/dist/api/modules/beefy/vaults.js +1 -1
  18. package/build/dist/api/modules/borro/abi.d.ts +149 -0
  19. package/build/dist/api/modules/borro/abi.js +1 -0
  20. package/build/dist/api/modules/borro/actions.d.ts +2 -0
  21. package/build/dist/api/modules/borro/actions.js +1 -0
  22. package/build/dist/api/modules/borro/checks.d.ts +151 -0
  23. package/build/dist/api/modules/borro/checks.js +1 -0
  24. package/build/dist/api/modules/borro/copy.d.ts +174 -0
  25. package/build/dist/api/modules/borro/copy.js +1 -0
  26. package/build/dist/api/modules/borro/index.d.ts +13 -0
  27. package/build/dist/api/modules/borro/index.js +1 -0
  28. package/build/dist/api/modules/borro/liquidity.d.ts +4 -0
  29. package/build/dist/api/modules/borro/liquidity.js +1 -0
  30. package/build/dist/api/modules/borro/pins.d.ts +264 -0
  31. package/build/dist/api/modules/borro/pins.js +1 -0
  32. package/build/dist/api/modules/borro/positions.d.ts +8 -0
  33. package/build/dist/api/modules/borro/positions.js +1 -0
  34. package/build/dist/api/modules/borro/rates.d.ts +20 -0
  35. package/build/dist/api/modules/borro/rates.js +1 -0
  36. package/build/dist/api/modules/borro/reader.d.ts +36 -0
  37. package/build/dist/api/modules/borro/reader.js +1 -0
  38. package/build/dist/api/modules/borro/types.d.ts +126 -0
  39. package/build/dist/api/modules/borro/types.js +0 -0
  40. package/build/dist/api/modules/chop/abi.d.ts +527 -0
  41. package/build/dist/api/modules/chop/abi.js +1 -0
  42. package/build/dist/api/modules/chop/actions.d.ts +24 -0
  43. package/build/dist/api/modules/chop/actions.js +1 -0
  44. package/build/dist/api/modules/chop/checks.d.ts +26 -0
  45. package/build/dist/api/modules/chop/checks.js +1 -0
  46. package/build/dist/api/modules/chop/copy.d.ts +5 -0
  47. package/build/dist/api/modules/chop/copy.js +1 -0
  48. package/build/dist/api/modules/chop/guard.d.ts +13 -0
  49. package/build/dist/api/modules/chop/guard.js +1 -0
  50. package/build/dist/api/modules/chop/index.d.ts +3 -0
  51. package/build/dist/api/modules/chop/index.js +1 -0
  52. package/build/dist/api/modules/chop/pins.d.ts +53 -0
  53. package/build/dist/api/modules/chop/pins.js +1 -0
  54. package/build/dist/api/modules/chop/positions.d.ts +3 -0
  55. package/build/dist/api/modules/chop/positions.js +1 -0
  56. package/build/dist/api/modules/chop/reader.d.ts +70 -0
  57. package/build/dist/api/modules/chop/reader.js +1 -0
  58. package/build/dist/api/modules/chop/types.d.ts +32 -0
  59. package/build/dist/api/modules/chop/types.js +0 -0
  60. package/build/dist/api/modules/clanker/extensions.js +1 -1
  61. package/build/dist/api/modules/clanker/index.js +1 -1
  62. package/build/dist/api/modules/clanker/manage.js +1 -1
  63. package/build/dist/api/modules/clanker/pool-config.js +1 -1
  64. package/build/dist/api/modules/clanker/protocol.js +1 -1
  65. package/build/dist/api/modules/clanker/state.js +1 -1
  66. package/build/dist/api/modules/earn/copy.d.ts +2 -2
  67. package/build/dist/api/modules/earn/copy.js +1 -1
  68. package/build/dist/api/modules/earn/index.js +1 -1
  69. package/build/dist/api/modules/earn/lp.js +1 -1
  70. package/build/dist/api/modules/earn/options.js +1 -1
  71. package/build/dist/api/modules/erc8004/common.js +1 -1
  72. package/build/dist/api/modules/erc8004/domain.js +1 -1
  73. package/build/dist/api/modules/erc8004/index.js +1 -1
  74. package/build/dist/api/modules/erc8004/management.js +1 -1
  75. package/build/dist/api/modules/erc8004/reputation.js +1 -1
  76. package/build/dist/api/modules/erc8004/services.js +1 -1
  77. package/build/dist/api/modules/erc8004/validation.js +1 -1
  78. package/build/dist/api/modules/gloam/abi.d.ts +89 -0
  79. package/build/dist/api/modules/gloam/abi.js +1 -0
  80. package/build/dist/api/modules/gloam/actions.d.ts +5 -0
  81. package/build/dist/api/modules/gloam/actions.js +1 -0
  82. package/build/dist/api/modules/gloam/checks.d.ts +17 -0
  83. package/build/dist/api/modules/gloam/checks.js +1 -0
  84. package/build/dist/api/modules/gloam/copy.d.ts +22 -0
  85. package/build/dist/api/modules/gloam/copy.js +2 -0
  86. package/build/dist/api/modules/gloam/index.d.ts +6 -0
  87. package/build/dist/api/modules/gloam/index.js +1 -0
  88. package/build/dist/api/modules/gloam/pins.d.ts +41 -0
  89. package/build/dist/api/modules/gloam/pins.js +1 -0
  90. package/build/dist/api/modules/gloam/types.d.ts +308 -0
  91. package/build/dist/api/modules/gloam/types.js +1 -0
  92. package/build/dist/api/modules/grove/index.js +1 -1
  93. package/build/dist/api/modules/heyresearch/builder-feed.js +1 -1
  94. package/build/dist/api/modules/heyresearch/index.js +1 -1
  95. package/build/dist/api/modules/heyresearch/proof-reads.js +1 -1
  96. package/build/dist/api/modules/heyresearch/public-reads.js +1 -1
  97. package/build/dist/api/modules/heyresearch/scan.js +1 -1
  98. package/build/dist/api/modules/heyresearch/token-facts.js +1 -1
  99. package/build/dist/api/modules/hoodag/chain-reads.js +1 -1
  100. package/build/dist/api/modules/hoodag/index.js +1 -1
  101. package/build/dist/api/modules/hoodag/management.js +1 -1
  102. package/build/dist/api/modules/hoodag/public-reads.js +1 -1
  103. package/build/dist/api/modules/hoodag/reconstruct.js +1 -1
  104. package/build/dist/api/modules/hoodlock/airdrop.js +1 -1
  105. package/build/dist/api/modules/hoodlock/commerce.js +1 -1
  106. package/build/dist/api/modules/hoodlock/fee.js +1 -1
  107. package/build/dist/api/modules/hoodlock/guard.js +1 -1
  108. package/build/dist/api/modules/hoodlock/index.js +1 -1
  109. package/build/dist/api/modules/hoodlock/lifecycle.js +1 -1
  110. package/build/dist/api/modules/hoodlock/locks-burn.js +1 -1
  111. package/build/dist/api/modules/hoodlock/public.js +1 -1
  112. package/build/dist/api/modules/hookr/actions.js +1 -1
  113. package/build/dist/api/modules/hookr/addons.js +1 -1
  114. package/build/dist/api/modules/hookr/agent-gate.js +1 -1
  115. package/build/dist/api/modules/hookr/contracts.js +1 -1
  116. package/build/dist/api/modules/hookr/create-cancel.js +1 -1
  117. package/build/dist/api/modules/hookr/discovery.js +1 -1
  118. package/build/dist/api/modules/hookr/fill-bounty.js +1 -1
  119. package/build/dist/api/modules/hookr/index.js +1 -1
  120. package/build/dist/api/modules/hookr/launch-options.js +1 -1
  121. package/build/dist/api/modules/hookr/launch-receipt.js +1 -1
  122. package/build/dist/api/modules/hookr/launch.js +1 -1
  123. package/build/dist/api/modules/hookr/liquidity.js +1 -1
  124. package/build/dist/api/modules/hookr/lp-positions.js +1 -1
  125. package/build/dist/api/modules/hookr/lp-reads.js +1 -1
  126. package/build/dist/api/modules/hookr/lp-receipt.js +1 -1
  127. package/build/dist/api/modules/hookr/lp-state.js +1 -1
  128. package/build/dist/api/modules/hookr/public-reads.js +1 -1
  129. package/build/dist/api/modules/hookr/read-utils.js +1 -1
  130. package/build/dist/api/modules/hookr/relay.js +1 -1
  131. package/build/dist/api/modules/hookr/revenue.js +1 -1
  132. package/build/dist/api/modules/kyberswap/index.js +1 -1
  133. package/build/dist/api/modules/kyberswap/source-pools.js +1 -1
  134. package/build/dist/api/modules/layerbank/actions.js +1 -1
  135. package/build/dist/api/modules/layerbank/checks.js +1 -1
  136. package/build/dist/api/modules/layerbank/index.js +1 -1
  137. package/build/dist/api/modules/layerbank/merkl.js +1 -1
  138. package/build/dist/api/modules/layerbank/reader.js +1 -1
  139. package/build/dist/api/modules/layerbank/reserve.js +1 -1
  140. package/build/dist/api/modules/lighter/index.js +1 -1
  141. package/build/dist/api/modules/longbow/administration.js +1 -1
  142. package/build/dist/api/modules/longbow/analytics.js +1 -1
  143. package/build/dist/api/modules/longbow/fixed.js +1 -1
  144. package/build/dist/api/modules/longbow/index.js +1 -1
  145. package/build/dist/api/modules/longbow/nft.js +1 -1
  146. package/build/dist/api/modules/longbow/rebates.js +1 -1
  147. package/build/dist/api/modules/longbow/staking.js +1 -1
  148. package/build/dist/api/modules/meridian/index.js +1 -1
  149. package/build/dist/api/modules/meridian/markets.js +1 -1
  150. package/build/dist/api/modules/meridian/perps-batch.js +1 -1
  151. package/build/dist/api/modules/meridian/perps-common.js +1 -1
  152. package/build/dist/api/modules/meridian/perps-guards.js +1 -1
  153. package/build/dist/api/modules/meridian/perps-intents.js +1 -1
  154. package/build/dist/api/modules/meridian/perps-stream.js +1 -1
  155. package/build/dist/api/modules/meridian/perps.d.ts +1 -0
  156. package/build/dist/api/modules/meridian/perps.js +1 -1
  157. package/build/dist/api/modules/meridian/predict-read.js +1 -1
  158. package/build/dist/api/modules/meridian/rfq.js +1 -1
  159. package/build/dist/api/modules/merkl/discovery.js +1 -1
  160. package/build/dist/api/modules/merkl/index.js +1 -1
  161. package/build/dist/api/modules/merkl/manage.js +1 -1
  162. package/build/dist/api/modules/merkl/protocol.js +1 -1
  163. package/build/dist/api/modules/morpho/allocator.js +1 -1
  164. package/build/dist/api/modules/morpho/bundles.js +1 -1
  165. package/build/dist/api/modules/morpho/in-kind.js +1 -1
  166. package/build/dist/api/modules/morpho/index.js +1 -1
  167. package/build/dist/api/modules/morpho/local-guard.js +1 -1
  168. package/build/dist/api/modules/morpho/midnight.js +1 -1
  169. package/build/dist/api/modules/morpho/protocol.js +1 -1
  170. package/build/dist/api/modules/morpho/vault-management.js +1 -1
  171. package/build/dist/api/modules/morpho/vault-tools.js +1 -1
  172. package/build/dist/api/modules/morpho/vault-v2.js +1 -1
  173. package/build/dist/api/modules/netnet/card-plan.js +1 -1
  174. package/build/dist/api/modules/netnet/card-read.js +1 -1
  175. package/build/dist/api/modules/netnet/card-recovery.js +1 -1
  176. package/build/dist/api/modules/netnet/desk-action.js +1 -1
  177. package/build/dist/api/modules/netnet/financial.js +1 -1
  178. package/build/dist/api/modules/netnet/index.js +1 -1
  179. package/build/dist/api/modules/netnet/staking.js +1 -1
  180. package/build/dist/api/modules/orbio/gateway.js +1 -1
  181. package/build/dist/api/modules/orbio/index.js +1 -1
  182. package/build/dist/api/modules/orbio/positions.js +1 -1
  183. package/build/dist/api/modules/pendle/convert.js +1 -1
  184. package/build/dist/api/modules/pendle/costs.js +1 -1
  185. package/build/dist/api/modules/pendle/index.js +1 -1
  186. package/build/dist/api/modules/pendle/markets.js +1 -1
  187. package/build/dist/api/modules/pendle/positions.js +1 -1
  188. package/build/dist/api/modules/pendle/pricecheck.js +1 -1
  189. package/build/dist/api/modules/pendle/reader.js +1 -1
  190. package/build/dist/api/modules/pendle/redeem.js +1 -1
  191. package/build/dist/api/modules/pendle/trade.js +1 -1
  192. package/build/dist/api/modules/pendle/types.d.ts +16 -1
  193. package/build/dist/api/modules/pendle/validate.js +1 -1
  194. package/build/dist/api/modules/pendle/verify.js +1 -1
  195. package/build/dist/api/modules/pons/claim.js +1 -1
  196. package/build/dist/api/modules/pons/holder-directory.js +1 -1
  197. package/build/dist/api/modules/pons/index.js +1 -1
  198. package/build/dist/api/modules/pons/launch-status.d.ts +1 -0
  199. package/build/dist/api/modules/pons/launch-status.js +1 -1
  200. package/build/dist/api/modules/pons/prices.js +1 -1
  201. package/build/dist/api/modules/pons/reads.js +1 -1
  202. package/build/dist/api/modules/pons/swap-terms.js +1 -1
  203. package/build/dist/api/modules/pons/trade.js +1 -1
  204. package/build/dist/api/modules/poolstrade/index.js +1 -1
  205. package/build/dist/api/modules/priors/coverage.js +1 -1
  206. package/build/dist/api/modules/priors/discovery.js +1 -1
  207. package/build/dist/api/modules/priors/features.js +1 -1
  208. package/build/dist/api/modules/priors/holdings.js +1 -1
  209. package/build/dist/api/modules/priors/index.js +1 -1
  210. package/build/dist/api/modules/priors/integration.js +1 -1
  211. package/build/dist/api/modules/priors/market.js +1 -1
  212. package/build/dist/api/modules/priors/pt.js +1 -1
  213. package/build/dist/api/modules/priors/savings-exit.js +1 -1
  214. package/build/dist/api/modules/priors/starter-line.js +1 -1
  215. package/build/dist/api/modules/priors/stock-swap.js +1 -1
  216. package/build/dist/api/modules/relay/api.js +1 -1
  217. package/build/dist/api/modules/relay/bootstrap.js +1 -1
  218. package/build/dist/api/modules/relay/discovery.js +1 -1
  219. package/build/dist/api/modules/relay/inbound.d.ts +2 -0
  220. package/build/dist/api/modules/relay/inbound.js +1 -1
  221. package/build/dist/api/modules/relay/index.js +1 -1
  222. package/build/dist/api/modules/relay/order.js +1 -1
  223. package/build/dist/api/modules/relay/outbound-status.js +1 -1
  224. package/build/dist/api/modules/relay/readiness.js +1 -1
  225. package/build/dist/api/modules/relay/reads.js +1 -1
  226. package/build/dist/api/modules/relay/vaults.js +1 -1
  227. package/build/dist/api/modules/spark/actions.js +1 -1
  228. package/build/dist/api/modules/spark/details.js +1 -1
  229. package/build/dist/api/modules/spark/index.js +1 -1
  230. package/build/dist/api/modules/spark/management.js +1 -1
  231. package/build/dist/api/modules/steakhouse/analytics.js +1 -1
  232. package/build/dist/api/modules/steakhouse/erc4626.js +1 -1
  233. package/build/dist/api/modules/steakhouse/index.js +1 -1
  234. package/build/dist/api/modules/steakhouse/local-guard.js +1 -1
  235. package/build/dist/api/modules/steakhouse/management.js +1 -1
  236. package/build/dist/api/modules/steakhouse/v2-exit.js +1 -1
  237. package/build/dist/api/modules/tickerspring/basket-routes.js +1 -1
  238. package/build/dist/api/modules/tickerspring/contract-reads.js +1 -1
  239. package/build/dist/api/modules/tickerspring/exit-preview.js +1 -1
  240. package/build/dist/api/modules/tickerspring/guards.js +1 -1
  241. package/build/dist/api/modules/tickerspring/index.js +1 -1
  242. package/build/dist/api/modules/tickerspring/journeys.js +1 -1
  243. package/build/dist/api/modules/tickerspring/ladder.js +1 -1
  244. package/build/dist/api/modules/tickerspring/maker.js +1 -1
  245. package/build/dist/api/modules/tickerspring/order-accounting.js +1 -1
  246. package/build/dist/api/modules/tickerspring/research.js +1 -1
  247. package/build/dist/api/modules/tickerspring/strategies.js +1 -1
  248. package/build/dist/api/modules/uniswap/auction-create.js +1 -1
  249. package/build/dist/api/modules/uniswap/auction.js +1 -1
  250. package/build/dist/api/modules/uniswap/batch.js +1 -1
  251. package/build/dist/api/modules/uniswap/common.js +1 -1
  252. package/build/dist/api/modules/uniswap/fees.js +1 -1
  253. package/build/dist/api/modules/uniswap/index.js +1 -1
  254. package/build/dist/api/modules/uniswap/local-guard.js +1 -1
  255. package/build/dist/api/modules/uniswap/oracle.js +1 -1
  256. package/build/dist/api/modules/uniswap/pool-math.js +1 -1
  257. package/build/dist/api/modules/uniswap/pools.js +1 -1
  258. package/build/dist/api/modules/uniswap/position.js +1 -1
  259. package/build/dist/api/modules/uniswap/protocol.js +1 -1
  260. package/build/dist/api/modules/uniswap/token-jar.js +1 -1
  261. package/build/dist/api/modules/uniswap/trade-batch.js +1 -1
  262. package/build/dist/api/modules/uniswap/trade.js +1 -1
  263. package/build/dist/api/modules/uniswap/v2.js +1 -1
  264. package/build/dist/api/modules/uniswap/v3.d.ts +11 -1
  265. package/build/dist/api/modules/uniswap/v3.js +1 -1
  266. package/build/dist/api/modules/uniswap/v4.js +1 -1
  267. package/build/dist/api/modules/uniswap/wrap.js +1 -1
  268. package/build/dist/api/modules/velora/claims.js +1 -1
  269. package/build/dist/api/modules/velora/delta-reads.js +1 -1
  270. package/build/dist/api/modules/velora/index.js +1 -1
  271. package/build/dist/api/modules/wormhole/index.d.ts +3 -0
  272. package/build/dist/api/modules/wormhole/index.js +1 -1
  273. package/build/dist/api/modules/wormhole/scan-text.js +1 -1
  274. package/build/dist/api/modules/wormhole/swap-token-verdict.d.ts +11 -0
  275. package/build/dist/api/modules/wormhole/swap-token-verdict.js +1 -0
  276. package/build/dist/api/modules/wormhole/third-party-text.d.ts +13 -0
  277. package/build/dist/api/modules/wormhole/third-party-text.js +1 -0
  278. package/build/dist/api/modules/wormhole/token-check.d.ts +2 -0
  279. package/build/dist/api/modules/wormhole/token-check.js +1 -1
  280. package/build/dist/api/modules/wormhole/x402-client.d.ts +36 -0
  281. package/build/dist/api/modules/wormhole/x402-client.js +1 -0
  282. package/build/dist/api/positions.js +1 -1
  283. package/build/dist/api/pricenote.js +1 -1
  284. package/build/dist/api/prices.js +1 -1
  285. package/build/dist/api/pricing.js +1 -1
  286. package/build/dist/api/routes.js +1 -1
  287. package/build/dist/api/send.js +1 -1
  288. package/build/dist/api/signing-registry.js +1 -1
  289. package/build/dist/api/simulate.js +1 -1
  290. package/build/dist/api/swap.js +1 -1
  291. package/build/dist/api/tokens.d.ts +1 -0
  292. package/build/dist/api/tokens.js +1 -1
  293. package/build/dist/api/tool-policy.js +1 -1
  294. package/build/dist/api/tx.js +1 -1
  295. package/build/dist/api/types.d.ts +6 -1
  296. package/build/dist/api/vendor-limits.js +1 -1
  297. package/build/dist/chunks/{ALRRW7SF.js → 2MT3G7YZ.js} +1 -1
  298. package/build/dist/chunks/{WPAF55SP.js → 2THSW4QN.js} +1 -1
  299. package/build/dist/chunks/{MKAPRRKF.js → 2TK3ETUO.js} +1 -1
  300. package/build/dist/chunks/{VVA72C6O.js → 2VXLVXIB.js} +1 -1
  301. package/build/dist/chunks/{ZE7EU2CS.js → 35KR3VSS.js} +1 -1
  302. package/build/dist/chunks/{ZYH4B2GR.js → 3GQ7A3VB.js} +1 -1
  303. package/build/dist/chunks/3VWVW7PX.js +1 -0
  304. package/build/dist/chunks/{WPFAEBE7.js → 3XNZUIRU.js} +1 -1
  305. package/build/dist/chunks/{PBQSJSZO.js → 43LI5NKJ.js} +1 -1
  306. package/build/dist/chunks/{QVYCJ6WV.js → 46KWRAYK.js} +1 -1
  307. package/build/dist/chunks/4DP2VPXR.js +3 -0
  308. package/build/dist/chunks/{47YN4OUI.js → 4EN6MQEI.js} +1 -1
  309. package/build/dist/chunks/{UHRCM7AG.js → 4HG6FRVH.js} +1 -1
  310. package/build/dist/chunks/{E6UU7DL2.js → 4I3OU56B.js} +1 -1
  311. package/build/dist/chunks/{WIVYKLQM.js → 52ELWNXJ.js} +1 -1
  312. package/build/dist/chunks/{5WUKOQIJ.js → 5AXWBSPG.js} +1 -1
  313. package/build/dist/chunks/{D6ZJPNK7.js → 5N3O42X6.js} +1 -1
  314. package/build/dist/chunks/{UA4O226F.js → 5SMVQCAP.js} +1 -1
  315. package/build/dist/chunks/{6L5KTE6Y.js → 5SZPNZG4.js} +1 -1
  316. package/build/dist/chunks/{6PY3IRDS.js → 64GOINYS.js} +1 -1
  317. package/build/dist/chunks/{5ZLOCQA4.js → 66F5ZH34.js} +1 -1
  318. package/build/dist/chunks/{XDZRO5JQ.js → 6I4NTKB2.js} +1 -1
  319. package/build/dist/chunks/{LVLVP5KQ.js → 6JAXZNZ3.js} +1 -1
  320. package/build/dist/chunks/{BXHNYCH2.js → 6O3Q5B6M.js} +1 -1
  321. package/build/dist/chunks/{MFCPL6LF.js → 6OGDTEGH.js} +1 -1
  322. package/build/dist/chunks/{43CSMYDO.js → 6WD4HHID.js} +1 -1
  323. package/build/dist/chunks/{XJEOEMDS.js → 6WZX7C4T.js} +1 -1
  324. package/build/dist/chunks/6YB3VOUL.js +1 -0
  325. package/build/dist/chunks/77CLMPM7.js +1 -0
  326. package/build/dist/chunks/{EKNSLLJK.js → 7GJ6SLEV.js} +1 -1
  327. package/build/dist/chunks/{S2TAJHHK.js → 7KWZ5QJU.js} +1 -1
  328. package/build/dist/chunks/{CTMA4BTM.js → 7QIO77VE.js} +1 -1
  329. package/build/dist/chunks/7QZOTRSA.js +2 -0
  330. package/build/dist/chunks/{IKEJCBYU.js → 7WSHW7KW.js} +1 -1
  331. package/build/dist/chunks/{PQC5635W.js → A7I4IWUB.js} +1 -1
  332. package/build/dist/chunks/ACW63WIL.js +20 -0
  333. package/build/dist/chunks/AEL62KCG.js +1 -0
  334. package/build/dist/chunks/{UPMGGK34.js → AFBEZXNV.js} +1 -1
  335. package/build/dist/chunks/{AUOXDNUO.js → AKYF5264.js} +1 -1
  336. package/build/dist/chunks/{HVM2EEXB.js → ALLLYOUG.js} +1 -1
  337. package/build/dist/chunks/APQYLJGS.js +1 -0
  338. package/build/dist/chunks/AW7AXQCZ.js +1 -0
  339. package/build/dist/chunks/{WOEKXQAH.js → AXRL3REN.js} +1 -1
  340. package/build/dist/chunks/{ECWGKLBW.js → BBTPRZ6T.js} +1 -1
  341. package/build/dist/chunks/{ALPYEM7B.js → BND2UFVW.js} +1 -1
  342. package/build/dist/chunks/{GHPREYQK.js → BOVMED7R.js} +1 -1
  343. package/build/dist/chunks/{57JFKIMK.js → BTPXJAUX.js} +1 -1
  344. package/build/dist/chunks/{ZGKVXFM5.js → C7AXJHBT.js} +1 -1
  345. package/build/dist/chunks/{5U7TCKX2.js → CBG5HARQ.js} +1 -1
  346. package/build/dist/chunks/{NA7R6J5N.js → CBLMQ5UU.js} +1 -1
  347. package/build/dist/chunks/CDPSMI3Z.js +1 -0
  348. package/build/dist/chunks/{5N4A5XAW.js → CHXBOXOD.js} +1 -1
  349. package/build/dist/chunks/{2ZUP7ZEV.js → CQEJSCFQ.js} +1 -1
  350. package/build/dist/chunks/{6AAARNZ3.js → DBNTZEAJ.js} +1 -1
  351. package/build/dist/chunks/{IQIWASRD.js → DHUDSOGR.js} +1 -1
  352. package/build/dist/chunks/{L7OQUHM5.js → DJN3JAWB.js} +1 -1
  353. package/build/dist/chunks/{YPM2UITD.js → DL6AEWEM.js} +1 -1
  354. package/build/dist/chunks/{CERNEJ2F.js → DW4V5PUY.js} +1 -1
  355. package/build/dist/chunks/E3RACZUY.js +1 -0
  356. package/build/dist/chunks/{MOPETB64.js → EGYVRQUR.js} +1 -1
  357. package/build/dist/chunks/{IQGY5FW7.js → ER47KGRM.js} +1 -1
  358. package/build/dist/chunks/{ZSQOMSOC.js → FEYAY6OZ.js} +1 -1
  359. package/build/dist/chunks/FIO6VC2J.js +1 -0
  360. package/build/dist/chunks/FJ4S4GHY.js +1 -0
  361. package/build/dist/chunks/{RPNAFUM5.js → FUDAXV5X.js} +1 -1
  362. package/build/dist/chunks/{I6KUORFT.js → GG6Y4OCJ.js} +1 -1
  363. package/build/dist/chunks/{3AXVB23N.js → GGHBFLRC.js} +1 -1
  364. package/build/dist/chunks/{4ALMYJJV.js → GGSAKCND.js} +1 -1
  365. package/build/dist/chunks/GNC6RXLT.js +1 -0
  366. package/build/dist/chunks/{3ESNHZT5.js → GRQYTVNT.js} +1 -1
  367. package/build/dist/chunks/{WVONJOWN.js → GSBIERZD.js} +1 -1
  368. package/build/dist/chunks/H43RNCX2.js +1 -0
  369. package/build/dist/chunks/{NYNJITCM.js → H6T5FXEX.js} +1 -1
  370. package/build/dist/chunks/HHXBUYHO.js +1 -0
  371. package/build/dist/chunks/{64WKYWZV.js → HKEMQBFA.js} +1 -1
  372. package/build/dist/chunks/{4YFVAYKR.js → HM72DH4V.js} +1 -1
  373. package/build/dist/chunks/{XFKVU46U.js → HQUVB7Z5.js} +1 -1
  374. package/build/dist/chunks/HS4DZPYT.js +1 -0
  375. package/build/dist/chunks/{OTIXQZ3X.js → HU7IMNBI.js} +1 -1
  376. package/build/dist/chunks/{ENX72ARB.js → HWX36XJI.js} +1 -1
  377. package/build/dist/chunks/{QRC4ZPDA.js → I26DMNJG.js} +1 -1
  378. package/build/dist/chunks/I55MURSJ.js +1 -0
  379. package/build/dist/chunks/I6PQW2JI.js +1 -0
  380. package/build/dist/chunks/{S3FPF537.js → IMO3GDA5.js} +1 -1
  381. package/build/dist/chunks/{BQICZFLR.js → IOYRL6AY.js} +1 -1
  382. package/build/dist/chunks/IPN6Z4JM.js +1 -0
  383. package/build/dist/chunks/{MKBNLGDD.js → IPRVIKYC.js} +1 -1
  384. package/build/dist/chunks/{EOQYLFXA.js → IVX4R5OL.js} +1 -1
  385. package/build/dist/chunks/IX3GZMTM.js +1 -0
  386. package/build/dist/chunks/JFYBH3DX.js +1 -0
  387. package/build/dist/chunks/{Y7RPSDD2.js → JKD2B6OX.js} +1 -1
  388. package/build/dist/chunks/JQOQMFWD.js +3 -0
  389. package/build/dist/chunks/{PSVOVZH7.js → JUZ5JU6D.js} +5 -5
  390. package/build/dist/chunks/{I4TGMF2C.js → JZS3E66E.js} +1 -1
  391. package/build/dist/chunks/{SSIENQVU.js → K3RDPI5J.js} +1 -1
  392. package/build/dist/chunks/{PADWZX7J.js → K4DHHQBI.js} +1 -1
  393. package/build/dist/chunks/{NB3LYS3G.js → KIFZ5ZSK.js} +1 -1
  394. package/build/dist/chunks/KVFZKPJT.js +1 -0
  395. package/build/dist/chunks/{EYFBVQ46.js → L5BLHY34.js} +1 -1
  396. package/build/dist/chunks/{GVPX5XCL.js → LKXO2BQS.js} +1 -1
  397. package/build/dist/chunks/{JPNYUEQP.js → LKZX4CAA.js} +1 -1
  398. package/build/dist/chunks/{LROVANUR.js → LYMNHO5T.js} +1 -1
  399. package/build/dist/chunks/{QSN6Y2K6.js → M2UXYCKH.js} +1 -1
  400. package/build/dist/chunks/{BNG2IWZL.js → M37654RL.js} +1 -1
  401. package/build/dist/chunks/{YAJYDD6C.js → M6LC6DRE.js} +1 -1
  402. package/build/dist/chunks/{AG67Z3SC.js → MOE3EVAL.js} +1 -1
  403. package/build/dist/chunks/{DVVFT42J.js → MRMR4QHA.js} +1 -1
  404. package/build/dist/chunks/{WWHCEMNB.js → N4Q6GN65.js} +1 -1
  405. package/build/dist/chunks/{S5WICHIS.js → NAZPDRIF.js} +1 -1
  406. package/build/dist/chunks/{HSFOWJ3Z.js → NKZKKCK2.js} +1 -1
  407. package/build/dist/chunks/{BAAXGB4K.js → NOFUKKP5.js} +1 -1
  408. package/build/dist/chunks/{5KUWLUPM.js → NWNYJ26T.js} +1 -1
  409. package/build/dist/chunks/{7UOOIDR3.js → O6ROOKY2.js} +1 -1
  410. package/build/dist/chunks/{KBXU7U6Q.js → O7HCEPQY.js} +1 -1
  411. package/build/dist/chunks/{LDT3QTSY.js → OJ4WJUPP.js} +1 -1
  412. package/build/dist/chunks/{WD37MEMZ.js → OLSP46ZD.js} +1 -1
  413. package/build/dist/chunks/{TPL4U3AQ.js → OOZSE2R7.js} +1 -1
  414. package/build/dist/chunks/OTXSKFUD.js +1 -0
  415. package/build/dist/chunks/{4TQQH7N6.js → P5AJSLZ7.js} +1 -1
  416. package/build/dist/chunks/{BK23XJXE.js → P5PYFK7L.js} +1 -1
  417. package/build/dist/chunks/{A6YQ5H24.js → PACN53TR.js} +1 -1
  418. package/build/dist/chunks/{K72EYD6R.js → PAHXBLCS.js} +1 -1
  419. package/build/dist/chunks/PAY5PD4H.js +1 -0
  420. package/build/dist/chunks/{SGEZIYJW.js → PIIHOXWF.js} +1 -1
  421. package/build/dist/chunks/{SQL6HD5E.js → PK66GCDT.js} +1 -1
  422. package/build/dist/chunks/PNA6UIE5.js +1 -0
  423. package/build/dist/chunks/{6FTYNYGF.js → PSBQWDYI.js} +1 -1
  424. package/build/dist/chunks/{W76QC2AW.js → PV5FDT6O.js} +1 -1
  425. package/build/dist/chunks/{42DQTKEO.js → PXT5YTWU.js} +1 -1
  426. package/build/dist/chunks/{4ISR2U72.js → PZGGE5D3.js} +1 -1
  427. package/build/dist/chunks/{IMRXZ7JB.js → Q42YI3EP.js} +1 -1
  428. package/build/dist/chunks/{F3BSEE52.js → QA2RRIES.js} +1 -1
  429. package/build/dist/chunks/{ZBFKKUNP.js → QA3UHEO3.js} +1 -1
  430. package/build/dist/chunks/{PWH464CJ.js → QBIY6FQN.js} +1 -1
  431. package/build/dist/chunks/QFNT73OF.js +1 -0
  432. package/build/dist/chunks/QHBS3PVU.js +1 -0
  433. package/build/dist/chunks/QQECG3WP.js +1 -0
  434. package/build/dist/chunks/{RVO3QK2B.js → QU5XKRGK.js} +1 -1
  435. package/build/dist/chunks/QW2OPEYJ.js +1 -0
  436. package/build/dist/chunks/{G7XSFUDL.js → QYVREJYC.js} +1 -1
  437. package/build/dist/chunks/{KA7BPBCV.js → ROFPXEQ5.js} +1 -1
  438. package/build/dist/chunks/{5MQ5KSSV.js → RTAHNWHN.js} +1 -1
  439. package/build/dist/chunks/{MDDHG34Y.js → RTGS7RIO.js} +1 -1
  440. package/build/dist/chunks/{3WXK2FUA.js → RUC7KH7A.js} +1 -1
  441. package/build/dist/chunks/{MBTARLZQ.js → RUX3RY7Y.js} +1 -1
  442. package/build/dist/chunks/{3VAJW6TQ.js → RVDUSNWW.js} +1 -1
  443. package/build/dist/chunks/{ET23SES4.js → S5CBVFHY.js} +1 -1
  444. package/build/dist/chunks/{WMNRP3YH.js → SIYUNOLI.js} +1 -1
  445. package/build/dist/chunks/{TNKVRVTH.js → SJJR4ZBZ.js} +1 -1
  446. package/build/dist/chunks/{UFVPMWPJ.js → SMYWWIE6.js} +1 -1
  447. package/build/dist/chunks/{Z4SRGAVL.js → SPJCSEKP.js} +1 -1
  448. package/build/dist/chunks/{YEXUSRIZ.js → T7TFUH5K.js} +1 -1
  449. package/build/dist/chunks/{SKMPKAZI.js → TAEZTP4L.js} +1 -1
  450. package/build/dist/chunks/{E3UBHTJO.js → TEJ7W534.js} +1 -1
  451. package/build/dist/chunks/{AWXJV2YH.js → TFDPEAVZ.js} +1 -1
  452. package/build/dist/chunks/{UOGHQLQX.js → TMVO2DAK.js} +1 -1
  453. package/build/dist/chunks/{QJFXLYZG.js → TPBAFS7K.js} +1 -1
  454. package/build/dist/chunks/{MXW2TP5P.js → TVWMTMEF.js} +1 -1
  455. package/build/dist/chunks/{GRIGSPD4.js → TX2EOIRS.js} +1 -1
  456. package/build/dist/chunks/{Y7PRJOIK.js → U2RMUVVY.js} +1 -1
  457. package/build/dist/chunks/{VV2HEIFI.js → U5PMVP56.js} +1 -1
  458. package/build/dist/chunks/{TBCSZDAF.js → UD2XMNIT.js} +1 -1
  459. package/build/dist/chunks/{F26FK47J.js → UNJJRQIU.js} +1 -1
  460. package/build/dist/chunks/V5JWGWXC.js +1 -0
  461. package/build/dist/chunks/V74F6IDY.js +1 -0
  462. package/build/dist/chunks/VCOTCVKN.js +1 -0
  463. package/build/dist/chunks/{MYFAKCQI.js → VEQBHI6O.js} +1 -1
  464. package/build/dist/chunks/VHV6WQ5F.js +1 -0
  465. package/build/dist/chunks/{7WQEPZJY.js → VNV6ZISN.js} +1 -1
  466. package/build/dist/chunks/{W2OJ57ZO.js → VYAJXLND.js} +1 -1
  467. package/build/dist/chunks/{MDV7GECM.js → VYYSL557.js} +1 -1
  468. package/build/dist/chunks/WCNHZYQQ.js +1 -0
  469. package/build/dist/chunks/{K22EXPWN.js → WIRBCS4W.js} +1 -1
  470. package/build/dist/chunks/{YRXT3HTW.js → WLMWWEP7.js} +1 -1
  471. package/build/dist/chunks/{NDW5DAFL.js → WP6RHXGN.js} +1 -1
  472. package/build/dist/chunks/{PLZKXQ76.js → WTXC3XKW.js} +1 -1
  473. package/build/dist/chunks/{WGL46F3S.js → WU7XIAXB.js} +1 -1
  474. package/build/dist/chunks/{5OKJEGBH.js → WV3A3OUU.js} +1 -1
  475. package/build/dist/chunks/{MGPHD4VV.js → X2P55AC3.js} +1 -1
  476. package/build/dist/chunks/{RNC463IM.js → XBE3B6Y2.js} +1 -1
  477. package/build/dist/chunks/XD6X3KTC.js +1 -0
  478. package/build/dist/chunks/{BIRMUW7Z.js → XKSVTN5X.js} +1 -1
  479. package/build/dist/chunks/XL3LLGIR.js +1 -0
  480. package/build/dist/chunks/XQA5LCL6.js +1 -0
  481. package/build/dist/chunks/{SDHPFXRM.js → XSKFKBDR.js} +1 -1
  482. package/build/dist/chunks/{TJWVY4VO.js → YCZPSMZ5.js} +1 -1
  483. package/build/dist/chunks/{JZXYLHI7.js → YDNTY67T.js} +1 -1
  484. package/build/dist/chunks/{2DUCTO5C.js → YN56C7PN.js} +1 -1
  485. package/build/dist/chunks/{E6RRXNV2.js → YRNXGQJC.js} +1 -1
  486. package/build/dist/chunks/YWRLY5EA.js +1 -0
  487. package/build/dist/chunks/YWSX6IE6.js +1 -0
  488. package/build/dist/chunks/{DP2NIYBP.js → YXTSWRV5.js} +1 -1
  489. package/build/dist/chunks/{MQYOG66Q.js → Z6LZGCVW.js} +1 -1
  490. package/build/dist/chunks/{OFI3Y55L.js → ZQAFFWDK.js} +1 -1
  491. package/build/dist/chunks/{NZXQWDGF.js → ZQWZGH7V.js} +1 -1
  492. package/build/dist/chunks/{TBIVTEP5.js → ZSN4IRI5.js} +1 -1
  493. package/build/dist/chunks/{ZET37EIG.js → ZV5HIQXC.js} +1 -1
  494. package/build/dist/chunks/{VHLINDDS.js → ZXJ24B4L.js} +1 -1
  495. package/package.json +1 -1
  496. package/build/dist/chunks/24CQ2SPB.js +0 -1
  497. package/build/dist/chunks/2OJAOVMG.js +0 -1
  498. package/build/dist/chunks/65EQECL3.js +0 -1
  499. package/build/dist/chunks/6YYCGUCU.js +0 -1
  500. package/build/dist/chunks/EU3OAJU2.js +0 -1
  501. package/build/dist/chunks/H4NYYJ3Z.js +0 -1
  502. package/build/dist/chunks/HTXKERNS.js +0 -1
  503. package/build/dist/chunks/JG27HM4P.js +0 -1
  504. package/build/dist/chunks/L6D26AMO.js +0 -1
  505. package/build/dist/chunks/O6L4BJP4.js +0 -1
  506. package/build/dist/chunks/SUFA2GKR.js +0 -1
  507. package/build/dist/chunks/UP7FBDMJ.js +0 -1
  508. package/build/dist/chunks/YHRUAQQK.js +0 -1
  509. package/build/dist/chunks/ZCOFMGPS.js +0 -1
  510. package/build/dist/chunks/ZCUXM52B.js +0 -1
@@ -1 +1 @@
1
- import{d as h}from"./46547QT3.js";import{a as H}from"./HOEQVPY7.js";import{a as E}from"./MYFAKCQI.js";import{a as m}from"./XSD5NL7J.js";var O="https://heyresearch.xyz/api/v1/scan",T=2500,D=6e4,S=64,L=32768,x=/^0x[0-9a-fA-F]{40}$/,$=/[\p{Cc}\p{Cf}\p{Zl}\p{Zp}]/u;function R(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}var f=class extends m{};function j(e,t){return e===401||e===403?new f(`HEY Research Lab refused access (HTTP ${e}). Ask the Oak operator to check HEY access and allowance.`):(e===400||e===422)&&(/^\/api\/v1\/(?:scan|builder)\?/.test(t)||t.startsWith("/api/agent/research_project?address="))?new f(`HEY Research Lab rejected this token identity on chain 4663 (HTTP ${e}). Check the token contract address.`):new f(`HEY Research Lab rejected the request (HTTP ${e}). Check the project, token address and selectors.`)}var z=/\.(?:localhost|local|localdomain|internal|intranet|lan|home|corp|private|home\.arpa)$/;function P(e){let t=e.toLowerCase().replace(/\.$/,"");return!t||t.startsWith("[")||/^[\d.]+$/.test(t)||!t.includes(".")||t==="localhost"||z.test(t)?!1:/^[a-z0-9-]+(?:\.[a-z0-9-]+)*$/.test(t)&&/[a-z]/.test(t.slice(t.lastIndexOf(".")+1))}function A(e,t=!1){if(typeof e!="string"||e.length>2048||/[\s<>\\]/.test(e)||$.test(e))return!1;try{let r=new URL(e);return r.protocol==="https:"&&!r.username&&!r.password&&(t?r.origin==="https://heyresearch.xyz"&&r.pathname.startsWith("/project/"):P(r.hostname))}catch{return!1}}function I(e){return typeof e=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(e)&&Number.isFinite(Date.parse(e))&&new Date(e).toISOString().slice(0,10)===e&&e<=new Date(Date.now()+864e5).toISOString().slice(0,10)}function Y(e){if(typeof e!="string"||!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?Z$/.test(e))return!1;let t=Date.parse(e);return Number.isFinite(t)&&new Date(t).toISOString().slice(0,19)===e.slice(0,19)&&t<=Date.now()+3e5}function v(e,t,r){if(t!==4663||!x.test(r)||!R(e)||e.chainId!==t||typeof e.contractAddress!="string"||e.contractAddress.toLowerCase()!==r.toLowerCase())return;let a={chainId:4663,contractAddress:e.contractAddress};if(e.found===!1)return Object.freeze({found:!1,...a});if(e.found!==!0||!h(e.status_label,80)||!h(e.status_help,300)||typeof e.verified_builder!="boolean"||typeof e.activity_applies_to_token!="boolean"||typeof e.token_verification!="string"||!/^[A-Z][A-Z_]{0,63}$/.test(e.token_verification)||!A(e.project_link,!0)||!R(e.activity))return;let s=e.activity.last_ship,o=e.activity.last_ship_url;if(s!=null&&!I(s)||o!=null&&!A(o))return;let i=e.as_of;if(!(i!==void 0&&!Y(i))&&s!=null==(o!=null))return Object.freeze({found:!0,...a,status_label:e.status_label,status_help:e.status_help,verified_builder:e.verified_builder,token_verification:e.token_verification,activity_applies_to_token:e.activity_applies_to_token,project_link:e.project_link,...i===void 0?{}:{as_of:i},activity:Object.freeze({last_ship:s??null,last_ship_url:o??null})})}async function N(e,t){if(!e.ok||!e.body)throw new Error("HEY unavailable");let r=e.body.getReader(),a=()=>{r.cancel().catch(()=>{})};t.addEventListener("abort",a,{once:!0}),t.aborted&&a();let s=new TextDecoder("utf-8",{fatal:!0}),o="",i=0;try{for(;;){let{done:c,value:d}=await r.read();if(c)break;if(i+=d.byteLength,i>L)throw new Error("HEY response too large");o+=s.decode(d,{stream:!0})}return JSON.parse(o+s.decode())}finally{t.removeEventListener("abort",a),a()}}function U(e,t=fetch){if(!/^[0-9A-Za-z.+-]{1,64}$/.test(e))throw new Error("Invalid integration version");let r=new Map,a=new Map,s=H();return async(o,i)=>{if(o!==4663||!x.test(i)||/^0x(?:0{40}|e{40})$/i.test(i))return{status:"unavailable"};if(s.blocked())return{status:"unavailable"};let c=`${o}:${i.toLowerCase()}`,d=r.get(c);if(d&&d.expires>Date.now())return d.result;r.delete(c);let _=a.get(c);if(_)return _;if(a.size>=S)return{status:"unavailable"};let b=(async()=>{let p=new AbortController,w;try{let u=new Promise((l,n)=>{w=setTimeout(()=>{s.defer(null),p.abort(),n(new Error("HEY deadline"))},T)}),C=(async()=>{let l=new URL(O);l.searchParams.set("chain",String(o)),l.searchParams.set("token",i);let n;try{n=await t(l,{method:"GET",headers:{"x-hey-integration":`oak-agent-kit/${e}`},signal:p.signal,credentials:"omit",redirect:"error",referrerPolicy:"no-referrer"})}catch(y){if(y instanceof E)n=y.response;else throw s.defer(null),y}if(n.status===429||n.status>=500)throw s.defer(n.headers.get("retry-after")),n.body?.cancel().catch(()=>{}),new Error("HEY unavailable");if(n.status>=400&&n.status<500)throw n.body?.cancel().catch(()=>{}),j(n.status,"/api/v1/scan?");let k=v(await N(n,p.signal),o,i);if(!k)throw new Error("Invalid HEY response");return Object.freeze({status:"ok",card:k})})(),g=await Promise.race([C,u]);for(let[l,n]of r)n.expires<=Date.now()&&r.delete(l);return r.size>=S&&r.delete(r.keys().next().value),r.set(c,{expires:Date.now()+D,result:g}),g}catch(u){if(u instanceof f)throw u;return{status:"unavailable"}}finally{clearTimeout(w)}})();a.set(c,b);try{return await b}finally{a.delete(c)}}}export{j as a,v as b,U as c};
1
+ import{d as h}from"./46547QT3.js";import{a as H}from"./HOEQVPY7.js";import{a as E}from"./VEQBHI6O.js";import{a as m}from"./XSD5NL7J.js";var O="https://heyresearch.xyz/api/v1/scan",T=2500,D=6e4,S=64,L=32768,x=/^0x[0-9a-fA-F]{40}$/,$=/[\p{Cc}\p{Cf}\p{Zl}\p{Zp}]/u;function R(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}var f=class extends m{};function j(e,t){return e===401||e===403?new f(`HEY Research Lab refused access (HTTP ${e}). Ask the Oak operator to check HEY access and allowance.`):(e===400||e===422)&&(/^\/api\/v1\/(?:scan|builder)\?/.test(t)||t.startsWith("/api/agent/research_project?address="))?new f(`HEY Research Lab rejected this token identity on chain 4663 (HTTP ${e}). Check the token contract address.`):new f(`HEY Research Lab rejected the request (HTTP ${e}). Check the project, token address and selectors.`)}var z=/\.(?:localhost|local|localdomain|internal|intranet|lan|home|corp|private|home\.arpa)$/;function P(e){let t=e.toLowerCase().replace(/\.$/,"");return!t||t.startsWith("[")||/^[\d.]+$/.test(t)||!t.includes(".")||t==="localhost"||z.test(t)?!1:/^[a-z0-9-]+(?:\.[a-z0-9-]+)*$/.test(t)&&/[a-z]/.test(t.slice(t.lastIndexOf(".")+1))}function A(e,t=!1){if(typeof e!="string"||e.length>2048||/[\s<>\\]/.test(e)||$.test(e))return!1;try{let r=new URL(e);return r.protocol==="https:"&&!r.username&&!r.password&&(t?r.origin==="https://heyresearch.xyz"&&r.pathname.startsWith("/project/"):P(r.hostname))}catch{return!1}}function I(e){return typeof e=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(e)&&Number.isFinite(Date.parse(e))&&new Date(e).toISOString().slice(0,10)===e&&e<=new Date(Date.now()+864e5).toISOString().slice(0,10)}function Y(e){if(typeof e!="string"||!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?Z$/.test(e))return!1;let t=Date.parse(e);return Number.isFinite(t)&&new Date(t).toISOString().slice(0,19)===e.slice(0,19)&&t<=Date.now()+3e5}function v(e,t,r){if(t!==4663||!x.test(r)||!R(e)||e.chainId!==t||typeof e.contractAddress!="string"||e.contractAddress.toLowerCase()!==r.toLowerCase())return;let a={chainId:4663,contractAddress:e.contractAddress};if(e.found===!1)return Object.freeze({found:!1,...a});if(e.found!==!0||!h(e.status_label,80)||!h(e.status_help,300)||typeof e.verified_builder!="boolean"||typeof e.activity_applies_to_token!="boolean"||typeof e.token_verification!="string"||!/^[A-Z][A-Z_]{0,63}$/.test(e.token_verification)||!A(e.project_link,!0)||!R(e.activity))return;let s=e.activity.last_ship,o=e.activity.last_ship_url;if(s!=null&&!I(s)||o!=null&&!A(o))return;let i=e.as_of;if(!(i!==void 0&&!Y(i))&&s!=null==(o!=null))return Object.freeze({found:!0,...a,status_label:e.status_label,status_help:e.status_help,verified_builder:e.verified_builder,token_verification:e.token_verification,activity_applies_to_token:e.activity_applies_to_token,project_link:e.project_link,...i===void 0?{}:{as_of:i},activity:Object.freeze({last_ship:s??null,last_ship_url:o??null})})}async function N(e,t){if(!e.ok||!e.body)throw new Error("HEY unavailable");let r=e.body.getReader(),a=()=>{r.cancel().catch(()=>{})};t.addEventListener("abort",a,{once:!0}),t.aborted&&a();let s=new TextDecoder("utf-8",{fatal:!0}),o="",i=0;try{for(;;){let{done:c,value:d}=await r.read();if(c)break;if(i+=d.byteLength,i>L)throw new Error("HEY response too large");o+=s.decode(d,{stream:!0})}return JSON.parse(o+s.decode())}finally{t.removeEventListener("abort",a),a()}}function U(e,t=fetch){if(!/^[0-9A-Za-z.+-]{1,64}$/.test(e))throw new Error("Invalid integration version");let r=new Map,a=new Map,s=H();return async(o,i)=>{if(o!==4663||!x.test(i)||/^0x(?:0{40}|e{40})$/i.test(i))return{status:"unavailable"};if(s.blocked())return{status:"unavailable"};let c=`${o}:${i.toLowerCase()}`,d=r.get(c);if(d&&d.expires>Date.now())return d.result;r.delete(c);let _=a.get(c);if(_)return _;if(a.size>=S)return{status:"unavailable"};let b=(async()=>{let p=new AbortController,w;try{let u=new Promise((l,n)=>{w=setTimeout(()=>{s.defer(null),p.abort(),n(new Error("HEY deadline"))},T)}),C=(async()=>{let l=new URL(O);l.searchParams.set("chain",String(o)),l.searchParams.set("token",i);let n;try{n=await t(l,{method:"GET",headers:{"x-hey-integration":`oak-agent-kit/${e}`},signal:p.signal,credentials:"omit",redirect:"error",referrerPolicy:"no-referrer"})}catch(y){if(y instanceof E)n=y.response;else throw s.defer(null),y}if(n.status===429||n.status>=500)throw s.defer(n.headers.get("retry-after")),n.body?.cancel().catch(()=>{}),new Error("HEY unavailable");if(n.status>=400&&n.status<500)throw n.body?.cancel().catch(()=>{}),j(n.status,"/api/v1/scan?");let k=v(await N(n,p.signal),o,i);if(!k)throw new Error("Invalid HEY response");return Object.freeze({status:"ok",card:k})})(),g=await Promise.race([C,u]);for(let[l,n]of r)n.expires<=Date.now()&&r.delete(l);return r.size>=S&&r.delete(r.keys().next().value),r.set(c,{expires:Date.now()+D,result:g}),g}catch(u){if(u instanceof f)throw u;return{status:"unavailable"}}finally{clearTimeout(w)}})();a.set(c,b);try{return await b}finally{a.delete(c)}}}export{j as a,v as b,U as c};
@@ -1,4 +1,4 @@
1
- import{b as k,f as P,g as H,i as ie,j as $,k as ue,l as ce,m as u,n as S,o as I,p as j,q as le}from"./KBKK7UNY.js";import{Q as se,R as oe,S as re,T as L,U as ae,W as de,b as s,c as T,d as y,e as z,f as K,g as q,m as Y,n as Z,o as Q,p as V,q as R,r as D,s as v,t as J,u as W,v as X,w as ee,x as ne,y as te}from"./PSVOVZH7.js";import{a as w}from"./XSD5NL7J.js";var M=6,me=/^[A-Za-z0-9._-]{1,12}$/;function ge(e){return me.test(e)?e:"the stock token"}function F(e){return e instanceof w?e.message:"unexpected error"}function h(e,n=M){return $({redeemOutBase:e,amountBase:0n,decimals:n})}function fe(e,n,a){let d={amount_usd:u(n),gross_usd:u(e.grossUsd),horizon:a,costs_usd:u(e.costsUsd),net_usd:u(e.netUsd)};return e.suggestUsd===void 0?s(oe,d):s(se,{...d,suggest_usd:`$${e.suggestUsd}`})}function pe(e){return`${Number.isInteger(e)?e.toString():e.toFixed(2)} USDG`}function be(e,n,a,d){let f={id:"A",project:"layerbank"},o=h(n);if(!Number.isFinite(e.rateBasePct)||e.rateBasePct<0)return d.push("LayerBank rate was malformed"),{option:{...f,offered:!1,reason:"cant_check"},block:s(R,{})};if(!e.open)return{option:{...f,offered:!1,reason:"closed"},block:s(v,{})};if(e.capRoomBase<n)return{option:{...f,offered:!1,reason:"no_room"},block:s(J,{cap_room_usd:u(h(e.capRoomBase)),amount_usd:u(o)})};let r=e.bonus,g=r!==void 0&&Number.isFinite(r.ratePct)&&r.ratePct>0&&r.endsAt>a,i=e.rateBasePct+(g?r.ratePct:0),b=P(e.gasInUsd),c=P(e.gasOutUsd),_=b.usd+c.usd,m=b.estimatedHigh||c.estimatedHigh,U=ie({amountUsd:o,ratePct:i,days:30}),l=H({gross:U,costs:_,amount:o}),p=s(Y,{lb_total_rate:S(i),lb_base_rate:S(e.rateBasePct),bonus_clause:g?s(Z,{lb_bonus_rate:S(r.ratePct),bonus_end:I(r.endsAt)}):"",lb_cash_usd:u(h(e.cashUsdgBase)),lb_gas_in_usd:u(b.usd),lb_gas_out_usd:u(c.usd)});return m&&(p+=`
1
+ import{b as k,f as P,g as H,i as ie,j as $,k as ue,l as ce,m as u,n as S,o as I,p as j,q as le}from"./KBKK7UNY.js";import{Q as se,R as oe,S as re,T as L,U as ae,W as de,b as s,c as T,d as y,e as z,f as K,g as q,m as Y,n as Z,o as Q,p as V,q as R,r as D,s as v,t as J,u as W,v as X,w as ee,x as ne,y as te}from"./JUZ5JU6D.js";import{a as w}from"./XSD5NL7J.js";var M=6,me=/^[A-Za-z0-9._-]{1,12}$/;function ge(e){return me.test(e)?e:"the stock token"}function F(e){return e instanceof w?e.message:"unexpected error"}function h(e,n=M){return $({redeemOutBase:e,amountBase:0n,decimals:n})}function fe(e,n,a){let d={amount_usd:u(n),gross_usd:u(e.grossUsd),horizon:a,costs_usd:u(e.costsUsd),net_usd:u(e.netUsd)};return e.suggestUsd===void 0?s(oe,d):s(se,{...d,suggest_usd:`$${e.suggestUsd}`})}function pe(e){return`${Number.isInteger(e)?e.toString():e.toFixed(2)} USDG`}function be(e,n,a,d){let f={id:"A",project:"layerbank"},o=h(n);if(!Number.isFinite(e.rateBasePct)||e.rateBasePct<0)return d.push("LayerBank rate was malformed"),{option:{...f,offered:!1,reason:"cant_check"},block:s(R,{})};if(!e.open)return{option:{...f,offered:!1,reason:"closed"},block:s(v,{})};if(e.capRoomBase<n)return{option:{...f,offered:!1,reason:"no_room"},block:s(J,{cap_room_usd:u(h(e.capRoomBase)),amount_usd:u(o)})};let r=e.bonus,g=r!==void 0&&Number.isFinite(r.ratePct)&&r.ratePct>0&&r.endsAt>a,i=e.rateBasePct+(g?r.ratePct:0),b=P(e.gasInUsd),c=P(e.gasOutUsd),_=b.usd+c.usd,m=b.estimatedHigh||c.estimatedHigh,U=ie({amountUsd:o,ratePct:i,days:30}),l=H({gross:U,costs:_,amount:o}),p=s(Y,{lb_total_rate:S(i),lb_base_rate:S(e.rateBasePct),bonus_clause:g?s(Z,{lb_bonus_rate:S(r.ratePct),bonus_end:I(r.endsAt)}):"",lb_cash_usd:u(h(e.cashUsdgBase)),lb_gas_in_usd:u(b.usd),lb_gas_out_usd:u(c.usd)});return m&&(p+=`
2
2
  ${s(L,{})}`),l.tooSmall&&(p+=`
3
3
  ${fe(l,o,j(30))}`),{option:{...f,offered:!0,amountUsd:o,ratePct:i,grossUsd:U,costsUsd:_,netUsd:l.netUsd,tooSmall:l.tooSmall,...l.suggestUsd===void 0?{}:{suggestUsd:l.suggestUsd},estimatedHigh:m},block:p,gross30d:U,horizonEndsAt:a+30*86400}}function Ae(e,n,a){return e.filter(o=>o.kind==="stable"&&!o.matured&&o.endsAt>n).filter(o=>o.unitDecimals===M&&Number.isFinite(o.ratePct)?!0:(a.push(`Pendle term ${o.market} skipped: its USDG figures were not in the expected form`),!1)).sort((o,r)=>r.liquidityUsd-o.liquidityUsd||o.endsAt-r.endsAt)[0]}async function Ue(e,n,a,d,f){let o={id:"B",project:"pendle"};if(!n)return{option:{...o,offered:!1,reason:"no_term"},block:s(V,{})};let r={option:{...o,offered:!1,reason:"cant_check"},block:s(D,{})},g=h(a),i;try{i=await e.pendleQuoteCosts(n.market,a)}catch(G){return f.push(`Pendle quote failed: ${F(G)}`),r}if(typeof i.ptOutBase!="bigint"||i.ptOutBase<=0n)return f.push("Pendle quote was malformed"),r;let b=i.ptOutBase,c=$({redeemOutBase:b,amountBase:a,decimals:M}),_=P(n.gasInUsd),m=P(n.gasOutUsd),U=Number.isFinite(i.feeUsd)&&i.feeUsd>0?i.feeUsd:0,l=_.usd+m.usd,p=_.estimatedHigh||m.estimatedHigh,E=ce(d,n.endsAt),O=H({gross:c,costs:l,amount:g}),N=I(n.endsAt),A=s(Q,{pendle_end_date:N,pendle_rate:S(n.ratePct),pendle_payout_usd:u(h(b)),pendle_unit_usd:u(g),pendle_cost_in_usd:u(U+_.usd),pendle_gas_out_usd:u(m.usd)});return p&&(A+=`
4
4
  ${s(L,{})}`),O.tooSmall&&(A+=`
@@ -1 +1 @@
1
- import{i as l}from"./S2TAJHHK.js";import{a}from"./XSD5NL7J.js";var m=4295128739n,h=1461446703485210103287273052203988822378723970342n,d=-887272,$=887272;function I(t){if(t<2n)return t;let n=t,i=n+1n>>1n;for(;i<n;)n=i,i=n+t/n>>1n;return n}function w(t,n){if(typeof t!="string"||!/^\d+(?:\.\d+)?$/.test(t.trim()))throw new a(`${n} must be a positive decimal string such as "3000.5".`);let[i,e=""]=t.trim().split("."),r=BigInt(`${i}${e}`);if(r<=0n)throw new a(`${n} must be greater than zero.`);return{n:r,d:10n**BigInt(e.length)}}function _(t,n,i){let{n:e,d:r}=w(t,"initialPrice"),s=e*10n**BigInt(i),o=r*10n**BigInt(n),c=I((s<<192n)/o);return b(c)}function b(t){if(t<m||t>=h)throw new a("Initial price is outside the range Uniswap can represent.");return t}function S(t){b(t);let n=d,i=$;for(;n<i;){let e=Math.ceil((n+i)/2);l(e)<=t?n=e:i=e-1}return n}function f(t,n,i){let r=(t*t*10n**BigInt(n+18)/((1n<<192n)*10n**BigInt(i))).toString().padStart(19,"0"),s=r.slice(0,-18),o=r.slice(-18).replace(/0+$/,"");return o?`${s}.${o}`:s}function x(t,n){let i=t*t,e=n*n;return(i>e?i-e:e-i)*10000n/e}var P=500n;function R(t,n,i,e,r){if(n.length===0)return"No other pool for this pair was found, so the starting price could not be checked against a market. Anyone can trade against a wrong price immediately.";let s=[...n].sort((p,u)=>p.sqrtPriceX96<u.sqrtPriceX96?-1:p.sqrtPriceX96>u.sqrtPriceX96?1:0),o=s[Math.floor(s.length/2)],c=x(t,o.sqrtPriceX96),g=`${f(o.sqrtPriceX96,e,r)} (${o.label})`;if(c>P&&!i)throw new a(`Initial price ${f(t,e,r)} is ${c} bps from the existing market price ${g}. A mispriced new pool is arbitraged against your deposit. Fix the price, or pass acceptPriceDeviation:true if this is intentional.`);return`Existing market price ${g}; starting price deviates ${c} bps.`}function T(t,n){return typeof t=="string"&&/^[A-Za-z0-9][A-Za-z0-9.$_-]{0,15}$/.test(t)?t:`${n.slice(0,6)}\u2026${n.slice(-4)}`}export{m as a,h as b,_ as c,b as d,S as e,f,x as g,P as h,R as i,T as j};
1
+ import{i as l}from"./7KWZ5QJU.js";import{a}from"./XSD5NL7J.js";var m=4295128739n,h=1461446703485210103287273052203988822378723970342n,d=-887272,$=887272;function I(t){if(t<2n)return t;let n=t,i=n+1n>>1n;for(;i<n;)n=i,i=n+t/n>>1n;return n}function w(t,n){if(typeof t!="string"||!/^\d+(?:\.\d+)?$/.test(t.trim()))throw new a(`${n} must be a positive decimal string such as "3000.5".`);let[i,e=""]=t.trim().split("."),r=BigInt(`${i}${e}`);if(r<=0n)throw new a(`${n} must be greater than zero.`);return{n:r,d:10n**BigInt(e.length)}}function _(t,n,i){let{n:e,d:r}=w(t,"initialPrice"),s=e*10n**BigInt(i),o=r*10n**BigInt(n),c=I((s<<192n)/o);return b(c)}function b(t){if(t<m||t>=h)throw new a("Initial price is outside the range Uniswap can represent.");return t}function S(t){b(t);let n=d,i=$;for(;n<i;){let e=Math.ceil((n+i)/2);l(e)<=t?n=e:i=e-1}return n}function f(t,n,i){let r=(t*t*10n**BigInt(n+18)/((1n<<192n)*10n**BigInt(i))).toString().padStart(19,"0"),s=r.slice(0,-18),o=r.slice(-18).replace(/0+$/,"");return o?`${s}.${o}`:s}function x(t,n){let i=t*t,e=n*n;return(i>e?i-e:e-i)*10000n/e}var P=500n;function R(t,n,i,e,r){if(n.length===0)return"No other pool for this pair was found, so the starting price could not be checked against a market. Anyone can trade against a wrong price immediately.";let s=[...n].sort((p,u)=>p.sqrtPriceX96<u.sqrtPriceX96?-1:p.sqrtPriceX96>u.sqrtPriceX96?1:0),o=s[Math.floor(s.length/2)],c=x(t,o.sqrtPriceX96),g=`${f(o.sqrtPriceX96,e,r)} (${o.label})`;if(c>P&&!i)throw new a(`Initial price ${f(t,e,r)} is ${c} bps from the existing market price ${g}. A mispriced new pool is arbitraged against your deposit. Fix the price, or pass acceptPriceDeviation:true if this is intentional.`);return`Existing market price ${g}; starting price deviates ${c} bps.`}function T(t,n){return typeof t=="string"&&/^[A-Za-z0-9][A-Za-z0-9.$_-]{0,15}$/.test(t)?t:`${n.slice(0,6)}\u2026${n.slice(-4)}`}export{m as a,h as b,_ as c,b as d,S as e,f,x as g,P as h,R as i,T as j};
@@ -0,0 +1 @@
1
+ var e=1;export{e as a};
@@ -0,0 +1 @@
1
+ import{b as me,c as De}from"./QA3UHEO3.js";import{c as Te,d as a,r as Ee}from"./64GOINYS.js";import{o as pe}from"./BOVMED7R.js";import{a as M}from"./QHBS3PVU.js";import{a as xe}from"./43LI5NKJ.js";import{a as te}from"./66F5ZH34.js";import{c as G,j as ve}from"./NWNYJ26T.js";import{b as ke}from"./IX3GZMTM.js";import{a as R,i as Ce}from"./FWD4L3CJ.js";import{a as t}from"./XSD5NL7J.js";import{decodeFunctionData as Se,erc20Abi as Oe}from"viem";var Fe="https://api.relay.link",q="0x0000000000000000000000000000000000000000",Le=60,Pe=30,n=Ce[R].relay.depository.address.toLowerCase(),ne="0x59916da825d2d2ec1bf878d71c88826f6633ecca",ie=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}]]),nt=Object.freeze(["robinhood",...Array.from(ie.values(),e=>e.chainId)]);function ot(e){return e===R?"robinhood":ie.get(e)?.chainId}function it(e){return ie.get(e)?.depository}function j(e){return ve(e,"Provide a token or wallet address.")}function I(e){let o=j(e);return o===M?q:o}function f(e,o){return j(e)===j(o)}function l(e){if(typeof e!="string")throw new t("Provide a decimal base-unit amount string.");return ke(e),e}function oe(e){let o=l(e);if(BigInt(o)<=0n)throw new t("Provide a positive base-unit amount.");return o}function ze(e){if(typeof e!="number"||!Number.isSafeInteger(e)||e<=0)throw new t("Provide a positive integer origin chain ID.");return e}function Ne(e,o){if(typeof e!="number"||!Number.isSafeInteger(e)||e<=0)throw new t(`${o} is missing or invalid.`);return e}async function V(e,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 t("Relay quote token metadata does not match the requested chain and address.");if(p===q){if(r.decimals!==18)throw new t("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 e.clientFor(i).readContract({address:p,abi:Oe,functionName:"decimals"}),w=typeof d=="bigint"?Number(d):d;if(typeof w!="number"||!Number.isInteger(w)||w<0||w>255)throw new t("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(e,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 t("The swap prerequisite token must be on the origin chain.");let w=await V(e,o,d,p,I(d.address)),F=r===q?M:r;if(f(w.address,F))throw new t("The swap prerequisite must use a different input token.");let he=oe(m.amountIn),y=m.slippageBps;if(y!==void 0&&(typeof y!="number"||!Number.isInteger(y)||y<0||y>1e4))throw new t("Provide swap slippage in basis points from 0 to 10000.");let D=await e.quoteSwap({from:w.address,to:F,amountIn:he,...y===void 0?{}:{slippageBps:y}},i);if(BigInt(l(D.expiresAt))<=BigInt(Math.floor(Date.now()/1e3)))throw new t("The swap prerequisite quote expired. Request a fresh quote.");if(BigInt(l(D.minAmountOut))<BigInt(g))throw new t("The swap prerequisite minimum cannot cover the bridge amount.");let C=await e.buildSwap(D.quoteId,i);if(!("txs"in C)||!C.txs.length)throw new t("The swap prerequisite must return unsigned transactions.");if(C.txs.some(S=>S.chainId!==p))throw new t("The injected swap coordinator does not support this origin chain.");return C.txs.map(S=>e.unsignedTx(S))}async function Ue(e,o,c){xe(c);let i=ze(o.originChainId);if(i===R)throw new t("Inbound bridging requires an origin chain other than 4663.");let p=ie.get(i);if(!p)throw new t("Relay inbound does not support this origin chain.");if(o.destinationChainId!==void 0&&o.destinationChainId!==R)throw new t("Inbound bridge destination must be chain 4663.");let r=I(o.originCurrency??M),g=I(o.destinationCurrency??M),m=j(o.recipient??c),d=oe(o.amount),w=o.minAmountOut===void 0?void 0:l(o.minAmountOut),F=o.slippageBps===void 0?me:o.slippageBps;if(pe("0",F),await e.clientFor(i).getChainId()!==i)throw new t("The RPC chain does not match the inbound origin chain.");let y=new Map,D=await Ke(e,y,o,c,i,r,d),C,S=process.env.OAK_RELAY_API_KEY?.trim();if(!S)throw new t("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 e.http(`${Fe}/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",includeProtocolData:!0,...r===q?{}:{explicitDeposit:!0}})});if(!s.ok)throw new Error("Relay HTTP failure.");C=await s.json()}catch{throw new t("Relay quote request failed. Please try again.")}let b=a(C);if(typeof b.requestId!="string"||!/^0x[0-9a-fA-F]{64}$/.test(b.requestId))throw new t("Relay returned an invalid request ID.");let P=b.requestId,ye=`/intents/status/v3?requestId=${P}`,L=a(b.details);if(!f(L.sender,c)||!f(L.recipient,m))throw new t("Relay quote sender or recipient does not match the request.");let le=a(L.currencyIn),re=a(L.currencyOut),N=await V(e,y,le.currency,i,r),O=await V(e,y,re.currency,R,g);if(l(le.amount)!==d)throw new t("Relay quote input amount does not match the request.");let _=oe(re.amount),k=oe(re.minimumAmount);if(BigInt(k)>BigInt(_))throw new t("Relay quote minimum output exceeds the expected output.");if(w!==void 0){if(k!==w)throw new t("Relay order minimum must exactly match minAmountOut. Request a new quote.")}else{let s=pe(_,F);if(BigInt(k)<BigInt(s))throw De(_,k)}let fe=a(a(b.fees).relayer),we=a(fe.currency),Q=await V(e,y,we,i,I(we.address)),Ie={token:Q,amount:l(fe.amount)},ge=a(L.refundCurrency),_e=a(ge.currency),z=await V(e,y,_e,i,r),se=l(ge.amount),K=a(a(b.protocol).v2);if(typeof K.orderId!="string"||!/^0x[0-9a-fA-F]{64}$/.test(K.orderId))throw new t("Relay returned an invalid order ID.");let W=K.orderId.toLowerCase(),J=a(K.paymentDetails),$=j(J.depository);if(J.chainId!==p.chainId||$!==p.depository||I(J.currency)!==r||l(J.amount)!==d)throw new t("Relay payment details do not match the origin chain depository and input.");let U=a(K.orderData),v=a(U.output);if(v.chainId!=="robinhood"||!Array.isArray(v.calls)||v.calls.length!==0||!Array.isArray(v.payments)||v.payments.length!==1)throw new t("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)!==k||l(X.expectedAmount)!==_)throw new t("Relay order output payment does not match the quoted recipient and amounts.");let ae=Ne(v.deadline,"Relay order output deadline");if(!Array.isArray(U.inputs)||!U.inputs.length)throw new t("Relay order has no inputs.");let Z=[],de=[];for(let s of U.inputs){let u=a(s),T=a(u.payment);if(T.chainId!==p.chainId||I(T.currency)!==r||l(T.amount)!==d||!Array.isArray(u.refunds)||!u.refunds.length)throw new t("Relay order input does not match the quoted input.");for(let E of u.refunds){let h=a(E);if(!f(h.recipient,c))throw new t("Relay refund recipient does not match the agent wallet. Request a new quote.");if(Z.push(Ne(h.deadline,"Relay order refund deadline")),de.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 t("Relay order refund terms do not match the sender or recipient.")}}let be=Math.min(ae,...Z),Y=0,Ae=()=>{let s=Math.floor(Date.now()/1e3),u=Y||s+Le;if(be-s<=Pe)throw new t("Relay order deadline is expired or too soon to sign safely. Request a new quote.");if(Y=Math.min(u,be-Pe),Y<=s)throw new t("Relay quote expired before signing. Request a new quote.")};if(Ae(),!Array.isArray(b.steps)||!b.steps.length)throw new t("Relay returned no origin transactions.");let x=[];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 t("Relay returned an unsupported origin step.");for(let T of u.items){let E=a(T),h=a(E.data),ce=a(E.check);if(E.status!=="incomplete"||h.chainId!==i||!f(h.from,c))throw new t("Relay transaction does not match the origin chain and sender.");if(ce.method!=="GET"||ce.endpoint!==ye)throw new t("Relay status endpoint does not match the request ID.");x.push(e.unsignedTx({to:j(h.to),data:h.data,value:l(h.value),chainId:i,description:`Relay inbound deposit for request ${P}; destination chain 4663.`}))}}if(!x.length)throw new t("Relay returned no origin transactions.");if(r===q&&x.length!==1)throw new t("Relay native deposit must be a single depositNative transaction.");if(r!==q&&x.length>2)throw new t("Relay ERC-20 deposit allows at most one exact-amount approval before depositErc20.");for(let s of x.slice(0,-1)){if(!s.data.toLowerCase().startsWith("0x095ea7b3"))throw new t("Relay returned an unsupported prerequisite transaction.");let u=Se({abi:Oe,data:s.data});if(u.functionName!=="approve")throw new t("Relay returned an invalid approval.");let[T,E]=u.args;if(r===q||!f(s.to,r)||!f(T,$)||E!==BigInt(d)||s.value!=="0")throw new t("Relay approval must authorize the exact input amount for the origin depository.");s.description=`Approve exactly ${e.formatAmount(d,N.decimals)} ${N.symbol} (${d} base units of ${r}) for ${$} on chain ${i}.`}let B=x[x.length-1],H=r===q,ee=H?"depositNative":"depositErc20",Re=H?"depositNative(address,bytes32)":"depositErc20(address,address,uint256,bytes32)";if(!f(B.to,$)||B.value!==(H?d:"0")||!(H?/^0x[0-9a-fA-F]{136}$/:/^0x[0-9a-fA-F]{264}$/).test(B.data))throw new t(`Relay deposit transaction does not target the origin depository with ${ee} calldata.`);let A;try{A=Se({abi:Te,data:B.data})}catch{throw new t(`Relay deposit transaction must call ${Re}.`)}if(A.functionName!==ee)throw new t(`Relay deposit transaction must call ${Re}.`);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 t("Relay depositErc20 token or amount does not match the quoted input.");if(!f(Be,c)||Me.toLowerCase()!==W)throw new t(`Relay ${ee} depositor or orderId does not match the wallet and quoted protocol.v2.orderId.`);B.description=`Relay inbound ${ee} for order ${W} (request ${P}); destination chain 4663.`;let ue=H?[]:await Ee(e,r,$,d,i,c);for(let[s,u]of ue.entries())u.description=ue.length===2&&s===0?`Reset the existing ${N.symbol} allowance for ${$} on chain ${i} to zero.`:`Approve exactly ${e.formatAmount(d,N.decimals)} ${N.symbol} (${d} base units of ${r}) for ${$} on chain ${i}.`;let $e=[...D,...ue,B],qe=await e.preview($e,c);Ae();let je=qe.changes.map(s=>{let u=s.amount.startsWith("-");return`${u?"-":""}${e.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:qe,requestId:P,orderId:W,orderData:U,depository:$,originChainId:i,destinationChainId:R,recipient:m,amountIn:{token:N,amount:d},amountOut:{token:O,amount:_},minAmountOut:k,relayerFee:Ie,refundCurrency:{token:z,amount:se,minimumAmounts:de},orderDeadline:String(ae),refundDeadlines:Z.map(String),expiresAt:String(Y),status:"pending",statusEndpoint:ye,summary:`${D.length?"Swap prerequisite first, then ":""}Relay inbound from chain ${i} to chain 4663 for ${m}; expected ${e.formatAmount(_,O.decimals)} ${O.symbol}, minimum ${e.formatAmount(k,O.decimals)} ${O.symbol} (${O.address}). Quoted relay fee ${e.formatAmount(Ie.amount,Q.decimals)} ${Q.symbol} (${Q.address}, chain ${i}); output is net of quoted fees. Order ${W} (request ${P}); output deadline ${ae}, refund deadlines ${Z.join(", ")}, quote expires ${Y}. Refund terms: details.refundCurrency quotes ${e.formatAmount(se,z.decimals)} ${z.symbol} (${se} base units) on chain ${z.chainId} (${z.address}), but protocol.v2 order refund floor is ${de.join(", ")} base units. ${je.join("; ")}. Unsigned origin transactions only; destination fulfillment remains pending. Track with relay_status; timeout or refund is not fulfillment.`}}var rt=e=>({tools:[{name:"relay_bridge_in",inputSchema:{type:"object",additionalProperties:!1,required:["originChainId","amount"],properties:{originChainId:{type:"integer",minimum:1},destinationChainId:{const:R},originCurrency:G,destinationCurrency:G,amount:te(),minAmountOut:te(),slippageBps:{type:"integer",minimum:0,maximum:9999,default:me},recipient:G,swap:{type:"object",additionalProperties:!1,required:["from","amountIn"],properties:{from:{type:"object",additionalProperties:!1,required:["address","chainId","symbol","decimals"],properties:{address:G,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(e,o,c)}catch(i){throw new t(e.plainError(i))}}}]});export{nt as a,ot as b,it as c,rt as d};
@@ -1 +1 @@
1
- import{a as j}from"./NCQFWPAW.js";import{a as v}from"./MFCPL6LF.js";import{K as A}from"./IQIWASRD.js";import{c as k}from"./65EQECL3.js";import{a as O}from"./PBQSJSZO.js";import{a as x}from"./5ZLOCQA4.js";import{d as F,g as M,i as q,m as $}from"./5KUWLUPM.js";import{a as y}from"./FWD4L3CJ.js";import{a}from"./XSD5NL7J.js";import{encodeFunctionData as G,erc20Abi as R,getAddress as g,zeroAddress as z}from"viem";var D={genesis:g("0x575b7B7c97Ef3E21C82DAeB427899d583e1E913f"),bond:g("0xff32a969A0c567129eECD926D04657728E1980C1"),inverse:g("0x92166e94Eea5B7799b761653881692f881dFC4C9"),treasury:g("0x04822Ea321A0DEE6F40656172F29312104855d66"),pteam:g("0x650F58079dAa17ee28928c2F92d22291d038B2B0"),rwa:g("0x99B6eE6eDe47d9a8a9bfd03F728a99B789df1961"),premium:g("0x346e1a31171A0f7aC73909010b5435768d3B5462"),tax:g("0x086C58400b8708Ef993f256E12e752dcF0AC918e")},H=g("0x59F95461E68e0c77605299791E1449f175165B54"),_={genesis:["purchase","finalize","refund","claim"],bond:["deposit","redeem"],inverse:["swap"],treasury:["rebalanceToMorpho","rebalanceFromMorpho","mintNet","spendUsdg"],pteam:["exercise"],rwa:["redeem","depositInventory","pokeHwm","setDiscount","setInventoryMax","setHalt","setMenu","skim"],premium:["execute"],tax:["convert"]},V={genesis:["wired","finalized","finalizeTime","saleStart","saleDeadline","raisedRaw","totalRaised","registryLength"],bond:["wired","enabled","startTime","marketCount"],inverse:["active","price","capacityRemaining","spreadBps"],treasury:["wired","rfv","backingPerToken","liquidUsdg","morphoAssets","polRfv","morphoCapBps","morphoVault","canonicalPair"],pteam:["wired","holder","vestedFraction","exercisableNow","exercised","strikeWad","capBps","circulatingSupply","excludedFromFloat"],rwa:["manager","halted","inventory","inventoryMax","owedNet","bHwm","deskDiscountBps","VEST","MAX_DISCOUNT_BPS","INVENTORY_HARD_CAP","menu","routerSource","sleeve"],premium:["active","clipSize","lastExecuteAt","premiumThresholdWad","router","pairContract"],tax:["wired","pendingNet","teamBps","treasuryBps","teamWallet","router","pairContract"]},T=h=>JSON.parse(JSON.stringify(h,(P,E)=>typeof E=="bigint"?E.toString():E));function N(h){return q(h,"Provide a checksummed address.",F)}var ae=h=>{async function P(t){if(typeof t!="string"||!Object.hasOwn(D,t))throw new a("Choose a published NetNet financial product.");let c=t,e=D[c],r=j[c],u=h.clientFor(y);if(await u.getChainId()!==y)throw new a("NetNet requires chain 4663.");let n=await u.getBlock(),o=(w,I=[])=>u.readContract({address:e,abi:r,functionName:w,args:I,blockNumber:n.number}),[i,s,l,p]=await Promise.all([o("net"),o("usdg"),u.readContract({address:v.address,abi:R,functionName:"decimals",blockNumber:n.number}),u.readContract({address:k.address,abi:R,functionName:"decimals",blockNumber:n.number})]);if(N(i)!==v.address||N(s)!==k.address||l!==v.decimals||p!==k.decimals)throw new a("NetNet financial token pins or decimals do not match the deployment.");return{product:c,contract:e,abi:r,rpc:u,block:n,read:o}}async function E(t){O(t);let c=(e,r)=>({module:"netnet",id:`4663:${D.bond.toLowerCase()}:${e}`,chainId:y,incomplete:!0,assets:[],description:`NetNet bond notes unreadable: ${h.plainError(r)} Use netnet_financial_status with product bond to inspect notes.`});try{let e=await P("bond"),r=$(await e.read("noteCount",[t]),"Invalid NetNet bond note count."),u=r<50n?Number(r):50,n=[];for(let o=0;o<u;o++)try{let i=await e.read("notes",[t,BigInt(o)]);if(!Array.isArray(i)||i.length!==4)throw new a("Invalid NetNet bond note.");let[s,l,p,w]=i.map(C=>$(C,"Invalid NetNet bond note amount or timestamp."));if(l>s||w<=p||w>=1n<<64n)throw new a("Invalid NetNet bond note vesting or claimed amount.");let I=s-l;if(I===0n)continue;let S=e.block.timestamp>=w?s:e.block.timestamp<=p?0n:s*(e.block.timestamp-p)/(w-p),B=S>l?S-l:0n;n.push({module:"netnet",id:`4663:${e.contract.toLowerCase()}:${o}`,chainId:y,matured:e.block.timestamp>=w,assets:[{token:v,amount:I.toString()}],description:`NetNet bond note ${o}: ${I} NET base units outstanding; ${B} claimable now, vesting ends at Unix ${w}. Redeem vested NET with netnet_financial_action product bond operation redeem. Payment cannot be withdrawn. Block ${e.block.number}.`})}catch(i){n.push(c(String(o),i))}return r>BigInt(u)&&n.push({module:"netnet",id:`4663:${e.contract.toLowerCase()}:coverage`,chainId:y,incomplete:!0,assets:[],description:`NetNet bond positions checked the first ${u} of ${r} notes. Use netnet_financial_status product bond offset ${u} to read the remaining notes.`}),n}catch(e){return[c("unreadable",e)]}}let U=(t,c,e,r)=>({name:t,inputSchema:{type:"object",properties:c,required:e,additionalProperties:!1},execute:async(u,n)=>{try{if(O(n),Object.keys(u).some(o=>!Object.hasOwn(c,o)))throw new a("Unsupported NetNet financial argument.");return await r(u,n)}catch(o){throw new a(h.plainError(o))}}}),W={type:"string",enum:Object.keys(D)};return{positions:E,tools:[U("netnet_financial_status",{product:W,offset:{type:"integer",minimum:0},limit:{type:"integer",minimum:1,maximum:50}},["product"],async(t,c)=>{let e=await P(t.product),r=V[e.product],u=t.offset??0,n=t.limit??20;if(!Number.isSafeInteger(u)||Number(u)<0||!Number.isSafeInteger(n)||Number(n)<1||Number(n)>50)throw new a("Use a nonnegative offset and limit 1..50.");let o=await Promise.all(r.map(async s=>{try{return[s,{value:T(await e.read(s))}]}catch(l){return[s,{unavailable:h.plainError(l)}]}})),i={};if(e.product==="genesis")for(let s of["purchasedRaw","purchasedNetOf","claimedNet","claimableNetOf"])i[s]=T(await e.read(s,[c]));if(e.product==="bond"||e.product==="rwa"){i.pending=T(await e.read("pendingFor",[c]));let s=await e.read("noteCount",[c]);if(typeof s!="bigint"||s<0n)throw new a("Invalid NetNet note count.");let l=s<BigInt(Number(u)+Number(n))?s:BigInt(Number(u)+Number(n));i.noteCount=s.toString(),i.notes=await Promise.all(Array.from({length:Math.max(0,Number(l-BigInt(Number(u))))},async(p,w)=>({id:String(Number(u)+w),note:T(await e.read(e.product==="bond"?"notes":"noteAt",[c,BigInt(Number(u)+w)]))}))),i.nextOffset=l<s?l.toString():null,e.product==="bond"&&(i.markets=await Promise.all([0n,1n].map(async p=>{try{return{id:p.toString(),quoteToken:N(await e.read("quoteToken",[p])),priceWad:String(await e.read("bondPrice",[p]))}}catch(w){return{id:p.toString(),unavailable:h.plainError(w)}}})))}return e.product==="treasury"&&(i.isMinter=await e.read("isMinter",[c]),i.isSpender=await e.read("isSpender",[c])),{chainId:y,contract:e.contract,product:e.product,blockNumber:String(e.block.number),tokens:[v,k],metrics:Object.fromEntries(o),wallet:i,units:"Raw token amounts use each token\u2019s decimals. Prices, NAV, reserve values and capacityRemaining use 18-decimal USDG WAD. Note timestamps are Unix seconds.",operations:_[e.product],caveat:"An unavailable metric is not zero. Formulaic eligibility, oracle liveness, caps and vesting are checked by the action preview. RWA entry/router calldata and initial deployment wiring remain unsupported."}}),U("netnet_financial_action",{product:W,operation:{type:"string",enum:[...new Set(Object.values(_).flat())]},amount:x(),minAmountOut:x(),maxPriceWad:x(),maxPayment:x(),marketId:{type:"integer",enum:[0,1]},recipient:{type:"string"},halted:{type:"boolean"},token:{type:"string"},noteIds:{type:"array",maxItems:50,items:x()},menu:{type:"array",maxItems:32,items:{type:"object"}}},["product","operation"],async(t,c)=>{let e=await P(t.product),r=t.operation;if(typeof r!="string"||!_[e.product].includes(r))throw new a("This operation is not supported by the selected financial product.");let u=new Set(["product","operation"]),n=[],o,i=0n,s="",l=(...d)=>d.forEach(m=>u.add(m)),p=()=>(l("amount"),A(t.amount)),w=()=>(l("minAmountOut"),A(t.minAmountOut));if(e.product==="genesis"){if(r==="purchase"&&(i=p(),o=k,n=[i],s="Founding subscription; NET is claimable only after successful finalization and vesting. A failed sale requires refund."),r==="claim"&&await e.read("claimableNetOf",[c])===0n)throw new a("No vested founding NET is claimable by this wallet.")}else if(e.product==="bond")if(r==="deposit"){if(l("marketId","maxPriceWad"),t.marketId!==0&&t.marketId!==1)throw new a("Bond marketId must be 0 (USDG) or 1 (canonical LP).");let d=BigInt(t.marketId);if(N(await e.read("quoteToken",[d]))!==(d===0n?k.address:H))throw new a("Bond quote token is not the pinned USDG or canonical LP.");i=p(),o=d===0n?k:{address:H,decimals:18,symbol:"NET/USDG LP",chainId:y};let f=A(t.maxPriceWad),b=await e.read("bondPrice",[d]);if(typeof b!="bigint"||b===0n||b>f)throw new a("Bond price exceeds maxPriceWad or is invalid.");n=[d,i,f,c],s="Payment is exchanged for a non-transferable NET note with two-day linear vesting. Redeem vested NET with the same product; payment cannot be withdrawn."}else n=[c];else if(e.product==="inverse"){if(i=p(),o=v,n=[i,w()],s="Purchased NET is burned permanently; USDG pays directly to this wallet. Capacity is denominated in USDG WAD, not raw USDG.",await e.read("active")!==!0)throw new a("NetNet buyback is inactive: oracle, finalization or capacity is unavailable.")}else if(e.product==="pteam"){if(N(await e.read("holder"))!==g(c))throw new a("This wallet is not the immutable pTEAM holder.");let d=p();if(l("maxPayment"),d>await e.read("exercisableNow"))throw new a("The NET exercise amount exceeds the vested cap.");let m=await e.read("strikeWad");if(i=(d*m/10n**BigInt(v.decimals)+10n**12n-1n)/10n**12n,i===0n||i>A(t.maxPayment))throw new a("The exercise payment exceeds maxPayment or rounds to zero.");o=k,n=[d],s=`Exercise pays ${i} USDG base units into treasury reserves and mints ${d} NET base units to the immutable holder. No withdrawal or exercise reversal exists.`}else if(e.product==="treasury"){let d=p();if(r==="mintNet"||r==="spendUsdg"){l("recipient");let m=N(t.recipient);if(await e.read(r==="mintNet"?"isMinter":"isSpender",[c])!==!0)throw new a("This wallet lacks the fixed NetNet treasury minter/spender role.");n=[m,d],s=`Protocol treasury operation sends ${d} base units to ${m}; it does not deposit into this wallet\u2019s savings.`}else n=[d],s="Permissionless protocol reserve rebalance; assets remain owned by the NetNet treasury. The deployed fraction is constrained by the immutable cap."}else if(e.product==="rwa"){if(["depositInventory","setDiscount","setInventoryMax","setHalt","setMenu"].includes(r)&&N(await e.read("manager"))!==g(c))throw new a("This wallet lacks the immutable RWA manager role.");if(r==="redeem")if(l("noteIds"),t.noteIds===void 0)n=[c];else{if(!Array.isArray(t.noteIds)||!t.noteIds.length||t.noteIds.length>50)throw new a("Provide 1..50 unique note IDs.");let m=t.noteIds.map(b=>A(b,!0));if(new Set(m.map(String)).size!==m.length)throw new a("Note IDs must be unique.");let f=await e.read("noteCount",[c]);if(m.some(b=>b>=f))throw new a("RWA note ID is out of range.");n=[c,m]}else if(r==="setHalt"){if(l("halted"),typeof t.halted!="boolean")throw new a("Provide halted as a boolean.");n=[t.halted]}else if(r==="setMenu"){if(l("menu"),!Array.isArray(t.menu)||!t.menu.length||t.menu.length>32)throw new a("Provide 1..32 explicit RWA menu entries.");let m=t.menu.map(f=>{if(!f||typeof f!="object"||Array.isArray(f)||Object.keys(f).some(L=>!["token","feed","targetWeightBps","active"].includes(L)))throw new a("Invalid RWA menu fields.");let b=f;if(typeof b.active!="boolean")throw new a("RWA active must be boolean.");return{token:N(b.token),feed:N(b.feed),targetWeightBps:A(b.targetWeightBps,!0),active:b.active}});if(new Set(m.map(f=>f.token)).size!==m.length||m.reduce((f,b)=>f+b.targetWeightBps,0n)!==10000n||m.some(f=>f.active&&(f.token===z||f.feed===z)))throw new a("RWA menu tokens must be unique, weights sum to 10000, active feeds/tokens nonzero.");n=[m],s=`Replace the complete RWA equity menu: ${JSON.stringify(T(m))}.`}else if(r==="skim")l("token"),n=[N(t.token)],s=`Sweep eligible stray assets to sleeve ${N(await e.read("sleeve"))}, not to this wallet.`;else if(r!=="pokeHwm"){let m=p();if(n=[m],r==="depositInventory"&&(o=v,i=m,s="Inventory funding is one-way. The manager cannot withdraw these NET; they are committed to bond obligations."),r==="setDiscount"&&m>await e.read("MAX_DISCOUNT_BPS")||r==="setInventoryMax"&&m>await e.read("INVENTORY_HARD_CAP"))throw new a("RWA setting exceeds its immutable maximum.")}}else e.product==="premium"?(n=[w()],s="Permissionless mint-and-sell keeper operation; all sale proceeds go to NetNet treasury. The caller receives no reward."):(n=[p(),w()],s="Convert NET already owned by the tax collector. Proceeds split to treasury and team; the caller receives no reward and supplies no NET.");if(Object.keys(t).some(d=>!u.has(d)))throw new a("Unexpected fields for this NetNet operation.");if(o&&await e.rpc.readContract({address:o.address,abi:R,functionName:"balanceOf",args:[c],blockNumber:e.block.number})<i)throw new a(`Top up ${o.symbol}: needs ${i} base units.`);let I=`NetNet ${e.product}.${r}, contract ${e.contract}, chain ${y}, values ${JSON.stringify(T(n))}. ${o?`Approve exactly ${i} ${o.symbol} base units (${o.address}, decimals ${o.decimals}). `:""}${s}`,S=[...o?[h.approval(o.address,e.contract,i.toString(),y)]:[],h.unsignedTx({to:e.contract,data:G({abi:e.abi,functionName:r,args:n}),value:"0",chainId:y,description:I})],B=await h.preview(S,c),C=0n;for(let d of B.changes){if(!/^-?\d+$/.test(d.amount))throw new a("Invalid NetNet preview amount.");if(BigInt(d.amount)<0n&&(C-=BigInt(d.amount)),BigInt(d.amount)<0n&&(!o||d.token.chainId!==y||!M(d.token.address,o.address)||d.token.decimals!==o.decimals||-BigInt(d.amount)>i))throw new a("NetNet preview spends outside the exact input budget.")}if(C>i)throw new a("NetNet preview exceeds the aggregate input budget.");return{txs:S,preview:B,summary:I}})]}};export{D as a,H as b,ae as c};
1
+ import{a as v}from"./6OGDTEGH.js";import{a as j}from"./NCQFWPAW.js";import{K as A}from"./DHUDSOGR.js";import{c as k}from"./AEL62KCG.js";import{a as O}from"./43LI5NKJ.js";import{a as x}from"./66F5ZH34.js";import{d as F,g as M,i as q,m as $}from"./NWNYJ26T.js";import{a as y}from"./FWD4L3CJ.js";import{a}from"./XSD5NL7J.js";import{encodeFunctionData as G,erc20Abi as R,getAddress as g,zeroAddress as z}from"viem";var D={genesis:g("0x575b7B7c97Ef3E21C82DAeB427899d583e1E913f"),bond:g("0xff32a969A0c567129eECD926D04657728E1980C1"),inverse:g("0x92166e94Eea5B7799b761653881692f881dFC4C9"),treasury:g("0x04822Ea321A0DEE6F40656172F29312104855d66"),pteam:g("0x650F58079dAa17ee28928c2F92d22291d038B2B0"),rwa:g("0x99B6eE6eDe47d9a8a9bfd03F728a99B789df1961"),premium:g("0x346e1a31171A0f7aC73909010b5435768d3B5462"),tax:g("0x086C58400b8708Ef993f256E12e752dcF0AC918e")},H=g("0x59F95461E68e0c77605299791E1449f175165B54"),_={genesis:["purchase","finalize","refund","claim"],bond:["deposit","redeem"],inverse:["swap"],treasury:["rebalanceToMorpho","rebalanceFromMorpho","mintNet","spendUsdg"],pteam:["exercise"],rwa:["redeem","depositInventory","pokeHwm","setDiscount","setInventoryMax","setHalt","setMenu","skim"],premium:["execute"],tax:["convert"]},V={genesis:["wired","finalized","finalizeTime","saleStart","saleDeadline","raisedRaw","totalRaised","registryLength"],bond:["wired","enabled","startTime","marketCount"],inverse:["active","price","capacityRemaining","spreadBps"],treasury:["wired","rfv","backingPerToken","liquidUsdg","morphoAssets","polRfv","morphoCapBps","morphoVault","canonicalPair"],pteam:["wired","holder","vestedFraction","exercisableNow","exercised","strikeWad","capBps","circulatingSupply","excludedFromFloat"],rwa:["manager","halted","inventory","inventoryMax","owedNet","bHwm","deskDiscountBps","VEST","MAX_DISCOUNT_BPS","INVENTORY_HARD_CAP","menu","routerSource","sleeve"],premium:["active","clipSize","lastExecuteAt","premiumThresholdWad","router","pairContract"],tax:["wired","pendingNet","teamBps","treasuryBps","teamWallet","router","pairContract"]},T=h=>JSON.parse(JSON.stringify(h,(P,E)=>typeof E=="bigint"?E.toString():E));function N(h){return q(h,"Provide a checksummed address.",F)}var ae=h=>{async function P(t){if(typeof t!="string"||!Object.hasOwn(D,t))throw new a("Choose a published NetNet financial product.");let c=t,e=D[c],r=j[c],u=h.clientFor(y);if(await u.getChainId()!==y)throw new a("NetNet requires chain 4663.");let n=await u.getBlock(),o=(w,I=[])=>u.readContract({address:e,abi:r,functionName:w,args:I,blockNumber:n.number}),[i,s,l,p]=await Promise.all([o("net"),o("usdg"),u.readContract({address:v.address,abi:R,functionName:"decimals",blockNumber:n.number}),u.readContract({address:k.address,abi:R,functionName:"decimals",blockNumber:n.number})]);if(N(i)!==v.address||N(s)!==k.address||l!==v.decimals||p!==k.decimals)throw new a("NetNet financial token pins or decimals do not match the deployment.");return{product:c,contract:e,abi:r,rpc:u,block:n,read:o}}async function E(t){O(t);let c=(e,r)=>({module:"netnet",id:`4663:${D.bond.toLowerCase()}:${e}`,chainId:y,incomplete:!0,assets:[],description:`NetNet bond notes unreadable: ${h.plainError(r)} Use netnet_financial_status with product bond to inspect notes.`});try{let e=await P("bond"),r=$(await e.read("noteCount",[t]),"Invalid NetNet bond note count."),u=r<50n?Number(r):50,n=[];for(let o=0;o<u;o++)try{let i=await e.read("notes",[t,BigInt(o)]);if(!Array.isArray(i)||i.length!==4)throw new a("Invalid NetNet bond note.");let[s,l,p,w]=i.map(C=>$(C,"Invalid NetNet bond note amount or timestamp."));if(l>s||w<=p||w>=1n<<64n)throw new a("Invalid NetNet bond note vesting or claimed amount.");let I=s-l;if(I===0n)continue;let S=e.block.timestamp>=w?s:e.block.timestamp<=p?0n:s*(e.block.timestamp-p)/(w-p),B=S>l?S-l:0n;n.push({module:"netnet",id:`4663:${e.contract.toLowerCase()}:${o}`,chainId:y,matured:e.block.timestamp>=w,assets:[{token:v,amount:I.toString()}],description:`NetNet bond note ${o}: ${I} NET base units outstanding; ${B} claimable now, vesting ends at Unix ${w}. Redeem vested NET with netnet_financial_action product bond operation redeem. Payment cannot be withdrawn. Block ${e.block.number}.`})}catch(i){n.push(c(String(o),i))}return r>BigInt(u)&&n.push({module:"netnet",id:`4663:${e.contract.toLowerCase()}:coverage`,chainId:y,incomplete:!0,assets:[],description:`NetNet bond positions checked the first ${u} of ${r} notes. Use netnet_financial_status product bond offset ${u} to read the remaining notes.`}),n}catch(e){return[c("unreadable",e)]}}let U=(t,c,e,r)=>({name:t,inputSchema:{type:"object",properties:c,required:e,additionalProperties:!1},execute:async(u,n)=>{try{if(O(n),Object.keys(u).some(o=>!Object.hasOwn(c,o)))throw new a("Unsupported NetNet financial argument.");return await r(u,n)}catch(o){throw new a(h.plainError(o))}}}),W={type:"string",enum:Object.keys(D)};return{positions:E,tools:[U("netnet_financial_status",{product:W,offset:{type:"integer",minimum:0},limit:{type:"integer",minimum:1,maximum:50}},["product"],async(t,c)=>{let e=await P(t.product),r=V[e.product],u=t.offset??0,n=t.limit??20;if(!Number.isSafeInteger(u)||Number(u)<0||!Number.isSafeInteger(n)||Number(n)<1||Number(n)>50)throw new a("Use a nonnegative offset and limit 1..50.");let o=await Promise.all(r.map(async s=>{try{return[s,{value:T(await e.read(s))}]}catch(l){return[s,{unavailable:h.plainError(l)}]}})),i={};if(e.product==="genesis")for(let s of["purchasedRaw","purchasedNetOf","claimedNet","claimableNetOf"])i[s]=T(await e.read(s,[c]));if(e.product==="bond"||e.product==="rwa"){i.pending=T(await e.read("pendingFor",[c]));let s=await e.read("noteCount",[c]);if(typeof s!="bigint"||s<0n)throw new a("Invalid NetNet note count.");let l=s<BigInt(Number(u)+Number(n))?s:BigInt(Number(u)+Number(n));i.noteCount=s.toString(),i.notes=await Promise.all(Array.from({length:Math.max(0,Number(l-BigInt(Number(u))))},async(p,w)=>({id:String(Number(u)+w),note:T(await e.read(e.product==="bond"?"notes":"noteAt",[c,BigInt(Number(u)+w)]))}))),i.nextOffset=l<s?l.toString():null,e.product==="bond"&&(i.markets=await Promise.all([0n,1n].map(async p=>{try{return{id:p.toString(),quoteToken:N(await e.read("quoteToken",[p])),priceWad:String(await e.read("bondPrice",[p]))}}catch(w){return{id:p.toString(),unavailable:h.plainError(w)}}})))}return e.product==="treasury"&&(i.isMinter=await e.read("isMinter",[c]),i.isSpender=await e.read("isSpender",[c])),{chainId:y,contract:e.contract,product:e.product,blockNumber:String(e.block.number),tokens:[v,k],metrics:Object.fromEntries(o),wallet:i,units:"Raw token amounts use each token\u2019s decimals. Prices, NAV, reserve values and capacityRemaining use 18-decimal USDG WAD. Note timestamps are Unix seconds.",operations:_[e.product],caveat:"An unavailable metric is not zero. Formulaic eligibility, oracle liveness, caps and vesting are checked by the action preview. RWA entry/router calldata and initial deployment wiring remain unsupported."}}),U("netnet_financial_action",{product:W,operation:{type:"string",enum:[...new Set(Object.values(_).flat())]},amount:x(),minAmountOut:x(),maxPriceWad:x(),maxPayment:x(),marketId:{type:"integer",enum:[0,1]},recipient:{type:"string"},halted:{type:"boolean"},token:{type:"string"},noteIds:{type:"array",maxItems:50,items:x()},menu:{type:"array",maxItems:32,items:{type:"object"}}},["product","operation"],async(t,c)=>{let e=await P(t.product),r=t.operation;if(typeof r!="string"||!_[e.product].includes(r))throw new a("This operation is not supported by the selected financial product.");let u=new Set(["product","operation"]),n=[],o,i=0n,s="",l=(...d)=>d.forEach(m=>u.add(m)),p=()=>(l("amount"),A(t.amount)),w=()=>(l("minAmountOut"),A(t.minAmountOut));if(e.product==="genesis"){if(r==="purchase"&&(i=p(),o=k,n=[i],s="Founding subscription; NET is claimable only after successful finalization and vesting. A failed sale requires refund."),r==="claim"&&await e.read("claimableNetOf",[c])===0n)throw new a("No vested founding NET is claimable by this wallet.")}else if(e.product==="bond")if(r==="deposit"){if(l("marketId","maxPriceWad"),t.marketId!==0&&t.marketId!==1)throw new a("Bond marketId must be 0 (USDG) or 1 (canonical LP).");let d=BigInt(t.marketId);if(N(await e.read("quoteToken",[d]))!==(d===0n?k.address:H))throw new a("Bond quote token is not the pinned USDG or canonical LP.");i=p(),o=d===0n?k:{address:H,decimals:18,symbol:"NET/USDG LP",chainId:y};let f=A(t.maxPriceWad),b=await e.read("bondPrice",[d]);if(typeof b!="bigint"||b===0n||b>f)throw new a("Bond price exceeds maxPriceWad or is invalid.");n=[d,i,f,c],s="Payment is exchanged for a non-transferable NET note with two-day linear vesting. Redeem vested NET with the same product; payment cannot be withdrawn."}else n=[c];else if(e.product==="inverse"){if(i=p(),o=v,n=[i,w()],s="Purchased NET is burned permanently; USDG pays directly to this wallet. Capacity is denominated in USDG WAD, not raw USDG.",await e.read("active")!==!0)throw new a("NetNet buyback is inactive: oracle, finalization or capacity is unavailable.")}else if(e.product==="pteam"){if(N(await e.read("holder"))!==g(c))throw new a("This wallet is not the immutable pTEAM holder.");let d=p();if(l("maxPayment"),d>await e.read("exercisableNow"))throw new a("The NET exercise amount exceeds the vested cap.");let m=await e.read("strikeWad");if(i=(d*m/10n**BigInt(v.decimals)+10n**12n-1n)/10n**12n,i===0n||i>A(t.maxPayment))throw new a("The exercise payment exceeds maxPayment or rounds to zero.");o=k,n=[d],s=`Exercise pays ${i} USDG base units into treasury reserves and mints ${d} NET base units to the immutable holder. No withdrawal or exercise reversal exists.`}else if(e.product==="treasury"){let d=p();if(r==="mintNet"||r==="spendUsdg"){l("recipient");let m=N(t.recipient);if(await e.read(r==="mintNet"?"isMinter":"isSpender",[c])!==!0)throw new a("This wallet lacks the fixed NetNet treasury minter/spender role.");n=[m,d],s=`Protocol treasury operation sends ${d} base units to ${m}; it does not deposit into this wallet\u2019s savings.`}else n=[d],s="Permissionless protocol reserve rebalance; assets remain owned by the NetNet treasury. The deployed fraction is constrained by the immutable cap."}else if(e.product==="rwa"){if(["depositInventory","setDiscount","setInventoryMax","setHalt","setMenu"].includes(r)&&N(await e.read("manager"))!==g(c))throw new a("This wallet lacks the immutable RWA manager role.");if(r==="redeem")if(l("noteIds"),t.noteIds===void 0)n=[c];else{if(!Array.isArray(t.noteIds)||!t.noteIds.length||t.noteIds.length>50)throw new a("Provide 1..50 unique note IDs.");let m=t.noteIds.map(b=>A(b,!0));if(new Set(m.map(String)).size!==m.length)throw new a("Note IDs must be unique.");let f=await e.read("noteCount",[c]);if(m.some(b=>b>=f))throw new a("RWA note ID is out of range.");n=[c,m]}else if(r==="setHalt"){if(l("halted"),typeof t.halted!="boolean")throw new a("Provide halted as a boolean.");n=[t.halted]}else if(r==="setMenu"){if(l("menu"),!Array.isArray(t.menu)||!t.menu.length||t.menu.length>32)throw new a("Provide 1..32 explicit RWA menu entries.");let m=t.menu.map(f=>{if(!f||typeof f!="object"||Array.isArray(f)||Object.keys(f).some(L=>!["token","feed","targetWeightBps","active"].includes(L)))throw new a("Invalid RWA menu fields.");let b=f;if(typeof b.active!="boolean")throw new a("RWA active must be boolean.");return{token:N(b.token),feed:N(b.feed),targetWeightBps:A(b.targetWeightBps,!0),active:b.active}});if(new Set(m.map(f=>f.token)).size!==m.length||m.reduce((f,b)=>f+b.targetWeightBps,0n)!==10000n||m.some(f=>f.active&&(f.token===z||f.feed===z)))throw new a("RWA menu tokens must be unique, weights sum to 10000, active feeds/tokens nonzero.");n=[m],s=`Replace the complete RWA equity menu: ${JSON.stringify(T(m))}.`}else if(r==="skim")l("token"),n=[N(t.token)],s=`Sweep eligible stray assets to sleeve ${N(await e.read("sleeve"))}, not to this wallet.`;else if(r!=="pokeHwm"){let m=p();if(n=[m],r==="depositInventory"&&(o=v,i=m,s="Inventory funding is one-way. The manager cannot withdraw these NET; they are committed to bond obligations."),r==="setDiscount"&&m>await e.read("MAX_DISCOUNT_BPS")||r==="setInventoryMax"&&m>await e.read("INVENTORY_HARD_CAP"))throw new a("RWA setting exceeds its immutable maximum.")}}else e.product==="premium"?(n=[w()],s="Permissionless mint-and-sell keeper operation; all sale proceeds go to NetNet treasury. The caller receives no reward."):(n=[p(),w()],s="Convert NET already owned by the tax collector. Proceeds split to treasury and team; the caller receives no reward and supplies no NET.");if(Object.keys(t).some(d=>!u.has(d)))throw new a("Unexpected fields for this NetNet operation.");if(o&&await e.rpc.readContract({address:o.address,abi:R,functionName:"balanceOf",args:[c],blockNumber:e.block.number})<i)throw new a(`Top up ${o.symbol}: needs ${i} base units.`);let I=`NetNet ${e.product}.${r}, contract ${e.contract}, chain ${y}, values ${JSON.stringify(T(n))}. ${o?`Approve exactly ${i} ${o.symbol} base units (${o.address}, decimals ${o.decimals}). `:""}${s}`,S=[...o?[h.approval(o.address,e.contract,i.toString(),y)]:[],h.unsignedTx({to:e.contract,data:G({abi:e.abi,functionName:r,args:n}),value:"0",chainId:y,description:I})],B=await h.preview(S,c),C=0n;for(let d of B.changes){if(!/^-?\d+$/.test(d.amount))throw new a("Invalid NetNet preview amount.");if(BigInt(d.amount)<0n&&(C-=BigInt(d.amount)),BigInt(d.amount)<0n&&(!o||d.token.chainId!==y||!M(d.token.address,o.address)||d.token.decimals!==o.decimals||-BigInt(d.amount)>i))throw new a("NetNet preview spends outside the exact input budget.")}if(C>i)throw new a("NetNet preview exceeds the aggregate input budget.");return{txs:S,preview:B,summary:I}})]}};export{D as a,H as b,ae as c};
@@ -1 +1 @@
1
- import{b as U,c as G}from"./JZXYLHI7.js";import{L as K}from"./IQIWASRD.js";import{a as N}from"./SSIENQVU.js";import{c as P}from"./W2OJ57ZO.js";import{c as R,f as L,g as H,h as W,i as z}from"./IKEJCBYU.js";import{a as F}from"./PBQSJSZO.js";import{a as u}from"./5ZLOCQA4.js";import{g as I}from"./5KUWLUPM.js";import{a as _}from"./FWD4L3CJ.js";import{a as o}from"./XSD5NL7J.js";import{encodeFunctionData as S,erc20Abi as j,getAddress as T,parseAbi as k}from"viem";var w=k(["function asset() view returns (address)","function decimals() view returns (uint8)","function balanceOf(address) view returns (uint256)","function previewMint(uint256) view returns (uint256)","function previewRedeem(uint256) view returns (uint256)","function previewWithdraw(uint256) view returns (uint256)","function mint(uint256 shares,address receiver) returns (uint256)","function redeem(uint256 shares,address receiver,address owner) returns (uint256)","function withdraw(uint256 assets,address receiver,address owner) returns (uint256)"]);function q(t,s=!1){if(typeof t!="string"||!/^\d+$/.test(t)||t.length>78||BigInt(t)>=1n<<256n||!s&&BigInt(t)===0n)throw new o("Provide a positive uint256 decimal base-unit string.");return BigInt(t)}function le(t,s,v){return["details","analytics","manage","mint",s==="netnet"?"redeem":"withdraw_assets","force_exit","in_kind_exit"].map(e=>{let $=[...s==="longbow"?["vault"]:[],...e==="mint"?["shares","maxAssets"]:e==="redeem"?["shares"]:e==="withdraw_assets"?["amount"]:e==="force_exit"?["maxPenaltyAssets","minAmountOut"]:[]],m={...s==="longbow"?{vault:{type:"string",enum:v.map(i=>i.vault)}}:{}};e==="in_kind_exit"&&(Object.assign(m,{amount:u(),maxShares:u(),maxPenaltyAssets:u(),deadline:u()}),$.push("amount","maxShares","maxPenaltyAssets","deadline")),e==="mint"&&Object.assign(m,{shares:u(),maxAssets:u()}),e==="redeem"&&(m.shares=u()),e==="withdraw_assets"&&(m.amount=u()),e==="force_exit"&&Object.assign(m,{maxPenaltyAssets:u(),minAmountOut:u()});let J=P(t,`${s}_manage`,v[0].vault,v[0].asset),E=N(t,`${s}_analytics`,v[0].vault);if(e==="manage"||e==="analytics"){let i=e==="manage"?J.inputSchema:E.inputSchema;Object.assign(m,i.properties),e==="analytics"&&s==="longbow"&&(m.view={type:"string",enum:["apy","published_apy"]}),$.push(...i.required)}return{name:`${s}_${e}`,inputSchema:{type:"object",properties:m,required:$,additionalProperties:!1,...e==="analytics"&&s==="netnet"?{allOf:E.inputSchema.allOf}:{}},execute:async(i,r)=>{try{if(F(r),Object.keys(i).some(l=>!Object.hasOwn(m,l)))throw new o("Unsupported vault feature argument.");let A=s==="netnet"?v[0]:v.find(l=>typeof i.vault=="string"&&I(l.vault,i.vault));if(!A)throw new o("Choose a current vault returned by the project list tool.");let{vault:n,asset:a}=A,b={...i};if(delete b.vault,e==="details")return H(t,`${s}_details`,n,a).execute(b,r);if(e==="manage")return P(t,`${s}_manage`,n,a).execute(b,r);if(e==="analytics"){if(s==="longbow"&&i.view==="published_apy")return G(t,n,a,b);if(s==="longbow"&&i.view==="apy")return U(t,n,a,b);if(s==="longbow")throw new o("Choose apy or published_apy; the Longbow vault is not indexed by Morpho for other analytics views.");return{...await N(t,`${s}_analytics`,n).execute(b,r),asset:{...a,address:T(a.address)}}}if(e==="in_kind_exit")return K(t,n,a,i,r);let f=t.clientFor(_);if(await f.getChainId()!==_)throw new o("Vault actions require chain 4663.");let[Q,X,Y]=await Promise.all([f.readContract({address:n,abi:w,functionName:"asset"}),f.readContract({address:n,abi:w,functionName:"decimals"}),f.readContract({address:a.address,abi:j,functionName:"decimals"})]);if(T(Q)!==T(a.address)||X!==18||Y!==a.decimals)throw new o("Vault metadata does not match the pinned asset and shares.");let M=e==="force_exit"?await f.readContract({address:n,abi:w,functionName:"balanceOf",args:[r]}):void 0;if(e==="force_exit"){let l=await L(t,f,n,r,M,R(i.maxPenaltyAssets),a),C=q(i.minAmountOut),p=[l.tx],y=await t.preview(p,r);return z(y.changes,n,M,C,a),{txs:p,preview:y,summary:`${W(l.plan,a.symbol)} ${y.summary}`}}let d=e==="mint",g=e==="redeem",c=q(d||g?i.shares:i.amount),x=await f.readContract({address:n,abi:w,functionName:d?"previewMint":g?"previewRedeem":"previewWithdraw",args:[c]});if(x<=0n||d&&x>q(i.maxAssets))throw new o("Vault quote is zero or exceeds maxAssets.");let V=d?void 0:await f.readContract({address:n,abi:w,functionName:"balanceOf",args:[r]});if(!d&&(g?c:x)>V)throw new o("The wallet share balance cannot cover this exit.");let Z=d?S({abi:w,functionName:"mint",args:[c,r]}):g?S({abi:w,functionName:"redeem",args:[c,r,r]}):S({abi:w,functionName:"withdraw",args:[c,r,r]}),B=`${e} ${c} ${d||g?"18-decimal share":`${a.decimals}-decimal ${a.symbol}`} base units on ${n}; beneficiary ${r}.`,D=[...d?[t.approval(a.address,n,x.toString(),_)]:[],t.unsignedTx({to:n,data:Z,value:"0",chainId:_,description:B})],O=await t.preview(D,r),h=(l,C)=>O.changes.filter(p=>p.token.chainId===_&&I(p.token.address,l)).reduce((p,y)=>{if(y.token.decimals!==C||!/^-?\d+$/.test(y.amount))throw new o("Invalid vault preview metadata.");return p+BigInt(y.amount)},0n);if(d?h(a.address,a.decimals)!==-x||h(n,18)!==c:g?h(n,18)!==-c||h(a.address,a.decimals)<=0n:h(a.address,a.decimals)!==c||-h(n,18)<=0n||-h(n,18)>V)throw new o("Vault preview does not match the requested amount and beneficiary.");return{txs:D,preview:O,summary:`${B} Counterpart quote ${x} base units. Mint approval is exact; accrual may require a fresh quote. Standard ERC-4626 calls encode no minimum receipt. ${O.summary}`}}catch(A){throw new o(t.plainError(A))}}}})}export{le as a};
1
+ import{b as U,c as G}from"./YDNTY67T.js";import{L as K}from"./DHUDSOGR.js";import{a as N}from"./K3RDPI5J.js";import{c as P}from"./VYAJXLND.js";import{c as R,f as L,g as H,h as W,i as z}from"./7WSHW7KW.js";import{a as F}from"./43LI5NKJ.js";import{a as u}from"./66F5ZH34.js";import{g as I}from"./NWNYJ26T.js";import{a as _}from"./FWD4L3CJ.js";import{a as o}from"./XSD5NL7J.js";import{encodeFunctionData as S,erc20Abi as j,getAddress as T,parseAbi as k}from"viem";var w=k(["function asset() view returns (address)","function decimals() view returns (uint8)","function balanceOf(address) view returns (uint256)","function previewMint(uint256) view returns (uint256)","function previewRedeem(uint256) view returns (uint256)","function previewWithdraw(uint256) view returns (uint256)","function mint(uint256 shares,address receiver) returns (uint256)","function redeem(uint256 shares,address receiver,address owner) returns (uint256)","function withdraw(uint256 assets,address receiver,address owner) returns (uint256)"]);function q(t,s=!1){if(typeof t!="string"||!/^\d+$/.test(t)||t.length>78||BigInt(t)>=1n<<256n||!s&&BigInt(t)===0n)throw new o("Provide a positive uint256 decimal base-unit string.");return BigInt(t)}function le(t,s,v){return["details","analytics","manage","mint",s==="netnet"?"redeem":"withdraw_assets","force_exit","in_kind_exit"].map(e=>{let $=[...s==="longbow"?["vault"]:[],...e==="mint"?["shares","maxAssets"]:e==="redeem"?["shares"]:e==="withdraw_assets"?["amount"]:e==="force_exit"?["maxPenaltyAssets","minAmountOut"]:[]],m={...s==="longbow"?{vault:{type:"string",enum:v.map(i=>i.vault)}}:{}};e==="in_kind_exit"&&(Object.assign(m,{amount:u(),maxShares:u(),maxPenaltyAssets:u(),deadline:u()}),$.push("amount","maxShares","maxPenaltyAssets","deadline")),e==="mint"&&Object.assign(m,{shares:u(),maxAssets:u()}),e==="redeem"&&(m.shares=u()),e==="withdraw_assets"&&(m.amount=u()),e==="force_exit"&&Object.assign(m,{maxPenaltyAssets:u(),minAmountOut:u()});let J=P(t,`${s}_manage`,v[0].vault,v[0].asset),E=N(t,`${s}_analytics`,v[0].vault);if(e==="manage"||e==="analytics"){let i=e==="manage"?J.inputSchema:E.inputSchema;Object.assign(m,i.properties),e==="analytics"&&s==="longbow"&&(m.view={type:"string",enum:["apy","published_apy"]}),$.push(...i.required)}return{name:`${s}_${e}`,inputSchema:{type:"object",properties:m,required:$,additionalProperties:!1,...e==="analytics"&&s==="netnet"?{allOf:E.inputSchema.allOf}:{}},execute:async(i,r)=>{try{if(F(r),Object.keys(i).some(l=>!Object.hasOwn(m,l)))throw new o("Unsupported vault feature argument.");let A=s==="netnet"?v[0]:v.find(l=>typeof i.vault=="string"&&I(l.vault,i.vault));if(!A)throw new o("Choose a current vault returned by the project list tool.");let{vault:n,asset:a}=A,b={...i};if(delete b.vault,e==="details")return H(t,`${s}_details`,n,a).execute(b,r);if(e==="manage")return P(t,`${s}_manage`,n,a).execute(b,r);if(e==="analytics"){if(s==="longbow"&&i.view==="published_apy")return G(t,n,a,b);if(s==="longbow"&&i.view==="apy")return U(t,n,a,b);if(s==="longbow")throw new o("Choose apy or published_apy; the Longbow vault is not indexed by Morpho for other analytics views.");return{...await N(t,`${s}_analytics`,n).execute(b,r),asset:{...a,address:T(a.address)}}}if(e==="in_kind_exit")return K(t,n,a,i,r);let f=t.clientFor(_);if(await f.getChainId()!==_)throw new o("Vault actions require chain 4663.");let[Q,X,Y]=await Promise.all([f.readContract({address:n,abi:w,functionName:"asset"}),f.readContract({address:n,abi:w,functionName:"decimals"}),f.readContract({address:a.address,abi:j,functionName:"decimals"})]);if(T(Q)!==T(a.address)||X!==18||Y!==a.decimals)throw new o("Vault metadata does not match the pinned asset and shares.");let M=e==="force_exit"?await f.readContract({address:n,abi:w,functionName:"balanceOf",args:[r]}):void 0;if(e==="force_exit"){let l=await L(t,f,n,r,M,R(i.maxPenaltyAssets),a),C=q(i.minAmountOut),p=[l.tx],y=await t.preview(p,r);return z(y.changes,n,M,C,a),{txs:p,preview:y,summary:`${W(l.plan,a.symbol)} ${y.summary}`}}let d=e==="mint",g=e==="redeem",c=q(d||g?i.shares:i.amount),x=await f.readContract({address:n,abi:w,functionName:d?"previewMint":g?"previewRedeem":"previewWithdraw",args:[c]});if(x<=0n||d&&x>q(i.maxAssets))throw new o("Vault quote is zero or exceeds maxAssets.");let V=d?void 0:await f.readContract({address:n,abi:w,functionName:"balanceOf",args:[r]});if(!d&&(g?c:x)>V)throw new o("The wallet share balance cannot cover this exit.");let Z=d?S({abi:w,functionName:"mint",args:[c,r]}):g?S({abi:w,functionName:"redeem",args:[c,r,r]}):S({abi:w,functionName:"withdraw",args:[c,r,r]}),B=`${e} ${c} ${d||g?"18-decimal share":`${a.decimals}-decimal ${a.symbol}`} base units on ${n}; beneficiary ${r}.`,D=[...d?[t.approval(a.address,n,x.toString(),_)]:[],t.unsignedTx({to:n,data:Z,value:"0",chainId:_,description:B})],O=await t.preview(D,r),h=(l,C)=>O.changes.filter(p=>p.token.chainId===_&&I(p.token.address,l)).reduce((p,y)=>{if(y.token.decimals!==C||!/^-?\d+$/.test(y.amount))throw new o("Invalid vault preview metadata.");return p+BigInt(y.amount)},0n);if(d?h(a.address,a.decimals)!==-x||h(n,18)!==c:g?h(n,18)!==-c||h(a.address,a.decimals)<=0n:h(a.address,a.decimals)!==c||-h(n,18)<=0n||-h(n,18)>V)throw new o("Vault preview does not match the requested amount and beneficiary.");return{txs:D,preview:O,summary:`${B} Counterpart quote ${x} base units. Mint approval is exact; accrual may require a fresh quote. Standard ERC-4626 calls encode no minimum receipt. ${O.summary}`}}catch(A){throw new o(t.plainError(A))}}}})}export{le as a};
@@ -1 +1 @@
1
- import{b as z,c as I}from"./SPRVVJXI.js";import{b as W}from"./XSRIJUFU.js";import{d as R,e as _}from"./XV6F3RET.js";import{K as E}from"./IQIWASRD.js";import{a as F}from"./PBQSJSZO.js";import{d as H,g as A,i as j}from"./5KUWLUPM.js";import{a as C,s as S}from"./FWD4L3CJ.js";import{a as s}from"./XSD5NL7J.js";import{encodeFunctionData as M,erc20Abi as V,getAddress as Z,keccak256 as K,zeroAddress as x}from"viem";var r=R.turbo,h=R.blackjack,g=m=>j(m,"Provide an explicit card address.",H);function G(m,d){if(/^uint\d*\[\]$/.test(m.type)&&Array.isArray(d))return d.map(c=>G({...m,type:m.type.slice(0,-2)},c));if(/^uint\d*$/.test(m.type)&&(typeof d!="string"||!/^(0|[1-9]\d*)$/.test(d)))throw new s("Card integers must be canonical decimal strings, without leading zeros.");return W(m,d)}var J=["buy","cashOut","claimExpiry","refund","safeTransferFrom","safeBatchTransferFrom"],X=["liquidate","recordKnock","liquidateKnock","clearKnock","recordDrift","settle","markVoid","depositHouse","depositPutPot","withdrawHouse","withdrawPutPot","createSeries","haltSales","resumeSales","sweepFees","skim"],Q=m=>m==="netnet_turbo_action"||m.startsWith("netnet_blackjack_")&&["netnet_blackjack_finalize","netnet_blackjack_expire","netnet_blackjack_claim"].includes(m);async function de(m,d,c,k){if(F(c),!Q(m))throw new s("No local NetNet card action builder exists.");let v=m!=="netnet_turbo_action";if(Object.keys(d).some(e=>!(v?["sessionId","seriesId"]:["operation","values","minimum","allowZeroPayout"]).includes(e)))throw new s("Unexpected card action argument.");if(v&&!z(m,d))throw new s("Recovery accepts exactly one positive decimal session or series ID.");if(await k.getChainId()!==C)throw new s("NetNet cards require chain 4663.");let w=await k.getBlock();if(w.number===null||!w.hash)throw new s("Card action block is unavailable.");let p=(e,t,i=[])=>k.readContract({address:e.address,abi:e.abi,functionName:t,args:i,blockNumber:w.number});for(let e of v?[r,h]:[r]){let t=await k.getCode({address:e.address,blockNumber:w.number});if(!t||K(t)!==e.codeHash)throw new s("NetNet card runtime changed or is unavailable. Requalify this deployment before signing.")}for(let e of v?Object.values(_):[_.turbo]){let t=await k.getCode({address:Z(e.address),blockNumber:w.number});if(!t||K(t)!==e.codeHash)throw new s("NetNet linked card library changed or is unavailable. Requalify before signing.")}let l={txs:[],inputs:[],cards:[],decision:"",blockNumber:w.number,blockHash:w.hash},$=(e,t,i,a,o)=>({chainId:4663,collection:r.address,operator:e,from:t,to:i,id:a,amount:o,operation:t===x?"mint":i===x?"burn":"transfer"}),T=(e,t,i,a,o=[])=>{l.txs.push({to:e,chainId:C,value:"0",data:M({abi:t,functionName:i,args:a}),description:l.decision}),l.cards.push(o)},D=(e,t)=>{if(t<=0n||t>=1n<<128n)throw new s("Card payment must be positive and below the exact-approval ceiling.");l.inputs.push({token:e,amount:t,to:r.address}),T(e,V,"approve",[r.address,t])};if(v){if(g(await p(h,"cards"))!==r.address||g(await p(h,"turbo"))!==r.address)throw new s("Blackjack card wiring changed.");let e=m==="netnet_blackjack_claim";if(Object.keys(d).some(b=>b!==(e?"seriesId":"sessionId")))throw new s("Recovery accepts only its one exact session or series ID.");let t=E(e?d.seriesId:d.sessionId),i,a,o,u="Original-series parked payout; self-claim only.";if(e){if(i=t,a=await p(h,"unclaimedChips",[t,c]),o="claimUnclaimedChips",a===0n)throw new s("This wallet has no parked chips for that series.")}else{let b=await p(h,"sessionOf",[t]);if(!b||!A(b.player,c))throw new s("Recovery is limited to this wallet\u2019s recorded blackjack session.");let y=m==="netnet_blackjack_finalize";if(o=y?"finalize":"expireSession",b.state!==(y?2:1))throw new s(y?"Session is not Closing. Use its current on-chain state to choose recovery.":"Session is not Open. A Closing session uses finalize after its challenge window.");let N=y?b.closeAt:b.deadline;if(u=y?`Challenge ends ${new Date(Number(N)*1e3).toISOString()}.`:`Session deadline ${new Date(Number(N)*1e3).toISOString()}; player-only expiry until ${new Date(Number(N+3600n)*1e3).toISOString()}.`,w.timestamp<N)throw new s(`Recovery is not due until ${N} Unix seconds.`);i=await p(h,"tableSeries"),a=b.chips}if(i<=0n||a<0n)throw new s("Blackjack recovery accounting is unavailable.");return l.decision=`${o} ${e?"series":"session"} ${t} at ${h.address}: return ${a} whole cards of collection ${r.address}, series ${i}, to ${Z(c)}. ${u} Last on-chain chips may omit off-chain winnings; cards may be worthless. A failed receiver parks the payout at ${h.address}; self-claim only. ETH gas extra.`,T(h.address,h.abi,o,[t],a===0n?[]:[$(h.address,h.address,c,i,a)]),l.recovery={...e?{}:{sessionId:t.toString()},seriesId:i.toString(),count:a.toString(),player:c,operation:o},l}let n=String(d.operation);if(n==="setApprovalForAll")throw new s(I.setApprovalForAll);if(["convertPremiums","convertSleeveFees"].includes(n))throw new s(I.conversion);if(![...J,...X].includes(n))throw new s("Choose a qualified finite TURBO operation.");if(!Array.isArray(d.values))throw new s("Provide ordered TURBO values using decimal integer strings.");let U=n==="safeTransferFrom"||n==="safeBatchTransferFrom",B=r.abi.find(e=>e.name===n),q=U?B.inputs.slice(1,-1):B.inputs;if(d.values.length!==q.length)throw new s("TURBO values do not match the exact operation inputs.");let f=q.map((e,t)=>G(e,d.values[t])),O=g(await p(r,"manager")),L=g(await p(r,"sleeve")),P=[];if(U){if(d.minimum!==void 0||d.allowZeroPayout!==void 0)throw new s("Transfer has no payout floor.");let e=g(f[0]);if(e===x||A(e,c))throw new s("Name a nonzero, non-self card recipient.");let t=await k.getCode({address:e,blockNumber:w.number});if(t&&t!=="0x")throw new s("Card transfer to a contract requires qualified credit and recovery. New blackjack seating remains disabled.");let i=n==="safeTransferFrom"?[f[1]]:f[1],a=n==="safeTransferFrom"?[f[2]]:f[2];if(!i.length||i.length>8||i.length!==a.length||new Set(i.map(String)).size!==i.length||i.some((o,u)=>o<=0n||a[u]<=0n||u>0&&o<=i[u-1]))throw new s("Use at most eight unique positive series IDs in increasing order and exact positive counts.");for(let o=0;o<i.length;o++){if(await p(r,"balanceOf",[c,i[o]])<a[o])throw new s("Card transfer exceeds this wallet\u2019s balance.");P.push($(c,c,e,i[o],a[o])),l.inputs.push({token:r.address,id:i[o],amount:a[o],to:e,exact:!0})}l.decision=`Transfer whole cards of collection ${r.address}: ${i.map((o,u)=>`series ${o} count ${a[u]}`).join(", ")} to ${e}. Basis does not travel with cards; no operator approval. No payout; transfer is irreversible. ETH gas extra.`,f=[c,...f,"0x"]}else if(["buy","cashOut","claimExpiry","refund"].includes(n)){let e=f[0],t=f[1],i=await p(r,"seriesOf",[e]);if(!i||i.asset===x||t<=0n)throw new s("Choose a known series and positive whole-card count.");let a=i.side===0?g(i.asset):S.mainnet.usdg,o=await k.readContract({address:a,abi:V,functionName:"decimals",blockNumber:w.number});if((n==="buy"||n==="cashOut")&&(i.state!==1||w.timestamp>=i.expiry))throw new s("This TURBO series is not OPEN and unexpired.");if(n==="buy"){let[u]=await p(r,"quoteBuy",[e,t]);if(!u||u>f[2])throw new s("Current card quote exceeds the explicit maximum USDG payment.");if(d.minimum!==void 0||d.allowZeroPayout!==void 0)throw new s("Buy uses its exact count and maximum USDG price.");l.decision=`Spend at most ${f[2]} USDG base units (${S.mainnet.usdg}, decimals 6) at ${r.address}; receive ${t} whole cards, collection ${r.address}, series ${e}, into this wallet. Exact quoted approval ${u}; fees included. Strike ${i.strikeWad} WAD; expiry ${new Date(Number(i.expiry)*1e3).toISOString()}; cards can lose all value. Any residual USDG allowance requires zero cleanup. ETH gas extra.`,D(S.mainnet.usdg,u),P=[$(c,x,c,e,t)]}else{if(n==="cashOut"&&d.minimum!==void 0)throw new s("cashOut takes its one encoded minimum in values, not a second local minimum.");if(await p(r,"balanceOf",[c,e])<t)throw new s("Card burn exceeds this wallet\u2019s balance.");let u=n==="cashOut"?f[2]:E(d.minimum,!0);if(u===0n&&d.allowZeroPayout!==!0)throw new s("A zero payout floor requires allowZeroPayout:true and explicit human confirmation.");let b=0n;if(n==="cashOut"){let y=await p(r,"quoteCashOut",[e,t,c]);if(y[0]<u)throw new s("The current cash-out quote misses the payout minimum.");b=y[1]}else if(i.state!==(n==="claimExpiry"?3:4))throw new s("Expiry claims require EXPIRED; pro-rata refunds require VOID.");l.decision=`Burn ${t} whole cards of ${r.address}, series ${e}; ${n==="refund"?"series pro-rata VOID refund, not personal purchase-price repayment":n}; receive >=${u} base units of ${a} (decimals ${o}) into this wallet. ${n==="cashOut"?`Minimum encoded in calldata; current performance fee ${b}.`:"Floor is local simulation only; no on-chain minimum. Settled payout includes applicable fees."} Burned cards cannot be returned; ETH gas extra.`,P=[$(c,c,x,e,t)],l.inputs.push({token:r.address,id:e,amount:t,to:x,exact:!0}),l.receipt={token:a,minimum:u,recipient:c,enforcement:n==="cashOut"?"calldata":"simulation"}}}else{if(d.minimum!==void 0||d.allowZeroPayout!==void 0)throw new s("This TURBO operation has no caller payout floor.");if(["withdrawHouse","withdrawPutPot","createSeries","resumeSales"].includes(n)&&!A(O,c))throw new s(`This TURBO operation requires manager ${O}.`);if(n==="haltSales"&&!A(c,O)&&!A(c,g(await p(r,"halter"))))throw new s("TURBO haltSales requires the current manager or halter.");if(["depositHouse","depositPutPot","withdrawHouse","withdrawPutPot","createSeries"].includes(n)){let t=g(f[0]);if(!(await Promise.all(["asset0","asset1","asset2"].map(a=>p(r,a)))).some(a=>typeof a=="string"&&A(a,t)))throw new s("This is not a pinned TURBO reserve asset.")}l.decision=`${n} at ${r.address}; values ${JSON.stringify(f,(t,i)=>typeof i=="bigint"?String(i):i)}. Protocol capital/accounting action; manager ${O}; sleeve ${L}; no caller reward. ${n.startsWith("deposit")?"Irreversible house funding; no personal withdrawable balance.":n.startsWith("withdraw")?"Pays the current manager; operating and reservation floors still apply.":"Series state, risk or protocol fee allocation may change."} No card approval; ETH gas extra.`,(n==="depositHouse"||n==="depositPutPot")&&D(n==="depositHouse"?g(f[0]):S.mainnet.usdg,f[1])}if(l.decision.length>1024)throw new s("Card decision terms exceed the complete confirmation label capacity. Use fewer card IDs.");T(r.address,r.abi,n,f,P);for(let e of l.txs)e.description=l.decision;return l}export{J as a,X as b,Q as c,de as d};
1
+ import{b as W}from"./XSRIJUFU.js";import{d as R,e as _}from"./XV6F3RET.js";import{b as z,c as I}from"./SPRVVJXI.js";import{K as E}from"./DHUDSOGR.js";import{a as F}from"./43LI5NKJ.js";import{d as H,g as A,i as j}from"./NWNYJ26T.js";import{a as C,s as S}from"./FWD4L3CJ.js";import{a as s}from"./XSD5NL7J.js";import{encodeFunctionData as M,erc20Abi as V,getAddress as Z,keccak256 as K,zeroAddress as x}from"viem";var r=R.turbo,h=R.blackjack,g=m=>j(m,"Provide an explicit card address.",H);function G(m,d){if(/^uint\d*\[\]$/.test(m.type)&&Array.isArray(d))return d.map(c=>G({...m,type:m.type.slice(0,-2)},c));if(/^uint\d*$/.test(m.type)&&(typeof d!="string"||!/^(0|[1-9]\d*)$/.test(d)))throw new s("Card integers must be canonical decimal strings, without leading zeros.");return W(m,d)}var J=["buy","cashOut","claimExpiry","refund","safeTransferFrom","safeBatchTransferFrom"],X=["liquidate","recordKnock","liquidateKnock","clearKnock","recordDrift","settle","markVoid","depositHouse","depositPutPot","withdrawHouse","withdrawPutPot","createSeries","haltSales","resumeSales","sweepFees","skim"],Q=m=>m==="netnet_turbo_action"||m.startsWith("netnet_blackjack_")&&["netnet_blackjack_finalize","netnet_blackjack_expire","netnet_blackjack_claim"].includes(m);async function de(m,d,c,k){if(F(c),!Q(m))throw new s("No local NetNet card action builder exists.");let v=m!=="netnet_turbo_action";if(Object.keys(d).some(e=>!(v?["sessionId","seriesId"]:["operation","values","minimum","allowZeroPayout"]).includes(e)))throw new s("Unexpected card action argument.");if(v&&!z(m,d))throw new s("Recovery accepts exactly one positive decimal session or series ID.");if(await k.getChainId()!==C)throw new s("NetNet cards require chain 4663.");let w=await k.getBlock();if(w.number===null||!w.hash)throw new s("Card action block is unavailable.");let p=(e,t,i=[])=>k.readContract({address:e.address,abi:e.abi,functionName:t,args:i,blockNumber:w.number});for(let e of v?[r,h]:[r]){let t=await k.getCode({address:e.address,blockNumber:w.number});if(!t||K(t)!==e.codeHash)throw new s("NetNet card runtime changed or is unavailable. Requalify this deployment before signing.")}for(let e of v?Object.values(_):[_.turbo]){let t=await k.getCode({address:Z(e.address),blockNumber:w.number});if(!t||K(t)!==e.codeHash)throw new s("NetNet linked card library changed or is unavailable. Requalify before signing.")}let l={txs:[],inputs:[],cards:[],decision:"",blockNumber:w.number,blockHash:w.hash},$=(e,t,i,a,o)=>({chainId:4663,collection:r.address,operator:e,from:t,to:i,id:a,amount:o,operation:t===x?"mint":i===x?"burn":"transfer"}),T=(e,t,i,a,o=[])=>{l.txs.push({to:e,chainId:C,value:"0",data:M({abi:t,functionName:i,args:a}),description:l.decision}),l.cards.push(o)},D=(e,t)=>{if(t<=0n||t>=1n<<128n)throw new s("Card payment must be positive and below the exact-approval ceiling.");l.inputs.push({token:e,amount:t,to:r.address}),T(e,V,"approve",[r.address,t])};if(v){if(g(await p(h,"cards"))!==r.address||g(await p(h,"turbo"))!==r.address)throw new s("Blackjack card wiring changed.");let e=m==="netnet_blackjack_claim";if(Object.keys(d).some(b=>b!==(e?"seriesId":"sessionId")))throw new s("Recovery accepts only its one exact session or series ID.");let t=E(e?d.seriesId:d.sessionId),i,a,o,u="Original-series parked payout; self-claim only.";if(e){if(i=t,a=await p(h,"unclaimedChips",[t,c]),o="claimUnclaimedChips",a===0n)throw new s("This wallet has no parked chips for that series.")}else{let b=await p(h,"sessionOf",[t]);if(!b||!A(b.player,c))throw new s("Recovery is limited to this wallet\u2019s recorded blackjack session.");let y=m==="netnet_blackjack_finalize";if(o=y?"finalize":"expireSession",b.state!==(y?2:1))throw new s(y?"Session is not Closing. Use its current on-chain state to choose recovery.":"Session is not Open. A Closing session uses finalize after its challenge window.");let N=y?b.closeAt:b.deadline;if(u=y?`Challenge ends ${new Date(Number(N)*1e3).toISOString()}.`:`Session deadline ${new Date(Number(N)*1e3).toISOString()}; player-only expiry until ${new Date(Number(N+3600n)*1e3).toISOString()}.`,w.timestamp<N)throw new s(`Recovery is not due until ${N} Unix seconds.`);i=await p(h,"tableSeries"),a=b.chips}if(i<=0n||a<0n)throw new s("Blackjack recovery accounting is unavailable.");return l.decision=`${o} ${e?"series":"session"} ${t} at ${h.address}: return ${a} whole cards of collection ${r.address}, series ${i}, to ${Z(c)}. ${u} Last on-chain chips may omit off-chain winnings; cards may be worthless. A failed receiver parks the payout at ${h.address}; self-claim only. ETH gas extra.`,T(h.address,h.abi,o,[t],a===0n?[]:[$(h.address,h.address,c,i,a)]),l.recovery={...e?{}:{sessionId:t.toString()},seriesId:i.toString(),count:a.toString(),player:c,operation:o},l}let n=String(d.operation);if(n==="setApprovalForAll")throw new s(I.setApprovalForAll);if(["convertPremiums","convertSleeveFees"].includes(n))throw new s(I.conversion);if(![...J,...X].includes(n))throw new s("Choose a qualified finite TURBO operation.");if(!Array.isArray(d.values))throw new s("Provide ordered TURBO values using decimal integer strings.");let U=n==="safeTransferFrom"||n==="safeBatchTransferFrom",B=r.abi.find(e=>e.name===n),q=U?B.inputs.slice(1,-1):B.inputs;if(d.values.length!==q.length)throw new s("TURBO values do not match the exact operation inputs.");let f=q.map((e,t)=>G(e,d.values[t])),O=g(await p(r,"manager")),L=g(await p(r,"sleeve")),P=[];if(U){if(d.minimum!==void 0||d.allowZeroPayout!==void 0)throw new s("Transfer has no payout floor.");let e=g(f[0]);if(e===x||A(e,c))throw new s("Name a nonzero, non-self card recipient.");let t=await k.getCode({address:e,blockNumber:w.number});if(t&&t!=="0x")throw new s("Card transfer to a contract requires qualified credit and recovery. New blackjack seating remains disabled.");let i=n==="safeTransferFrom"?[f[1]]:f[1],a=n==="safeTransferFrom"?[f[2]]:f[2];if(!i.length||i.length>8||i.length!==a.length||new Set(i.map(String)).size!==i.length||i.some((o,u)=>o<=0n||a[u]<=0n||u>0&&o<=i[u-1]))throw new s("Use at most eight unique positive series IDs in increasing order and exact positive counts.");for(let o=0;o<i.length;o++){if(await p(r,"balanceOf",[c,i[o]])<a[o])throw new s("Card transfer exceeds this wallet\u2019s balance.");P.push($(c,c,e,i[o],a[o])),l.inputs.push({token:r.address,id:i[o],amount:a[o],to:e,exact:!0})}l.decision=`Transfer whole cards of collection ${r.address}: ${i.map((o,u)=>`series ${o} count ${a[u]}`).join(", ")} to ${e}. Basis does not travel with cards; no operator approval. No payout; transfer is irreversible. ETH gas extra.`,f=[c,...f,"0x"]}else if(["buy","cashOut","claimExpiry","refund"].includes(n)){let e=f[0],t=f[1],i=await p(r,"seriesOf",[e]);if(!i||i.asset===x||t<=0n)throw new s("Choose a known series and positive whole-card count.");let a=i.side===0?g(i.asset):S.mainnet.usdg,o=await k.readContract({address:a,abi:V,functionName:"decimals",blockNumber:w.number});if((n==="buy"||n==="cashOut")&&(i.state!==1||w.timestamp>=i.expiry))throw new s("This TURBO series is not OPEN and unexpired.");if(n==="buy"){let[u]=await p(r,"quoteBuy",[e,t]);if(!u||u>f[2])throw new s("Current card quote exceeds the explicit maximum USDG payment.");if(d.minimum!==void 0||d.allowZeroPayout!==void 0)throw new s("Buy uses its exact count and maximum USDG price.");l.decision=`Spend at most ${f[2]} USDG base units (${S.mainnet.usdg}, decimals 6) at ${r.address}; receive ${t} whole cards, collection ${r.address}, series ${e}, into this wallet. Exact quoted approval ${u}; fees included. Strike ${i.strikeWad} WAD; expiry ${new Date(Number(i.expiry)*1e3).toISOString()}; cards can lose all value. Any residual USDG allowance requires zero cleanup. ETH gas extra.`,D(S.mainnet.usdg,u),P=[$(c,x,c,e,t)]}else{if(n==="cashOut"&&d.minimum!==void 0)throw new s("cashOut takes its one encoded minimum in values, not a second local minimum.");if(await p(r,"balanceOf",[c,e])<t)throw new s("Card burn exceeds this wallet\u2019s balance.");let u=n==="cashOut"?f[2]:E(d.minimum,!0);if(u===0n&&d.allowZeroPayout!==!0)throw new s("A zero payout floor requires allowZeroPayout:true and explicit human confirmation.");let b=0n;if(n==="cashOut"){let y=await p(r,"quoteCashOut",[e,t,c]);if(y[0]<u)throw new s("The current cash-out quote misses the payout minimum.");b=y[1]}else if(i.state!==(n==="claimExpiry"?3:4))throw new s("Expiry claims require EXPIRED; pro-rata refunds require VOID.");l.decision=`Burn ${t} whole cards of ${r.address}, series ${e}; ${n==="refund"?"series pro-rata VOID refund, not personal purchase-price repayment":n}; receive >=${u} base units of ${a} (decimals ${o}) into this wallet. ${n==="cashOut"?`Minimum encoded in calldata; current performance fee ${b}.`:"Floor is local simulation only; no on-chain minimum. Settled payout includes applicable fees."} Burned cards cannot be returned; ETH gas extra.`,P=[$(c,c,x,e,t)],l.inputs.push({token:r.address,id:e,amount:t,to:x,exact:!0}),l.receipt={token:a,minimum:u,recipient:c,enforcement:n==="cashOut"?"calldata":"simulation"}}}else{if(d.minimum!==void 0||d.allowZeroPayout!==void 0)throw new s("This TURBO operation has no caller payout floor.");if(["withdrawHouse","withdrawPutPot","createSeries","resumeSales"].includes(n)&&!A(O,c))throw new s(`This TURBO operation requires manager ${O}.`);if(n==="haltSales"&&!A(c,O)&&!A(c,g(await p(r,"halter"))))throw new s("TURBO haltSales requires the current manager or halter.");if(["depositHouse","depositPutPot","withdrawHouse","withdrawPutPot","createSeries"].includes(n)){let t=g(f[0]);if(!(await Promise.all(["asset0","asset1","asset2"].map(a=>p(r,a)))).some(a=>typeof a=="string"&&A(a,t)))throw new s("This is not a pinned TURBO reserve asset.")}l.decision=`${n} at ${r.address}; values ${JSON.stringify(f,(t,i)=>typeof i=="bigint"?String(i):i)}. Protocol capital/accounting action; manager ${O}; sleeve ${L}; no caller reward. ${n.startsWith("deposit")?"Irreversible house funding; no personal withdrawable balance.":n.startsWith("withdraw")?"Pays the current manager; operating and reservation floors still apply.":"Series state, risk or protocol fee allocation may change."} No card approval; ETH gas extra.`,(n==="depositHouse"||n==="depositPutPot")&&D(n==="depositHouse"?g(f[0]):S.mainnet.usdg,f[1])}if(l.decision.length>1024)throw new s("Card decision terms exceed the complete confirmation label capacity. Use fewer card IDs.");T(r.address,r.abi,n,f,P);for(let e of l.txs)e.description=l.decision;return l}export{J as a,X as b,Q as c,de as d};
@@ -1 +1 @@
1
- import{b as B}from"./BK23XJXE.js";import{a as te,d as ne,e as oe}from"./OFI3Y55L.js";import{d as re}from"./NDW5DAFL.js";import{b as T}from"./HTXKERNS.js";import{a as f,b as H,c as ee}from"./PBQSJSZO.js";import{c as z}from"./YHRUAQQK.js";import{a as o,d as q}from"./UP7FBDMJ.js";import{a as x,i as $,w as U,x as y,y as Z,z as J}from"./FWD4L3CJ.js";import{a as r}from"./XSD5NL7J.js";import{decodeFunctionData as R,encodeFunctionData as L,parseAbi as se}from"viem";var we=60,G=50,Qe=200;var Ae="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",W="0x0000000000000000000000000000000000000000",P=$[4663].routes.kyberswap.address,Q=$[4663].routes.velora.address,X=U[4663].kyberswap.toLowerCase(),ie=U[4663].velora.toLowerCase(),ge="0x0000000000000000000000000000000000000000000000000000000000000000",_=se(["function swap((address callTarget, address approveTarget, bytes targetData, (address srcToken, address dstToken, address[] srcReceivers, uint256[] srcAmounts, address[] feeReceivers, uint256[] feeAmounts, address dstReceiver, uint256 amount, uint256 minReturnAmount, uint256 flags, bytes permit) desc, bytes clientData) execution) payable returns (uint256 returnAmount, uint256 gasUsed)"]),N=se(["function swapExactAmountIn(address executor, (address srcToken, address destToken, uint256 fromAmount, uint256 toAmount, uint256 quotedAmount, bytes32 metadata, address beneficiary) swapData, uint256 partnerAndFee, bytes permit, bytes executorData) payable returns (uint256 receivedAmount, uint256 submittedAmount, uint256 augustusFeeAmount)"]),D=class extends r{name="NoRouteError";constructor(t="No swap route is available for this token pair and amount."){super(t)}},F=class extends r{name="ExpiredQuoteError";constructor(t="Quote has expired. Request a fresh quote."){super(t)}},ve=1e3,h=new Map;function ue(e){for(let[t,n]of h)BigInt(e)>=o(n.expiresAt)&&h.delete(t)}function K(e){return{...e,...e.sourcePoolRoute!==void 0?{sourcePoolRoute:structuredClone(e.sourcePoolRoute)}:{},...e.txs?{txs:e.txs.map(t=>({...t}))}:{}}}function ae(e){let t=K(e);return t.txs&&(t.txs.forEach(Object.freeze),Object.freeze(t.txs)),Object.freeze(t)}var Se=["router","from","to","wallet","amountIn","amountOut","minAmountOut","expiresAt","chainId","spender","value","ponsCurveToken","ponsPoolToken","blockNumber","calldataMinAmountOut","expectedSpend","expectedRefund"];function M(e,t,n=!1){for(let s of Se)if(!(s==="expiresAt"&&n&&o(e.expiresAt)<=o(t.expiresAt))&&e[s]!==void 0&&String(e[s]).toLowerCase()!==String(t[s]).toLowerCase())throw new r(`Quote ${s} does not match the accepted quote.`)}function V(e=Date.now){let t=e();if(!Number.isFinite(t)||t<0)throw new r("Clock must return a non-negative timestamp.");return t>1e11?Math.floor(t/1e3):Math.floor(t)}function C(e){let t=e.toLowerCase();return t===Ae.toLowerCase()||t===W.toLowerCase()}function he(e,t=G){if(!Number.isInteger(t)||t<0||t>=1e4)throw new r("Slippage must be an integer from 0 to 9999 bps.");return q(e,String(1e4-t),"10000","floor")}var be=200;function _e(e){if(typeof e!="number"||!Number.isFinite(e)||!/^\d+(?:\.\d{1,2})?$/.test(String(e)))throw new r("Velora returned an unsupported venue fee. Request a fresh quote.");let[t,n=""]=String(e).split("."),s=Number(t)*100+Number(n.padEnd(2,"0"));return Y(s),s}function Y(e){if(!Number.isInteger(e)||e<0||e>be)throw new r("Velora returned an unsupported venue fee. Request a fresh quote.")}function de(e,t=1){return Y(t),o(e)*10000n/BigInt(1e4-t)+1n}function Oe(e,t){Y(t);let n=e>>96n,s=Z>>96n,a=0x3fffn,d=1n<<92n,l=e&(1n<<96n)-1n;if(n!==s&&!(n===0n&&t===0)||(l&a)!==BigInt(t)||(l&~(d|a))!==0n)throw new r("Velora partnerAndFee must match the accepted venue fee and recipient.")}function ce(e){if(e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak charges 0 swap fee; venue fees must never be counted as Oak income.");let t=e.provider??"venue";return`Venue fee: ${e.venueFee} base units (${e.venueFeeBps} bps) retained by ${t}; Oak swap fee: 0 (venue fee is never Oak income).`}function xe(e){f(e.from),f(e.to),f(e.wallet);let t=e.callTarget??y[x].kyberswap.address,n=e.approveTarget??W;f(t),f(n);let s=o(e.amountIn),a=o(e.minAmountOut);return L({abi:_,functionName:"swap",args:[{callTarget:t,approveTarget:n,targetData:e.targetData??"0x",desc:{srcToken:e.from,dstToken:e.to,srcReceivers:C(e.from)?[]:[t],srcAmounts:C(e.from)?[]:[s],feeReceivers:[],feeAmounts:[],dstReceiver:e.wallet,amount:s,minReturnAmount:a,flags:0n,permit:"0x"},clientData:e.clientData??"0x"}]})}function Ie(e){f(e.from),f(e.to),f(e.wallet);let t=e.executor??y[x].velora.address;return f(t),L({abi:N,functionName:"swapExactAmountIn",args:[t,{srcToken:e.from,destToken:e.to,fromAmount:o(e.amountIn),toAmount:o(e.minAmountOut),quotedAmount:o(e.amountOut),metadata:e.metadata??ge,beneficiary:e.wallet},e.partnerAndFee??0n,"0x",e.executorData??"0x"]})}function De(e){if(typeof e!="string"||!/^0x([0-9a-fA-F]{2})+$/.test(e)||e.length<10)throw new r("Swap calldata must contain a 4-byte function selector.");let t=e.slice(0,10).toLowerCase();if(t===X)return R({abi:_,data:e}).args[0].desc.minReturnAmount;if(t===ie)return R({abi:N,data:e}).args[1].toAmount;if(t==="0x3593564c")return ne(e).swap.amountOutMinimum;let n=R({abi:te,data:e});if(n.functionName==="buy"||n.functionName==="sell")return n.args[1];throw new r(`Unsupported swap router selector ${t}.`)}function le(e,t,n=!1){let s=o(t),a=De(e);if(a<=0n||s<=0n||a!==s&&!(n&&(a>s||e.slice(0,10).toLowerCase()===X&&a+1n===s)))throw new r(`Built swap calldata minimum output (${a}) does not match the accepted quote minimum (${s}).`);return a}function me(e,t){let{from:n,to:s,wallet:a,amountIn:d}=t;if(!n||!s||!a||d===void 0)throw new r("Accepted quote must include input, output, amount and wallet.");for(let u of[n,s,a,t.router,e.to])f(u);let l=(u,p,A)=>{if(u.toLowerCase()!==p.toLowerCase())throw new r(`Built swap ${A} does not match the accepted quote.`)};if(l(e.to,t.router,"router"),e.chainId!==(t.chainId??x))throw new r("Built swap chain does not match the accepted quote.");let g=C(n)?o(d):0n;if(o(e.value)!==g||t.value!==void 0&&o(t.value)!==g)throw new r("Built swap value does not match the accepted quote input.");let w=e.data.slice(0,10).toLowerCase(),i=t.router.toLowerCase(),c;if(i===P.toLowerCase()&&w===X){l(t.spender??t.router,P,"spender");let u=R({abi:_,data:e.data});if(L({abi:_,...u}).toLowerCase()!==e.data.toLowerCase())throw new r("KyberSwap calldata must be canonically decodable.");let{callTarget:p,approveTarget:A,desc:m}=u.args[0];l(p,y[x].kyberswap.address,"executor"),l(A,W,"executor approval target");let b=C(n);if(m.srcReceivers.length!==m.srcAmounts.length||(b?m.srcReceivers.length!==0:m.srcReceivers.length===0||m.srcAmounts.some(v=>v<=0n)||m.srcAmounts.reduce((v,S)=>v+S,0n)!==o(d)))throw new r("KyberSwap source transfers must send the exact input to the pinned executor or verified input pool.");for(let v of m.srcReceivers)if(v.toLowerCase()!==p.toLowerCase()&&!re(n,v,e.data))throw new r(`KyberSwap source transfers: receiver ${v} is not a verified input pool or the pinned executor.`);if(m.feeReceivers.length||m.feeAmounts.length||m.flags!==0n&&m.flags!==512n||m.permit!=="0x")throw new r("KyberSwap fee recipients, fee amounts, flags and permit must match the pinned zero-fee policy.");c={from:m.srcToken,to:m.dstToken,wallet:m.dstReceiver,amount:m.amount}}else if(i===Q.toLowerCase()&&w===ie){l(t.spender??t.router,Q,"spender");let u=R({abi:N,data:e.data});if(L({abi:N,...u}).toLowerCase()!==e.data.toLowerCase())throw new r("Velora calldata must be canonically decodable.");let[p,A,m,b]=u.args;if(!J.some(v=>v.toLowerCase()===p.toLowerCase()))throw new r("Built swap executor does not match the accepted quote.");if(b!=="0x")throw new r("Velora permit must match the pinned empty-permit policy.");if((t.calldataMinAmountOut!==void 0||m!==0n)&&Oe(m,t.venueFeeBps??0),t.calldataMinAmountOut!==void 0&&o(t.calldataMinAmountOut)!==de(t.minAmountOut,t.venueFeeBps??1))throw new r("Velora calldata minimum must cover the accepted net output, venue fee and router dust.");if(t.calldataMinAmountOut!==void 0&&(A.quotedAmount!==o(t.grossAmountOut??"0")||A.quotedAmount<o(t.calldataMinAmountOut)))throw new r("Velora quoted gross output must match the accepted quote and cover its calldata minimum.");if(m!==0n&&t.calldataMinAmountOut===void 0)throw new r("Velora venue fee requires a fee-adjusted calldata minimum.");c={from:A.srcToken,to:A.destToken,wallet:A.beneficiary,amount:A.fromAmount}}else if(t.provider==="pons"&&(t.ponsPoolToken||t.ponsCurveToken))c=oe(e,{...t,from:n,to:s,wallet:a});else throw new r("Built swap selector does not match the accepted router.");if(l(c.from,n,"input token"),l(c.to,s,"output token"),l(c.wallet,a,"recipient"),c.amount!==o(d))throw new r("Built swap input amount does not match the accepted quote.");le(e.data,t.calldataMinAmountOut??t.minAmountOut,i===P.toLowerCase())}function j(e,t={}){if(!e||typeof e.quoteId!="string"||!e.quoteId.trim())throw new r("Quote must include a non-empty quoteId.");if(f(e.router),e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak charges 0 swap fee; venue fees must never be counted as Oak income.");let n=o(e.amountOut),s=e.destAmountAfterFee??e.netAmountOut,a,d,l;if(s!==void 0){if(d=o(s),a=e.grossAmountOut!==void 0?o(e.grossAmountOut):n>=d?n:d,a<d)throw new r("Gross output cannot be less than net output.");l=e.venueFee!==void 0?o(e.venueFee):a-d}else if(e.grossAmountOut!==void 0){if(a=o(e.grossAmountOut),d=n,a<d)throw new r("Gross output cannot be less than net output.");l=e.venueFee!==void 0?o(e.venueFee):a-d}else e.venueFee!==void 0?(l=o(e.venueFee),d=n,a=d+l):(d=n,a=n,l=0n);if(d<=0n)throw new D("Quote output amount must be positive.");let g=t.slippageBps??e.slippageBps??G,w=e.minAmountOut!==void 0?o(e.minAmountOut):o(he(d.toString(),g));if(w<=0n||w>a)throw new r("Quote minAmountOut must be positive and not exceed gross output.");if((t.provider??e.provider)==="velora"&&e.calldataMinAmountOut!==void 0){if(o(e.calldataMinAmountOut)!==de(w.toString(),e.venueFeeBps??1)||o(e.calldataMinAmountOut)>a)throw new r("Velora calldata minimum must cover the accepted net output, venue fee and router dust.")}else if(e.calldataMinAmountOut!==void 0||e.ponsCurveToken!==void 0){if((t.provider??e.provider)!=="pons"||!e.ponsCurveToken)throw new r("Curve minimum requires a Pons curve quote.");f(e.ponsCurveToken);let O=o(t.amountIn??e.amountIn??"0"),I=o(e.expectedSpend??"0"),pe=o(e.expectedRefund??"0"),fe=o(e.calldataMinAmountOut??"0");if(O<=0n||I<=0n||I+pe!==O||fe*I/O!==w)throw new r("Pons actual minimum and refund do not match the encoded minimum.")}let i=V(t.now),c=BigInt(i+we),u=e.expiresAt!==void 0?o(e.expiresAt):c,p=(u>c?c:u).toString(),A=l.toString(),m=e.venueFeeBps??(a>0n&&l>0n?Number((l*10000n+a/2n)/a):0),b=t.provider??e.provider??(e.router.toLowerCase()===Q.toLowerCase()?"velora":"kyberswap"),v=b==="pons"&&e.feeDisclosure?e.feeDisclosure:ce({provider:b,venueFee:A,venueFeeBps:m,oakFee:"0"}),S={...e,quoteId:e.quoteId,amountOut:d.toString(),minAmountOut:w.toString(),router:e.router,expiresAt:p,provider:b,grossAmountOut:a.toString(),destAmountAfterFee:d.toString(),netAmountOut:d.toString(),venueFee:A,venueFeeBps:m,oakFee:"0",feeDisclosure:v,...t.from??e.from?{from:T(t.from??e.from)}:{},...t.to??e.to?{to:T(t.to??e.to)}:{},...t.amountIn??e.amountIn?{amountIn:t.amountIn??e.amountIn}:{},...t.wallet??e.wallet?{wallet:t.wallet??e.wallet}:{},slippageBps:g,chainId:t.chainId??e.chainId??x,spender:e.spender??e.router,...t.allowance??e.allowance?{allowance:t.allowance??e.allowance}:{}};if(BigInt(i)>=o(p))throw new F;if(t.cache===!1)return S;if(ue(i),BigInt(i)>=o(p))throw new F;let k=h.get(S.quoteId);if(k){M(S,k,!0);let O=ae({...k,expiresAt:S.expiresAt});return h.set(O.quoteId,O),K(O)}for(;h.size>=ve;)h.delete(h.keys().next().value);let E=ae(S);return h.set(E.quoteId,E),K(E)}async function Ne(e,t,n={}){e={...e},f(e.from),f(e.to),f(e.wallet),e.from=T(e.from),e.to=T(e.to);let s=o(e.amountIn);if(s<=0n)throw new r("Swap amountIn must be greater than zero.");let a=e.slippageBps??G;if(!Number.isInteger(a)||a<0||a>=1e4)throw new r("Slippage must be an integer from 0 to 9999 bps.");if(!Array.isArray(t)||t.length===0)throw new D;let d={from:e.from,to:e.to,amountIn:s.toString(),slippageBps:a},l=await Promise.allSettled(t.map(async i=>{let c=await(i.quotePrices??i.quote).call(i,{...d},e.wallet);return{quote:j(c,{provider:i.name,from:e.from,to:e.to,amountIn:s.toString(),wallet:e.wallet,slippageBps:a,chainId:e.chainId??x,allowance:e.allowance,now:e.now,cache:!1}),provider:i}})),g,w=[];for(let i of l)i.status==="rejected"&&(g??=z(i.reason)),i.status==="fulfilled"&&o(i.value.quote.expiresAt)>BigInt(V(e.now))&&w.push(i.value);if(w.length===0){let i=l.some(c=>c.status==="rejected"&&c.reason instanceof Error&&c.reason.message===B)&&l.every(c=>c.status==="rejected"&&(c.reason instanceof D||c.reason instanceof Error&&c.reason.message===B));throw g??new D(i?B:void 0)}w.sort((i,c)=>{let p=o(c.quote.amountOut)-o(i.quote.amountOut)||o(c.quote.minAmountOut)-o(i.quote.minAmountOut);return p>0n?1:p<0n?-1:0});for(let{quote:i,provider:c}of w)try{if(BigInt(V(e.now))>=o(i.expiresAt))continue;if(n.deferBuild||!c.prepareQuote)return j(i,{now:e.now});let u=await c.prepareQuote(i.quoteId,e.wallet);if(u.quoteId!==i.quoteId)throw new r("Prepared quote ID does not match the selected route.");if(M(u,i,!0),!u.data)throw new r("Selected route did not return swap calldata.");let p={...i,expiresAt:u.expiresAt,data:u.data,value:u.value,allowance:u.allowance??i.allowance};return me(H({to:p.router,data:u.data,value:u.value??"0",chainId:p.chainId??x,description:"Selected swap route"}),p),j(p,{now:e.now})}catch(u){g??=z(u);continue}throw g??new D}function Me(e,t={}){if(!e||typeof e.quoteId!="string"||!e.quoteId.trim())throw new r("Provide a valid quote to build a swap.");f(e.router);let n=h.get(e.quoteId),s=V(t.now);if(ue(s),!n||BigInt(s)>=o(n.expiresAt))throw h.delete(e.quoteId),new F;if(e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak charges 0 swap fee; venue fees must never be counted as Oak income.");M(e,n),M({...n,...t},n);let a=n.from,d=n.to,l=n.amountIn,g=n.wallet;if(!a||!d||!g||l===void 0)throw new r("Accepted quote must include input, output, amount and wallet.");let w=n.chainId??x,i=n.spender??n.router,c=t.allowance??e.allowance??n?.allowance??"0";f(a),f(d),f(g),f(i);let u=o(l);if(u<=0n)throw new r("Swap amountIn must be greater than zero.");let p=o(n.minAmountOut);if(p<=0n)throw new r("Swap minAmountOut must be greater than zero.");let A=e.router.toLowerCase()===Q.toLowerCase(),m=t.data??e.data??n?.data??(A?Ie({from:a,to:d,amountIn:u.toString(),amountOut:n.amountOut,minAmountOut:p.toString(),wallet:g}):xe({from:a,to:d,amountIn:u.toString(),minAmountOut:p.toString(),wallet:g}));le(m,n.calldataMinAmountOut??p.toString(),n.router.toLowerCase()===P.toLowerCase());let b=n.venueFee??"0",v=n.venueFeeBps??0,S=n.provider??(A?"velora":"kyberswap"),k=n.feeDisclosure??ce({provider:S,venueFee:b,venueFeeBps:v,oakFee:"0"}),E=C(a),O=t.value??e.value??n?.value??(E?u.toString():"0"),I=H({to:e.router,data:m,value:O,chainId:w,description:`Swap ${u} base units of ${a} for at least ${p} base units of ${d} via ${S} (${e.router}). ${k}`});return me(I,n),E||o(c)>=u?[I]:[ee(a,i,u.toString(),w),I]}export{we as a,G as b,Qe as c,Ae as d,W as e,_ as f,D as g,F as h,ve as i,K as j,ae as k,M as l,V as m,C as n,he as o,be as p,_e as q,de as r,Oe as s,ce as t,xe as u,Ie as v,De as w,le as x,me as y,j as z,Ne as A,Me as B};
1
+ import{b as B}from"./P5PYFK7L.js";import{a as te,d as ne,e as oe}from"./ZQAFFWDK.js";import{d as re}from"./WP6RHXGN.js";import{b as T}from"./QHBS3PVU.js";import{a as f,b as H,c as ee}from"./43LI5NKJ.js";import{c as z}from"./OTXSKFUD.js";import{b as o,e as q}from"./IX3GZMTM.js";import{a as x,i as $,w as U,x as y,y as Z,z as J}from"./FWD4L3CJ.js";import{a as r}from"./XSD5NL7J.js";import{decodeFunctionData as R,encodeFunctionData as L,parseAbi as se}from"viem";var we=60,G=50,Qe=200;var Ae="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",W="0x0000000000000000000000000000000000000000",P=$[4663].routes.kyberswap.address,Q=$[4663].routes.velora.address,X=U[4663].kyberswap.toLowerCase(),ie=U[4663].velora.toLowerCase(),ge="0x0000000000000000000000000000000000000000000000000000000000000000",_=se(["function swap((address callTarget, address approveTarget, bytes targetData, (address srcToken, address dstToken, address[] srcReceivers, uint256[] srcAmounts, address[] feeReceivers, uint256[] feeAmounts, address dstReceiver, uint256 amount, uint256 minReturnAmount, uint256 flags, bytes permit) desc, bytes clientData) execution) payable returns (uint256 returnAmount, uint256 gasUsed)"]),N=se(["function swapExactAmountIn(address executor, (address srcToken, address destToken, uint256 fromAmount, uint256 toAmount, uint256 quotedAmount, bytes32 metadata, address beneficiary) swapData, uint256 partnerAndFee, bytes permit, bytes executorData) payable returns (uint256 receivedAmount, uint256 submittedAmount, uint256 augustusFeeAmount)"]),D=class extends r{name="NoRouteError";constructor(t="No swap route is available for this token pair and amount."){super(t)}},F=class extends r{name="ExpiredQuoteError";constructor(t="Quote has expired. Request a fresh quote."){super(t)}},ve=1e3,h=new Map;function ue(e){for(let[t,n]of h)BigInt(e)>=o(n.expiresAt)&&h.delete(t)}function K(e){return{...e,...e.sourcePoolRoute!==void 0?{sourcePoolRoute:structuredClone(e.sourcePoolRoute)}:{},...e.txs?{txs:e.txs.map(t=>({...t}))}:{}}}function ae(e){let t=K(e);return t.txs&&(t.txs.forEach(Object.freeze),Object.freeze(t.txs)),Object.freeze(t)}var Se=["router","from","to","wallet","amountIn","amountOut","minAmountOut","expiresAt","chainId","spender","value","ponsCurveToken","ponsPoolToken","blockNumber","calldataMinAmountOut","expectedSpend","expectedRefund"];function M(e,t,n=!1){for(let s of Se)if(!(s==="expiresAt"&&n&&o(e.expiresAt)<=o(t.expiresAt))&&e[s]!==void 0&&String(e[s]).toLowerCase()!==String(t[s]).toLowerCase())throw new r(`Quote ${s} does not match the accepted quote.`)}function V(e=Date.now){let t=e();if(!Number.isFinite(t)||t<0)throw new r("Clock must return a non-negative timestamp.");return t>1e11?Math.floor(t/1e3):Math.floor(t)}function C(e){let t=e.toLowerCase();return t===Ae.toLowerCase()||t===W.toLowerCase()}function he(e,t=G){if(!Number.isInteger(t)||t<0||t>=1e4)throw new r("Slippage must be an integer from 0 to 9999 bps.");return q(e,String(1e4-t),"10000","floor")}var be=200;function _e(e){if(typeof e!="number"||!Number.isFinite(e)||!/^\d+(?:\.\d{1,2})?$/.test(String(e)))throw new r("Velora returned an unsupported venue fee. Request a fresh quote.");let[t,n=""]=String(e).split("."),s=Number(t)*100+Number(n.padEnd(2,"0"));return Y(s),s}function Y(e){if(!Number.isInteger(e)||e<0||e>be)throw new r("Velora returned an unsupported venue fee. Request a fresh quote.")}function de(e,t=1){return Y(t),o(e)*10000n/BigInt(1e4-t)+1n}function Oe(e,t){Y(t);let n=e>>96n,s=Z>>96n,a=0x3fffn,d=1n<<92n,l=e&(1n<<96n)-1n;if(n!==s&&!(n===0n&&t===0)||(l&a)!==BigInt(t)||(l&~(d|a))!==0n)throw new r("Velora partnerAndFee must match the accepted venue fee and recipient.")}function ce(e){if(e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak charges 0 swap fee; venue fees must never be counted as Oak income.");let t=e.provider??"venue";return`Venue fee: ${e.venueFee} base units (${e.venueFeeBps} bps) retained by ${t}; Oak swap fee: 0 (venue fee is never Oak income).`}function xe(e){f(e.from),f(e.to),f(e.wallet);let t=e.callTarget??y[x].kyberswap.address,n=e.approveTarget??W;f(t),f(n);let s=o(e.amountIn),a=o(e.minAmountOut);return L({abi:_,functionName:"swap",args:[{callTarget:t,approveTarget:n,targetData:e.targetData??"0x",desc:{srcToken:e.from,dstToken:e.to,srcReceivers:C(e.from)?[]:[t],srcAmounts:C(e.from)?[]:[s],feeReceivers:[],feeAmounts:[],dstReceiver:e.wallet,amount:s,minReturnAmount:a,flags:0n,permit:"0x"},clientData:e.clientData??"0x"}]})}function Ie(e){f(e.from),f(e.to),f(e.wallet);let t=e.executor??y[x].velora.address;return f(t),L({abi:N,functionName:"swapExactAmountIn",args:[t,{srcToken:e.from,destToken:e.to,fromAmount:o(e.amountIn),toAmount:o(e.minAmountOut),quotedAmount:o(e.amountOut),metadata:e.metadata??ge,beneficiary:e.wallet},e.partnerAndFee??0n,"0x",e.executorData??"0x"]})}function De(e){if(typeof e!="string"||!/^0x([0-9a-fA-F]{2})+$/.test(e)||e.length<10)throw new r("Swap calldata must contain a 4-byte function selector.");let t=e.slice(0,10).toLowerCase();if(t===X)return R({abi:_,data:e}).args[0].desc.minReturnAmount;if(t===ie)return R({abi:N,data:e}).args[1].toAmount;if(t==="0x3593564c")return ne(e).swap.amountOutMinimum;let n=R({abi:te,data:e});if(n.functionName==="buy"||n.functionName==="sell")return n.args[1];throw new r(`Unsupported swap router selector ${t}.`)}function le(e,t,n=!1){let s=o(t),a=De(e);if(a<=0n||s<=0n||a!==s&&!(n&&(a>s||e.slice(0,10).toLowerCase()===X&&a+1n===s)))throw new r(`Built swap calldata minimum output (${a}) does not match the accepted quote minimum (${s}).`);return a}function me(e,t){let{from:n,to:s,wallet:a,amountIn:d}=t;if(!n||!s||!a||d===void 0)throw new r("Accepted quote must include input, output, amount and wallet.");for(let u of[n,s,a,t.router,e.to])f(u);let l=(u,p,A)=>{if(u.toLowerCase()!==p.toLowerCase())throw new r(`Built swap ${A} does not match the accepted quote.`)};if(l(e.to,t.router,"router"),e.chainId!==(t.chainId??x))throw new r("Built swap chain does not match the accepted quote.");let g=C(n)?o(d):0n;if(o(e.value)!==g||t.value!==void 0&&o(t.value)!==g)throw new r("Built swap value does not match the accepted quote input.");let w=e.data.slice(0,10).toLowerCase(),i=t.router.toLowerCase(),c;if(i===P.toLowerCase()&&w===X){l(t.spender??t.router,P,"spender");let u=R({abi:_,data:e.data});if(L({abi:_,...u}).toLowerCase()!==e.data.toLowerCase())throw new r("KyberSwap calldata must be canonically decodable.");let{callTarget:p,approveTarget:A,desc:m}=u.args[0];l(p,y[x].kyberswap.address,"executor"),l(A,W,"executor approval target");let b=C(n);if(m.srcReceivers.length!==m.srcAmounts.length||(b?m.srcReceivers.length!==0:m.srcReceivers.length===0||m.srcAmounts.some(v=>v<=0n)||m.srcAmounts.reduce((v,S)=>v+S,0n)!==o(d)))throw new r("KyberSwap source transfers must send the exact input to the pinned executor or verified input pool.");for(let v of m.srcReceivers)if(v.toLowerCase()!==p.toLowerCase()&&!re(n,v,e.data))throw new r(`KyberSwap source transfers: receiver ${v} is not a verified input pool or the pinned executor.`);if(m.feeReceivers.length||m.feeAmounts.length||m.flags!==0n&&m.flags!==512n||m.permit!=="0x")throw new r("KyberSwap fee recipients, fee amounts, flags and permit must match the pinned zero-fee policy.");c={from:m.srcToken,to:m.dstToken,wallet:m.dstReceiver,amount:m.amount}}else if(i===Q.toLowerCase()&&w===ie){l(t.spender??t.router,Q,"spender");let u=R({abi:N,data:e.data});if(L({abi:N,...u}).toLowerCase()!==e.data.toLowerCase())throw new r("Velora calldata must be canonically decodable.");let[p,A,m,b]=u.args;if(!J.some(v=>v.toLowerCase()===p.toLowerCase()))throw new r("Built swap executor does not match the accepted quote.");if(b!=="0x")throw new r("Velora permit must match the pinned empty-permit policy.");if((t.calldataMinAmountOut!==void 0||m!==0n)&&Oe(m,t.venueFeeBps??0),t.calldataMinAmountOut!==void 0&&o(t.calldataMinAmountOut)!==de(t.minAmountOut,t.venueFeeBps??1))throw new r("Velora calldata minimum must cover the accepted net output, venue fee and router dust.");if(t.calldataMinAmountOut!==void 0&&(A.quotedAmount!==o(t.grossAmountOut??"0")||A.quotedAmount<o(t.calldataMinAmountOut)))throw new r("Velora quoted gross output must match the accepted quote and cover its calldata minimum.");if(m!==0n&&t.calldataMinAmountOut===void 0)throw new r("Velora venue fee requires a fee-adjusted calldata minimum.");c={from:A.srcToken,to:A.destToken,wallet:A.beneficiary,amount:A.fromAmount}}else if(t.provider==="pons"&&(t.ponsPoolToken||t.ponsCurveToken))c=oe(e,{...t,from:n,to:s,wallet:a});else throw new r("Built swap selector does not match the accepted router.");if(l(c.from,n,"input token"),l(c.to,s,"output token"),l(c.wallet,a,"recipient"),c.amount!==o(d))throw new r("Built swap input amount does not match the accepted quote.");le(e.data,t.calldataMinAmountOut??t.minAmountOut,i===P.toLowerCase())}function j(e,t={}){if(!e||typeof e.quoteId!="string"||!e.quoteId.trim())throw new r("Quote must include a non-empty quoteId.");if(f(e.router),e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak charges 0 swap fee; venue fees must never be counted as Oak income.");let n=o(e.amountOut),s=e.destAmountAfterFee??e.netAmountOut,a,d,l;if(s!==void 0){if(d=o(s),a=e.grossAmountOut!==void 0?o(e.grossAmountOut):n>=d?n:d,a<d)throw new r("Gross output cannot be less than net output.");l=e.venueFee!==void 0?o(e.venueFee):a-d}else if(e.grossAmountOut!==void 0){if(a=o(e.grossAmountOut),d=n,a<d)throw new r("Gross output cannot be less than net output.");l=e.venueFee!==void 0?o(e.venueFee):a-d}else e.venueFee!==void 0?(l=o(e.venueFee),d=n,a=d+l):(d=n,a=n,l=0n);if(d<=0n)throw new D("Quote output amount must be positive.");let g=t.slippageBps??e.slippageBps??G,w=e.minAmountOut!==void 0?o(e.minAmountOut):o(he(d.toString(),g));if(w<=0n||w>a)throw new r("Quote minAmountOut must be positive and not exceed gross output.");if((t.provider??e.provider)==="velora"&&e.calldataMinAmountOut!==void 0){if(o(e.calldataMinAmountOut)!==de(w.toString(),e.venueFeeBps??1)||o(e.calldataMinAmountOut)>a)throw new r("Velora calldata minimum must cover the accepted net output, venue fee and router dust.")}else if(e.calldataMinAmountOut!==void 0||e.ponsCurveToken!==void 0){if((t.provider??e.provider)!=="pons"||!e.ponsCurveToken)throw new r("Curve minimum requires a Pons curve quote.");f(e.ponsCurveToken);let O=o(t.amountIn??e.amountIn??"0"),I=o(e.expectedSpend??"0"),pe=o(e.expectedRefund??"0"),fe=o(e.calldataMinAmountOut??"0");if(O<=0n||I<=0n||I+pe!==O||fe*I/O!==w)throw new r("Pons actual minimum and refund do not match the encoded minimum.")}let i=V(t.now),c=BigInt(i+we),u=e.expiresAt!==void 0?o(e.expiresAt):c,p=(u>c?c:u).toString(),A=l.toString(),m=e.venueFeeBps??(a>0n&&l>0n?Number((l*10000n+a/2n)/a):0),b=t.provider??e.provider??(e.router.toLowerCase()===Q.toLowerCase()?"velora":"kyberswap"),v=b==="pons"&&e.feeDisclosure?e.feeDisclosure:ce({provider:b,venueFee:A,venueFeeBps:m,oakFee:"0"}),S={...e,quoteId:e.quoteId,amountOut:d.toString(),minAmountOut:w.toString(),router:e.router,expiresAt:p,provider:b,grossAmountOut:a.toString(),destAmountAfterFee:d.toString(),netAmountOut:d.toString(),venueFee:A,venueFeeBps:m,oakFee:"0",feeDisclosure:v,...t.from??e.from?{from:T(t.from??e.from)}:{},...t.to??e.to?{to:T(t.to??e.to)}:{},...t.amountIn??e.amountIn?{amountIn:t.amountIn??e.amountIn}:{},...t.wallet??e.wallet?{wallet:t.wallet??e.wallet}:{},slippageBps:g,chainId:t.chainId??e.chainId??x,spender:e.spender??e.router,...t.allowance??e.allowance?{allowance:t.allowance??e.allowance}:{}};if(BigInt(i)>=o(p))throw new F;if(t.cache===!1)return S;if(ue(i),BigInt(i)>=o(p))throw new F;let k=h.get(S.quoteId);if(k){M(S,k,!0);let O=ae({...k,expiresAt:S.expiresAt});return h.set(O.quoteId,O),K(O)}for(;h.size>=ve;)h.delete(h.keys().next().value);let E=ae(S);return h.set(E.quoteId,E),K(E)}async function Ne(e,t,n={}){e={...e},f(e.from),f(e.to),f(e.wallet),e.from=T(e.from),e.to=T(e.to);let s=o(e.amountIn);if(s<=0n)throw new r("Swap amountIn must be greater than zero.");let a=e.slippageBps??G;if(!Number.isInteger(a)||a<0||a>=1e4)throw new r("Slippage must be an integer from 0 to 9999 bps.");if(!Array.isArray(t)||t.length===0)throw new D;let d={from:e.from,to:e.to,amountIn:s.toString(),slippageBps:a},l=await Promise.allSettled(t.map(async i=>{let c=await(i.quotePrices??i.quote).call(i,{...d},e.wallet);return{quote:j(c,{provider:i.name,from:e.from,to:e.to,amountIn:s.toString(),wallet:e.wallet,slippageBps:a,chainId:e.chainId??x,allowance:e.allowance,now:e.now,cache:!1}),provider:i}})),g,w=[];for(let i of l)i.status==="rejected"&&(g??=z(i.reason)),i.status==="fulfilled"&&o(i.value.quote.expiresAt)>BigInt(V(e.now))&&w.push(i.value);if(w.length===0){let i=l.some(c=>c.status==="rejected"&&c.reason instanceof Error&&c.reason.message===B)&&l.every(c=>c.status==="rejected"&&(c.reason instanceof D||c.reason instanceof Error&&c.reason.message===B));throw g??new D(i?B:void 0)}w.sort((i,c)=>{let p=o(c.quote.amountOut)-o(i.quote.amountOut)||o(c.quote.minAmountOut)-o(i.quote.minAmountOut);return p>0n?1:p<0n?-1:0});for(let{quote:i,provider:c}of w)try{if(BigInt(V(e.now))>=o(i.expiresAt))continue;if(n.deferBuild||!c.prepareQuote)return j(i,{now:e.now});let u=await c.prepareQuote(i.quoteId,e.wallet);if(u.quoteId!==i.quoteId)throw new r("Prepared quote ID does not match the selected route.");if(M(u,i,!0),!u.data)throw new r("Selected route did not return swap calldata.");let p={...i,expiresAt:u.expiresAt,data:u.data,value:u.value,allowance:u.allowance??i.allowance};return me(H({to:p.router,data:u.data,value:u.value??"0",chainId:p.chainId??x,description:"Selected swap route"}),p),j(p,{now:e.now})}catch(u){g??=z(u);continue}throw g??new D}function Me(e,t={}){if(!e||typeof e.quoteId!="string"||!e.quoteId.trim())throw new r("Provide a valid quote to build a swap.");f(e.router);let n=h.get(e.quoteId),s=V(t.now);if(ue(s),!n||BigInt(s)>=o(n.expiresAt))throw h.delete(e.quoteId),new F;if(e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak charges 0 swap fee; venue fees must never be counted as Oak income.");M(e,n),M({...n,...t},n);let a=n.from,d=n.to,l=n.amountIn,g=n.wallet;if(!a||!d||!g||l===void 0)throw new r("Accepted quote must include input, output, amount and wallet.");let w=n.chainId??x,i=n.spender??n.router,c=t.allowance??e.allowance??n?.allowance??"0";f(a),f(d),f(g),f(i);let u=o(l);if(u<=0n)throw new r("Swap amountIn must be greater than zero.");let p=o(n.minAmountOut);if(p<=0n)throw new r("Swap minAmountOut must be greater than zero.");let A=e.router.toLowerCase()===Q.toLowerCase(),m=t.data??e.data??n?.data??(A?Ie({from:a,to:d,amountIn:u.toString(),amountOut:n.amountOut,minAmountOut:p.toString(),wallet:g}):xe({from:a,to:d,amountIn:u.toString(),minAmountOut:p.toString(),wallet:g}));le(m,n.calldataMinAmountOut??p.toString(),n.router.toLowerCase()===P.toLowerCase());let b=n.venueFee??"0",v=n.venueFeeBps??0,S=n.provider??(A?"velora":"kyberswap"),k=n.feeDisclosure??ce({provider:S,venueFee:b,venueFeeBps:v,oakFee:"0"}),E=C(a),O=t.value??e.value??n?.value??(E?u.toString():"0"),I=H({to:e.router,data:m,value:O,chainId:w,description:`Swap ${u} base units of ${a} for at least ${p} base units of ${d} via ${S} (${e.router}). ${k}`});return me(I,n),E||o(c)>=u?[I]:[ee(a,i,u.toString(),w),I]}export{we as a,G as b,Qe as c,Ae as d,W as e,_ as f,D as g,F as h,ve as i,K as j,ae as k,M as l,V as m,C as n,he as o,be as p,_e as q,de as r,Oe as s,ce as t,xe as u,Ie as v,De as w,le as x,me as y,j as z,Ne as A,Me as B};
@@ -1 +1 @@
1
- import{d as S,e as G,f as M,h as U,i as x,l as T,m as C,n as L,o as B,p as I,q as j,w as D,z as _}from"./WWHCEMNB.js";import{a as O,b as h}from"./X5V2Z2NM.js";import{a as N}from"./PBQSJSZO.js";import{c as F,g as A}from"./5KUWLUPM.js";import{a as p}from"./XSD5NL7J.js";import{a as $}from"./JXOEJPJ4.js";import{encodeFunctionData as q}from"viem";var z=10n**38n,W=`0x${"00".repeat(32)}`;function E(s,g){let k=s<0n,l=(k?-s:s).toString().padStart(g+1,"0"),P=l.slice(0,l.length-g),v=g?l.slice(l.length-g).replace(/0+$/,""):"";return`${k?"-":""}${P}${v?`.${v}`:""}`}var ie=s=>{let g=(e,a,i)=>({name:e,inputSchema:a,execute:async(t,n)=>{try{return N(n),L(s,t.chainId),await i(t,n)}catch(r){throw new p(s.plainError(r))}}}),k={transactionHash:{...G,description:"After local submission, repeat the same arguments with the mined hash to verify calldata, event and registry state."}},l=(e,a,i)=>s.clientFor(U(s).chainId).readContract({address:e,abi:h,functionName:a,args:i});async function P(e){let{chainId:a,registry:i}=U(s),t=await s.clientFor(a).readContract({address:i,abi:O,functionName:"ownerOf",args:[e]});return N(t),t}let v=e=>{if(typeof e!="string"||!/^[1-9][0-9]{0,18}$/.test(e)||BigInt(e)>=2n**64n)throw new p("Provide feedbackIndex as a decimal integer string of at least 1 (indexes are 1-based).");return BigInt(e)},X=g("erc8004_give_feedback",{type:"object",additionalProperties:!1,required:["agentId","value"],description:"Post public, permanent-by-hash feedback about an agent (ERC-8004 Reputation Registry giveFeedback). You cannot rate an agent you own or operate.",properties:{agentId:S,value:{type:"string",pattern:"^-?[0-9]+$",description:'Signed integer in fixed point, e.g. "87" with valueDecimals 0 is 87; "9977" with valueDecimals 2 is 99.77.'},valueDecimals:{type:"integer",minimum:0,maximum:18,default:0},tag1:{type:"string",description:"Optional filter tag such as starred, uptime, successRate, responseTime."},tag2:{type:"string"},endpoint:{type:"string",description:"Optional endpoint the feedback is about."},feedbackURI:{type:"string",description:"Optional HTTPS/IPFS URI of an off-chain feedback file."},feedbackHash:{...M,description:"keccak256 of the feedbackURI content; optional for IPFS, recommended for HTTPS."},...k}},async(e,a)=>{let{address:i}=x(s),t=T(e.agentId);if(typeof e.value!="string"||!/^-?[0-9]+$/.test(e.value))throw new p("Provide value as a signed integer string.");let n=BigInt(e.value);if(n>z||n<-z)throw new p("The feedback value is out of range (\xB11e38).");let r=e.valueDecimals===void 0?0:e.valueDecimals;if(typeof r!="number"||!Number.isInteger(r)||r<0||r>18)throw new p("valueDecimals must be an integer from 0 to 18.");let o=I(e.tag1,"tag1",128),b=I(e.tag2,"tag2",128),u=e.endpoint===void 0?"":I(e.endpoint,"endpoint",2048),f=e.feedbackURI===void 0?"":j(e.feedbackURI,"feedbackURI"),w=e.feedbackHash===void 0?W:B(e.feedbackHash,"feedbackHash"),R=q({abi:h,functionName:"giveFeedback",args:[t,n,r,o,b,u,f,w]});return _(s,a,e,{to:i,data:R,description:`Give feedback ${e.value}e-${r} to ERC-8004 agent ${t}.`,summary:`Publishes feedback ${E(n,r)} about agent ${t}${o?` (tag ${$(o)})`:""} from this wallet. Feedback is public and attributable to this wallet; it can be revoked later but never erased. Repeat with transactionHash to read back the feedback index.`,authority:async()=>{await P(t);let{registry:m,chainId:d}=U(s);if(await s.clientFor(d).readContract({address:m,abi:O,functionName:"isAuthorizedOrOwner",args:[a,t]})===!0)throw new p("The registry refuses feedback from the owner or an approved operator of the same agent.")},verify:async m=>{let d=D(m,i,h,"NewFeedback"),c=d.feedbackIndex,H=await l(i,"readFeedback",[t,a,c]);if(d.agentId!==t||!A(String(d.clientAddress),a)||d.value!==n||H[0]!==n||H[4])throw new p("The registry event or stored feedback does not match.");return{agentId:t.toString(),feedbackIndex:c.toString(),value:E(n,r),confirmed:!0}}})}),Y=g("erc8004_revoke_feedback",{type:"object",additionalProperties:!1,required:["agentId","feedbackIndex"],properties:{agentId:S,feedbackIndex:{type:"string",pattern:"^[1-9][0-9]*$",description:"1-based index from erc8004_give_feedback or erc8004_reputation."},...k}},async(e,a)=>{let{address:i}=x(s),t=T(e.agentId),n=v(e.feedbackIndex);return _(s,a,e,{to:i,data:q({abi:h,functionName:"revokeFeedback",args:[t,n]}),description:`Revoke feedback #${n} on ERC-8004 agent ${t}.`,summary:`Marks your feedback #${n} about agent ${t} as revoked. The original entry stays on-chain, flagged revoked. Repeat with transactionHash to verify.`,authority:async()=>{let r=await l(i,"getLastIndex",[t,a]);if(n>r)throw new p(`This wallet has given only ${r} feedback entries on agent ${t}.`);if((await l(i,"readFeedback",[t,a,n]))[4])throw new p("That feedback is already revoked.")},verify:async r=>{let o=D(r,i,h,"FeedbackRevoked"),b=await l(i,"readFeedback",[t,a,n]);if(o.agentId!==t||o.feedbackIndex!==n||!A(String(o.clientAddress),a)||!b[4])throw new p("The registry event or stored feedback does not show a revocation.");return{agentId:t.toString(),feedbackIndex:n.toString(),revoked:!0}}})}),Z=g("erc8004_append_response",{type:"object",additionalProperties:!1,required:["agentId","clientAddress","feedbackIndex","responseURI"],description:"Append a public response to a feedback entry (the agent showing a refund, or anyone tagging spam).",properties:{agentId:S,clientAddress:{...F,description:"The wallet that gave the feedback."},feedbackIndex:{type:"string",pattern:"^[1-9][0-9]*$"},responseURI:{type:"string",description:"HTTPS or IPFS URI of the response file."},responseHash:{...M,description:"keccak256 of the response content; optional for IPFS."},...k}},async(e,a)=>{let{address:i}=x(s),t=T(e.agentId),n=C(e.clientAddress,"clientAddress"),r=v(e.feedbackIndex),o=j(e.responseURI,"responseURI"),b=e.responseHash===void 0?W:B(e.responseHash,"responseHash");return _(s,a,e,{to:i,data:q({abi:h,functionName:"appendResponse",args:[t,n,r,o,b]}),description:`Append a response to feedback #${r} by ${n} on ERC-8004 agent ${t}.`,summary:`Publishes a response (${$(o)}) under feedback #${r} that ${n} gave agent ${t}, attributed to this wallet. Responses are append-only. Repeat with transactionHash to verify.`,authority:async()=>{let u=await l(i,"getLastIndex",[t,n]);if(r>u)throw new p(`${n} has given only ${u} feedback entries on agent ${t}.`)},verify:async u=>{let f=D(u,i,h,"ResponseAppended");if(f.agentId!==t||f.feedbackIndex!==r||!A(String(f.clientAddress),n)||!A(String(f.responder),a)||f.responseURI!==o)throw new p("The registry event does not match the response.");return{agentId:t.toString(),clientAddress:n,feedbackIndex:r.toString(),responder:a,confirmed:!0}}})}),J=g("erc8004_reputation",{type:"object",additionalProperties:!1,required:["agentId"],description:"Read-only: an agent's feedback summary and entries. Pass the reviewers you trust in clients; without it the summary counts every wallet, which anyone can spam.",properties:{agentId:S,clients:{type:"array",maxItems:200,items:F,description:"Reviewer wallets to count (recommended)."},tag1:{type:"string"},tag2:{type:"string"},includeRevoked:{type:"boolean",default:!1},limit:{type:"integer",minimum:1,maximum:200,default:50},clientAddress:{...F,description:"With feedbackIndex: also count responses to that one entry."},feedbackIndex:{type:"string",pattern:"^[1-9][0-9]*$"}}},async e=>{let{address:a}=x(s),i=T(e.agentId);await P(i);let t=I(e.tag1,"tag1",128),n=I(e.tag2,"tag2",128),r=typeof e.limit=="number"?Math.min(Math.max(1,Math.trunc(e.limit)),200):50,o=Array.isArray(e.clients)?e.clients.map(d=>C(d,"client")):void 0;if(o&&o.length>200)throw new p("Provide at most 200 reviewer wallets.");let b=o??await l(a,"getClients",[i]),u=b.slice(0,200),f={count:"0",value:"0",valueDecimals:0},w=[],R=0;if(u.length){let[d,c]=await Promise.all([l(a,"getSummary",[i,u,t,n]),l(a,"readAllFeedback",[i,u,t,n,e.includeRevoked===!0])]);f={count:d[0].toString(),value:E(d[1],d[2]),valueDecimals:d[2]},R=c[0].length,w=c[0].slice(0,r).map((H,y)=>({clientAddress:H,feedbackIndex:c[1][y].toString(),value:E(c[2][y],c[3][y]),valueDecimals:c[3][y],tag1:$(c[4][y]),tag2:$(c[5][y]),revoked:c[6][y]}))}let m;if(e.clientAddress!==void 0){let d=C(e.clientAddress,"clientAddress"),c=e.feedbackIndex===void 0?0n:v(e.feedbackIndex);m=(await l(a,"getResponseCount",[i,d,c,[]])).toString()}return{agentId:i.toString(),registry:a,clientsTotal:b.length,clientsUsed:u.length,filteredByClients:o!==void 0,summary:f,feedback:w,feedbackTotal:R,truncated:R>w.length||b.length>u.length,...m===void 0?{}:{responseCount:m},note:o?"Summary counts only the reviewers you named.":"Unfiltered: every reviewer wallet counts, and anyone can post feedback for free, so a high score is not evidence. Name trusted reviewers in clients for a meaningful score."}});return{tools:[X,Y,Z,J]}};export{E as a,ie as b};
1
+ import{d as S,e as G,f as M,h as U,i as x,l as T,m as C,n as L,o as B,p as I,q as j,w as D,z as _}from"./N4Q6GN65.js";import{a as O,b as h}from"./X5V2Z2NM.js";import{a as N}from"./43LI5NKJ.js";import{c as F,g as A}from"./NWNYJ26T.js";import{a as p}from"./XSD5NL7J.js";import{a as $}from"./JXOEJPJ4.js";import{encodeFunctionData as q}from"viem";var z=10n**38n,W=`0x${"00".repeat(32)}`;function E(s,g){let k=s<0n,l=(k?-s:s).toString().padStart(g+1,"0"),P=l.slice(0,l.length-g),v=g?l.slice(l.length-g).replace(/0+$/,""):"";return`${k?"-":""}${P}${v?`.${v}`:""}`}var ie=s=>{let g=(e,a,i)=>({name:e,inputSchema:a,execute:async(t,n)=>{try{return N(n),L(s,t.chainId),await i(t,n)}catch(r){throw new p(s.plainError(r))}}}),k={transactionHash:{...G,description:"After local submission, repeat the same arguments with the mined hash to verify calldata, event and registry state."}},l=(e,a,i)=>s.clientFor(U(s).chainId).readContract({address:e,abi:h,functionName:a,args:i});async function P(e){let{chainId:a,registry:i}=U(s),t=await s.clientFor(a).readContract({address:i,abi:O,functionName:"ownerOf",args:[e]});return N(t),t}let v=e=>{if(typeof e!="string"||!/^[1-9][0-9]{0,18}$/.test(e)||BigInt(e)>=2n**64n)throw new p("Provide feedbackIndex as a decimal integer string of at least 1 (indexes are 1-based).");return BigInt(e)},X=g("erc8004_give_feedback",{type:"object",additionalProperties:!1,required:["agentId","value"],description:"Post public, permanent-by-hash feedback about an agent (ERC-8004 Reputation Registry giveFeedback). You cannot rate an agent you own or operate.",properties:{agentId:S,value:{type:"string",pattern:"^-?[0-9]+$",description:'Signed integer in fixed point, e.g. "87" with valueDecimals 0 is 87; "9977" with valueDecimals 2 is 99.77.'},valueDecimals:{type:"integer",minimum:0,maximum:18,default:0},tag1:{type:"string",description:"Optional filter tag such as starred, uptime, successRate, responseTime."},tag2:{type:"string"},endpoint:{type:"string",description:"Optional endpoint the feedback is about."},feedbackURI:{type:"string",description:"Optional HTTPS/IPFS URI of an off-chain feedback file."},feedbackHash:{...M,description:"keccak256 of the feedbackURI content; optional for IPFS, recommended for HTTPS."},...k}},async(e,a)=>{let{address:i}=x(s),t=T(e.agentId);if(typeof e.value!="string"||!/^-?[0-9]+$/.test(e.value))throw new p("Provide value as a signed integer string.");let n=BigInt(e.value);if(n>z||n<-z)throw new p("The feedback value is out of range (\xB11e38).");let r=e.valueDecimals===void 0?0:e.valueDecimals;if(typeof r!="number"||!Number.isInteger(r)||r<0||r>18)throw new p("valueDecimals must be an integer from 0 to 18.");let o=I(e.tag1,"tag1",128),b=I(e.tag2,"tag2",128),u=e.endpoint===void 0?"":I(e.endpoint,"endpoint",2048),f=e.feedbackURI===void 0?"":j(e.feedbackURI,"feedbackURI"),w=e.feedbackHash===void 0?W:B(e.feedbackHash,"feedbackHash"),R=q({abi:h,functionName:"giveFeedback",args:[t,n,r,o,b,u,f,w]});return _(s,a,e,{to:i,data:R,description:`Give feedback ${e.value}e-${r} to ERC-8004 agent ${t}.`,summary:`Publishes feedback ${E(n,r)} about agent ${t}${o?` (tag ${$(o)})`:""} from this wallet. Feedback is public and attributable to this wallet; it can be revoked later but never erased. Repeat with transactionHash to read back the feedback index.`,authority:async()=>{await P(t);let{registry:m,chainId:d}=U(s);if(await s.clientFor(d).readContract({address:m,abi:O,functionName:"isAuthorizedOrOwner",args:[a,t]})===!0)throw new p("The registry refuses feedback from the owner or an approved operator of the same agent.")},verify:async m=>{let d=D(m,i,h,"NewFeedback"),c=d.feedbackIndex,H=await l(i,"readFeedback",[t,a,c]);if(d.agentId!==t||!A(String(d.clientAddress),a)||d.value!==n||H[0]!==n||H[4])throw new p("The registry event or stored feedback does not match.");return{agentId:t.toString(),feedbackIndex:c.toString(),value:E(n,r),confirmed:!0}}})}),Y=g("erc8004_revoke_feedback",{type:"object",additionalProperties:!1,required:["agentId","feedbackIndex"],properties:{agentId:S,feedbackIndex:{type:"string",pattern:"^[1-9][0-9]*$",description:"1-based index from erc8004_give_feedback or erc8004_reputation."},...k}},async(e,a)=>{let{address:i}=x(s),t=T(e.agentId),n=v(e.feedbackIndex);return _(s,a,e,{to:i,data:q({abi:h,functionName:"revokeFeedback",args:[t,n]}),description:`Revoke feedback #${n} on ERC-8004 agent ${t}.`,summary:`Marks your feedback #${n} about agent ${t} as revoked. The original entry stays on-chain, flagged revoked. Repeat with transactionHash to verify.`,authority:async()=>{let r=await l(i,"getLastIndex",[t,a]);if(n>r)throw new p(`This wallet has given only ${r} feedback entries on agent ${t}.`);if((await l(i,"readFeedback",[t,a,n]))[4])throw new p("That feedback is already revoked.")},verify:async r=>{let o=D(r,i,h,"FeedbackRevoked"),b=await l(i,"readFeedback",[t,a,n]);if(o.agentId!==t||o.feedbackIndex!==n||!A(String(o.clientAddress),a)||!b[4])throw new p("The registry event or stored feedback does not show a revocation.");return{agentId:t.toString(),feedbackIndex:n.toString(),revoked:!0}}})}),Z=g("erc8004_append_response",{type:"object",additionalProperties:!1,required:["agentId","clientAddress","feedbackIndex","responseURI"],description:"Append a public response to a feedback entry (the agent showing a refund, or anyone tagging spam).",properties:{agentId:S,clientAddress:{...F,description:"The wallet that gave the feedback."},feedbackIndex:{type:"string",pattern:"^[1-9][0-9]*$"},responseURI:{type:"string",description:"HTTPS or IPFS URI of the response file."},responseHash:{...M,description:"keccak256 of the response content; optional for IPFS."},...k}},async(e,a)=>{let{address:i}=x(s),t=T(e.agentId),n=C(e.clientAddress,"clientAddress"),r=v(e.feedbackIndex),o=j(e.responseURI,"responseURI"),b=e.responseHash===void 0?W:B(e.responseHash,"responseHash");return _(s,a,e,{to:i,data:q({abi:h,functionName:"appendResponse",args:[t,n,r,o,b]}),description:`Append a response to feedback #${r} by ${n} on ERC-8004 agent ${t}.`,summary:`Publishes a response (${$(o)}) under feedback #${r} that ${n} gave agent ${t}, attributed to this wallet. Responses are append-only. Repeat with transactionHash to verify.`,authority:async()=>{let u=await l(i,"getLastIndex",[t,n]);if(r>u)throw new p(`${n} has given only ${u} feedback entries on agent ${t}.`)},verify:async u=>{let f=D(u,i,h,"ResponseAppended");if(f.agentId!==t||f.feedbackIndex!==r||!A(String(f.clientAddress),n)||!A(String(f.responder),a)||f.responseURI!==o)throw new p("The registry event does not match the response.");return{agentId:t.toString(),clientAddress:n,feedbackIndex:r.toString(),responder:a,confirmed:!0}}})}),J=g("erc8004_reputation",{type:"object",additionalProperties:!1,required:["agentId"],description:"Read-only: an agent's feedback summary and entries. Pass the reviewers you trust in clients; without it the summary counts every wallet, which anyone can spam.",properties:{agentId:S,clients:{type:"array",maxItems:200,items:F,description:"Reviewer wallets to count (recommended)."},tag1:{type:"string"},tag2:{type:"string"},includeRevoked:{type:"boolean",default:!1},limit:{type:"integer",minimum:1,maximum:200,default:50},clientAddress:{...F,description:"With feedbackIndex: also count responses to that one entry."},feedbackIndex:{type:"string",pattern:"^[1-9][0-9]*$"}}},async e=>{let{address:a}=x(s),i=T(e.agentId);await P(i);let t=I(e.tag1,"tag1",128),n=I(e.tag2,"tag2",128),r=typeof e.limit=="number"?Math.min(Math.max(1,Math.trunc(e.limit)),200):50,o=Array.isArray(e.clients)?e.clients.map(d=>C(d,"client")):void 0;if(o&&o.length>200)throw new p("Provide at most 200 reviewer wallets.");let b=o??await l(a,"getClients",[i]),u=b.slice(0,200),f={count:"0",value:"0",valueDecimals:0},w=[],R=0;if(u.length){let[d,c]=await Promise.all([l(a,"getSummary",[i,u,t,n]),l(a,"readAllFeedback",[i,u,t,n,e.includeRevoked===!0])]);f={count:d[0].toString(),value:E(d[1],d[2]),valueDecimals:d[2]},R=c[0].length,w=c[0].slice(0,r).map((H,y)=>({clientAddress:H,feedbackIndex:c[1][y].toString(),value:E(c[2][y],c[3][y]),valueDecimals:c[3][y],tag1:$(c[4][y]),tag2:$(c[5][y]),revoked:c[6][y]}))}let m;if(e.clientAddress!==void 0){let d=C(e.clientAddress,"clientAddress"),c=e.feedbackIndex===void 0?0n:v(e.feedbackIndex);m=(await l(a,"getResponseCount",[i,d,c,[]])).toString()}return{agentId:i.toString(),registry:a,clientsTotal:b.length,clientsUsed:u.length,filteredByClients:o!==void 0,summary:f,feedback:w,feedbackTotal:R,truncated:R>w.length||b.length>u.length,...m===void 0?{}:{responseCount:m},note:o?"Summary counts only the reviewers you named.":"Unfiltered: every reviewer wallet counts, and anyone can post feedback for free, so a high score is not evidence. Name trusted reviewers in clients for a meaningful score."}});return{tools:[X,Y,Z,J]}};export{E as a,ie as b};
@@ -1 +1 @@
1
- import{a as S}from"./PBQSJSZO.js";import{a as N}from"./UP7FBDMJ.js";import{a,j as p}from"./FWD4L3CJ.js";import{a as t}from"./XSD5NL7J.js";import{encodeFunctionData as $,erc20Abi as U,getAddress as m,parseAbi as _}from"viem";var f=_(["function asset() view returns (address)","function decimals() view returns (uint8)","function previewMint(uint256) view returns (uint256)","function previewRedeem(uint256) view returns (uint256)","function previewWithdraw(uint256) view returns (uint256)","function mint(uint256 shares,address receiver) returns (uint256)","function redeem(uint256 shares,address receiver,address owner) returns (uint256)","function withdraw(uint256 assets,address receiver,address owner) returns (uint256)"]);function M(e){if(typeof e!="string")throw new t("Amount must be a positive base-unit integer string.");let s=N(e);if(s<=0n||s>=1n<<256n)throw new t("Amount must be positive and fit uint256.");return s}function G(e){if(typeof e!="bigint"||e<0n||e>=1n<<256n)throw new t("Invalid vault amount read.");return e}function H(e,s,o){return["mint",s==="steakhouse"?"redeem":"withdraw_assets"].map(l=>{let n=l==="mint",w=l==="redeem",h=n||w?"shares":"amount",C={type:"string",pattern:"^[0-9]+$"};return{name:`${s}_${l}`,inputSchema:{type:"object",additionalProperties:!1,required:n?["shares","maxAssets"]:[h],properties:{[h]:C,...n?{maxAssets:C}:{}}},execute:async(y,r)=>{try{if(S(r),Object.keys(y).some(b=>![h,...n?["maxAssets"]:[]].includes(b)))throw new t("Unexpected vault amount argument.");let i=M(y[h]),E=n?M(y.maxAssets):void 0,u=e.clientFor(a);if(await u.getChainId()!==a)throw new t("Vault amount actions require chain 4663.");let[T,O,P]=await Promise.all([u.readContract({address:o,abi:f,functionName:"asset"}),u.readContract({address:o,abi:f,functionName:"decimals"}),u.readContract({address:m(p),abi:U,functionName:"decimals"})]);if(typeof T!="string"||m(T)!==m(p)||O!==18||P!==6)throw new t("Vault amount actions require canonical USDG and the evidenced 18-decimal shares.");let c=G(await u.readContract({address:o,abi:f,functionName:n?"previewMint":w?"previewRedeem":"previewWithdraw",args:[i]}));if(c===0n)throw new t("The vault returned a zero amount quote.");if(n&&c>E)throw new t("The mint quote exceeds maxAssets.");let D=n?void 0:G(await u.readContract({address:o,abi:U,functionName:"balanceOf",args:[r]}));if(!n&&(w?i:c)>D)throw new t("The wallet share balance cannot cover this exit.");let R=n?$({abi:f,functionName:"mint",args:[i,r]}):w?$({abi:f,functionName:"redeem",args:[i,r,r]}):$({abi:f,functionName:"withdraw",args:[i,r,r]}),I=`${l} ${i} ${h==="shares"?"18-decimal share":"6-decimal USDG"} base units from ${s}; beneficiary ${r}.`,k=[...n?[e.approval(m(p),o,c.toString(),a)]:[],e.unsignedTx({to:o,data:R,value:"0",chainId:a,description:I})],x=await e.preview(k,r),A={address:m(p),chainId:a,symbol:"USDG",decimals:6},v={address:m(o),chainId:a,symbol:`${s} shares`,decimals:18},d=b=>x.changes.filter(g=>g.token.chainId===a&&g.token.address.toLowerCase()===b.address.toLowerCase()).reduce((g,q)=>{if(q.token.decimals!==b.decimals||!/^-?\d+$/.test(q.amount))throw new t("Invalid vault preview metadata.");return g+BigInt(q.amount)},0n);if(n?d(A)!==-c||d(v)!==i:w?d(v)!==-i||d(A)<=0n:d(A)!==i||-d(v)<=0n||-d(v)>D)throw new t("The preview does not match the requested vault amount and share balance.");return{txs:k,preview:x,summary:`${I} Quoted counterpart ${c} base units. ${x.summary} Standard ERC-4626 encodes no receipt minimum. Mint approvals use the exact current quote; accrual can require a new quote. Plain exits depend on available liquidity; use a separately previewed full force exit if required.`}}catch(i){throw new t(e.plainError(i))}}}})}export{H as a};
1
+ import{a as S}from"./43LI5NKJ.js";import{b as N}from"./IX3GZMTM.js";import{a,j as p}from"./FWD4L3CJ.js";import{a as t}from"./XSD5NL7J.js";import{encodeFunctionData as $,erc20Abi as U,getAddress as m,parseAbi as _}from"viem";var f=_(["function asset() view returns (address)","function decimals() view returns (uint8)","function previewMint(uint256) view returns (uint256)","function previewRedeem(uint256) view returns (uint256)","function previewWithdraw(uint256) view returns (uint256)","function mint(uint256 shares,address receiver) returns (uint256)","function redeem(uint256 shares,address receiver,address owner) returns (uint256)","function withdraw(uint256 assets,address receiver,address owner) returns (uint256)"]);function M(e){if(typeof e!="string")throw new t("Amount must be a positive base-unit integer string.");let s=N(e);if(s<=0n||s>=1n<<256n)throw new t("Amount must be positive and fit uint256.");return s}function G(e){if(typeof e!="bigint"||e<0n||e>=1n<<256n)throw new t("Invalid vault amount read.");return e}function H(e,s,o){return["mint",s==="steakhouse"?"redeem":"withdraw_assets"].map(l=>{let n=l==="mint",w=l==="redeem",h=n||w?"shares":"amount",C={type:"string",pattern:"^[0-9]+$"};return{name:`${s}_${l}`,inputSchema:{type:"object",additionalProperties:!1,required:n?["shares","maxAssets"]:[h],properties:{[h]:C,...n?{maxAssets:C}:{}}},execute:async(y,r)=>{try{if(S(r),Object.keys(y).some(b=>![h,...n?["maxAssets"]:[]].includes(b)))throw new t("Unexpected vault amount argument.");let i=M(y[h]),E=n?M(y.maxAssets):void 0,u=e.clientFor(a);if(await u.getChainId()!==a)throw new t("Vault amount actions require chain 4663.");let[T,O,P]=await Promise.all([u.readContract({address:o,abi:f,functionName:"asset"}),u.readContract({address:o,abi:f,functionName:"decimals"}),u.readContract({address:m(p),abi:U,functionName:"decimals"})]);if(typeof T!="string"||m(T)!==m(p)||O!==18||P!==6)throw new t("Vault amount actions require canonical USDG and the evidenced 18-decimal shares.");let c=G(await u.readContract({address:o,abi:f,functionName:n?"previewMint":w?"previewRedeem":"previewWithdraw",args:[i]}));if(c===0n)throw new t("The vault returned a zero amount quote.");if(n&&c>E)throw new t("The mint quote exceeds maxAssets.");let D=n?void 0:G(await u.readContract({address:o,abi:U,functionName:"balanceOf",args:[r]}));if(!n&&(w?i:c)>D)throw new t("The wallet share balance cannot cover this exit.");let R=n?$({abi:f,functionName:"mint",args:[i,r]}):w?$({abi:f,functionName:"redeem",args:[i,r,r]}):$({abi:f,functionName:"withdraw",args:[i,r,r]}),I=`${l} ${i} ${h==="shares"?"18-decimal share":"6-decimal USDG"} base units from ${s}; beneficiary ${r}.`,k=[...n?[e.approval(m(p),o,c.toString(),a)]:[],e.unsignedTx({to:o,data:R,value:"0",chainId:a,description:I})],x=await e.preview(k,r),A={address:m(p),chainId:a,symbol:"USDG",decimals:6},v={address:m(o),chainId:a,symbol:`${s} shares`,decimals:18},d=b=>x.changes.filter(g=>g.token.chainId===a&&g.token.address.toLowerCase()===b.address.toLowerCase()).reduce((g,q)=>{if(q.token.decimals!==b.decimals||!/^-?\d+$/.test(q.amount))throw new t("Invalid vault preview metadata.");return g+BigInt(q.amount)},0n);if(n?d(A)!==-c||d(v)!==i:w?d(v)!==-i||d(A)<=0n:d(A)!==i||-d(v)<=0n||-d(v)>D)throw new t("The preview does not match the requested vault amount and share balance.");return{txs:k,preview:x,summary:`${I} Quoted counterpart ${c} base units. ${x.summary} Standard ERC-4626 encodes no receipt minimum. Mint approvals use the exact current quote; accrual can require a new quote. Plain exits depend on available liquidity; use a separately previewed full force exit if required.`}}catch(i){throw new t(e.plainError(i))}}}})}export{H as a};
@@ -1,2 +1,2 @@
1
- import{f as b,g as L,i as B,m as o,n as D,o as U}from"./KBKK7UNY.js";import{$ as _,T as f,Y as m,Z as g,_ as p,aa as d,b as e}from"./PSVOVZH7.js";function S(n){if(n==null)return;let t=n instanceof Date?n.getTime()/1e3:typeof n=="string"?Date.parse(n)/1e3:n;return typeof t=="number"&&Number.isFinite(t)?Math.floor(t):void 0}function x(n){let t=n.nowSec??Math.floor(Date.now()/1e3),r=S(n.endDate),u=typeof n.apr=="number"&&Number.isFinite(n.apr)?n.apr:void 0,a=Number.isFinite(n.amountUsd)&&n.amountUsd>0?n.amountUsd:void 0,l={addButton:_,declineButton:d};if(u===void 0||r===void 0||r<=t||a===void 0)return{text:e(p,{}),readable:!1,notWorth:!0,defaultButton:d,...l};let i=b(n.gasUsd),c=B({amountUsd:a,ratePct:u,days:(r-t)/86400}),s=L({gross:c,costs:i.usd,amount:a}),W=[s.tooSmall?e(g,{}):"",i.estimatedHigh?e(f,{}):""].filter(Boolean).join(" ");return{text:e(m,{apr:D(u).replace(/\.00$/,""),amount_usd:o(a),gross_usd:o(c),end_date:U(r),gas_usd:o(i.usd),net_usd:o(s.netUsd),worth_clause:W}).replace(/ +\n/g,`
1
+ import{f as b,g as L,i as B,m as o,n as D,o as U}from"./KBKK7UNY.js";import{$ as _,T as f,Y as m,Z as g,_ as p,aa as d,b as e}from"./JUZ5JU6D.js";function S(n){if(n==null)return;let t=n instanceof Date?n.getTime()/1e3:typeof n=="string"?Date.parse(n)/1e3:n;return typeof t=="number"&&Number.isFinite(t)?Math.floor(t):void 0}function x(n){let t=n.nowSec??Math.floor(Date.now()/1e3),r=S(n.endDate),u=typeof n.apr=="number"&&Number.isFinite(n.apr)?n.apr:void 0,a=Number.isFinite(n.amountUsd)&&n.amountUsd>0?n.amountUsd:void 0,l={addButton:_,declineButton:d};if(u===void 0||r===void 0||r<=t||a===void 0)return{text:e(p,{}),readable:!1,notWorth:!0,defaultButton:d,...l};let i=b(n.gasUsd),c=B({amountUsd:a,ratePct:u,days:(r-t)/86400}),s=L({gross:c,costs:i.usd,amount:a}),W=[s.tooSmall?e(g,{}):"",i.estimatedHigh?e(f,{}):""].filter(Boolean).join(" ");return{text:e(m,{apr:D(u).replace(/\.00$/,""),amount_usd:o(a),gross_usd:o(c),end_date:U(r),gas_usd:o(i.usd),net_usd:o(s.netUsd),worth_clause:W}).replace(/ +\n/g,`
2
2
  `),readable:!0,notWorth:s.tooSmall,...s.tooSmall?{defaultButton:d}:{},...l}}function N(n){return x(n).text}export{x as a,N as b};
@@ -1 +1 @@
1
- import{h as L,j as i,k as d,l as w,m as y,n as D,o as f,p as l,q as h,r as _,s as q,t as r}from"./YEXUSRIZ.js";import{a as O,f as F}from"./MQK6OP7S.js";import{a as c}from"./XSD5NL7J.js";import{encodeAbiParameters as M,getAddress as B,keccak256 as j,parseAbi as $,zeroHash as N}from"viem";var Y="0x167ba3b15d65044b17c87154087d35fc5efde07538be66b804a54e63d6089136",z=$(["function getVersion() view returns (string)"]),E=B("0x8004A169FB4a3325136EB29fA0ceB6D2e539a432"),R=B("0x8004BAa17C55a88189AE136b182e5fdA19dE9b63");function ee(n,s){let e=y(n),o=y(e.caps),t=i(e.gasLimit,32),m=i(o.maxLpFeePips,24);if(s!==Y||e.schemaHash!==Y||e.codeHash!==F(r).codeHash||e.implementation!==r||i(e.kind,8)!==1n||i(e.phaseMask,8)!==1n||d(e.failOpen)||t<400000n||t>2000000n||m>50000n||i(o.maxQuoteTakePips,24)!==0n||i(o.maxSubjectTakeBps,16)!==0n)throw new c("Hookr agent gate admission, schema or execution caps differ from the supported fail-closed BEFORE_SWAP profile. Review the deployment before entry.");return d(e.feeOnly),{...e,caps:o}}async function oe(n,s,e,o=[]){let t=(a,p=[])=>l(n,r,f("agentGateV1"),a,p,s),[m,A,S,g,x,v,k,H,Q,U,W,X]=await Promise.all([t("configSchemaHash"),l(n,_,f("registry"),"admission",[h,r],s),t("retired"),t("identity"),t("reputation"),t("poolManager"),t("isAgent",[e]),t("linkOf",[e]),t("MIN_ADVISORY_GAS"),t("MAX_ADVISORY_GAS"),l(n,E,z,"getVersion",[],s),l(n,R,z,"getVersion",[],s)]),J=ee(A,m);if(g!==E||x!==R||v!==q||i(Q)!==400000n||i(U)!==2000000n)throw new c("Hookr gate dependencies or gas limits differ from the reviewed profile.");let C=a=>{if(typeof a!="string"||new TextEncoder().encode(a).length>32)throw new c("Hookr registry version read is incomplete.");return j(M([{type:"string"}],[a]))},I=C(W)!==O.gateVersions.identity,K=C(X)!==O.gateVersions.reputation,P=I||K,u=d(S),T=w(H,2),Z=await Promise.all(o.map(async a=>{let[p,b]=w(await t("reviewerSet",[a]),2);if(!Array.isArray(p)||p.length===0||p.length>32||typeof b!="string")throw new c("Reviewer set is unregistered or unavailable. Supply an existing registered bytes32 set ID.");let V=p.map(G=>B(String(G)));if(V.some(G=>BigInt(G)===0n)||j(M([{type:"address[]"},{type:"string"}],[V,b]))!==a.toLowerCase())throw new c("Hookr reviewer set does not match its registered ID.");return{id:a,clients:V,tag:b}}));return{address:r,healthy:!u&&!P,healthyIdentityOnly:!u&&!I,healthyForScores:!u&&!P,retired:u,registryVersionDrift:P,schemaHash:m,admission:D(J),identity:E,reputation:R,walletAgent:d(k),link:{linked:d(T[0]),agentId:i(T[1]).toString()},reviewerSets:Z,reviewerSetsComplete:!1,reviewerSetsNotice:"Only explicitly requested registered set IDs are read. This is not an enumeration. No reviewed Priors alias is configured; provide a registered bytes32 set ID.",termsSchema:{flags:"uint16",minScore:"uint32",tierScore:"uint32",tierPips:"uint24",reviewers:"bytes32"},defaults:{flags:"1",minScore:"0",tierScore:"0",tierPips:"0",reviewers:N},maxTierPips:"50000",minGas:"400000",maxGas:"2000000"}}async function ae(n,s,e,o,t){if(BigInt(t)===0n)return{gated:!1,admissionRequiredForCollectOrRemove:!1};if(t!==r)throw new c("This position uses an unreviewed advisory. Gate status is unknown.");let[m,A,S]=await Promise.all([l(n,r,f("agentGateV1"),"terms",[h,e],s),l(n,r,f("agentGateV1"),"explainLiquidity",[h,e,o],s),l(n,r,f("agentGateV1"),"retired",[],s)]),g=y(m),[x,v]=w(A,2);if(!d(g.bound)||g.launcher!==o)throw new c("Hookr gate is not bound to this family Launcher.");for(let[k,H]of[["flags",16],["minScore",32],["tierScore",32],["tierPips",24]])i(g[k],H);return L(g.reviewers),{gated:!0,gate:r,terms:D(g),retired:d(S),liquidityEntryAllowed:d(x),entryReason:i(v,8).toString(),admissionRequiredForCollectOrRemove:!1}}export{Y as a,ee as b,oe as c,ae as d};
1
+ import{h as L,j as i,k as d,l as w,m as y,n as D,o as f,p as l,q as h,r as _,s as q,t as r}from"./T7TFUH5K.js";import{a as O,f as F}from"./MQK6OP7S.js";import{a as c}from"./XSD5NL7J.js";import{encodeAbiParameters as M,getAddress as B,keccak256 as j,parseAbi as $,zeroHash as N}from"viem";var Y="0x167ba3b15d65044b17c87154087d35fc5efde07538be66b804a54e63d6089136",z=$(["function getVersion() view returns (string)"]),E=B("0x8004A169FB4a3325136EB29fA0ceB6D2e539a432"),R=B("0x8004BAa17C55a88189AE136b182e5fdA19dE9b63");function ee(n,s){let e=y(n),o=y(e.caps),t=i(e.gasLimit,32),m=i(o.maxLpFeePips,24);if(s!==Y||e.schemaHash!==Y||e.codeHash!==F(r).codeHash||e.implementation!==r||i(e.kind,8)!==1n||i(e.phaseMask,8)!==1n||d(e.failOpen)||t<400000n||t>2000000n||m>50000n||i(o.maxQuoteTakePips,24)!==0n||i(o.maxSubjectTakeBps,16)!==0n)throw new c("Hookr agent gate admission, schema or execution caps differ from the supported fail-closed BEFORE_SWAP profile. Review the deployment before entry.");return d(e.feeOnly),{...e,caps:o}}async function oe(n,s,e,o=[]){let t=(a,p=[])=>l(n,r,f("agentGateV1"),a,p,s),[m,A,S,g,x,v,k,H,Q,U,W,X]=await Promise.all([t("configSchemaHash"),l(n,_,f("registry"),"admission",[h,r],s),t("retired"),t("identity"),t("reputation"),t("poolManager"),t("isAgent",[e]),t("linkOf",[e]),t("MIN_ADVISORY_GAS"),t("MAX_ADVISORY_GAS"),l(n,E,z,"getVersion",[],s),l(n,R,z,"getVersion",[],s)]),J=ee(A,m);if(g!==E||x!==R||v!==q||i(Q)!==400000n||i(U)!==2000000n)throw new c("Hookr gate dependencies or gas limits differ from the reviewed profile.");let C=a=>{if(typeof a!="string"||new TextEncoder().encode(a).length>32)throw new c("Hookr registry version read is incomplete.");return j(M([{type:"string"}],[a]))},I=C(W)!==O.gateVersions.identity,K=C(X)!==O.gateVersions.reputation,P=I||K,u=d(S),T=w(H,2),Z=await Promise.all(o.map(async a=>{let[p,b]=w(await t("reviewerSet",[a]),2);if(!Array.isArray(p)||p.length===0||p.length>32||typeof b!="string")throw new c("Reviewer set is unregistered or unavailable. Supply an existing registered bytes32 set ID.");let V=p.map(G=>B(String(G)));if(V.some(G=>BigInt(G)===0n)||j(M([{type:"address[]"},{type:"string"}],[V,b]))!==a.toLowerCase())throw new c("Hookr reviewer set does not match its registered ID.");return{id:a,clients:V,tag:b}}));return{address:r,healthy:!u&&!P,healthyIdentityOnly:!u&&!I,healthyForScores:!u&&!P,retired:u,registryVersionDrift:P,schemaHash:m,admission:D(J),identity:E,reputation:R,walletAgent:d(k),link:{linked:d(T[0]),agentId:i(T[1]).toString()},reviewerSets:Z,reviewerSetsComplete:!1,reviewerSetsNotice:"Only explicitly requested registered set IDs are read. This is not an enumeration. No reviewed Priors alias is configured; provide a registered bytes32 set ID.",termsSchema:{flags:"uint16",minScore:"uint32",tierScore:"uint32",tierPips:"uint24",reviewers:"bytes32"},defaults:{flags:"1",minScore:"0",tierScore:"0",tierPips:"0",reviewers:N},maxTierPips:"50000",minGas:"400000",maxGas:"2000000"}}async function ae(n,s,e,o,t){if(BigInt(t)===0n)return{gated:!1,admissionRequiredForCollectOrRemove:!1};if(t!==r)throw new c("This position uses an unreviewed advisory. Gate status is unknown.");let[m,A,S]=await Promise.all([l(n,r,f("agentGateV1"),"terms",[h,e],s),l(n,r,f("agentGateV1"),"explainLiquidity",[h,e,o],s),l(n,r,f("agentGateV1"),"retired",[],s)]),g=y(m),[x,v]=w(A,2);if(!d(g.bound)||g.launcher!==o)throw new c("Hookr gate is not bound to this family Launcher.");for(let[k,H]of[["flags",16],["minScore",32],["tierScore",32],["tierPips",24]])i(g[k],H);return L(g.reviewers),{gated:!0,gate:r,terms:D(g),retired:d(S),liquidityEntryAllowed:d(x),entryReason:i(v,8).toString(),admissionRequiredForCollectOrRemove:!1}}export{Y as a,ee as b,oe as c,ae as d};
@@ -0,0 +1 @@
1
+ import{c as t}from"./VYAJXLND.js";import{c as o}from"./AEL62KCG.js";function s(e,n,a){return t(e,n,a,o)}export{s as a};
@@ -1 +1 @@
1
- import{d as U}from"./IKEJCBYU.js";import{a as _}from"./PBQSJSZO.js";import{a as I}from"./5ZLOCQA4.js";import{g as $}from"./5KUWLUPM.js";import{a as w,i as V}from"./FWD4L3CJ.js";import{a as s}from"./XSD5NL7J.js";import{decodeAbiParameters as N,encodeAbiParameters as K,encodeFunctionData as h,getAddress as P,keccak256 as Y,parseAbi as H,parseAbiParameters as B}from"viem";var y=P("0xCe5c1aFa115fF8b1D6913509bfc79D9AE08CC857"),q=P("0x0FBad98595b0186dA120E41f77C102beb49f803c"),D=B("(address loanToken,address collateralToken,address oracle,address irm,uint256 lltv)"),A="(address loanToken,address collateralToken,address oracle,address irm,uint256 lltv)",m=H(["function vaultV2Factory() view returns (address)","function vaultData(address) view returns (bool canPullFromIdle,uint64 penalty)","function absoluteCap(address,bytes32) view returns (uint256)","function canPullFromMarket(address,bytes32) view returns (bool)","function isActiveAdapter(address,address) view returns (bool)",`function reallocate(address vault,address deallocateAdapter,${A} deallocateMarketParams,address allocateAdapter,${A} allocateMarketParams,uint128 assets,uint64 penalty)`,`function allocateFromIdle(address vault,address adapter,${A} marketParams,uint128 assets,uint64 penalty)`,`function setAbsoluteCap(address vault,address adapter,${A} marketParams,uint256 newAbsoluteCap)`,`function setCanPullFromMarket(address vault,address adapter,${A} marketParams,bool newCanPullFromMarket)`,"function setCanPullFromIdle(address vault,bool newCanPullFromIdle)","function setIsActiveAdapter(address vault,address adapter,bool newIsActiveAdapter)","function setPenalty(address vault,uint64 newPenalty)"]),E=H(["function isAllocator(address) view returns (bool)","function allocation(bytes32) view returns (uint256)"]),z=H(["function isVaultV2(address) view returns (bool)"]),v=V[w],L=[{vault:v.vaults.netnet.address,underlying:v.tokens.USDG.address,symbol:"USDG",decimals:6},{vault:v.vaults.longbowCore.address,underlying:v.tokens.USDG.address,symbol:"USDG",decimals:6},{vault:v.vaults.longbowFrontier.address,underlying:v.tokens.USDG.address,symbol:"USDG",decimals:6},{vault:v.vaults.longbowEth.address,underlying:v.tokens.WETH.address,symbol:"WETH",decimals:18}];function x(n,c=256){if(typeof n!="string"||!/^\d+$/.test(n)||n.length>78||BigInt(n)>=1n<<BigInt(c))throw new s("Provide uint decimal base-unit strings.");return BigInt(n)}function R(n){if(typeof n!="string"||!/^0x[0-9a-f]{64}$/i.test(n))throw new s("Provide the exact bytes32 marketId.");return n.toLowerCase()}var M=(n,c)=>n<c?n:c;async function Q(n,c){let l=L.find(u=>typeof c.vault=="string"&&$(u.vault,c.vault));if(!l)throw new s("Choose a pinned NetNet or Longbow V2 vault.");let a={address:P(l.underlying),chainId:w,symbol:l.symbol,decimals:l.decimals},o=n.clientFor(w),e=await U(o,l.vault,a),i=(u,F,W,J=[])=>o.readContract({address:u,abi:F,functionName:W,args:J,blockNumber:e.blockNumber}),t=R(c.marketId),r=e.markets.find(u=>u.id.toLowerCase()===t);if(!r)throw new s("Target market is not in this verified vault adapter inventory.");let[p,b,k,f,O]=await Promise.all([i(y,m,"vaultV2Factory"),i(q,z,"isVaultV2",[l.vault]),i(l.vault,E,"isAllocator",[y]),i(y,m,"vaultData",[l.vault]),i(y,m,"isActiveAdapter",[l.vault,r.adapter])]);if(typeof p!="string"||P(p)!==q||b!==!0||!Array.isArray(f)||f.length!==2||typeof f[0]!="boolean"||typeof f[1]!="bigint")throw new s("Invalid Public Allocator deployment or vault configuration.");let[d]=N(D,r.data);if(P(d.irm)!==P(v.morpho.adaptive_curve_irm.address))throw new s("Public allocation requires the pinned Adaptive Curve IRM.");let g=(u,F)=>Y(K(B(`string,address,${A}`),["this/marketParams",F,N(D,u)[0]])),C=g(r.data,r.adapter),[S,T]=await Promise.all([i(y,m,"absoluteCap",[l.vault,C]),i(l.vault,E,"allocation",[C])]);if(typeof S!="bigint"||typeof T!="bigint")throw new s("Invalid allocator cap read.");let G=S>T?S-T:0n,j=await Promise.all(e.markets.filter(u=>u.id.toLowerCase()!==t).map(async u=>({...u,canPull:await i(y,m,"canPullFromMarket",[l.vault,g(u.data,u.adapter)])===!0})));return{client:o,read:i,asset:a,definition:l,data:e,target:r,params:d,permission:k===!0&&O===!0,canIdle:f[0],penalty:f[1],headroom:G,sources:j}}var rt=n=>{let c=a=>Q(n,a),l=(a,o,e,i)=>{let t={vault:{type:"string",enum:L.map(r=>r.vault)},marketId:{type:"string"},...o};return{name:a,inputSchema:{type:"object",properties:t,required:["vault","marketId",...e],additionalProperties:!1},execute:async(r,p)=>{try{if(_(p),Object.keys(r).some(b=>!Object.hasOwn(t,b)))throw new s("Unsupported Public Allocator argument.");return await i(r,p)}catch(b){throw new s(n.plainError(b))}}}};return{tools:[l("morpho_allocator",{},[],async a=>{let o=await c(a);return{chainId:w,allocator:y,vault:o.definition.vault,targetMarketId:o.target.id,asset:o.asset,blockNumber:o.data.blockNumber.toString(),enabled:o.permission,penaltyWad:o.penalty.toString(),absoluteCapHeadroom:o.headroom.toString(),idleUpperBound:(o.permission&&o.canIdle?M(o.data.idle,o.headroom):0n).toString(),sources:o.sources.map(e=>({marketId:e.id,canPull:e.canPull,assetsUpperBound:(o.permission&&e.canPull?M(M(e.capacity,o.data.blueCash),o.headroom):0n).toString()})),caveat:"Upper bounds only; vault relative/absolute caps, accrual and liquidity still constrain execution. Preview an explicit source and amount with morpho_reallocate. This standalone allocation charges its disclosed penalty; a later borrow is a separate transaction and can fail or lose the added liquidity to another borrower."}}),l("morpho_reallocate",{sourceMarketId:{type:"string",description:"A returned source market ID, or omit to allocate idle assets."},assets:I(),maxPenaltyAssets:I()},["assets","maxPenaltyAssets"],async(a,o)=>{let e=x(a.assets,128),i=x(a.maxPenaltyAssets),t=await c(a);if(!t.permission||e===0n||e>t.headroom||t.penalty>10n**18n)throw new s("Public allocation is disabled or the requested amount exceeds target headroom.");let r=(e*t.penalty+10n**18n-1n)/10n**18n;if(r>i)throw new s("Allocator penalty exceeds maxPenaltyAssets.");let p;if(a.sourceMarketId===void 0){if(!t.canIdle||e>t.data.idle)throw new s("Public idle allocation is disabled or idle funds are insufficient.");p=h({abi:m,functionName:"allocateFromIdle",args:[t.definition.vault,t.target.adapter,t.params,e,t.penalty]})}else{let d=t.sources.find(C=>C.id.toLowerCase()===R(a.sourceMarketId));if(!d||!d.canPull||e>M(d.capacity,t.data.blueCash))throw new s("The source cannot publicly supply the requested liquidity.");let[g]=N(D,d.data);p=h({abi:m,functionName:"reallocate",args:[t.definition.vault,d.adapter,g,t.target.adapter,t.params,e,t.penalty]})}let b=`Move ${e} ${t.asset.symbol} base units inside ${t.definition.vault} to market ${t.target.id}; pay ${r} ${t.asset.symbol} base units as a donation penalty. This is a standalone reallocation; a subsequent borrow is separate and not guaranteed.`,k=[...r?[n.approval(t.asset.address,y,r.toString(),w)]:[],n.unsignedTx({to:y,data:p,value:"0",chainId:w,description:b})],f=await n.preview(k,o);if(f.changes.filter(d=>d.token.chainId===w&&$(d.token.address,t.asset.address)&&d.token.decimals===t.asset.decimals).reduce((d,g)=>d+BigInt(g.amount),0n)!==-r)throw new s("Allocator preview does not match the exact donation penalty.");return{txs:k,preview:f,penaltyAmount:r.toString(),summary:`${b} The calldata binds the current penalty rate. ${f.summary}`}}),l("morpho_manage_allocator",{operation:{enum:["setIsActiveAdapter","setCanPullFromMarket","setCanPullFromIdle","setAbsoluteCap","setPenalty"]},enabled:{type:"boolean"},amount:I()},["operation"],async(a,o)=>{let e=await c(a);if(await e.read(e.definition.vault,E,"isAllocator",[o])!==!0)throw new s("This wallet is not an allocator of this vault.");let i=a.enabled,t;if(a.operation==="setAbsoluteCap")t=h({abi:m,functionName:"setAbsoluteCap",args:[e.definition.vault,e.target.adapter,e.params,x(a.amount)]});else if(a.operation==="setPenalty"){let b=x(a.amount,64);if(b>10n**18n)throw new s("Public Allocator penalty must not exceed 1e18.");t=h({abi:m,functionName:"setPenalty",args:[e.definition.vault,b]})}else{if(typeof i!="boolean")throw new s("Provide enabled as a boolean.");if(a.operation==="setIsActiveAdapter")t=h({abi:m,functionName:"setIsActiveAdapter",args:[e.definition.vault,e.target.adapter,i]});else if(a.operation==="setCanPullFromMarket")t=h({abi:m,functionName:"setCanPullFromMarket",args:[e.definition.vault,e.target.adapter,e.params,i]});else if(a.operation==="setCanPullFromIdle")t=h({abi:m,functionName:"setCanPullFromIdle",args:[e.definition.vault,i]});else throw new s("Choose a supported allocator configuration operation.")}let r=`Configure Morpho Public Allocator ${String(a.operation)}: ${JSON.stringify(a)}.`,p=[n.unsignedTx({to:y,data:t,value:"0",chainId:w,description:r})];return{txs:p,preview:await n.preview(p,o),summary:r}})]}};export{y as a,q as b,m as c,Q as d,rt as e};
1
+ import{d as U}from"./7WSHW7KW.js";import{a as _}from"./43LI5NKJ.js";import{a as I}from"./66F5ZH34.js";import{g as $}from"./NWNYJ26T.js";import{a as w,i as V}from"./FWD4L3CJ.js";import{a as s}from"./XSD5NL7J.js";import{decodeAbiParameters as N,encodeAbiParameters as K,encodeFunctionData as h,getAddress as P,keccak256 as Y,parseAbi as H,parseAbiParameters as B}from"viem";var y=P("0xCe5c1aFa115fF8b1D6913509bfc79D9AE08CC857"),q=P("0x0FBad98595b0186dA120E41f77C102beb49f803c"),D=B("(address loanToken,address collateralToken,address oracle,address irm,uint256 lltv)"),A="(address loanToken,address collateralToken,address oracle,address irm,uint256 lltv)",m=H(["function vaultV2Factory() view returns (address)","function vaultData(address) view returns (bool canPullFromIdle,uint64 penalty)","function absoluteCap(address,bytes32) view returns (uint256)","function canPullFromMarket(address,bytes32) view returns (bool)","function isActiveAdapter(address,address) view returns (bool)",`function reallocate(address vault,address deallocateAdapter,${A} deallocateMarketParams,address allocateAdapter,${A} allocateMarketParams,uint128 assets,uint64 penalty)`,`function allocateFromIdle(address vault,address adapter,${A} marketParams,uint128 assets,uint64 penalty)`,`function setAbsoluteCap(address vault,address adapter,${A} marketParams,uint256 newAbsoluteCap)`,`function setCanPullFromMarket(address vault,address adapter,${A} marketParams,bool newCanPullFromMarket)`,"function setCanPullFromIdle(address vault,bool newCanPullFromIdle)","function setIsActiveAdapter(address vault,address adapter,bool newIsActiveAdapter)","function setPenalty(address vault,uint64 newPenalty)"]),E=H(["function isAllocator(address) view returns (bool)","function allocation(bytes32) view returns (uint256)"]),z=H(["function isVaultV2(address) view returns (bool)"]),v=V[w],L=[{vault:v.vaults.netnet.address,underlying:v.tokens.USDG.address,symbol:"USDG",decimals:6},{vault:v.vaults.longbowCore.address,underlying:v.tokens.USDG.address,symbol:"USDG",decimals:6},{vault:v.vaults.longbowFrontier.address,underlying:v.tokens.USDG.address,symbol:"USDG",decimals:6},{vault:v.vaults.longbowEth.address,underlying:v.tokens.WETH.address,symbol:"WETH",decimals:18}];function x(n,c=256){if(typeof n!="string"||!/^\d+$/.test(n)||n.length>78||BigInt(n)>=1n<<BigInt(c))throw new s("Provide uint decimal base-unit strings.");return BigInt(n)}function R(n){if(typeof n!="string"||!/^0x[0-9a-f]{64}$/i.test(n))throw new s("Provide the exact bytes32 marketId.");return n.toLowerCase()}var M=(n,c)=>n<c?n:c;async function Q(n,c){let l=L.find(u=>typeof c.vault=="string"&&$(u.vault,c.vault));if(!l)throw new s("Choose a pinned NetNet or Longbow V2 vault.");let a={address:P(l.underlying),chainId:w,symbol:l.symbol,decimals:l.decimals},o=n.clientFor(w),e=await U(o,l.vault,a),i=(u,F,W,J=[])=>o.readContract({address:u,abi:F,functionName:W,args:J,blockNumber:e.blockNumber}),t=R(c.marketId),r=e.markets.find(u=>u.id.toLowerCase()===t);if(!r)throw new s("Target market is not in this verified vault adapter inventory.");let[p,b,k,f,O]=await Promise.all([i(y,m,"vaultV2Factory"),i(q,z,"isVaultV2",[l.vault]),i(l.vault,E,"isAllocator",[y]),i(y,m,"vaultData",[l.vault]),i(y,m,"isActiveAdapter",[l.vault,r.adapter])]);if(typeof p!="string"||P(p)!==q||b!==!0||!Array.isArray(f)||f.length!==2||typeof f[0]!="boolean"||typeof f[1]!="bigint")throw new s("Invalid Public Allocator deployment or vault configuration.");let[d]=N(D,r.data);if(P(d.irm)!==P(v.morpho.adaptive_curve_irm.address))throw new s("Public allocation requires the pinned Adaptive Curve IRM.");let g=(u,F)=>Y(K(B(`string,address,${A}`),["this/marketParams",F,N(D,u)[0]])),C=g(r.data,r.adapter),[S,T]=await Promise.all([i(y,m,"absoluteCap",[l.vault,C]),i(l.vault,E,"allocation",[C])]);if(typeof S!="bigint"||typeof T!="bigint")throw new s("Invalid allocator cap read.");let G=S>T?S-T:0n,j=await Promise.all(e.markets.filter(u=>u.id.toLowerCase()!==t).map(async u=>({...u,canPull:await i(y,m,"canPullFromMarket",[l.vault,g(u.data,u.adapter)])===!0})));return{client:o,read:i,asset:a,definition:l,data:e,target:r,params:d,permission:k===!0&&O===!0,canIdle:f[0],penalty:f[1],headroom:G,sources:j}}var rt=n=>{let c=a=>Q(n,a),l=(a,o,e,i)=>{let t={vault:{type:"string",enum:L.map(r=>r.vault)},marketId:{type:"string"},...o};return{name:a,inputSchema:{type:"object",properties:t,required:["vault","marketId",...e],additionalProperties:!1},execute:async(r,p)=>{try{if(_(p),Object.keys(r).some(b=>!Object.hasOwn(t,b)))throw new s("Unsupported Public Allocator argument.");return await i(r,p)}catch(b){throw new s(n.plainError(b))}}}};return{tools:[l("morpho_allocator",{},[],async a=>{let o=await c(a);return{chainId:w,allocator:y,vault:o.definition.vault,targetMarketId:o.target.id,asset:o.asset,blockNumber:o.data.blockNumber.toString(),enabled:o.permission,penaltyWad:o.penalty.toString(),absoluteCapHeadroom:o.headroom.toString(),idleUpperBound:(o.permission&&o.canIdle?M(o.data.idle,o.headroom):0n).toString(),sources:o.sources.map(e=>({marketId:e.id,canPull:e.canPull,assetsUpperBound:(o.permission&&e.canPull?M(M(e.capacity,o.data.blueCash),o.headroom):0n).toString()})),caveat:"Upper bounds only; vault relative/absolute caps, accrual and liquidity still constrain execution. Preview an explicit source and amount with morpho_reallocate. This standalone allocation charges its disclosed penalty; a later borrow is a separate transaction and can fail or lose the added liquidity to another borrower."}}),l("morpho_reallocate",{sourceMarketId:{type:"string",description:"A returned source market ID, or omit to allocate idle assets."},assets:I(),maxPenaltyAssets:I()},["assets","maxPenaltyAssets"],async(a,o)=>{let e=x(a.assets,128),i=x(a.maxPenaltyAssets),t=await c(a);if(!t.permission||e===0n||e>t.headroom||t.penalty>10n**18n)throw new s("Public allocation is disabled or the requested amount exceeds target headroom.");let r=(e*t.penalty+10n**18n-1n)/10n**18n;if(r>i)throw new s("Allocator penalty exceeds maxPenaltyAssets.");let p;if(a.sourceMarketId===void 0){if(!t.canIdle||e>t.data.idle)throw new s("Public idle allocation is disabled or idle funds are insufficient.");p=h({abi:m,functionName:"allocateFromIdle",args:[t.definition.vault,t.target.adapter,t.params,e,t.penalty]})}else{let d=t.sources.find(C=>C.id.toLowerCase()===R(a.sourceMarketId));if(!d||!d.canPull||e>M(d.capacity,t.data.blueCash))throw new s("The source cannot publicly supply the requested liquidity.");let[g]=N(D,d.data);p=h({abi:m,functionName:"reallocate",args:[t.definition.vault,d.adapter,g,t.target.adapter,t.params,e,t.penalty]})}let b=`Move ${e} ${t.asset.symbol} base units inside ${t.definition.vault} to market ${t.target.id}; pay ${r} ${t.asset.symbol} base units as a donation penalty. This is a standalone reallocation; a subsequent borrow is separate and not guaranteed.`,k=[...r?[n.approval(t.asset.address,y,r.toString(),w)]:[],n.unsignedTx({to:y,data:p,value:"0",chainId:w,description:b})],f=await n.preview(k,o);if(f.changes.filter(d=>d.token.chainId===w&&$(d.token.address,t.asset.address)&&d.token.decimals===t.asset.decimals).reduce((d,g)=>d+BigInt(g.amount),0n)!==-r)throw new s("Allocator preview does not match the exact donation penalty.");return{txs:k,preview:f,penaltyAmount:r.toString(),summary:`${b} The calldata binds the current penalty rate. ${f.summary}`}}),l("morpho_manage_allocator",{operation:{enum:["setIsActiveAdapter","setCanPullFromMarket","setCanPullFromIdle","setAbsoluteCap","setPenalty"]},enabled:{type:"boolean"},amount:I()},["operation"],async(a,o)=>{let e=await c(a);if(await e.read(e.definition.vault,E,"isAllocator",[o])!==!0)throw new s("This wallet is not an allocator of this vault.");let i=a.enabled,t;if(a.operation==="setAbsoluteCap")t=h({abi:m,functionName:"setAbsoluteCap",args:[e.definition.vault,e.target.adapter,e.params,x(a.amount)]});else if(a.operation==="setPenalty"){let b=x(a.amount,64);if(b>10n**18n)throw new s("Public Allocator penalty must not exceed 1e18.");t=h({abi:m,functionName:"setPenalty",args:[e.definition.vault,b]})}else{if(typeof i!="boolean")throw new s("Provide enabled as a boolean.");if(a.operation==="setIsActiveAdapter")t=h({abi:m,functionName:"setIsActiveAdapter",args:[e.definition.vault,e.target.adapter,i]});else if(a.operation==="setCanPullFromMarket")t=h({abi:m,functionName:"setCanPullFromMarket",args:[e.definition.vault,e.target.adapter,e.params,i]});else if(a.operation==="setCanPullFromIdle")t=h({abi:m,functionName:"setCanPullFromIdle",args:[e.definition.vault,i]});else throw new s("Choose a supported allocator configuration operation.")}let r=`Configure Morpho Public Allocator ${String(a.operation)}: ${JSON.stringify(a)}.`,p=[n.unsignedTx({to:y,data:t,value:"0",chainId:w,description:r})];return{txs:p,preview:await n.preview(p,o),summary:r}})]}};export{y as a,q as b,m as c,Q as d,rt as e};
@@ -1 +1 @@
1
- import{a as P}from"./UFVPMWPJ.js";import{a as y}from"./Y7RPSDD2.js";import{b as h,c as w,d as m}from"./2MZXTOZU.js";import{j as B}from"./S2TAJHHK.js";import{a as b}from"./PBQSJSZO.js";import{m as f,n as g}from"./5KUWLUPM.js";import{a as u}from"./FWD4L3CJ.js";import{a as o}from"./XSD5NL7J.js";import{erc20Abi as L,formatUnits as R}from"viem";var A=70515n,U=250202n,C=568341n;function S(a,n){return{token:{...a},amount:n.toString()}}function v(a){if(a.network!==void 0&&a.network!=="mainnet")throw new o("LayerBank requires chain 4663.")}async function k(a,n,r,e){try{return f(await a.readContract({address:n.address,abi:L,functionName:"balanceOf",args:[r],blockNumber:e}),"LayerBank returned a malformed wallet balance read.")}catch(t){throw t instanceof o?t:new o("LayerBank wallet balance could not be read. Please try again.")}}async function T(a,n,r){try{let[e,t]=await Promise.all([n.getGasPrice(),B("ETH",{client:n,http:a.http,chainId:u,blockNumber:r})]),i=g(t.usdE18,"LayerBank gas reference is unavailable.",{positive:!0}),c=f(e,"LayerBank gas reference is unavailable.");if(c===0n)throw new o("LayerBank gas reference is unavailable.");let d=p=>Number(R(p*c*i/10n**18n,18)),s=d(A+U),l=d(C);if(![s,l].every(p=>Number.isFinite(p)&&p>0))throw new o("LayerBank gas reference is unavailable.");return{gasInUsd:s,gasOutUsd:l}}catch{throw new o("LayerBank gas costs could not be checked against a fresh ETH/USD reference. Please try again.")}}async function x(a,n){v(a),b(n);let r=a.clientFor(u),e=await y(r),[t,i,c,d]=await Promise.all([k(r,w,n,e.blockNumber),k(r,m,n,e.blockNumber),P(a.http),T(a,r,e.blockNumber)]),s=[...c.checks,"Gas costs use measured USDG calls plus 20% headroom; entry includes approval and supply."];e.active||s.push("LayerBank reserve is inactive."),e.frozen&&s.push("LayerBank reserve is frozen for deposits."),e.paused&&s.push("LayerBank reserve is paused."),e.capRoomBase===0n&&s.push("LayerBank supply cap has no room left.");let l={rateBasePct:e.rateBasePct,...c.bonus==="unavailable"?{}:{bonus:c.bonus},cashUsdgBase:e.cashUsdgBase,capRoomBase:e.capRoomBase,open:e.active&&!e.frozen&&!e.paused&&e.capRoomBase>0n,walletUsdgBase:t,walletReceiptBase:i,...d,checks:s};return{reserve:e,reading:l}}function H(a){return async n=>{try{return(await x(a,n)).reading}catch(r){return{rateBasePct:0,cashUsdgBase:0n,capRoomBase:0n,open:!1,walletUsdgBase:0n,walletReceiptBase:0n,gasInUsd:0,gasOutUsd:0,checks:[r instanceof o?a.plainError(r):"LayerBank could not be checked right now. Please try again."]}}}}async function z(a,n){v(a),b(n);let r=a.clientFor(u),e=await y(r),t=await k(r,m,n,e.blockNumber);if(t===0n)return[];let i=a.formatAmount(t.toString(),6);return[{module:"layerbank",id:`${u}:${h}`,chainId:u,assets:[S(m,t)],description:`${i} lRobUSDG = ${i} USDG; base supply rate ${e.rateBasePct}% a year, read now.`}]}export{A as a,U as b,C as c,S as d,v as e,k as f,x as g,H as h,z as i};
1
+ import{a as P}from"./SMYWWIE6.js";import{a as y}from"./JKD2B6OX.js";import{b as h,c as w,d as m}from"./2MZXTOZU.js";import{j as B}from"./7KWZ5QJU.js";import{a as b}from"./43LI5NKJ.js";import{m as f,n as g}from"./NWNYJ26T.js";import{a as u}from"./FWD4L3CJ.js";import{a as o}from"./XSD5NL7J.js";import{erc20Abi as L,formatUnits as R}from"viem";var A=70515n,U=250202n,C=568341n;function S(a,n){return{token:{...a},amount:n.toString()}}function v(a){if(a.network!==void 0&&a.network!=="mainnet")throw new o("LayerBank requires chain 4663.")}async function k(a,n,r,e){try{return f(await a.readContract({address:n.address,abi:L,functionName:"balanceOf",args:[r],blockNumber:e}),"LayerBank returned a malformed wallet balance read.")}catch(t){throw t instanceof o?t:new o("LayerBank wallet balance could not be read. Please try again.")}}async function T(a,n,r){try{let[e,t]=await Promise.all([n.getGasPrice(),B("ETH",{client:n,http:a.http,chainId:u,blockNumber:r})]),i=g(t.usdE18,"LayerBank gas reference is unavailable.",{positive:!0}),c=f(e,"LayerBank gas reference is unavailable.");if(c===0n)throw new o("LayerBank gas reference is unavailable.");let d=p=>Number(R(p*c*i/10n**18n,18)),s=d(A+U),l=d(C);if(![s,l].every(p=>Number.isFinite(p)&&p>0))throw new o("LayerBank gas reference is unavailable.");return{gasInUsd:s,gasOutUsd:l}}catch{throw new o("LayerBank gas costs could not be checked against a fresh ETH/USD reference. Please try again.")}}async function x(a,n){v(a),b(n);let r=a.clientFor(u),e=await y(r),[t,i,c,d]=await Promise.all([k(r,w,n,e.blockNumber),k(r,m,n,e.blockNumber),P(a.http),T(a,r,e.blockNumber)]),s=[...c.checks,"Gas costs use measured USDG calls plus 20% headroom; entry includes approval and supply."];e.active||s.push("LayerBank reserve is inactive."),e.frozen&&s.push("LayerBank reserve is frozen for deposits."),e.paused&&s.push("LayerBank reserve is paused."),e.capRoomBase===0n&&s.push("LayerBank supply cap has no room left.");let l={rateBasePct:e.rateBasePct,...c.bonus==="unavailable"?{}:{bonus:c.bonus},cashUsdgBase:e.cashUsdgBase,capRoomBase:e.capRoomBase,open:e.active&&!e.frozen&&!e.paused&&e.capRoomBase>0n,walletUsdgBase:t,walletReceiptBase:i,...d,checks:s};return{reserve:e,reading:l}}function H(a){return async n=>{try{return(await x(a,n)).reading}catch(r){return{rateBasePct:0,cashUsdgBase:0n,capRoomBase:0n,open:!1,walletUsdgBase:0n,walletReceiptBase:0n,gasInUsd:0,gasOutUsd:0,checks:[r instanceof o?a.plainError(r):"LayerBank could not be checked right now. Please try again."]}}}}async function z(a,n){v(a),b(n);let r=a.clientFor(u),e=await y(r),t=await k(r,m,n,e.blockNumber);if(t===0n)return[];let i=a.formatAmount(t.toString(),6);return[{module:"layerbank",id:`${u}:${h}`,chainId:u,assets:[S(m,t)],description:`${i} lRobUSDG = ${i} USDG; base supply rate ${e.rateBasePct}% a year, read now.`}]}export{A as a,U as b,C as c,S as d,v as e,k as f,x as g,H as h,z as i};
@@ -1 +1 @@
1
- import{d as y,h as A}from"./JG27HM4P.js";import{b as p,e as f,g as v}from"./SGEZIYJW.js";import{c as l}from"./5KUWLUPM.js";import{a as g}from"./FWD4L3CJ.js";import{a as r}from"./XSD5NL7J.js";import{parseAbi as I,zeroAddress as N}from"viem";var S=I(["function observe(uint32[] secondsAgos) view returns (int56[] tickCumulatives,uint160[] secondsPerLiquidityCumulativeX128s)"]);function j(s){return{tools:[{name:"uniswap_oracle",inputSchema:{type:"object",additionalProperties:!1,required:["token0","token1","fee","secondsAgo"],properties:{token0:l,token1:l,fee:{type:"integer",minimum:0,maximum:999999},secondsAgo:{type:"integer",minimum:1,maximum:4294967295}}},async execute(t){v(t,["token0","token1","fee","secondsAgo"]);let a=p(t.token0),c=p(t.token1),o=t.fee,e=t.secondsAgo;if(BigInt(a)>=BigInt(c))throw new r("Oracle tokens must be strictly sorted token0 < token1.");if(typeof o!="number"||!Number.isInteger(o)||o<0||o>=1e6||typeof e!="number"||!Number.isInteger(e)||e<=0||e>4294967295)throw new r("Provide integer fee pips and a positive uint32 secondsAgo.");let m=s.clientFor(g),i=await m.getBlockNumber(),u=await m.readContract({address:y.factory,abi:A,functionName:"getPool",args:[a,c,o],blockNumber:i});if(u===N)throw new r("No factory-verified v3 pool exists for this oracle.");let[[n,k],w,h]=await Promise.all([m.readContract({address:u,abi:S,functionName:"observe",args:[[e,0]],blockNumber:i}),f(s,a,i),f(s,c,i)]);if(n.length!==2||k.length!==2)throw new r("Oracle returned an unexpected observation count.");let d=n[1]-n[0],b=BigInt(e),P=d/b-(d<0n&&d%b!==0n?1n:0n);return{pool:u,token0:w,token1:h,secondsAgo:e,blockNumber:i.toString(),tickCumulatives:n.map(String),secondsPerLiquidityCumulativeX128s:k.map(String),arithmeticMeanTick:P.toString(),summary:"V3 time-weighted arithmetic mean tick, rounded toward negative infinity. Price is token1-base-units per token0-base-unit before decimal adjustment. Insufficient pool history reverts; an unavailable oracle is never reported as zero."}}}]}}export{j as a};
1
+ import{e as y,i as A}from"./IPN6Z4JM.js";import{b as p,e as f,g as v}from"./PIIHOXWF.js";import{c as l}from"./NWNYJ26T.js";import{a as g}from"./FWD4L3CJ.js";import{a as r}from"./XSD5NL7J.js";import{parseAbi as I,zeroAddress as N}from"viem";var S=I(["function observe(uint32[] secondsAgos) view returns (int56[] tickCumulatives,uint160[] secondsPerLiquidityCumulativeX128s)"]);function j(s){return{tools:[{name:"uniswap_oracle",inputSchema:{type:"object",additionalProperties:!1,required:["token0","token1","fee","secondsAgo"],properties:{token0:l,token1:l,fee:{type:"integer",minimum:0,maximum:999999},secondsAgo:{type:"integer",minimum:1,maximum:4294967295}}},async execute(t){v(t,["token0","token1","fee","secondsAgo"]);let a=p(t.token0),c=p(t.token1),o=t.fee,e=t.secondsAgo;if(BigInt(a)>=BigInt(c))throw new r("Oracle tokens must be strictly sorted token0 < token1.");if(typeof o!="number"||!Number.isInteger(o)||o<0||o>=1e6||typeof e!="number"||!Number.isInteger(e)||e<=0||e>4294967295)throw new r("Provide integer fee pips and a positive uint32 secondsAgo.");let m=s.clientFor(g),i=await m.getBlockNumber(),u=await m.readContract({address:y.factory,abi:A,functionName:"getPool",args:[a,c,o],blockNumber:i});if(u===N)throw new r("No factory-verified v3 pool exists for this oracle.");let[[n,k],w,h]=await Promise.all([m.readContract({address:u,abi:S,functionName:"observe",args:[[e,0]],blockNumber:i}),f(s,a,i),f(s,c,i)]);if(n.length!==2||k.length!==2)throw new r("Oracle returned an unexpected observation count.");let d=n[1]-n[0],b=BigInt(e),P=d/b-(d<0n&&d%b!==0n?1n:0n);return{pool:u,token0:w,token1:h,secondsAgo:e,blockNumber:i.toString(),tickCumulatives:n.map(String),secondsPerLiquidityCumulativeX128s:k.map(String),arithmeticMeanTick:P.toString(),summary:"V3 time-weighted arithmetic mean tick, rounded toward negative infinity. Price is token1-base-units per token0-base-unit before decimal adjustment. Insufficient pool history reverts; an unavailable oracle is never reported as zero."}}}]}}export{j as a};