@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.
- package/build/dist/api/amounts.d.ts +2 -0
- package/build/dist/api/amounts.js +1 -1
- package/build/dist/api/args.js +1 -1
- package/build/dist/api/gas.js +1 -1
- package/build/dist/api/grandfather.js +1 -1
- package/build/dist/api/guards.js +1 -1
- package/build/dist/api/history.js +1 -1
- package/build/dist/api/http.js +1 -1
- package/build/dist/api/merkle.js +1 -1
- package/build/dist/api/module.js +1 -1
- package/build/dist/api/modules/beefy/boosts.js +1 -1
- package/build/dist/api/modules/beefy/clm.js +1 -1
- package/build/dist/api/modules/beefy/guard.js +1 -1
- package/build/dist/api/modules/beefy/index.js +1 -1
- package/build/dist/api/modules/beefy/liquidity.js +1 -1
- package/build/dist/api/modules/beefy/management.js +1 -1
- package/build/dist/api/modules/beefy/vaults.js +1 -1
- package/build/dist/api/modules/borro/abi.d.ts +149 -0
- package/build/dist/api/modules/borro/abi.js +1 -0
- package/build/dist/api/modules/borro/actions.d.ts +2 -0
- package/build/dist/api/modules/borro/actions.js +1 -0
- package/build/dist/api/modules/borro/checks.d.ts +151 -0
- package/build/dist/api/modules/borro/checks.js +1 -0
- package/build/dist/api/modules/borro/copy.d.ts +174 -0
- package/build/dist/api/modules/borro/copy.js +1 -0
- package/build/dist/api/modules/borro/index.d.ts +13 -0
- package/build/dist/api/modules/borro/index.js +1 -0
- package/build/dist/api/modules/borro/liquidity.d.ts +4 -0
- package/build/dist/api/modules/borro/liquidity.js +1 -0
- package/build/dist/api/modules/borro/pins.d.ts +264 -0
- package/build/dist/api/modules/borro/pins.js +1 -0
- package/build/dist/api/modules/borro/positions.d.ts +8 -0
- package/build/dist/api/modules/borro/positions.js +1 -0
- package/build/dist/api/modules/borro/rates.d.ts +20 -0
- package/build/dist/api/modules/borro/rates.js +1 -0
- package/build/dist/api/modules/borro/reader.d.ts +36 -0
- package/build/dist/api/modules/borro/reader.js +1 -0
- package/build/dist/api/modules/borro/types.d.ts +126 -0
- package/build/dist/api/modules/borro/types.js +0 -0
- package/build/dist/api/modules/chop/abi.d.ts +527 -0
- package/build/dist/api/modules/chop/abi.js +1 -0
- package/build/dist/api/modules/chop/actions.d.ts +24 -0
- package/build/dist/api/modules/chop/actions.js +1 -0
- package/build/dist/api/modules/chop/checks.d.ts +26 -0
- package/build/dist/api/modules/chop/checks.js +1 -0
- package/build/dist/api/modules/chop/copy.d.ts +5 -0
- package/build/dist/api/modules/chop/copy.js +1 -0
- package/build/dist/api/modules/chop/guard.d.ts +13 -0
- package/build/dist/api/modules/chop/guard.js +1 -0
- package/build/dist/api/modules/chop/index.d.ts +3 -0
- package/build/dist/api/modules/chop/index.js +1 -0
- package/build/dist/api/modules/chop/pins.d.ts +53 -0
- package/build/dist/api/modules/chop/pins.js +1 -0
- package/build/dist/api/modules/chop/positions.d.ts +3 -0
- package/build/dist/api/modules/chop/positions.js +1 -0
- package/build/dist/api/modules/chop/reader.d.ts +70 -0
- package/build/dist/api/modules/chop/reader.js +1 -0
- package/build/dist/api/modules/chop/types.d.ts +32 -0
- package/build/dist/api/modules/chop/types.js +0 -0
- package/build/dist/api/modules/clanker/extensions.js +1 -1
- package/build/dist/api/modules/clanker/index.js +1 -1
- package/build/dist/api/modules/clanker/manage.js +1 -1
- package/build/dist/api/modules/clanker/pool-config.js +1 -1
- package/build/dist/api/modules/clanker/protocol.js +1 -1
- package/build/dist/api/modules/clanker/state.js +1 -1
- package/build/dist/api/modules/earn/copy.d.ts +2 -2
- package/build/dist/api/modules/earn/copy.js +1 -1
- package/build/dist/api/modules/earn/index.js +1 -1
- package/build/dist/api/modules/earn/lp.js +1 -1
- package/build/dist/api/modules/earn/options.js +1 -1
- package/build/dist/api/modules/erc8004/common.js +1 -1
- package/build/dist/api/modules/erc8004/domain.js +1 -1
- package/build/dist/api/modules/erc8004/index.js +1 -1
- package/build/dist/api/modules/erc8004/management.js +1 -1
- package/build/dist/api/modules/erc8004/reputation.js +1 -1
- package/build/dist/api/modules/erc8004/services.js +1 -1
- package/build/dist/api/modules/erc8004/validation.js +1 -1
- package/build/dist/api/modules/gloam/abi.d.ts +89 -0
- package/build/dist/api/modules/gloam/abi.js +1 -0
- package/build/dist/api/modules/gloam/actions.d.ts +5 -0
- package/build/dist/api/modules/gloam/actions.js +1 -0
- package/build/dist/api/modules/gloam/checks.d.ts +17 -0
- package/build/dist/api/modules/gloam/checks.js +1 -0
- package/build/dist/api/modules/gloam/copy.d.ts +22 -0
- package/build/dist/api/modules/gloam/copy.js +2 -0
- package/build/dist/api/modules/gloam/index.d.ts +6 -0
- package/build/dist/api/modules/gloam/index.js +1 -0
- package/build/dist/api/modules/gloam/pins.d.ts +41 -0
- package/build/dist/api/modules/gloam/pins.js +1 -0
- package/build/dist/api/modules/gloam/types.d.ts +308 -0
- package/build/dist/api/modules/gloam/types.js +1 -0
- package/build/dist/api/modules/grove/index.js +1 -1
- package/build/dist/api/modules/heyresearch/builder-feed.js +1 -1
- package/build/dist/api/modules/heyresearch/index.js +1 -1
- package/build/dist/api/modules/heyresearch/proof-reads.js +1 -1
- package/build/dist/api/modules/heyresearch/public-reads.js +1 -1
- package/build/dist/api/modules/heyresearch/scan.js +1 -1
- package/build/dist/api/modules/heyresearch/token-facts.js +1 -1
- package/build/dist/api/modules/hoodag/chain-reads.js +1 -1
- package/build/dist/api/modules/hoodag/index.js +1 -1
- package/build/dist/api/modules/hoodag/management.js +1 -1
- package/build/dist/api/modules/hoodag/public-reads.js +1 -1
- package/build/dist/api/modules/hoodag/reconstruct.js +1 -1
- package/build/dist/api/modules/hoodlock/airdrop.js +1 -1
- package/build/dist/api/modules/hoodlock/commerce.js +1 -1
- package/build/dist/api/modules/hoodlock/fee.js +1 -1
- package/build/dist/api/modules/hoodlock/guard.js +1 -1
- package/build/dist/api/modules/hoodlock/index.js +1 -1
- package/build/dist/api/modules/hoodlock/lifecycle.js +1 -1
- package/build/dist/api/modules/hoodlock/locks-burn.js +1 -1
- package/build/dist/api/modules/hoodlock/public.js +1 -1
- package/build/dist/api/modules/hookr/actions.js +1 -1
- package/build/dist/api/modules/hookr/addons.js +1 -1
- package/build/dist/api/modules/hookr/agent-gate.js +1 -1
- package/build/dist/api/modules/hookr/contracts.js +1 -1
- package/build/dist/api/modules/hookr/create-cancel.js +1 -1
- package/build/dist/api/modules/hookr/discovery.js +1 -1
- package/build/dist/api/modules/hookr/fill-bounty.js +1 -1
- package/build/dist/api/modules/hookr/index.js +1 -1
- package/build/dist/api/modules/hookr/launch-options.js +1 -1
- package/build/dist/api/modules/hookr/launch-receipt.js +1 -1
- package/build/dist/api/modules/hookr/launch.js +1 -1
- package/build/dist/api/modules/hookr/liquidity.js +1 -1
- package/build/dist/api/modules/hookr/lp-positions.js +1 -1
- package/build/dist/api/modules/hookr/lp-reads.js +1 -1
- package/build/dist/api/modules/hookr/lp-receipt.js +1 -1
- package/build/dist/api/modules/hookr/lp-state.js +1 -1
- package/build/dist/api/modules/hookr/public-reads.js +1 -1
- package/build/dist/api/modules/hookr/read-utils.js +1 -1
- package/build/dist/api/modules/hookr/relay.js +1 -1
- package/build/dist/api/modules/hookr/revenue.js +1 -1
- package/build/dist/api/modules/kyberswap/index.js +1 -1
- package/build/dist/api/modules/kyberswap/source-pools.js +1 -1
- package/build/dist/api/modules/layerbank/actions.js +1 -1
- package/build/dist/api/modules/layerbank/checks.js +1 -1
- package/build/dist/api/modules/layerbank/index.js +1 -1
- package/build/dist/api/modules/layerbank/merkl.js +1 -1
- package/build/dist/api/modules/layerbank/reader.js +1 -1
- package/build/dist/api/modules/layerbank/reserve.js +1 -1
- package/build/dist/api/modules/lighter/index.js +1 -1
- package/build/dist/api/modules/longbow/administration.js +1 -1
- package/build/dist/api/modules/longbow/analytics.js +1 -1
- package/build/dist/api/modules/longbow/fixed.js +1 -1
- package/build/dist/api/modules/longbow/index.js +1 -1
- package/build/dist/api/modules/longbow/nft.js +1 -1
- package/build/dist/api/modules/longbow/rebates.js +1 -1
- package/build/dist/api/modules/longbow/staking.js +1 -1
- package/build/dist/api/modules/meridian/index.js +1 -1
- package/build/dist/api/modules/meridian/markets.js +1 -1
- package/build/dist/api/modules/meridian/perps-batch.js +1 -1
- package/build/dist/api/modules/meridian/perps-common.js +1 -1
- package/build/dist/api/modules/meridian/perps-guards.js +1 -1
- package/build/dist/api/modules/meridian/perps-intents.js +1 -1
- package/build/dist/api/modules/meridian/perps-stream.js +1 -1
- package/build/dist/api/modules/meridian/perps.d.ts +1 -0
- package/build/dist/api/modules/meridian/perps.js +1 -1
- package/build/dist/api/modules/meridian/predict-read.js +1 -1
- package/build/dist/api/modules/meridian/rfq.js +1 -1
- package/build/dist/api/modules/merkl/discovery.js +1 -1
- package/build/dist/api/modules/merkl/index.js +1 -1
- package/build/dist/api/modules/merkl/manage.js +1 -1
- package/build/dist/api/modules/merkl/protocol.js +1 -1
- package/build/dist/api/modules/morpho/allocator.js +1 -1
- package/build/dist/api/modules/morpho/bundles.js +1 -1
- package/build/dist/api/modules/morpho/in-kind.js +1 -1
- package/build/dist/api/modules/morpho/index.js +1 -1
- package/build/dist/api/modules/morpho/local-guard.js +1 -1
- package/build/dist/api/modules/morpho/midnight.js +1 -1
- package/build/dist/api/modules/morpho/protocol.js +1 -1
- package/build/dist/api/modules/morpho/vault-management.js +1 -1
- package/build/dist/api/modules/morpho/vault-tools.js +1 -1
- package/build/dist/api/modules/morpho/vault-v2.js +1 -1
- package/build/dist/api/modules/netnet/card-plan.js +1 -1
- package/build/dist/api/modules/netnet/card-read.js +1 -1
- package/build/dist/api/modules/netnet/card-recovery.js +1 -1
- package/build/dist/api/modules/netnet/desk-action.js +1 -1
- package/build/dist/api/modules/netnet/financial.js +1 -1
- package/build/dist/api/modules/netnet/index.js +1 -1
- package/build/dist/api/modules/netnet/staking.js +1 -1
- package/build/dist/api/modules/orbio/gateway.js +1 -1
- package/build/dist/api/modules/orbio/index.js +1 -1
- package/build/dist/api/modules/orbio/positions.js +1 -1
- package/build/dist/api/modules/pendle/convert.js +1 -1
- package/build/dist/api/modules/pendle/costs.js +1 -1
- package/build/dist/api/modules/pendle/index.js +1 -1
- package/build/dist/api/modules/pendle/markets.js +1 -1
- package/build/dist/api/modules/pendle/positions.js +1 -1
- package/build/dist/api/modules/pendle/pricecheck.js +1 -1
- package/build/dist/api/modules/pendle/reader.js +1 -1
- package/build/dist/api/modules/pendle/redeem.js +1 -1
- package/build/dist/api/modules/pendle/trade.js +1 -1
- package/build/dist/api/modules/pendle/types.d.ts +16 -1
- package/build/dist/api/modules/pendle/validate.js +1 -1
- package/build/dist/api/modules/pendle/verify.js +1 -1
- package/build/dist/api/modules/pons/claim.js +1 -1
- package/build/dist/api/modules/pons/holder-directory.js +1 -1
- package/build/dist/api/modules/pons/index.js +1 -1
- package/build/dist/api/modules/pons/launch-status.d.ts +1 -0
- package/build/dist/api/modules/pons/launch-status.js +1 -1
- package/build/dist/api/modules/pons/prices.js +1 -1
- package/build/dist/api/modules/pons/reads.js +1 -1
- package/build/dist/api/modules/pons/swap-terms.js +1 -1
- package/build/dist/api/modules/pons/trade.js +1 -1
- package/build/dist/api/modules/poolstrade/index.js +1 -1
- package/build/dist/api/modules/priors/coverage.js +1 -1
- package/build/dist/api/modules/priors/discovery.js +1 -1
- package/build/dist/api/modules/priors/features.js +1 -1
- package/build/dist/api/modules/priors/holdings.js +1 -1
- package/build/dist/api/modules/priors/index.js +1 -1
- package/build/dist/api/modules/priors/integration.js +1 -1
- package/build/dist/api/modules/priors/market.js +1 -1
- package/build/dist/api/modules/priors/pt.js +1 -1
- package/build/dist/api/modules/priors/savings-exit.js +1 -1
- package/build/dist/api/modules/priors/starter-line.js +1 -1
- package/build/dist/api/modules/priors/stock-swap.js +1 -1
- package/build/dist/api/modules/relay/api.js +1 -1
- package/build/dist/api/modules/relay/bootstrap.js +1 -1
- package/build/dist/api/modules/relay/discovery.js +1 -1
- package/build/dist/api/modules/relay/inbound.d.ts +2 -0
- package/build/dist/api/modules/relay/inbound.js +1 -1
- package/build/dist/api/modules/relay/index.js +1 -1
- package/build/dist/api/modules/relay/order.js +1 -1
- package/build/dist/api/modules/relay/outbound-status.js +1 -1
- package/build/dist/api/modules/relay/readiness.js +1 -1
- package/build/dist/api/modules/relay/reads.js +1 -1
- package/build/dist/api/modules/relay/vaults.js +1 -1
- package/build/dist/api/modules/spark/actions.js +1 -1
- package/build/dist/api/modules/spark/details.js +1 -1
- package/build/dist/api/modules/spark/index.js +1 -1
- package/build/dist/api/modules/spark/management.js +1 -1
- package/build/dist/api/modules/steakhouse/analytics.js +1 -1
- package/build/dist/api/modules/steakhouse/erc4626.js +1 -1
- package/build/dist/api/modules/steakhouse/index.js +1 -1
- package/build/dist/api/modules/steakhouse/local-guard.js +1 -1
- package/build/dist/api/modules/steakhouse/management.js +1 -1
- package/build/dist/api/modules/steakhouse/v2-exit.js +1 -1
- package/build/dist/api/modules/tickerspring/basket-routes.js +1 -1
- package/build/dist/api/modules/tickerspring/contract-reads.js +1 -1
- package/build/dist/api/modules/tickerspring/exit-preview.js +1 -1
- package/build/dist/api/modules/tickerspring/guards.js +1 -1
- package/build/dist/api/modules/tickerspring/index.js +1 -1
- package/build/dist/api/modules/tickerspring/journeys.js +1 -1
- package/build/dist/api/modules/tickerspring/ladder.js +1 -1
- package/build/dist/api/modules/tickerspring/maker.js +1 -1
- package/build/dist/api/modules/tickerspring/order-accounting.js +1 -1
- package/build/dist/api/modules/tickerspring/research.js +1 -1
- package/build/dist/api/modules/tickerspring/strategies.js +1 -1
- package/build/dist/api/modules/uniswap/auction-create.js +1 -1
- package/build/dist/api/modules/uniswap/auction.js +1 -1
- package/build/dist/api/modules/uniswap/batch.js +1 -1
- package/build/dist/api/modules/uniswap/common.js +1 -1
- package/build/dist/api/modules/uniswap/fees.js +1 -1
- package/build/dist/api/modules/uniswap/index.js +1 -1
- package/build/dist/api/modules/uniswap/local-guard.js +1 -1
- package/build/dist/api/modules/uniswap/oracle.js +1 -1
- package/build/dist/api/modules/uniswap/pool-math.js +1 -1
- package/build/dist/api/modules/uniswap/pools.js +1 -1
- package/build/dist/api/modules/uniswap/position.js +1 -1
- package/build/dist/api/modules/uniswap/protocol.js +1 -1
- package/build/dist/api/modules/uniswap/token-jar.js +1 -1
- package/build/dist/api/modules/uniswap/trade-batch.js +1 -1
- package/build/dist/api/modules/uniswap/trade.js +1 -1
- package/build/dist/api/modules/uniswap/v2.js +1 -1
- package/build/dist/api/modules/uniswap/v3.d.ts +11 -1
- package/build/dist/api/modules/uniswap/v3.js +1 -1
- package/build/dist/api/modules/uniswap/v4.js +1 -1
- package/build/dist/api/modules/uniswap/wrap.js +1 -1
- package/build/dist/api/modules/velora/claims.js +1 -1
- package/build/dist/api/modules/velora/delta-reads.js +1 -1
- package/build/dist/api/modules/velora/index.js +1 -1
- package/build/dist/api/modules/wormhole/index.d.ts +3 -0
- package/build/dist/api/modules/wormhole/index.js +1 -1
- package/build/dist/api/modules/wormhole/scan-text.js +1 -1
- package/build/dist/api/modules/wormhole/swap-token-verdict.d.ts +11 -0
- package/build/dist/api/modules/wormhole/swap-token-verdict.js +1 -0
- package/build/dist/api/modules/wormhole/third-party-text.d.ts +13 -0
- package/build/dist/api/modules/wormhole/third-party-text.js +1 -0
- package/build/dist/api/modules/wormhole/token-check.d.ts +2 -0
- package/build/dist/api/modules/wormhole/token-check.js +1 -1
- package/build/dist/api/modules/wormhole/x402-client.d.ts +36 -0
- package/build/dist/api/modules/wormhole/x402-client.js +1 -0
- package/build/dist/api/positions.js +1 -1
- package/build/dist/api/pricenote.js +1 -1
- package/build/dist/api/prices.js +1 -1
- package/build/dist/api/pricing.js +1 -1
- package/build/dist/api/routes.js +1 -1
- package/build/dist/api/send.js +1 -1
- package/build/dist/api/signing-registry.js +1 -1
- package/build/dist/api/simulate.js +1 -1
- package/build/dist/api/swap.js +1 -1
- package/build/dist/api/tokens.d.ts +1 -0
- package/build/dist/api/tokens.js +1 -1
- package/build/dist/api/tool-policy.js +1 -1
- package/build/dist/api/tx.js +1 -1
- package/build/dist/api/types.d.ts +6 -1
- package/build/dist/api/vendor-limits.js +1 -1
- package/build/dist/chunks/{ALRRW7SF.js → 2MT3G7YZ.js} +1 -1
- package/build/dist/chunks/{WPAF55SP.js → 2THSW4QN.js} +1 -1
- package/build/dist/chunks/{MKAPRRKF.js → 2TK3ETUO.js} +1 -1
- package/build/dist/chunks/{VVA72C6O.js → 2VXLVXIB.js} +1 -1
- package/build/dist/chunks/{ZE7EU2CS.js → 35KR3VSS.js} +1 -1
- package/build/dist/chunks/{ZYH4B2GR.js → 3GQ7A3VB.js} +1 -1
- package/build/dist/chunks/3VWVW7PX.js +1 -0
- package/build/dist/chunks/{WPFAEBE7.js → 3XNZUIRU.js} +1 -1
- package/build/dist/chunks/{PBQSJSZO.js → 43LI5NKJ.js} +1 -1
- package/build/dist/chunks/{QVYCJ6WV.js → 46KWRAYK.js} +1 -1
- package/build/dist/chunks/4DP2VPXR.js +3 -0
- package/build/dist/chunks/{47YN4OUI.js → 4EN6MQEI.js} +1 -1
- package/build/dist/chunks/{UHRCM7AG.js → 4HG6FRVH.js} +1 -1
- package/build/dist/chunks/{E6UU7DL2.js → 4I3OU56B.js} +1 -1
- package/build/dist/chunks/{WIVYKLQM.js → 52ELWNXJ.js} +1 -1
- package/build/dist/chunks/{5WUKOQIJ.js → 5AXWBSPG.js} +1 -1
- package/build/dist/chunks/{D6ZJPNK7.js → 5N3O42X6.js} +1 -1
- package/build/dist/chunks/{UA4O226F.js → 5SMVQCAP.js} +1 -1
- package/build/dist/chunks/{6L5KTE6Y.js → 5SZPNZG4.js} +1 -1
- package/build/dist/chunks/{6PY3IRDS.js → 64GOINYS.js} +1 -1
- package/build/dist/chunks/{5ZLOCQA4.js → 66F5ZH34.js} +1 -1
- package/build/dist/chunks/{XDZRO5JQ.js → 6I4NTKB2.js} +1 -1
- package/build/dist/chunks/{LVLVP5KQ.js → 6JAXZNZ3.js} +1 -1
- package/build/dist/chunks/{BXHNYCH2.js → 6O3Q5B6M.js} +1 -1
- package/build/dist/chunks/{MFCPL6LF.js → 6OGDTEGH.js} +1 -1
- package/build/dist/chunks/{43CSMYDO.js → 6WD4HHID.js} +1 -1
- package/build/dist/chunks/{XJEOEMDS.js → 6WZX7C4T.js} +1 -1
- package/build/dist/chunks/6YB3VOUL.js +1 -0
- package/build/dist/chunks/77CLMPM7.js +1 -0
- package/build/dist/chunks/{EKNSLLJK.js → 7GJ6SLEV.js} +1 -1
- package/build/dist/chunks/{S2TAJHHK.js → 7KWZ5QJU.js} +1 -1
- package/build/dist/chunks/{CTMA4BTM.js → 7QIO77VE.js} +1 -1
- package/build/dist/chunks/7QZOTRSA.js +2 -0
- package/build/dist/chunks/{IKEJCBYU.js → 7WSHW7KW.js} +1 -1
- package/build/dist/chunks/{PQC5635W.js → A7I4IWUB.js} +1 -1
- package/build/dist/chunks/ACW63WIL.js +20 -0
- package/build/dist/chunks/AEL62KCG.js +1 -0
- package/build/dist/chunks/{UPMGGK34.js → AFBEZXNV.js} +1 -1
- package/build/dist/chunks/{AUOXDNUO.js → AKYF5264.js} +1 -1
- package/build/dist/chunks/{HVM2EEXB.js → ALLLYOUG.js} +1 -1
- package/build/dist/chunks/APQYLJGS.js +1 -0
- package/build/dist/chunks/AW7AXQCZ.js +1 -0
- package/build/dist/chunks/{WOEKXQAH.js → AXRL3REN.js} +1 -1
- package/build/dist/chunks/{ECWGKLBW.js → BBTPRZ6T.js} +1 -1
- package/build/dist/chunks/{ALPYEM7B.js → BND2UFVW.js} +1 -1
- package/build/dist/chunks/{GHPREYQK.js → BOVMED7R.js} +1 -1
- package/build/dist/chunks/{57JFKIMK.js → BTPXJAUX.js} +1 -1
- package/build/dist/chunks/{ZGKVXFM5.js → C7AXJHBT.js} +1 -1
- package/build/dist/chunks/{5U7TCKX2.js → CBG5HARQ.js} +1 -1
- package/build/dist/chunks/{NA7R6J5N.js → CBLMQ5UU.js} +1 -1
- package/build/dist/chunks/CDPSMI3Z.js +1 -0
- package/build/dist/chunks/{5N4A5XAW.js → CHXBOXOD.js} +1 -1
- package/build/dist/chunks/{2ZUP7ZEV.js → CQEJSCFQ.js} +1 -1
- package/build/dist/chunks/{6AAARNZ3.js → DBNTZEAJ.js} +1 -1
- package/build/dist/chunks/{IQIWASRD.js → DHUDSOGR.js} +1 -1
- package/build/dist/chunks/{L7OQUHM5.js → DJN3JAWB.js} +1 -1
- package/build/dist/chunks/{YPM2UITD.js → DL6AEWEM.js} +1 -1
- package/build/dist/chunks/{CERNEJ2F.js → DW4V5PUY.js} +1 -1
- package/build/dist/chunks/E3RACZUY.js +1 -0
- package/build/dist/chunks/{MOPETB64.js → EGYVRQUR.js} +1 -1
- package/build/dist/chunks/{IQGY5FW7.js → ER47KGRM.js} +1 -1
- package/build/dist/chunks/{ZSQOMSOC.js → FEYAY6OZ.js} +1 -1
- package/build/dist/chunks/FIO6VC2J.js +1 -0
- package/build/dist/chunks/FJ4S4GHY.js +1 -0
- package/build/dist/chunks/{RPNAFUM5.js → FUDAXV5X.js} +1 -1
- package/build/dist/chunks/{I6KUORFT.js → GG6Y4OCJ.js} +1 -1
- package/build/dist/chunks/{3AXVB23N.js → GGHBFLRC.js} +1 -1
- package/build/dist/chunks/{4ALMYJJV.js → GGSAKCND.js} +1 -1
- package/build/dist/chunks/GNC6RXLT.js +1 -0
- package/build/dist/chunks/{3ESNHZT5.js → GRQYTVNT.js} +1 -1
- package/build/dist/chunks/{WVONJOWN.js → GSBIERZD.js} +1 -1
- package/build/dist/chunks/H43RNCX2.js +1 -0
- package/build/dist/chunks/{NYNJITCM.js → H6T5FXEX.js} +1 -1
- package/build/dist/chunks/HHXBUYHO.js +1 -0
- package/build/dist/chunks/{64WKYWZV.js → HKEMQBFA.js} +1 -1
- package/build/dist/chunks/{4YFVAYKR.js → HM72DH4V.js} +1 -1
- package/build/dist/chunks/{XFKVU46U.js → HQUVB7Z5.js} +1 -1
- package/build/dist/chunks/HS4DZPYT.js +1 -0
- package/build/dist/chunks/{OTIXQZ3X.js → HU7IMNBI.js} +1 -1
- package/build/dist/chunks/{ENX72ARB.js → HWX36XJI.js} +1 -1
- package/build/dist/chunks/{QRC4ZPDA.js → I26DMNJG.js} +1 -1
- package/build/dist/chunks/I55MURSJ.js +1 -0
- package/build/dist/chunks/I6PQW2JI.js +1 -0
- package/build/dist/chunks/{S3FPF537.js → IMO3GDA5.js} +1 -1
- package/build/dist/chunks/{BQICZFLR.js → IOYRL6AY.js} +1 -1
- package/build/dist/chunks/IPN6Z4JM.js +1 -0
- package/build/dist/chunks/{MKBNLGDD.js → IPRVIKYC.js} +1 -1
- package/build/dist/chunks/{EOQYLFXA.js → IVX4R5OL.js} +1 -1
- package/build/dist/chunks/IX3GZMTM.js +1 -0
- package/build/dist/chunks/JFYBH3DX.js +1 -0
- package/build/dist/chunks/{Y7RPSDD2.js → JKD2B6OX.js} +1 -1
- package/build/dist/chunks/JQOQMFWD.js +3 -0
- package/build/dist/chunks/{PSVOVZH7.js → JUZ5JU6D.js} +5 -5
- package/build/dist/chunks/{I4TGMF2C.js → JZS3E66E.js} +1 -1
- package/build/dist/chunks/{SSIENQVU.js → K3RDPI5J.js} +1 -1
- package/build/dist/chunks/{PADWZX7J.js → K4DHHQBI.js} +1 -1
- package/build/dist/chunks/{NB3LYS3G.js → KIFZ5ZSK.js} +1 -1
- package/build/dist/chunks/KVFZKPJT.js +1 -0
- package/build/dist/chunks/{EYFBVQ46.js → L5BLHY34.js} +1 -1
- package/build/dist/chunks/{GVPX5XCL.js → LKXO2BQS.js} +1 -1
- package/build/dist/chunks/{JPNYUEQP.js → LKZX4CAA.js} +1 -1
- package/build/dist/chunks/{LROVANUR.js → LYMNHO5T.js} +1 -1
- package/build/dist/chunks/{QSN6Y2K6.js → M2UXYCKH.js} +1 -1
- package/build/dist/chunks/{BNG2IWZL.js → M37654RL.js} +1 -1
- package/build/dist/chunks/{YAJYDD6C.js → M6LC6DRE.js} +1 -1
- package/build/dist/chunks/{AG67Z3SC.js → MOE3EVAL.js} +1 -1
- package/build/dist/chunks/{DVVFT42J.js → MRMR4QHA.js} +1 -1
- package/build/dist/chunks/{WWHCEMNB.js → N4Q6GN65.js} +1 -1
- package/build/dist/chunks/{S5WICHIS.js → NAZPDRIF.js} +1 -1
- package/build/dist/chunks/{HSFOWJ3Z.js → NKZKKCK2.js} +1 -1
- package/build/dist/chunks/{BAAXGB4K.js → NOFUKKP5.js} +1 -1
- package/build/dist/chunks/{5KUWLUPM.js → NWNYJ26T.js} +1 -1
- package/build/dist/chunks/{7UOOIDR3.js → O6ROOKY2.js} +1 -1
- package/build/dist/chunks/{KBXU7U6Q.js → O7HCEPQY.js} +1 -1
- package/build/dist/chunks/{LDT3QTSY.js → OJ4WJUPP.js} +1 -1
- package/build/dist/chunks/{WD37MEMZ.js → OLSP46ZD.js} +1 -1
- package/build/dist/chunks/{TPL4U3AQ.js → OOZSE2R7.js} +1 -1
- package/build/dist/chunks/OTXSKFUD.js +1 -0
- package/build/dist/chunks/{4TQQH7N6.js → P5AJSLZ7.js} +1 -1
- package/build/dist/chunks/{BK23XJXE.js → P5PYFK7L.js} +1 -1
- package/build/dist/chunks/{A6YQ5H24.js → PACN53TR.js} +1 -1
- package/build/dist/chunks/{K72EYD6R.js → PAHXBLCS.js} +1 -1
- package/build/dist/chunks/PAY5PD4H.js +1 -0
- package/build/dist/chunks/{SGEZIYJW.js → PIIHOXWF.js} +1 -1
- package/build/dist/chunks/{SQL6HD5E.js → PK66GCDT.js} +1 -1
- package/build/dist/chunks/PNA6UIE5.js +1 -0
- package/build/dist/chunks/{6FTYNYGF.js → PSBQWDYI.js} +1 -1
- package/build/dist/chunks/{W76QC2AW.js → PV5FDT6O.js} +1 -1
- package/build/dist/chunks/{42DQTKEO.js → PXT5YTWU.js} +1 -1
- package/build/dist/chunks/{4ISR2U72.js → PZGGE5D3.js} +1 -1
- package/build/dist/chunks/{IMRXZ7JB.js → Q42YI3EP.js} +1 -1
- package/build/dist/chunks/{F3BSEE52.js → QA2RRIES.js} +1 -1
- package/build/dist/chunks/{ZBFKKUNP.js → QA3UHEO3.js} +1 -1
- package/build/dist/chunks/{PWH464CJ.js → QBIY6FQN.js} +1 -1
- package/build/dist/chunks/QFNT73OF.js +1 -0
- package/build/dist/chunks/QHBS3PVU.js +1 -0
- package/build/dist/chunks/QQECG3WP.js +1 -0
- package/build/dist/chunks/{RVO3QK2B.js → QU5XKRGK.js} +1 -1
- package/build/dist/chunks/QW2OPEYJ.js +1 -0
- package/build/dist/chunks/{G7XSFUDL.js → QYVREJYC.js} +1 -1
- package/build/dist/chunks/{KA7BPBCV.js → ROFPXEQ5.js} +1 -1
- package/build/dist/chunks/{5MQ5KSSV.js → RTAHNWHN.js} +1 -1
- package/build/dist/chunks/{MDDHG34Y.js → RTGS7RIO.js} +1 -1
- package/build/dist/chunks/{3WXK2FUA.js → RUC7KH7A.js} +1 -1
- package/build/dist/chunks/{MBTARLZQ.js → RUX3RY7Y.js} +1 -1
- package/build/dist/chunks/{3VAJW6TQ.js → RVDUSNWW.js} +1 -1
- package/build/dist/chunks/{ET23SES4.js → S5CBVFHY.js} +1 -1
- package/build/dist/chunks/{WMNRP3YH.js → SIYUNOLI.js} +1 -1
- package/build/dist/chunks/{TNKVRVTH.js → SJJR4ZBZ.js} +1 -1
- package/build/dist/chunks/{UFVPMWPJ.js → SMYWWIE6.js} +1 -1
- package/build/dist/chunks/{Z4SRGAVL.js → SPJCSEKP.js} +1 -1
- package/build/dist/chunks/{YEXUSRIZ.js → T7TFUH5K.js} +1 -1
- package/build/dist/chunks/{SKMPKAZI.js → TAEZTP4L.js} +1 -1
- package/build/dist/chunks/{E3UBHTJO.js → TEJ7W534.js} +1 -1
- package/build/dist/chunks/{AWXJV2YH.js → TFDPEAVZ.js} +1 -1
- package/build/dist/chunks/{UOGHQLQX.js → TMVO2DAK.js} +1 -1
- package/build/dist/chunks/{QJFXLYZG.js → TPBAFS7K.js} +1 -1
- package/build/dist/chunks/{MXW2TP5P.js → TVWMTMEF.js} +1 -1
- package/build/dist/chunks/{GRIGSPD4.js → TX2EOIRS.js} +1 -1
- package/build/dist/chunks/{Y7PRJOIK.js → U2RMUVVY.js} +1 -1
- package/build/dist/chunks/{VV2HEIFI.js → U5PMVP56.js} +1 -1
- package/build/dist/chunks/{TBCSZDAF.js → UD2XMNIT.js} +1 -1
- package/build/dist/chunks/{F26FK47J.js → UNJJRQIU.js} +1 -1
- package/build/dist/chunks/V5JWGWXC.js +1 -0
- package/build/dist/chunks/V74F6IDY.js +1 -0
- package/build/dist/chunks/VCOTCVKN.js +1 -0
- package/build/dist/chunks/{MYFAKCQI.js → VEQBHI6O.js} +1 -1
- package/build/dist/chunks/VHV6WQ5F.js +1 -0
- package/build/dist/chunks/{7WQEPZJY.js → VNV6ZISN.js} +1 -1
- package/build/dist/chunks/{W2OJ57ZO.js → VYAJXLND.js} +1 -1
- package/build/dist/chunks/{MDV7GECM.js → VYYSL557.js} +1 -1
- package/build/dist/chunks/WCNHZYQQ.js +1 -0
- package/build/dist/chunks/{K22EXPWN.js → WIRBCS4W.js} +1 -1
- package/build/dist/chunks/{YRXT3HTW.js → WLMWWEP7.js} +1 -1
- package/build/dist/chunks/{NDW5DAFL.js → WP6RHXGN.js} +1 -1
- package/build/dist/chunks/{PLZKXQ76.js → WTXC3XKW.js} +1 -1
- package/build/dist/chunks/{WGL46F3S.js → WU7XIAXB.js} +1 -1
- package/build/dist/chunks/{5OKJEGBH.js → WV3A3OUU.js} +1 -1
- package/build/dist/chunks/{MGPHD4VV.js → X2P55AC3.js} +1 -1
- package/build/dist/chunks/{RNC463IM.js → XBE3B6Y2.js} +1 -1
- package/build/dist/chunks/XD6X3KTC.js +1 -0
- package/build/dist/chunks/{BIRMUW7Z.js → XKSVTN5X.js} +1 -1
- package/build/dist/chunks/XL3LLGIR.js +1 -0
- package/build/dist/chunks/XQA5LCL6.js +1 -0
- package/build/dist/chunks/{SDHPFXRM.js → XSKFKBDR.js} +1 -1
- package/build/dist/chunks/{TJWVY4VO.js → YCZPSMZ5.js} +1 -1
- package/build/dist/chunks/{JZXYLHI7.js → YDNTY67T.js} +1 -1
- package/build/dist/chunks/{2DUCTO5C.js → YN56C7PN.js} +1 -1
- package/build/dist/chunks/{E6RRXNV2.js → YRNXGQJC.js} +1 -1
- package/build/dist/chunks/YWRLY5EA.js +1 -0
- package/build/dist/chunks/YWSX6IE6.js +1 -0
- package/build/dist/chunks/{DP2NIYBP.js → YXTSWRV5.js} +1 -1
- package/build/dist/chunks/{MQYOG66Q.js → Z6LZGCVW.js} +1 -1
- package/build/dist/chunks/{OFI3Y55L.js → ZQAFFWDK.js} +1 -1
- package/build/dist/chunks/{NZXQWDGF.js → ZQWZGH7V.js} +1 -1
- package/build/dist/chunks/{TBIVTEP5.js → ZSN4IRI5.js} +1 -1
- package/build/dist/chunks/{ZET37EIG.js → ZV5HIQXC.js} +1 -1
- package/build/dist/chunks/{VHLINDDS.js → ZXJ24B4L.js} +1 -1
- package/package.json +1 -1
- package/build/dist/chunks/24CQ2SPB.js +0 -1
- package/build/dist/chunks/2OJAOVMG.js +0 -1
- package/build/dist/chunks/65EQECL3.js +0 -1
- package/build/dist/chunks/6YYCGUCU.js +0 -1
- package/build/dist/chunks/EU3OAJU2.js +0 -1
- package/build/dist/chunks/H4NYYJ3Z.js +0 -1
- package/build/dist/chunks/HTXKERNS.js +0 -1
- package/build/dist/chunks/JG27HM4P.js +0 -1
- package/build/dist/chunks/L6D26AMO.js +0 -1
- package/build/dist/chunks/O6L4BJP4.js +0 -1
- package/build/dist/chunks/SUFA2GKR.js +0 -1
- package/build/dist/chunks/UP7FBDMJ.js +0 -1
- package/build/dist/chunks/YHRUAQQK.js +0 -1
- package/build/dist/chunks/ZCOFMGPS.js +0 -1
- package/build/dist/chunks/ZCUXM52B.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as H}from"./E3UBHTJO.js";import{a as L}from"./KA7BPBCV.js";import{b as z}from"./Z4SRGAVL.js";import{a as P}from"./PBQSJSZO.js";import{c as D}from"./MYFAKCQI.js";import{c as y,e as b,g as A,i as N,l as _}from"./5KUWLUPM.js";import{a as E}from"./UP7FBDMJ.js";import{a as l,i as I}from"./FWD4L3CJ.js";import{a as u}from"./XSD5NL7J.js";import{a as S}from"./JXOEJPJ4.js";import{encodeFunctionData as C,parseAbi as Y,zeroAddress as v}from"viem";import{encodeAbiParameters as B,encodeFunctionData as G,keccak256 as O,parseAbi as J}from"viem";var R=I[l].merkl.distributor.address,w="Claim rewards on Merkl (Powered by Merkl \u2014 https://app.merkl.xyz)",j=`${w}. No claimable rewards on Robinhood Chain. Pending rewards must settle into a Merkle root before they can be claimed.`,T=J(["function claimed(address user,address token) view returns (uint208 amount,uint48 timestamp,bytes32 merkleRoot)","function getMerkleRoot() view returns (bytes32)","function claim(address[] users,address[] tokens,uint256[] amounts,bytes32[][] proofs)"]);function W(o){return typeof o=="string"&&/^0x[0-9a-fA-F]{64}$/.test(o)}function p(){throw new u("Merkl returned an unexpected response. Please refetch rewards.")}function x(o){typeof o!="string"&&p();let d=E(o);if(d>=1n<<256n)throw new u("The Merkl reward amount exceeds the uint256 range.");return d.toString()}function K(o){let d=[],m=new Set;for(let c of o)if((!b(c)||!b(c.chain)||!Number.isSafeInteger(c.chain.id))&&p(),c.chain.id===l){Array.isArray(c.rewards)||p();for(let r of c.rewards){if((!b(r)||typeof r.distributionLayer!="string"||!b(r.token))&&p(),r.distributionLayer!=="TREE"||(Number.isSafeInteger(r.token.chainId)||p(),r.token.chainId!==l)||(Array.isArray(r.proofs)||p(),!r.proofs.length))continue;(!r.proofs.every(W)||typeof r.token.address!="string"||typeof r.token.symbol!="string"||!r.token.symbol.trim()||typeof r.token.decimals!="number"||!Number.isInteger(r.token.decimals)||r.token.decimals<0||r.token.decimals>255)&&p(),P(r.token.address);let t=x(r.amount),e=x(r.pending);if(BigInt(t)===0n)continue;let n=r.token.address.toLowerCase();if(m.has(n))throw new u("Merkl returned duplicate token leaves. Please refetch rewards.");m.add(n),d.push({token:{address:r.token.address,chainId:l,decimals:r.token.decimals,symbol:r.token.symbol},amount:t,pending:e,proofs:r.proofs})}}return d}function Q(o,d,m){let c=O(B([{type:"address"},{type:"address"},{type:"uint256"}],[o,d.token.address,BigInt(d.amount)]));for(let r of d.proofs){let t=BigInt(c)<BigInt(r)?[c,r]:[r,c];c=O(B([{type:"bytes32"},{type:"bytes32"}],t))}if(!A(c,m))throw new u("The Merkl proof does not match the active root. Please refetch rewards.")}function F(o){if(!b(o)||Object.keys(o).length)throw new u("This Merkl tool takes no arguments and uses the connected wallet.")}async function V(o,d){let m=await Z(o,d),c=[],r=new Set;for(let t of m)if((!b(t)||!b(t.chain)||!Number.isSafeInteger(t.chain.id))&&p(),t.chain.id===l){Array.isArray(t.rewards)||p();for(let e of t.rewards){if((!b(e)||typeof e.distributionLayer!="string"||!b(e.token)||!Number.isSafeInteger(e.token.chainId))&&p(),e.token.chainId!==l)continue;(typeof e.token.address!="string"||typeof e.token.symbol!="string"||!e.token.symbol.trim()||typeof e.token.decimals!="number"||!Number.isInteger(e.token.decimals)||e.token.decimals<0||e.token.decimals>255)&&p(),P(e.token.address);let n=x(e.amount),i=x(e.pending),s=`${e.distributionLayer}:${e.token.address.toLowerCase()}`;if(r.has(s))throw new u("Merkl returned duplicate earning rows. Please refetch rewards.");r.add(s);let a={address:e.token.address,symbol:e.token.symbol,decimals:e.token.decimals,chainId:l},k="0";if(e.distributionLayer==="TREE"){let h=await o.clientFor(l).readContract({address:R,abi:T,functionName:"claimed",args:[d,a.address]});(!Array.isArray(h)||typeof h[0]!="bigint"||h[0]<0n||h[0]>=1n<<208n)&&p(),k=h[0].toString()}c.push({token:a,amount:n,pending:i,claimed:k,claimable:"0",distributionLayer:e.distributionLayer,status:e.distributionLayer!=="TREE"?"unsupported_distribution_layer":BigInt(n)>BigInt(k)?"awaiting_verified_proof":BigInt(i)>0n?"pending_settlement":"settled"})}}return{body:m,earnings:c}}async function Z(o,d){return P(d),D(o.http,`https://api.merkl.xyz/v4/users/${d}/rewards/summary?chainId=${l}`,{method:"GET",headers:{"User-Agent":"oak-core/merkl"}},m=>Array.isArray(m))}async function $(o,d,m){P(d);let c=K(m??await Z(o,d)),r=o.clientFor(l),t=[];for(let n of c){let i=await r.readContract({address:R,abi:T,functionName:"claimed",args:[d,n.token.address]});if(!Array.isArray(i)||typeof i[0]!="bigint"||i[0]<0n||i[0]>=1n<<208n)throw new u("The Merkl claimed balance could not be read. Please try again.");BigInt(n.amount)<=i[0]||t.push({...n,claimed:i[0].toString(),claimable:(BigInt(n.amount)-i[0]).toString()})}if(!t.length)return[];let e=await r.readContract({address:R,abi:T,functionName:"getMerkleRoot"});if(!W(e))throw new u("The active Merkl root could not be read. Please try again.");for(let n of t)Q(d,n,e);return t}var X=o=>{async function d(t){try{return await t()}catch(e){throw new u(o.plainError(e))}}function m(t){let e=t.amount.startsWith("-"),n=e?t.amount.slice(1):t.amount;return`${e?"-":""}${o.formatAmount(n,t.token.decimals)} ${S(t.token.symbol)} (${t.token.address}, chain ${t.token.chainId}, ${t.token.decimals} decimals)`}let c=t=>$(o,t);return{tools:[{name:"merkl_rewards",description:"Read claimable rewards (Powered by Merkl \u2014 https://app.merkl.xyz).",inputSchema:{type:"object",properties:{},additionalProperties:!1,description:"Read rewards (Powered by Merkl \u2014 https://app.merkl.xyz)."},execute:(t,e)=>d(async()=>{F(t);let{body:n,earnings:i}=await V(o,e),s=await $(o,e,n);for(let a of i){let k=s.find(h=>A(h.token.address,a.token.address)&&a.distributionLayer==="TREE");k&&(a.claimed=k.claimed,a.claimable=k.claimable,a.status="claimable")}return{earnings:i,rewards:s.map(({proofs:a,...k})=>k),summary:s.length?`${w}. Claimable reward leaves: ${s.map(a=>m({token:a.token,amount:a.claimable})).join("; ")}. Wrapped leaves may transfer underlying tokens; claim preview shows the received assets. Pending rewards appear separately in earnings and are excluded from claimable amounts.`:`${j} Earnings include pending-only and unsupported distribution layers; an unverified amount is never presented as claimable.`}})},{name:"merkl_claim",description:w,inputSchema:{type:"object",properties:{},additionalProperties:!1,description:w},execute:(t,e)=>d(async()=>{F(t);let n=await c(e);if(!n.length)return{txs:[],summary:j};let i=[o.unsignedTx({to:R,chainId:l,value:"0",description:w,data:G({abi:T,functionName:"claim",args:[n.map(()=>e),n.map(a=>a.token.address),n.map(a=>BigInt(a.amount)),n.map(a=>a.proofs)]})})],s=await o.preview(i,e);return{txs:i,summary:`${w}. Prepared unsigned claim. Expected wallet changes: ${s.changes.length?s.changes.map(m).join("; "):"no token transfers in simulation"}. ${s.summary}`}})}],positions:t=>d(async()=>(await c(t)).map(e=>({module:"merkl",id:`${l}:${e.token.address.toLowerCase()}`,chainId:l,assets:[{token:e.token,amount:e.claimable}],description:`${w}. Unclaimed reward leaf; wrapped rewards may transfer underlying assets. Pending rewards are excluded.`})))}},ue=o=>z("merkl",[X(o),L(o),U(o),H(o)]);var M=I[l].merkl.distributor.address,g=Y(["function operators(address,address) view returns (uint256)","function claimRecipient(address,address) view returns (address)","function toggleOperator(address,address)","function setClaimRecipient(address,address)","function claim(address[],address[],uint256[],bytes32[][])","function claimWithRecipient(address[],address[],uint256[],bytes32[][],address[],bytes[])"]),q="Provide a valid address.";function f(o,d=!1){let m=N(o,q);return d?m:_(m,q)}var U=o=>{let d=()=>o.clientFor(l),m=async(r,t,e)=>{let n=[o.unsignedTx({to:M,chainId:l,value:"0",data:r,description:t})],i=await o.preview(n,e);return{txs:n,preview:i,summary:`Powered by Merkl \u2014 https://app.merkl.xyz. ${t} ${i.summary}`}},c=(r,t,e,n)=>({name:`merkl_${r}`,inputSchema:{type:"object",properties:t,required:e,additionalProperties:!1},execute:async(i,s)=>{try{let a=Object.keys(i).find(k=>!Object.hasOwn(t,k));if(a)throw new u(`Unsupported Merkl input: ${a}.`);return await n(i,f(s))}catch(a){throw new u(o.plainError(a))}}});return{tools:[c("claim_config",{token:y,operator:y},[],async(r,t)=>{let e=f(r.token??v,!0),n=f(await d().readContract({address:M,abi:g,functionName:"claimRecipient",args:[t,v]}),!0),i=f(await d().readContract({address:M,abi:g,functionName:"claimRecipient",args:[t,e]}),!0),s;if(r.operator!==void 0){let a=await d().readContract({address:M,abi:g,functionName:"operators",args:[t,f(r.operator,!0)]});if(a!==0n&&a!==1n)throw new u("Merkl returned invalid operator authorization.");s=a===1n}return{chainId:l,wallet:t,token:e,defaultRecipient:n,tokenRecipient:i,effectiveRecipient:i!==v?i:n!==v?n:t,...s===void 0?{}:{operatorEnabled:s},summary:"Powered by Merkl \u2014 https://app.merkl.xyz. Zero recipient restores self-claims. Token overrides take precedence over the global recipient."}}),c("set_operator",{operator:y,enabled:{type:"boolean"}},["operator","enabled"],async(r,t)=>{let e=f(r.operator,!0);if(typeof r.enabled!="boolean")throw new u("Provide enabled as boolean.");let n=await d().readContract({address:M,abi:g,functionName:"operators",args:[t,e]});if(n!==0n&&n!==1n)throw new u("Merkl returned invalid operator authorization.");return n===1n===r.enabled?{txs:[],summary:"Powered by Merkl \u2014 https://app.merkl.xyz. Operator already has the requested state; no transaction needed."}:m(C({abi:g,functionName:"toggleOperator",args:[t,e]}),`${r.enabled?"Authorize":"Revoke"} Merkl claims by ${e} for ${t}. Zero operator grants permissionless claiming; configured recipients still apply. The contract toggles the observed state; preview and confirmation must remain current.`,t)}),c("set_recipient",{recipient:y,token:y},["recipient"],async(r,t)=>{let e=f(r.recipient,!0),n=f(r.token??v,!0);return m(C({abi:g,functionName:"setClaimRecipient",args:[e,n]}),`Set Merkl reward recipient for ${n===v?"all tokens":n} to ${e===v?`self (${t})`:e}. This redirects future claims; token-specific overrides remain authoritative.`,t)}),c("claim_to",{recipient:y,token:y,data:{type:"string",pattern:"^0x([0-9a-fA-F]{2})*$",maxLength:16386}},["recipient"],async(r,t)=>{let e=f(r.recipient),n=r.token===void 0?void 0:f(r.token),i=r.data??"0x";if(typeof i!="string"||!/^0x([0-9a-fA-F]{2})*$/.test(i)||i.length>16386)throw new u("Provide callback data as at most 8192 hexadecimal bytes.");let s=(await $(o,t)).filter(a=>!n||A(a.token.address,n));return s.length?m(C({abi:g,functionName:"claimWithRecipient",args:[s.map(()=>t),s.map(a=>a.token.address),s.map(a=>BigInt(a.amount)),s.map(a=>a.proofs),s.map(()=>e),s.map(()=>i)]}),`Claim ${s.map(a=>`${a.claimable} ${a.token.symbol} base units (token ${a.token.address}, decimals ${a.token.decimals})`).join("; ")} to ${e}, overriding saved claim recipients for this claim only. Callback data for each leaf: ${i}. Inspect all callback effects in preview.`,t):{txs:[],summary:"Powered by Merkl \u2014 https://app.merkl.xyz. No verified claimable rewards for the selected token."}}),c("claim_for",{user:y,token:y},["user"],async(r,t)=>{let e=f(r.user),n=r.token===void 0?void 0:f(r.token),i=(await $(o,e)).filter(s=>!n||A(s.token.address,n));return i.length?m(C({abi:g,functionName:"claim",args:[i.map(()=>e),i.map(s=>s.token.address),i.map(s=>BigInt(s.amount)),i.map(s=>s.proofs)]}),`Claim Merkl rewards for ${e}; caller ${t} pays gas. The user's saved recipients control payment. Claim authorization and actual receipts must pass preview.`,t):{txs:[],summary:"Powered by Merkl \u2014 https://app.merkl.xyz. No verified claimable rewards for this user."}})]}};export{U as a,$ as b,X as c,ue as d};
|
|
1
|
+
import{a as L}from"./ROFPXEQ5.js";import{a as H}from"./TEJ7W534.js";import{b as z}from"./SPJCSEKP.js";import{a as P}from"./43LI5NKJ.js";import{c as D}from"./VEQBHI6O.js";import{c as y,e as b,g as A,i as N,l as _}from"./NWNYJ26T.js";import{b as E}from"./IX3GZMTM.js";import{a as l,i as I}from"./FWD4L3CJ.js";import{a as u}from"./XSD5NL7J.js";import{a as S}from"./JXOEJPJ4.js";import{encodeFunctionData as C,parseAbi as Y,zeroAddress as v}from"viem";import{encodeAbiParameters as B,encodeFunctionData as G,keccak256 as O,parseAbi as J}from"viem";var R=I[l].merkl.distributor.address,w="Claim rewards on Merkl (Powered by Merkl \u2014 https://app.merkl.xyz)",j=`${w}. No claimable rewards on Robinhood Chain. Pending rewards must settle into a Merkle root before they can be claimed.`,T=J(["function claimed(address user,address token) view returns (uint208 amount,uint48 timestamp,bytes32 merkleRoot)","function getMerkleRoot() view returns (bytes32)","function claim(address[] users,address[] tokens,uint256[] amounts,bytes32[][] proofs)"]);function W(o){return typeof o=="string"&&/^0x[0-9a-fA-F]{64}$/.test(o)}function p(){throw new u("Merkl returned an unexpected response. Please refetch rewards.")}function x(o){typeof o!="string"&&p();let d=E(o);if(d>=1n<<256n)throw new u("The Merkl reward amount exceeds the uint256 range.");return d.toString()}function K(o){let d=[],m=new Set;for(let c of o)if((!b(c)||!b(c.chain)||!Number.isSafeInteger(c.chain.id))&&p(),c.chain.id===l){Array.isArray(c.rewards)||p();for(let r of c.rewards){if((!b(r)||typeof r.distributionLayer!="string"||!b(r.token))&&p(),r.distributionLayer!=="TREE"||(Number.isSafeInteger(r.token.chainId)||p(),r.token.chainId!==l)||(Array.isArray(r.proofs)||p(),!r.proofs.length))continue;(!r.proofs.every(W)||typeof r.token.address!="string"||typeof r.token.symbol!="string"||!r.token.symbol.trim()||typeof r.token.decimals!="number"||!Number.isInteger(r.token.decimals)||r.token.decimals<0||r.token.decimals>255)&&p(),P(r.token.address);let t=x(r.amount),e=x(r.pending);if(BigInt(t)===0n)continue;let n=r.token.address.toLowerCase();if(m.has(n))throw new u("Merkl returned duplicate token leaves. Please refetch rewards.");m.add(n),d.push({token:{address:r.token.address,chainId:l,decimals:r.token.decimals,symbol:r.token.symbol},amount:t,pending:e,proofs:r.proofs})}}return d}function Q(o,d,m){let c=O(B([{type:"address"},{type:"address"},{type:"uint256"}],[o,d.token.address,BigInt(d.amount)]));for(let r of d.proofs){let t=BigInt(c)<BigInt(r)?[c,r]:[r,c];c=O(B([{type:"bytes32"},{type:"bytes32"}],t))}if(!A(c,m))throw new u("The Merkl proof does not match the active root. Please refetch rewards.")}function F(o){if(!b(o)||Object.keys(o).length)throw new u("This Merkl tool takes no arguments and uses the connected wallet.")}async function V(o,d){let m=await Z(o,d),c=[],r=new Set;for(let t of m)if((!b(t)||!b(t.chain)||!Number.isSafeInteger(t.chain.id))&&p(),t.chain.id===l){Array.isArray(t.rewards)||p();for(let e of t.rewards){if((!b(e)||typeof e.distributionLayer!="string"||!b(e.token)||!Number.isSafeInteger(e.token.chainId))&&p(),e.token.chainId!==l)continue;(typeof e.token.address!="string"||typeof e.token.symbol!="string"||!e.token.symbol.trim()||typeof e.token.decimals!="number"||!Number.isInteger(e.token.decimals)||e.token.decimals<0||e.token.decimals>255)&&p(),P(e.token.address);let n=x(e.amount),i=x(e.pending),s=`${e.distributionLayer}:${e.token.address.toLowerCase()}`;if(r.has(s))throw new u("Merkl returned duplicate earning rows. Please refetch rewards.");r.add(s);let a={address:e.token.address,symbol:e.token.symbol,decimals:e.token.decimals,chainId:l},k="0";if(e.distributionLayer==="TREE"){let h=await o.clientFor(l).readContract({address:R,abi:T,functionName:"claimed",args:[d,a.address]});(!Array.isArray(h)||typeof h[0]!="bigint"||h[0]<0n||h[0]>=1n<<208n)&&p(),k=h[0].toString()}c.push({token:a,amount:n,pending:i,claimed:k,claimable:"0",distributionLayer:e.distributionLayer,status:e.distributionLayer!=="TREE"?"unsupported_distribution_layer":BigInt(n)>BigInt(k)?"awaiting_verified_proof":BigInt(i)>0n?"pending_settlement":"settled"})}}return{body:m,earnings:c}}async function Z(o,d){return P(d),D(o.http,`https://api.merkl.xyz/v4/users/${d}/rewards/summary?chainId=${l}`,{method:"GET",headers:{"User-Agent":"oak-core/merkl"}},m=>Array.isArray(m))}async function $(o,d,m){P(d);let c=K(m??await Z(o,d)),r=o.clientFor(l),t=[];for(let n of c){let i=await r.readContract({address:R,abi:T,functionName:"claimed",args:[d,n.token.address]});if(!Array.isArray(i)||typeof i[0]!="bigint"||i[0]<0n||i[0]>=1n<<208n)throw new u("The Merkl claimed balance could not be read. Please try again.");BigInt(n.amount)<=i[0]||t.push({...n,claimed:i[0].toString(),claimable:(BigInt(n.amount)-i[0]).toString()})}if(!t.length)return[];let e=await r.readContract({address:R,abi:T,functionName:"getMerkleRoot"});if(!W(e))throw new u("The active Merkl root could not be read. Please try again.");for(let n of t)Q(d,n,e);return t}var X=o=>{async function d(t){try{return await t()}catch(e){throw new u(o.plainError(e))}}function m(t){let e=t.amount.startsWith("-"),n=e?t.amount.slice(1):t.amount;return`${e?"-":""}${o.formatAmount(n,t.token.decimals)} ${S(t.token.symbol)} (${t.token.address}, chain ${t.token.chainId}, ${t.token.decimals} decimals)`}let c=t=>$(o,t);return{tools:[{name:"merkl_rewards",description:"Read claimable rewards (Powered by Merkl \u2014 https://app.merkl.xyz).",inputSchema:{type:"object",properties:{},additionalProperties:!1,description:"Read rewards (Powered by Merkl \u2014 https://app.merkl.xyz)."},execute:(t,e)=>d(async()=>{F(t);let{body:n,earnings:i}=await V(o,e),s=await $(o,e,n);for(let a of i){let k=s.find(h=>A(h.token.address,a.token.address)&&a.distributionLayer==="TREE");k&&(a.claimed=k.claimed,a.claimable=k.claimable,a.status="claimable")}return{earnings:i,rewards:s.map(({proofs:a,...k})=>k),summary:s.length?`${w}. Claimable reward leaves: ${s.map(a=>m({token:a.token,amount:a.claimable})).join("; ")}. Wrapped leaves may transfer underlying tokens; claim preview shows the received assets. Pending rewards appear separately in earnings and are excluded from claimable amounts.`:`${j} Earnings include pending-only and unsupported distribution layers; an unverified amount is never presented as claimable.`}})},{name:"merkl_claim",description:w,inputSchema:{type:"object",properties:{},additionalProperties:!1,description:w},execute:(t,e)=>d(async()=>{F(t);let n=await c(e);if(!n.length)return{txs:[],summary:j};let i=[o.unsignedTx({to:R,chainId:l,value:"0",description:w,data:G({abi:T,functionName:"claim",args:[n.map(()=>e),n.map(a=>a.token.address),n.map(a=>BigInt(a.amount)),n.map(a=>a.proofs)]})})],s=await o.preview(i,e);return{txs:i,summary:`${w}. Prepared unsigned claim. Expected wallet changes: ${s.changes.length?s.changes.map(m).join("; "):"no token transfers in simulation"}. ${s.summary}`}})}],positions:t=>d(async()=>(await c(t)).map(e=>({module:"merkl",id:`${l}:${e.token.address.toLowerCase()}`,chainId:l,assets:[{token:e.token,amount:e.claimable}],description:`${w}. Unclaimed reward leaf; wrapped rewards may transfer underlying assets. Pending rewards are excluded.`})))}},ue=o=>z("merkl",[X(o),L(o),U(o),H(o)]);var M=I[l].merkl.distributor.address,g=Y(["function operators(address,address) view returns (uint256)","function claimRecipient(address,address) view returns (address)","function toggleOperator(address,address)","function setClaimRecipient(address,address)","function claim(address[],address[],uint256[],bytes32[][])","function claimWithRecipient(address[],address[],uint256[],bytes32[][],address[],bytes[])"]),q="Provide a valid address.";function f(o,d=!1){let m=N(o,q);return d?m:_(m,q)}var U=o=>{let d=()=>o.clientFor(l),m=async(r,t,e)=>{let n=[o.unsignedTx({to:M,chainId:l,value:"0",data:r,description:t})],i=await o.preview(n,e);return{txs:n,preview:i,summary:`Powered by Merkl \u2014 https://app.merkl.xyz. ${t} ${i.summary}`}},c=(r,t,e,n)=>({name:`merkl_${r}`,inputSchema:{type:"object",properties:t,required:e,additionalProperties:!1},execute:async(i,s)=>{try{let a=Object.keys(i).find(k=>!Object.hasOwn(t,k));if(a)throw new u(`Unsupported Merkl input: ${a}.`);return await n(i,f(s))}catch(a){throw new u(o.plainError(a))}}});return{tools:[c("claim_config",{token:y,operator:y},[],async(r,t)=>{let e=f(r.token??v,!0),n=f(await d().readContract({address:M,abi:g,functionName:"claimRecipient",args:[t,v]}),!0),i=f(await d().readContract({address:M,abi:g,functionName:"claimRecipient",args:[t,e]}),!0),s;if(r.operator!==void 0){let a=await d().readContract({address:M,abi:g,functionName:"operators",args:[t,f(r.operator,!0)]});if(a!==0n&&a!==1n)throw new u("Merkl returned invalid operator authorization.");s=a===1n}return{chainId:l,wallet:t,token:e,defaultRecipient:n,tokenRecipient:i,effectiveRecipient:i!==v?i:n!==v?n:t,...s===void 0?{}:{operatorEnabled:s},summary:"Powered by Merkl \u2014 https://app.merkl.xyz. Zero recipient restores self-claims. Token overrides take precedence over the global recipient."}}),c("set_operator",{operator:y,enabled:{type:"boolean"}},["operator","enabled"],async(r,t)=>{let e=f(r.operator,!0);if(typeof r.enabled!="boolean")throw new u("Provide enabled as boolean.");let n=await d().readContract({address:M,abi:g,functionName:"operators",args:[t,e]});if(n!==0n&&n!==1n)throw new u("Merkl returned invalid operator authorization.");return n===1n===r.enabled?{txs:[],summary:"Powered by Merkl \u2014 https://app.merkl.xyz. Operator already has the requested state; no transaction needed."}:m(C({abi:g,functionName:"toggleOperator",args:[t,e]}),`${r.enabled?"Authorize":"Revoke"} Merkl claims by ${e} for ${t}. Zero operator grants permissionless claiming; configured recipients still apply. The contract toggles the observed state; preview and confirmation must remain current.`,t)}),c("set_recipient",{recipient:y,token:y},["recipient"],async(r,t)=>{let e=f(r.recipient,!0),n=f(r.token??v,!0);return m(C({abi:g,functionName:"setClaimRecipient",args:[e,n]}),`Set Merkl reward recipient for ${n===v?"all tokens":n} to ${e===v?`self (${t})`:e}. This redirects future claims; token-specific overrides remain authoritative.`,t)}),c("claim_to",{recipient:y,token:y,data:{type:"string",pattern:"^0x([0-9a-fA-F]{2})*$",maxLength:16386}},["recipient"],async(r,t)=>{let e=f(r.recipient),n=r.token===void 0?void 0:f(r.token),i=r.data??"0x";if(typeof i!="string"||!/^0x([0-9a-fA-F]{2})*$/.test(i)||i.length>16386)throw new u("Provide callback data as at most 8192 hexadecimal bytes.");let s=(await $(o,t)).filter(a=>!n||A(a.token.address,n));return s.length?m(C({abi:g,functionName:"claimWithRecipient",args:[s.map(()=>t),s.map(a=>a.token.address),s.map(a=>BigInt(a.amount)),s.map(a=>a.proofs),s.map(()=>e),s.map(()=>i)]}),`Claim ${s.map(a=>`${a.claimable} ${a.token.symbol} base units (token ${a.token.address}, decimals ${a.token.decimals})`).join("; ")} to ${e}, overriding saved claim recipients for this claim only. Callback data for each leaf: ${i}. Inspect all callback effects in preview.`,t):{txs:[],summary:"Powered by Merkl \u2014 https://app.merkl.xyz. No verified claimable rewards for the selected token."}}),c("claim_for",{user:y,token:y},["user"],async(r,t)=>{let e=f(r.user),n=r.token===void 0?void 0:f(r.token),i=(await $(o,e)).filter(s=>!n||A(s.token.address,n));return i.length?m(C({abi:g,functionName:"claim",args:[i.map(()=>e),i.map(s=>s.token.address),i.map(s=>BigInt(s.amount)),i.map(s=>s.proofs)]}),`Claim Merkl rewards for ${e}; caller ${t} pays gas. The user's saved recipients control payment. Claim authorization and actual receipts must pass preview.`,t):{txs:[],summary:"Powered by Merkl \u2014 https://app.merkl.xyz. No verified claimable rewards for this user."}})]}};export{U as a,$ as b,X as c,ue as d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as G}from"./
|
|
1
|
+
import{b as G}from"./VYAJXLND.js";import{a as p}from"./43LI5NKJ.js";import{a as W}from"./66F5ZH34.js";import{g as P}from"./NWNYJ26T.js";import{b as T}from"./IX3GZMTM.js";import{a as w,d as R,i as B}from"./FWD4L3CJ.js";import{a as o}from"./XSD5NL7J.js";import{encodeFunctionData as h,getAddress as L,parseAbi as x}from"viem";var y={address:L("0x451b42a15100c340ca12f7c66de06fac5ea2d751"),symbol:"BOW",decimals:18,chainId:w},u=L("0xeba502e1177f5fad9432c2deb273569d8381e01a"),b={address:B[w].tokens.USDG.address,symbol:"USDG",decimals:R,chainId:w},i=x(["function stakingToken() view returns (address)","function rewardsToken() view returns (address)","function balanceOf(address account) view returns (uint256)","function earned(address account) view returns (uint256)","function stake(uint256 amount)","function withdraw(uint256 amount)","function getReward()","function exit()","function cooldown() view returns (uint256)","function stakedAt(address) view returns (uint256)","function stakePaused() view returns (bool)","function totalSupply() view returns (uint256)","function rewardRate() view returns (uint256)","function rewardsDuration() view returns (uint256)","function periodFinish() view returns (uint256)","function owner() view returns (address)","function rewardsDistribution() view returns (address)","function notifyRewardAmount(uint256 reward)","function setRewardsDistribution(address distribution)","function setRewardsDuration(uint256 duration)","function setCooldown(uint256 cooldown)","function setStakePaused(bool paused)","function recoverERC20(address token,uint256 amount)","function transferOwnership(address newOwner)","function renounceOwnership()"]),X=m=>{async function D(n){try{return await n()}catch(t){throw new o(m.plainError(t))}}function A(n,t){if(Object.keys(n).some(e=>!t.includes(e)))throw new o("Unsupported Longbow staking input. Use the fields in the tool schema.")}async function U(){let n=m.clientFor(w);if(await n.getChainId()!==w)throw new o("Longbow requires a client on chain 4663.");let[t,e]=await Promise.all([n.readContract({address:u,abi:i,functionName:"stakingToken"}),n.readContract({address:u,abi:i,functionName:"rewardsToken"})]);if(typeof t!="string"||typeof e!="string"||!P(t,y.address)||!P(e,b.address))throw new o("Longbow staking does not report the pinned BOW stake and USDG reward tokens.");return n}async function S(n){let t=await U(),[e,a,s]=await Promise.all([t.readContract({address:u,abi:i,functionName:"balanceOf",args:[n]}),t.readContract({address:u,abi:i,functionName:"earned",args:[n]}),t.readContract({address:y.address,abi:i,functionName:"balanceOf",args:[n]})]);return{staked:e,earned:a,held:s,rpc:t}}async function v(n,t,e){let a=await m.preview(n,t),s=a.changes.map(({token:r,amount:d})=>{let c=d.startsWith("-");return`${c?"-":"+"}${m.formatAmount(c?d.slice(1):d,r.decimals)} ${r.symbol}`}).join(", ");return{txs:n,preview:a,summary:`${e} ${a.summary} ${s?`Estimated changes: ${s}. `:""}No transaction was sent.`}}let O=(n,t)=>m.unsignedTx({to:u,data:n,value:"0",chainId:w,description:t}),l=n=>m.formatAmount(n.toString(),y.decimals);async function _(n,t){if(A(n,["amount"]),p(t),typeof n.amount!="string")throw new o("Provide an integer BOW amount in base units (18 decimals).");let e=T(n.amount),{held:a,rpc:s}=await S(t),[r,d]=await Promise.all([s.readContract({address:u,abi:i,functionName:"cooldown"}),s.readContract({address:u,abi:i,functionName:"stakePaused"})]);if(d)throw new o("Longbow new stakes are paused; withdrawals and claims remain available.");if(e<=0n)throw new o("Stake amount must be positive.");if(e>a)throw new o(`Insufficient BOW: wallet holds ${a.toString()} base units, requested ${e.toString()}.`);return v([m.approval(y.address,u,e.toString(),w),O(h({abi:i,functionName:"stake",args:[e]}),`Stake ${l(e)} BOW in Longbow StakingRewards.`)],t,`Approve exactly ${l(e)} BOW, then stake it for USDG rewards. Current withdrawal cooldown: ${r} seconds; staking restarts that clock.`)}async function I(n,t){A(n,["amount"]),p(t);let{staked:e,earned:a,rpc:s}=await S(t),r=await s.readContract({address:u,abi:i,functionName:"cooldown"});if(r>0n){let[c,g]=await Promise.all([s.readContract({address:u,abi:i,functionName:"stakedAt",args:[t]}),s.getBlock()]);if(g.timestamp<c+r)throw new o(`Longbow unstaking cooldown ends at Unix second ${c+r}. Rewards can still be claimed.`)}if(e===0n)throw new o("This wallet has no BOW staked with Longbow.");if(n.amount==="all")return v([O(h({abi:i,functionName:"exit"}),`Unstake all ${l(e)} BOW and claim USDG rewards.`)],t,`Exit Longbow staking: return all ${l(e)} staked BOW and claim ${m.formatAmount(a.toString(),b.decimals)} USDG of earned rewards in one call.`);if(typeof n.amount!="string")throw new o('Provide an integer BOW amount in base units, or "all".');let d=T(n.amount);if(d<=0n||d>e)throw new o(`Unstake amount must be positive and at most the ${e.toString()} base units staked.`);return v([O(h({abi:i,functionName:"withdraw",args:[d]}),`Unstake ${l(d)} BOW.`)],t,`Unstake ${l(d)} BOW. Earned USDG rewards stay claimable with longbow_claim_rewards.`)}async function E(n,t){A(n,[]),p(t);let{earned:e}=await S(t);if(e===0n)throw new o("No Longbow staking rewards to claim for this wallet.");let a=m.formatAmount(e.toString(),b.decimals);return v([O(h({abi:i,functionName:"getReward"}),`Claim ${a} USDG of Longbow staking rewards.`)],t,`Claim ${a} USDG of earned Longbow staking rewards; staked BOW stays staked.`)}async function F(n){return D(async()=>{p(n);let{staked:t,earned:e}=await S(n);return t===0n&&e===0n?[]:[{module:"longbow",id:`${w}:${u.toLowerCase()}`,chainId:w,assets:[...t>0n?[{token:{...y},amount:t.toString()}]:[],...e>0n?[{token:{...b},amount:e.toString()}]:[]],description:`Longbow BOW staking: ${l(t)} BOW staked, ${m.formatAmount(e.toString(),b.decimals)} USDG rewards earned and claimable.`}]})}let $=(n,t,e,a)=>({name:n,inputSchema:{type:"object",properties:t,required:e,additionalProperties:!1},execute:(s,r)=>D(()=>a(s,r))});async function j(n,t){A(n,[]),p(t);let{staked:e,earned:a,held:s,rpc:r}=await S(t),d=["cooldown","stakePaused","totalSupply","rewardRate","rewardsDuration","periodFinish","owner","rewardsDistribution"],c=await Promise.all(d.map(f=>r.readContract({address:u,abi:i,functionName:f}))),g=await r.readContract({address:u,abi:i,functionName:"stakedAt",args:[t]});return{chainId:w,staking:u,stakeToken:y,rewardToken:b,staked:e.toString(),earned:a.toString(),walletBalance:s.toString(),stakedAt:g.toString(),...Object.fromEntries(d.map((f,k)=>[f,typeof c[k]=="bigint"?c[k].toString():c[k]])),rewardRateScale:"1000000000000000000",caveat:"rewardRate is USDG base units multiplied by 1e18 per second, not APY. Cooldown and pause state are owner-configurable."}}let C=[["notifyRewardAmount",["uint256"]],["setRewardsDistribution",["address"]],["setRewardsDuration",["uint256"]],["setCooldown",["uint256"]],["setStakePaused",["bool"]],["recoverERC20",["address","uint256"]],["transferOwnership",["address"]],["renounceOwnership",[]]];async function q(n,t){A(n,["operation","values","fund"]),p(t);let e=C.find(([f])=>f===n.operation);if(!e||!Array.isArray(n.values)||n.values.length!==e[1].length)throw new o("Choose a staking operation and its exact ordered values.");let a=e[1].map((f,k)=>G(f,n.values[k])),s=await U(),r=e[0]==="notifyRewardAmount",d=await s.readContract({address:u,abi:i,functionName:r?"rewardsDistribution":"owner"});if(!P(d,t))throw new o("This wallet lacks the Longbow staking owner/distribution role.");if(n.fund!==void 0&&(typeof n.fund!="boolean"||!r))throw new o("fund is a boolean available only for notifyRewardAmount.");let c=`Longbow staking ${e[0]}, values ${JSON.stringify(n.values)}.${e[0]==="renounceOwnership"?" Owner administration is permanently relinquished.":""}`,g=[];if(r&&n.fund===!0){let f=a[0];if(f===0n)throw new o("Reward funding must be positive.");let k=x(["function transfer(address,uint256) returns (bool)"]);g.push(m.unsignedTx({to:b.address,data:h({abi:k,functionName:"transfer",args:[u,f]}),value:"0",chainId:w,description:`Fund exactly ${f} USDG base units before notifying rewards.`}))}return g.push(O(h({abi:i,functionName:e[0],args:a}),c)),v(g,t,`${c} ${n.fund===!0?"Funding and notification are separate transactions. A failed notification leaves funded USDG in the staking contract.":""}`)}let N=W("Positive BOW amount in integer base units (18 decimals).");return{positions:F,tools:[$("longbow_staking_status",{},[],j),$("longbow_manage_staking",{operation:{enum:C.map(([n])=>n)},values:{type:"array",maxItems:2,items:{oneOf:[{type:"string"},{type:"boolean"}]}},fund:{type:"boolean"}},["operation","values"],q),$("longbow_stake",{amount:N},["amount"],_),$("longbow_unstake",{amount:{anyOf:[N,{const:"all",description:"Unstake everything and claim rewards in one exit() call."}]}},["amount"],I),$("longbow_claim_rewards",{},[],E)]}};export{y as a,u as b,X as c};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as B}from"./
|
|
1
|
+
import{c as B}from"./VEQBHI6O.js";import{b as x,e as d,g as k}from"./NWNYJ26T.js";import{a as l}from"./XSD5NL7J.js";import{getAddress as C,keccak256 as I,toHex as D}from"viem";var R="https://balancesapi.ponsfamily.com/v1",P=/^(0|[1-9][0-9]{0,77})$/,$=/^[0-9A-Za-z_.-]{1,128}$/,y=e=>typeof e=="number"&&Number.isSafeInteger(e)&&e>=0,p=e=>typeof e=="string"&&P.test(e),S=e=>typeof e=="string"&&x.test(e);function M(e){return d(e)&&S(e.token)&&y(e.holders)&&p(e.supply)&&p(e.burned)&&p(e.circulating)&&d(e.as_of)&&y(e.as_of.rollup_bucket)&&y(e.as_of.tail_from_block)&&(e.next_cursor===null||e.next_cursor===void 0||typeof e.next_cursor=="string"&&$.test(e.next_cursor))&&Array.isArray(e.page)&&e.page.length<=50&&e.page.every(t=>d(t)&&S(t.wallet)&&p(t.balance)&&(t.label===void 0||t.label===null||typeof t.label=="string"))}var A=new WeakMap,c=()=>new l("The Pons holder index changed or returned an incomplete directory. Retry pons_holders without a cursor.");async function T(e,t){let n=A.get(e);n||(n=new Map,A.set(e,n));let f=n.get(t);if(f&&f.expires>Date.now())return f.directory;let o,g,m=new Set,_=new Set,s=[];for(let b=0;b<2e3;b++){let h=new URL(`${R}/tokens/${t.toLowerCase()}/holders`);h.searchParams.set("limit","50"),g&&h.searchParams.set("cursor",g);let r=await B(e.http,h.toString(),{method:"GET",redirect:"error",headers:{accept:"application/json"}},M);if(!k(r.token,t))throw c();if(r.holders>1e5)throw new l("The Pons holder directory exceeds 100000 indexed holders. No total or rank was computed.");if(o??=r,r.holders!==o.holders||r.supply!==o.supply||r.burned!==o.burned||r.circulating!==o.circulating||r.as_of.rollup_bucket!==o.as_of.rollup_bucket||r.as_of.tail_from_block!==o.as_of.tail_from_block)throw c();for(let u of r.page){let i=C(u.wallet);if(_.has(i)||BigInt(u.balance)===0n)throw c();_.add(i),s.push({...u,wallet:i})}if(s.length>o.holders)throw c();if(!r.next_cursor){if(s.length!==o.holders)throw c();s.sort((a,w)=>BigInt(a.balance)>BigInt(w.balance)?-1:BigInt(a.balance)<BigInt(w.balance)?1:a.wallet.toLowerCase().localeCompare(w.wallet.toLowerCase()));let u=I(D(JSON.stringify([t,o.as_of,s.map(a=>[a.wallet,a.balance])]))).slice(2,18),i={body:o,rows:s,fingerprint:u,fetchedAt:new Date().toISOString()};return n.delete(t),n.size>=4&&n.delete(n.keys().next().value),n.set(t,{directory:i,expires:Date.now()+15e3}),i}if(!r.page.length||m.has(r.next_cursor))throw c();m.add(r.next_cursor),g=r.next_cursor}throw new l("The Pons holder directory exceeds 100000 indexed holders. No total or rank was computed.")}function U(e){if(e===void 0)return{offset:0};if(typeof e!="string")throw new l("Use the nextCursor returned by the previous pons_holders page.");let t=/^holders_([0-9]{1,6})_([0-9a-f]{16})$/.exec(e);if(!t)throw new l("Use the nextCursor returned by the previous pons_holders page.");return{offset:Number(t[1]),fingerprint:t[2]}}function z(e,t){if(BigInt(t)===0n)return null;let n=BigInt(e)*10n**18n/BigInt(t);return`${n/10n**18n}.${(n%10n**18n).toString().padStart(18,"0")}`}export{R as a,T as b,U as c,z as d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as h}from"./
|
|
1
|
+
import{a as h}from"./FEYAY6OZ.js";import{e as k,i as V}from"./IPN6Z4JM.js";import{a as P,b as f,f as O,g as A}from"./PIIHOXWF.js";import{a as g,v as M}from"./2THSW4QN.js";import{a as b}from"./66F5ZH34.js";import{c as _,g as T}from"./NWNYJ26T.js";import{a as y}from"./FWD4L3CJ.js";import{a as l}from"./XSD5NL7J.js";import{encodeFunctionData as c,parseAbi as j,zeroAddress as I}from"viem";var n=j(["function owner() view returns (address)","function feeTo() view returns (address)","function feeToSetter() view returns (address)","function protocolFeeController() view returns (address)","function setFeeTo(address)","function setFeeToSetter(address)","function setOwner(address)","function enableFeeAmount(uint24,int24)","function setFeeProtocol(uint8,uint8)","function collectProtocol(address,uint128,uint128) returns (uint128,uint128)","function transferOwnership(address)","function setProtocolFeeController(address)","function setProtocolFee((address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks),uint24)","function collectProtocolFees(address recipient,address currency,uint256 amount) returns (uint256)"]),E=["set_fee_recipient","set_fee_setter","set_owner","enable_fee","set_pool_fee","collect_protocol","set_controller"],R={version:{type:"string",enum:["v2","v3","v4"]},operation:{type:"string",enum:E},target:_,token0:_,token1:_,fee:{type:"integer"},tickSpacing:{type:"integer"},fee0:{type:"integer"},fee1:{type:"integer"},currency:_,amount:b(),amount0Max:b(),amount1Max:b(),poolKey:{type:"object"}};function L(w){let x=async e=>{let i=w.clientFor(y);if(e==="v2"){let[o,t]=await Promise.all([i.readContract({address:h,abi:n,functionName:"feeToSetter"}),i.readContract({address:h,abi:n,functionName:"feeTo"})]);return{version:e,contract:h,owner:o,feeRecipient:t}}if(e==="v3")return{version:e,contract:k.factory,owner:await i.readContract({address:k.factory,abi:n,functionName:"owner"})};if(e==="v4"){let[o,t]=await Promise.all([i.readContract({address:g,abi:n,functionName:"owner"}),i.readContract({address:g,abi:n,functionName:"protocolFeeController"})]);return{version:e,contract:g,owner:o,controller:t}}throw new l("Provide protocol version v2, v3 or v4.")};return{tools:[{name:"uniswap_protocol_status",inputSchema:{type:"object",additionalProperties:!1,required:["version"],properties:{version:R.version}},async execute(e){return A(e,["version"]),x(e.version)}},{name:"uniswap_protocol_admin",inputSchema:{type:"object",additionalProperties:!1,required:["version","operation"],properties:R},async execute(e,i){let{version:o,operation:t}=e,v=await x(o),K=w.clientFor(y),C=o==="v4"&&["set_pool_fee","collect_protocol"].includes(String(t))?"controller"in v?v.controller:void 0:v.owner;if(!C||!T(C,i))throw new l("The signing wallet does not hold the required Uniswap owner/controller role.");let N=v.contract,s,a,F=()=>{let r=f(e.target);if(r===I)throw new l("Administration target must be nonzero.");return r},u=(r,d,p,m)=>{if(typeof r!="number"||!Number.isInteger(r)||r<p||r>m)throw new l(`${d} must be an integer from ${p} to ${m}.`);return r};if(o==="v2"&&t==="set_fee_recipient")a=["target"],s=c({abi:n,functionName:"setFeeTo",args:[f(e.target)]});else if(o==="v2"&&t==="set_fee_setter")a=["target"],s=c({abi:n,functionName:"setFeeToSetter",args:[F()]});else if(o==="v3"&&t==="set_owner")a=["target"],s=c({abi:n,functionName:"setOwner",args:[F()]});else if(o==="v3"&&t==="enable_fee")a=["fee","tickSpacing"],s=c({abi:n,functionName:"enableFeeAmount",args:[u(e.fee,"fee",0,999999),u(e.tickSpacing,"tickSpacing",1,16383)]});else if(o==="v3"&&["set_pool_fee","collect_protocol"].includes(String(t))){a=["token0","token1","fee",...t==="set_pool_fee"?["fee0","fee1"]:["amount0Max","amount1Max"]];let r=f(e.token0),d=f(e.token1),p=u(e.fee,"fee",0,999999);if(N=await K.readContract({address:k.factory,abi:V,functionName:"getPool",args:[r,d,p]}),N===I)throw new l("No factory-verified v3 pool exists for these tokens and fee.");if(t==="set_pool_fee"){let m=$=>{let S=u($,"fee divisor",0,10);if(S!==0&&S<4)throw new l("V3 protocol fee divisors must be zero or 4 through 10.");return S};s=c({abi:n,functionName:"setFeeProtocol",args:[m(e.fee0),m(e.fee1)]})}else s=c({abi:n,functionName:"collectProtocol",args:[i,P(e.amount0Max,"amount0Max",128,!0),P(e.amount1Max,"amount1Max",128,!0)]})}else if(o==="v4"&&t==="set_owner")a=["target"],s=c({abi:n,functionName:"transferOwnership",args:[F()]});else if(o==="v4"&&t==="set_controller")a=["target"],s=c({abi:n,functionName:"setProtocolFeeController",args:[f(e.target)]});else if(o==="v4"&&t==="set_pool_fee"){a=["poolKey","fee0","fee1"];let r=M(e.poolKey),d=u(e.fee0,"fee0 pips",0,1e3),p=u(e.fee1,"fee1 pips",0,1e3);s=c({abi:n,functionName:"setProtocolFee",args:[r,d+(p<<12)]})}else if(o==="v4"&&t==="collect_protocol")a=["currency","amount"],s=c({abi:n,functionName:"collectProtocolFees",args:[i,f(e.currency),P(e.amount,"amount",256,!0)]});else throw new l("This operation is not supported by the selected Uniswap protocol version.");return A(e,["version","operation",...a]),O(w,[w.unsignedTx({to:N,data:s,value:"0",chainId:y,description:`Uniswap ${o} protocol administration: ${t}. Role holder ${i}.`})],i,"Privileged protocol operation. Review the exact role/recipient/fee changes. Protocol fee collections pay the signing wallet; no wallet token approval is required.")}}]}}export{n as a,L as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as P,e as E,f,h as M,j as b,k as V,l as T,m as q,n as j,o as g,p as S,q as x,t as F,w as U,z as $}from"./
|
|
1
|
+
import{d as P,e as E,f,h as M,j as b,k as V,l as T,m as q,n as j,o as g,p as S,q as x,t as F,w as U,z as $}from"./N4Q6GN65.js";import{c as m}from"./X5V2Z2NM.js";import{a as _}from"./43LI5NKJ.js";import{c as R,g as v}from"./NWNYJ26T.js";import{a as i}from"./XSD5NL7J.js";import{a as I}from"./JXOEJPJ4.js";import{encodeFunctionData as N,keccak256 as G,toBytes as L}from"viem";var D=`0x${"00".repeat(32)}`,ae=d=>{let A=(e,t,s)=>({name:e,inputSchema:t,execute:async(r,a)=>{try{return _(a),j(d,r.chainId),await s(r,a)}catch(u){throw new i(d.plainError(u))}}}),C={transactionHash:{...E,description:"After local submission, repeat the same arguments with the mined hash to verify calldata, event and registry state."}},w=(e,t,s)=>d.clientFor(M(d).chainId).readContract({address:e,abi:m,functionName:t,args:s}),p=async(e,t)=>{try{return await w(e,"getValidationStatus",[t])}catch{return}},H=(e,t)=>({requestHash:e,validator:t[0],agentId:t[1].toString(),response:t[2],responseHash:t[3],tag:I(t[4]),lastUpdate:t[5].toString(),possiblyUnanswered:t[2]===0&&t[3]===D&&t[4]===""}),W=A("erc8004_validation_request",{type:"object",additionalProperties:!1,required:["agentId","validator","requestURI"],description:"Ask a validator (re-execution staker, zkML verifier, TEE oracle, judge) to check an agent's work (Validation Registry validationRequest). Owner or approved operator only.",properties:{agentId:P,validator:{...R,description:"The validator contract or wallet that will respond."},requestURI:{type:"string",description:"HTTPS/IPFS URI of the data the validator needs (inputs and outputs)."},requestHash:{...f,description:"keccak256 commitment to the request payload; provide this or requestContent."},requestContent:{type:"string",description:"The exact request payload text; Oak commits its keccak256 as requestHash."},...C}},async(e,t)=>{let{address:s}=b(d),r=T(e.agentId),a=q(e.validator,"validator");if(V(a))throw new i("Provide a real validator address.");let u=x(e.requestURI,"requestURI");if(e.requestHash===void 0==(e.requestContent===void 0))throw new i("Provide exactly one of requestHash or requestContent.");let l=e.requestHash!==void 0?g(e.requestHash,"requestHash"):G(L(S(e.requestContent,"requestContent",1e6,!1)));return $(d,t,e,{to:s,data:N({abi:m,functionName:"validationRequest",args:[a,r,u,l]}),description:`Request validation of ERC-8004 agent ${r} by ${a}.`,summary:`Asks ${a} to validate agent ${r}'s work: request ${l}, data at ${I(u)}. The request is public and permanent. Only the named validator can respond. Repeat with transactionHash to verify.`,authority:async()=>{if(await F(d,r,t,"request validation"),await p(s,l))throw new i("A validation request with that requestHash already exists; use a different payload commitment.")},verify:async h=>{let c=U(h,s,m,"ValidationRequest"),o=await p(s,l);if(!o||!v(String(c.validatorAddress),a)||c.agentId!==r||c.requestHash!==l||o[1]!==r||!v(o[0],a))throw new i("The registry event or stored request does not match.");return{...H(l,o),confirmed:!0}}})}),Z=A("erc8004_validation_response",{type:"object",additionalProperties:!1,required:["requestHash","response"],description:"As the named validator, record a validation result from 0 (failed) to 100 (passed) for a request. May be called again to update.",properties:{requestHash:f,response:{type:"integer",minimum:0,maximum:100},responseURI:{type:"string",description:"Optional HTTPS/IPFS evidence or audit URI."},responseHash:{...f,description:"Optional commitment to the evidence content."},tag:{type:"string",description:"Optional category, e.g. soft-finality / hard-finality."},...C}},async(e,t)=>{let{address:s}=b(d),r=g(e.requestHash,"requestHash"),a=e.response;if(typeof a!="number"||!Number.isInteger(a)||a<0||a>100)throw new i("response must be an integer from 0 to 100.");let u=e.responseURI===void 0?"":x(e.responseURI,"responseURI"),l=e.responseHash===void 0?D:g(e.responseHash,"responseHash"),h=S(e.tag,"tag",128);return $(d,t,e,{to:s,data:N({abi:m,functionName:"validationResponse",args:[r,a,u,l,h]}),description:`Respond ${a}/100 to validation request ${r}.`,summary:`Records validation result ${a}/100${h?` (tag ${I(h)})`:""} for request ${r} as this wallet. It is public; a later response replaces the stored result but the event history stays. Repeat with transactionHash to verify.`,authority:async()=>{let c=await p(s,r);if(!c)throw new i("No validation request has that requestHash.");if(!v(c[0],t))throw new i("Only the validator named in the request can respond to it.")},verify:async c=>{let o=U(c,s,m,"ValidationResponse"),n=await p(s,r);if(!n||o.requestHash!==r||o.response!==a||!v(String(o.validatorAddress),t)||n[2]!==a)throw new i("The registry event or stored result does not match.");return{...H(r,n),confirmed:!0}}})}),z=A("erc8004_validation",{type:"object",additionalProperties:!1,description:"Read-only validation lookups. Provide exactly one of requestHash (one request), agentId (its requests and average) or validator (requests addressed to it).",properties:{requestHash:f,agentId:P,validator:R,validators:{type:"array",maxItems:50,items:R,description:"With agentId: average only these validators."},tag:{type:"string",description:"With agentId: average only this tag."},limit:{type:"integer",minimum:1,maximum:100,default:25}}},async e=>{let{address:t}=b(d),s=["requestHash","agentId","validator"].filter(n=>e[n]!==void 0);if(s.length!==1)throw new i("Provide exactly one of requestHash, agentId or validator.");let r=typeof e.limit=="number"?Math.min(Math.max(1,Math.trunc(e.limit)),100):25,a=async n=>{let y=n.slice(-r).reverse(),B=await Promise.all(y.map(async k=>{let O=await p(t,k);return O?H(k,O):{requestHash:k,unavailable:!0}}));return{requestsTotal:n.length,requests:B,truncated:n.length>y.length,newestFirst:!0}};if(s[0]==="requestHash"){let n=g(e.requestHash,"requestHash"),y=await p(t,n);if(!y)throw new i("No validation request has that requestHash.");return{registry:t,...H(n,y)}}if(s[0]==="validator")return{registry:t,validator:q(e.validator,"validator"),...await a(await w(t,"getValidatorRequests",[q(e.validator,"validator")]))};let u=T(e.agentId),l=Array.isArray(e.validators)?e.validators.map(n=>q(n,"validator")):[],h=S(e.tag,"tag",128),[c,o]=await Promise.all([w(t,"getAgentValidations",[u]),w(t,"getSummary",[u,l,h])]);return{registry:t,agentId:u.toString(),answeredCount:o[0].toString(),averageResponse:o[0]===0n?null:o[1],...await a(c),note:"The average counts only answered requests and includes whatever validators were asked; judge a result by who the validator is."}});return{tools:[W,Z,z]}};export{ae as a};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as
|
|
1
|
+
import{a as U}from"./VNV6ZISN.js";import{b as I}from"./JZS3E66E.js";import{c as $}from"./AXRL3REN.js";import{g as w}from"./6OGDTEGH.js";import{a as k}from"./P5AJSLZ7.js";import{c as G}from"./XSRIJUFU.js";import{a as b}from"./BBTPRZ6T.js";import{b as E}from"./SPJCSEKP.js";import{a as h}from"./43LI5NKJ.js";import{a as C}from"./66F5ZH34.js";import{g as P,n as y}from"./NWNYJ26T.js";import{a as s,d as D,i as S}from"./FWD4L3CJ.js";import{a as m}from"./XSD5NL7J.js";import{encodeFunctionData as v,parseAbi as j}from"viem";var a=S[s].vaults.netnet.address,d={address:S[s].tokens.USDG.address,chainId:s,decimals:D,symbol:"USDG"},N={address:a,chainId:s,decimals:18,symbol:"nnUSDG"},o=j(["function asset() view returns (address)","function decimals() view returns (uint8)","function totalAssets() view returns (uint256)","function balanceOf(address owner) view returns (uint256)","function convertToAssets(uint256 shares) view returns (uint256)","function deposit(uint256 assets,address receiver) returns (uint256 shares)","function withdraw(uint256 assets,address receiver,address owner) returns (uint256 shares)","function redeem(uint256 shares,address receiver,address owner) returns (uint256 assets)"]),_=C("Positive USDG amount in integer base units (6 decimals)."),O="Preview amounts are estimates; these ERC-4626 calls have no on-chain minimum output argument. No transaction was sent.";function M(e){return y(e,"Amount must be positive and fit in uint256.",{notString:"Provide an integer amount string in base units.",positive:!0})}function g(e,f){if(Object.keys(e).some(l=>!f.includes(l)))throw new m("Unsupported NetNet argument.")}var q=e=>{async function f(t){try{return await t()}catch(n){throw new m(e.plainError(n))}}async function l(){let t=e.clientFor(s);if(await t.getChainId()!==s)throw new m("NetNet requires chain 4663.");let[n,r]=await Promise.all([t.readContract({address:a,abi:o,functionName:"asset"}),t.readContract({address:a,abi:o,functionName:"decimals"})]);if(!P(n,d.address))throw new m("NetNet does not report the pinned USDG asset.");if(r!==N.decimals)throw new m("NetNet share decimals do not match the pinned metadata.");return t}async function A(t,n,r){let i=await e.preview(t,n),p=i.changes.map(({token:c,amount:u})=>{let T=u.startsWith("-");return`${T?"-":"+"}${e.formatAmount(T?u.slice(1):u,c.decimals)} ${c.symbol}`}).join(", ");return{txs:t,preview:i,summary:`${r} ${i.summary} ${p?`Estimated changes: ${p}. `:""}${O}`}}async function R(t){return f(async()=>{h(t);let n=await l(),r=await n.readContract({address:a,abi:o,functionName:"balanceOf",args:[t]});if(r===0n)return[];let i=await n.readContract({address:a,abi:o,functionName:"convertToAssets",args:[r]});return[{module:"netnet",id:`${s}:${a}`,chainId:s,assets:[{token:{...d},amount:i.toString()}],description:`${e.formatAmount(r.toString(),N.decimals)} nnUSDG shares in NetNet Credit (${a}); underlying USDG is an estimate, not a liquidity guarantee.`}]})}return{positions:R,tools:[{name:"netnet_list",inputSchema:{type:"object",properties:{},additionalProperties:!1},execute:t=>f(async()=>{g(t,[]);let r=await(await l()).readContract({address:a,abi:o,functionName:"totalAssets"});return[{address:a,name:"NetNet Credit",chainId:s,asset:{...d},shares:{...N},totalAssets:{token:{...d},amount:r.toString()}}]})},{name:"netnet_deposit",inputSchema:{type:"object",description:"Deposit USDG in base units (1 USDG = 1000000) for nnUSDG vault shares. Exit with netnet_withdraw; check positions after confirmation.",properties:{amount:_},required:["amount"],additionalProperties:!1},execute:(t,n)=>f(async()=>{g(t,["amount"]),h(n);let r=M(t.amount);await l();let i=[e.approval(d.address,a,r.toString(),s),e.unsignedTx({to:a,data:v({abi:o,functionName:"deposit",args:[r,n]}),value:"0",chainId:s,description:`Deposit ${e.formatAmount(r.toString(),d.decimals)} USDG into NetNet Credit.`})];return A(i,n,"Approve the exact USDG amount, then deposit into NetNet Credit.")})},{name:"netnet_withdraw",inputSchema:{type:"object",description:"Withdraw USDG in 6-decimal base units, or amount max to redeem every nnUSDG share for USDG. Check positions after confirmation.",properties:{amount:{anyOf:[_,{const:"max",description:"Redeem the fresh full nnUSDG share balance."}]}},required:["amount"],additionalProperties:!1},execute:(t,n)=>f(async()=>{g(t,["amount"]),h(n);let r=t.amount==="max"?void 0:M(t.amount),i=await l(),p,c;if(r===void 0){let u=await i.readContract({address:a,abi:o,functionName:"balanceOf",args:[n]});if(u===0n)throw new m("This wallet has no NetNet shares to redeem.");p=v({abi:o,functionName:"redeem",args:[u,n,n]}),c=`Redeem all ${e.formatAmount(u.toString(),N.decimals)} nnUSDG shares for USDG.`}else p=v({abi:o,functionName:"withdraw",args:[r,n,n]}),c=`Withdraw ${e.formatAmount(r.toString(),d.decimals)} USDG from NetNet Credit (unmeasured on the recorded fork; full exit uses amount "max" redeem).`;return A([e.unsignedTx({to:a,data:p,value:"0",chainId:s,description:c})],n,c)})}]}};function ie(e){return E("netnet",[q(e),w(e),$(e),G(e),k(e),U(e),I(e),{tools:b(e,"netnet",[{vault:a,asset:d}])}])}export{q as a,ie as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{b as A}from"./IX3GZMTM.js";import{a as g}from"./5CAAFU7R.js";import{a as d}from"./XSD5NL7J.js";import{concat as b,encodeAbiParameters as L,getAddress as G,isAddress as C,keccak256 as h,parseAbiParameters as I,toHex as v}from"viem";var B=h(v("OakGrandfather/v1")),w="oak-grandfather/v1",D=(1n<<256n)-1n,H="0x0000000000000000000000000000000000000000000000000000000000000000";function p(e,n){if(typeof e!="string"||!C(e,{strict:!1}))throw new d(`Invalid ${n} address.`);return G(e)}function x(e,n){if(typeof e!="string"||!/^0x[0-9a-fA-F]{64}$/.test(e))throw new d(`${n} must be a 32-byte hex string.`);return e.toLowerCase()}function E(e){let n=typeof e=="bigint"?e:A(e);if(n<0n||n>D)throw new d("Count exceeds uint256 bounds.");return n}function j(e,n,o){let i=typeof e=="object"?e.wallet:e,t=typeof e=="object"?e.count:n,c=typeof e=="object"?e.source:o;if(t===void 0||c===void 0)throw new d("Grandfather leaf requires wallet, count and source.");let u=h(L(I("bytes32, address, uint256, address"),[B,p(i,"wallet"),E(t),p(c,"source")]));return h(u)}function R(e,n){let o=x(e,"first node"),i=x(n,"second node");return BigInt(o)<=BigInt(i)?h(b([o,i])):h(b([i,o]))}function _(e,n,o){if(!Array.isArray(o))throw new d("Grandfather proof must be an array.");let i=x(e,"root"),t=x(n,"leaf");for(let c=0;c<o.length;c++){if(!Object.prototype.hasOwnProperty.call(o,c))throw new d("Grandfather proof must not be a sparse array.");t=R(t,o[c])}return t===i}function S(e){if(!Array.isArray(e))throw new d("Grandfather entries must be an array.");let n=new Set,o=[];for(let r=0;r<e.length;r++){if(!Object.prototype.hasOwnProperty.call(e,r)||!e[r])throw new d(`Grandfather entries must not be sparse (missing index ${r}).`);let s=e[r],a=p(s.wallet,"wallet").toLowerCase(),f=p(s.source,"source").toLowerCase(),l=E(s.count).toString();if(n.has(a))throw new d(`Duplicate wallet in grandfather entries: ${a}`);n.add(a),o.push({wallet:a,count:l,source:f})}if(o.sort((r,s)=>BigInt(r.wallet)<BigInt(s.wallet)?-1:BigInt(r.wallet)>BigInt(s.wallet)?1:0),o.length===0){let r=g({entries:[],root:H,schema:w});return{schema:w,root:H,entries:[],proofs:{},canonicalJson:r}}let i=o.map(r=>j(r)),t=[i];for(;t[t.length-1].length>1;){let r=t[t.length-1],s=[];for(let a=0;a<r.length;a+=2){let f=r[a],l=r[a+1];s.push(l!==void 0?R(f,l):f)}t.push(s)}let c=t[t.length-1][0],u={},P=o.map((r,s)=>{let a=[],f=s;for(let l=0;l<t.length-1;l++){let y=t[l],m=f^1;m<y.length&&a.push(y[m]),f=Math.floor(f/2)}return u[r.wallet]=a,u[G(r.wallet)]=a,{...r,leaf:i[s],proof:a}}),T=g({entries:o.map(({count:r,source:s,wallet:a})=>({count:r,source:s,wallet:a})),root:c,schema:w});return{schema:w,root:c,entries:P,proofs:u,canonicalJson:T}}var M=S;function N(e,n){let o=p(n,"wallet").toLowerCase(),i=Array.isArray(e)?S(e):e,t=i.entries.find(u=>u.wallet.toLowerCase()===o);if(!t)throw new d(`Wallet ${n} is not in the grandfather list.`);let c=[...t.proof];return Object.defineProperties(c,{proof:{value:[...t.proof],enumerable:!1},leaf:{value:t.leaf,enumerable:!1},root:{value:i.root,enumerable:!1},entry:{value:{wallet:t.wallet,count:t.count,source:t.source},enumerable:!1},count:{value:t.count,enumerable:!1},source:{value:t.source,enumerable:!1}}),c}export{B as a,w as b,j as c,R as d,_ as e,S as f,M as g,N as h};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as l,b as p,c as v,e as f,f as L,g as C,h as x,j as h,k,l as T}from"./YWSX6IE6.js";import{a as b}from"./JFYBH3DX.js";import{a as I,d as A}from"./7QZOTRSA.js";import{a as u}from"./I6PQW2JI.js";import{a as g}from"./XSD5NL7J.js";import{encodeFunctionData as M}from"viem";var d=(o,e)=>({token:o,amount:e.toString()}),U=6e4;function _(){let o=new WeakMap;return{entry(e){let r=o.get(e);return(!r||Date.now()>=r.expiresAt)&&(r={logs:new Map,expiresAt:Date.now()+U},o.set(e,r)),r}}}function R(o,e){return{to:o.log.address,data:M({abi:b,functionName:"debond",args:[e,[],[]]}),value:"0",chainId:4663,description:`Unwrap ${e} log base units from ${o.log.address}.`}}async function P(o,e,r,i,t=BigInt(e.measuredAtBlock)){if(i>BigInt(e.totalSupply))throw new g("Unwrap amount exceeds the issued Chop log supply.");let s=p(await f(o,e.log.address,"convertToAssets",[i],t,r)),n=1n<<96n,a=BigInt(e.managedUnderlying)*(i*n/BigInt(e.totalSupply))/n;if(s>a)throw new g("Chop redemption exceeds the measured backing.");return{gross:d(e.underlying,a),fee:d(e.underlying,a-s),net:d(e.underlying,s)}}async function S(o){if(o.network==="testnet")throw new g("Chop requires chain 4663.");let e=o.clientFor(4663),r=await C(e);await x(e,u.registry,r);let i=await f(e,u.registry.address,"allIndexes",[],r);if(!Array.isArray(i)||i.length>1e3)throw new g("Chop registry inventory is unreadable or too large.");let t=i.filter(n=>n&&n.verified===!0).map(n=>l(n.index));if(new Set(t).size!==t.length)throw new g("Chop registry returned duplicate logs.");let s=[];for(let n=0;n<t.length;n+=4)s.push(...await Promise.all(t.slice(n,n+4).map(a=>h(e,a,"read",r))));return{logs:s,measuredAtBlock:r.toString(),warnings:s.flatMap(n=>n.drift.length?[`Code changed for ${n.log.address}: ${n.drift.join(", ")}.`]:[])}}async function $(o,e){if(!e)return S(o);let r=o.clientFor(4663),i=e.entry(r);if(i.inventory)return structuredClone(i.inventory);let t=i.pending??S(o);i.pending=t;try{let s=await t;i.inventory=structuredClone(s);for(let n of s.logs)i.logs.set(n.log.address.toLowerCase(),structuredClone(n));return s}finally{i.pending===t&&(i.pending=void 0)}}async function V(o,e,r,i=BigInt(e.measuredAtBlock)){await x(o,u.whitelist,i);let t=await L(o,[{target:e.log.address,fn:"balanceOf",args:[r]},{target:e.staking.address,fn:"balanceOf",args:[r]},{target:e.staking.address,fn:"withdrawableStake",args:[r]},{target:e.rewards,fn:"getUnpaid",args:[u.chop,r]},{target:e.rewards,fn:"getClaimable",args:[u.chop,r]},{target:u.whitelist.address,fn:"paused",args:[u.chop]},{target:e.log.address,fn:"totalSupply"},{target:e.log.address,fn:"totalAssets",args:[e.underlying.address]}],i);if(typeof t[5]!="boolean")throw new g("Chop reward pause state is unavailable.");let s=p(t[0]),n=p(t[6]),a=p(t[7]);if(n===0n)throw new g("This Chop log has no issued supply.");let m={...e,totalSupply:n.toString(),managedUnderlying:a.toString()},c=s===0n?{gross:d(e.underlying,0n),fee:d(e.underlying,0n),net:d(e.underlying,0n)}:await P(o,m,r,s,i),y={address:l(u.chop),symbol:"CHOP",decimals:18,chainId:4663};return{log:e.log.address,logTokens:d(e.log,s),...c,stakedLp:d(e.staking,p(t[1])),withdrawableLp:d(e.staking,p(t[2])),pendingChop:d(y,p(t[3])),claimableChop:d(y,p(t[4])),rewardsPaused:t[5],measuredAtBlock:i.toString(),warnings:A(e)}}async function H(o,e,r,i){let t=o.clientFor(4663);l(r);let s=i?.entry(t),n=l(e).toLowerCase(),a=s?.logs.get(n)??await h(t,e,"read");return s&&!s.logs.has(n)&&s.logs.set(n,structuredClone(a)),V(t,a,r,await C(t))}async function j(o,e,r,i){let t=v(i),s=o.clientFor(4663);l(r);let n=await h(s,e,"exit"),a=await P(s,n,r,t),m=BigInt(a.net.amount);if(m===0n)throw new g("This Chop unwrap would return no underlying.");let c=R(n,t),y=o.unsignedTx(c);k([y],[c]);let w=await o.preview([y],r);k(w.txs,[c]);let B=T(w,[{token:n.log,min:-t,max:-t},{token:n.underlying,min:m}]);return{log:n.log.address,amount:t.toString(),...a,simulatedNet:d(n.underlying,B.get(n.underlying.address.toLowerCase())),quotedNet:a.net.amount,preview:w,measuredAtBlock:n.measuredAtBlock,warning:I,summary:A(n)}}export{d as a,U as b,_ as c,R as d,P as e,$ as f,V as g,H as h,j as i};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{e as u,h as l,i as y}from"./NWNYJ26T.js";import{a as p}from"./XSD5NL7J.js";import{a as m}from"./JXOEJPJ4.js";import{parseUnits as b}from"viem";var h={"User-Agent":"oak-core/borro",Accept:"application/json"};async function g(e,o,a){let c=AbortSignal.timeout(1e4),n=await e(`https://borro.markets/${o}.json`,{method:"GET",headers:h,redirect:"error",signal:a?AbortSignal.any([a,c]):c});if(!n.ok||n.redirected||!n.body)throw new p("Borro's page could not be read right now.");let t=n.body.getReader(),r=new TextDecoder,s=0,d="";try{for(;;){let{done:i,value:f}=await t.read();if(i)break;if(s+=f.byteLength,s>2e6)throw new p("Borro's page exceeds the read limit.");d+=r.decode(f,{stream:!0})}return JSON.parse(d+r.decode())}finally{await t.cancel().catch(()=>{}),t.releaseLock()}}var A=e=>typeof e=="number"&&Number.isFinite(e)&&e>=0&&e<=1?e:void 0;function k(e,o=Date.now()/1e3){let a=new Map;if(!u(e))return a;let c=typeof e.read_at=="string"?Date.parse(e.read_at)/1e3:NaN;if(!Number.isFinite(c)||c>o+30||o-c>300)return a;let n=(t,r)=>{if(!u(r)||!u(r.lend)||a.has(t))return;let s=A(r.lend.apr),d=r.lend.ready_to_withdraw,i;try{i=y(t==="USDG"?r.vault:u(r.contracts)?r.contracts.vault:void 0,"Unreadable rate vault.")}catch{}a.set(t,{...i?{vault:i}:{},...s===void 0?{}:{apr:s},...t==="USDG"&&typeof d=="number"&&Number.isFinite(d)&&d>=0&&d<=Number.MAX_SAFE_INTEGER?{ready:d}:{}})};if(n("USDG",e.usdg),Array.isArray(e.stocks)&&e.stocks.length<=1e3){let t=e.stocks.filter(u),r=t.map(s=>typeof s.symbol=="string"?s.symbol.toUpperCase():"");t.forEach((s,d)=>{let i=r[d];/^[A-Z0-9.$_-]{1,32}$/.test(i)&&r.indexOf(i)===r.lastIndexOf(i)&&n(i,s)})}return a}async function _(e,o,a=Date.now()/1e3){try{return k(await g(e,"markets",o),a)}catch{return new Map}}function S(e,o,a){let c=e.get(o.symbol.toUpperCase()),n=l(c?.vault,a)?c:void 0,t;if(n?.ready!==void 0)try{t={token:o,amount:b(n.ready.toFixed(o.decimals),o.decimals).toString()}}catch{}return{rate:n?.apr===void 0?"unavailable":"available",...n?.apr===void 0?{}:{apr:n.apr,source:m("Borro markets.json; display data only")},...t?{readyToWithdraw:t}:{}}}export{h as a,g as b,k as c,_ as d,S as e};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as K}from"./JKD2B6OX.js";import{b as Y,d as Z,e as Q}from"./V74F6IDY.js";import{a as J}from"./PNA6UIE5.js";import{a as W,c as x,d as B,h as F,i as E,j as L}from"./QFNT73OF.js";import{Z as z,ca as H}from"./ACW63WIL.js";import{a as P}from"./E3RACZUY.js";import{j}from"./7KWZ5QJU.js";import{j as M}from"./AEL62KCG.js";import{a as $}from"./IOYRL6AY.js";import{e as O,h as U}from"./NWNYJ26T.js";import{a as v}from"./XSD5NL7J.js";import{erc20Abi as X,formatUnits as G,parseAbiItem as q}from"viem";var ee=q("event CreateVaultV2(address indexed caller,address indexed owner,bytes32 salt,address indexed vault)"),te=r=>H("unverified",{...r?{vaultLabel:r}:{}});function ae(r){if(!O(r)||!O(r.chain)||r.chain.id!==4663||!Array.isArray(r.contracts)||!Array.isArray(r.markets)||r.contracts.length>1e3||r.markets.length>1e3)throw new v("Borro vault discovery returned an unreadable candidate list.");let i=[...r.contracts.filter(O).filter(e=>e.name==="BorroUSDGVault").map(e=>e.address),...r.markets.filter(O).map(e=>O(e.vault)?e.vault.address:void 0)];return[...new Set(i.map(x))]}function se(r){return r.sort((i,e)=>+(e.symbol==="USDG")-+(i.symbol==="USDG")||0)}var re=6e4;function oe(r,i={}){let e=i.resolveAllowedAsset??E(i.officialStockTokens),g=L({resolveAllowedAsset:e}),S=new WeakMap,A=s=>{let t=S.get(s);return t||(t={},S.set(s,t)),t},m=s=>{if(s?.aborted)throw new v("Borro read was cancelled.")};async function h(s,t,u){let c=A(s);if(c.inventory&&Date.now()<c.inventory.expiresAt)return structuredClone(c.inventory);let a={items:[],sources:[],incomplete:!1,warnings:[],expiresAt:0},o=new Map;m(u);try{for(let l of ae(await Y(r.http,"contracts",u)))o.set(l.toLowerCase(),{vault:l});a.sources.push("contracts.json")}catch{a.incomplete=!0,a.warnings.push("Borro candidate discovery is unavailable; this inventory may be incomplete.")}if(i.factoryEvents!==!1)try{let l=new Map;for(let p=BigInt(P.factory.fromBlock);p<=t;p+=10000000n){m(u);let k=p+9999999n<t?p+9999999n:t,y=await s.getLogs({address:P.factory.address,event:ee,fromBlock:p,toBlock:k,strict:!0});if(y.length>1e3)throw new v("Borro factory inventory exceeds the read limit.");for(let d of y){let n=x(d.args.vault);if(d.removed||!U(d.address,P.factory.address)||d.blockNumber===null||d.blockNumber<p||d.blockNumber>k||l.has(n.toLowerCase()))throw new v("Borro factory events are unreadable.");l.set(n.toLowerCase(),{vault:n,block:d.blockNumber})}if(l.size>1e3)throw new v("Borro factory inventory exceeds the read limit.")}for(let[p,k]of l)o.set(p,k);a.sources.push("factory-events")}catch{a.incomplete=!0,a.warnings.push("Borro factory discovery is unavailable; vault creation dates or inventory may be incomplete.")}return m(u),a.items=[...o.values()],a.expiresAt=Date.now()+re,a.incomplete||(c.inventory=structuredClone(a)),a}let w=async(s,t={})=>{m(t.signal);let u=await F(s),c=A(s);if(!t.wallet&&c.verified&&Date.now()<c.verified.expiresAt)return structuredClone(c.verified.result);let a=await h(s,u,t.signal),o={vaults:[],refused:[],sources:a.sources,incomplete:a.incomplete,warnings:a.warnings,measuredAtBlock:u.toString()},l=a.items;if(t.heldOnly){if(!t.wallet)throw new v("Provide a wallet for Borro holdings.");m(t.signal);let y=l.length?await s.multicall({allowFailure:!1,batchSize:0,contracts:l.map(({vault:d})=>({address:d,abi:X,functionName:"balanceOf",args:[t.wallet]})),blockNumber:u}):[];if(!Array.isArray(y)||y.length!==l.length)throw new v("Borro share balances could not be read completely. Please try again.");o.shareBalances=l.map((d,n)=>({vault:d.vault,amount:B(y[n]).toString()})),l=l.filter((d,n)=>BigInt(o.shareBalances[n].amount)>0n)}m(t.signal);let p=e;if(l.length&&!i.resolveAllowedAsset&&!i.officialStockTokens)try{p=E(await M({http:r.http,allowAmbiguousSymbols:!0}))}catch{o.incomplete=!0,o.warnings.push("Official stock identities could not be checked; held-share exits remain available by vault address.")}let k=L({resolveAllowedAsset:p});for(let y=0;y<l.length;y+=4){m(t.signal);let d=await Promise.all(l.slice(y,y+4).map(async n=>{try{let b=await k(s,n.vault,t.wallet?"withdraw":"deposit",{blockNumber:u,...t.wallet?{wallet:t.wallet}:{}});if(n.block!==void 0)try{let V=await s.getBlock({blockNumber:n.block}),f=B(V.timestamp);f<=8640000000000n&&V.number===n.block&&(b.deployedAt=new Date(Number(f)*1e3).toISOString())}catch{}return{facts:b}}catch{return{rejected:{vault:n.vault,reason:te(n.vault)}}}}));for(let n of d)n.facts&&o.vaults.push(n.facts),n.rejected&&o.refused.push(n.rejected)}return m(t.signal),se(o.vaults),!t.wallet&&!o.incomplete&&(c.verified={result:structuredClone(o),expiresAt:a.expiresAt}),o},T=async(s,t={})=>{m(t.signal);let u=A(s),c;if(t.wallet||t.signal)c=await w(s,t);else{let a=u.pending??w(s);u.pending=a;try{c=structuredClone(await a)}finally{u.pending===a&&(u.pending=void 0)}}return m(t.signal),{...c,vaults:c.vaults.filter(a=>!t.asset||a.symbol.toUpperCase()===t.asset.toUpperCase())}};return{discoverVaults:T,verifyVault:g,resolveVault:async(s,t,u,c)=>{if(t.asset!==void 0&&!/^[A-Za-z0-9.$_-]{1,32}$/.test(t.asset))throw new v("Provide an official asset symbol.");if(t.vault){let y=await g(s,t.vault,u,{wallet:c});if(t.asset&&y.symbol.toUpperCase()!==t.asset.toUpperCase())throw new v("The asset symbol does not match the verified vault.");return y}if(!t.asset)throw new v("Provide an asset symbol or the vault address.");let a=await T(s,{asset:t.asset,...u==="withdraw"?{wallet:c}:{}});if(a.incomplete)throw new v("Borro discovery is incomplete. Provide the vault address for on-chain verification.");let o=a.vaults.length===1?a.vaults[0]:void 0;if(!o&&t.asset.toUpperCase()==="USDG"&&a.vaults.length>1){let y=await F(s);try{if(a.vaults.some(f=>!U(f.asset,P.assetRule.usdg.address)||f.assetDecimals!==6))throw new v("Unreadable USDG identity.");let d=a.vaults.filter(f=>f.setup.drift.length===0&&f.assetAllowed),n=await Promise.all(d.map(async f=>({facts:f,total:B(await s.readContract({address:f.vault,abi:W,functionName:"totalAssets",blockNumber:y}))})));n.sort((f,_)=>f.total>_.total?-1:f.total<_.total?1:0);let[b,V]=n;b&&b.total>=100000000n&&(!V||b.total>=V.total*10n)&&(o=b.facts)}catch{}}if(!o)throw new v(a.vaults.length?"More than one Borro vault uses this symbol. Provide the vault address.":"No verified Borro vault matched this asset. Provide the vault address to check it on chain.");let l=e;if(!i.resolveAllowedAsset&&!i.officialStockTokens&&!U(o.asset,P.assetRule.usdg.address))try{l=E(await M({http:r.http,allowAmbiguousSymbols:!0}))}catch{}let k=await L({resolveAllowedAsset:l})(s,o.vault,u,{wallet:c});if(k.symbol.toUpperCase()!==t.asset.toUpperCase())throw new v("The asset symbol does not match the verified vault.");return{...k,...o.deployedAt?{deployedAt:o.deployedAt}:{}}}}}var N=(r,i)=>({token:r,amount:i.toString()});async function ne(r,i,e){try{let[g,S]=await Promise.all([i.getGasPrice(),j("ETH",{client:i,http:r.http,chainId:4663,blockNumber:e})]);if(!/^\d+$/.test(S.usdE18)||BigInt(S.usdE18)<=0n||B(g)===0n)return{};let A=w=>Number(G(w*g*BigInt(S.usdE18)/10n**18n,18)),m=A($*2n),h=A($);return[m,h].every(w=>Number.isFinite(w)&&w>0)?{gasInUsd:m,gasOutUsd:h}:{}}catch{return{}}}async function ie(r,i,e,g,S=new Map,A){let m={vault:e.vault,verified:!0,symbol:e.symbol,vaultSymbol:e.vaultSymbol,setup:e.setup,measuredAtBlock:(A??BigInt(e.measuredAtBlock)).toString(),verifiedAtBlock:e.measuredAtBlock,...e.owner?{owner:e.owner}:{},...e.curator?{curator:e.curator}:{},...e.deployedAt?{deployedAt:e.deployedAt}:{}};try{let h=A??BigInt(e.measuredAtBlock),w={address:e.asset,symbol:e.symbol,decimals:e.assetDecimals,chainId:4663},T={address:e.vault,symbol:e.vaultSymbol,decimals:18,chainId:4663},R=(D,C,I=[])=>i.readContract({address:D,abi:[...W,...X],functionName:C,args:I,blockNumber:h}),[s,t,u,c,a,o,l]=await Promise.all([R(e.vault,"totalAssets"),R(e.vault,"performanceFee"),R(e.asset,"balanceOf",[g]),R(e.vault,"balanceOf",[g]),J(i,e,h),ne(r,i,h),i.getBlock({blockNumber:h})]),p=B(c),k=B(t);if(k>10n**18n)throw new v("Borro performance fee is unreadable.");let y=B(await R(e.vault,"convertToAssets",[p])),d={};if(e.owner)try{let[D,C]=await Promise.all([R(e.owner,"getThreshold"),R(e.owner,"getOwners")]),I=B(D);if(!Array.isArray(C)||C.length>1e3||new Set(C.map(x)).size!==C.length||I<1n||I>BigInt(C.length))throw new v("Unreadable group wallet.");d={safeThreshold:Number(I),safeOwners:C.length}}catch{}let n;if(U(e.asset,P.assetRule.usdg.address))try{let D=(await K(i,h)).rateBasePct;Number.isFinite(D)&&D>=0&&(n=D)}catch{}let b=Q(S,w,e.vault);if(l.number!==h)throw new v("Borro block timestamp could not be verified.");let V=Number(B(l.timestamp)),f=e.deployedAt?Date.parse(e.deployedAt)/1e3:void 0,_=z({symbol:e.symbol,kind:U(e.asset,P.assetRule.usdg.address)?"usdg":"stock",nowSeconds:V,...f===void 0?{}:{deployedAtSeconds:f},threshold:d.safeThreshold,owners:d.safeOwners,borroRatePct:b.apr===void 0?void 0:b.apr*100,feePct:Number(G(k,16)),layerbankRatePct:n,totalAmount:G(B(s),e.assetDecimals),readyAmount:a.readyBase===void 0?void 0:G(a.readyBase,e.assetDecimals),gasInUsd:o.gasInUsd===void 0?void 0:`up to $${o.gasInUsd.toFixed(4)}`,gasOutUsd:o.gasOutUsd===void 0?void 0:`up to $${o.gasOutUsd.toFixed(4)}`});return{...m,asset:w,shares:T,totalAssets:N(w,B(s)),performanceFeeWad:k.toString(),walletAssetBalance:N(w,B(u)),walletShares:N(T,p),walletShareValue:N(w,y),liquidityKind:a.kind,...a.readyBase===void 0?{}:{cashOnHand:N(w,a.readyBase)},...d,...o,...n===void 0?{}:{layerbankRateBasePct:n},...b.apr===void 0?{}:{apr:b.apr,rateSource:b.source},...b.readyToWithdraw?{vendorReadyToWithdraw:b.readyToWithdraw}:{},...f!==void 0&&f<=V?{ageSeconds:String(Math.floor(V-f))}:{},risk:{title:"Lending on Borro",text:_,source:"Oak"}}}catch{return{...m,error:"This Borro vault can't be read right now. Please try again."}}}async function ge(r,i,e={},g={},S){if(e.vault&&!g.resolveAllowedAsset&&!g.officialStockTokens)try{g={...g,officialStockTokens:await M({http:r.http,allowAmbiguousSymbols:!0})}}catch{}let A=r.clientFor(4663),m=S??oe(r,g);x(i);let h;if(e.vault){let s=await m.resolveVault(A,e,"deposit",i);h={vaults:[s],refused:[],sources:[],incomplete:!1,warnings:[],measuredAtBlock:s.measuredAtBlock}}else h=await m.discoverVaults(A,e.asset?{asset:e.asset}:{});let[w,T]=await Promise.all([Z(r.http),F(A)]),R=[];for(let s=0;s<h.vaults.length;s+=4)R.push(...await Promise.all(h.vaults.slice(s,s+4).map(t=>ie(r,A,t,i,w,T))));return{...h,vaults:R}}export{ae as a,se as b,oe as c,N as d,ie as e,ge as f};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as w,b as R}from"./
|
|
1
|
+
import{a as w,b as R}from"./OTXSKFUD.js";import{a,e as P}from"./XSD5NL7J.js";function q(t){return t===404||t===410?`The service returned HTTP ${t}: it has no record of that request, so trying again will not help.`:`The service returned HTTP ${t}. Please try again.`}var y=class extends a{constructor(n){super(q(n.status));this.response=n}response};function h(){return new a("The request was cancelled.")}async function v(t,s){if(s.aborted)throw h();await new Promise((n,c)=>{let o=setTimeout(()=>{s.removeEventListener("abort",m),n()},t),m=()=>{clearTimeout(o),s.removeEventListener("abort",m),c(h())};s.addEventListener("abort",m,{once:!0})})}function _(t,s){if(t===null)return s;if(/^\d+(\.\d+)?$/.test(t))return Number(t)*1e3;let n=Date.parse(t);return Number.isFinite(n)?Math.max(0,n-Date.now()):s}function A(t={}){let s=t.fetch??globalThis.fetch,n=t.timeoutMs??1e4,c=t.retries??2,u=t.retryDelayMs??250,o=t.maxRetryDelayMs??3e4;if(!Number.isInteger(c)||c<0||c>10||!Number.isFinite(n)||n<=0||n>2147483647||!Number.isFinite(u)||u<0||!Number.isFinite(o)||o<0||o>2147483647)throw new a("Provide finite timeout and retry bounds, with 0 to 10 retries.");return async(m,k)=>{let r=new Request(m,{...k,redirect:"error"}),d=R(s,r.url),N=r.method==="GET"||r.method==="HEAD";for(let b=0;;b++){if(r.signal.aborted)throw h();if(d){let e=Date.now()+2e3,f=d.reserve();for(f>0&&await v(f,r.signal);;){if(r.signal.aborted)throw h();if(Date.now()>e)throw new w(d.label,1);let i=d.dispatchDelay();if(i===0)break;if(Date.now()+i>e)throw new w(d.label,i/1e3);await v(i,r.signal)}}if(r.signal.aborted)throw h();let p=new AbortController,x=()=>p.abort();r.signal.addEventListener("abort",x,{once:!0});let D=!1,O=setTimeout(()=>{D=!0,p.abort()},n),M;try{let e=await s(r.clone(),{signal:p.signal});if(e.redirected)throw await e.body?.cancel(),new a("The request failed. Please try again.");if(e.ok){let f=await e.text();if(r.method!=="HEAD"&&e.status!==204&&e.status!==205){let i=r.headers.get("accept")?.toLowerCase(),l=e.headers.get("content-type")?.split(";")[0]?.trim().toLowerCase(),T=l?.startsWith("text/"),E=i?.split(",").some(g=>g.trim().startsWith("text/"));if(!E&&i?.split(",").some(g=>/(?:application\/json|\+json)(?:\s*;.*)?$/.test(g.trim()))||l==="application/json"||l?.endsWith("+json")||!T&&!E)try{JSON.parse(f)}catch{throw new a("The service returned malformed JSON.")}}return new Response(f||null,{status:e.status,statusText:e.statusText,headers:e.headers})}else{let f=e.status===429||e.status>=500,i=u*2**b*(.5+Math.random()),l=Math.max(i,_(e.headers.get("Retry-After"),i));if(e.status===429&&d?.backoff(l),!N||!f||b>=c||l>o){if(e.status===429)throw await e.body?.cancel(),new w(d?.label??"The service",Math.max(1,l/1e3));let T=await e.text();throw new y(new Response(T||null,{status:e.status,statusText:e.statusText,headers:e.headers}))}await e.body?.cancel(),M=l}}catch(e){throw r.signal.aborted?h():D?new a("The request timed out. Please try again."):e instanceof y?e:new a(P(e))}finally{clearTimeout(O),r.signal.removeEventListener("abort",x)}await v(M,r.signal)}}}async function S(t,s,n,c){let u=await t(s,n);if(!u.ok)throw new a(q(u.status));let o;try{o=await u.json()}catch{throw new a("The service returned malformed JSON.")}try{if(c(o))return o}catch{}throw new a("The service returned an unexpected response.")}export{y as a,A as b,S as c};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{parseAbi as e}from"viem";var t=e(["function asset() view returns (address)","function decimals() view returns (uint8)","function totalAssets() view returns (uint256)","function previewDeposit(uint256 assets) view returns (uint256 shares)","function previewWithdraw(uint256 assets) view returns (uint256 shares)","function previewRedeem(uint256 shares) view returns (uint256 assets)","function convertToAssets(uint256 shares) view returns (uint256 assets)","function balanceOf(address account) view returns (uint256)","function approve(address spender,uint256 amount) returns (bool)","function deposit(uint256 assets,address receiver) returns (uint256 shares)","function withdraw(uint256 assets,address receiver,address owner) returns (uint256 shares)","function redeem(uint256 shares,address receiver,address owner) returns (uint256 assets)"]);export{t as a};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as a}from"./
|
|
1
|
+
import{d as a}from"./BND2UFVW.js";import{a as i}from"./SPRVVJXI.js";import{a as o}from"./FWD4L3CJ.js";var d=n=>({tools:i.map(e=>{let t=e==="netnet_blackjack_claim"?"seriesId":"sessionId";return{name:e,inputSchema:{description:"Self-only recovery on chain 4663, available without an active identity or subscription; every action requires local human confirmation. Card counts use whole units.",type:"object",additionalProperties:!1,required:[t],properties:{[t]:{type:"string",pattern:"^[1-9][0-9]{0,77}$"}}},execute:async(s,c)=>{let r=await a(e,s,c,n.clientFor(o));return{txs:r.txs,summary:r.decision}}}})});export{d as a};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as f}from"./
|
|
1
|
+
import{b as f}from"./7WSHW7KW.js";import{a as p}from"./43LI5NKJ.js";import{a as u}from"./FWD4L3CJ.js";import{a as r}from"./XSD5NL7J.js";import{encodeFunctionData as A,getAddress as w,parseAbi as T,parseAbiItem as F}from"viem";var R=[["setOwner(address newOwner)","owner"],["setCurator(address newCurator)","owner"],["setIsSentinel(address account,bool enabled)","owner"],["setName(string name)","owner"],["setSymbol(string symbol)","owner"],["setIsAllocator(address account,bool enabled)","timelock"],["setReceiveSharesGate(address gate)","timelock"],["setSendSharesGate(address gate)","timelock"],["setReceiveAssetsGate(address gate)","timelock"],["setSendAssetsGate(address gate)","timelock"],["setAdapterRegistry(address registry)","timelock"],["addAdapter(address adapter)","timelock"],["removeAdapter(address adapter)","timelock"],["increaseTimelock(bytes4 selector,uint256 duration)","timelock"],["decreaseTimelock(bytes4 selector,uint256 duration)","timelock"],["abdicate(bytes4 selector)","timelock"],["setPerformanceFee(uint256 fee)","timelock"],["setManagementFee(uint256 fee)","timelock"],["setPerformanceFeeRecipient(address recipient)","timelock"],["setManagementFeeRecipient(address recipient)","timelock"],["increaseAbsoluteCap(bytes idData,uint256 cap)","timelock"],["increaseRelativeCap(bytes idData,uint256 cap)","timelock"],["decreaseAbsoluteCap(bytes idData,uint256 cap)","curatorOrSentinel"],["decreaseRelativeCap(bytes idData,uint256 cap)","curatorOrSentinel"],["setForceDeallocatePenalty(address adapter,uint256 penalty)","timelock"],["allocate(address adapter,bytes data,uint256 assets)","allocator"],["deallocate(address adapter,bytes data,uint256 assets)","allocatorOrSentinel"],["setLiquidityAdapterAndData(address adapter,bytes data)","allocator"],["setMaxRate(uint256 rate)","allocator"],["accrueInterest()","any"]],S=R.map(([a,t])=>({abi:F(`function ${a}`),authority:t})),x=T(["function asset() view returns (address)","function owner() view returns (address)","function curator() view returns (address)","function isSentinel(address) view returns (bool)","function isAllocator(address) view returns (bool)","function executableAt(bytes) view returns (uint256)","function abdicated(bytes4) view returns (bool)","function submit(bytes data)","function revoke(bytes data)"]);function M(a,t){if(a==="bool"){if(typeof t!="boolean")throw new r("Boolean operation values must be booleans.");return t}if(typeof t!="string")throw new r("All address, byte, text and integer operation values must be strings.");if(a==="address")return p(t),w(t);if(a==="uint256"){if(!/^\d+$/.test(t)||BigInt(t)>=1n<<256n)throw new r("Integer operation values must be uint256 decimal base-unit strings.");return BigInt(t)}if((a==="bytes"||a==="bytes4")&&!(a==="bytes4"?/^0x[0-9a-f]{8}$/i:/^0x(?:[0-9a-f]{2})*$/i).test(t))throw new r("Invalid hexadecimal operation bytes.");return t}function E(a,t,m,O){return{name:t,inputSchema:{type:"object",additionalProperties:!1,required:["operation","values"],properties:{operation:{type:"string",enum:S.map(i=>i.abi.name)},values:{type:"array",maxItems:3,items:{oneOf:[{type:"string"},{type:"boolean"}]},description:"Ordered ABI values. Integers are decimal base-unit strings; addresses and bytes are explicit strings."},mode:{enum:["call","submit","revoke"],default:"call",description:"Submit/revoke only for timelocked curator operations. Execution is a separate call after the delay."}}},execute:async(i,c)=>{try{if(p(c),Object.keys(i).some(e=>!["operation","values","mode"].includes(e)))throw new r("Unexpected vault management argument.");let n=S.find(e=>e.abi.name===i.operation);if(!n||!Array.isArray(i.values)||i.values.length!==n.abi.inputs.length)throw new r("Provide a supported operation and its exact ordered values.");let o=i.mode??"call";if(!["call","submit","revoke"].includes(String(o))||o!=="call"&&n.authority!=="timelock")throw new r("Submit/revoke is available only for timelocked curator operations.");let I=n.abi.inputs.map((e,d)=>M(e.type,i.values[d])),l=A({abi:[n.abi],functionName:n.abi.name,args:I}),b=a.clientFor(u);if(await b.getChainId()!==u)throw new r("Vault management requires chain 4663.");let s=(e,d=[])=>b.readContract({address:m,abi:x,functionName:e,args:d}),y=await s("asset");if(typeof y!="string"||w(y)!==w(O.address))throw new r("Vault management requires the pinned vault asset.");let g=e=>typeof e=="string"&&e.toLowerCase()===c.toLowerCase(),C=async e=>e==="any"?!0:e==="owner"?g(await s("owner")):e==="allocator"?await s("isAllocator",[c])===!0:e==="allocatorOrSentinel"?await s("isAllocator",[c])===!0||await s("isSentinel",[c])===!0:g(await s("curator"))||e==="curatorOrSentinel"&&await s("isSentinel",[c])===!0;if(n.authority==="timelock"&&o==="call"){let[e,d,D]=await Promise.all([s("executableAt",[l]),s("abdicated",[l.slice(0,10)]),b.getBlock()]);if(f(e)===0n||f(e)>D.timestamp||d!==!1)throw new r("This exact operation has not matured or its selector is abdicated. Submit it with the curator, then wait for its executable time.")}else if(!await C(o==="submit"?"timelock":o==="revoke"?"curatorOrSentinel":n.authority))throw new r("This wallet does not hold the required vault management role. No transaction was built.");let $=o==="call"?l:A({abi:x,functionName:o==="submit"?"submit":"revoke",args:[l]}),k=`${o} ${n.abi.name} on ${m}; ordered values ${JSON.stringify(i.values)}. ${n.abi.name==="abdicate"?"Abdication is irreversible.":""}`,h=[a.unsignedTx({to:m,data:$,value:"0",chainId:u,description:k})],v=await a.preview(h,c);return{txs:h,preview:v,summary:`${k} ${v.summary} ${o==="submit"?"Submission schedules this exact operation; it does not execute the configuration change.":"Role, cap and timing checks can change before execution."}`}}catch(n){throw new r(a.plainError(n))}}}}export{S as a,M as b,E as c};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{b as D}from"./IX3GZMTM.js";import{a as d}from"./FWD4L3CJ.js";import{a as c}from"./XSD5NL7J.js";import{concat as B,encodeAbiParameters as k,getAddress as v,isAddress as F,keccak256 as g,parseAbiParameters as O,recoverAddress as q,toHex as N}from"viem";import{privateKeyToAccount as U}from"viem/accounts";var T="OakPriceNote",l="1",w=300,E="0x0000000000000000000000000000000000000000",W=g(N("PriceNote(address wallet,uint256 oakPerEthE18,uint64 timestamp,bytes32 nonce)")),L=g(N("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)")),M=(1n<<64n)-1n,P=(1n<<256n)-1n,z=0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n,G=0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0n;function X(e){if(typeof e!="string"||!/^0x[0-9a-fA-F]{130}$/.test(e))return!1;let n=BigInt(`0x${e.slice(2,66)}`),t=BigInt(`0x${e.slice(66,130)}`),i=Number.parseInt(e.slice(130,132),16);return!(i!==27&&i!==28||n<=0n||n>=z||t<=0n||t>G)}function m(e,n){if(typeof e!="string"||!F(e,{strict:!1}))throw new c(`Invalid ${n} address.`);return v(e)}function p(e,n){let t;if(typeof e=="bigint")t=e;else if(typeof e=="number"){if(!Number.isSafeInteger(e)||e<0)throw new c(`Invalid ${n}.`);t=BigInt(e)}else t=D(e);if(t<0n||t>P)throw new c(`${n} exceeds uint256 bounds.`);return t}function h(e,n){let t=p(e,n);if(t>M)throw new c(`${n} exceeds uint64 bounds.`);return t}function Y(e,n){if(typeof e!="string"||!/^0x[0-9a-fA-F]{64}$/.test(e))throw new c(`${n} must be a 32-byte hex string.`);return e}function j(e){if(typeof e=="bigint"){if(e<=0n||e>P)throw new c("Private key must be a positive scalar.");return`0x${e.toString(16).padStart(64,"0")}`}if(typeof e=="string"&&/^0x[0-9a-fA-F]{1,64}$/.test(e))return`0x${e.slice(2).padStart(64,"0")}`;throw new c("Invalid private key format.")}function K(e){let n=p(e.chainId,"chainId"),t=m(e.verifyingContract,"verifyingContract");return g(k(O("bytes32, bytes32, bytes32, uint256, address"),[L,g(N(e.name)),g(N(e.version)),n,t]))}function ae(e,n=d,t=l){return{name:T,version:t,chainId:Number(p(n,"chainId")),verifyingContract:m(e,"consumer")}}function J(e,n=d,t=l){return K({name:T,version:t,chainId:n,verifyingContract:e})}function Q(e){let n=m(e.wallet,"wallet"),t=p(e.oakPerEthE18,"oakPerEthE18"),i=h(e.timestamp,"timestamp"),r=Y(e.nonce,"nonce");return g(k(O("bytes32, address, uint256, uint64, bytes32"),[W,n,t,i,r]))}function C(e,n,t=d,i=l){let r=J(n,t,i),o=Q(e);return g(B(["0x1901",r,o]))}async function ce(e,n,t,i=d,r=l){let o=C(e,n,i,r);return typeof t=="object"&&t!==null&&"sign"in t?t.sign({hash:o}):U(j(t)).sign({hash:o})}async function Z(e,n,t,i=d,r=l){if(!X(n))return E;try{let o=C(e,t,i,r),x=await q({hash:o,signature:n});return v(x)}catch{return E}}function ee(e,n){let t=p(e,"oakPerEthE18"),i=p(n,"spotOakPerEthE18");if(i<=0n||t<=0n)return!1;if(t>P/2n||i>P/3n)throw new c("Guard arithmetic overflow.");let r=t*2n;return r>=i&&r<=i*3n}function te(e,n,t,i){if("signature"in e&&"consumer"in e&&"note"in e&&!("average"in e))return e;if("note"in e&&"signature"in e&&"consumer"in e){let a=e,f=n??{};return{...f,note:a.note,signature:a.signature,consumer:f.consumer??a.consumer,expiresAt:f.expiresAt??a.expiresAt}}return{...i??{},note:e,signature:n,consumer:t}}async function fe(e,n,t,i){let r=te(e,n,t,i),{note:o,signature:x,consumer:S}=r,a=h(o.timestamp,"timestamp"),f=p(o.oakPerEthE18,"oakPerEthE18"),y=(a+BigInt(w)).toString(),s=(b,V,H)=>({valid:!1,ok:!1,...H?{signer:H}:{},oakPerEthE18:f.toString(),expiresAt:y,reason:b,error:V}),I=r.wallet??r.boundWallet;if(I===void 0)return s("wrong_wallet","Bound wallet context is required to verify a price note.");if(m(o.wallet,"wallet")!==m(I,"boundWallet"))return s("wrong_wallet","Price note wallet does not match the bound wallet.");if(r.now===void 0)return s("expired","Current time (now) is required to verify price note expiry.");let A=h(r.now,"now");if(a>A)return s("not_yet_valid","Price note timestamp is in the future.");if(A-a>BigInt(w))return s("expired","Price note has expired.");if(r.expiresAt!==void 0){let b=h(r.expiresAt,"expiresAt");if(b!==a+BigInt(w)||A>b)return s("expired","Price note has expired.")}let R=r.chainId??d,$=r.version??l,u=await Z(o,x,S,R,$);if(u===E)return s("bad_signature","Price note signature could not be recovered.");if(r.signer===void 0)return s("bad_signature","Expected oracle signer is required to verify a price note.",u);let _=m(r.signer,"signer");return _===E||u!==_?s("bad_signature","Price note signer does not match the oracle signer.",u):r.spotOakPerEthE18===void 0?s("outside_guard","Spot OAK/ETH price is required to verify the price note guard band.",u):ee(f,r.spotOakPerEthE18)?{valid:!0,ok:!0,signer:u,oakPerEthE18:f.toString(),expiresAt:y}:s("outside_guard","Price note is outside the 50% spot guard band.",u)}export{T as a,l as b,w as c,E as d,W as e,K as f,ae as g,J as h,Q as i,C as j,ce as k,Z as l,ee as m,fe as n};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as ne}from"./3XNZUIRU.js";import{a as ee,b as re,d as te,e as B,f as X,g as ie}from"./O7HCEPQY.js";import{a as z,c as f,d as L,f as i,g,h as C,i as S,j as G,k,l as F,m as v,n as Z,p as A,q as R,s as V,t as W}from"./46KWRAYK.js";import{b as M}from"./66F5ZH34.js";import{c as N,h as I}from"./NWNYJ26T.js";import{a as Y}from"./XSD5NL7J.js";import{randomInt as le,randomUUID as he}from"node:crypto";import{isDeepStrictEqual as H}from"node:util";import{encodeFunctionData as ae,erc20Abi as se,pad as qe,recoverTypedDataAddress as fe,zeroHash as ge}from"viem";var $={funding:{path:"/v1/funding",parameters:[{name:"order",in:"query",required:!1,schema:{type:"string",enum:["asc","desc"]}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"cursor",in:"query",required:!1,schema:{type:"string"}},{name:"productId",in:"query",required:!0,schema:{type:"string",format:"uuid"}},{name:"startTime",in:"query",required:!0,schema:{type:"number"}},{name:"endTime",in:"query",required:!0,schema:{type:"number"}},{name:"orderBy",in:"query",required:!1,schema:{type:"string",enum:["chargedAt"]}}]},"funding/projected-rate":{path:"/v1/funding/projected-rate",parameters:[{name:"productIds",in:"query",required:!0,schema:{type:"array",items:{type:"string",format:"uuid"},maxItems:50,minItems:1,uniqueItems:!0}}]},"linked-signer":{path:"/v1/linked-signer",parameters:[{name:"order",in:"query",required:!1,schema:{type:"string",enum:["asc","desc"]}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"cursor",in:"query",required:!1,schema:{type:"string"}},{name:"subaccountId",in:"query",required:!0,schema:{type:"string",format:"uuid"}},{name:"statuses",in:"query",required:!1,schema:{type:"array",items:{type:"string",enum:["PENDING","ACTIVE","PENDING_REVOKE","REVOKED","REJECTED"]}}},{name:"orderBy",in:"query",required:!1,schema:{type:"string",enum:["createdAt","expiresAt"]}}]},"linked-signer/address/{address}":{path:"/v1/linked-signer/address/{address}",parameters:[{name:"address",in:"path",required:!0,schema:{type:"string",format:"hex"}}]},"linked-signer/quota":{path:"/v1/linked-signer/quota",parameters:[{name:"subaccountId",in:"query",required:!0,schema:{type:"string",format:"uuid"}}]},"linked-signer/{id}":{path:"/v1/linked-signer/{id}",parameters:[{name:"id",in:"path",required:!0,schema:{type:"string"}}]},maintenance:{path:"/v1/maintenance",parameters:[]},order:{path:"/v1/order",parameters:[{name:"order",in:"query",required:!1,schema:{type:"string",enum:["asc","desc"]}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"cursor",in:"query",required:!1,schema:{type:"string"}},{name:"subaccountId",in:"query",required:!0,schema:{type:"string",format:"uuid"}},{name:"clientOrderId",in:"query",required:!1,schema:{type:"string"}},{name:"productIds",in:"query",required:!1,schema:{type:"array",items:{type:"string",format:"uuid"},minItems:1,uniqueItems:!0}},{name:"createdAfter",in:"query",required:!1,schema:{type:"integer"}},{name:"createdBefore",in:"query",required:!1,schema:{type:"integer"}},{name:"side",in:"query",required:!1,schema:{type:"integer",enum:[0,1],"x-enum-varnames":["BUY","SELL"]}},{name:"close",in:"query",required:!1,schema:{type:"boolean"}},{name:"stopTypes",in:"query",required:!1,schema:{type:"array",items:{type:"integer",enum:[0,1],"x-enum-varnames":["GAIN","LOSS"]}}},{name:"isWorking",in:"query",required:!1,schema:{type:"boolean",enum:[!0]}},{name:"isPending",in:"query",required:!1,schema:{type:"boolean",enum:[!0]}},{name:"orderBy",in:"query",required:!1,schema:{type:"string",enum:["createdAt"]}}]},"order/fill":{path:"/v1/order/fill",parameters:[{name:"order",in:"query",required:!1,schema:{type:"string",enum:["asc","desc"]}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"cursor",in:"query",required:!1,schema:{type:"string"}},{name:"subaccountId",in:"query",required:!0,schema:{type:"string",format:"uuid"}},{name:"productIds",in:"query",required:!1,schema:{type:"array",items:{type:"string",format:"uuid"},minItems:1,uniqueItems:!0}},{name:"createdAfter",in:"query",required:!1,schema:{type:"integer"}},{name:"createdBefore",in:"query",required:!1,schema:{type:"integer"}},{name:"side",in:"query",required:!1,schema:{type:"integer",enum:[0,1],"x-enum-varnames":["BUY","SELL"]}},{name:"orderBy",in:"query",required:!1,schema:{type:"string",enum:["productId","filled","price","createdAt"]}},{name:"includeSelfTrades",in:"query",required:!1,schema:{type:"boolean"}},{name:"expandSelfTrades",in:"query",required:!1,schema:{type:"boolean"}}]},"order/trade":{path:"/v1/order/trade",parameters:[{name:"order",in:"query",required:!1,schema:{type:"string",enum:["asc","desc"]}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"cursor",in:"query",required:!1,schema:{type:"string"}},{name:"productId",in:"query",required:!0,schema:{type:"string",format:"uuid"}},{name:"orderBy",in:"query",required:!1,schema:{type:"string",enum:["createdAt"]}}]},"order/{id}":{path:"/v1/order/{id}",parameters:[{name:"id",in:"path",required:!0,schema:{type:"string"}}]},"order/{id}/group":{path:"/v1/order/{id}/group",parameters:[{name:"id",in:"path",required:!0,schema:{type:"string"}},{name:"order",in:"query",required:!1,schema:{type:"string",enum:["asc","desc"]}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"cursor",in:"query",required:!1,schema:{type:"string"}},{name:"orderBy",in:"query",required:!1,schema:{type:"string",enum:["createdAt"]}}]},points:{path:"/v1/points",parameters:[{name:"address",in:"query",required:!0,schema:{type:"string",format:"hex"}},{name:"season",in:"query",required:!0,schema:{type:"integer",maximum:10,minimum:0}},{name:"epoch",in:"query",required:!0,schema:{type:"integer",maximum:256,minimum:1}}]},"points/summary":{path:"/v1/points/summary",parameters:[{name:"address",in:"query",required:!0,schema:{type:"string",format:"hex"}}]},"points/total":{path:"/v1/points/total",parameters:[{name:"season",in:"query",required:!1,schema:{type:"integer",maximum:10,minimum:0}},{name:"epoch",in:"query",required:!1,schema:{type:"integer",maximum:256,minimum:1}}]},position:{path:"/v1/position",parameters:[{name:"order",in:"query",required:!1,schema:{type:"string",enum:["asc","desc"]}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"cursor",in:"query",required:!1,schema:{type:"string"}},{name:"subaccountId",in:"query",required:!0,schema:{type:"string",format:"uuid"}},{name:"productIds",in:"query",required:!1,schema:{type:"array",items:{type:"string",format:"uuid"},minItems:1,uniqueItems:!0}},{name:"open",in:"query",required:!1,schema:{type:"boolean"}},{name:"orderBy",in:"query",required:!1,schema:{type:"string",enum:["size","createdAt","updatedAt","realizedPnl"]}},{name:"createdAfter",in:"query",required:!1,schema:{type:"integer"}},{name:"createdBefore",in:"query",required:!1,schema:{type:"integer"}},{name:"side",in:"query",required:!1,schema:{type:"integer",enum:[0,1],"x-enum-varnames":["BUY","SELL"]}},{name:"isLiquidated",in:"query",required:!1,schema:{type:"boolean"}}]},"position-fee":{path:"/v1/position-fee",parameters:[{name:"order",in:"query",required:!1,schema:{type:"string",enum:["asc","desc"]}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"cursor",in:"query",required:!1,schema:{type:"string"}},{name:"productId",in:"query",required:!0,schema:{type:"string",format:"uuid"}},{name:"startTime",in:"query",required:!0,schema:{type:"number"}},{name:"endTime",in:"query",required:!0,schema:{type:"number"}},{name:"orderBy",in:"query",required:!1,schema:{type:"string",enum:["chargedAt"]}}]},"position-fee/projected-rate":{path:"/v1/position-fee/projected-rate",parameters:[{name:"productIds",in:"query",required:!0,schema:{type:"array",items:{type:"string",format:"uuid"},maxItems:50,minItems:1,uniqueItems:!0}}]},"position/active":{path:"/v1/position/active",parameters:[{name:"subaccountId",in:"query",required:!0,schema:{type:"string",format:"uuid"}},{name:"productId",in:"query",required:!0,schema:{type:"string",format:"uuid"}}]},"position/fill":{path:"/v1/position/fill",parameters:[{name:"order",in:"query",required:!1,schema:{type:"string",enum:["asc","desc"]}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"cursor",in:"query",required:!1,schema:{type:"string"}},{name:"positionId",in:"query",required:!0,schema:{type:"string",format:"uuid"}},{name:"orderBy",in:"query",required:!1,schema:{type:"string",enum:["price","filled","createdAt"]}}]},"position/liquidation":{path:"/v1/position/liquidation",parameters:[{name:"order",in:"query",required:!1,schema:{type:"string",enum:["desc"]}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"cursor",in:"query",required:!1,schema:{type:"string"}},{name:"orderBy",in:"query",required:!1,schema:{type:"string",enum:["createdAt"]}}]},"position/{id}":{path:"/v1/position/{id}",parameters:[{name:"id",in:"path",required:!0,schema:{type:"string"}}]},product:{path:"/v1/product",parameters:[{name:"order",in:"query",required:!1,schema:{type:"string",enum:["asc","desc"]}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"cursor",in:"query",required:!1,schema:{type:"string"}},{name:"orderBy",in:"query",required:!1,schema:{type:"string",enum:["createdAt","openInterest","baseTokenName","quoteTokenName"]}},{name:"ticker",in:"query",required:!1,schema:{type:"string",pattern:"^[a-zA-Z0-9]{1,32}$"}}]},"product/mark-price-gap":{path:"/v1/product/mark-price-gap",parameters:[{name:"order",in:"query",required:!1,schema:{type:"string",enum:["asc","desc"]}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"cursor",in:"query",required:!1,schema:{type:"string"}},{name:"productIds",in:"query",required:!0,schema:{type:"array",items:{type:"string",format:"uuid"},maxItems:50,minItems:1,uniqueItems:!0}},{name:"startTime",in:"query",required:!0,schema:{type:"number"}},{name:"endTime",in:"query",required:!0,schema:{type:"number"}},{name:"orderBy",in:"query",required:!1,schema:{type:"string",enum:["startTime"]}}]},"product/market-liquidity":{path:"/v1/product/market-liquidity",parameters:[{name:"productId",in:"query",required:!0,schema:{type:"string",format:"uuid"}}]},"product/market-price":{path:"/v1/product/market-price",parameters:[{name:"productIds",in:"query",required:!0,schema:{type:"array",items:{type:"string",format:"uuid"},maxItems:50,minItems:1,uniqueItems:!0}}]},"product/{id}":{path:"/v1/product/{id}",parameters:[{name:"id",in:"path",required:!0,schema:{type:"string"}}]},"rate-limit/config":{path:"/v1/rate-limit/config",parameters:[]},"rpc/config":{path:"/v1/rpc/config",parameters:[]},subaccount:{path:"/v1/subaccount",parameters:[{name:"order",in:"query",required:!1,schema:{type:"string",enum:["asc","desc"]}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"cursor",in:"query",required:!1,schema:{type:"string"}},{name:"name",in:"query",required:!1,schema:{type:"string",format:"hex"}},{name:"sender",in:"query",required:!0,schema:{type:"string",format:"hex"}},{name:"orderBy",in:"query",required:!1,schema:{type:"string",enum:["createdAt","name"]}}]},"subaccount/all":{path:"/v1/subaccount/all",parameters:[{name:"order",in:"query",required:!1,schema:{type:"string",enum:["desc"]}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"cursor",in:"query",required:!1,schema:{type:"string"}},{name:"orderBy",in:"query",required:!1,schema:{type:"string",enum:["createdAt"]}}]},"subaccount/balance":{path:"/v1/subaccount/balance",parameters:[{name:"order",in:"query",required:!1,schema:{type:"string",enum:["asc","desc"]}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"cursor",in:"query",required:!1,schema:{type:"string"}},{name:"subaccountId",in:"query",required:!0,schema:{type:"string",format:"uuid"}},{name:"orderBy",in:"query",required:!1,schema:{type:"string",enum:["tokenName","updatedAt","amount"]}}]},"subaccount/{id}":{path:"/v1/subaccount/{id}",parameters:[{name:"id",in:"path",required:!0,schema:{type:"string"}}]},time:{path:"/v1/time",parameters:[]},token:{path:"/v1/token",parameters:[{name:"order",in:"query",required:!1,schema:{type:"string",enum:["asc","desc"]}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"cursor",in:"query",required:!1,schema:{type:"string"}},{name:"depositEnabled",in:"query",required:!1,schema:{type:"boolean"}},{name:"withdrawEnabled",in:"query",required:!1,schema:{type:"boolean"}},{name:"orderBy",in:"query",required:!1,schema:{type:"string",enum:["createdAt"]}}]},"token/transfer":{path:"/v1/token/transfer",parameters:[{name:"order",in:"query",required:!1,schema:{type:"string",enum:["asc","desc"]}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"cursor",in:"query",required:!1,schema:{type:"string"}},{name:"subaccountId",in:"query",required:!0,schema:{type:"string",format:"uuid"}},{name:"statuses",in:"query",required:!1,schema:{type:"array",items:{type:"string",enum:["SUBMITTED","PENDING","COMPLETED","REJECTED"]},uniqueItems:!0}},{name:"types",in:"query",required:!1,schema:{type:"array",items:{type:"string",enum:["DEPOSIT","WITHDRAW","CONVERT"]}}},{name:"orderBy",in:"query",required:!1,schema:{type:"string",enum:["createdAt"]}},{name:"createdAfter",in:"query",required:!1,schema:{type:"integer"}},{name:"createdBefore",in:"query",required:!1,schema:{type:"integer"}}]},"token/withdraw":{path:"/v1/token/withdraw",parameters:[{name:"order",in:"query",required:!1,schema:{type:"string",enum:["asc","desc"]}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"cursor",in:"query",required:!1,schema:{type:"string"}},{name:"subaccountId",in:"query",required:!0,schema:{type:"string",format:"uuid"}},{name:"isActive",in:"query",required:!1,schema:{type:"boolean"}},{name:"orderBy",in:"query",required:!1,schema:{type:"string",enum:["createdAt"]}}]},"token/{id}":{path:"/v1/token/{id}",parameters:[{name:"id",in:"path",required:!0,schema:{type:"string"}}]},"usde/transfer":{path:"/v1/usde/transfer",parameters:[{name:"order",in:"query",required:!1,schema:{type:"string",enum:["asc","desc"]}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"cursor",in:"query",required:!1,schema:{type:"string"}},{name:"address",in:"query",required:!0,schema:{type:"string",format:"hex"}},{name:"excludeTransferAddresses",in:"query",required:!1,schema:{type:"array",items:{type:"string",format:"hex"},maxItems:10,uniqueItems:!0}},{name:"statuses",in:"query",required:!1,schema:{type:"array",items:{type:"string",enum:["PENDING","COMPLETED"]},uniqueItems:!0}},{name:"types",in:"query",required:!1,schema:{type:"array",items:{type:"string",enum:["DEPOSIT","WITHDRAW","TRANSFER"]},uniqueItems:!0}},{name:"orderBy",in:"query",required:!1,schema:{type:"string",enum:["initiatedAt"]}},{name:"initiatedAfter",in:"query",required:!1,schema:{type:"integer"}},{name:"initiatedBefore",in:"query",required:!1,schema:{type:"integer"}}]},"archive/subaccount/balance":{path:"/v1/subaccount/balance",host:"archive",parameters:[{name:"order",in:"query",required:!1,schema:{type:"string",enum:["asc","desc"]}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"cursor",in:"query",required:!1,schema:{type:"string"}},{name:"startTime",in:"query",required:!0,schema:{type:"number"}},{name:"endTime",in:"query",required:!1,schema:{type:"number"}},{name:"resolution",in:"query",required:!0,schema:{type:"string",enum:["hour1","hour2","hour4","hour8","hour12","day1","week1","month1"]}},{name:"orderBy",in:"query",required:!1,schema:{type:"string",enum:["time"]}},{name:"subaccountId",in:"query",required:!0,schema:{format:"uuid",type:"string"}},{name:"tokenIds",in:"query",required:!1,schema:{minItems:1,uniqueItems:!0,type:"array",items:{type:"string",format:"uuid"}}}]},"archive/subaccount/funding":{path:"/v1/subaccount/funding",host:"archive",parameters:[{name:"order",in:"query",required:!1,schema:{type:"string",enum:["asc","desc"]}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"cursor",in:"query",required:!1,schema:{type:"string"}},{name:"startTime",in:"query",required:!0,schema:{type:"number"}},{name:"endTime",in:"query",required:!1,schema:{type:"number"}},{name:"orderBy",in:"query",required:!1,schema:{type:"string",enum:["time"]}},{name:"subaccountId",in:"query",required:!0,schema:{format:"uuid",type:"string"}},{name:"positionIds",in:"query",required:!1,schema:{minItems:1,maxItems:128,uniqueItems:!0,type:"array",items:{type:"string",format:"uuid"}}},{name:"productIds",in:"query",required:!1,schema:{minItems:1,uniqueItems:!0,type:"array",items:{type:"string",format:"uuid"}}}]},"archive/subaccount/position-fee":{path:"/v1/subaccount/position-fee",host:"archive",parameters:[{name:"order",in:"query",required:!1,schema:{type:"string",enum:["asc","desc"]}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"cursor",in:"query",required:!1,schema:{type:"string"}},{name:"startTime",in:"query",required:!0,schema:{type:"number"}},{name:"endTime",in:"query",required:!1,schema:{type:"number"}},{name:"orderBy",in:"query",required:!1,schema:{type:"string",enum:["time"]}},{name:"subaccountId",in:"query",required:!0,schema:{format:"uuid",type:"string"}},{name:"positionIds",in:"query",required:!1,schema:{minItems:1,maxItems:128,uniqueItems:!0,type:"array",items:{type:"string",format:"uuid"}}},{name:"productIds",in:"query",required:!1,schema:{minItems:1,uniqueItems:!0,type:"array",items:{type:"string",format:"uuid"}}}]},"archive/subaccount/unrealized-pnl":{path:"/v1/subaccount/unrealized-pnl",host:"archive",parameters:[{name:"order",in:"query",required:!1,schema:{type:"string",enum:["asc","desc"]}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"cursor",in:"query",required:!1,schema:{type:"string"}},{name:"startTime",in:"query",required:!0,schema:{type:"number"}},{name:"endTime",in:"query",required:!1,schema:{type:"number"}},{name:"resolution",in:"query",required:!0,schema:{type:"string",enum:["hour1","hour2","hour4","hour8","hour12","day1","week1","month1"]}},{name:"orderBy",in:"query",required:!1,schema:{type:"string",enum:["time"]}},{name:"subaccountId",in:"query",required:!0,schema:{format:"uuid",type:"string"}},{name:"productIds",in:"query",required:!1,schema:{minItems:1,uniqueItems:!0,type:"array",items:{type:"string",format:"uuid"}}}]},"archive/subaccount/volume":{path:"/v1/subaccount/volume",host:"archive",parameters:[{name:"order",in:"query",required:!1,schema:{type:"string",enum:["asc","desc"]}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"cursor",in:"query",required:!1,schema:{type:"string"}},{name:"startTime",in:"query",required:!0,schema:{type:"number"}},{name:"endTime",in:"query",required:!1,schema:{type:"number"}},{name:"resolution",in:"query",required:!0,schema:{type:"string",enum:["hour1","hour2","hour4","hour8","hour12","day1","week1","month1"]}},{name:"orderBy",in:"query",required:!1,schema:{type:"string",enum:["time"]}},{name:"subaccountId",in:"query",required:!0,schema:{format:"uuid",type:"string"}}]},"archive/subaccount/total-volume":{path:"/v1/subaccount/total-volume",host:"archive",parameters:[{name:"subaccountId",in:"query",required:!0,schema:{format:"uuid",type:"string"}}]},"candles/last-price/config":{path:"/v1/last-price/config",host:"candles",parameters:[]},"candles/last-price/time":{path:"/v1/last-price/time",host:"candles",parameters:[]},"candles/last-price/symbols":{path:"/v1/last-price/symbols",host:"candles",parameters:[{name:"symbol",in:"query",required:!0,schema:{type:"string"}}]},"candles/last-price/search":{path:"/v1/last-price/search",host:"candles",parameters:[{name:"query",in:"query",schema:{type:"string"}},{name:"type",in:"query",schema:{type:"string"}},{name:"exchange",in:"query",schema:{type:"string"}},{name:"limit",in:"query",schema:{type:"integer",minimum:1,maximum:100}}]},"candles/last-price/history":{path:"/v1/last-price/history",host:"candles",parameters:[{name:"symbol",in:"query",required:!0,schema:{type:"string"}},{name:"resolution",in:"query",required:!0,schema:{type:"string",enum:["1","3","5","15","30","60","120","240","480","720","1D","3D","1W","1M"]}},{name:"from",in:"query",required:!0,schema:{type:"integer",minimum:0}},{name:"to",in:"query",required:!0,schema:{type:"integer",minimum:0}},{name:"countback",in:"query",required:!1,schema:{type:"integer",minimum:0}}]},"candles/oracle-price/config":{path:"/v1/oracle-price/config",host:"candles",parameters:[]},"candles/oracle-price/time":{path:"/v1/oracle-price/time",host:"candles",parameters:[]},"candles/oracle-price/symbols":{path:"/v1/oracle-price/symbols",host:"candles",parameters:[{name:"symbol",in:"query",required:!0,schema:{type:"string"}}]},"candles/oracle-price/search":{path:"/v1/oracle-price/search",host:"candles",parameters:[{name:"query",in:"query",schema:{type:"string"}},{name:"type",in:"query",schema:{type:"string"}},{name:"exchange",in:"query",schema:{type:"string"}},{name:"limit",in:"query",schema:{type:"integer",minimum:1,maximum:100}}]},"candles/oracle-price/history":{path:"/v1/oracle-price/history",host:"candles",parameters:[{name:"symbol",in:"query",required:!0,schema:{type:"string"}},{name:"resolution",in:"query",required:!0,schema:{type:"string",enum:["1","3","5","15","30","60","120","240","480","720","1D","3D","1W","1M"]}},{name:"from",in:"query",required:!0,schema:{type:"integer",minimum:0}},{name:"to",in:"query",required:!0,schema:{type:"integer",minimum:0}},{name:"countback",in:"query",required:!1,schema:{type:"integer",minimum:0}}]}};var O={type:"string",format:"uuid"},de={type:"string",description:"ASCII subaccount name (default primary) or bytes32. Query IDs are UUIDs."},ue={subaccount:de,subaccountId:O};function ce(t,a){return a.type==="array"?((!Array.isArray(t)||t.length<Number(a.minItems??1)||t.length>Number(a.maxItems??200)||a.uniqueItems&&new Set(t).size!==t.length)&&i("Invalid Meridian perps query array."),t.flatMap(s=>ce(s,g(a.items)))):(a.type==="integer"||a.type==="number"?(typeof t!="number"||!Number.isSafeInteger(t)||t<Number(a.minimum??0)||t>Number(a.maximum??Number.MAX_SAFE_INTEGER))&&i("Invalid Meridian perps query integer."):a.type==="boolean"?typeof t!="boolean"&&i("Invalid Meridian perps query flag."):((typeof t!="string"||t.length<1||t.length>4096)&&i("Invalid Meridian perps query string."),a.format==="uuid"&&k(t),a.format==="hex"&&!/^0x(?:[0-9a-fA-F]{2})+$/.test(t)&&i("Invalid Meridian perps hexadecimal query.")),Array.isArray(a.enum)&&!a.enum.includes(t)&&i("Invalid Meridian perps query option."),[String(t)])}async function be(t,a,s){if(t.network==="testnet"&&i("Meridian perps extended reads require mainnet."),Object.keys(a).some(r=>!["resource","params"].includes(r))&&i("Use resource and params for Meridian perps reads."),a.resource===void 0&&a.params===void 0)return{chainId:f,resources:$,scope:"Fixed official public read routes and their exact query/path parameter schemas."};(typeof a.resource!="string"||!Object.hasOwn($,a.resource))&&i("Choose a Meridian perps resource from the tool schema.");let b=$[a.resource],l=a.params===void 0?{}:{...g(a.params)};a.resource==="subaccount"&&l.sender===void 0&&(l.sender=s),Object.keys(l).some(r=>!b.parameters.some(e=>e.name===r))&&i("Unsupported Meridian perps query parameter.");let h=new URLSearchParams,m=b.path;for(let r of b.parameters){let e=l[r.name];if(e===void 0){r.required&&i(`Meridian perps ${a.resource} needs ${r.name}.`);continue}r.name==="limit"&&(typeof e!="number"||e<1||e>100)&&i("Choose a page limit from 1 to 100.");let n=ce(e,r.schema);if(r.in==="path")r.name==="id"&&k(e),r.name==="address"&&S(e),m=m.replace(`{${r.name}}`,encodeURIComponent(n[0]));else for(let p of n)h.append(r.name,p)}let u=await A(t,`${m}${h.size?`?${h}`:""}`,void 0,b.host);if(u&&typeof u=="object"&&"hasNext"in u){let r=g(u);(typeof r.hasNext!="boolean"||!Array.isArray(r.data)||r.hasNext&&(typeof r.nextCursor!="string"||!r.nextCursor))&&i("Meridian perps returned invalid pagination metadata.")}return{chainId:f,resource:a.resource,data:u,scope:"One API response. Follow hasNext/nextCursor using the same filters; an accepted action or API balance is not proof of final on-chain delivery."}}async function D(t,a){let s=[],b=new Set,l;for(let h=0;h<100;h++){let m=g(await A(t,`${a}${a.includes("?")?"&":"?"}limit=100${l?`&cursor=${encodeURIComponent(l)}`:""}`));if((!Array.isArray(m.data)||typeof m.hasNext!="boolean")&&i("Meridian perps listing is incomplete."),s.push(...m.data.map(g)),!m.hasNext)return s;(typeof m.nextCursor!="string"||!m.nextCursor||b.has(m.nextCursor))&&i("Meridian perps pagination did not advance."),l=m.nextCursor,b.add(l)}return i("Meridian perps listing exceeded the safety bound; retry after indexing stabilizes.")}async function me(t,a,s,b,l){let h={};if(a!=="referral"&&!(a==="signer"&&s.mode==="extend")&&await V(t,s.subaccountId,b,F(s.subaccount)),a==="order"){let m=(await D(t,"/v1/product?order=asc")).filter(o=>o.onchainId===s.onchainId&&o.engineType===0);m.length!==1&&i("No unique Meridian perps product matches this onchainId.");let u=m[0];u.status!=="ACTIVE"&&i("The Meridian perps product is not active.");let r=BigInt(C(s.quantity,"the D9 quantity")),e=v(u.lotSize),n=v(u.tickSize);(!e||!n||r%e||r>v(u.maxQuantity)||!s.close&&r<v(u.minQuantity))&&i("Meridian perps quantity violates the current product limits or lot size.");for(let o of["price","stopPrice"])if(s[o]!==void 0){let d=BigInt(C(s[o],`the D9 ${o}`));(d%n||d<v(u.minPrice)||d>v(u.maxPrice))&&i("Meridian perps price violates current bounds or tick size.")}let p=g(await A(t,"/v1/order/dry-run",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({data:l})}));p.code!=="Ok"&&i("Meridian perps dry run did not accept this order. Inspect balances, isolated-pool conversions and current risk limits."),h={marginMode:u.marginMode,quoteTokenAddress:u.quoteTokenAddress,currentApiFeeFractions:{maker:u.makerFee,taker:u.takerFee},dryRun:p}}if(a==="withdraw"){let m=await W(t,s.tokenId);(!I(m.address,s.token)||m.withdrawEnabled!==!0)&&i("The chosen Meridian perps token is not enabled for withdrawal.");let u=(await D(t,`/v1/subaccount/balance?subaccountId=${k(s.subaccountId)}`)).find(r=>r.tokenId===s.tokenId);(!u||v(u.available)<BigInt(C(s.amount,"the D9 withdrawal amount")))&&i("Not enough available Meridian perps collateral. Unrealized trading profit is not withdrawable."),h={availableD9:v(u.available).toString(),withdrawFeeD9:v(m.withdrawFee).toString(),tokenSymbol:m.erc20Symbol,tokenNativeDecimals:m.erc20Decimals}}if(a==="convert"){let m=await D(t,"/v1/token?order=asc"),u=m.find(e=>I(e.address,s.fromToken)),r=m.find(e=>I(e.address,s.toToken));(!u||!r||(u.backingTokenId??u.id)!==(r.backingTokenId??r.id))&&i("The Meridian perps quote-token pools do not share a backing token."),h={fromTokenId:u.id,toTokenId:r.id,conversionFeeD9:"0",conversionRate:"1:1 in D9 accounting units"}}if(a==="signer"){let m=S(s.mode==="extend"?b:s.signer),r=(s.mode==="extend"?[g(await A(t,`/v1/linked-signer/address/${m}`))]:await D(t,`/v1/linked-signer?subaccountId=${k(s.subaccountId)}`)).filter(e=>I(e.signer,m));if(r.length!==1&&i("The Meridian linked signer does not match the requested subaccount."),s.mode==="extend"&&(r[0].status!=="ACTIVE"||typeof r[0].expiresAt!="number"||r[0].expiresAt<=Date.now())&&i("Only an active unexpired local Meridian signer can extend itself."),h={currentSignerStatus:r[0].status,expiresAtMilliseconds:r[0].expiresAt},s.mode==="revoke"){let e=g(await A(t,`/v1/order?subaccountId=${k(s.subaccountId)}&statuses=NEW&statuses=PENDING&statuses=FILLED_PARTIAL&limit=1`));(!Array.isArray(e.data)||e.data.length||e.hasNext!==!1)&&i("Cancel every working order and confirm cancellation before revoking a Meridian signer.")}}return h}var oe="Oak cannot place Meridian perps orders or initiate withdrawals; use Meridian's supported interface for those. Oak can only finalize a withdrawal that was already initiated there.",Ne=t=>{let a=new Map;async function s(){(t.network==="testnet"||await t.clientFor(f).getChainId()!==f)&&i("Meridian perps requires the mainnet RPC on chain 4663.")}async function b(r,e,n){if(te(r,e),B(r,e,n,"0",Math.floor(Date.now()/1e3)),e.continuation!==void 0){let w=g(e.continuation),E=typeof w.requestId=="string"?a.get(w.requestId):void 0;(!E||!I(E.round.wallet,n)||!H(E.round,w)||!H(E.args,Object.fromEntries(Object.entries(e).filter(([x])=>!["continuation","signature"].includes(x)))))&&i("Meridian perps continuation is lost, expired or belongs to different arguments. Check history before starting again.");let j=g(w.request);ie(`meridian_perps_${r}`,e,n,[{kind:"typedData",request:j}],w,void 0,Math.floor(Date.now()/1e3)),(typeof e.signature!="string"||!/^0x[0-9a-fA-F]{130}$/.test(e.signature))&&i("The local Meridian perps signature is missing."),clearTimeout(E.timer),a.delete(w.requestId),I(await fe({...j,signature:e.signature}),n)||i("The Meridian perps signature does not match this wallet."),await s();let pe=await R(t);H(X(B(r,e,n,String(w.nonce),Number(w.signedAt)),pe),j)||i("Meridian perps signing configuration changed; start again after checking history.");let P=B(r,e,n,String(w.nonce),Number(w.signedAt)),Q=P.path,U={};if(P.method==="GET"){Object.assign(U,{"X-Meridian-Auth":"EIP712Auth","X-Meridian-Sender":n,"X-Meridian-Signature":e.signature,"X-Meridian-Intent":"2","X-Meridian-SignedAt":String(w.signedAt)});let x=new URLSearchParams;e.cursor!==void 0&&((typeof e.cursor!="string"||!e.cursor||e.cursor.length>4096)&&i("Provide the returned Meridian referral cursor."),x.set("cursor",e.cursor)),e.limit!==void 0&&((typeof e.limit!="number"||!Number.isInteger(e.limit)||e.limit<1||e.limit>100)&&i("Choose a referral page limit from 1 to 100."),x.set("limit",String(e.limit))),x.size&&(Q+=`?${x}`)}else U["content-type"]="application/json";return{result:await A(t,Q,{method:P.method,headers:U,...P.method==="GET"?{}:{body:JSON.stringify({data:P.data,signature:e.signature})}}),chainId:f,summary:"Meridian API responded. This is not a fill or final withdrawal receipt. Check order, position and transfer status before a dependent action or retry."}}e.signature!==void 0&&i("A Meridian perps signature requires an active local signing round."),a.size>=1e3&&i("Too many pending Meridian perps signing rounds. Try again shortly."),await s();let p=await R(t),o=g(await A(t,"/v1/time")).time;(typeof o!="number"||!Number.isSafeInteger(o)||Math.abs(o-Date.now())>3e4)&&i("Meridian perps server time differs from the local clock; synchronize the clock before signing.");let d=Math.floor(o/1e3),y=(BigInt(o)*1000000n+BigInt(le(1e6))).toString(),c=B(r,e,n,y,d),q=await me(t,r,e,n,c.data),T=X(c,p),_=he(),J={stage:"perps_sign",requestId:_,chainId:f,wallet:n,expiresAt:d+90,signedAt:d,nonce:y,request:T,signatureTypes:{[c.primaryType]:p[c.primaryType]},data:c.data,path:c.path,method:c.method,review:q},K=setTimeout(()=>a.delete(_),9e4);return K.unref?.(),a.set(_,{args:structuredClone(e),round:structuredClone(J),timer:K}),{steps:[{kind:"typedData",request:T}],continuation:J,summary:"Review every Meridian perps field and sign locally. Amounts and prices in the typed message use D9 base units (9 decimals). An API acceptance is not an executed trade. No gasless signature simulates future sequencer execution."}}function l(r,e,n,p,o){return{name:r,inputSchema:{type:"object",properties:e,required:n,additionalProperties:!1,description:p},execute:async(d,y)=>{try{return g(d),S(y),(Object.keys(d).some(c=>!Object.hasOwn(e,c))||n.some(c=>d[c]===void 0))&&i("Provide the required Meridian perps tool inputs only."),await o(d,y)}catch(c){throw new Y(t.plainError(c))}}}}let h={...ue,continuation:{type:"object"},signature:{type:"string"},type:{type:"string",enum:["LIMIT","MARKET"]},side:{type:"integer",enum:[0,1]},onchainId:{type:"integer",minimum:1,maximum:4294967295},quantity:M("D9 product quantity base units (9 decimals); 0 only for a full close."),price:M("D9 limit price base units (9 decimals)."),stopPrice:M("D9 trigger price base units (9 decimals)."),amount:M("D9 amount base units (9 decimals)."),timeInForce:{type:"string",enum:["GTD","IOC","FOK"]},postOnly:{type:"boolean"},reduceOnly:{type:"boolean"},close:{type:"boolean"},clientOrderId:{type:"string"},stopType:{type:"integer",enum:[0,1]},expiresAt:M("Unix seconds order expiry."),groupId:O,groupContingencyType:{type:"integer",enum:[0,1]},all:{type:"boolean"},orderIds:{type:"array",items:O,maxItems:200},clientOrderIds:{type:"array",items:{type:"string"},maxItems:200},token:N,tokenId:O,fromToken:N,toToken:N,mode:{type:"string"},signer:N,code:{type:"string"},cursor:{type:"string"},limit:{type:"integer",minimum:1,maximum:100}},m={order:["subaccountId","type","side","onchainId","quantity"],cancel:["subaccountId"],withdraw:["subaccountId","token","tokenId","amount"],convert:["subaccountId","fromToken","toToken","amount"],signer:["mode"],referral:["mode"]},u=ee.map(r=>l(`meridian_perps_${r}`,Object.fromEntries([...re[r],"subaccount","subaccountId","continuation","signature"].map(e=>[e,h[e]])),m[r],`Prepare and locally sign a Meridian perps ${r}. Internal continuation only; never supply a signature manually. Requires the perps bridge integration.`,(e,n)=>b(r,e,n)));return u.unshift(l("meridian_perps_read",{resource:{type:"string",enum:Object.keys($),description:"Official mainnet public GET route. Includes products, accounts, balances, orders, fills, risk, transfers, signers, points and configuration."},params:{type:"object",description:"Exact documented query/path parameters; API decimals are returned verbatim, while Oak action inputs use base-unit strings."}},[],"Omit resource to discover every parameter schema locally. Otherwise read one official Meridian perps API page. Use nextCursor while hasNext is true.",(r,e)=>be(t,r,e))),u.push(ne(t,(r,e,n,p)=>me(t,r,e,n,p))),u.push(l("meridian_perps_deposit",{subaccount:de,tokenId:O,amount:M("Deposit token native base units; use erc20Decimals from token metadata."),referralCode:{type:"string",pattern:"^0x[0-9a-fA-F]{64}$"}},["tokenId","amount"],`Preview an exact ERC-20 approval and exchange deposit. First deposit registers the subaccount. ${oe}`,async(r,e)=>{await s(),await R(t);let n=await W(t,r.tokenId),p=S(n.address);(n.depositEnabled!==!0||typeof n.erc20Decimals!="number"||!Number.isInteger(n.erc20Decimals)||n.erc20Decimals<0||n.erc20Decimals>36||typeof n.erc20Symbol!="string")&&i("The Meridian perps token is not enabled for ERC-20 deposits.");let o=C(r.amount,"the deposit amount",!0);Z(o,n.erc20Decimals)<v(n.minDeposit)&&i(`Meridian perps deposit is below the current minimum ${n.minDeposit} ${n.erc20Symbol}.`);let d=t.clientFor(f),[y,c]=await Promise.all([d.readContract({address:p,abi:se,functionName:"balanceOf",args:[e]}),d.readContract({address:p,abi:se,functionName:"decimals"})]);(c!==n.erc20Decimals||y<BigInt(o))&&i("Meridian perps deposit token decimals or wallet balance do not match the requested deposit.");let q=[t.approval(p,z,o,f),t.unsignedTx({to:z,chainId:f,value:"0",data:ae({abi:L,functionName:"deposit",args:[F(r.subaccount),p,BigInt(o),r.referralCode===void 0?ge:G(r.referralCode)]}),description:`Deposit ${o} ${n.erc20Symbol} base units (${c} decimals) into Meridian perps.`})],T=await t.preview(q,e);return{txs:q,preview:T,token:{address:p,decimals:c,symbol:n.erc20Symbol,chainId:f},depositFee:n.depositFee,summary:`${T.summary} Approve exactly ${o} token base units and deposit. Sequencer registration and available margin must be checked separately. ${oe}`}})),u.push(l("meridian_perps_finalize",{...ue,withdrawDigest:{type:"string",pattern:"^0x[0-9a-fA-F]{64}$"}},["subaccountId","withdrawDigest"],"Preview same-chain withdrawal finalization for this owner after on-chain initiation. API acceptance alone does not permit finalization.",async(r,e)=>{await s(),await R(t);let n=await V(t,r.subaccountId,e,F(r.subaccount)),p=G(r.withdrawDigest),o=(await D(t,`/v1/token/withdraw?subaccountId=${k(n.id)}&order=desc`)).filter(q=>I(q.withdrawDigest,p));o.length!==1&&i("The withdrawal digest is not uniquely present in this subaccount history. Reconcile the request before retrying.");let d=o[0];(!I(d.subaccount,n.name)||d.finalizedBlockNumber!==void 0||typeof d.initiatedBlockNumber!="string"||d.lzDestinationEid!==0||!I(d.lzDestinationAddress,qe(e)))&&i("The withdrawal is not an initiated, unfinalized same-chain withdrawal to this wallet.");let y=[t.unsignedTx({to:z,chainId:f,value:"0",data:ae({abi:L,functionName:"finalizeWithdraw",args:[e,p]}),description:"Finalize the pending Meridian perps withdrawal to this wallet."})],c=await t.preview(y,e);return c.changes.some(q=>I(q.token.address,d.token)&&q.token.chainId===f&&BigInt(q.amount)>0n)||i("Meridian perps finalization preview did not show the token payout to this wallet."),{txs:y,preview:c,summary:`${c.summary} Finalize the same-chain withdrawal. Check the mined receipt and wallet balance; do not submit a digest twice.`}})),{tools:u,positions:async r=>{t.network==="testnet"&&i("Meridian perps positions require mainnet."),S(r);let e=await D(t,`/v1/subaccount?sender=${r}&order=asc`),n=[],p=new Set;for(let o of e){I(o.account,r)||i("Meridian perps returned another owner in the subaccount listing.");let d=k(o.id);for(let y of await D(t,`/v1/position?subaccountId=${d}&open=true`)){let c=v(y.size);if(c===0n)continue;let q=`perps:${d}:${k(y.id)}`,T=k(y.productId);(p.has(q)||y.side!==0&&y.side!==1)&&i("Meridian perps returned a repeated or invalid position."),p.add(q),n.push({module:"meridian",id:q,chainId:f,assets:[],description:`Meridian perps ${y.side===0?"long":"short"} product ${T}: ${c} D9 quantity base units (9 decimals), subaccount ${d}. Derivatives exposure; inspect perps account balances, funding and position fees separately.`})}}return n}}};export{be as a,oe as b,Ne as c};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as b,h as v,l as I,n as k,r as S}from"./
|
|
1
|
+
import{d as b,h as v,l as I,n as k,r as S}from"./N4Q6GN65.js";import{a as T}from"./X5V2Z2NM.js";import{e as c,g as y}from"./NWNYJ26T.js";import{a as i}from"./XSD5NL7J.js";import{a as l}from"./JXOEJPJ4.js";import{lookup as C}from"node:dns/promises";import{isIP as p}from"node:net";var N="/.well-known/agent-registration.json",P=262144;function R(n){let r=/^::ffff:(\d+\.\d+\.\d+\.\d+)$/i.exec(n);if(r)return R(r[1]);if(p(n)===4){let[e,t]=n.split(".").map(Number);return!(e===0||e===10||e===127||e>=224||e===100&&t>=64&&t<=127||e===169&&t===254||e===172&&t>=16&&t<=31||e===192&&t===168||e===192&&t===0||e===198&&(t===18||t===19))}if(p(n)===6){let e=n.toLowerCase();return!(e==="::"||e==="::1"||/^f[cd]/.test(e)||/^fe[89ab]/.test(e)||e.startsWith("ff")||e.startsWith("2001:db8")||e.startsWith("64:ff9b"))}return!1}async function E(n){let r;try{r=new URL(n)}catch{throw new i("Not a valid URL.")}if(r.protocol!=="https:"||r.username||r.password||r.port||p(r.hostname.replace(/^\[|\]$/g,""))!==0||!r.hostname.includes(".")||/\.(?:local|internal|localhost|lan)$/i.test(r.hostname))throw new i("Only public HTTPS hostnames on the default port are checked.");let e=await C(r.hostname,{all:!0});if(!e.length||!e.every(t=>R(t.address)))throw new i("That hostname does not resolve to a public address.");return r.hostname}async function L(n,r){let e=await n.http(r,{method:"GET",headers:{accept:"application/json"},redirect:"error",signal:AbortSignal.timeout(8e3)});if(!e.ok)throw new i(`The server answered HTTP ${e.status}.`);if(Number(e.headers.get("content-length")??0)>P)throw new i("The file is larger than 256 KiB.");let a=await e.text();if(a.length>P)throw new i("The file is larger than 256 KiB.");try{return JSON.parse(a)}catch{throw new i("The file is not JSON.")}}function O(n,r,e){return Array.isArray(n)&&n.some(t=>c(t)&&typeof t.agentRegistry=="string"&&y(t.agentRegistry,r)&&(typeof t.agentId=="number"||typeof t.agentId=="string")&&String(t.agentId)===e.toString())}var J=n=>({tools:[{name:"erc8004_verify_domain",inputSchema:{type:"object",additionalProperties:!1,required:["agentId"],description:"Read-only, optional ERC-8004 endpoint-domain verification: for each HTTPS service endpoint in the agent's on-chain profile, fetch https://{domain}/.well-known/agent-registration.json and check it lists this registry and agent ID. Only public HTTPS names are fetched; the profile itself is read only from a data: URI.",properties:{agentId:b,endpoint:{type:"string",description:"Check only this HTTPS endpoint (must be one of the profile's services)."}}},async execute(e){try{k(n,e.chainId);let t=I(e.agentId),{chainId:a,registry:H,registryId:u}=v(n),h=await n.clientFor(a).readContract({address:H,abi:T,functionName:"tokenURI",args:[t]});if(typeof h!="string")throw new i("The registry returned an invalid URI.");let f=S(h);if(!f)return{agentId:t.toString(),verified:null,reason:"The agent profile is not a base64 data: URI, so Oak will not fetch it from an agent-controlled location. Pass the endpoint host check yourself, or update the profile to a data: URI.",uri:l(h)};let g=(Array.isArray(f.services)?f.services.filter(c):[]).map(o=>String(o.endpoint??"")).filter(o=>/^https:\/\//i.test(o)),m=e.endpoint===void 0?g:g.filter(o=>o===e.endpoint);if(e.endpoint!==void 0&&!m.length)throw new i("That endpoint is not an HTTPS service in the agent's profile.");let U=[...new Set(m.map(o=>{try{return new URL(o).hostname}catch{return""}}).filter(Boolean))].slice(0,10),s=[];for(let o of U)try{await E(`https://${o}/`);let d=await L(n,`https://${o}${N}`),A=c(d)?d.registrations:void 0,w=O(A,u,t);s.push({domain:l(o),verified:w,reason:w?"The well-known file lists this registry and agent ID.":"The well-known file does not list this registry and agent ID."})}catch(d){s.push({domain:l(o),verified:!1,reason:n.plainError(d)})}return{agentId:t.toString(),registry:u,domains:s,checked:s.length,note:s.length?"Verified means that domain publishes a file naming this agent; it proves domain control by the agent, not that the endpoint is safe.":"The profile lists no HTTPS service endpoints to verify."}}catch(t){throw new i(n.plainError(t))}}}]});export{R as a,J as b};
|