@aegis-engine/core 0.13.1 → 0.14.0
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/dist/account.js +1 -1
- package/dist/aegis-core.js +26 -26
- package/dist/contract/generated/aegis-swap.d.ts +310 -5
- package/dist/contract/generated/market-data.d.ts +310 -5
- package/dist/engine/account/activitySchemas.d.ts +1 -0
- package/dist/engine/account/discoverySchemas.d.ts +101 -0
- package/dist/engine/account/portfolioSchemas.d.ts +2 -0
- package/dist/engine/account/transactionSchemas.d.ts +1 -0
- package/dist/engine/account/transport.d.ts +6 -0
- package/dist/engine/account/types.d.ts +1 -0
- package/dist/engine/dataSource.d.ts +4 -1
- package/dist/engine/sdkDeployment.d.ts +16 -0
- package/dist/engine/types.d.ts +4 -1
- package/dist/index.d.ts +2 -0
- package/dist/sdkRuntime-CvLRgf5w.js +1593 -0
- package/dist/transactionHistory-BGpe2c7k.js +149 -0
- package/package.json +2 -2
- package/dist/sdkRuntime-CMBWjHxv.js +0 -1593
- package/dist/transactionHistory-C8KRA_tE.js +0 -149
package/dist/aegis-core.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
var
|
|
1
|
+
var qs=Object.defineProperty;var Ls=(e,t,n)=>t in e?qs(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var j=(e,t,n)=>Ls(e,typeof t!="symbol"?t+"":t,n);import{getAddress as D,encodeAbiParameters as xe,keccak256 as xo,zeroAddress as ie,encodeFunctionData as De,decodeFunctionData as ln,http as Fs,createPublicClient as Us,custom as gt,fallback as Vs,isAddress as Mr,createWalletClient as Gt,erc20Abi as to,hashTypedData as Hs,size as Ws,BaseError as $s,ContractFunctionRevertedError as Ks,ContractFunctionZeroDataError as zs,decodeAbiParameters as nn,multicall3Abi as Ia,decodeFunctionResult as no,formatUnits as oo,ExecutionRevertedError as Ea,RpcRequestError as Aa,HttpRequestError as Gs,TimeoutError as js,toHex as Qs}from"viem";import{N as vn,I as Y,U as N,J as b,K as Xs,L as lt,M as Ht,O as z,s as C,Q as To,R as me,S as q,n as k,T as Ro,V as Ys,W as Js,X as Zs,Y as Ae,Z as ne,o as x,_ as ec,d as $e,$ as Pe,a0 as V,l as B,a1 as _r,e as Te,b as jt,c as Po,a2 as tc,a3 as nc,a4 as Ke,a5 as mn,a6 as ut,a7 as oe,a8 as ga,E as oc,a9 as ac,aa as Oe,t as rc,ab as ic,ac as Bo,ad as Nr,ae as sc,af as Mo,ag as cc,A as Sa,ah as et,ai as ao}from"./transactionHistory-BGpe2c7k.js";import{aj as r0,ak as i0,al as s0,am as c0,an as l0,ao as u0,ap as d0,aq as m0,ar as p0,as as f0,at as h0,au as w0,av as b0,aw as k0,ax as v0,ay as y0,az as I0,aA as E0,aB as A0,aC as g0,aD as S0,aE as C0,aF as x0,aG as T0,aH as R0,aI as P0,aJ as B0,aK as M0,aL as _0,aM as N0,aN as D0,aO as O0,aP as q0,aQ as L0,g as F0,h as U0,j as V0,k as H0,m as W0,a as $0,p as K0,f as z0,P as G0,aR as j0,q as Q0,u as X0,v as Y0,x as J0,y as Z0,z as ew,B as tw,C as nw,aS as ow,aT as aw,D as rw,aU as iw,aV as sw,F as cw,G as lw,H as uw}from"./transactionHistory-BGpe2c7k.js";import{bsc as Dr,ink as Or,mainnet as qr,base as lc,unichain as uc}from"viem/chains";const ee=1,fe=56,be=57073,ro=D("0x00581261a1200956ea05d1810fF28ffd66D8E254"),Lr=D("0xe2820f3DA0abC9C65B3727A7103E3F59c00D686E"),Fr=D("0xe2820f3DA0abC9C65B3727A7103E3F59c00D686E"),Ur={[ee]:[ro],[fe]:[Lr],[be]:[Fr],130:[D("0x9641682f95bad3305c18c549a483f413d23dc72e")],8453:[ro]},Nf=D("0x8f29BD5c8429730fA4C46e6295c4e679eDEdd0cC"),Df=D("0xe449E013004DB4a5681E9622ca10c5Ba0eA610cc"),Of=D("0xe449E013004DB4a5681E9622ca10c5Ba0eA610cc"),qf=8388608,_o=50,yn=D("0x8ea2C7de60ef1Cd4dcE64ea2DDDe2f99F0127eFC"),Vr=["https://ethereum-rpc.publicnode.com","https://eth-mainnet.public.blastapi.io","https://mainnet.gateway.tenderly.co","https://eth.drpc.org"],Hr=["https://bsc-dataseed-public.bnbchain.org","https://bsc-rpc.publicnode.com"],dc=["https://rpc-gel.inkonchain.com","https://rpc-qnd.inkonchain.com"],No="https://aegis.markets/graphql/meta",mc=50,io=yn,pc=D("0x6131B5fae19EA4f9D964eAc0408E4408b66337b5"),Wr=[ee,fe,130,8453];function pt(e){return e?D(e):void 0;}function Ce(e){if(!e.permit2||!e.quoter)throw new Error("Missing Permit2 or V4 Quoter contract address.");return{permit2:D(e.permit2),quoter:D(e.quoter),poolManager:pt(e.poolManager),positionDescriptor:pt(e.positionDescriptor),positionManager:pt(e.positionManager),stateView:pt(e.stateView),universalRouter:pt(e.universalRouter),universalRouterV2_1_1:pt(e.universalRouterV2_1_1)};}const Re={1:Ce({poolManager:"0x000000000004444c5dc75cB358380D2e3dE08A90",positionDescriptor:"0xd1428ba554f4c8450b763a0b2040a4935c63f06c",positionManager:"0xbd216513d74c8cf14cf4747e6aaa6420ff64ee9e",quoter:"0x52f0e24d1c21c8a0cb1e5a5dd6198556bd9e1203",stateView:"0x7ffe42c4a5deea5b0fec41c94c136cf115597227",universalRouter:"0x66a9893cc07d91d95644aedd05d03f95e1dba8af",universalRouterV2_1_1:"0x4c82d1fbfe28c977cbb58d8c7ff8fcf9f70a2cca",permit2:"0x000000000022D473030F116dDEE9F6B43aC78BA3"}),56:Ce({poolManager:"0x28e2Ea090877bF75740558f6BFB36A5ffeE9e9dF",positionManager:"0x7A4a5c919aE2541AeD11041A1AEeE68f1287f95b",quoter:"0x9F75dD27D6664c475B90e105573E550ff69437B0",stateView:"0xd13Dd3D6E93f276FAfc9Db9E6BB47C1180aeE0c4",permit2:"0x000000000022D473030F116dDEE9F6B43aC78BA3"}),10:Ce({poolManager:"0x9a13f98cb987694c9f086b1f5eb990eea8264ec3",positionDescriptor:"0xedd81496169c46df161b8513a52ffecaaaa66743",positionManager:"0x3c3ea4b57a46241e54610e5f022e5c45859a1017",quoter:"0x1f3131a13296fb91c90870043742c3cdbff1a8d7",stateView:"0xc18a3169788f4f75a170290584eca6395c75ecdb",universalRouter:"0x851116d9223fabed8e56c0e6b8ad0c31d98b3507",universalRouterV2_1_1:"0x8b844f885672f333bc0042cb669255f93a4c1e6b",permit2:"0x000000000022D473030F116dDEE9F6B43aC78BA3"}),130:Ce({poolManager:"0x1f98400000000000000000000000000000000004",positionDescriptor:"0x9fb28449a191cd8c03a1b7abfb0f5996ecf7f722",positionManager:"0x4529a01c7a0410167c5740c487a8de60232617bf",quoter:"0x333e3c607b141b18ff6de9f258db6e77fe7491e0",stateView:"0x86e8631a016f9068c3f085faf484ee3f5fdee8f2",universalRouter:"0xef740bf23acae26f6492b10de645d6b98dc8eaf3",universalRouterV2_1_1:"0xfdf682f51fe81aa4898f0ae2163d8a55c127fbc7",permit2:"0x000000000022D473030F116dDEE9F6B43aC78BA3"}),4663:Ce({poolManager:"0x8366a39CC670B4001A1121B8F6A443A643e40951",positionManager:"0x58daec3116aae6D93017bAAea7749052E8a04fA7",quoter:"0x8dc178efb8111bb0973dd9d722ebeff267c98f94",stateView:"0xf3334192d15450cdd385c8b70e03f9a6bd9e673b",permit2:"0x000000000022D473030F116dDEE9F6B43aC78BA3"}),57073:Ce({poolManager:"0x360E68faCcca8cA495c1B759Fd9EEe466db9FB32",positionManager:"0x1b35d13a2E2528f192637F14B05f0Dc0e7dEB566",quoter:"0x3972c00f7ed4885e145823eb7c655375d275a1c5",stateView:"0x76fd297e2d437cd7f76d50f01afe6160f86e9990",permit2:"0x000000000022D473030F116dDEE9F6B43aC78BA3"}),137:Ce({poolManager:"0x67366782805870060151383f4bbff9dab53e5cd6",positionDescriptor:"0x0892771f0c1b78ad6013d6e5536007e1c16e6794",positionManager:"0x1ec2ebf4f37e7363fdfe3551602425af0b3ceef9",quoter:"0xb3d5c3dfc3a7aebff71895a7191796bffc2c81b9",stateView:"0x5ea1bd7974c8a611cbab0bdcafcb1d9cc9b3ba5a",universalRouter:"0x1095692a6237d83c6a72f3f5efedb9a670c49223",universalRouterV2_1_1:"0x8b844f885672f333bc0042cb669255f93a4c1e6b",permit2:"0x000000000022D473030F116dDEE9F6B43aC78BA3"}),8453:Ce({poolManager:"0x498581ff718922c3f8e6a244956af099b2652b2b",positionDescriptor:"0x25d093633990dc94bedeed76c8f3cdaa75f3e7d5",positionManager:"0x7c5f5a4bbd8fd63184577525326123b519429bdc",quoter:"0x0d5e0f971ed27fbff6c2837bf31316121532048d",stateView:"0xa3c0c9b65bad0b08107aa264b0f3db444b867a71",universalRouter:"0x6ff5693b99212da76ad316178a184ab56d299b43",universalRouterV2_1_1:"0xfdf682f51fe81aa4898f0ae2163d8a55c127fbc7",permit2:"0x000000000022D473030F116dDEE9F6B43aC78BA3"}),42161:Ce({poolManager:"0x360e68faccca8ca495c1b759fd9eee466db9fb32",positionDescriptor:"0xe2023f3fa515cf070e07fd9d51c1d236e07843f4",positionManager:"0xd88f38f930b7952f2db2432cb002e7abbf3dd869",quoter:"0x3972c00f7ed4885e145823eb7c655375d275a1c5",stateView:"0x76fd297e2d437cd7f76d50f01afe6160f86e9990",universalRouter:"0xa51afafe0263b40edaef0df8781ea9aa03e381a3",universalRouterV2_1_1:"0x8b844f885672f333bc0042cb669255f93a4c1e6b",permit2:"0x000000000022D473030F116dDEE9F6B43aC78BA3"})},Do=Re[ee],so=Do.permit2,fc=Do.quoter;function Oo(e,t){var n;return((n=t.explorerTxUrl)==null?void 0:n.call(t,e))??"#";}const hc={chainId:ee,chain:qr,name:"Ethereum",router:ro,permit2:so,quoter:fc,v4Contracts:Do,rpcUrls:Vr,explorerTxUrl:e=>`https://etherscan.io/tx/${e}`,poolExplorerUrl:e=>`https://app.uniswap.org/explore/pools/ethereum/${e}`,metadataEndpoint:No,fee:{bps:_o,recipient:yn}},wc={chainId:fe,chain:Dr,name:"BNB Smart Chain",router:Lr,permit2:Re[fe].permit2,quoter:Re[fe].quoter,v4Contracts:Re[fe],rpcUrls:Hr,explorerTxUrl:e=>`https://bscscan.com/tx/${e}`,poolExplorerUrl:e=>`https://app.uniswap.org/explore/pools/bnb/${e}`,metadataEndpoint:No,fee:{bps:_o,recipient:yn}},bc={chainId:be,chain:Or,name:"Ink",router:Fr,permit2:Re[be].permit2,quoter:Re[be].quoter,v4Contracts:Re[be],rpcUrls:dc,explorerTxUrl:e=>`https://explorer.inkonchain.com/tx/${e}`,metadataEndpoint:No,fee:{bps:_o,recipient:yn}},In={[ee]:hc,[fe]:wc,[be]:bc};function kc(e,t){var o,a;const n=Re[e.chainId];return{...n,...(t==null?void 0:t.v4Contracts),...e.v4Contracts,permit2:((o=e.v4Contracts)==null?void 0:o.permit2)??e.permit2??(t==null?void 0:t.permit2)??(n==null?void 0:n.permit2),quoter:((a=e.v4Contracts)==null?void 0:a.quoter)??e.quoter??(t==null?void 0:t.quoter)??(n==null?void 0:n.quoter)};}function $r(e,t){var a;const n=kc(e,t);if(!t&&(!e.chain||!e.router||!((a=e.rpcUrls)!=null&&a.length)))throw new Error(`Missing viem chain, Aegis router, or RPC URLs for chain ${e.chainId}.`);const o=Ce(n);return{chainId:e.chainId,chain:e.chain??t.chain,name:e.name??(t==null?void 0:t.name)??`Chain ${e.chainId}`,router:D(e.router??t.router),permit2:o.permit2,quoter:o.quoter,v4Contracts:o,rpcUrls:e.rpcUrls??t.rpcUrls,walletRpcUrls:e.walletRpcUrls??(t==null?void 0:t.walletRpcUrls),explorerTxUrl:e.explorerTxUrl??(t==null?void 0:t.explorerTxUrl),poolExplorerUrl:e.poolExplorerUrl??(t==null?void 0:t.poolExplorerUrl),metadataEndpoint:e.metadataEndpoint??(t==null?void 0:t.metadataEndpoint),// Fee stays Aegis-controlled: it is never read from host input, only inherited from
|
|
2
2
|
// the bundled base chain config (e.g. mainnet keeps its 50 bps fee).
|
|
3
|
-
fee:t==null?void 0:t.fee};}function
|
|
3
|
+
fee:t==null?void 0:t.fee};}function Lf(e){const t={...In};if(!e)return t;for(const[n,o]of Object.entries(e)){if(!o)continue;const a=o.chainId??Number(n);t[a]=$r({...o,chainId:a},t[a]);}return t;}const bt={USDC:{chainId:ee,address:D("0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"),name:"USD Coin",symbol:"USDC",decimals:6},WATER:{chainId:ee,address:D("0x828B22c9ea1c20B551EeFC6198174C4bb7a8CBF6"),name:"WATER",symbol:"WATER",decimals:18},WOOD:{chainId:ee,address:D("0x670AfdD7226e73d3CC55B5cd83933E46aF22DECd"),name:"WOOD",symbol:"WOOD",decimals:18},GRASS:{chainId:ee,address:D("0xF06Ad052b0d8D511D0B6f00100b8e402639209EF"),name:"GRASS",symbol:"GRASS",decimals:18},STONE:{chainId:ee,address:D("0xCabcc33D9Ff7e24F413d939773D232C0d50dCc7f"),name:"STONE",symbol:"STONE",decimals:18,// STONE's ichi asset is logo_256_stone_2.svg, not the symbol-derived
|
|
4
4
|
// logo_256_stone.svg that getIchiIconGuess('STONE') produces. Pin it so the
|
|
5
5
|
// mark stays correct even when the metadata service is unreachable.
|
|
6
|
-
iconUrl:"https://ichi-images.s3.us-east-1.amazonaws.com/tokens/logo_256_stone_2.svg"}},Lf={BNB:{chainId:he,address:"0x0000000000000000000000000000000000000000",name:"BNB",symbol:"BNB",decimals:18},BNCB:{chainId:he,address:N("0x4902C5ebc598265Ed2212b559B042De8a5Eeec3f"),name:"CEA Industries",symbol:"BNCB",decimals:18},QQQB:{chainId:he,address:N("0x205812CdBed920aFf76C6580abD681a46D11efc7"),name:"Invesco QQQ",symbol:"QQQB",decimals:18},NVDAB:{chainId:he,address:N("0x02Fca66C1D1aFB4E2A7884261eB00F63598a7436"),name:"NVIDIA",symbol:"NVDAB",decimals:18},USDC:{chainId:he,address:N("0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d"),name:"USD Coin",symbol:"USDC",decimals:18}},Uf={USDT0:{chainId:ke,address:N("0x0200C29006150606B650577BBE7B6248F58470c1"),name:"USD₮0",symbol:"USD₮0",decimals:6},USDC:{chainId:ke,address:N("0x2D270e6886d130D724215A266106e6832161EAEd"),name:"USDC",symbol:"USDC",decimals:6},USDG:{chainId:ke,address:N("0xe343167631d89B6Ffc58B88d6b7fB0228795491D"),name:"Global Dollar",symbol:"USDG",decimals:6}},Do={USDC:bt.USDC,USDT:{chainId:Z,address:N("0xdAC17F958D2ee523a2206206994597C13D831ec7"),name:"Tether USD",symbol:"USDT",decimals:6,requiresApprovalReset:!0},WETH:{chainId:Z,address:N("0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"),name:"Wrapped Ether",symbol:"WETH",decimals:18},ETH:{chainId:Z,address:kn,name:"Ether",symbol:"ETH",decimals:18},WBTC:{chainId:Z,address:N("0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599"),name:"Wrapped Bitcoin",symbol:"WBTC",decimals:8},STETH:{chainId:Z,address:N("0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84"),name:"Lido Staked Ether",symbol:"stETH",decimals:18}},pc={USDC:bt.USDC,ETH:Do.ETH,WATER:bt.WATER,WOOD:bt.WOOD,GRASS:bt.GRASS,STONE:bt.STONE},fc=Object.values(Do),hc=Object.values(pc),Vf={default:fc,wolfgame:hc},$f=Do,Et=[{type:"function",name:"execute",stateMutability:"payable",inputs:[{name:"batches",type:"tuple[]",components:[{name:"requiresV4Unlock",type:"bool"},{name:"actions",type:"bytes"},{name:"params",type:"bytes[]"}]},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"multicall",stateMutability:"payable",inputs:[{name:"data",type:"bytes[]"}],outputs:[{name:"results",type:"bytes[]"}]},{type:"function",name:"permitBatch",stateMutability:"payable",inputs:[{name:"owner",type:"address"},{name:"permitBatch",type:"tuple",components:[{name:"details",type:"tuple[]",components:[{name:"token",type:"address"},{name:"amount",type:"uint160"},{name:"expiration",type:"uint48"},{name:"nonce",type:"uint48"}]},{name:"spender",type:"address"},{name:"sigDeadline",type:"uint256"}]},{name:"signature",type:"bytes"}],outputs:[]}],Ur=[{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"spender",type:"address"},{name:"amount",type:"uint160"},{name:"expiration",type:"uint48"}],outputs:[]},{type:"function",name:"allowance",stateMutability:"view",inputs:[{name:"owner",type:"address"},{name:"token",type:"address"},{name:"spender",type:"address"}],outputs:[{name:"amount",type:"uint160"},{name:"expiration",type:"uint48"},{name:"nonce",type:"uint48"}]}],Vr=[{name:"intermediateCurrency",type:"address"},{name:"fee",type:"uint24"},{name:"tickSpacing",type:"int24"},{name:"hooks",type:"address"},{name:"hookData",type:"bytes"}],mn=[{type:"function",name:"quoteExactInputSingle",stateMutability:"nonpayable",inputs:[{name:"params",type:"tuple",components:[{name:"poolKey",type:"tuple",components:[{name:"currency0",type:"address"},{name:"currency1",type:"address"},{name:"fee",type:"uint24"},{name:"tickSpacing",type:"int24"},{name:"hooks",type:"address"}]},{name:"zeroForOne",type:"bool"},{name:"exactAmount",type:"uint128"},{name:"hookData",type:"bytes"}]}],outputs:[{name:"amountOut",type:"uint256"},{name:"gasEstimate",type:"uint256"}]},{type:"function",name:"quoteExactOutputSingle",stateMutability:"nonpayable",inputs:[{name:"params",type:"tuple",components:[{name:"poolKey",type:"tuple",components:[{name:"currency0",type:"address"},{name:"currency1",type:"address"},{name:"fee",type:"uint24"},{name:"tickSpacing",type:"int24"},{name:"hooks",type:"address"}]},{name:"zeroForOne",type:"bool"},{name:"exactAmount",type:"uint128"},{name:"hookData",type:"bytes"}]}],outputs:[{name:"amountIn",type:"uint256"},{name:"gasEstimate",type:"uint256"}]},{type:"function",name:"quoteExactInput",stateMutability:"nonpayable",inputs:[{name:"params",type:"tuple",components:[{name:"exactCurrency",type:"address"},{name:"path",type:"tuple[]",components:Vr},{name:"exactAmount",type:"uint128"}]}],outputs:[{name:"amountOut",type:"uint256"},{name:"gasEstimate",type:"uint256"}]}],ao=0n,wc=2n**128n-1n,de={SWAP_EXACT_IN_SINGLE:6,SWAP_EXACT_IN:7,SWAP_EXACT_OUT_SINGLE:8,SETTLE:11,TAKE:14,TAKE_PORTION:16,SWEEP:20},$r={name:"poolKey",type:"tuple",components:[{name:"currency0",type:"address"},{name:"currency1",type:"address"},{name:"fee",type:"uint24"},{name:"tickSpacing",type:"int24"},{name:"hooks",type:"address"}]},bc=[{name:"params",type:"tuple",components:[$r,{name:"zeroForOne",type:"bool"},{name:"amountIn",type:"uint128"},{name:"amountOutMinimum",type:"uint128"},{name:"hookData",type:"bytes"}]}],kc=[{name:"params",type:"tuple",components:[$r,{name:"zeroForOne",type:"bool"},{name:"amountOut",type:"uint128"},{name:"amountInMaximum",type:"uint128"},{name:"hookData",type:"bytes"}]}],Hr=[{name:"params",type:"tuple",components:[{name:"currencyIn",type:"address"},{name:"path",type:"tuple[]",components:Vr},{name:"amountIn",type:"uint128"},{name:"amountOutMinimum",type:"uint128"}]}],Wr=[{name:"currency",type:"address"},{name:"amount",type:"uint256"},{name:"payerIsUser",type:"bool"}],pn=[{name:"currency",type:"address"},{name:"recipient",type:"address"},{name:"amount",type:"uint256"}],Kr=[{name:"currency",type:"address"},{name:"recipient",type:"address"},{name:"bips",type:"uint256"}],vc=[{name:"currency",type:"address"},{name:"recipient",type:"address"}];function Ec(e){return`0x${e.map(t=>t.toString(16).padStart(2,"0")).join("")}`;}function yc(e,t){return{requiresV4Unlock:!0,actions:Ec(e),params:t};}function Ic(e,t){return Ne({abi:Et,functionName:"execute",args:[e,t]});}function Ac(e){return Ne({abi:Et,functionName:"permitBatch",args:[e.owner,e.permitBatch,e.signature]});}function gc(e){return Ne({abi:Et,functionName:"multicall",args:[e]});}function zr(e){if(!e)return!1;if("bips"in e){if(!Number.isInteger(e.bips)||e.bips<0||e.bips>1e4)throw new Error("Fee portion must be an integer between 0 and 10000 bips.");return e.bips>0;}if(e.amount<0n)throw new Error("Swap output fee cannot be negative.");return e.amount>0n;}function Sc(e,t){return"bips"in e?{action:de.TAKE_PORTION,params:xe(Kr,[t,e.recipient,BigInt(e.bips)])}:{action:de.TAKE,params:xe(pn,[t,e.recipient,e.amount])};}function st(e,t="Amount"){if(e<0n||e>wc)throw new Error(`${t} is too large for a single V4 swap.`);}function Cc(e,t){return t?gc([Ac(t),e]):e;}function je(e){return go(xe([{name:"currency0",type:"address"},{name:"currency1",type:"address"},{name:"fee",type:"uint24"},{name:"tickSpacing",type:"int24"},{name:"hooks",type:"address"}],[e.currency0,e.currency1,e.fee,e.tickSpacing,e.hooks]));}function _o(e){const{currencyIn:t,currencyOut:n}=e,o=zr(e.fee)?e.fee:null,a=o?Sc(o,n):null,r=t.toLowerCase()===ie,i=r&&e.refundNative,s=yc([e.swapAction,de.SETTLE,...(a?[a.action]:[]),de.TAKE,...(e.amountOutNet!==void 0?[de.TAKE]:[]),...(i?[de.SWEEP]:[])],[e.encodedSwapParams,xe(Wr,[t,e.settleAmount,!0]),...(a?[a.params]:[]),xe(pn,[n,e.recipient,e.amountOutNet??ao]),...(e.amountOutNet!==void 0?[xe(pn,[n,e.recipient,ao])]:[]),...(i?[xe(vc,[t,e.recipient])]:[])]);return{calldata:Cc(Ic([s],e.deadline),e.permit),value:r?e.nativeValue:0n};}function Gr(e,t){return t?{currencyIn:e.currency0,currencyOut:e.currency1}:{currencyIn:e.currency1,currencyOut:e.currency0};}function jr(e){return e.map(({poolKey:t,currencyOut:n})=>({intermediateCurrency:n,fee:t.fee,tickSpacing:t.tickSpacing,hooks:t.hooks,hookData:"0x"}));}function xc(e){if(st(e.amountIn,"Swap input amount"),st(e.amountOutMinimum,"Swap minimum output"),e.path.length<1||e.path.length>3||e.amountOutNetMinimum<=0n)throw new Error("A routed swap needs one to three hops and a positive minimum output.");return _o({swapAction:de.SWAP_EXACT_IN,encodedSwapParams:xe(Hr,[{currencyIn:e.currencyIn,path:jr(e.path),amountIn:e.amountIn,amountOutMinimum:e.amountOutMinimum}]),currencyIn:e.currencyIn,currencyOut:e.path.at(-1).currencyOut,settleAmount:e.amountIn,recipient:e.recipient,deadline:e.deadline,permit:e.permit,fee:e.fee,nativeValue:e.amountIn,refundNative:!1,amountOutNet:e.amountOutNetMinimum});}function Tc(e){return st(e.amountIn,"Swap input amount"),st(e.amountOutMinimum,"Swap minimum output"),_o({swapAction:de.SWAP_EXACT_IN_SINGLE,encodedSwapParams:xe(bc,[{poolKey:e.poolKey,zeroForOne:e.zeroForOne,amountIn:e.amountIn,amountOutMinimum:e.amountOutMinimum,hookData:"0x"}]),...Gr(e.poolKey,e.zeroForOne),settleAmount:e.amountIn,recipient:e.recipient,deadline:e.deadline,permit:e.permit,fee:e.fee,nativeValue:e.amountIn,refundNative:!1});}function Rc(e){st(e.amountOut,"Swap output amount"),st(e.amountInMaximum,"Swap maximum input");const t=zr(e.fee)?e.fee:null,n=t?"amount"in t?t.amount:e.amountOut*BigInt(t.bips)/10000n:0n,o=e.amountOut-n;if(o<=0n||e.amountOutNet!==void 0&&e.amountOutNet!==o)throw new Error("Swap net output must be positive and match gross output minus the fee.");return _o({swapAction:de.SWAP_EXACT_OUT_SINGLE,encodedSwapParams:xe(kc,[{poolKey:e.poolKey,zeroForOne:e.zeroForOne,amountOut:e.amountOut,amountInMaximum:e.amountInMaximum,hookData:"0x"}]),...Gr(e.poolKey,e.zeroForOne),settleAmount:ao,recipient:e.recipient,deadline:e.deadline,permit:e.permit,fee:t?{recipient:t.recipient,amount:n}:null,nativeValue:e.amountInMaximum,refundNative:!0,amountOutNet:o});}function ya(e){return{...e,address:N(e.address)};}function Bc(e){const t=N(e.currency0),n=N(e.currency1);if(t.toLowerCase()>=n.toLowerCase())throw new Error("Invalid pool key: currency0 must sort below currency1 (Uniswap v4 canonical ordering).");return{currency0:t,currency1:n,fee:e.fee,tickSpacing:e.tickSpacing,hooks:N(e.hooks)};}function Pc(e,t=En){const n=ya(e.token),o=ya(e.counterToken),a=e.chainId??n.chainId??o.chainId??Z,r=t[a];if(!r)throw new Error(`No Aegis swap chain config found for chain ${a}.`);if(n.chainId!==a||o.chainId!==a)throw new Error(`Pool token chain ids must match chain ${a}.`);const i=Bc(e.poolKey),s=je(i);if(e.poolId&&!ee(e.poolId,s))throw new Error("Configured pool id does not match the pool key.");return{id:e.id,chainId:a,symbol:e.symbol??n.symbol,poolId:e.poolId??s,poolKey:i,token:n,counterToken:o,router:N(e.router??r.router),permit2:N(e.permit2??r.permit2),quoter:N(e.quoter??r.quoter),label:e.label??`${o.symbol} / ${n.symbol}`};}function Hf(e,t=En){return e!=null&&e.length?Object.fromEntries(e.map(n=>{const o=Pc(n,t);return[o.id,o];})):{};}const Ia="DIRECT-MARKET-001",Mc="0x000000000022D473030F116dDEE9F6B43aC78BA3",Dc=8388608,_c={1:{router:"0x00581261a1200956ea05d1810fF28ffd66D8E254",quoter:"0x52F0E24D1c21C8A0cB1e5a5dD6198556BD9E1203"},56:{router:"0xe2820f3DA0abC9C65B3727A7103E3F59c00D686E",quoter:"0x9F75dD27D6664c475B90e105573E550ff69437B0"},130:{router:"0x9641682f95bad3305c18c549a483f413d23dc72e",quoter:"0x333E3C607B141b18fF6de9f258db6e77fE7491E0"},8453:{router:"0x00581261a1200956ea05d1810fF28ffd66D8E254",quoter:"0x0d5e0F971ED27FBfF6c2837bf31316121532048D"},57073:{router:"0xe2820f3DA0abC9C65B3727A7103E3F59c00D686E",quoter:"0x3972C00f7ed4885e145823eb7C655375d275A1C5"}};function U(e,t,n,o,a,r,i,s){const l=_c[e];if(!l)throw new Error(`Missing trusted direct-swap contracts for chain ${e}.`);return{chainId:e,poolId:t,poolKey:{currency0:n,currency1:a,fee:Dc,tickSpacing:i,hooks:s},tokens:[{address:n,decimals:o},{address:a,decimals:r}],router:l.router,permit2:Mc,quoter:l.quoter};}const Qr=[U(1,"0xc516dba7bd70aa2dcb986bb1c27208ea29ecd097fa0ce636611e88e54ae4444d","0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",6,"0xF06Ad052b0d8D511D0B6f00100b8e402639209EF",18,30,"0x8f29BD5c8429730fA4C46e6295c4e679eDEdd0cC"),U(1,"0x0f8a98e3fdb7ea4438a3f7342f040cbc9d1eced1b90a876d38f3453100243356","0x670AfdD7226e73d3CC55B5cd83933E46aF22DECd",18,"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",6,60,"0x8f29BD5c8429730fA4C46e6295c4e679eDEdd0cC"),U(1,"0x3fa06e44e4bee9539887681eab6b608b646784e2027ea6292198cde0690aff54","0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",6,"0xCabcc33D9Ff7e24F413d939773D232C0d50dCc7f",18,60,"0x8f29BD5c8429730fA4C46e6295c4e679eDEdd0cC"),U(1,"0x34562283ce0470bd58a621a6132ff67c296723cc62890b0a394e50424e3fef3a",ie,18,"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",6,10,"0x8f29BD5c8429730fA4C46e6295c4e679eDEdd0cC"),U(1,"0x01409fc6f1bf49e20bf05df5d4dcb96ed3977ea717bc4a135e9deacd92ebc0af","0x828B22c9ea1c20B551EeFC6198174C4bb7a8CBF6",18,"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",6,60,"0x8f29BD5c8429730fA4C46e6295c4e679eDEdd0cC"),U(56,"0xd6057c3c613f4cfb085cd17efd08c30a06a08608022912c72c28b2b5636ce2bd",ie,18,"0x4902C5ebc598265Ed2212b559B042De8a5Eeec3f",18,50,"0xe449E013004DB4a5681E9622ca10c5Ba0eA610cc"),U(56,"0x1e762d241b34548efca74c52f7fd7491bf29865b40f13b58ccbf2a54d427391e",ie,18,"0x205812CdBed920aFf76C6580abD681a46D11efc7",18,10,"0xe449E013004DB4a5681E9622ca10c5Ba0eA610cc"),U(56,"0x79eda94d6c0f850d03ee0bcbd97a55d4f8bbdbe901d42db6484453ea71373bbe","0x02Fca66C1D1aFB4E2A7884261eB00F63598a7436",18,"0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",18,50,"0xe449E013004DB4a5681E9622ca10c5Ba0eA610cc"),U(130,"0x9073b65a558bdf9d0d7d0c82b468128acb847de72f5ad776bd8a4aab98781584","0x078D782b760474a361DdA0AF3839290b0EF57AD6",6,"0x83f31aF747189C2fa9E5dEb253200c505EfF6eD2",18,10,"0xA0B0D2D00Fd544D8E0887F1A3cEDD6e24BAF10cC"),U(130,"0x93a9759d15116697734921cf31000f5f6a8bb4cf163ab837071d94c8a48efd36",ie,18,"0xAaAa68F5D1F7855954ECb361d4b9ff3127Cfefa7",18,60,"0x88C9ff9fc0B22cCA42265d3F1D1c2c39E41cDaCc"),U(130,"0xa35fd8c7554f6ee88af3809067f90d383b1d45ab29b5927294859bfb49e9196d","0x078D782b760474a361DdA0AF3839290b0EF57AD6",6,"0x12e96c2BFEa6E835CF8dd38a5834fA61Cf723736",18,10,"0xA0B0D2D00Fd544D8E0887F1A3cEDD6e24BAF10cC"),U(130,"0x04a7a357a66b983d6770c1423e12ae16cb4935eac013106d0e309864b269d48e","0x078D782b760474a361DdA0AF3839290b0EF57AD6",6,"0xAaAa68F5D1F7855954ECb361d4b9ff3127Cfefa7",18,60,"0x88C9ff9fc0B22cCA42265d3F1D1c2c39E41cDaCc"),U(130,"0xe56f1855a315fe2984a401b8939e7c1c314070ea637e642acdc7ffed0d36387c","0x078D782b760474a361DdA0AF3839290b0EF57AD6",6,"0x2615A94dF961278DcbC41fB0A54fEC5f10a693aE",18,10,"0xA0B0D2D00Fd544D8E0887F1A3cEDD6e24BAF10cC"),U(130,"0x410723c1949069324d0f6013dba28829c4a0562f7c81d0f7cb79ded668691e1f",ie,18,"0x0555E30da8f98308EdB960aa94C0Db47230d2B9c",8,60,"0xA0B0D2D00Fd544D8E0887F1A3cEDD6e24BAF10cC"),U(130,"0x332924e23d3ea11964e538131c49c1fa8315fe163218fae8aeaf694ab7164913","0x0555E30da8f98308EdB960aa94C0Db47230d2B9c",8,"0x078D782b760474a361DdA0AF3839290b0EF57AD6",6,60,"0x3476b53425a786e57aA246839c1837A62fc21AcC"),U(130,"0x055ac9b9a4ed104d328a9e391b5f78f4c6dbddf8e834dd71e1b0b62c2dee2dc0","0x0555E30da8f98308EdB960aa94C0Db47230d2B9c",8,"0xAaAa68F5D1F7855954ECb361d4b9ff3127Cfefa7",18,60,"0x88C9ff9fc0B22cCA42265d3F1D1c2c39E41cDaCc"),U(130,"0xe468249c67297374eb4fee862be1143c8d5189e685469e40db9df0fc61b46e2a","0x078D782b760474a361DdA0AF3839290b0EF57AD6",6,"0x139451953EF1865C096f89C5e522c081Dc3B5F11",18,10,"0xA0B0D2D00Fd544D8E0887F1A3cEDD6e24BAF10cC"),U(8453,"0xbb8afa02662e873abf49e9b6404f79d0fce76dabe9dd67ac491d8b9985fd4cb3","0x0b3e328455c4059EEb9e3f84b5543F74E24e7E1b",18,"0x833589fCD6eDb6E08f4c7C32D4f71B54bdA02913",6,60,"0x8f29BD5c8429730fA4C46e6295c4e679eDEdd0cC"),// Ink pools verified on-chain 2026-10-12: pool ids hash from these keys and
|
|
6
|
+
iconUrl:"https://ichi-images.s3.us-east-1.amazonaws.com/tokens/logo_256_stone_2.svg"}},Ff={BNB:{chainId:fe,address:"0x0000000000000000000000000000000000000000",name:"BNB",symbol:"BNB",decimals:18},BNCB:{chainId:fe,address:D("0x4902C5ebc598265Ed2212b559B042De8a5Eeec3f"),name:"CEA Industries",symbol:"BNCB",decimals:18},QQQB:{chainId:fe,address:D("0x205812CdBed920aFf76C6580abD681a46D11efc7"),name:"Invesco QQQ",symbol:"QQQB",decimals:18},NVDAB:{chainId:fe,address:D("0x02Fca66C1D1aFB4E2A7884261eB00F63598a7436"),name:"NVIDIA",symbol:"NVDAB",decimals:18},USDC:{chainId:fe,address:D("0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d"),name:"USD Coin",symbol:"USDC",decimals:18}},Uf={USDT0:{chainId:be,address:D("0x0200C29006150606B650577BBE7B6248F58470c1"),name:"USD₮0",symbol:"USD₮0",decimals:6},USDC:{chainId:be,address:D("0x2D270e6886d130D724215A266106e6832161EAEd"),name:"USDC",symbol:"USDC",decimals:6},USDG:{chainId:be,address:D("0xe343167631d89B6Ffc58B88d6b7fB0228795491D"),name:"Global Dollar",symbol:"USDG",decimals:6}},qo={USDC:bt.USDC,USDT:{chainId:ee,address:D("0xdAC17F958D2ee523a2206206994597C13D831ec7"),name:"Tether USD",symbol:"USDT",decimals:6,requiresApprovalReset:!0},WETH:{chainId:ee,address:D("0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"),name:"Wrapped Ether",symbol:"WETH",decimals:18},ETH:{chainId:ee,address:vn,name:"Ether",symbol:"ETH",decimals:18},WBTC:{chainId:ee,address:D("0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599"),name:"Wrapped Bitcoin",symbol:"WBTC",decimals:8},STETH:{chainId:ee,address:D("0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84"),name:"Lido Staked Ether",symbol:"stETH",decimals:18}},vc={USDC:bt.USDC,ETH:qo.ETH,WATER:bt.WATER,WOOD:bt.WOOD,GRASS:bt.GRASS,STONE:bt.STONE},yc=Object.values(qo),Ic=Object.values(vc),Vf={default:yc,wolfgame:Ic},Hf=qo,yt=[{type:"function",name:"execute",stateMutability:"payable",inputs:[{name:"batches",type:"tuple[]",components:[{name:"requiresV4Unlock",type:"bool"},{name:"actions",type:"bytes"},{name:"params",type:"bytes[]"}]},{name:"deadline",type:"uint256"}],outputs:[]},{type:"function",name:"multicall",stateMutability:"payable",inputs:[{name:"data",type:"bytes[]"}],outputs:[{name:"results",type:"bytes[]"}]},{type:"function",name:"permitBatch",stateMutability:"payable",inputs:[{name:"owner",type:"address"},{name:"permitBatch",type:"tuple",components:[{name:"details",type:"tuple[]",components:[{name:"token",type:"address"},{name:"amount",type:"uint160"},{name:"expiration",type:"uint48"},{name:"nonce",type:"uint48"}]},{name:"spender",type:"address"},{name:"sigDeadline",type:"uint256"}]},{name:"signature",type:"bytes"}],outputs:[]}],Kr=[{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"spender",type:"address"},{name:"amount",type:"uint160"},{name:"expiration",type:"uint48"}],outputs:[]},{type:"function",name:"allowance",stateMutability:"view",inputs:[{name:"owner",type:"address"},{name:"token",type:"address"},{name:"spender",type:"address"}],outputs:[{name:"amount",type:"uint160"},{name:"expiration",type:"uint48"},{name:"nonce",type:"uint48"}]}],zr=[{name:"intermediateCurrency",type:"address"},{name:"fee",type:"uint24"},{name:"tickSpacing",type:"int24"},{name:"hooks",type:"address"},{name:"hookData",type:"bytes"}],pn=[{type:"function",name:"quoteExactInputSingle",stateMutability:"nonpayable",inputs:[{name:"params",type:"tuple",components:[{name:"poolKey",type:"tuple",components:[{name:"currency0",type:"address"},{name:"currency1",type:"address"},{name:"fee",type:"uint24"},{name:"tickSpacing",type:"int24"},{name:"hooks",type:"address"}]},{name:"zeroForOne",type:"bool"},{name:"exactAmount",type:"uint128"},{name:"hookData",type:"bytes"}]}],outputs:[{name:"amountOut",type:"uint256"},{name:"gasEstimate",type:"uint256"}]},{type:"function",name:"quoteExactOutputSingle",stateMutability:"nonpayable",inputs:[{name:"params",type:"tuple",components:[{name:"poolKey",type:"tuple",components:[{name:"currency0",type:"address"},{name:"currency1",type:"address"},{name:"fee",type:"uint24"},{name:"tickSpacing",type:"int24"},{name:"hooks",type:"address"}]},{name:"zeroForOne",type:"bool"},{name:"exactAmount",type:"uint128"},{name:"hookData",type:"bytes"}]}],outputs:[{name:"amountIn",type:"uint256"},{name:"gasEstimate",type:"uint256"}]},{type:"function",name:"quoteExactInput",stateMutability:"nonpayable",inputs:[{name:"params",type:"tuple",components:[{name:"exactCurrency",type:"address"},{name:"path",type:"tuple[]",components:zr},{name:"exactAmount",type:"uint128"}]}],outputs:[{name:"amountOut",type:"uint256"},{name:"gasEstimate",type:"uint256"}]}],co=0n,Ec=2n**128n-1n,de={SWAP_EXACT_IN_SINGLE:6,SWAP_EXACT_IN:7,SWAP_EXACT_OUT_SINGLE:8,SETTLE:11,TAKE:14,TAKE_PORTION:16,SWEEP:20},Gr={name:"poolKey",type:"tuple",components:[{name:"currency0",type:"address"},{name:"currency1",type:"address"},{name:"fee",type:"uint24"},{name:"tickSpacing",type:"int24"},{name:"hooks",type:"address"}]},Ac=[{name:"params",type:"tuple",components:[Gr,{name:"zeroForOne",type:"bool"},{name:"amountIn",type:"uint128"},{name:"amountOutMinimum",type:"uint128"},{name:"hookData",type:"bytes"}]}],gc=[{name:"params",type:"tuple",components:[Gr,{name:"zeroForOne",type:"bool"},{name:"amountOut",type:"uint128"},{name:"amountInMaximum",type:"uint128"},{name:"hookData",type:"bytes"}]}],jr=[{name:"params",type:"tuple",components:[{name:"currencyIn",type:"address"},{name:"path",type:"tuple[]",components:zr},{name:"amountIn",type:"uint128"},{name:"amountOutMinimum",type:"uint128"}]}],Qr=[{name:"currency",type:"address"},{name:"amount",type:"uint256"},{name:"payerIsUser",type:"bool"}],fn=[{name:"currency",type:"address"},{name:"recipient",type:"address"},{name:"amount",type:"uint256"}],Xr=[{name:"currency",type:"address"},{name:"recipient",type:"address"},{name:"bips",type:"uint256"}],Sc=[{name:"currency",type:"address"},{name:"recipient",type:"address"}];function Cc(e){return`0x${e.map(t=>t.toString(16).padStart(2,"0")).join("")}`;}function xc(e,t){return{requiresV4Unlock:!0,actions:Cc(e),params:t};}function Tc(e,t){return De({abi:yt,functionName:"execute",args:[e,t]});}function Rc(e){return De({abi:yt,functionName:"permitBatch",args:[e.owner,e.permitBatch,e.signature]});}function Pc(e){return De({abi:yt,functionName:"multicall",args:[e]});}function Yr(e){if(!e)return!1;if("bips"in e){if(!Number.isInteger(e.bips)||e.bips<0||e.bips>1e4)throw new Error("Fee portion must be an integer between 0 and 10000 bips.");return e.bips>0;}if(e.amount<0n)throw new Error("Swap output fee cannot be negative.");return e.amount>0n;}function Bc(e,t){return"bips"in e?{action:de.TAKE_PORTION,params:xe(Xr,[t,e.recipient,BigInt(e.bips)])}:{action:de.TAKE,params:xe(fn,[t,e.recipient,e.amount])};}function st(e,t="Amount"){if(e<0n||e>Ec)throw new Error(`${t} is too large for a single V4 swap.`);}function Mc(e,t){return t?Pc([Rc(t),e]):e;}function je(e){return xo(xe([{name:"currency0",type:"address"},{name:"currency1",type:"address"},{name:"fee",type:"uint24"},{name:"tickSpacing",type:"int24"},{name:"hooks",type:"address"}],[e.currency0,e.currency1,e.fee,e.tickSpacing,e.hooks]));}function Lo(e){const{currencyIn:t,currencyOut:n}=e,o=Yr(e.fee)?e.fee:null,a=o?Bc(o,n):null,r=t.toLowerCase()===ie,i=r&&e.refundNative,s=xc([e.swapAction,de.SETTLE,...(a?[a.action]:[]),de.TAKE,...(e.amountOutNet!==void 0?[de.TAKE]:[]),...(i?[de.SWEEP]:[])],[e.encodedSwapParams,xe(Qr,[t,e.settleAmount,!0]),...(a?[a.params]:[]),xe(fn,[n,e.recipient,e.amountOutNet??co]),...(e.amountOutNet!==void 0?[xe(fn,[n,e.recipient,co])]:[]),...(i?[xe(Sc,[t,e.recipient])]:[])]);return{calldata:Mc(Tc([s],e.deadline),e.permit),value:r?e.nativeValue:0n};}function Jr(e,t){return t?{currencyIn:e.currency0,currencyOut:e.currency1}:{currencyIn:e.currency1,currencyOut:e.currency0};}function Zr(e){return e.map(({poolKey:t,currencyOut:n})=>({intermediateCurrency:n,fee:t.fee,tickSpacing:t.tickSpacing,hooks:t.hooks,hookData:"0x"}));}function _c(e){if(st(e.amountIn,"Swap input amount"),st(e.amountOutMinimum,"Swap minimum output"),e.path.length<1||e.path.length>3||e.amountOutNetMinimum<=0n)throw new Error("A routed swap needs one to three hops and a positive minimum output.");return Lo({swapAction:de.SWAP_EXACT_IN,encodedSwapParams:xe(jr,[{currencyIn:e.currencyIn,path:Zr(e.path),amountIn:e.amountIn,amountOutMinimum:e.amountOutMinimum}]),currencyIn:e.currencyIn,currencyOut:e.path.at(-1).currencyOut,settleAmount:e.amountIn,recipient:e.recipient,deadline:e.deadline,permit:e.permit,fee:e.fee,nativeValue:e.amountIn,refundNative:!1,amountOutNet:e.amountOutNetMinimum});}function Nc(e){return st(e.amountIn,"Swap input amount"),st(e.amountOutMinimum,"Swap minimum output"),Lo({swapAction:de.SWAP_EXACT_IN_SINGLE,encodedSwapParams:xe(Ac,[{poolKey:e.poolKey,zeroForOne:e.zeroForOne,amountIn:e.amountIn,amountOutMinimum:e.amountOutMinimum,hookData:"0x"}]),...Jr(e.poolKey,e.zeroForOne),settleAmount:e.amountIn,recipient:e.recipient,deadline:e.deadline,permit:e.permit,fee:e.fee,nativeValue:e.amountIn,refundNative:!1});}function Dc(e){st(e.amountOut,"Swap output amount"),st(e.amountInMaximum,"Swap maximum input");const t=Yr(e.fee)?e.fee:null,n=t?"amount"in t?t.amount:e.amountOut*BigInt(t.bips)/10000n:0n,o=e.amountOut-n;if(o<=0n||e.amountOutNet!==void 0&&e.amountOutNet!==o)throw new Error("Swap net output must be positive and match gross output minus the fee.");return Lo({swapAction:de.SWAP_EXACT_OUT_SINGLE,encodedSwapParams:xe(gc,[{poolKey:e.poolKey,zeroForOne:e.zeroForOne,amountOut:e.amountOut,amountInMaximum:e.amountInMaximum,hookData:"0x"}]),...Jr(e.poolKey,e.zeroForOne),settleAmount:co,recipient:e.recipient,deadline:e.deadline,permit:e.permit,fee:t?{recipient:t.recipient,amount:n}:null,nativeValue:e.amountInMaximum,refundNative:!0,amountOutNet:o});}function Ca(e){return{...e,address:D(e.address)};}function Oc(e){const t=D(e.currency0),n=D(e.currency1);if(t.toLowerCase()>=n.toLowerCase())throw new Error("Invalid pool key: currency0 must sort below currency1 (Uniswap v4 canonical ordering).");return{currency0:t,currency1:n,fee:e.fee,tickSpacing:e.tickSpacing,hooks:D(e.hooks)};}function qc(e,t=In){const n=Ca(e.token),o=Ca(e.counterToken),a=e.chainId??n.chainId??o.chainId??ee,r=t[a];if(!r)throw new Error(`No Aegis swap chain config found for chain ${a}.`);if(n.chainId!==a||o.chainId!==a)throw new Error(`Pool token chain ids must match chain ${a}.`);const i=Oc(e.poolKey),s=je(i);if(e.poolId&&!Y(e.poolId,s))throw new Error("Configured pool id does not match the pool key.");return{id:e.id,chainId:a,symbol:e.symbol??n.symbol,poolId:e.poolId??s,poolKey:i,token:n,counterToken:o,router:D(e.router??r.router),permit2:D(e.permit2??r.permit2),quoter:D(e.quoter??r.quoter),label:e.label??`${o.symbol} / ${n.symbol}`};}function Wf(e,t=In){return e!=null&&e.length?Object.fromEntries(e.map(n=>{const o=qc(n,t);return[o.id,o];})):{};}const xa="DIRECT-MARKET-001",Lc="0x000000000022D473030F116dDEE9F6B43aC78BA3",Fc=8388608,Uc={1:{router:"0x00581261a1200956ea05d1810fF28ffd66D8E254",quoter:"0x52F0E24D1c21C8A0cB1e5a5dD6198556BD9E1203"},56:{router:"0xe2820f3DA0abC9C65B3727A7103E3F59c00D686E",quoter:"0x9F75dD27D6664c475B90e105573E550ff69437B0"},130:{router:"0x9641682f95bad3305c18c549a483f413d23dc72e",quoter:"0x333E3C607B141b18fF6de9f258db6e77fE7491E0"},8453:{router:"0x00581261a1200956ea05d1810fF28ffd66D8E254",quoter:"0x0d5e0F971ED27FBfF6c2837bf31316121532048D"},57073:{router:"0xe2820f3DA0abC9C65B3727A7103E3F59c00D686E",quoter:"0x3972C00f7ed4885e145823eb7C655375d275A1C5"}};function U(e,t,n,o,a,r,i,s){const c=Uc[e];if(!c)throw new Error(`Missing trusted direct-swap contracts for chain ${e}.`);return{chainId:e,poolId:t,poolKey:{currency0:n,currency1:a,fee:Fc,tickSpacing:i,hooks:s},tokens:[{address:n,decimals:o},{address:a,decimals:r}],router:c.router,permit2:Lc,quoter:c.quoter};}const ei=[U(1,"0xc516dba7bd70aa2dcb986bb1c27208ea29ecd097fa0ce636611e88e54ae4444d","0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",6,"0xF06Ad052b0d8D511D0B6f00100b8e402639209EF",18,30,"0x8f29BD5c8429730fA4C46e6295c4e679eDEdd0cC"),U(1,"0x0f8a98e3fdb7ea4438a3f7342f040cbc9d1eced1b90a876d38f3453100243356","0x670AfdD7226e73d3CC55B5cd83933E46aF22DECd",18,"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",6,60,"0x8f29BD5c8429730fA4C46e6295c4e679eDEdd0cC"),U(1,"0x3fa06e44e4bee9539887681eab6b608b646784e2027ea6292198cde0690aff54","0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",6,"0xCabcc33D9Ff7e24F413d939773D232C0d50dCc7f",18,60,"0x8f29BD5c8429730fA4C46e6295c4e679eDEdd0cC"),U(1,"0x34562283ce0470bd58a621a6132ff67c296723cc62890b0a394e50424e3fef3a",ie,18,"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",6,10,"0x8f29BD5c8429730fA4C46e6295c4e679eDEdd0cC"),U(1,"0x01409fc6f1bf49e20bf05df5d4dcb96ed3977ea717bc4a135e9deacd92ebc0af","0x828B22c9ea1c20B551EeFC6198174C4bb7a8CBF6",18,"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",6,60,"0x8f29BD5c8429730fA4C46e6295c4e679eDEdd0cC"),U(56,"0xd6057c3c613f4cfb085cd17efd08c30a06a08608022912c72c28b2b5636ce2bd",ie,18,"0x4902C5ebc598265Ed2212b559B042De8a5Eeec3f",18,50,"0xe449E013004DB4a5681E9622ca10c5Ba0eA610cc"),U(56,"0x1e762d241b34548efca74c52f7fd7491bf29865b40f13b58ccbf2a54d427391e",ie,18,"0x205812CdBed920aFf76C6580abD681a46D11efc7",18,10,"0xe449E013004DB4a5681E9622ca10c5Ba0eA610cc"),U(56,"0x79eda94d6c0f850d03ee0bcbd97a55d4f8bbdbe901d42db6484453ea71373bbe","0x02Fca66C1D1aFB4E2A7884261eB00F63598a7436",18,"0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",18,50,"0xe449E013004DB4a5681E9622ca10c5Ba0eA610cc"),U(130,"0x9073b65a558bdf9d0d7d0c82b468128acb847de72f5ad776bd8a4aab98781584","0x078D782b760474a361DdA0AF3839290b0EF57AD6",6,"0x83f31aF747189C2fa9E5dEb253200c505EfF6eD2",18,10,"0xA0B0D2D00Fd544D8E0887F1A3cEDD6e24BAF10cC"),U(130,"0x93a9759d15116697734921cf31000f5f6a8bb4cf163ab837071d94c8a48efd36",ie,18,"0xAaAa68F5D1F7855954ECb361d4b9ff3127Cfefa7",18,60,"0x88C9ff9fc0B22cCA42265d3F1D1c2c39E41cDaCc"),U(130,"0xa35fd8c7554f6ee88af3809067f90d383b1d45ab29b5927294859bfb49e9196d","0x078D782b760474a361DdA0AF3839290b0EF57AD6",6,"0x12e96c2BFEa6E835CF8dd38a5834fA61Cf723736",18,10,"0xA0B0D2D00Fd544D8E0887F1A3cEDD6e24BAF10cC"),U(130,"0x04a7a357a66b983d6770c1423e12ae16cb4935eac013106d0e309864b269d48e","0x078D782b760474a361DdA0AF3839290b0EF57AD6",6,"0xAaAa68F5D1F7855954ECb361d4b9ff3127Cfefa7",18,60,"0x88C9ff9fc0B22cCA42265d3F1D1c2c39E41cDaCc"),U(130,"0xe56f1855a315fe2984a401b8939e7c1c314070ea637e642acdc7ffed0d36387c","0x078D782b760474a361DdA0AF3839290b0EF57AD6",6,"0x2615A94dF961278DcbC41fB0A54fEC5f10a693aE",18,10,"0xA0B0D2D00Fd544D8E0887F1A3cEDD6e24BAF10cC"),U(130,"0x410723c1949069324d0f6013dba28829c4a0562f7c81d0f7cb79ded668691e1f",ie,18,"0x0555E30da8f98308EdB960aa94C0Db47230d2B9c",8,60,"0xA0B0D2D00Fd544D8E0887F1A3cEDD6e24BAF10cC"),U(130,"0x332924e23d3ea11964e538131c49c1fa8315fe163218fae8aeaf694ab7164913","0x0555E30da8f98308EdB960aa94C0Db47230d2B9c",8,"0x078D782b760474a361DdA0AF3839290b0EF57AD6",6,60,"0x3476b53425a786e57aA246839c1837A62fc21AcC"),U(130,"0x055ac9b9a4ed104d328a9e391b5f78f4c6dbddf8e834dd71e1b0b62c2dee2dc0","0x0555E30da8f98308EdB960aa94C0Db47230d2B9c",8,"0xAaAa68F5D1F7855954ECb361d4b9ff3127Cfefa7",18,60,"0x88C9ff9fc0B22cCA42265d3F1D1c2c39E41cDaCc"),U(130,"0xe468249c67297374eb4fee862be1143c8d5189e685469e40db9df0fc61b46e2a","0x078D782b760474a361DdA0AF3839290b0EF57AD6",6,"0x139451953EF1865C096f89C5e522c081Dc3B5F11",18,10,"0xA0B0D2D00Fd544D8E0887F1A3cEDD6e24BAF10cC"),U(8453,"0xbb8afa02662e873abf49e9b6404f79d0fce76dabe9dd67ac491d8b9985fd4cb3","0x0b3e328455c4059EEb9e3f84b5543F74E24e7E1b",18,"0x833589fCD6eDb6E08f4c7C32D4f71B54bdA02913",6,60,"0x8f29BD5c8429730fA4C46e6295c4e679eDEdd0cC"),// Ink pools verified on-chain 2026-10-12: pool ids hash from these keys and
|
|
7
7
|
// are initialized in the Ink PoolManager. USD₮0-USDG had zero liquidity then.
|
|
8
8
|
// USD₮0-USDC
|
|
9
9
|
U(57073,"0xfff506f639ae6cbe6c4743ddfbac69169bca6f1a38ff6997c6f35ff2f8bd1805","0x0200C29006150606B650577BBE7B6248F58470c1",6,"0x2D270e6886d130D724215A266106e6832161EAEd",6,1,"0xe449E013004DB4a5681E9622ca10c5Ba0eA610cc"),// USD₮0-USDG
|
|
@@ -22,50 +22,50 @@ U(57073,"0xbeb76cc0b8368dc0e4968de92ee0386f2135463f4ab0737edd7c88b9c58430c6","0x
|
|
|
22
22
|
U(57073,"0xfc349fd867e86ce6ca534802d48f70ba0c8b35cbf82e0c02f42b4a47df51636e","0xc3FdBe3A68EE5dE461D30415a8165cf9Aefe1171",18,"0xE7E553Cd128F0011777323A0b44a7b96EA1CB540",18,1,"0xe449E013004DB4a5681E9622ca10c5Ba0eA610cc"),// wMSTRx-wSPYx
|
|
23
23
|
U(57073,"0x0754e0cad325b69c0595c02e02da8b3b9384b27c637b48940589cf8b3a1519dc","0x30987adF0B11dc698438a99BA04ec3a1AB2c7EaB",18,"0xE7E553Cd128F0011777323A0b44a7b96EA1CB540",18,1,"0xe449E013004DB4a5681E9622ca10c5Ba0eA610cc"),// USDC-WETH
|
|
24
24
|
U(57073,"0xa440c7fd3cf42fdb083109ee84da8ac6bf05aa3e736a587a6d1c0855a2f8350a","0x2D270e6886d130D724215A266106e6832161EAEd",6,"0x4200000000000000000000000000000000000006",18,1,"0xe449E013004DB4a5681E9622ca10c5Ba0eA610cc"),// USD₮0-kBTC
|
|
25
|
-
U(57073,"0x2c73736abad6d184c68b66646ed1184f70e811acf0abc65f988af6163307957f","0x0200C29006150606B650577BBE7B6248F58470c1",6,"0x73E0C0d45E048D25Fc26Fa3159b0aA04BfA4Db98",8,1,"0xe449E013004DB4a5681E9622ca10c5Ba0eA610cc")],Xr=/* @__PURE__ */new WeakSet();class yt extends _{constructor(n="This is not a trusted direct-swap market in the trusted execution catalogue."){super(`${Ia}: ${n}`);j(this,"ruleId",Ia);this.name="DirectSwapMarketTrustError";}}function Yr(e,t){return w(e.currency0,t.currency0)&&w(e.currency1,t.currency1)&&e.fee===t.fee&&e.tickSpacing===t.tickSpacing&&w(e.hooks,t.hooks);}function Jr(e){try{if(!ee(je(e.poolKey),e.poolId))return!1;}catch{return!1;}if(e.token.chainId!==e.chainId||e.counterToken.chainId!==e.chainId||w(e.token.address,e.counterToken.address))return!1;const t=[e.token.address,e.counterToken.address];return t.some(n=>w(n,e.poolKey.currency0))&&t.some(n=>w(n,e.poolKey.currency1));}function Nc(e,t){if(e.chainId!==t.chainId||!ee(e.poolId,t.poolId)||!Yr(e.poolKey,t.poolKey)||!w(e.router,t.router)||!w(e.permit2,t.permit2)||!w(e.quoter,t.quoter))return!1;const n=[e.token,e.counterToken];return t.tokens.every(o=>n.some(a=>w(a.address,o.address)&&a.chainId===t.chainId&&a.decimals===o.decimals));}function Zr(e){return Jr(e)?Xr.has(e)?!0:Qr.some(t=>Nc(e,t)):!1;}function yn(e){if(!Zr(e))throw new yt();}function Oc(e,t){if(yn(e),!Yr(e.poolKey,t))throw new yt("The executable quote no longer matches its trusted pool.");}function Wf(e){if(!Jr(e))throw new yt("The host-authorized pool is internally inconsistent.");return Xr.add(e),e;}function In(e){return Qr.filter(t=>t.chainId===e);}function ei(e){if(!Number.isFinite(e)||e<0||e>2e3)throw new Error("Slippage must be between 0% and 20%.");}function gt(e,t){return e*BigInt(1e4-t)/10000n;}function Fc(e,t){return ei(t),gt(e,Math.round(t));}function qc(e,t){return ei(t),(e*BigInt(1e4+Math.round(t))+9999n)/10000n;}function Lc(e,t){return t<=0?0n:e*BigInt(t)/10000n;}function Uc(e,t){return t<=0?e:(e*10000n+BigInt(1e4-t-1))/BigInt(1e4-t);}function Vc(e,t){if(t<=0)return e;const n=BigInt(1e4-t);return(e*10000n+n-1n)/n;}function nn(e){return st(e),e;}function $c(e,t){if(w(t.address,e.currency0))return!0;if(w(t.address,e.currency1))return!1;throw new Error("Input token is not part of this pool.");}function Hc(e,t,n){const o=je(e.poolKey);if(!ee(o,e.poolId))throw new Error("Configured pool id does not match the pool key.");const a=w(t.address,e.poolKey.currency0)||w(t.address,e.poolKey.currency1),r=w(n.address,e.poolKey.currency0)||w(n.address,e.poolKey.currency1);if(!a||!r||w(t.address,n.address))throw new Error("Selected tokens do not match this direct pool.");}function Wc(e,t){if(Array.isArray(e)){const a=e[0],r=e[1];if(typeof a=="bigint"&&typeof r=="bigint")return{amount:a,gasEstimate:r};throw new Error("Unexpected V4 Quoter response.");}const n=e,o=n[t];if(typeof o=="bigint"&&typeof n.gasEstimate=="bigint")return{amount:o,gasEstimate:n.gasEstimate};throw new Error("Unexpected V4 Quoter response.");}async function Kc(e){var m,d,h,f;if((m=e.signal)!=null&&m.aborted)throw new DOMException("Quote request aborted","AbortError");if(e.amount<=0n)throw new Error("Enter an amount to swap.");nn(e.amount),Hc(e.market,e.tokenIn,e.tokenOut),yn(e.market);const t=e.market.poolKey,n=$c(t,e.tokenIn),o=((d=e.fee)==null?void 0:d.bps)??0;if(!Number.isInteger(o)||o<0||o>=1e4)throw new Error("Fee must be an integer between 0 and 9999 bps.");const a=e.mode==="exactOut"?nn(Uc(e.amount,o)):e.amount,r=e.mode==="exactOut"?await e.publicClient.simulateContract({address:e.market.quoter,abi:mn,functionName:"quoteExactOutputSingle",args:[{poolKey:t,zeroForOne:n,exactAmount:a,hookData:"0x"}],account:e.account}):await e.publicClient.simulateContract({address:e.market.quoter,abi:mn,functionName:"quoteExactInputSingle",args:[{poolKey:t,zeroForOne:n,exactAmount:e.amount,hookData:"0x"}],account:e.account});if((h=e.signal)!=null&&h.aborted)throw new DOMException("Quote request aborted","AbortError");const i=Wc(r.result,e.mode==="exactOut"?"amountIn":"amountOut"),s=e.mode==="exactOut"?i.amount:e.amount,l=e.mode==="exactOut"?a:i.amount,c=e.mode==="exactOut"?l-e.amount:Lc(l,o),p=l-c,u=e.mode==="exactOut"?p:Fc(p,e.slippageBps);return{mode:e.mode,poolKey:t,zeroForOne:n,amountIn:s,amountOut:p,grossAmountOut:l,amountOutMinimum:e.mode==="exactOut"?l:nn(Vc(u,o)),amountInMaximum:e.mode==="exactOut"?nn(qc(s,e.slippageBps)):s,userAmountOutMinimum:u,feeAmount:c,feeBps:o,feeRecipient:o>0?((f=e.fee)==null?void 0:f.recipient)??null:null,gasEstimate:i.gasEstimate};}function ti(e,t){return e.mode===t.mode&&e.zeroForOne===t.zeroForOne&&w(e.poolKey.currency0,t.poolKey.currency0)&&w(e.poolKey.currency1,t.poolKey.currency1)&&e.poolKey.fee===t.poolKey.fee&&e.poolKey.tickSpacing===t.poolKey.tickSpacing&&w(e.poolKey.hooks,t.poolKey.hooks)&&e.feeBps===t.feeBps&&Gs(e.feeRecipient,t.feeRecipient);}function Kf(e,t){return ti(e,t)&&e.amountIn===t.amountIn&&e.amountOut===t.amountOut&&e.grossAmountOut===t.grossAmountOut&&e.amountOutMinimum===t.amountOutMinimum&&e.amountInMaximum===t.amountInMaximum&&e.userAmountOutMinimum===t.userAmountOutMinimum&&e.feeAmount===t.feeAmount;}function Aa(e,t){return!e||!ti(e,t)?{quote:t,priceMovedBeyondTolerance:!1}:t.mode==="exactIn"?t.amountOut<e.userAmountOutMinimum?{quote:t,priceMovedBeyondTolerance:!0}:{quote:{...t,amountOutMinimum:t.amountOutMinimum>e.amountOutMinimum?t.amountOutMinimum:e.amountOutMinimum,userAmountOutMinimum:t.userAmountOutMinimum>e.userAmountOutMinimum?t.userAmountOutMinimum:e.userAmountOutMinimum},priceMovedBeyondTolerance:!1}:t.amountIn>e.amountInMaximum?{quote:t,priceMovedBeyondTolerance:!0}:{quote:{...t,amountInMaximum:t.amountInMaximum<e.amountInMaximum?t.amountInMaximum:e.amountInMaximum},priceMovedBeyondTolerance:!1};}function ga(e){return e.mode==="exactOut"?e.amountInMaximum:e.amountIn;}function zc(e){return e.feeRecipient?e.mode==="exactIn"?e.feeBps>0?{recipient:e.feeRecipient,bips:e.feeBps}:null:e.feeAmount>0n?{recipient:e.feeRecipient,amount:e.feeAmount}:null:null;}const An="uniswap-v4-aegis";class No extends Error{constructor({status:n,statusText:o,code:a,message:r,body:i}){super(r);j(this,"status");j(this,"statusText");j(this,"code");j(this,"body");this.name="KyberSwapApiError",this.status=n,this.statusText=o,this.code=a,this.body=i;}}class Oo extends Error{constructor({endpoint:n,issues:o}){const a=o[0],r=a?`: ${a.path.length>0?a.path.join("."):"(root)"} ${a.message}`:"";super(`KyberSwap response violated the expected contract at ${n}${r}`);j(this,"endpoint");j(this,"issues");this.name="KyberSwapContractError",this.endpoint=n,this.issues=o;}}class ye extends Error{constructor({endpoint:n,limit:o,actual:a,resource:r}){super(`REMOTE-LIMIT-001: KyberSwap ${n} ${r} exceeds the ${o} limit`+(a===void 0?".":` (received ${a}).`));j(this,"ruleId","REMOTE-LIMIT-001");j(this,"endpoint");j(this,"limit");j(this,"actual");this.name="KyberSwapResourceLimitError",this.endpoint=n,this.limit=o,this.actual=a;}}const ni="https://aggregator-api.kyberswap.com",ro="Aegis",oi=2e4,Gc=1e6,jc=32768,Sa=256,Ca=128,xa=16,Ta=2e4,Qc=16384,io=9e5,Xc={1:"ethereum",10:"optimism",56:"bsc",130:"unichain",137:"polygon",143:"monad",146:"sonic",250:"fantom",999:"hyperevm",2020:"ronin",4326:"megaeth",5e3:"mantle",8453:"base",9745:"plasma",42161:"arbitrum",42793:"etherlink",43114:"avalanche",59144:"linea",80094:"berachain"};function ai(e){const t=Xc[e];if(!t)throw new Error(`KyberSwap does not support chain ${e}.`);return t;}function Yc(e){var o,a;const t=(a=(o=e.headers)==null?void 0:o.get)==null?void 0:a.call(o,"content-length");if(!t||!/^\d+$/.test(t))return null;const n=Number(t);return Number.isSafeInteger(n)?n:null;}async function Jc(e,t,n){var i,s;const o=Yc(e);if(o!==null&&o>n)throw await((i=e.body)==null?void 0:i.cancel().catch(()=>{})),new ye({endpoint:t,limit:n,actual:o,resource:"response bytes"});if((s=e.body)!=null&&s.getReader){const l=e.body.getReader(),c=new TextDecoder();let p=0,u="";for(;;){const{done:m,value:d}=await l.read();if(m)break;if(p+=d.byteLength,p>n)throw await l.cancel().catch(()=>{}),new ye({endpoint:t,limit:n,actual:p,resource:"response bytes"});u+=c.decode(d,{stream:!0});}return u+c.decode();}const a=await e.text(),r=new TextEncoder().encode(a).byteLength;if(r>n)throw new ye({endpoint:t,limit:n,actual:r,resource:"response bytes"});return a;}async function Fo(e,t,n=Gc){var o;if(!((o=e.body)!=null&&o.getReader)&&typeof e.text!="function"){const a=await e.json(),r=JSON.stringify(a),i=new TextEncoder().encode(r).byteLength;if(i>n)throw new ye({endpoint:t,limit:n,actual:i,resource:"response bytes"});return a;}return JSON.parse(await Jc(e,t,n));}function ri(e,t){let n=0;const o=(a,r,i)=>{if(n+=1,n>Ta)throw new ye({endpoint:t,limit:Ta,actual:n,resource:"JSON nodes"});if(i>xa)throw new ye({endpoint:t,limit:xa,actual:i,resource:"JSON depth"});if(typeof a=="string"){const c=t==="/route/build"&&r.length===1&&r[0]==="data"?io:Qc;if(a.length>c)throw new ye({endpoint:t,limit:c,actual:a.length,resource:`string at ${r.join(".")||"(root)"}`});return;}if(Array.isArray(a)){if(a.length>Sa)throw new ye({endpoint:t,limit:Sa,actual:a.length,resource:`array items at ${r.join(".")||"(root)"}`});a.forEach((l,c)=>o(l,[...r,String(c)],i+1));return;}if(!a||typeof a!="object")return;const s=Object.entries(a);if(s.length>Ca)throw new ye({endpoint:t,limit:Ca,actual:s.length,resource:`object keys at ${r.join(".")||"(root)"}`});for(const[l,c]of s)o(c,[...r,l],i+1);};o(e,[],0);}async function ii(e){let t,n,o;try{const s=await Fo(e,"error",jc);t=s,n=s.code,o=s.message;}catch(s){if(s instanceof ye)throw s;}const a=o?`: ${o.slice(0,300)}`:"",r=n!==void 0?` ${n}`:"",i=e.statusText||"Request failed";return new No({status:e.status,statusText:i,code:n,message:`KyberSwap API error${r}${a||`: ${i}`}`,body:t});}function si(e){return e instanceof No?e.status===429||e.status>=500:e instanceof Oo||e instanceof ye?!1:e instanceof TypeError?!0:e instanceof Error&&e.name==="TimeoutError";}const rt=me.refine(e=>e.length<=78,"uint256 decimal string must contain at most 78 digits"),nt=x().max(256),Zc=Ut({pool:x().max(256).optional(),tokenIn:z.optional(),tokenOut:z.optional(),swapAmount:rt.optional(),amountOut:rt.optional(),exchange:x().max(128).optional(),poolType:x().max(128).optional()}),el=Ut({tokenIn:z,tokenOut:z,amountIn:rt,amountOut:rt,gas:nt.optional(),gasEstimate:nt.optional(),gasUsd:nt.optional(),amountInUsd:nt.optional(),amountOutUsd:nt.optional(),priceImpact:v().optional(),route:F(F(Zc).max(64)).max(64).optional(),routeComposition:F(Ut({name:x().max(128),part:v()})).max(128).optional()}),tl=Ut({routeSummary:el,routerAddress:z,requestId:x().max(256).optional()}),nl=Ut({amountIn:rt,amountOut:rt,gas:nt.optional(),gasUsd:nt.optional(),data:So.refine(e=>e.length<=io,`calldata must contain at most ${io} characters`),routerAddress:z,transactionValue:rt.optional(),requestId:x().max(256).optional()});function ol(e){ri(e,"/routes");const t=tl.safeParse(e);if(!t.success)throw new Oo({endpoint:"/routes",issues:t.error.issues});const n=e;return{...n,routerAddress:N(t.data.routerAddress),routeSummary:n.routeSummary};}function al(e){ri(e,"/route/build");const t=nl.safeParse(e);if(!t.success)throw new Oo({endpoint:"/route/build",issues:t.error.issues});return{...e,data:t.data.data,routerAddress:N(t.data.routerAddress)};}async function rl({tokenIn:e,tokenOut:t,amountIn:n,chainId:o=1,origin:a,fee:r,liquiditySources:i="any",signal:s,timeoutMs:l=oi}){const c=new URLSearchParams({tokenIn:e,tokenOut:t,amountIn:n,gasInclude:"true"});a&&c.set("origin",a),i==="aegis"&&c.set("includedSources",An),r&&(c.set("feeAmount",r.feeAmount),c.set("chargeFeeBy",r.chargeFeeBy),c.set("isInBps",String(r.isInBps)),c.set("feeReceiver",r.feeReceiver));const{signal:p,cleanup:u}=ut({signal:s,timeoutMs:l,timeoutMessage:"KyberSwap route request timed out."});try{const m=await fetch(`${ni}/${ai(o)}/api/v1/routes?${c}`,{method:"GET",headers:{Accept:"application/json","X-Client-Id":ro},signal:p});if(!m.ok)throw await ii(m);const d=await Fo(m,"/routes");return ol(d.data);}finally{u();}}async function il({routeSummary:e,sender:t,recipient:n,slippageBps:o,chainId:a=1,signal:r,timeoutMs:i=oi}){const s=Math.floor(Date.now()/1e3+600),{signal:l,cleanup:c}=ut({signal:r,timeoutMs:i,timeoutMessage:"KyberSwap route build timed out."});try{const p=await fetch(`${ni}/${ai(a)}/api/v1/route/build`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json","X-Client-Id":ro},body:JSON.stringify({routeSummary:e,sender:t,origin:t,recipient:n,slippageTolerance:o,deadline:s,enableGasEstimation:!1,source:ro}),signal:l});if(!p.ok)throw await ii(p);const u=await Fo(p,"/route/build");return{...al(u.data),deadline:s};}finally{c();}}const sl=["aegisEngine","aegisHook","aegisRouterV1","aegisStateView","vaultRegistry","variableInterestRate","oracleManager","limitOrderManager","dynamicFeeManager","poolManager","positionManager","stateView","uniswapV4Quoter","permit2","weth9"],cl={1:{version:"v1.0.2",contracts:{aegisEngine:{address:"0x4d9BDd0cdfF5DC9149C2DaE8377a3352790C50c9"},aegisHook:{address:"0x8f29BD5c8429730fA4C46e6295c4e679eDEdd0cC"},aegisRouterV1:{address:"0x00581261a1200956ea05d1810fF28ffd66D8E254"},aegisStateView:{address:"0xB6191c5f5983Bf5c9B993e405781B6E88449bDB6"},vaultRegistry:{address:"0x5cfB5e914ECb2809C19E89b8A1c41F3e57958D87"},variableInterestRate:{address:"0xE929011f14FA04ce4EeDDFf0aC1ef923D1e1df23"},oracleManager:{address:"0x6Bc6fe74B3C360E6D838295EeeC8F58eBBcE3e5C"},limitOrderManager:{address:"0x5985c41edF54cca8aa2e16c7a22e1eB59948068E"},dynamicFeeManager:{address:"0x5cC0F3f0933b465a37124403739c80bE857Ca45E"},poolManager:{address:"0x000000000004444c5dc75cB358380D2e3dE08A90"},positionManager:{address:"0xbd216513d74c8cf14cf4747e6aaa6420ff64ee9e"},stateView:{address:"0x7ffe42c4a5deea5b0fec41c94c136cf115597227"},uniswapV4Quoter:{address:"0x52f0e24d1c21c8a0cb1e5a5dd6198556bd9e1203"},permit2:{address:"0x000000000022D473030F116dDEE9F6B43aC78BA3"},weth9:{address:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"}}},56:{version:"v1.0.3",contracts:{aegisEngine:{address:"0x1a22457422B9308AB0C0dC6cef8629e061716009"},aegisHook:{address:"0xe449E013004DB4a5681E9622ca10c5Ba0eA610cc"},aegisRouterV1:{address:"0xe2820f3DA0abC9C65B3727A7103E3F59c00D686E"},aegisStateView:{address:"0xD64A84C0C2F56F5fC1C87760926083130B3fE5E0"},vaultRegistry:{address:"0xbABfccADC23629DE0D7E73433ABFC6D986083B09"},variableInterestRate:{address:"0xa2D9846A73f1134962F366d991B2080d39a427AB"},oracleManager:{address:"0x6e9B305B99d2ac39158e5D4bb5d42012D631F9e4"},limitOrderManager:{address:"0xFA5062a51A30d29AAb423123E9449e95bc8dB3a1"},dynamicFeeManager:{address:"0xc307E55749941e6B0Fc0D7B487fF01198cA48bE1"},poolManager:{address:"0x28e2Ea090877bF75740558f6BFB36A5ffeE9e9dF"},positionManager:{address:"0x7A4a5c919aE2541AeD11041A1AEeE68f1287f95b"},stateView:{address:"0xd13Dd3D6E93f276FAfc9Db9E6BB47C1180aeE0c4"},uniswapV4Quoter:{address:"0x9F75dD27D6664c475B90e105573E550ff69437B0"},permit2:{address:"0x000000000022D473030F116dDEE9F6B43aC78BA3"},weth9:{address:"0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"}}},130:{version:"v0.4.0",contracts:{aegisEngine:{address:"0x2DDEA3c59b90d808AA980e9e5a460FdB3c87ccB0"},aegisHook:{address:"0x3476b53425a786e57aA246839C1837a62fc21ACC"},aegisRouterV1:{address:"0x9641682F95baD3305C18c549a483F413d23dC72e"},aegisStateView:{address:"0x907f323c608FCd4d70D77a4d944B4bffbC7C10Ce"},vaultRegistry:{address:"0xe19414e5C3DB1596f583d18d3Ac5bb43CBabc50D"},variableInterestRate:{address:"0xCCDECda074d8411651AC1B8FD87c5CA7551f28F6"},oracleManager:{address:"0x708c46aB579B7a9eBA70D39a059664EA6FD91737"},limitOrderManager:{address:"0xCc7F9dC1C6BA855E2507c9C65910B48A7F6497C1"},dynamicFeeManager:{address:"0xEC2eD4784e6aE796A75Ef9E5d74269f09AFC482C"},poolManager:{address:"0x1F98400000000000000000000000000000000004"},positionManager:{address:"0x4529A01c7A0410167c5740C487A8DE60232617bf"},stateView:{address:"0x86e8631a016f9068c3f085faf484ee3f5fdee8f2"},uniswapV4Quoter:{address:"0x333e3c607b141b18ff6de9f258db6e77fe7491e0"},permit2:{address:"0x000000000022D473030F116dDEE9F6B43aC78BA3"},weth9:{address:"0x4200000000000000000000000000000000000006"}}},4663:{version:"v1.0.3",contracts:{aegisEngine:{address:"0x1a22457422B9308AB0C0dC6cef8629e061716009"},aegisHook:{address:"0xe449E013004DB4a5681E9622ca10c5Ba0eA610cc"},aegisRouterV1:{address:"0xe2820f3DA0abC9C65B3727A7103E3F59c00D686E"},aegisStateView:{address:"0xD64A84C0C2F56F5fC1C87760926083130B3fE5E0"},vaultRegistry:{address:"0xbABfccADC23629DE0D7E73433ABFC6D986083B09"},variableInterestRate:{address:"0xa2D9846A73f1134962F366d991B2080d39a427AB"},oracleManager:{address:"0x6e9B305B99d2ac39158e5D4bb5d42012D631F9e4"},limitOrderManager:{address:"0xFA5062a51A30d29AAb423123E9449e95bc8dB3a1"},dynamicFeeManager:{address:"0xc307E55749941e6B0Fc0D7B487fF01198cA48bE1"},poolManager:{address:"0x8366a39CC670B4001A1121B8F6A443A643e40951"},positionManager:{address:"0x58daec3116aae6D93017bAAea7749052E8a04fA7"},stateView:{address:"0xf3334192d15450cdd385c8b70e03f9a6bd9e673b"},uniswapV4Quoter:{address:"0x8dc178efb8111bb0973dd9d722ebeff267c98f94"},permit2:{address:"0x000000000022D473030F116dDEE9F6B43aC78BA3"},weth9:{address:"0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73"}}},8453:{version:"v1.0.2",contracts:{aegisEngine:{address:"0x4d9BDd0cdfF5DC9149C2DaE8377a3352790C50c9"},aegisHook:{address:"0x8f29BD5c8429730fA4C46e6295c4e679eDEdd0cC"},aegisRouterV1:{address:"0x00581261a1200956ea05d1810fF28ffd66D8E254"},aegisStateView:{address:"0xB6191c5f5983Bf5c9B993e405781B6E88449bDB6"},vaultRegistry:{address:"0x5cfB5e914ECb2809C19E89b8A1c41F3e57958D87"},variableInterestRate:{address:"0xE929011f14FA04ce4EeDDFf0aC1ef923D1e1df23"},oracleManager:{address:"0x6Bc6fe74B3C360E6D838295EeeC8F58eBBcE3e5C"},limitOrderManager:{address:"0x5985c41edF54cca8aa2e16c7a22e1eB59948068E"},dynamicFeeManager:{address:"0x5cC0F3f0933b465a37124403739c80bE857Ca45E"},poolManager:{address:"0x498581ff718922c3f8e6a244956af099b2652b2b"},positionManager:{address:"0x7c5f5a4bbd8fd63184577525326123b519429bdc"},stateView:{address:"0xa3c0c9b65bad0b08107aa264b0f3db444b867a71"},uniswapV4Quoter:{address:"0x0d5e0f971ed27fbff6c2837bf31316121532048d"},permit2:{address:"0x000000000022D473030F116dDEE9F6B43aC78BA3"},weth9:{address:"0x4200000000000000000000000000000000000006"}}},57073:{version:"v1.0.3",contracts:{aegisEngine:{address:"0x1a22457422B9308AB0C0dC6cef8629e061716009"},aegisHook:{address:"0xe449E013004DB4a5681E9622ca10c5Ba0eA610cc"},aegisRouterV1:{address:"0xe2820f3DA0abC9C65B3727A7103E3F59c00D686E"},aegisStateView:{address:"0xD64A84C0C2F56F5fC1C87760926083130B3fE5E0"},vaultRegistry:{address:"0xbABfccADC23629DE0D7E73433ABFC6D986083B09"},variableInterestRate:{address:"0xa2D9846A73f1134962F366d991B2080d39a427AB"},oracleManager:{address:"0x6e9B305B99d2ac39158e5D4bb5d42012D631F9e4"},limitOrderManager:{address:"0xFA5062a51A30d29AAb423123E9449e95bc8dB3a1"},dynamicFeeManager:{address:"0xc307E55749941e6B0Fc0D7B487fF01198cA48bE1"},poolManager:{address:"0x360E68faCcca8cA495c1B759Fd9EEe466db9FB32"},positionManager:{address:"0x1b35d13a2E2528f192637F14B05f0Dc0e7dEB566"},stateView:{address:"0x76fd297e2d437cd7f76d50f01afe6160f86e9990"},uniswapV4Quoter:{address:"0x3972c00f7ed4885e145823eb7c655375d275a1c5"},permit2:{address:"0x000000000022D473030F116dDEE9F6B43aC78BA3"},weth9:{address:"0x4200000000000000000000000000000000000006"}}}},ll={"ink-calamari":{chainId:57073,version:"v1.0.3",contracts:{aegisEngine:{address:"0x2fC2f4D1EEf9C5F63cdfC13BE3b842cBda8eF946"},aegisHook:{address:"0x2F449fa3f078960313749Bc45FfCDE0987F790cC"},aegisRouterV1:{address:"0xf1d885bc797825a22be65a6e2dc7184adf24cc90"},aegisStateView:{address:"0x84e582430fabce9feb4cbad2b2e50c811a7f0fc3"},vaultRegistry:{address:"0x7d0d5C516Fe82a90D9e1ef328fA036a689ff6786"},variableInterestRate:{address:"0x7aFcee2e41d48ec819f482f73C8d4Abc41B9e488"},oracleManager:{address:"0x1afFbAd0CFAdefE38E60746B0AcdA672cD95bFFD"},limitOrderManager:{address:"0xdbce2BBEC18113DcBF89F7c209EA75A28BE30cbb"},dynamicFeeManager:{address:"0xbcf84976a9ae569dd82f2078aa4778702d6f566d"},poolManager:{address:"0x6E4723A612831AfB9f5B2a5aE22723c37aAB9560"},positionManager:{address:"0x2Fb62913fe4EE086E8F21949c5Deeb088752DC78"},stateView:{address:"0x9Bf3f07e41e05D658248467760C745E278EF6211"},uniswapV4Quoter:{address:"0x0739Cbf29d499e8c6C3c0b2e3bC2151E986AAA3c"},permit2:{address:"0x000000000022D473030F116dDEE9F6B43aC78BA3"},weth9:{address:"0x4200000000000000000000000000000000000006"}}}},zf=95,so=["aegisEngine","aegisHook","aegisRouterV1","aegisStateView","vaultRegistry","variableInterestRate","oracleManager","limitOrderManager","dynamicFeeManager","poolManager","positionManager","stateView","uniswapV4Quoter","permit2","weth9"],ul=new Set(so);function $e(e){return typeof e=="object"&&e!==null&&!Array.isArray(e);}function ci(e,t){if(e==="v0.4.0"||e==="v1.0.2"||e==="v1.0.3")return e;throw new Error(`${t} must be a supported Aegis Engine version.`);}function ae(e,t,n){const o=e[t];if(!$e(o)||typeof o.address!="string")throw new Error(`${n}.${t}.address is required.`);try{N(o.address);}catch{throw new Error(`${n}.${t}.address is not a valid EVM address.`);}return o.address;}function li(e,t){for(const n of Object.keys(e))if(!ul.has(n))throw new Error(`${t}.${n} is not a supported key.`);return Object.freeze({aegisEngine:ae(e,"aegisEngine",t),aegisHook:ae(e,"aegisHook",t),aegisRouterV1:ae(e,"aegisRouterV1",t),aegisStateView:ae(e,"aegisStateView",t),vaultRegistry:ae(e,"vaultRegistry",t),variableInterestRate:ae(e,"variableInterestRate",t),oracleManager:ae(e,"oracleManager",t),limitOrderManager:ae(e,"limitOrderManager",t),dynamicFeeManager:ae(e,"dynamicFeeManager",t),poolManager:ae(e,"poolManager",t),positionManager:ae(e,"positionManager",t),stateView:ae(e,"stateView",t),uniswapV4Quoter:ae(e,"uniswapV4Quoter",t),permit2:ae(e,"permit2",t),weth9:ae(e,"weth9",t)});}function dl(e){if(!$e(e)||!Array.isArray(e.requiredContractKeys)||!$e(e.chains))throw new Error("Engine deployment manifest is malformed.");const t=new Set(e.requiredContractKeys.filter(o=>typeof o=="string"));if(t.size!==so.length||so.some(o=>!t.has(o)))throw new Error("Engine deployment manifest requiredContractKeys is incomplete.");const n=/* @__PURE__ */new Map();for(const[o,a]of Object.entries(e.chains)){const r=Number(o),i=`engineDeployments.chains.${o}`;if(!Number.isSafeInteger(r)||r<=0||String(r)!==o)throw new Error(`${i} must use a canonical positive chain ID.`);if(!$e(a)||!$e(a.contracts))throw new Error(`${i}.contracts is required.`);n.set(r,{version:ci(a.version,`${i}.version`),addresses:li(a.contracts,`${i}.contracts`)});}return n;}const gn=dl({chains:cl,requiredContractKeys:sl});function ml(e){if(!$e(e))throw new Error("Engine additional deployments are malformed.");const t=/* @__PURE__ */new Map(),n=new Set([...gn].map(([o,a])=>`${o}:${a.addresses.aegisHook.toLowerCase()}`));for(const[o,a]of Object.entries(e)){const r=`engineDeployments.additionalDeployments.${o}`;if(!o||o==="default"||!$e(a)||!$e(a.contracts))throw new Error(`${r}.contracts is required.`);const i=a.chainId;if(typeof i!="number"||!Number.isSafeInteger(i)||i<=0)throw new Error(`${r}.chainId must be a positive chain ID.`);const s=li(a.contracts,`${r}.contracts`),l=`${i}:${s.aegisHook.toLowerCase()}`;if(n.has(l))throw new Error(`${r}.contracts.aegisHook is duplicated on this chain.`);n.add(l),t.set(o,{chainId:i,version:ci(a.version,`${r}.version`),addresses:s});}return t;}const pl=ml(ll);function fl(e){const t=gn.get(e.chainId);if(t&&t.addresses.aegisHook.toLowerCase()===e.poolKey.hooks.toLowerCase())return{...t,name:"default"};for(const[n,o]of pl)if(o.chainId===e.chainId&&o.addresses.aegisHook.toLowerCase()===e.poolKey.hooks.toLowerCase())return{...o,name:n};return null;}function St(e){var t;return((t=gn.get(e))==null?void 0:t.version)??null;}function pe(e){var t;return((t=gn.get(e))==null?void 0:t.addresses)??null;}function Gf(e){const t=pe(e);if(!t)throw new Error(`No trusted Aegis Engine registry for chain ${e}.`);return t.aegisRouterV1;}const ui=[{name:"srcToken",type:"address"},{name:"dstToken",type:"address"},{name:"srcReceivers",type:"address[]"},{name:"srcAmounts",type:"uint256[]"},{name:"feeReceivers",type:"address[]"},{name:"feeAmounts",type:"uint256[]"},{name:"dstReceiver",type:"address"},{name:"amount",type:"uint256"},{name:"minReturnAmount",type:"uint256"},{name:"flags",type:"uint256"},{name:"permit",type:"bytes"}],Ra=[{name:"callTarget",type:"address"},{name:"approveTarget",type:"address"},{name:"targetData",type:"bytes"},{name:"desc",type:"tuple",components:ui},{name:"clientData",type:"bytes"}],hl=[{type:"function",name:"swap",stateMutability:"payable",inputs:[{name:"execution",type:"tuple",components:Ra}],outputs:[{name:"returnAmount",type:"uint256"},{name:"gasUsed",type:"uint256"}]},{type:"function",name:"swapGeneric",stateMutability:"payable",inputs:[{name:"execution",type:"tuple",components:Ra}],outputs:[{name:"returnAmount",type:"uint256"},{name:"gasUsed",type:"uint256"}]},{type:"function",name:"swapSimpleMode",stateMutability:"nonpayable",inputs:[{name:"caller",type:"address"},{name:"desc",type:"tuple",components:ui},{name:"executorData",type:"bytes"},{name:"clientData",type:"bytes"}],outputs:[{name:"returnAmount",type:"uint256"},{name:"gasUsed",type:"uint256"}]}],wl=0x40n,bl=0x80n,Un=wl|bl;class le extends _{constructor(n){super("Swap transaction data failed verification. Refresh the quote and try again.");j(this,"reason");this.name="AggregatedSwapCalldataError",this.reason=n;}}function kl(e,t){if(!t){if(e.feeReceivers.length!==0||e.feeAmounts.length!==0||(e.flags&Un)!==0n)throw new le("calldata contains fee receivers, amounts, or fee-mode flags for a fee-free quote");return;}if(!Number.isInteger(t.feeBps)||t.feeBps<=0||t.feeBps>1e4)throw new le(`invalid expected fee policy ${t.feeBps} bps`);if(e.feeReceivers.length!==1||e.feeAmounts.length!==1)throw new le(`calldata fee arrays must contain exactly one receiver and one amount; received ${e.feeReceivers.length} and ${e.feeAmounts.length}`);if(!w(e.feeReceivers[0],t.receiver))throw new le(`calldata routes fees to ${e.feeReceivers[0]}, expected ${t.receiver}`);if(e.feeAmounts[0]!==BigInt(t.feeBps))throw new le(`calldata fee ${e.feeAmounts[0]} bps does not match the reviewed ${t.feeBps} bps policy`);if((e.flags&Un)!==Un)throw new le(`calldata fee flags ${e.flags} do not encode an output-denominated bps fee`);}function vl(e){let t;try{t=cn({abi:hl,data:e});}catch{throw new le("calldata does not decode as a known MetaAggregationRouterV2 entrypoint");}return t.functionName==="swapSimpleMode"?t.args[1]:t.args[0].desc;}function El(e){const t=vl(e.data);if(!w(t.srcToken,e.inputToken))throw new le(`calldata swaps ${t.srcToken}, quote reviewed ${e.inputToken}`);if(!w(t.dstToken,e.outputToken))throw new le(`calldata pays out ${t.dstToken}, quote reviewed ${e.outputToken}`);if(t.amount!==e.amount)throw new le(`calldata pulls ${t.amount}, quote reviewed ${e.amount}`);if(!w(t.dstReceiver,e.recipient))throw new le(`calldata pays ${t.dstReceiver}, expected the connected account`);if(t.minReturnAmount<e.minReturnFloor)throw new le(`calldata slippage floor ${t.minReturnAmount} is below the reviewed minimum ${e.minReturnFloor}`);kl(t,e.feePolicy);const n=t.srcAmounts.reduce((o,a)=>o+a,0n);if(n>t.amount)throw new le(`calldata source transfers ${n} exceed the swap amount ${t.amount}`);}class Fe extends Error{constructor(n,o){super(o);j(this,"code");this.name="AegisContractGuardError",this.code=n;}}function yl(e,t=Date.now()){const n=Date.parse(e.expiresAt);if(Number.isNaN(n))throw new Fe("QUOTE_EXPIRED",`Quote expiry "${e.expiresAt}" is not a parseable timestamp; treating the quote as expired.`);if(t>=n)throw new Fe("QUOTE_EXPIRED",`Quote expired at ${e.expiresAt}; it must be re-fetched before signing.`);}function Il(e,t){if(!t.some(n=>w(n,e)))throw new Fe("ROUTER_NOT_ALLOWLISTED",`Transaction target ${e} is not an allowlisted router.`);}function Al(e,t){if(!t.some(n=>w(n,e)))throw new Fe("SPENDER_NOT_ALLOWLISTED",`Approval spender ${e} is not an allowlisted spender.`);}function gl(e,t){const n=go(e);if(n.toLowerCase()!==t.toLowerCase())throw new Fe("CALLDATA_HASH_MISMATCH",`Calldata hashes to ${n} but the build committed to ${t}.`);}function Sl(e,t){if(e!==t)throw new Fe("CHAIN_MISMATCH",`Wallet is on chain ${e} but the transaction targets chain ${t}.`);}const Cl="SDK-RPC-001";function Sn(e,t){return t?{request(n){return t.throwIfAborted(),e.request(n);}}:e;}function xl(){return typeof window>"u"?null:window.ethereum??null;}function Cn(e){return typeof e!="string"||!xr(e)?null:N(e);}function Tl(e){return!!(e&&typeof e=="object"&&typeof e.request=="function");}function Rl(e){return Tl(e)?{provider:e,account:null}:!e||typeof e!="object"?{provider:null,account:null}:{provider:e.provider??null,account:Cn(e.account)};}async function Bl(e){const t=await e.request({method:"eth_accounts"});return Cn(t==null?void 0:t[0]);}async function Pl(e){const t=await e.request({method:"eth_requestAccounts"});return Cn(t==null?void 0:t[0]);}async function Vt(e){const t=await e.request({method:"eth_chainId"});if(typeof t!="string"||!/^0x[0-9a-f]+$/i.test(t))return null;const n=Number.parseInt(t,16);return Number.isSafeInteger(n)?n:null;}function Ml(e){return`0x${e.toString(16)}`;}function Dl(e){const t=e,n=[t.message,t.shortMessage,t.details].filter(o=>typeof o=="string").join(" ").toLowerCase();return t.code===4902||n.includes("unrecognized chain")||n.includes("unknown chain")||n.includes("chain has not been added")||n.includes("not added to wallet");}function _l(e){return typeof e=="number"?{chainId:e}:e;}function Nl(e){var n,o;if((n=e.walletRpcUrls)!=null&&n.length)return e.walletRpcUrls;const t=(o=e.chain)==null?void 0:o.rpcUrls.default.http;return t!=null&&t.length?t:e.rpcUrls??[];}function Ol(e){var n,o;const t=(o=(n=e.chain)==null?void 0:n.blockExplorers)==null?void 0:o.default.url;return t?[t]:[];}async function Fl(e,t){var r,i;const n=_l(t),o=Ml(n.chainId),a={method:"wallet_switchEthereumChain",params:[{chainId:o}]};try{await e.request(a);return;}catch(s){if(!Dl(s))throw s;const l=Nl(n);if(l.length===0)throw s;const c=Ol(n);await e.request({method:"wallet_addEthereumChain",params:[{chainId:o,chainName:n.name??((r=n.chain)==null?void 0:r.name)??`Chain ${n.chainId}`,nativeCurrency:((i=n.chain)==null?void 0:i.nativeCurrency)??{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:l,...(c.length?{blockExplorerUrls:c}:{})}]});}await e.request({method:"wallet_switchEthereumChain",params:[{chainId:o}]});}function ql(e,t,n){var s,l;const o=t.length>1,a=t.map(c=>Os(c,{// Common RPC proxies and providers cap JSON-RPC batches at 100 entries.
|
|
25
|
+
U(57073,"0x2c73736abad6d184c68b66646ed1184f70e811acf0abc65f988af6163307957f","0x0200C29006150606B650577BBE7B6248F58470c1",6,"0x73E0C0d45E048D25Fc26Fa3159b0aA04BfA4Db98",8,1,"0xe449E013004DB4a5681E9622ca10c5Ba0eA610cc")],ti=/* @__PURE__ */new WeakSet();class It extends N{constructor(n="This is not a trusted direct-swap market in the trusted execution catalogue."){super(`${xa}: ${n}`);j(this,"ruleId",xa);this.name="DirectSwapMarketTrustError";}}function ni(e,t){return b(e.currency0,t.currency0)&&b(e.currency1,t.currency1)&&e.fee===t.fee&&e.tickSpacing===t.tickSpacing&&b(e.hooks,t.hooks);}function oi(e){try{if(!Y(je(e.poolKey),e.poolId))return!1;}catch{return!1;}if(e.token.chainId!==e.chainId||e.counterToken.chainId!==e.chainId||b(e.token.address,e.counterToken.address))return!1;const t=[e.token.address,e.counterToken.address];return t.some(n=>b(n,e.poolKey.currency0))&&t.some(n=>b(n,e.poolKey.currency1));}function Vc(e,t){if(e.chainId!==t.chainId||!Y(e.poolId,t.poolId)||!ni(e.poolKey,t.poolKey)||!b(e.router,t.router)||!b(e.permit2,t.permit2)||!b(e.quoter,t.quoter))return!1;const n=[e.token,e.counterToken];return t.tokens.every(o=>n.some(a=>b(a.address,o.address)&&a.chainId===t.chainId&&a.decimals===o.decimals));}function ai(e){return oi(e)?ti.has(e)?!0:ei.some(t=>Vc(e,t)):!1;}function En(e){if(!ai(e))throw new It();}function Hc(e,t){if(En(e),!ni(e.poolKey,t))throw new It("The executable quote no longer matches its trusted pool.");}function $f(e){if(!oi(e))throw new It("The host-authorized pool is internally inconsistent.");return ti.add(e),e;}function An(e){return ei.filter(t=>t.chainId===e);}function ri(e){if(!Number.isFinite(e)||e<0||e>2e3)throw new Error("Slippage must be between 0% and 20%.");}function St(e,t){return e*BigInt(1e4-t)/10000n;}function Wc(e,t){return ri(t),St(e,Math.round(t));}function $c(e,t){return ri(t),(e*BigInt(1e4+Math.round(t))+9999n)/10000n;}function Kc(e,t){return t<=0?0n:e*BigInt(t)/10000n;}function zc(e,t){return t<=0?e:(e*10000n+BigInt(1e4-t-1))/BigInt(1e4-t);}function Gc(e,t){if(t<=0)return e;const n=BigInt(1e4-t);return(e*10000n+n-1n)/n;}function on(e){return st(e),e;}function jc(e,t){if(b(t.address,e.currency0))return!0;if(b(t.address,e.currency1))return!1;throw new Error("Input token is not part of this pool.");}function Qc(e,t,n){const o=je(e.poolKey);if(!Y(o,e.poolId))throw new Error("Configured pool id does not match the pool key.");const a=b(t.address,e.poolKey.currency0)||b(t.address,e.poolKey.currency1),r=b(n.address,e.poolKey.currency0)||b(n.address,e.poolKey.currency1);if(!a||!r||b(t.address,n.address))throw new Error("Selected tokens do not match this direct pool.");}function Xc(e,t){if(Array.isArray(e)){const a=e[0],r=e[1];if(typeof a=="bigint"&&typeof r=="bigint")return{amount:a,gasEstimate:r};throw new Error("Unexpected V4 Quoter response.");}const n=e,o=n[t];if(typeof o=="bigint"&&typeof n.gasEstimate=="bigint")return{amount:o,gasEstimate:n.gasEstimate};throw new Error("Unexpected V4 Quoter response.");}async function Yc(e){var m,d,h,f;if((m=e.signal)!=null&&m.aborted)throw new DOMException("Quote request aborted","AbortError");if(e.amount<=0n)throw new Error("Enter an amount to swap.");on(e.amount),Qc(e.market,e.tokenIn,e.tokenOut),En(e.market);const t=e.market.poolKey,n=jc(t,e.tokenIn),o=((d=e.fee)==null?void 0:d.bps)??0;if(!Number.isInteger(o)||o<0||o>=1e4)throw new Error("Fee must be an integer between 0 and 9999 bps.");const a=e.mode==="exactOut"?on(zc(e.amount,o)):e.amount,r=e.mode==="exactOut"?await e.publicClient.simulateContract({address:e.market.quoter,abi:pn,functionName:"quoteExactOutputSingle",args:[{poolKey:t,zeroForOne:n,exactAmount:a,hookData:"0x"}],account:e.account}):await e.publicClient.simulateContract({address:e.market.quoter,abi:pn,functionName:"quoteExactInputSingle",args:[{poolKey:t,zeroForOne:n,exactAmount:e.amount,hookData:"0x"}],account:e.account});if((h=e.signal)!=null&&h.aborted)throw new DOMException("Quote request aborted","AbortError");const i=Xc(r.result,e.mode==="exactOut"?"amountIn":"amountOut"),s=e.mode==="exactOut"?i.amount:e.amount,c=e.mode==="exactOut"?a:i.amount,l=e.mode==="exactOut"?c-e.amount:Kc(c,o),p=c-l,u=e.mode==="exactOut"?p:Wc(p,e.slippageBps);return{mode:e.mode,poolKey:t,zeroForOne:n,amountIn:s,amountOut:p,grossAmountOut:c,amountOutMinimum:e.mode==="exactOut"?c:on(Gc(u,o)),amountInMaximum:e.mode==="exactOut"?on($c(s,e.slippageBps)):s,userAmountOutMinimum:u,feeAmount:l,feeBps:o,feeRecipient:o>0?((f=e.fee)==null?void 0:f.recipient)??null:null,gasEstimate:i.gasEstimate};}function ii(e,t){return e.mode===t.mode&&e.zeroForOne===t.zeroForOne&&b(e.poolKey.currency0,t.poolKey.currency0)&&b(e.poolKey.currency1,t.poolKey.currency1)&&e.poolKey.fee===t.poolKey.fee&&e.poolKey.tickSpacing===t.poolKey.tickSpacing&&b(e.poolKey.hooks,t.poolKey.hooks)&&e.feeBps===t.feeBps&&Xs(e.feeRecipient,t.feeRecipient);}function Kf(e,t){return ii(e,t)&&e.amountIn===t.amountIn&&e.amountOut===t.amountOut&&e.grossAmountOut===t.grossAmountOut&&e.amountOutMinimum===t.amountOutMinimum&&e.amountInMaximum===t.amountInMaximum&&e.userAmountOutMinimum===t.userAmountOutMinimum&&e.feeAmount===t.feeAmount;}function Ta(e,t){return!e||!ii(e,t)?{quote:t,priceMovedBeyondTolerance:!1}:t.mode==="exactIn"?t.amountOut<e.userAmountOutMinimum?{quote:t,priceMovedBeyondTolerance:!0}:{quote:{...t,amountOutMinimum:t.amountOutMinimum>e.amountOutMinimum?t.amountOutMinimum:e.amountOutMinimum,userAmountOutMinimum:t.userAmountOutMinimum>e.userAmountOutMinimum?t.userAmountOutMinimum:e.userAmountOutMinimum},priceMovedBeyondTolerance:!1}:t.amountIn>e.amountInMaximum?{quote:t,priceMovedBeyondTolerance:!0}:{quote:{...t,amountInMaximum:t.amountInMaximum<e.amountInMaximum?t.amountInMaximum:e.amountInMaximum},priceMovedBeyondTolerance:!1};}function Ra(e){return e.mode==="exactOut"?e.amountInMaximum:e.amountIn;}function Jc(e){return e.feeRecipient?e.mode==="exactIn"?e.feeBps>0?{recipient:e.feeRecipient,bips:e.feeBps}:null:e.feeAmount>0n?{recipient:e.feeRecipient,amount:e.feeAmount}:null:null;}const gn="uniswap-v4-aegis";class Fo extends Error{constructor({status:n,statusText:o,code:a,message:r,body:i}){super(r);j(this,"status");j(this,"statusText");j(this,"code");j(this,"body");this.name="KyberSwapApiError",this.status=n,this.statusText=o,this.code=a,this.body=i;}}class Uo extends Error{constructor({endpoint:n,issues:o}){const a=o[0],r=a?`: ${a.path.length>0?a.path.join("."):"(root)"} ${a.message}`:"";super(`KyberSwap response violated the expected contract at ${n}${r}`);j(this,"endpoint");j(this,"issues");this.name="KyberSwapContractError",this.endpoint=n,this.issues=o;}}class ye extends Error{constructor({endpoint:n,limit:o,actual:a,resource:r}){super(`REMOTE-LIMIT-001: KyberSwap ${n} ${r} exceeds the ${o} limit`+(a===void 0?".":` (received ${a}).`));j(this,"ruleId","REMOTE-LIMIT-001");j(this,"endpoint");j(this,"limit");j(this,"actual");this.name="KyberSwapResourceLimitError",this.endpoint=n,this.limit=o,this.actual=a;}}const si="https://aggregator-api.kyberswap.com",lo="Aegis",ci=2e4,Zc=1e6,el=32768,Pa=256,Ba=128,Ma=16,_a=2e4,tl=16384,uo=9e5,nl={1:"ethereum",10:"optimism",56:"bsc",130:"unichain",137:"polygon",143:"monad",146:"sonic",250:"fantom",999:"hyperevm",2020:"ronin",4326:"megaeth",5e3:"mantle",8453:"base",9745:"plasma",42161:"arbitrum",42793:"etherlink",43114:"avalanche",59144:"linea",80094:"berachain"};function li(e){const t=nl[e];if(!t)throw new Error(`KyberSwap does not support chain ${e}.`);return t;}function ol(e){var o,a;const t=(a=(o=e.headers)==null?void 0:o.get)==null?void 0:a.call(o,"content-length");if(!t||!/^\d+$/.test(t))return null;const n=Number(t);return Number.isSafeInteger(n)?n:null;}async function al(e,t,n){var i,s;const o=ol(e);if(o!==null&&o>n)throw await((i=e.body)==null?void 0:i.cancel().catch(()=>{})),new ye({endpoint:t,limit:n,actual:o,resource:"response bytes"});if((s=e.body)!=null&&s.getReader){const c=e.body.getReader(),l=new TextDecoder();let p=0,u="";for(;;){const{done:m,value:d}=await c.read();if(m)break;if(p+=d.byteLength,p>n)throw await c.cancel().catch(()=>{}),new ye({endpoint:t,limit:n,actual:p,resource:"response bytes"});u+=l.decode(d,{stream:!0});}return u+l.decode();}const a=await e.text(),r=new TextEncoder().encode(a).byteLength;if(r>n)throw new ye({endpoint:t,limit:n,actual:r,resource:"response bytes"});return a;}async function Vo(e,t,n=Zc){var o;if(!((o=e.body)!=null&&o.getReader)&&typeof e.text!="function"){const a=await e.json(),r=JSON.stringify(a),i=new TextEncoder().encode(r).byteLength;if(i>n)throw new ye({endpoint:t,limit:n,actual:i,resource:"response bytes"});return a;}return JSON.parse(await al(e,t,n));}function ui(e,t){let n=0;const o=(a,r,i)=>{if(n+=1,n>_a)throw new ye({endpoint:t,limit:_a,actual:n,resource:"JSON nodes"});if(i>Ma)throw new ye({endpoint:t,limit:Ma,actual:i,resource:"JSON depth"});if(typeof a=="string"){const l=t==="/route/build"&&r.length===1&&r[0]==="data"?uo:tl;if(a.length>l)throw new ye({endpoint:t,limit:l,actual:a.length,resource:`string at ${r.join(".")||"(root)"}`});return;}if(Array.isArray(a)){if(a.length>Pa)throw new ye({endpoint:t,limit:Pa,actual:a.length,resource:`array items at ${r.join(".")||"(root)"}`});a.forEach((c,l)=>o(c,[...r,String(l)],i+1));return;}if(!a||typeof a!="object")return;const s=Object.entries(a);if(s.length>Ba)throw new ye({endpoint:t,limit:Ba,actual:s.length,resource:`object keys at ${r.join(".")||"(root)"}`});for(const[c,l]of s)o(l,[...r,c],i+1);};o(e,[],0);}async function di(e){let t,n,o;try{const s=await Vo(e,"error",el);t=s,n=s.code,o=s.message;}catch(s){if(s instanceof ye)throw s;}const a=o?`: ${o.slice(0,300)}`:"",r=n!==void 0?` ${n}`:"",i=e.statusText||"Request failed";return new Fo({status:e.status,statusText:i,code:n,message:`KyberSwap API error${r}${a||`: ${i}`}`,body:t});}function mi(e){return e instanceof Fo?e.status===429||e.status>=500:e instanceof Uo||e instanceof ye?!1:e instanceof TypeError?!0:e instanceof Error&&e.name==="TimeoutError";}const rt=me.refine(e=>e.length<=78,"uint256 decimal string must contain at most 78 digits"),nt=C().max(256),rl=Ht({pool:C().max(256).optional(),tokenIn:z.optional(),tokenOut:z.optional(),swapAmount:rt.optional(),amountOut:rt.optional(),exchange:C().max(128).optional(),poolType:C().max(128).optional()}),il=Ht({tokenIn:z,tokenOut:z,amountIn:rt,amountOut:rt,gas:nt.optional(),gasEstimate:nt.optional(),gasUsd:nt.optional(),amountInUsd:nt.optional(),amountOutUsd:nt.optional(),priceImpact:k().optional(),route:q(q(rl).max(64)).max(64).optional(),routeComposition:q(Ht({name:C().max(128),part:k()})).max(128).optional()}),sl=Ht({routeSummary:il,routerAddress:z,requestId:C().max(256).optional()}),cl=Ht({amountIn:rt,amountOut:rt,gas:nt.optional(),gasUsd:nt.optional(),data:To.refine(e=>e.length<=uo,`calldata must contain at most ${uo} characters`),routerAddress:z,transactionValue:rt.optional(),requestId:C().max(256).optional()});function ll(e){ui(e,"/routes");const t=sl.safeParse(e);if(!t.success)throw new Uo({endpoint:"/routes",issues:t.error.issues});const n=e;return{...n,routerAddress:D(t.data.routerAddress),routeSummary:n.routeSummary};}function ul(e){ui(e,"/route/build");const t=cl.safeParse(e);if(!t.success)throw new Uo({endpoint:"/route/build",issues:t.error.issues});return{...e,data:t.data.data,routerAddress:D(t.data.routerAddress)};}async function dl({tokenIn:e,tokenOut:t,amountIn:n,chainId:o=1,origin:a,fee:r,liquiditySources:i="any",signal:s,timeoutMs:c=ci}){const l=new URLSearchParams({tokenIn:e,tokenOut:t,amountIn:n,gasInclude:"true"});a&&l.set("origin",a),i==="aegis"&&l.set("includedSources",gn),r&&(l.set("feeAmount",r.feeAmount),l.set("chargeFeeBy",r.chargeFeeBy),l.set("isInBps",String(r.isInBps)),l.set("feeReceiver",r.feeReceiver));const{signal:p,cleanup:u}=lt({signal:s,timeoutMs:c,timeoutMessage:"KyberSwap route request timed out."});try{const m=await fetch(`${si}/${li(o)}/api/v1/routes?${l}`,{method:"GET",headers:{Accept:"application/json","X-Client-Id":lo},signal:p});if(!m.ok)throw await di(m);const d=await Vo(m,"/routes");return ll(d.data);}finally{u();}}async function ml({routeSummary:e,sender:t,recipient:n,slippageBps:o,chainId:a=1,signal:r,timeoutMs:i=ci}){const s=Math.floor(Date.now()/1e3+600),{signal:c,cleanup:l}=lt({signal:r,timeoutMs:i,timeoutMessage:"KyberSwap route build timed out."});try{const p=await fetch(`${si}/${li(a)}/api/v1/route/build`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json","X-Client-Id":lo},body:JSON.stringify({routeSummary:e,sender:t,origin:t,recipient:n,slippageTolerance:o,deadline:s,enableGasEstimation:!1,source:lo}),signal:c});if(!p.ok)throw await di(p);const u=await Vo(p,"/route/build");return{...ul(u.data),deadline:s};}finally{l();}}const pi=[{name:"srcToken",type:"address"},{name:"dstToken",type:"address"},{name:"srcReceivers",type:"address[]"},{name:"srcAmounts",type:"uint256[]"},{name:"feeReceivers",type:"address[]"},{name:"feeAmounts",type:"uint256[]"},{name:"dstReceiver",type:"address"},{name:"amount",type:"uint256"},{name:"minReturnAmount",type:"uint256"},{name:"flags",type:"uint256"},{name:"permit",type:"bytes"}],Na=[{name:"callTarget",type:"address"},{name:"approveTarget",type:"address"},{name:"targetData",type:"bytes"},{name:"desc",type:"tuple",components:pi},{name:"clientData",type:"bytes"}],pl=[{type:"function",name:"swap",stateMutability:"payable",inputs:[{name:"execution",type:"tuple",components:Na}],outputs:[{name:"returnAmount",type:"uint256"},{name:"gasUsed",type:"uint256"}]},{type:"function",name:"swapGeneric",stateMutability:"payable",inputs:[{name:"execution",type:"tuple",components:Na}],outputs:[{name:"returnAmount",type:"uint256"},{name:"gasUsed",type:"uint256"}]},{type:"function",name:"swapSimpleMode",stateMutability:"nonpayable",inputs:[{name:"caller",type:"address"},{name:"desc",type:"tuple",components:pi},{name:"executorData",type:"bytes"},{name:"clientData",type:"bytes"}],outputs:[{name:"returnAmount",type:"uint256"},{name:"gasUsed",type:"uint256"}]}],fl=0x40n,hl=0x80n,Fn=fl|hl;class le extends N{constructor(n){super("Swap transaction data failed verification. Refresh the quote and try again.");j(this,"reason");this.name="AggregatedSwapCalldataError",this.reason=n;}}function wl(e,t){if(!t){if(e.feeReceivers.length!==0||e.feeAmounts.length!==0||(e.flags&Fn)!==0n)throw new le("calldata contains fee receivers, amounts, or fee-mode flags for a fee-free quote");return;}if(!Number.isInteger(t.feeBps)||t.feeBps<=0||t.feeBps>1e4)throw new le(`invalid expected fee policy ${t.feeBps} bps`);if(e.feeReceivers.length!==1||e.feeAmounts.length!==1)throw new le(`calldata fee arrays must contain exactly one receiver and one amount; received ${e.feeReceivers.length} and ${e.feeAmounts.length}`);if(!b(e.feeReceivers[0],t.receiver))throw new le(`calldata routes fees to ${e.feeReceivers[0]}, expected ${t.receiver}`);if(e.feeAmounts[0]!==BigInt(t.feeBps))throw new le(`calldata fee ${e.feeAmounts[0]} bps does not match the reviewed ${t.feeBps} bps policy`);if((e.flags&Fn)!==Fn)throw new le(`calldata fee flags ${e.flags} do not encode an output-denominated bps fee`);}function bl(e){let t;try{t=ln({abi:pl,data:e});}catch{throw new le("calldata does not decode as a known MetaAggregationRouterV2 entrypoint");}return t.functionName==="swapSimpleMode"?t.args[1]:t.args[0].desc;}function kl(e){const t=bl(e.data);if(!b(t.srcToken,e.inputToken))throw new le(`calldata swaps ${t.srcToken}, quote reviewed ${e.inputToken}`);if(!b(t.dstToken,e.outputToken))throw new le(`calldata pays out ${t.dstToken}, quote reviewed ${e.outputToken}`);if(t.amount!==e.amount)throw new le(`calldata pulls ${t.amount}, quote reviewed ${e.amount}`);if(!b(t.dstReceiver,e.recipient))throw new le(`calldata pays ${t.dstReceiver}, expected the connected account`);if(t.minReturnAmount<e.minReturnFloor)throw new le(`calldata slippage floor ${t.minReturnAmount} is below the reviewed minimum ${e.minReturnFloor}`);wl(t,e.feePolicy);const n=t.srcAmounts.reduce((o,a)=>o+a,0n);if(n>t.amount)throw new le(`calldata source transfers ${n} exceed the swap amount ${t.amount}`);}class Le extends Error{constructor(n,o){super(o);j(this,"code");this.name="AegisContractGuardError",this.code=n;}}function vl(e,t=Date.now()){const n=Date.parse(e.expiresAt);if(Number.isNaN(n))throw new Le("QUOTE_EXPIRED",`Quote expiry "${e.expiresAt}" is not a parseable timestamp; treating the quote as expired.`);if(t>=n)throw new Le("QUOTE_EXPIRED",`Quote expired at ${e.expiresAt}; it must be re-fetched before signing.`);}function yl(e,t){if(!t.some(n=>b(n,e)))throw new Le("ROUTER_NOT_ALLOWLISTED",`Transaction target ${e} is not an allowlisted router.`);}function Il(e,t){if(!t.some(n=>b(n,e)))throw new Le("SPENDER_NOT_ALLOWLISTED",`Approval spender ${e} is not an allowlisted spender.`);}function El(e,t){const n=xo(e);if(n.toLowerCase()!==t.toLowerCase())throw new Le("CALLDATA_HASH_MISMATCH",`Calldata hashes to ${n} but the build committed to ${t}.`);}function Al(e,t){if(e!==t)throw new Le("CHAIN_MISMATCH",`Wallet is on chain ${e} but the transaction targets chain ${t}.`);}const gl="SDK-RPC-001";function Sn(e,t){return t?{request(n){return t.throwIfAborted(),e.request(n);}}:e;}function Sl(){return typeof window>"u"?null:window.ethereum??null;}function Cn(e){return typeof e!="string"||!Mr(e)?null:D(e);}function Cl(e){return!!(e&&typeof e=="object"&&typeof e.request=="function");}function xl(e){return Cl(e)?{provider:e,account:null}:!e||typeof e!="object"?{provider:null,account:null}:{provider:e.provider??null,account:Cn(e.account)};}async function Tl(e){const t=await e.request({method:"eth_accounts"});return Cn(t==null?void 0:t[0]);}async function Rl(e){const t=await e.request({method:"eth_requestAccounts"});return Cn(t==null?void 0:t[0]);}async function Wt(e){const t=await e.request({method:"eth_chainId"});if(typeof t!="string"||!/^0x[0-9a-f]+$/i.test(t))return null;const n=Number.parseInt(t,16);return Number.isSafeInteger(n)?n:null;}function Pl(e){return`0x${e.toString(16)}`;}function Bl(e){const t=e,n=[t.message,t.shortMessage,t.details].filter(o=>typeof o=="string").join(" ").toLowerCase();return t.code===4902||n.includes("unrecognized chain")||n.includes("unknown chain")||n.includes("chain has not been added")||n.includes("not added to wallet");}function Ml(e){return typeof e=="number"?{chainId:e}:e;}function _l(e){var n,o;if((n=e.walletRpcUrls)!=null&&n.length)return e.walletRpcUrls;const t=(o=e.chain)==null?void 0:o.rpcUrls.default.http;return t!=null&&t.length?t:e.rpcUrls??[];}function Nl(e){var n,o;const t=(o=(n=e.chain)==null?void 0:n.blockExplorers)==null?void 0:o.default.url;return t?[t]:[];}async function Dl(e,t){var r,i;const n=Ml(t),o=Pl(n.chainId),a={method:"wallet_switchEthereumChain",params:[{chainId:o}]};try{await e.request(a);return;}catch(s){if(!Bl(s))throw s;const c=_l(n);if(c.length===0)throw s;const l=Nl(n);await e.request({method:"wallet_addEthereumChain",params:[{chainId:o,chainName:n.name??((r=n.chain)==null?void 0:r.name)??`Chain ${n.chainId}`,nativeCurrency:((i=n.chain)==null?void 0:i.nativeCurrency)??{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:c,...(l.length?{blockExplorerUrls:l}:{})}]});}await e.request({method:"wallet_switchEthereumChain",params:[{chainId:o}]});}function Ol(e,t,n){var s,c;const o=t.length>1,a=t.map(l=>Fs(l,{// Common RPC proxies and providers cap JSON-RPC batches at 100 entries.
|
|
26
26
|
batch:{batchSize:100},retryCount:o?0:2,retryDelay:150,// With a fallback URL available, give up on a hung endpoint sooner.
|
|
27
|
-
timeout:o?5e3:1e4})),r=!!((s=e.contracts)!=null&&s.multicall3);return((((
|
|
27
|
+
timeout:o?5e3:1e4})),r=!!((s=e.contracts)!=null&&s.multicall3);return((((c=Ur[e.id])==null?void 0:c.length)??0)>0||Ro(e.id)!==null)&&!r&&console.warn(`[AegisCore][${gl}] Trusted chain ${e.id} (${e.name}) is missing chain.contracts.multicall3 metadata; Multicall3 batching is disabled and reads will use individual eth_call requests.`),Us({chain:e,// Coalesce concurrent readContract calls (the widget's per-token balance
|
|
28
28
|
// and allowance polls) into one Multicall3 aggregate3 eth_call per 16ms —
|
|
29
29
|
// public RPCs meter per call. Only when the chain declares a multicall3
|
|
30
30
|
// deployment; custom host chains without one keep plain eth_calls.
|
|
31
|
-
...(!n&&r?{batch:{multicall:{wait:16}}}:{}),transport:n?
|
|
31
|
+
...(!n&&r?{batch:{multicall:{wait:16}}}:{}),transport:n?gt(n,{retryCount:0}):a.length===1?a[0]:Vs(a,{retryCount:1,retryDelay:150})});}function zf(e,t){const n=e;if(!n.on||!n.removeListener)return()=>{};const o=()=>{var r;return(r=t.onAccountsChanged)==null?void 0:r.call(t);},a=()=>{var r;return(r=t.onChainChanged)==null?void 0:r.call(t);};return n.on("accountsChanged",o),n.on("chainChanged",a),()=>{var r,i;(r=n.removeListener)==null||r.call(n,"accountsChanged",o),(i=n.removeListener)==null||i.call(n,"chainChanged",a);};}function Un(e,t){try{t==null||t();}catch(n){console.warn(`[AegisCore] ${e} callback failed`,n);}}function Da(e,t,n){try{t==null||t(n);}catch(o){console.warn(`[AegisCore] ${e} callback failed`,o);}}async function fi(e){var c,l,p,u;(c=e.signal)==null||c.throwIfAborted();const t=await Wt(e.provider);if((l=e.signal)==null||l.throwIfAborted(),t===null)throw new Le("CHAIN_MISMATCH",e.unreadableChainMessage);Al(t,e.chain.id),(p=e.signal)==null||p.throwIfAborted(),Un("onWalletRequest",e.onWalletRequest),(u=e.signal)==null||u.throwIfAborted();const n=await e.submit(),o=m=>Un("onTransactionObservation",()=>{var d;return(d=e.onTransactionObservation)==null?void 0:d.call(e,m);});o({hash:n,status:"submitted"}),Da("onHash",e.onHash,n),Da("onSubmitted",e.onSubmitted,n);let a=n,r=!1;const i=await Ys({publicClient:e.publicClient,hash:n,timeoutMs:e.timeoutMs,onReplaced:m=>{const d=a;a=m.transaction.hash,r||(r=m.reason!=="repriced"),o({hash:a,replacesHash:d,status:"submitted",...(r?{executionChanged:!0}:{})}),Un("onHash",()=>{var h;return(h=e.onHash)==null?void 0:h.call(e,a,{replacesHash:d,executionChanged:r});});}}),s=i.transactionHash===a?{}:{replacesHash:a};if(r)throw o({hash:i.transactionHash,...s,status:"cancelled"}),new N(e.cancelledMessage,{kind:"tx-cancelled"});if(i.status==="reverted")throw o({hash:i.transactionHash,...s,status:"reverted"}),new N(e.revertedMessage,{kind:"tx-reverted"});return o({hash:i.transactionHash,...s,status:"confirmed"}),i;}const qe=2n**160n-1n,Ie=2n**256n-1n,hi=[{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"spender",type:"address"},{name:"amount",type:"uint256"}],outputs:[]}],mo=Ie/2n,ql=qe/2n;function Ll(e){return e>=mo;}function Fl(e){return e>=ql;}const Ul="0x1626ba7e",Vl=[{type:"function",name:"isValidSignature",stateMutability:"view",inputs:[{name:"hash",type:"bytes32"},{name:"signature",type:"bytes"}],outputs:[{name:"magicValue",type:"bytes4"}]}],xn=600,Hl=1800,Ho=1800,Wl=xn,wi=2**48-1;function $l(e){try{e==null||e();}catch(t){console.warn("[AegisCore] onWalletRequest callback failed",t);}}async function Wo(e){return(await fi({provider:e.provider,publicClient:e.publicClient,chain:e.chain,signal:e.signal,timeoutMs:Js,submit:e.submit,unreadableChainMessage:"Wallet chain could not be read before signing; refusing to send the approval.",cancelledMessage:`${e.label} was replaced or cancelled in the wallet.`,revertedMessage:`${e.label} reverted on-chain.`,onWalletRequest:e.onWalletRequest,onHash:e.onHash,onSubmitted:e.onSubmitted})).transactionHash;}const Kl={PermitBatch:[{name:"details",type:"PermitDetails[]"},{name:"spender",type:"address"},{name:"sigDeadline",type:"uint256"}],PermitDetails:[{name:"token",type:"address"},{name:"amount",type:"uint160"},{name:"expiration",type:"uint48"},{name:"nonce",type:"uint48"}]};async function $o(e){var a;(a=e.signal)==null||a.throwIfAborted();const t=e.amount??Ie,n=Gt({account:e.account,chain:e.chain,transport:gt(Sn(e.provider,e.signal))}),{request:o}=await e.publicClient.simulateContract({address:e.token,abi:hi,functionName:"approve",args:[e.permit2,t],account:e.account});return Wo({provider:e.provider,publicClient:e.publicClient,chain:e.chain,signal:e.signal,label:"Token approval",submit:()=>n.writeContract({...o,chain:e.chain}),onWalletRequest:e.onWalletRequest,onHash:e.onHash,onSubmitted:e.onSubmitted});}function Ct(e){return e.publicClient.readContract({address:e.token,abi:to,functionName:"allowance",args:[e.owner,e.spender]});}async function zl(e){var a;(a=e.signal)==null||a.throwIfAborted();const t=e.amount??Ie,n=Gt({account:e.account,chain:e.chain,transport:gt(e.provider)}),{request:o}=await e.publicClient.simulateContract({address:e.token,abi:hi,functionName:"approve",args:[e.spender,t],account:e.account});return Wo({provider:e.provider,publicClient:e.publicClient,chain:e.chain,signal:e.signal,label:"Token approval",submit:()=>n.writeContract({...o,chain:e.chain}),onWalletRequest:e.onWalletRequest,onHash:e.onHash,onSubmitted:e.onSubmitted});}async function bi(e){var i;(i=e.signal)==null||i.throwIfAborted();const t=e.amount??qe,n=t>qe?qe:t,o=e.expiration??wi,a=Gt({account:e.account,chain:e.chain,transport:gt(Sn(e.provider,e.signal))}),{request:r}=await e.publicClient.simulateContract({address:e.permit2,abi:Kr,functionName:"approve",args:[e.token,e.router,n,o],account:e.account});return Wo({provider:e.provider,publicClient:e.publicClient,chain:e.chain,signal:e.signal,label:"Permit2 approval",submit:()=>a.writeContract({...r,chain:e.chain}),onWalletRequest:e.onWalletRequest,onHash:e.onHash,onSubmitted:e.onSubmitted});}function ze(e){return e.publicClient.readContract({address:e.permit2,abi:Kr,functionName:"allowance",args:[e.account,e.token,e.router]});}function Tn(e,t,n="exact"){const[o,a]=e,r=Math.floor(Date.now()/1e3);return(n==="max"?Fl(o):o>=t)&&Number(a)>r+Wl;}function ki(e){return{domain:{name:"Permit2",chainId:e.chainId,verifyingContract:e.permit2},types:Kl,primaryType:"PermitBatch",message:e.permitBatch};}function Gl(e){return e instanceof $s&&e.walk(t=>t instanceof Ks||t instanceof zs)!==null;}async function jl(e){const t=ki({chainId:e.chainId,permit2:e.permit2,permitBatch:e.signed.permitBatch});if(e.ownerCode&&e.ownerCode!=="0x")return(await e.publicClient.readContract({address:e.signed.owner,abi:Vl,functionName:"isValidSignature",// Permit2 staticcalls isValidSignature itself, and an ERC-7579 account
|
|
32
32
|
// forwards that caller to its validator as
|
|
33
33
|
// isValidSignatureWithSender(sender, ...). Without an account viem
|
|
34
34
|
// sends the eth_call from the zero address, so a caller-dependent
|
|
35
35
|
// account would answer a different question here than at settlement.
|
|
36
|
-
account:e.permit2,args:[
|
|
37
|
-
batch:!1});if(!a)throw new _("Route quote returned no data. Try again.");const[r,...i]=Zn({abi:wa,functionName:"aggregate3",data:a});return{blockNumber:r!=null&&r.success?Zn({abi:Ma,functionName:"getBlockNumber",data:r.returnData}):0n,quotes:t.map((l,c)=>eu(l,i[c]))};}function nu(e){let t=null;for(const n of e)n&&(!t||n.amountOut>t.amountOut)&&(t=n);return t;}function Da(e){if(!e)return 0;const{feeAmount:t,chargeFeeBy:n,isInBps:o}=e,a=Number(t);if(!o||n!=="currency_out"||!Number.isInteger(a)||a<0||a>=1e4)throw new _("Unsupported fee policy for Aegis routing.");return a;}function _a(e,t){if(e!=="aegis")throw new _(`Smart routing on ${t} uses Aegis pools only. Set liquiditySources to 'aegis'.`,{kind:"validation",retryable:!1});}function Na(e,t){const n=t.routeSummary.route,o=(n==null?void 0:n.length)===1?n[0]:[];if(o.length<1||o.length>Vo)throw new yt("A routed swap must be one path of one to three trusted pools.");const a=In(e);let r=It(t.routeSummary.tokenIn);const i=[r],s=o.map(l=>{const c=a.find(m=>{var d;return m.poolId.toLowerCase()===((d=l.pool)==null?void 0:d.toLowerCase());}),p=c?$o(c,r):null;if(!c||!p||i.some(m=>w(m,p))||!l.tokenIn||!w(l.tokenIn,r)||!l.tokenOut||!w(l.tokenOut,p))throw new yt("The route leaves the trusted pool catalogue.");const u={pool:c,currencyIn:r,currencyOut:p};return i.push(p),r=p,u;});if(!w(r,It(t.routeSummary.tokenOut)))throw new yt("The route does not end at the output token.");return s;}const ou=e=>`0x${e.map(t=>t.toString(16).padStart(2,"0")).join("")}`;function au(e,t,n){const o=A=>{throw new le(A);};let a=cn({abi:Et,data:n.data});if(a.functionName==="multicall"){const[A,g,...C]=a.args[0];(!A||!g||C.length>0)&&o("unexpected multicall shape");const M=cn({abi:Et,data:A});if(M.functionName!=="permitBatch")return o("first multicall entry is not a permit");const[q,W]=M.args,[G,...te]=W.details;(!w(q,n.recipient)||!w(W.spender,t)||!G||te.length>0||!w(G.token,n.inputToken)||G.amount<n.amount)&&o("permit does not match the swap"),a=cn({abi:Et,data:g});}if(a.functionName!=="execute")return o("calldata is not a router execute");const[r,...i]=a.args[0],s=n.feePolicy,l=ou([de.SWAP_EXACT_IN,de.SETTLE,...(s?[de.TAKE_PORTION]:[]),de.TAKE,de.TAKE]);if(!r||i.length>0||!r.requiresV4Unlock||r.actions.toLowerCase()!==l)return o("unexpected router actions");const[c,p,...u]=r.params,m=It(n.inputToken),d=It(n.outputToken),[h]=tn(Hr,c);(!w(h.currencyIn,m)||h.amountIn!==n.amount)&&o("swap input differs from the quote");const f=In(e);let b=m;for(const A of h.path)(!f.some(C=>{const M=$o(C,b);return M!==null&&w(M,A.intermediateCurrency)&&C.poolKey.fee===A.fee&&C.poolKey.tickSpacing===A.tickSpacing&&w(C.poolKey.hooks,A.hooks);})||A.hookData!=="0x")&&o("path leaves the trusted pool catalogue"),b=A.intermediateCurrency;(h.path.length<1||h.path.length>Vo||!w(b,d))&&o("path does not end at the output token");const[k,E,T]=tn(Wr,p);if((!w(k,m)||E!==n.amount||!T)&&o("settlement differs from the quote"),s){const[A,g,C]=tn(Kr,u.shift());(!w(A,d)||!w(g,s.receiver)||C!==BigInt(s.feeBps))&&o("fee take differs from the fee policy");}const[S,B]=u.map(A=>tn(pn,A));(!w(S[0],d)||!w(S[1],n.recipient)||S[2]<n.minReturnFloor)&&o("minimum payout is below the reviewed floor"),(!w(B[0],d)||!w(B[1],n.recipient)||B[2]!==0n)&&o("surplus payout does not go to the account");}function ru(e){const[t]=In(e),n=En[e];if(!t||!n)throw new Error(`No trusted Aegis pools for chain ${e}.`);const{router:o,permit2:a}=t;let r;const i=s=>l=>l===e?s:void 0;return{id:"aegis",label:"Aegis routing",trustedRouter:i(o),permit2:i(a),async quote({tokenIn:s,tokenOut:l,amountIn:c,fee:p,liquiditySources:u,publicClient:m,signal:d}){_a(u,n.name);const h=Zl(e,s,l);if(h.length===0)throw new it("no-route","no trusted path between these tokens");const f=m??r??(r=ql(n.chain,n.rpcUrls)),{blockNumber:b,quotes:k}=await tu(f,h,c);d==null||d.throwIfAborted();const E=nu(k);if(!E)throw new it("no-route","every candidate quote failed");const T=E.amountOut-E.amountOut*BigInt(Da(p))/10000n;return{routerAddress:o,blockNumber:b,routeSummary:{tokenIn:s,tokenOut:l,amountIn:c.toString(),amountOut:T.toString(),gas:E.gasEstimate.toString(),route:[E.route.map(S=>({pool:S.pool.poolId,tokenIn:S.currencyIn,tokenOut:S.currencyOut,exchange:An}))],...(p?{extraFee:p}:{})}};},validateRoute(s,l){_a(l,n.name),bi(s.routeSummary.route),Na(e,s);},async build({route:s,recipient:l,amountOutMinimum:c,permit:p}){const u=Na(e,s),m=s.routeSummary.extraFee,d=Da(m),h=BigInt(1e4-d),f=Math.floor(Date.now()/1e3)+xn,b=xc({currencyIn:u[0].currencyIn,path:wi(u),amountIn:BigInt(s.routeSummary.amountIn),amountOutMinimum:(c*10000n+h-1n)/h,amountOutNetMinimum:c,recipient:l,deadline:BigInt(f),permit:p,fee:m&&d>0?{recipient:m.feeReceiver,bips:d}:null});return{amountIn:s.routeSummary.amountIn,amountOut:s.routeSummary.amountOut,gas:s.routeSummary.gas,data:b.calldata,routerAddress:o,transactionValue:b.value.toString(),deadline:f};},validateCalldata:s=>au(e,o,s)};}const iu=/* @__PURE__ */new Set([4008,40011]);class it extends _{constructor(n,o){super("No Aegis route for this pair.",{kind:"quote",retryable:!0});j(this,"reason");j(this,"detail");this.name="NoAegisRouteError",this.reason=n,this.detail=o;}}function bi(e){if(!Array.isArray(e)||e.length===0)throw new it("non-aegis-leg","route has no legs");for(const t of e){if(!Array.isArray(t)||t.length===0)throw new it("non-aegis-leg","route contains an empty path");for(const n of t)if((n==null?void 0:n.exchange)!==An)throw new it("non-aegis-leg",`leg ${(n==null?void 0:n.pool)??"(unknown pool)"} uses ${(n==null?void 0:n.exchange)??"no exchange tag"}`);}}function su(e){return e instanceof No&&e.code!==void 0&&iu.has(e.code)?new it("no-route",e.message):e;}const cu=Object.fromEntries(qr.map(e=>[e,sc])),lu={id:"kyberswap",label:"KyberSwap",trustedRouter:e=>cu[e],async quote({amountIn:e,liquiditySources:t,publicClient:n,...o}){try{return await rl({...o,amountIn:e.toString(),liquiditySources:t});}catch(a){throw t==="aegis"?su(a):a;}},build:({route:e,amountOutMinimum:t,permit:n,...o})=>il({...o,routeSummary:e.routeSummary}),validateRoute(e,t){t==="aegis"&&bi(e.routeSummary.route);},validateCalldata:El};let uu;function jt(e){if(e===ke)return uu??(uu=ru(ke));if(!qr.includes(e))throw new _(`Aggregated swaps are not supported on chain ${e}.`);return lu;}const du=2,mu="Route temporarily unavailable. Refresh the quote and try again.";function Qf(e,t){return si(e)?mu:Xs(e,t);}class Oa extends _{constructor({field:n,expected:o,actual:a}){super("Swap route changed unexpectedly. Refresh the quote and try again.");j(this,"field");j(this,"expected");j(this,"actual");this.name="AggregatedSwapBuildMismatchError",this.field=n,this.expected=o,this.actual=a;}}function pu(e,t){return e>t?e:t;}function fu(e,t){if(!Number.isFinite(t)||t<0||t>2e3)throw new _("Slippage must be between 0% and 20%.");return gt(e,Math.round(t));}const hu=1;function wu(e,t,n){if(e<=0n||t<=0n||t>=e)return 0;const o=Number((e-t)*10000n/e);return Math.max(0,Math.min(n,o)-hu);}function bu(e,t){if(t<=0)return 0n;const n=BigInt(1e4-t);return(e*10000n+n-1n)/n-e;}const ku=200;function ki(e){if(e===void 0)return ic;if(!Number.isInteger(e)||e<0||e>ku)throw new _("Swap fee configuration is invalid.");return e;}function vu(e,t){const n=ki(t);return vi(e,n)?n:0;}function vi(e,t){return e!==Z&&e!==ke||t===0?null:{feeAmount:String(t),chargeFeeBy:"currency_out",isInBps:!0,feeReceiver:no};}function Fa(e){return w(e.address,kn);}function Eu(e){const t=jt(e),n=t.trustedRouter(e);if(!n)throw new _(`${t.label} router is not trusted for chain ${e}.`);return n;}function Ei(e,t){lo(e,t);}function qa(e,t){if(t==="aegis"&&(e.liquiditySources!=="aegis"||e.hops.length===0||e.hops.some(n=>n.dex!==An)))throw new it("non-aegis-leg","quote is not an Aegis-only route");}function lo(e,t){if(!w(e,Eu(t))){const{label:n}=jt(t);throw new _(`${n} returned an untrusted router. Refresh the quote and try again.`);}}function yu(e,t,n,o){const a=e.routeSummary;if(!w(a.tokenIn,t.address))throw new _("KyberSwap returned a route for a different input token.");if(!w(a.tokenOut,n.address))throw new _("KyberSwap returned a route for a different output token.");if(BigInt(a.amountIn)!==o)throw new _("KyberSwap returned a route for a different input amount.");}function Iu(e,t,n){const o=e!=null&&e.transactionValue?BigInt(e.transactionValue):0n;if(!Fa(t)&&o!==0n)throw new _("KyberSwap returned unexpected native value for an ERC-20 swap.");if(Fa(t)&&o!==0n&&o!==n)throw new _("KyberSwap returned unexpected native value for this swap.");return o;}function Ft(e){if(e===void 0)return;const t=Number(e);return Number.isFinite(t)&&t>=0?t:void 0;}function Au(e,t,n){if(typeof e.priceImpact=="number"&&Number.isFinite(e.priceImpact))return e.priceImpact;const o=Ft(e.amountInUsd),a=Ft(e.amountOutUsd);if(!o||!a||t<=0n)return null;const r=a*(1+Number(n)/Number(t));return(o-r)/o;}function gu(e){const t=e.routeSummary.gasEstimate??e.routeSummary.gas??"0";return Ho(t)??0n;}function Ho(e){if(e!==void 0)try{return BigInt(e);}catch{return;}}function Su(e,t,n){const o=BigInt(e.amountIn);if(o!==t)throw new Oa({field:"amountIn",expected:t,actual:o});const a=BigInt(e.amountOut);if(a<n)throw new Oa({field:"amountOut",expected:n,actual:a});}function Cu(e){var t;return((t=e.routeSummary.route)==null?void 0:t.flat())??[];}function xu(e,t,n){const o=Cu(e);return o.length?o.map(a=>({dex:a.exchange||a.poolType||"Unknown",inputToken:t,outputToken:n,part:0})):(e.routeSummary.routeComposition||[]).map(a=>({dex:a.name||"Unknown",inputToken:t,outputToken:n,part:a.part||0}));}function La(e,t,n){var r;if(w(e,t))return!0;const o=(r=pe(n))==null?void 0:r.weth9,a=i=>Ae(i)||!!(o&&w(i,o));return a(e)&&a(t);}function Tu(e,t,n){var r;const o=e.routeSummary.route;if(!(o!=null&&o.length))return;const a=[];for(const i of o){const s=[];for(const c of i){if(!c.pool||!c.tokenIn||!c.tokenOut)return;const p=s[s.length-1];if(p&&!w(p.tokenOut,c.tokenIn))return;s.push({pool:c.pool,tokenIn:c.tokenIn,tokenOut:c.tokenOut,source:c.exchange||c.poolType||"Unknown"});}if(s.length===0||!La(s[0].tokenIn,e.routeSummary.tokenIn,n)||!La(s[s.length-1].tokenOut,e.routeSummary.tokenOut,n))return;const l=Ho((r=i[0])==null?void 0:r.swapAmount);a.push({amountIn:l??(o.length===1?t:void 0),legs:s});}if(!(a.every(i=>i.amountIn!==void 0)&&a.reduce((i,s)=>i+s.amountIn,0n)!==t))return a;}async function Ua(e,t,n,o,a="exactIn",r,i,s,l,c={}){const p=c.liquiditySources??"any",u=ki(c.outputFeeBps);if(a==="exactOut")throw new _("Exact output is not supported for aggregated routes.");if(e.chainId!==t.chainId)throw new _("Input and output tokens must be on the same chain.");const m=jt(e.chainId);if(n<=0n)throw new _("Enter an amount to swap.");if(l&&!r)throw new _("A reviewed swap floor requires a connected account.");if(l&&l.reviewedAmountOutMinimum<=0n)throw new _("The reviewed swap minimum must be greater than zero.");const d=vi(e.chainId,u),h=r?du:1;let f;for(let b=0;b<h;b+=1){const k=await m.quote({tokenIn:e.address,tokenOut:t.address,amountIn:n,chainId:e.chainId,origin:r,fee:d,liquiditySources:p,publicClient:s,signal:i});lo(k.routerAddress,e.chainId),yu(k,e,t,n),m.validateRoute(k,p);const E=BigInt(k.routeSummary.amountOut),T=d?u:0,S=bu(E,T),B=fu(E,o),A=l==null?void 0:l.reviewedAmountOutMinimum,g=A!==void 0&&E<A,C=A===void 0?B:pu(B,A);let M=null;try{M=r&&!g?await m.build({route:k,sender:r,recipient:r,slippageBps:wu(E,C,o),amountOutMinimum:C,permit:l==null?void 0:l.permit,chainId:e.chainId,signal:i}):null;}catch(W){if(f=W,r&&b<h-1&&si(W))continue;throw W;}if(M&&r){if(lo(M.routerAddress,e.chainId),!w(M.routerAddress,k.routerAddress))throw new _("Swap route changed unexpectedly. Refresh the quote and try again.");Su(M,n,C),m.validateCalldata({data:M.data,inputToken:e.address,outputToken:t.address,amount:n,recipient:r,minReturnFloor:C,feePolicy:d?{receiver:no,feeBps:u}:null});}const q=Iu(M,e,n);return{inputToken:e,outputToken:t,amountIn:n,amountOut:E,gasEstimate:Ho(M==null?void 0:M.gas)??gu(k),hops:xu(k,e,t),routePaths:Tu(k,n,e.chainId),liquiditySources:p,routerAddress:(M==null?void 0:M.routerAddress)??k.routerAddress,calldata:(M==null?void 0:M.data)??null,// Hash commitment for assertCalldataHash: executeKyberSwap re-verifies
|
|
36
|
+
account:e.permit2,args:[Hs(t),e.signed.signature]}).catch(a=>{if(Gl(a))return null;throw a;}))===Ul;const n=Ws(e.signed.signature);return n!==64&&n!==65?!1:e.publicClient.verifyTypedData({...t,address:e.signed.owner,signature:e.signed.signature,mode:"eoa"});}async function Ql(e){var s,c,l,p,u;(s=e.signal)==null||s.throwIfAborted();const t=await(e.allowanceRead??ze(e));if((c=e.signal)==null||c.throwIfAborted(),Tn(t,e.amount,e.sizing))return null;const[,,n]=t,o=Math.floor(Date.now()/1e3),a={details:[{token:e.token,amount:e.sizing==="max"||e.amount>qe?qe:e.amount,expiration:o+Ho,nonce:Number(n)}],spender:e.router,sigDeadline:BigInt(o+Hl)},r=Gt({account:e.account,chain:e.chain,transport:gt(e.provider)});(l=e.signal)==null||l.throwIfAborted(),$l(e.onWalletRequest),(p=e.signal)==null||p.throwIfAborted();const i=await r.signTypedData({account:e.account,...ki({chainId:e.chainId,permit2:e.permit2,permitBatch:a})});return(u=e.signal)==null||u.throwIfAborted(),{owner:e.account,permitBatch:a,signature:i};}const Oa="0xcA11bde05977b3631167028862bE2a173976CA11",Ko=3,Xl=32,qa=[{type:"function",name:"getBlockNumber",stateMutability:"view",inputs:[],outputs:[{name:"blockNumber",type:"uint256"}]}];function Et(e){return b(e,vn)?ie:e;}function zo(e,t){return b(e.poolKey.currency0,t)?e.poolKey.currency1:b(e.poolKey.currency1,t)?e.poolKey.currency0:null;}function vi(e){return e.map(t=>({poolKey:t.pool.poolKey,currencyOut:t.currencyOut}));}function Yl(e,t,n,o=Xl){var l;const a=An(e),r=Et(t),i=Et(n),s=[];if(b(r,i))return s;let c=[[]];for(let p=0;p<Ko&&c.length>0;p+=1){const u=[];for(const m of c){const d=((l=m.at(-1))==null?void 0:l.currencyOut)??r;for(const h of a){const f=zo(h,d);if(!f||m.some(v=>b(v.currencyIn,f)))continue;const w=[...m,{pool:h,currencyIn:d,currencyOut:f}];if(!b(f,i))u.push(w);else if(s.push(w)>=o)return s;}}c=u;}return s;}function Jl(e,t){if(!(t!=null&&t.success))return null;try{const[n,o]=no({abi:pn,functionName:"quoteExactInput",data:t.returnData});return n>0n?{route:e,amountOut:n,gasEstimate:o}:null;}catch{return null;}}async function Zl(e,t,n){const o=[{target:Oa,allowFailure:!0,callData:De({abi:qa,functionName:"getBlockNumber"})},...t.map(c=>({target:c[0].pool.quoter,allowFailure:!0,callData:De({abi:pn,functionName:"quoteExactInput",args:[{exactCurrency:c[0].currencyIn,path:Zr(vi(c)),exactAmount:n}]})}))],{data:a}=await e.call({to:Oa,data:De({abi:Ia,functionName:"aggregate3",args:[o]}),// Already an aggregate; never re-wrap it in the client's own multicall batch.
|
|
37
|
+
batch:!1});if(!a)throw new N("Route quote returned no data. Try again.");const[r,...i]=no({abi:Ia,functionName:"aggregate3",data:a});return{blockNumber:r!=null&&r.success?no({abi:qa,functionName:"getBlockNumber",data:r.returnData}):0n,quotes:t.map((c,l)=>Jl(c,i[l]))};}function eu(e){let t=null;for(const n of e)n&&(!t||n.amountOut>t.amountOut)&&(t=n);return t;}function La(e){if(!e)return 0;const{feeAmount:t,chargeFeeBy:n,isInBps:o}=e,a=Number(t);if(!o||n!=="currency_out"||!Number.isInteger(a)||a<0||a>=1e4)throw new N("Unsupported fee policy for Aegis routing.");return a;}function Fa(e,t){if(e!=="aegis")throw new N(`Smart routing on ${t} uses Aegis pools only. Set liquiditySources to 'aegis'.`,{kind:"validation",retryable:!1});}function Ua(e,t){const n=t.routeSummary.route,o=(n==null?void 0:n.length)===1?n[0]:[];if(o.length<1||o.length>Ko)throw new It("A routed swap must be one path of one to three trusted pools.");const a=An(e);let r=Et(t.routeSummary.tokenIn);const i=[r],s=o.map(c=>{const l=a.find(m=>{var d;return m.poolId.toLowerCase()===((d=c.pool)==null?void 0:d.toLowerCase());}),p=l?zo(l,r):null;if(!l||!p||i.some(m=>b(m,p))||!c.tokenIn||!b(c.tokenIn,r)||!c.tokenOut||!b(c.tokenOut,p))throw new It("The route leaves the trusted pool catalogue.");const u={pool:l,currencyIn:r,currencyOut:p};return i.push(p),r=p,u;});if(!b(r,Et(t.routeSummary.tokenOut)))throw new It("The route does not end at the output token.");return s;}const tu=e=>`0x${e.map(t=>t.toString(16).padStart(2,"0")).join("")}`;function nu(e,t,n){const o=S=>{throw new le(S);};let a=ln({abi:yt,data:n.data});if(a.functionName==="multicall"){const[S,E,...R]=a.args[0];(!S||!E||R.length>0)&&o("unexpected multicall shape");const _=ln({abi:yt,data:S});if(_.functionName!=="permitBatch")return o("first multicall entry is not a permit");const[L,$]=_.args,[G,...te]=$.details;(!b(L,n.recipient)||!b($.spender,t)||!G||te.length>0||!b(G.token,n.inputToken)||G.amount<n.amount)&&o("permit does not match the swap"),a=ln({abi:yt,data:E});}if(a.functionName!=="execute")return o("calldata is not a router execute");const[r,...i]=a.args[0],s=n.feePolicy,c=tu([de.SWAP_EXACT_IN,de.SETTLE,...(s?[de.TAKE_PORTION]:[]),de.TAKE,de.TAKE]);if(!r||i.length>0||!r.requiresV4Unlock||r.actions.toLowerCase()!==c)return o("unexpected router actions");const[l,p,...u]=r.params,m=Et(n.inputToken),d=Et(n.outputToken),[h]=nn(jr,l);(!b(h.currencyIn,m)||h.amountIn!==n.amount)&&o("swap input differs from the quote");const f=An(e);let w=m;for(const S of h.path)(!f.some(R=>{const _=zo(R,w);return _!==null&&b(_,S.intermediateCurrency)&&R.poolKey.fee===S.fee&&R.poolKey.tickSpacing===S.tickSpacing&&b(R.poolKey.hooks,S.hooks);})||S.hookData!=="0x")&&o("path leaves the trusted pool catalogue"),w=S.intermediateCurrency;(h.path.length<1||h.path.length>Ko||!b(w,d))&&o("path does not end at the output token");const[v,g,I]=nn(Qr,p);if((!b(v,m)||g!==n.amount||!I)&&o("settlement differs from the quote"),s){const[S,E,R]=nn(Xr,u.shift());(!b(S,d)||!b(E,s.receiver)||R!==BigInt(s.feeBps))&&o("fee take differs from the fee policy");}const[T,P]=u.map(S=>nn(fn,S));(!b(T[0],d)||!b(T[1],n.recipient)||T[2]<n.minReturnFloor)&&o("minimum payout is below the reviewed floor"),(!b(P[0],d)||!b(P[1],n.recipient)||P[2]!==0n)&&o("surplus payout does not go to the account");}function ou(e){const[t]=An(e),n=In[e];if(!t||!n)throw new Error(`No trusted Aegis pools for chain ${e}.`);const{router:o,permit2:a}=t;let r;const i=s=>c=>c===e?s:void 0;return{id:"aegis",label:"Aegis routing",trustedRouter:i(o),permit2:i(a),async quote({tokenIn:s,tokenOut:c,amountIn:l,fee:p,liquiditySources:u,publicClient:m,signal:d}){Fa(u,n.name);const h=Yl(e,s,c);if(h.length===0)throw new it("no-route","no trusted path between these tokens");const f=m??r??(r=Ol(n.chain,n.rpcUrls)),{blockNumber:w,quotes:v}=await Zl(f,h,l);d==null||d.throwIfAborted();const g=eu(v);if(!g)throw new it("no-route","every candidate quote failed");const I=g.amountOut-g.amountOut*BigInt(La(p))/10000n;return{routerAddress:o,blockNumber:w,routeSummary:{tokenIn:s,tokenOut:c,amountIn:l.toString(),amountOut:I.toString(),gas:g.gasEstimate.toString(),route:[g.route.map(T=>({pool:T.pool.poolId,tokenIn:T.currencyIn,tokenOut:T.currencyOut,exchange:gn}))],...(p?{extraFee:p}:{})}};},validateRoute(s,c){Fa(c,n.name),yi(s.routeSummary.route),Ua(e,s);},async build({route:s,recipient:c,amountOutMinimum:l,permit:p}){const u=Ua(e,s),m=s.routeSummary.extraFee,d=La(m),h=BigInt(1e4-d),f=Math.floor(Date.now()/1e3)+xn,w=_c({currencyIn:u[0].currencyIn,path:vi(u),amountIn:BigInt(s.routeSummary.amountIn),amountOutMinimum:(l*10000n+h-1n)/h,amountOutNetMinimum:l,recipient:c,deadline:BigInt(f),permit:p,fee:m&&d>0?{recipient:m.feeReceiver,bips:d}:null});return{amountIn:s.routeSummary.amountIn,amountOut:s.routeSummary.amountOut,gas:s.routeSummary.gas,data:w.calldata,routerAddress:o,transactionValue:w.value.toString(),deadline:f};},validateCalldata:s=>nu(e,o,s)};}const au=/* @__PURE__ */new Set([4008,40011]);class it extends N{constructor(n,o){super("No Aegis route for this pair.",{kind:"quote",retryable:!0});j(this,"reason");j(this,"detail");this.name="NoAegisRouteError",this.reason=n,this.detail=o;}}function yi(e){if(!Array.isArray(e)||e.length===0)throw new it("non-aegis-leg","route has no legs");for(const t of e){if(!Array.isArray(t)||t.length===0)throw new it("non-aegis-leg","route contains an empty path");for(const n of t)if((n==null?void 0:n.exchange)!==gn)throw new it("non-aegis-leg",`leg ${(n==null?void 0:n.pool)??"(unknown pool)"} uses ${(n==null?void 0:n.exchange)??"no exchange tag"}`);}}function ru(e){return e instanceof Fo&&e.code!==void 0&&au.has(e.code)?new it("no-route",e.message):e;}const iu=Object.fromEntries(Wr.map(e=>[e,pc])),su={id:"kyberswap",label:"KyberSwap",trustedRouter:e=>iu[e],async quote({amountIn:e,liquiditySources:t,publicClient:n,...o}){try{return await dl({...o,amountIn:e.toString(),liquiditySources:t});}catch(a){throw t==="aegis"?ru(a):a;}},build:({route:e,amountOutMinimum:t,permit:n,...o})=>ml({...o,routeSummary:e.routeSummary}),validateRoute(e,t){t==="aegis"&&yi(e.routeSummary.route);},validateCalldata:kl};let cu;function Qt(e){if(e===be)return cu??(cu=ou(be));if(!Wr.includes(e))throw new N(`Aggregated swaps are not supported on chain ${e}.`);return su;}const lu=2,uu="Route temporarily unavailable. Refresh the quote and try again.";function Gf(e,t){return mi(e)?uu:Zs(e,t);}class Va extends N{constructor({field:n,expected:o,actual:a}){super("Swap route changed unexpectedly. Refresh the quote and try again.");j(this,"field");j(this,"expected");j(this,"actual");this.name="AggregatedSwapBuildMismatchError",this.field=n,this.expected=o,this.actual=a;}}function du(e,t){return e>t?e:t;}function mu(e,t){if(!Number.isFinite(t)||t<0||t>2e3)throw new N("Slippage must be between 0% and 20%.");return St(e,Math.round(t));}const pu=1;function fu(e,t,n){if(e<=0n||t<=0n||t>=e)return 0;const o=Number((e-t)*10000n/e);return Math.max(0,Math.min(n,o)-pu);}function hu(e,t){if(t<=0)return 0n;const n=BigInt(1e4-t);return(e*10000n+n-1n)/n-e;}const wu=200;function Ii(e){if(e===void 0)return mc;if(!Number.isInteger(e)||e<0||e>wu)throw new N("Swap fee configuration is invalid.");return e;}function bu(e,t){const n=Ii(t);return Ei(e,n)?n:0;}function Ei(e,t){return e!==ee&&e!==be||t===0?null:{feeAmount:String(t),chargeFeeBy:"currency_out",isInBps:!0,feeReceiver:io};}function Ha(e){return b(e.address,vn);}function ku(e){const t=Qt(e),n=t.trustedRouter(e);if(!n)throw new N(`${t.label} router is not trusted for chain ${e}.`);return n;}function Ai(e,t){po(e,t);}function Wa(e,t){if(t==="aegis"&&(e.liquiditySources!=="aegis"||e.hops.length===0||e.hops.some(n=>n.dex!==gn)))throw new it("non-aegis-leg","quote is not an Aegis-only route");}function po(e,t){if(!b(e,ku(t))){const{label:n}=Qt(t);throw new N(`${n} returned an untrusted router. Refresh the quote and try again.`);}}function vu(e,t,n,o){const a=e.routeSummary;if(!b(a.tokenIn,t.address))throw new N("KyberSwap returned a route for a different input token.");if(!b(a.tokenOut,n.address))throw new N("KyberSwap returned a route for a different output token.");if(BigInt(a.amountIn)!==o)throw new N("KyberSwap returned a route for a different input amount.");}function yu(e,t,n){const o=e!=null&&e.transactionValue?BigInt(e.transactionValue):0n;if(!Ha(t)&&o!==0n)throw new N("KyberSwap returned unexpected native value for an ERC-20 swap.");if(Ha(t)&&o!==0n&&o!==n)throw new N("KyberSwap returned unexpected native value for this swap.");return o;}function Ft(e){if(e===void 0)return;const t=Number(e);return Number.isFinite(t)&&t>=0?t:void 0;}function Iu(e,t,n){if(typeof e.priceImpact=="number"&&Number.isFinite(e.priceImpact))return e.priceImpact;const o=Ft(e.amountInUsd),a=Ft(e.amountOutUsd);if(!o||!a||t<=0n)return null;const r=a*(1+Number(n)/Number(t));return(o-r)/o;}function Eu(e){const t=e.routeSummary.gasEstimate??e.routeSummary.gas??"0";return Go(t)??0n;}function Go(e){if(e!==void 0)try{return BigInt(e);}catch{return;}}function Au(e,t,n){const o=BigInt(e.amountIn);if(o!==t)throw new Va({field:"amountIn",expected:t,actual:o});const a=BigInt(e.amountOut);if(a<n)throw new Va({field:"amountOut",expected:n,actual:a});}function gu(e){var t;return((t=e.routeSummary.route)==null?void 0:t.flat())??[];}function Su(e,t,n){const o=gu(e);return o.length?o.map(a=>({dex:a.exchange||a.poolType||"Unknown",inputToken:t,outputToken:n,part:0})):(e.routeSummary.routeComposition||[]).map(a=>({dex:a.name||"Unknown",inputToken:t,outputToken:n,part:a.part||0}));}function $a(e,t,n){var r;if(b(e,t))return!0;const o=(r=Ro(n))==null?void 0:r.weth9,a=i=>Ae(i)||!!(o&&b(i,o));return a(e)&&a(t);}function Cu(e,t,n){var r;const o=e.routeSummary.route;if(!(o!=null&&o.length))return;const a=[];for(const i of o){const s=[];for(const l of i){if(!l.pool||!l.tokenIn||!l.tokenOut)return;const p=s[s.length-1];if(p&&!b(p.tokenOut,l.tokenIn))return;s.push({pool:l.pool,tokenIn:l.tokenIn,tokenOut:l.tokenOut,source:l.exchange||l.poolType||"Unknown"});}if(s.length===0||!$a(s[0].tokenIn,e.routeSummary.tokenIn,n)||!$a(s[s.length-1].tokenOut,e.routeSummary.tokenOut,n))return;const c=Go((r=i[0])==null?void 0:r.swapAmount);a.push({amountIn:c??(o.length===1?t:void 0),legs:s});}if(!(a.every(i=>i.amountIn!==void 0)&&a.reduce((i,s)=>i+s.amountIn,0n)!==t))return a;}async function Ka(e,t,n,o,a="exactIn",r,i,s,c,l={}){const p=l.liquiditySources??"any",u=Ii(l.outputFeeBps);if(a==="exactOut")throw new N("Exact output is not supported for aggregated routes.");if(e.chainId!==t.chainId)throw new N("Input and output tokens must be on the same chain.");const m=Qt(e.chainId);if(n<=0n)throw new N("Enter an amount to swap.");if(c&&!r)throw new N("A reviewed swap floor requires a connected account.");if(c&&c.reviewedAmountOutMinimum<=0n)throw new N("The reviewed swap minimum must be greater than zero.");const d=Ei(e.chainId,u),h=r?lu:1;let f;for(let w=0;w<h;w+=1){const v=await m.quote({tokenIn:e.address,tokenOut:t.address,amountIn:n,chainId:e.chainId,origin:r,fee:d,liquiditySources:p,publicClient:s,signal:i});po(v.routerAddress,e.chainId),vu(v,e,t,n),m.validateRoute(v,p);const g=BigInt(v.routeSummary.amountOut),I=d?u:0,T=hu(g,I),P=mu(g,o),S=c==null?void 0:c.reviewedAmountOutMinimum,E=S!==void 0&&g<S,R=S===void 0?P:du(P,S);let _=null;try{_=r&&!E?await m.build({route:v,sender:r,recipient:r,slippageBps:fu(g,R,o),amountOutMinimum:R,permit:c==null?void 0:c.permit,chainId:e.chainId,signal:i}):null;}catch($){if(f=$,r&&w<h-1&&mi($))continue;throw $;}if(_&&r){if(po(_.routerAddress,e.chainId),!b(_.routerAddress,v.routerAddress))throw new N("Swap route changed unexpectedly. Refresh the quote and try again.");Au(_,n,R),m.validateCalldata({data:_.data,inputToken:e.address,outputToken:t.address,amount:n,recipient:r,minReturnFloor:R,feePolicy:d?{receiver:io,feeBps:u}:null});}const L=yu(_,e,n);return{inputToken:e,outputToken:t,amountIn:n,amountOut:g,gasEstimate:Go(_==null?void 0:_.gas)??Eu(v),hops:Su(v,e,t),routePaths:Cu(v,n,e.chainId),liquiditySources:p,routerAddress:(_==null?void 0:_.routerAddress)??v.routerAddress,calldata:(_==null?void 0:_.data)??null,// Hash commitment for assertCalldataHash: executeKyberSwap re-verifies
|
|
38
38
|
// the bytes it hands to the wallet against this build-time keccak, so
|
|
39
39
|
// calldata cannot be rewritten between build and signature prompt.
|
|
40
|
-
calldataHash:
|
|
40
|
+
calldataHash:_?xo(_.data):null,// The build's embedded deadline: past it the calldata reverts on-chain,
|
|
41
41
|
// so execution treats the quote as expired (assertQuoteFresh).
|
|
42
|
-
expiresAt:
|
|
42
|
+
expiresAt:_!=null&&_.deadline?new Date(_.deadline*1e3).toISOString():void 0,transactionValue:L,priceImpact:Iu(v.routeSummary,g,T),feeAmount:T,feeBps:I,feeRecipient:d?io:null,// A route below the immutable floor is returned only for renewed review;
|
|
43
43
|
// in every executable quote these fields carry the strongest floor.
|
|
44
|
-
userAmountOutMinimum:
|
|
45
|
-
settlement:{recipient:e.account,inputToken:a.address,outputToken:r.address},onTransactionObservation:m,onHash:p,onSubmitted:u});return{receipt:
|
|
46
|
-
amount:s==="max"?void 0:i,expiration:Math.floor(Date.now()/1e3)+
|
|
47
|
-
knownAllowance:(await n)??void 0,signal:e.signal,onStatus:e.onStatus,onApprovalProgress:e.onApprovalProgress});if(
|
|
48
|
-
settlement:{recipient:e.wallet.account,inputToken:e.inputToken.address,outputToken:e.outputToken.address},onTransactionObservation:e.onTransactionObservation,onHash:e.onTxHash,onSubmitted:e.onSubmitted});return(
|
|
49
|
-
priceUsd:Number.isFinite(e.priceUsd)&&e.priceUsd>=0?e.priceUsd:void 0,stable:e.stable};}function
|
|
44
|
+
userAmountOutMinimum:E?P:R,amountOutMinimum:E?P:R,amountInUsd:Ft(v.routeSummary.amountInUsd),amountOutUsd:Ft(v.routeSummary.amountOutUsd),gasUsd:Ft(v.routeSummary.gasUsd)};}throw f instanceof Error?f:new N("Swap route could not be encoded. Try again.");}const xu="https://ichi-images.s3.us-east-1.amazonaws.com/tokens",Tu=15e3,Ru=x({chainId:k().nullable().catch(null),address:C().nullable().catch(null),symbol:C().nullable().catch(null),displayName:C().nullable().catch(null),fullName:C().nullable().catch(null),decimals:k().nullable().catch(null),iconURL:C().nullable().catch(null),price:k().nullable().catch(null)}),Pu=x({data:ec(C(),Ru.nullable().catch(null)).optional(),errors:q(x({message:C().optional()})).optional()}),Bu=512,ot=/* @__PURE__ */new Map();function Mu(e,t){if(!ot.has(e)&&ot.size>=Bu){const n=ot.keys().next().value;n!==void 0&&ot.delete(n);}ot.set(e,t);}function za(e,t,n){return`${e}|evm_${t}_${n.toLowerCase()}`;}function _u(e,t){return`evm_${e}_${t.toLowerCase()}`;}function Nu(e){const t=e==null?void 0:e.trim();if(!t)return null;const n=t.split("-"),a=(n.length>1?n[n.length-1]:t).trim().toLowerCase();return!a||!/^[a-z0-9]+$/.test(a)?null:a;}function Du(e){const t=Nu(e);return t?`${xu}/logo_256_${t}.svg`:null;}function jf(e,t){var n,o;return((n=e.iconUrl)!=null&&n.trim()?e.iconUrl:null)??((o=t[ne(e.address)])==null?void 0:o.iconURL)??Du(e.symbol);}function Ou(e,t){return`query AegisSwapWidgetTokenMetadata { ${t.map((o,a)=>`t${a}: getGlobalToken(id: ${JSON.stringify(_u(e,o))}) { chainId address symbol displayName fullName decimals iconURL price }`).join(" ")} }`;}async function Qf(e){var p,u;const t=e.endpoint.trim();if(!Number.isSafeInteger(e.chainId))throw new Error("Token metadata chainId must be a safe integer.");const n=[...new Map(e.addresses.map(m=>{const d=D(m);return[d.toLowerCase(),d];})).values()],o=/* @__PURE__ */new Map(),a=n.filter(m=>{const d=za(t,e.chainId,m);if(!ot.has(d))return!0;const h=ot.get(d);return h&&o.set(ne(m),h),!1;});if(!a.length||typeof fetch!="function")return o;const{signal:r,cleanup:i}=lt({signal:e.signal,timeoutMs:e.timeoutMs??Tu,timeoutMessage:"Token metadata request timed out."});let s;try{const m=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:Ou(e.chainId,a)}),signal:r});if(!m.ok)throw new Error(`Token metadata request failed with HTTP ${m.status}.`);s=await m.json();}finally{i();}const c=Pu.safeParse(s);if(!c.success)throw new Error("Token metadata response was malformed.");const l=c.data;if((p=l.errors)!=null&&p.length)throw new Error(((u=l.errors[0])==null?void 0:u.message)??"Token metadata request failed.");return a.forEach((m,d)=>{var f;const h=((f=l.data)==null?void 0:f[`t${d}`])??null;Mu(za(t,e.chainId,m),h),h&&o.set(ne(m),h);}),o;}const qu=15e3,Lu=900*1e3,Fu=512,Uu=4096,jo=Te({ttlMs:Lu,maxEntries:Fu}),Vu=x({t:k().int().nonnegative(),p:k().finite().positive()}).strict(),Hu=x({chainId:k().int().positive(),address:C().regex(/^0x[0-9a-fA-F]{40}$/),symbol:C().nullable(),resolution:B("12h"),window:V(["7d","30d","90d","180d"]),status:V(["ready","warming_up","no_data"]),points:q(Vu).max(Uu),pointCount:k().int().nonnegative(),updatedAt:Pe.nullable()}).strict().superRefine(_r);function Wu(e){return[e.baseUrl,e.chainId,ne(e.lookupAddress),ne(e.tokenAddress),e.window,Po(e.headers)].join("|");}function Xf(){jo.clear();}function gi(e){const t=jt(e.baseUrl);if(!t)return null;if(!Number.isSafeInteger(e.chainId)||e.chainId<=0)throw new Error("Token price history chainId must be a positive safe integer.");const n=D(e.tokenAddress),o=Ae(n)?ie:n,a=e.window??"30d";return{key:Wu({baseUrl:t,chainId:e.chainId,lookupAddress:o,tokenAddress:n,window:a,headers:e.headers}),baseUrl:t,lookupAddress:o,tokenAddress:n,window:a};}function Yf(e){const t=gi(e);return t?jo.peek(t.key)??null:null;}async function $u(e){var i;const{signal:t,cleanup:n}=lt({timeoutMs:e.timeoutMs??qu,timeoutMessage:"Token price history request timed out."});let o;try{const s=await fetch(`${e.baseUrl}/v1/tokens/${e.chainId}/${e.lookupAddress.toLowerCase()}/price-history?window=${e.window}`,{method:"GET",headers:{Accept:"application/json",...e.headers},signal:t});if(!s.ok)throw new Error(`Token price history request failed with HTTP ${s.status}.`);o=await s.json();}finally{n();}const a=Hu.safeParse(o);let r=null;if(a.success)try{r=D(a.data.address);}catch{r=null;}if(!a.success||r===null||a.data.chainId!==e.chainId||!b(r,e.lookupAddress)||a.data.window!==e.window)throw new Error("Token price history response was malformed.");return{networkType:"evm",chainId:e.chainId,tokenAddress:e.tokenAddress,symbol:((i=a.data.symbol)==null?void 0:i.trim())||null,resolution:a.data.resolution,window:a.data.window,status:a.data.status,points:a.data.points.map(({t:s,p:c})=>({timestamp:s,priceUsd:c})),pointCount:a.data.pointCount,updatedAt:a.data.updatedAt};}async function Jf(e){const t=gi(e);if(!t)return null;const n=jo.read(t.key,()=>$u({baseUrl:t.baseUrl,chainId:e.chainId,lookupAddress:t.lookupAddress,tokenAddress:t.tokenAddress,window:t.window,headers:e.headers,timeoutMs:e.timeoutMs}));return $e(n,e.signal,"Token price history request aborted.");}async function Si(e,t){try{return(await e.estimateGas(t))*12n/10n;}catch{return;}}const Ci="0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef";function fo(e){return`0x${e.slice(-40)}`;}function Ku(e,t){const n=Array.isArray(e.logs)?e.logs:[];let o=!1,a=0n;for(const r of n)b(r.address,t.outputToken)&&(r.topics[0]!==Ci||r.topics.length<3||b(fo(r.topics[2]),t.recipient)&&(o=!0,a+=BigInt(r.data)));return o?a:void 0;}async function zu(e,t,n){if(t.blockNumber===void 0||t.blockNumber<=0n)return;const o=t.gasUsed??0n,a=t.effectiveGasPrice??0n,[r,i]=await Promise.all([e.getBalance({address:n.recipient,blockNumber:t.blockNumber-1n}),e.getBalance({address:n.recipient,blockNumber:t.blockNumber})]),s=i-r+o*a;return s>=0n?s:void 0;}async function Gu(e,t,n){try{return Ae(n.outputToken)?await zu(e,t,n):Ku(t,n);}catch{return;}}function ju(e,t){if(!(!t.inputToken||Ae(t.inputToken)))try{let n=!1,o=0n;for(const a of Array.isArray(e.logs)?e.logs:[]){if(!b(a.address,t.inputToken)||a.topics[0]!==Ci||a.topics.length<3)continue;const r=b(fo(a.topics[1]),t.recipient),i=b(fo(a.topics[2]),t.recipient);!r&&!i||(n=!0,r&&(o+=BigInt(a.data)),i&&(o-=BigInt(a.data)));}return n&&o>=0n?o:void 0;}catch{return;}}function xi(e){const t=e.gasUsed??0n,n=e.effectiveGasPrice??0n;return{transactionHash:e.transactionHash,blockNumber:e.blockNumber??0n,gasUsed:t,effectiveGasPrice:n,feeWei:t*n};}async function Ti(e){const t=Gt({account:e.wallet.account,chain:e.chain,transport:gt(Sn(e.wallet.provider,e.signal))}),n=await fi({provider:e.wallet.provider,publicClient:e.publicClient,chain:e.chain,signal:e.signal,timeoutMs:tc,submit:()=>t.sendTransaction({to:e.to,data:e.data,value:e.value,...(e.gas?{gas:e.gas}:{})}),unreadableChainMessage:"Wallet chain could not be read before signing; refusing to send the transaction.",cancelledMessage:e.cancelledMessage,revertedMessage:e.revertedMessage,onTransactionObservation:e.onTransactionObservation,onWalletRequest:e.onWalletRequest,onHash:e.onHash?o=>{var a;return(a=e.onHash)==null?void 0:a.call(e,o);}:void 0,onSubmitted:e.onSubmitted});return{receipt:n,summary:xi(n)};}async function Ri(e){const{receipt:t,summary:n}=await Ti({wallet:e.wallet,publicClient:e.publicClient,chain:e.chain,to:e.to,data:e.data,value:e.value,gas:e.gas,signal:e.signal,cancelledMessage:"Swap was cancelled in the wallet.",revertedMessage:"Swap reverted on-chain.",onTransactionObservation:e.onTransactionObservation,onWalletRequest:e.onWalletRequest,onHash:e.onHash?r=>{var i;return(i=e.onHash)==null?void 0:i.call(e,r);}:void 0,onSubmitted:r=>{var i;return(i=e.onSubmitted)==null?void 0:i.call(e,r,e.swapDetails);}}),o=e.settlement?await Gu(e.publicClient,t,e.settlement):void 0,a=e.settlement?ju(t,e.settlement):void 0;return{receipt:t,summary:{...n,...(o!==void 0?{settledAmountOut:o}:{}),...(a!==void 0?{settledAmountIn:a}:{})}};}async function Qu({wallet:e,publicClient:t,activeChain:n,market:o,inputToken:a,outputToken:r,swapQuote:i,permit:s,signal:c,setStatus:l,setTxHash:p,onSubmitted:u,onTransactionObservation:m}){Hc(o,i.poolKey);const d=BigInt(Math.floor(Date.now()/1e3)+xn),h=Jc(i),f=i.mode==="exactOut"?Dc({poolKey:i.poolKey,zeroForOne:i.zeroForOne,amountOut:i.grossAmountOut,amountOutNet:i.amountOut,amountInMaximum:i.amountInMaximum,recipient:e.account,deadline:d,permit:s,fee:h}):Nc({poolKey:i.poolKey,zeroForOne:i.zeroForOne,amountIn:i.amountIn,amountOutMinimum:i.amountOutMinimum,recipient:e.account,deadline:d,permit:s,fee:h});l("submitting");const w=await Si(t,{account:e.account,to:o.router,data:f.calldata,value:f.value}),v={mode:i.mode,inputSymbol:a.symbol,outputSymbol:r.symbol,amountIn:i.amountIn,amountOut:i.amountOut,feeAmount:i.feeAmount,feeBps:i.feeBps},{receipt:g,summary:I}=await Ri({wallet:e,publicClient:t,chain:n.chain,to:o.router,data:f.calldata,value:f.value,gas:w,signal:c,swapDetails:v,// Lets the receipt summary report the settled (not quoted) output amount.
|
|
45
|
+
settlement:{recipient:e.account,inputToken:a.address,outputToken:r.address},onTransactionObservation:m,onHash:p,onSubmitted:u});return{receipt:g,summary:I,swapDetails:v};}const Xu=/* @__PURE__ */new Set([4200,-32601,-32004]);function Yu(e){const t=/* @__PURE__ */new Set();let n=e;for(;n&&!t.has(n);){if(t.add(n),typeof n=="object"&&"code"in n){const o=Number(n.code);if(Xu.has(o))return!0;}n=typeof n=="object"&&"cause"in n?n.cause:void 0;}return!1;}async function Qo({wallet:e,publicClient:t,activeChain:n,permit2:o,router:a,token:r,amount:i,approvalMode:s,allowanceRead:c,signal:l,setStatus:p,onAuthorizationProgress:u,onWalletRequest:m,onHash:d}){l==null||l.throwIfAborted();const h=await c;if(l==null||l.throwIfAborted(),Tn(h,i,s))return u==null||u({planned:0,completed:0}),null;u==null||u({planned:1,completed:0});const f=await Ql({provider:e.provider,publicClient:t,account:e.account,chainId:n.chainId,chain:n.chain,permit2:o,router:a,token:r,amount:i,sizing:s,allowanceRead:Promise.resolve(h),signal:l,onWalletRequest:m}).catch(w=>{if(nc(w)||!Yu(w))throw w;});if(l==null||l.throwIfAborted(),f===null)return u==null||u({planned:0,completed:0}),null;if(f){const w=await t.getCode({address:f.owner});l==null||l.throwIfAborted();const v=await jl({publicClient:t,chainId:n.chainId,permit2:o,signed:f,ownerCode:w});if(l==null||l.throwIfAborted(),v)return u==null||u({planned:1,completed:1}),f;throw new N("Wallet approval could not be verified. Try again.",{kind:"validation",retryable:!0});}return l==null||l.throwIfAborted(),p("approving"),await bi({provider:e.provider,publicClient:t,account:e.account,chain:n.chain,token:r,permit2:o,router:a,// undefined -> MAX_UINT160, mirroring the 'max' permit sizing above.
|
|
46
|
+
amount:s==="max"?void 0:i,expiration:Math.floor(Date.now()/1e3)+Ho,signal:l,onWalletRequest:m,onHash:w=>{d==null||d(w),u==null||u({planned:1,completed:0,pendingHash:w});}}),u==null||u({planned:1,completed:1}),null;}function Zf(){return typeof document>"u"?!0:document.visibilityState!=="hidden";}async function eh(e,t,n,o){let a;for(let r=0;r<t;r+=1){r>0&&(await new Promise(i=>setTimeout(i,n)));try{return await e();}catch(i){if(a=i,o!=null&&o())break;}}throw a??new Error("retryOnError was called with attempts < 1.");}async function Rn(e,t,n,o){let a=await e();for(let r=1;r<n&&!t(a);r+=1)await new Promise(i=>setTimeout(i,o)),a=await e();return a;}const Ju="0xdac17f958d2ee523a2206206994597c13d831ec7";function Xt(e){return e.requiresApprovalReset===!0||e.chainId===1&&e.address.toLowerCase()===Ju;}async function Pi(e,t){const n=await Rn(e,o=>o>=t,5,300);if(n<t)throw new Error("Approval confirmed, but allowance is still below this quote. Try again.");return n;}function Zu(e,t,n){const o=t==="max"?Ie:e;return{value:o,decimals:n,unlimited:Ll(o)};}function Xo(e){const t=e.approvalMode==="max"?mo:e.amount,n=e.approvalMode==="max"?e.currentAllowance>=mo:e.amount>0n?e.replaceAllowance?e.currentAllowance===e.amount:e.currentAllowance>=e.amount:e.currentAllowance>0n,o=e.amount>0n||e.approvalMode==="max",a=o&&!n,r=a&&e.requiresReset===!0&&e.currentAllowance>0n;return{requiredAllowance:t,satisfied:n,approvalRequired:a,resetRequired:r,planned:a?r?2:1:0,visible:n||o};}async function Bi(e){var s,c,l,p,u,m,d;const t=Zu(e.amount,e.approvalMode,e.decimals);let n=e.knownAllowance??(await e.read());const o=Xo({currentAllowance:n,amount:e.amount,approvalMode:e.approvalMode,requiresReset:e.requiresReset,replaceAllowance:e.replaceAllowance});if(!o.approvalRequired)return(s=e.onApprovalProgress)==null||s.call(e,{planned:0,completed:0}),{approvalHashes:[],allowance:n};(c=e.onApprovalProgress)==null||c.call(e,{planned:o.planned,completed:0,request:t}),(l=e.onStatus)==null||l.call(e,"approving");const a=e.executeStep??((h,f)=>f({onHash:w=>{var v;return(v=e.onApprovalProgress)==null?void 0:v.call(e,{planned:o.planned,completed:h==="reset"?0:o.planned-1,request:t,pendingHash:w});}})),r=[];if(o.resetRequired){const h=await a("reset",f=>e.write("reset",0n,f));r.push(h),await((p=e.afterStep)==null?void 0:p.call(e,"reset",h)),(u=e.onApprovalProgress)==null||u.call(e,{planned:o.planned,completed:1,request:t});}const i=await a("grant",async h=>{const f=await e.write("grant",t.value,h);return n=await(e.confirm??Pi)(e.read,o.requiredAllowance),f;});return r.push(i),await((m=e.afterStep)==null?void 0:m.call(e,"grant",i)),(d=e.onApprovalProgress)==null||d.call(e,{planned:o.planned,completed:o.planned,request:t}),{approvalHashes:r,allowance:n};}async function Yo(e){return Bi({...e,write:(t,n,o)=>e.write(n,o)});}async function ed(e,t,n=12,o=250){return(await Rn(()=>Wt(e),r=>r===t,n,o))===t;}async function Qe(e){var r,i,s,c;const t=Sn(e.provider,e.signal),n=await Wt(t);if((r=e.signal)==null||r.throwIfAborted(),(i=e.onChainId)==null||i.call(e,n),n===e.chain.chainId)return;await Dl(t,e.chain);const o=await ed(t,e.chain.chainId),a=o?e.chain.chainId:await Wt(t);if((s=e.signal)==null||s.throwIfAborted(),(c=e.onChainId)==null||c.call(e,a),!o)throw new Error("Network switch did not complete. Switch to the correct network and try again.");}async function th(e={}){var a;let n=e.provider!==void 0||!!e.getProvider?e.provider??(await((a=e.getProvider)==null?void 0:a.call(e)))??null:Sl(),o=Cn(e.account);if((!n||!o)&&e.connectWallet){const r=xl(await e.connectWallet());n=r.provider??n,o=o??r.account;}if(!n)throw new Error("No wallet provider found.");if(o||(o=e.requestAccount===!1?await Tl(n):await Rl(n)),!o)throw new Error("Wallet connection was not completed.");return{provider:n,account:o};}class Ga extends Error{constructor(n){super("Price moved beyond your slippage tolerance. Review the updated quote and try again.");j(this,"quote");this.name="DirectPoolSwapPriceMovedError",this.quote=n;}}function kt(e,t){return e.chainId===t.chainId&&e.decimals===t.decimals&&b(e.address,t.address);}function Mi(e,t){if(e.chainId!==t.chainId||e.chain.id!==t.chainId||!b(e.router,t.router)||!b(e.permit2,t.permit2)||!b(e.quoter,t.quoter))throw new TypeError("Active chain does not match the trusted direct-swap market.");}function td(e,t){return kt(e,t.token)||kt(e,t.counterToken);}function nd(e){En(e.market),Mi(e.activeChain,e.market);const t=kt(e.inputToken,e.market.token)&&kt(e.outputToken,e.market.counterToken),n=kt(e.inputToken,e.market.counterToken)&&kt(e.outputToken,e.market.token);if(!t&&!n)throw new TypeError("Selected tokens do not match the trusted direct-swap market.");}function ja(e){return Yc({publicClient:e.publicClient,account:e.account,market:e.market,tokenIn:e.inputToken,tokenOut:e.outputToken,mode:e.mode,amount:e.amount,slippageBps:e.slippageBps,fee:e.activeChain.fee??null,signal:e.signal});}async function od(e){var a;if(En(e.market),Mi(e.activeChain,e.market),!td(e.token,e.market))throw new TypeError("Approval token does not belong to the trusted direct-swap market.");if(Ae(e.token.address))return(a=e.onApprovalProgress)==null||a.call(e,{planned:0,completed:0}),{approvalHash:null,allowance:e.amount};const t=e.market.permit2,{approvalHashes:n,allowance:o}=await Yo({read:()=>Ct({publicClient:e.publicClient,token:e.token.address,owner:e.wallet.account,spender:t}),write:(r,i)=>$o({provider:e.wallet.provider,publicClient:e.publicClient,account:e.wallet.account,chain:e.activeChain.chain,token:e.token.address,permit2:t,amount:r,signal:e.signal,...i}),amount:e.amount,decimals:e.token.decimals,approvalMode:e.approvalMode??"exact",requiresReset:Xt(e.token),knownAllowance:e.knownAllowance,onStatus:e.onStatus,onApprovalProgress:e.onApprovalProgress});return{approvalHash:n.at(-1)??null,allowance:o};}async function nh(e){var v,g,I,T,P,S,E;nd(e),await Qe({provider:e.wallet.provider,chain:e.activeChain,onChainId:e.onWalletChainId});const t=Ae(e.inputToken.address),n=t?null:Ct({publicClient:e.publicClient,token:e.inputToken.address,owner:e.wallet.account,spender:e.market.permit2}).catch(()=>null),o=t?null:ze({publicClient:e.publicClient,permit2:e.market.permit2,account:e.wallet.account,token:e.inputToken.address,router:e.market.router});o==null||o.catch(()=>{});const a=await ja({publicClient:e.publicClient,account:e.wallet.account,activeChain:e.activeChain,market:e.market,inputToken:e.inputToken,outputToken:e.outputToken,mode:e.mode,amount:e.amount,slippageBps:e.slippageBps,signal:e.signal}),r=Ta(e.displayedQuote??null,a);if(r.priceMovedBeyondTolerance)throw(v=e.onStatus)==null||v.call(e,"idle"),new Ga(a);const i=r.quote,s=Ra(i);if(s<=0n)throw new Error("Quote returned an empty amount. Try again.");const c=e.approvalAmount??s,l=e.approvalMode??"exact";let p=null;if(t)(g=e.onApprovalProgress)==null||g.call(e,{planned:0,completed:0}),(I=e.onAuthorizationProgress)==null||I.call(e,{planned:0,completed:0}),(T=e.onStatus)==null||T.call(e,"signing");else{if(e.approvalAmount!==void 0&&(e.approvalMode==="max"||e.approvalAmount<s||e.approvalAmount>=qe))throw new Error("Specific spending limit must cover this swap and stay below the unlimited allowance.");const{allowance:R}=await od({wallet:e.wallet,publicClient:e.publicClient,activeChain:e.activeChain,market:e.market,token:e.inputToken,amount:c,approvalMode:l,// null when the overlapped read failed; undefined makes the approval re-read.
|
|
47
|
+
knownAllowance:(await n)??void 0,signal:e.signal,onStatus:e.onStatus,onApprovalProgress:e.onApprovalProgress});if(R<s)throw new Error(`Approve ${e.inputToken.symbol} before swapping.`);(P=e.onStatus)==null||P.call(e,"signing"),p=await Qo({wallet:e.wallet,publicClient:e.publicClient,activeChain:e.activeChain,permit2:e.market.permit2,router:e.market.router,token:e.inputToken.address,amount:c,approvalMode:l,allowanceRead:o,signal:e.signal,setStatus:_=>{var L;return(L=e.onStatus)==null?void 0:L.call(e,_);},onAuthorizationProgress:e.onAuthorizationProgress});}const u=await ja({publicClient:e.publicClient,account:e.wallet.account,activeChain:e.activeChain,market:e.market,inputToken:e.inputToken,outputToken:e.outputToken,mode:e.mode,amount:e.amount,slippageBps:e.slippageBps,signal:e.signal}),m=Ta(e.displayedQuote??i,u),d=m.quote,h=d.mode==="exactOut"?d.amountIn>s:Ra(d)>s;if(m.priceMovedBeyondTolerance||h)throw(S=e.onStatus)==null||S.call(e,"idle"),new Ga(u);const f=d.mode==="exactOut"&&d.amountInMaximum>s?{...d,amountInMaximum:s}:d,w=await Qu({wallet:e.wallet,publicClient:e.publicClient,activeChain:e.activeChain,market:e.market,inputToken:e.inputToken,outputToken:e.outputToken,swapQuote:f,permit:p,signal:e.signal,setStatus:R=>{var _;return(_=e.onStatus)==null?void 0:_.call(e,R);},setTxHash:R=>{var _;return(_=e.onTxHash)==null?void 0:_.call(e,R);},onTransactionObservation:e.onTransactionObservation,onSubmitted:e.onSubmitted});return(E=e.onStatus)==null||E.call(e,"success"),{hash:w.receipt.transactionHash,explorerUrl:Oo(w.receipt.transactionHash,e.activeChain),quote:f,receiptSummary:w.summary,swap:w.swapDetails};}function Jo(e){return b(e.address,vn);}class ad extends N{constructor(n){super("Price moved beyond your slippage tolerance. Review the updated quote and try again.");j(this,"quote");this.name="KyberSwapPriceMovedError",this.quote=n;}}function rd(e,t){if(!b(e.inputToken.address,t.inputToken.address)||e.inputToken.chainId!==t.inputToken.chainId||!b(e.outputToken.address,t.outputToken.address)||e.outputToken.chainId!==t.outputToken.chainId||e.amountIn!==t.amount)throw new N("The reviewed quote does not match this swap request.");if(e.userAmountOutMinimum<=0n)throw new N("The reviewed swap minimum must be greater than zero.");}async function id(e){var t,n,o;if((t=e.signal)==null||t.throwIfAborted(),e.inputToken.chainId!==e.activeChain.chainId)throw new N(`Approval token targets chain ${e.inputToken.chainId}, but execution is configured for chain ${e.activeChain.chainId}.`);if(Ai(e.spender,e.activeChain.chainId),Qt(e.activeChain.chainId).permit2)throw new N("This router takes input through Permit2; approve through executeKyberSwap.");return await Qe({provider:e.wallet.provider,chain:e.activeChain}),(n=e.signal)==null||n.throwIfAborted(),Jo(e.inputToken)?((o=e.onApprovalProgress)==null||o.call(e,{planned:0,completed:0}),{approvalHashes:[],allowance:e.amount}):Yo({read:()=>Ct({publicClient:e.publicClient,token:e.inputToken.address,owner:e.wallet.account,spender:e.spender}),write:(a,r)=>zl({provider:e.wallet.provider,publicClient:e.publicClient,account:e.wallet.account,chain:e.activeChain.chain,token:e.inputToken.address,spender:e.spender,amount:a,signal:e.signal,...r}),amount:e.amount,decimals:e.inputToken.decimals,approvalMode:e.approvalMode??"exact",requiresReset:Xt(e.inputToken),onStatus:e.onStatus,onApprovalProgress:e.onApprovalProgress});}async function sd(e,t,n,o){var m,d,h;if(Jo(e.inputToken))return(m=e.onApprovalProgress)==null||m.call(e,{planned:0,completed:0}),(d=e.onAuthorizationProgress)==null||d.call(e,{planned:0,completed:0}),null;const{publicClient:a,wallet:r,activeChain:i,signal:s}=e,c=e.inputToken.address,l=e.approvalMode??"exact",p=ze({publicClient:a,permit2:t,account:r.account,token:c,router:n});p.catch(()=>{});const{allowance:u}=await Yo({read:()=>Ct({publicClient:a,token:c,owner:r.account,spender:t}),write:(f,w)=>$o({provider:r.provider,publicClient:a,account:r.account,chain:i.chain,token:c,permit2:t,amount:f,signal:s,...w}),amount:o,decimals:e.inputToken.decimals,approvalMode:l,requiresReset:Xt(e.inputToken),onStatus:e.onStatus,onApprovalProgress:e.onApprovalProgress});if(u<o)throw new N(`Approve ${e.inputToken.symbol} before swapping.`);return(h=e.onStatus)==null||h.call(e,"signing"),Qo({wallet:r,publicClient:a,activeChain:i,permit2:t,router:n,token:c,amount:o,approvalMode:l,allowanceRead:p,signal:s,setStatus:f=>{var w;return(w=e.onStatus)==null?void 0:w.call(e,f);},onAuthorizationProgress:e.onAuthorizationProgress});}function cd(e){return{mode:"exactIn",inputSymbol:e.inputToken.symbol,outputSymbol:e.outputToken.symbol,amountIn:e.amountIn,amountOut:e.amountOut,feeAmount:e.feeAmount,feeBps:e.feeBps};}async function oh(e){var d,h,f,w,v;if(e.inputToken.chainId!==e.activeChain.chainId||e.outputToken.chainId!==e.activeChain.chainId)throw new Error(`Swap tokens target chain ${e.inputToken.chainId}, but execution is configured for chain ${e.activeChain.chainId}.`);const t=e.liquiditySources??"any",n=bu(e.activeChain.chainId,e.outputFeeBps),o=(h=(d=Qt(e.activeChain.chainId)).permit2)==null?void 0:h.call(d,e.activeChain.chainId),a=e.displayedQuote??(await Ka(e.inputToken,e.outputToken,e.amount,e.slippageBps,"exactIn",null,e.signal,e.publicClient,void 0,{liquiditySources:t,outputFeeBps:e.outputFeeBps}));if(rd(a,e),Ai(a.routerAddress,e.activeChain.chainId),Wa(a,t),a.feeBps!==n)throw new N("Swap fee changed. Refresh the quote and try again.");await Qe({provider:e.wallet.provider,chain:e.activeChain,onChainId:e.onWalletChainId});const r=o?await sd(e,o,a.routerAddress,a.amountIn):(await id({wallet:e.wallet,publicClient:e.publicClient,activeChain:e.activeChain,inputToken:e.inputToken,spender:a.routerAddress,amount:a.amountIn,approvalMode:e.approvalMode??"exact",signal:e.signal,onStatus:e.onStatus,onApprovalProgress:e.onApprovalProgress}),null);(f=e.onStatus)==null||f.call(e,"submitting");const i=await Ka(e.inputToken,e.outputToken,e.amount,e.slippageBps,"exactIn",e.wallet.account,e.signal,e.publicClient,{reviewedAmountOutMinimum:a.userAmountOutMinimum,permit:r},{liquiditySources:t,outputFeeBps:e.outputFeeBps});if(!b(i.routerAddress,a.routerAddress))throw new N("Swap route changed unexpectedly. Refresh the quote and try again.");if(i.feeBps!==a.feeBps)throw new N("Swap fee changed. Refresh the quote and try again.");if(i.amountOut<a.userAmountOutMinimum)throw(w=e.onStatus)==null||w.call(e,"idle"),new ad(i);if(!i.calldata||!i.calldataHash)throw new N("Swap route could not be encoded. Try again.");i.expiresAt&&vl({expiresAt:i.expiresAt}),El(i.calldata,i.calldataHash),Wa(i,t);const s=i.transactionValue||(Jo(e.inputToken)?i.amountIn:0n),c={account:e.wallet.account,to:i.routerAddress,data:i.calldata,value:s},l=o?await e.publicClient.estimateGas(c).then(g=>g*12n/10n,()=>{throw new N("Swap simulation failed. Refresh the quote and try again.");}):await Si(e.publicClient,c),p=cd(i),{receipt:u,summary:m}=await Ri({wallet:e.wallet,publicClient:e.publicClient,chain:e.activeChain.chain,to:i.routerAddress,data:i.calldata,value:s,gas:l,signal:e.signal,swapDetails:p,// Lets the receipt summary report the settled (not quoted) output amount.
|
|
48
|
+
settlement:{recipient:e.wallet.account,inputToken:e.inputToken.address,outputToken:e.outputToken.address},onTransactionObservation:e.onTransactionObservation,onHash:e.onTxHash,onSubmitted:e.onSubmitted});return(v=e.onStatus)==null||v.call(e,"success"),{hash:u.transactionHash,explorerUrl:Oo(u.transactionHash,e.activeChain),quote:i,receiptSummary:m,swap:p};}function ah(e){return e==="approving"||e==="signing"||e==="submitting";}function rh(e){const t=(e==null?void 0:e.steps)??(e==null?void 0:e.walletPrompts.total);return t!==void 0&&Number.isFinite(t)&&t>=2?Math.floor(t):void 0;}const ld={total:0,completed:0,active:null};function vt(e){return Number.isFinite(e)?Math.max(0,Math.floor(e)):0;}function ud({total:e,completed:t,confirmed:n=!1}){const o=vt(e),a=n?o:Math.min(vt(t),Math.max(0,o-1));return{total:o,completed:a,completePct:n?100:o>0?a/o*100:0,...(o>=2?{steps:o}:{})};}function ft(e){return ud(e).completePct;}function dd({status:e,txHash:t,transactionStage:n,approvalRequired:o,approvalPrompts:a,approvalDone:r,resetRequired:i,approvalsCompleted:s,authorizationRequired:c,authorizationPrompts:l,authorizationsCompleted:p,retainIdlePlan:u}){const m=vt(a??(o||r?i?2:1:0)),d=r?m:Math.min(vt(s),m),h=vt(l??(c?1:0)),f=Math.min(vt(p),h),w=d>0||f>0,v=m>0||h>0,g=e==="idle"&&!r&&!w&&!(u&&v)?0:1+m+h;if(g===0)return ld;if(e==="success")return{total:g,completed:g,active:null};if(e==="idle")return{total:g,completed:d+f,active:null};if(e==="approving"){const T=d+f,P=d<m?d+1:f<h?m+f+1:null;return{total:g,completed:T,active:P};}if(e==="signing")return{total:g,completed:m+f,active:f<h?m+f+1:null};if(e==="submitting"&&t&&n==="permission")return{total:g,completed:d+f,active:null};const I=g-1;return{total:g,completed:t?g:I,active:t?null:g};}function ih({status:e,inputSymbol:t,txHash:n,transactionStage:o=null,actionError:a,approvalRequired:r,approvalPrompts:i,approvalDone:s,resetRequired:c=!1,approvalsCompleted:l=0,authorizationRequired:p,authorizationPrompts:u,authorizationsCompleted:m=0}){e==="success"&&o==="permission"&&(e="submitting");const d=dd({status:e,txHash:n,transactionStage:o,approvalRequired:r,approvalPrompts:i,approvalDone:s,resetRequired:c,approvalsCompleted:l,authorizationRequired:p,authorizationPrompts:u,authorizationsCompleted:m,retainIdlePlan:!!a});return a?{state:"error",label:a,walletPrompts:d,completePct:ft(d),activeWidthPct:0}:e==="success"?{state:"success",label:"Swap confirmed",walletPrompts:d,completePct:100,activeWidthPct:0}:e==="idle"?s?{state:"pending",label:"Approved · ready to swap",walletPrompts:d,completePct:ft(d),activeWidthPct:0}:null:e==="submitting"&&n&&o==="permission"?{state:"mining",label:`Waiting for ${t} permission`,walletPrompts:d,completePct:ft(d),activeWidthPct:100}:e==="approving"?{state:"pending",label:s&&p?"Approving in wallet":`Approving ${t}`,walletPrompts:d,completePct:ft(d),activeWidthPct:100}:r||s?{state:e==="submitting"&&n?"mining":"pending",label:e==="signing"?"Approved · confirm in wallet":n?"Confirming swap":"Sending swap",walletPrompts:d,completePct:ft(d),activeWidthPct:100}:{state:e==="submitting"&&n?"mining":"pending",label:e==="signing"?p?`Approving ${t}`:"Preparing swap":n?"Confirming swap":"Sending swap",walletPrompts:d,completePct:ft(d),activeWidthPct:100};}function Ne(e,t){const n={...t,context:{chainId:t.chainId,...(t.marketId?{marketId:t.marketId}:{}),...t.context}};if(globalThis.__AEGIS_SWAP_DEBUG__===!0&&console.warn(`[aegis-backend-adapters] ${n.reason}`,n.context),!!e)try{e(n);}catch(o){console.warn("[aegis-backend-adapters] onSkip callback failed",o);}}const _i={1:qr,56:Dr,130:uc,8453:lc,57073:Or};function md(e){if(e===ee)return[...Vr];if(e===fe)return[...Hr];const t=_i[e];return t?[...t.rpcUrls.default.http]:[];}function pd(e){return{bps:e.fee.outputFeeBps,recipient:D(e.fee.recipient)};}function fd(e,t){return e.contracts[String(t)]??{};}function hd(e,t){return e.allowlists[String(t)]??{routers:[],spenders:[]};}function wd(e){return e instanceof Error?e.message:String(e);}function bd(e,t,n){const o=t.aegisRouter??n.routers[0];if(!o)return;const a=D(o);if(yl(a,n.routers),!(Ur[e]??[]).some(i=>b(i,a)))throw new Le("ROUTER_NOT_ALLOWLISTED",`Router ${a} is not in the SDK's pinned router set for chain ${e}.`);return a;}function kd(e,t){const n=e.permit2??t.spenders[0];if(!n)return;const o=D(n);if(Il(o,t.spenders),!b(o,so))throw new Le("SPENDER_NOT_ALLOWLISTED",`Permit2 ${o} does not match the canonical deployment ${so}.`);return o;}function Ni(e,t,n){const o=fd(t,e),a=hd(t,e);let r,i;try{r=bd(e,o,a),i=kd(o,a);}catch(c){return n("router/permit2 not allowlisted",{message:wd(c)}),null;}const s=Re[e];return o.v4Quoter&&s!=null&&s.quoter&&!b(o.v4Quoter,s.quoter)?(n("backend quoter differs from SDK default",{backendQuoter:o.v4Quoter,sdkQuoter:s.quoter}),null):{router:r,permit2:i,quoter:(s==null?void 0:s.quoter)??o.v4Quoter,contracts:o};}function vd(e){if(!(e!=null&&e.length))return null;const t=e.filter(n=>Number.isSafeInteger(n));return t.length?new Set(t):null;}function yd(e){var t;return{chainId:e.chainId,address:D(e.address),name:e.fullName||e.displayName||e.symbol,symbol:e.symbol,decimals:e.decimals,iconUrl:((t=e.iconUrl)==null?void 0:t.trim())||null,// Drop NaN/negative so the UI's "price known?" check stays a clean numeric guard.
|
|
49
|
+
priceUsd:Number.isFinite(e.priceUsd)&&e.priceUsd>=0?e.priceUsd:void 0,stable:e.stable};}function Id(e){return e.map(yd);}function sh(e,t,n={}){var i,s,c,l,p,u,m;const o={},a=pd(e),r=vd(n.enabledChainIds);for(const d of e.chains){const h=d.chainId;if(r&&!r.has(h))continue;const f=Ni(h,e,($,G)=>Ne(n.onSkip,{kind:"chain",chainId:h,reason:`chain skipped: ${$}`,context:G}));if(!f)continue;const{router:w,permit2:v,quoter:g,contracts:I}=f,T=Re[h],P=((i=t==null?void 0:t[h])==null?void 0:i.chain)??_i[h];if(!w||!v||!g||!P){Ne(n.onSkip,{kind:"chain",chainId:h,reason:"chain skipped: missing router/permit2/quoter or unknown chain",context:{router:!!w,permit2:!!v,quoter:!!g,viemChain:!!P}});continue;}const E=[...(Array.isArray(n.rpcUrls)?n.rpcUrls:((s=n.rpcUrls)==null?void 0:s[h])??((c=t==null?void 0:t[h])==null?void 0:c.rpcUrls)??md(h))];if(!E.length){Ne(n.onSkip,{kind:"chain",chainId:h,reason:"chain skipped: no RPC URLs resolved",context:{}});continue;}const R={...T,...((l=t==null?void 0:t[h])==null?void 0:l.v4Contracts),permit2:v,quoter:g,poolManager:I.v4PoolManager??((u=(p=t==null?void 0:t[h])==null?void 0:p.v4Contracts)==null?void 0:u.poolManager)},_=Object.prototype.hasOwnProperty.call(n,"metadataEndpoint")?n.metadataEndpoint:(m=t==null?void 0:t[h])==null?void 0:m.metadataEndpoint,L={...(t==null?void 0:t[h]),chainId:h,chain:P,name:d.name,router:w,permit2:v,quoter:g,v4Contracts:R,rpcUrls:E,metadataEndpoint:_};o[h]={...$r(L),fee:a};}return o;}function ch({config:e,markets:t,tokens:n,trustedPools:o=[],enabledOnly:a=!0,onSkip:r}){const i=new Map(Id(n).map(s=>[ne(s.address),s]));return t.flatMap(s=>{if(s.kind!=="aegis-direct-v4")return Ne(r,{kind:"market",chainId:s.chainId,marketId:s.id,reason:"market skipped: unsupported direct-swap market kind",context:{kind:s.kind}}),[];if(a&&s.status!=="enabled")return[];const c=i.get(ne(s.baseToken)),l=i.get(ne(s.quoteToken)),p=Ni(s.chainId,e,(E,R)=>Ne(r,{kind:"market",chainId:s.chainId,marketId:s.id,reason:`market skipped: ${E}`,context:R}));if(!p)return[];const{router:u,permit2:m,quoter:d}=p;if(!c||!l||!u||!m||!d)return Ne(r,{kind:"market",chainId:s.chainId,marketId:s.id,reason:"market skipped: missing token or router/permit2/quoter",context:{hasBaseToken:!!c,hasQuoteToken:!!l,router:!!u,permit2:!!m,quoter:!!d}}),[];const h=je(s.poolKey);if(!Y(h,s.poolId))return Ne(r,{kind:"market",chainId:s.chainId,marketId:s.id,reason:"market skipped: poolKey does not hash to declared poolId",context:{declaredPoolId:s.poolId,computedPoolId:h}}),[];const f={id:s.id,chainId:s.chainId,symbol:c.symbol,poolId:s.poolId,poolKey:s.poolKey,token:c,counterToken:l,router:u,permit2:m,quoter:d,...(s.label?{label:s.label}:{})},w=ai(f),v=o.find(E=>E.chainId===s.chainId&&E.poolId!==void 0&&Y(E.poolId,s.poolId)),g=v!=null&&v.router&&v.permit2&&v.quoter?b(v.poolKey.currency0,s.poolKey.currency0)&&b(v.poolKey.currency1,s.poolKey.currency1)&&v.poolKey.fee===s.poolKey.fee&&v.poolKey.tickSpacing===s.poolKey.tickSpacing&&b(v.poolKey.hooks,s.poolKey.hooks)&&b(v.router,u)&&b(v.permit2,m)&&b(v.quoter,d):!1;if(!v||!g)return w?[f]:(Ne(r,{kind:"market",chainId:s.chainId,marketId:s.id,reason:"market skipped: pool is absent from or differs from the trusted catalogue",context:{poolId:s.poolId}}),[]);const I=/* @__PURE__ */new Map([[ne(c.address),c],[ne(l.address),l]]);if(![v.token,v.counterToken].every(E=>{const R=I.get(ne(E.address));return!!(R&&R.chainId===E.chainId&&R.decimals===E.decimals);}))return Ne(r,{kind:"market",chainId:s.chainId,marketId:s.id,reason:"market skipped: token decimals differ from the trusted catalogue",context:{poolId:s.poolId}}),[];const S=E=>{const R=I.get(ne(E.address));return{...E,...((R==null?void 0:R.priceUsd)!==void 0?{priceUsd:R.priceUsd}:{}),...(R!=null&&R.iconUrl?{iconUrl:R.iconUrl}:{})};};return[{...v,id:s.id,token:S(v.token),counterToken:S(v.counterToken)}];});}const Xe=k().int().positive(),xt=k().finite().nullable().optional(),Vn=k().int().nullable().optional(),ho=Pe.nullable().optional(),ht=k().finite().nullable(),Hn=k().int().nonnegative().nullable(),an=Ke().nullable(),at=me.nullable(),Ed=k().int().min(0).max(16777215),Di=B("post_swap_surge_trigger"),J=C().regex(/^-?[0-9]+$/,"Expected a signed base-10 integer string."),Tt=To.refine(e=>e.length===66,"Engine poolId must be a 32-byte hex value."),Ad=To.refine(e=>e.length===66,"Engine transaction hash must be a 32-byte hex value."),hn=x({chainId:Xe,address:z,name:C(),symbol:C(),decimals:k().int().min(0).max(255),iconUrl:C().nullable().optional(),priceUsd:xt.transform(e=>e??void 0),stable:Ke().nullable().optional().transform(e=>e??void 0)}),Oi=x({source:B("canopy"),updatedAt:ho,blockNumber:k().int().nonnegative().nullable().optional(),marketCount:k().int().nonnegative()}).strict(),gd=x({schemaVersion:B("1"),chainId:Xe,markets:q(mn()),freshness:Oi}),Sd=x({schemaVersion:B("2"),chainId:Xe,markets:q(mn()),freshness:Oi}).strict(),Zo=C().regex(/^evm_[1-9]\d*_0x[0-9a-fA-F]{64}$/,"Engine marketId must contain a positive chain id and 32-byte pool id."),qi=x({t:k().int().nonnegative(),observedAt:Pe,blockNumber:k().int().nonnegative(),utilizationPct:ht,borrowAprPct:ht,lendApyPct:ht,ratePerSecondWad:at,rateSource:C().nullable(),fullUtilizationRate:at,sharePriceWad:at,suppliedUsd:ht,borrowedUsd:ht,availableToBorrowUsd:ht,baseFeePpm:Hn,activeFeePpm:Hn,surgeFeePpm:Hn,feeSource:C().nullable(),surgeActive:an,inCapEvent:an,manualOverride:an,perSwapMode:an,warnings:q(C())}).strict(),Cd=qi.extend({adaptiveTickThresholdTicks:Ed.nullable(),adaptiveTickThresholdMode:Di.nullable(),feeObservedAt:Pe.nullable()}).strict().superRefine((e,t)=>{const n=e.adaptiveTickThresholdTicks!==null,o=e.adaptiveTickThresholdMode!==null;n!==o&&t.addIssue({code:"custom",message:"adaptiveTickThresholdTicks and adaptiveTickThresholdMode must both be values or both be null."});});function Li(e,t){var o;_r(e,t),e.points.length===0!=(e.updatedAt===null)&&t.addIssue({code:"custom",path:["updatedAt"],message:"updatedAt must be null exactly when the series has no points."});const n=((o=e.points.at(-1))==null?void 0:o.observedAt)??null;e.updatedAt!==n&&t.addIssue({code:"custom",path:["updatedAt"],message:"updatedAt must equal the newest point observedAt."});}const xd=x({marketId:Zo,resolution:B("12h"),window:V(["7d","30d","60d"]),status:V(["ready","warming_up","no_data"]),pointCount:k().int().nonnegative(),points:q(qi),updatedAt:Pe.nullable()}).strict().superRefine(Li),Td=x({schemaVersion:B("2"),marketId:Zo,resolution:B("12h"),window:V(["7d","30d","60d"]),status:V(["ready","warming_up","no_data"]),pointCount:k().int().nonnegative(),points:q(Cd),updatedAt:Pe.nullable()}).strict().superRefine(Li),Qa=x({raw:me,formatted:C(),valueUsd:xt}),Rd=x({principalRaw:me,borrowIndexWadAtLastDebt:me.nullable().optional()}),Pd=x({lastLockedPips:Vn,lastLockedPct:xt,maxLtvPips:Vn,hardLtvPips:Vn}).strict(),Bd=x({id:C().nullable().optional(),kind:C().nullable().optional(),tokenId:me.nullable().optional(),liquidityRaw:me.nullable().optional()}),Fi=x({id:C(),chainId:Xe,account:z,vaultId:me,status:V(["open","debt","collateral","empty"]),marketId:C().nullable().optional(),marketName:C().nullable().optional(),poolId:Tt,token0:hn.nullable().optional(),token1:hn.nullable().optional(),amount0:Qa,amount1:Qa,collateralValueUsd:xt,debt:Rd,ltv:Pd,nfts:x({count:k().int().nonnegative(),items:q(Bd)}),createdAt:ho,createdBlockNumber:k().int().nonnegative().nullable().optional(),updatedAt:ho,warnings:q(C())}),Md=x({schemaVersion:B("1"),chainId:Xe,account:z,positions:q(Fi),totals:x({collateralValueUsd:xt,positionCount:k().int().nonnegative()}).strict(),freshness:x({source:B("subgraph"),blockNumber:k().int().nonnegative().nullable().optional(),positionCount:k().int().nonnegative()})}).superRefine((e,t)=>{for(const[n,o]of[[["totals","positionCount"],e.totals.positionCount],[["freshness","positionCount"],e.freshness.positionCount]])o!==e.positions.length&&t.addIssue({code:"custom",path:[...n],message:"Position count must match positions.length."});}),_d=Fi.extend({kind:B("borrow_vault")}),Nd=x({kind:B("lend_shares"),id:C(),chainId:Xe,account:z,// Backend always emits these (null when the owned pool has no market
|
|
50
50
|
// metadata), so require them — the client enforces the documented shape.
|
|
51
|
-
marketId:x().nullable(),marketName:x().nullable(),poolId:Tt,token0:fn.nullable(),token1:fn.nullable(),indexedBalanceRaw:me,warnings:F(x()),freshness:R({source:D("subgraph"),indexedBlockNumber:v().int().nonnegative().nullable()})}),Fd=Gt("kind",[Nd,Od]),qd=R({schemaVersion:D("2"),chainId:Xe,account:z,positions:F(Fd),totals:R({collateralValueUsd:xt,positionCount:v().int().nonnegative(),borrowVaultCount:v().int().nonnegative(),lendPositionCount:v().int().nonnegative()}).strict(),freshness:R({source:D("subgraph"),blockNumber:v().int().nonnegative().nullable().optional(),positionCount:v().int().nonnegative()})}).superRefine((e,t)=>{const n=e.positions.filter(r=>r.kind==="borrow_vault").length,o=e.positions.length-n,a=[[["totals","positionCount"],e.totals.positionCount,e.positions.length],[["totals","borrowVaultCount"],e.totals.borrowVaultCount,n],[["totals","lendPositionCount"],e.totals.lendPositionCount,o],[["freshness","positionCount"],e.freshness.positionCount,e.positions.length]];for(const[r,i,s]of a)i!==s&&t.addIssue({code:"custom",path:[...r],message:"Position summary count does not match the discriminated rows."});}),Pe=R({id:x().min(1),timestamp:v().int().nonnegative(),blockNumber:v().int().nonnegative(),transactionIndex:v().int().nonnegative(),txHash:Sd,logIndex:v().int().nonnegative()}).strict(),Ld=Pe.extend({kind:D("vault_created"),owner:z}).strict(),Ud=Pe.extend({kind:D("vault_burned"),caller:z}).strict(),Vd=Pe.extend({kind:D("vault_locked"),ltvPips:v().int().nullable()}).strict(),$d=Pe.extend({kind:D("debt_modified"),principalDeltaRequestedRaw:Y,principalDeltaActualRaw:Y,borrowIndexWad:me,deltaIdle0Raw:Y,deltaIdle1Raw:Y}).strict(),Hd=Pe.extend({kind:D("idle_modified"),deltaAmount0Raw:Y,deltaAmount1Raw:Y}).strict(),Wd=Pe.extend({kind:D("vault_micro_liquidated"),caller:z,zeroForOne:We(),swapDelta0Raw:Y,swapDelta1Raw:Y,debtRepaidRlRaw:Y,idleDelta0Raw:Y,idleDelta1Raw:Y,keeperFee0Raw:Y,keeperFee1Raw:Y,initialLtvPips:v().int().nullable()}).strict(),Kd=Gt("kind",[Ld,Ud,Vd,$d,Hd,Wd]),zd=Pe.extend({kind:D("deposit"),deltaSharesRaw:Y,deltaAmount0Raw:Y,deltaAmount1Raw:Y}).strict(),Gd=Pe.extend({kind:D("withdraw"),deltaSharesRaw:Y,deltaAmount0Raw:Y,deltaAmount1Raw:Y}).strict(),jd=Pe.extend({kind:D("transfer_in"),sharesRaw:me,counterparty:z}).strict(),Qd=Pe.extend({kind:D("transfer_out"),sharesRaw:me,counterparty:z}).strict(),Xd=Gt("kind",[zd,Gd,jd,Qd]);function Yd(e,t){return e.blockNumber-t.blockNumber||e.transactionIndex-t.transactionIndex||e.logIndex-t.logIndex;}function Fi(e,t){for(let n=1;n<e.length;n+=1)if(!(Yd(e[n-1],e[n])<=0)){t.addIssue({code:"custom",path:["actions",n],message:"Engine activity actions must be ordered oldest-first by execution order."});return;}}const Jd=R({marketId:x().nullable(),marketName:x().nullable(),poolId:Tt,borrowIndexWad:at,lastAccrueTimestamp:v().int().nonnegative().nullable(),ratePerSecondWad:at,rateUpdatedAt:Be.nullable(),totalRlBorrowed:at,shareTotalSupply:at,warnings:F(x())}).strict(),Zd=R({vaultId:me,poolId:Tt,marketId:x().nullable(),marketName:x().nullable(),createdAt:Be.nullable(),burnedAt:Be.nullable(),actions:F(Kd)}).strict().superRefine((e,t)=>{Fi(e.actions,t);}),em=R({poolId:Tt,marketId:x().nullable(),marketName:x().nullable(),actions:F(Xd)}).strict().superRefine((e,t)=>{Fi(e.actions,t);}),tm=R({schemaVersion:D("1"),chainId:Xe,account:z,marketState:F(Jd),vaults:F(Zd),lend:F(em),totals:R({vaultCount:v().int().nonnegative(),lendMarketCount:v().int().nonnegative(),vaultActionCount:v().int().nonnegative(),lendActionCount:v().int().nonnegative()}).strict(),freshness:R({source:D("subgraph"),blockNumber:v().int().nonnegative().nullable()}).strict()}).strict().superRefine((e,t)=>{const n=e.vaults.reduce((i,s)=>i+s.actions.length,0),o=e.lend.reduce((i,s)=>i+s.actions.length,0),a=[[["totals","vaultCount"],e.totals.vaultCount,e.vaults.length],[["totals","lendMarketCount"],e.totals.lendMarketCount,e.lend.length],[["totals","vaultActionCount"],e.totals.vaultActionCount,n],[["totals","lendActionCount"],e.totals.lendActionCount,o]];for(const[i,s,l]of a)s!==l&&t.addIssue({code:"custom",path:[...i],message:"Engine activity summary count does not match the ledger."});for(let i=1;i<e.vaults.length;i+=1)if(!(BigInt(e.vaults[i-1].vaultId)>=BigInt(e.vaults[i].vaultId))){t.addIssue({code:"custom",path:["vaults",i,"vaultId"],message:"Engine activity vaults must be ordered newest-first by numeric vault id."});break;}for(let i=1;i<e.lend.length;i+=1)if(!(e.lend[i-1].poolId.toLowerCase()<=e.lend[i].poolId.toLowerCase())){t.addIssue({code:"custom",path:["lend",i,"poolId"],message:"Engine lend activity must be ordered by pool id."});break;}const r=new Set(e.marketState.map(i=>i.poolId.toLowerCase()));for(const[i,s]of[["vaults",e.vaults],["lend",e.lend]])for(let l=0;l<s.length;l+=1)r.has(s[l].poolId.toLowerCase())||t.addIssue({code:"custom",path:[i,l,"poolId"],message:"Engine activity is missing the referenced market state."});}),nm=10n**18n;function $t(e){if(!e)return null;try{return BigInt(e);}catch{return null;}}function om(e,t){return e.toLowerCase()===t.toLowerCase();}function am(e){const t=e.actions.find(n=>n.kind==="vault_created");if(!t)return null;for(const n of e.actions){if(n.kind!=="idle_modified"||!om(n.txHash,t.txHash))continue;const o=$t(n.deltaAmount0Raw),a=$t(n.deltaAmount1Raw);if(!(o===null||a===null)){if(o>0n&&a===0n)return{raw:o.toString(),side:0};if(a>0n&&o===0n)return{raw:a.toString(),side:1};}}return null;}function rm(e){let t=0n,n=null;for(const o of e){if(o.kind!=="debt_modified")continue;const a=$t(o.principalDeltaActualRaw),r=$t(o.borrowIndexWad);if(a===null||r===null||r===0n)return null;t+=a,n=r;}return n===null||t<0n?null:{principal:t,openIndex:n};}function Ka(e,t){return e*t/nm;}function im(e,t){const n=rm(e.actions),o=$t((t==null?void 0:t.borrowIndexWad)??null),a=n?Ka(n.principal,n.openIndex):null,r=n&&o!==null?Ka(n.principal,o):null,i=a===null||r===null?null:r>a?r-a:0n;return{deposited:am(e),principalRaw:n?n.principal.toString():null,openBorrowIndexWad:n?n.openIndex.toString():null,indexedBorrowIndexWad:o!==null?o.toString():null,debtAtOpenRl:a!==null?a.toString():null,debtIndexedRl:r!==null?r.toString():null,interestAccruedRl:i!==null?i.toString():null};}function sm(e){const t=new Map(e.marketState.map(n=>[n.poolId.toLowerCase(),n]));return{...e,vaults:e.vaults.map(n=>({...n,display:im(n,t.get(n.poolId.toLowerCase())??null)}))};}function Xt(e,t){if(e===t)return!0;const n=/^evm_[1-9]\d*_0[xX][0-9a-fA-F]{64}$/;return!n.test(e)||!n.test(t)?!1:e.toLowerCase()===t.toLowerCase();}function cm(e,t){return w(e.currency0,t.currency0)&&w(e.currency1,t.currency1)&&e.fee===t.fee&&e.tickSpacing===t.tickSpacing&&w(e.hooks,t.hooks);}function Ue(e,t,n){if(!t||!w(t,n))throw new Error(`${e} does not match the trusted Engine deployment.`);}function Rt(e){if(e.token0.chainId!==e.chainId||e.token1.chainId!==e.chainId)throw new Error("Engine market token chain ids do not match the market chain.");if(!w(e.token0.address,e.poolKey.currency0)||!w(e.token1.address,e.poolKey.currency1))throw new Error("Engine market tokens do not match the pool key.");if(e.source==="rest"&&!ee(je(e.poolKey),e.poolId))throw new Error("Engine pool key does not hash to the selected market pool.");const t=`evm_${e.chainId}_${e.poolId.toLowerCase()}`;if(e.source==="rest"&&e.id.startsWith("evm_")&&e.id.toLowerCase()!==t)throw new Error("Engine market id does not identify the selected chain and pool.");}function Xo(e,t={}){Rt(e);const n=pe(e.chainId);if(!n)throw new Error(`No trusted Aegis Engine deployment is configured for chain ${e.chainId}.`);return Ue("Engine",e.engine,n.aegisEngine),Ue("StateView",e.stateView,n.aegisStateView),Ue("V4 StateView",e.v4StateView,n.stateView),t.quoter!==!1&&Ue("V4 quoter",e.v4Quoter,n.uniswapV4Quoter),Ue("router",e.router,n.aegisRouterV1),t.permit2!==!1&&Ue("Permit2",e.permit2,n.permit2),Ue("Pool hooks",e.poolKey.hooks,n.aegisHook),t.vaultRegistry!==!1&&Ue("VaultRegistry",e.vaultRegistry,n.vaultRegistry),n;}function qi(e){if(Rt(e.market),e.chainId!==e.market.chainId||!ee(e.poolId,e.market.poolId))throw new Error("Hydrated Engine market does not match the selected chain and pool.");if(!cm(e.poolKey,e.market.poolKey))throw new Error("Hydrated Engine pool key does not match the reviewed market.");if(e.decimals0!==void 0&&e.decimals0!==e.market.token0.decimals||e.decimals1!==void 0&&e.decimals1!==e.market.token1.decimals)throw new Error("Engine token decimals do not match the on-chain market context.");}const Je=z.nullable().optional().transform(e=>e??void 0).catch(void 0),Ze=z.optional();function Yo(e){function t(n){const o=n.nullable().optional();return e?o:o.catch(void 0);}return{number:t(v().finite()),nonnegativeInteger:t(v().int().nonnegative()),boolean:t(We()),string:t(x()),decimalString:t(me),dateTime:t(Be)};}function Li(e){const t=Yo(e.strict),n=R({tvlUsd:t.number,suppliedUsd:t.number,borrowedUsd:t.number,availableToBorrowUsd:t.number,utilizationPct:t.number,borrowAprPct:t.number,lendApyPct:t.number,activeDebtVaultCount:t.nonnegativeInteger,sharePriceWad:t.decimalString,ratePerSecondWad:t.decimalString,fullUtilizationRate:t.decimalString,rateSource:t.string,totalLendShares:t.decimalString,baseFeePpm:t.nonnegativeInteger,activeFeePpm:t.nonnegativeInteger,surgeFeePpm:t.nonnegativeInteger,surgeActive:t.boolean,inCapEvent:t.boolean,manualOverride:t.boolean,perSwapMode:t.boolean,feeSource:t.string,updatedAt:t.dateTime,engineUpdatedAt:t.dateTime,rateUpdatedAt:t.dateTime,feeUpdatedAt:t.dateTime}),o=e.metricsComputedAt?n.extend({computedAt:t.dateTime}):n,a=R({source:D("canopy"),updatedAt:t.dateTime,engineUpdatedAt:t.dateTime,rateUpdatedAt:t.dateTime,feeUpdatedAt:t.dateTime,blockNumber:t.nonnegativeInteger,blockTimestamp:t.nonnegativeInteger});return e.strict?{metrics:o.strict(),freshness:a.strict()}:{metrics:o,freshness:a};}const hn=Yo(!1),Ht=Yo(!0),Ui=Li({strict:!1,metricsComputedAt:!0}),po=Li({strict:!0,metricsComputedAt:!1}),Vi=po.metrics.extend({adaptiveTickThresholdTicks:v().int().min(0).max(16777215).optional(),adaptiveTickThresholdMode:Mi.optional(),feeObservedAt:Ht.dateTime}).strict().superRefine((e,t)=>{const n=e.adaptiveTickThresholdTicks!==void 0,o=e.adaptiveTickThresholdMode!==void 0;n!==o&&t.addIssue({code:"custom",message:"adaptiveTickThresholdTicks and adaptiveTickThresholdMode must be provided together."});}),fo=R({chainId:v().int().positive(),address:z,name:x(),symbol:x(),decimals:v().int().min(0).max(255),iconUrl:x().nullable().optional(),priceUsd:hn.number.transform(e=>e??void 0),stable:hn.boolean.transform(e=>e??void 0)}),za=fo.extend({priceUsd:Ht.number.transform(e=>e??void 0),stable:Ht.boolean.transform(e=>e??void 0)}).strict(),$i=R({id:x().min(1),chainId:v().int().positive(),source:$(["rest","static"]).optional(),status:$(["enabled","disabled","hidden","malformed"]).catch("malformed"),displayName:x().min(1),labels:F(x()).optional(),poolId:Tt,token0:fo,token1:fo,poolKey:R({currency0:z,currency1:z,fee:v().int().min(0).max(16777215),tickSpacing:v().int().min(1).max(8388607),hooks:z}),engine:Je,stateView:Je,v4StateView:Je,v4Quoter:Je,router:Je,permit2:Je,vaultRegistry:Je,borrowEnabled:We().catch(!1),lendEnabled:We().catch(!1),canBorrow:hn.boolean,canLend:hn.boolean,maxLtvPips:v().int().min(0).max(1e6).nullable().optional().catch(void 0),hardLtvPips:v().int().min(0).max(1e6).nullable().optional().catch(void 0),warnings:F(x()).nullable().optional().transform(e=>e??[]).catch([]),disabledReasons:R({borrow:F(x()).catch([]),lend:F(x()).catch([])}).optional().catch(void 0),metrics:dn().optional(),freshness:dn().optional()}),Hi=$i.extend({source:D("rest"),status:$(["enabled","disabled"]),token0:za,token1:za,engine:Ze,stateView:Ze,v4StateView:Ze,v4Quoter:Ze,router:Ze,permit2:Ze,vaultRegistry:Ze,borrowEnabled:We(),lendEnabled:We(),canBorrow:Ht.boolean,canLend:Ht.boolean,maxLtvPips:v().int().min(0).max(1e6).nullable().optional(),hardLtvPips:v().int().min(0).max(1e6).nullable().optional(),warnings:F(x()),disabledReasons:R({borrow:F(x()),lend:F(x())}).strict(),metrics:po.metrics,freshness:po.freshness}).strict(),lm=Hi.extend({metrics:Vi}).strict();function um(e,t){const n=(t==="2"?Vi:Ui.metrics).safeParse(e);if(!n.success)return;const o=Object.fromEntries(Object.entries(n.data).filter(([,a])=>a!==void 0));return Object.keys(o).length>0?o:void 0;}function dm(e){const t=Ui.freshness.safeParse(e);if(t.success)return Object.fromEntries(Object.entries(t.data).filter(([,n])=>n!==void 0));}function mm(e,t,n="1"){const a=(t==="rest"?n==="2"?lm:Hi:$i).safeParse(e);if(!a.success)return null;const{metrics:r,freshness:i,source:s,...l}=a.data,c=um(r,t==="rest"?n:void 0),p=dm(i);return{...l,source:s??"rest",...(c?{metrics:c}:{}),...(p?{freshness:p}:{})};}function pm(e){const t=fl(e);if(!t)return{warning:`Engine execution disabled: no trusted contract registry for chain ${e.chainId}.`,viewOnly:!1};const n=t.addresses,a=[["engine",e.engine,n.aegisEngine],["stateView",e.stateView,n.aegisStateView],["v4StateView",e.v4StateView,n.stateView],["v4Quoter",e.v4Quoter,n.uniswapV4Quoter],["router",e.router,n.aegisRouterV1],["permit2",e.permit2,n.permit2],["vaultRegistry",e.vaultRegistry,n.vaultRegistry],["hooks",e.poolKey.hooks,n.aegisHook]].filter(([,r,i])=>ne(r)!==ne(i)).map(([r])=>r);return a.length>0?{warning:`Engine execution disabled: contract registry mismatch (${a.join(", ")}).`,viewOnly:!1}:t.name!=="default"?{warning:`Engine execution disabled: ${t.name} requires deployment-aware SDK reads.`,viewOnly:!0}:{warning:null,viewOnly:!1};}function fm(e){try{return Rt(e),null;}catch(t){return`Engine execution disabled: ${t instanceof Error?t.message:"market identity mismatch"}`;}}function hm(e,t,n){var s,l;const o=[...e.warnings],a=c=>{o.includes(c)||o.push(c);},r=((s=e.disabledReasons)==null?void 0:s.borrow)??[];!t&&r.length>0?a(`Borrowing unavailable: ${r.join(", ")}.`):e.source==="rest"&&e.borrowEnabled&&e.canBorrow!==!0&&a("Borrowing unavailable: backend readiness is not confirmed.");const i=((l=e.disabledReasons)==null?void 0:l.lend)??[];return!n&&i.length>0?a(`Lending unavailable: ${i.join(", ")}.`):e.source==="rest"&&e.lendEnabled&&e.canLend!==!0&&a("Lending unavailable: backend readiness is not confirmed."),o;}function wm(e){const{warning:t,viewOnly:n}=pm(e),o=fm(e),a=e.status==="enabled"&&t===null&&o===null,r=e.source==="rest"?e.canBorrow===!0:e.canBorrow!==!1,i=e.source==="rest"?e.canLend===!0:e.canLend!==!1,s=a&&e.borrowEnabled&&r,l=a&&e.lendEnabled&&i,c=hm(e,s,l);for(const p of[o,t])p&&!c.includes(p)&&c.push(p);return{...e,...(n?{viewOnly:!0}:{}),status:e.status==="enabled"&&(!a||!s&&!l)?"disabled":e.status,borrowEnabled:s,lendEnabled:l,canBorrow:s,canLend:l,warnings:c};}function bm(e){return e.sort((t,n)=>t.status!==n.status?t.status==="enabled"?-1:1:t.displayName.localeCompare(n.displayName));}function Wn(e){const t=[];for(const n of e.markets){const o=mm(n,e.source,e.restResponseVersion);if(!o){if(e.source==="rest")throw new Error("Engine REST market response contained a malformed market row.");continue;}const a={...o,source:e.source??o.source,...(o.v4Quoter||!e.defaultV4Quoter?{}:{v4Quoter:e.defaultV4Quoter})};if(a.chainId!==e.chainId){if(e.source==="rest")throw new Error("Engine REST market response contained a market for the wrong chain.");continue;}a.status!=="hidden"&&t.push(wm(a));}return bm(t);}let Ga=null;function Q(){return Ga??(Ga=import("./sdkRuntime-CMBWjHxv.js").then(({engineSdkRuntime:e})=>e)),Ga;}const Kn=2500;let ho=/* @__PURE__ */new WeakMap();class we extends _{constructor(t){super(t,{kind:"market-not-ready",retryable:!1}),this.name="AegisEngineMarketNotReadyError";}}function km(e){const t=e.market.stateView,n=e.market.v4StateView;if(!t)throw new we("Market is missing StateView.");if(!n)throw new we("Market is missing V4 StateView.");return{stateView:t,v4StateView:n};}function Jo(e){Rt(e.market);const{stateView:t,v4StateView:n}=km(e),o=pe(e.market.chainId);if(!o)throw new we(`No trusted Aegis Engine deployment is configured for chain ${e.market.chainId}.`);if(!w(t,o.aegisStateView)||!w(n,o.stateView))throw new we("Engine market read addresses do not match the trusted SDK registry.");return{stateView:t,v4StateView:n,registry:o};}function Bn(e){const t=ho.get(e);if(t)return t;const n={marketSnapshots:Te({ttlMs:Kn}),lendContexts:Te({ttlMs:Kn}),borrowContexts:Te({ttlMs:Kn}),tokenDecimals:Te({ttlMs:Number.POSITIVE_INFINITY,maxEntries:256})};return ho.set(e,n),n;}const vm=[{type:"function",name:"decimals",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint8"}]}];async function Zo(e){if(e.market.source!=="rest")return;const t=[e.market.token0,e.market.token1].some(l=>w(l.address,ie)),n=e.publicClient.chain;if(t&&(n==null?void 0:n.id)!==e.market.chainId)throw new we("Native token chain does not match the market.");const o=t?n==null?void 0:n.nativeCurrency.decimals:void 0,a=Bn(e.publicClient).tokenDecimals,r=Pn(e,[e.market.token0.address,e.market.token1.address,String(o??"")]),[i,s]=await a.read(r,async()=>{const l=async c=>{const p=w(c,ie)?o:await e.publicClient.readContract({address:c,abi:vm,functionName:"decimals"}),u=Number(p);if(!Number.isInteger(u)||u<0||u>255)throw new we("Token decimals are invalid.");return u;};return Promise.all([l(e.market.token0.address),l(e.market.token1.address)]);});if(i!==e.market.token0.decimals||s!==e.market.token1.decimals)throw new we("Engine token decimals do not match the chain.");}function Pn(e,t){return[e.market.chainId,e.market.poolId.toLowerCase(),...t.map(n=>n.toLowerCase())].join(":");}function d0(){ho=/* @__PURE__ */new WeakMap();}async function Em(e){const{stateView:t,v4StateView:n}=Jo(e);await Zo(e);const o=Bn(e.publicClient).marketSnapshots,a=Pn(e,[t,n]);return o.read(a,async()=>{const{fetchMarket:r,fetchMarketLtvThresholds:i,fetchMarketSharePriceLatest:s,fetchPoolState:l}=await Q(),[c,p,u,m]=await Promise.all([r(e.publicClient,t,e.market.poolId),i(e.publicClient,t,e.market.poolId),l(e.publicClient,n,e.market.poolId),s(e.publicClient,t,e.market.poolId)]);if(!c.initialized)throw new we("Aegis market is not initialized on-chain yet.");return{market:c,thresholds:p,poolState:u,sharePriceWadLatest:m};});}async function m0(e){const t=await Em(e),{priceFromSqrtX96:n}=await Q(),o=n(t.poolState.sqrtPriceX96,e.market.token0.decimals,e.market.token1.decimals);if(!Number.isFinite(o)||o<=0)throw new we("Pool mid price is not readable for this market yet.");return{poolId:e.market.poolId,chainId:e.market.chainId,price:o,sqrtPriceX96:t.poolState.sqrtPriceX96,observedAt:Date.now()};}async function ym(e){const{stateView:t,v4StateView:n}=Jo(e);await Zo(e);const o=St(e.market.chainId);if(!o)throw new we(`No trusted Aegis Engine version is configured for chain ${e.market.chainId}.`);const a=Bn(e.publicClient).lendContexts,r=Pn(e,[t,n,o]);return a.read(r,async()=>{const{fetchLendQuoteContext:i}=await Q(),s=await i(e.publicClient,{chainId:e.market.chainId,version:o,poolId:e.market.poolId});return qi({market:e.market,chainId:s.chainId,poolId:s.poolId,poolKey:s.market.poolKey}),s;});}async function ea(e,t,n={}){var c;const{stateView:o,v4StateView:a,registry:r}=Jo(e);await Zo(e);const i=St(e.market.chainId);if(!i)throw new we(`No trusted Aegis Engine version is configured for chain ${e.market.chainId}.`);const s=Bn(e.publicClient).borrowContexts,l=Pn(e,[o,a,r.variableInterestRate,i,(t==null?void 0:t.owner)??"",((c=t==null?void 0:t.vaultId)==null?void 0:c.toString())??""]);return s.read(l,async()=>{const{fetchBorrowQuoteContext:p}=await Q(),u=await p(e.publicClient,{chainId:e.market.chainId,version:i,poolId:e.market.poolId,...(t?{owner:t.owner,...(t.vaultId!==void 0?{vaultId:t.vaultId}:{})}:{})});if(u.status!=="ok")throw new we(`Borrow-rate projection is unavailable: ${u.reason}.`);const m=u.context;qi({market:e.market,chainId:m.chainId,poolId:m.poolId,poolKey:m.market.poolKey,decimals0:m.market.decimals0,decimals1:m.market.decimals1});const d=m.version,h=m.aprProjection.version;return{chainId:m.chainId,version:d,poolId:m.poolId,market:{poolId:m.market.poolId,poolKey:m.market.poolKey,sqrtPriceX96:m.market.sqrtPriceX96,tickCurrent:m.market.tickCurrent,tickSpacing:m.market.tickSpacing,inRangeLiquidity:m.market.inRangeLiquidity,borrowIndexWad:m.market.borrowIndexWad,equityLWad:m.market.equityLWad,borrowedLWad:m.market.borrowedLWad,maxLtvPips:m.market.maxLtvPips,hardLtvPips:m.market.hardLtvPips,currentRatePerSecWad:m.market.currentRatePerSecWad,decimals0:m.market.decimals0,decimals1:m.market.decimals1},aprProjection:{chainId:m.aprProjection.chainId,version:h,rateOracleAddress:m.aprProjection.rateOracleAddress,fullUtilRate:m.aprProjection.fullUtilRate},frame:{blockNumber:m.frame.blockNumber,blockHash:m.frame.blockHash,blockTimestamp:m.frame.blockTimestamp,observedAt:m.frame.observedAt},execution:m.authorization?{owner:m.authorization.owner,vaultId:m.authorization.vaultId,chainId:m.authorization.chainId,permit2:m.authorization.permit2,ownerOnChain:m.authorization.ownerOnChain,vaultPoolId:m.authorization.vaultPoolId,routerApproved:m.authorization.routerApproved,router:m.authorization.router,vaultRegistry:m.authorization.vaultRegistry,blockNumber:m.authorization.blockNumber}:null};},n.forceRefresh);}function Im(e){for(const t of[...e.positions,...e.lendPositions]){if(t.chainId!==e.chainId)throw new TypeError(`Engine position ${t.id} belongs to chain ${t.chainId}, not ${e.chainId}.`);if(!w(t.account,e.expectedAccount))throw new TypeError(`Engine position ${t.id} does not belong to the expected account.`);}}function ja(e){return e.status==="failed"&&e.reason==="read-error";}function Am(e,t,n){return e.status==="failed"?{positionId:t,vaultId:n,status:"failed",reason:e.reason,...(e.detail!==void 0?{detail:e.detail}:{})}:{positionId:t,vaultId:n,status:"ok",vault:{poolId:e.vault.poolId,owner:e.vault.owner,rL:e.vault.rL,debtLLatest:e.vault.debtLLatest,idle0:e.vault.idle0,idle1:e.vault.idle1,ltvPipsLatest:e.vault.ltvPipsLatest,maxLtvPips:e.vault.maxLtvPips,hardLtvPips:e.vault.hardLtvPips}};}function gm(e,t){return e.status==="failed"?{positionId:t.id,account:t.account,poolId:t.poolId,status:"failed",reason:e.reason,...(e.detail!==void 0?{detail:e.detail}:{})}:{positionId:t.id,account:e.account,poolId:e.poolId,status:"ok",shareBalance:e.shareBalance,totalShares:e.totalShares,sharePriceWad:e.sharePriceWad,equityLWad:e.equityLWad};}async function Sm(e){var i;const t=e.result.vaults.flatMap((s,l)=>ja(s)?[l]:[]),n=e.result.shares.flatMap((s,l)=>ja(s)?[l]:[]);if(t.length===0&&n.length===0||(i=e.signal)!=null&&i.aborted)return e.result;let o;try{o=await e.fetchPositionsBatch(e.publicClient,{chainId:e.chainId,version:e.version,vaultIds:t.map(s=>e.vaultIds[s]),sharePositions:n.map(s=>e.sharePositions[s]),expectedOwner:e.expectedAccount,blockNumber:e.result.frame.blockNumber,...(e.signal!==void 0?{signal:e.signal}:{})});}catch(s){if(s instanceof Error&&s.name==="ReadFrameNotCanonicalError")throw s;return e.result;}if(o.frame.blockNumber!==e.result.frame.blockNumber||o.frame.blockHash.toLowerCase()!==e.result.frame.blockHash.toLowerCase()||o.frame.blockTimestamp!==e.result.frame.blockTimestamp)throw new Error("Position read frame changed during retry. Refresh positions.");const a=e.result.vaults.map((s,l)=>{const c=t.indexOf(l);return c===-1?s:o.vaults[c];}),r=e.result.shares.map((s,l)=>{const c=n.indexOf(l);return c===-1?s:o.shares[c];});return{...e.result,vaults:a,shares:r};}async function p0(e){var h,f,b,k;Im(e);const t=St(e.chainId);if(!t)throw new we(`No trusted Aegis Engine version is configured for chain ${e.chainId}.`);const n=e.positions.map(E=>BigInt(E.vaultId)),o=e.lendPositions.map(E=>({account:e.expectedAccount,poolId:E.poolId})),{fetchPositionsBatch:a,fetchMarket:r,fetchPoolState:i,getAmountsForFullRangeLiquidity:s}=await Q(),l={chainId:e.chainId,version:t,vaultIds:n,sharePositions:o,expectedOwner:e.expectedAccount,...(e.signal!==void 0?{signal:e.signal}:{})};let c;try{c=await a(e.publicClient,l);}catch(E){if((h=e.signal)!=null&&h.aborted)throw E;c=await a(e.publicClient,l);}c=await Sm({fetchPositionsBatch:a,publicClient:e.publicClient,chainId:l.chainId,version:l.version,expectedAccount:e.expectedAccount,vaultIds:n,sharePositions:o,result:c,...(e.signal!==void 0?{signal:e.signal}:{})});const p=pe(e.chainId),u=/* @__PURE__ */new Map(),m=[...new Set(c.vaults.flatMap(E=>E.status==="ok"&&E.vault.debtLLatest>0n?[E.vault.poolId]:[]))];if(p)for(let E=0;E<m.length;E+=4){if((f=e.signal)!=null&&f.aborted)throw new DOMException("Aborted","AbortError");await Promise.all(m.slice(E,E+4).map(async T=>{try{const[S,B]=await Promise.all([r(e.publicClient,p.aegisStateView,T,c.frame.blockNumber),i(e.publicClient,p.stateView,T,c.frame.blockNumber)]);S.initialized&&B.sqrtPriceX96>0n&&je(S.poolKey).toLowerCase()===T.toLowerCase()&&u.set(T.toLowerCase(),{key:S.poolKey,state:B});}catch{}}));}if(u.size)try{((b=(await e.publicClient.getBlock({blockNumber:c.frame.blockNumber})).hash)==null?void 0:b.toLowerCase())!==c.frame.blockHash.toLowerCase()&&u.clear();}catch{u.clear();}if((k=e.signal)!=null&&k.aborted)throw new DOMException("Aborted","AbortError");const d=c.vaults.map((E,T)=>{const S=Am(E,e.positions[T].id,n[T]);if(S.status!=="ok")return S;S.vault.debtAmounts=null;const B=e.positions[T],A=u.get(S.vault.poolId.toLowerCase());if(S.vault.debtLLatest===0n)S.vault.debtAmounts={amount0:0n,amount1:0n};else if(A&&S.vault.poolId.toLowerCase()===B.poolId.toLowerCase()&&B.token0&&B.token1&&w(A.key.currency0,B.token0.address)&&w(A.key.currency1,B.token1.address))try{S.vault.debtAmounts=s(S.vault.debtLLatest,A.key,A.state,!0);}catch{}return S;});return{frame:{blockNumber:c.frame.blockNumber,blockHash:c.frame.blockHash,blockTimestamp:c.frame.blockTimestamp,observedAt:c.frame.observedAt},borrowPositions:d,lendPositions:c.shares.map((E,T)=>gm(E,e.lendPositions[T]))};}function zn(e){if(typeof e=="bigint")return e;if(typeof e=="string"||typeof e=="number")try{return BigInt(e);}catch{return 0n;}return 0n;}function Wi(e){const t=e.debt.reduce((s,l)=>s+l.principalDeltaActual,0n),n=e.idle.filter(s=>s.deltaAmount0<0n&&s.deltaAmount1===0n||s.deltaAmount1<0n&&s.deltaAmount0===0n),o=t>0n&&n.length===1?n[0]:null;let a=0n,r=0n;for(const s of e.idle)s!==o&&(a+=s.deltaAmount0,r+=s.deltaAmount1);const i=t>0n?"borrow":t<0n?"repay":a>=0n&&r>=0n&&(a>0n||r>0n)?"add-collateral":a<=0n&&r<=0n&&(a<0n||r<0n)?"withdraw-collateral":"vault-activity";return{txHash:e.txHash,timestamp:e.timestamp,kind:i,principalDeltaRl:t,collateralDelta0:a,collateralDelta1:r,receivedRaw:o?-(o.deltaAmount0<0n?o.deltaAmount0:o.deltaAmount1):null,receivedIsToken0:o?o.deltaAmount0<0n:null};}async function f0(e){const t=St(e.market.chainId);if(!t)return null;const{createSubgraphClient:n,fetchVaultDebtActions:o,fetchVaultIdleActions:a}=await Q(),r=n(e.market.chainId,t),i=e.vaultId.toString(),[s,l]=await Promise.all([o(r,i,{first:20}),a(r,i,{first:20})]),c=s.debtModifiedActions[0],p=l.idleModifiedActions[0],u=c?p?Number(c.timestamp)>=Number(p.timestamp)?c:p:c:p;if(!u)return null;const m=u.transaction.id;return Wi({txHash:m,timestamp:Number(u.timestamp),debt:s.debtModifiedActions.filter(d=>d.transaction.id===m).map(d=>({principalDeltaActual:zn(d.principalDeltaActual)})),idle:l.idleModifiedActions.filter(d=>d.transaction.id===m).map(d=>({deltaAmount0:zn(d.deltaAmount0),deltaAmount1:zn(d.deltaAmount1)}))});}const Ki=1e4,Wt="Engine market request aborted.",Cm="Engine position activity request aborted.",Qa=2*1024*1024,Xa=1024*1024,Ya=4*1024*1024,xm=8*1024*1024,zi=Te({ttlMs:6e4,maxEntries:32}),Gi=Te({ttlMs:15*6e4,maxEntries:128}),ji=Te({ttlMs:15e3,maxEntries:64}),Qi=Te({ttlMs:15e3,maxEntries:64}),Tm=60*6e4,Rm=60*6e4,Bm=60*6e4,ta=/* @__PURE__ */new Map(),wo=/* @__PURE__ */new Map(),bo=/* @__PURE__ */new Map();function na(e,t){const n=e.get(t);return n===void 0?!1:n<=Date.now()?(e.delete(t),!1):!0;}function Pm(e){return na(ta,e);}function Bt(e){return e.kind==="static"?[e.kind,e.markets.map(t=>t.id).join(",")].join("|"):[e.kind,Yt(e),Co(e.headers),e.includeLabels===!0,e.timeoutMs??Ki].join("|");}function Yt(e){return zt(e.baseUrl);}function Mm(e){const t=e.timeoutMs??Ki;if(!Number.isFinite(t)||t<=0)throw new RangeError("Engine REST timeoutMs must be a positive finite number.");return t;}async function Mn(e){const t=Mm(e.source),{signal:n,cleanup:o}=ut({timeoutMs:t,timeoutMessage:`Engine REST ${e.resource} request timed out after ${t}ms.`});try{return await e.request(n);}finally{o();}}function ct(e){var t;return new ec({status:e.status,statusText:e.statusText,body:void 0,retryAfterSeconds:xo(((t=e.headers)==null?void 0:t.get("retry-after"))??null)});}function Dm(e){return[Bt(e.source),e.chainId,ne(e.defaultV4Quoter)].join("|");}function Xi(e){return[Bt(e.source),e.chainId,ne(e.account)].join("|");}function _m(e){return[Bt(e.source),e.marketId,e.window].join("|");}async function Ja(e){if(e.source.kind==="static")return Wn({chainId:e.chainId,markets:e.source.markets,defaultV4Quoter:e.defaultV4Quoter});const t=e.source,n=Yt(t),o=Bt(t),a=`chainId=${e.chainId}${t.includeLabels?"&includeLabels=true":""}`;return Mn({source:t,resource:"markets",request:async r=>{if(!na(wo,o)){const l=await fetch(`${n}/v1/engine/markets/v2?${a}`,{headers:t.headers,signal:r});if(l.ok){const c=xd.parse(await Ke(l,Qa,"Engine markets"));if(c.chainId!==e.chainId)throw new Error(`Engine REST markets returned chain ${c.chainId} for requested chain ${e.chainId}.`);return Wn({chainId:e.chainId,markets:c.markets,source:"rest",restResponseVersion:"2",defaultV4Quoter:e.defaultV4Quoter});}if(l.status!==404)throw ct(l);wo.set(o,Date.now()+Rm);}const i=await fetch(`${n}/v1/engine/markets?${a}`,{headers:t.headers,signal:r});if(!i.ok)throw ct(i);const s=Cd.parse(await Ke(i,Qa,"Engine markets"));if(s.chainId!==e.chainId)throw new Error(`Engine REST markets returned chain ${s.chainId} for requested chain ${e.chainId}.`);return Wn({chainId:e.chainId,markets:s.markets,source:"rest",restResponseVersion:"1",defaultV4Quoter:e.defaultV4Quoter});}});}function h0(){zi.clear();}function w0(){Gi.clear();}function b0(){ji.clear();}function k0(){Qi.clear();}function v0(){ta.clear();}function E0(){wo.clear();}function y0(){bo.clear();}async function I0(e){if(e.source.kind==="static")return He(Ja(e),e.signal,Wt);const t=zi.read(Dm(e),()=>Ja(e));return He(t,e.signal,Wt);}function Nm(e){const{source:t,marketId:n,window:o}=e,a=Yt(t),r=Bt(t);return Mn({source:t,resource:"history",request:async i=>{if(!na(bo,r)){const c=await fetch(`${a}/v1/engine/markets/${encodeURIComponent(n)}/history/v2?window=${o}`,{headers:t.headers,signal:i});if(c.ok){const p=Bd.parse(await Ke(c,Xa,"Engine history"));if(p.marketId!==n)throw new Error(`Engine REST market history returned ${p.marketId} for requested ${n}.`);if(p.window!==o)throw new Error(`Engine REST market history returned window ${p.window} for requested ${o}.`);const{schemaVersion:u,...m}=p;return m;}if(c.status!==404)throw ct(c);bo.set(r,Date.now()+Bm);}const s=await fetch(`${a}/v1/engine/markets/${encodeURIComponent(n)}/history?window=${o}`,{headers:t.headers,signal:i});if(!s.ok)throw ct(s);const l=Rd.parse(await Ke(s,Xa,"Engine history"));if(l.marketId!==n)throw new Error(`Engine REST market history returned ${l.marketId} for requested ${n}.`);if(l.window!==o)throw new Error(`Engine REST market history returned window ${l.window} for requested ${o}.`);return l;}});}async function A0(e){if(e.source.kind==="static")return null;const t=e.source,n=Qo.parse(e.marketId),o=e.window??"30d",a=Gi.read(_m({source:t,marketId:n,window:o}),()=>Nm({source:t,marketId:n,window:o}));return He(a,e.signal,Wt);}function Za(e,t,n){if(n.chainId!==e)throw new Error(`Engine REST positions returned chain ${n.chainId} for requested chain ${e}.`);if(!w(n.account,t))throw new Error("Engine REST positions returned a different wallet account.");const o=n.positions.find(a=>a.chainId!==e||!w(a.account,t));if(o)throw new Error(`Engine REST position ${o.id} has mismatched ownership metadata.`);}async function er(e){if(e.source.kind==="static"){const r=(e.source.positions??[]).filter(c=>c.chainId===e.chainId&&w(c.account,e.account)),i=(e.source.lendPositions??[]).filter(c=>c.chainId===e.chainId&&w(c.account,e.account)),s=r.filter(c=>typeof c.collateralValueUsd=="number"&&Number.isFinite(c.collateralValueUsd)),l=r.length>0&&s.length===r.length;return{schemaVersion:e.source.lendPositions?"2":"1",chainId:e.chainId,account:e.account,positions:r,lendPositions:i,totals:{...(l?{collateralValueUsd:s.reduce((c,p)=>c+(p.collateralValueUsd??0),0)}:{}),positionCount:r.length+i.length,borrowVaultCount:r.length,lendPositionCount:i.length},freshness:{source:"static",blockNumber:null,positionCount:r.length+i.length}};}const t=e.source,n=Yt(t),o=Bt(t),a=new URLSearchParams({chainId:String(e.chainId),account:e.account});return Mn({source:t,resource:"positions",// Position loads are shared in the session cache. One consumer aborting
|
|
51
|
+
marketId:C().nullable(),marketName:C().nullable(),poolId:Tt,token0:hn.nullable(),token1:hn.nullable(),indexedBalanceRaw:me,warnings:q(C()),freshness:x({source:B("subgraph"),indexedBlockNumber:k().int().nonnegative().nullable()})}),Dd=ut("kind",[_d,Nd]),Od=x({schemaVersion:B("2"),chainId:Xe,account:z,positions:q(Dd),totals:x({collateralValueUsd:xt,positionCount:k().int().nonnegative(),borrowVaultCount:k().int().nonnegative(),lendPositionCount:k().int().nonnegative()}).strict(),freshness:x({source:B("subgraph"),blockNumber:k().int().nonnegative().nullable().optional(),positionCount:k().int().nonnegative()})}).superRefine((e,t)=>{const n=e.positions.filter(r=>r.kind==="borrow_vault").length,o=e.positions.length-n,a=[[["totals","positionCount"],e.totals.positionCount,e.positions.length],[["totals","borrowVaultCount"],e.totals.borrowVaultCount,n],[["totals","lendPositionCount"],e.totals.lendPositionCount,o],[["freshness","positionCount"],e.freshness.positionCount,e.positions.length]];for(const[r,i,s]of a)i!==s&&t.addIssue({code:"custom",path:[...r],message:"Position summary count does not match the discriminated rows."});}),Be=x({id:C().min(1),timestamp:k().int().nonnegative(),blockNumber:k().int().nonnegative(),transactionIndex:k().int().nonnegative(),txHash:Ad,logIndex:k().int().nonnegative()}).strict(),qd=Be.extend({kind:B("vault_created"),owner:z}).strict(),Ld=Be.extend({kind:B("vault_burned"),caller:z}).strict(),Fd=Be.extend({kind:B("vault_locked"),ltvPips:k().int().nullable()}).strict(),Ud=Be.extend({kind:B("debt_modified"),principalDeltaRequestedRaw:J,principalDeltaActualRaw:J,borrowIndexWad:me,deltaIdle0Raw:J,deltaIdle1Raw:J}).strict(),Vd=Be.extend({kind:B("idle_modified"),deltaAmount0Raw:J,deltaAmount1Raw:J}).strict(),Hd=Be.extend({kind:B("vault_micro_liquidated"),caller:z,zeroForOne:Ke(),swapDelta0Raw:J,swapDelta1Raw:J,debtRepaidRlRaw:J,idleDelta0Raw:J,idleDelta1Raw:J,keeperFee0Raw:J,keeperFee1Raw:J,initialLtvPips:k().int().nullable()}).strict(),Wd=ut("kind",[qd,Ld,Fd,Ud,Vd,Hd]),$d=Be.extend({kind:B("deposit"),deltaSharesRaw:J,deltaAmount0Raw:J,deltaAmount1Raw:J}).strict(),Kd=Be.extend({kind:B("withdraw"),deltaSharesRaw:J,deltaAmount0Raw:J,deltaAmount1Raw:J}).strict(),zd=Be.extend({kind:B("transfer_in"),sharesRaw:me,counterparty:z}).strict(),Gd=Be.extend({kind:B("transfer_out"),sharesRaw:me,counterparty:z}).strict(),jd=ut("kind",[$d,Kd,zd,Gd]);function Qd(e,t){return e.blockNumber-t.blockNumber||e.transactionIndex-t.transactionIndex||e.logIndex-t.logIndex;}function Ui(e,t){for(let n=1;n<e.length;n+=1)if(!(Qd(e[n-1],e[n])<=0)){t.addIssue({code:"custom",path:["actions",n],message:"Engine activity actions must be ordered oldest-first by execution order."});return;}}const Xd=x({marketId:C().nullable(),marketName:C().nullable(),poolId:Tt,borrowIndexWad:at,lastAccrueTimestamp:k().int().nonnegative().nullable(),ratePerSecondWad:at,rateUpdatedAt:Pe.nullable(),totalRlBorrowed:at,shareTotalSupply:at,warnings:q(C())}).strict(),Yd=x({vaultId:me,poolId:Tt,marketId:C().nullable(),marketName:C().nullable(),createdAt:Pe.nullable(),burnedAt:Pe.nullable(),actions:q(Wd)}).strict().superRefine((e,t)=>{Ui(e.actions,t);}),Jd=x({poolId:Tt,marketId:C().nullable(),marketName:C().nullable(),actions:q(jd)}).strict().superRefine((e,t)=>{Ui(e.actions,t);}),Zd=x({schemaVersion:B("1"),chainId:Xe,account:z,marketState:q(Xd),vaults:q(Yd),lend:q(Jd),totals:x({vaultCount:k().int().nonnegative(),lendMarketCount:k().int().nonnegative(),vaultActionCount:k().int().nonnegative(),lendActionCount:k().int().nonnegative()}).strict(),freshness:x({source:B("subgraph"),blockNumber:k().int().nonnegative().nullable()}).strict()}).strict().superRefine((e,t)=>{const n=e.vaults.reduce((i,s)=>i+s.actions.length,0),o=e.lend.reduce((i,s)=>i+s.actions.length,0),a=[[["totals","vaultCount"],e.totals.vaultCount,e.vaults.length],[["totals","lendMarketCount"],e.totals.lendMarketCount,e.lend.length],[["totals","vaultActionCount"],e.totals.vaultActionCount,n],[["totals","lendActionCount"],e.totals.lendActionCount,o]];for(const[i,s,c]of a)s!==c&&t.addIssue({code:"custom",path:[...i],message:"Engine activity summary count does not match the ledger."});for(let i=1;i<e.vaults.length;i+=1)if(!(BigInt(e.vaults[i-1].vaultId)>=BigInt(e.vaults[i].vaultId))){t.addIssue({code:"custom",path:["vaults",i,"vaultId"],message:"Engine activity vaults must be ordered newest-first by numeric vault id."});break;}for(let i=1;i<e.lend.length;i+=1)if(!(e.lend[i-1].poolId.toLowerCase()<=e.lend[i].poolId.toLowerCase())){t.addIssue({code:"custom",path:["lend",i,"poolId"],message:"Engine lend activity must be ordered by pool id."});break;}const r=new Set(e.marketState.map(i=>i.poolId.toLowerCase()));for(const[i,s]of[["vaults",e.vaults],["lend",e.lend]])for(let c=0;c<s.length;c+=1)r.has(s[c].poolId.toLowerCase())||t.addIssue({code:"custom",path:[i,c,"poolId"],message:"Engine activity is missing the referenced market state."});}),em=10n**18n;function $t(e){if(!e)return null;try{return BigInt(e);}catch{return null;}}function tm(e,t){return e.toLowerCase()===t.toLowerCase();}function nm(e){const t=e.actions.find(n=>n.kind==="vault_created");if(!t)return null;for(const n of e.actions){if(n.kind!=="idle_modified"||!tm(n.txHash,t.txHash))continue;const o=$t(n.deltaAmount0Raw),a=$t(n.deltaAmount1Raw);if(!(o===null||a===null)){if(o>0n&&a===0n)return{raw:o.toString(),side:0};if(a>0n&&o===0n)return{raw:a.toString(),side:1};}}return null;}function om(e){let t=0n,n=null;for(const o of e){if(o.kind!=="debt_modified")continue;const a=$t(o.principalDeltaActualRaw),r=$t(o.borrowIndexWad);if(a===null||r===null||r===0n)return null;t+=a,n=r;}return n===null||t<0n?null:{principal:t,openIndex:n};}function Xa(e,t){return e*t/em;}function am(e,t){const n=om(e.actions),o=$t((t==null?void 0:t.borrowIndexWad)??null),a=n?Xa(n.principal,n.openIndex):null,r=n&&o!==null?Xa(n.principal,o):null,i=a===null||r===null?null:r>a?r-a:0n;return{deposited:nm(e),principalRaw:n?n.principal.toString():null,openBorrowIndexWad:n?n.openIndex.toString():null,indexedBorrowIndexWad:o!==null?o.toString():null,debtAtOpenRl:a!==null?a.toString():null,debtIndexedRl:r!==null?r.toString():null,interestAccruedRl:i!==null?i.toString():null};}function Ya(e){const t=new Map(e.marketState.map(n=>[n.poolId.toLowerCase(),n]));return{...e,vaults:e.vaults.map(n=>({...n,display:am(n,t.get(n.poolId.toLowerCase())??null)}))};}function Yt(e,t){if(e===t)return!0;const n=/^evm_[1-9]\d*_0[xX][0-9a-fA-F]{64}$/;return!n.test(e)||!n.test(t)?!1:e.toLowerCase()===t.toLowerCase();}function rm(e,t){return b(e.currency0,t.currency0)&&b(e.currency1,t.currency1)&&e.fee===t.fee&&e.tickSpacing===t.tickSpacing&&b(e.hooks,t.hooks);}function Ve(e,t,n){if(!t||!b(t,n))throw new Error(`${e} does not match the trusted Engine deployment.`);}function Rt(e){if(e.token0.chainId!==e.chainId||e.token1.chainId!==e.chainId)throw new Error("Engine market token chain ids do not match the market chain.");if(!b(e.token0.address,e.poolKey.currency0)||!b(e.token1.address,e.poolKey.currency1))throw new Error("Engine market tokens do not match the pool key.");if(e.source==="rest"&&!Y(je(e.poolKey),e.poolId))throw new Error("Engine pool key does not hash to the selected market pool.");const t=`evm_${e.chainId}_${e.poolId.toLowerCase()}`;if(e.source==="rest"&&e.id.startsWith("evm_")&&e.id.toLowerCase()!==t)throw new Error("Engine market id does not identify the selected chain and pool.");}function ea(e,t={}){var o;Rt(e);const n=(o=oe(e))==null?void 0:o.addresses;if(!n)throw new Error(`No trusted Aegis Engine deployment is configured for chain ${e.chainId}.`);return Ve("Engine",e.engine,n.aegisEngine),Ve("StateView",e.stateView,n.aegisStateView),Ve("V4 StateView",e.v4StateView,n.stateView),t.quoter!==!1&&Ve("V4 quoter",e.v4Quoter,n.uniswapV4Quoter),Ve("router",e.router,n.aegisRouterV1),t.permit2!==!1&&Ve("Permit2",e.permit2,n.permit2),Ve("Pool hooks",e.poolKey.hooks,n.aegisHook),t.vaultRegistry!==!1&&Ve("VaultRegistry",e.vaultRegistry,n.vaultRegistry),n;}function Vi(e){if(Rt(e.market),e.chainId!==e.market.chainId||!Y(e.poolId,e.market.poolId))throw new Error("Hydrated Engine market does not match the selected chain and pool.");if(!rm(e.poolKey,e.market.poolKey))throw new Error("Hydrated Engine pool key does not match the reviewed market.");if(e.decimals0!==void 0&&e.decimals0!==e.market.token0.decimals||e.decimals1!==void 0&&e.decimals1!==e.market.token1.decimals)throw new Error("Engine token decimals do not match the on-chain market context.");}const Je=z.nullable().optional().transform(e=>e??void 0).catch(void 0),Ze=z.optional();function ta(e){function t(n){const o=n.nullable().optional();return e?o:o.catch(void 0);}return{number:t(k().finite()),nonnegativeInteger:t(k().int().nonnegative()),boolean:t(Ke()),string:t(C()),decimalString:t(me),dateTime:t(Pe)};}function Hi(e){const t=ta(e.strict),n=x({tvlUsd:t.number,suppliedUsd:t.number,borrowedUsd:t.number,availableToBorrowUsd:t.number,utilizationPct:t.number,borrowAprPct:t.number,lendApyPct:t.number,activeDebtVaultCount:t.nonnegativeInteger,sharePriceWad:t.decimalString,ratePerSecondWad:t.decimalString,fullUtilizationRate:t.decimalString,rateSource:t.string,totalLendShares:t.decimalString,baseFeePpm:t.nonnegativeInteger,activeFeePpm:t.nonnegativeInteger,surgeFeePpm:t.nonnegativeInteger,surgeActive:t.boolean,inCapEvent:t.boolean,manualOverride:t.boolean,perSwapMode:t.boolean,feeSource:t.string,updatedAt:t.dateTime,engineUpdatedAt:t.dateTime,rateUpdatedAt:t.dateTime,feeUpdatedAt:t.dateTime}),o=e.metricsComputedAt?n.extend({computedAt:t.dateTime}):n,a=x({source:B("canopy"),updatedAt:t.dateTime,engineUpdatedAt:t.dateTime,rateUpdatedAt:t.dateTime,feeUpdatedAt:t.dateTime,blockNumber:t.nonnegativeInteger,blockTimestamp:t.nonnegativeInteger});return e.strict?{metrics:o.strict(),freshness:a.strict()}:{metrics:o,freshness:a};}const wn=ta(!1),Kt=ta(!0),Wi=Hi({strict:!1,metricsComputedAt:!0}),wo=Hi({strict:!0,metricsComputedAt:!1}),$i=wo.metrics.extend({adaptiveTickThresholdTicks:k().int().min(0).max(16777215).optional(),adaptiveTickThresholdMode:Di.optional(),feeObservedAt:Kt.dateTime}).strict().superRefine((e,t)=>{const n=e.adaptiveTickThresholdTicks!==void 0,o=e.adaptiveTickThresholdMode!==void 0;n!==o&&t.addIssue({code:"custom",message:"adaptiveTickThresholdTicks and adaptiveTickThresholdMode must be provided together."});}),bo=x({chainId:k().int().positive(),address:z,name:C(),symbol:C(),decimals:k().int().min(0).max(255),iconUrl:C().nullable().optional(),priceUsd:wn.number.transform(e=>e??void 0),stable:wn.boolean.transform(e=>e??void 0)}),Ja=bo.extend({priceUsd:Kt.number.transform(e=>e??void 0),stable:Kt.boolean.transform(e=>e??void 0)}).strict(),Ki=x({id:C().min(1),chainId:k().int().positive(),source:V(["rest","static"]).optional(),status:V(["enabled","disabled","hidden","malformed"]).catch("malformed"),displayName:C().min(1),labels:q(C()).optional(),poolId:Tt,token0:bo,token1:bo,poolKey:x({currency0:z,currency1:z,fee:k().int().min(0).max(16777215),tickSpacing:k().int().min(1).max(8388607),hooks:z}),engine:Je,stateView:Je,v4StateView:Je,v4Quoter:Je,router:Je,permit2:Je,vaultRegistry:Je,borrowEnabled:Ke().catch(!1),lendEnabled:Ke().catch(!1),canBorrow:wn.boolean,canLend:wn.boolean,maxLtvPips:k().int().min(0).max(1e6).nullable().optional().catch(void 0),hardLtvPips:k().int().min(0).max(1e6).nullable().optional().catch(void 0),warnings:q(C()).nullable().optional().transform(e=>e??[]).catch([]),disabledReasons:x({borrow:q(C()).catch([]),lend:q(C()).catch([])}).optional().catch(void 0),metrics:mn().optional(),freshness:mn().optional()}),zi=Ki.extend({source:B("rest"),status:V(["enabled","disabled"]),token0:Ja,token1:Ja,engine:Ze,stateView:Ze,v4StateView:Ze,v4Quoter:Ze,router:Ze,permit2:Ze,vaultRegistry:Ze,borrowEnabled:Ke(),lendEnabled:Ke(),canBorrow:Kt.boolean,canLend:Kt.boolean,maxLtvPips:k().int().min(0).max(1e6).nullable().optional(),hardLtvPips:k().int().min(0).max(1e6).nullable().optional(),warnings:q(C()),disabledReasons:x({borrow:q(C()),lend:q(C())}).strict(),metrics:wo.metrics,freshness:wo.freshness}).strict(),im=zi.extend({metrics:$i}).strict();function sm(e,t){const n=(t==="2"?$i:Wi.metrics).safeParse(e);if(!n.success)return;const o=Object.fromEntries(Object.entries(n.data).filter(([,a])=>a!==void 0));return Object.keys(o).length>0?o:void 0;}function cm(e){const t=Wi.freshness.safeParse(e);if(t.success)return Object.fromEntries(Object.entries(t.data).filter(([,n])=>n!==void 0));}function lm(e,t,n="1"){const a=(t==="rest"?n==="2"?im:zi:Ki).safeParse(e);if(!a.success)return null;const{metrics:r,freshness:i,source:s,...c}=a.data,l=sm(r,t==="rest"?n:void 0),p=cm(i);return{...c,source:s??"rest",...(l?{metrics:l}:{}),...(p?{freshness:p}:{})};}function um(e){const t=oe(e);if(!t)return{warning:`Engine execution disabled: no trusted contract registry for chain ${e.chainId}.`,viewOnly:!1};const n=t.addresses,a=[["engine",e.engine,n.aegisEngine],["stateView",e.stateView,n.aegisStateView],["v4StateView",e.v4StateView,n.stateView],["v4Quoter",e.v4Quoter,n.uniswapV4Quoter],["router",e.router,n.aegisRouterV1],["permit2",e.permit2,n.permit2],["vaultRegistry",e.vaultRegistry,n.vaultRegistry],["hooks",e.poolKey.hooks,n.aegisHook]].filter(([,r,i])=>ne(r)!==ne(i)).map(([r])=>r);return a.length>0?{warning:`Engine execution disabled: contract registry mismatch (${a.join(", ")}).`,viewOnly:!1}:{warning:null,viewOnly:!1};}function dm(e){try{return Rt(e),null;}catch(t){return`Engine execution disabled: ${t instanceof Error?t.message:"market identity mismatch"}`;}}function mm(e,t,n){var s,c;const o=[...e.warnings],a=l=>{o.includes(l)||o.push(l);},r=((s=e.disabledReasons)==null?void 0:s.borrow)??[];!t&&r.length>0?a(`Borrowing unavailable: ${r.join(", ")}.`):e.source==="rest"&&e.borrowEnabled&&e.canBorrow!==!0&&a("Borrowing unavailable: backend readiness is not confirmed.");const i=((c=e.disabledReasons)==null?void 0:c.lend)??[];return!n&&i.length>0?a(`Lending unavailable: ${i.join(", ")}.`):e.source==="rest"&&e.lendEnabled&&e.canLend!==!0&&a("Lending unavailable: backend readiness is not confirmed."),o;}function pm(e){const{warning:t,viewOnly:n}=um(e),o=dm(e),a=e.status==="enabled"&&t===null&&o===null,r=e.source==="rest"?e.canBorrow===!0:e.canBorrow!==!1,i=e.source==="rest"?e.canLend===!0:e.canLend!==!1,s=a&&e.borrowEnabled&&r,c=a&&e.lendEnabled&&i,l=mm(e,s,c);for(const p of[o,t])p&&!l.includes(p)&&l.push(p);return{...e,...(n?{viewOnly:!0}:{}),status:e.status==="enabled"&&(!a||!s&&!c)?"disabled":e.status,borrowEnabled:s,lendEnabled:c,canBorrow:s,canLend:c,warnings:l};}function fm(e){return e.sort((t,n)=>t.status!==n.status?t.status==="enabled"?-1:1:t.displayName.localeCompare(n.displayName));}function Wn(e){const t=[];for(const n of e.markets){const o=lm(n,e.source,e.restResponseVersion);if(!o){if(e.source==="rest")throw new Error("Engine REST market response contained a malformed market row.");continue;}const a={...o,source:e.source??o.source,...(o.v4Quoter||!e.defaultV4Quoter?{}:{v4Quoter:e.defaultV4Quoter})};if(a.chainId!==e.chainId){if(e.source==="rest")throw new Error("Engine REST market response contained a market for the wrong chain.");continue;}a.status!=="hidden"&&t.push(pm(a));}return fm(t);}const $n=C().regex(/^0x[0-9a-f]{40}$/),na=C().regex(/^0x[0-9a-f]{64}$/),qt=oc,hm=x({kind:B("borrow_vault"),id:C().min(1).max(256),vaultId:qt,poolId:na,idle0Raw:qt,idle1Raw:qt,principalRlRaw:qt,nftCount:k().int().nonnegative()}).strict(),wm=x({kind:B("lend_shares"),id:C().min(1).max(256),poolId:na,indexedBalanceRaw:qt}).strict(),Kn=ut("kind",[hm,wm]),zn={evaluatedRowCount:k().int().nonnegative(),returnedPositionCount:k().int().nonnegative(),rejectedRows:x({borrowVaults:k().int().nonnegative(),lenderShares:k().int().nonnegative()}).strict()},bm=x({schemaVersion:B("3"),chainId:k().int().positive(),account:$n,deployment:x({version:V(["v0.4.0","v1.0.2","v1.0.3"]),engine:$n,vaultRegistry:$n}).strict(),coverage:ut("status",[x({...zn,status:B("complete"),positions:q(Kn).max(1e3),nextCursor:ga(),reasons:q(C()).length(0)}).strict(),x({...zn,status:B("partial"),partialPositions:q(Kn).max(1e3),nextCursor:ga(),reasons:q(C()).min(1)}).strict(),x({...zn,status:B("truncated"),partialPositions:q(Kn).max(1e3),nextCursor:C().min(1),reasons:q(C()).min(1)}).strict()]),freshness:x({source:B("engine-subgraph"),frame:x({blockNumber:k().int().nonnegative(),blockHash:na,blockTimestamp:k().int().nonnegative(),deployment:C().min(1)}).strict(),fetchedAt:C().datetime()}).strict()}).strict();let Za=null;function Q(){return Za??(Za=import("./sdkRuntime-CvLRgf5w.js").then(({engineSdkRuntime:e})=>e)),Za;}function Pt(e){const t=oe(e);return t?{chainId:e.chainId,version:t.version,addresses:t.addresses}:null;}function Ee(e){const t=oe(e);if(!t)throw new Error(`No trusted Aegis Engine deployment is configured for chain ${e.chainId}.`);return t.name==="default"?{}:{deployment:Pt(e)};}const Gn=2500;let ko=/* @__PURE__ */new WeakMap();class he extends N{constructor(t){super(t,{kind:"market-not-ready",retryable:!1}),this.name="AegisEngineMarketNotReadyError";}}function km(e){const t=e.market.stateView,n=e.market.v4StateView;if(!t)throw new he("Market is missing StateView.");if(!n)throw new he("Market is missing V4 StateView.");return{stateView:t,v4StateView:n};}function oa(e){var a;Rt(e.market);const{stateView:t,v4StateView:n}=km(e),o=(a=oe(e.market))==null?void 0:a.addresses;if(!o)throw new he(`No trusted Aegis Engine deployment is configured for chain ${e.market.chainId}.`);if(!b(t,o.aegisStateView)||!b(n,o.stateView))throw new he("Engine market read addresses do not match the trusted SDK registry.");return{stateView:t,v4StateView:n,registry:o};}function Pn(e){const t=ko.get(e);if(t)return t;const n={marketSnapshots:Te({ttlMs:Gn}),lendContexts:Te({ttlMs:Gn}),borrowContexts:Te({ttlMs:Gn}),tokenDecimals:Te({ttlMs:Number.POSITIVE_INFINITY,maxEntries:256})};return ko.set(e,n),n;}const vm=[{type:"function",name:"decimals",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint8"}]}];async function aa(e){if(e.market.source!=="rest")return;const t=[e.market.token0,e.market.token1].some(c=>b(c.address,ie)),n=e.publicClient.chain;if(t&&(n==null?void 0:n.id)!==e.market.chainId)throw new he("Native token chain does not match the market.");const o=t?n==null?void 0:n.nativeCurrency.decimals:void 0,a=Pn(e.publicClient).tokenDecimals,r=Bn(e,[e.market.token0.address,e.market.token1.address,String(o??"")]),[i,s]=await a.read(r,async()=>{const c=async l=>{const p=b(l,ie)?o:await e.publicClient.readContract({address:l,abi:vm,functionName:"decimals"}),u=Number(p);if(!Number.isInteger(u)||u<0||u>255)throw new he("Token decimals are invalid.");return u;};return Promise.all([c(e.market.token0.address),c(e.market.token1.address)]);});if(i!==e.market.token0.decimals||s!==e.market.token1.decimals)throw new he("Engine token decimals do not match the chain.");}function Bn(e,t){return[e.market.chainId,e.market.poolId.toLowerCase(),...t.map(n=>n.toLowerCase())].join(":");}function lh(){ko=/* @__PURE__ */new WeakMap();}async function ym(e){const{stateView:t,v4StateView:n}=oa(e);await aa(e);const o=Pn(e.publicClient).marketSnapshots,a=Bn(e,[t,n]);return o.read(a,async()=>{const{fetchMarket:r,fetchMarketLtvThresholds:i,fetchMarketSharePriceLatest:s,fetchPoolState:c}=await Q(),[l,p,u,m]=await Promise.all([r(e.publicClient,t,e.market.poolId),i(e.publicClient,t,e.market.poolId),c(e.publicClient,n,e.market.poolId),s(e.publicClient,t,e.market.poolId)]);if(!l.initialized)throw new he("Aegis market is not initialized on-chain yet.");return{market:l,thresholds:p,poolState:u,sharePriceWadLatest:m};});}async function uh(e){const t=await ym(e),{priceFromSqrtX96:n}=await Q(),o=n(t.poolState.sqrtPriceX96,e.market.token0.decimals,e.market.token1.decimals);if(!Number.isFinite(o)||o<=0)throw new he("Pool mid price is not readable for this market yet.");return{poolId:e.market.poolId,chainId:e.market.chainId,price:o,sqrtPriceX96:t.poolState.sqrtPriceX96,observedAt:Date.now()};}async function Im(e){const{stateView:t,v4StateView:n}=oa(e);await aa(e);const o=Pt(e.market);if(!o)throw new he(`No trusted Aegis Engine version is configured for chain ${e.market.chainId}.`);const a=Pn(e.publicClient).lendContexts,r=Bn(e,[t,n,o.version]);return a.read(r,async()=>{const{fetchLendQuoteContext:i}=await Q(),s=await i(e.publicClient,{chainId:e.market.chainId,version:o.version,...Ee(e.market),poolId:e.market.poolId});return Vi({market:e.market,chainId:s.chainId,poolId:s.poolId,poolKey:s.market.poolKey}),s;});}async function ra(e,t,n={}){var l;const{stateView:o,v4StateView:a,registry:r}=oa(e);await aa(e);const i=Pt(e.market);if(!i)throw new he(`No trusted Aegis Engine version is configured for chain ${e.market.chainId}.`);const s=Pn(e.publicClient).borrowContexts,c=Bn(e,[o,a,r.variableInterestRate,i.version,(t==null?void 0:t.owner)??"",((l=t==null?void 0:t.vaultId)==null?void 0:l.toString())??""]);return s.read(c,async()=>{const{fetchBorrowQuoteContext:p}=await Q(),u=await p(e.publicClient,{chainId:e.market.chainId,version:i.version,...Ee(e.market),poolId:e.market.poolId,...(t?{owner:t.owner,...(t.vaultId!==void 0?{vaultId:t.vaultId}:{})}:{})});if(u.status!=="ok")throw new he(`Borrow-rate projection is unavailable: ${u.reason}.`);const m=u.context;Vi({market:e.market,chainId:m.chainId,poolId:m.poolId,poolKey:m.market.poolKey,decimals0:m.market.decimals0,decimals1:m.market.decimals1});const d=m.version,h=m.aprProjection.version;return{chainId:m.chainId,version:d,poolId:m.poolId,market:{poolId:m.market.poolId,poolKey:m.market.poolKey,sqrtPriceX96:m.market.sqrtPriceX96,tickCurrent:m.market.tickCurrent,tickSpacing:m.market.tickSpacing,inRangeLiquidity:m.market.inRangeLiquidity,borrowIndexWad:m.market.borrowIndexWad,equityLWad:m.market.equityLWad,borrowedLWad:m.market.borrowedLWad,maxLtvPips:m.market.maxLtvPips,hardLtvPips:m.market.hardLtvPips,currentRatePerSecWad:m.market.currentRatePerSecWad,decimals0:m.market.decimals0,decimals1:m.market.decimals1},aprProjection:{chainId:m.aprProjection.chainId,version:h,rateOracleAddress:m.aprProjection.rateOracleAddress,fullUtilRate:m.aprProjection.fullUtilRate},frame:{blockNumber:m.frame.blockNumber,blockHash:m.frame.blockHash,blockTimestamp:m.frame.blockTimestamp,observedAt:m.frame.observedAt},execution:m.authorization?{owner:m.authorization.owner,vaultId:m.authorization.vaultId,chainId:m.authorization.chainId,permit2:m.authorization.permit2,ownerOnChain:m.authorization.ownerOnChain,vaultPoolId:m.authorization.vaultPoolId,routerApproved:m.authorization.routerApproved,router:m.authorization.router,vaultRegistry:m.authorization.vaultRegistry,blockNumber:m.authorization.blockNumber}:null};},n.forceRefresh);}function Em(e){for(const t of[...e.positions,...e.lendPositions]){if(t.chainId!==e.chainId)throw new TypeError(`Engine position ${t.id} belongs to chain ${t.chainId}, not ${e.chainId}.`);if(!b(t.account,e.expectedAccount))throw new TypeError(`Engine position ${t.id} does not belong to the expected account.`);}}function er(e){return e.status==="failed"&&e.reason==="read-error";}function Am(e,t,n){return e.status==="failed"?{positionId:t,vaultId:n,status:"failed",reason:e.reason,...(e.detail!==void 0?{detail:e.detail}:{})}:{positionId:t,vaultId:n,status:"ok",vault:{poolId:e.vault.poolId,owner:e.vault.owner,rL:e.vault.rL,debtLLatest:e.vault.debtLLatest,idle0:e.vault.idle0,idle1:e.vault.idle1,ltvPipsLatest:e.vault.ltvPipsLatest,maxLtvPips:e.vault.maxLtvPips,hardLtvPips:e.vault.hardLtvPips}};}function gm(e,t){return e.status==="failed"?{positionId:t.id,account:t.account,poolId:t.poolId,status:"failed",reason:e.reason,...(e.detail!==void 0?{detail:e.detail}:{})}:{positionId:t.id,account:e.account,poolId:e.poolId,status:"ok",shareBalance:e.shareBalance,totalShares:e.totalShares,sharePriceWad:e.sharePriceWad,equityLWad:e.equityLWad};}async function Sm(e){var i;const t=e.result.vaults.flatMap((s,c)=>er(s)?[c]:[]),n=e.result.shares.flatMap((s,c)=>er(s)?[c]:[]);if(t.length===0&&n.length===0||(i=e.signal)!=null&&i.aborted)return e.result;let o;try{o=await e.fetchPositionsBatch(e.publicClient,{chainId:e.chainId,version:e.version,...(e.deployment?{deployment:e.deployment}:{}),vaultIds:t.map(s=>e.vaultIds[s]),sharePositions:n.map(s=>e.sharePositions[s]),expectedOwner:e.expectedAccount,blockNumber:e.result.frame.blockNumber,...(e.signal!==void 0?{signal:e.signal}:{})});}catch(s){if(s instanceof Error&&s.name==="ReadFrameNotCanonicalError")throw s;return e.result;}if(o.frame.blockNumber!==e.result.frame.blockNumber||o.frame.blockHash.toLowerCase()!==e.result.frame.blockHash.toLowerCase()||o.frame.blockTimestamp!==e.result.frame.blockTimestamp)throw new Error("Position read frame changed during retry. Refresh positions.");const a=e.result.vaults.map((s,c)=>{const l=t.indexOf(c);return l===-1?s:o.vaults[l];}),r=e.result.shares.map((s,c)=>{const l=n.indexOf(c);return l===-1?s:o.shares[l];});return{...e.result,vaults:a,shares:r};}async function dh(e){var f,w,v,g;Em(e);const t=e.hook?Pt({chainId:e.chainId,poolKey:{hooks:e.hook}}):null,n=e.hook?t==null?void 0:t.version:ac(e.chainId);if(!n)throw new he(`No trusted Aegis Engine version is configured for chain ${e.chainId}.`);const o=e.positions.map(I=>BigInt(I.vaultId)),a=e.lendPositions.map(I=>({account:e.expectedAccount,poolId:I.poolId})),{fetchPositionsBatch:r,fetchMarket:i,fetchPoolState:s,getAmountsForFullRangeLiquidity:c}=await Q(),l={chainId:e.chainId,version:n,...(t?{deployment:t}:{}),vaultIds:o,sharePositions:a,expectedOwner:e.expectedAccount,...(e.signal!==void 0?{signal:e.signal}:{})};let p;try{p=await r(e.publicClient,l);}catch(I){if((f=e.signal)!=null&&f.aborted)throw I;p=await r(e.publicClient,l);}if(p=await Sm({fetchPositionsBatch:r,publicClient:e.publicClient,chainId:l.chainId,version:l.version,...(t?{deployment:t}:{}),expectedAccount:e.expectedAccount,vaultIds:o,sharePositions:a,result:p,...(e.signal!==void 0?{signal:e.signal}:{})}),e.hook&&(p.vaults.some((I,T)=>I.status==="ok"&&!Y(I.vault.poolId,e.positions[T].poolId))||p.shares.some((I,T)=>I.status==="ok"&&(!Y(I.poolId,e.lendPositions[T].poolId)||!b(I.account,e.expectedAccount)))))throw new Error("Hydrated position does not match the selected Engine deployment pool or owner.");const u=(t==null?void 0:t.addresses)??Ro(e.chainId),m=/* @__PURE__ */new Map(),d=[...new Set(p.vaults.flatMap(I=>I.status==="ok"&&I.vault.debtLLatest>0n?[I.vault.poolId]:[]))];if(u)for(let I=0;I<d.length;I+=4){if((w=e.signal)!=null&&w.aborted)throw new DOMException("Aborted","AbortError");await Promise.all(d.slice(I,I+4).map(async T=>{try{const[P,S]=await Promise.all([i(e.publicClient,u.aegisStateView,T,p.frame.blockNumber),s(e.publicClient,u.stateView,T,p.frame.blockNumber)]);P.initialized&&S.sqrtPriceX96>0n&&je(P.poolKey).toLowerCase()===T.toLowerCase()&&m.set(T.toLowerCase(),{key:P.poolKey,state:S});}catch{}}));}if(m.size)try{((v=(await e.publicClient.getBlock({blockNumber:p.frame.blockNumber})).hash)==null?void 0:v.toLowerCase())!==p.frame.blockHash.toLowerCase()&&m.clear();}catch{m.clear();}if((g=e.signal)!=null&&g.aborted)throw new DOMException("Aborted","AbortError");const h=p.vaults.map((I,T)=>{const P=Am(I,e.positions[T].id,o[T]);if(P.status!=="ok")return P;P.vault.debtAmounts=null;const S=e.positions[T],E=m.get(P.vault.poolId.toLowerCase());if(P.vault.debtLLatest===0n)P.vault.debtAmounts={amount0:0n,amount1:0n};else if(E&&P.vault.poolId.toLowerCase()===S.poolId.toLowerCase()&&S.token0&&S.token1&&b(E.key.currency0,S.token0.address)&&b(E.key.currency1,S.token1.address))try{P.vault.debtAmounts=c(P.vault.debtLLatest,E.key,E.state,!0);}catch{}return P;});return{frame:{blockNumber:p.frame.blockNumber,blockHash:p.frame.blockHash,blockTimestamp:p.frame.blockTimestamp,observedAt:p.frame.observedAt},borrowPositions:h,lendPositions:p.shares.map((I,T)=>gm(I,e.lendPositions[T]))};}function jn(e){if(typeof e=="bigint")return e;if(typeof e=="string"||typeof e=="number")try{return BigInt(e);}catch{return 0n;}return 0n;}function Gi(e){const t=e.debt.reduce((s,c)=>s+c.principalDeltaActual,0n),n=e.idle.filter(s=>s.deltaAmount0<0n&&s.deltaAmount1===0n||s.deltaAmount1<0n&&s.deltaAmount0===0n),o=t>0n&&n.length===1?n[0]:null;let a=0n,r=0n;for(const s of e.idle)s!==o&&(a+=s.deltaAmount0,r+=s.deltaAmount1);const i=t>0n?"borrow":t<0n?"repay":a>=0n&&r>=0n&&(a>0n||r>0n)?"add-collateral":a<=0n&&r<=0n&&(a<0n||r<0n)?"withdraw-collateral":"vault-activity";return{txHash:e.txHash,timestamp:e.timestamp,kind:i,principalDeltaRl:t,collateralDelta0:a,collateralDelta1:r,receivedRaw:o?-(o.deltaAmount0<0n?o.deltaAmount0:o.deltaAmount1):null,receivedIsToken0:o?o.deltaAmount0<0n:null};}async function mh(e){var h;const t=Pt(e.market);if(!t)return null;const{createSubgraphClient:n,fetchVaultDebtActions:o,fetchVaultIdleActions:a,getChainConfigForHook:r}=await Q(),i=((h=oe(e.market))==null?void 0:h.name)==="default"?n(t.chainId,t.version):n(r(t.chainId,e.market.poolKey.hooks,t.version).subgraphUrl),s=e.vaultId.toString(),[c,l]=await Promise.all([o(i,s,{first:20}),a(i,s,{first:20})]),p=c.debtModifiedActions[0],u=l.idleModifiedActions[0],m=p?u?Number(p.timestamp)>=Number(u.timestamp)?p:u:p:u;if(!m)return null;const d=m.transaction.id;return Gi({txHash:d,timestamp:Number(m.timestamp),debt:c.debtModifiedActions.filter(f=>f.transaction.id===d).map(f=>({principalDeltaActual:jn(f.principalDeltaActual)})),idle:l.idleModifiedActions.filter(f=>f.transaction.id===d).map(f=>({deltaAmount0:jn(f.deltaAmount0),deltaAmount1:jn(f.deltaAmount1)}))});}const ji=1e4,zt="Engine market request aborted.",Cm="Engine position activity request aborted.",tr=2*1024*1024,nr=1024*1024,Qn=4*1024*1024,xm=8*1024*1024,Qi=Te({ttlMs:6e4,maxEntries:32}),Xi=Te({ttlMs:15*6e4,maxEntries:128}),Yi=Te({ttlMs:15e3,maxEntries:64}),Ji=Te({ttlMs:15e3,maxEntries:64}),Tm=60*6e4,Rm=60*6e4,Pm=60*6e4,ia=/* @__PURE__ */new Map(),vo=/* @__PURE__ */new Map(),yo=/* @__PURE__ */new Map();function sa(e,t){const n=e.get(t);return n===void 0?!1:n<=Date.now()?(e.delete(t),!1):!0;}function Bm(e){return sa(ia,e);}function Bt(e){return e.kind==="static"?[e.kind,e.markets.map(t=>t.id).join(",")].join("|"):[e.kind,Jt(e),Po(e.headers),e.includeLabels===!0,e.timeoutMs??ji].join("|");}function Jt(e){return jt(e.baseUrl);}function Mm(e){const t=e.timeoutMs??ji;if(!Number.isFinite(t)||t<=0)throw new RangeError("Engine REST timeoutMs must be a positive finite number.");return t;}async function At(e){const t=Mm(e.source),{signal:n,cleanup:o}=lt({timeoutMs:t,timeoutMessage:`Engine REST ${e.resource} request timed out after ${t}ms.`});try{return await e.request(n);}finally{o();}}function We(e){var t;return new ic({status:e.status,statusText:e.statusText,body:void 0,retryAfterSeconds:Bo(((t=e.headers)==null?void 0:t.get("retry-after"))??null)});}function _m(e){return[Bt(e.source),e.chainId,ne(e.defaultV4Quoter)].join("|");}function Zi(e){return[Bt(e.source),e.chainId,ne(e.account),ne(e.hook)].join("|");}function Nm(e){return[Bt(e.source),e.marketId,e.window].join("|");}async function or(e){if(e.source.kind==="static")return Wn({chainId:e.chainId,markets:e.source.markets,defaultV4Quoter:e.defaultV4Quoter});const t=e.source,n=Jt(t),o=Bt(t),a=`chainId=${e.chainId}${t.includeLabels?"&includeLabels=true":""}`;return At({source:t,resource:"markets",request:async r=>{if(!sa(vo,o)){const c=await fetch(`${n}/v1/engine/markets/v2?${a}`,{headers:t.headers,signal:r});if(c.ok){const l=Sd.parse(await Oe(c,tr,"Engine markets"));if(l.chainId!==e.chainId)throw new Error(`Engine REST markets returned chain ${l.chainId} for requested chain ${e.chainId}.`);return Wn({chainId:e.chainId,markets:l.markets,source:"rest",restResponseVersion:"2",defaultV4Quoter:e.defaultV4Quoter});}if(c.status!==404)throw We(c);vo.set(o,Date.now()+Rm);}const i=await fetch(`${n}/v1/engine/markets?${a}`,{headers:t.headers,signal:r});if(!i.ok)throw We(i);const s=gd.parse(await Oe(i,tr,"Engine markets"));if(s.chainId!==e.chainId)throw new Error(`Engine REST markets returned chain ${s.chainId} for requested chain ${e.chainId}.`);return Wn({chainId:e.chainId,markets:s.markets,source:"rest",restResponseVersion:"1",defaultV4Quoter:e.defaultV4Quoter});}});}function ph(){Qi.clear();}function fh(){Xi.clear();}function hh(){Yi.clear();}function wh(){Ji.clear();}function bh(){ia.clear();}function kh(){vo.clear();}function vh(){yo.clear();}async function yh(e){if(e.source.kind==="static")return $e(or(e),e.signal,zt);const t=Qi.read(_m(e),()=>or(e));return $e(t,e.signal,zt);}function Dm(e){const{source:t,marketId:n,window:o}=e,a=Jt(t),r=Bt(t);return At({source:t,resource:"history",request:async i=>{if(!sa(yo,r)){const l=await fetch(`${a}/v1/engine/markets/${encodeURIComponent(n)}/history/v2?window=${o}`,{headers:t.headers,signal:i});if(l.ok){const p=Td.parse(await Oe(l,nr,"Engine history"));if(p.marketId!==n)throw new Error(`Engine REST market history returned ${p.marketId} for requested ${n}.`);if(p.window!==o)throw new Error(`Engine REST market history returned window ${p.window} for requested ${o}.`);const{schemaVersion:u,...m}=p;return m;}if(l.status!==404)throw We(l);yo.set(r,Date.now()+Pm);}const s=await fetch(`${a}/v1/engine/markets/${encodeURIComponent(n)}/history?window=${o}`,{headers:t.headers,signal:i});if(!s.ok)throw We(s);const c=xd.parse(await Oe(s,nr,"Engine history"));if(c.marketId!==n)throw new Error(`Engine REST market history returned ${c.marketId} for requested ${n}.`);if(c.window!==o)throw new Error(`Engine REST market history returned window ${c.window} for requested ${o}.`);return c;}});}async function Ih(e){if(e.source.kind==="static")return null;const t=e.source,n=Zo.parse(e.marketId),o=e.window??"30d",a=Xi.read(Nm({source:t,marketId:n,window:o}),()=>Dm({source:t,marketId:n,window:o}));return $e(a,e.signal,zt);}function ar(e,t,n){if(n.chainId!==e)throw new Error(`Engine REST positions returned chain ${n.chainId} for requested chain ${e}.`);if(!b(n.account,t))throw new Error("Engine REST positions returned a different wallet account.");const o=n.positions.find(a=>a.chainId!==e||!b(a.account,t));if(o)throw new Error(`Engine REST position ${o.id} has mismatched ownership metadata.`);}async function rr(e){if(e.source.kind==="static"){const r=(e.source.positions??[]).filter(l=>l.chainId===e.chainId&&b(l.account,e.account)),i=(e.source.lendPositions??[]).filter(l=>l.chainId===e.chainId&&b(l.account,e.account)),s=r.filter(l=>typeof l.collateralValueUsd=="number"&&Number.isFinite(l.collateralValueUsd)),c=r.length>0&&s.length===r.length;return{schemaVersion:e.source.lendPositions?"2":"1",chainId:e.chainId,account:e.account,positions:r,lendPositions:i,totals:{...(c?{collateralValueUsd:s.reduce((l,p)=>l+(p.collateralValueUsd??0),0)}:{}),positionCount:r.length+i.length,borrowVaultCount:r.length,lendPositionCount:i.length},freshness:{source:"static",blockNumber:null,positionCount:r.length+i.length}};}const t=e.source,n=Jt(t),o=Bt(t),a=new URLSearchParams({chainId:String(e.chainId),account:e.account,...(e.hook?{hook:e.hook.toLowerCase()}:{})});if(e.hook){const r=oe({chainId:e.chainId,poolKey:{hooks:e.hook}});if(!r||r.name==="default")throw new Error("Unknown alternate Engine deployment.");return At({source:t,resource:"positions",request:async i=>{const s=await fetch(`${n}/v1/engine/positions/v3?${a}`,{headers:t.headers,signal:i});if(!s.ok)throw We(s);const c=bm.parse(await Oe(s,Qn,"Engine positions"));if(c.chainId!==e.chainId||!b(c.account,e.account)||!b(c.deployment.engine,r.addresses.aegisEngine)||!b(c.deployment.vaultRegistry,r.addresses.vaultRegistry)||c.deployment.version!==r.version||c.coverage.status!=="complete"||c.coverage.returnedPositionCount!==c.coverage.positions.length)throw new Error("Engine position discovery did not return a complete matching deployment.");const l=m=>{var d;return(d=e.markets)==null?void 0:d.find(h=>h.chainId===e.chainId&&h.poolId.toLowerCase()===m.toLowerCase()&&h.poolKey.hooks.toLowerCase()===e.hook.toLowerCase());},p=[],u=[];for(const m of c.coverage.positions){const d=l(m.poolId);if(m.kind==="lend_shares")u.push({...m,poolId:m.poolId,chainId:e.chainId,account:e.account,marketId:(d==null?void 0:d.id)??null,marketName:(d==null?void 0:d.displayName)??null,token0:(d==null?void 0:d.token0)??null,token1:(d==null?void 0:d.token1)??null,warnings:d?[]:["Market metadata unavailable."],freshness:{source:"subgraph",indexedBlockNumber:c.freshness.frame.blockNumber}});else{const h=(f,w)=>({raw:f,formatted:w===void 0?"Unavailable":oo(BigInt(f),w)});p.push({id:m.id,chainId:e.chainId,account:e.account,vaultId:m.vaultId,status:m.principalRlRaw!=="0"?"debt":m.idle0Raw!=="0"||m.idle1Raw!=="0"||m.nftCount>0?"collateral":"empty",marketId:(d==null?void 0:d.id)??null,marketName:(d==null?void 0:d.displayName)??null,poolId:m.poolId,token0:(d==null?void 0:d.token0)??null,token1:(d==null?void 0:d.token1)??null,amount0:h(m.idle0Raw,d==null?void 0:d.token0.decimals),amount1:h(m.idle1Raw,d==null?void 0:d.token1.decimals),debt:{principalRaw:m.principalRlRaw},ltv:{},nfts:{count:m.nftCount,items:[]},warnings:d?[]:["Market metadata unavailable."]});}}return{schemaVersion:"3",chainId:e.chainId,account:e.account,positions:p,lendPositions:u,totals:{collateralValueUsd:null,positionCount:p.length+u.length,borrowVaultCount:p.length,lendPositionCount:u.length},freshness:{source:"subgraph",blockNumber:c.freshness.frame.blockNumber,blockHash:c.freshness.frame.blockHash,positionCount:p.length+u.length}};}});}return At({source:t,resource:"positions",// Position loads are shared in the session cache. One consumer aborting
|
|
52
52
|
// must not cancel an in-flight request another mounted widget still uses.
|
|
53
|
-
request:async r=>{if(!
|
|
53
|
+
request:async r=>{if(!Bm(o)){const c=await fetch(`${n}/v1/engine/positions/v2?${a}`,{headers:t.headers,signal:r});if(c.ok){const l=Od.parse(await Oe(c,Qn,"Engine positions"));ar(e.chainId,e.account,l);const p=[],u=[];for(const m of l.positions)if(m.kind==="lend_shares")u.push(m);else{const{kind:d,...h}=m;p.push(h);}return{schemaVersion:"2",chainId:l.chainId,account:l.account,positions:p,lendPositions:u,totals:l.totals,freshness:l.freshness};}if(c.status!==404)throw We(c);ia.set(o,Date.now()+Tm);}const i=await fetch(`${n}/v1/engine/positions?${a}`,{headers:t.headers,signal:r});if(!i.ok)throw We(i);const s=Md.parse(await Oe(i,Qn,"Engine positions"));return ar(e.chainId,e.account,s),{...s,lendPositions:[],totals:{...s.totals,borrowVaultCount:s.totals.positionCount,lendPositionCount:0}};}});}async function Eh(e){if(e.source.kind==="static")return $e(rr(e),e.signal,zt);const t=Yi.read(Zi(e),()=>rr(e),e.force);return $e(t,e.signal,zt);}function Om(e,t,n){if(n.chainId!==e)throw new Error(`Engine REST position activity returned chain ${n.chainId} for requested chain ${e}.`);if(!b(n.account,t))throw new Error("Engine REST position activity returned a different wallet account.");for(const o of n.vaults)if(o.actions.find(r=>r.kind==="vault_created"&&!b(r.owner,n.account)))throw new Error(`Engine REST vault ${o.vaultId} activity has mismatched ownership metadata.`);}async function qm(e){if(e.hook){const o=oe({chainId:e.chainId,poolKey:{hooks:e.hook}});if(!o||o.name==="default")throw new Error("Unknown alternate Engine deployment.");return At({source:e.source,resource:"position activity",request:async a=>{const r=[];let i,s,c=null,l=!1;for(let h=0;h<20;h+=1){const f=await rc({source:e.source,chainIds:[e.chainId],account:e.account,hook:e.hook,limit:50,...(i?{cursor:i}:{}),signal:a}),w=f.chains[0];if(!w||w.status!=="available"||!w.frame||f.coverage.status!=="complete"||!b(w.engine,o.addresses.aegisEngine)||!b(w.vaultRegistry,o.addresses.vaultRegistry)||s&&w.frame.blockHash!==s)throw new Error("Engine activity did not return a complete matching deployment frame.");if(s=w.frame.blockHash,c=w.frame.blockNumber,r.push(...f.events),!f.nextCursor){if(!f.coverage.exhausted)throw new Error("Engine activity traversal is incomplete.");l=!0;break;}i=f.nextCursor;}if(!l||new Set(r.map(h=>h.id)).size!==r.length)throw new Error("Engine activity traversal is incomplete or duplicated.");r.sort((h,f)=>h.blockNumber-f.blockNumber||h.transactionIndex-f.transactionIndex||h.logIndex-f.logIndex);const p=/* @__PURE__ */new Map(),u=/* @__PURE__ */new Map();for(const h of r){const f={id:h.sourceId,timestamp:h.timestamp,blockNumber:h.blockNumber,transactionIndex:h.transactionIndex,txHash:h.txHash,logIndex:h.logIndex};if(h.vaultId!==null){const w=p.get(h.vaultId)??{vaultId:h.vaultId,poolId:h.poolId,marketId:null,marketName:null,createdAt:null,burnedAt:null,actions:[]};if(w.poolId!==h.poolId)throw new Error("Engine vault activity changed pools.");h.action.kind==="vault_created"&&(w.createdAt=new Date(h.timestamp*1e3).toISOString()),h.action.kind==="vault_burned"&&(w.burnedAt=new Date(h.timestamp*1e3).toISOString()),w.actions.push({...f,...h.action}),p.set(h.vaultId,w);}else if(h.action.kind!=="transfer_self"){const w=u.get(h.poolId)??{poolId:h.poolId,marketId:null,marketName:null,actions:[]};w.actions.push({...f,...h.action}),u.set(h.poolId,w);}}const m=[...p.values()].sort((h,f)=>BigInt(h.vaultId)>BigInt(f.vaultId)?-1:1),d=[...u.values()].sort((h,f)=>h.poolId.localeCompare(f.poolId));return Ya({schemaVersion:"1",chainId:e.chainId,account:e.account,marketState:[],vaults:m,lend:d,totals:{vaultCount:m.length,lendMarketCount:d.length,vaultActionCount:m.reduce((h,f)=>h+f.actions.length,0),lendActionCount:d.reduce((h,f)=>h+f.actions.length,0)},freshness:{source:"subgraph",blockNumber:c,blockHash:s}});}});}const t=Jt(e.source),n=new URLSearchParams({chainId:String(e.chainId),account:e.account});return At({source:e.source,resource:"position activity",// The request is shared through the short wallet cache. Keep consumer
|
|
54
54
|
// cancellation outside this loader so one unmounted widget cannot cancel
|
|
55
55
|
// the same in-flight ledger for another widget.
|
|
56
|
-
request:async o=>{const a=await fetch(`${t}/v1/engine/positions/activity?${n}`,{headers:e.source.headers,signal:o});if(!a.ok)throw ct(a);const r=sm(tm.parse(await Ke(a,xm,"Engine activity")));return Om(e.chainId,e.account,r),r;}});}async function Yi(e){if(e.source.kind==="static"){const o=e.source.vaultActivity??[];return o.length?{schemaVersion:"1",chainId:e.chainId,account:e.account,marketState:[],vaults:o,lend:[],totals:{vaultCount:o.length,lendMarketCount:0,vaultActionCount:o.reduce((a,r)=>a+r.actions.length,0),lendActionCount:0},freshness:{source:"static",blockNumber:null}}:null;}const t=e.source,n=Qi.read(Xi(e),()=>Fm({source:t,chainId:e.chainId,account:e.account}),e.force);return He(n,e.signal,Cm);}function qm(e){const t=typeof e=="bigint"?e.toString():e;if(!/^[0-9]+$/.test(t))throw new TypeError("Engine vaultId must be an unsigned decimal integer.");return BigInt(t).toString();}async function S0(e){const t=qm(e.vaultId),n=await Yi(e);if(!n)return null;const o=n.vaults.find(s=>BigInt(s.vaultId).toString()===t);if(!o)return null;const a=o.actions.filter(s=>s.kind==="debt_modified"||s.kind==="idle_modified"),r=a.at(-1);if(!r)return null;const i=r.txHash.toLowerCase();return Wi({txHash:r.txHash,timestamp:r.timestamp,debt:a.filter(s=>s.kind==="debt_modified").filter(s=>s.txHash.toLowerCase()===i).map(s=>({principalDeltaActual:BigInt(s.principalDeltaActualRaw)})),idle:a.filter(s=>s.kind==="idle_modified").filter(s=>s.txHash.toLowerCase()===i).map(s=>({deltaAmount0:BigInt(s.deltaAmount0Raw),deltaAmount1:BigInt(s.deltaAmount1Raw)}))});}async function C0(e){const t=await Yi(e);if(!t)return null;const n=e.poolId.toLowerCase(),o=t.lend.find(a=>a.poolId.toLowerCase()===n);if(!o)return null;for(let a=o.actions.length-1;a>=0;a-=1){const r=o.actions[a];if(!(r.kind!=="deposit"&&r.kind!=="withdraw"))return{txHash:r.txHash,timestamp:r.timestamp,kind:r.kind,principalDeltaRl:0n,collateralDelta0:BigInt(r.deltaAmount0Raw),collateralDelta1:BigInt(r.deltaAmount1Raw),receivedRaw:null,receivedIsToken0:null};}return null;}const Ji=31556736,Lm=604800,tr=10n**18n;function Um(e){if(e===null||!Number.isFinite(e)||e<=-100)return null;const t=100*((1+e/100)**(Lm/Ji)-1);return Number.isFinite(t)?t:null;}function Vm(e,t,n){if(e<=0n||t<0n||n<=0)return null;const o=Number(e)/Number(tr),a=Number(t)/Number(tr);if(!Number.isFinite(o)||!Number.isFinite(a)||o<=0)return null;const r=a/o-1,i=Ji/n,s=(Math.pow(1+r,i)-1)*100;return Number.isFinite(s)?s:null;}function nr(e,t,n){const o=Vm(e,t,n),a=Um(o);return o===null||a===null?null:{apyPct:o,weeklyEarningsPer100Usd:a};}function $m(e){const t=e.points.flatMap(s=>{if(!s.sharePriceWad)return[];try{const l=BigInt(s.sharePriceWad);return l>0n?[{t:s.t,sharePriceWad:l}]:[];}catch{return[];}}).sort((s,l)=>s.t-l.t),n=t[0],o=t.at(-1);if(!n||!o||o.t<=n.t)return null;const a=o.t-n.t,r=nr(n.sharePriceWad,o.sharePriceWad,a);if(!r)return null;const i=t.flatMap((s,l)=>{var u;if(l===0)return[{t:s.t,v:0}];const c=s.t-n.t;if(c<=0)return[];const p=(u=nr(n.sharePriceWad,s.sharePriceWad,c))==null?void 0:u.weeklyEarningsPer100Usd;return p===void 0?[]:[{t:s.t,v:p}];});return i.length<2?null:{startTimestamp:n.t,endTimestamp:o.t,coverageSeconds:a,apyPct:r.apyPct,weeklyEarningsPer100Usd:r.weeklyEarningsPer100Usd,points:i};}const Hm=1440*60*1e3;function qt(e){return e!=null&&Number.isFinite(e)&&e>0;}function Wm(e,t){return e.chainId===t.chainId&&ee(e.poolId,t.poolId)&&(e.marketId===null||Xt(e.marketId,t.id));}function Km(e,t){return e.positionId===t.id&&w(e.account,t.account)&&ee(e.poolId,t.poolId);}function zm(e,t,n){var c,p;const o=(c=t.metrics)==null?void 0:c.suppliedUsd;if(!Wm(e,t)||!qt(o))return null;let a,r,i;if((n==null?void 0:n.status)==="ok"&&Km(n,e))a=n.shareBalance,r=n.totalShares,i="live-shares";else{const u=(p=t.metrics)==null?void 0:p.totalLendShares;if(!u)return null;try{a=BigInt(e.indexedBalanceRaw),r=BigInt(u);}catch{return null;}i="indexed-shares";}if(a<=0n||r<=0n)return null;const s=Number(a)/Number(r),l=s*o;return!qt(s)||!qt(l)?null:{shareFraction:s,suppliedUsd:o,currentValueUsd:l,source:i};}function Gm(e,t,n){if(!qt(n)||e&&t===null)return null;const o=((t==null?void 0:t.currentValueUsd)??0)+n;return qt(o)?{addedValueUsd:n,projectedValueUsd:o}:null;}function or(e,t){if(e===null)return null;const n=e/100*t;return Number.isFinite(n)?n:null;}function jm(e,t,n){if(!Number.isFinite(n))return!1;const o=[t*1e3];if(e.updatedAt){const a=new Date(e.updatedAt).getTime();Number.isFinite(a)&&o.push(a);}return n-Math.max(...o)>=Hm;}function x0(e){const t=e.position!==null,n=e.position?zm(e.position,e.market,e.hydration):null,o=Gm(t,n,e.additionalValueUsd),a=e.history,r=(a==null?void 0:a.status)==="ready"&&a.marketId===e.market.id?$m(a):null,i=(r==null?void 0:r.weeklyEarningsPer100Usd)??null,s=a&&r&&i!==null?{weeklyEarningsPer100Usd:i,currentWeeklyEarningsUsd:or((n==null?void 0:n.currentValueUsd)??null,i),projectedWeeklyEarningsUsd:or((o==null?void 0:o.projectedValueUsd)??null,i),coverageSeconds:r.coverageSeconds,stale:jm(a,r.endTimestamp,e.nowMs??Date.now())}:null;return{hasPosition:t,valuation:n,projection:o,growth:s};}const Qm=16777215,Xm=[{type:"function",name:"feeQuote",stateMutability:"view",inputs:[{name:"poolId",type:"bytes32"}],outputs:[{name:"activeFee",type:"uint24"},{name:"baseFee",type:"uint24"},{name:"surgeFee",type:"uint24"},{name:"maxTicksPerBlock",type:"uint24"},{name:"manualOverride",type:"bool"},{name:"perSwapMode",type:"bool"},{name:"inCapEvent",type:"bool"}]}];function an(e,t){const n=typeof e=="bigint"?Number(e):typeof e=="number"?e:Number.NaN;if(!Number.isSafeInteger(n)||n<0||n>Qm)throw new TypeError(`Dynamic fee ${t} must be a uint24 value.`);return n;}function Gn(e,t){if(typeof e!="boolean")throw new TypeError(`Dynamic fee ${t} must be boolean.`);return e;}async function Ym(e){if(Rt(e.market),e.blockNumber<0n)throw new TypeError("Dynamic fee blockNumber must be non-negative.");const t=pe(e.market.chainId);if(!t)throw new Error(`No trusted Aegis Engine deployment is configured for chain ${e.market.chainId}.`);const n=await e.publicClient.readContract({address:t.dynamicFeeManager,abi:Xm,functionName:"feeQuote",args:[e.market.poolId],blockNumber:e.blockNumber});if(!Array.isArray(n)||n.length!==7)throw new TypeError("Dynamic fee feeQuote returned an invalid result.");const o=an(n[0],"activeFeePpm"),a=an(n[1],"baseFeePpm"),r=an(n[2],"surgeFeePpm"),i=an(n[3],"adaptiveTickThresholdTicks"),s=Gn(n[4],"manualOverride"),l=Gn(n[5],"perSwapMode"),c=Gn(n[6],"inCapEvent");return{source:"rpc",enforcement:"post-swap-surge-trigger",evaluationScope:l?"per-swap":"per-block",blockNumber:e.blockNumber,activeFeePpm:o,baseFeePpm:a,surgeFeePpm:r,adaptiveTickThresholdTicks:i,surgeActive:!s&&r>0,inCapEvent:c,manualOverride:s};}function Jm({sdk:e,market:t,canonicalMarket:n,vault:o,deposit:a,upperBound:r,tauPips:i,slippageBps:s}){if(a<0n||r<=0n||t.borrowIndexWad<=0n)return 0n;const l=e.utilizationHeadroomGammaNewLWad(t),c=E=>e.forwardFunctionNoSwap({market:n,vault:o,deposit:a,yWtarget:E,tauPips:i}),p=E=>(E*10n**18n+t.borrowIndexWad-1n)/t.borrowIndexWad,u=E=>{const T=c(E);return T.feasible&&p(T.gammaNewL)*t.borrowIndexWad<=l;};let m=0n,d=r;if(u(d))m=d;else for(let E=0;E<264&&d-m>1n;E++){const T=m+(d-m)/2n;u(T)?m=T:d=T;}const h=m*BigInt(1e4-Math.max(1,s))/10000n;if(h<=0n||!u(h))return 0n;const f=c(h),b=o.rL0+p(f.gammaNewL),k=e.minDebtFloorRl(t.equityLWad,t.borrowIndexWad);return b>0n&&b<k?0n:h;}const Zm=["constant-rate-estimate","gas-not-included","collateral-opportunity-cost-not-included","liquidation-risk-not-modeled","repay-quote-not-modeled"];function oa(e){return e!=null&&Number.isFinite(e)&&e>=0;}function ar(e){return e.priceUsd!==null&&e.priceUsd!==void 0&&Number.isFinite(e.priceUsd)&&e.priceUsd>0?e.priceUsd:null;}function ep(e){const t=ar(e.token0),n=ar(e.token1);return e.token0.stable&&t!==null?{side:"token0",priceUsd:t}:e.token1.stable&&n!==null?{side:"token1",priceUsd:n}:t!==null&&n===null?{side:"token0",priceUsd:t}:n!==null&&t===null?{side:"token1",priceUsd:n}:null;}function rn(e){return oa(e)?e:null;}function rr(e,t,n){if(!n)return null;const o=n.side==="token0"?e:t;return o===null?null:o*n.priceUsd;}function ir(e,t,n){const o=rn(e.idle.valueT0),a=rn(e.idle.valueT1),r=n?rn(e.debt.valueT0):null,i=n?rn(e.debt.valueT1):null;return{collateralValueToken0:o,collateralValueToken1:a,collateralValueUsd:rr(o,a,t),debtValueToken0:r,debtValueToken1:i,debtValueUsd:rr(r,i,t)};}function tp(e){return e.feasible?oa(e.display.postBorrowAprPct)?{aprPct:e.display.postBorrowAprPct,basis:"projected-post-borrow"}:{aprPct:null,basis:null}:{aprPct:null,basis:null};}function sr(e){return e==="INF"||oa(e);}function np(e){if(!e.feasible)return{days:null,basis:null};const t=e.display.postBorrowDaysToLiquidation;if(sr(t))return{days:t,basis:"projected-post-borrow"};const n=e.display.daysToLiquidationAtCurrentApr;return sr(n)?{days:n,basis:"current-apr"}:{days:null,basis:null};}function op({market:e,marketContext:t,owner:n,vault:o,quote:a,computeVaultStateSnapshot:r}){var b;const i=[],s=ep(e),l=((b=a.finalVault)==null?void 0:b.gammaTotalLPostRounded)??null;let c=null,p=null;if(o)try{const k=r({market:t,vault:o});c=ir(k,s,!0);}catch{c=null;}const u=a.finalVault;if(!u||l===null||l<=0n)i.push("rounded-debt-frame");else try{const k=r({market:t,vault:{vaultId:0n,poolId:t.poolId,owner:n,x0:u.xV,y0:u.yV,rL0:u.rL0Post}}),E=k.hasDebt&&k.debt.gammaL===l&&Number.isFinite(k.debt.valueT0)&&k.debt.valueT0>0&&Number.isFinite(k.debt.valueT1)&&k.debt.valueT1>0;p=ir(k,s,E),E||i.push("debt-valuation");}catch{i.push("debt-valuation");}const m=(p==null?void 0:p.debtValueToken0)??null,d=(p==null?void 0:p.debtValueToken1)??null,h=(p==null?void 0:p.debtValueUsd)??null;m!==null&&d!==null&&s===null&&i.push("usd-valuation-basis");const f=tp(a);return f.aprPct===null&&i.push("borrow-apr"),{gammaTotalLPostRounded:l,vaultValues:{before:c,after:p},debtValueToken0:m,debtValueToken1:d,debtValueUsd:h,usdValuationBasis:(s==null?void 0:s.side)??null,rate:f,liquidationHorizon:np(a),constantRateMonthlyCarryUsd:h!==null&&f.aprPct!==null?h*(f.aprPct/100)/12:null,missingInputs:i,limitations:[...Zm]};}async function Zi(e){var r,i;(r=e.signal)==null||r.throwIfAborted();const{uniswapV4QuoterAbi:t}=await Q(),{result:n}=await e.publicClient.simulateContract({address:e.quoter,abi:t,functionName:"quoteExactInputSingle",args:[{poolKey:e.poolKey,zeroForOne:e.zeroForOne,exactAmount:e.exactAmount,hookData:"0x"}],blockNumber:e.blockNumber});(i=e.signal)==null||i.throwIfAborted();const[o,a]=n;return{amountOut:o,gasEstimate:a,blockNumber:e.blockNumber};}function cr(e,t){return{address:e.address,chainId:t,symbol:e.symbol,decimals:String(e.decimals)};}async function ap(e){var c;(c=e.signal)==null||c.throwIfAborted();const{context:t,leg:n}=e,{market:o,frame:a}=t;if(!n.needed)return{route:[],amountOutQuoted:0n,amountOutMinimum:0n,blockNumber:a.blockNumber};const i=(await Zi({publicClient:e.publicClient,quoter:e.quoter,poolKey:o.poolKey,zeroForOne:n.inputIsToken0,exactAmount:n.amountIn,blockNumber:a.blockNumber,...(e.signal?{signal:e.signal}:{})})).amountOut,s=gt(i,e.slippageBps);return{route:[[{type:"v4-pool",address:o.poolId,tokenIn:cr(n.inputIsToken0?e.token0:e.token1,t.chainId),tokenOut:cr(n.inputIsToken0?e.token1:e.token0,t.chainId),sqrtRatioX96:o.sqrtPriceX96.toString(),liquidity:o.inRangeLiquidity.toString(),tickCurrent:o.tickCurrent.toString(),fee:o.poolKey.fee,tickSpacing:o.poolKey.tickSpacing,hooks:o.poolKey.hooks,amountIn:n.amountIn.toString(),amountOut:i.toString()}]],amountOutQuoted:i,amountOutMinimum:s,blockNumber:a.blockNumber};}function aa(e,t){return 10**((e+t)/2);}function lr(e,t){return Number(e)/1e18/t;}function rp(e,t){const n=e*t;if(!Number.isFinite(n)||n<=0)return 0n;const o=BigInt(Math.floor(n));return o-(o>>52n);}const jn=1e6,ra=31556736;async function ip(e){const{UTILIZATION_CAP_PIPS:t,priceFromSqrtX96:n}=await Q(),{market:o,aprProjection:a}=e,r=aa(o.decimals0,o.decimals1);return{Ppool:n(o.sqrtPriceX96,o.decimals0,o.decimals1),SIdle:lr(o.equityLWad-o.borrowedLWad,r),BM:lr(o.borrowedLWad,r),M:Number(o.borrowIndexWad)/1e18,Ucap:Number(t)/jn,thetaL:o.maxLtvPips/jn,thetaLiq:o.hardLtvPips/jn,aprPct:Number(o.currentRatePerSecWad)/1e18*ra*100,betaTime:1,projection:{equityLWad:o.equityLWad,borrowedLWad:o.borrowedLWad,fullUtilRate:a.fullUtilRate,rateOracleAddress:a.rateOracleAddress,chainId:a.chainId,version:a.version,kappa:r}};}async function sp(e,t){const{estimatePostBorrowRate:n}=await Q(),{projection:o}=e,a=n({equityLWad:o.equityLWad,borrowedLWad:o.borrowedLWad,deltaLWad:BigInt(Math.round(t.gamma*o.kappa*1e18)),fullUtilRate:o.fullUtilRate,rateOracleAddress:o.rateOracleAddress,chainId:o.chainId,version:o.version,currentAprPct:e.aprPct,entryLtv:t.ltv,thetaL:e.thetaLiq});return a.oracleSupported?{aprPct:a.postBorrowAprPct,basis:"projected-post-borrow"}:{aprPct:e.aprPct,basis:"current-apr"};}const ko=2e-3,cp=86400,lp=3;function Ve(e,t=null){return{lMin:null,lMax:null,chosen:null,candidates:[],diagnostics:t,infeasibleReason:e};}function up(e){return e.Ppool>0&&e.M>0&&e.Ucap>0&&e.Ucap<=1&&e.thetaL>ko&&e.thetaL<1.5&&// A market whose liquidation threshold sits under its open cap would size
|
|
56
|
+
request:async o=>{const a=await fetch(`${t}/v1/engine/positions/activity?${n}`,{headers:e.source.headers,signal:o});if(!a.ok)throw We(a);const r=Ya(Zd.parse(await Oe(a,xm,"Engine activity")));return Om(e.chainId,e.account,r),r;}});}async function es(e){if(e.source.kind==="static"){const o=e.source.vaultActivity??[];return o.length?{schemaVersion:"1",chainId:e.chainId,account:e.account,marketState:[],vaults:o,lend:[],totals:{vaultCount:o.length,lendMarketCount:0,vaultActionCount:o.reduce((a,r)=>a+r.actions.length,0),lendActionCount:0},freshness:{source:"static",blockNumber:null}}:null;}const t=e.source,n=Ji.read(Zi(e),()=>qm({source:t,chainId:e.chainId,account:e.account,hook:e.hook}),e.force);return $e(n,e.signal,Cm);}function Lm(e){const t=typeof e=="bigint"?e.toString():e;if(!/^[0-9]+$/.test(t))throw new TypeError("Engine vaultId must be an unsigned decimal integer.");return BigInt(t).toString();}async function Ah(e){const t=Lm(e.vaultId),n=await es(e);if(!n)return null;const o=n.vaults.find(s=>BigInt(s.vaultId).toString()===t);if(!o)return null;const a=o.actions.filter(s=>s.kind==="debt_modified"||s.kind==="idle_modified"),r=a.at(-1);if(!r)return null;const i=r.txHash.toLowerCase();return Gi({txHash:r.txHash,timestamp:r.timestamp,debt:a.filter(s=>s.kind==="debt_modified").filter(s=>s.txHash.toLowerCase()===i).map(s=>({principalDeltaActual:BigInt(s.principalDeltaActualRaw)})),idle:a.filter(s=>s.kind==="idle_modified").filter(s=>s.txHash.toLowerCase()===i).map(s=>({deltaAmount0:BigInt(s.deltaAmount0Raw),deltaAmount1:BigInt(s.deltaAmount1Raw)}))});}async function gh(e){const t=await es(e);if(!t)return null;const n=e.poolId.toLowerCase(),o=t.lend.find(a=>a.poolId.toLowerCase()===n);if(!o)return null;for(let a=o.actions.length-1;a>=0;a-=1){const r=o.actions[a];if(!(r.kind!=="deposit"&&r.kind!=="withdraw"))return{txHash:r.txHash,timestamp:r.timestamp,kind:r.kind,principalDeltaRl:0n,collateralDelta0:BigInt(r.deltaAmount0Raw),collateralDelta1:BigInt(r.deltaAmount1Raw),receivedRaw:null,receivedIsToken0:null};}return null;}const ts=31556736,Fm=604800,ir=10n**18n;function Um(e){if(e===null||!Number.isFinite(e)||e<=-100)return null;const t=100*((1+e/100)**(Fm/ts)-1);return Number.isFinite(t)?t:null;}function Vm(e,t,n){if(e<=0n||t<0n||n<=0)return null;const o=Number(e)/Number(ir),a=Number(t)/Number(ir);if(!Number.isFinite(o)||!Number.isFinite(a)||o<=0)return null;const r=a/o-1,i=ts/n,s=(Math.pow(1+r,i)-1)*100;return Number.isFinite(s)?s:null;}function sr(e,t,n){const o=Vm(e,t,n),a=Um(o);return o===null||a===null?null:{apyPct:o,weeklyEarningsPer100Usd:a};}function Hm(e){const t=e.points.flatMap(s=>{if(!s.sharePriceWad)return[];try{const c=BigInt(s.sharePriceWad);return c>0n?[{t:s.t,sharePriceWad:c}]:[];}catch{return[];}}).sort((s,c)=>s.t-c.t),n=t[0],o=t.at(-1);if(!n||!o||o.t<=n.t)return null;const a=o.t-n.t,r=sr(n.sharePriceWad,o.sharePriceWad,a);if(!r)return null;const i=t.flatMap((s,c)=>{var u;if(c===0)return[{t:s.t,v:0}];const l=s.t-n.t;if(l<=0)return[];const p=(u=sr(n.sharePriceWad,s.sharePriceWad,l))==null?void 0:u.weeklyEarningsPer100Usd;return p===void 0?[]:[{t:s.t,v:p}];});return i.length<2?null:{startTimestamp:n.t,endTimestamp:o.t,coverageSeconds:a,apyPct:r.apyPct,weeklyEarningsPer100Usd:r.weeklyEarningsPer100Usd,points:i};}const Wm=1440*60*1e3;function Ut(e){return e!=null&&Number.isFinite(e)&&e>0;}function $m(e,t){return e.chainId===t.chainId&&Y(e.poolId,t.poolId)&&(e.marketId===null||Yt(e.marketId,t.id));}function Km(e,t){return e.positionId===t.id&&b(e.account,t.account)&&Y(e.poolId,t.poolId);}function zm(e,t,n){var l,p;const o=(l=t.metrics)==null?void 0:l.suppliedUsd;if(!$m(e,t)||!Ut(o))return null;let a,r,i;if((n==null?void 0:n.status)==="ok"&&Km(n,e))a=n.shareBalance,r=n.totalShares,i="live-shares";else{const u=(p=t.metrics)==null?void 0:p.totalLendShares;if(!u)return null;try{a=BigInt(e.indexedBalanceRaw),r=BigInt(u);}catch{return null;}i="indexed-shares";}if(a<=0n||r<=0n)return null;const s=Number(a)/Number(r),c=s*o;return!Ut(s)||!Ut(c)?null:{shareFraction:s,suppliedUsd:o,currentValueUsd:c,source:i};}function Gm(e,t,n){if(!Ut(n)||e&&t===null)return null;const o=((t==null?void 0:t.currentValueUsd)??0)+n;return Ut(o)?{addedValueUsd:n,projectedValueUsd:o}:null;}function cr(e,t){if(e===null)return null;const n=e/100*t;return Number.isFinite(n)?n:null;}function jm(e,t,n){if(!Number.isFinite(n))return!1;const o=[t*1e3];if(e.updatedAt){const a=new Date(e.updatedAt).getTime();Number.isFinite(a)&&o.push(a);}return n-Math.max(...o)>=Wm;}function Sh(e){const t=e.position!==null,n=e.position?zm(e.position,e.market,e.hydration):null,o=Gm(t,n,e.additionalValueUsd),a=e.history,r=(a==null?void 0:a.status)==="ready"&&a.marketId===e.market.id?Hm(a):null,i=(r==null?void 0:r.weeklyEarningsPer100Usd)??null,s=a&&r&&i!==null?{weeklyEarningsPer100Usd:i,currentWeeklyEarningsUsd:cr((n==null?void 0:n.currentValueUsd)??null,i),projectedWeeklyEarningsUsd:cr((o==null?void 0:o.projectedValueUsd)??null,i),coverageSeconds:r.coverageSeconds,stale:jm(a,r.endTimestamp,e.nowMs??Date.now())}:null;return{hasPosition:t,valuation:n,projection:o,growth:s};}const Qm=16777215,Xm=[{type:"function",name:"feeQuote",stateMutability:"view",inputs:[{name:"poolId",type:"bytes32"}],outputs:[{name:"activeFee",type:"uint24"},{name:"baseFee",type:"uint24"},{name:"surgeFee",type:"uint24"},{name:"maxTicksPerBlock",type:"uint24"},{name:"manualOverride",type:"bool"},{name:"perSwapMode",type:"bool"},{name:"inCapEvent",type:"bool"}]}];function rn(e,t){const n=typeof e=="bigint"?Number(e):typeof e=="number"?e:Number.NaN;if(!Number.isSafeInteger(n)||n<0||n>Qm)throw new TypeError(`Dynamic fee ${t} must be a uint24 value.`);return n;}function Xn(e,t){if(typeof e!="boolean")throw new TypeError(`Dynamic fee ${t} must be boolean.`);return e;}async function Ym(e){var p;if(Rt(e.market),e.blockNumber<0n)throw new TypeError("Dynamic fee blockNumber must be non-negative.");const t=(p=oe(e.market))==null?void 0:p.addresses;if(!t)throw new Error(`No trusted Aegis Engine deployment is configured for chain ${e.market.chainId}.`);const n=await e.publicClient.readContract({address:t.dynamicFeeManager,abi:Xm,functionName:"feeQuote",args:[e.market.poolId],blockNumber:e.blockNumber});if(!Array.isArray(n)||n.length!==7)throw new TypeError("Dynamic fee feeQuote returned an invalid result.");const o=rn(n[0],"activeFeePpm"),a=rn(n[1],"baseFeePpm"),r=rn(n[2],"surgeFeePpm"),i=rn(n[3],"adaptiveTickThresholdTicks"),s=Xn(n[4],"manualOverride"),c=Xn(n[5],"perSwapMode"),l=Xn(n[6],"inCapEvent");return{source:"rpc",enforcement:"post-swap-surge-trigger",evaluationScope:c?"per-swap":"per-block",blockNumber:e.blockNumber,activeFeePpm:o,baseFeePpm:a,surgeFeePpm:r,adaptiveTickThresholdTicks:i,surgeActive:!s&&r>0,inCapEvent:l,manualOverride:s};}function Jm({sdk:e,market:t,canonicalMarket:n,vault:o,deposit:a,upperBound:r,tauPips:i,slippageBps:s}){if(a<0n||r<=0n||t.borrowIndexWad<=0n)return 0n;const c=e.utilizationHeadroomGammaNewLWad(t),l=g=>e.forwardFunctionNoSwap({market:n,vault:o,deposit:a,yWtarget:g,tauPips:i}),p=g=>(g*10n**18n+t.borrowIndexWad-1n)/t.borrowIndexWad,u=g=>{const I=l(g);return I.feasible&&p(I.gammaNewL)*t.borrowIndexWad<=c;};let m=0n,d=r;if(u(d))m=d;else for(let g=0;g<264&&d-m>1n;g++){const I=m+(d-m)/2n;u(I)?m=I:d=I;}const h=m*BigInt(1e4-Math.max(1,s))/10000n;if(h<=0n||!u(h))return 0n;const f=l(h),w=o.rL0+p(f.gammaNewL),v=e.minDebtFloorRl(t.equityLWad,t.borrowIndexWad);return w>0n&&w<v?0n:h;}const Zm=["constant-rate-estimate","gas-not-included","collateral-opportunity-cost-not-included","liquidation-risk-not-modeled","repay-quote-not-modeled"];function ca(e){return e!=null&&Number.isFinite(e)&&e>=0;}function lr(e){return e.priceUsd!==null&&e.priceUsd!==void 0&&Number.isFinite(e.priceUsd)&&e.priceUsd>0?e.priceUsd:null;}function ep(e){const t=lr(e.token0),n=lr(e.token1);return e.token0.stable&&t!==null?{side:"token0",priceUsd:t}:e.token1.stable&&n!==null?{side:"token1",priceUsd:n}:t!==null&&n===null?{side:"token0",priceUsd:t}:n!==null&&t===null?{side:"token1",priceUsd:n}:null;}function sn(e){return ca(e)?e:null;}function ur(e,t,n){if(!n)return null;const o=n.side==="token0"?e:t;return o===null?null:o*n.priceUsd;}function dr(e,t,n){const o=sn(e.idle.valueT0),a=sn(e.idle.valueT1),r=n?sn(e.debt.valueT0):null,i=n?sn(e.debt.valueT1):null;return{collateralValueToken0:o,collateralValueToken1:a,collateralValueUsd:ur(o,a,t),debtValueToken0:r,debtValueToken1:i,debtValueUsd:ur(r,i,t)};}function tp(e){return e.feasible?ca(e.display.postBorrowAprPct)?{aprPct:e.display.postBorrowAprPct,basis:"projected-post-borrow"}:{aprPct:null,basis:null}:{aprPct:null,basis:null};}function mr(e){return e==="INF"||ca(e);}function np(e){if(!e.feasible)return{days:null,basis:null};const t=e.display.postBorrowDaysToLiquidation;if(mr(t))return{days:t,basis:"projected-post-borrow"};const n=e.display.daysToLiquidationAtCurrentApr;return mr(n)?{days:n,basis:"current-apr"}:{days:null,basis:null};}function op({market:e,marketContext:t,owner:n,vault:o,quote:a,computeVaultStateSnapshot:r}){var w;const i=[],s=ep(e),c=((w=a.finalVault)==null?void 0:w.gammaTotalLPostRounded)??null;let l=null,p=null;if(o)try{const v=r({market:t,vault:o});l=dr(v,s,!0);}catch{l=null;}const u=a.finalVault;if(!u||c===null||c<=0n)i.push("rounded-debt-frame");else try{const v=r({market:t,vault:{vaultId:0n,poolId:t.poolId,owner:n,x0:u.xV,y0:u.yV,rL0:u.rL0Post}}),g=v.hasDebt&&v.debt.gammaL===c&&Number.isFinite(v.debt.valueT0)&&v.debt.valueT0>0&&Number.isFinite(v.debt.valueT1)&&v.debt.valueT1>0;p=dr(v,s,g),g||i.push("debt-valuation");}catch{i.push("debt-valuation");}const m=(p==null?void 0:p.debtValueToken0)??null,d=(p==null?void 0:p.debtValueToken1)??null,h=(p==null?void 0:p.debtValueUsd)??null;m!==null&&d!==null&&s===null&&i.push("usd-valuation-basis");const f=tp(a);return f.aprPct===null&&i.push("borrow-apr"),{gammaTotalLPostRounded:c,vaultValues:{before:l,after:p},debtValueToken0:m,debtValueToken1:d,debtValueUsd:h,usdValuationBasis:(s==null?void 0:s.side)??null,rate:f,liquidationHorizon:np(a),constantRateMonthlyCarryUsd:h!==null&&f.aprPct!==null?h*(f.aprPct/100)/12:null,missingInputs:i,limitations:[...Zm]};}async function ns(e){var r,i;(r=e.signal)==null||r.throwIfAborted();const{uniswapV4QuoterAbi:t}=await Q(),{result:n}=await e.publicClient.simulateContract({address:e.quoter,abi:t,functionName:"quoteExactInputSingle",args:[{poolKey:e.poolKey,zeroForOne:e.zeroForOne,exactAmount:e.exactAmount,hookData:"0x"}],blockNumber:e.blockNumber});(i=e.signal)==null||i.throwIfAborted();const[o,a]=n;return{amountOut:o,gasEstimate:a,blockNumber:e.blockNumber};}function pr(e,t){return{address:e.address,chainId:t,symbol:e.symbol,decimals:String(e.decimals)};}async function ap(e){var l;(l=e.signal)==null||l.throwIfAborted();const{context:t,leg:n}=e,{market:o,frame:a}=t;if(!n.needed)return{route:[],amountOutQuoted:0n,amountOutMinimum:0n,blockNumber:a.blockNumber};const i=(await ns({publicClient:e.publicClient,quoter:e.quoter,poolKey:o.poolKey,zeroForOne:n.inputIsToken0,exactAmount:n.amountIn,blockNumber:a.blockNumber,...(e.signal?{signal:e.signal}:{})})).amountOut,s=St(i,e.slippageBps);return{route:[[{type:"v4-pool",address:o.poolId,tokenIn:pr(n.inputIsToken0?e.token0:e.token1,t.chainId),tokenOut:pr(n.inputIsToken0?e.token1:e.token0,t.chainId),sqrtRatioX96:o.sqrtPriceX96.toString(),liquidity:o.inRangeLiquidity.toString(),tickCurrent:o.tickCurrent.toString(),fee:o.poolKey.fee,tickSpacing:o.poolKey.tickSpacing,hooks:o.poolKey.hooks,amountIn:n.amountIn.toString(),amountOut:i.toString()}]],amountOutQuoted:i,amountOutMinimum:s,blockNumber:a.blockNumber};}function la(e,t){return 10**((e+t)/2);}function fr(e,t){return Number(e)/1e18/t;}function rp(e,t){const n=e*t;if(!Number.isFinite(n)||n<=0)return 0n;const o=BigInt(Math.floor(n));return o-(o>>52n);}const Yn=1e6,ua=31556736;async function ip(e){const{UTILIZATION_CAP_PIPS:t,priceFromSqrtX96:n}=await Q(),{market:o,aprProjection:a}=e,r=la(o.decimals0,o.decimals1);return{Ppool:n(o.sqrtPriceX96,o.decimals0,o.decimals1),SIdle:fr(o.equityLWad-o.borrowedLWad,r),BM:fr(o.borrowedLWad,r),M:Number(o.borrowIndexWad)/1e18,Ucap:Number(t)/Yn,thetaL:o.maxLtvPips/Yn,thetaLiq:o.hardLtvPips/Yn,aprPct:Number(o.currentRatePerSecWad)/1e18*ua*100,betaTime:1,projection:{equityLWad:o.equityLWad,borrowedLWad:o.borrowedLWad,fullUtilRate:a.fullUtilRate,rateOracleAddress:a.rateOracleAddress,chainId:a.chainId,version:a.version,kappa:r}};}async function sp(e,t){const{estimatePostBorrowRate:n}=await Q(),{projection:o}=e,a=n({equityLWad:o.equityLWad,borrowedLWad:o.borrowedLWad,deltaLWad:BigInt(Math.round(t.gamma*o.kappa*1e18)),fullUtilRate:o.fullUtilRate,rateOracleAddress:o.rateOracleAddress,chainId:o.chainId,version:o.version,currentAprPct:e.aprPct,entryLtv:t.ltv,thetaL:e.thetaLiq});return a.oracleSupported?{aprPct:a.postBorrowAprPct,basis:"projected-post-borrow"}:{aprPct:e.aprPct,basis:"current-apr"};}const Io=2e-3,cp=86400,lp=3;function He(e,t=null){return{lMin:null,lMax:null,chosen:null,candidates:[],diagnostics:t,infeasibleReason:e};}function up(e){return e.Ppool>0&&e.M>0&&e.Ucap>0&&e.Ucap<=1&&e.thetaL>Io&&e.thetaL<1.5&&// A market whose liquidation threshold sits under its open cap would size
|
|
57
57
|
// positions that are already liquidatable at lock.
|
|
58
|
-
e.thetaLiq>=e.thetaL&&e.thetaLiq<1.5;}function dp(e,t,n){return!(e>0)||!(t>e)?0:n>0?(t/e-1)/n*(ra/cp):"INF";}function mp(e){return e.filter(t=>!e.some(n=>n.leverage>=t.leverage&&n.gamma<t.gamma));}function pp(e,t){return e.reduce((n,o)=>{const a=Math.abs(o.leverage-t),r=Math.abs(n.leverage-t),i=Number.EPSILON*Math.max(1,Math.abs(t),Math.abs(o.leverage),Math.abs(n.leverage))*8;return a<r-i||Math.abs(a-r)<=i&&o.gamma<n.gamma?o:n;});}async function fp(e){const{state:t,direction:n,depositAsset:o,depositAmount:a,tlSeconds:r,deltaLev:i,tauBar:s,leverageTarget:l}=e;if(!Number.isFinite(a)||!Number.isFinite(r)||a<=0||r<0||!(s>0)||l!==void 0&&(!Number.isFinite(l)||!(l>0)))return Ve({kind:"invalid-input"});if(i===0)return Ve({kind:"zero-price-move"});if(!Number.isFinite(i))return Ve({kind:"price-move-out-of-range"});if(!up(t))return Ve({kind:"invalid-market-state"});const c=n==="long"?Math.abs(i):-Math.abs(i);if(c<=-1)return Ve({kind:"price-move-out-of-range"});const{buildDegenPosition:p,computeMaxEfficientDeposit:u,deltaMaxByUtil:m,interestCostOverHorizon:d,tauFromTimeToLiq:h}=await Q(),f=t.Ppool,b=Math.sqrt(f),k=f*(1+c),E=m(t.SIdle,t.BM,t.Ucap,t.M),T=A=>{const g=A.aprPct>0?A.aprPct/100:0,C=t.thetaL-ko,M=Math.min(h(t.thetaL,g,r),s,C),q={tau:M,tauBinding:M===C?"theta-margin":M===s?"tau-bar":"horizon",thetaL:t.thetaL,thetaLiq:t.thetaLiq,rEffAnnual:g,rateBasis:A.basis,entryPrice:f,targetPrice:k,deltaCap:E,maxEfficientDeposit:null,isCapConstrained:!1,candidatesTotal:0,candidatesSurviving:0};if(!(E>0))return{result:Ve({kind:"no-borrow-capacity"},q),anchor:null};const W={...t,thetaL:M+ko},G=p(W,{direction:n,depositAsset:o,depositAmount:a,targetPrice:k,horizonMinutes:0});if(!G.ok){const L=u(W,{direction:n,depositAsset:o,targetPrice:k,horizonMinutes:0}),J=L===null?null:L;return{result:Ve(J!==null&&a>J?{kind:"deposit-above-max",maxEfficientDeposit:J}:{kind:"no-feasible-band"},{...q,maxEfficientDeposit:J}),anchor:null};}const te={...q,maxEfficientDeposit:Number.isFinite(G.diagnostics.maxEfficientDeposit)?G.diagnostics.maxEfficientDeposit:null,isCapConstrained:G.diagnostics.isCapConstrained,candidatesTotal:G.diagnostics.candidatesTotal,candidatesSurviving:G.diagnostics.candidatesSurviving},Me=L=>{const J=L.y-L.gamma*L.gamma/L.x;return{alpha:L.alpha,leverage:L.L_display,localLeverage:L.L0,asymptoticLeverage:L.L_infty,ltv:L.LTV,delta:L.delta,gamma:L.gamma,x:L.x,y:L.y,q:L.q,equity:L.E0,equityAtTarget:L.E_target,interestCost:d(L.gamma,b,g,r),equityMin:J,equityMinRatio:J/L.E0,cappedByDelta:L.cappedByDelta};},ve=G.candidates.map(Me),ge=ve.filter(L=>L.leverage>=1&&(n==="long"?L.q>=0:L.q<=0)),be=mp(ge);if(be.length===0)return{result:Ve({kind:"no-feasible-band"},te),anchor:null};const X=be.reduce((L,J)=>Math.min(L,J.leverage),be[0].leverage),K=be.reduce((L,J)=>Math.max(L,J.leverage),be[0].leverage),V=Math.min(K,Math.max(X,l??K)),oe=pp(be,V);return{result:{lMin:X,lMax:K,chosen:oe,candidates:ve,diagnostics:te},anchor:oe};};let S={aprPct:t.aprPct,basis:"current-apr"},B=T(S);for(let A=0;A<lp;A++){const g=B.anchor;if(!g)break;const C=await sp(t,g);if(C.aprPct<S.aprPct)break;if(C.aprPct===S.aprPct){C.basis!==S.basis&&(S=C,B=T(S));break;}S=C,B=T(S);}return B.result;}const hp=1e-6;function Dn(e,t){const n=Math.floor(e*10**t);return Number.isFinite(n)&&n>0?BigInt(n):0n;}function wp(e){const{candidate:t,direction:n,entryPrice:o,decimals0:a,decimals1:r,idle0:i,idle1:s}=e,l=t.q,c=l<0,p=l>0?l*o:-l;if(!(p>hp))return{ok:!0,leg:{needed:!1,inputIsToken0:n==="short",amountIn:0n,clampedByIdle:!1}};if(c!==(n==="short"))return{ok:!1,reason:"swap-direction-mismatch"};const u=Dn(p,c?a:r),m=c?i:s,d=u<m?u:m;return d<=0n?{ok:!1,reason:"insufficient-idle"}:{ok:!0,leg:{needed:!0,inputIsToken0:c,amountIn:d,clampedByIdle:d<u}};}function Pt(e=xn){return BigInt(Math.floor(Date.now()/1e3)+e);}function es(e){if(!e.router)throw new Error("Market is missing engine router.");return e.router;}function bp(e){if(!e.v4Quoter)throw new Error("Market is missing Uniswap V4 quoter.");return e.v4Quoter;}async function ts(e,t,n){const{verifyPermit2Batch:o}=await Q();return{...t,verification:await o(e,{chainId:n.chainId,permit2Address:n.permit2,permit:t,blockNumber:n.blockNumber})};}function dt(e,t){return t?{to:es(e),data:t.calldata,value:t.value}:null;}function Mt(e){if(!Number.isSafeInteger(e)||e<0||e>=1e4)throw new Error(`Engine quote slippageBps must be an integer between 0 and 9999; got ${e}.`);}function ns(e){if(!Number.isSafeInteger(e)||e<0||e>1e4)throw new RangeError(`Engine maxPriceImpactBps must be an integer between 0 and 10000; got ${e}.`);}function vo(e,t,n,o={}){return{...e,feasible:!1,executable:!1,infeasibleReason:t,encodeInput:null,call:null,gateFailures:[...e.gateFailures,{gate:t,detail:n,...o}],warnings:[...e.warnings,n]};}function kp(e,t){var o;if(!e.feasible||!((o=e.swap)!=null&&o.needed))return e;const n=e.priceImpactBps;return n===null||!Number.isSafeInteger(n)?vo(e,"price-impact-unavailable","The internal swap has no finite block-pinned price-impact assessment.",{maxPriceImpactBps:t}):n<=t?e:vo(e,"price-impact-limit",`The internal swap price impact ${n} bps exceeds the host limit ${t} bps.`,{observedPriceImpactBps:n,maxPriceImpactBps:t});}async function os(e,t,n,o){try{return await Ym({publicClient:e,market:t,blockNumber:n});}catch{return o==null||o.throwIfAborted(),null;}}function as(e,t,n){if(!ee(e.poolId,t.poolId))throw new TypeError(`Borrow vault ${e.vaultId} does not belong to this market pool.`);if(n&&!w(e.owner,n))throw new TypeError(`Borrow vault ${e.vaultId} is not owned by ${n}.`);}const ur=1000000000000n,dr=1000000000000000000n,mr=(1n<<127n)-1n,vp=100,wt=1e6;function Ep(e,t){switch(e){case"v0.4.0":return null;case"v1.0.2":case"v1.0.3":return t;default:{const n=e;throw new Error(`Unsupported Aegis Engine version: ${n}`);}}}function T0({requestedMaxLtvPips:e,postBorrowLtvPips:t,marketMaxLtvPips:n}){const o=typeof t=="number"&&Number.isFinite(t)?Math.ceil(t)+vp:e;return Math.min(n,Math.max(e,o));}function rs(e,t,n,o){if(t<=0n)return 0;const a=e*10n**BigInt(n)*ur/(t*10n**BigInt(o)),r=BigInt(Number.MAX_SAFE_INTEGER);return Number(a>r?r:a)/Number(ur);}function is(e,t,n){if(e!==void 0&&t!==void 0)throw new TypeError("Specify either tauPips or tauPercentOfMaxLtv, not both.");if(t!==void 0&&(!Number.isFinite(t)||t<0||t>100))throw new RangeError(`tauPercentOfMaxLtv must be between 0 and 100; got ${t}.`);const o=t===void 0?e??Math.max(0,n.maxLtvPips-5e3):Math.floor(n.maxLtvPips*t/100);return Math.min(o,n.maxLtvPips);}function yp({floor:e,isFeasible:t}){if(e===null)return null;if(t(e))return e;if(e>=Ie)return null;let n=e,o=1n,a=e;for(;a<Ie&&(a=e+o,a>Ie&&(a=Ie),!t(a));){if(n=a,a===Ie)return null;o*=2n;}for(;a-n>1n;){const r=n+(a-n)/2n;t(r)?a=r:n=r;}return a;}async function R0(e){const{quoteDeposit:t}=await Q();if(!e.market.lendEnabled||e.market.canLend===!1)throw new Error("Lending is disabled for this market.");Xo(e.market,{vaultRegistry:!1,permit2:!1}),Mt(e.slippageBps),ns(e.maxPriceImpactBps);const n=bp(e.market),o=await ym({publicClient:e.publicClient,market:e.market}),a=os(e.publicClient,e.market,o.frame.blockNumber,e.signal),r=async m=>{const d=await Zi({publicClient:e.publicClient,quoter:n,poolKey:o.market.poolKey,zeroForOne:m.inputIsToken0,exactAmount:m.amountIn,blockNumber:o.frame.blockNumber,signal:m.signal}),h=gt(d.amountOut,e.slippageBps);return{amountOut:d.amountOut,minAmountOut:h,route:null,routeSummary:"Direct V4 pool",...(o.market.sqrtPriceX96>0n?{priceImpactBps:ds(m.amountIn,d.amountOut,m.inputIsToken0,o.market.sqrtPriceX96)}:{})};},i=e.permit?await ts(e.publicClient,e.permit,{chainId:o.chainId,permit2:lt("Permit2",e.market.permit2,Ip(e.market.chainId)),blockNumber:o.frame.blockNumber}):null,[s,l]=await Promise.all([t({market:o.market,owner:e.owner,recipient:e.owner,inputIsToken0:e.inputIsToken0,amountIn:e.amountIn,sharePriceWad:o.sharePriceWad,slippageBps:e.slippageBps,deadline:e.deadline??Pt(),...(e.quoteTtlSeconds!==void 0?{quoteTtlSeconds:e.quoteTtlSeconds}:{}),fetchQuote:r,signal:e.signal??new AbortController().signal,approvalSpender:e.market.router,chainId:o.chainId,frame:o.frame,...(o.apy.available?{apyProjection:o.apy.projection}:{}),...(i?{permit:i}:{})}),a]),p=(await ms(e.publicClient,o.frame,e.signal))?s:vo(s,"quote-unavailable",`Block ${o.frame.blockNumber} is no longer canonical; request a fresh quote.`),u=kp(p,e.maxPriceImpactBps);return{kind:"lend",market:e.market,inputToken:e.inputIsToken0?e.market.token0:e.market.token1,adaptiveFee:l,quote:u,tx:dt(e.market,u.call)};}async function ss(e,t){const{computeVaultStateSnapshot:n,fetchBorrowVaultContext:o,quoteBorrow:a,quoteExactInputSingle:r}=await Q();if(!t.allowDisabledBorrow&&(!e.market.borrowEnabled||e.market.canBorrow===!1))throw new Error("Borrowing is disabled for this market.");const i=Xo(e.market,{quoter:!1,permit2:!1});if(e.permit&&!e.withExecutionEvidence)throw new TypeError("A borrow permit requires withExecutionEvidence; without evidence the SDK cannot verify or bundle it.");Mt(e.slippageBps);const s=e.withExecutionEvidence?{owner:e.owner,...(e.vault?{vaultId:e.vault.vaultId}:{})}:void 0,l=await ea({publicClient:e.publicClient,market:e.market},s,{forceRefresh:!!e.vault||(t.forceExecutionEvidenceRefresh??!1)}),c=l.market;e.vault&&as(e.vault,e.market,e.owner);const p=e.vault?await o(e.publicClient,{aegisStateView:i.aegisStateView,vaultId:e.vault.vaultId,owner:e.owner,expectedPoolId:e.market.poolId,frame:l.frame}):null,u=is(e.tauPips,e.tauPercentOfMaxLtv,c),m=async b=>{const k=lt("V4 quoter",e.market.v4Quoter,i.uniswapV4Quoter),E=await r(e.publicClient,k,{poolKey:c.poolKey,zeroForOne:b.inputIsToken0,exactAmount:b.amountIn}),T=gt(E.amountOut,e.slippageBps),S=b.inputIsToken0?e.market.token0:e.market.token1,B=b.inputIsToken0?e.market.token1:e.market.token0;return{minAmountOut:T,route:null,effectivePrice:rs(T,b.amountIn,S.decimals,B.decimals)};},d=l.execution,h=d&&e.permit?await ts(e.publicClient,e.permit,d):null,f=await a({market:c,chainId:l.chainId,// Non-null routes the SDK to size against existing idle/debt and encode a
|
|
58
|
+
e.thetaLiq>=e.thetaL&&e.thetaLiq<1.5;}function dp(e,t,n){return!(e>0)||!(t>e)?0:n>0?(t/e-1)/n*(ua/cp):"INF";}function mp(e){return e.filter(t=>!e.some(n=>n.leverage>=t.leverage&&n.gamma<t.gamma));}function pp(e,t){return e.reduce((n,o)=>{const a=Math.abs(o.leverage-t),r=Math.abs(n.leverage-t),i=Number.EPSILON*Math.max(1,Math.abs(t),Math.abs(o.leverage),Math.abs(n.leverage))*8;return a<r-i||Math.abs(a-r)<=i&&o.gamma<n.gamma?o:n;});}async function fp(e){const{state:t,direction:n,depositAsset:o,depositAmount:a,tlSeconds:r,deltaLev:i,tauBar:s,leverageTarget:c}=e;if(!Number.isFinite(a)||!Number.isFinite(r)||a<=0||r<0||!(s>0)||c!==void 0&&(!Number.isFinite(c)||!(c>0)))return He({kind:"invalid-input"});if(i===0)return He({kind:"zero-price-move"});if(!Number.isFinite(i))return He({kind:"price-move-out-of-range"});if(!up(t))return He({kind:"invalid-market-state"});const l=n==="long"?Math.abs(i):-Math.abs(i);if(l<=-1)return He({kind:"price-move-out-of-range"});const{buildDegenPosition:p,computeMaxEfficientDeposit:u,deltaMaxByUtil:m,interestCostOverHorizon:d,tauFromTimeToLiq:h}=await Q(),f=t.Ppool,w=Math.sqrt(f),v=f*(1+l),g=m(t.SIdle,t.BM,t.Ucap,t.M),I=S=>{const E=S.aprPct>0?S.aprPct/100:0,R=t.thetaL-Io,_=Math.min(h(t.thetaL,E,r),s,R),L={tau:_,tauBinding:_===R?"theta-margin":_===s?"tau-bar":"horizon",thetaL:t.thetaL,thetaLiq:t.thetaLiq,rEffAnnual:E,rateBasis:S.basis,entryPrice:f,targetPrice:v,deltaCap:g,maxEfficientDeposit:null,isCapConstrained:!1,candidatesTotal:0,candidatesSurviving:0};if(!(g>0))return{result:He({kind:"no-borrow-capacity"},L),anchor:null};const $={...t,thetaL:_+Io},G=p($,{direction:n,depositAsset:o,depositAmount:a,targetPrice:v,horizonMinutes:0});if(!G.ok){const F=u($,{direction:n,depositAsset:o,targetPrice:v,horizonMinutes:0}),Z=F===null?null:F;return{result:He(Z!==null&&a>Z?{kind:"deposit-above-max",maxEfficientDeposit:Z}:{kind:"no-feasible-band"},{...L,maxEfficientDeposit:Z}),anchor:null};}const te={...L,maxEfficientDeposit:Number.isFinite(G.diagnostics.maxEfficientDeposit)?G.diagnostics.maxEfficientDeposit:null,isCapConstrained:G.diagnostics.isCapConstrained,candidatesTotal:G.diagnostics.candidatesTotal,candidatesSurviving:G.diagnostics.candidatesSurviving},Me=F=>{const Z=F.y-F.gamma*F.gamma/F.x;return{alpha:F.alpha,leverage:F.L_display,localLeverage:F.L0,asymptoticLeverage:F.L_infty,ltv:F.LTV,delta:F.delta,gamma:F.gamma,x:F.x,y:F.y,q:F.q,equity:F.E0,equityAtTarget:F.E_target,interestCost:d(F.gamma,w,E,r),equityMin:Z,equityMinRatio:Z/F.E0,cappedByDelta:F.cappedByDelta};},ke=G.candidates.map(Me),ge=ke.filter(F=>F.leverage>=1&&(n==="long"?F.q>=0:F.q<=0)),we=mp(ge);if(we.length===0)return{result:He({kind:"no-feasible-band"},te),anchor:null};const X=we.reduce((F,Z)=>Math.min(F,Z.leverage),we[0].leverage),K=we.reduce((F,Z)=>Math.max(F,Z.leverage),we[0].leverage),H=Math.min(K,Math.max(X,c??K)),ae=pp(we,H);return{result:{lMin:X,lMax:K,chosen:ae,candidates:ke,diagnostics:te},anchor:ae};};let T={aprPct:t.aprPct,basis:"current-apr"},P=I(T);for(let S=0;S<lp;S++){const E=P.anchor;if(!E)break;const R=await sp(t,E);if(R.aprPct<T.aprPct)break;if(R.aprPct===T.aprPct){R.basis!==T.basis&&(T=R,P=I(T));break;}T=R,P=I(T);}return P.result;}const hp=1e-6;function Mn(e,t){const n=Math.floor(e*10**t);return Number.isFinite(n)&&n>0?BigInt(n):0n;}function wp(e){const{candidate:t,direction:n,entryPrice:o,decimals0:a,decimals1:r,idle0:i,idle1:s}=e,c=t.q,l=c<0,p=c>0?c*o:-c;if(!(p>hp))return{ok:!0,leg:{needed:!1,inputIsToken0:n==="short",amountIn:0n,clampedByIdle:!1}};if(l!==(n==="short"))return{ok:!1,reason:"swap-direction-mismatch"};const u=Mn(p,l?a:r),m=l?i:s,d=u<m?u:m;return d<=0n?{ok:!1,reason:"insufficient-idle"}:{ok:!0,leg:{needed:!0,inputIsToken0:l,amountIn:d,clampedByIdle:d<u}};}function Mt(e=xn){return BigInt(Math.floor(Date.now()/1e3)+e);}function os(e){if(!e.router)throw new Error("Market is missing engine router.");return e.router;}function bp(e){if(!e.v4Quoter)throw new Error("Market is missing Uniswap V4 quoter.");return e.v4Quoter;}async function as(e,t,n){const{verifyPermit2Batch:o}=await Q();return{...t,verification:await o(e,{chainId:n.chainId,permit2Address:n.permit2,permit:t,blockNumber:n.blockNumber})};}function dt(e,t){return t?{to:os(e),data:t.calldata,value:t.value}:null;}function _t(e){if(!Number.isSafeInteger(e)||e<0||e>=1e4)throw new Error(`Engine quote slippageBps must be an integer between 0 and 9999; got ${e}.`);}function rs(e){if(!Number.isSafeInteger(e)||e<0||e>1e4)throw new RangeError(`Engine maxPriceImpactBps must be an integer between 0 and 10000; got ${e}.`);}function Eo(e,t,n,o={}){return{...e,feasible:!1,executable:!1,infeasibleReason:t,encodeInput:null,call:null,gateFailures:[...e.gateFailures,{gate:t,detail:n,...o}],warnings:[...e.warnings,n]};}function kp(e,t){var o;if(!e.feasible||!((o=e.swap)!=null&&o.needed))return e;const n=e.priceImpactBps;return n===null||!Number.isSafeInteger(n)?Eo(e,"price-impact-unavailable","The internal swap has no finite block-pinned price-impact assessment.",{maxPriceImpactBps:t}):n<=t?e:Eo(e,"price-impact-limit",`The internal swap price impact ${n} bps exceeds the host limit ${t} bps.`,{observedPriceImpactBps:n,maxPriceImpactBps:t});}async function is(e,t,n,o){try{return await Ym({publicClient:e,market:t,blockNumber:n});}catch{return o==null||o.throwIfAborted(),null;}}function ss(e,t,n){if(!Y(e.poolId,t.poolId))throw new TypeError(`Borrow vault ${e.vaultId} does not belong to this market pool.`);if(n&&!b(e.owner,n))throw new TypeError(`Borrow vault ${e.vaultId} is not owned by ${n}.`);}const hr=1000000000000n,wr=1000000000000000000n,br=(1n<<127n)-1n,vp=100,wt=1e6;function yp(e,t){switch(e){case"v0.4.0":return null;case"v1.0.2":case"v1.0.3":return t;default:{const n=e;throw new Error(`Unsupported Aegis Engine version: ${n}`);}}}function Ch({requestedMaxLtvPips:e,postBorrowLtvPips:t,marketMaxLtvPips:n}){const o=typeof t=="number"&&Number.isFinite(t)?Math.ceil(t)+vp:e;return Math.min(n,Math.max(e,o));}function cs(e,t,n,o){if(t<=0n)return 0;const a=e*10n**BigInt(n)*hr/(t*10n**BigInt(o)),r=BigInt(Number.MAX_SAFE_INTEGER);return Number(a>r?r:a)/Number(hr);}function ls(e,t,n){if(e!==void 0&&t!==void 0)throw new TypeError("Specify either tauPips or tauPercentOfMaxLtv, not both.");if(t!==void 0&&(!Number.isFinite(t)||t<0||t>100))throw new RangeError(`tauPercentOfMaxLtv must be between 0 and 100; got ${t}.`);const o=t===void 0?e??Math.max(0,n.maxLtvPips-5e3):Math.floor(n.maxLtvPips*t/100);return Math.min(o,n.maxLtvPips);}function Ip({floor:e,isFeasible:t}){if(e===null)return null;if(t(e))return e;if(e>=Ie)return null;let n=e,o=1n,a=e;for(;a<Ie&&(a=e+o,a>Ie&&(a=Ie),!t(a));){if(n=a,a===Ie)return null;o*=2n;}for(;a-n>1n;){const r=n+(a-n)/2n;t(r)?a=r:n=r;}return a;}async function xh(e){const{quoteDeposit:t}=await Q();if(!e.market.lendEnabled||e.market.canLend===!1)throw new Error("Lending is disabled for this market.");ea(e.market,{vaultRegistry:!1,permit2:!1}),_t(e.slippageBps),rs(e.maxPriceImpactBps);const n=bp(e.market),o=await Im({publicClient:e.publicClient,market:e.market}),a=is(e.publicClient,e.market,o.frame.blockNumber,e.signal),r=async m=>{const d=await ns({publicClient:e.publicClient,quoter:n,poolKey:o.market.poolKey,zeroForOne:m.inputIsToken0,exactAmount:m.amountIn,blockNumber:o.frame.blockNumber,signal:m.signal}),h=St(d.amountOut,e.slippageBps);return{amountOut:d.amountOut,minAmountOut:h,route:null,routeSummary:"Direct V4 pool",...(o.market.sqrtPriceX96>0n?{priceImpactBps:fs(m.amountIn,d.amountOut,m.inputIsToken0,o.market.sqrtPriceX96)}:{})};},i=e.permit?await as(e.publicClient,e.permit,{chainId:o.chainId,permit2:ct("Permit2",e.market.permit2,Ep(e.market)),blockNumber:o.frame.blockNumber}):null,[s,c]=await Promise.all([t({...Ee(e.market),market:o.market,owner:e.owner,recipient:e.owner,inputIsToken0:e.inputIsToken0,amountIn:e.amountIn,sharePriceWad:o.sharePriceWad,slippageBps:e.slippageBps,deadline:e.deadline??Mt(),...(e.quoteTtlSeconds!==void 0?{quoteTtlSeconds:e.quoteTtlSeconds}:{}),fetchQuote:r,signal:e.signal??new AbortController().signal,approvalSpender:e.market.router,chainId:o.chainId,frame:o.frame,...(o.apy.available?{apyProjection:o.apy.projection}:{}),...(i?{permit:i}:{})}),a]),p=(await hs(e.publicClient,o.frame,e.signal))?s:Eo(s,"quote-unavailable",`Block ${o.frame.blockNumber} is no longer canonical; request a fresh quote.`),u=kp(p,e.maxPriceImpactBps);return{kind:"lend",market:e.market,inputToken:e.inputIsToken0?e.market.token0:e.market.token1,adaptiveFee:c,quote:u,tx:dt(e.market,u.call)};}async function us(e,t){const{computeVaultStateSnapshot:n,fetchBorrowVaultContext:o,quoteBorrow:a,quoteExactInputSingle:r}=await Q();if(!t.allowDisabledBorrow&&(!e.market.borrowEnabled||e.market.canBorrow===!1))throw new Error("Borrowing is disabled for this market.");const i=ea(e.market,{quoter:!1,permit2:!1});if(e.permit&&!e.withExecutionEvidence)throw new TypeError("A borrow permit requires withExecutionEvidence; without evidence the SDK cannot verify or bundle it.");_t(e.slippageBps);const s=e.withExecutionEvidence?{owner:e.owner,...(e.vault?{vaultId:e.vault.vaultId}:{})}:void 0,c=await ra({publicClient:e.publicClient,market:e.market},s,{forceRefresh:!!e.vault||(t.forceExecutionEvidenceRefresh??!1)}),l=c.market;e.vault&&ss(e.vault,e.market,e.owner);const p=e.vault?await o(e.publicClient,{aegisStateView:i.aegisStateView,vaultId:e.vault.vaultId,owner:e.owner,expectedPoolId:e.market.poolId,frame:c.frame}):null,u=ls(e.tauPips,e.tauPercentOfMaxLtv,l),m=async w=>{const v=ct("V4 quoter",e.market.v4Quoter,i.uniswapV4Quoter),g=await r(e.publicClient,v,{poolKey:l.poolKey,zeroForOne:w.inputIsToken0,exactAmount:w.amountIn}),I=St(g.amountOut,e.slippageBps),T=w.inputIsToken0?e.market.token0:e.market.token1,P=w.inputIsToken0?e.market.token1:e.market.token0;return{minAmountOut:I,route:null,effectivePrice:cs(I,w.amountIn,T.decimals,P.decimals)};},d=c.execution,h=d&&e.permit?await as(e.publicClient,e.permit,d):null,f=await a({...Ee(e.market),market:l,chainId:c.chainId,// Non-null routes the SDK to size against existing idle/debt and encode a
|
|
59
59
|
// modifyVault recipe on the same vaultId; owner is read from vault.owner.
|
|
60
60
|
vault:p,owner:e.owner,inputIsToken0:e.inputIsToken0,collateralIn:e.collateralIn,borrowOut:e.borrowOut,tauPips:u,slippageBps:e.slippageBps,collateralPolicy:"preserve-collateral",fetchQuote:m,signal:e.signal??new AbortController().signal,// Core exposes SDK-independent structural types. Cast only at this private
|
|
61
61
|
// adapter boundary, where the trusted registry has already constrained the
|
|
62
62
|
// version string to an SDK-supported release.
|
|
63
|
-
aprProjection:
|
|
63
|
+
aprProjection:"deployment"in Ee(e.market)?{...c.aprProjection,...Ee(e.market)}:c.aprProjection,frame:c.frame,...(d?{execution:{...d,...(h?{permit:h}:{})}}:{}),...(e.deadline!==void 0?{deadline:e.deadline}:{}),...(e.quoteTtlSeconds!==void 0?{quoteTtlSeconds:e.quoteTtlSeconds}:{}),...(e.comfortCapLtvPips!==void 0?{comfortCapLtvPips:e.comfortCapLtvPips}:{})});return{kind:"borrow",market:e.market,collateralToken:e.inputIsToken0?e.market.token0:e.market.token1,borrowToken:e.inputIsToken0?e.market.token1:e.market.token0,thresholds:{maxLtvPips:l.maxLtvPips,hardLtvPips:l.hardLtvPips},quote:f,costProjection:op({market:e.market,marketContext:l,owner:e.owner,vault:e.vault??null,quote:f,computeVaultStateSnapshot:n}),// The SDK's guarded call: already LTV-guarded and permit-bundled, and
|
|
64
64
|
// non-null only when the execution gates passed against the quote frame.
|
|
65
|
-
tx:dt(e.market,f.call)};}async function
|
|
66
|
-
vault:e.vault??null,deposit:e.collateralIn,tauPips:l,collateralPolicy:"preserve-collateral",depositIsToken0:e.inputIsToken0,quoteHaircutBps:e.slippageBps}),p=e.vault?e.inputIsToken0?{x0:e.vault.x0,y0:e.vault.y0,rL0:e.vault.rL0}:{x0:e.vault.y0,y0:e.vault.x0,rL0:e.vault.rL0}:{x0:0n,y0:0n,rL0:0n},u=e.borrowOut&&e.borrowOut>0n?e.borrowOut:null,m=c.utilizationPre>=c.utilizationCap,d={sqrtPriceX96:e.inputIsToken0?s.sqrtPriceX96:r(s.sqrtPriceX96),borrowIndexWad:s.borrowIndexWad,maxLtvPips:s.maxLtvPips,hardLtvPips:s.hardLtvPips,decimals0:e.inputIsToken0?s.decimals0:s.decimals1,decimals1:e.inputIsToken0?s.decimals1:s.decimals0},h=u&&!m?o({market:d,vault:p,yWtarget:u,tauPips:l}):null,f=u!==null&&h!==null?yp({floor:h,isFeasible:S=>a({market:d,vault:p,deposit:S,yWtarget:u,tauPips:l}).feasible}):null,b=f===0n&&u!==null?a({market:d,vault:p,deposit:0n,yWtarget:u,tauPips:l}):null,k=(b==null?void 0:b.regime)==="no-new-borrow"&&b.gammaNewL===0n&&e.vault&&u!==null&&p.y0>=u?"existing-idle":(b==null?void 0:b.regime)==="needs-borrow"||((b==null?void 0:b.gammaNewL)??0n)>0n?"new-debt":"unknown",E=u===null?{status:"not-requested"}:m?{status:"infeasible",reason:"utilization-capped"}:h===null?{status:"unavailable",reason:"closed-form-not-applicable",retryable:!1}:f===null?{status:"unavailable",reason:"forward-validation-unavailable",retryable:!0}:f===0n?{status:"ready-zero",amountIn:0n,outputSource:k}:{status:"ready-positive",amountIn:f};let T;if(e.includeBorrowLimits||e.walletCollateralIn!==void 0){const S=e.walletCollateralIn??null;if(S!==null&&(S<0n||S>Ie))throw new RangeError("Wallet collateral must fit an unsigned 256-bit amount.");const B=t.utilizationHeadroomGammaNewLWad(s),A=s.borrowIndexWad>0n?B/s.borrowIndexWad*BigInt(1e4-Math.max(1,e.slippageBps))/10000n:0n,g=A>0n&&A>=t.minDebtFloorRl(s.equityLWad,s.borrowIndexWad)?t.previewFullRangeBorrow(A,s.borrowIndexWad,s.poolKey,{sqrtPriceX96:s.sqrtPriceX96,tick:s.tickCurrent,protocolFee:0,lpFee:0,liquidity:s.inRangeLiquidity}):null,C=S===null?null:n({market:s,vault:e.vault??null,deposit:S,tauPips:l,collateralPolicy:"preserve-collateral",depositIsToken0:e.inputIsToken0,quoteHaircutBps:e.slippageBps});T={walletCollateralIn:S,walletBorrowOut:C&&S!==null?Jm({sdk:t,market:s,canonicalMarket:d,vault:p,deposit:S,upperBound:C.yMaxEffectiveAtHaircut,tauPips:l,slippageBps:e.slippageBps}):null,marketBorrowOut:g?e.inputIsToken0?g.amount1:g.amount0:0n};}return{kind:"borrow-capacity",market:e.market,collateralToken:e.inputIsToken0?e.market.token0:e.market.token1,borrowToken:e.inputIsToken0?e.market.token1:e.market.token0,thresholds:{maxLtvPips:s.maxLtvPips,hardLtvPips:s.hardLtvPips},tauPips:l,tauPercentOfMaxLtv:e.tauPercentOfMaxLtv??null,borrowOut:u,minimumNoSwapCollateralIn:f,collateralFloor:E,frame:i.frame,utilizationCapped:m,...(T?{borrowLimits:T}:{}),capacity:c};}function cs(e,t){Rt(e);const n=pe(e.chainId);if(!n)throw new Error(`No trusted Aegis Engine deployment is configured for chain ${e.chainId}.`);const o=[["router",e.router,n.aegisRouterV1],["Engine",e.engine,n.aegisEngine],["StateView",e.stateView,n.aegisStateView],["V4 StateView",e.v4StateView,n.stateView]];t.vaultRegistry&&o.push(["VaultRegistry",e.vaultRegistry,n.vaultRegistry]);for(const[a,r,i]of o)lt(a,r,i);if(!w(e.poolKey.hooks,n.aegisHook))throw new Error("Pool hooks do not match the trusted Engine deployment.");return n;}function Jt(e,t,n){if(t.chainId!==e.chainId)throw new TypeError(`Engine position ${t.positionId} belongs to chain ${t.chainId}, not ${e.chainId}.`);if(!ee(t.poolId,e.poolId))throw new TypeError(`Engine position ${t.positionId} does not belong to this market pool.`);if(t.marketId&&!Xt(t.marketId,e.id))throw new TypeError(`Engine position ${t.positionId} does not belong to market ${e.id}.`);const o=St(e.chainId);if(!o)throw new Error(`No trusted Aegis Engine deployment is configured for chain ${e.chainId}.`);const a=cs(e,{vaultRegistry:n!=="redeem"});return{chainId:e.chainId,version:o,trustedPermit2:a.permit2,trustedQuoter:a.uniswapV4Quoter};}function lt(e,t,n){if(!t||!w(t,n))throw new Error(`${e} does not match the trusted Engine deployment.`);return t;}function Ip(e){const t=pe(e);if(!t)throw new Error(`No trusted Aegis Engine deployment is configured for chain ${e}.`);return t.permit2;}function _n(e,t,n){t.some(o=>o.required)&<("Permit2",e.permit2,n);}function Ap(e,t,n,o){return async a=>{const{quoteExactInputSingle:r}=await Q(),i=lt("V4 quoter",t.v4Quoter,o),s=await r(e,i,{poolKey:t.poolKey,zeroForOne:a.inputIsToken0,exactAmount:a.amountIn,...(a.blockNumber!==void 0?{blockNumber:a.blockNumber}:{})});return{minAmountOut:gt(s.amountOut,n),route:null,effectivePrice:rs(s.amountOut,a.amountIn,a.inputIsToken0?t.token0.decimals:t.token1.decimals,a.inputIsToken0?t.token1.decimals:t.token0.decimals)};};}async function ls(e){const t=await e();return t.status==="re-quote-required"?e():t;}function us(e){var t,n;return e.infeasibleReason?e.infeasibleReason:((t=e.execution)==null?void 0:t.status)==="rejected-at-frame"||((n=e.execution)==null?void 0:n.status)==="re-quote-required"?e.execution.reason??null:null;}async function D0(e){Mt(e.slippageBps);const{chainId:t,version:n,trustedPermit2:o,trustedQuoter:a}=Jt(e.market,e.target,"repay"),{quoteRepay:r}=await Q(),i=await ls(()=>r(e.publicClient,{chainId:t,version:n,poolId:e.market.poolId,vaultId:e.target.vaultId,owner:e.owner,repayRl:e.repayRl??"full",deadline:e.deadline??Pt(),...(e.quoteTtlSeconds!==void 0?{quoteTtlSeconds:e.quoteTtlSeconds}:{}),...(e.executionFrameMaxAgeSeconds!==void 0?{executionFrameMaxAgeSeconds:e.executionFrameMaxAgeSeconds}:{}),slippageBps:e.slippageBps,fetchQuote:Ap(e.publicClient,e.market,e.slippageBps,a),...(e.signal?{signal:e.signal}:{})}));return _n(e.market,i.approvals,o),{kind:"repay",market:e.market,target:e.target,feasible:i.feasible,executable:i.executable,infeasibleReason:us(i),gateFailures:i.gateFailures,approvals:i.approvals,fromWallet0:i.fromWallet0,fromWallet1:i.fromWallet1,expected:null,minimum:null,principalDeltaRl:i.principalDeltaRl,requestedRepayProjection:i.feasible&&i.requestedPrincipalPostProjection?{ltvPips:i.requestedPrincipalPostProjection.ltvPipsPost===null?null:Number(i.requestedPrincipalPostProjection.ltvPipsPost),debtFree:i.requestedPrincipalPostProjection.rL0Post===0n,idle0:i.requestedPrincipalPostProjection.idle0Post,idle1:i.requestedPrincipalPostProjection.idle1Post,debtL:i.requestedPrincipalPostProjection.debtLPost}:null,withdraw:null,sharesDelta:null,shareBalance:null,postShareBalance:null,expiresAt:i.expiresAt,warnings:i.warnings,tx:dt(e.market,i.call)};}async function _0(e){const{chainId:t,version:n,trustedPermit2:o}=Jt(e.market,e.target,"close"),{quoteCloseVault:a}=await Q(),r=await ls(()=>a(e.publicClient,{chainId:t,version:n,poolId:e.market.poolId,vaultId:e.target.vaultId,owner:e.owner,recipient:e.owner,deadline:e.deadline??Pt(),...(e.quoteTtlSeconds!==void 0?{quoteTtlSeconds:e.quoteTtlSeconds}:{}),...(e.executionFrameMaxAgeSeconds!==void 0?{executionFrameMaxAgeSeconds:e.executionFrameMaxAgeSeconds}:{}),...(e.signal?{signal:e.signal}:{})}));return _n(e.market,r.approvals,o),{kind:"close",market:e.market,target:e.target,feasible:r.feasible,executable:r.executable,infeasibleReason:us(r),gateFailures:r.gateFailures,approvals:r.approvals,fromWallet0:r.fromWallet0,fromWallet1:r.fromWallet1,expected:r.expected,minimum:r.minimum,principalDeltaRl:r.principalDeltaRl,withdraw:null,sharesDelta:null,shareBalance:null,postShareBalance:null,expiresAt:r.expiresAt,warnings:r.warnings,tx:dt(e.market,r.call)};}async function N0(e){const{chainId:t,version:n}=Jt(e.market,e.target,"withdraw"),{quoteIdleWithdraw:o}=await Q(),a=await o(e.publicClient,{chainId:t,version:n,poolId:e.market.poolId,vaultId:e.target.vaultId,owner:e.owner,withdraw:e.withdraw??"all",deadline:e.deadline??Pt(),...(e.quoteTtlSeconds!==void 0?{quoteTtlSeconds:e.quoteTtlSeconds}:{}),...(e.signal?{signal:e.signal}:{})});return{kind:"withdraw",market:e.market,target:e.target,feasible:a.feasible,executable:a.executable,infeasibleReason:a.infeasibleReason??null,gateFailures:a.gateFailures,approvals:a.approvals,fromWallet0:0n,fromWallet1:0n,expected:null,minimum:null,principalDeltaRl:null,withdraw:a.withdraw0===null||a.withdraw1===null?null:{amount0:a.withdraw0,amount1:a.withdraw1},sharesDelta:null,shareBalance:null,postShareBalance:null,expiresAt:a.expiresAt,warnings:a.warnings,tx:dt(e.market,a.call)};}async function O0(e){var S;Mt(e.slippageBps);const{chainId:t,version:n}=Jt(e.market,e.target,"redeem"),{fetchMarketWithAccrual:o,fetchTotalSupply:a,PIPS_DENOMINATOR:r,quoteRedeem:i,UTILIZATION_CAP_PIPS:s}=await Q(),l=e.deadline??Pt(),c=Ep(n,s),p={chainId:t,version:n,poolId:e.market.poolId,owner:e.owner,recipient:e.owner,slippageBps:e.slippageBps,deadline:l,...(e.quoteTtlSeconds!==void 0?{quoteTtlSeconds:e.quoteTtlSeconds}:{}),...(e.signal?{signal:e.signal}:{})};let u=await i(e.publicClient,{...p,shares:e.shares==="available"?"all":e.shares??"all"}),m,d=!1,h=null;if(e.shares==="available"&&u.shareBalance!==null&&u.shareBalance>0n){if(u.status==="verified-at-frame")m={mode:u.sharesDelta===u.shareBalance?"full":"partial",redeemableShares:u.sharesDelta,shareBalance:u.shareBalance,remainingShares:u.shareBalance-u.sharesDelta};else if(u.status==="blocked"||u.status==="rejected"&&(u.reason==="utilization-cap"||u.reason==="requires-split")){const B=u.frame.blockNumber;let A=u.shareBalance<mr?u.shareBalance:mr;if(c!==null){const g=e.market.stateView;if(!g)throw new Error("Market is missing Aegis StateView.");const[C,M]=await Promise.all([o(e.publicClient,g,e.market.poolId,B),a(e.publicClient,g,e.market.poolId,B)]),q=C.market.totalRlBorrowed*C.latestBorrowIndexWad,W=q===0n?0n:q*r/(c+1n)+1n,te=(C.latestEquityLWad>=W?C.latestEquityLWad-W:0n)/dr,Me=M*dr;h=te>0n&&C.latestEquityLWad>0n&&M>0n?((te+1n)*Me-1n)/C.latestEquityLWad:0n,h<A&&(A=h);}A>0n?(u.sharesDelta!==A&&(u=await i(e.publicClient,{...p,shares:A,blockNumber:B})),(u.status==="verified-at-frame"||u.status==="blocked")&&(m={mode:A===u.shareBalance?"full":"partial",redeemableShares:A,shareBalance:u.shareBalance,remainingShares:u.shareBalance-u.sharesDelta})):d=!0;}}else if(e.shares!=="available"&&u.status==="blocked"){const B=(S=u.projection)==null?void 0:S.capAssessment;B!=null&&B.applies&&!B.passesEstimate&&(d=!0);}const f=u.status==="verified-at-frame",b=f||u.status==="blocked",k=u.status==="rejected"?u.reason==="utilization-cap"?"utilization-blocked":u.reason:u.status==="unavailable"?u.reason:null,E=u.status==="verified-at-frame"?{amount0:u.output.amount0,amount1:u.output.amount1}:null,T=b&&!d&&u.shareBalance!==null&&u.sharesDelta!==null?u.shareBalance-u.sharesDelta:null;return{kind:"redeem",market:e.market,target:e.target,feasible:d?!1:b,executable:f,infeasibleReason:d?"utilization-blocked":k,gateFailures:u.gateFailures,approvals:u.approvals,fromWallet0:0n,fromWallet1:0n,expected:E,minimum:f?u.minimum:null,principalDeltaRl:null,withdraw:null,sharesDelta:u.sharesDelta,shareBalance:u.shareBalance,postShareBalance:T,...(m?{redeemAvailability:m}:{}),expiresAt:u.expiresAt,warnings:d?[...u.warnings,h===0n?"No redeem can keep this market at or below the Engine utilization cap.":"Requested redeem exceeds the shares currently allowed by the Engine utilization cap."]:u.warnings,tx:f?dt(e.market,u.call):null};}const Ot={maxLeverage:null,minLeverage:null,maxCollateralIn:null},pr=3,fr=100;function gp(e,t,n){const o=e.execution;if(!o)return[{gate:"evidence-mismatch",detail:"borrow context carries no in-frame authorization evidence"}];const a=[];return w(o.owner,t)||a.push({gate:"evidence-mismatch",detail:`evidence owner ${o.owner} is not the quote owner ${t}`}),o.chainId!==e.chainId&&a.push({gate:"evidence-mismatch",detail:`evidence chainId ${o.chainId} is not the quote target chain ${e.chainId}`}),o.blockNumber!==e.frame.blockNumber&&a.push({gate:"evidence-mismatch",detail:`evidence block ${o.blockNumber} is stale for frame block ${e.frame.blockNumber}`}),w(o.router,n)||a.push({gate:"evidence-mismatch",detail:`evidence router ${o.router} is not the call target ${n}`}),o.routerApproved||a.push({gate:"router-authorization",owner:o.owner,router:o.router,vaultRegistry:o.vaultRegistry}),a;}function Sp(e,t,n,o){switch(e.kind){case"deposit-above-max":return{...Ot,maxCollateralIn:Dn(e.maxEfficientDeposit,t)};case"leverage-above-max":return{...Ot,maxLeverage:e.lMax,minLeverage:o};case"leverage-below-min":return{...Ot,maxLeverage:n,minLeverage:e.lMin};default:return Ot;}}function ds(e,t,n,o){if(e<=0n||t<0n||o<=0n)return Number.NaN;const a=1n<<192n,r=o*o,i=n?e*r:e*a,s=n?t*a:t*r;if(s>=i)return 0;const c=((i-s)*10000n+i-1n)/i;return c<=BigInt(Number.MAX_SAFE_INTEGER)?Number(c):Number.NaN;}function Cp(e){const t=Number(e.collateral0)/10**e.decimals0,n=Number(e.collateral1)/10**e.decimals1,o=Number(e.debtLiquidityL)/aa(e.decimals0,e.decimals1),a=Math.sqrt(e.entryPrice),r=m=>m*t+n-2*o*Math.sqrt(m),i=r(e.entryPrice),s=r(e.targetPrice),l=e.targetPrice/e.entryPrice,c=(s-i)/i/(l-1),p=2*o*a*e.rEffAnnual*(e.horizonSeconds/ra),u=p*Math.sqrt(l);return{scenario:{entryEquity:i,targetEquityAfterInterest:s-u,targetInterest:u},leverage:Math.abs(c),localLeverage:(e.entryPrice*t-o*a)/i,asymptoticLeverage:e.entryPrice*t/i,interestCostToken1:Dn(p,e.decimals1),worstEquityRatio:(n-o*o/t)/i,grossReturnAtTargetPct:(s-i)/i*100};}async function ms(e,t,n){if(t.blockHash===void 0)return!0;try{const o=await e.getBlock({blockNumber:t.blockNumber});return n==null||n.throwIfAborted(),o.hash!==null&&o.hash.toLowerCase()===t.blockHash.toLowerCase();}catch{return n==null||n.throwIfAborted(),!1;}}async function xp(e){var E,T,S,B;if((E=e.signal)==null||E.throwIfAborted(),Mt(e.slippageBps),ns(e.maxPriceImpactBps),!e.market.borrowEnabled||e.market.canBorrow===!1)throw new Error("Borrowing is disabled for this market.");if(e.collateralIn<=0n)throw new RangeError("Collateral amount must be greater than zero.");const t=cs(e.market,{vaultRegistry:!0}),n=lt("router",e.market.router,t.aegisRouterV1),o=lt("V4 quoter",e.market.v4Quoter,t.uniswapV4Quoter),a=await ea({publicClient:e.publicClient,market:e.market},{owner:e.owner},{forceRefresh:e.forceExecutionEvidenceRefresh??!1});(T=e.signal)==null||T.throwIfAborted();const r=await os(e.publicClient,e.market,a.frame.blockNumber,e.signal),i=a.market,s=e.inputIsToken0?e.market.token0:e.market.token1,l=e.inputIsToken0?i.decimals0:i.decimals1,c={amount0:e.inputIsToken0?e.collateralIn:0n,amount1:e.inputIsToken0?0n:e.collateralIn},p=w(s.address,ie),u=[{approvalType:"permit2",token:s.address,amount:e.collateralIn,required:!p,nativeValue:p?e.collateralIn:0n,spender:n}];_n(e.market,u,t.permit2);const m=e.deadline??Pt(),d={kind:"trade-open",market:e.market,direction:e.direction,collateralToken:s,intent:{owner:e.owner,inputIsToken0:e.inputIsToken0,collateralIn:e.collateralIn,leverage:e.leverage??null,horizonSeconds:e.horizonSeconds,priceMove:e.priceMove,slippageBps:e.slippageBps,maxPriceImpactBps:e.maxPriceImpactBps},thresholds:{maxLtvPips:i.maxLtvPips,hardLtvPips:i.hardLtvPips},gateFailures:gp(a,e.owner,n),approvals:u,adaptiveFee:r,deposit:c,frame:a.frame,expiresAt:m},h=(A,g,C=null)=>({...d,feasible:!1,executable:!1,infeasibleReason:A,limits:g,position:null,swap:C,tx:null}),f=await ip(a);let b=Math.min(e.tauPips??i.maxLtvPips,i.maxLtvPips),k=Ot;for(let A=0;A<pr;A++){const g=await fp({state:f,direction:e.direction,depositAsset:e.inputIsToken0?"token0":"token1",depositAmount:Number(e.collateralIn)/10**l,tlSeconds:e.horizonSeconds,deltaLev:e.priceMove,tauBar:b/wt,rootPolicy:e.rootPolicy??"min-carry",...(e.leverage!==void 0?{leverageTarget:e.leverage}:{})});if((S=e.signal)==null||S.throwIfAborted(),!g.chosen||!g.diagnostics){const O=g.infeasibleReason??{kind:"no-feasible-band"};return h(O.kind,Sp(O,l,g.lMax,g.lMin));}const{chosen:C,diagnostics:M}=g,q={maxLeverage:g.lMax,minLeverage:g.lMin,maxCollateralIn:M.maxEfficientDeposit===null?null:Dn(M.maxEfficientDeposit,l)};k=q;const{buildTapOpenPosition:W,computeActualLtvPips:G,minDebtFloorRl:te,previewFullRangeBorrow:Me}=await Q(),ve=rp(C.delta,aa(i.decimals0,i.decimals1));if(ve<te(i.equityLWad,i.borrowIndexWad))return h("debt-below-minimum",q);if(C.delta>M.deltaCap)return h("delta-above-cap",q);const ge=Me(ve,i.borrowIndexWad,i.poolKey,{sqrtPriceX96:i.sqrtPriceX96,tick:i.tickCurrent,protocolFee:0,lpFee:0,liquidity:i.inRangeLiquidity});if(!ge)return h("invalid-market-state",q);const be=c.amount0+ge.amount0,X=c.amount1+ge.amount1,K=wp({candidate:C,direction:e.direction,entryPrice:M.entryPrice,decimals0:i.decimals0,decimals1:i.decimals1,idle0:be,idle1:X});if(!K.ok)return h(K.reason,q);const V=K.leg,oe=await ap({publicClient:e.publicClient,quoter:o,context:a,token0:e.market.token0,token1:e.market.token1,leg:V,slippageBps:e.slippageBps,...(e.signal?{signal:e.signal}:{})});if((B=e.signal)==null||B.throwIfAborted(),oe.blockNumber!==a.frame.blockNumber||!(await ms(e.publicClient,a.frame,e.signal)))return h("stale-frame",q);const L=V.needed?ds(V.amountIn,oe.amountOutQuoted,V.inputIsToken0,i.sqrtPriceX96):null;if(L!==null&&!Number.isSafeInteger(L))return h("price-impact-unavailable",q);const J=V.needed?{inputIsToken0:V.inputIsToken0,amountIn:V.amountIn,amountOutQuoted:oe.amountOutQuoted,amountOutMinimum:oe.amountOutMinimum,priceImpactBps:L,clampedByIdle:V.clampedByIdle}:null;if(J&&J.priceImpactBps>e.maxPriceImpactBps)return h("price-impact-limit",q,J);const Dt=V.inputIsToken0?V.amountIn:0n,_t=V.inputIsToken0?0n:V.amountIn,Zt=V.inputIsToken0?0n:oe.amountOutMinimum,De=V.inputIsToken0?oe.amountOutMinimum:0n,Nt=be-Dt+Zt,Ye=X-_t+De,mt=G(ge.liquidityL,Nt,Ye,i.decimals0,i.decimals1);if(mt>=i.maxLtvPips-fr){const O=i.maxLtvPips-fr,Se=Math.max(1,Math.floor(C.ltv*wt)),Le=Math.min(b-1,Math.floor(Se*O/mt));if(A===pr-1||Le<=0)return h("ltv-above-max",q);b=Le;continue;}const Ln=W({poolKey:i.poolKey,poolId:i.poolId,owner:e.owner,deadline:m,deposit0:c.amount0,deposit1:c.amount1,principalDelta:ve,swapRoute:oe.route,swapInputAmount:V.amountIn,swapInputIsToken0:V.inputIsToken0,depositAfterSwap0:Zt,depositAfterSwap1:De,maxLtvPips:BigInt(i.maxLtvPips),slippageBps:e.slippageBps}),en=d.gateFailures.length===0,qe=Cp({collateral0:Nt,collateral1:Ye,debtLiquidityL:ge.liquidityL,decimals0:i.decimals0,decimals1:i.decimals1,entryPrice:M.entryPrice,targetPrice:M.targetPrice,rEffAnnual:M.rEffAnnual,horizonSeconds:e.horizonSeconds}),y=O=>i.equityLWad>0n?Number(O*BigInt(wt)/i.equityLWad):0,I=y(i.borrowedLWad),P=y(i.borrowedLWad+ve*i.borrowIndexWad);return{...d,feasible:!0,executable:en,infeasibleReason:null,limits:q,position:{alpha:C.alpha,leverage:qe.leverage,localLeverage:qe.localLeverage,asymptoticLeverage:qe.asymptoticLeverage,ltvPips:Math.floor(C.ltv*wt),executionLtvPips:mt,daysToLiquidation:dp(mt/wt,M.thetaLiq,M.rEffAnnual),scenario:qe.scenario,interestCostToken1:qe.interestCostToken1,worstEquityRatio:qe.worstEquityRatio,entryPrice:M.entryPrice,targetPrice:M.targetPrice,grossReturnAtTargetPct:qe.grossReturnAtTargetPct,principalDeltaRl:ve,marketUtilization:{beforePips:I,afterPips:P,capPips:Math.round(f.Ucap*wt)},collateral0:Nt,collateral1:Ye},swap:J,tx:en?dt(e.market,Ln):null};}return h("ltv-above-max",k);}function F0(e){if(e.collateralFloor)return e.collateralFloor;if(e.borrowOut===null)return{status:"not-requested"};if(e.utilizationCapped)return{status:"infeasible",reason:"utilization-capped"};const t=e.minimumNoSwapCollateralIn;return t===0n?{status:"ready-zero",amountIn:t,outputSource:"unknown"}:t!==null&&t>0n?{status:"ready-positive",amountIn:t}:{status:"unavailable",reason:"legacy-no-floor",retryable:!0};}const ps=[{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"to",type:"address"},{name:"tokenId",type:"uint256"}],outputs:[]},{type:"function",name:"setApprovalForAll",stateMutability:"nonpayable",inputs:[{name:"operator",type:"address"},{name:"approved",type:"bool"}],outputs:[]}],hr=[{type:"function",name:"getApproved",stateMutability:"view",inputs:[{name:"tokenId",type:"uint256"}],outputs:[{name:"",type:"address"}]},{type:"function",name:"isApprovedForAll",stateMutability:"view",inputs:[{name:"owner",type:"address"},{name:"operator",type:"address"}],outputs:[{name:"",type:"bool"}]}],Tp=[{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"spender",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"}],outputs:[]}],Rp="The Engine quote expired before it reached your wallet. Try again.",Bp="The network did not respond, so we could not check this transaction. Nothing was sent. Try again.";function Pp(e){return zo({currentAllowance:e.currentAmount,amount:e.spendAmount,approvalMode:e.approvalMode}).satisfied;}function ln(e){return Tn(e.allowance,e.spendAmount>0n?e.spendAmount:1n,e.approvalMode);}function Mp(e){return e.satisfied||e.spendAmount>0n||e.approvalMode==="max";}function wr(e){return e.satisfied?e.currentAmount<=e.spendAmount?{requestedAmount:null,persistent:!1,scope:"exact-token-amount"}:{requestedAmount:null,persistent:!0,scope:e.currentAmount===e.maximumAmount?"maximum-token-amount":"existing-token-amount"}:e.approvalMode==="max"?{requestedAmount:e.maximumAmount,persistent:!0,scope:"maximum-token-amount"}:{requestedAmount:e.spendAmount,persistent:!1,scope:"exact-token-amount"};}function Dp(e){const t=pe(e.chainId);if(!t)throw new Error(`No trusted Aegis Engine deployment is configured for chain ${e.chainId}.`);if(!e.router||!w(e.router,t.aegisRouterV1))throw new Error("Router does not match the trusted Engine deployment.");if(!e.permit2||!w(e.permit2,t.permit2))throw new Error("Permit2 does not match the trusted Engine deployment.");if(!e.vaultRegistry||!w(e.vaultRegistry,t.vaultRegistry))throw new Error("VaultRegistry does not match the trusted Engine deployment.");return{router:t.aegisRouterV1,permit2:t.permit2,vaultRegistry:t.vaultRegistry};}function _p(e){const{activeChain:t,market:n,target:o}=e;if(n.chainId!==t.chainId)throw new TypeError(`Engine market ${n.id} belongs to chain ${n.chainId}, not ${t.chainId}.`);if(o.chainId!==n.chainId)throw new TypeError(`Engine position ${o.positionId} belongs to chain ${o.chainId}, not ${n.chainId}.`);if(!ee(o.poolId,n.poolId))throw new TypeError(`Engine position ${o.positionId} does not belong to this market pool.`);if(o.marketId&&!Xt(o.marketId,n.id))throw new TypeError(`Engine position ${o.positionId} does not belong to market ${n.id}.`);const a=pe(n.chainId);if(!a)throw new Error(`No trusted Aegis Engine deployment is configured for chain ${n.chainId}.`);if(!n.router||!w(n.router,a.aegisRouterV1))throw new Error("Router does not match the trusted Engine deployment.");if(o.kind==="borrow_vault"){if(!n.vaultRegistry||!w(n.vaultRegistry,a.vaultRegistry))throw new Error("VaultRegistry does not match the trusted Engine deployment.");return{to:a.vaultRegistry,data:Ne({abi:ps,functionName:"approve",args:[a.aegisRouterV1,o.vaultId]}),value:0n};}if(!n.engine||!w(n.engine,a.aegisEngine))throw new Error("Engine does not match the trusted Engine deployment.");if(!e.amount||e.amount<=0n)throw new TypeError("A positive lender-share allowance is required.");return{to:a.aegisEngine,data:Ne({abi:Tp,functionName:"approve",args:[a.aegisRouterV1,BigInt(o.poolId),e.amount]}),value:0n};}function Np(e){const t=[],n=/* @__PURE__ */new Set();let o=e;const a=r=>{var s;if(typeof r!="string")return;const i=(s=r.split(`
|
|
67
|
-
`)[0])==null?void 0:s.trim();!i||/^\s*(from|to|value|data|url|request body):/i.test(i)||/^estimate gas arguments:?$/i.test(i)||t.includes(i)||t.push(i);};for(;o&&typeof o=="object"&&!n.has(o);){n.add(o);const r=o;for(const i of[r.shortMessage,r.details,r.reason,r.message])a(i);if(Array.isArray(r.metaMessages))for(const i of r.metaMessages)a(i);o=r.cause;}return t;}function
|
|
65
|
+
tx:dt(e.market,f.call)};}async function Th(e){return us(e,{allowDisabledBorrow:!1});}async function Rh(e){if(e.collateralIn<=0n)throw new RangeError("Collateral amount must be greater than zero.");const{trustedPermit2:t}=Zt(e.market,e.target,"add-collateral");if(e.target.vaultId!==e.vault.vaultId)throw new TypeError("The collateral target does not match the supplied vault.");const n=await us({...e,borrowOut:0n,tauPercentOfMaxLtv:100,withExecutionEvidence:!0},{allowDisabledBorrow:!0,forceExecutionEvidenceRefresh:e.forceExecutionEvidenceRefresh}),o=n.quote.expiresAt;if(o===null)throw new Error("Collateral quote did not include a live expiry frame.");const a=e.inputIsToken0?e.market.token0:e.market.token1,r=b(a.address,ie),i=[{approvalType:"permit2",token:a.address,amount:e.collateralIn,required:!r,nativeValue:r?e.collateralIn:0n,spender:os(e.market)}];return _n(e.market,i,t),{kind:"add-collateral",market:e.market,target:e.target,feasible:n.quote.feasible,executable:n.quote.executable,infeasibleReason:n.quote.infeasibleReason??null,gateFailures:n.quote.gateFailures,approvals:i,fromWallet0:e.inputIsToken0?e.collateralIn:0n,fromWallet1:e.inputIsToken0?0n:e.collateralIn,expected:null,minimum:null,principalDeltaRl:0n,withdraw:null,sharesDelta:null,shareBalance:null,postShareBalance:null,expiresAt:o,warnings:[],tx:n.tx};}async function Ph(e){const t=await Q(),{computeBorrowCapacity:n,dMinNoSwap:o,forwardFunctionNoSwap:a,invertSqrtPriceX96:r}=t;if(!e.market.borrowEnabled||e.market.canBorrow===!1)throw new Error("Borrowing is disabled for this market.");_t(e.slippageBps);const i=await ra({publicClient:e.publicClient,market:e.market}),s=i.market;e.vault&&ss(e.vault,e.market);const c=ls(e.tauPips,e.tauPercentOfMaxLtv,s),l=n({market:s,// Real orientation; computeBorrowCapacity handles the deposit side itself.
|
|
66
|
+
vault:e.vault??null,deposit:e.collateralIn,tauPips:c,collateralPolicy:"preserve-collateral",depositIsToken0:e.inputIsToken0,quoteHaircutBps:e.slippageBps}),p=e.vault?e.inputIsToken0?{x0:e.vault.x0,y0:e.vault.y0,rL0:e.vault.rL0}:{x0:e.vault.y0,y0:e.vault.x0,rL0:e.vault.rL0}:{x0:0n,y0:0n,rL0:0n},u=e.borrowOut&&e.borrowOut>0n?e.borrowOut:null,m=l.utilizationPre>=l.utilizationCap,d={sqrtPriceX96:e.inputIsToken0?s.sqrtPriceX96:r(s.sqrtPriceX96),borrowIndexWad:s.borrowIndexWad,maxLtvPips:s.maxLtvPips,hardLtvPips:s.hardLtvPips,decimals0:e.inputIsToken0?s.decimals0:s.decimals1,decimals1:e.inputIsToken0?s.decimals1:s.decimals0},h=u&&!m?o({market:d,vault:p,yWtarget:u,tauPips:c}):null,f=u!==null&&h!==null?Ip({floor:h,isFeasible:T=>a({market:d,vault:p,deposit:T,yWtarget:u,tauPips:c}).feasible}):null,w=f===0n&&u!==null?a({market:d,vault:p,deposit:0n,yWtarget:u,tauPips:c}):null,v=(w==null?void 0:w.regime)==="no-new-borrow"&&w.gammaNewL===0n&&e.vault&&u!==null&&p.y0>=u?"existing-idle":(w==null?void 0:w.regime)==="needs-borrow"||((w==null?void 0:w.gammaNewL)??0n)>0n?"new-debt":"unknown",g=u===null?{status:"not-requested"}:m?{status:"infeasible",reason:"utilization-capped"}:h===null?{status:"unavailable",reason:"closed-form-not-applicable",retryable:!1}:f===null?{status:"unavailable",reason:"forward-validation-unavailable",retryable:!0}:f===0n?{status:"ready-zero",amountIn:0n,outputSource:v}:{status:"ready-positive",amountIn:f};let I;if(e.includeBorrowLimits||e.walletCollateralIn!==void 0){const T=e.walletCollateralIn??null;if(T!==null&&(T<0n||T>Ie))throw new RangeError("Wallet collateral must fit an unsigned 256-bit amount.");const P=t.utilizationHeadroomGammaNewLWad(s),S=s.borrowIndexWad>0n?P/s.borrowIndexWad*BigInt(1e4-Math.max(1,e.slippageBps))/10000n:0n,E=S>0n&&S>=t.minDebtFloorRl(s.equityLWad,s.borrowIndexWad)?t.previewFullRangeBorrow(S,s.borrowIndexWad,s.poolKey,{sqrtPriceX96:s.sqrtPriceX96,tick:s.tickCurrent,protocolFee:0,lpFee:0,liquidity:s.inRangeLiquidity}):null,R=T===null?null:n({market:s,vault:e.vault??null,deposit:T,tauPips:c,collateralPolicy:"preserve-collateral",depositIsToken0:e.inputIsToken0,quoteHaircutBps:e.slippageBps});I={walletCollateralIn:T,walletBorrowOut:R&&T!==null?Jm({sdk:t,market:s,canonicalMarket:d,vault:p,deposit:T,upperBound:R.yMaxEffectiveAtHaircut,tauPips:c,slippageBps:e.slippageBps}):null,marketBorrowOut:E?e.inputIsToken0?E.amount1:E.amount0:0n};}return{kind:"borrow-capacity",market:e.market,collateralToken:e.inputIsToken0?e.market.token0:e.market.token1,borrowToken:e.inputIsToken0?e.market.token1:e.market.token0,thresholds:{maxLtvPips:s.maxLtvPips,hardLtvPips:s.hardLtvPips},tauPips:c,tauPercentOfMaxLtv:e.tauPercentOfMaxLtv??null,borrowOut:u,minimumNoSwapCollateralIn:f,collateralFloor:g,frame:i.frame,utilizationCapped:m,...(I?{borrowLimits:I}:{}),capacity:l};}function ds(e,t){var a;Rt(e);const n=(a=oe(e))==null?void 0:a.addresses;if(!n)throw new Error(`No trusted Aegis Engine deployment is configured for chain ${e.chainId}.`);const o=[["router",e.router,n.aegisRouterV1],["Engine",e.engine,n.aegisEngine],["StateView",e.stateView,n.aegisStateView],["V4 StateView",e.v4StateView,n.stateView]];t.vaultRegistry&&o.push(["VaultRegistry",e.vaultRegistry,n.vaultRegistry]);for(const[r,i,s]of o)ct(r,i,s);if(!b(e.poolKey.hooks,n.aegisHook))throw new Error("Pool hooks do not match the trusted Engine deployment.");return n;}function Zt(e,t,n){var r;if(t.chainId!==e.chainId)throw new TypeError(`Engine position ${t.positionId} belongs to chain ${t.chainId}, not ${e.chainId}.`);if(!Y(t.poolId,e.poolId))throw new TypeError(`Engine position ${t.positionId} does not belong to this market pool.`);if(t.marketId&&!Yt(t.marketId,e.id))throw new TypeError(`Engine position ${t.positionId} does not belong to market ${e.id}.`);const o=(r=oe(e))==null?void 0:r.version;if(!o)throw new Error(`No trusted Aegis Engine deployment is configured for chain ${e.chainId}.`);const a=ds(e,{vaultRegistry:n!=="redeem"});return{chainId:e.chainId,version:o,trustedPermit2:a.permit2,trustedQuoter:a.uniswapV4Quoter};}function ct(e,t,n){if(!t||!b(t,n))throw new Error(`${e} does not match the trusted Engine deployment.`);return t;}function Ep(e){var n;const t=(n=oe(e))==null?void 0:n.addresses;if(!t)throw new Error(`No trusted Aegis Engine deployment is configured for chain ${e.chainId}.`);return t.permit2;}function _n(e,t,n){t.some(o=>o.required)&&ct("Permit2",e.permit2,n);}function Ap(e,t,n,o){return async a=>{const{quoteExactInputSingle:r}=await Q(),i=ct("V4 quoter",t.v4Quoter,o),s=await r(e,i,{poolKey:t.poolKey,zeroForOne:a.inputIsToken0,exactAmount:a.amountIn,...(a.blockNumber!==void 0?{blockNumber:a.blockNumber}:{})});return{minAmountOut:St(s.amountOut,n),route:null,effectivePrice:cs(s.amountOut,a.amountIn,a.inputIsToken0?t.token0.decimals:t.token1.decimals,a.inputIsToken0?t.token1.decimals:t.token0.decimals)};};}async function ms(e){const t=await e();return t.status==="re-quote-required"?e():t;}function ps(e){var t,n;return e.infeasibleReason?e.infeasibleReason:((t=e.execution)==null?void 0:t.status)==="rejected-at-frame"||((n=e.execution)==null?void 0:n.status)==="re-quote-required"?e.execution.reason??null:null;}async function Bh(e){_t(e.slippageBps);const{chainId:t,version:n,trustedPermit2:o,trustedQuoter:a}=Zt(e.market,e.target,"repay"),{quoteRepay:r}=await Q(),i=await ms(()=>r(e.publicClient,{chainId:t,version:n,...Ee(e.market),poolId:e.market.poolId,vaultId:e.target.vaultId,owner:e.owner,repayRl:e.repayRl??"full",deadline:e.deadline??Mt(),...(e.quoteTtlSeconds!==void 0?{quoteTtlSeconds:e.quoteTtlSeconds}:{}),...(e.executionFrameMaxAgeSeconds!==void 0?{executionFrameMaxAgeSeconds:e.executionFrameMaxAgeSeconds}:{}),slippageBps:e.slippageBps,fetchQuote:Ap(e.publicClient,e.market,e.slippageBps,a),...(e.signal?{signal:e.signal}:{})}));return _n(e.market,i.approvals,o),{kind:"repay",market:e.market,target:e.target,feasible:i.feasible,executable:i.executable,infeasibleReason:ps(i),gateFailures:i.gateFailures,approvals:i.approvals,fromWallet0:i.fromWallet0,fromWallet1:i.fromWallet1,expected:null,minimum:null,principalDeltaRl:i.principalDeltaRl,requestedRepayProjection:i.feasible&&i.requestedPrincipalPostProjection?{ltvPips:i.requestedPrincipalPostProjection.ltvPipsPost===null?null:Number(i.requestedPrincipalPostProjection.ltvPipsPost),debtFree:i.requestedPrincipalPostProjection.rL0Post===0n,idle0:i.requestedPrincipalPostProjection.idle0Post,idle1:i.requestedPrincipalPostProjection.idle1Post,debtL:i.requestedPrincipalPostProjection.debtLPost}:null,withdraw:null,sharesDelta:null,shareBalance:null,postShareBalance:null,expiresAt:i.expiresAt,warnings:i.warnings,tx:dt(e.market,i.call)};}async function Mh(e){const{chainId:t,version:n,trustedPermit2:o}=Zt(e.market,e.target,"close"),{quoteCloseVault:a}=await Q(),r=await ms(()=>a(e.publicClient,{chainId:t,version:n,...Ee(e.market),poolId:e.market.poolId,vaultId:e.target.vaultId,owner:e.owner,recipient:e.owner,deadline:e.deadline??Mt(),...(e.quoteTtlSeconds!==void 0?{quoteTtlSeconds:e.quoteTtlSeconds}:{}),...(e.executionFrameMaxAgeSeconds!==void 0?{executionFrameMaxAgeSeconds:e.executionFrameMaxAgeSeconds}:{}),...(e.signal?{signal:e.signal}:{})}));return _n(e.market,r.approvals,o),{kind:"close",market:e.market,target:e.target,feasible:r.feasible,executable:r.executable,infeasibleReason:ps(r),gateFailures:r.gateFailures,approvals:r.approvals,fromWallet0:r.fromWallet0,fromWallet1:r.fromWallet1,expected:r.expected,minimum:r.minimum,principalDeltaRl:r.principalDeltaRl,withdraw:null,sharesDelta:null,shareBalance:null,postShareBalance:null,expiresAt:r.expiresAt,warnings:r.warnings,tx:dt(e.market,r.call)};}async function _h(e){const{chainId:t,version:n}=Zt(e.market,e.target,"withdraw"),{quoteIdleWithdraw:o}=await Q(),a=await o(e.publicClient,{chainId:t,version:n,...Ee(e.market),poolId:e.market.poolId,vaultId:e.target.vaultId,owner:e.owner,withdraw:e.withdraw??"all",deadline:e.deadline??Mt(),...(e.quoteTtlSeconds!==void 0?{quoteTtlSeconds:e.quoteTtlSeconds}:{}),...(e.signal?{signal:e.signal}:{})});return{kind:"withdraw",market:e.market,target:e.target,feasible:a.feasible,executable:a.executable,infeasibleReason:a.infeasibleReason??null,gateFailures:a.gateFailures,approvals:a.approvals,fromWallet0:0n,fromWallet1:0n,expected:null,minimum:null,principalDeltaRl:null,withdraw:a.withdraw0===null||a.withdraw1===null?null:{amount0:a.withdraw0,amount1:a.withdraw1},sharesDelta:null,shareBalance:null,postShareBalance:null,expiresAt:a.expiresAt,warnings:a.warnings,tx:dt(e.market,a.call)};}async function Nh(e){var T;_t(e.slippageBps);const{chainId:t,version:n}=Zt(e.market,e.target,"redeem"),{fetchMarketWithAccrual:o,fetchTotalSupply:a,PIPS_DENOMINATOR:r,quoteRedeem:i,UTILIZATION_CAP_PIPS:s}=await Q(),c=e.deadline??Mt(),l=yp(n,s),p={chainId:t,version:n,...Ee(e.market),poolId:e.market.poolId,owner:e.owner,recipient:e.owner,slippageBps:e.slippageBps,deadline:c,...(e.quoteTtlSeconds!==void 0?{quoteTtlSeconds:e.quoteTtlSeconds}:{}),...(e.signal?{signal:e.signal}:{})};let u=await i(e.publicClient,{...p,shares:e.shares==="available"?"all":e.shares??"all"}),m,d=!1,h=null;if(e.shares==="available"&&u.shareBalance!==null&&u.shareBalance>0n){if(u.status==="verified-at-frame")m={mode:u.sharesDelta===u.shareBalance?"full":"partial",redeemableShares:u.sharesDelta,shareBalance:u.shareBalance,remainingShares:u.shareBalance-u.sharesDelta};else if(u.status==="blocked"||u.status==="rejected"&&(u.reason==="utilization-cap"||u.reason==="requires-split")){const P=u.frame.blockNumber;let S=u.shareBalance<br?u.shareBalance:br;if(l!==null){const E=e.market.stateView;if(!E)throw new Error("Market is missing Aegis StateView.");const[R,_]=await Promise.all([o(e.publicClient,E,e.market.poolId,P),a(e.publicClient,E,e.market.poolId,P)]),L=R.market.totalRlBorrowed*R.latestBorrowIndexWad,$=L===0n?0n:L*r/(l+1n)+1n,te=(R.latestEquityLWad>=$?R.latestEquityLWad-$:0n)/wr,Me=_*wr;h=te>0n&&R.latestEquityLWad>0n&&_>0n?((te+1n)*Me-1n)/R.latestEquityLWad:0n,h<S&&(S=h);}S>0n?(u.sharesDelta!==S&&(u=await i(e.publicClient,{...p,shares:S,blockNumber:P})),(u.status==="verified-at-frame"||u.status==="blocked")&&(m={mode:S===u.shareBalance?"full":"partial",redeemableShares:S,shareBalance:u.shareBalance,remainingShares:u.shareBalance-u.sharesDelta})):d=!0;}}else if(e.shares!=="available"&&u.status==="blocked"){const P=(T=u.projection)==null?void 0:T.capAssessment;P!=null&&P.applies&&!P.passesEstimate&&(d=!0);}const f=u.status==="verified-at-frame",w=f||u.status==="blocked",v=u.status==="rejected"?u.reason==="utilization-cap"?"utilization-blocked":u.reason:u.status==="unavailable"?u.reason:null,g=u.status==="verified-at-frame"?{amount0:u.output.amount0,amount1:u.output.amount1}:null,I=w&&!d&&u.shareBalance!==null&&u.sharesDelta!==null?u.shareBalance-u.sharesDelta:null;return{kind:"redeem",market:e.market,target:e.target,feasible:d?!1:w,executable:f,infeasibleReason:d?"utilization-blocked":v,gateFailures:u.gateFailures,approvals:u.approvals,fromWallet0:0n,fromWallet1:0n,expected:g,minimum:f?u.minimum:null,principalDeltaRl:null,withdraw:null,sharesDelta:u.sharesDelta,shareBalance:u.shareBalance,postShareBalance:I,...(m?{redeemAvailability:m}:{}),expiresAt:u.expiresAt,warnings:d?[...u.warnings,h===0n?"No redeem can keep this market at or below the Engine utilization cap.":"Requested redeem exceeds the shares currently allowed by the Engine utilization cap."]:u.warnings,tx:f?dt(e.market,u.call):null};}const Lt={maxLeverage:null,minLeverage:null,maxCollateralIn:null},kr=3,vr=100;function gp(e,t,n){const o=e.execution;if(!o)return[{gate:"evidence-mismatch",detail:"borrow context carries no in-frame authorization evidence"}];const a=[];return b(o.owner,t)||a.push({gate:"evidence-mismatch",detail:`evidence owner ${o.owner} is not the quote owner ${t}`}),o.chainId!==e.chainId&&a.push({gate:"evidence-mismatch",detail:`evidence chainId ${o.chainId} is not the quote target chain ${e.chainId}`}),o.blockNumber!==e.frame.blockNumber&&a.push({gate:"evidence-mismatch",detail:`evidence block ${o.blockNumber} is stale for frame block ${e.frame.blockNumber}`}),b(o.router,n)||a.push({gate:"evidence-mismatch",detail:`evidence router ${o.router} is not the call target ${n}`}),o.routerApproved||a.push({gate:"router-authorization",owner:o.owner,router:o.router,vaultRegistry:o.vaultRegistry}),a;}function Sp(e,t,n,o){switch(e.kind){case"deposit-above-max":return{...Lt,maxCollateralIn:Mn(e.maxEfficientDeposit,t)};case"leverage-above-max":return{...Lt,maxLeverage:e.lMax,minLeverage:o};case"leverage-below-min":return{...Lt,maxLeverage:n,minLeverage:e.lMin};default:return Lt;}}function fs(e,t,n,o){if(e<=0n||t<0n||o<=0n)return Number.NaN;const a=1n<<192n,r=o*o,i=n?e*r:e*a,s=n?t*a:t*r;if(s>=i)return 0;const l=((i-s)*10000n+i-1n)/i;return l<=BigInt(Number.MAX_SAFE_INTEGER)?Number(l):Number.NaN;}function Cp(e){const t=Number(e.collateral0)/10**e.decimals0,n=Number(e.collateral1)/10**e.decimals1,o=Number(e.debtLiquidityL)/la(e.decimals0,e.decimals1),a=Math.sqrt(e.entryPrice),r=m=>m*t+n-2*o*Math.sqrt(m),i=r(e.entryPrice),s=r(e.targetPrice),c=e.targetPrice/e.entryPrice,l=(s-i)/i/(c-1),p=2*o*a*e.rEffAnnual*(e.horizonSeconds/ua),u=p*Math.sqrt(c);return{scenario:{entryEquity:i,targetEquityAfterInterest:s-u,targetInterest:u},leverage:Math.abs(l),localLeverage:(e.entryPrice*t-o*a)/i,asymptoticLeverage:e.entryPrice*t/i,interestCostToken1:Mn(p,e.decimals1),worstEquityRatio:(n-o*o/t)/i,grossReturnAtTargetPct:(s-i)/i*100};}async function hs(e,t,n){if(t.blockHash===void 0)return!0;try{const o=await e.getBlock({blockNumber:t.blockNumber});return n==null||n.throwIfAborted(),o.hash!==null&&o.hash.toLowerCase()===t.blockHash.toLowerCase();}catch{return n==null||n.throwIfAborted(),!1;}}async function xp(e){var g,I,T,P;if((g=e.signal)==null||g.throwIfAborted(),_t(e.slippageBps),rs(e.maxPriceImpactBps),!e.market.borrowEnabled||e.market.canBorrow===!1)throw new Error("Borrowing is disabled for this market.");if(e.collateralIn<=0n)throw new RangeError("Collateral amount must be greater than zero.");const t=ds(e.market,{vaultRegistry:!0}),n=ct("router",e.market.router,t.aegisRouterV1),o=ct("V4 quoter",e.market.v4Quoter,t.uniswapV4Quoter),a=await ra({publicClient:e.publicClient,market:e.market},{owner:e.owner},{forceRefresh:e.forceExecutionEvidenceRefresh??!1});(I=e.signal)==null||I.throwIfAborted();const r=await is(e.publicClient,e.market,a.frame.blockNumber,e.signal),i=a.market,s=e.inputIsToken0?e.market.token0:e.market.token1,c=e.inputIsToken0?i.decimals0:i.decimals1,l={amount0:e.inputIsToken0?e.collateralIn:0n,amount1:e.inputIsToken0?0n:e.collateralIn},p=b(s.address,ie),u=[{approvalType:"permit2",token:s.address,amount:e.collateralIn,required:!p,nativeValue:p?e.collateralIn:0n,spender:n}];_n(e.market,u,t.permit2);const m=e.deadline??Mt(),d={kind:"trade-open",market:e.market,direction:e.direction,collateralToken:s,intent:{owner:e.owner,inputIsToken0:e.inputIsToken0,collateralIn:e.collateralIn,leverage:e.leverage??null,horizonSeconds:e.horizonSeconds,priceMove:e.priceMove,slippageBps:e.slippageBps,maxPriceImpactBps:e.maxPriceImpactBps},thresholds:{maxLtvPips:i.maxLtvPips,hardLtvPips:i.hardLtvPips},gateFailures:gp(a,e.owner,n),approvals:u,adaptiveFee:r,deposit:l,frame:a.frame,expiresAt:m},h=(S,E,R=null)=>({...d,feasible:!1,executable:!1,infeasibleReason:S,limits:E,position:null,swap:R,tx:null}),f=await ip(a);let w=Math.min(e.tauPips??i.maxLtvPips,i.maxLtvPips),v=Lt;for(let S=0;S<kr;S++){const E=await fp({state:f,direction:e.direction,depositAsset:e.inputIsToken0?"token0":"token1",depositAmount:Number(e.collateralIn)/10**c,tlSeconds:e.horizonSeconds,deltaLev:e.priceMove,tauBar:w/wt,rootPolicy:e.rootPolicy??"min-carry",...(e.leverage!==void 0?{leverageTarget:e.leverage}:{})});if((T=e.signal)==null||T.throwIfAborted(),!E.chosen||!E.diagnostics){const O=E.infeasibleReason??{kind:"no-feasible-band"};return h(O.kind,Sp(O,c,E.lMax,E.lMin));}const{chosen:R,diagnostics:_}=E,L={maxLeverage:E.lMax,minLeverage:E.lMin,maxCollateralIn:_.maxEfficientDeposit===null?null:Mn(_.maxEfficientDeposit,c)};v=L;const{buildTapOpenPosition:$,computeActualLtvPips:G,minDebtFloorRl:te,previewFullRangeBorrow:Me}=await Q(),ke=rp(R.delta,la(i.decimals0,i.decimals1));if(ke<te(i.equityLWad,i.borrowIndexWad))return h("debt-below-minimum",L);if(R.delta>_.deltaCap)return h("delta-above-cap",L);const ge=Me(ke,i.borrowIndexWad,i.poolKey,{sqrtPriceX96:i.sqrtPriceX96,tick:i.tickCurrent,protocolFee:0,lpFee:0,liquidity:i.inRangeLiquidity});if(!ge)return h("invalid-market-state",L);const we=l.amount0+ge.amount0,X=l.amount1+ge.amount1,K=wp({candidate:R,direction:e.direction,entryPrice:_.entryPrice,decimals0:i.decimals0,decimals1:i.decimals1,idle0:we,idle1:X});if(!K.ok)return h(K.reason,L);const H=K.leg,ae=await ap({publicClient:e.publicClient,quoter:o,context:a,token0:e.market.token0,token1:e.market.token1,leg:H,slippageBps:e.slippageBps,...(e.signal?{signal:e.signal}:{})});if((P=e.signal)==null||P.throwIfAborted(),ae.blockNumber!==a.frame.blockNumber||!(await hs(e.publicClient,a.frame,e.signal)))return h("stale-frame",L);const F=H.needed?fs(H.amountIn,ae.amountOutQuoted,H.inputIsToken0,i.sqrtPriceX96):null;if(F!==null&&!Number.isSafeInteger(F))return h("price-impact-unavailable",L);const Z=H.needed?{inputIsToken0:H.inputIsToken0,amountIn:H.amountIn,amountOutQuoted:ae.amountOutQuoted,amountOutMinimum:ae.amountOutMinimum,priceImpactBps:F,clampedByIdle:H.clampedByIdle}:null;if(Z&&Z.priceImpactBps>e.maxPriceImpactBps)return h("price-impact-limit",L,Z);const Nt=H.inputIsToken0?H.amountIn:0n,Dt=H.inputIsToken0?0n:H.amountIn,en=H.inputIsToken0?0n:ae.amountOutMinimum,_e=H.inputIsToken0?ae.amountOutMinimum:0n,Ot=we-Nt+en,Ye=X-Dt+_e,mt=G(ge.liquidityL,Ot,Ye,i.decimals0,i.decimals1);if(mt>=i.maxLtvPips-vr){const O=i.maxLtvPips-vr,Se=Math.max(1,Math.floor(R.ltv*wt)),Ue=Math.min(w-1,Math.floor(Se*O/mt));if(S===kr-1||Ue<=0)return h("ltv-above-max",L);w=Ue;continue;}const Ln=$({poolKey:i.poolKey,poolId:i.poolId,owner:e.owner,deadline:m,deposit0:l.amount0,deposit1:l.amount1,principalDelta:ke,swapRoute:ae.route,swapInputAmount:H.amountIn,swapInputIsToken0:H.inputIsToken0,depositAfterSwap0:en,depositAfterSwap1:_e,maxLtvPips:BigInt(i.maxLtvPips),slippageBps:e.slippageBps}),tn=d.gateFailures.length===0,Fe=Cp({collateral0:Ot,collateral1:Ye,debtLiquidityL:ge.liquidityL,decimals0:i.decimals0,decimals1:i.decimals1,entryPrice:_.entryPrice,targetPrice:_.targetPrice,rEffAnnual:_.rEffAnnual,horizonSeconds:e.horizonSeconds}),y=O=>i.equityLWad>0n?Number(O*BigInt(wt)/i.equityLWad):0,A=y(i.borrowedLWad),M=y(i.borrowedLWad+ke*i.borrowIndexWad);return{...d,feasible:!0,executable:tn,infeasibleReason:null,limits:L,position:{alpha:R.alpha,leverage:Fe.leverage,localLeverage:Fe.localLeverage,asymptoticLeverage:Fe.asymptoticLeverage,ltvPips:Math.floor(R.ltv*wt),executionLtvPips:mt,daysToLiquidation:dp(mt/wt,_.thetaLiq,_.rEffAnnual),scenario:Fe.scenario,interestCostToken1:Fe.interestCostToken1,worstEquityRatio:Fe.worstEquityRatio,entryPrice:_.entryPrice,targetPrice:_.targetPrice,grossReturnAtTargetPct:Fe.grossReturnAtTargetPct,principalDeltaRl:ke,marketUtilization:{beforePips:A,afterPips:M,capPips:Math.round(f.Ucap*wt)},collateral0:Ot,collateral1:Ye},swap:Z,tx:tn?dt(e.market,Ln):null};}return h("ltv-above-max",v);}function Dh(e){if(e.collateralFloor)return e.collateralFloor;if(e.borrowOut===null)return{status:"not-requested"};if(e.utilizationCapped)return{status:"infeasible",reason:"utilization-capped"};const t=e.minimumNoSwapCollateralIn;return t===0n?{status:"ready-zero",amountIn:t,outputSource:"unknown"}:t!==null&&t>0n?{status:"ready-positive",amountIn:t}:{status:"unavailable",reason:"legacy-no-floor",retryable:!0};}const ws=[{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"to",type:"address"},{name:"tokenId",type:"uint256"}],outputs:[]},{type:"function",name:"setApprovalForAll",stateMutability:"nonpayable",inputs:[{name:"operator",type:"address"},{name:"approved",type:"bool"}],outputs:[]}],yr=[{type:"function",name:"getApproved",stateMutability:"view",inputs:[{name:"tokenId",type:"uint256"}],outputs:[{name:"",type:"address"}]},{type:"function",name:"isApprovedForAll",stateMutability:"view",inputs:[{name:"owner",type:"address"},{name:"operator",type:"address"}],outputs:[{name:"",type:"bool"}]}],Tp=[{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"spender",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"}],outputs:[]}],Rp="The Engine quote expired before it reached your wallet. Try again.",Pp="The network did not respond, so we could not check this transaction. Nothing was sent. Try again.";function Bp(e){return Xo({currentAllowance:e.currentAmount,amount:e.spendAmount,approvalMode:e.approvalMode}).satisfied;}function un(e){return Tn(e.allowance,e.spendAmount>0n?e.spendAmount:1n,e.approvalMode);}function Mp(e){return e.satisfied||e.spendAmount>0n||e.approvalMode==="max";}function Ir(e){return e.satisfied?e.currentAmount<=e.spendAmount?{requestedAmount:null,persistent:!1,scope:"exact-token-amount"}:{requestedAmount:null,persistent:!0,scope:e.currentAmount===e.maximumAmount?"maximum-token-amount":"existing-token-amount"}:e.approvalMode==="max"?{requestedAmount:e.maximumAmount,persistent:!0,scope:"maximum-token-amount"}:{requestedAmount:e.spendAmount,persistent:!1,scope:"exact-token-amount"};}function _p(e){var n;const t=(n=oe(e))==null?void 0:n.addresses;if(!t)throw new Error(`No trusted Aegis Engine deployment is configured for chain ${e.chainId}.`);if(!e.router||!b(e.router,t.aegisRouterV1))throw new Error("Router does not match the trusted Engine deployment.");if(!e.permit2||!b(e.permit2,t.permit2))throw new Error("Permit2 does not match the trusted Engine deployment.");if(!e.vaultRegistry||!b(e.vaultRegistry,t.vaultRegistry))throw new Error("VaultRegistry does not match the trusted Engine deployment.");return{router:t.aegisRouterV1,permit2:t.permit2,vaultRegistry:t.vaultRegistry};}function Np(e){var r;const{activeChain:t,market:n,target:o}=e;if(n.chainId!==t.chainId)throw new TypeError(`Engine market ${n.id} belongs to chain ${n.chainId}, not ${t.chainId}.`);if(o.chainId!==n.chainId)throw new TypeError(`Engine position ${o.positionId} belongs to chain ${o.chainId}, not ${n.chainId}.`);if(!Y(o.poolId,n.poolId))throw new TypeError(`Engine position ${o.positionId} does not belong to this market pool.`);if(o.marketId&&!Yt(o.marketId,n.id))throw new TypeError(`Engine position ${o.positionId} does not belong to market ${n.id}.`);const a=(r=oe(n))==null?void 0:r.addresses;if(!a)throw new Error(`No trusted Aegis Engine deployment is configured for chain ${n.chainId}.`);if(!n.router||!b(n.router,a.aegisRouterV1))throw new Error("Router does not match the trusted Engine deployment.");if(o.kind==="borrow_vault"){if(!n.vaultRegistry||!b(n.vaultRegistry,a.vaultRegistry))throw new Error("VaultRegistry does not match the trusted Engine deployment.");return{to:a.vaultRegistry,data:De({abi:ws,functionName:"approve",args:[a.aegisRouterV1,o.vaultId]}),value:0n};}if(!n.engine||!b(n.engine,a.aegisEngine))throw new Error("Engine does not match the trusted Engine deployment.");if(!e.amount||e.amount<=0n)throw new TypeError("A positive lender-share allowance is required.");return{to:a.aegisEngine,data:De({abi:Tp,functionName:"approve",args:[a.aegisRouterV1,BigInt(o.poolId),e.amount]}),value:0n};}function Dp(e){const t=[],n=/* @__PURE__ */new Set();let o=e;const a=r=>{var s;if(typeof r!="string")return;const i=(s=r.split(`
|
|
67
|
+
`)[0])==null?void 0:s.trim();!i||/^\s*(from|to|value|data|url|request body):/i.test(i)||/^estimate gas arguments:?$/i.test(i)||t.includes(i)||t.push(i);};for(;o&&typeof o=="object"&&!n.has(o);){n.add(o);const r=o;for(const i of[r.shortMessage,r.details,r.reason,r.message])a(i);if(Array.isArray(r.metaMessages))for(const i of r.metaMessages)a(i);o=r.cause;}return t;}function Er(e){const t=e.trim().replace(/\.$/,"");return /unknown reason|internal json-rpc error/i.test(e)||/^execution reverted$/i.test(t);}function Op(e){const t=/* @__PURE__ */new Set();let n=e,o=!1;for(;n&&typeof n=="object"&&!t.has(n);){if(t.add(n),n instanceof Ea||n instanceof Aa&&n.code===Ea.code)return!1;(n instanceof Gs||n instanceof Aa||n instanceof js)&&(o=!0),n=n.cause;}return o;}async function qp(e){const t=e.permit2Context;if(!t||Ae(t.token.address)||t.amount<=0n)return null;const n=await ze({publicClient:e.publicClient,permit2:t.permit2,account:e.wallet.account,token:t.token.address,router:t.router}).catch(()=>null);if(!n||Tn(n,t.amount))return null;const o=t.inlinePermit?"gasless Permit2 signature":"Permit2 spending cap";return`${t.token.symbol} is not authorized to the Aegis router through Permit2. This borrow needs a valid ${o} before the router can pull collateral; retry and confirm that prompt before submitting.`;}async function Lp(e,t){const n=Dp(e),o=n.find(s=>!Er(s))??n[0]??"",a=await qp(t),r=o&&!Er(o)?` ${o.slice(0,220)}`:"",i=a?` ${a}`:"";return`Engine transaction simulation failed before wallet signature.${r}${i} Your wallet would likely mark this transaction as failing.`;}async function Fp(e){if(e.amount<0n)throw new TypeError("Authorization amount cannot be negative.");if(e.token.chainId!==e.market.chainId)throw new TypeError(`Authorization token belongs to chain ${e.token.chainId}, not ${e.market.chainId}.`);if(!b(e.token.address,e.market.token0.address)&&!b(e.token.address,e.market.token1.address))throw new TypeError("Authorization token does not belong to this Engine market.");const t=e.approvalMode??"exact",n=e.permit2AuthorizationMode??"spending-cap",o=Math.floor(Date.now()/1e3)+Ho,{router:a,permit2:r,vaultRegistry:i}=_p(e.market),s=!Ae(e.token.address),[c,l,p]=await Promise.all([Up({publicClient:e.publicClient,market:e.market,owner:e.owner}).catch(f=>{throw new Error("Could not read Aegis vault authorization.",{cause:f});}),s?Ct({publicClient:e.publicClient,token:e.token.address,owner:e.owner,spender:r}).catch(f=>{throw new Error(`Could not read ${e.token.symbol} approval for Permit2.`,{cause:f});}):Promise.resolve(null),s?ze({publicClient:e.publicClient,permit2:r,account:e.owner,token:e.token.address,router:a}).catch(f=>{throw new Error(`Could not read ${e.token.symbol} spending cap for Aegis.`,{cause:f});}):Promise.resolve(null)]),u=[{id:"vault-operator",kind:"vault-operator",status:c?"satisfied":"required",walletAction:"transaction",target:i,spender:a,token:null,currentAmount:null,requestedAmount:null,expiration:null,persistent:!0,scope:"all-vaults"}];if(l!==null&&p!==null){const f=Xo({currentAllowance:l,amount:e.amount,approvalMode:t,requiresReset:Xt(e.token)});if(f.visible){const g=Ir({currentAmount:l,spendAmount:e.amount,maximumAmount:Ie,satisfied:f.satisfied,approvalMode:t});f.resetRequired&&u.push({id:"erc20-reset",kind:"erc20-reset",status:"required",walletAction:"transaction",target:e.token.address,spender:r,token:e.token,currentAmount:l,requestedAmount:0n,expiration:null,persistent:!1,scope:"token-allowance-reset"}),u.push({id:"erc20-permit2",kind:"erc20-permit2",status:f.satisfied?"satisfied":"required",walletAction:"transaction",target:e.token.address,spender:r,token:e.token,currentAmount:l,requestedAmount:g.requestedAmount,expiration:null,// A returning wallet can already have more authority than this open
|
|
68
68
|
// consumes, even when the host's default for new approvals is exact.
|
|
69
|
-
persistent:
|
|
69
|
+
persistent:g.persistent,scope:g.scope});}const w=un({allowance:p,spendAmount:e.amount,approvalMode:t});if(Mp({satisfied:w,spendAmount:e.amount,approvalMode:t})){const[g,I]=p,T=Ir({currentAmount:g,spendAmount:e.amount,maximumAmount:qe,satisfied:w,approvalMode:t});u.push({id:"permit2-router",kind:"permit2-router",status:w?"satisfied":"required",walletAction:n==="signature"?"signature-or-transaction":"transaction",target:r,spender:a,token:e.token,currentAmount:g,currentExpiration:Number(I),requestedAmount:T.requestedAmount,expiration:w?Number(I):n==="signature"?o:wi,// Permit2 decrements finite allowances during transfer. Any excess that
|
|
70
70
|
// was already live remains active after this position opens.
|
|
71
|
-
persistent:S.persistent,scope:S.scope});}}u.push({id:"open-position",kind:"open-position",status:"required",walletAction:"transaction",target:a,spender:null,token:null,currentAmount:null,requestedAmount:null,expiration:null,persistent:!1,scope:"position-open"});const m=u.filter(f=>f.kind!=="erc20-reset"&&f.kind!=="open-position"&&f.status==="required").length,d=e.walletChainId===void 0||e.walletChainId===null?null:e.walletChainId!==e.market.chainId,h=u.filter(f=>f.status==="required").length;return{kind:"engine-authorization-plan",operation:"trade-open",account:e.owner,chainId:e.market.chainId,marketId:e.market.id,token:e.token,amount:e.amount,approvalMode:t,observations:{erc20Allowance:c,permit2Allowance:p,permit2AuthorizationMode:"spending-cap"},router:a,permit2:r,vaultRegistry:i,steps:u,missingPermissionCount:m,walletChainSwitchRequired:d,walletPromptCount:h,readyForOpen:e.amount>0n&&u.every(f=>f.kind==="open-position"||f.status==="satisfied")};}function ia(e,t=!1){if(e.revokeAllowance&&(!t||!e.replaceAllowance||e.amount!==0n))throw new TypeError("Revocation must explicitly replace the router allowance with zero.");if(e.replaceAllowance&&((e.approvalMode??"exact")!=="exact"||!e.revokeAllowance&&e.amount<=0n||e.amount>=Oe))throw new TypeError("A specified spending limit must be positive, finite, and fit within Permit2.");}function sa(e){if(e.activeChain.chainId!==e.market.chainId)throw new TypeError("Active chain does not match the Engine approval market.");if(e.token.chainId!==e.market.chainId)throw new TypeError("Approval token chain does not match the Engine market.");if(!w(e.token.address,e.market.token0.address)&&!w(e.token.address,e.market.token1.address))throw new TypeError("Approval token does not belong to the Engine market.");const t=Xo(e.market,{vaultRegistry:!1});return{...e,permit2:t.permit2,router:t.aegisRouterV1};}function Nn(e){var t;(t=e.signal)==null||t.throwIfAborted();}function sn(e,t){var n;try{(n=e.onAuthorizationExecution)==null||n.call(e,t);}catch(o){console.warn("[AegisCore] onAuthorizationExecution callback failed",o);}}async function ca(e){var n,o,a,r;let t=null;(o=(n=e.input).onAuthorizationProgress)==null||o.call(n,{kind:e.kind,status:"requesting"});try{const i=await e.run({onWalletRequest:()=>sn(e.input,{kind:e.kind,status:"wallet-requested",hash:null}),onHash:(s,l)=>{const c=t&&t!==s?t:void 0;t=s,sn(e.input,{kind:e.kind,status:"submitted",hash:s,...(c?{replacesHash:c}:{}),...(l!=null&&l.executionChanged?{executionChanged:!0}:{})});}});return(r=(a=e.input).onAuthorizationProgress)==null||r.call(a,{kind:e.kind,status:"confirmed"}),sn(e.input,{kind:e.kind,status:"confirmed",hash:t}),i;}catch(i){const s=Rr(i,"Authorization failed.");throw sn(e.input,{kind:e.kind,status:s.kind==="wallet-rejected"?"cancelled":"failed",hash:t,error:s}),i;}}async function fs(e){const t=()=>Nn(e),n=e.approvalMode??"exact",o=()=>Ct({publicClient:e.publicClient,token:e.token.address,owner:e.wallet.account,spender:e.permit2});let a;try{a=await o(),t();}catch(s){throw t(),new Error(`Could not read ${e.token.symbol} approval for Permit2.`,{cause:s});}const{approvalHashes:r,allowance:i}=await Ti({read:o,write:(s,l,c)=>Uo({provider:e.wallet.provider,publicClient:e.publicClient,account:e.wallet.account,chain:e.activeChain.chain,token:e.token.address,permit2:e.permit2,amount:s==="grant"&&n==="max"?void 0:l,signal:e.signal,...c}),amount:e.amount,decimals:e.token.decimals,approvalMode:n,requiresReset:e.replaceAllowance||Qt(e.token),knownAllowance:a,replaceAllowance:e.replaceAllowance,executeStep:(s,l)=>ca({input:e,kind:s==="reset"?"erc20-reset":"erc20-permit2",run:c=>l(c)}),afterStep:async()=>{var s;t(),await((s=e.onAuthorizationCheckpoint)==null?void 0:s.call(e)),t();},confirm:e.replaceAllowance?async(s,l)=>{const c=await Rn(async()=>(t(),s()),p=>p===l,5,300);if(c!==l)throw new Error("Approval confirmed, but the allowance does not match your specified limit.");return c;}:xi,onStatus:e.onStatus});if(e.replaceAllowance&&i!==e.amount||!Pp({currentAmount:i,spendAmount:e.amount,approvalMode:n}))throw new Error(`Approve ${e.token.symbol} before continuing.`);return r.at(-1)??null;}async function hs(e){var a,r;const t=()=>Nn(e),n=e.approvalMode??"exact",o=await ze({publicClient:e.publicClient,permit2:e.permit2,account:e.wallet.account,token:e.token.address,router:e.router});t(),!(e.replaceAllowance&&e.amount===0n&&o[0]===0n)&&((!e.replaceAllowance||o[0]===e.amount)&&ln({allowance:o,spendAmount:e.amount,approvalMode:n})||((a=e.onStatus)==null||a.call(e,"approving"),await ca({input:e,kind:"permit2-router",run:async i=>{const s=await fi({provider:e.wallet.provider,publicClient:e.publicClient,account:e.wallet.account,chain:e.activeChain.chain,token:e.token.address,permit2:e.permit2,router:e.router,amount:n==="max"?void 0:e.amount,signal:e.signal,...i});if(e.replaceAllowance){const l=await Rn(async()=>(t(),ze({publicClient:e.publicClient,permit2:e.permit2,account:e.wallet.account,token:e.token.address,router:e.router})),c=>c[0]===e.amount&&(e.amount===0n||ln({allowance:c,spendAmount:e.amount,approvalMode:"exact"})),5,300);if(t(),l[0]!==e.amount||e.amount!==0n&&!ln({allowance:l,spendAmount:e.amount,approvalMode:"exact"}))throw new Error("Approval confirmed, but the spending cap does not match your specified limit.");}return s;}}),t(),await((r=e.onAuthorizationCheckpoint)==null?void 0:r.call(e)),t()));}async function q0(e){ia(e);const t=sa(e),n=()=>Nn(t);return n(),Ae(t.token.address)?{approvalHash:null}:t.amount<=0n&&(t.approvalMode??"exact")!=="max"?{approvalHash:null}:(await Qe({provider:t.wallet.provider,chain:t.activeChain,signal:t.signal}),n(),{approvalHash:await fs(t)});}async function L0(e){ia(e,!0);const t=sa(e),n=()=>Nn(t);n(),!Ae(t.token.address)&&(t.amount<=0n&&!t.replaceAllowance&&(t.approvalMode??"exact")!=="max"||(await Qe({provider:t.wallet.provider,chain:t.activeChain,signal:t.signal}),n(),await hs(t)));}async function ws(e){var s,l;ia(e);const t=sa(e),n=()=>{var c;return(c=t.signal)==null?void 0:c.throwIfAborted();};if(n(),t.amount<=0n||Ae(t.token.address))return{approvalHash:null,permit:null};n(),await Qe({provider:t.wallet.provider,chain:t.activeChain,signal:t.signal}),n();const o=await fs(t);if(n(),(t.permit2AuthorizationMode??"spending-cap")==="spending-cap")return await hs(t),{approvalHash:o,permit:null};n(),(s=t.onStatus)==null||s.call(t,"signing");const a=t.approvalMode??"exact",r=ze({publicClient:t.publicClient,permit2:t.permit2,account:t.wallet.account,token:t.token.address,router:t.router}),i=await ca({input:t,kind:"permit2-router",run:c=>Ko({wallet:t.wallet,publicClient:t.publicClient,activeChain:t.activeChain,permit2:t.permit2,router:t.router,token:t.token.address,amount:t.amount,approvalMode:a,allowanceRead:r,signal:t.signal,setStatus:p=>{var u;return(u=t.onStatus)==null?void 0:u.call(t,p);},...c})});return n(),await((l=e.onAuthorizationCheckpoint)==null?void 0:l.call(e)),n(),{approvalHash:o,permit:i};}async function U0(e){var n;const t=_p(e);return(n=e.onStatus)==null||n.call(e,"approving"),On({wallet:e.wallet,publicClient:e.publicClient,activeChain:e.activeChain,tx:t,...(e.signal!==void 0?{signal:e.signal}:{}),...(e.onStatus?{onStatus:e.onStatus}:{}),...(e.onWalletRequest?{onWalletRequest:e.onWalletRequest}:{}),...(e.onTxHash?{onTxHash:e.onTxHash}:{}),...(e.onTransactionObservation?{onTransactionObservation:e.onTransactionObservation}:{})});}async function Up(e){const t=pe(e.market.chainId);if(!t)throw new Error(`No trusted Aegis Engine deployment is configured for chain ${e.market.chainId}.`);if(!e.market.vaultRegistry||!w(e.market.vaultRegistry,t.vaultRegistry))throw new Error("VaultRegistry does not match the trusted Engine deployment.");const[n,o]=await Promise.all([e.vaultId===void 0?Promise.resolve(null):e.publicClient.readContract({address:t.vaultRegistry,abi:hr,functionName:"getApproved",args:[e.vaultId]}),e.publicClient.readContract({address:t.vaultRegistry,abi:hr,functionName:"isApprovedForAll",args:[e.owner,t.aegisRouterV1]})]);return o||n!==null&&w(n,t.aegisRouterV1);}async function Vp(e){var n;const t=pe(e.market.chainId);if(!t)throw new Error(`No trusted Aegis Engine deployment is configured for chain ${e.market.chainId}.`);if(!e.market.router||!w(e.market.router,t.aegisRouterV1))throw new Error("Router does not match the trusted Engine deployment.");if(!e.market.vaultRegistry||!w(e.market.vaultRegistry,t.vaultRegistry))throw new Error("VaultRegistry does not match the trusted Engine deployment.");return(n=e.onStatus)==null||n.call(e,"approving"),On({wallet:e.wallet,publicClient:e.publicClient,activeChain:e.activeChain,tx:{to:t.vaultRegistry,data:Ne({abi:ps,functionName:"setApprovalForAll",args:[t.aegisRouterV1,!0]}),value:0n},...(e.signal!==void 0?{signal:e.signal}:{}),...(e.onStatus?{onStatus:e.onStatus}:{}),...(e.onWalletRequest?{onWalletRequest:e.onWalletRequest}:{}),...(e.onTxHash?{onTxHash:e.onTxHash}:{}),...(e.onTransactionObservation?{onTransactionObservation:e.onTransactionObservation}:{})});}function kr(e){if(e.expiresAt===void 0)return;const t=e.minimumValiditySeconds??0n;if(t<0n)throw new TypeError("Engine transaction minimum validity cannot be negative.");if(BigInt(Math.floor(Date.now()/1e3))+t>=e.expiresAt)throw new _(Rp);}async function On(e){var a,r,i,s,l,c,p;(a=e.signal)==null||a.throwIfAborted(),await Qe({provider:e.wallet.provider,chain:e.activeChain,...(e.signal?{signal:e.signal}:{})}),(r=e.signal)==null||r.throwIfAborted(),kr(e),(i=e.onStatus)==null||i.call(e,"submitting"),(s=e.signal)==null||s.throwIfAborted();let t;try{t=await e.publicClient.estimateGas({account:e.wallet.account,to:e.tx.to,data:e.tx.data,value:e.tx.value});}catch(u){throw(l=e.signal)==null||l.throwIfAborted(),Op(u)?new _(Bp,{kind:"rpc",retryable:!0}):new _(await qp(u,e));}(c=e.signal)==null||c.throwIfAborted(),kr(e);const{receipt:n,summary:o}=await Si({wallet:e.wallet,publicClient:e.publicClient,chain:e.activeChain.chain,to:e.tx.to,data:e.tx.data,value:e.tx.value,gas:t*125n/100n,cancelledMessage:"Engine transaction was cancelled in the wallet.",revertedMessage:"Engine transaction reverted on-chain.",...(e.signal!==void 0?{signal:e.signal}:{}),onTransactionObservation:e.onTransactionObservation,onWalletRequest:e.onWalletRequest,onHash:e.onTxHash,onSubmitted:e.onSubmitted});return(p=e.onStatus)==null||p.call(e,"success"),{hash:n.transactionHash,explorerUrl:Mo(n.transactionHash,e.activeChain),receipt:n,summary:o};}function V0(e){return e.router?e.permit2?e.stateView?e.v4StateView?e.v4Quoter?null:"Missing V4 quoter.":"Missing V4 StateView.":"Missing StateView.":"Missing Permit2.":"Missing engine router.";}const bs=/* @__PURE__ */new WeakMap();function ks(e){const t=pe(e.chainId),n=St(e.chainId);if(!t||!n||!e.lendEnabled||e.canLend===!1)throw new _("Balanced lending is unavailable for this market.");if([[e.engine,t.aegisEngine],[e.router,t.aegisRouterV1],[e.permit2,t.permit2],[e.stateView,t.aegisStateView],[e.v4StateView,t.stateView],[e.poolKey.hooks,t.aegisHook]].some(([a,r])=>!a||!w(a,r))||!ee(je(e.poolKey),e.poolId)||!w(e.token0.address,e.poolKey.currency0)||!w(e.token1.address,e.poolKey.currency1)||[e.token0,e.token1].some(a=>a.chainId!==e.chainId||!Number.isInteger(a.decimals)||a.decimals<0||a.decimals>255))throw new _("The market does not match the trusted Engine deployment.");return{registry:t,version:n};}async function vr(e,t,n){var a;const o=await e.getBlock(n?{blockTag:"latest"}:{blockNumber:t.blockNumber});return o.number===t.blockNumber&&((a=o.hash)==null?void 0:a.toLowerCase())===t.blockHash.toLowerCase();}async function Er(e){var b,k,E,T,S,B,A;(b=e.signal)==null||b.throwIfAborted();const t=structuredClone(e.market),{registry:n,version:o}=ks(t);if(!xr(e.owner)||w(e.owner,ie)||e.nativeGasReserve<0n)throw new _("Balanced lending requires an account and a valid native reserve.");if(e.publicClient.chain&&e.publicClient.chain.id!==t.chainId||(await e.publicClient.getChainId())!==t.chainId)throw new _("Select the market network before quoting.");(k=e.signal)==null||k.throwIfAborted();const{fetchLendQuoteContext:a,quoteBalancedDeposit:r}=await Q(),i=await a(e.publicClient,{chainId:t.chainId,version:o,poolId:t.poolId});if((E=e.signal)==null||E.throwIfAborted(),!ee(je(i.market.poolKey),t.poolId)||!ee(i.poolId,t.poolId)||i.chainId!==t.chainId||i.version!==o)throw new _("The live pool does not match this market.");const{frame:s}=i,l=await e.publicClient.getBalance({address:e.owner,blockNumber:s.blockNumber}),c=await Promise.all([t.token0,t.token1].map(async g=>{var W;const C=w(g.address,ie),[M,q]=C?[l,(W=e.publicClient.chain)==null?void 0:W.nativeCurrency.decimals]:await Promise.all([e.publicClient.readContract({address:g.address,abi:Jn,functionName:"balanceOf",args:[e.owner],blockNumber:s.blockNumber}),e.publicClient.readContract({address:g.address,abi:Jn,functionName:"decimals",blockNumber:s.blockNumber})]);if(q!==g.decimals)throw new _("Token precision changed. Refresh the market before continuing.");return M;}));(T=e.signal)==null||T.throwIfAborted();const p={balance0:c[0],balance1:c[1],nativeBalance:l,nativeGasReserve:e.nativeGasReserve},u=r({market:i.market,frame:s,chainId:i.chainId,version:i.version,owner:e.owner,approvalSpender:n.aegisRouterV1,amount0Max:e.amount0Max,amount1Max:e.amount1Max,sharePriceWad:i.sharePriceWad,totalShares:i.totalShares,slippageBps:e.slippageBps,deadline:s.blockTimestamp+60n,funding:p,...(i.apy.available?{apyProjection:i.apy.projection}:{})});let m=u.feasible?"indicative":"infeasible",d=u.infeasibleReason,h=null;if(!(await vr(e.publicClient,s,!!e.withExecutionEvidence)))m="refresh-required",d="frame-changed";else if(e.withExecutionEvidence&&u.feasible&&u.call){const g={to:n.aegisRouterV1,data:u.call.calldata,value:u.call.value};try{await e.publicClient.request({method:"eth_call",params:[{from:e.owner,to:g.to,data:g.data,value:zs(g.value)},{blockHash:s.blockHash,requireCanonical:!0}]}),(S=e.signal)==null||S.throwIfAborted(),(await vr(e.publicClient,s,!0))?(m="verified-at-frame",h=g):(m="refresh-required",d="frame-changed");}catch{(B=e.signal)==null||B.throwIfAborted(),m="preflight-failed",d="Could not verify both token authorizations and this deposit. Refresh and try again.";}}(A=e.signal)==null||A.throwIfAborted();const f={kind:"lend-balanced",owner:e.owner,market:t,slippageBps:e.slippageBps,frame:s,expiresAt:u.expiresAt,feasible:u.feasible,reason:d,execution:m,deposit:u.deposit,approvalPlans:u.approvalPlans,walletRemainder:u.walletRemainder,funding:p,limitingSide:u.limitingSide,nativeValue:u.nativeValue,display:u.display,postDeposit:u.postDeposit,tx:h};return f.feasible&&f.deposit&&m!=="refresh-required"&&bs.set(f,{market:structuredClone(t),owner:e.owner,amount0Max:f.deposit.amount0Max,amount1Max:f.deposit.amount1Max,minDeltaShares:f.deposit.minDeltaShares,nativeValue:f.nativeValue,slippageBps:e.slippageBps,nativeGasReserve:e.nativeGasReserve}),f;}async function $0(e){var s,l,c,p,u,m;(s=e.signal)==null||s.throwIfAborted(),await((l=e.onCheckpoint)==null?void 0:l.call(e));const t=bs.get(e.quote);if(!t||!w(t.owner,e.wallet.account)||e.activeChain.chain.id!==t.market.chainId||e.activeChain.chainId!==t.market.chainId)throw new _("Review a fresh balanced deposit for this account and network.");ks(t.market);const n={...t,publicClient:e.publicClient,signal:e.signal},o=d=>d.feasible&&d.deposit!==null&&d.execution!=="refresh-required"&&d.deposit.amount0Max<=t.amount0Max&&d.deposit.amount1Max<=t.amount1Max&&d.deposit.minDeltaShares>=t.minDeltaShares&&d.nativeValue<=t.nativeValue,a=await Er(n);if(await((c=e.onCheckpoint)==null?void 0:c.call(e)),!o(a))return{status:"review-required",quote:a};for(const[d,h]of[[t.market.token0,t.amount0Max],[t.market.token1,t.amount1Max]])(p=e.signal)==null||p.throwIfAborted(),await((u=e.onCheckpoint)==null?void 0:u.call(e)),await ws({wallet:e.wallet,publicClient:e.publicClient,activeChain:e.activeChain,token:d,amount:h,market:t.market,approvalMode:"exact",permit2AuthorizationMode:"spending-cap",signal:e.signal,onStatus:e.onStatus,onAuthorizationExecution:e.onAuthorizationExecution,onAuthorizationCheckpoint:async()=>{var f,b;(f=e.signal)==null||f.throwIfAborted(),await((b=e.onCheckpoint)==null?void 0:b.call(e));}});const r=await Er({...n,withExecutionEvidence:!0});return await((m=e.onCheckpoint)==null?void 0:m.call(e)),!o(r)||!r.tx||r.execution!=="verified-at-frame"?{status:"review-required",quote:r}:{status:"confirmed",result:await On({wallet:e.wallet,publicClient:e.publicClient,activeChain:e.activeChain,tx:r.tx,signal:e.signal,expiresAt:r.expiresAt,minimumValiditySeconds:5n,onStatus:e.onStatus,onTxHash:e.onTxHash,onSubmitted:e.onSubmitted,onTransactionObservation:e.onTransactionObservation})};}const la=1000000n,$p=5e3;function H0(e){return Math.max(0,e-$p);}function ua(e){if(e.idle0<0n||e.idle1<0n||e.debtLLatest<0n)throw new RangeError("Engine idle and debt amounts must be non-negative.");if(!Number.isSafeInteger(e.maxLtvPips)||e.maxLtvPips<0||e.maxLtvPips>Number(la))throw new RangeError("Engine maxLtvPips must be an integer between 0 and 1,000,000.");}function vs(e,t){return e===0n?0n:(e-1n)/t+1n;}function Hp(e){if(e<2n)return e;let t=1n<<BigInt(Math.ceil(e.toString(2).length/2));for(;;){const n=(t+e/t)/2n;if(n>=t)return t;t=n;}}function Es(e){return vs(e.debtLLatest*la,BigInt(e.maxLtvPips));}function W0(e){if(ua(e),e.debtLLatest===0n)return!0;if(e.maxLtvPips===0)return!1;const t=Es(e);return e.idle0*e.idle1>=t*t;}function K0(e){ua(e);const t=e.side==="token0"?e.idle0:e.idle1;if(t===0n||e.debtLLatest===0n)return t;if(e.maxLtvPips===0)return 0n;const n=e.side==="token0"?e.idle1:e.idle0;if(n===0n)return 0n;const o=Es(e),a=vs(o*o,n);return a>=t?0n:t-a;}function z0(e){if(ua(e),e.withdrawAmount<0n)throw new RangeError("Engine withdrawal amount must be non-negative.");if(e.debtLLatest===0n)return null;const t=e.side==="token0"?e.idle0:e.idle1;if(e.withdrawAmount>t)return null;const n=e.side==="token0"?e.idle0-e.withdrawAmount:e.idle0,o=e.side==="token1"?e.idle1-e.withdrawAmount:e.idle1,a=Hp(n*o);if(a===0n)return null;const r=e.debtLLatest*la/a;return Number(r>BigInt(Number.MAX_SAFE_INTEGER)?Number.MAX_SAFE_INTEGER:r);}const yr=10n**18n;function ys(e,t){return e.toLowerCase()===t.toLowerCase();}function Wp(e){try{return[BigInt(e.deltaAmount0Raw),BigInt(e.deltaAmount1Raw)];}catch{return null;}}function Qn(e,t){const n=Wp(e);if(!n)return null;const[o,a]=n,r=i=>t==="positive"?i>0n:i<0n;return r(o)&&a===0n?0:r(a)&&o===0n?1:null;}function Kp(e,t,n){if(t===null||n===null||!Number.isSafeInteger(t)||!Number.isSafeInteger(n)||t<0||n<0||t>255||n>255)return null;try{const o=BigInt(e.deltaIdle0Raw),a=BigInt(e.deltaIdle1Raw),r=o<0n?-o:o,i=a<0n?-a:a;if(r===0n||i===0n)return null;const s=i*10n**BigInt(t)*yr/(r*10n**BigInt(n)),l=Number(s)/Number(yr);return Number.isFinite(l)&&l>0?l:null;}catch{return null;}}function Is(e){if(!e||typeof e!="object")return!1;const t=e;return t.schemaVersion==="1"&&typeof t.chainId=="number"&&Number.isSafeInteger(t.chainId)&&t.chainId>0&&typeof t.account=="string"&&/^0x[0-9a-fA-F]{40}$/.test(t.account)&&typeof t.marketId=="string"&&t.marketId.length>0&&typeof t.poolId=="string"&&/^0x[0-9a-fA-F]{64}$/.test(t.poolId)&&typeof t.txHash=="string"&&/^0x[0-9a-fA-F]{64}$/.test(t.txHash)&&(t.direction==="long"||t.direction==="short")&&typeof t.averageLeverage=="number"&&Number.isFinite(t.averageLeverage)&&t.averageLeverage>1&&typeof t.targetPrice=="number"&&Number.isFinite(t.targetPrice)&&t.targetPrice>0&&typeof t.horizonSeconds=="number"&&Number.isSafeInteger(t.horizonSeconds)&&t.horizonSeconds>=0&&typeof t.recordedAt=="string"&&Number.isFinite(Date.parse(t.recordedAt));}function G0(e){return Is(e);}function zp(e,t,n,o,a){return a.find(r=>Is(r)&&r.chainId===e.chainId&&w(r.account,e.account)&&ee(r.poolId,e.poolId)&&ys(r.txHash,n)&&r.direction===o&&(t===null||Xt(r.marketId,t)))??null;}function j0(e,t,n=[]){var S,B,A;let o,a;try{o=BigInt(e.vaultId),a=BigInt(t.vaultId);}catch{return null;}if(o!==a||!ee(e.poolId,t.poolId)||e.marketId!=null&&t.marketId!=null&&!Xt(e.marketId,t.marketId))return null;const r=e.marketId??t.marketId,i=t.actions.filter(g=>g.kind==="vault_created");if(i.length!==1)return null;const s=i[0];if(!w(s.owner,e.account))return null;const l=t.actions.filter(g=>ys(g.txHash,s.txHash));if(((S=l[0])==null?void 0:S.kind)!=="vault_created")return null;const c=l.filter(g=>g.kind==="debt_modified");if(c.length!==1)return null;const p=c[0];let u;try{u=BigInt(p.principalDeltaActualRaw);}catch{return null;}if(u<=0n)return null;const m=l.indexOf(p),d=l.findIndex((g,C)=>C>m&&g.kind==="vault_locked");if(m<0||d<0)return null;const h=l.slice(0,m).filter(g=>g.kind==="idle_modified"),f=l.slice(m+1,d).filter(g=>g.kind==="idle_modified");if(h.length!==1||f.length!==2)return null;const b=Qn(f[0],"negative");if(b===null)return null;const k=b===0?1:0;if(Qn(h[0],"positive")!==k||Qn(f[1],"positive")!==k)return null;const E=b===1?"long":"short",T=zp(e,r,s.txHash,E,n);return{kind:"trade",vaultId:a.toString(),poolId:t.poolId,direction:E,openTxHash:s.txHash,openedAt:s.timestamp,entryPrice:null,entryPriceBasis:"unavailable",referencePrice:{basis:"debt-action-token-ratio",price:Kp(p,((B=e.token0)==null?void 0:B.decimals)??null,((A=e.token1)==null?void 0:A.decimals)??null)},averageLeverage:(T==null?void 0:T.averageLeverage)??null,targetPrice:(T==null?void 0:T.targetPrice)??null,horizonSeconds:(T==null?void 0:T.horizonSeconds)??null,source:T?"indexed-actions+stored-intent":"indexed-actions"};}const As=/* @__PURE__ */new Set(["1","56","130","8453","4663","57073"]),Gp=v().int().positive().refine(e=>As.has(String(e))),da=x().regex(/^0x[0-9a-fA-F]{40}$/),Ge=x().regex(/^0x[0-9a-fA-F]{64}$/),Ir=x().datetime(),Lt=/^(?:0|[1-9][0-9]*)(?:\.[0-9]*[1-9])?$/,jp=["1d","7d","30d","90d","180d"],Qp=["5m","1h","1d"],gs={"5m":300,"1h":3600,"1d":86400},Ss={"1d":{resolution:"5m",windowSeconds:86400,bucketCount:288},"7d":{resolution:"1h",windowSeconds:604800,bucketCount:168},"30d":{resolution:"1d",windowSeconds:2592e3,bucketCount:30},"90d":{resolution:"1d",windowSeconds:7776e3,bucketCount:90},"180d":{resolution:"1d",windowSeconds:15552e3,bucketCount:180}},Cs=$(jp),Xp=$(Qp);R({window:Cs.default("1d"),basis:$(["pool","token_market_reference"]).default("pool")});const ma=x().max(90).regex(/^evm_[1-9][0-9]{0,15}_0x[0-9a-fA-F]{64}$/,"Must be a canonical Engine market id").refine(e=>As.has(e.split("_")[1]??""),"Unsupported chainId"),Yp=$(["uniswap_v4_subgraph","pool_manager_rpc"]),Jp=$(["ready","warming_up","source_unavailable","reorg_detected"]),Zp=$(["ENGINE-CANDLE-SOURCE-001","ENGINE-CANDLE-SOURCE-002","ENGINE-CANDLE-SOURCE-003","ENGINE-CANDLE-SOURCE-004","ENGINE-CANDLE-SOURCE-005","ENGINE-CANDLE-SOURCE-006","ENGINE-CANDLE-SOURCE-010","ENGINE-CANDLE-REORG-001"]),wn=R({address:da,decimals:v().int().min(0).max(255)}).strict(),Ar=R({blockNumber:v().int().nonnegative(),blockHash:Ge.nullable(),transactionHash:Ge,logIndex:v().int().nonnegative()}).strict(),xs={t:v().int().nonnegative(),open:v().positive(),high:v().positive(),low:v().positive(),close:v().positive(),volumeToken0:x().regex(Lt),volumeToken1:x().regex(Lt)},Ts=e=>e.low<=Math.min(e.open,e.close)&&e.high>=Math.max(e.open,e.close)&&e.low<=e.high,ef=R({...xs,aggregation:D("exact_swaps"),swapCount:v().int().positive(),provenance:R({firstSwap:Ar,lastSwap:Ar}).strict()}).strict().superRefine((e,t)=>{e.volumeToken0==="0"&&e.volumeToken1==="0"&&t.addIssue({code:"custom",message:"Swap candle must have volume"}),Ts(e)||t.addIssue({code:"custom",message:"Invalid candle OHLC ordering"});const n=e.provenance.firstSwap,o=e.provenance.lastSwap;(n.blockNumber>o.blockNumber||n.blockNumber===o.blockNumber&&n.logIndex>o.logIndex)&&t.addIssue({code:"custom",message:"Invalid candle provenance order"});}),tf=R({...xs,aggregation:D("uniswap_pool_aggregate"),txCount:v().int().nonnegative(),volumeUSD:x().regex(Lt).optional(),feesUSD:x().regex(Lt).optional(),tvlUSD:x().regex(Lt).optional()}).strict().superRefine((e,t)=>{Ts(e)||t.addIssue({code:"custom",message:"Invalid candle OHLC ordering"});}),nf=Gt("aggregation",[ef,tf]),of=R({requestedFrom:v().int().nonnegative(),requestedTo:v().int().nonnegative(),coverageStart:v().int().nonnegative(),completedThrough:v().int().nonnegative(),expectedBucketCount:v().int().min(1).max(288),completeBucketCount:v().int().min(0).max(288)}).strict().superRefine((e,t)=>{e.coverageStart===0&&e.completedThrough===0||e.coverageStart>0&&e.completedThrough>e.coverageStart||t.addIssue({code:"custom",message:"Invalid candle coverage"});}),af=R({from:v().int().nonnegative(),to:v().int().nonnegative(),reason:$(["indexing_gap","invalid_row"])}).strict(),rf=R({blockNumber:v().int().nonnegative().nullable(),blockHash:Ge.nullable(),timestamp:v().int().nonnegative().nullable()}).strict().superRefine((e,t)=>{const n=[e.blockNumber,e.blockHash,e.timestamp].filter(o=>o===null).length;n!==0&&n!==3&&t.addIssue({code:"custom",message:"Partial as-of provenance"});}),sf=R({status:Jp,lastProcessedBlockNumber:v().int().nonnegative().nullable(),lastProcessedBlockHash:Ge.nullable(),confirmationDepth:v().int().nonnegative(),observedAt:Ir,updatedAt:Ir,warnings:F(Zp).max(8)}).strict().superRefine((e,t)=>{e.lastProcessedBlockNumber===null!=(e.lastProcessedBlockHash===null)&&t.addIssue({code:"custom",message:"Partial cursor provenance"});}),bn=R({schemaVersion:D("2"),chainId:Gp,marketId:ma,poolId:Ge,poolManager:da,baseAsset:wn,quoteAsset:wn,orientation:D("quote_per_base"),resolution:Xp,window:Cs,status:$(["ready","partial","no_data"]),candles:F(nf).max(288),candleCount:v().int().min(0).max(288),priceReference:R({kind:D("pool_state"),price:v().finite().positive(),blockNumber:v().int().nonnegative(),blockHash:Ge,timestamp:v().int().nonnegative(),observedAt:x().datetime()}).strict().nullable().optional(),coverage:of,gaps:F(af).max(288),source:Yp,asOf:rf,freshness:sf}).strict().superRefine((e,t)=>{const n=Ss[e.window],o=gs[n.resolution];(e.resolution!==n.resolution||e.coverage.requestedTo-e.coverage.requestedFrom!==n.windowSeconds||e.coverage.expectedBucketCount!==n.bucketCount||e.coverage.requestedFrom%o!==0||e.coverage.requestedTo%o!==0||e.coverage.coverageStart%o!==0||e.coverage.completedThrough%o!==0)&&t.addIssue({code:"custom",message:"Window, resolution, and coverage plan disagree"}),e.candles.some(d=>e.resolution==="5m"?d.aggregation!=="exact_swaps":d.aggregation!=="uniswap_pool_aggregate")&&t.addIssue({code:"custom",message:"Candle aggregation disagrees with resolution"});const a=/^evm_([0-9]+)_(0x[0-9a-fA-F]{64})$/.exec(e.marketId);(!a||Number(a[1])!==e.chainId||a[2].toLowerCase()!==e.poolId.toLowerCase())&&t.addIssue({code:"custom",message:"Market identity mismatch"}),e.baseAsset.address.toLowerCase()>=e.quoteAsset.address.toLowerCase()&&t.addIssue({code:"custom",message:"Assets must use canonical token0/token1 ordering"}),e.candleCount!==e.candles.length&&t.addIssue({code:"custom",message:"candleCount does not match candles"}),e.candleCount>e.coverage.completeBucketCount&&t.addIssue({code:"custom",message:"Candles exceed complete buckets"}),e.status==="no_data"&&e.candleCount!==0&&t.addIssue({code:"custom",message:"no_data cannot contain candles"}),e.status==="partial"&&e.candleCount===0&&!e.gaps.some(d=>d.reason==="invalid_row")&&t.addIssue({code:"custom",message:"empty partial response requires a rejected row gap"});let r=-1;for(const d of e.candles){if(d.t%o!==0||d.t<e.coverage.requestedFrom||d.t<e.coverage.coverageStart||d.t>=e.coverage.requestedTo||d.t>=e.coverage.completedThrough||d.t<=r){t.addIssue({code:"custom",message:"Candles must be aligned and ordered"});break;}r=d.t;}let i=-1,s=0;const l=Math.max(e.coverage.requestedFrom,e.coverage.coverageStart),c=Math.min(e.coverage.requestedTo,e.coverage.completedThrough);for(const d of e.gaps){if(d.from%o!==0||d.to%o!==0||d.to<=d.from||d.from<l||d.to>c||d.from<i){t.addIssue({code:"custom",message:"Gaps must be aligned and ordered"});break;}s+=(d.to-d.from)/o,i=d.to;}e.candles.some(d=>e.gaps.some(h=>d.t>=h.from&&d.t<h.to))&&t.addIssue({code:"custom",message:"A candle cannot overlap a gap"});const p=l<c?(c-l)/o:0;e.coverage.completeBucketCount+s!==p&&t.addIssue({code:"custom",message:"Coverage and gaps are inconsistent"}),e.status==="ready"&&(e.freshness.status!=="ready"||e.coverage.coverageStart>e.coverage.requestedFrom||e.coverage.completedThrough<e.coverage.requestedTo||e.coverage.completeBucketCount!==n.bucketCount||e.gaps.length!==0)&&t.addIssue({code:"custom",message:"ready requires complete coverage"});const u=e.asOf.blockNumber===null||e.freshness.lastProcessedBlockNumber===null,m=e.status==="no_data"&&e.candleCount===0&&e.coverage.coverageStart===0&&e.coverage.completedThrough===0&&e.coverage.completeBucketCount===0&&e.asOf.blockNumber!==null&&(e.freshness.status==="warming_up"||e.freshness.status==="source_unavailable"||e.freshness.status==="reorg_detected")&&e.freshness.lastProcessedBlockNumber===null;!m&&e.asOf.blockNumber===null!=(e.freshness.lastProcessedBlockNumber===null)&&t.addIssue({code:"custom",message:"Source head and cursor availability must match"}),e.asOf.blockNumber!==null&&e.freshness.lastProcessedBlockNumber!==null&&(e.freshness.lastProcessedBlockNumber>e.asOf.blockNumber||e.candles.some(d=>d.aggregation==="exact_swaps"&&d.provenance.lastSwap.blockNumber>e.asOf.blockNumber))&&t.addIssue({code:"custom",message:"Provenance exceeds source head"}),e.freshness.lastProcessedBlockNumber!==null&&e.candles.some(d=>d.aggregation==="exact_swaps"&&d.provenance.lastSwap.blockNumber>e.freshness.lastProcessedBlockNumber)&&t.addIssue({code:"custom",message:"Provenance exceeds processed cursor"}),e.asOf.blockNumber!==null&&e.asOf.blockHash!==null&&e.freshness.lastProcessedBlockNumber===e.asOf.blockNumber&&e.freshness.lastProcessedBlockHash!==e.asOf.blockHash&&t.addIssue({code:"custom",message:"Cursor hash disagrees with source head"});for(const d of e.candles){if(d.aggregation!=="exact_swaps")continue;const{firstSwap:h,lastSwap:f}=d.provenance;h.blockNumber===f.blockNumber&&h.blockHash!==f.blockHash&&t.addIssue({code:"custom",message:"Same-block candle provenance hash mismatch"}),e.source==="pool_manager_rpc"&&(h.blockHash===null||f.blockHash===null)&&t.addIssue({code:"custom",message:"RPC candle provenance requires block hashes"});for(const b of[h,f])e.asOf.blockNumber!==null&&e.asOf.blockHash!==null&&b.blockNumber===e.asOf.blockNumber&&b.blockHash!==null&&b.blockHash!==e.asOf.blockHash&&t.addIssue({code:"custom",message:"Swap block hash disagrees with source head"}),e.freshness.lastProcessedBlockNumber!==null&&e.freshness.lastProcessedBlockHash!==null&&b.blockNumber===e.freshness.lastProcessedBlockNumber&&b.blockHash!==null&&b.blockHash!==e.freshness.lastProcessedBlockHash&&t.addIssue({code:"custom",message:"Swap block hash disagrees with source cursor"});}e.asOf.timestamp!==null&&e.coverage.completedThrough>Math.floor(e.asOf.timestamp/o)*o&&t.addIssue({code:"custom",message:"Completed coverage exceeds source time"}),u&&!m&&(e.freshness.status!=="source_unavailable"||e.coverage.completeBucketCount!==0)&&t.addIssue({code:"custom",message:"Null provenance is only valid before the first source read"});}),Eo=R({blockNumber:v().int().positive(),blockHash:Ge,timestamp:v().int().positive(),observedAt:x().datetime()}).strict(),gr=R({role:$(["base","quote"]),chainId:v().int().positive(),address:da,decimals:v().int().min(0).max(255),resolution:$(["1h","1d"]),sourceDataset:$(["TokenHourData","TokenDayData"]),status:$(["ready","warming_up","source_unavailable"]),independence:D("unknown"),independenceReason:D("historical_price_venue_untracked"),coverageStart:v().int().nonnegative(),completedThrough:v().int().nonnegative(),sourceHead:Eo.nullable()}).strict(),Rs=R({schemaVersion:D("1"),basis:D("token_market_reference"),format:D("line"),method:D("ratio_of_bucket_closes"),sampleSynchronization:D("bucket_only"),usage:D("display_only"),chainId:v().int().positive(),marketId:ma,poolId:Ge,baseAsset:wn,quoteAsset:wn,orientation:D("quote_per_base"),resolution:$(["1h","1d"]),window:$(["7d","30d","90d","180d"]),status:$(["ready","partial","no_data"]),points:F(R({t:v().int().nonnegative(),value:v().finite().positive(),baseCloseUsd:x().regex(/^(?:0|[1-9][0-9]*)(?:\.[0-9]+)?$/),quoteCloseUsd:x().regex(/^(?:0|[1-9][0-9]*)(?:\.[0-9]+)?$/),baseSource:Eo,quoteSource:Eo}).strict()).max(180),pointCount:v().int().min(0).max(180),components:tc([gr,gr]),gaps:F(R({from:v().int().nonnegative(),to:v().int().positive(),reason:$(["missing_component","invalid_component","outside_coverage"])}).strict()).max(180),coverage:R({requestedFrom:v().int().nonnegative(),requestedTo:v().int().positive(),expectedBucketCount:v().int().min(1).max(180),observedPairCount:v().int().min(0).max(180)}).strict(),source:D("uniswap_v4_subgraph"),attribution:R({label:D("Uniswap V4 subgraph"),url:D("https://github.com/Uniswap/v4-subgraph")}).strict()}).strict();To([bn,Rs]);const un=x().regex(/^(0|[1-9][0-9]*)$/).max(78).refine(e=>/^(0|[1-9][0-9]*)$/.test(e)&&e.length<=78&&BigInt(e)<1n<<256n),re=v().int().nonnegative().max(Number.MAX_SAFE_INTEGER),Sr=v().nonnegative().nullable(),cf=Gt("status",[R({status:D("verified"),basis:D("irm-accrual-preview"),rpcBlockNumber:re,blockHash:x().regex(/^0x[0-9a-f]{64}$/),observedAt:x().datetime(),elapsedSeconds:un,canonicality:D("rpc-checked-at-read"),finality:D("not-a-finality-verdict")}).strict(),R({status:D("unavailable"),reason:$(["legacy-unpinned","invalid-provenance"])}).strict()]),lf=R({t:re,observedAt:x().datetime(),evmBlockNumber:re,borrowAprPct:Sr,lendAprPct:Sr,lendingRateBasis:D("simple-borrow-interest-apr"),utilizationPct:v().min(0).max(100).nullable(),ratePerSecondWad:un.nullable(),fullUtilizationRate:un.nullable(),sharePriceWad:un.nullable(),rateObservation:cf}).strict(),uf=R({schemaVersion:D("1"),marketId:x().regex(/^evm_[0-9]+_0x[0-9a-fA-F]+$/),resolution:D("12h"),window:$(["7d","30d","60d"]),status:$(["ready","partial","warming_up","no_data"]),pointCount:re,points:F(lf).max(121),updatedAt:x().datetime().nullable(),coverage:R({fromBucket:re,throughClosedBucket:re,expectedClosedBuckets:re,firstObservedBucket:re.nullable(),leadingMissingBucketCount:re,presentClosedBuckets:re,missingBuckets:F(re).max(120),missingRateBuckets:F(re).max(120),verifiedRatePoints:re,legacyRatePoints:re,invalidRows:re}).strict()}).strict(),df=To([bn,R({schemaVersion:D("1"),history:bn,segments:F(R({from:v().int().nonnegative(),to:v().int().nonnegative(),price:v().finite().positive()}).strict()).max(289)}).strict()]).superRefine((e,t)=>{if(!("segments"in e))return;const n=e.history;let o=-1/0;for(const a of e.segments){if(a.from<Math.max(n.coverage.requestedFrom,n.coverage.coverageStart)||a.to>Math.min(n.coverage.requestedTo,n.coverage.completedThrough)||a.to<a.from||a.from<o||n.freshness.status==="reorg_detected"||n.gaps.some(r=>a.from<r.to&&a.to>r.from)){t.addIssue({code:"custom",message:"Price segments exceed verified coverage"});break;}o=a.to;}});class ue extends Error{constructor(n,o=503,a=null){super("Engine market data is unavailable.");j(this,"name","AegisEngineMarketDataReadError");this.code=n,this.status=o,this.retryAfterSeconds=a;}}function se(){throw new ue("invalid-response");}const mf=3e4,yo=16,Bs=Te({ttlMs:mf,maxEntries:yo}),tt=/* @__PURE__ */new Map();let Io=0,Xn=0;function Q0(){Bs.clear(),tt.clear(),Io++;}function Fn(e,t,n,o){var c;(c=e.signal)==null||c.throwIfAborted();const a={...e.source,headers:{...e.source.headers}},r=JSON.stringify([zt(a.baseUrl),Co(a.headers),a.timeoutMs??15e3,e.marketId,t,n]);for(const[p,u]of tt)u.until<=Date.now()&&tt.delete(p);const i=tt.get(r);if(i&&i.until>Date.now())return Promise.reject(new ue(i.error.code,i.error.status,Math.ceil((i.until-Date.now())/1e3)));tt.delete(r);const s=Io,l=Bs.read(r,async()=>{if(Xn>=yo||tt.size>=yo)throw new ue("unavailable",503,30);Xn++;try{return await o({...e,source:a,signal:void 0});}catch(p){const u=p instanceof ue?p:p instanceof Error&&p.name==="TimeoutError"?new ue("unavailable",504):null;if(s===Io&&u&&(u.status===404||u.status===408||u.status===429||u.status>=500)&&u.code==="unavailable"){const m=Math.max(u.status===404?60:30,u.retryAfterSeconds??0);tt.set(r,{until:Date.now()+m*1e3,error:u});}throw p;}finally{Xn--;}});return He(l,e.signal,"Engine market request aborted.").then(p=>structuredClone(p));}function pa(e,t){if(e)for(const n of["baseAsset","quoteAsset"])(e[n].address.toLowerCase()!==t[n].address.toLowerCase()||e[n].decimals!==t[n].decimals)&&se();}async function qn(e,t,n,o){var c,p,u;if(!ma.safeParse(e.marketId).success)throw new ue("invalid-query",400);const a=e.source.timeoutMs??15e3;if(!Number.isFinite(a)||a<=0||a>12e4)throw new RangeError("Market request timeout must be between 1 and 120000 milliseconds.");const{signal:r,cleanup:i}=ut({signal:e.signal,timeoutMs:a,timeoutMessage:"Engine market request timed out."});let s;const l=()=>{s==null||s.cancel().catch(()=>{});};try{r==null||r.throwIfAborted();const m=zt(e.source.baseUrl),d=await fetch(`${m}${t.replace("{marketId}",encodeURIComponent(e.marketId))}?${new URLSearchParams(n)}`,{headers:e.source.headers,signal:r,cache:"no-store"});if(!d.ok)throw(c=d.body)==null||c.cancel().catch(()=>{}),new ue("unavailable",d.status,xo(d.headers.get("retry-after"),300));const h=512*1024;if(Number(d.headers.get("content-length"))>h)throw(p=d.body)==null||p.cancel().catch(()=>{}),new ue("response-limit");s=(u=d.body)==null?void 0:u.getReader(),s||se(),r==null||r.addEventListener("abort",l,{once:!0});const f=[];let b=0;for(;;){r==null||r.throwIfAborted();const B=await s.read();if(r==null||r.throwIfAborted(),B.done)break;if(b+=B.value.byteLength,b>h)throw new ue("response-limit");f.push(B.value);}const k=new Uint8Array(b);let E=0;for(const B of f)k.set(B,E),E+=B.length;let T;try{T=JSON.parse(new TextDecoder().decode(k));}catch{se();}const S=o.safeParse(T);return S.success||se(),S.data;}catch(m){throw r==null||r.throwIfAborted(),m instanceof ue?m:new ue("unavailable");}finally{r==null||r.removeEventListener("abort",l),l(),s==null||s.releaseLock(),i();}}function fa(e,t,n){var a;const o=e.marketId.split("_");(t.marketId!==e.marketId||t.chainId!==Number(o[1])||t.poolId.toLowerCase()!==((a=o[2])==null?void 0:a.toLowerCase())||t.window!==n)&&se();}async function pf(e){const t=e.window??"1d";if(!["1d","7d","30d","90d","180d"].includes(t))throw new ue("invalid-query",400);const n=await qn(e,"/v1/engine/markets/{marketId}/candles",{window:t,basis:"pool"},bn);return fa(e,n,t),n;}async function ff(e){const t=e.window??"7d";if(!["7d","30d","90d","180d"].includes(t))throw new ue("invalid-query",400);const n=await qn(e,"/v1/engine/markets/{marketId}/candles",{window:t,basis:"token_market_reference"},Rs);return fa(e,n,t),hf(n),n;}function hf(e){const t=Ss[e.window],n=t.resolution==="1h"?3600:86400,o=e.coverage;(e.resolution!==t.resolution||o.requestedTo-o.requestedFrom!==t.windowSeconds||o.expectedBucketCount!==t.bucketCount||o.requestedFrom%n||o.requestedTo%n||e.pointCount!==e.points.length||o.observedPairCount!==e.pointCount||e.baseAsset.address.toLowerCase()>=e.quoteAsset.address.toLowerCase())&&se();for(const[i,s]of e.components.entries()){const l=i===0?e.baseAsset:e.quoteAsset;(s.role!==(i===0?"base":"quote")||s.address.toLowerCase()!==l.address.toLowerCase()||s.chainId!==e.chainId||s.decimals!==l.decimals||s.resolution!==e.resolution||s.sourceDataset!==(e.resolution==="1h"?"TokenHourData":"TokenDayData")||s.coverageStart>s.completedThrough||s.coverageStart%n||s.completedThrough%n||s.sourceHead&&(s.completedThrough>s.sourceHead.timestamp||Date.parse(s.sourceHead.observedAt)/1e3<s.sourceHead.timestamp))&&se();}let a=-1;for(const i of e.points){const s=Number(i.baseCloseUsd)/Number(i.quoteCloseUsd);(i.t<=a||i.t%n||i.t<o.requestedFrom||i.t>=o.requestedTo||!Number.isFinite(s)||s<=0||Math.abs(s-i.value)>s*1e-12)&&se();for(const[l,c]of[i.baseSource,i.quoteSource].entries()){const p=e.components[l],u=p.sourceHead;(!u||i.t<p.coverageStart||i.t>=p.completedThrough||c.timestamp<i.t+n||c.timestamp>u.timestamp||c.blockNumber>u.blockNumber||c.blockNumber===u.blockNumber&&c.blockHash!==u.blockHash||Date.parse(c.observedAt)/1e3<c.timestamp)&&se();}a=i.t;}a=-1;let r=0;for(const i of e.gaps)(i.from<a||i.from%n||i.to%n||i.to<=i.from||i.from<o.requestedFrom||i.to>o.requestedTo||e.points.some(s=>s.t>=i.from&&s.t<i.to))&&se(),r+=(i.to-i.from)/n,a=i.to;(e.pointCount+r!==o.expectedBucketCount||e.status==="no_data"&&e.pointCount!==0||e.status==="ready"&&(e.gaps.length!==0||e.components.some(i=>i.status!=="ready"||!i.sourceHead)))&&se();}async function wf(e){var d,h;const t=e.window??"30d";if(!["7d","30d","60d"].includes(t))throw new ue("invalid-query",400);const n=await qn(e,"/v1/engine/markets/{marketId}/rates/history",{window:t},uf);(n.marketId!==e.marketId||n.window!==t)&&se();const o=n.coverage,a=Number(t.slice(0,-1))*2,r=43200;(n.pointCount!==n.points.length||n.updatedAt!==(((d=n.points.at(-1))==null?void 0:d.observedAt)??null)||o.expectedClosedBuckets!==a||o.fromBucket%r||o.throughClosedBucket%r||o.throughClosedBucket-o.fromBucket!==(a-1)*r)&&se();let i=-1;const s=/* @__PURE__ */new Map();for(const f of n.points)(f.t<=i||f.t%r||f.t<o.fromBucket||f.t>o.throughClosedBucket+r||Date.parse(f.observedAt)/1e3<f.t||Date.parse(f.observedAt)/1e3>=f.t+r||f.rateObservation.status==="verified"&&(f.rateObservation.observedAt!==f.observedAt||f.ratePerSecondWad===null||BigInt(f.rateObservation.elapsedSeconds)>BigInt(Math.floor(Date.parse(f.observedAt)/1e3))))&&se(),s.set(f.t,f),i=f.t;const l=[],c=[];for(let f=o.fromBucket;f<=o.throughClosedBucket;f+=r){const b=s.get(f);b||l.push(f),(!b||b.borrowAprPct===null||b.lendAprPct===null||b.ratePerSecondWad===null)&&c.push(f);}const p=((h=n.points[0])==null?void 0:h.t)??null,u=p===null?0:l.filter(f=>f<p).length,m=n.pointCount===0?"no_data":n.pointCount===1?"warming_up":c.length>u||o.invalidRows?"partial":"ready";return(JSON.stringify(o.missingBuckets)!==JSON.stringify(l)||JSON.stringify(o.missingRateBuckets)!==JSON.stringify(c)||o.presentClosedBuckets!==a-l.length||o.firstObservedBucket!==p||o.leadingMissingBucketCount!==u||n.status!==m||o.verifiedRatePoints!==n.points.filter(f=>f.rateObservation.status==="verified").length||o.legacyRatePoints!==n.points.filter(f=>f.rateObservation.status==="unavailable"&&f.rateObservation.reason==="legacy-unpinned").length)&&se(),n;}async function X0(e){const t=e.window??"1d",n=await Fn(e,"pool",t,o=>pf({...o,window:t}));return pa(e.expectedAssets,n),n;}async function Y0(e){const t=await Fn(e,"pool_price_line","1d",async n=>{const o=await qn(n,"/v1/engine/markets/{marketId}/candles",{window:"1d",basis:"pool",format:"price_line"},df),a="history"in o?o.history:o;return fa(n,a,"1d"),"segments"in o?{...a,priceSegments:o.segments}:a;});return pa(e.expectedAssets,t),t;}function J0(e){return e.freshness.status==="reorg_detected"?[]:e.priceSegments?e.priceSegments:e.candles.flatMap((t,n)=>{var i;const o=t.t+gs[e.resolution],a=e.gaps.find(s=>s.to>o),r=Math.min(e.coverage.completedThrough,((i=e.candles[n+1])==null?void 0:i.t)??1/0,(a==null?void 0:a.from)??1/0);return r>=o?[{from:o,to:r,price:t.close}]:[];});}async function Z0(e){const t=e.window??"7d",n=await Fn(e,"token_market_reference",t,o=>ff({...o,window:t}));return pa(e.expectedAssets,n),n;}async function eh(e){const t=e.window??"30d";return Fn(e,"rates",t,n=>wf({...n,window:t}));}function th(e){const t=[];let n=0;for(const o of e.candles){const a=t.at(-1),r=a==null?void 0:a.at(-1);for(;r&&e.gaps[n]&&e.gaps[n].to<=r.t;)n++;const i=e.gaps[n];!a||r&&i&&i.from<o.t&&i.to>r.t?t.push([o]):a.push(o);}return t;}const bf=180n,Ao=60n,kf=6e4,vf=/^[A-Za-z0-9._:-]+$/;function H(e,t){return e.toLowerCase()===t.toLowerCase();}function fe(e,t=/* @__PURE__ */new WeakMap()){if(e===null||typeof e!="object")return e;const n=t.get(e);if(n)return n;if(Array.isArray(e)){const a=[];t.set(e,a);for(const r of e)a.push(fe(r,t));return Object.freeze(a);}const o={};t.set(e,o);for(const a of Reflect.ownKeys(e))o[a]=fe(e[a],t);return Object.freeze(o);}function Ef(){var e,t;return((t=(e=globalThis.crypto)==null?void 0:e.randomUUID)==null?void 0:t.call(e))??`aegis-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,14)}`;}function yf(e){const t=e??Ef();if(t.length<8||t.length>128||!vf.test(t))throw new TypeError("Engine execution sessionId must be 8-128 URL-safe correlation characters.");return t;}function Ps(e,t){return e.walletAction===t.walletAction&&H(e.target,t.target)&&(e.spender===null?t.spender===null:t.spender!==null&&H(e.spender,t.spender))&&e.requestedAmount===t.requestedAmount&&e.expiration===t.expiration&&e.scope===t.scope;}function ha(e,t){return e.operation===t.operation&&e.chainId===t.chainId&&H(e.account,t.account)&&e.marketId===t.marketId&&H(e.token.address,t.token.address)&&e.amount===t.amount&&e.approvalMode===t.approvalMode&&H(e.router,t.router)&&H(e.permit2,t.permit2)&&H(e.vaultRegistry,t.vaultRegistry);}function If(e,t){if(!ha(e,t))return[{kind:"intent-changed"}];const n=[];e.walletChainSwitchRequired===!1&&t.walletChainSwitchRequired!==!1&&n.push({kind:"wallet-chain-switch-added"});const o=new Map(e.steps.map(a=>[a.kind,a]));for(const a of t.steps){if(a.kind==="open-position"||a.status!=="required")continue;const r=o.get(a.kind);!r||r.status!=="required"?n.push({kind:"permission-added",step:a.kind}):Ps(r,a)||n.push({kind:"permission-changed",step:a.kind});}return n;}function Ms(e,t){return e.direction===t.direction&&e.market.chainId===t.market.chainId&&e.market.id===t.market.id&&e.market.poolId.toLowerCase()===t.market.poolId.toLowerCase()&&H(e.market.token0.address,t.market.token0.address)&&H(e.market.token1.address,t.market.token1.address)&&H(e.collateralToken.address,t.collateralToken.address)&&H(e.intent.owner,t.intent.owner)&&e.intent.inputIsToken0===t.intent.inputIsToken0&&e.intent.collateralIn===t.intent.collateralIn&&e.intent.leverage===t.intent.leverage&&e.intent.horizonSeconds===t.intent.horizonSeconds&&e.intent.priceMove===t.intent.priceMove&&e.intent.slippageBps===t.intent.slippageBps&&e.intent.maxPriceImpactBps===t.intent.maxPriceImpactBps&&e.deposit.amount0===t.deposit.amount0&&e.deposit.amount1===t.deposit.amount1;}function Af(e,t){return!e||!t?e!==t:e.daysToLiquidation==="INF"?t.daysToLiquidation!=="INF":t.daysToLiquidation==="INF"?!1:Math.floor(t.daysToLiquidation)<Math.floor(e.daysToLiquidation);}function Cr(e){const t=e<1e4?10:100;return Math.round(e/t)*t;}function gf(e,t){if(!Ms(e,t))return[{kind:"intent-changed"}];const n=[];if(!e.position||!t.position)return e.position!==t.position&&n.push({kind:"position-availability-changed"}),n;const o=e.adaptiveFee??null,a=t.adaptiveFee??null;return o&&!a?n.push({kind:"adaptive-fee-evidence-unavailable"}):o&&a&&(a.evaluationScope!==o.evaluationScope&&n.push({kind:"adaptive-fee-mode-changed"}),a.manualOverride!==o.manualOverride&&n.push({kind:"adaptive-manual-override-changed"}),a.adaptiveTickThresholdTicks<o.adaptiveTickThresholdTicks&&n.push({kind:"adaptive-threshold-lower"}),!o.surgeActive&&a.surgeActive&&n.push({kind:"adaptive-surge-entered"}),a.activeFeePpm>o.activeFeePpm&&n.push({kind:"active-fee-higher"})),(!!e.swap!=!!t.swap||e.swap&&t.swap&&e.swap.inputIsToken0!==t.swap.inputIsToken0)&&n.push({kind:"swap-route-changed"}),e.swap&&t.swap&&t.swap.amountOutMinimum<e.swap.amountOutMinimum&&n.push({kind:"minimum-output-lower"}),e.swap&&t.swap&&t.swap.priceImpactBps>e.swap.priceImpactBps&&n.push({kind:"price-impact-higher"}),t.position.leverage.toFixed(2)!==e.position.leverage.toFixed(2)&&n.push({kind:"displayed-leverage-changed"}),t.position.executionLtvPips>e.position.executionLtvPips&&n.push({kind:"opening-ltv-higher"}),t.position.interestCostToken1>e.position.interestCostToken1&&n.push({kind:"interest-higher"}),t.position.grossReturnAtTargetPct+5e-3<e.position.grossReturnAtTargetPct&&n.push({kind:"target-return-lower"}),t.thresholds.maxLtvPips<e.thresholds.maxLtvPips&&n.push({kind:"borrow-limit-lower"}),t.thresholds.hardLtvPips<e.thresholds.hardLtvPips&&n.push({kind:"liquidation-threshold-lower"}),e.position.marketUtilization&&(!t.position.marketUtilization||Cr(t.position.marketUtilization.afterPips)>Cr(e.position.marketUtilization.afterPips))&&n.push({kind:"utilization-worse-or-missing"}),Af(e.position,t.position)&&n.push({kind:"runway-shorter"}),n;}function Sf(e){const{intent:t,reviewed:n}=e;if(e.activeChain.chainId!==t.market.chainId||!H(e.wallet.account,t.owner)||t.token.chainId!==t.market.chainId||!H(t.token.address,t.market.token0.address)&&!H(t.token.address,t.market.token1.address))throw new TypeError("Engine execution context does not match this trade intent.");const o={...n.plan,account:t.owner,chainId:t.market.chainId,marketId:t.market.id,token:t.token,amount:t.amount,approvalMode:t.approvalMode},a=H(t.token.address,t.market.token0.address)?n.quote.deposit.amount0:n.quote.deposit.amount1,r=n.quote.intent;if(!ha(o,n.plan)||n.quote.direction!==t.direction||n.quote.market.chainId!==t.market.chainId||n.quote.market.id!==t.market.id||n.quote.market.poolId.toLowerCase()!==t.market.poolId.toLowerCase()||!H(n.quote.market.token0.address,t.market.token0.address)||!H(n.quote.market.token1.address,t.market.token1.address)||!H(n.quote.collateralToken.address,t.token.address)||!H(r.owner,t.owner)||r.inputIsToken0!==H(t.token.address,t.market.token0.address)||r.collateralIn!==t.amount||r.leverage!==(t.leverage??null)||r.horizonSeconds!==t.horizonSeconds||r.priceMove!==t.priceMove||r.slippageBps!==t.slippageBps||r.maxPriceImpactBps!==t.maxPriceImpactBps||!t.market.router||!H(n.plan.router,t.market.router)||!t.market.permit2||!H(n.plan.permit2,t.market.permit2)||!t.market.vaultRegistry||!H(n.plan.vaultRegistry,t.market.vaultRegistry)||a!==t.amount)throw new TypeError("Reviewed Engine plan or quote does not match this trade intent.");}function Cf(e){const t=e&&typeof e=="object"?e.hash:null;return typeof t=="string"&&/^0x[0-9a-fA-F]{64}$/.test(t)?t:null;}function xf(e){const t=Object.freeze({provider:e.wallet.provider,account:e.wallet.account}),n=e.publicClient,o=fe(e.activeChain),a={wallet:t,publicClient:n,activeChain:o};return{async readPlan(r,i){i==null||i.throwIfAborted();const s=await Vt(t.provider);return i==null||i.throwIfAborted(),Lp({publicClient:n,market:r.market,owner:r.owner,walletChainId:s,token:r.token,amount:r.amount,approvalMode:r.approvalMode,permit2AuthorizationMode:"spending-cap"});},async ensureChain(r,i){i==null||i.throwIfAborted(),await Qe({provider:t.provider,chain:o}),i==null||i.throwIfAborted();},authorizeVault(r,i,s){return Vp({...a,market:r.market,signal:s,onTransactionObservation:l=>{var c;l.status==="submitted"&&i.onHash("vault-operator",l.hash,l.executionChanged),(c=e.onTransactionObservation)==null||c.call(e,l,"authorization");},onWalletRequest:()=>i.onWalletRequest("vault-operator"),onTxHash:l=>{l&&i.onHash("vault-operator",l);}});},async authorizeToken(r,i,s){await ws({...a,market:r.market,token:r.token,amount:r.amount,approvalMode:r.approvalMode,permit2AuthorizationMode:"spending-cap",signal:s,onAuthorizationExecution:l=>{var c;try{(c=e.onAuthorizationExecution)==null||c.call(e,l);}catch{}l.status==="wallet-requested"&&i.onWalletRequest(l.kind),l.status==="submitted"&&i.onHash(l.kind,l.hash,l.executionChanged);},onAuthorizationCheckpoint:i.onCheckpoint});},quote(r,i){return xp({publicClient:n,market:r.market,owner:r.owner,direction:r.direction,collateralIn:r.amount,inputIsToken0:H(r.token.address,r.market.token0.address),horizonSeconds:r.horizonSeconds,priceMove:r.priceMove,leverage:r.leverage,slippageBps:r.slippageBps,maxPriceImpactBps:r.maxPriceImpactBps,deadline:BigInt(Math.floor(Date.now()/1e3))+bf,forceExecutionEvidenceRefresh:!0,signal:i});},sendOpen(r,i,s,l){if(!i.tx)throw new _("The Engine quote is not executable.",{kind:"quote"});return On({...a,tx:i.tx,expiresAt:i.expiresAt,minimumValiditySeconds:Ao,permit2Context:{token:r.token,permit2:i.market.permit2,router:i.market.router,amount:r.amount,inlinePermit:!1},signal:l,onTransactionObservation:c=>{var p;c.status==="submitted"&&s.onHash("open-position",c.hash,c.executionChanged),(p=e.onTransactionObservation)==null||p.call(e,c,"action");},onWalletRequest:()=>s.onWalletRequest("open-position"),onTxHash:c=>{c&&s.onHash("open-position",c);}});},checkReceipt(r,i,s){return nc({publicClient:n,hash:s,timeoutMs:kf});}};}function nh(e){return Tf(e,xf(e));}function Tf(e,t){Sf(e);const n=fe(e.intent),o=e.onChange,a=yf(e.sessionId);let r=fe(e.reviewed.plan),i=fe(e.reviewed.quote),s=r,l=i,c="ready",p=null,u=0,m=null,d={kind:"none"},h=null,f=null,b=!1,k=null,E,T=0,S=(/* @__PURE__ */new Date()).toISOString(),B=null,A=null,g=null,C=null;const M=/* @__PURE__ */new Set(),q=/* @__PURE__ */new Set(),W=[],G=[],te=/* @__PURE__ */new Map(),Me=y=>{s=fe(y);for(const I of s.steps){G.includes(I.kind)||G.push(I.kind);const P=te.get(I.kind);I.status==="satisfied"?(te.set(I.kind,{kind:I.kind,status:"confirmed",hash:(P==null?void 0:P.hash)??null}),I.kind!=="open-position"&&q.add(I.kind)):(!P||P.status==="failed"||P.status==="cancelled")&&te.set(I.kind,{kind:I.kind,status:"planned",hash:null});}};Me(s);const ve=()=>c==="quote-review-required"&&p?{kind:"accept-review",revision:p.revision}:c==="awaiting-receipt"&&f?{kind:"check-receipt",hash:f}:c==="ready"||c==="resume-required"?{kind:"continue"}:(c==="failed"||c==="cancelled")&&d.kind!=="none"&&d.kind!=="view-transaction"?{kind:"continue"}:c==="executing"&&!f?{kind:"cancel"}:{kind:"none"},ge=()=>c==="quote-review-required",be=()=>{const y=Object.freeze(G.flatMap(Ee=>{const ce=te.get(Ee);return ce?[Object.freeze({...ce})]:[];})),I=h?y.find(Ee=>Ee.kind===h)??null:null,P=p?Object.freeze({...p,reasons:Object.freeze(p.reasons.map(Ee=>Object.freeze({...Ee})))}):null,O=Object.freeze({...ve()}),Se=m?Object.freeze({...m}):null,Le=Object.freeze({...d});return Object.freeze({schemaVersion:"1",kind:"engine-trade-open-execution",sessionId:a,sequence:T,occurredAt:S,chainId:n.market.chainId,quoteRevision:u,phase:c,plan:s,quote:l,review:P,next:O,steps:y,currentStep:I,completedPermissions:Object.freeze([...q]),completedTransactions:Object.freeze(W.map(Ee=>Object.freeze({...Ee}))),transactionHash:k,...(E?{receiptSummary:E}:{}),quoteReviewRequired:p!==null,failure:Se,recovery:Le});},X=()=>B??(B=be()),K=()=>{T+=1,S=(/* @__PURE__ */new Date()).toISOString(),B=be();try{o==null||o(B);}catch{}for(const y of M)try{y();}catch{}},V=(y,I,P)=>{G.includes(y)||G.push(y),te.set(y,{kind:y,status:I,hash:P});},oe=(y,I)=>{W.some(P=>P.kind===y&&P.hash===I)||W.push({kind:y,hash:I});},L=(y,I)=>I&&y.kind!=="tx-reverted"&&y.kind!=="tx-cancelled"?{kind:"view-transaction",hash:I}:y.kind==="wallet-rejected"?{kind:"retry-wallet"}:y.kind==="wrong-chain"?{kind:"switch-network",chainId:n.market.chainId}:y.kind==="tx-reverted"||y.kind==="tx-cancelled"||y.kind==="quote"?{kind:"review-quote"}:y.retryable&&q.size?{kind:"resume-remaining"}:y.retryable?{kind:"retry-wallet"}:{kind:"none"},J=(y,I,P)=>{var O;return P?"confirmation":!I||((O=te.get(I))==null?void 0:O.status)!=="wallet-requested"?"preparation":y.kind==="wallet-rejected"?"wallet-request":"submission";},Dt=(y,I=h,P=f??Cf(y))=>{const O=Rr(y,"Engine trade did not complete.");m={...O,step:I,hash:P,failurePhase:J(O,I,P)},d=L(O,P),P&&O.kind!=="tx-reverted"&&O.kind!=="tx-cancelled"?(c="awaiting-receipt",f=P,I&&V(I,"submitted",P)):(c=O.kind==="wallet-rejected"||O.kind==="tx-cancelled"?"cancelled":"failed",I&&V(I,c==="cancelled"?"cancelled":"failed",P),h=null,f=null),K();},_t=(y,I,P,O)=>{Me(P),l=fe(O),u+=1,p=y==="permissions"?{kind:y,revision:u,reasons:I}:{kind:y,revision:u,reasons:I},c="quote-review-required",m={message:y==="permissions"?"Wallet permissions changed. Review before continuing.":"The executable quote changed. Review before continuing.",kind:"quote",retryable:!0,step:null,hash:null,failurePhase:"preparation"},d={kind:"review-quote"},h=null,f=null,K();},Zt=y=>{if(!ha(r,y))throw new TypeError("Fresh authorization plan does not match the frozen trade intent.");},De=async(y,I={})=>{const P=await t.readPlan(n,y);y.throwIfAborted(),Zt(P);const O=If(r,P);return O.length?(_t("permissions",O,P,l),A==null||A.abort(new Error("review-required")),!1):(Me(P),I.publishResult!==!1&&K(),!0);},Nt=y=>{if(y==="open-position")return s.readyForOpen&&r.steps.some(O=>O.kind===y);const I=r.steps.find(O=>O.kind===y),P=s.steps.find(O=>O.kind===y);return!!(I&&P&&I.status==="required"&&P.status==="required"&&Ps(I,P));},Ye={onWalletRequest(y){if(!Nt(y)){_t("permissions",[{kind:"unexpected-wallet-request",step:y}],s,l),A==null||A.abort(new Error("unreviewed-wallet-request"));return;}h=y,f=null,b=!1,V(y,"wallet-requested",null),K();},onHash(y,I,P){b||(b=P===!0),h=y,f=I,k=I,V(y,"submitted",I),K();},async onCheckpoint(){const y=A==null?void 0:A.signal;if(!y)throw new Error("Engine execution checkpoint has no active command.");const I=h,P=f;(await De(y))&&I&&P&&(V(I,"confirmed",P),q.add(I),oe(I,P),h=null,f=null,K());}},mt=async y=>{let I=await t.quote(n,y);if(y.throwIfAborted(),BigInt(Math.floor(Date.now()/1e3))+Ao>=I.expiresAt&&(I=await t.quote(n,y),y.throwIfAborted()),!Ms(i,I))throw new TypeError("Fresh quote does not match the frozen trade intent.");if(!I.executable||!I.position||!I.tx||typeof I.frame.blockNumber!="bigint"||!I.frame.blockHash||BigInt(Math.floor(Date.now()/1e3))+Ao>=I.expiresAt)throw new _("A fresh executable block-pinned quote is not available.",{kind:"quote",retryable:!0});return I;},Ln=async y=>{var I;p=null,m=null,d={kind:"none"},c="executing",K();try{if(!(await De(y))||s.walletChainSwitchRequired&&(await t.ensureChain(n,y),y.throwIfAborted(),!(await De(y))))return X();if(s.steps.some(ce=>ce.kind==="vault-operator"&&ce.status==="required")){h="vault-operator";const ce=await t.authorizeVault(n,Ye,y);if(ce.receipt.status!=="success")throw new _("Vault authorization reverted on-chain.",{kind:"tx-reverted"});if(k=ce.hash,V("vault-operator","confirmed",ce.hash),q.add("vault-operator"),oe("vault-operator",ce.hash),h=null,f=null,!(await De(y)))return X();}if(s.steps.some(ce=>ce.kind!=="vault-operator"&&ce.kind!=="open-position"&&ce.status==="required")&&(await t.authorizeToken(n,Ye,y),y.throwIfAborted(),!(await De(y))))return X();if(!s.readyForOpen)throw new _("Required permissions are still missing.",{kind:"validation",retryable:!0});const O=await mt(y),Se=gf(i,O);if(Se.length)return _t("quote",Se,s,O),X();l=fe(O),h="open-position";const Le=await t.sendOpen(n,l,Ye,y);if(Le.receipt.status!=="success")throw new _("Engine transaction reverted on-chain.",{kind:"tx-reverted"});const Ee=Le.hash;k=Ee,E=fe(Le.summary),V("open-position","confirmed",Ee),oe("open-position",Ee),c="success",h=null,f=null,m=null,d={kind:"none"},K();}catch(P){if(ge())return X();y.aborted&&!f?(c="cancelled",m={message:"Execution cancelled.",kind:"unknown",retryable:!1,step:h,hash:null,failurePhase:h&&((I=te.get(h))==null?void 0:I.status)==="wallet-requested"?"wallet-request":"preparation"},d={kind:"none"},h&&V(h,"cancelled",null),h=null,K()):Dt(P);}return X();},en=async()=>{var P;if(c!=="awaiting-receipt"||!h||!f)throw new TypeError("No submitted Engine transaction is awaiting receipt reconciliation.");const y=h;let I;try{I=await t.checkReceipt(n,y,f);}catch(O){return Dt(O,y,f),X();}b||(b=I.executionChanged===!0);try{(P=e.onTransactionObservation)==null||P.call(e,{hash:I.hash,...(I.replacesHash?{replacesHash:I.replacesHash}:{}),...(b?{executionChanged:!0}:{}),status:I.status==="unresolved"?"submitted":b?"cancelled":I.status},y==="open-position"?"action":"authorization");}catch{}if(k=I.hash,f=I.hash,V(y,"submitted",I.hash),I.status==="unresolved")return d={kind:"view-transaction",hash:I.hash},K(),X();if(b||I.status==="cancelled"||I.status==="reverted")return Dt(new _(b||I.status==="cancelled"?"Engine transaction was cancelled in the wallet.":"Engine transaction reverted on-chain.",{kind:b||I.status==="cancelled"?"tx-cancelled":"tx-reverted",retryable:!0}),y,I.hash),X();if(V(y,"confirmed",I.hash),oe(y,I.hash),h=null,f=null,m=null,y==="open-position")E=fe(gi(I.receipt)),c="success",d={kind:"none"},K();else{q.add(y),c="resume-required",d={kind:"resume-remaining"};const O=new AbortController();A=O;try{await De(O.signal,{publishResult:!1}),ge()||K();}catch{K();}finally{A=null;}}return X();};return{getSnapshot:X,subscribe(y){return M.add(y),()=>{M.delete(y);};},dispatch(y,I){if(y.kind==="continue"){if(g)return g;if(ve().kind!=="continue")return Promise.reject(new TypeError(`Engine execution cannot continue in phase ${c}.`));A=new AbortController();const P=I==null?void 0:I.signal,O=()=>A==null?void 0:A.abort(P==null?void 0:P.reason);P==null||P.addEventListener("abort",O,{once:!0}),P!=null&&P.aborted&&O();const Se=Ln(A.signal).finally(()=>{P==null||P.removeEventListener("abort",O),g===Se&&(g=null),A=null;});return g=Se,Se;}if(y.kind==="accept-review")return c!=="quote-review-required"||!p||y.revision!==p.revision?Promise.reject(new TypeError("Engine review revision is stale or not pending.")):(r=fe(s),i=fe(l),p=null,m=null,d={kind:"none"},c="ready",K(),Promise.resolve(X()));if(y.kind==="check-receipt"){if(C)return C;const P=en().finally(()=>{C===P&&(C=null);});return C=P,P;}return c==="success"||c==="awaiting-receipt"||f?Promise.reject(new TypeError("A submitted Engine transaction cannot be cancelled locally.")):g&&A?(A.abort(new DOMException("Execution cancelled.","AbortError")),g):(c="cancelled",m={message:"Execution cancelled.",kind:"unknown",retryable:!1,step:h,hash:null,failurePhase:"preparation"},d={kind:"none"},K(),Promise.resolve(X()));}};}const Yn=x().regex(/^[0-9]+$/),Ds=R({schemaVersion:D("1"),chainId:v().int(),txHash:eo,account:et,status:D("reconciled"),execution:R({basis:D("receipt-reconciled-opening-swap-leg"),poolId:eo,vaultId:Yn,owner:et,key:R({currency0:et,currency1:et}),block:R({canonicality:D("rpc-checked-at-read")}),swap:R({inputCurrency:et,outputCurrency:et,inputRaw:Yn,outputRaw:Yn,inputBasis:D("pool-input-plus-hook-input-fee")})})}),Rf=R({schemaVersion:D("1"),chainId:v().int(),txHash:eo,account:et,status:D("unavailable")}).loose(),oh=To([Ds,Rf]);async function ah({source:e,position:t,strategy:n,signal:o}){var s;if(!t.token0||!t.token1)return null;const a=`/v1/engine/transactions/${t.chainId}/${n.openTxHash}/opening-execution`,r=`${zt(e.baseUrl)}${a}?${new URLSearchParams({account:t.account})}`,i=ut({signal:o,timeoutMs:e.timeoutMs??1e4,timeoutMessage:"Opening execution read timed out."});try{const l=await fetch(r,{headers:{Accept:"application/json",...e.headers},cache:"no-store",signal:i.signal});if(!l.ok){if((s=l.body)==null||s.cancel().catch(()=>{}),l.status===429||l.status>=500)throw new Ea(l.status===429?"rate-limited":"upstream-unavailable",l.status,xo(l.headers.get("retry-after")));return null;}const c=Ds.safeParse(await Ke(l,32768,a));if(!c.success)return null;const p=c.data,u=p.execution,m=u.swap;if(p.chainId!==t.chainId||p.txHash!==n.openTxHash.toLowerCase()||p.account!==t.account.toLowerCase()||u.owner!==p.account||u.poolId!==t.poolId.toLowerCase()||u.poolId!==n.poolId.toLowerCase()||BigInt(u.vaultId)!==BigInt(t.vaultId)||u.key.currency0!==t.token0.address.toLowerCase()||u.key.currency1!==t.token1.address.toLowerCase())return null;const d=m.inputCurrency===u.key.currency0&&m.outputCurrency===u.key.currency1,h=m.inputCurrency===u.key.currency1&&m.outputCurrency===u.key.currency0;if(!d&&!h)return null;const f=BigInt(d?m.inputRaw:m.outputRaw),b=BigInt(d?m.outputRaw:m.inputRaw);if(f<=0n||b<=0n)return null;const k=Number(va(b,t.token1.decimals))/Number(va(f,t.token0.decimals));return Number.isFinite(k)&&k>0?k:null;}catch(l){if(o!=null&&o.aborted||l instanceof Ea)throw l;return null;}finally{i.cleanup();}}export{sh as AEGIS_BACKEND_PROD_BASE_URL,Ff as AEGIS_DYNAMIC_FEE_FLAG,uc as AEGIS_SWAP_BSC_CHAIN,he as AEGIS_SWAP_BSC_CHAIN_ID,Nf as AEGIS_SWAP_BSC_HOOK,Dr as AEGIS_SWAP_BSC_ROUTER,Fr as AEGIS_SWAP_BSC_RPC_URLS,Lf as AEGIS_SWAP_BSC_TOKENS,En as AEGIS_SWAP_CHAINS,Z as AEGIS_SWAP_CHAIN_ID,Ro as AEGIS_SWAP_DEFAULT_FEE_BPS,vn as AEGIS_SWAP_DEFAULT_FEE_RECIPIENT,Bo as AEGIS_SWAP_DEFAULT_METADATA_ENDPOINT,Or as AEGIS_SWAP_DEFAULT_RPC_URLS,_f as AEGIS_SWAP_HOOK,dc as AEGIS_SWAP_INK_CHAIN,ke as AEGIS_SWAP_INK_CHAIN_ID,Of as AEGIS_SWAP_INK_HOOK,_r as AEGIS_SWAP_INK_ROUTER,rc as AEGIS_SWAP_INK_RPC_URLS,Uf as AEGIS_SWAP_INK_TOKENS,lc as AEGIS_SWAP_MAINNET_CHAIN,Po as AEGIS_SWAP_MAINNET_UNISWAP_V4_CONTRACTS,oo as AEGIS_SWAP_PERMIT2,to as AEGIS_SWAP_ROUTER,bt as AEGIS_SWAP_TOKENS,Nr as AEGIS_SWAP_TRUSTED_ROUTERS_BY_CHAIN,cc as AEGIS_SWAP_V4_QUOTER,$f as AGGREGATED_SWAP_CURATED_TOKENS,Do as AGGREGATED_SWAP_DEFAULT_TOKENS,fc as AGGREGATED_SWAP_DEFAULT_TOKEN_LIST,qr as AGGREGATED_SWAP_SUPPORTED_CHAIN_IDS,Vf as AGGREGATED_SWAP_TOKEN_PRESETS,pc as AGGREGATED_SWAP_WOLFGAME_TOKENS,hc as AGGREGATED_SWAP_WOLFGAME_TOKEN_LIST,ec as AegisBackendApiError,ch as AegisBackendContractError,Fe as AegisContractGuardError,Ea as AegisEngineAccountReadError,ue as AegisEngineMarketDataReadError,we as AegisEngineMarketNotReadyError,Oa as AggregatedSwapBuildMismatchError,le as AggregatedSwapCalldataError,qo as DEFAULT_PERMIT_EXPIRATION_SECONDS,Ia as DIRECT_SWAP_MARKET_TRUST_RULE_ID,$a as DirectPoolSwapPriceMovedError,yt as DirectSwapMarketTrustError,mf as ENGINE_MARKET_SERIES_TTL_MS,lh as ENGINE_PORTFOLIO_CHAIN_IDS,zf as ENGINE_UTILIZATION_CAP_PCT,An as KYBER_AEGIS_LIQUIDITY_SOURCE,No as KyberSwapApiError,Oo as KyberSwapContractError,id as KyberSwapPriceMovedError,ye as KyberSwapResourceLimitError,wc as MAX_UINT128,Oe as MAX_UINT160,Ie as MAX_UINT256,kn as NATIVE_TOKEN_ADDRESS,it as NoAegisRouteError,pi as PERMIT2_FAR_FUTURE_EXPIRATION,uh as PortfolioPageQuerySchema,dh as PortfolioPageSchema,mh as PortfolioQuerySchema,ph as PortfolioResponseSchema,Cl as SDK_RPC_MULTICALL_RULE_ID,xn as SWAP_TX_DEADLINE_SECONDS,fh as SubmittedTransactionReceiptError,hh as TransactionReceiptTimeoutError,Re as UNISWAP_V4_CONTRACTS_BY_CHAIN,co as UNLIMITED_ERC20_FLOOR,Ll as UNLIMITED_PERMIT2_FLOOR,wh as USER_REJECTED_MESSAGE,_ as UserFacingError,bh as aegisBackendAddressAllowlistSchema,z as aegisBackendAddressSchema,kh as aegisBackendAllowlistsByChainSchema,vh as aegisBackendChainIdSchema,Eh as aegisBackendChainSchema,yh as aegisBackendConfigSchema,Ih as aegisBackendContractRegistrySchema,Ah as aegisBackendContractsByChainSchema,me as aegisBackendDecimalStringSchema,gh as aegisBackendFeeConfigSchema,Sh as aegisBackendHealthResponseSchema,So as aegisBackendHexSchema,Be as aegisBackendIsoDateTimeSchema,Ch as aegisBackendMarketMetricsSchema,xh as aegisBackendMarketSchema,Th as aegisBackendMarketStatusSchema,Rh as aegisBackendMarketsResponseSchema,Bh as aegisBackendQuoteDefaultsSchema,Ph as aegisBackendQuoteModeSchema,Mh as aegisBackendSwapProviderSchema,Dh as aegisBackendSwapQuoteRequestSchema,_h as aegisBackendSwapQuoteResponseSchema,Nh as aegisBackendTokenSchema,Oh as aegisBackendTokensResponseSchema,Fh as aegisPoolKeySchema,Qf as aggregatedSwapErrorMessage,rd as approveDirectPoolSwapInput,L0 as approveEnginePermit2ToRouter,q0 as approveEngineTokenToPermit2,jl as approveErc20Spender,Uo as approveErc20ToPermit2,cd as approveKyberSwapInput,fi as approvePermit2ToRouter,bi as assertAegisOnlyRouteLegs,qa as assertAggregatedQuoteLiquidity,gl as assertCalldataHash,Sl as assertChainMatches,yn as assertDirectSwapMarketTrusted,Rt as assertEngineMarketIdentity,qi as assertHydratedEngineMarket,yl as assertQuoteFresh,Il as assertRouterAllowlisted,Al as assertSpenderAllowlisted,Xo as assertTrustedEngineMarket,st as assertUint128,sm as attachEngineActivityLotDisplays,U0 as authorizeEnginePositionRouter,Vp as authorizeEngineVaultOperator,Wf as authorizeHostDirectSwapMarket,Id as backendTokenToAegisSwapToken,Ad as backendTokensToAegisSwapTokens,Tc as buildExactInSwapTransaction,Rc as buildExactOutSwapTransaction,il as buildKyberSwapRoute,Yl as buildSignedPermitBatch,Wi as classifyEngineVaultActivity,Rr as classifyError,w0 as clearEngineMarketHistoryCache,y0 as clearEngineMarketHistoryV2ProbeCache,Q0 as clearEngineMarketSeriesCache,h0 as clearEngineMarketsCache,E0 as clearEngineMarketsV2ProbeCache,k0 as clearEnginePositionActivityCache,b0 as clearEnginePositionsCache,v0 as clearEnginePositionsV2ProbeCache,d0 as clearEngineReadCaches,Jf as clearTokenPriceHistoryCache,z0 as computeEngineIdleWithdrawPostLtvPips,K0 as computeEngineMaxIdleWithdraw,je as computePoolId,qh as createAegisBackendApiClient,Lr as createAegisSwapChainConfig,qf as createAegisSwapChains,l0 as createAegisSwapChainsFromBackendConfig,Hf as createAegisSwapMarketsFromPools,Pc as createAegisSwapPoolMarket,u0 as createAegisSwapPoolsFromBackendMarkets,Ce as createAegisSwapUniswapV4Contracts,nh as createEngineTradeOpenExecutionSession,Lh as createEngineTransactionHistory,ql as createSwapPublicClient,im as deriveEngineActivityLotDisplay,j0 as deriveEngineTradePositionStrategy,Uh as engineAccountPositionKey,Vh as engineAccountTransactionKey,If as engineAuthorizationPlanReviewReasons,$h as engineHistoryCatalogResponseSchema,W0 as engineIdleWithdrawPassesResidualLtv,bn as engineMarketCandlesResponseSchema,Qo as engineMarketIdSchema,Cd as engineMarketsRestResponseSchema,xd as engineMarketsV2RestResponseSchema,Rd as engineMetricHistoryRestResponseSchema,Bd as engineMetricHistoryV2RestResponseSchema,oh as engineOpeningExecutionResponseSchema,ln as enginePermit2GrantSatisfies,df as enginePoolPriceLineResponseSchema,J0 as enginePoolPriceSegments,Hh as enginePortfolioPriceFor,Wh as enginePositionAccountingResponseSchema,tm as enginePositionActivityRestResponseSchema,Kh as enginePositionHistoryResponseSchema,zh as enginePositionPerformanceResponseSchema,Gh as enginePositionPnlResponseSchema,_d as enginePositionsRestResponseSchema,qd as enginePositionsV2RestResponseSchema,H0 as enginePreviewMaxLtvPips,Gf as engineRouterForChain,Pp as engineTokenGrantSatisfies,gf as engineTradeQuoteReviewReasons,jh as engineTransactionStorageKey,Qe as ensureWalletChain,td as erc20ApprovalRequest,Xs as errorMessage,Ii as estimateSwapGasWithBuffer,a0 as executeDirectPoolSwap,$0 as executeEngineBalancedDeposit,r0 as executeKyberSwap,T0 as executionLtvGuardPips,Ua as fetchAggregatedSwapQuote,Ha as fetchDirectPoolSwapQuote,Qh as fetchEngineAccountActivity,Xh as fetchEngineAccountPortfolio,Yh as fetchEngineHistoryPositions,C0 as fetchEngineLendActivity,X0 as fetchEngineMarketCandles,A0 as fetchEngineMarketHistory,Z0 as fetchEngineMarketReferenceHistory,I0 as fetchEngineMarkets,ah as fetchEngineOpeningEntry,Y0 as fetchEnginePoolPriceHistory,Yi as fetchEnginePositionActivitySnapshot,Jh as fetchEnginePositionHistory,g0 as fetchEnginePositionsSnapshot,eh as fetchEngineRateHistory,Zh as fetchEngineTransactionStatus,S0 as fetchEngineVaultActivity,Yf as fetchGlobalTokenMetadata,rl as fetchKyberSwapRoute,e0 as fetchTokenPriceHistory,ew as formatEngineAccountTokenAmount,Mo as getExplorerUrl,xl as getInjectedProvider,Bl as getProviderAccount,Vt as getProviderChainId,$c as getZeroForOne,tw as groupEngineAccountActivity,nw as groupEnginePortfolioPositions,Tn as hasUsablePermit2Allowance,G0 as isAegisEngineTradePositionIntent,i0 as isBusy,Zr as isDirectSwapMarketTrusted,t0 as isDocumentVisible,Tl as isEip1193Provider,Ae as isNativeAssetAddress,jo as isNativeToken,ow as isRetryableAegisBackendApiError,si as isRetryableKyberSwapError,aw as isSubmittedTransactionReceiptError,Ul as isUnlimitedErc20Approval,Vl as isUnlimitedPermit2Approval,Zs as isUserRejectedError,rw as mergeEngineTransactionRecord,V0 as missingEngineExecutionReason,Cn as normalizeAccount,zt as normalizeAegisBackendBaseUrl,Wn as normalizeEngineMarkets,Rl as normalizeWalletConnection,zc as outputFeeForQuote,ml as parseAdditionalEngineDeployments,dl as parseEngineDeploymentManifest,iw as parseEngineTransactionRecords,Zf as peekTokenPriceHistory,Rn as pollUntil,ws as prepareEnginePermit,s0 as progressRailSteps,P0 as quoteEngineAddCollateral,Er as quoteEngineBalancedDeposit,B0 as quoteEngineBorrow,M0 as quoteEngineBorrowCapacity,_0 as quoteEngineCloseVault,R0 as quoteEngineDeposit,N0 as quoteEngineIdleWithdraw,O0 as quoteEngineRedeem,D0 as quoteEngineRepay,xp as quoteEngineTradeOpen,ga as quoteSpendAmount,Ym as readEngineAdaptiveFeeEvidence,Lp as readEngineAuthorizationPlan,ea as readEngineBorrowQuoteContext,ym as readEngineLendQuoteContext,m0 as readEngineMarketMark,Em as readEngineMarketSnapshot,p0 as readEnginePositionsHydration,f0 as readEngineVaultActivity,Up as readEngineVaultRouterApproved,Ct as readErc20Allowance,ze as readPermit2RouterAllowance,Aa as reconcileSubmitQuote,nc as reconcileSubmittedReceipt,Pl as requestProviderAccount,Qt as requiresErc20ApprovalReset,sw as resolveEngineAccountPositionTarget,F0 as resolveEngineBorrowCollateralFloor,Xf as resolveTokenIconUrl,o0 as resolveWalletSession,n0 as retryOnError,Xt as sameEngineMarketId,Kf as sameQuote,On as sendEngineTransaction,cw as serializeEngineTransactionRecords,th as splitEngineMarketCandleSegments,jf as subscribeProvider,$m as summarizeEngineLendShareGrowth,x0 as summarizeEngineSimpleYieldPosition,gi as summarizeTransactionReceipt,Fl as switchProviderChain,Wu as tokenPriceHistoryRestResponseSchema,c0 as transactionProgressView,md as transactionSequenceProgress,fl as trustedEngineDeploymentForMarket,pe as trustedEngineRegistryForChain,St as trustedEngineVersionForChain,nd as waitForProviderChain};
|
|
71
|
+
persistent:T.persistent,scope:T.scope});}}u.push({id:"open-position",kind:"open-position",status:"required",walletAction:"transaction",target:a,spender:null,token:null,currentAmount:null,requestedAmount:null,expiration:null,persistent:!1,scope:"position-open"});const m=u.filter(f=>f.kind!=="erc20-reset"&&f.kind!=="open-position"&&f.status==="required").length,d=e.walletChainId===void 0||e.walletChainId===null?null:e.walletChainId!==e.market.chainId,h=u.filter(f=>f.status==="required").length;return{kind:"engine-authorization-plan",operation:"trade-open",account:e.owner,chainId:e.market.chainId,marketId:e.market.id,token:e.token,amount:e.amount,approvalMode:t,observations:{erc20Allowance:l,permit2Allowance:p,permit2AuthorizationMode:"spending-cap"},router:a,permit2:r,vaultRegistry:i,steps:u,missingPermissionCount:m,walletChainSwitchRequired:d,walletPromptCount:h,readyForOpen:e.amount>0n&&u.every(f=>f.kind==="open-position"||f.status==="satisfied")};}function da(e,t=!1){if(e.revokeAllowance&&(!t||!e.replaceAllowance||e.amount!==0n))throw new TypeError("Revocation must explicitly replace the router allowance with zero.");if(e.replaceAllowance&&((e.approvalMode??"exact")!=="exact"||!e.revokeAllowance&&e.amount<=0n||e.amount>=qe))throw new TypeError("A specified spending limit must be positive, finite, and fit within Permit2.");}function ma(e){if(e.activeChain.chainId!==e.market.chainId)throw new TypeError("Active chain does not match the Engine approval market.");if(e.token.chainId!==e.market.chainId)throw new TypeError("Approval token chain does not match the Engine market.");if(!b(e.token.address,e.market.token0.address)&&!b(e.token.address,e.market.token1.address))throw new TypeError("Approval token does not belong to the Engine market.");const t=ea(e.market,{vaultRegistry:!1});return{...e,permit2:t.permit2,router:t.aegisRouterV1};}function Nn(e){var t;(t=e.signal)==null||t.throwIfAborted();}function cn(e,t){var n;try{(n=e.onAuthorizationExecution)==null||n.call(e,t);}catch(o){console.warn("[AegisCore] onAuthorizationExecution callback failed",o);}}async function pa(e){var n,o,a,r;let t=null;(o=(n=e.input).onAuthorizationProgress)==null||o.call(n,{kind:e.kind,status:"requesting"});try{const i=await e.run({onWalletRequest:()=>cn(e.input,{kind:e.kind,status:"wallet-requested",hash:null}),onHash:(s,c)=>{const l=t&&t!==s?t:void 0;t=s,cn(e.input,{kind:e.kind,status:"submitted",hash:s,...(l?{replacesHash:l}:{}),...(c!=null&&c.executionChanged?{executionChanged:!0}:{})});}});return(r=(a=e.input).onAuthorizationProgress)==null||r.call(a,{kind:e.kind,status:"confirmed"}),cn(e.input,{kind:e.kind,status:"confirmed",hash:t}),i;}catch(i){const s=Nr(i,"Authorization failed.");throw cn(e.input,{kind:e.kind,status:s.kind==="wallet-rejected"?"cancelled":"failed",hash:t,error:s}),i;}}async function bs(e){const t=()=>Nn(e),n=e.approvalMode??"exact",o=()=>Ct({publicClient:e.publicClient,token:e.token.address,owner:e.wallet.account,spender:e.permit2});let a;try{a=await o(),t();}catch(s){throw t(),new Error(`Could not read ${e.token.symbol} approval for Permit2.`,{cause:s});}const{approvalHashes:r,allowance:i}=await Bi({read:o,write:(s,c,l)=>$o({provider:e.wallet.provider,publicClient:e.publicClient,account:e.wallet.account,chain:e.activeChain.chain,token:e.token.address,permit2:e.permit2,amount:s==="grant"&&n==="max"?void 0:c,signal:e.signal,...l}),amount:e.amount,decimals:e.token.decimals,approvalMode:n,requiresReset:e.replaceAllowance||Xt(e.token),knownAllowance:a,replaceAllowance:e.replaceAllowance,executeStep:(s,c)=>pa({input:e,kind:s==="reset"?"erc20-reset":"erc20-permit2",run:l=>c(l)}),afterStep:async()=>{var s;t(),await((s=e.onAuthorizationCheckpoint)==null?void 0:s.call(e)),t();},confirm:e.replaceAllowance?async(s,c)=>{const l=await Rn(async()=>(t(),s()),p=>p===c,5,300);if(l!==c)throw new Error("Approval confirmed, but the allowance does not match your specified limit.");return l;}:Pi,onStatus:e.onStatus});if(e.replaceAllowance&&i!==e.amount||!Bp({currentAmount:i,spendAmount:e.amount,approvalMode:n}))throw new Error(`Approve ${e.token.symbol} before continuing.`);return r.at(-1)??null;}async function ks(e){var a,r;const t=()=>Nn(e),n=e.approvalMode??"exact",o=await ze({publicClient:e.publicClient,permit2:e.permit2,account:e.wallet.account,token:e.token.address,router:e.router});t(),!(e.replaceAllowance&&e.amount===0n&&o[0]===0n)&&((!e.replaceAllowance||o[0]===e.amount)&&un({allowance:o,spendAmount:e.amount,approvalMode:n})||((a=e.onStatus)==null||a.call(e,"approving"),await pa({input:e,kind:"permit2-router",run:async i=>{const s=await bi({provider:e.wallet.provider,publicClient:e.publicClient,account:e.wallet.account,chain:e.activeChain.chain,token:e.token.address,permit2:e.permit2,router:e.router,amount:n==="max"?void 0:e.amount,signal:e.signal,...i});if(e.replaceAllowance){const c=await Rn(async()=>(t(),ze({publicClient:e.publicClient,permit2:e.permit2,account:e.wallet.account,token:e.token.address,router:e.router})),l=>l[0]===e.amount&&(e.amount===0n||un({allowance:l,spendAmount:e.amount,approvalMode:"exact"})),5,300);if(t(),c[0]!==e.amount||e.amount!==0n&&!un({allowance:c,spendAmount:e.amount,approvalMode:"exact"}))throw new Error("Approval confirmed, but the spending cap does not match your specified limit.");}return s;}}),t(),await((r=e.onAuthorizationCheckpoint)==null?void 0:r.call(e)),t()));}async function Oh(e){da(e);const t=ma(e),n=()=>Nn(t);return n(),Ae(t.token.address)?{approvalHash:null}:t.amount<=0n&&(t.approvalMode??"exact")!=="max"?{approvalHash:null}:(await Qe({provider:t.wallet.provider,chain:t.activeChain,signal:t.signal}),n(),{approvalHash:await bs(t)});}async function qh(e){da(e,!0);const t=ma(e),n=()=>Nn(t);n(),!Ae(t.token.address)&&(t.amount<=0n&&!t.replaceAllowance&&(t.approvalMode??"exact")!=="max"||(await Qe({provider:t.wallet.provider,chain:t.activeChain,signal:t.signal}),n(),await ks(t)));}async function vs(e){var s,c;da(e);const t=ma(e),n=()=>{var l;return(l=t.signal)==null?void 0:l.throwIfAborted();};if(n(),t.amount<=0n||Ae(t.token.address))return{approvalHash:null,permit:null};n(),await Qe({provider:t.wallet.provider,chain:t.activeChain,signal:t.signal}),n();const o=await bs(t);if(n(),(t.permit2AuthorizationMode??"spending-cap")==="spending-cap")return await ks(t),{approvalHash:o,permit:null};n(),(s=t.onStatus)==null||s.call(t,"signing");const a=t.approvalMode??"exact",r=ze({publicClient:t.publicClient,permit2:t.permit2,account:t.wallet.account,token:t.token.address,router:t.router}),i=await pa({input:t,kind:"permit2-router",run:l=>Qo({wallet:t.wallet,publicClient:t.publicClient,activeChain:t.activeChain,permit2:t.permit2,router:t.router,token:t.token.address,amount:t.amount,approvalMode:a,allowanceRead:r,signal:t.signal,setStatus:p=>{var u;return(u=t.onStatus)==null?void 0:u.call(t,p);},...l})});return n(),await((c=e.onAuthorizationCheckpoint)==null?void 0:c.call(e)),n(),{approvalHash:o,permit:i};}async function Lh(e){var n;const t=Np(e);return(n=e.onStatus)==null||n.call(e,"approving"),Dn({wallet:e.wallet,publicClient:e.publicClient,activeChain:e.activeChain,tx:t,...(e.signal!==void 0?{signal:e.signal}:{}),...(e.onStatus?{onStatus:e.onStatus}:{}),...(e.onWalletRequest?{onWalletRequest:e.onWalletRequest}:{}),...(e.onTxHash?{onTxHash:e.onTxHash}:{}),...(e.onTransactionObservation?{onTransactionObservation:e.onTransactionObservation}:{})});}async function Up(e){var a;const t=(a=oe(e.market))==null?void 0:a.addresses;if(!t)throw new Error(`No trusted Aegis Engine deployment is configured for chain ${e.market.chainId}.`);if(!e.market.vaultRegistry||!b(e.market.vaultRegistry,t.vaultRegistry))throw new Error("VaultRegistry does not match the trusted Engine deployment.");const[n,o]=await Promise.all([e.vaultId===void 0?Promise.resolve(null):e.publicClient.readContract({address:t.vaultRegistry,abi:yr,functionName:"getApproved",args:[e.vaultId]}),e.publicClient.readContract({address:t.vaultRegistry,abi:yr,functionName:"isApprovedForAll",args:[e.owner,t.aegisRouterV1]})]);return o||n!==null&&b(n,t.aegisRouterV1);}async function Vp(e){var n,o;const t=(n=oe(e.market))==null?void 0:n.addresses;if(!t)throw new Error(`No trusted Aegis Engine deployment is configured for chain ${e.market.chainId}.`);if(!e.market.router||!b(e.market.router,t.aegisRouterV1))throw new Error("Router does not match the trusted Engine deployment.");if(!e.market.vaultRegistry||!b(e.market.vaultRegistry,t.vaultRegistry))throw new Error("VaultRegistry does not match the trusted Engine deployment.");return(o=e.onStatus)==null||o.call(e,"approving"),Dn({wallet:e.wallet,publicClient:e.publicClient,activeChain:e.activeChain,tx:{to:t.vaultRegistry,data:De({abi:ws,functionName:"setApprovalForAll",args:[t.aegisRouterV1,!0]}),value:0n},...(e.signal!==void 0?{signal:e.signal}:{}),...(e.onStatus?{onStatus:e.onStatus}:{}),...(e.onWalletRequest?{onWalletRequest:e.onWalletRequest}:{}),...(e.onTxHash?{onTxHash:e.onTxHash}:{}),...(e.onTransactionObservation?{onTransactionObservation:e.onTransactionObservation}:{})});}function Ar(e){if(e.expiresAt===void 0)return;const t=e.minimumValiditySeconds??0n;if(t<0n)throw new TypeError("Engine transaction minimum validity cannot be negative.");if(BigInt(Math.floor(Date.now()/1e3))+t>=e.expiresAt)throw new N(Rp);}async function Dn(e){var a,r,i,s,c,l,p;(a=e.signal)==null||a.throwIfAborted(),await Qe({provider:e.wallet.provider,chain:e.activeChain,...(e.signal?{signal:e.signal}:{})}),(r=e.signal)==null||r.throwIfAborted(),Ar(e),(i=e.onStatus)==null||i.call(e,"submitting"),(s=e.signal)==null||s.throwIfAborted();let t;try{t=await e.publicClient.estimateGas({account:e.wallet.account,to:e.tx.to,data:e.tx.data,value:e.tx.value});}catch(u){throw(c=e.signal)==null||c.throwIfAborted(),Op(u)?new N(Pp,{kind:"rpc",retryable:!0}):new N(await Lp(u,e));}(l=e.signal)==null||l.throwIfAborted(),Ar(e);const{receipt:n,summary:o}=await Ti({wallet:e.wallet,publicClient:e.publicClient,chain:e.activeChain.chain,to:e.tx.to,data:e.tx.data,value:e.tx.value,gas:t*125n/100n,cancelledMessage:"Engine transaction was cancelled in the wallet.",revertedMessage:"Engine transaction reverted on-chain.",...(e.signal!==void 0?{signal:e.signal}:{}),onTransactionObservation:e.onTransactionObservation,onWalletRequest:e.onWalletRequest,onHash:e.onTxHash,onSubmitted:e.onSubmitted});return(p=e.onStatus)==null||p.call(e,"success"),{hash:n.transactionHash,explorerUrl:Oo(n.transactionHash,e.activeChain),receipt:n,summary:o};}function Fh(e){return e.router?e.permit2?e.stateView?e.v4StateView?e.v4Quoter?null:"Missing V4 quoter.":"Missing V4 StateView.":"Missing StateView.":"Missing Permit2.":"Missing engine router.";}const ys=/* @__PURE__ */new WeakMap();function Is(e){const t=Pt(e),n=t==null?void 0:t.addresses,o=t==null?void 0:t.version;if(!n||!o||!e.lendEnabled||e.canLend===!1)throw new N("Balanced lending is unavailable for this market.");if([[e.engine,n.aegisEngine],[e.router,n.aegisRouterV1],[e.permit2,n.permit2],[e.stateView,n.aegisStateView],[e.v4StateView,n.stateView],[e.poolKey.hooks,n.aegisHook]].some(([r,i])=>!r||!b(r,i))||!Y(je(e.poolKey),e.poolId)||!b(e.token0.address,e.poolKey.currency0)||!b(e.token1.address,e.poolKey.currency1)||[e.token0,e.token1].some(r=>r.chainId!==e.chainId||!Number.isInteger(r.decimals)||r.decimals<0||r.decimals>255))throw new N("The market does not match the trusted Engine deployment.");return{registry:n,version:o};}async function gr(e,t,n){var a;const o=await e.getBlock(n?{blockTag:"latest"}:{blockNumber:t.blockNumber});return o.number===t.blockNumber&&((a=o.hash)==null?void 0:a.toLowerCase())===t.blockHash.toLowerCase();}async function Sr(e){var w,v,g,I,T,P,S;(w=e.signal)==null||w.throwIfAborted();const t=structuredClone(e.market),{registry:n,version:o}=Is(t);if(!Mr(e.owner)||b(e.owner,ie)||e.nativeGasReserve<0n)throw new N("Balanced lending requires an account and a valid native reserve.");if(e.publicClient.chain&&e.publicClient.chain.id!==t.chainId||(await e.publicClient.getChainId())!==t.chainId)throw new N("Select the market network before quoting.");(v=e.signal)==null||v.throwIfAborted();const{fetchLendQuoteContext:a,quoteBalancedDeposit:r}=await Q(),i=await a(e.publicClient,{chainId:t.chainId,version:o,...Ee(t),poolId:t.poolId});if((g=e.signal)==null||g.throwIfAborted(),!Y(je(i.market.poolKey),t.poolId)||!Y(i.poolId,t.poolId)||i.chainId!==t.chainId||i.version!==o)throw new N("The live pool does not match this market.");const{frame:s}=i,c=await e.publicClient.getBalance({address:e.owner,blockNumber:s.blockNumber}),l=await Promise.all([t.token0,t.token1].map(async E=>{var $;const R=b(E.address,ie),[_,L]=R?[c,($=e.publicClient.chain)==null?void 0:$.nativeCurrency.decimals]:await Promise.all([e.publicClient.readContract({address:E.address,abi:to,functionName:"balanceOf",args:[e.owner],blockNumber:s.blockNumber}),e.publicClient.readContract({address:E.address,abi:to,functionName:"decimals",blockNumber:s.blockNumber})]);if(L!==E.decimals)throw new N("Token precision changed. Refresh the market before continuing.");return _;}));(I=e.signal)==null||I.throwIfAborted();const p={balance0:l[0],balance1:l[1],nativeBalance:c,nativeGasReserve:e.nativeGasReserve},u=r({market:i.market,frame:s,chainId:i.chainId,version:i.version,owner:e.owner,approvalSpender:n.aegisRouterV1,amount0Max:e.amount0Max,amount1Max:e.amount1Max,sharePriceWad:i.sharePriceWad,totalShares:i.totalShares,slippageBps:e.slippageBps,deadline:s.blockTimestamp+60n,funding:p,...(i.apy.available?{apyProjection:i.apy.projection}:{})});let m=u.feasible?"indicative":"infeasible",d=u.infeasibleReason,h=null;if(!(await gr(e.publicClient,s,!!e.withExecutionEvidence)))m="refresh-required",d="frame-changed";else if(e.withExecutionEvidence&&u.feasible&&u.call){const E={to:n.aegisRouterV1,data:u.call.calldata,value:u.call.value};try{await e.publicClient.request({method:"eth_call",params:[{from:e.owner,to:E.to,data:E.data,value:Qs(E.value)},{blockHash:s.blockHash,requireCanonical:!0}]}),(T=e.signal)==null||T.throwIfAborted(),(await gr(e.publicClient,s,!0))?(m="verified-at-frame",h=E):(m="refresh-required",d="frame-changed");}catch{(P=e.signal)==null||P.throwIfAborted(),m="preflight-failed",d="Could not verify both token authorizations and this deposit. Refresh and try again.";}}(S=e.signal)==null||S.throwIfAborted();const f={kind:"lend-balanced",owner:e.owner,market:t,slippageBps:e.slippageBps,frame:s,expiresAt:u.expiresAt,feasible:u.feasible,reason:d,execution:m,deposit:u.deposit,approvalPlans:u.approvalPlans,walletRemainder:u.walletRemainder,funding:p,limitingSide:u.limitingSide,nativeValue:u.nativeValue,display:u.display,postDeposit:u.postDeposit,tx:h};return f.feasible&&f.deposit&&m!=="refresh-required"&&ys.set(f,{market:structuredClone(t),owner:e.owner,amount0Max:f.deposit.amount0Max,amount1Max:f.deposit.amount1Max,minDeltaShares:f.deposit.minDeltaShares,nativeValue:f.nativeValue,slippageBps:e.slippageBps,nativeGasReserve:e.nativeGasReserve}),f;}async function Uh(e){var s,c,l,p,u,m;(s=e.signal)==null||s.throwIfAborted(),await((c=e.onCheckpoint)==null?void 0:c.call(e));const t=ys.get(e.quote);if(!t||!b(t.owner,e.wallet.account)||e.activeChain.chain.id!==t.market.chainId||e.activeChain.chainId!==t.market.chainId)throw new N("Review a fresh balanced deposit for this account and network.");Is(t.market);const n={...t,publicClient:e.publicClient,signal:e.signal},o=d=>d.feasible&&d.deposit!==null&&d.execution!=="refresh-required"&&d.deposit.amount0Max<=t.amount0Max&&d.deposit.amount1Max<=t.amount1Max&&d.deposit.minDeltaShares>=t.minDeltaShares&&d.nativeValue<=t.nativeValue,a=await Sr(n);if(await((l=e.onCheckpoint)==null?void 0:l.call(e)),!o(a))return{status:"review-required",quote:a};for(const[d,h]of[[t.market.token0,t.amount0Max],[t.market.token1,t.amount1Max]])(p=e.signal)==null||p.throwIfAborted(),await((u=e.onCheckpoint)==null?void 0:u.call(e)),await vs({wallet:e.wallet,publicClient:e.publicClient,activeChain:e.activeChain,token:d,amount:h,market:t.market,approvalMode:"exact",permit2AuthorizationMode:"spending-cap",signal:e.signal,onStatus:e.onStatus,onAuthorizationExecution:e.onAuthorizationExecution,onAuthorizationCheckpoint:async()=>{var f,w;(f=e.signal)==null||f.throwIfAborted(),await((w=e.onCheckpoint)==null?void 0:w.call(e));}});const r=await Sr({...n,withExecutionEvidence:!0});return await((m=e.onCheckpoint)==null?void 0:m.call(e)),!o(r)||!r.tx||r.execution!=="verified-at-frame"?{status:"review-required",quote:r}:{status:"confirmed",result:await Dn({wallet:e.wallet,publicClient:e.publicClient,activeChain:e.activeChain,tx:r.tx,signal:e.signal,expiresAt:r.expiresAt,minimumValiditySeconds:5n,onStatus:e.onStatus,onTxHash:e.onTxHash,onSubmitted:e.onSubmitted,onTransactionObservation:e.onTransactionObservation})};}const fa=1000000n,Hp=5e3;function Vh(e){return Math.max(0,e-Hp);}function ha(e){if(e.idle0<0n||e.idle1<0n||e.debtLLatest<0n)throw new RangeError("Engine idle and debt amounts must be non-negative.");if(!Number.isSafeInteger(e.maxLtvPips)||e.maxLtvPips<0||e.maxLtvPips>Number(fa))throw new RangeError("Engine maxLtvPips must be an integer between 0 and 1,000,000.");}function Es(e,t){return e===0n?0n:(e-1n)/t+1n;}function Wp(e){if(e<2n)return e;let t=1n<<BigInt(Math.ceil(e.toString(2).length/2));for(;;){const n=(t+e/t)/2n;if(n>=t)return t;t=n;}}function As(e){return Es(e.debtLLatest*fa,BigInt(e.maxLtvPips));}function Hh(e){if(ha(e),e.debtLLatest===0n)return!0;if(e.maxLtvPips===0)return!1;const t=As(e);return e.idle0*e.idle1>=t*t;}function Wh(e){ha(e);const t=e.side==="token0"?e.idle0:e.idle1;if(t===0n||e.debtLLatest===0n)return t;if(e.maxLtvPips===0)return 0n;const n=e.side==="token0"?e.idle1:e.idle0;if(n===0n)return 0n;const o=As(e),a=Es(o*o,n);return a>=t?0n:t-a;}function $h(e){if(ha(e),e.withdrawAmount<0n)throw new RangeError("Engine withdrawal amount must be non-negative.");if(e.debtLLatest===0n)return null;const t=e.side==="token0"?e.idle0:e.idle1;if(e.withdrawAmount>t)return null;const n=e.side==="token0"?e.idle0-e.withdrawAmount:e.idle0,o=e.side==="token1"?e.idle1-e.withdrawAmount:e.idle1,a=Wp(n*o);if(a===0n)return null;const r=e.debtLLatest*fa/a;return Number(r>BigInt(Number.MAX_SAFE_INTEGER)?Number.MAX_SAFE_INTEGER:r);}const Cr=10n**18n;function gs(e,t){return e.toLowerCase()===t.toLowerCase();}function $p(e){try{return[BigInt(e.deltaAmount0Raw),BigInt(e.deltaAmount1Raw)];}catch{return null;}}function Jn(e,t){const n=$p(e);if(!n)return null;const[o,a]=n,r=i=>t==="positive"?i>0n:i<0n;return r(o)&&a===0n?0:r(a)&&o===0n?1:null;}function Kp(e,t,n){if(t===null||n===null||!Number.isSafeInteger(t)||!Number.isSafeInteger(n)||t<0||n<0||t>255||n>255)return null;try{const o=BigInt(e.deltaIdle0Raw),a=BigInt(e.deltaIdle1Raw),r=o<0n?-o:o,i=a<0n?-a:a;if(r===0n||i===0n)return null;const s=i*10n**BigInt(t)*Cr/(r*10n**BigInt(n)),c=Number(s)/Number(Cr);return Number.isFinite(c)&&c>0?c:null;}catch{return null;}}function Ss(e){if(!e||typeof e!="object")return!1;const t=e;return t.schemaVersion==="1"&&typeof t.chainId=="number"&&Number.isSafeInteger(t.chainId)&&t.chainId>0&&typeof t.account=="string"&&/^0x[0-9a-fA-F]{40}$/.test(t.account)&&typeof t.marketId=="string"&&t.marketId.length>0&&typeof t.poolId=="string"&&/^0x[0-9a-fA-F]{64}$/.test(t.poolId)&&typeof t.txHash=="string"&&/^0x[0-9a-fA-F]{64}$/.test(t.txHash)&&(t.direction==="long"||t.direction==="short")&&typeof t.averageLeverage=="number"&&Number.isFinite(t.averageLeverage)&&t.averageLeverage>1&&typeof t.targetPrice=="number"&&Number.isFinite(t.targetPrice)&&t.targetPrice>0&&typeof t.horizonSeconds=="number"&&Number.isSafeInteger(t.horizonSeconds)&&t.horizonSeconds>=0&&typeof t.recordedAt=="string"&&Number.isFinite(Date.parse(t.recordedAt));}function Kh(e){return Ss(e);}function zp(e,t,n,o,a){return a.find(r=>Ss(r)&&r.chainId===e.chainId&&b(r.account,e.account)&&Y(r.poolId,e.poolId)&&gs(r.txHash,n)&&r.direction===o&&(t===null||Yt(r.marketId,t)))??null;}function zh(e,t,n=[]){var T,P,S;let o,a;try{o=BigInt(e.vaultId),a=BigInt(t.vaultId);}catch{return null;}if(o!==a||!Y(e.poolId,t.poolId)||e.marketId!=null&&t.marketId!=null&&!Yt(e.marketId,t.marketId))return null;const r=e.marketId??t.marketId,i=t.actions.filter(E=>E.kind==="vault_created");if(i.length!==1)return null;const s=i[0];if(!b(s.owner,e.account))return null;const c=t.actions.filter(E=>gs(E.txHash,s.txHash));if(((T=c[0])==null?void 0:T.kind)!=="vault_created")return null;const l=c.filter(E=>E.kind==="debt_modified");if(l.length!==1)return null;const p=l[0];let u;try{u=BigInt(p.principalDeltaActualRaw);}catch{return null;}if(u<=0n)return null;const m=c.indexOf(p),d=c.findIndex((E,R)=>R>m&&E.kind==="vault_locked");if(m<0||d<0)return null;const h=c.slice(0,m).filter(E=>E.kind==="idle_modified"),f=c.slice(m+1,d).filter(E=>E.kind==="idle_modified");if(h.length!==1||f.length!==2)return null;const w=Jn(f[0],"negative");if(w===null)return null;const v=w===0?1:0;if(Jn(h[0],"positive")!==v||Jn(f[1],"positive")!==v)return null;const g=w===1?"long":"short",I=zp(e,r,s.txHash,g,n);return{kind:"trade",vaultId:a.toString(),poolId:t.poolId,direction:g,openTxHash:s.txHash,openedAt:s.timestamp,entryPrice:null,entryPriceBasis:"unavailable",referencePrice:{basis:"debt-action-token-ratio",price:Kp(p,((P=e.token0)==null?void 0:P.decimals)??null,((S=e.token1)==null?void 0:S.decimals)??null)},averageLeverage:(I==null?void 0:I.averageLeverage)??null,targetPrice:(I==null?void 0:I.targetPrice)??null,horizonSeconds:(I==null?void 0:I.horizonSeconds)??null,source:I?"indexed-actions+stored-intent":"indexed-actions"};}const Cs=/* @__PURE__ */new Set(["1","56","130","8453","4663","57073"]),Gp=k().int().positive().refine(e=>Cs.has(String(e))),wa=C().regex(/^0x[0-9a-fA-F]{40}$/),Ge=C().regex(/^0x[0-9a-fA-F]{64}$/),xr=C().datetime(),Vt=/^(?:0|[1-9][0-9]*)(?:\.[0-9]*[1-9])?$/,jp=["1d","7d","30d","90d","180d"],Qp=["5m","1h","1d"],xs={"5m":300,"1h":3600,"1d":86400},Ts={"1d":{resolution:"5m",windowSeconds:86400,bucketCount:288},"7d":{resolution:"1h",windowSeconds:604800,bucketCount:168},"30d":{resolution:"1d",windowSeconds:2592e3,bucketCount:30},"90d":{resolution:"1d",windowSeconds:7776e3,bucketCount:90},"180d":{resolution:"1d",windowSeconds:15552e3,bucketCount:180}},Rs=V(jp),Xp=V(Qp);x({window:Rs.default("1d"),basis:V(["pool","token_market_reference"]).default("pool")});const ba=C().max(90).regex(/^evm_[1-9][0-9]{0,15}_0x[0-9a-fA-F]{64}$/,"Must be a canonical Engine market id").refine(e=>Cs.has(e.split("_")[1]??""),"Unsupported chainId"),Yp=V(["uniswap_v4_subgraph","pool_manager_rpc"]),Jp=V(["ready","warming_up","source_unavailable","reorg_detected"]),Zp=V(["ENGINE-CANDLE-SOURCE-001","ENGINE-CANDLE-SOURCE-002","ENGINE-CANDLE-SOURCE-003","ENGINE-CANDLE-SOURCE-004","ENGINE-CANDLE-SOURCE-005","ENGINE-CANDLE-SOURCE-006","ENGINE-CANDLE-SOURCE-010","ENGINE-CANDLE-REORG-001"]),bn=x({address:wa,decimals:k().int().min(0).max(255)}).strict(),Tr=x({blockNumber:k().int().nonnegative(),blockHash:Ge.nullable(),transactionHash:Ge,logIndex:k().int().nonnegative()}).strict(),Ps={t:k().int().nonnegative(),open:k().positive(),high:k().positive(),low:k().positive(),close:k().positive(),volumeToken0:C().regex(Vt),volumeToken1:C().regex(Vt)},Bs=e=>e.low<=Math.min(e.open,e.close)&&e.high>=Math.max(e.open,e.close)&&e.low<=e.high,ef=x({...Ps,aggregation:B("exact_swaps"),swapCount:k().int().positive(),provenance:x({firstSwap:Tr,lastSwap:Tr}).strict()}).strict().superRefine((e,t)=>{e.volumeToken0==="0"&&e.volumeToken1==="0"&&t.addIssue({code:"custom",message:"Swap candle must have volume"}),Bs(e)||t.addIssue({code:"custom",message:"Invalid candle OHLC ordering"});const n=e.provenance.firstSwap,o=e.provenance.lastSwap;(n.blockNumber>o.blockNumber||n.blockNumber===o.blockNumber&&n.logIndex>o.logIndex)&&t.addIssue({code:"custom",message:"Invalid candle provenance order"});}),tf=x({...Ps,aggregation:B("uniswap_pool_aggregate"),txCount:k().int().nonnegative(),volumeUSD:C().regex(Vt).optional(),feesUSD:C().regex(Vt).optional(),tvlUSD:C().regex(Vt).optional()}).strict().superRefine((e,t)=>{Bs(e)||t.addIssue({code:"custom",message:"Invalid candle OHLC ordering"});}),nf=ut("aggregation",[ef,tf]),of=x({requestedFrom:k().int().nonnegative(),requestedTo:k().int().nonnegative(),coverageStart:k().int().nonnegative(),completedThrough:k().int().nonnegative(),expectedBucketCount:k().int().min(1).max(288),completeBucketCount:k().int().min(0).max(288)}).strict().superRefine((e,t)=>{e.coverageStart===0&&e.completedThrough===0||e.coverageStart>0&&e.completedThrough>e.coverageStart||t.addIssue({code:"custom",message:"Invalid candle coverage"});}),af=x({from:k().int().nonnegative(),to:k().int().nonnegative(),reason:V(["indexing_gap","invalid_row"])}).strict(),rf=x({blockNumber:k().int().nonnegative().nullable(),blockHash:Ge.nullable(),timestamp:k().int().nonnegative().nullable()}).strict().superRefine((e,t)=>{const n=[e.blockNumber,e.blockHash,e.timestamp].filter(o=>o===null).length;n!==0&&n!==3&&t.addIssue({code:"custom",message:"Partial as-of provenance"});}),sf=x({status:Jp,lastProcessedBlockNumber:k().int().nonnegative().nullable(),lastProcessedBlockHash:Ge.nullable(),confirmationDepth:k().int().nonnegative(),observedAt:xr,updatedAt:xr,warnings:q(Zp).max(8)}).strict().superRefine((e,t)=>{e.lastProcessedBlockNumber===null!=(e.lastProcessedBlockHash===null)&&t.addIssue({code:"custom",message:"Partial cursor provenance"});}),kn=x({schemaVersion:B("2"),chainId:Gp,marketId:ba,poolId:Ge,poolManager:wa,baseAsset:bn,quoteAsset:bn,orientation:B("quote_per_base"),resolution:Xp,window:Rs,status:V(["ready","partial","no_data"]),candles:q(nf).max(288),candleCount:k().int().min(0).max(288),priceReference:x({kind:B("pool_state"),price:k().finite().positive(),blockNumber:k().int().nonnegative(),blockHash:Ge,timestamp:k().int().nonnegative(),observedAt:C().datetime()}).strict().nullable().optional(),coverage:of,gaps:q(af).max(288),source:Yp,asOf:rf,freshness:sf}).strict().superRefine((e,t)=>{const n=Ts[e.window],o=xs[n.resolution];(e.resolution!==n.resolution||e.coverage.requestedTo-e.coverage.requestedFrom!==n.windowSeconds||e.coverage.expectedBucketCount!==n.bucketCount||e.coverage.requestedFrom%o!==0||e.coverage.requestedTo%o!==0||e.coverage.coverageStart%o!==0||e.coverage.completedThrough%o!==0)&&t.addIssue({code:"custom",message:"Window, resolution, and coverage plan disagree"}),e.candles.some(d=>e.resolution==="5m"?d.aggregation!=="exact_swaps":d.aggregation!=="uniswap_pool_aggregate")&&t.addIssue({code:"custom",message:"Candle aggregation disagrees with resolution"});const a=/^evm_([0-9]+)_(0x[0-9a-fA-F]{64})$/.exec(e.marketId);(!a||Number(a[1])!==e.chainId||a[2].toLowerCase()!==e.poolId.toLowerCase())&&t.addIssue({code:"custom",message:"Market identity mismatch"}),e.baseAsset.address.toLowerCase()>=e.quoteAsset.address.toLowerCase()&&t.addIssue({code:"custom",message:"Assets must use canonical token0/token1 ordering"}),e.candleCount!==e.candles.length&&t.addIssue({code:"custom",message:"candleCount does not match candles"}),e.candleCount>e.coverage.completeBucketCount&&t.addIssue({code:"custom",message:"Candles exceed complete buckets"}),e.status==="no_data"&&e.candleCount!==0&&t.addIssue({code:"custom",message:"no_data cannot contain candles"}),e.status==="partial"&&e.candleCount===0&&!e.gaps.some(d=>d.reason==="invalid_row")&&t.addIssue({code:"custom",message:"empty partial response requires a rejected row gap"});let r=-1;for(const d of e.candles){if(d.t%o!==0||d.t<e.coverage.requestedFrom||d.t<e.coverage.coverageStart||d.t>=e.coverage.requestedTo||d.t>=e.coverage.completedThrough||d.t<=r){t.addIssue({code:"custom",message:"Candles must be aligned and ordered"});break;}r=d.t;}let i=-1,s=0;const c=Math.max(e.coverage.requestedFrom,e.coverage.coverageStart),l=Math.min(e.coverage.requestedTo,e.coverage.completedThrough);for(const d of e.gaps){if(d.from%o!==0||d.to%o!==0||d.to<=d.from||d.from<c||d.to>l||d.from<i){t.addIssue({code:"custom",message:"Gaps must be aligned and ordered"});break;}s+=(d.to-d.from)/o,i=d.to;}e.candles.some(d=>e.gaps.some(h=>d.t>=h.from&&d.t<h.to))&&t.addIssue({code:"custom",message:"A candle cannot overlap a gap"});const p=c<l?(l-c)/o:0;e.coverage.completeBucketCount+s!==p&&t.addIssue({code:"custom",message:"Coverage and gaps are inconsistent"}),e.status==="ready"&&(e.freshness.status!=="ready"||e.coverage.coverageStart>e.coverage.requestedFrom||e.coverage.completedThrough<e.coverage.requestedTo||e.coverage.completeBucketCount!==n.bucketCount||e.gaps.length!==0)&&t.addIssue({code:"custom",message:"ready requires complete coverage"});const u=e.asOf.blockNumber===null||e.freshness.lastProcessedBlockNumber===null,m=e.status==="no_data"&&e.candleCount===0&&e.coverage.coverageStart===0&&e.coverage.completedThrough===0&&e.coverage.completeBucketCount===0&&e.asOf.blockNumber!==null&&(e.freshness.status==="warming_up"||e.freshness.status==="source_unavailable"||e.freshness.status==="reorg_detected")&&e.freshness.lastProcessedBlockNumber===null;!m&&e.asOf.blockNumber===null!=(e.freshness.lastProcessedBlockNumber===null)&&t.addIssue({code:"custom",message:"Source head and cursor availability must match"}),e.asOf.blockNumber!==null&&e.freshness.lastProcessedBlockNumber!==null&&(e.freshness.lastProcessedBlockNumber>e.asOf.blockNumber||e.candles.some(d=>d.aggregation==="exact_swaps"&&d.provenance.lastSwap.blockNumber>e.asOf.blockNumber))&&t.addIssue({code:"custom",message:"Provenance exceeds source head"}),e.freshness.lastProcessedBlockNumber!==null&&e.candles.some(d=>d.aggregation==="exact_swaps"&&d.provenance.lastSwap.blockNumber>e.freshness.lastProcessedBlockNumber)&&t.addIssue({code:"custom",message:"Provenance exceeds processed cursor"}),e.asOf.blockNumber!==null&&e.asOf.blockHash!==null&&e.freshness.lastProcessedBlockNumber===e.asOf.blockNumber&&e.freshness.lastProcessedBlockHash!==e.asOf.blockHash&&t.addIssue({code:"custom",message:"Cursor hash disagrees with source head"});for(const d of e.candles){if(d.aggregation!=="exact_swaps")continue;const{firstSwap:h,lastSwap:f}=d.provenance;h.blockNumber===f.blockNumber&&h.blockHash!==f.blockHash&&t.addIssue({code:"custom",message:"Same-block candle provenance hash mismatch"}),e.source==="pool_manager_rpc"&&(h.blockHash===null||f.blockHash===null)&&t.addIssue({code:"custom",message:"RPC candle provenance requires block hashes"});for(const w of[h,f])e.asOf.blockNumber!==null&&e.asOf.blockHash!==null&&w.blockNumber===e.asOf.blockNumber&&w.blockHash!==null&&w.blockHash!==e.asOf.blockHash&&t.addIssue({code:"custom",message:"Swap block hash disagrees with source head"}),e.freshness.lastProcessedBlockNumber!==null&&e.freshness.lastProcessedBlockHash!==null&&w.blockNumber===e.freshness.lastProcessedBlockNumber&&w.blockHash!==null&&w.blockHash!==e.freshness.lastProcessedBlockHash&&t.addIssue({code:"custom",message:"Swap block hash disagrees with source cursor"});}e.asOf.timestamp!==null&&e.coverage.completedThrough>Math.floor(e.asOf.timestamp/o)*o&&t.addIssue({code:"custom",message:"Completed coverage exceeds source time"}),u&&!m&&(e.freshness.status!=="source_unavailable"||e.coverage.completeBucketCount!==0)&&t.addIssue({code:"custom",message:"Null provenance is only valid before the first source read"});}),Ao=x({blockNumber:k().int().positive(),blockHash:Ge,timestamp:k().int().positive(),observedAt:C().datetime()}).strict(),Rr=x({role:V(["base","quote"]),chainId:k().int().positive(),address:wa,decimals:k().int().min(0).max(255),resolution:V(["1h","1d"]),sourceDataset:V(["TokenHourData","TokenDayData"]),status:V(["ready","warming_up","source_unavailable"]),independence:B("unknown"),independenceReason:B("historical_price_venue_untracked"),coverageStart:k().int().nonnegative(),completedThrough:k().int().nonnegative(),sourceHead:Ao.nullable()}).strict(),Ms=x({schemaVersion:B("1"),basis:B("token_market_reference"),format:B("line"),method:B("ratio_of_bucket_closes"),sampleSynchronization:B("bucket_only"),usage:B("display_only"),chainId:k().int().positive(),marketId:ba,poolId:Ge,baseAsset:bn,quoteAsset:bn,orientation:B("quote_per_base"),resolution:V(["1h","1d"]),window:V(["7d","30d","90d","180d"]),status:V(["ready","partial","no_data"]),points:q(x({t:k().int().nonnegative(),value:k().finite().positive(),baseCloseUsd:C().regex(/^(?:0|[1-9][0-9]*)(?:\.[0-9]+)?$/),quoteCloseUsd:C().regex(/^(?:0|[1-9][0-9]*)(?:\.[0-9]+)?$/),baseSource:Ao,quoteSource:Ao}).strict()).max(180),pointCount:k().int().min(0).max(180),components:sc([Rr,Rr]),gaps:q(x({from:k().int().nonnegative(),to:k().int().positive(),reason:V(["missing_component","invalid_component","outside_coverage"])}).strict()).max(180),coverage:x({requestedFrom:k().int().nonnegative(),requestedTo:k().int().positive(),expectedBucketCount:k().int().min(1).max(180),observedPairCount:k().int().min(0).max(180)}).strict(),source:B("uniswap_v4_subgraph"),attribution:x({label:B("Uniswap V4 subgraph"),url:B("https://github.com/Uniswap/v4-subgraph")}).strict()}).strict();Mo([kn,Ms]);const dn=C().regex(/^(0|[1-9][0-9]*)$/).max(78).refine(e=>/^(0|[1-9][0-9]*)$/.test(e)&&e.length<=78&&BigInt(e)<1n<<256n),re=k().int().nonnegative().max(Number.MAX_SAFE_INTEGER),Pr=k().nonnegative().nullable(),cf=ut("status",[x({status:B("verified"),basis:B("irm-accrual-preview"),rpcBlockNumber:re,blockHash:C().regex(/^0x[0-9a-f]{64}$/),observedAt:C().datetime(),elapsedSeconds:dn,canonicality:B("rpc-checked-at-read"),finality:B("not-a-finality-verdict")}).strict(),x({status:B("unavailable"),reason:V(["legacy-unpinned","invalid-provenance"])}).strict()]),lf=x({t:re,observedAt:C().datetime(),evmBlockNumber:re,borrowAprPct:Pr,lendAprPct:Pr,lendingRateBasis:B("simple-borrow-interest-apr"),utilizationPct:k().min(0).max(100).nullable(),ratePerSecondWad:dn.nullable(),fullUtilizationRate:dn.nullable(),sharePriceWad:dn.nullable(),rateObservation:cf}).strict(),uf=x({schemaVersion:B("1"),marketId:C().regex(/^evm_[0-9]+_0x[0-9a-fA-F]+$/),resolution:B("12h"),window:V(["7d","30d","60d"]),status:V(["ready","partial","warming_up","no_data"]),pointCount:re,points:q(lf).max(121),updatedAt:C().datetime().nullable(),coverage:x({fromBucket:re,throughClosedBucket:re,expectedClosedBuckets:re,firstObservedBucket:re.nullable(),leadingMissingBucketCount:re,presentClosedBuckets:re,missingBuckets:q(re).max(120),missingRateBuckets:q(re).max(120),verifiedRatePoints:re,legacyRatePoints:re,invalidRows:re}).strict()}).strict(),df=Mo([kn,x({schemaVersion:B("1"),history:kn,segments:q(x({from:k().int().nonnegative(),to:k().int().nonnegative(),price:k().finite().positive()}).strict()).max(289)}).strict()]).superRefine((e,t)=>{if(!("segments"in e))return;const n=e.history;let o=-1/0;for(const a of e.segments){if(a.from<Math.max(n.coverage.requestedFrom,n.coverage.coverageStart)||a.to>Math.min(n.coverage.requestedTo,n.coverage.completedThrough)||a.to<a.from||a.from<o||n.freshness.status==="reorg_detected"||n.gaps.some(r=>a.from<r.to&&a.to>r.from)){t.addIssue({code:"custom",message:"Price segments exceed verified coverage"});break;}o=a.to;}});class ue extends Error{constructor(n,o=503,a=null){super("Engine market data is unavailable.");j(this,"name","AegisEngineMarketDataReadError");this.code=n,this.status=o,this.retryAfterSeconds=a;}}function se(){throw new ue("invalid-response");}const mf=3e4,go=16,_s=Te({ttlMs:mf,maxEntries:go}),tt=/* @__PURE__ */new Map();let So=0,Zn=0;function Gh(){_s.clear(),tt.clear(),So++;}function On(e,t,n,o){var l;(l=e.signal)==null||l.throwIfAborted();const a={...e.source,headers:{...e.source.headers}},r=JSON.stringify([jt(a.baseUrl),Po(a.headers),a.timeoutMs??15e3,e.marketId,t,n]);for(const[p,u]of tt)u.until<=Date.now()&&tt.delete(p);const i=tt.get(r);if(i&&i.until>Date.now())return Promise.reject(new ue(i.error.code,i.error.status,Math.ceil((i.until-Date.now())/1e3)));tt.delete(r);const s=So,c=_s.read(r,async()=>{if(Zn>=go||tt.size>=go)throw new ue("unavailable",503,30);Zn++;try{return await o({...e,source:a,signal:void 0});}catch(p){const u=p instanceof ue?p:p instanceof Error&&p.name==="TimeoutError"?new ue("unavailable",504):null;if(s===So&&u&&(u.status===404||u.status===408||u.status===429||u.status>=500)&&u.code==="unavailable"){const m=Math.max(u.status===404?60:30,u.retryAfterSeconds??0);tt.set(r,{until:Date.now()+m*1e3,error:u});}throw p;}finally{Zn--;}});return $e(c,e.signal,"Engine market request aborted.").then(p=>structuredClone(p));}function ka(e,t){if(e)for(const n of["baseAsset","quoteAsset"])(e[n].address.toLowerCase()!==t[n].address.toLowerCase()||e[n].decimals!==t[n].decimals)&&se();}async function qn(e,t,n,o){var l,p,u;if(!ba.safeParse(e.marketId).success)throw new ue("invalid-query",400);const a=e.source.timeoutMs??15e3;if(!Number.isFinite(a)||a<=0||a>12e4)throw new RangeError("Market request timeout must be between 1 and 120000 milliseconds.");const{signal:r,cleanup:i}=lt({signal:e.signal,timeoutMs:a,timeoutMessage:"Engine market request timed out."});let s;const c=()=>{s==null||s.cancel().catch(()=>{});};try{r==null||r.throwIfAborted();const m=jt(e.source.baseUrl),d=await fetch(`${m}${t.replace("{marketId}",encodeURIComponent(e.marketId))}?${new URLSearchParams(n)}`,{headers:e.source.headers,signal:r,cache:"no-store"});if(!d.ok)throw(l=d.body)==null||l.cancel().catch(()=>{}),new ue("unavailable",d.status,Bo(d.headers.get("retry-after"),300));const h=512*1024;if(Number(d.headers.get("content-length"))>h)throw(p=d.body)==null||p.cancel().catch(()=>{}),new ue("response-limit");s=(u=d.body)==null?void 0:u.getReader(),s||se(),r==null||r.addEventListener("abort",c,{once:!0});const f=[];let w=0;for(;;){r==null||r.throwIfAborted();const P=await s.read();if(r==null||r.throwIfAborted(),P.done)break;if(w+=P.value.byteLength,w>h)throw new ue("response-limit");f.push(P.value);}const v=new Uint8Array(w);let g=0;for(const P of f)v.set(P,g),g+=P.length;let I;try{I=JSON.parse(new TextDecoder().decode(v));}catch{se();}const T=o.safeParse(I);return T.success||se(),T.data;}catch(m){throw r==null||r.throwIfAborted(),m instanceof ue?m:new ue("unavailable");}finally{r==null||r.removeEventListener("abort",c),c(),s==null||s.releaseLock(),i();}}function va(e,t,n){var a;const o=e.marketId.split("_");(t.marketId!==e.marketId||t.chainId!==Number(o[1])||t.poolId.toLowerCase()!==((a=o[2])==null?void 0:a.toLowerCase())||t.window!==n)&&se();}async function pf(e){const t=e.window??"1d";if(!["1d","7d","30d","90d","180d"].includes(t))throw new ue("invalid-query",400);const n=await qn(e,"/v1/engine/markets/{marketId}/candles",{window:t,basis:"pool"},kn);return va(e,n,t),n;}async function ff(e){const t=e.window??"7d";if(!["7d","30d","90d","180d"].includes(t))throw new ue("invalid-query",400);const n=await qn(e,"/v1/engine/markets/{marketId}/candles",{window:t,basis:"token_market_reference"},Ms);return va(e,n,t),hf(n),n;}function hf(e){const t=Ts[e.window],n=t.resolution==="1h"?3600:86400,o=e.coverage;(e.resolution!==t.resolution||o.requestedTo-o.requestedFrom!==t.windowSeconds||o.expectedBucketCount!==t.bucketCount||o.requestedFrom%n||o.requestedTo%n||e.pointCount!==e.points.length||o.observedPairCount!==e.pointCount||e.baseAsset.address.toLowerCase()>=e.quoteAsset.address.toLowerCase())&&se();for(const[i,s]of e.components.entries()){const c=i===0?e.baseAsset:e.quoteAsset;(s.role!==(i===0?"base":"quote")||s.address.toLowerCase()!==c.address.toLowerCase()||s.chainId!==e.chainId||s.decimals!==c.decimals||s.resolution!==e.resolution||s.sourceDataset!==(e.resolution==="1h"?"TokenHourData":"TokenDayData")||s.coverageStart>s.completedThrough||s.coverageStart%n||s.completedThrough%n||s.sourceHead&&(s.completedThrough>s.sourceHead.timestamp||Date.parse(s.sourceHead.observedAt)/1e3<s.sourceHead.timestamp))&&se();}let a=-1;for(const i of e.points){const s=Number(i.baseCloseUsd)/Number(i.quoteCloseUsd);(i.t<=a||i.t%n||i.t<o.requestedFrom||i.t>=o.requestedTo||!Number.isFinite(s)||s<=0||Math.abs(s-i.value)>s*1e-12)&&se();for(const[c,l]of[i.baseSource,i.quoteSource].entries()){const p=e.components[c],u=p.sourceHead;(!u||i.t<p.coverageStart||i.t>=p.completedThrough||l.timestamp<i.t+n||l.timestamp>u.timestamp||l.blockNumber>u.blockNumber||l.blockNumber===u.blockNumber&&l.blockHash!==u.blockHash||Date.parse(l.observedAt)/1e3<l.timestamp)&&se();}a=i.t;}a=-1;let r=0;for(const i of e.gaps)(i.from<a||i.from%n||i.to%n||i.to<=i.from||i.from<o.requestedFrom||i.to>o.requestedTo||e.points.some(s=>s.t>=i.from&&s.t<i.to))&&se(),r+=(i.to-i.from)/n,a=i.to;(e.pointCount+r!==o.expectedBucketCount||e.status==="no_data"&&e.pointCount!==0||e.status==="ready"&&(e.gaps.length!==0||e.components.some(i=>i.status!=="ready"||!i.sourceHead)))&&se();}async function wf(e){var d,h;const t=e.window??"30d";if(!["7d","30d","60d"].includes(t))throw new ue("invalid-query",400);const n=await qn(e,"/v1/engine/markets/{marketId}/rates/history",{window:t},uf);(n.marketId!==e.marketId||n.window!==t)&&se();const o=n.coverage,a=Number(t.slice(0,-1))*2,r=43200;(n.pointCount!==n.points.length||n.updatedAt!==(((d=n.points.at(-1))==null?void 0:d.observedAt)??null)||o.expectedClosedBuckets!==a||o.fromBucket%r||o.throughClosedBucket%r||o.throughClosedBucket-o.fromBucket!==(a-1)*r)&&se();let i=-1;const s=/* @__PURE__ */new Map();for(const f of n.points)(f.t<=i||f.t%r||f.t<o.fromBucket||f.t>o.throughClosedBucket+r||Date.parse(f.observedAt)/1e3<f.t||Date.parse(f.observedAt)/1e3>=f.t+r||f.rateObservation.status==="verified"&&(f.rateObservation.observedAt!==f.observedAt||f.ratePerSecondWad===null||BigInt(f.rateObservation.elapsedSeconds)>BigInt(Math.floor(Date.parse(f.observedAt)/1e3))))&&se(),s.set(f.t,f),i=f.t;const c=[],l=[];for(let f=o.fromBucket;f<=o.throughClosedBucket;f+=r){const w=s.get(f);w||c.push(f),(!w||w.borrowAprPct===null||w.lendAprPct===null||w.ratePerSecondWad===null)&&l.push(f);}const p=((h=n.points[0])==null?void 0:h.t)??null,u=p===null?0:c.filter(f=>f<p).length,m=n.pointCount===0?"no_data":n.pointCount===1?"warming_up":l.length>u||o.invalidRows?"partial":"ready";return(JSON.stringify(o.missingBuckets)!==JSON.stringify(c)||JSON.stringify(o.missingRateBuckets)!==JSON.stringify(l)||o.presentClosedBuckets!==a-c.length||o.firstObservedBucket!==p||o.leadingMissingBucketCount!==u||n.status!==m||o.verifiedRatePoints!==n.points.filter(f=>f.rateObservation.status==="verified").length||o.legacyRatePoints!==n.points.filter(f=>f.rateObservation.status==="unavailable"&&f.rateObservation.reason==="legacy-unpinned").length)&&se(),n;}async function jh(e){const t=e.window??"1d",n=await On(e,"pool",t,o=>pf({...o,window:t}));return ka(e.expectedAssets,n),n;}async function Qh(e){const t=await On(e,"pool_price_line","1d",async n=>{const o=await qn(n,"/v1/engine/markets/{marketId}/candles",{window:"1d",basis:"pool",format:"price_line"},df),a="history"in o?o.history:o;return va(n,a,"1d"),"segments"in o?{...a,priceSegments:o.segments}:a;});return ka(e.expectedAssets,t),t;}function Xh(e){return e.freshness.status==="reorg_detected"?[]:e.priceSegments?e.priceSegments:e.candles.flatMap((t,n)=>{var i;const o=t.t+xs[e.resolution],a=e.gaps.find(s=>s.to>o),r=Math.min(e.coverage.completedThrough,((i=e.candles[n+1])==null?void 0:i.t)??1/0,(a==null?void 0:a.from)??1/0);return r>=o?[{from:o,to:r,price:t.close}]:[];});}async function Yh(e){const t=e.window??"7d",n=await On(e,"token_market_reference",t,o=>ff({...o,window:t}));return ka(e.expectedAssets,n),n;}async function Jh(e){const t=e.window??"30d";return On(e,"rates",t,n=>wf({...n,window:t}));}function Zh(e){const t=[];let n=0;for(const o of e.candles){const a=t.at(-1),r=a==null?void 0:a.at(-1);for(;r&&e.gaps[n]&&e.gaps[n].to<=r.t;)n++;const i=e.gaps[n];!a||r&&i&&i.from<o.t&&i.to>r.t?t.push([o]):a.push(o);}return t;}const bf=180n,Co=60n,kf=6e4,vf=/^[A-Za-z0-9._:-]+$/;function W(e,t){return e.toLowerCase()===t.toLowerCase();}function pe(e,t=/* @__PURE__ */new WeakMap()){if(e===null||typeof e!="object")return e;const n=t.get(e);if(n)return n;if(Array.isArray(e)){const a=[];t.set(e,a);for(const r of e)a.push(pe(r,t));return Object.freeze(a);}const o={};t.set(e,o);for(const a of Reflect.ownKeys(e))o[a]=pe(e[a],t);return Object.freeze(o);}function yf(){var e,t;return((t=(e=globalThis.crypto)==null?void 0:e.randomUUID)==null?void 0:t.call(e))??`aegis-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,14)}`;}function If(e){const t=e??yf();if(t.length<8||t.length>128||!vf.test(t))throw new TypeError("Engine execution sessionId must be 8-128 URL-safe correlation characters.");return t;}function Ns(e,t){return e.walletAction===t.walletAction&&W(e.target,t.target)&&(e.spender===null?t.spender===null:t.spender!==null&&W(e.spender,t.spender))&&e.requestedAmount===t.requestedAmount&&e.expiration===t.expiration&&e.scope===t.scope;}function ya(e,t){return e.operation===t.operation&&e.chainId===t.chainId&&W(e.account,t.account)&&e.marketId===t.marketId&&W(e.token.address,t.token.address)&&e.amount===t.amount&&e.approvalMode===t.approvalMode&&W(e.router,t.router)&&W(e.permit2,t.permit2)&&W(e.vaultRegistry,t.vaultRegistry);}function Ef(e,t){if(!ya(e,t))return[{kind:"intent-changed"}];const n=[];e.walletChainSwitchRequired===!1&&t.walletChainSwitchRequired!==!1&&n.push({kind:"wallet-chain-switch-added"});const o=new Map(e.steps.map(a=>[a.kind,a]));for(const a of t.steps){if(a.kind==="open-position"||a.status!=="required")continue;const r=o.get(a.kind);!r||r.status!=="required"?n.push({kind:"permission-added",step:a.kind}):Ns(r,a)||n.push({kind:"permission-changed",step:a.kind});}return n;}function Ds(e,t){return e.direction===t.direction&&e.market.chainId===t.market.chainId&&e.market.id===t.market.id&&e.market.poolId.toLowerCase()===t.market.poolId.toLowerCase()&&W(e.market.token0.address,t.market.token0.address)&&W(e.market.token1.address,t.market.token1.address)&&W(e.collateralToken.address,t.collateralToken.address)&&W(e.intent.owner,t.intent.owner)&&e.intent.inputIsToken0===t.intent.inputIsToken0&&e.intent.collateralIn===t.intent.collateralIn&&e.intent.leverage===t.intent.leverage&&e.intent.horizonSeconds===t.intent.horizonSeconds&&e.intent.priceMove===t.intent.priceMove&&e.intent.slippageBps===t.intent.slippageBps&&e.intent.maxPriceImpactBps===t.intent.maxPriceImpactBps&&e.deposit.amount0===t.deposit.amount0&&e.deposit.amount1===t.deposit.amount1;}function Af(e,t){return!e||!t?e!==t:e.daysToLiquidation==="INF"?t.daysToLiquidation!=="INF":t.daysToLiquidation==="INF"?!1:Math.floor(t.daysToLiquidation)<Math.floor(e.daysToLiquidation);}function Br(e){const t=e<1e4?10:100;return Math.round(e/t)*t;}function gf(e,t){if(!Ds(e,t))return[{kind:"intent-changed"}];const n=[];if(!e.position||!t.position)return e.position!==t.position&&n.push({kind:"position-availability-changed"}),n;const o=e.adaptiveFee??null,a=t.adaptiveFee??null;return o&&!a?n.push({kind:"adaptive-fee-evidence-unavailable"}):o&&a&&(a.evaluationScope!==o.evaluationScope&&n.push({kind:"adaptive-fee-mode-changed"}),a.manualOverride!==o.manualOverride&&n.push({kind:"adaptive-manual-override-changed"}),a.adaptiveTickThresholdTicks<o.adaptiveTickThresholdTicks&&n.push({kind:"adaptive-threshold-lower"}),!o.surgeActive&&a.surgeActive&&n.push({kind:"adaptive-surge-entered"}),a.activeFeePpm>o.activeFeePpm&&n.push({kind:"active-fee-higher"})),(!!e.swap!=!!t.swap||e.swap&&t.swap&&e.swap.inputIsToken0!==t.swap.inputIsToken0)&&n.push({kind:"swap-route-changed"}),e.swap&&t.swap&&t.swap.amountOutMinimum<e.swap.amountOutMinimum&&n.push({kind:"minimum-output-lower"}),e.swap&&t.swap&&t.swap.priceImpactBps>e.swap.priceImpactBps&&n.push({kind:"price-impact-higher"}),t.position.leverage.toFixed(2)!==e.position.leverage.toFixed(2)&&n.push({kind:"displayed-leverage-changed"}),t.position.executionLtvPips>e.position.executionLtvPips&&n.push({kind:"opening-ltv-higher"}),t.position.interestCostToken1>e.position.interestCostToken1&&n.push({kind:"interest-higher"}),t.position.grossReturnAtTargetPct+5e-3<e.position.grossReturnAtTargetPct&&n.push({kind:"target-return-lower"}),t.thresholds.maxLtvPips<e.thresholds.maxLtvPips&&n.push({kind:"borrow-limit-lower"}),t.thresholds.hardLtvPips<e.thresholds.hardLtvPips&&n.push({kind:"liquidation-threshold-lower"}),e.position.marketUtilization&&(!t.position.marketUtilization||Br(t.position.marketUtilization.afterPips)>Br(e.position.marketUtilization.afterPips))&&n.push({kind:"utilization-worse-or-missing"}),Af(e.position,t.position)&&n.push({kind:"runway-shorter"}),n;}function Sf(e){const{intent:t,reviewed:n}=e;if(e.activeChain.chainId!==t.market.chainId||!W(e.wallet.account,t.owner)||t.token.chainId!==t.market.chainId||!W(t.token.address,t.market.token0.address)&&!W(t.token.address,t.market.token1.address))throw new TypeError("Engine execution context does not match this trade intent.");const o={...n.plan,account:t.owner,chainId:t.market.chainId,marketId:t.market.id,token:t.token,amount:t.amount,approvalMode:t.approvalMode},a=W(t.token.address,t.market.token0.address)?n.quote.deposit.amount0:n.quote.deposit.amount1,r=n.quote.intent;if(!ya(o,n.plan)||n.quote.direction!==t.direction||n.quote.market.chainId!==t.market.chainId||n.quote.market.id!==t.market.id||n.quote.market.poolId.toLowerCase()!==t.market.poolId.toLowerCase()||!W(n.quote.market.token0.address,t.market.token0.address)||!W(n.quote.market.token1.address,t.market.token1.address)||!W(n.quote.collateralToken.address,t.token.address)||!W(r.owner,t.owner)||r.inputIsToken0!==W(t.token.address,t.market.token0.address)||r.collateralIn!==t.amount||r.leverage!==(t.leverage??null)||r.horizonSeconds!==t.horizonSeconds||r.priceMove!==t.priceMove||r.slippageBps!==t.slippageBps||r.maxPriceImpactBps!==t.maxPriceImpactBps||!t.market.router||!W(n.plan.router,t.market.router)||!t.market.permit2||!W(n.plan.permit2,t.market.permit2)||!t.market.vaultRegistry||!W(n.plan.vaultRegistry,t.market.vaultRegistry)||a!==t.amount)throw new TypeError("Reviewed Engine plan or quote does not match this trade intent.");}function Cf(e){const t=e&&typeof e=="object"?e.hash:null;return typeof t=="string"&&/^0x[0-9a-fA-F]{64}$/.test(t)?t:null;}function xf(e){const t=Object.freeze({provider:e.wallet.provider,account:e.wallet.account}),n=e.publicClient,o=pe(e.activeChain),a={wallet:t,publicClient:n,activeChain:o};return{async readPlan(r,i){i==null||i.throwIfAborted();const s=await Wt(t.provider);return i==null||i.throwIfAborted(),Fp({publicClient:n,market:r.market,owner:r.owner,walletChainId:s,token:r.token,amount:r.amount,approvalMode:r.approvalMode,permit2AuthorizationMode:"spending-cap"});},async ensureChain(r,i){i==null||i.throwIfAborted(),await Qe({provider:t.provider,chain:o}),i==null||i.throwIfAborted();},authorizeVault(r,i,s){return Vp({...a,market:r.market,signal:s,onTransactionObservation:c=>{var l;c.status==="submitted"&&i.onHash("vault-operator",c.hash,c.executionChanged),(l=e.onTransactionObservation)==null||l.call(e,c,"authorization");},onWalletRequest:()=>i.onWalletRequest("vault-operator"),onTxHash:c=>{c&&i.onHash("vault-operator",c);}});},async authorizeToken(r,i,s){await vs({...a,market:r.market,token:r.token,amount:r.amount,approvalMode:r.approvalMode,permit2AuthorizationMode:"spending-cap",signal:s,onAuthorizationExecution:c=>{var l;try{(l=e.onAuthorizationExecution)==null||l.call(e,c);}catch{}c.status==="wallet-requested"&&i.onWalletRequest(c.kind),c.status==="submitted"&&i.onHash(c.kind,c.hash,c.executionChanged);},onAuthorizationCheckpoint:i.onCheckpoint});},quote(r,i){return xp({publicClient:n,market:r.market,owner:r.owner,direction:r.direction,collateralIn:r.amount,inputIsToken0:W(r.token.address,r.market.token0.address),horizonSeconds:r.horizonSeconds,priceMove:r.priceMove,leverage:r.leverage,slippageBps:r.slippageBps,maxPriceImpactBps:r.maxPriceImpactBps,deadline:BigInt(Math.floor(Date.now()/1e3))+bf,forceExecutionEvidenceRefresh:!0,signal:i});},sendOpen(r,i,s,c){if(!i.tx)throw new N("The Engine quote is not executable.",{kind:"quote"});return Dn({...a,tx:i.tx,expiresAt:i.expiresAt,minimumValiditySeconds:Co,permit2Context:{token:r.token,permit2:i.market.permit2,router:i.market.router,amount:r.amount,inlinePermit:!1},signal:c,onTransactionObservation:l=>{var p;l.status==="submitted"&&s.onHash("open-position",l.hash,l.executionChanged),(p=e.onTransactionObservation)==null||p.call(e,l,"action");},onWalletRequest:()=>s.onWalletRequest("open-position"),onTxHash:l=>{l&&s.onHash("open-position",l);}});},checkReceipt(r,i,s){return cc({publicClient:n,hash:s,timeoutMs:kf});}};}function e0(e){return Tf(e,xf(e));}function Tf(e,t){Sf(e);const n=pe(e.intent),o=e.onChange,a=If(e.sessionId);let r=pe(e.reviewed.plan),i=pe(e.reviewed.quote),s=r,c=i,l="ready",p=null,u=0,m=null,d={kind:"none"},h=null,f=null,w=!1,v=null,g,I=0,T=(/* @__PURE__ */new Date()).toISOString(),P=null,S=null,E=null,R=null;const _=/* @__PURE__ */new Set(),L=/* @__PURE__ */new Set(),$=[],G=[],te=/* @__PURE__ */new Map(),Me=y=>{s=pe(y);for(const A of s.steps){G.includes(A.kind)||G.push(A.kind);const M=te.get(A.kind);A.status==="satisfied"?(te.set(A.kind,{kind:A.kind,status:"confirmed",hash:(M==null?void 0:M.hash)??null}),A.kind!=="open-position"&&L.add(A.kind)):(!M||M.status==="failed"||M.status==="cancelled")&&te.set(A.kind,{kind:A.kind,status:"planned",hash:null});}};Me(s);const ke=()=>l==="quote-review-required"&&p?{kind:"accept-review",revision:p.revision}:l==="awaiting-receipt"&&f?{kind:"check-receipt",hash:f}:l==="ready"||l==="resume-required"?{kind:"continue"}:(l==="failed"||l==="cancelled")&&d.kind!=="none"&&d.kind!=="view-transaction"?{kind:"continue"}:l==="executing"&&!f?{kind:"cancel"}:{kind:"none"},ge=()=>l==="quote-review-required",we=()=>{const y=Object.freeze(G.flatMap(ve=>{const ce=te.get(ve);return ce?[Object.freeze({...ce})]:[];})),A=h?y.find(ve=>ve.kind===h)??null:null,M=p?Object.freeze({...p,reasons:Object.freeze(p.reasons.map(ve=>Object.freeze({...ve})))}):null,O=Object.freeze({...ke()}),Se=m?Object.freeze({...m}):null,Ue=Object.freeze({...d});return Object.freeze({schemaVersion:"1",kind:"engine-trade-open-execution",sessionId:a,sequence:I,occurredAt:T,chainId:n.market.chainId,quoteRevision:u,phase:l,plan:s,quote:c,review:M,next:O,steps:y,currentStep:A,completedPermissions:Object.freeze([...L]),completedTransactions:Object.freeze($.map(ve=>Object.freeze({...ve}))),transactionHash:v,...(g?{receiptSummary:g}:{}),quoteReviewRequired:p!==null,failure:Se,recovery:Ue});},X=()=>P??(P=we()),K=()=>{I+=1,T=(/* @__PURE__ */new Date()).toISOString(),P=we();try{o==null||o(P);}catch{}for(const y of _)try{y();}catch{}},H=(y,A,M)=>{G.includes(y)||G.push(y),te.set(y,{kind:y,status:A,hash:M});},ae=(y,A)=>{$.some(M=>M.kind===y&&M.hash===A)||$.push({kind:y,hash:A});},F=(y,A)=>A&&y.kind!=="tx-reverted"&&y.kind!=="tx-cancelled"?{kind:"view-transaction",hash:A}:y.kind==="wallet-rejected"?{kind:"retry-wallet"}:y.kind==="wrong-chain"?{kind:"switch-network",chainId:n.market.chainId}:y.kind==="tx-reverted"||y.kind==="tx-cancelled"||y.kind==="quote"?{kind:"review-quote"}:y.retryable&&L.size?{kind:"resume-remaining"}:y.retryable?{kind:"retry-wallet"}:{kind:"none"},Z=(y,A,M)=>{var O;return M?"confirmation":!A||((O=te.get(A))==null?void 0:O.status)!=="wallet-requested"?"preparation":y.kind==="wallet-rejected"?"wallet-request":"submission";},Nt=(y,A=h,M=f??Cf(y))=>{const O=Nr(y,"Engine trade did not complete.");m={...O,step:A,hash:M,failurePhase:Z(O,A,M)},d=F(O,M),M&&O.kind!=="tx-reverted"&&O.kind!=="tx-cancelled"?(l="awaiting-receipt",f=M,A&&H(A,"submitted",M)):(l=O.kind==="wallet-rejected"||O.kind==="tx-cancelled"?"cancelled":"failed",A&&H(A,l==="cancelled"?"cancelled":"failed",M),h=null,f=null),K();},Dt=(y,A,M,O)=>{Me(M),c=pe(O),u+=1,p=y==="permissions"?{kind:y,revision:u,reasons:A}:{kind:y,revision:u,reasons:A},l="quote-review-required",m={message:y==="permissions"?"Wallet permissions changed. Review before continuing.":"The executable quote changed. Review before continuing.",kind:"quote",retryable:!0,step:null,hash:null,failurePhase:"preparation"},d={kind:"review-quote"},h=null,f=null,K();},en=y=>{if(!ya(r,y))throw new TypeError("Fresh authorization plan does not match the frozen trade intent.");},_e=async(y,A={})=>{const M=await t.readPlan(n,y);y.throwIfAborted(),en(M);const O=Ef(r,M);return O.length?(Dt("permissions",O,M,c),S==null||S.abort(new Error("review-required")),!1):(Me(M),A.publishResult!==!1&&K(),!0);},Ot=y=>{if(y==="open-position")return s.readyForOpen&&r.steps.some(O=>O.kind===y);const A=r.steps.find(O=>O.kind===y),M=s.steps.find(O=>O.kind===y);return!!(A&&M&&A.status==="required"&&M.status==="required"&&Ns(A,M));},Ye={onWalletRequest(y){if(!Ot(y)){Dt("permissions",[{kind:"unexpected-wallet-request",step:y}],s,c),S==null||S.abort(new Error("unreviewed-wallet-request"));return;}h=y,f=null,w=!1,H(y,"wallet-requested",null),K();},onHash(y,A,M){w||(w=M===!0),h=y,f=A,v=A,H(y,"submitted",A),K();},async onCheckpoint(){const y=S==null?void 0:S.signal;if(!y)throw new Error("Engine execution checkpoint has no active command.");const A=h,M=f;(await _e(y))&&A&&M&&(H(A,"confirmed",M),L.add(A),ae(A,M),h=null,f=null,K());}},mt=async y=>{let A=await t.quote(n,y);if(y.throwIfAborted(),BigInt(Math.floor(Date.now()/1e3))+Co>=A.expiresAt&&(A=await t.quote(n,y),y.throwIfAborted()),!Ds(i,A))throw new TypeError("Fresh quote does not match the frozen trade intent.");if(!A.executable||!A.position||!A.tx||typeof A.frame.blockNumber!="bigint"||!A.frame.blockHash||BigInt(Math.floor(Date.now()/1e3))+Co>=A.expiresAt)throw new N("A fresh executable block-pinned quote is not available.",{kind:"quote",retryable:!0});return A;},Ln=async y=>{var A;p=null,m=null,d={kind:"none"},l="executing",K();try{if(!(await _e(y))||s.walletChainSwitchRequired&&(await t.ensureChain(n,y),y.throwIfAborted(),!(await _e(y))))return X();if(s.steps.some(ce=>ce.kind==="vault-operator"&&ce.status==="required")){h="vault-operator";const ce=await t.authorizeVault(n,Ye,y);if(ce.receipt.status!=="success")throw new N("Vault authorization reverted on-chain.",{kind:"tx-reverted"});if(v=ce.hash,H("vault-operator","confirmed",ce.hash),L.add("vault-operator"),ae("vault-operator",ce.hash),h=null,f=null,!(await _e(y)))return X();}if(s.steps.some(ce=>ce.kind!=="vault-operator"&&ce.kind!=="open-position"&&ce.status==="required")&&(await t.authorizeToken(n,Ye,y),y.throwIfAborted(),!(await _e(y))))return X();if(!s.readyForOpen)throw new N("Required permissions are still missing.",{kind:"validation",retryable:!0});const O=await mt(y),Se=gf(i,O);if(Se.length)return Dt("quote",Se,s,O),X();c=pe(O),h="open-position";const Ue=await t.sendOpen(n,c,Ye,y);if(Ue.receipt.status!=="success")throw new N("Engine transaction reverted on-chain.",{kind:"tx-reverted"});const ve=Ue.hash;v=ve,g=pe(Ue.summary),H("open-position","confirmed",ve),ae("open-position",ve),l="success",h=null,f=null,m=null,d={kind:"none"},K();}catch(M){if(ge())return X();y.aborted&&!f?(l="cancelled",m={message:"Execution cancelled.",kind:"unknown",retryable:!1,step:h,hash:null,failurePhase:h&&((A=te.get(h))==null?void 0:A.status)==="wallet-requested"?"wallet-request":"preparation"},d={kind:"none"},h&&H(h,"cancelled",null),h=null,K()):Nt(M);}return X();},tn=async()=>{var M;if(l!=="awaiting-receipt"||!h||!f)throw new TypeError("No submitted Engine transaction is awaiting receipt reconciliation.");const y=h;let A;try{A=await t.checkReceipt(n,y,f);}catch(O){return Nt(O,y,f),X();}w||(w=A.executionChanged===!0);try{(M=e.onTransactionObservation)==null||M.call(e,{hash:A.hash,...(A.replacesHash?{replacesHash:A.replacesHash}:{}),...(w?{executionChanged:!0}:{}),status:A.status==="unresolved"?"submitted":w?"cancelled":A.status},y==="open-position"?"action":"authorization");}catch{}if(v=A.hash,f=A.hash,H(y,"submitted",A.hash),A.status==="unresolved")return d={kind:"view-transaction",hash:A.hash},K(),X();if(w||A.status==="cancelled"||A.status==="reverted")return Nt(new N(w||A.status==="cancelled"?"Engine transaction was cancelled in the wallet.":"Engine transaction reverted on-chain.",{kind:w||A.status==="cancelled"?"tx-cancelled":"tx-reverted",retryable:!0}),y,A.hash),X();if(H(y,"confirmed",A.hash),ae(y,A.hash),h=null,f=null,m=null,y==="open-position")g=pe(xi(A.receipt)),l="success",d={kind:"none"},K();else{L.add(y),l="resume-required",d={kind:"resume-remaining"};const O=new AbortController();S=O;try{await _e(O.signal,{publishResult:!1}),ge()||K();}catch{K();}finally{S=null;}}return X();};return{getSnapshot:X,subscribe(y){return _.add(y),()=>{_.delete(y);};},dispatch(y,A){if(y.kind==="continue"){if(E)return E;if(ke().kind!=="continue")return Promise.reject(new TypeError(`Engine execution cannot continue in phase ${l}.`));S=new AbortController();const M=A==null?void 0:A.signal,O=()=>S==null?void 0:S.abort(M==null?void 0:M.reason);M==null||M.addEventListener("abort",O,{once:!0}),M!=null&&M.aborted&&O();const Se=Ln(S.signal).finally(()=>{M==null||M.removeEventListener("abort",O),E===Se&&(E=null),S=null;});return E=Se,Se;}if(y.kind==="accept-review")return l!=="quote-review-required"||!p||y.revision!==p.revision?Promise.reject(new TypeError("Engine review revision is stale or not pending.")):(r=pe(s),i=pe(c),p=null,m=null,d={kind:"none"},l="ready",K(),Promise.resolve(X()));if(y.kind==="check-receipt"){if(R)return R;const M=tn().finally(()=>{R===M&&(R=null);});return R=M,M;}return l==="success"||l==="awaiting-receipt"||f?Promise.reject(new TypeError("A submitted Engine transaction cannot be cancelled locally.")):E&&S?(S.abort(new DOMException("Execution cancelled.","AbortError")),E):(l="cancelled",m={message:"Execution cancelled.",kind:"unknown",retryable:!1,step:h,hash:null,failurePhase:"preparation"},d={kind:"none"},K(),Promise.resolve(X()));}};}const eo=C().regex(/^[0-9]+$/),Os=x({schemaVersion:B("1"),chainId:k().int(),txHash:ao,account:et,status:B("reconciled"),execution:x({basis:B("receipt-reconciled-opening-swap-leg"),poolId:ao,vaultId:eo,owner:et,key:x({currency0:et,currency1:et}),block:x({canonicality:B("rpc-checked-at-read")}),swap:x({inputCurrency:et,outputCurrency:et,inputRaw:eo,outputRaw:eo,inputBasis:B("pool-input-plus-hook-input-fee")})})}),Rf=x({schemaVersion:B("1"),chainId:k().int(),txHash:ao,account:et,status:B("unavailable")}).loose(),t0=Mo([Os,Rf]);async function n0({source:e,position:t,strategy:n,signal:o}){var s;if(!t.token0||!t.token1)return null;const a=`/v1/engine/transactions/${t.chainId}/${n.openTxHash}/opening-execution`,r=`${jt(e.baseUrl)}${a}?${new URLSearchParams({account:t.account})}`,i=lt({signal:o,timeoutMs:e.timeoutMs??1e4,timeoutMessage:"Opening execution read timed out."});try{const c=await fetch(r,{headers:{Accept:"application/json",...e.headers},cache:"no-store",signal:i.signal});if(!c.ok){if((s=c.body)==null||s.cancel().catch(()=>{}),c.status===429||c.status>=500)throw new Sa(c.status===429?"rate-limited":"upstream-unavailable",c.status,Bo(c.headers.get("retry-after")));return null;}const l=Os.safeParse(await Oe(c,32768,a));if(!l.success)return null;const p=l.data,u=p.execution,m=u.swap;if(p.chainId!==t.chainId||p.txHash!==n.openTxHash.toLowerCase()||p.account!==t.account.toLowerCase()||u.owner!==p.account||u.poolId!==t.poolId.toLowerCase()||u.poolId!==n.poolId.toLowerCase()||BigInt(u.vaultId)!==BigInt(t.vaultId)||u.key.currency0!==t.token0.address.toLowerCase()||u.key.currency1!==t.token1.address.toLowerCase())return null;const d=m.inputCurrency===u.key.currency0&&m.outputCurrency===u.key.currency1,h=m.inputCurrency===u.key.currency1&&m.outputCurrency===u.key.currency0;if(!d&&!h)return null;const f=BigInt(d?m.inputRaw:m.outputRaw),w=BigInt(d?m.outputRaw:m.inputRaw);if(f<=0n||w<=0n)return null;const v=Number(oo(w,t.token1.decimals))/Number(oo(f,t.token0.decimals));return Number.isFinite(v)&&v>0?v:null;}catch(c){if(o!=null&&o.aborted||c instanceof Sa)throw c;return null;}finally{i.cleanup();}}export{r0 as AEGIS_BACKEND_PROD_BASE_URL,qf as AEGIS_DYNAMIC_FEE_FLAG,wc as AEGIS_SWAP_BSC_CHAIN,fe as AEGIS_SWAP_BSC_CHAIN_ID,Df as AEGIS_SWAP_BSC_HOOK,Lr as AEGIS_SWAP_BSC_ROUTER,Hr as AEGIS_SWAP_BSC_RPC_URLS,Ff as AEGIS_SWAP_BSC_TOKENS,In as AEGIS_SWAP_CHAINS,ee as AEGIS_SWAP_CHAIN_ID,_o as AEGIS_SWAP_DEFAULT_FEE_BPS,yn as AEGIS_SWAP_DEFAULT_FEE_RECIPIENT,No as AEGIS_SWAP_DEFAULT_METADATA_ENDPOINT,Vr as AEGIS_SWAP_DEFAULT_RPC_URLS,Nf as AEGIS_SWAP_HOOK,bc as AEGIS_SWAP_INK_CHAIN,be as AEGIS_SWAP_INK_CHAIN_ID,Of as AEGIS_SWAP_INK_HOOK,Fr as AEGIS_SWAP_INK_ROUTER,dc as AEGIS_SWAP_INK_RPC_URLS,Uf as AEGIS_SWAP_INK_TOKENS,hc as AEGIS_SWAP_MAINNET_CHAIN,Do as AEGIS_SWAP_MAINNET_UNISWAP_V4_CONTRACTS,so as AEGIS_SWAP_PERMIT2,ro as AEGIS_SWAP_ROUTER,bt as AEGIS_SWAP_TOKENS,Ur as AEGIS_SWAP_TRUSTED_ROUTERS_BY_CHAIN,fc as AEGIS_SWAP_V4_QUOTER,Hf as AGGREGATED_SWAP_CURATED_TOKENS,qo as AGGREGATED_SWAP_DEFAULT_TOKENS,yc as AGGREGATED_SWAP_DEFAULT_TOKEN_LIST,Wr as AGGREGATED_SWAP_SUPPORTED_CHAIN_IDS,Vf as AGGREGATED_SWAP_TOKEN_PRESETS,vc as AGGREGATED_SWAP_WOLFGAME_TOKENS,Ic as AGGREGATED_SWAP_WOLFGAME_TOKEN_LIST,i0 as ActivityPageResponseSchema,ic as AegisBackendApiError,s0 as AegisBackendContractError,Le as AegisContractGuardError,Sa as AegisEngineAccountReadError,ue as AegisEngineMarketDataReadError,he as AegisEngineMarketNotReadyError,Va as AggregatedSwapBuildMismatchError,le as AggregatedSwapCalldataError,Ho as DEFAULT_PERMIT_EXPIRATION_SECONDS,xa as DIRECT_SWAP_MARKET_TRUST_RULE_ID,Ga as DirectPoolSwapPriceMovedError,It as DirectSwapMarketTrustError,mf as ENGINE_MARKET_SERIES_TTL_MS,c0 as ENGINE_PORTFOLIO_CHAIN_IDS,l0 as ENGINE_UTILIZATION_CAP_PCT,bm as EngineAccountDiscoveryResponseSchema,gn as KYBER_AEGIS_LIQUIDITY_SOURCE,Fo as KyberSwapApiError,Uo as KyberSwapContractError,ad as KyberSwapPriceMovedError,ye as KyberSwapResourceLimitError,Ec as MAX_UINT128,qe as MAX_UINT160,Ie as MAX_UINT256,vn as NATIVE_TOKEN_ADDRESS,it as NoAegisRouteError,wi as PERMIT2_FAR_FUTURE_EXPIRATION,u0 as PortfolioPageQuerySchema,d0 as PortfolioPageSchema,m0 as PortfolioQuerySchema,p0 as PortfolioResponseSchema,gl as SDK_RPC_MULTICALL_RULE_ID,xn as SWAP_TX_DEADLINE_SECONDS,f0 as SubmittedTransactionReceiptError,h0 as TransactionReceiptTimeoutError,Re as UNISWAP_V4_CONTRACTS_BY_CHAIN,mo as UNLIMITED_ERC20_FLOOR,ql as UNLIMITED_PERMIT2_FLOOR,w0 as USER_REJECTED_MESSAGE,N as UserFacingError,b0 as aegisBackendAddressAllowlistSchema,z as aegisBackendAddressSchema,k0 as aegisBackendAllowlistsByChainSchema,v0 as aegisBackendChainIdSchema,y0 as aegisBackendChainSchema,I0 as aegisBackendConfigSchema,E0 as aegisBackendContractRegistrySchema,A0 as aegisBackendContractsByChainSchema,me as aegisBackendDecimalStringSchema,g0 as aegisBackendFeeConfigSchema,S0 as aegisBackendHealthResponseSchema,To as aegisBackendHexSchema,Pe as aegisBackendIsoDateTimeSchema,C0 as aegisBackendMarketMetricsSchema,x0 as aegisBackendMarketSchema,T0 as aegisBackendMarketStatusSchema,R0 as aegisBackendMarketsResponseSchema,P0 as aegisBackendQuoteDefaultsSchema,B0 as aegisBackendQuoteModeSchema,M0 as aegisBackendSwapProviderSchema,_0 as aegisBackendSwapQuoteRequestSchema,N0 as aegisBackendSwapQuoteResponseSchema,D0 as aegisBackendTokenSchema,O0 as aegisBackendTokensResponseSchema,q0 as aegisPoolKeySchema,Gf as aggregatedSwapErrorMessage,od as approveDirectPoolSwapInput,qh as approveEnginePermit2ToRouter,Oh as approveEngineTokenToPermit2,zl as approveErc20Spender,$o as approveErc20ToPermit2,id as approveKyberSwapInput,bi as approvePermit2ToRouter,yi as assertAegisOnlyRouteLegs,Wa as assertAggregatedQuoteLiquidity,El as assertCalldataHash,Al as assertChainMatches,En as assertDirectSwapMarketTrusted,Rt as assertEngineMarketIdentity,Vi as assertHydratedEngineMarket,vl as assertQuoteFresh,yl as assertRouterAllowlisted,Il as assertSpenderAllowlisted,ea as assertTrustedEngineMarket,st as assertUint128,Ya as attachEngineActivityLotDisplays,Lh as authorizeEnginePositionRouter,Vp as authorizeEngineVaultOperator,$f as authorizeHostDirectSwapMarket,yd as backendTokenToAegisSwapToken,Id as backendTokensToAegisSwapTokens,Nc as buildExactInSwapTransaction,Dc as buildExactOutSwapTransaction,ml as buildKyberSwapRoute,Ql as buildSignedPermitBatch,Gi as classifyEngineVaultActivity,Nr as classifyError,fh as clearEngineMarketHistoryCache,vh as clearEngineMarketHistoryV2ProbeCache,Gh as clearEngineMarketSeriesCache,ph as clearEngineMarketsCache,kh as clearEngineMarketsV2ProbeCache,wh as clearEnginePositionActivityCache,hh as clearEnginePositionsCache,bh as clearEnginePositionsV2ProbeCache,lh as clearEngineReadCaches,Xf as clearTokenPriceHistoryCache,$h as computeEngineIdleWithdrawPostLtvPips,Wh as computeEngineMaxIdleWithdraw,je as computePoolId,L0 as createAegisBackendApiClient,$r as createAegisSwapChainConfig,Lf as createAegisSwapChains,sh as createAegisSwapChainsFromBackendConfig,Wf as createAegisSwapMarketsFromPools,qc as createAegisSwapPoolMarket,ch as createAegisSwapPoolsFromBackendMarkets,Ce as createAegisSwapUniswapV4Contracts,e0 as createEngineTradeOpenExecutionSession,F0 as createEngineTransactionHistory,Ol as createSwapPublicClient,am as deriveEngineActivityLotDisplay,zh as deriveEngineTradePositionStrategy,U0 as engineAccountPositionKey,V0 as engineAccountTransactionKey,Ef as engineAuthorizationPlanReviewReasons,H0 as engineHistoryCatalogResponseSchema,Hh as engineIdleWithdrawPassesResidualLtv,kn as engineMarketCandlesResponseSchema,Zo as engineMarketIdSchema,gd as engineMarketsRestResponseSchema,Sd as engineMarketsV2RestResponseSchema,xd as engineMetricHistoryRestResponseSchema,Td as engineMetricHistoryV2RestResponseSchema,t0 as engineOpeningExecutionResponseSchema,un as enginePermit2GrantSatisfies,df as enginePoolPriceLineResponseSchema,Xh as enginePoolPriceSegments,W0 as enginePortfolioPriceFor,$0 as enginePositionAccountingResponseSchema,Zd as enginePositionActivityRestResponseSchema,K0 as enginePositionHistoryResponseSchema,z0 as enginePositionPerformanceResponseSchema,G0 as enginePositionPnlResponseSchema,Md as enginePositionsRestResponseSchema,Od as enginePositionsV2RestResponseSchema,Vh as enginePreviewMaxLtvPips,j0 as engineRouterForChain,Bp as engineTokenGrantSatisfies,gf as engineTradeQuoteReviewReasons,Q0 as engineTransactionStorageKey,Qe as ensureWalletChain,Zu as erc20ApprovalRequest,Zs as errorMessage,Si as estimateSwapGasWithBuffer,nh as executeDirectPoolSwap,Uh as executeEngineBalancedDeposit,oh as executeKyberSwap,Ch as executionLtvGuardPips,Ka as fetchAggregatedSwapQuote,ja as fetchDirectPoolSwapQuote,rc as fetchEngineAccountActivity,X0 as fetchEngineAccountPortfolio,Y0 as fetchEngineHistoryPositions,gh as fetchEngineLendActivity,jh as fetchEngineMarketCandles,Ih as fetchEngineMarketHistory,Yh as fetchEngineMarketReferenceHistory,yh as fetchEngineMarkets,n0 as fetchEngineOpeningEntry,Qh as fetchEnginePoolPriceHistory,es as fetchEnginePositionActivitySnapshot,J0 as fetchEnginePositionHistory,Eh as fetchEnginePositionsSnapshot,Jh as fetchEngineRateHistory,Z0 as fetchEngineTransactionStatus,Ah as fetchEngineVaultActivity,Qf as fetchGlobalTokenMetadata,dl as fetchKyberSwapRoute,Jf as fetchTokenPriceHistory,ew as formatEngineAccountTokenAmount,Oo as getExplorerUrl,Sl as getInjectedProvider,Tl as getProviderAccount,Wt as getProviderChainId,jc as getZeroForOne,tw as groupEngineAccountActivity,nw as groupEnginePortfolioPositions,Tn as hasUsablePermit2Allowance,Kh as isAegisEngineTradePositionIntent,ah as isBusy,ai as isDirectSwapMarketTrusted,Zf as isDocumentVisible,Cl as isEip1193Provider,Ae as isNativeAssetAddress,Jo as isNativeToken,ow as isRetryableAegisBackendApiError,mi as isRetryableKyberSwapError,aw as isSubmittedTransactionReceiptError,Ll as isUnlimitedErc20Approval,Fl as isUnlimitedPermit2Approval,nc as isUserRejectedError,rw as mergeEngineTransactionRecord,Fh as missingEngineExecutionReason,Cn as normalizeAccount,jt as normalizeAegisBackendBaseUrl,Wn as normalizeEngineMarkets,xl as normalizeWalletConnection,Jc as outputFeeForQuote,iw as parseAdditionalEngineDeployments,sw as parseEngineDeploymentManifest,cw as parseEngineTransactionRecords,Yf as peekTokenPriceHistory,Rn as pollUntil,vs as prepareEnginePermit,rh as progressRailSteps,Rh as quoteEngineAddCollateral,Sr as quoteEngineBalancedDeposit,Th as quoteEngineBorrow,Ph as quoteEngineBorrowCapacity,Mh as quoteEngineCloseVault,xh as quoteEngineDeposit,_h as quoteEngineIdleWithdraw,Nh as quoteEngineRedeem,Bh as quoteEngineRepay,xp as quoteEngineTradeOpen,Ra as quoteSpendAmount,Ym as readEngineAdaptiveFeeEvidence,Fp as readEngineAuthorizationPlan,ra as readEngineBorrowQuoteContext,Im as readEngineLendQuoteContext,uh as readEngineMarketMark,ym as readEngineMarketSnapshot,dh as readEnginePositionsHydration,mh as readEngineVaultActivity,Up as readEngineVaultRouterApproved,Ct as readErc20Allowance,ze as readPermit2RouterAllowance,Ta as reconcileSubmitQuote,cc as reconcileSubmittedReceipt,Rl as requestProviderAccount,Xt as requiresErc20ApprovalReset,lw as resolveEngineAccountPositionTarget,Dh as resolveEngineBorrowCollateralFloor,jf as resolveTokenIconUrl,th as resolveWalletSession,eh as retryOnError,Yt as sameEngineMarketId,Kf as sameQuote,Dn as sendEngineTransaction,uw as serializeEngineTransactionRecords,Zh as splitEngineMarketCandleSegments,zf as subscribeProvider,Hm as summarizeEngineLendShareGrowth,Sh as summarizeEngineSimpleYieldPosition,xi as summarizeTransactionReceipt,Dl as switchProviderChain,Hu as tokenPriceHistoryRestResponseSchema,ih as transactionProgressView,ud as transactionSequenceProgress,oe as trustedEngineDeploymentForMarket,Ro as trustedEngineRegistryForChain,ac as trustedEngineVersionForChain,ed as waitForProviderChain};
|