@oracle-agent/oracle 0.24.8 → 0.24.10
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/README.md +57 -49
- package/SECURITY.md +1 -1
- package/SETUP.md +16 -13
- package/dist/assets/profiles/_template/SOUL.md +2 -2
- package/dist/assets/profiles/oracle/SOUL.md +11 -13
- package/dist/assets/profiles/profile.schema.json +1 -1
- package/dist/assets/profiles/robinhood-agent/SOUL.md +5 -5
- package/dist/assets/skills/multi-venue-prepare-only-ranking/SKILL.md +1 -1
- package/dist/assets/skills/oracle-action-semantics/SKILL.md +5 -5
- package/dist/assets/skills/oracle-chat/SKILL.md +8 -8
- package/dist/assets/skills/oracle-desk-product/SKILL.md +3 -3
- package/dist/assets/skills/oracle-receipts/SKILL.md +2 -2
- package/dist/bin/desk-server.mjs +78 -34
- package/dist/bin/oracle-data-mcp.mjs +51 -7
- package/dist/bin/oracle-gateway.mjs +13 -15
- package/dist/bin/oracle-init.mjs +9 -9
- package/dist/bin/oracle-public-server.mjs +48 -4
- package/dist/bin/oracle-route.mjs +66 -22
- package/dist/bin/oracle-scan.mjs +58 -14
- package/dist/bin/oracle-upgrade.mjs +9 -9
- package/dist/bin/oracle.mjs +6 -6
- package/dist/cli/commands/chat.mjs +140 -96
- package/dist/cli/commands/doctor.mjs +5 -5
- package/dist/cli/commands/eval.mjs +17 -17
- package/dist/cli/commands/farm.mjs +72 -28
- package/dist/cli/commands/follow.mjs +61 -17
- package/dist/cli/commands/model.mjs +147 -103
- package/dist/cli/commands/receipt.mjs +3 -3
- package/dist/cli/commands/resolve.mjs +55 -11
- package/dist/cli/commands/setup.mjs +27 -27
- package/dist/cli/commands/sign.mjs +14 -13
- package/dist/cli/commands/signer.mjs +14 -17
- package/dist/cli/commands/strategy.mjs +50 -6
- package/dist/cli/commands/swap.mjs +72 -29
- package/dist/cli/commands/venues.mjs +3 -3
- package/dist/data/desk-data.mjs +78 -34
- package/dist/data/names.mjs +46 -2
- package/dist/data/providers/farming.mjs +46 -2
- package/dist/index.mjs +80 -36
- package/dist/local-signer/index.mjs +3 -1
- package/dist/router/index.mjs +46 -2
- package/dist/router/prepare-bridge.mjs +46 -2
- package/dist/scanner/index.mjs +48 -4
- package/dist/strategy/index.mjs +47 -3
- package/package.json +6 -3
- package/public/install.ps1 +1 -1
- package/public/install.sh +5 -4
- package/public/oracle-splash/_variants/ice.html +3 -3
- package/public/oracle-splash/_variants/ivory.html +3 -3
- package/public/oracle-splash/downloads/index.html +5 -5
- package/public/oracle-splash/index.html +7 -7
- package/public/oracle-splash/install.ps1 +1 -1
- package/public/oracle-splash/install.sh +5 -4
package/dist/data/desk-data.mjs
CHANGED
|
@@ -1,21 +1,65 @@
|
|
|
1
|
-
var a0=Object.defineProperty;var lo=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};var i0=(e,t)=>{for(var n in t)a0(e,n,{get:t[n],enumerable:!0})};import{createHash as s0}from"node:crypto";function d0(e){let t=String(e||"").toLowerCase();return fs.includes(t)||/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(t)}function p0(e){let t={};for(let[n,r]of Object.entries(e||{}))d0(n)||(t[n]=r);return t}function m0(e,t){if(!e)throw new Error(`HTTP redirect from ${t} missing Location`);let n=new URL(String(e),String(t));if(n.protocol!=="http:"&&n.protocol!=="https:")throw new Error(`HTTP redirect from ${t} used unsupported protocol ${n.protocol}`);return n.toString()}function f0(e,t){return new URL(String(e)).origin===new URL(String(t)).origin}function h0(e,t,n){let r={};for(let[c,l]of Object.entries(n||{}))r[c.toLowerCase()]=l;let o=Object.keys(r).filter(c=>/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(c)),i=[...new Set([...fs,...o])].sort().map(c=>`${c}=${r[c]??""}`).join(`
|
|
2
|
-
`),s=s0("sha256").update(i).digest("hex").slice(0,32);return`${e} ${t} ${s}`}function b0(e,t){let n=Number(t);return Number.isFinite(n)&&n>0?Math.min(n*1e3,ps):Math.min(250*2**e,ps)+Math.floor(Math.random()*100)}async function y0(e,{fetchImpl:t,method:n,headers:r,body:o,timeoutMs:a}){let i=new AbortController,s=setTimeout(()=>i.abort(),a);try{let c=String(e),l={...r||{}};for(let u=0;u<=ms;u+=1){let d=await t(c,{method:n,headers:l,body:o,signal:i.signal,redirect:"manual"}),p=await d.text(),m=null;if(p)try{m=JSON.parse(p)}catch{m=null}if(u0.has(d.status)){if(n!=="GET"&&n!=="HEAD"){let h=new Error(`HTTP ${d.status} ${n} ${c} redirected non-idempotent request`);throw h.status=d.status,h.body=m??p.slice(0,300),h}if(u===ms)throw new Error(`HTTP redirect loop for ${e}`);let f=m0(d.headers?.get?.("location"),c);f0(f,c)||(l=p0(l)),c=f;continue}if(!d.ok){let f=new Error(`HTTP ${d.status} ${n} ${c}`);throw f.status=d.status,f.retryAfter=d.headers?.get?.("retry-after")??null,f.body=m??p.slice(0,300),f}return m??p}throw new Error(`HTTP redirect loop for ${e}`)}finally{clearTimeout(s)}}async function b(e,t={}){let n=t.fetchImpl||globalThis.fetch;if(typeof n!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let r=t.timeoutMs??12e3,o=(t.method||"GET").toUpperCase(),a={Accept:"application/json",...t.headers||{}},i=t.body;i!=null&&typeof i!="string"&&(a["Content-Type"]=a["Content-Type"]||"application/json",i=JSON.stringify(i));let s=Number.isInteger(t.retries)?Math.max(t.retries,0):l0,c=async()=>{let m;for(let f=0;f<=s;f++)try{return await y0(e,{fetchImpl:n,method:o,headers:a,body:i,timeoutMs:r})}catch(h){m=h;let g=h?.status,v=h?.name==="AbortError",k=new Set([408,425,429]),y=g!=null?k.has(g)||c0.has(g)&&ds.has(o):!v&&ds.has(o);if(f===s||!y)throw h;await g0(b0(f,h?.retryAfter))}throw m};if(!(t.dedupe!==!1&&o==="GET"&&i==null))return c();let u=h0(o,e,a),d=uo.get(u);if(d)return d;let p=c().finally(()=>uo.delete(u));return uo.set(u,p),p}async function X(e){let t=Date.now();try{let n=await e();return{ok:!0,ms:Date.now()-t,data:n}}catch(n){return{ok:!1,ms:Date.now()-t,error:String(n.message||n),status:n.status??null}}}async function nt(e,t,n){let r=Array.from(e),o=Math.max(1,Math.min(Number(t)||1,r.length||1)),a=new Array(r.length),i=0;return await Promise.all(Array.from({length:o},async()=>{for(;i<r.length;){let s=i++;a[s]=await n(r[s],s)}})),a}var c0,ds,l0,ps,fs,u0,ms,uo,g0,_=lo(()=>{c0=new Set([408,425,429,500,502,503,504]),ds=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),l0=2,ps=4e3,fs=["authorization","x-api-key","x-tensor-api-key","0x-api-key","api-key","cookie","proxy-authorization"],u0=new Set([301,302,303,307,308]),ms=3;uo=new Map;g0=e=>new Promise(t=>setTimeout(t,e))});function mo(e){return hs.get(Number(e))||null}function bs(e,t=process.env){let n=mo(e);if(!n)return null;for(let r of n.rpcEnv){let o=(t[r]||"").trim();if(o)return o}return null}function gs(e){return hs.has(Number(e))}var po,hs,ys=lo(()=>{po={robinhood:{chainId:4663,name:"Robinhood Chain",rpcEnv:["RH_CHAIN_RPC"],evm:!0},ethereum:{chainId:1,name:"Ethereum",rpcEnv:["ETH_RPC_URL","ETHEREUM_RPC_URL","MAINNET_RPC_URL"],evm:!0},polygon:{chainId:137,name:"Polygon",rpcEnv:["POLYGON_RPC_URL","POLYGON_RPC"],evm:!0},arbitrum:{chainId:42161,name:"Arbitrum One",rpcEnv:["ARBITRUM_RPC_URL","ARB_RPC_URL"],evm:!0},base:{chainId:8453,name:"Base",rpcEnv:["BASE_RPC_URL"],evm:!0},hyperevm:{chainId:999,name:"HyperEVM",rpcEnv:["HYPEREVM_RPC_URL","HYPER_EVM_RPC"],evm:!0},bsc:{chainId:56,name:"BNB Smart Chain",rpcEnv:["BSC_RPC_URL","BNB_RPC_URL"],evm:!0},avalanche:{chainId:43114,name:"Avalanche C-Chain",rpcEnv:["AVALANCHE_RPC_URL","AVAX_RPC_URL"],evm:!0},optimism:{chainId:10,name:"OP Mainnet",rpcEnv:["OPTIMISM_RPC_URL","OP_RPC_URL"],evm:!0},abstract:{chainId:2741,name:"Abstract",rpcEnv:["ABSTRACT_RPC_URL","ABS_RPC_URL"],evm:!0},stable:{chainId:988,name:"Stable Mainnet",rpcEnv:["STABLE_RPC_URL","STABLE_RPC"],evm:!0}},hs=new Map(Object.values(po).map(e=>[e.chainId,e]))});var Bn={};i0(Bn,{PUBLIC_RPC_FALLBACKS:()=>ho,erc20Allowance:()=>yo,erc20BalanceOf:()=>Wt,resolveRpcUrl:()=>bo,rpcBlockNumber:()=>Vt,rpcCall:()=>O,rpcChainId:()=>go,rpcGetBalance:()=>Fe,rpcHealth:()=>rt,rpcHealthAll:()=>wo,transactionReceipt:()=>zt});import{Interface as w0,getAddress as v0}from"ethers";function _e(e,t){try{return v0(e).toLowerCase()}catch{throw new Error(`${t} must be a valid EVM address`)}}function x0(e){let t=String(e||"").trim();if(!/^0x[0-9a-fA-F]{64}$/.test(t))throw new Error("txHash must be a 32-byte hex transaction hash");return t.toLowerCase()}function fo(e){return e==null?null:Number.parseInt(String(e),16)}function bo(e,{rpcUrl:t,env:n=process.env}={}){if(t)return t;let r=bs(e,n);return r||ho[Number(e)]||null}function k0(e){let t=String(e||""),n=t.toLowerCase();if(t!==t.trim()||!/^[a-zA-Z0-9_]+$/.test(t)||!S0.test(n))throw new Error(`evm-rpc: ${t} refused \u2014 @oracle-agent/oracle is prepare-only (read RPC only; no broadcast/sign)`);return n}async function O(e,t,n=[],r={}){let o=String(t||"");k0(o);let a=bo(e,r);if(!a)throw new Error(`No RPC URL for chainId ${e} (set env from chain registry rpcEnv or pass rpcUrl)`);let s=await b(a,{method:"POST",body:{jsonrpc:"2.0",id:1,method:t,params:n},fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3});if(s?.error){let c=new Error(s.error.message||JSON.stringify(s.error));throw c.code=s.error.code,c}return s.result}async function rt(e,t={}){let n=await O(e,"eth_blockNumber",[],t),r=parseInt(n,16),o=await O(e,"eth_chainId",[],t),a=parseInt(o,16);return{ok:Number.isFinite(r)&&a===Number(e),chainId:Number(e),reportedChainId:a,blockNumber:r,name:mo(e)?.name||null}}async function Vt(e,t={}){let n=await O(e,"eth_blockNumber",[],t);return parseInt(n,16)}async function go(e,t={}){let n=await O(e,"eth_chainId",[],t);return parseInt(n,16)}async function Fe(e,t,n={}){if(!t)throw new Error("rpcGetBalance requires address");let r=await O(e,"eth_getBalance",[t,"latest"],n);return{chainId:Number(e),address:t,balanceWei:BigInt(r).toString(),balanceHex:r}}async function yo(e={},t={}){let n=Number(e.chainId??t.chainId??1),r=_e(e.token||e.tokenAddress,"token"),o=_e(e.owner,"owner"),a=_e(e.spender,"spender"),i=Ln.encodeFunctionData("allowance",[o,a]),s=await O(n,"eth_call",[{to:r,data:i},e.blockTag||"latest"],t),c=Ln.decodeFunctionResult("allowance",s),l=BigInt(c[0]);return{chainId:n,token:r,owner:o,spender:a,allowance:l.toString(),allowanceHex:`0x${l.toString(16)}`,blockTag:e.blockTag||"latest"}}async function Wt(e={},t={}){let n=Number(e.chainId??t.chainId??1),r=_e(e.token||e.tokenAddress,"token"),o=_e(e.account||e.owner||e.address,"account"),a=Ln.encodeFunctionData("balanceOf",[o]),i=await O(n,"eth_call",[{to:r,data:a},e.blockTag||"latest"],t),s=Ln.decodeFunctionResult("balanceOf",i),c=BigInt(s[0]);return{chainId:n,token:r,account:o,balance:c.toString(),balanceHex:`0x${c.toString(16)}`,blockTag:e.blockTag||"latest"}}async function zt(e={},t={}){let n=Number(e.chainId??t.chainId??1),r=x0(e.txHash||e.hash||e.transactionHash),o=await O(n,"eth_getTransactionReceipt",[r],t);if(!o)return{ok:!1,chainId:n,txHash:r,status:"pending",receipt:null,reason:"receipt pending"};let a=fo(o.status),i=a===1,s=a===1?"success":a===0?"reverted":"unknown",c=i?null:s==="reverted"?"transaction reverted":"unknown receipt status",l=e.expectedTo?_e(e.expectedTo,"expectedTo"):null,u=o.to?_e(o.to,"receipt.to"):null;return l&&u!==l&&(i=!1,c=`to mismatch: expected ${l}, got ${u||"null"}`),{ok:i,chainId:n,txHash:r,status:s,reason:c,statusCode:a,to:u,from:o.from?_e(o.from,"receipt.from"):null,blockNumber:fo(o.blockNumber),transactionIndex:fo(o.transactionIndex),logs:Array.isArray(o.logs)?o.logs:[],receipt:o}}async function wo(e={}){let t=e.chainIds||Object.values(po).map(r=>r.chainId),n={};return await Promise.all(t.map(async r=>{if(!gs(r)&&!ho[r]&&!bo(r,e)){n[r]={ok:!1,error:"no rpc configured",chainId:r};return}try{n[r]=await rt(r,e)}catch(o){n[r]={ok:!1,chainId:r,error:String(o.message||o)}}})),n}var Ln,ho,S0,J=lo(()=>{_();ys();Ln=new w0(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);ho={1:"https://ethereum.publicnode.com",137:"https://polygon-bor-rpc.publicnode.com",42161:"https://arbitrum-one-rpc.publicnode.com",8453:"https://base-rpc.publicnode.com",10:"https://optimism-rpc.publicnode.com",988:"https://rpc.stable.xyz",56:"https://bsc-rpc.publicnode.com",43114:"https://avalanche-c-chain-rpc.publicnode.com",999:"https://rpc.hyperliquid.xyz/evm",2741:"https://api.mainnet.abs.xyz",4663:"https://rpc.mainnet.chain.robinhood.com"};S0=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/});J();import{Interface as Ps,getAddress as Gt,isAddress as j0}from"ethers";_();var E0="https://api.dexscreener.com",I0=Object.freeze({1:"ethereum",10:"optimism",56:"bsc",137:"polygon",8453:"base",42161:"arbitrum",43114:"avalanche",999:"hyperevm",4663:"robinhood"}),pe=e=>String(e??"").toLowerCase(),A0=e=>Array.isArray(e)?e:e==null?[]:[e];function _0(e,t,n){let r=pe(t),o=pe(n),a=pe(e?.baseToken?.address),i=pe(e?.quoteToken?.address);return a===r&&i===o||a===o&&i===r}function C0(e){let t=Number(e?.liquidity?.usd);return Number.isFinite(t)&&t>=0?t:null}function Mn(e={}){return(e.baseUrl||process.env.DEXSCREENER_API_URL||E0).replace(/\/$/,"")}async function ws(e={}){let n=(await b(`${Mn(e)}/latest/dex/search?q=USDC`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??12e3}))?.pairs?.length||0;return{ok:n>0,pairSample:n}}async function qe(e,t={}){if(!e)throw new Error("tokenAddress required");return b(`${Mn(t)}/latest/dex/tokens/${e}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function jt(e,t={}){if(!e)throw new Error("query required");return b(`${Mn(t)}/latest/dex/search?q=${encodeURIComponent(e)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function vs(e,t,n={}){if(!e||!t)throw new Error("chainId and pairAddress required");return b(`${Mn(n)}/latest/dex/pairs/${e}/${t}`,{fetchImpl:n.fetchImpl,timeoutMs:n.timeoutMs??12e3})}async function $n({chainId:e,tokenA:t,tokenB:n,dexIds:r=[]}={},o={}){if(e==null||!t||!n)throw new Error("chainId, tokenA, and tokenB required");let a=pe(I0[Number(e)]||e),i=new Set(A0(r).filter(Boolean).map(pe)),s=[...new Set([t,n].map(p=>String(p)).filter(Boolean))],c=await Promise.allSettled(s.map(p=>qe(p,{...o,baseUrl:o.dexscreenerBaseUrl,timeoutMs:o.dexscreenerTimeoutMs??Math.min(Number(o.timeoutMs??4e3),4e3)}))),l=new Set,u=[];for(let p of c)if(p.status==="fulfilled")for(let m of p.value?.pairs||p.value?.data?.pairs||[]){let f=`${pe(m?.chainId)}:${pe(m?.dexId)}:${pe(m?.pairAddress)}`;l.has(f)||(l.add(f),u.push(m))}return u.filter(p=>pe(p?.chainId)===a).filter(p=>_0(p,t,n)).filter(p=>!i.size||i.has(pe(p?.dexId))).map(p=>({pairAddress:p.pairAddress??null,dexId:p.dexId??null,chainId:p.chainId??null,liquidityUsd:C0(p),pairCreatedAt:p.pairCreatedAt??null})).filter(p=>p.liquidityUsd!=null).sort((p,m)=>m.liquidityUsd-p.liquidityUsd)[0]??null}import{createHash as O0,createHmac as L0,timingSafeEqual as yI}from"node:crypto";import{readFileSync as T0}from"node:fs";import{homedir as N0}from"node:os";import{join as Un}from"node:path";function R0(){if(process.env.ORACLE_TEST_ISOLATE_SECRETS==="1"){let n=(process.env.ORACLE_EXEC_ENV_FILE||"").trim();return n?[n]:[]}let e=(process.env.ORACLE_EXEC_ENV_FILE||process.env.MAD_EXEC_ENV_FILE||"").trim(),t=N0();if(process.env.ORACLE_PUBLIC_DESKTOP==="1"){let n=(process.env.ORACLE_CONFIG_DIR||Un(t,".config","oracle")).trim();return[e,Un(n,"exec.env")].filter(Boolean)}return[e,Un(t,".config","oracle","exec.env"),Un(t,".config","mad-desk","exec.env")].filter(Boolean)}function xs(e,t,n){let r=e??process.env[t]??process.env[n];if(!String(r||"").trim())for(let o of R0())try{let a=T0(o,"utf8"),i=a.match(new RegExp(`^${t}=(.*)$`,"m"))||a.match(new RegExp(`^${n}=(.*)$`,"m"));if(i&&(r=i[1].trim(),r))break}catch{}if(!String(r||"").trim())throw new Error(`${t} required for attestation. Set it in the environment, or place ${t}=<value> in ~/.config/oracle/exec.env`);return r}var Ss=100,ks=2e4;function xo(e){return Array.isArray(e)?`[${e.map(xo).join(",")}]`:e&&typeof e=="object"?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${xo(e[t])}`).join(",")}}`:JSON.stringify(e??null)}function B0(e,{required:t=!1}={}){try{return xs(e,"ORACLE_ROUTE_ATTESTATION_SECRET","MAD_ROUTE_ATTESTATION_SECRET")}catch(n){if(t)throw n;return null}}function Es(e){let{signature:t,...n}=e;return n}function Is(e,{secret:t}={}){let n=B0(t);return n?{...e,signature:L0("sha256",n).update(xo(Es(e))).digest("hex")}:e}function M0(e){let t=String(e||"").toLowerCase();if(!/^0x[0-9a-f]+$/.test(t)||t.length<10||t.length%2!==0)throw new Error("auto-slippage calldata must be even-length hex with a selector");return O0("sha256").update(Buffer.from(t.slice(2),"hex")).digest("hex")}function K(e,{chainId:t,venue:n,data:r,secret:o}={}){if(!e||e.mode!=="auto")throw new Error("bounded auto-slippage guard required");if(Number(e.chainId)!==Number(t))throw new Error("auto-slippage guard chain mismatch");if(String(e.venue).toLowerCase()!==String(n||"").toLowerCase())throw new Error("auto-slippage guard venue mismatch");return Is({...Es(e),calldataHash:M0(r)},{secret:o})}function vo(e,t=0){let n=Number(e);return Number.isFinite(n)?n:t}function $0(e){let t=e==null?Ss:Number(e);if(!Number.isInteger(t)||t<0)throw new Error("auto-slippage cap must be a non-negative integer bps value");return Math.min(t,Ss)}function ne({liquidityUsd:e,priceChange5m:t=0,quoteAgeMs:n=0,crossChain:r=!1,requestedCapBps:o}={}){let a=vo(e,0),i=a>0?a>=25e4?5:a>=1e5?10:a>=5e4?20:a>=1e4?40:70:r?30:10,s=Math.min(60,Math.abs(vo(t,0))*2),c=Math.min(40,Math.floor(Math.max(0,vo(n,0))/5e3)*5),l=Math.max(25,Math.ceil(20+i+s+c)),u=$0(o);return{mode:"auto",requiredBps:l,selectedBps:Math.min(l,u),capBps:u,executable:l<=u}}function U0({chainId:e,venue:t,quoteAmountOut:n,liquidityUsd:r,priceChange5m:o=0,quoteAgeMs:a=0,crossChain:i=!1,requestedCapBps:s,quotedAtMs:c=Date.now(),ttlMs:l=ks,secret:u}={}){let d=BigInt(n??0);if(d<=0n)throw new Error("auto-slippage guard requires positive quoteAmountOut");let p=ne({liquidityUsd:r,priceChange5m:o,quoteAgeMs:a,crossChain:i,requestedCapBps:s});if(!p.executable)throw new Error(`auto-slippage requires ${p.requiredBps} bps above hard/requested cap ${p.capBps}; route blocked`);let m=Number(c);if(!Number.isFinite(m))throw new Error("auto-slippage: quotedAtMs must be a finite number");let f=Math.min(3e4,Math.max(1e3,Number(l)||ks)),h=d*BigInt(1e4-p.selectedBps),g=h/10000n;if(h%10000n!==0n&&(g+=1n),g>d&&(g=d),d>0n&&g<=0n)throw new Error(`auto-slippage: quote ${d} is too small to express a ${p.selectedBps} bps floor without rounding to zero`);let v=Number((d-g)*10000n/(d===0n?1n:d));if(v>p.capBps)throw new Error(`auto-slippage: realised floor implies ${v} bps, above cap ${p.capBps} \u2014 refusing to issue a guard weaker than advertised`);return Is({mode:"auto",chainId:Number(e),venue:String(t||"unknown"),quoteAmountOut:d.toString(),minAmountOut:g.toString(),requiredBps:p.requiredBps,selectedBps:p.selectedBps,capBps:p.capBps,quotedAtMs:m,expiresAtMs:m+f},{secret:u})}function q(e,{chainId:t,venue:n,amountOut:r,liquidityUsd:o,priceChange5m:a,crossChain:i,requestedCapBps:s,quotedAtMs:c=Date.now(),ttlMs:l}={}){let u=U0({chainId:t,venue:n,quoteAmountOut:r,liquidityUsd:o,priceChange5m:a,crossChain:i,requestedCapBps:s,quotedAtMs:c,ttlMs:l});return{...e,autoSlippage:u,amountOutMinimum:u.minAmountOut}}import{createHash as D0,createHmac as F0,timingSafeEqual as kI}from"node:crypto";var q0=2,H0=300*1e3,EI=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})();function So(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(So).join(",")}]`:`{${Object.keys(e).sort().map(n=>`${JSON.stringify(n)}:${So(e[n])}`).join(",")}}`}function As(e){let t=String(e?.ORACLE_STAMP_HMAC_SECRET||"").trim();return t.length>=16?t:""}function _s(e=process.env){return As(process.env)||As(e)}function V0(e){let{oraclePrepared:t,prepareHash:n,prepareMac:r,note:o,...a}=e||{};return a}function W0(e){let t=V0(e);return D0("sha256").update(So(t)).digest("hex")}function z0(e,t=_s()){return t?F0("sha256",t).update(String(e)).digest("hex"):""}function P(e,{provider:t,kind:n,env:r=process.env}={}){if(!e||typeof e!="object")throw new Error("stampPrepared: payload object required");let o={...e,provider:e.provider||t,kind:e.kind||n,requiresUserSignature:e.requiresUserSignature!==!1,signingReady:!1,broadcastReady:!1,executionReady:!1};if(!o.provider)throw new Error("stampPrepared: provider required");if(!o.kind)throw new Error("stampPrepared: kind required");let a=Date.now(),i=a+H0,c={...o,preparedAt:a,expiresAt:i,prepareVersion:q0},l=W0(c),u=_s(r),d=u?z0(l,u):void 0,p={...c,oraclePrepared:!0,prepareHash:l};return d&&(p.prepareMac=d),p}var ae={1:{name:"ethereum",quoter:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",router:"0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45",weth:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",usdc:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},8453:{name:"base",quoter:"0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a",router:"0x2626664c2603336E57B271c5C0b26F421741e481",weth:"0x4200000000000000000000000000000000000006",usdc:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},42161:{name:"arbitrum",quoter:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",router:"0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45",weth:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",usdc:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831"},4663:{name:"robinhood",quoter:"0x33e885ed0ec9bf04ecfb19341582aadcb4c8a9e7",router:"0xcaf681a66d020601342297493863e78c959e5cb2",weth:"0x0bd7d308f8e1639fab988df18a8011f41eacad73",usdc:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168"},999:{name:"hyperevm",weth:"0x5555555555555555555555555555555555555555",usdc:"0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb"},10:{name:"optimism",quoter:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",router:"0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45",weth:"0x4200000000000000000000000000000000000006",usdc:"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85"},56:{name:"bsc",quoter:"0x78D78E420Da98ad378D7799bE8f4AF69033EB077",router:"0xB971eF87ede563556b2ED4b1C0b0019111Dd85d2",weth:"0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c",usdc:"0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d"},137:{name:"polygon",quoter:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",router:"0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45",weth:"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270",usdc:"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"},43114:{name:"avalanche",quoter:"0xbe0F5544EC67e9B3b2D979aaA43f18Fd87E6257F",router:"0xbb00FF08d01D300023C629E8fFfFcb65A5a578cE",weth:"0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7",usdc:"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"}},G0=[100,500,3e3,1e4],Dn=new Ps(["function quoteExactInputSingle((address tokenIn, address tokenOut, uint256 amountIn, uint24 fee, uint160 sqrtPriceLimitX96) params) returns (uint256 amountOut, uint160 sqrtPriceX96After, uint32 initializedTicksCrossed, uint256 gasEstimate)","function quoteExactInput(bytes path, uint256 amountIn) returns (uint256 amountOut, uint160[] sqrtPriceX96AfterList, uint32[] initializedTicksCrossedList, uint256 gasEstimate)"]),Cs=new Ps(["function exactInputSingle((address tokenIn,address tokenOut,uint24 fee,address recipient,uint256 amountIn,uint256 amountOutMinimum,uint160 sqrtPriceLimitX96) params) payable returns (uint256 amountOut)","function multicall(uint256 deadline,bytes[] data) payable returns (bytes[] results)"]),Ts="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",Ns="0x0000000000000000000000000000000000000000",ko=[100,500,2500,1e4],K0={56:{pancakeswap:{name:"pancakeswap",quoter:"0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997",router:"0x13f4EA83D0bd40E75C8222255bc855a974568Dd4",feeTiers:ko}},8453:{pancakeswap:{name:"pancakeswap",quoter:"0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997",router:"0x13f4EA83D0bd40E75C8222255bc855a974568Dd4",feeTiers:ko}},42161:{pancakeswap:{name:"pancakeswap",quoter:"0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997",router:"0x13f4EA83D0bd40E75C8222255bc855a974568Dd4",feeTiers:ko}},999:{hyperswap:{name:"hyperswap",quoter:"0x03A918028f22D9E1473B7959C927AD7425A45C7C",router:"0x4E2960a8cd19B467b82d26D83fAcb0fAE26b094D"}}};function Io(e,t){let n=Number(e),r=ae[n];if(!r)throw new Error(`uniswap-v3: unsupported chainId ${e} (supported: ${Object.keys(ae).join(", ")})`);let o=K0[n]||{};if(!t){if(!r.quoter||!r.router){let c=Object.keys(o).join(", ")||"none registered";throw new Error(`uniswap-v3: chain ${n} (${r.name}) has no canonical Uniswap v3 deployment -- name a venue explicitly (known: ${c})`)}return{chainId:n,venue:r.name,...r}}let a=String(t).toLowerCase();if(a===r.name&&r.quoter&&r.router)return{chainId:n,venue:r.name,...r};let i=o,s=i[a];if(!s){let c=[...r.quoter&&r.router?[r.name]:[],...Object.keys(i)].join(", ");throw new Error(`uniswap-v3: unknown venue "${t}" on chain ${n} (known: ${c})`)}return{chainId:n,venue:a,...r,quoter:s.quoter,router:s.router,feeTiers:s.feeTiers||null}}function Eo(e,t){let n=ae[Number(t)];if(!e||e===Ts||e===Ns||/^eth$/i.test(String(e)))return Gt(n.weth);let r=String(e);if(/^weth$/i.test(r))return Gt(n.weth);if(/^usdc$/i.test(r))return Gt(n.usdc);if(!j0(r))throw new Error(`invalid token address: ${e}`);return Gt(r)}function Y0(e){let t=String(e||"uniswap").toLowerCase();return t==="uniswap"?["uniswap-v3","uniswap"]:t==="pancakeswap"?["pancakeswap-v3","pancakeswap"]:t==="hyperswap"?["hyperswap-v3","hyperswap"]:[t,`${t}-v3`]}function J0(e,t){if(e.length!==t.length+1)throw new Error("path: fees.length must be tokens.length - 1");let n="0x";for(let r=0;r<t.length;r++)n+=e[r].slice(2).toLowerCase(),n+=Number(t[r]).toString(16).padStart(6,"0");return n+=e[e.length-1].slice(2).toLowerCase(),n}async function ot(e={},t={}){let{chainId:n,quoter:r,router:o,feeTiers:a}=Io(e.chainId??8453,e.venue),i=Eo(e.tokenIn||"WETH",n),s=Eo(e.tokenOut||ae[n].usdc,n),c=BigInt(e.amountIn??0);if(c<=0n)throw new Error("amountIn required (raw base units)");let l=a&&a.length?a:G0,u=e.fee!=null?[Number(e.fee)]:e.tryFees===!1?[l[Math.min(2,l.length-1)]]:[...l],d=[],p=null;for(let h of u){let g=Dn.encodeFunctionData("quoteExactInputSingle",[{tokenIn:i,tokenOut:s,amountIn:c,fee:h,sqrtPriceLimitX96:0n}]);try{let v=await O(n,"eth_call",[{to:r,data:g},"latest"],t);if(!v||v==="0x"){d.push({fee:h,ok:!1,error:"empty result"});continue}let k=Dn.decodeFunctionResult("quoteExactInputSingle",v),y={fee:h,ok:!0,amountOut:k[0].toString(),sqrtPriceX96After:k[1].toString(),initializedTicksCrossed:Number(k[2]),gasEstimate:k[3].toString()};d.push(y),(!p||BigInt(y.amountOut)>BigInt(p.amountOut))&&(p=y)}catch(v){d.push({fee:h,ok:!1,error:String(v.message||v).slice(0,160)})}}if(!p){let h=d.map(g=>`${g.fee}:${g.error||"fail"}`).join("; ");throw new Error(`uniswap-v3 quote failed chain=${n}: ${h}`)}let m=e.liquidityUsd==null?await $n({chainId:n,tokenA:i,tokenB:s,dexIds:Y0(e.venue)},t).catch(()=>null):null,f=e.liquidityUsd??m?.liquidityUsd??null;return q({venue:"uniswap-v3",chainId:n,chain:ae[n].name,quoter:r,tokenIn:i,tokenOut:s,amountIn:c.toString(),fee:p.fee,amountOut:p.amountOut,gasEstimate:p.gasEstimate,liquidityUsd:f,liquiditySource:m,sqrtPriceX96After:p.sqrtPriceX96After,initializedTicksCrossed:p.initializedTicksCrossed,triedFees:d,best:!0},{chainId:n,venue:o,amountOut:p.amountOut,liquidityUsd:f,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps})}async function Rs(e={},t={}){let{chainId:n,quoter:r,router:o}=Io(e.chainId??8453),a=(e.tokens||[]).map(p=>Eo(p,n)),i=(e.fees||[]).map(Number);if(a.length<2)throw new Error("tokens[] need at least 2 addresses");let s=BigInt(e.amountIn??0);if(s<=0n)throw new Error("amountIn required");let c=J0(a,i),l=Dn.encodeFunctionData("quoteExactInput",[c,s]),u=await O(n,"eth_call",[{to:r,data:l},"latest"],t),d=Dn.decodeFunctionResult("quoteExactInput",u);return q({venue:"uniswap-v3",chainId:n,chain:ae[n].name,quoter:r,tokens:a,fees:i,path:c,amountIn:s.toString(),amountOut:d[0].toString(),gasEstimate:d[3].toString()},{chainId:n,venue:o,amountOut:d[0].toString(),liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps})}async function Ao(e={},t={}){let n=Number(e.chainId??8453),r=e.amountIn??"1000000000000000",o=await ot({chainId:n,tokenIn:ae[n].weth,tokenOut:ae[n].usdc,amountIn:r,fee:e.fee},t),a=Number(o.amountOut)/1e6;return{...o,amountOutUsdc:a,pair:"WETH/USDC"}}async function Os(e={},t={}){let n=Number(e.chainId??8453),r=Io(n,e.venue),o=Gt(e.recipient),a=String(e.tokenIn||"WETH"),i=!e.tokenIn||a===Ts||a===Ns||/^eth$/i.test(a),s=await ot(e,t),c=Cs.encodeFunctionData("exactInputSingle",[{tokenIn:s.tokenIn,tokenOut:s.tokenOut,fee:s.fee,recipient:o,amountIn:BigInt(s.amountIn),amountOutMinimum:BigInt(s.amountOutMinimum),sqrtPriceLimitX96:0n}]),l=Math.min(600,Math.max(30,Number(e.deadlineSeconds??300))),d=Number(t.nowSeconds??Math.floor(Date.now()/1e3))+l,p=Cs.encodeFunctionData("multicall",[d,[c]]);return P({provider:"uniswap-v3",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:n,deadline:d,quote:s,autoSlippage:s.autoSlippage,requiresApproval:i?null:{token:s.tokenIn,spender:r.router,amount:s.amountIn},transaction:{chainId:n,from:o,to:r.router,data:p,value:i?s.amountIn:"0",slippageGuard:K(s.autoSlippage,{chainId:n,venue:r.router,data:p})}},{provider:"uniswap-v3",kind:"univ3-swap-tx"})}async function Ls(e={}){let t=Number(e.chainId??8453);try{let n=await Ao({chainId:t,amountIn:"1000000000000000"},e);return{ok:!0,chainId:t,fee:n.fee,amountOutUsdc:n.amountOutUsdc,midPxHint:n.amountOutUsdc/.001}}catch(n){return{ok:!1,chainId:t,error:String(n.message||n).slice(0,200)}}}async function Bs(){return Object.entries(ae).map(([e,t])=>({chainId:Number(e),name:t.name,quoter:t.quoter,weth:t.weth,usdc:t.usdc}))}J();import{AbiCoder as Q0,Interface as Us,getAddress as he,isAddress as Fn,keccak256 as Z0}from"ethers";var eb=Q0.defaultAbiCoder(),at="0x0000000000000000000000000000000000000000",Ce={1:{name:"ethereum",poolManager:"0x000000000004444c5dc75cB358380D2e3dE08A90",quoter:"0x52f0e24d1c21c8a0cb1e5a5dd6198556bd9e1203",stateView:"0x7ffe42c4a5deea5b0fec41c94c136cf115597227",universalRouter:"0x66a9893cc07d91d95644aedd05d03f95e1dba8af",weth:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",usdc:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},10:{name:"optimism",poolManager:"0x9a13f98cb987694c9f086b1f5eb990eea8264ec3",quoter:"0x1f3131a13296fb91c90870043742c3cdbff1a8d7",stateView:"0xc18a3169788f4f75a170290584eca6395c75ecdb",universalRouter:"0x851116d9223fabed8e56c0e6b8ad0c31d98b3507",weth:"0x4200000000000000000000000000000000000006",usdc:"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85"},56:{name:"bsc",poolManager:"0x28e2ea090877bf75740558f6bfb36a5ffee9e9df",quoter:"0x9f75dd27d6664c475b90e105573e550ff69437b0",stateView:"0xd13dd3d6e93f276fafc9db9e6bb47c1180aee0c4",universalRouter:"0x1906c1d672b88cd1b9ac7593301ca990f94eae07",weth:"0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c",usdc:"0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d"},137:{name:"polygon",poolManager:"0x67366782805870060151383f4bbff9dab53e5cd6",quoter:"0xb3d5c3dfc3a7aebff71895a7191796bffc2c81b9",stateView:"0x5ea1bd7974c8a611cbab0bdcafcb1d9cc9b3ba5a",universalRouter:"0x1095692a6237d83c6a72f3f5efedb9a670c49223",weth:"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270",usdc:"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"},8453:{name:"base",poolManager:"0x498581fF718922c3f8e6A244956aF099B2652b2b",quoter:"0x0d5e0f971ed27fbff6c2837bf31316121532048d",stateView:"0xa3c0c9b65bad0b08107aa264b0f3db444b867a71",universalRouter:"0x6ff5693b99212da76ad316178a184ab56d299b43",weth:"0x4200000000000000000000000000000000000006",usdc:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},42161:{name:"arbitrum",poolManager:"0x360e68faccca8ca495c1b759fd9eee466db9fb32",quoter:"0x3972c00f7ed4885e145823eb7c655375d275a1c5",stateView:"0x76fd297e2d437cd7f76d50f01afe6160f86e9990",universalRouter:"0xa51afafe0263b40edaef0df8781ea9aa03e381a3",weth:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",usdc:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831"},43114:{name:"avalanche",poolManager:"0x06380c0e0912312b5150364b9dc4542ba0dbbc85",quoter:"0xbe40675bb704506a3c2ccfb762dcfd1e979845c2",stateView:"0xc3c9e198c735a4b97e3e683f391ccbdd60b69286",universalRouter:"0x94b75331ae8d42c1b61065089b7d48fe14aa73b7",weth:"0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7",usdc:"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"},4663:{name:"robinhood",poolManager:"0x8366a39cc670b4001a1121b8f6a443a643e40951",quoter:"0x8dc178efb8111bb0973dd9d722ebeff267c98f94",stateView:"0xf3334192d15450cdd385c8b70e03f9a6bd9e673b",universalRouter:"0x8876789976dEcBfCbBbe364623C63652db8C0904",weth:"0x0bd7d308f8e1639fab988df18a8011f41eacad73",usdc:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168"}},tb=[{fee:100,tickSpacing:1},{fee:500,tickSpacing:10},{fee:3e3,tickSpacing:60},{fee:1e4,tickSpacing:200},{fee:25e3,tickSpacing:8}],Ms=new Us(["function quoteExactInputSingle(((address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks) poolKey,bool zeroForOne,uint128 exactAmount,bytes hookData) params) returns (uint256 amountOut, uint256 gasEstimate)"]),MI=new Us(["function execute(bytes commands,bytes[] inputs,uint256 deadline) payable"]);var nb="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE";function Ds(e){let t=Number(e),n=Ce[t];if(!n)throw new Error(`uniswap-v4: unsupported chainId ${e} (supported: ${Object.keys(Ce).join(", ")})`);return{chainId:t,...n}}function $s(e,t){let n=Ce[Number(t)];if(!e||e===nb||e===at||/^eth$/i.test(String(e)))return he(n.weth);let r=String(e);if(/^weth$/i.test(r))return he(n.weth);if(/^usdc$/i.test(r)||/^usdg$/i.test(r))return he(n.usdc);if(!Fn(r))throw new Error(`invalid token address: ${e}`);return he(r)}function rb({currency0:e,currency1:t,fee:n,tickSpacing:r,hooks:o=at}){let a=he(e),i=he(t);if(a.toLowerCase()===i.toLowerCase())throw new Error("poolKey currencies must differ");let[s,c]=a.toLowerCase()<i.toLowerCase()?[a,i]:[i,a],l=o&&Fn(o)?he(o):at;return Z0(eb.encode(["address","address","uint24","int24","address"],[s,c,Number(n),Number(r),l]))}function ob({tokenIn:e,tokenOut:t,fee:n,tickSpacing:r,hooks:o=at}){let a=he(e),i=he(t),[s,c]=a.toLowerCase()<i.toLowerCase()?[a,i]:[i,a],l=a.toLowerCase()===s.toLowerCase();return{poolKey:{currency0:s,currency1:c,fee:Number(n),tickSpacing:Number(r),hooks:o&&Fn(o)?he(o):at},zeroForOne:l}}var ab=["uniswap-v4","uniswapv4"];async function Fs(e={},t={}){let{chainId:n,quoter:r,poolManager:o,universalRouter:a}=Ds(e.chainId??8453),i=$s(e.tokenIn||"WETH",n),s=$s(e.tokenOut||Ce[n].usdc,n),c=BigInt(e.amountIn??0);if(c<=0n)throw new Error("amountIn required (raw base units)");if(c>0xffffffffffffffffffffffffffffffffn)throw new Error("amountIn exceeds uint128");let l=e.fee!=null&&e.tickSpacing!=null?[{fee:Number(e.fee),tickSpacing:Number(e.tickSpacing)}]:e.tryTiers===!1?[{fee:500,tickSpacing:10}]:[...tb],u=e.hooks||at,d=[],p=null;for(let h of l){let{poolKey:g,zeroForOne:v}=ob({tokenIn:i,tokenOut:s,fee:h.fee,tickSpacing:h.tickSpacing,hooks:u}),k=Ms.encodeFunctionData("quoteExactInputSingle",[{poolKey:g,zeroForOne:v,exactAmount:c,hookData:"0x"}]);try{let y=await O(n,"eth_call",[{to:r,data:k},"latest"],t);if(!y||y==="0x"){d.push({...h,ok:!1,error:"empty result"});continue}let w=Ms.decodeFunctionResult("quoteExactInputSingle",y),S={fee:h.fee,tickSpacing:h.tickSpacing,ok:!0,amountOut:w[0].toString(),gasEstimate:w[1].toString(),poolKey:g,zeroForOne:v,poolId:rb({...g})};d.push(S),(!p||BigInt(S.amountOut)>BigInt(p.amountOut))&&(p=S)}catch(y){d.push({...h,ok:!1,error:String(y.message||y).slice(0,160)})}}if(!p){let h=d.map(g=>`${g.fee}/${g.tickSpacing}:${g.error||"fail"}`).join("; ");throw new Error(`uniswap-v4 quote failed chain=${n}: ${h}`)}let m=e.liquidityUsd==null?await $n({chainId:n,tokenA:i,tokenB:s,dexIds:ab},t).catch(()=>null):null,f=e.liquidityUsd??m?.liquidityUsd??null;return q({venue:"uniswap-v4",chainId:n,chain:Ce[n].name,poolManager:o,quoter:r,universalRouter:a||null,tokenIn:i,tokenOut:s,amountIn:c.toString(),fee:p.fee,tickSpacing:p.tickSpacing,hooks:p.poolKey.hooks,poolId:p.poolId,zeroForOne:p.zeroForOne,amountOut:p.amountOut,gasEstimate:p.gasEstimate,liquidityUsd:f,liquiditySource:m,triedTiers:d,best:!0,executionReady:!1,prepareReady:typeof e.recipient=="string"&&Fn(e.recipient)&&e.slippageBps!=null},{chainId:n,venue:a||r,amountOut:p.amountOut,liquidityUsd:f,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps})}async function qs(){return Object.entries(Ce).map(([e,t])=>({chainId:Number(e),name:t.name,poolManager:t.poolManager,quoter:t.quoter,stateView:t.stateView||null,universalRouter:t.universalRouter||null,weth:t.weth,usdc:t.usdc}))}async function Hs(e={}){let t=Ds(e.chainId??8453),n=await O(t.chainId,"eth_getCode",[t.quoter,"latest"],e),r=typeof n=="string"&&n!=="0x"&&n.length>4;return{ok:r,chainId:t.chainId,quoter:t.quoter,poolManager:t.poolManager,codeBytes:r?(n.length-2)/2:0}}J();var qn=Object.freeze(["blockNumber","nativeBalance","tokenBalance","resolveToken","resolvePools","scanBlocks","scoreRisk","quote","sellSimulation","prepareUnsignedTx"]),M=Object.freeze({LIVE:"LIVE",CACHED:"CACHED",STALE:"STALE",UNKNOWN:"UNKNOWN",UNAVAILABLE:"UNAVAILABLE"}),B=Object.freeze({PASS:"PASS",CAUTION:"CAUTION",FAIL:"FAIL",UNKNOWN:"UNKNOWN"}),sb=/^0x[0-9a-fA-F]{40}$/;function cb(e={}){let t=[],n=[];if(!e||typeof e!="object")return{ok:!1,errors:["definition must be an object"],warnings:n};if((!Number.isInteger(e.chainId)||e.chainId<=0)&&t.push("chainId must be a positive integer"),(typeof e.key!="string"||!/^[a-z][a-z0-9-]*$/.test(e.key||""))&&t.push('key must be a lowercase slug (e.g. "base")'),(typeof e.name!="string"||!e.name.trim())&&t.push("name is required"),!Array.isArray(e.rpcEnv)||e.rpcEnv.length===0)t.push("rpcEnv must list at least one environment variable name");else for(let o of e.rpcEnv)(typeof o!="string"||!/^[A-Z][A-Z0-9_]*$/.test(o))&&t.push(`rpcEnv entry "${o}" should be an UPPER_SNAKE env var name`);if(e.nativeCurrency){let o=e.nativeCurrency;(typeof o.symbol!="string"||!o.symbol)&&t.push("nativeCurrency.symbol is required when nativeCurrency is set"),Number.isInteger(o.decimals)||t.push("nativeCurrency.decimals must be an integer")}for(let[o,a]of(e.venues||[]).entries()){let i=`venues[${o}]`;if(!a||typeof a!="object"){t.push(`${i} must be an object`);continue}sb.test(a.address||"")||t.push(`${i}.address is not a valid 20-byte address`),/^0x0{40}$/.test(a.address||"")&&t.push(`${i}.address is the zero address -- placeholder left in place?`),a.kind||t.push(`${i}.kind is required (router|quoter|factory|...)`),a.verified?(a.verified.method||t.push(`${i}.verified.method is required`),a.verified.source||t.push(`${i}.verified.source is required`),a.verified.date||n.push(`${i}.verified.date missing -- add one so staleness is visible`)):t.push(`${i} must record verification: { verified: { method, source, date } }. An unverified venue stays blocked.`)}let r=e.capabilities||{};for(let o of Object.keys(r))qn.includes(o)?typeof r[o]!="function"&&t.push(`capability "${o}" must be a function`):t.push(`unknown capability "${o}"`);return Object.keys(r).length===0&&n.push("scanner implements no capabilities -- it can only be registered, not used"),r.prepareUnsignedTx&&!r.quote&&n.push("prepareUnsignedTx without quote: no priced expectation to validate the built tx against"),r.prepareUnsignedTx&&!r.sellSimulation&&n.push("prepareUnsignedTx without sellSimulation: cannot prove an asset is exitable before buying"),{ok:t.length===0,errors:t,warnings:n}}function lb(e){let{ok:t,errors:n,warnings:r}=cb(e);if(!t)throw new Error(`invalid scanner for ${e?.key??"<unknown>"}:
|
|
3
|
-
|
|
4
|
-
- `)}`);let o=e.capabilities||{},a=qn.filter(s=>typeof o[s]=="function"),i={key:e.key,chainId:e.chainId,name:e.name,rpcEnv:[...e.rpcEnv],nativeCurrency:e.nativeCurrency?{...e.nativeCurrency}:null,explorer:e.explorer||null,venues:(e.venues||[]).map(s=>({...s})),warnings:r,capabilities(){return{chainId:e.chainId,key:e.key,supported:[...a],unsupported:qn.filter(s=>!a.includes(s))}},supports(s){return a.includes(s)}};for(let s of qn)a.includes(s)?i[s]=async(...c)=>o[s](...c,{scanner:i}):i[s]=async()=>{throw new Error(`${e.key} (chain ${e.chainId}) does not implement "${s}". Supported: ${a.join(", ")||"none"}. An unimplemented capability is absent, not assumed -- implement it or treat this chain as fail-closed for that operation.`)};return Object.freeze(i)}var _o=new Map;function Vs(e){let t=lb(e);return _o.set(t.chainId,t),t}function Ws(e){return _o.get(Number(e))||null}function zs(){return[..._o.values()]}J();var Po={getAmountsOut:"d06ca61f",swapExactTokensForTokens:"38ed1739",swapExactETHForTokens:"7ff36ab5"},ce=e=>BigInt(e).toString(16).padStart(64,"0"),Kt=e=>e.slice(2).toLowerCase().padStart(64,"0");function ub(e,t){return`0x${Po.getAmountsOut}`+ce(e)+ce(64)+ce(t.length)+t.map(Kt).join("")}function db(e){if(!e||e==="0x")return null;let t=e.slice(2);if(t.length<128)return null;let n=Number(BigInt(`0x${t.slice(64,128)}`));if(!Number.isFinite(n)||n<1||n>16)return null;let r=[];for(let o=0;o<n;o++){let a=128+o*64;if(t.length<a+64)return null;r.push(BigInt(`0x${t.slice(a,a+64)}`))}return r}function Co(e,t="router"){return(e?.venues||[]).find(r=>r.kind===t)?.address??null}var To=100;function pb(e,t){let n=Number(t);if(!Number.isFinite(n)||n<0)throw new Error("slippageBps must be a non-negative number");if(n>To)throw new Error(`slippageBps ${n} exceeds the ${To} bps ceiling. Block and requote or split the order -- do not widen the guard to force a fill.`);return BigInt(e)*BigInt(1e4-Math.floor(n))/10000n}function js(e){let{chainId:t,wrappedNative:n}=e;async function r(o,a,i,s){let c=await O(t,"eth_call",[{to:o,data:ub(a,i)},"latest"],s);return db(c?.result??c)}return{async quote({tokenIn:o,tokenOut:a,amountIn:i,path:s},c={}){let l=Co(c.scanner);if(!l)return{chainId:t,evidence:M.UNAVAILABLE,reason:"no verified router configured for this chain; quoting stays fail-closed rather than guessing a venue address"};let u=s||[o,a];if(u.some(p=>!/^0x[0-9a-fA-F]{40}$/.test(p||"")))throw new Error("quote requires valid 20-byte addresses");let d=await r(l,i,u,c);return d?{chainId:t,router:l,path:u,amountIn:String(i),amountOut:d[d.length-1].toString(),hops:u.length-1,evidence:M.LIVE,note:"exact-input quote at current reserves; not a guaranteed fill"}:{chainId:t,router:l,path:u,evidence:M.UNKNOWN,reason:"router returned no amounts -- no pool for this path, or the call reverted"}},async sellSimulation({token:o,amountIn:a,base:i},s={}){let c=Co(s.scanner),l=i||n;if(l&&String(o).toLowerCase()===String(l).toLowerCase())return{chainId:t,token:o,verdict:B.UNKNOWN,evidence:M.UNAVAILABLE,reason:"token is the base asset for this chain, so there is nothing to round-trip against. Sellability must be judged against a different quote asset."};if(!c||!l)return{chainId:t,token:o,verdict:B.UNKNOWN,evidence:M.UNAVAILABLE,reason:c?"no wrappedNative configured for this chain, so no base asset to round-trip against":"no verified router configured for this chain"};let u=await r(c,a,[l,o],s);if(!u)return{chainId:t,token:o,verdict:B.FAIL,evidence:M.LIVE,leg:"buy",reason:"buy leg returned no amounts -- no route in"};let d=u[u.length-1];if(d===0n)return{chainId:t,token:o,verdict:B.FAIL,evidence:M.LIVE,leg:"buy",reason:"buy leg quotes zero output"};let p=await r(c,d,[o,l],s);if(!p)return{chainId:t,token:o,verdict:B.FAIL,evidence:M.LIVE,leg:"sell",bought:d.toString(),reason:"SELL LEG FAILED while the buy leg quoted fine. This is the honeypot signature: do not trade."};let m=p[p.length-1],f=Number(m*10000n/BigInt(a)),h=B.PASS,g="round trip completes with expected fee/impact loss";return f<5e3?(h=B.FAIL,g=`round trip returns only ${(f/100).toFixed(2)}% -- punitive tax or no real liquidity`):f<9e3&&(h=B.CAUTION,g=`round trip returns ${(f/100).toFixed(2)}% -- transfer tax or thin liquidity at this size`),{chainId:t,token:o,base:l,router:c,verdict:h,reason:g,amountIn:String(a),bought:d.toString(),returned:m.toString(),retentionBps:f,evidence:M.LIVE,note:"Quote-level round trip. It does not prove transfer hooks absent at execution time."}},async prepareUnsignedTx({tokenIn:o,tokenOut:a,amountIn:i,recipient:s,slippageBps:c=50,deadlineSeconds:l=900,path:u},d={}){let p=d.scanner,m=Co(p);if(!m)throw new Error(`chain ${t} has no verified router; preparing a swap stays fail-closed. Add a venue with recorded provenance first (see docs/adding-a-chain.md).`);if(!/^0x[0-9a-fA-F]{40}$/.test(s||""))throw new Error("prepareUnsignedTx requires a valid recipient address");let f=u||[o,a],h=await this.quote({tokenIn:o,tokenOut:a,amountIn:i,path:f},d);if(h.evidence!==M.LIVE)throw new Error(`cannot prepare without a live quote (${h.evidence}: ${h.reason??"no reason given"})`);let g=pb(h.amountOut,c);if(g<=0n)throw new Error("computed minOut is zero -- refusing to prepare");let v=BigInt(Math.floor(Date.now()/1e3)+Number(l)),k=n&&f[0].toLowerCase()===n.toLowerCase()&&d.useNative,y=k?`0x${Po.swapExactETHForTokens}`+ce(g)+ce(128)+Kt(s)+ce(v)+ce(f.length)+f.map(Kt).join(""):`0x${Po.swapExactTokensForTokens}`+ce(i)+ce(g)+ce(160)+Kt(s)+ce(v)+ce(f.length)+f.map(Kt).join("");return{unsigned:!0,signedBy:"user-wallet",chainId:t,tx:{to:m,data:y,value:k?`0x${BigInt(i).toString(16)}`:"0x0"},guard:{quotedOut:h.amountOut,minOut:g.toString(),slippageBps:c,maxSlippageBps:To,deadline:v.toString()},requires:k?[]:[{step:"approve",token:f[0],spender:m,amount:String(i)}],note:"UNSIGNED. Re-verify the guard against a fresh quote immediately before signing -- a quote-time minimum is not a minimum at broadcast time."}}}}J();var mb=[100,500,3e3,1e4],Gs={quoteExactInputSingle:"c6a5026a",exactInputSingle:"04e45aaf"},He=e=>BigInt(e).toString(16).padStart(64,"0"),Yt=e=>e.slice(2).toLowerCase().padStart(64,"0"),Ks=/^0x[0-9a-fA-F]{40}$/,Ro=100;function fb(e,t){let n=Number(t);if(!Number.isFinite(n)||n<0)throw new Error("slippageBps must be a non-negative number");if(n>Ro)throw new Error(`slippageBps ${n} exceeds the ${Ro} bps ceiling. Block and requote or split the order -- do not widen the guard to force a fill.`);return BigInt(e)*BigInt(1e4-Math.floor(n))/10000n}function No(e,t){return(e?.venues||[]).find(n=>n.kind===t)?.address??null}function Ys(e){let{chainId:t,wrappedNative:n}=e;async function r({quoter:a,tokenIn:i,tokenOut:s,amountIn:c,fee:l},u){let d=`0x${Gs.quoteExactInputSingle}`+Yt(i)+Yt(s)+He(c)+He(l)+He(0),p=await O(t,"eth_call",[{to:a,data:d},"latest"],u).catch(()=>null),m=p?.result??p;if(!m||m==="0x"||m.length<66)return null;let f=BigInt(`0x${m.slice(2,66)}`);return f>0n?f:null}async function o({quoter:a,tokenIn:i,tokenOut:s,amountIn:c},l){let u=[],d=null;for(let p of mb){let m=await r({quoter:a,tokenIn:i,tokenOut:s,amountIn:c,fee:p},l);u.push({fee:p,amountOut:m?m.toString():null}),m&&(!d||m>d.amountOut)&&(d={fee:p,amountOut:m})}return{best:d,tried:u}}return{async quote({tokenIn:a,tokenOut:i,amountIn:s},c={}){let l=No(c.scanner,"quoter");if(!l)return{chainId:t,evidence:M.UNAVAILABLE,reason:"no verified quoter configured for this chain; quoting stays fail-closed rather than guessing a venue address"};for(let p of[a,i])if(!Ks.test(p||""))throw new Error("quote requires valid 20-byte addresses");let{best:u,tried:d}=await o({quoter:l,tokenIn:a,tokenOut:i,amountIn:s},c);return u?{chainId:t,venue:"uniswap-v3",quoter:l,tokenIn:a,tokenOut:i,amountIn:String(s),amountOut:u.amountOut.toString(),fee:u.fee,triedFeeTiers:d,evidence:M.LIVE,note:"exact-input single-hop quote at current tick; not a guaranteed fill"}:{chainId:t,quoter:l,tokenIn:a,tokenOut:i,triedFeeTiers:d,evidence:M.UNKNOWN,reason:"no fee tier returned a quote -- no V3 pool for this pair, or no liquidity"}},async sellSimulation({token:a,amountIn:i,base:s},c={}){let l=No(c.scanner,"quoter"),u=s||n;if(u&&String(a).toLowerCase()===String(u).toLowerCase())return{chainId:t,token:a,verdict:B.UNKNOWN,evidence:M.UNAVAILABLE,reason:"token is the base asset for this chain, so there is nothing to round-trip against. Sellability must be judged against a different quote asset."};if(!l||!u)return{chainId:t,token:a,verdict:B.UNKNOWN,evidence:M.UNAVAILABLE,reason:l?"no wrappedNative configured, so there is no base asset to round-trip against":"no verified quoter configured for this chain"};let d=await o({quoter:l,tokenIn:u,tokenOut:a,amountIn:i},c);if(!d.best)return{chainId:t,token:a,verdict:B.FAIL,evidence:M.LIVE,leg:"buy",reason:"no V3 pool priced the buy leg on any fee tier"};let p=await o({quoter:l,tokenIn:a,tokenOut:u,amountIn:d.best.amountOut},c);if(!p.best)return{chainId:t,token:a,verdict:B.FAIL,evidence:M.LIVE,leg:"sell",bought:d.best.amountOut.toString(),reason:"SELL LEG FAILED while the buy leg quoted fine. This is the honeypot signature: do not trade."};let m=p.best.amountOut,f=Number(m*10000n/BigInt(i)),h=B.PASS,g="round trip completes with expected fee/impact loss";return f<5e3?(h=B.FAIL,g=`round trip returns only ${(f/100).toFixed(2)}% -- punitive tax or no real liquidity`):f<9e3&&(h=B.CAUTION,g=`round trip returns ${(f/100).toFixed(2)}% -- transfer tax or thin liquidity at this size`),{chainId:t,venue:"uniswap-v3",token:a,base:u,verdict:h,reason:g,amountIn:String(i),bought:d.best.amountOut.toString(),returned:m.toString(),retentionBps:f,buyFee:d.best.fee,sellFee:p.best.fee,evidence:M.LIVE,note:"Quote-level round trip. It does not prove transfer hooks absent at execution time."}},async prepareUnsignedTx({tokenIn:a,tokenOut:i,amountIn:s,recipient:c,slippageBps:l=50,fee:u},d={}){let p=No(d.scanner,"router");if(!p)throw new Error(`chain ${t} has no verified V3 router; preparing a swap stays fail-closed. Add a venue with recorded provenance first (see docs/adding-a-chain.md).`);if(!Ks.test(c||""))throw new Error("prepareUnsignedTx requires a valid recipient address");let m=await this.quote({tokenIn:a,tokenOut:i,amountIn:s},d);if(m.evidence!==M.LIVE)throw new Error(`cannot prepare without a live quote (${m.evidence}: ${m.reason??"no reason given"})`);let f=u??m.fee,h=fb(m.amountOut,l);if(h<=0n)throw new Error("computed minOut is zero -- refusing to prepare");let g=`0x${Gs.exactInputSingle}`+Yt(a)+Yt(i)+He(f)+Yt(c)+He(s)+He(h)+He(0);return{unsigned:!0,signedBy:"user-wallet",chainId:t,venue:"uniswap-v3",tx:{to:p,data:g,value:"0x0"},guard:{quotedOut:m.amountOut,minOut:h.toString(),slippageBps:l,maxSlippageBps:Ro,fee:f},requires:[{step:"approve",token:a,spender:p,amount:String(s)}],note:"UNSIGNED. Re-verify the guard against a fresh quote immediately before signing -- a quote-time minimum is not a minimum at broadcast time."}}}}var Hn={decimals:"0x313ce567",symbol:"0x95d89b41",name:"0x06fdde03",totalSupply:"0x18160ddd",owner:"0x8da5cb5b"};function Js(e){if(!e||e==="0x")return null;try{return BigInt(e)}catch{return null}}function Xs(e){if(!e||e==="0x")return null;let t=e.slice(2);if(t.length>=128){let r=Number(BigInt(`0x${t.slice(64,128)}`));if(r>0&&r<=256&&t.length>=128+r*2){let o=t.slice(128,128+r*2),a=Buffer.from(o,"hex").toString("utf8").replace(/\0+$/,"");if(a)return a}}return Buffer.from(t.slice(0,64),"hex").toString("utf8").replace(/\0+$/,"")||null}function hb(e){let{chainId:t}=e;async function n(r,o,a){return O(t,"eth_call",[{to:r,data:o},"latest"],a)}return{async blockNumber(r={}){let o=await Vt(t,r);return{chainId:t,blockNumber:o?.blockNumber??o,evidence:M.LIVE}},async nativeBalance(r,o={}){let a=await Fe(t,r,o);return{chainId:t,address:r,wei:a?.wei??a?.balance??null,symbol:e.nativeCurrency?.symbol??null,decimals:e.nativeCurrency?.decimals??18,evidence:M.LIVE}},async tokenBalance({token:r,owner:o},a={}){let i=await Wt({chainId:t,token:r,owner:o},a);return{chainId:t,token:r,owner:o,raw:i?.balance??i,evidence:M.LIVE}},async resolveToken(r,o={}){if(!/^0x[0-9a-fA-F]{40}$/.test(r||""))return{chainId:t,token:r,evidence:M.UNKNOWN,error:"resolveToken needs a 20-byte address; symbol lookup is a market-data concern"};let[a,i,s,c]=await Promise.all([n(r,Hn.decimals,o).catch(()=>null),n(r,Hn.symbol,o).catch(()=>null),n(r,Hn.name,o).catch(()=>null),n(r,Hn.totalSupply,o).catch(()=>null)]),l=Js(a?.result??a),u=l!==null||i?.result||s?.result;return{chainId:t,address:r,decimals:l===null?null:Number(l),symbol:Xs(i?.result??i),name:Xs(s?.result??s),totalSupply:(Js(c?.result??c)??null)?.toString()??null,evidence:u?M.LIVE:M.UNKNOWN,warning:u?void 0:"no ERC-20 metadata returned -- may not be a token contract"}},async resolvePools(r,o={}){let a=e.dexscreenerSlug;if(!a)return{chainId:t,token:r,pools:[],evidence:M.UNAVAILABLE,reason:"no dexscreenerSlug configured for this chain; pool discovery is unavailable rather than guessed"};let i=await qe(r,o).catch(()=>null),c=(i?.pairs||i?.data?.pairs||[]).filter(l=>String(l.chainId).toLowerCase()===String(a).toLowerCase()).map(l=>({pair:l.pairAddress,dex:l.dexId,base:l.baseToken?.address,quote:l.quoteToken?.address,liquidityUsd:l.liquidity?.usd??null,priceUsd:l.priceUsd??null,volume24hUsd:l.volume?.h24??null,createdAt:l.pairCreatedAt??null})).sort((l,u)=>(u.liquidityUsd??0)-(l.liquidityUsd??0));return{chainId:t,token:r,pools:c,evidence:c.length?M.LIVE:M.UNKNOWN}},async scanBlocks({fromBlock:r,toBlock:o,address:a,topics:i,chunkSize:s=2e3}={},c={}){if(!Number.isInteger(r)||!Number.isInteger(o))throw new Error("scanBlocks requires integer fromBlock and toBlock");if(o<r)throw new Error("toBlock must be >= fromBlock");let l=[],u=[];for(let d=r;d<=o;d+=s){let p=Math.min(d+s-1,o);u.push([d,p])}for(let[d,p]of u){let m={fromBlock:`0x${d.toString(16)}`,toBlock:`0x${p.toString(16)}`};a&&(m.address=a),i&&(m.topics=i);let f=await O(t,"eth_getLogs",[m],c).catch(h=>({error:String(h?.message||h)}));if(f?.error)return{chainId:t,fromBlock:r,toBlock:o,logs:l,complete:!1,failedAt:[d,p],error:f.error,evidence:M.UNKNOWN};for(let h of f?.result??f??[])l.push(h)}return{chainId:t,fromBlock:r,toBlock:o,logs:l,complete:!0,chunks:u.length,evidence:M.LIVE}},async scoreRisk(r,o={}){let a=[],i=B.PASS,s=u=>{let d={[B.PASS]:0,[B.CAUTION]:1,[B.UNKNOWN]:2,[B.FAIL]:3};d[u]>d[i]&&(i=u)},c=await this.resolveToken(r,o);c.evidence!==M.LIVE?(a.push({check:"erc20-metadata",result:B.UNKNOWN,detail:c.warning}),s(B.UNKNOWN)):a.push({check:"erc20-metadata",result:B.PASS,detail:`${c.symbol} / ${c.decimals}d`});let l=await this.resolvePools(r,o);if(l.evidence===M.UNAVAILABLE)a.push({check:"liquidity",result:B.UNKNOWN,detail:l.reason}),s(B.UNKNOWN);else if(!l.pools.length)a.push({check:"liquidity",result:B.FAIL,detail:"no pool with liquidity found"}),s(B.FAIL);else{let u=l.pools[0],d=u.liquidityUsd??0;d<5e3?(a.push({check:"liquidity",result:B.CAUTION,detail:`top pool only $${d}`}),s(B.CAUTION)):a.push({check:"liquidity",result:B.PASS,detail:`$${d} on ${u.dex}`}),u.createdAt&&Date.now()-u.createdAt<24*3600*1e3&&(a.push({check:"age",result:B.CAUTION,detail:"pool under 24h old"}),s(B.CAUTION))}if(typeof this.sellSimulation=="function"){let u=await this.sellSimulation({token:r,amountIn:(10n**16n).toString()},o).catch(d=>({verdict:B.UNKNOWN,reason:String(d?.message||d)}));a.push({check:"sellability",result:u.verdict,detail:u.retentionBps!=null?`round trip returns ${(u.retentionBps/100).toFixed(2)}% -- ${u.reason}`:u.reason}),s(u.verdict)}else a.push({check:"sellability",result:B.UNKNOWN,detail:"no verified router on this chain, so a round-trip sell simulation cannot run. Treat as unproven -- a buy path is not an exit path."}),s(B.UNKNOWN);return{chainId:t,token:r,verdict:i,checks:a,note:"Structural checks only. UNKNOWN is not PASS. A token is not tradeable until a sell simulation succeeds."}}}}function Qs(e){let n={...hb(e)},r=new Set((e.venues||[]).map(a=>a.kind));e.venueKind==="uniswap-v3"&&r.has("quoter")&&r.has("router")?Object.assign(n,Ys({chainId:e.chainId,wrappedNative:e.wrappedNative})):e.venueKind==="uniswap-v2"&&r.has("router")&&Object.assign(n,js({chainId:e.chainId,wrappedNative:e.wrappedNative}));let o={};for(let[a,i]of Object.entries(n))o[a]=i.bind(n);return{key:e.key,chainId:e.chainId,name:e.name,rpcEnv:e.rpcEnv,nativeCurrency:e.nativeCurrency,explorer:e.explorer,venues:e.venues||[],capabilities:o}}var it=Object.freeze([{key:"ethereum",chainId:1,name:"Ethereum",rpcEnv:["ETH_RPC_URL","ETHEREUM_RPC_URL","MAINNET_RPC_URL"],nativeCurrency:{symbol:"ETH",decimals:18},explorer:"https://etherscan.io",dexscreenerSlug:"ethereum",venueKind:"uniswap-v3",wrappedNative:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",venues:[{kind:"quoter",address:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",label:"Uniswap V3 QuoterV2",verified:{method:"functional probe, not a codesize check: quoteExactInputSingle returned a live sane price (WETH->USDC fee 500 quoted 1908.71 USDC). A contract that correctly prices a known pair IS a working V3 quoter",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:1}},{kind:"router",address:"0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45",label:"Uniswap V3 SwapRouter02",verified:{method:"eth_getCode returned real bytecode on this chain and the paired quoter at the same deployment passed a live functional quote",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:1}}]},{key:"optimism",chainId:10,name:"OP Mainnet",rpcEnv:["OPTIMISM_RPC_URL","OP_RPC_URL"],nativeCurrency:{symbol:"ETH",decimals:18},explorer:"https://optimistic.etherscan.io",dexscreenerSlug:"optimism",venueKind:"uniswap-v3",wrappedNative:"0x4200000000000000000000000000000000000006",venues:[{kind:"quoter",address:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",label:"Uniswap V3 QuoterV2",verified:{method:"functional probe, not a codesize check: quoteExactInputSingle returned a live sane price (WETH->USDC fee 500 quoted 1905.23 USDC). A contract that correctly prices a known pair IS a working V3 quoter",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:10}},{kind:"router",address:"0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45",label:"Uniswap V3 SwapRouter02",verified:{method:"eth_getCode returned real bytecode on this chain and the paired quoter at the same deployment passed a live functional quote",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:10}}]},{key:"bsc",chainId:56,name:"BNB Smart Chain",rpcEnv:["BSC_RPC_URL","BNB_RPC_URL"],nativeCurrency:{symbol:"BNB",decimals:18},explorer:"https://bscscan.com",dexscreenerSlug:"bsc",venueKind:"uniswap-v3",wrappedNative:"0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c",venues:[{kind:"quoter",address:"0x78D78E420Da98ad378D7799bE8f4AF69033EB077",label:"Uniswap V3 QuoterV2",verified:{method:"functional probe, not a codesize check: quoteExactInputSingle returned a live sane price (WBNB->USDC fee 500 quoted 413.86 USDC). A contract that correctly prices a known pair IS a working V3 quoter",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:56}},{kind:"router",address:"0xB971eF87ede563556b2ED4b1C0b0019111Dd85d2",label:"Uniswap V3 SwapRouter02",verified:{method:"eth_getCode returned real bytecode on this chain and the paired quoter at the same deployment passed a live functional quote",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:56}}]},{key:"polygon",chainId:137,name:"Polygon",rpcEnv:["POLYGON_RPC_URL","POLYGON_RPC"],nativeCurrency:{symbol:"POL",decimals:18},explorer:"https://polygonscan.com",dexscreenerSlug:"polygon",venueKind:"uniswap-v3",wrappedNative:"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270",venues:[{kind:"quoter",address:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",label:"Uniswap V3 QuoterV2",verified:{method:"functional probe, not a codesize check: quoteExactInputSingle returned a live sane price (WMATIC->USDC fee 500 quoted 0.0720 USDC). A contract that correctly prices a known pair IS a working V3 quoter",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:137}},{kind:"router",address:"0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45",label:"Uniswap V3 SwapRouter02",verified:{method:"eth_getCode returned real bytecode on this chain and the paired quoter at the same deployment passed a live functional quote",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:137}}]},{key:"stable",chainId:988,name:"Stable Mainnet",rpcEnv:["STABLE_RPC_URL","STABLE_RPC"],nativeCurrency:{symbol:"USDT0",decimals:18},venueKind:"uniswap-v3",wrappedNative:"0x5d442b349590a6048Eb2dC0eC346cAA5F47A9ab5",venues:[{kind:"quoter",address:"0xb070179E7032CdA868b53e6C1742F80c9e940d1A",label:"Uniswap V3 QuoterV2 (canonical)",verified:{method:"Stable is on the OFFICIAL Uniswap v3 Deployments List (governance-recognised 2026-05-12, UAC process completed 2026-04, deployed by Protofire), so this is a canonical deployment rather than a fork. eth_getCode returned 8273 bytes, the same size as the canonical quoter on the seven already-verified chains. Functional probe on a live pool (TOAST -> USDT0, fee 10000): 100 in -> 0.000003, 1000 -> 0.000031, 10000 -> 0.000319 USDT0. Output scales monotonically with input, which is a working quoter answering, not a revert. Two of three sampled pools carry non-zero liquidity. NOTE: the pools discovered so far are thin, so real routing size is limited -- the venue is proved, deep liquidity is not.",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-08-05",chainId:988}},{kind:"router",address:"0x32eaf9B5d5F2CD7361c5012890C943D7de84C22a",label:"Uniswap SwapRouter02 (canonical)",verified:{method:"eth_getCode returned 24497 bytes. Cross-checked on-chain rather than trusted from docs: router.factory() returns 0x88f0a512ef09175d456bc9547f914f48c013e4aa, the same v3 core factory that created the pools quoted above, and router.WETH9() returns the wrappedNative recorded on this chain entry. Address published in the Stable docs DEX reference and the Uniswap deployments list.",source:"docs.stable.xyz/en/reference/dexes + on-chain factory()/WETH9() round-trip",date:"2026-08-05",chainId:988}}]},{key:"hyperevm",chainId:999,name:"HyperEVM",rpcEnv:["HYPEREVM_RPC_URL","HYPER_EVM_RPC"],nativeCurrency:{symbol:"HYPE",decimals:18},dexscreenerSlug:"hyperevm",venueKind:"uniswap-v3",wrappedNative:"0x5555555555555555555555555555555555555555",venues:[{kind:"quoter",address:"0x03A918028f22D9E1473B7959C927AD7425A45C7C",label:"HyperSwap V3 QuoterV2",verified:{method:"functional probe, not a codesize check: quoteExactInputSingle(1 WHYPE -> USDT0) returned live output on all four fee tiers (100: 57.3385, 500: 57.4187, 3000: 57.3237, 10000: 56.1963 USDT0). Decimals read on-chain: WHYPE 18, USDT0 6. Best tier checked against an INDEPENDENT control the same minute -- Hyperliquid allMids put HYPE at 57.3205, so the pool is 0.171% from the perp mid, which is the right shape for fee plus impact rather than a wrong contract or a decimals bug.",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-08-05",chainId:999}},{kind:"router",address:"0x4E2960a8cd19B467b82d26D83fAcb0fAE26b094D",label:"HyperSwap V3 SwapRouter",verified:{method:"eth_getCode returned 12070 bytes, and it is the router paired with the quoter proved above -- the same pair already shipped in UNI_V3_VENUES[999].hyperswap, which is the map the quote/prepare path actually routes through.",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-08-05",chainId:999}}]},{key:"abstract",chainId:2741,name:"Abstract",rpcEnv:["ABSTRACT_RPC_URL","ABS_RPC_URL"],nativeCurrency:{symbol:"ETH",decimals:18},venueKind:"uniswap-v3",wrappedNative:"0x3439153EB7AF838Ad19d56E1571FBD09333C2809",venues:[{kind:"quoter",address:"0x728BD3eC25D5EDBafebB84F3d67367Cd9EBC7693",label:"Uniswap V3 QuoterV2 (Abstract deployment)",verified:{method:"Abstract is a ZK-stack chain, so CREATE2 addresses differ and the canonical Uniswap addresses are NOT valid here -- probing them returns codesize 0, which is what previously made this chain look like it had no V3 at all. Found the real deployment from live traffic instead: scanned recent Swap(...) logs, took the busiest pool, read pool.factory() = 0xa1160e73b63f322ae88cc2d8e700833e71d0b2a1, then enumerated that factory's deployer (0xf3d63166F0Ca56C3c1A3508FcE03Ff0Cf3Fb691e) and probed each of its 56 contracts with a real quoteExactInputSingle call. Exactly one answered: 1 WETH -> 1846.475731 USDC.e at fee 500. Independent sanity check: the pool's own slot0() spot price is 1873.11 USDC.e per WETH, so the quoter sits ~1.4% below spot, the right shape for fee plus price impact on this size.",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-08-05",chainId:2741}},{kind:"router",address:"0x7712FA47387542819d4E35A23f8116C90C18767C",label:"Uniswap SwapRouter02 (Abstract deployment)",verified:{method:"eth_getCode returned 167392 bytes and the runtime contains the exactInputSingle selector. router.factory() matches the factory proved above and router.WETH9() matches the wrappedNative on this entry. Chosen over its byte-identical twin (0xfD6257F4...) because this is the address real users actually route through: it appeared as tx.to on live swaps against the WETH/USDC.e pool.",source:"on-chain factory()/WETH9() round-trip + live swap tx.to sampling",date:"2026-08-05",chainId:2741}}]},{key:"robinhood",chainId:4663,name:"Robinhood Chain",rpcEnv:["RH_CHAIN_RPC","ROBINHOOD_RPC_URL"],nativeCurrency:{symbol:"ETH",decimals:18},dexscreenerSlug:"robinhood",venueKind:"uniswap-v3",wrappedNative:"0x0bd7d308f8e1639fab988df18a8011f41eacad73",venues:[{kind:"quoter",address:"0x33e885ed0ec9bf04ecfb19341582aadcb4c8a9e7",label:"Uniswap V3 QuoterV2",verified:{method:"functional probe, not a codesize check: quoteExactInputSingle returned a live sane price (WETH->USDG fee 100 quoted 1866.58 USDG, and USDG->CASHCAT fee 10000 quoted a live amount). A contract that correctly prices known pairs IS a working V3 quoter",source:"live eth_call against rpc.mainnet.chain.robinhood.com",date:"2026-07-31",chainId:4663}},{kind:"router",address:"0xcaf681a66d020601342297493863e78c959e5cb2",label:"Uniswap V3 SwapRouter02",verified:{method:"eth_getCode returned real bytecode (24497 bytes) on this chain and the paired quoter at the same deployment passed a live functional quote",source:"live eth_getCode against rpc.mainnet.chain.robinhood.com",date:"2026-07-31",chainId:4663}},{kind:"factory",address:"0x1f7d7550b1b028f7571e69a784071f0205fd2efa",label:"Uniswap V3 Factory",verified:{method:"eth_getCode returned real bytecode (24535 bytes) and a PoolCreated log scan over this factory returned 76 pools in ~9000 recent blocks",source:"live eth_getLogs against rpc.mainnet.chain.robinhood.com",date:"2026-07-31",chainId:4663}}]},{key:"base",chainId:8453,name:"Base",rpcEnv:["BASE_RPC_URL"],nativeCurrency:{symbol:"ETH",decimals:18},explorer:"https://basescan.org",dexscreenerSlug:"base",venueKind:"uniswap-v3",wrappedNative:"0x4200000000000000000000000000000000000006",venues:[{kind:"quoter",address:"0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a",label:"Uniswap V3 QuoterV2 (Base)",verified:{method:"functional probe: quoteExactInputSingle returned WETH->USDC at fee 500 = 1908.44 USDC, a live sane price. The canonical mainnet quoter address also has bytecode on Base but does NOT price this pair, which is exactly the false positive a codesize-only check accepts",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:8453}},{kind:"router",address:"0x2626664c2603336E57B271c5C0b26F421741e481",label:"Uniswap V3 SwapRouter02 (Base)",verified:{method:"eth_getCode returned real bytecode and the paired Base quoter passed a live functional quote",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:8453}},{kind:"router-v2",address:"0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24",label:"Uniswap V2 Router02 (Base)",verified:{method:"eth_getCode returned 17891 bytes; live getAmountsOut on WETH->USDC round-tripped to 98.75% (2x0.30% fee + impact)",source:"https://docs.uniswap.org/contracts/v2/reference/smart-contracts/v2-deployments",date:"2026-07-30",chainId:8453}}]},{key:"arbitrum",chainId:42161,name:"Arbitrum One",rpcEnv:["ARBITRUM_RPC_URL","ARB_RPC_URL"],nativeCurrency:{symbol:"ETH",decimals:18},explorer:"https://arbiscan.io",dexscreenerSlug:"arbitrum",venueKind:"uniswap-v3",wrappedNative:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",venues:[{kind:"quoter",address:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",label:"Uniswap V3 QuoterV2",verified:{method:"functional probe, not a codesize check: quoteExactInputSingle returned a live sane price (WETH->USDC fee 500 quoted 1908.72 USDC). A contract that correctly prices a known pair IS a working V3 quoter",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:42161}},{kind:"router",address:"0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45",label:"Uniswap V3 SwapRouter02",verified:{method:"eth_getCode returned real bytecode on this chain and the paired quoter at the same deployment passed a live functional quote",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:42161}}]},{key:"avalanche",chainId:43114,name:"Avalanche C-Chain",rpcEnv:["AVALANCHE_RPC_URL","AVAX_RPC_URL"],nativeCurrency:{symbol:"AVAX",decimals:18},explorer:"https://snowtrace.io",dexscreenerSlug:"avalanche",venueKind:"uniswap-v3",wrappedNative:"0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7",venues:[{kind:"quoter",address:"0xbe0F5544EC67e9B3b2D979aaA43f18Fd87E6257F",label:"Uniswap V3 QuoterV2",verified:{method:"functional probe, not a codesize check: quoteExactInputSingle returned a live sane price (WAVAX->USDC fee 500 quoted 6.48 USDC). A contract that correctly prices a known pair IS a working V3 quoter",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:43114}},{kind:"router",address:"0xbb00FF08d01D300023C629E8fFfFcb65A5a578cE",label:"Uniswap V3 SwapRouter02",verified:{method:"eth_getCode returned real bytecode on this chain and the paired quoter at the same deployment passed a live functional quote",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:43114}}]}]);function Oo(){return it.map(e=>Vs(Qs(e)))}var Jt=new Map,bb=Object.keys(ae).map(Number),gb=Object.keys(Ce).map(Number),yb=it.map(e=>e.chainId),Lo=new Set,Zs=!1;function E(e){if(!e?.id)throw new Error("registerProvider requires id");if(!e.venue)throw new Error("registerProvider requires venue");if(!Array.isArray(e.ops))throw new Error("registerProvider requires ops[]");let t=String(e.id);if(Zs&&Lo.has(t))throw new Error(`registerProvider refuses to overwrite built-in provider: ${t}`);return Jt.set(t,{chainIds:e.chainIds||[],auth:e.auth||"none",description:e.description||"",baseEnv:e.baseEnv||[],...e,id:t}),Jt.get(t)}function Bo(e){return Jt.get(e)||null}function Vn({venue:e,op:t}={}){let n=[...Jt.values()];return e&&(n=n.filter(r=>r.venue===e)),t&&(n=n.filter(r=>r.ops.includes(t))),n}function wb(){Lo.clear();for(let e of Jt.keys())Lo.add(e);Zs=!0}E({id:"hl-info",venue:"hl",chainIds:[],auth:"none",ops:["health","allMids","l2Book","outcomeMeta","clearinghouse","userFills","meta","metaAndAssetCtxs","candleSnapshot","openOrders","frontendOpenOrders","userState","spotMeta"],baseEnv:["HL_INFO_URL","HL_API_URL"],description:"Hyperliquid public /info"});E({id:"hl-vaults",venue:"hyperliquid-vaults",chainIds:[],auth:"none",ops:["health","summaries","details","userEquities","tracker"],execution:"read-only",baseEnv:["HL_INFO_URL","HL_API_URL"],description:"Read-only Hyperliquid vault summaries, vault details, and user vault equities, including HLP tracking."});E({id:"protocol-templates",venue:"protocol-builder",chainIds:[],auth:"none",ops:["health","list","listNative","gate","prepareDeploy","buildNative"],description:"Gated EVM templates plus deterministic Solana program and Bitcoin policy scaffolds. Native bundles require chain-specific compile, tests, and simulation before any unsigned deploy/funding prepare. NOT a firm audit."});E({id:"poly-public",venue:"poly",chainIds:[137],auth:"none",ops:["health","time","markets","book","midpoint","spread","price","events"],baseEnv:["POLY_CLOB_URL","POLY_GAMMA_URL"],description:"Polymarket CLOB + Gamma public REST"});E({id:"portfolio",venue:"multichain-wallet",chainIds:[1,10,56,137,988,999,2741,4663,8453,42161,43114],auth:"none",ops:["health","balances","snapshot","history","valueGraph"],execution:"read-only",description:"Read-only balance aggregation across configured EVM chains, Solana, Bitcoin, and Hyperliquid, plus profile-local observation snapshots, history, and value graphs with explicit partial coverage."});E({id:"nft-portfolio",venue:"multichain-nft-wallet",chainIds:[1,10,137,988,999,2741,4663,8453,42161,43114],auth:"optionalApiKey",ops:["health","inventory","gallery","pnl","prepareList","traitSnipe"],execution:"prepare",baseEnv:["OPENSEA_API_KEY","MAGICEDEN_API_KEY","SATFLOW_API_KEY"],description:"Normalized EVM, Solana, and Bitcoin NFT inventory, static contact-sheet galleries, explicit PnL coverage, user-confirmed unsigned listing preparation, and evidence-gated trait-snipe buy intents."});E({id:"evm-simulate",venue:"onchain-simulation",chainIds:[1,10,56,137,988,999,2741,4663,8453,42161,43114],auth:"none",ops:["health","simulate"],execution:"read",baseEnv:[],description:"Pre-sign EVM transaction simulation: eth_call at pending state to catch reverts, decoded revert reasons (Error(string), Panic codes, custom-error selectors), and a buffered gas estimate. Distinguishes a genuine revert from an unreachable node \u2014 an infra failure is never reported as 'would fail'. A pass reflects current chain state and is explicitly not a guarantee."});E({id:"nft-mint",venue:"onchain-mint",chainIds:[1,10,56,137,988,999,2741,4663,8453,42161,43114],auth:"none",ops:["health","discover","prepare","priceGas","createTrigger","checkOpen"],execution:"prepare",baseEnv:[],description:"Prepare unsigned EVM NFT mints: discover the collection's mint entrypoint from bytecode, price a competitive EIP-1559 bid from fee-history percentiles, enforce gas-war caps, and surface contract risk. Triggers are alert_only unless explicitly armed with ORACLE_AUTONOMOUS_TRADING=1 plus a bounded grant. Never signs."});E({id:"contract-risk",venue:"onchain-bytecode",chainIds:[1,10,56,137,988,999,2741,4663,8453,42161,43114],auth:"none",ops:["health","scan"],execution:"read",baseEnv:[],description:"Structural contract risk from on-chain bytecode: retained owner powers (mint, blacklist, pause, fee changes) and upgradeability across EIP-1967, legacy zeppelinos, and EIP-1822 proxy slots. Complements behavioural sell simulation. Never reports 'safe' \u2014 a clean scan is weak evidence, not a guarantee."});E({id:"evm-token-sniper",venue:"evm-token-launches",chainIds:yb,auth:"none",ops:["health","scan"],execution:"prepare",baseEnv:it.flatMap(e=>e.rpcEnv),description:"One generic EVM token-sniping path across every configured EVM chain: live identity, pools, structural risk, sell simulation, quote, and guarded unsigned transaction preparation. Robinhood Chain is the default, not a special implementation. Never signs or broadcasts."});E({id:"evm-rpc",venue:"evm",chainIds:[1,137,42161,8453,10,4663,999],auth:"none",ops:["health","healthAll","blockNumber","chainId","getBalance","call","erc20Allowance","erc20Balance","transactionReceipt"],baseEnv:["ETH_RPC_URL","POLYGON_RPC_URL","RH_CHAIN_RPC","BASE_RPC_URL","ARBITRUM_RPC_URL"],description:"EVM JSON-RPC multi-chain (env RPC or public fallbacks)"});E({id:"solana-rpc",venue:"solana",chainIds:[],auth:"none",ops:["health","latestBlockhash","getBalance","tokenAccounts","simulate"],baseEnv:["SOLANA_RPC_URL"],description:"Solana mainnet JSON-RPC read/prepare surface (no key, no signing, no broadcast)"});E({id:"bitcoin-esplora",venue:"bitcoin",chainIds:[],auth:"none",ops:["health","tipHeight","fees","address","utxos","tx","decode"],execution:"read-only",baseEnv:["BTC_ESPLORA_URL","BTC_NETWORK"],description:"Bitcoin L1 via Esplora (mempool.space/Blockstream). Reads only on data plane. User-signed broadcast is bitcoin_send on exec MCP. No Core RPC, no house keys. Wallets: Xverse/UniSat/Leather/OKX/Phantom"});E({id:"bitcoin-meta",venue:"bitcoin-metaprotocol",chainIds:[],auth:"optionalApiKey",ops:["health","runeBalances","inscriptions","inscriptionInfo","inscriptionChildren","ordBlockInfo"],execution:"read-only",baseEnv:["BTC_META_API_URL","UNISAT_API_KEY","BESTINSLOT_API_KEY"],description:"Bitcoin ordinals/runes reads. Keyless tier via ordinals.com recursive (inscriptionInfo/children/blockInfo); address-indexed ops (inscriptions, runeBalances) need a keyed indexer. Hiro is deprecated (410) and Magic Eden BTC is dead \u2014 use satflow for market."});E({id:"satflow",venue:"bitcoin-marketplace",chainIds:[],auth:"apiKey",ops:["health","collectionFloors","collectionStats","item","walletContents","floorListings","preparePurchase","prepareList"],execution:"prepare",baseEnv:["SATFLOW_API_KEY","SATFLOW_API_URL"],description:"Satflow ordinals+runes marketplace (api.satflow.com). Primary BTC NFT market after Magic Eden BTC sunset. PSBT intents for buy/list; key via x-api-key."});E({id:"jupiter",venue:"solana-dex",chainIds:[],auth:"none",ops:["health","venues","quote","prepare"],execution:"prepare",baseEnv:["JUPITER_SWAP_API_URL","SOLANA_RPC_URL"],description:"Jupiter Swap API v1 quote + unsigned user-signature swap transaction preparation"});E({id:"hl-perps",venue:"hyperliquid",chainIds:[],auth:"none",ops:["health","assetInfo","prepareOrder","prepareCancel","prepareLeverage","prepareIsolatedMargin","prepareBracket","prepareBuilderApproval"],notes:"Hyperliquid perp orders/leverage. PREPARE-ONLY: returns signable actions, never submits."});E({id:"hl-markets",venue:"hyperliquid",chainIds:[],auth:"none",ops:["health","markets","leaderboards","coin","spot"],notes:"Joined Hyperliquid market datapoints for the Hyperliquid agent. Read-only."});E({id:"hl-staking",venue:"hypercore-staking",chainIds:[],auth:"none",ops:["health","validators","delegatorSummary","delegations","rewards","history","preflight","prepareStakeDeposit","prepareStakeWithdraw","prepareDelegate"],execution:"prepare",baseEnv:["HL_INFO_URL","HL_EXCHANGE_URL","HL_TESTNET"],description:"Hyperliquid HyperCore HYPE staking. Public reads (validators, delegations, rewards) plus EIP-712 prepare for cDeposit / cWithdraw / tokenDelegate. Prepare-only: the user's wallet signs and submits, Oracle never posts to /exchange."});E({id:"magiceden-sol",venue:"solana-nft",chainIds:[],auth:"optionalApiKey",ops:["health","stats","listings","tokenListings","prepareBuy","prepareList","prepareMint"],execution:"prepare",baseEnv:["MAGICEDEN_API_KEY","MAGICEDEN_API_URL"],description:"Magic Eden Solana NFT market. Reads (stats/listings) are keyless; buy/list/mint instruction builders need MAGICEDEN_API_KEY and return an unsigned base64 transaction for the user's Solana wallet. Never signs or broadcasts."});E({id:"defillama",venue:"prices",chainIds:[],auth:"none",ops:["health","prices","pricesBySymbol","protocols","yields","stablecoins","dexVolumes"],baseEnv:["DEFILLAMA_COINS_URL","DEFILLAMA_API_URL"],description:"DeFiLlama public prices + protocols TVL"});E({id:"lifi",venue:"dex",chainIds:[1,10,56,137,988,999,2741,4663,8453,42161,43114],auth:"none",ops:["health","quote","prepare","chains"],execution:"prepare",baseEnv:["LIFI_API_URL"],description:"LI.FI public cross-chain / DEX aggregator quotes (no key)"});E({id:"dexscreener",venue:"dex",chainIds:[],auth:"none",ops:["health","token","search","pair"],baseEnv:["DEXSCREENER_API_URL"],description:"DexScreener public token/pair discovery"});E({id:"uniswap-v3",venue:"dex",chainIds:bb,auth:"none",ops:["health","quote","prepare","quotePath","ethUsdc","chains"],execution:"prepare",baseEnv:["ETH_RPC_URL","BASE_RPC_URL","ARBITRUM_RPC_URL","OPTIMISM_RPC_URL","BSC_RPC_URL","POLYGON_RPC_URL","AVALANCHE_RPC_URL","RH_CHAIN_RPC"],description:"Uniswap V3 QuoterV2 exact-in quotes via eth_call across official deployments plus Robinhood Chain, no key"});E({id:"uniswap-v4",venue:"dex",chainIds:gb,auth:"none",ops:["health","quote","chains"],execution:"read-only",baseEnv:["ETH_RPC_URL","BASE_RPC_URL","ARBITRUM_RPC_URL","OPTIMISM_RPC_URL","BSC_RPC_URL","POLYGON_RPC_URL","AVALANCHE_RPC_URL","RH_CHAIN_RPC"],description:"Uniswap V4 Quoter exact-in quotes via eth_call across official deployments plus Robinhood Chain. Quote-only until Universal Router prepare is classified."});E({id:"aerodrome",venue:"dex",chainIds:[8453],auth:"none",ops:["health","quote","prepare","chains"],execution:"prepare",baseEnv:["BASE_RPC_URL"],description:"Aerodrome Slipstream CL on Base \u2014 QuoterV2 + SwapRouter exact-input via eth_call (tickSpacing, no key)"});E({id:"zerox",venue:"dex",chainIds:[1,10,137,8453,42161],auth:"apiKey",ops:["health","price","quote","prepare"],execution:"prepare",baseEnv:["ZEROX_API_KEY","ZEROX_API_URL"],description:"0x Swap API v2 price/quote/prepare \u2014 requires ZEROX_API_KEY (unconfigured without key; no Oracle key shipped)"});E({id:"across",venue:"bridge",chainIds:[1,10,137,42161,8453],auth:"none",ops:["health","suggestedFees"],baseEnv:["ACROSS_API_URL"],description:"Across bridge suggested-fees (public)"});E({id:"hop",venue:"bridge",chainIds:[1,10,137,42161],auth:"none",ops:["health","quote"],baseEnv:["HOP_API_URL"],description:"Hop Protocol bridge quotes (public)"});E({id:"relay",venue:"bridge",chainIds:[1,10,137,8453,42161],auth:"none",ops:["health","quote","prepare"],execution:"prepare",baseEnv:["RELAY_API_URL"],description:"Relay.link bridge/swap quotes (public)"});E({id:"cowswap",venue:"dex",chainIds:[1,100,42161,8453],auth:"none",ops:["health","quote","prepareOrder","order","status","chains"],execution:"intent",baseEnv:[],description:"CowSwap batch auction quotes + guarded EIP-712 order intents (public)"});E({id:"oneinch",venue:"dex",chainIds:[1,10,137,8453,42161],auth:"apiKey",ops:["health","quote","prepare","approveSpender"],execution:"prepare",baseEnv:["ONEINCH_API_KEY","ONEINCH_API_URL"],description:"1inch Swap API v6 quote/prepare \u2014 requires ONEINCH_API_KEY (unconfigured without key; no Oracle key shipped)"});E({id:"hl-ws",venue:"hl",chainIds:[],auth:"none",ops:["health","allMids","l2Book","snapshot"],baseEnv:["HL_WS_URL"],description:"Hyperliquid short-lived WS snapshots (allMids/l2Book)"});E({id:"poly-ws",venue:"poly",chainIds:[137],auth:"none",ops:["health","book","snapshot"],baseEnv:["POLY_WS_URL"],description:"Polymarket CLOB short-lived WS market snapshots"});E({id:"opensea-nft",venue:"nft",chainIds:[1,10,137,988,999,2741,4663,8453,42161,43114],auth:"apiKey",ops:["health","collection","floor","bestListings","accountNfts","accountPnl","prepareBuy","prepareSweep","prepareMint","prepareList","prepareCancel"],execution:"prepare",baseEnv:["OPENSEA_API_KEY","OPENSEA_ENV_FILE"],description:"OpenSea multichain NFT inventory, floors, and unsigned bounded buy, sweep, mint, listing, and listing-cancellation preparations"});E({id:"hyperevm-dex",venue:"hyperevm",chainIds:[999],auth:"none",ops:["health","search","token"],baseEnv:["HYPEREVM_RPC_URL"],description:"HyperEVM pair discovery via DexScreener + optional RPC"});E({id:"geckoterminal",venue:"dex-data",chainIds:[],auth:"none",ops:["health","networks","pool","token","ohlcv"],baseEnv:["GECKOTERMINAL_API_URL"],description:"GeckoTerminal public networks, pools, tokens, and OHLCV"});E({id:"curve",venue:"dex",chainIds:[1,10,56,137,988,999,4663,8453,42161,43114],auth:"none",ops:["health","openapi","pools","quote","prepare"],execution:"prepare",baseEnv:["CURVE_API_URL"],description:"Curve public pool registry API + RouterNG validated single-hop prepare"});E({id:"gmx",venue:"perps-data",chainIds:[42161,43114],auth:"none",ops:["health","tickers","markets","marketsInfo","tokens","prepareOrder","positions","orderStatus","verifyOrder"],execution:"intent",baseEnv:[],description:"GMX v2 public oracle/markets plus guarded async order intents on Arbitrum and Avalanche"});E({id:"morpho",venue:"lending-data",chainIds:[1,10,137,2741,8453,42161,4663,999,988],auth:"none",ops:["health","markets","vaults","prepareVault"],execution:"intent",baseEnv:["MORPHO_API_URL"],description:"Morpho public GraphQL markets/vaults + guarded ERC-4626 vault intents"});E({id:"balancer",venue:"dex",chainIds:[1,10,137,42161,43114,8453],auth:"none",ops:["health","pools","quote","prepare"],execution:"prepare",baseEnv:["BALANCER_API_URL"],description:"Balancer public GraphQL pool data + v3 Router exact-input prepare (Polygon read-only)"});E({id:"pendle",venue:"yield",chainIds:[1,10,56,8453,42161,999],auth:"none",ops:["health","markets","quote","prepare"],execution:"prepare",baseEnv:["PENDLE_API_URL"],description:"Pendle public yield-market API + Hosted SDK direct Convert prepare"});E({id:"odos",venue:"dex",chainIds:[1,10,56,137,8453,42161,43114,4663],auth:"none",ops:["health","chains","quote","prepare"],execution:"unavailable",deprecated:{since:"2026-07-30",reason:"Odos sunset the public SOR API; /sor/quote/v2 and v3 both return 410 Gone",evidence:"sunset: Thu, 30 Jul 2026 12:00:00 GMT response header"},baseEnv:["ODOS_API_URL"],description:"Odos public SOR (DEPRECATED upstream 2026-07-30 -- endpoint returns 410)"});E({id:"blockscout",venue:"explorer",chainIds:[1,10,137,8453,42161],auth:"none",ops:["health","stats","address","token"],baseEnv:[],description:"Verified public Blockscout REST v2 instances"});E({id:"paraswap",venue:"dex",chainIds:[1,10,56,137,8453,42161,43114,4663],auth:"none",ops:["health","tokens","price","quote","prepare"],execution:"prepare",baseEnv:["PARASWAP_API_URL"],description:"ParaSwap/Velora public price routes + validated transaction builder"});E({id:"rfq",venue:"intent-rfq",chainIds:[1,10,56,137,8453,42161,43114,4663],auth:"none",ops:["health","intent","quote"],execution:"prepare",baseEnv:["ZEROX_API_KEY","ONEINCH_API_KEY"],description:"Cross-chain RFQ intent normalizer and firm-quote fanout over reviewed venues. Prepares artifacts only, never signs or broadcasts."});E({id:"execution-strategies",venue:"oracle-native",chainIds:[],auth:"none",ops:["health","plan"],execution:"plan-only",baseEnv:[],description:"Oracle-native TWAP, VWAP, POV, iceberg, and implementation-shortfall planners. No Tread.fi/API dependency. Plans never sign or broadcast; every slice requires a fresh best-execution quote, policy check, simulation, confirmation, wallet signature, and receipt."});wb();E({id:"polygon-staking",venue:"polygon-staking",chainIds:[137],auth:"none",ops:["health","validators","validatorDetail"],baseEnv:["POLYGON_STAKING_API_URL"],description:"Polygon POS staking validators"});E({id:"babylon-staking",venue:"btc-staking",chainIds:[],auth:"none",ops:["health","stats","finalityProviders","delegations"],execution:"read-only",baseEnv:["BABYLON_STAKING_API_URL"],description:"Babylon native BTC staking (staking-api.babylonlabs.io v2). Keyless per-staker positions from a PUBLIC key alone \u2014 APR, TVL, finality-provider roster, and delegations. Read-only; staking/unbonding is user-wallet."});E({id:"mempool-mining",venue:"btc-mining",chainIds:[],auth:"none",ops:["health","difficulty","poolShare","hashrate","rewardStats"],execution:"read-only",baseEnv:["MEMPOOL_API_URL"],description:"Bitcoin mining + network security telemetry via mempool.space /api/v1/mining. Difficulty retarget, pool concentration (top-1/top-3 share), hashrate trend, subsidy-vs-fee split."});E({id:"liquid-esplora",venue:"liquid",chainIds:[],auth:"none",ops:["health","tipHeight","addressInfo","assetInfo"],execution:"read-only",baseEnv:["LIQUID_ESPLORA_URL"],description:"Liquid Network (Blockstream sidechain) via Esplora. Same schema as bitcoin-esplora plus multi-asset issuance/peg stats. Confidential addresses return TXO counts only \u2014 amounts are blinded on chain and reported as such."});E({id:"hiro-stacks",venue:"stacks",chainIds:[],auth:"none",ops:["health","networkInfo","stackingInfo","poxCycles","blocks"],execution:"read-only",baseEnv:["HIRO_API_URL","HIRO_API_KEY"],description:"Stacks (Bitcoin L2) via Hiro public API. Network tip, PoX stacking state (the BTC-yield mechanism), and historical reward cycles. Keyless tier is ~20 rps; HIRO_API_KEY is optional and never required."});E({id:"ordinals-runes",venue:"btc-runes",chainIds:[],auth:"none",ops:["health","blockHeight","blockInfo","satInfo","runeInfo"],execution:"read-only",baseEnv:["ORDINALS_BASE_URL"],description:"Runes + sat/block index via a public ord server (ordinals.com). /r/blockheight is PLAIN TEXT; the /runes listing is 406 'JSON API disabled' so only per-rune lookup exists; rune names must drop the bullet spacer (UNCOMMONGOODS)."});E({id:"mempool-lightning",venue:"btc-lightning",chainIds:[],auth:"none",ops:["health","statistics","nodeRankings","nodeCountries"],execution:"read-only",baseEnv:["MEMPOOL_API_URL"],description:"Lightning Network topology via mempool.space. Capacity/channel/node aggregates, node rankings, country distribution. STALE-PRONE: the crawler snapshot has been observed weeks behind, so every response carries ageDays + a stale flag."});E({id:"bob-rootstock",venue:"btc-l2",chainIds:[60808,30],auth:"none",ops:["health","stats","addressInfo","tokenBalances"],execution:"read-only",baseEnv:["BOB_EXPLORER_URL","ROOTSTOCK_EXPLORER_URL"],description:"BOB (60808) and Rootstock (30) \u2014 the EVM Bitcoin L2s \u2014 via their Blockscout v2 instances (identical schema, one code path). Chain stats, gas prices, native balances, token holdings. Pass chainId 'all' to fan out."});E({id:"bisq-markets",venue:"bisq",chainIds:[],auth:"none",ops:["health","markets","ticker","trades"],execution:"read-only",baseEnv:["BISQ_MARKETS_URL"],description:"Bisq non-KYC P2P BTC price discovery (markets.bisq.network). Value is the BASIS against centralized spot, not the absolute print: volume is thin and the last trade can be hours old, so trade age is always reported."});E({id:"magiceden-ordinals",venue:"btc-ordinals-market",chainIds:[],auth:"none",ops:["health","collectionStat"],execution:"read-only",baseEnv:["MAGICEDEN_ORD_API_URL","MAGICEDEN_API_KEY","MAGICEDEN_PROBE_COLLECTION"],description:"Magic Eden ordinals collection stats. DEGRADED UPSTREAM: /v2/ord/btc/* returned 503 'no healthy upstream' on every verification attempt. health() reports ok:false while it is down and collectionStat() returns upstreamDown:true with fallback 'satflow' instead of throwing. Only /stat is wired; 600 req/min documented."});E({id:"braiins-insights",venue:"btc-mining",chainIds:[],auth:"none",ops:["health","priceStats","poolStats"],execution:"read-only",baseEnv:["BRAIINS_INSIGHTS_URL"],description:"Braiins mining insights \u2014 BTC price tick + per-pool block/hashrate distribution. Use insights.braiins.com (302s to learn.braiins.com, followed transparently); pool.braiins.com/api is 403 and is NOT the public API."});E({id:"pyth-price-feeds",venue:"solana-oracle",chainIds:[],auth:"none",ops:["health","latestPrice","latestPrices","feedDirectory"],baseEnv:["PYTH_HERMES_URL"],description:"Pyth Network: Solana price feeds with confidence intervals, real-time updates, zero auth"});E({id:"solend-lending",venue:"solana-lending",chainIds:[],auth:"none",ops:["health","markets","reserves"],baseEnv:["SAVE_API_URL"],description:"Solend/Save lending: markets + per-reserve supply/borrow APY, Solana's Aave equivalent (keyless)"});E({id:"jito-mev",venue:"solana-mev",chainIds:[],auth:"none",ops:["health","recentBundles","tipFloor"],baseEnv:["JITO_API_URL"],description:"Jito MEV: recent bundles, tippers, tip floor \u2014 real-time Solana MEV data (keyless)"});E({id:"sanctum-lst",venue:"solana-staking",chainIds:[],auth:"none",ops:["health","lstList","apyAll","apyIndividual"],baseEnv:["SANCTUM_API_URL"],description:"Sanctum LST: liquid staking tokens with per-token APY \u2014 JitoSOL, mSOL, bSOL, compSOL, pathSOL, etc. (keyless)"});E({id:"kamino-strategies",venue:"solana-yield",chainIds:[],auth:"none",ops:["health","strategies","strategyMetrics"],baseEnv:["KAMINO_API_URL"],description:"Kamino: live yield strategies with APY, TVL, vault balances (keyless)"});E({id:"meteora-dlmm",venue:"solana-dex",chainIds:[],auth:"none",ops:["health","pools","poolSearch"],baseEnv:["METEORA_API_URL"],description:"Meteora DLMM: concentrated liquidity pools via amm-v2 API, distinct from Jupiter DEX routes (keyless)"});E({id:"aave-v3",venue:"evm-lending",chainIds:[1,10,56,137,59144,1088,534352,8453,42161,43114,5e3,1868],auth:"none",ops:["health","markets","marketReserves","chains"],baseEnv:["AAVE_V3_API_URL"],description:"Aave V3 GraphQL: multi-chain lending, full market + reserve schema with supplyInfo/borrowInfo (keyless)"});E({id:"cow-protocol",venue:"evm-intent",chainIds:[1,100,42161],auth:"none",ops:["health","auction","openOrders","recentTrades"],baseEnv:["COW_API_URL"],description:"CoW Protocol: intent/solver auction data, open orders, trades \u2014 intent-based DEX not covered by existing providers (keyless)"});E({id:"relayscan-mev",venue:"evm-mev",chainIds:[1],auth:"none",ops:["health","overview","builderProfit","dailyStats"],baseEnv:["RELAYSCAN_API_URL"],description:"Relayscan: MEV relay overview, builder profit rankings, daily block stats (keyless)"});E({id:"birdeye-tokens",venue:"solana-tokens",chainIds:[],auth:"none",ops:["health","tokenList"],baseEnv:["BIRDEYE_API_URL"],description:"Birdeye public token list: Solana tokens ranked by 24h volume, market cap (keyless)"});E({id:"das-assets",venue:"solana-nft",chainIds:[],auth:"none",ops:["health","assetsByOwner","searchAssets","assetProof"],baseEnv:["SOLANA_RPC_URL"],description:"Digital Asset Standard (DAS): compressed NFT reads via public Solana RPC \u2014 getAssetsByOwner, searchAssets, assetProof. No Helius key needed."});E({id:"symbiotic-restaking",venue:"evm-restaking",chainIds:[1],auth:"none",ops:["health","vaults","vaultDetail"],baseEnv:["SYMBIOTIC_API_URL"],description:"Symbiotic restaking: vaults with collateral data, approved status, operator metadata (keyless)"});E({id:"beefy-yields",venue:"evm-yield",chainIds:[1,10,56,137,8453,42161,43114,250,1088],auth:"none",ops:["health","apy","apyBreakdown"],baseEnv:["BEEFY_API_URL"],description:"Beefy Finance: cross-chain yield aggregator vaults with APY breakdowns (keyless)"});E({id:"across-bridge",venue:"evm-bridge",chainIds:[1,10,42161,8453,324,59144],auth:"none",ops:["health","pools","suggestedFees"],baseEnv:["ACROSS_API_URL"],description:"Across bridge: pool liquidity + APY per bridge pool with suggested fees (keyless)"});E({id:"spark-lend",venue:"evm-lending",chainIds:[1],auth:"none",ops:["health","markets"],baseEnv:["SPARK_API_URL"],description:"Spark Lend / Sky Savings: ERC-4626 vault APY + TVL + user count (keyless)"});E({id:"l2beat-tvl",venue:"evm-l2",chainIds:[],auth:"none",ops:["health","tvl","activity"],baseEnv:["L2BEAT_API_URL"],description:"L2Beat: L2 scaling TVL, project-level breakdowns, activity metrics (keyless)"});E({id:"celestia-da",venue:"evm-da",chainIds:[],auth:"none",ops:["health","stats","blockStats"],baseEnv:["CELENIUM_API_URL"],description:"Celestia DA via Celenium: blob stats, block-level blob counts, network metrics (keyless)"});_();_();var vb="https://api.hyperliquid.xyz/info",xb="https://api.hyperliquid-testnet.xyz/info";function Sb({testnet:e,baseUrl:t}={}){if(t)return t.replace(/\/$/,"").endsWith("/info")?t:`${t.replace(/\/$/,"")}/info`;if(process.env.HL_INFO_URL)return process.env.HL_INFO_URL;if(process.env.HL_API_URL){let n=process.env.HL_API_URL.replace(/\/$/,"");return n.endsWith("/info")?n:`${n}/info`}return e||process.env.HL_TESTNET==="1"?xb:vb}async function V(e,t={}){if(!e||!e.type)throw new Error("hlInfo requires body.type");let n=Sb(t);return b(n,{method:"POST",body:e,fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function ec(e={}){let t=await V({type:"allMids"},e),n=t&&typeof t=="object"?Object.keys(t).length:0;return{ok:n>0,midCount:n}}async function ve(e={}){return V({type:"allMids"},e)}async function Wn(e,t={}){if(!e)throw new Error("hlL2Book requires coin");return V({type:"l2Book",coin:String(e)},t)}async function Xt(e={}){return V({type:"outcomeMeta"},e)}async function zn(e,t={}){if(!e)throw new Error("hlClearinghouse requires user address");return V({type:"spotClearinghouseState",user:e},t)}async function tc(e,t={}){if(!e)throw new Error("hlUserFills requires user address");return V({type:"userFills",user:e},t)}async function nc(e={}){return V({type:"meta"},e)}async function st(e={}){let t={type:"metaAndAssetCtxs"};return e.dex&&(t.dex=e.dex),V(t,e)}async function jn({coin:e,interval:t="1h",startTime:n,endTime:r},o={}){if(!e)throw new Error("hlCandleSnapshot requires coin");let a={type:"candleSnapshot",req:{coin:String(e),interval:t,startTime:n??Date.now()-24*3600*1e3,endTime:r??Date.now()}};return V(a,o)}async function rc(e,t={}){if(!e)throw new Error("hlOpenOrders requires user");return V({type:"openOrders",user:e},t)}async function oc(e,t={}){if(!e)throw new Error("hlFrontendOpenOrders requires user");return V({type:"frontendOpenOrders",user:e},t)}async function Gn(e,t={}){if(!e)throw new Error("hlUserState requires user");return V({type:"clearinghouseState",user:e},t)}async function Kn(e={}){return V({type:"spotMeta"},e)}var Eb=/^0x[0-9a-fA-F]{40}$/,ic="0xdfc24b077bc1425ad1dea75bcb6f8158e10df303";function Mo(e,t){let n=String(e||"").trim();if(!Eb.test(n))throw new Error(`hl-vaults: ${t} must be a 0x EVM address`);return n.toLowerCase()}function ac(e){if(e==null||e==="")return null;let t=Number(e);return Number.isFinite(t)?t:null}function sc(e={}){let t=Array.isArray(e.portfolio)?e.portfolio:[],n=t.find(([a])=>a==="day")?.[1]||null,r=Array.isArray(n?.accountValueHistory)?n.accountValueHistory:[],o=Array.isArray(n?.pnlHistory)?n.pnlHistory:[];return{name:e.name??null,vaultAddress:e.vaultAddress??e.address??null,leader:e.leader??null,description:e.description??null,tvl:e.tvl??r.at(-1)?.[1]??null,apr:e.apr??null,pnl:e.pnl??o.at(-1)?.[1]??null,isClosed:e.isClosed??null,allowDeposits:e.allowDeposits??null,maxDistributable:e.maxDistributable??null,followers:e.followers??null,portfolio:t}}function Ib(e){return[...e].sort((t,n)=>(ac(n.tvl)??-1)-(ac(t.tvl)??-1))}function $o(e){return e.hlInfo||V}async function Uo(e={},t={}){let n=await $o(t)({type:"vaultSummaries"},t),r=Ib((Array.isArray(n)?n:[]).map(sc));return{provider:"hl-vaults",count:r.length,vaults:r,exec:!1,raw:n}}async function Yn(e={},t={}){let r={type:"vaultDetails",vaultAddress:Mo(e.vaultAddress||e.address,"vaultAddress")};e.user&&(r.user=Mo(e.user,"user"));let o=await $o(t)(r,t);return{provider:"hl-vaults",vault:sc(o||{}),exec:!1,raw:o}}async function Do(e={},t={}){let n=Mo(e.user||e.address,"user"),r=await $o(t)({type:"userVaultEquities",user:n},t),o=(Array.isArray(r)?r:[]).map(a=>({vaultAddress:a.vaultAddress??a.address??null,equity:a.equity??a.vaultEquity??null}));return{provider:"hl-vaults",user:n,count:o.length,positions:o,exec:!1,raw:r}}async function Fo(e={},t={}){let n=String(e.mode||"hlp").toLowerCase();if(n==="hlp")return Yn({...e,vaultAddress:ic},t);if(n==="summaries")return Uo(e,t);if(n==="details")return Yn(e,t);if(n==="mine")return Do(e,t);throw new Error("hl-vaults: mode must be hlp, summaries, details, or mine")}async function cc(e={}){try{let t=await Fo({mode:"hlp"},e);return{ok:t.vault.vaultAddress===ic&&!!t.vault.name,provider:"hl-vaults",hlp:{name:t.vault.name,vaultAddress:t.vault.vaultAddress,tvl:t.vault.tvl,apr:t.vault.apr,allowDeposits:t.vault.allowDeposits},exec:!1}}catch(t){return{ok:!1,provider:"hl-vaults",error:String(t?.message||t).slice(0,160),exec:!1}}}_();var _b="https://clob.polymarket.com",Cb="https://gamma-api.polymarket.com";function Qt(e={}){return(e.clobUrl||process.env.POLY_CLOB_URL||_b).replace(/\/$/,"")}function lc(e={}){return(e.gammaUrl||process.env.POLY_GAMMA_URL||Cb).replace(/\/$/,"")}async function qo(e={}){return b(`${Qt(e)}/time`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs})}async function uc(e={}){let t=await qo(e);return{ok:t!=null&&t!=="",time:t}}async function dc({limit:e=5,offset:t=0,...n}={},r={}){let o=new URLSearchParams({limit:String(e),offset:String(t),...Object.fromEntries(Object.entries(n).filter(([,a])=>a!=null).map(([a,i])=>[a,String(i)]))});return b(`${lc(r)}/markets?${o}`,{fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs})}async function pc(e,t={}){if(!e)throw new Error("polyBook requires tokenId");let n=new URLSearchParams({token_id:String(e)});return b(`${Qt(t)}/book?${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function mc(e,t={}){if(!e)throw new Error("polyMidpoint requires tokenId");let n=new URLSearchParams({token_id:String(e)});return b(`${Qt(t)}/midpoint?${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function fc(e,t={}){if(!e)throw new Error("polySpread requires tokenId");let n=new URLSearchParams({token_id:String(e)});return b(`${Qt(t)}/spread?${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function hc(e,{side:t="buy"}={},n={}){if(!e)throw new Error("polyPrice requires tokenId");let r=new URLSearchParams({token_id:String(e),side:String(t)});return b(`${Qt(n)}/price?${r}`,{fetchImpl:n.fetchImpl,timeoutMs:n.timeoutMs})}async function bc({limit:e=5,offset:t=0,...n}={},r={}){let o=new URLSearchParams({limit:String(e),offset:String(t),...Object.fromEntries(Object.entries(n).filter(([,a])=>a!=null).map(([a,i])=>[a,String(i)]))});return b(`${lc(r)}/events?${o}`,{fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs})}J();_();import{createHash as gc}from"node:crypto";var ct="mainnet-beta",Tb="https://api.mainnet-beta.solana.com",Ho="TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";function Nb(e={}){return String(e.rpcUrl||process.env.SOLANA_RPC_URL||Tb).trim()}function z(e,t="address"){let n=String(e||"").trim();if(!/^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(n))throw new Error(`solana-rpc: ${t} must be a base58 public key`);return n}function Rb(e,t){return t?[...e,{commitment:t}]:e}async function Zt(e,t=[],n={}){let r=String(e||"");if(r==="sendTransaction"||r==="sendRawTransaction"||r==="requestAirdrop"||r==="requestAirDrop"||/airdrop/i.test(r)||/^send/i.test(r))throw new Error(`solana-rpc: ${r} refused \u2014 @oracle-agent/oracle is prepare-only (no broadcast/airdrop)`);let o=await b(Nb(n),{method:"POST",body:{jsonrpc:"2.0",id:n.id||1,method:e,params:t},fetchImpl:n.fetchImpl,timeoutMs:n.timeoutMs??12e3});if(o?.error)throw new Error(`solana-rpc ${e}: ${o.error.message||JSON.stringify(o.error)}`);return o?.result}async function Vo(e={},t={}){let n=e.commitment?[{commitment:e.commitment}]:[],r=await Zt("getLatestBlockhash",n,t);return{provider:"solana-rpc",cluster:ct,blockhash:r?.value?.blockhash||null,lastValidBlockHeight:r?.value?.lastValidBlockHeight??null,slot:r?.context?.slot??null,raw:r}}async function yc(e={}){try{let[t,n]=await Promise.all([Zt("getHealth",[],e),Vo({},e)]);return{ok:t==="ok",provider:"solana-rpc",cluster:ct,health:t,latestBlockhash:n,exec:!1}}catch(t){return{ok:!1,provider:"solana-rpc",cluster:ct,error:String(t?.message||t),exec:!1}}}async function Jn(e={},t={}){let n=z(e.address||e.owner,"address"),r=await Zt("getBalance",Rb([n],e.commitment),t);return{provider:"solana-rpc",cluster:ct,address:n,lamports:String(r?.value??0),slot:r?.context?.slot??null,raw:r}}function Ob(e={}){let t=e.account?.data?.parsed?.info||{},n=t.tokenAmount||{};return{pubkey:e.pubkey,mint:t.mint||null,owner:t.owner||null,amount:String(n.amount??"0"),decimals:n.decimals??null,uiAmount:n.uiAmount??null,uiAmountString:n.uiAmountString??null,raw:e}}async function en(e={},t={}){let n=z(e.owner||e.address,"owner"),r=e.mint?{mint:z(e.mint,"mint")}:{programId:z(e.programId||Ho,"token program")},o={encoding:"jsonParsed"};e.commitment&&(o.commitment=e.commitment);let a=await Zt("getTokenAccountsByOwner",[n,r,o],t),i=Array.isArray(a?.value)?a.value.map(Ob):[];return{provider:"solana-rpc",cluster:ct,owner:n,filter:r,slot:a?.context?.slot??null,accounts:i,raw:a}}function Lb(e){let t=String(e||"").trim();if(!/^[A-Za-z0-9+/]+={0,2}$/.test(t)||t.length%4!==0)throw new Error("solana-rpc: transaction must be base64");return t}function Bb(e,t){let n=0,r=0,o=t;for(let a=0;a<3;a++){if(o>=e.length)throw new Error("solana-rpc: transaction shortvec truncated");let i=e[o++];if(n|=(i&127)<<r,(i&128)===0)return{value:n,offset:o};r+=7}throw new Error("solana-rpc: transaction shortvec too long")}function Mb(e){let t=Buffer.from(e,"base64");try{let n=Bb(t,0),r=n.offset+n.value*64;if(r>=t.length)throw new Error("missing message");return gc("sha256").update(t.subarray(r)).digest("hex")}catch{return gc("sha256").update(t).digest("hex")}}async function wc(e={},t={}){let n=Lb(e.transaction||e.swapTransaction),r={encoding:"base64",sigVerify:!!e.sigVerify,replaceRecentBlockhash:e.replaceRecentBlockhash!==!1};e.commitment&&(r.commitment=e.commitment);let o=await Zt("simulateTransaction",[n,r],t),a=o?.value||{};return{provider:"solana-rpc",cluster:ct,ok:a.err==null,transactionHash:Mb(n),err:a.err??null,logs:a.logs||[],unitsConsumed:a.unitsConsumed??null,replacementBlockhash:a.replacementBlockhash||null,slot:o?.context?.slot??null,raw:o}}_();var Ub="mainnet",Db="https://mempool.space/api",Fb="https://mempool.space/testnet/api";function be(e={}){return String(e.network||process.env.BTC_NETWORK||Ub).trim().toLowerCase()==="testnet"?"testnet":"mainnet"}function zo(e={}){return e.baseUrl?String(e.baseUrl).replace(/\/$/,""):process.env.BTC_ESPLORA_URL?String(process.env.BTC_ESPLORA_URL).replace(/\/$/,""):be(e)==="testnet"?Fb:Db}function Wo(e){let t=String(e||"");try{let n=new URL(t);(n.username||n.password)&&(n.username="[REDACTED]",n.password="");for(let r of[...n.searchParams.keys()])/^(key|api[_-]?key|token|secret|password|auth|bearer)$/i.test(r)&&n.searchParams.set(r,"[REDACTED]");t=n.toString().replace(/\/$/,"")}catch{}return t.replace(/(https?:\/\/)([^\s/:@]+):([^\s@/]+)@/gi,"$1[REDACTED]@").replace(/([?&](?:key|api[_-]?key|token|secret|password|auth|bearer)=)[^&\s]+/gi,"$1[REDACTED]")}function xe(e,t="address"){let n=String(e||"").trim();if(!/^(bc1|tb1|bcrt1)[a-z0-9]{20,90}$/i.test(n)&&!/^[13mn2][a-km-zA-HJ-NP-Z1-9]{25,34}$/.test(n))throw new Error(`bitcoin-esplora: ${t} must look like a Bitcoin address`);return n}function qb(e,t="txHex"){let n=String(e||"").trim().toLowerCase().replace(/^0x/,"");if(!/^[0-9a-f]+$/.test(n)||n.length<20||n.length%2!==0)throw new Error(`bitcoin-esplora: ${t} must be even-length hex`);return n}async function jo(e,t={}){let n=`${zo(t)}${e.startsWith("/")?e:`/${e}`}`,o=await(t.fetchImpl||fetch)(n,{method:"GET",headers:{accept:"application/json,text/plain;q=0.9,*/*;q=0.8"},signal:AbortSignal.timeout(t.timeoutMs??12e3)}),a=await o.text();if(!o.ok)throw new Error(`bitcoin-esplora GET ${e}: HTTP ${o.status} ${a.slice(0,160)}`);return a}async function Xn(e,t={}){let n=await jo(e,t);try{return JSON.parse(n)}catch{return n}}async function vc(e={}){try{let t=await jo("/blocks/tip/height",e),n=Number(t);return{ok:Number.isFinite(n)&&n>0,provider:"bitcoin-esplora",network:be(e),baseUrl:Wo(zo(e)),tipHeight:n,exec:!1,signing:"user-wallet"}}catch(t){return{ok:!1,provider:"bitcoin-esplora",network:be(e),baseUrl:Wo(zo(e)),error:Wo(t?.message||t),exec:!1}}}async function xc(e={}){let t=await jo("/blocks/tip/height",e);return{provider:"bitcoin-esplora",network:be(e),tipHeight:Number(t)}}async function Sc(e={}){try{let t=await Xn("/v1/fees/recommended",e);return{provider:"bitcoin-esplora",network:be(e),fastestFee:t.fastestFee??null,halfHourFee:t.halfHourFee??null,hourFee:t.hourFee??null,economyFee:t.economyFee??null,minimumFee:t.minimumFee??null,raw:t}}catch{return{provider:"bitcoin-esplora",network:be(e),fastestFee:null,halfHourFee:null,hourFee:null,note:"fee endpoint unavailable on this Esplora host"}}}async function Qn(e={},t={}){let n=xe(e.address||e.addr,"address"),r=await Xn(`/address/${n}`,t),o=r.chain_stats||{},a=r.mempool_stats||{},i=Number(o.funded_txo_sum||0)+Number(a.funded_txo_sum||0),s=Number(o.spent_txo_sum||0)+Number(a.spent_txo_sum||0);return{provider:"bitcoin-esplora",network:be(t),address:n,balanceSats:String(i-s),chainStats:o,mempoolStats:a,raw:r}}async function kc(e={},t={}){let n=xe(e.address||e.addr,"address"),r=await Xn(`/address/${n}/utxo`,t),o=Array.isArray(r)?r:[];return{provider:"bitcoin-esplora",network:be(t),address:n,count:o.length,totalSats:String(o.reduce((a,i)=>a+Number(i.value||0),0)),utxos:o.map(a=>({txid:a.txid,vout:a.vout,value:Number(a.value||0),status:a.status||null}))}}async function Ec(e={},t={}){let n=String(e.txid||e.txId||"").trim().toLowerCase();if(!/^[0-9a-f]{64}$/.test(n))throw new Error("bitcoin-esplora: txid must be 64-char hex");let r=await Xn(`/tx/${n}`,t);return{provider:"bitcoin-esplora",network:be(t),txid:n,confirmed:!!r.status?.confirmed,fee:r.fee??null,size:r.size??null,weight:r.weight??null,vinCount:Array.isArray(r.vin)?r.vin.length:null,voutCount:Array.isArray(r.vout)?r.vout.length:null,raw:r}}async function Ic(e={},t={}){let n=qb(e.txHex||e.hex||e.transaction,"txHex");return{provider:"bitcoin-esplora",network:be(t),encoding:"hex",txHex:n,byteLength:n.length/2,note:"full decode is wallet/client-side or via bitcoinjs; Esplora returns broadcast acceptance only"}}var Ac="ORACLE_ALLOW_CUSTOM_PROVIDER_URL";function me({provider:e,defaultUrl:t,hosts:n=[],url:r,strict:o=!1}){let i=(String(r??"").trim()||String(t)).replace(/\/$/,"");if(i===String(t).replace(/\/$/,""))return{baseUrl:i,trusted:!0,host:_c(t)};let s;try{s=new URL(i)}catch{throw new Error(`${e}: baseUrl must be an absolute http(s) URL`)}if(s.protocol!=="http:"&&s.protocol!=="https:")throw new Error(`${e}: baseUrl must be an absolute http(s) URL`);let c=s.host;if(!c)throw new Error(`${e}: baseUrl must be an absolute http(s) URL`);if(new Set([_c(t),...n]).has(c)){let u=/^(127\.0\.0\.1|localhost|\[::1\])(:\d+)?$/i.test(c);return s.protocol==="http:"&&!u?{baseUrl:i,trusted:!1,host:c,reason:"plaintext http downgrade"}:{baseUrl:i,trusted:!0,host:c}}if(String(process.env[Ac]||"")==="1")return{baseUrl:i,trusted:!1,host:c};if(o)throw new Error(`${e}: refusing to call non-allowlisted host ${c} (set ${Ac}=1 to permit it)`);return{baseUrl:i,trusted:!1,host:c}}function _c(e){let t=new URL(String(e));if(t.protocol!=="http:"&&t.protocol!=="https:")throw new Error("unsupported protocol");return t.host}function le(e,t,n){let r={...e};if(!n)return r;for(let[o,a]of Object.entries(t||{}))a&&(r[o]=a);return r}var Go="https://ordinals.com";function Zn(e={}){return String(e.baseUrl||process.env.BTC_META_API_URL||process.env.UNISAT_API_URL||"").trim().replace(/\/$/,"")}var Vb=["open-api.unisat.io","open-api-testnet.unisat.io","api.bestinslot.xyz","api.hiro.so"];function Cc(e={}){let t=e.apiKey||process.env.UNISAT_API_KEY||process.env.BESTINSLOT_API_KEY||process.env.BTC_META_API_KEY||"",n=!1;try{let r=Zn(e);if(r){let o=new URL(r).host,a=new URL(r).protocol,i=/^(127\.0\.0\.1|localhost|\[::1\])(:\d+)?$/i.test(o);n=Vb.includes(o)&&(a==="https:"||i)}}catch{n=!1}return le({accept:"application/json","user-agent":"oracle-btc-meta/0.1"},{authorization:t?`Bearer ${t}`:"","x-api-key":t},n)}async function lt(e,t={}){let r=await(t.fetchImpl||fetch)(e,{method:"GET",headers:Cc(t),signal:AbortSignal.timeout(t.timeoutMs??12e3)}),o=await r.text(),a;try{a=JSON.parse(o)}catch{a=o}if(!r.ok)throw new Error(`bitcoin-meta GET ${e}: HTTP ${r.status} ${String(o).slice(0,160)}`);return a}async function Pc(e={}){let t=Zn(e),n=null;try{let a=await(e.fetchImpl||fetch)("https://ordinals.com/r/blockheight",{signal:AbortSignal.timeout(8e3)});n=Number(await a.text())}catch{n=null}if(!t)return{ok:n!=null,provider:"bitcoin-meta",indexerConfigured:!1,ordinalsComTip:n,note:"Set BTC_META_API_URL and/or UNISAT_API_KEY / BESTINSLOT_API_KEY for balances. Marketplace = Satflow (SATFLOW_API_KEY). Magic Eden BTC is dead.",capabilities:{tip:n!=null,runeBalances:!1,inscriptions:!1,marketplace:!1}};let r={ok:!1,path:null,status:null};for(let o of["/v1/indexer/brc20/best-height","/v1/health","/health","/"])try{let i=await(e.fetchImpl||fetch)(`${t}${o}`,{headers:Cc(e),signal:AbortSignal.timeout(8e3)});if(r={ok:i.status>0&&i.status<500,path:o,status:i.status},i.ok)break}catch{}return{ok:r.ok||n!=null,provider:"bitcoin-meta",indexerConfigured:!0,baseUrl:t,probe:r,ordinalsComTip:n,apiKeyPresent:!!(process.env.UNISAT_API_KEY||process.env.BESTINSLOT_API_KEY||process.env.BTC_META_API_KEY),capabilities:{tip:n!=null,runeBalances:!0,inscriptions:!0,marketplace:!!process.env.SATFLOW_API_KEY}}}async function er(e={},t={}){let n=xe(e.address||e.addr,"address"),r=Zn(t);if(!r)return{provider:"bitcoin-meta",address:n,ok:!1,balances:[],error:"no indexer configured (set BTC_META_API_URL or vendor API key env)"};let o=[`${r}/v1/indexer/address/${n}/runes/balance-list?start=0&limit=100`,`${r}/v1/runes/address/${n}`,`${r}/runes/balance/${n}`,`${r}/address/${n}/runes`],a=null;for(let i of o)try{let s=await lt(i,t),c=Wb(s);return{provider:"bitcoin-meta",address:n,ok:!0,count:c.length,balances:c,source:i}}catch(s){a=s}return{provider:"bitcoin-meta",address:n,ok:!1,balances:[],error:String(a?.message||a||"all indexer paths failed")}}function Wb(e){let t=e?.data?.detail||e?.data?.list||e?.data||e?.balances||e?.results||e?.runes||(Array.isArray(e)?e:[]);return(Array.isArray(t)?t:[]).map(r=>({rune:r.rune||r.runeid||r.runeId||r.spacedRune||r.name||r.ticker||null,runeId:r.runeid||r.runeId||r.id||null,amount:String(r.amount??r.balance??r.total??r.qty??"0"),symbol:r.symbol||null,divisibility:r.divisibility??r.div??null,raw:r}))}async function ut(e={},t={}){let n=xe(e.address||e.addr,"address"),r=Zn(t);if(!r)return{provider:"bitcoin-meta",address:n,ok:!1,inscriptions:[],error:"no indexer configured \u2014 address-indexed lookups need a keyed indexer (BTC_META_API_URL + UNISAT_API_KEY / BESTINSLOT_API_KEY). ordinals.com recursive is keyless but has no address index.",unknownNotEmpty:!0,keylessAlternatives:["btc_inscription_info (by inscription id)","btc_meta_health"]};let o=Math.min(Number(e.limit||50),200),a=[`${r}/v1/indexer/address/${n}/inscription-data?cursor=0&size=${o}`,`${r}/v1/inscriptions/address/${n}?limit=${o}`,`${r}/address/${n}/inscriptions?limit=${o}`],i=null;for(let s of a)try{let c=await lt(s,t),l=zb(c);return{provider:"bitcoin-meta",address:n,ok:!0,count:l.length,inscriptions:l,source:s}}catch(c){i=c}return{provider:"bitcoin-meta",address:n,ok:!1,inscriptions:[],error:String(i?.message||i||"all indexer paths failed")}}async function Tc(e={},t={}){let n=String(e.inscriptionId||e.id||"").trim();if(!/^[0-9a-f]{64}i\d+$/i.test(n))throw new Error("bitcoin-meta: inscriptionId must look like <64-hex-txid>i<index>");let r=t.ordinalsBase||Go,o=await lt(`${r}/r/inscription/${n}`,t);return{provider:"bitcoin-meta",source:"ordinals.com/r",keyless:!0,inscriptionId:n,info:o}}async function Nc(e={},t={}){let n=String(e.inscriptionId||e.id||"").trim();if(!/^[0-9a-f]{64}i\d+$/i.test(n))throw new Error("bitcoin-meta: inscriptionId must look like <64-hex-txid>i<index>");let r=t.ordinalsBase||Go,o=Number(e.page||0),a=await lt(`${r}/r/children/${n}${o?`/${o}`:""}`,t);return{provider:"bitcoin-meta",source:"ordinals.com/r",keyless:!0,inscriptionId:n,page:o,children:Array.isArray(a?.ids)?a.ids:[],more:!!a?.more}}async function Rc(e={},t={}){let n=t.ordinalsBase||Go,r=e.height??await lt(`${n}/r/blockheight`,t),o=await lt(`${n}/r/blockinfo/${Number(r)}`,t);return{provider:"bitcoin-meta",source:"ordinals.com/r",keyless:!0,height:Number(r),info:o}}function zb(e){let t=e?.data?.inscription||e?.data?.detail||e?.data?.list||e?.data||e?.inscriptions||e?.results||(Array.isArray(e)?e:[]);return(Array.isArray(t)?t:[]).map(r=>({id:r.inscriptionId||r.id||r.inscription_id||null,number:r.inscriptionNumber??r.number??null,sat:r.sat||r.satoshi||null,contentType:r.contentType||r.content_type||null,utxo:r.utxo||r.output||(r.txid!=null?`${r.txid}:${r.vout??r.n}`:null),raw:r}))}var Gb=["unsigned","notsigned","tosign","signable"],Kb=new Set(["requiresusersignature","requiressignature","needssignature","signaturerequired","signaturesrequired","signingready","signaturecount","signaturethreshold","requiredsignatures","signatureneeded","hassignature","allowsignatures","requestsignature","multisig","cosig","msig"]),Yb=new Set(["sig","sigs","scriptsig","witness","psbt","finalizedpsbt","completepsbt","finalpsbt","psbtfinalized","serializedtransaction"]);function Ko(e){return String(e).toLowerCase().replace(/[^a-z0-9]/g,"")}function Jb(e){return Gb.some(t=>e.startsWith(t))||Kb.has(e)}function Xb(e){let t=String(e);if(!/^[\x20-\x7e]+$/.test(t))return!0;let n=Ko(t);return Jb(n)?!1:Yb.has(n)?!0:n.includes("signed")||n.includes("signature")||n.endsWith("sig")||n.endsWith("sigs")}function Qb(e){let t=Number(e?.v),n=String(e?.r||""),r=String(e?.s||"");return[0,1,27,28].includes(t)&&/^0x[0-9a-f]{2,64}$/i.test(n)&&/^0x[0-9a-f]{2,64}$/i.test(r)}function Yo(e,t=0,n=new Set,r={nodes:0}){if(e==null||typeof e!="object")return[];if(t>16)return["<max-depth>"];if(n.has(e))return[];if(r.nodes+=1,r.nodes>2048)return["<max-nodes>"];if(n.add(e),Array.isArray(e))return e.flatMap(c=>Yo(c,t+1,n,r));let o=[];for(let[c,l]of Object.entries(e)){if(Xb(c)){o.push(c);continue}o.push(...Yo(l,t+1,n,r))}let i=Object.keys(e).map(Ko).some(c=>c.endsWith("psbt")||c.endsWith("psbtbase64")),s=Object.entries(e).some(([c,l])=>/complete|finalized|isfinal/.test(Ko(c))&&l===!0);return i&&s&&o.push("psbt(complete)"),Qb(e)&&o.push("v/r/s"),o}function Se(e,t){let n=Yo(t);if(n.length)throw new Error(`${e}: refused a pre-signed transaction payload from the API (fields: ${[...new Set(n)].join(", ")}) \u2014 @oracle-agent/oracle is prepare-only and will not bind signed material into a prepared envelope`)}var Zb="https://api.satflow.com/v1";function Oc(e={}){return me({provider:"satflow",defaultUrl:Zb,hosts:["api.satflow.com"],url:e.baseUrl||process.env.SATFLOW_API_URL})}function tr(e={}){return Oc(e).baseUrl}function Xo(e={}){return String(e.apiKey||process.env.SATFLOW_API_KEY||process.env.BTC_SATFLOW_API_KEY||"").trim()}function eg(e={}){return le({accept:"application/json","content-type":"application/json","user-agent":"oracle-btc-satflow/0.1"},{"x-api-key":Xo(e)},Oc(e).trusted)}async function Pe(e,{method:t="GET",body:n,opts:r={}}={}){if(!Xo(r))throw new Error("satflow: SATFLOW_API_KEY not set (request key via Satflow docs form)");let a=`${tr(r)}${e.startsWith("/")?e:`/${e}`}`,s=await(r.fetchImpl||fetch)(a,{method:t,headers:eg(r),body:n!=null?JSON.stringify(n):void 0,signal:AbortSignal.timeout(r.timeoutMs??2e4)}),c=await s.text(),l;try{l=JSON.parse(c)}catch{l=c}if(!s.ok)throw new Error(`satflow ${t} ${e}: HTTP ${s.status} ${String(c).slice(0,200)}`);return l}async function Lc(e={}){if(!!!Xo(e))return{ok:!1,provider:"satflow",baseUrl:tr(e),apiKeyPresent:!1,marketplace:"satflow",magicEdenOrdinals:"deprecated-dead",note:"Set SATFLOW_API_KEY. Magic Eden BTC ordinals marketplace is shut down \u2014 do not use ME."};try{return await Pe("/collection/stats/floors?type=ordinals",{opts:e}),{ok:!0,provider:"satflow",baseUrl:tr(e),apiKeyPresent:!0,marketplace:"satflow",magicEdenOrdinals:"deprecated-dead",capabilities:{floors:!0,walletContents:!0,purchaseIntent:!0,listIntent:!0,bidIntent:!0}}}catch(n){return{ok:!1,provider:"satflow",baseUrl:tr(e),apiKeyPresent:!0,error:String(n?.message||n).slice(0,200),magicEdenOrdinals:"deprecated-dead"}}}async function Bc(e={},t={}){let n=String(e.type||"ordinals").toLowerCase();if(!["ordinals","runes"].includes(n))throw new Error("satflow: type must be ordinals|runes");let r=new URLSearchParams({type:n});e.ids&&r.set("ids",Array.isArray(e.ids)?e.ids.join(","):String(e.ids));let o=await Pe(`/collection/stats/floors?${r}`,{opts:t});return{provider:"satflow",type:n,floors:o,magicEdenOrdinals:"deprecated-dead"}}async function Mc(e={},t={}){let n=String(e.collectionId||e.id||e.slug||"").trim();if(!n)throw new Error("satflow: collectionId required");let r=new URLSearchParams({id:n});e.type&&r.set("type",e.type);let o=await Pe(`/collection/stats?${r}`,{opts:t});return{provider:"satflow",collectionId:n,stats:o}}async function $c(e={},t={}){let n=String(e.inscriptionId||e.id||"").trim();if(!n)throw new Error("satflow: inscriptionId required");let r=new URLSearchParams({id:n});return{provider:"satflow",item:await Pe(`/item?${r}`,{opts:t})}}async function nr(e={},t={}){let n=xe(e.address||e.addr,"address"),r=new URLSearchParams({address:n});e.type&&r.set("type",e.type),e.limit!=null&&r.set("limit",String(e.limit)),e.offset!=null&&r.set("offset",String(e.offset));let o=await Pe(`/address/wallet-contents?${r}`,{opts:t});return{provider:"satflow",address:n,contents:o}}async function Uc(e={},t={}){let n=e.collectionIds||e.ids||e.collectionId;if(!n)throw new Error("satflow: collectionIds required");let r=new URLSearchParams({ids:Array.isArray(n)?n.join(","):String(n)});return e.limit!=null&&r.set("limit",String(e.limit)),{provider:"satflow",listings:await Pe(`/orders/floor?${r}`,{opts:t})}}var tg=new Set(["body","execute","fetchImpl","opts","apiKey","baseUrl","timeoutMs","maxSats","operator"]);function Dc(e={},t=null){let n=e.body&&typeof e.body=="object"?e.body:e,r={};for(let[o,a]of Object.entries(n))tg.has(o)||t&&!t.has(o)||a!==void 0&&(r[o]=a);return r}var ng=new Set(["listing_id","listingId","inscription_id","inscriptionId","runes_output","runesOutput","buyer_address","buyerAddress","ord_address","receive_address","payment_address","pay_address","tap_key","public_key","publicKey","fee_rate","feeRate","price","quantity","slug","collection_slug"]),rg=new Set(["inscription_id","inscriptionId","runes_output","runesOutput","ord_address","receive_address","price","tap_key","collection_slug","expires_at"]);function Jo(e){if(!e||typeof e!="object")return null;let t=[e.price,e.priceSats,e.price_sats,e.totalSats,e.total_sats,e.amount,e.satoshis];for(let n of t){if(n==null)continue;let r=String(n).trim();if(/^\d+$/.test(r))return BigInt(r)}return null}async function Fc(e={},t={}){let n=Dc(e,ng);if(!n||Object.keys(n).length===0)throw new Error("satflow: purchase body required (see docs.satflow.com intent/satflow-purchase)");let r=e.maxSats??e.body?.maxSats;if(r==null)throw new Error("satflow: maxSats is required to prepare a purchase \u2014 an uncapped buy has no spend ceiling");let o=BigInt(String(r).trim());if(o<=0n)throw new Error("satflow: maxSats must be a positive integer sat amount");let a=Jo(n);if(a!=null&&a>o)throw new Error(`satflow: requested price ${a} sats exceeds maxSats cap ${o}`);let i=await Pe("/intent/satflow-purchase",{method:"POST",body:n,opts:t}),s=Jo(i)??Jo(i?.intent);if(s==null)throw new Error("satflow: purchase intent did not report a price \u2014 refusing to return an unverifiable PSBT");if(s>o)throw new Error(`satflow: purchase price ${s} sats exceeds maxSats cap ${o} \u2014 PSBT withheld`);return Se("satflow",i),P({provider:"satflow",kind:"purchase-intent",executionReady:!1,signingReady:!1,broadcastReady:!1,requiresUserSignature:!0,marketplace:"satflow",magicEdenOrdinals:"deprecated-dead",priceSats:s.toString(),maxSats:o.toString(),intent:i,unsignedPsbt:i?.unsignedPSBTBase64||i?.unsignedPsbtBase64||i?.unsigned_psbt||null,note:"Sign PSBT in a Bitcoin wallet. Broadcast only through the user's wallet or an explicitly armed Bitcoin execution plane."})}async function rr(e={},t={}){let n=Dc(e,rg);if(!n.inscription_id&&!n.runes_output&&!n.inscriptionId&&!n.runesOutput)throw new Error("satflow: list requires inscription_id or runes_output");let r=await Pe("/intent/sell",{method:"POST",body:n,opts:t});return Se("satflow",r),P({provider:"satflow",kind:"list-intent",requiresUserSignature:!0,marketplace:"satflow",listingRequest:n,intent:r,unsignedPsbt:r?.unsignedListingPSBTBase64||r?.unsigned_psbt||null,note:"Sign listing PSBTs in a Bitcoin wallet; listing broadcast is outside the data plane."})}_();var or="https://lite-api.jup.ag/swap/v1",Vc="So11111111111111111111111111111111111111112",Wc="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",ag=100,qc=2e4;function zc(e={}){return String(e.baseUrl||process.env.JUPITER_SWAP_API_URL||or).replace(/\/$/,"")}function ar(e,t="amount"){try{let n=BigInt(String(e));if(n<=0n)throw new Error("nonpositive");return n.toString()}catch{throw new Error(`jupiter: ${t} must be a positive integer string`)}}function jc(e){let t=e==null?50:Number(e);if(!Number.isInteger(t)||t<0)throw new Error("jupiter: slippageBps must be a non-negative integer");if(t>ag)throw new Error("jupiter: slippage exceeds hard 100 bps cap");return t}function Qo(e,t){return e==null?t:!!e}function ig(e){let t=String(e||"").trim();if(!/^[A-Za-z0-9+/]+={0,2}$/.test(t)||t.length%4!==0)throw new Error("jupiter: swapTransaction must be base64");return t}function Zo(e={},{quotedAtMs:t=Date.now(),ttlMs:n=qc}={}){let r=z(e.inputMint,"inputMint"),o=z(e.outputMint,"outputMint"),a=ar(e.inAmount,"inAmount"),i=ar(e.outAmount,"outAmount"),s=ar(e.otherAmountThreshold??e.outAmount,"otherAmountThreshold"),c=jc(e.slippageBps??50);return{mode:"solana-jupiter-quote",provider:"jupiter",venue:"jupiter-swap-v1",inputMint:r,outputMint:o,inAmount:a,outAmount:i,otherAmountThreshold:s,slippageBps:c,contextSlot:e.contextSlot??null,quotedAtMs:t,expiresAtMs:t+Math.min(Math.max(Number(n)||qc,1e3),3e4)}}var sg=new Set(["BPFLoaderUpgradeab1e11111111111111111111111","BPFLoader2111111111111111111111111111111111","BPFLoader1111111111111111111111111111111111"]),cg="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";function Hc(e){if(typeof e!="string"||!e.length)return!1;let t=0n;for(let o of e){let a=cg.indexOf(o);if(a<0)return!1;t=t*58n+BigInt(a)}let n=t.toString(16);n.length%2&&(n="0"+n);let r=n.length/2;for(let o of e)if(o==="1")r++;else break;return r===32}async function Gc(e={},t={}){let n=e.rpc||t.solanaRpc||process.env.SOLANA_RPC||"https://api.mainnet-beta.solana.com",r=t.fetchImpl||fetch,o=await r(`${or}/program-id-to-label`,{signal:AbortSignal.timeout(Number(t.timeoutMs)||15e3)});if(!o.ok)throw new Error(`jupiter venue map failed: HTTP ${o.status}`);let a=await o.json(),i=Object.entries(a),s=i.filter(([p])=>Hc(p)),c=[],l=i.filter(([p])=>!Hc(p)).map(([p,m])=>({programId:p,label:m,reason:"malformed program id"}));if(e.verify===!1)return{source:`${or}/program-id-to-label`,verified:s.map(([p,m])=>({programId:p,label:m})),unresolved:l,verifiedOnChain:!1,totals:{fromRouterMap:i.length,verified:s.length}};let u=async p=>{let f=await(await r(n,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(p),signal:AbortSignal.timeout(Number(t.timeoutMs)||2e4)})).json();if(f.error)throw new Error(f.error.message);return f.result};for(let p=0;p<s.length;p+=90){let m=s.slice(p,p+90),f=null;for(let h=0;h<3&&!f;h++)try{f=await u({jsonrpc:"2.0",id:1,method:"getMultipleAccounts",params:[m.map(([g])=>g),{encoding:"base64",dataSlice:{offset:0,length:0}}]})}catch{await new Promise(g=>setTimeout(g,2e3*(h+1)))}if(!f){for(let[h,g]of m)l.push({programId:h,label:g,reason:"rpc batch failed after 3 attempts"});continue}f.value.forEach((h,g)=>{let[v,k]=m[g];h&&h.executable===!0&&sg.has(h.owner)?c.push({programId:v,label:k,owner:h.owner}):l.push({programId:v,label:k,reason:h?h.executable!==!0?"not executable":`unknown owner ${h.owner}`:"account not found"})}),p+90<s.length&&await new Promise(h=>setTimeout(h,700))}let d=new Set(c.map(p=>p.label.replace(/\s+(CLMM|CP|V\d+|Launchlab|DLMM|Pools?)$/i,"").trim()));return{source:`${or}/program-id-to-label`,rpc:n,verifiedOnChain:!0,verifiedAt:new Date().toISOString(),totals:{fromRouterMap:i.length,verified:c.length,unresolved:l.length,distinctLabels:new Set(c.map(p=>p.label)).size,distinctBrands:d.size},verified:c.sort((p,m)=>p.label.localeCompare(m.label)),unresolved:l}}async function Kc(e={}){try{return{ok:!0,provider:"jupiter",outAmount:(await ir({inputMint:Vc,outputMint:Wc,amount:"1000000",slippageBps:50},e)).quote.outAmount,exec:!1}}catch(t){return{ok:!1,provider:"jupiter",error:String(t?.message||t),exec:!1}}}async function ir(e={},t={}){let n=z(e.inputMint||e.fromMint||Vc,"inputMint"),r=z(e.outputMint||e.toMint||Wc,"outputMint"),o=ar(e.amount||e.inAmount,"amount"),a=jc(e.slippageBps??e.maxSlippageBps??50),i=new URL(`${zc(t)}/quote`);i.searchParams.set("inputMint",n),i.searchParams.set("outputMint",r),i.searchParams.set("amount",o),i.searchParams.set("slippageBps",String(a)),i.searchParams.set("swapMode",e.swapMode||"ExactIn"),e.onlyDirectRoutes!=null&&i.searchParams.set("onlyDirectRoutes",String(!!e.onlyDirectRoutes)),e.platformFeeBps!=null&&i.searchParams.set("platformFeeBps",String(e.platformFeeBps));let s=await b(i.toString(),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3}),c=Zo({...s,slippageBps:a},t);return{provider:"jupiter",chain:"solana-mainnet-beta",quoteReady:!0,executionReady:!1,inputMint:n,outputMint:r,amount:o,quote:s,solanaGuard:c}}function lg(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}async function Yc(e={},t={}){let n=z(e.userPublicKey||e.owner||e.wallet,"userPublicKey"),r=e.quoteResponse?{quote:e.quoteResponse,solanaGuard:Zo(e.quoteResponse,t)}:await ir(e,t),o=r.quote,a=r.solanaGuard||Zo(o,t);if(Qo(e.dynamicSlippage,!1)===!0)throw new Error("jupiter: dynamicSlippage would override the enforced slippage ceiling \u2014 pass an explicit slippageBps instead");let i=await b(`${zc(t)}/swap`,{method:"POST",body:lg({quoteResponse:o,userPublicKey:n,wrapAndUnwrapSol:Qo(e.wrapAndUnwrapSol,!0),dynamicComputeUnitLimit:Qo(e.dynamicComputeUnitLimit,!0),dynamicSlippage:!1,prioritizationFeeLamports:e.prioritizationFeeLamports}),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),s=ig(i?.swapTransaction);Se("jupiter",i);let c=i?.quoteResponse??i?.quote??null;if(c)for(let l of["inAmount","outAmount","otherAmountThreshold","inputMint","outputMint"]){let u=o?.[l],d=c?.[l];if(u!=null&&d!=null&&String(u)!==String(d))throw new Error(`jupiter: swap response ${l} (${d}) does not match the quoted ${l} (${u}) \u2014 refusing to prepare`)}return P({provider:"jupiter",chain:"solana-mainnet-beta",prepareReady:!0,executionReady:!1,signingReady:!1,broadcastReady:!1,requiresUserSignature:!0,verifiedAgainstQuote:!!c,userPublicKey:n,quote:o,solanaGuard:a,swapTransaction:s,swapTransactionEncoding:"base64",lastValidBlockHeight:i?.lastValidBlockHeight??null,prioritizationFeeLamports:i?.prioritizationFeeLamports??null,computeUnitLimit:i?.computeUnitLimit??null,raw:i},{provider:"jupiter",kind:"jupiter-swap"})}_();var dg="https://coins.llama.fi",pg="https://api.llama.fi",mg="https://yields.llama.fi",fg="https://stablecoins.llama.fi";function hg(e={}){return(e.baseUrl||process.env.DEFILLAMA_COINS_URL||dg).replace(/\/$/,"")}function Jc(e={}){return(e.baseUrl||process.env.DEFILLAMA_API_URL||pg).replace(/\/$/,"")}async function Ve(e,t={}){if(!Array.isArray(e)||!e.length)throw new Error("llamaPrices requires coins[]");let n=e.map(encodeURIComponent).join(",");return b(`${hg(t)}/prices/current/${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function Xc(e={}){let n=(await Ve(["coingecko:ethereum"],e))?.coins?.["coingecko:ethereum"];return{ok:!!n?.price,ethUsd:n?.price??null}}async function Qc(e={}){return b(`${Jc(e)}/protocols`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??2e4})}async function Zc(e={},t={}){let n=(t.yieldsBaseUrl||process.env.DEFILLAMA_YIELDS_URL||mg).replace(/\/$/,""),r=await b(`${n}/pools`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??3e4}),o=Array.isArray(r?.data)?r.data:[];e.chain&&(o=o.filter(i=>String(i.chain).toLowerCase()===String(e.chain).toLowerCase())),e.project&&(o=o.filter(i=>String(i.project).toLowerCase()===String(e.project).toLowerCase())),e.stablecoin!=null&&(o=o.filter(i=>!!i.stablecoin==!!e.stablecoin)),o.sort((i,s)=>Number(s.tvlUsd||0)-Number(i.tvlUsd||0));let a=Math.min(5e3,Math.max(1,Number(e.limit||o.length||1)));return{...r,data:o.slice(0,a)}}async function el(e={},t={}){let n=(t.stablecoinsBaseUrl||process.env.DEFILLAMA_STABLECOINS_URL||fg).replace(/\/$/,""),r=e.includePrices!==!1;return b(`${n}/stablecoins?includePrices=${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??3e4})}async function tl(e={},t={}){let n=encodeURIComponent(String(e.chain||"Ethereum")),r=new URLSearchParams({excludeTotalDataChart:String(e.includeChart!==!0),excludeTotalDataChartBreakdown:String(e.includeBreakdown!==!0),dataType:"dailyVolume"});return b(`${Jc(t)}/overview/dexs/${n}?${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??3e4})}async function nl(e=["ethereum","bitcoin","solana"],t={}){let n=e.map(a=>`coingecko:${String(a).toLowerCase()}`),r=await Ve(n,t),o={};for(let a of e){let i=`coingecko:${String(a).toLowerCase()}`;o[a]=r?.coins?.[i]||null}return o}_();var Te="0x000000000000000000000000000000000000dEaD";function ea(e){let t=String(e||"").trim();return/^0x[0-9a-fA-F]{40}$/.test(t)?t:Te}import{existsSync as Ig,readFileSync as Ag}from"node:fs";import{homedir as _g}from"node:os";import{join as rl}from"node:path";import{Contract as gg,JsonRpcProvider as yg}from"ethers";var wg="0x62FCFAf7573AD8B41a0FBF347AfEb85e06599A75",vg=999,xg="https://rpc.hyperliquid.xyz/evm",Sg=["function balanceOf(address owner) view returns (uint256)"],kg=/^0x[a-fA-F0-9]{40}$/;function Eg(e){return kg.test(String(e||""))}async function sr(e,{contract:t=wg,rpc:n=xg,chainId:r=vg,balanceOf:o}={}){if(!Eg(e))throw new Error("invalid-address");if(o)return BigInt(await o(e));let a=new yg(n,r,{staticNetwork:!0}),i=new gg(t,Sg,a);return BigInt(await i.balanceOf(e))}var Cg=100,Pg=5,ol=Object.freeze({swap:5,bridge:5,perps:0,nft:0});function Tg(e){let t=String(e||"swap").toLowerCase();return Object.prototype.hasOwnProperty.call(ol,t)?ol[t]:Pg}var Ng="ORACLE_INTEGRATOR_FEE_BPS",Rg="ORACLE_INTEGRATOR_FEE_RECIPIENT",Og="ORACLE_INTEGRATOR_ID",al="ORACLE_INTEGRATOR_FEE_RECIPIENT_PIN",Lg="oracle";function Bg(e=process.env){if(e[al])return String(e[al]);let t=e.ORACLE_CONFIG_DIR||rl(_g(),".config","oracle");return rl(t,"fee-recipient")}function ta(e=process.env){try{let t=Bg(e);if(!Ig(t))return"";let n=Ag(t,"utf8").trim().toLowerCase();return/^0x[a-f0-9]{40}$/.test(n)?n:""}catch{return""}}function Mg(e,{fallback:t=0}={}){if(e==null)return t;if(String(e).trim()==="")return 0;let n=Number(e);return!Number.isFinite(n)||n<=0?0:Math.min(Math.floor(n),Cg)}function $g({env:e=process.env,action:t="swap",admin:n=!1}={}){let r=String(e[Rg]||"").trim(),o=String(e[Og]||Lg).trim();if(n===!0)return{bps:0,recipient:"",integrator:o,action:t,applies:!1,reason:"admin-oracle"};let a=Tg(t),i=Mg(e[Ng],{fallback:r?a:0}),s=Math.min(i,a);if(!s)return{bps:0,recipient:"",integrator:o,action:t,applies:!1,reason:"not-configured"};if(!/^0x[a-fA-F0-9]{40}$/.test(r))return{bps:0,recipient:"",integrator:o,action:t,applies:!1,reason:"no-recipient"};let c=ta(e);return!c||c!==r.toLowerCase()?{bps:0,recipient:"",integrator:o,action:t,applies:!1,reason:"recipient-not-pinned"}:{bps:s,recipient:r,integrator:o,action:t,applies:!0,reason:"configured"}}async function cr({wallet:e,env:t=process.env,action:n="swap",holderCheck:r={},admin:o=!1}={}){let a=$g({env:t,action:n,admin:o});if(o===!0)return{...a,holderVerificationStatus:"admin-oracle"};let i=String(e||"").trim().toLowerCase();if(!/^0x[a-f0-9]{40}$/.test(i))return{...a,holderVerificationStatus:"wallet-required"};try{return BigInt(await sr(i,r))>0n?{...a,bps:0,applies:!1,reason:"locals-only-holder",holderVerificationStatus:"holder"}:{...a,holderVerificationStatus:"non-holder"}}catch{return{...a,holderVerificationStatus:"unavailable"}}}function il(e){return e?.applies?{integrator:e.integrator,fee:String(e.bps/1e4)}:{}}function sl(e){return e?.applies?{partner:e.integrator,partnerFeeBps:String(e.bps),partnerAddress:e.recipient}:{}}var Ug="https://li.quest/v1";function ra(e={}){return(e.baseUrl||process.env.LIFI_API_URL||Ug).replace(/\/$/,"")}var na="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",Dg="0x0000000000000000000000000000000000000000";function Fg(e){let t=String(e||na).toLowerCase();return t===na.toLowerCase()||t===Dg}function cl(e,t){let n=String(e||"").trim();if(!/^0x[0-9a-fA-F]{40}$/.test(n))throw new Error(`lifi: ${t} must be a 20-byte address`);return n.toLowerCase()}async function ll(e={}){let t=await b(`${ra(e)}/chains`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??12e3}),n=Array.isArray(t)?t.length:t?.chains?.length||0;return{ok:n>0,chainCount:n}}async function tn(e={},t={}){let{fromChain:n,toChain:r=n,fromToken:o=na,toToken:a,fromAmount:i,fromAddress:s=Te}=e;if(n==null||!a||!i)throw new Error("lifiQuote requires fromChain, toToken, fromAmount");let c=new URLSearchParams({fromChain:String(n),toChain:String(r),fromToken:o,toToken:a,fromAmount:String(i),fromAddress:s}),l=ne({liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,crossChain:Number(r)!==Number(n),requestedCapBps:e.maxSlippageBps??e.slippageBps});if(!l.executable)throw new Error(`lifi: route requires ${l.requiredBps} bps above cap ${l.capBps}`);c.set("slippage",String(l.selectedBps/1e4));let u=await cr({wallet:e.fromAddress,env:t.env,action:e.feeAction||"swap",holderCheck:t.holderCheck});for(let[g,v]of Object.entries(il(u)))c.set(g,v);let d=await b(`${ra(t)}/quote?${c}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4}),p=d?.estimate?.toAmount||d?.toAmount;if(!p)return{...d,autoSlippagePolicy:l,oracleFee:u};let m=d?.transactionRequest?.to||d?.estimate?.approvalAddress||"lifi",f=q(d,{chainId:Number(n),venue:m,amountOut:p,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,crossChain:Number(r)!==Number(n),requestedCapBps:e.maxSlippageBps??e.slippageBps}),h=d?.estimate?.toAmountMin||d?.toAmountMin;if(h!=null&&BigInt(h)<BigInt(f.amountOutMinimum))throw new Error("lifi: provider transaction is under-protected versus bounded auto-slippage floor");return{...f,oracleFee:u}}async function ul(e={},t={}){let n=await tn(e,t),r=n?.transactionRequest;if(!r?.to||!r?.data)throw new Error("lifi: quote did not return an executable transactionRequest");let o=Number(e.fromChain);if(r.chainId!=null&&Number(r.chainId)!==o)throw new Error("lifi: transaction chain mismatch");if(e.fromAddress&&r.from&&String(r.from).toLowerCase()!==String(e.fromAddress).toLowerCase())throw new Error("lifi: transaction sender mismatch");let a=null;if(!Fg(e.fromToken)){let i=n?.estimate?.approvalAddress||n?.approvalAddress;if(!i)throw new Error("lifi: ERC20 route missing approvalAddress");let s=n?.action?.fromToken?.address||n?.estimate?.fromToken?.address||e.fromToken;a={token:cl(s,"approval token"),spender:cl(i,"approval spender"),amount:String(e.fromAmount)}}return P({provider:"lifi",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:o,quote:n,autoSlippage:n.autoSlippage,requiresApproval:a,transaction:{chainId:o,from:r.from||e.fromAddress,to:r.to,data:r.data,value:r.value??"0x0",...r.gasLimit!=null?{gasLimit:r.gasLimit}:{},slippageGuard:K(n.autoSlippage,{chainId:o,venue:r.to,data:r.data})}},{provider:"lifi",kind:"lifi-tx"})}async function dl(e={}){return b(`${ra(e)}/chains`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??12e3})}J();import{Interface as fl,getAddress as nn,isAddress as Hg}from"ethers";var Ne={8453:{name:"base",quoter:"0x254cF9E1E6e233aa1AC962CB9B05b2cfeAaE15b0",router:"0xBE6D8f0d05cC4be24d5167a3eF062215bE6D18a5",factory:"0x5e7BB104d84c7CB9B682AaC2F3d509f5F406809A",weth:"0x4200000000000000000000000000000000000006",usdc:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}},Vg=[1,50,100,200,2e3],pl=new fl(["function quoteExactInputSingle((address tokenIn, address tokenOut, uint256 amountIn, int24 tickSpacing, uint160 sqrtPriceLimitX96) params) returns (uint256 amountOut, uint160 sqrtPriceX96After, uint32 initializedTicksCrossed, uint256 gasEstimate)"]),Wg=new fl(["function exactInputSingle((address tokenIn, address tokenOut, int24 tickSpacing, address recipient, uint256 deadline, uint256 amountIn, uint256 amountOutMinimum, uint160 sqrtPriceLimitX96) params) payable returns (uint256 amountOut)"]),hl="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",bl="0x0000000000000000000000000000000000000000";function gl(e){let t=Number(e),n=Ne[t];if(!n)throw new Error(`aerodrome: unsupported chainId ${e} (supported: ${Object.keys(Ne).join(", ")})`);return{chainId:t,...n}}function ml(e,t){let n=Ne[Number(t)];if(!e||e===hl||e===bl||/^eth$/i.test(String(e)))return nn(n.weth);let r=String(e);if(/^weth$/i.test(r))return nn(n.weth);if(/^usdc$/i.test(r))return nn(n.usdc);if(!Hg(r))throw new Error(`invalid token address: ${e}`);return nn(r)}async function lr(e={},t={}){let{chainId:n,quoter:r,router:o}=gl(e.chainId??8453),a=ml(e.tokenIn||"WETH",n),i=ml(e.tokenOut||Ne[n].usdc,n),s=BigInt(e.amountIn??0);if(s<=0n)throw new Error("amountIn required (raw base units)");let c=e.tickSpacing!=null?[Number(e.tickSpacing)]:e.tryTickSpacings===!1?[100]:[...Vg],l=[],u=null;for(let d of c){let p=pl.encodeFunctionData("quoteExactInputSingle",[{tokenIn:a,tokenOut:i,amountIn:s,tickSpacing:d,sqrtPriceLimitX96:0n}]);try{let m=await O(n,"eth_call",[{to:r,data:p},"latest"],t);if(!m||m==="0x"){l.push({tickSpacing:d,ok:!1,error:"empty result"});continue}let f=pl.decodeFunctionResult("quoteExactInputSingle",m),h={tickSpacing:d,ok:!0,amountOut:f[0].toString(),sqrtPriceX96After:f[1].toString(),initializedTicksCrossed:Number(f[2]),gasEstimate:f[3].toString()};l.push(h),(!u||BigInt(h.amountOut)>BigInt(u.amountOut))&&(u=h)}catch(m){l.push({tickSpacing:d,ok:!1,error:String(m.message||m).slice(0,160)})}}if(!u){let d=l.map(p=>`${p.tickSpacing}:${p.error||"fail"}`).join("; ");throw new Error(`aerodrome quote failed chain=${n}: ${d}`)}return q({venue:"aerodrome",chainId:n,chain:Ne[n].name,quoter:r,router:o,tokenIn:a,tokenOut:i,amountIn:s.toString(),tickSpacing:u.tickSpacing,amountOut:u.amountOut,gasEstimate:u.gasEstimate,sqrtPriceX96After:u.sqrtPriceX96After,initializedTicksCrossed:u.initializedTicksCrossed,triedTickSpacings:l,best:!0},{chainId:n,venue:o,amountOut:u.amountOut,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps})}async function yl(e={},t={}){let n=Number(e.chainId??8453),r=gl(n),o=nn(e.recipient||e.from||e.userAddress),a=String(e.tokenIn||"WETH"),i=!e.tokenIn||a===hl||a===bl||/^eth$/i.test(a),s=await lr(e,t),c=Math.min(600,Math.max(30,Number(e.deadlineSeconds??300))),u=Number(t.nowSeconds??Math.floor(Date.now()/1e3))+c,d=Wg.encodeFunctionData("exactInputSingle",[{tokenIn:s.tokenIn,tokenOut:s.tokenOut,tickSpacing:s.tickSpacing,recipient:o,deadline:u,amountIn:BigInt(s.amountIn),amountOutMinimum:BigInt(s.amountOutMinimum),sqrtPriceLimitX96:0n}]);return P({provider:"aerodrome",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:n,deadline:u,quote:s,autoSlippage:s.autoSlippage,requiresApproval:i?null:{token:s.tokenIn,spender:r.router,amount:s.amountIn},transaction:{chainId:n,from:o,to:r.router,data:d,value:i?s.amountIn:"0",slippageGuard:K(s.autoSlippage,{chainId:n,venue:r.router,data:d})}},{provider:"aerodrome",kind:"aerodrome-exact-in"})}async function wl(e={}){let t=Number(e.chainId??8453);try{let n=await lr({chainId:t,tokenIn:"WETH",tokenOut:"USDC",amountIn:"1000000000000000"},e),r=Number(n.amountOut)/1e6;return{ok:!0,chainId:t,tickSpacing:n.tickSpacing,amountOutUsdc:r,midPxHint:r/.001,router:Ne[t]?.router,quoter:Ne[t]?.quoter}}catch(n){return{ok:!1,chainId:t,error:String(n.message||n).slice(0,200)}}}async function vl(){return Object.entries(Ne).map(([e,t])=>({chainId:Number(e),name:t.name,quoter:t.quoter,router:t.router,factory:t.factory,weth:t.weth,usdc:t.usdc}))}_();var jg="https://api.0x.org";function xl(e={}){return me({provider:"zerox",defaultUrl:jg,hosts:["api.0x.org"],url:e.baseUrl||process.env.ZEROX_API_URL})}function Sl(e={}){return xl(e).baseUrl}function ur(e={}){return e.apiKey||process.env.ZEROX_API_KEY||process.env.OX_API_KEY||process.env["0X_API_KEY"]||""}function kl(e={}){return le({"0x-version":"v2",accept:"application/json"},{"0x-api-key":ur(e)},xl(e).trusted)}async function El(e={}){if(!ur(e))return{ok:!1,configured:!1,error:"ZEROX_API_KEY not set"};try{let t=await oa({chainId:8453,sellToken:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",buyToken:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",sellAmount:"1000000000000000"},e);return{ok:!0,configured:!0,buyAmount:t.buyAmount||t.grossBuyAmount}}catch(t){return{ok:!1,configured:!0,error:String(t.message||t).slice(0,160)}}}async function oa(e={},t={}){if(!ur(t))throw new Error("ZEROX_API_KEY required for 0x");let{chainId:n=8453,sellToken:r,buyToken:o,sellAmount:a,taker:i}=e;if(!r||!o||!a)throw new Error("zeroxPrice requires sellToken, buyToken, sellAmount");let s=new URLSearchParams({chainId:String(n),sellToken:r,buyToken:o,sellAmount:String(a)});return i&&s.set("taker",i),b(`${Sl(t)}/swap/allowance-holder/price?${s}`,{headers:kl(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function rn(e={},t={}){if(!ur(t))throw new Error("ZEROX_API_KEY required for 0x");let{chainId:n=8453,sellToken:r,buyToken:o,sellAmount:a,taker:i}=e;if(!r||!o||!a)throw new Error("zeroxQuote requires sellToken, buyToken, sellAmount");let s=ne({liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps});if(!s.executable)throw new Error(`0x: route requires ${s.requiredBps} bps above cap ${s.capBps}`);let c=new URLSearchParams({chainId:String(n),sellToken:r,buyToken:o,sellAmount:String(a),slippageBps:String(s.selectedBps)});i&&c.set("taker",i);let l=await b(`${Sl(t)}/swap/allowance-holder/quote?${c}`,{headers:kl(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),u=l?.buyAmount||l?.grossBuyAmount;return u?q(l,{chainId:n,venue:l?.transaction?.to||l?.to||"0x",amountOut:u,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps}):{...l,autoSlippagePolicy:s}}async function Il(e={},t={}){if(!e.taker)throw new Error("0x: taker required for executable prepare");let n=await rn(e,t),r=n?.transaction;if(!r?.to||!r?.data)throw new Error("0x: firm quote returned no transaction");let o=Number(e.chainId??8453),a=n?.issues?.allowance?.spender||n?.allowanceTarget;return P({provider:"zerox",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:o,quote:n,autoSlippage:n.autoSlippage,requiresApproval:n?.issues?.allowance?.actual!=null&&BigInt(n.issues.allowance.actual)<BigInt(e.sellAmount)?{token:e.sellToken,spender:a,amount:String(e.sellAmount)}:null,transaction:{chainId:o,from:e.taker,to:r.to,data:r.data,value:r.value??"0x0",...r.gas!=null?{gasLimit:r.gas}:{},slippageGuard:K(n.autoSlippage,{chainId:o,venue:r.to,data:r.data})}},{provider:"zerox",kind:"zerox-tx"})}_();var Kg="https://across.to/api",Yg="https://api.hop.exchange/v1",Jg="https://api.relay.link",Xg={ethereum:1,optimism:10,bsc:56,polygon:137,arbitrum:42161,avalanche:43114,base:8453};async function Al(e={}){try{return{ok:!0,estimatedFillTimeSec:(await aa({token:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",destinationToken:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",originChainId:1,destinationChainId:42161,amount:"1000000000000000"},e)).estimatedFillTimeSec}}catch(t){return{ok:!1,error:String(t.message||t).slice(0,160)}}}async function aa(e={},t={}){let{token:n,destinationToken:r=n,originChainId:o,destinationChainId:a,amount:i}=e;if(!n||o==null||a==null||!i)throw new Error("acrossSuggestedFees requires token, originChainId, destinationChainId, amount");let s=new URLSearchParams({token:n,destinationToken:r,originChainId:String(o),destinationChainId:String(a),amount:String(i)}),c=(t.baseUrl||process.env.ACROSS_API_URL||Kg).replace(/\/$/,"");return b(`${c}/suggested-fees?${s}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function _l(e={}){try{let t=await ia({amount:"1000000000000000",token:"ETH",fromChain:"ethereum",toChain:"arbitrum",slippage:.5},e);return{ok:!0,estimatedRecieved:t.estimatedRecieved||t.estimatedReceived}}catch(t){return{ok:!1,error:String(t.message||t).slice(0,160)}}}async function ia(e={},t={}){let{amount:n,token:r="ETH",fromChain:o="ethereum",toChain:a="arbitrum"}=e;if(!n)throw new Error("hopQuote requires amount");let i=e.slippage==null?void 0:Math.round(Number(e.slippage)*100),s=ne({liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,crossChain:o!==a,requestedCapBps:e.maxSlippageBps??e.slippageBps??i});if(!s.executable)throw new Error(`hop: route requires ${s.requiredBps} bps above cap ${s.capBps}`);let c=new URLSearchParams({amount:String(n),token:r,fromChain:o,toChain:a,slippage:String(s.selectedBps/100)}),l=(t.baseUrl||process.env.HOP_API_URL||Yg).replace(/\/$/,""),u=await b(`${l}/quote?${c}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),d=u?.estimatedRecieved||u?.estimatedReceived;return d?q(u,{chainId:Number(e.originChainId||e.chainId||Xg[o]||0),venue:u?.tx?.to||"hop",amountOut:d,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,crossChain:o!==a,requestedCapBps:e.maxSlippageBps??e.slippageBps??i}):{...u,autoSlippagePolicy:s}}async function Cl(e={}){try{let t=await dr({user:Te,originChainId:1,destinationChainId:8453,originCurrency:"0x0000000000000000000000000000000000000000",destinationCurrency:"0x0000000000000000000000000000000000000000",amount:"1000000000000000",tradeType:"EXACT_INPUT"},e);return{ok:!0,hasSteps:Array.isArray(t.steps),stepCount:t.steps?.length||0}}catch(t){return{ok:!1,error:String(t.message||t).slice(0,160)}}}async function dr(e={},t={}){let{user:n=Te,originChainId:r,destinationChainId:o,originCurrency:a="0x0000000000000000000000000000000000000000",destinationCurrency:i="0x0000000000000000000000000000000000000000",amount:s,tradeType:c="EXACT_INPUT"}=e;if(r==null||o==null||!s)throw new Error("relayQuote requires originChainId, destinationChainId, amount");let l=ne({liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,crossChain:Number(r)!==Number(o),requestedCapBps:e.maxSlippageBps??e.slippageBps});if(!l.executable)throw new Error(`relay: route requires ${l.requiredBps} bps above cap ${l.capBps}`);let u=(t.baseUrl||process.env.RELAY_API_URL||Jg).replace(/\/$/,""),d=await b(`${u}/quote`,{method:"POST",body:{user:n,originChainId:Number(r),destinationChainId:Number(o),originCurrency:a,destinationCurrency:i,amount:String(s),tradeType:c,slippageTolerance:String(l.selectedBps)},fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4}),p=d?.details?.currencyOut?.amount;return!p||!/^\d+$/.test(String(p))?{...d,autoSlippagePolicy:l}:q(d,{chainId:Number(r),venue:d?.steps?.[0]?.items?.[0]?.data?.to||"relay",amountOut:p,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,crossChain:Number(r)!==Number(o),requestedCapBps:e.maxSlippageBps??e.slippageBps})}async function Pl(e={},t={}){let n=await dr(e,t),r=Number(e.originChainId),o=(n.steps||[]).flatMap(s=>(s.items||[]).filter(c=>c?.data?.to&&c?.data?.data).map(c=>({stepId:s.id,...c.data})));if(!o.length)throw new Error("relay: quote returned no executable transaction items");let a=String(n?.autoSlippage?.venue||"").toLowerCase();if(o.some(s=>String(s.to).toLowerCase()!==a))throw new Error("relay: route includes a separate approval/transaction that is not yet safely bound");let i=o.map(s=>({chainId:r,from:s.from||e.user,to:s.to,data:s.data,value:s.value??"0x0",...s.gasLimit!=null||s.gas!=null?{gasLimit:s.gasLimit??s.gas}:{},slippageGuard:K(n.autoSlippage,{chainId:r,venue:s.to,data:s.data})}));return P({provider:"relay",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:r,quote:n,autoSlippage:n.autoSlippage,transactions:i},{provider:"relay",kind:"relay-tx"})}_();import{TypedDataEncoder as Zg,getAddress as on,isAddress as ey}from"ethers";var YA=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"});function sa(e=process.env){return String(e.ORACLE_AUTONOMOUS_TRADING??"").trim()==="1"}function Tl(e=process.env){return String(e.ORACLE_AUTONOMOUS_MINT??process.env.ORACLE_AUTONOMOUS_MINT??"").trim()==="1"}var Rl={1:"https://api.cow.fi/mainnet/api/v1",100:"https://api.cow.fi/xdai/api/v1",42161:"https://api.cow.fi/arbitrum_one/api/v1",8453:"https://api.cow.fi/base/api/v1"},ty=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),ny=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"}),la={1:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",8453:"0x4200000000000000000000000000000000000006",42161:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1"},Ol={1:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",8453:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",42161:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831"},Nl=Object.freeze({Order:[{name:"sellToken",type:"address"},{name:"buyToken",type:"address"},{name:"receiver",type:"address"},{name:"sellAmount",type:"uint256"},{name:"buyAmount",type:"uint256"},{name:"validTo",type:"uint32"},{name:"appData",type:"bytes32"},{name:"feeAmount",type:"uint256"},{name:"kind",type:"string"},{name:"partiallyFillable",type:"bool"},{name:"sellTokenBalance",type:"string"},{name:"buyTokenBalance",type:"string"}]}),o_=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]});function ua(e,t={}){if(t.baseUrl)return t.baseUrl.replace(/\/$/,"");let n=Rl[Number(e)];if(!n)throw new Error(`cowswap: unsupported chainId ${e}`);return n}function pr(e,t){let n=String(e||"").trim();if(!ey(n))throw new Error(`cowswap: ${t} must be an address`);return on(n).toLowerCase()}function ca(e,t){try{let n=BigInt(String(e));if(n<0n)throw new Error("negative");return n.toString()}catch{throw new Error(`cowswap: ${t} must be a non-negative integer string`)}}function ry(e,t){let n=String(e||"").trim();if(!/^0x[0-9a-fA-F]{64}$/.test(n))throw new Error(`cowswap: ${t} must be bytes32 hex`);return n.toLowerCase()}function oy(e){let t=ty[Number(e)];if(!t)throw new Error(`cowswap: settlement contract not registered for chain ${e}`);return{name:"Gnosis Protocol",version:"v2",chainId:Number(e),verifyingContract:on(t)}}function ay(e={},t,n){let r=pr(e.sellToken,"sellToken"),o=pr(e.buyToken,"buyToken"),a=pr(e.receiver||n,"receiver"),i=Number(e.validTo);if(!Number.isInteger(i)||i<=0)throw new Error("cowswap: quote.validTo required");let s=ry(e.appData||e.appDataHash||`0x${"0".repeat(64)}`,"appData");return{sellToken:r,buyToken:o,receiver:a,sellAmount:ca(e.sellAmount,"sellAmount"),buyAmount:ca(e.buyAmount,"buyAmount"),validTo:i,appData:s,feeAmount:ca(e.feeAmount??"0","feeAmount"),kind:String(e.kind||"sell"),partiallyFillable:!!e.partiallyFillable,sellTokenBalance:String(e.sellTokenBalance||"erc20"),buyTokenBalance:String(e.buyTokenBalance||"erc20")}}async function Ll(e={}){try{let t=await dt({chainId:1,sellToken:la[1],buyToken:Ol[1],sellAmountBeforeFee:"1000000000000000",from:Te},e);return{ok:!0,buyAmount:t.quote?.buyAmount||t.buyAmount}}catch(t){return{ok:!1,error:String(t.message||t).slice(0,160)}}}async function dt(e={},t={}){let n=Number(e.chainId??1),r=ea(e.from||e.owner),o=e.sellToken||la[n],a=e.buyToken||Ol[n],i=String(e.sellAmountBeforeFee||e.sellAmount||"0");if(!o||!a||i==="0")throw new Error("cowQuote requires sellToken, buyToken, sellAmountBeforeFee");if(/eeeeeeee|native|^eth$/i.test(o)&&(o=la[n],!o))throw new Error("no WETH mapping for chain");let s={sellToken:o,buyToken:a,from:r,receiver:e.receiver||r,sellAmountBeforeFee:i,kind:e.kind||"sell",signingScheme:e.signingScheme||"eip1271"},c=await b(`${ua(n,t)}/quote`,{method:"POST",body:s,fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),l=c?.quote?.buyAmount||c?.buyAmount;return l?q(c,{chainId:n,venue:"cowswap-order",amountOut:l,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps}):c}async function Bl(e={},t={}){let n=Number(e.chainId??1),r=pr(ea(e.from||e.owner||e.signer),"owner"),o=await dt({...e,chainId:n,from:r,signingScheme:e.signingScheme||"eip712"},t),a=ay(o?.quote||o,n,r),i=oy(n),s={domain:i,types:Nl,primaryType:"Order",message:a},c=Zg.hash(i,Nl,a),l=ny[n];if(!l)throw new Error(`cowswap: vault relayer not registered for chain ${n}`);return P({provider:"cowswap",orderReady:!0,executionReady:!1,chainId:n,owner:r,signingScheme:"eip712",settlement:i.verifyingContract.toLowerCase(),vaultRelayer:on(l).toLowerCase(),quote:o,quoteId:o?.id??e.quoteId??null,typedData:s,cowGuard:{mode:"cow-order",version:1,provider:"cowswap",chainId:n,owner:r,settlement:i.verifyingContract.toLowerCase(),vaultRelayer:on(l).toLowerCase(),sellToken:a.sellToken,buyToken:a.buyToken,sellAmount:a.sellAmount,buyAmount:a.buyAmount,validTo:a.validTo,quoteId:o?.id??e.quoteId??null,typedDataHash:c,issuedAtMs:Date.now(),expiresAtMs:Math.min(a.validTo*1e3,Date.now()+2e4)},requiresApproval:{token:a.sellToken,spender:on(l).toLowerCase(),amount:a.sellAmount}},{provider:"cowswap",kind:"cow-order"})}async function Ml(e={},t={}){let n=Number(e.chainId??1),r=String(e.uid||e.orderUid||"").trim();if(!r)throw new Error("cowOrderStatus requires uid");return b(`${ua(n,t)}/orders/${encodeURIComponent(r)}/status`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function $l(e={},t={}){let n=Number(e.chainId??1),r=String(e.uid||e.orderUid||"").trim();if(!r)throw new Error("cowOrder requires uid");return b(`${ua(n,t)}/orders/${encodeURIComponent(r)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}function Ul(){return Object.keys(Rl).map(Number)}_();var sy="https://api.1inch.dev/swap/v6.0";function Dl(e={}){return me({provider:"oneinch",defaultUrl:sy,hosts:["api.1inch.dev"],url:e.baseUrl||process.env.ONEINCH_API_URL})}function da(e={}){return Dl(e).baseUrl}function an(e={}){return e.apiKey||process.env.ONEINCH_API_KEY||process.env.ONE_INCH_API_KEY||""}function pa(e={}){let t=an(e);return le({accept:"application/json"},{Authorization:t?`Bearer ${t}`:""},Dl(e).trusted)}async function Fl(e={}){if(!an(e))return{ok:!1,configured:!1,error:"ONEINCH_API_KEY not set"};try{return{ok:!0,configured:!0,dstAmount:(await ma({chainId:8453,src:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",dst:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",amount:"1000000000000000"},e)).dstAmount}}catch(t){return{ok:!1,configured:!0,error:String(t.message||t).slice(0,160)}}}async function ma(e={},t={}){if(!an(t))throw new Error("ONEINCH_API_KEY required for 1inch");let n=Number(e.chainId??1),{src:r,dst:o,amount:a}=e;if(!r||!o||!a)throw new Error("oneinchQuote requires src, dst, amount");let i=new URLSearchParams({src:r,dst:o,amount:String(a)}),s=await b(`${da(t)}/${n}/quote?${i}`,{headers:pa(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3});return s?.dstAmount?q(s,{chainId:n,venue:"1inch-quote",amountOut:s.dstAmount,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps}):s}function cy(e){return/^(eth|native|0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee)$/i.test(String(e||""))}async function fa(e={},t={}){if(!an(t))throw new Error("ONEINCH_API_KEY required for 1inch");let n=Number(e.chainId??1);return b(`${da(t)}/${n}/approve/spender`,{headers:pa(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function ql(e={},t={}){if(!an(t))throw new Error("ONEINCH_API_KEY required for 1inch");let n=Number(e.chainId??1),{src:r,dst:o,amount:a}=e,i=e.from||e.fromAddress||e.userAddress||e.taker;if(!r||!o||!a||!i)throw new Error("oneinchPrepare requires src, dst, amount, from");let s=ne({liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps});if(!s.executable)throw new Error(`1inch: route requires ${s.requiredBps} bps above cap ${s.capBps}`);let c=new URLSearchParams({src:r,dst:o,amount:String(a),from:i,slippage:String(s.selectedBps/100)});e.receiver&&c.set("receiver",e.receiver),e.referrer&&c.set("referrer",e.referrer),e.disableEstimate!=null&&c.set("disableEstimate",String(!!e.disableEstimate)),e.allowPartialFill!=null&&c.set("allowPartialFill",String(!!e.allowPartialFill)),e.includeProtocols&&c.set("includeProtocols",String(e.includeProtocols)),e.excludeProtocols&&c.set("excludeProtocols",String(e.excludeProtocols));let l=await b(`${da(t)}/${n}/swap?${c}`,{headers:pa(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3}),u=l?.tx;if(!u?.to||!u?.data)throw new Error("1inch: swap returned no executable tx");if(u.from&&String(u.from).toLowerCase()!==String(i).toLowerCase())throw new Error("1inch: transaction sender mismatch");let d=l?.dstAmount||l?.toTokenAmount||l?.buyAmount;if(!d)throw new Error("1inch: swap response missing dstAmount");let p=q(l,{chainId:n,venue:u.to,amountOut:d,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps}),m=null;if(!cy(r)){let f=l?.spender||l?.approvalAddress||(await fa({chainId:n},t))?.address;if(!f)throw new Error("1inch: ERC-20 route missing approval spender");m={token:r,spender:f,amount:String(a)}}return P({provider:"oneinch",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:n,quote:p,autoSlippage:p.autoSlippage,requiresApproval:m,transaction:{chainId:n,from:u.from||i,to:u.to,data:u.data,value:u.value??"0x0",...u.gas!=null?{gasLimit:u.gas}:{},slippageGuard:K(p.autoSlippage,{chainId:n,venue:u.to,data:u.data})}},{provider:"oneinch",kind:"oneinch-tx"})}var uy=process.env.HL_WS_URL||"wss://api.hyperliquid.xyz/ws";async function sn(e,t={}){if(!e?.type)throw new Error("hlWsSnapshot requires subscription.type");let n=t.timeoutMs??8e3,r=t.maxMessages??1,o=t.WebSocket||globalThis.WebSocket;if(!o)throw new Error("WebSocket not available in this runtime");let a=t.url||uy,i=Date.now();return new Promise((s,c)=>{let l=!1,u=[],d=0,p=new o(a),m=setTimeout(()=>{f(),l||(l=!0,u.length?s({ok:!0,partial:!0,ms:Date.now()-i,messages:u}):c(new Error(`hl ws timeout after ${n}ms`)))},n);function f(){clearTimeout(m);try{p.close()}catch{}}p.addEventListener("open",()=>{p.send(JSON.stringify({method:"subscribe",subscription:e}))}),p.addEventListener("message",h=>{let g;try{g=JSON.parse(typeof h.data=="string"?h.data:String(h.data))}catch{g={raw:String(h.data).slice(0,200)}}u.push(g),g.channel&&g.channel!=="subscriptionResponse"?d+=1:g.data&&g.channel==="subscriptionResponse"||g.channel||(d+=1),d>=r&&(f(),l||(l=!0,s({ok:!0,ms:Date.now()-i,subscription:e,messages:u,last:u[u.length-1]})))}),p.addEventListener("error",()=>{f(),l||(l=!0,c(new Error("hl ws error")))})})}async function Hl(e={}){try{let t=await sn({type:"allMids"},{...e,maxMessages:1}),n=t.last||{},r=n.data?.mids||n.data||{},o=typeof r=="object"?Object.keys(r).length:0;return{ok:!0,ms:t.ms,midCount:o,channel:n.channel||null}}catch(t){return{ok:!1,error:String(t.message||t).slice(0,160)}}}async function Vl(e={}){let t=await sn({type:"allMids"},e),n=t.last||{};return{ms:t.ms,mids:n.data?.mids||n.data||{},channel:n.channel}}async function Wl(e,t={}){if(!e)throw new Error("coin required");let n=await sn({type:"l2Book",coin:String(e)},t);return{ms:n.ms,book:n.last?.data||n.last,channel:n.last?.channel}}var py=process.env.POLY_WS_URL||"wss://ws-subscriptions-clob.polymarket.com/ws/market";async function mr(e=[],t={}){let n=Array.isArray(e)?e.map(String):[String(e)];if(!n.length||!n[0])throw new Error("polyWsSnapshot requires assetIds");let r=t.timeoutMs??8e3,o=t.maxMessages??1,a=t.WebSocket||globalThis.WebSocket;if(!a)throw new Error("WebSocket not available");let i=t.url||py,s=Date.now();return new Promise((c,l)=>{let u=!1,d=[],p=0,m=new a(i),f=setTimeout(()=>{h(),u||(u=!0,d.length?c({ok:!0,partial:!0,ms:Date.now()-s,messages:d}):l(new Error(`poly ws timeout after ${r}ms`)))},r);function h(){clearTimeout(f);try{m.close()}catch{}}m.addEventListener("open",()=>{m.send(JSON.stringify({assets_ids:n,type:"market"}))}),m.addEventListener("message",g=>{let v;try{v=JSON.parse(typeof g.data=="string"?g.data:String(g.data))}catch{v={raw:String(g.data).slice(0,300)}}d.push(v),p+=1,p>=o&&(h(),u||(u=!0,c({ok:!0,ms:Date.now()-s,assetIds:n,messages:d,last:d[d.length-1]})))}),m.addEventListener("error",()=>{h(),u||(u=!0,l(new Error("poly ws error")))})})}async function zl(e={}){let t=e.assetId||"98022490269692409998126496127597032490334070080325855126491859374983463996227";try{let n=await mr([t],{...e,maxMessages:1});return{ok:!0,ms:n.ms,got:!!n.last,partial:n.partial||!1}}catch(n){return{ok:!1,error:String(n.message||n).slice(0,160)}}}async function jl(e,t={}){if(!e)throw new Error("assetId required");let n=await mr([e],t);return{ms:n.ms,assetId:String(e),data:n.last,messages:n.messages}}_();import{readFileSync as gy,existsSync as yy}from"node:fs";import{getAddress as wy,Interface as fr,TypedDataEncoder as Zl,parseUnits as vy}from"ethers";var fy=/^(0|[1-9][0-9]*)$/,ha=class extends Error{constructor(t){super(`nft gas-war limit: ${t.reason}`),this.name="NftGasWarLimitError",this.verdict=t}};function We(e,t,{required:n=!0,allowZero:r=!1}={}){if(e==null||e===""){if(n)throw new Error(`${t} required`);return null}let o;if(typeof e=="bigint")o=e;else if(typeof e=="number"){if(!Number.isSafeInteger(e))throw new Error(`${t} must be a safe integer`);o=BigInt(e)}else if(typeof e=="string"){let a=e.trim();if(a.startsWith("0x")||a.startsWith("0X"))o=BigInt(a);else{if(!fy.test(a))throw new Error(`${t} must be an integer wei string`);o=BigInt(a)}}else throw new Error(`${t} must be bigint, number, or integer string`);if(o<0n||!r&&o===0n)throw new Error(`${t} must be ${r?"non-negative":"positive"}`);return o}function hy(e){let t=Number(e);if(!Number.isSafeInteger(t)||t<=0)throw new Error("chainId must be a positive integer");return t}function by(e={}){return e.maxFeePerGas!=null?We(e.maxFeePerGas,"maxFeePerGas"):e.gasPrice!=null?We(e.gasPrice,"gasPrice"):null}function ba(e={}){try{let t=hy(e.chainId??e.tx?.chainId),n=e.tx||e,r=e.policy||e,o=r.grant?.maxGasWei??e.grant?.maxGasWei,a=We(r.maxTotalGasWei??r.maxGasWei??o,"maxTotalGasWei"),i=We(n.gasLimit??n.gas,"gasLimit"),s=by(n);if(s==null)throw new Error("maxFeePerGas or gasPrice required");let c=We(r.maxFeePerGasWei,"maxFeePerGasWei",{required:!1}),l=We(r.maxPriorityFeePerGasWei,"maxPriorityFeePerGasWei",{required:!1}),u=n.maxPriorityFeePerGas==null?null:We(n.maxPriorityFeePerGas,"maxPriorityFeePerGas"),d=i*s;return d>a?{ok:!1,status:"BLOCK",reason:`total gas ${d} exceeds cap ${a}`,chainId:t,totalGasWei:d.toString(),maxTotalGasWei:a.toString()}:c!=null&&s>c?{ok:!1,status:"BLOCK",reason:`unit fee ${s} exceeds cap ${c}`,chainId:t,unitFeeWei:s.toString(),maxFeePerGasWei:c.toString(),totalGasWei:d.toString(),maxTotalGasWei:a.toString()}:u!=null&&l!=null&&u>l?{ok:!1,status:"BLOCK",reason:`priority fee ${u} exceeds cap ${l}`,chainId:t,priorityFeeWei:u.toString(),maxPriorityFeePerGasWei:l.toString(),totalGasWei:d.toString(),maxTotalGasWei:a.toString()}:{ok:!0,status:"PASS",reason:"gas envelope within NFT mint gas-war caps",chainId:t,totalGasWei:d.toString(),maxTotalGasWei:a.toString(),unitFeeWei:s.toString(),maxFeePerGasWei:c?.toString()??null,priorityFeeWei:u?.toString()??null,maxPriorityFeePerGasWei:l?.toString()??null}}catch(t){return{ok:!1,status:"BLOCK",reason:String(t?.message||t)}}}function Gl(e={}){let t=ba(e);if(!t.ok)throw new ha(t);return t}var xy="https://api.opensea.io/api/v2",Sy="fulfillAdvancedOrder(((address offerer,address zone,(uint8 itemType,address token,uint256 identifierOrCriteria,uint256 startAmount,uint256 endAmount)[] offer,(uint8 itemType,address token,uint256 identifierOrCriteria,uint256 startAmount,uint256 endAmount,address recipient)[] consideration,uint8 orderType,uint256 startTime,uint256 endTime,bytes32 zoneHash,uint256 salt,bytes32 conduitKey,uint256 totalOriginalConsiderationItems) parameters,uint120 numerator,uint120 denominator,bytes signature,bytes extraData) advancedOrder,(uint256 orderIndex,uint8 side,uint256 index,uint256 identifier,bytes32[] criteriaProof)[] criteriaResolvers,bytes32 fulfillerConduitKey,address recipient)",ky=new fr([`function ${Sy}`]),Kl=new fr(["function mintPublic(address nftContract,address feeRecipient,address minterIfNotPayer,uint256 quantity) payable"]),Ey=Object.freeze(["blast","base","ethereum","zora","arbitrum","sei","avalanche","polygon","optimism","ape_chain","flow","b3","soneium","ronin","bera_chain","solana","shape","unichain","gunzilla","abstract","animechain","hyperevm","somnia","monad","hyperliquid","megaeth","ink","robinhood","stablechain"]),Iy=new Set(Ey),eu=new Set(["solana","flow"]),ga="0x0000000000000000000000000000000000000000";function Ay(){let e=process.env.OPENSEA_ENV_FILE||`${process.env.HOME||""}/.config/locals-only/opensea.env`;if(!yy(e))return"";try{for(let t of gy(e,"utf8").split(`
|
|
5
|
-
`)){let n=t.match(/^\s*OPENSEA_API_KEY\s*=\s*(.+)\s*$/);if(n)return n[1].replace(/^["']|["']$/g,"").trim()}}catch{}return""}function ge(e={}){return e.apiKey?e.apiKey:e.allowAmbientCredentials===!1||e.allowDiskCredentials===!1?e.env?.OPENSEA_API_KEY||e.env?.OPEN_SEA_API_KEY||"":e.env?.OPENSEA_API_KEY||process.env.OPENSEA_API_KEY||process.env.OPEN_SEA_API_KEY||Ay()}function tu(e={}){return me({provider:"opensea",defaultUrl:xy,hosts:["api.opensea.io","testnets-api.opensea.io"],url:e.baseUrl||process.env.OPENSEA_API_URL})}function Re(e={}){return tu(e).baseUrl}function Oe(e={}){return le({accept:"application/json"},{"x-api-key":ge(e)},tu(e).trusted)}function nu(e){let t=String(e||"ethereum").trim().toLowerCase();if(!Iy.has(t))throw new Error(`opensea: unsupported account chain ${t}`);return t}function U(e,t="address"){try{return wy(String(e||"").trim().toLowerCase())}catch{throw new Error(`opensea: invalid ${t}`)}}function ru(e,t=null){let n=String(e||"").trim();if(!n)throw new Error("opensea: account address required");if(t&&!eu.has(t)||!t&&/^0x[0-9a-fA-F]{40}$/.test(n))return U(n,"account address");if(!/^[1-9A-HJ-NP-Za-km-z]{32,64}$/.test(n))throw new Error("opensea: invalid account address");return n}function _y(e,t){let n=String(e??"").trim();if(!/^(?:0|[1-9]\d*)(?:\.\d+)?$/.test(n)||Number(n)<=0)throw new Error(`opensea: ${t} must be a positive plain decimal`);return n}function Cy(e,t){let n=Number(e);if(!Number.isSafeInteger(n)||n<=0)throw new Error(`opensea: ${t} must be a positive integer`);return n}function Yl(e,t){let n=String(e||"").trim(),r=Date.parse(n);if(!n||!Number.isFinite(r))throw new Error(`opensea: ${t} must be an ISO 8601 timestamp`);return{text:new Date(r).toISOString(),ms:r}}function Py(e={},t,n){return{chain:t,owner:n,contract:e.contract||null,tokenId:e.identifier==null?null:String(e.identifier),tokenStandard:e.token_standard||null,collection:e.collection||null,name:e.name||null,description:e.description||null,imageUrl:e.display_image_url||e.image_url||e.original_image_url||null,originalImageUrl:e.original_image_url||e.image_url||null,animationUrl:e.display_animation_url||e.original_animation_url||null,metadataUrl:e.metadata_url||null,marketplaceUrl:e.opensea_url||null,estimatedValueUsd:e.estimated_value_usd!=null&&Number.isFinite(Number(e.estimated_value_usd))?Number(e.estimated_value_usd):null,spam:e.is_disabled===!0,disabled:e.is_disabled===!0,nsfw:e.is_nsfw===!0,traits:Array.isArray(e.traits)?e.traits:[],updatedAt:e.updated_at||null,acquisitionCost:null,itemPnl:{status:"unavailable",reason:"OpenSea account inventory does not expose trustworthy per-item acquisition cost"}}}async function ou(e={}){if(!ge(e))return{ok:!1,configured:!1,error:"OPENSEA_API_KEY not set"};try{let t=await cn("boredapeyachtclub",e);return{ok:!0,configured:!0,name:t.name||t.collection}}catch(t){return{ok:!1,configured:!0,error:String(t.message||t).slice(0,160)}}}async function cn(e,t={}){if(!e)throw new Error("collection slug required");if(!ge(t))throw new Error("OPENSEA_API_KEY required");return b(`${Re(t)}/collections/${encodeURIComponent(e)}`,{headers:Oe(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function au(e,t={}){let n=await cn(e,t),r=n.stats||n.total||{},o=n.floor_price??n.floorPrice??r.floor_price??r.floorPrice??null;return{slug:n.collection||e,name:n.name||null,floor:o,totalSupply:n.total_supply??r.total_supply??null,numOwners:n.num_owners??r.num_owners??null,raw:{contracts:n.contracts,fees:n.fees,category:n.category}}}async function ln(e={},t={}){if(!ge(t))throw new Error("OPENSEA_API_KEY required");let n=nu(e.chain),r=ru(e.address||e.owner,n),o=Math.min(Math.max(Number(e.pageSize??e.limit??200)||200,1),200),a=Math.min(Math.max(Number(e.maxPages??5)||5,1),25),i=[],s=e.next?String(e.next):null,c=0;do{let l=new URL(`${Re(t)}/chain/${encodeURIComponent(n)}/account/${encodeURIComponent(r)}/nfts`);l.searchParams.set("limit",String(o)),e.collection&&l.searchParams.set("collection",String(e.collection)),s&&l.searchParams.set("next",s);let u=await b(l.toString(),{headers:Oe(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4});for(let d of Array.isArray(u?.nfts)?u.nfts:[])i.push(Py(d,n,r));s=u?.next?String(u.next):null,c+=1}while(s&&c<a);return{provider:"opensea-nft",source:"opensea-account-inventory",chain:n,owner:r,count:i.length,pages:c,complete:!s,next:s,nfts:i,exec:!1,readOnly:!0}}async function hr(e={},t={}){if(!ge(t))throw new Error("OPENSEA_API_KEY required");let n=ru(e.address||e.owner),r=await b(`${Re(t)}/account/${encodeURIComponent(n)}/pnl`,{headers:Oe(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4});return{provider:"opensea-nft",source:"opensea-indexed-account-pnl",address:n,scope:"OpenSea-indexed account trading PnL across supported currencies, not per-item NFT cost basis",methodology:"provider-indexed",realizedPnlUsd:r?.realized_pnl_usd??null,unrealizedPnlUsd:r?.unrealized_pnl_usd??null,totalPnlUsd:r?.total_pnl_usd??null,netInvestedUsd:r?.net_invested_usd??null,currentValueUsd:r?.current_value_usd??null,returnPercentage:r?.return_percentage??null,itemLevelPnlAvailable:!1,raw:r,exec:!1,readOnly:!0}}var iu=Object.freeze({robinhood:4663,ethereum:1,base:8453,arbitrum:42161,optimism:10,polygon:137,avalanche:43114,zora:7777777,blast:81457,sei:1329,ape_chain:33139,b3:8333,soneium:1868,ronin:2020,bera_chain:80094,shape:360,unichain:130,gunzilla:43419,abstract:2741,animechain:69e3,hyperevm:999,somnia:5031,monad:143,megaeth:4326,ink:57073,stablechain:988});function ft(e){let t=String(e||"").trim().toLowerCase(),n=iu[t];if(!n)throw new Error(`opensea: unsupported EVM chain ${t||"(missing)"}`);return{chain:t,chainId:n}}function re(e,t,{positive:n=!1}={}){let r=String(e??"").trim();if(!/^\d+$/.test(r))throw new Error(`opensea: ${t} must be an unsigned integer`);let o=BigInt(r);if(n&&o<=0n)throw new Error(`opensea: ${t} must be positive`);return o}function Ty(e,t="transaction value"){let n;try{let r=String(e??"0").trim();if(!/^(?:0x[0-9a-fA-F]+|\d+)$/.test(r))throw new Error("invalid");n=BigInt(r)}catch{throw new Error(`opensea: ${t} must be a non-negative integer quantity`)}if(n<0n)throw new Error(`opensea: ${t} must be non-negative`);return{amount:n,hex:`0x${n.toString(16)}`}}function mt(e){let t=String(e??"").trim();if(!/^\d+$/.test(t))throw new Error("opensea: tokenId must be an unsigned integer string");return t}function br(e,t=10){let n=Number(e??1);if(!Number.isSafeInteger(n)||n<1||n>t)throw new Error(`opensea: quantity must be an integer from 1 through ${t}`);return n}function su(e,t,n="listing expiry"){let r=e==null?"":String(e).trim(),o;if(/^\d+$/.test(r)){let a=Number(r);o=r.length<=10?a*1e3:a}else o=Date.parse(r);if(!r||!Number.isFinite(o))throw new Error(`opensea: ${n} missing or invalid`);if(o<=t)throw new Error(`opensea: ${n} is expired or stale`);return new Date(o).toISOString()}function Ny(e,t){return su(e.expiration_time??e.expirationTime??e.protocol_data?.parameters?.endTime,t)}function Ry(e){let t=e.protocol_data?.parameters?.offer?.[0]||{},n=re(t.endAmount??t.startAmount??e.quantity??1,"listing quantity",{positive:!0});if(n>BigInt(Number.MAX_SAFE_INTEGER))throw new Error("opensea: listing quantity exceeds safe integer range");return Number(n)}function Oy(e,t,n){if(!e||typeof e!="object")throw new Error("opensea: invalid best listing");let r=String(e.chain||"").trim().toLowerCase();if(r!==t.chain)throw new Error("opensea: OpenSea returned a listing for the wrong chain");if(iu[r]!==t.chainId)throw new Error("opensea: OpenSea listing chain id mismatch");if(String(e.status||"").toUpperCase()!=="ACTIVE")throw new Error("opensea: OpenSea returned a non-active listing");let a=e.protocol_data?.parameters?.offer?.[0]||{},i=U(e.asset?.contract||a.token,"listing NFT contract");if(t.contract&&i!==t.contract)throw new Error("opensea: OpenSea returned a listing for the wrong contract");let s=mt(e.asset?.identifier??a.identifierOrCriteria),c=re(e.price?.current?.value,"listing price",{positive:!0}),l=String(e.order_hash||"").trim().toLowerCase();if(!/^0x[0-9a-f]{64}$/.test(l))throw new Error("opensea: invalid listing order hash");return{orderHash:l,chain:t.chain,chainId:t.chainId,protocolAddress:U(e.protocol_address,"listing protocol address"),contract:i,tokenId:s,quantity:Ry(e),priceWei:c.toString(),currency:String(e.price?.current?.currency||"").trim()||null,decimals:Number(e.price?.current?.decimals??18),expiry:Ny(e,n),counter:re(e.protocol_data?.parameters?.counter,"listing counter").toString()}}async function gr(e={},t={}){if(!ge(t))throw new Error("OPENSEA_API_KEY required");let n=ft(e.chain);n.contract=e.contract?U(e.contract,"NFT contract"):null;let r=String(e.slug||"").trim();if(!r)throw new Error("opensea: collection slug required");let o=Number(e.limit??12);if(!Number.isSafeInteger(o)||o<1||o>50)throw new Error("opensea: listing limit must be 1 through 50");let a=new URL(`${Re(t)}/listings/collection/${encodeURIComponent(r)}/best`);a.searchParams.set("limit",String(o)),e.next&&a.searchParams.set("next",String(e.next));let i=await b(a.toString(),{headers:Oe(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4}),s=Array.isArray(i?.listings)?i.listings:[];if(!s.length)throw new Error("opensea: no active best listings returned");let c=Number.isFinite(Number(t.nowMs))?Number(t.nowMs):Date.now();return{provider:"opensea-nft",source:"opensea-best-listings",chain:n.chain,chainId:n.chainId,slug:r,contract:n.contract,listings:s.map(l=>Oy(l,n,c)),next:i?.next?String(i.next):null,exec:!1,readOnly:!0}}function ya(e){if(e.userConfirmed!==!0)throw new Error("opensea: userConfirmed=true required after buyer, chain, contract, token, quantity, price cap, total cap, and expiry review")}function cu(e){if(!e||typeof e!="object")return!1;let t=String(e.action??e.type??e.method??"");return/approv|setapprovalforall|permit/i.test(t)?!0:Object.values(e).some(n=>n&&typeof n=="object"&&cu(n))}function lu(e){return!e||typeof e!="object"?!1:Object.keys(e).some(t=>/^(?:signed.*|rawtransaction|serializedtransaction|txsigned|r|s|v)$/i.test(t))}function uu(e){return!e||typeof e!="object"?!1:lu(e)?!0:Object.values(e).some(t=>t&&typeof t=="object"&&uu(t))}function du(e,t=[],n=new Set){if(!e||typeof e!="object"||n.has(e))return t;n.add(e),e.transaction&&typeof e.transaction=="object"?t.push(e.transaction):e.tx&&typeof e.tx=="object"&&t.push(e.tx);for(let[r,o]of Object.entries(e))(r==="transaction"||r==="tx")&&o&&typeof o=="object"||o&&typeof o=="object"&&du(o,t,n);return t}function Jl(e){return e&&typeof e=="object"&&typeof e.value=="string"?e.value:e}function pu(e,{buyer:t,chainId:n,targets:r}){if(!e||typeof e!="object")throw new Error("opensea: transaction object required");if(lu(e))throw new Error("opensea: signed transaction material refused");if((e.from?U(Jl(e.from),"transaction buyer"):t)!==t)throw new Error("opensea: OpenSea returned a transaction for the wrong buyer");let a=U(Jl(e.to??e.target),"transaction target");if(!r.has(a))throw new Error("opensea: OpenSea returned a transaction for the wrong target");let i=e.data??e.calldata,s=e.input_data&&typeof e.input_data=="object"?e.input_data:e.input&&typeof e.input=="object"?e.input:null;if(i==null&&s){if(!String(e.function||"").replace(/^function\s+/,"").startsWith("fulfillAdvancedOrder("))throw new Error("opensea: only exact Seaport fulfillAdvancedOrder preparation is accepted");i=ky.encodeFunctionData("fulfillAdvancedOrder",[s.advancedOrder,s.criteriaResolvers,s.fulfillerConduitKey,s.recipient])}let c=String(i??"").trim().toLowerCase();if(!/^0x(?:[0-9a-f]{2})+$/.test(c))throw new Error("opensea: OpenSea returned invalid transaction calldata");let l=e.calldata_suffix==null?"":String(e.calldata_suffix).trim().toLowerCase();if(l){if(!/^0x[0-9a-f]{8}$/.test(l))throw new Error("opensea: invalid OpenSea calldata suffix");c.endsWith(l.slice(2))||(c+=l.slice(2))}let u=e.chainId??e.chain_id??e.chainIdentifier?.chainId;if(u!=null&&Number(u)!==n)throw new Error("opensea: OpenSea returned a transaction for the wrong chain");let d=Ty(e.value_hex??e.valueHex??e.value??0);return{from:t,to:a,data:c,value:d.hex,chainId:n,valueWei:d.amount}}function ht(e){return{from:e.from,to:e.to,data:e.data,value:e.value,chainId:e.chainId,...e.gasLimit==null?{}:{gasLimit:e.gasLimit},...e.maxFeePerGas==null?{}:{maxFeePerGas:e.maxFeePerGas},...e.maxPriorityFeePerGas==null?{}:{maxPriorityFeePerGas:e.maxPriorityFeePerGas},...e.worstCaseFeeWei==null?{}:{worstCaseFeeWei:e.worstCaseFeeWei}}}async function un(e,t,n){let r=n.provider,o=!!n.rpcUrl;if(!r&&!o)return{simulated:!1,gasEstimates:[]};let a=[];for(let c of e){let{chainId:l,...u}=ht(c);if(r){if(typeof r.call!="function"||typeof r.estimateGas!="function")throw new Error("opensea: supplied provider must implement call and estimateGas");await r.call(u);let d=await r.estimateGas(u);a.push(BigInt(d).toString())}else{let{rpcCall:d}=await Promise.resolve().then(()=>(J(),Bn)),p={...n,fetchImpl:n.rpcFetchImpl||n.fetchImpl};await d(t,"eth_call",[u,"pending"],p);let m=await d(t,"eth_estimateGas",[u],p);a.push(BigInt(m).toString())}}let i=null,s=null;if(r&&typeof r.getFeeData=="function"){let c=await r.getFeeData();s=c?.maxPriorityFeePerGas==null?0n:BigInt(c.maxPriorityFeePerGas),i=c?.maxFeePerGas==null?c?.gasPrice==null?null:BigInt(c.gasPrice):BigInt(c.maxFeePerGas)}else if(o){let{rpcCall:c}=await Promise.resolve().then(()=>(J(),Bn)),l={...n,fetchImpl:n.rpcFetchImpl||n.fetchImpl},u=BigInt(await c(t,"eth_gasPrice",[],l));try{s=BigInt(await c(t,"eth_maxPriorityFeePerGas",[],l))}catch{s=0n}let d=await c(t,"eth_getBlockByNumber",["pending",!1],l),m=(d?.baseFeePerGas==null?0n:BigInt(d.baseFeePerGas))*2n+s;i=u>m?u:m}return i!=null&&s!=null&&e.forEach((c,l)=>{let d=(BigInt(a[l])*120n+99n)/100n;c.gasLimit=d.toString(),c.maxPriorityFeePerGas=s.toString(),c.maxFeePerGas=i.toString(),c.worstCaseFeeWei=(d*i).toString()}),{simulated:!0,gasEstimates:a}}function wa(e,t){if(cu(e))throw new Error("opensea: approval steps are not permitted in NFT buy, sweep, or mint preparation");if(uu(e))throw new Error("opensea: signed transaction material refused");let n=du(e);if(!n.length&&e&&typeof e=="object"&&(e.to||e.target)&&n.push(e),!n.length)throw new Error("opensea: OpenSea returned no transaction action");return n.map(r=>pu(r,t))}function va(e,t){return P({...e,provider:"opensea-nft",kind:t,marketplace:"opensea",prepareReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,executionReady:!1,note:"Unsigned OpenSea EVM NFT transaction preparation only. The private signer must revalidate every bound field before the user signs or broadcasts."})}function mu(e,t,n){let r=e.find(o=>o.tokenId===t);if(!r)throw new Error(`opensea: no exact active listing for tokenId ${t}`);if(r.quantity!==n)throw new Error("opensea: listing quantity does not match requested quantity");return r}async function fu(e={},t={}){if(!ge(t))throw new Error("OPENSEA_API_KEY required");ya(e);let{chain:n,chainId:r}=ft(e.chain),o=U(e.buyer||e.address,"buyer"),a=U(e.contract,"NFT contract"),i=mt(e.tokenId),s=br(e.quantity),c=re(e.maxPriceWei,"maxPriceWei",{positive:!0}),l=await gr({chain:n,slug:e.slug,contract:a,limit:e.limit??50},t),u=mu(l.listings,i,s),d=BigInt(u.priceWei);if(d>c)throw new Error("opensea: listing exceeds max price cap");let p=await b(`${Re(t)}/listings/fulfillment_data`,{method:"POST",headers:Oe(t),body:{listing:{hash:u.orderHash,chain:n,protocol_address:u.protocolAddress},fulfiller:{address:o}},fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3,retries:0,dedupe:!1}),m=wa(p,{buyer:o,chainId:r,targets:new Set([u.protocolAddress])}),f=m.reduce((g,v)=>g+v.valueWei,0n);if(f!==d)throw new Error("opensea: fulfillment total does not match exact listing price");if(f>c)throw new Error("opensea: fulfillment total exceeds max price cap");let h=await un(m,r,{...t,provider:e.provider||t.provider});return va({action:"buy",chain:n,chainId:r,slug:l.slug,buyer:o,contract:a,tokenId:i,tokenIds:[i],quantity:s,priceWei:d.toString(),totalWei:f.toString(),maxPriceWei:c.toString(),expiry:u.expiry,orderHashes:[u.orderHash],items:[{orderHash:u.orderHash,counter:u.counter,contract:a,tokenId:i,priceWei:d.toString()}],transactions:m.map(ht),...h},"nft-buy")}async function hu(e={},t={}){if(!ge(t))throw new Error("OPENSEA_API_KEY required");ya(e);let{chain:n,chainId:r}=ft(e.chain),o=U(e.buyer||e.address,"buyer"),a=U(e.contract,"NFT contract"),i=br(e.quantity??e.maxItems),s=Array.isArray(e.tokenIds)?e.tokenIds.map(mt):[];if(s.length&&(s.length!==i||new Set(s).size!==s.length))throw new Error("opensea: sweep requires one unique tokenId per requested item");let c=re(e.maxPriceWei,"maxPriceWei",{positive:!0}),l=re(e.maxTotalWei,"maxTotalWei",{positive:!0});if(l>c*BigInt(i))throw new Error("opensea: maxTotalWei cannot exceed per-item cap times quantity");let u=Number(e.limit||(s.length?i:50)),d=Math.min(50,Math.max(i,u)),p=new Map,m=null,f=null;for(let I=0;I<5;I+=1){let R=await gr({chain:n,slug:e.slug,contract:a,limit:d,next:f},t);m||(m=R);for(let W of R.listings)p.set(W.orderHash,W);let F=[...p.values()],H=s.length?s.every(W=>F.some(te=>te.tokenId===W)):new Set(F.filter(W=>W.quantity===1).map(W=>W.tokenId)).size>=i+Math.min(i,5);if(f=R.next,H||!f)break}m={...m,listings:[...p.values()],next:f};let h;if(s.length)h=s.map(I=>mu(m.listings,I,1));else{let I=new Set;if(h=[...m.listings].sort((R,F)=>{let H=BigInt(R.priceWei),W=BigInt(F.priceWei);return H<W?-1:H>W?1:0}).filter(R=>R.quantity!==1||I.has(R.tokenId)?!1:(I.add(R.tokenId),!0)),h.length<i)throw new Error(`opensea: only ${h.length} unique active floor listings available; requested ${i}`)}if(s.length){let I=h.find(R=>BigInt(R.priceWei)>c);if(I)throw new Error(`opensea: listing ${I.tokenId} exceeds max price cap`)}let g=new Set(h.map(I=>I.protocolAddress)),v=[],k=[];for(let I of h){if(v.length>=i)break;if(BigInt(I.priceWei)>c)continue;let R;try{R=await b(`${Re(t)}/listings/fulfillment_data`,{method:"POST",headers:Oe(t),body:{listing:{hash:I.orderHash,chain:n,protocol_address:I.protocolAddress},fulfiller:{address:o}},fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3,retries:0,dedupe:!1})}catch(H){let W=Array.isArray(H?.body?.errors)?H.body.errors.join(" "):String(H?.body?.error||H?.message||"");if(!s.length&&H?.status===400&&/order\s+not\s+valid/i.test(W))continue;throw H}let F=wa(R,{buyer:o,chainId:r,targets:g});if(F.length!==1)throw new Error("opensea: each NFT fulfillment must contain exactly one transaction");v.push(I),k.push(F[0])}if(v.length!==i)throw new Error(`opensea: only ${v.length} valid floor fulfillments available; requested ${i}`);let y=v.map(I=>I.tokenId),w=v.reduce((I,R)=>I+BigInt(R.priceWei),0n);if(w>l)throw new Error("opensea: selected listing total exceeds total cap");let S=k.reduce((I,R)=>I+R.valueWei,0n);if(S>l)throw new Error("opensea: sweep total exceeds total cap");if(S!==w)throw new Error("opensea: sweep total does not match exact selected listing total");let N=await un(k,r,{...t,provider:e.provider||t.provider}),C=v.map(I=>I.expiry).sort()[0];return va({action:"sweep",chain:n,chainId:r,slug:m.slug,buyer:o,contract:a,tokenIds:y,quantity:i,pricesWei:v.map(I=>I.priceWei),priceWei:null,totalWei:S.toString(),maxPriceWei:c.toString(),maxTotalWei:l.toString(),expiry:C,orderHashes:v.map(I=>I.orderHash),items:v.map(I=>({orderHash:I.orderHash,counter:I.counter,contract:a,tokenId:I.tokenId,priceWei:I.priceWei})),transactions:k.map(ht),...N},"nft-buy")}function Ly(e,t,n){let o=(Array.isArray(e?.contracts)?e.contracts:[]).find(i=>String(i?.chain||t).toLowerCase()===t&&i?.address);if(!o)throw new Error("opensea: collection response contains no contract for requested chain");let a=U(o.address,"collection NFT contract");if(a!==n)throw new Error("opensea: OpenSea returned the wrong collection contract");return a}async function bu(e={},t={}){if(!ge(t))throw new Error("OPENSEA_API_KEY required");ya(e);let{chain:n,chainId:r}=ft(e.chain),o=U(e.buyer||e.minter||e.address,"buyer"),a=U(e.contract,"NFT contract"),i=br(e.quantity),s=re(e.priceWei,"priceWei"),c=re(e.maxTotalWei,"maxTotalWei"),l=Number.isFinite(Number(t.nowMs))?Number(t.nowMs):Date.now(),u=su(e.expiry,l,"mint expiry"),d=String(e.slug||"").trim();if(!d)throw new Error("opensea: collection slug required");let p=await cn(d,t),m=Ly(p,n,a),f=s*BigInt(i);if(f>c)throw new Error("opensea: mint total exceeds total cap");let h=await b(`${Re(t)}/drops/${encodeURIComponent(d)}/mint`,{method:"POST",headers:Oe(t),body:{minter:o,quantity:i},fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3,retries:0,dedupe:!1}),g=t.allowedMintTargets?.[n]??t.allowedMintTargets?.[r]??e.mintTarget,v=Array.isArray(g)?g:g?[g]:[];if(!v.length)throw new Error("opensea: reviewed SeaDrop mintTarget required");let k=new Set(v.map(te=>U(te,"SeaDrop mint target"))),y=wa(h,{buyer:o,chainId:r,targets:k});if(y.length!==1)throw new Error("opensea: mint must contain exactly one SeaDrop transaction");let w;try{w=Kl.decodeFunctionData("mintPublic",y[0].data)}catch{throw new Error("opensea: mint transaction must call SeaDrop mintPublic")}let S=U(w[0],"mint NFT contract"),N=U(w[1],"mint fee recipient"),C=U(w[2],"mint recipient");if(S!==m)throw new Error("opensea: mint calldata collection mismatch");if(C!==o)throw new Error("opensea: mint calldata recipient mismatch");if(BigInt(w[3])!==BigInt(i))throw new Error("opensea: mint calldata quantity mismatch");if(Kl.encodeFunctionData("mintPublic",[m,N,o,i]).toLowerCase()!==y[0].data.toLowerCase())throw new Error("opensea: mint calldata must be canonical with no suffix");let R=y.reduce((te,$t)=>te+$t.valueWei,0n);if(R!==f)throw new Error("opensea: mint transaction total does not match exact approved price and quantity");if(R>c)throw new Error("opensea: mint total exceeds total cap");let F=await un(y,r,{...t,provider:e.provider||t.provider});if(F.simulated!==!0)throw new Error("opensea: mint RPC simulation required");let H=e.gasPolicy||t.gasPolicy||{maxTotalGasWei:e.maxGasWei,maxFeePerGasWei:e.maxFeePerGasWei,maxPriorityFeePerGasWei:e.maxPriorityFeePerGasWei},W=Gl({chainId:r,tx:y[0],policy:H});return va({action:"mint",chain:n,chainId:r,slug:d,buyer:o,contract:m,tokenId:e.tokenId==null?null:mt(e.tokenId),quantity:i,priceWei:s.toString(),totalWei:R.toString(),maxTotalWei:c.toString(),mintTarget:y[0].to,feeRecipient:N,expiry:u,transactions:y.map(ht),gasWar:W,...F},"nft-mint")}function By(e={}){let t=nu(e.chain);if(eu.has(t))throw new Error("opensea: listing actions currently require an EVM NFT chain");let n=e.startTime||e.start_time?Yl(e.startTime||e.start_time,"startTime"):{text:new Date().toISOString(),ms:Date.now()},r=Yl(e.endTime||e.end_time,"endTime");if(r.ms<=n.ms)throw new Error("opensea: endTime must be after startTime");let o=String(e.tokenId??e.token_id??"").trim();if(!/^\d+$/.test(o))throw new Error("opensea: tokenId must be an unsigned integer string");return{chain:t,contract:U(e.contract,"NFT contract"),token_id:o,quantity:Cy(e.quantity??1,"quantity"),price:{amount:_y(e.price?.amount??e.amount??e.priceAmount,"price amount"),currency:U(e.price?.currency??e.currency??ga,"price currency")},start_time:n.text,end_time:r.text}}var pt={OrderComponents:[{name:"offerer",type:"address"},{name:"zone",type:"address"},{name:"offer",type:"OfferItem[]"},{name:"consideration",type:"ConsiderationItem[]"},{name:"orderType",type:"uint8"},{name:"startTime",type:"uint256"},{name:"endTime",type:"uint256"},{name:"zoneHash",type:"bytes32"},{name:"salt",type:"uint256"},{name:"conduitKey",type:"bytes32"},{name:"counter",type:"uint256"}],OfferItem:[{name:"itemType",type:"uint8"},{name:"token",type:"address"},{name:"identifierOrCriteria",type:"uint256"},{name:"startAmount",type:"uint256"},{name:"endAmount",type:"uint256"}],ConsiderationItem:[{name:"itemType",type:"uint8"},{name:"token",type:"address"},{name:"identifierOrCriteria",type:"uint256"},{name:"startAmount",type:"uint256"},{name:"endAmount",type:"uint256"},{name:"recipient",type:"address"}]},Xl=new fr(["function setApprovalForAll(address operator,bool approved)"]),My=new fr(["function cancel((address offerer,address zone,(uint8 itemType,address token,uint256 identifierOrCriteria,uint256 startAmount,uint256 endAmount)[] offer,(uint8 itemType,address token,uint256 identifierOrCriteria,uint256 startAmount,uint256 endAmount,address recipient)[] consideration,uint8 orderType,uint256 startTime,uint256 endTime,bytes32 zoneHash,uint256 salt,bytes32 conduitKey,uint256 counter)[] orders) returns (bool cancelled)"]);function Ql(e,t){return e?.[t]||(e?.action===t?e:null)}function $y(e,{seller:t,item:n,chainId:r}){let o=Array.isArray(e?.steps)?e.steps:[],a=o.map(y=>Ql(y,"createListingsAction")).find(Boolean)||o.find(y=>/createListings/i.test(String(y?.action||""))),i=a?.signatureRequest?.message??a?.typedData,s;try{s=typeof i=="string"?JSON.parse(i):i}catch{throw new Error("opensea: invalid listing typed-data JSON")}if(!s||s.primaryType!=="OrderComponents"||!s.domain||!s.message)throw new Error("opensea: exact Seaport OrderComponents action required");let c=s.domain;if(c.name!=="Seaport"||c.version!=="1.6"||Number(c.chainId)!==r)throw new Error("opensea: listing domain mismatch");let l=U(c.verifyingContract,"listing protocol"),u=s.message;if(U(u.offerer,"listing seller")!==t)throw new Error("opensea: listing seller mismatch");if(!Array.isArray(u.offer)||u.offer.length!==1)throw new Error("opensea: executable listing requires exactly one NFT offer");let d=u.offer[0];if(![2,3].includes(Number(d.itemType)))throw new Error("opensea: listing offer must be ERC721 or ERC1155");if(U(d.token,"listing collection")!==n.contract||String(d.identifierOrCriteria)!==n.token_id)throw new Error("opensea: listing NFT mismatch");if(String(d.startAmount)!==String(n.quantity)||String(d.endAmount)!==String(n.quantity))throw new Error("opensea: listing quantity mismatch");if(Number(u.orderType)!==2)throw new Error("opensea: only FULL_RESTRICTED listings are executable");if(!Array.isArray(u.consideration)||!u.consideration.length)throw new Error("opensea: listing consideration required");let p=0n;for(let y of u.consideration){if(Number(y.itemType)!==0||U(y.token,"listing payment token")!==ga)throw new Error("opensea: executable listings currently require native fixed-price consideration");let w=BigInt(y.startAmount),S=BigInt(y.endAmount);if(w<=0n||w!==S)throw new Error("opensea: listing consideration must be fixed and positive");U(y.recipient,"listing consideration recipient"),p+=w}let m=vy(n.price.amount,18);if(p!==m)throw new Error("opensea: listing price mismatch");let f=BigInt(Math.floor(Date.parse(n.start_time)/1e3)),h=BigInt(Math.floor(Date.parse(n.end_time)/1e3));if(BigInt(u.startTime)!==f||BigInt(u.endTime)!==h)throw new Error("opensea: listing time bounds mismatch");let g=Zl.hashStruct("OrderComponents",pt,u),v=o.map(y=>Ql(y,"itemApprovalAction")).find(Boolean)||o.find(y=>/setApprovalForAll/i.test(String(y?.action||""))),k=null;if(v){let y=v.transaction||v.itemApprovalAction?.transaction,w=pu(y,{buyer:t,chainId:r,targets:new Set([n.contract])}),S;try{S=Xl.decodeFunctionData("setApprovalForAll",w.data)}catch{throw new Error("opensea: listing approval must be setApprovalForAll")}let N=U(S[0],"listing approval operator");if(S[1]!==!0||w.valueWei!==0n)throw new Error("opensea: listing approval must grant one exact operator with zero value");if(Xl.encodeFunctionData("setApprovalForAll",[N,!0]).toLowerCase()!==w.data.toLowerCase())throw new Error("opensea: listing approval calldata must be canonical");k={...w,operator:N}}return{protocolAddress:l,typedData:{domain:c,types:pt,primaryType:"OrderComponents",message:u},orderHash:g,priceWei:p,approval:k}}async function yr(e={},t={}){if(!ge(t))throw new Error("OPENSEA_API_KEY required");if(e.userConfirmed!==!0)throw new Error("opensea: userConfirmed=true required after NFT, marketplace, price, currency, and expiry review");let n=U(e.seller||e.address||e.owner,"seller"),r=Array.isArray(e.items)&&e.items.length?e.items:[e];if(r.length!==1)throw new Error("opensea: executable listing preparation supports exactly one NFT per envelope");let o=r.map(By);if(new Set(o.map(m=>m.chain)).size!==1)throw new Error("opensea: all prepared listing items must be on one chain");let i=e.useCreatorFee!==!1,s={address:n,items:o,use_creator_fee:i};e.taker&&(s.taker=U(e.taker,"taker"));let c=await b(`${Re(t)}/listings/actions`,{method:"POST",headers:Oe(t),body:s,fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3,retries:0,dedupe:!1}),{chainId:l}=ft(o[0].chain),u=$y(c,{seller:n,item:o[0],chainId:l}),d=u.approval?[u.approval]:[],p=d.length?await un(d,l,{...t,provider:e.provider||t.provider}):{simulated:!0};return P({provider:"opensea-nft",marketplace:"opensea",chain:o[0].chain,chainId:l,kind:"nft-list",action:"list",prepareReady:!0,executionReady:p.simulated===!0,signingReady:p.simulated===!0,broadcastReady:p.simulated===!0,requiresUserSignature:!0,requiresSeparateApproval:d.length>0,seller:n,contract:o[0].contract,tokenId:o[0].token_id,quantity:o[0].quantity,priceWei:u.priceWei.toString(),typedData:u.typedData,orderHash:u.orderHash,submission:{chain:o[0].chain,protocol:"seaport",protocolAddress:u.protocolAddress},transactions:d.map(ht),useCreatorFee:i,taker:s.taker||null,feeDisclosure:i?"Creator fees requested and bound into exact Seaport consideration recipients.":"Creator fees disabled by explicit request; every remaining consideration recipient is still bound.",...p})}async function gu(e={},t={}){if(e.userConfirmed!==!0)throw new Error("opensea: userConfirmed=true required for listing cancellation");let{chain:n,chainId:r}=ft(e.chain),o=U(e.seller||e.address||e.owner,"seller"),a=U(e.protocolAddress,"reviewed Seaport protocol address"),i=U(e.contract,"NFT contract"),s=mt(e.tokenId),c=br(e.quantity),l=e.typedData;if(!l||l.primaryType!=="OrderComponents"||!l.domain||!l.message)throw new Error("opensea: exact Seaport OrderComponents typedData required for cancellation");for(let[I,R]of Object.entries(pt)){let F=l.types?.[I];if(!Array.isArray(F)||F.length!==R.length||F.some((H,W)=>H?.name!==R[W].name||H?.type!==R[W].type))throw new Error("opensea: cancellation requires canonical Seaport types")}if(Object.keys(l.types||{}).filter(I=>I!=="EIP712Domain").sort().join(",")!==Object.keys(pt).sort().join(","))throw new Error("opensea: cancellation requires canonical Seaport types");let d=l.domain;if(d.name!=="Seaport"||d.version!=="1.6"||Number(d.chainId)!==r)throw new Error("opensea: cancellation domain mismatch");let p=U(d.verifyingContract,"Seaport cancellation target");if(p!==a)throw new Error("opensea: cancellation target mismatch");let m=l.message;if(U(m.offerer,"listing seller")!==o)throw new Error("opensea: cancellation seller mismatch");if(!Array.isArray(m.offer)||m.offer.length!==1||!Array.isArray(m.consideration)||!m.consideration.length)throw new Error("opensea: cancellation requires one exact previously prepared listing order");if(Number(m.orderType)!==2)throw new Error("opensea: cancellation requires a FULL_RESTRICTED listing order");let f=m.offer[0];if(![2,3].includes(Number(f.itemType)))throw new Error("opensea: cancellation offer must be ERC721 or ERC1155");if(U(f.token,"cancellation NFT contract")!==i)throw new Error("opensea: cancellation NFT contract mismatch");if(mt(f.identifierOrCriteria)!==s)throw new Error("opensea: cancellation tokenId mismatch");let h=re(f.startAmount,"cancellation offer startAmount",{positive:!0}),g=re(f.endAmount,"cancellation offer endAmount",{positive:!0});if(h!==BigInt(c)||g!==BigInt(c))throw new Error("opensea: cancellation quantity mismatch");for(let I of m.consideration){if(Number(I.itemType)!==0||U(I.token,"cancellation payment token")!==ga)throw new Error("opensea: cancellation requires native fixed-price consideration");let R=re(I.startAmount,"cancellation consideration startAmount",{positive:!0}),F=re(I.endAmount,"cancellation consideration endAmount",{positive:!0});if(R!==F)throw new Error("opensea: cancellation consideration must be fixed and positive");U(I.recipient,"cancellation consideration recipient")}let v=re(m.startTime,"cancellation startTime");if(re(m.endTime,"cancellation endTime",{positive:!0})<=v)throw new Error("opensea: cancellation listing time bounds invalid");let y=Zl.hashStruct("OrderComponents",pt,m),w=String(e.orderHash||"").trim().toLowerCase();if(!/^0x[0-9a-f]{64}$/.test(w)||w!==y.toLowerCase())throw new Error("opensea: cancellation order hash mismatch");let S=My.encodeFunctionData("cancel",[[m]]),N=[{from:o,to:p,data:S,value:"0x0",valueWei:0n,chainId:r}],C=await un(N,r,{...t,provider:e.provider||t.provider});if(C.simulated!==!0)throw new Error("opensea: cancellation RPC simulation required");return P({provider:"opensea-nft",marketplace:"opensea",kind:"nft-cancel",action:"cancel-listing",prepareReady:!0,chain:n,chainId:r,seller:o,contract:i,tokenId:s,quantity:c,protocolAddress:p,orderHash:y,typedData:{domain:d,types:pt,primaryType:"OrderComponents",message:m},transactions:N.map(ht),...C,requiresUserSignature:!0},{provider:"opensea-nft",kind:"nft-cancel"})}J();var yu=999;async function wu(e={}){let t={chainId:yu,rpc:null,dex:null};try{t.rpc=await rt(yu,e)}catch(n){t.rpc={ok:!1,error:String(n.message||n).slice(0,120)}}try{let n=await jt("HYPE",e),r=(n.pairs||[]).filter(o=>/hyper|hl|hyperevm/i.test(String(o.chainId||o.chain||"")));t.dex={ok:!0,hypePairs:r.length||(n.pairs||[]).length,sample:(r[0]||n.pairs?.[0])?.pairAddress||null}}catch(n){t.dex={ok:!1,error:String(n.message||n).slice(0,120)}}return{ok:!!(t.rpc?.ok||t.dex?.ok),...t}}async function vu(e="HYPE",t={}){let r=(await jt(e,t)).pairs||[],o=r.filter(a=>/hyper|hl|hyperevm/i.test(String(a.chainId||"")));return{query:e,hyperPairs:o,allPairs:r.slice(0,20),count:o.length||r.length}}async function xu(e,t={}){return qe(e,t)}_();var Fy="https://api-mainnet.magiceden.dev/v2",dn=1e9;function Su(e={}){return me({provider:"magiceden",defaultUrl:Fy,hosts:["api-mainnet.magiceden.dev","api-devnet.magiceden.dev"],url:e.baseUrl||process.env.MAGICEDEN_API_URL})}function gt(e={}){return Su(e).baseUrl}function ze(e={}){return e.apiKey||process.env.MAGICEDEN_API_KEY||""}function yt(e={}){let t=ze(e);return le({accept:"application/json"},{Authorization:t?`Bearer ${t}`:""},Su(e).trusted)}function xa(e){let t=String(e||"").trim();if(!/^[a-z0-9_]{1,64}$/i.test(t))throw new Error("magiceden: symbol must be a collection slug");return t}function bt(e,t){if(typeof e=="number"){if(!Number.isFinite(e)||e<=0)throw new Error(`magiceden: ${t} must be a positive number`);return e}let n=String(e??"").trim();if(!/^\d+(\.\d+)?$/.test(n))throw new Error(`magiceden: ${t} must be a plain decimal number (no hex, exponent, or sign)`);let r=Number(n);if(!Number.isFinite(r)||r<=0)throw new Error(`magiceden: ${t} must be a positive number`);return r}function qy(e){let t=[e?.price,e?.mintPrice,e?.priceSol,e?.v0?.price,e?.launchStageInfo?.price,e?.stage?.price];for(let n of t){if(n==null)continue;let r=Number(n);if(Number.isFinite(r)&&r>=0)return r}return e?.isFree===!0?0:null}function Hy(e){return Math.round(bt(e,"priceSol")*dn)}function Vy(e){if(e==null||e==="")throw new Error("magiceden: listing expiry is required and must be in the future");let t=Number(e);if(!Number.isSafeInteger(t)||t<=0)throw new Error("magiceden: expiry must be a future Unix timestamp in seconds");if(t<=Math.floor(Date.now()/1e3))throw new Error("magiceden: expiry must be in the future");return t}function Wy({tokenMint:e,priceSol:t,expiry:n}){return`list ${e} on magiceden-sol for ${t} SOL until ${n}`}function zy(e,t){if(e.userConfirmed!==!0)throw new Error("magiceden: listing requires userConfirmed=true after reviewing tokenMint, priceSol, and expiry");let n=Wy(t);if(String(e.confirmation||e.confirmationPhrase||"").trim()!==n)throw new Error(`magiceden: confirmation must equal ${JSON.stringify(n)}`);return n}async function ku(e={}){try{let t=await Sa({symbol:"mad_lads"},e);return{ok:!0,provider:"magiceden-sol",keyed:!!ze(e),readTier:"keyless",prepareTier:ze(e)?"keyed":"requires MAGICEDEN_API_KEY",floorPriceSol:t.floorPriceSol,exec:!1}}catch(t){return{ok:!1,provider:"magiceden-sol",keyed:!!ze(e),error:String(t?.message||t).slice(0,160),exec:!1}}}async function Sa(e={},t={}){let n=xa(e.symbol||e.collection),r=await b(`${gt(t)}/collections/${encodeURIComponent(n)}/stats`,{headers:yt(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3}),o=Number(r?.floorPrice??0);return{provider:"magiceden-sol",chain:"solana-mainnet-beta",symbol:n,floorPriceLamports:o||null,floorPriceSol:o?o/dn:null,listedCount:r?.listedCount??null,volume24hrSol:r?.volume24hr!=null?Number(r.volume24hr)/dn:null,avgPrice24hrSol:r?.avgPrice24hr!=null?Number(r.avgPrice24hr)/dn:null,exec:!1,raw:r}}function Eu(e={}){let t=Number(e.price??0);return{tokenMint:e.tokenMint??null,tokenATA:e.tokenAddress??null,seller:e.seller??null,sellerReferral:e.sellerReferral??null,auctionHouse:e.auctionHouse??null,pdaAddress:e.pdaAddress??null,priceSol:t||null,priceLamports:t?Math.round(t*dn):null,tokenSize:e.tokenSize??1}}async function Iu(e={},t={}){let n=xa(e.symbol||e.collection),r=Math.min(Math.max(Number(e.limit??20)||20,1),100),o=Math.max(Number(e.offset??0)||0,0),a=new URL(`${gt(t)}/collections/${encodeURIComponent(n)}/listings`);a.searchParams.set("offset",String(o)),a.searchParams.set("limit",String(r)),e.sort&&a.searchParams.set("sort",String(e.sort));let i=await b(a.toString(),{headers:yt(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3}),s=(Array.isArray(i)?i:[]).map(Eu);return{provider:"magiceden-sol",chain:"solana-mainnet-beta",symbol:n,count:s.length,listings:s,exec:!1}}async function Au(e={},t={}){let n=z(e.tokenMint||e.mint,"tokenMint"),r=await b(`${gt(t)}/tokens/${encodeURIComponent(n)}/listings`,{headers:yt(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3}),o=(Array.isArray(r)?r:[]).map(Eu);return{provider:"magiceden-sol",chain:"solana-mainnet-beta",tokenMint:n,listings:o,exec:!1}}async function _u(e={},t={}){if(!ze(t))throw new Error("magiceden: MAGICEDEN_API_KEY required to build a buy instruction");let n=z(e.buyer||e.userPublicKey,"buyer"),r=z(e.seller,"seller"),o=z(e.tokenMint,"tokenMint"),a=z(e.tokenATA||e.tokenAddress,"tokenATA"),i=z(e.auctionHouse,"auctionHouse"),s=bt(e.priceSol??e.price,"priceSol"),c=e.maxPriceSol==null?s:bt(e.maxPriceSol,"maxPriceSol");if(s>c)throw new Error(`magiceden: listing price ${s} SOL exceeds maxPriceSol cap ${c} SOL`);let l=new URL(`${gt(t)}/instructions/buy_now`);l.searchParams.set("buyer",n),l.searchParams.set("seller",r),l.searchParams.set("auctionHouseAddress",i),l.searchParams.set("tokenMint",o),l.searchParams.set("tokenATA",a),l.searchParams.set("price",String(s)),e.sellerReferral&&l.searchParams.set("sellerReferral",String(e.sellerReferral)),e.buyerReferral&&l.searchParams.set("buyerReferral",String(e.buyerReferral));let u=await b(l.toString(),{headers:yt(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3});Se("magiceden",u);let d=u?.v0?.tx?.data??u?.tx?.data??null;if(!Array.isArray(d))throw u?.txSigned?new Error("magiceden: refused a pre-signed transaction payload from the API"):new Error("magiceden: buy_now returned no unsigned transaction payload");let p=Buffer.from(d).toString("base64");return P({provider:"magiceden-sol",chain:"solana-mainnet-beta",kind:"nft-buy",prepareReady:!0,executionReady:!1,signingReady:!1,broadcastReady:!1,requiresUserSignature:!0,buyer:n,seller:r,tokenMint:o,priceSol:s,maxPriceSol:c,lamports:Hy(s),transaction:p,transactionEncoding:"base64",raw:u})}async function wr(e={},t={}){if(!ze(t))throw new Error("magiceden: MAGICEDEN_API_KEY required to build a list instruction");let n=z(e.seller||e.userPublicKey,"seller"),r=z(e.tokenMint,"tokenMint"),o=z(e.tokenATA||e.tokenAddress,"tokenATA"),a=z(e.auctionHouse,"auctionHouse"),i=bt(e.priceSol??e.price,"priceSol"),s=Vy(e.expiry),c=zy(e,{tokenMint:r,priceSol:i,expiry:s}),l=new URL(`${gt(t)}/instructions/sell`);l.searchParams.set("seller",n),l.searchParams.set("auctionHouseAddress",a),l.searchParams.set("tokenMint",r),l.searchParams.set("tokenAccount",o),l.searchParams.set("price",String(i)),e.sellerReferral&&l.searchParams.set("sellerReferral",z(e.sellerReferral,"sellerReferral")),s!=null&&l.searchParams.set("expiry",String(s));let u=await b(l.toString(),{headers:yt(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3});Se("magiceden",u);let d=u?.v0?.tx?.data??u?.tx?.data??null;if(!Array.isArray(d))throw u?.txSigned?new Error("magiceden: refused a pre-signed transaction payload from the API"):new Error("magiceden: sell returned no unsigned transaction payload");let p=Buffer.from(d).toString("base64");return P({provider:"magiceden-sol",chain:"solana-mainnet-beta",kind:"nft-list",prepareReady:!0,executionReady:!1,signingReady:!1,broadcastReady:!1,requiresUserSignature:!0,seller:n,tokenMint:r,priceSol:i,expiry:s,confirmation:c,transaction:p,transactionEncoding:"base64",raw:u})}async function Cu(e={},t={}){if(!ze(t))throw new Error("magiceden: MAGICEDEN_API_KEY required to build a mint instruction");let n=z(e.buyer||e.userPublicKey,"buyer"),r=xa(e.symbol||e.collection);if(e.maxPriceSol==null)throw new Error("magiceden: maxPriceSol is required to prepare a mint \u2014 an uncapped mint has no spend ceiling");let o=bt(e.maxPriceSol,"maxPriceSol"),a=e.nftAmount==null?1:bt(e.nftAmount,"nftAmount");if(!Number.isInteger(a))throw new Error("magiceden: nftAmount must be a whole number");let i=new URL(`${gt(t)}/instructions/mint`);i.searchParams.set("symbol",r),i.searchParams.set("wallet",n),i.searchParams.set("nftAmount",String(a));let s=await b(i.toString(),{headers:yt(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),c=qy(s);if(c==null)throw new Error("magiceden: mint price not present in the API response \u2014 refusing to prepare an unverifiable spend");let l=c*a;if(l>o)throw new Error(`magiceden: mint cost ${l} SOL exceeds maxPriceSol cap ${o} SOL`);Se("magiceden",s);let u=s?.v0?.tx?.data??s?.tx?.data??null;if(!Array.isArray(u))throw s?.txSigned?new Error("magiceden: refused a pre-signed transaction payload from the API"):new Error("magiceden: mint returned no unsigned transaction payload");let d=Buffer.from(u).toString("base64");return P({provider:"magiceden-sol",chain:"solana-mainnet-beta",kind:"nft-mint",prepareReady:!0,executionReady:!1,signingReady:!1,broadcastReady:!1,requiresUserSignature:!0,buyer:n,symbol:r,nftAmount:a,priceSol:c,totalSol:l,maxPriceSol:o,transaction:d,transactionEncoding:"base64",raw:s})}_();var wt=8,ka=10n**BigInt(wt),Gy="0xa4b1",Pu=7,Ea=1,Ky=2n**64n-1n;function Yy(e={}){return e.exchangeUrl?e.exchangeUrl:process.env.HL_EXCHANGE_URL?process.env.HL_EXCHANGE_URL:e.testnet||process.env.HL_TESTNET==="1"?"https://api.hyperliquid-testnet.xyz/exchange":"https://api.hyperliquid.xyz/exchange"}function mn(e={}){return e.testnet||process.env.HL_TESTNET==="1"?"Testnet":"Mainnet"}function xt(e,t){let n=String(e||"").trim();if(!/^0x[0-9a-fA-F]{40}$/.test(n))throw new Error(`hl-staking: ${t} must be a 0x EVM address`);return n.toLowerCase()}function pn(e,t="amount"){let n=String(e??"").trim();if(!/^\d+(\.\d+)?$/.test(n))throw new Error(`hl-staking: ${t} must be a positive decimal HYPE amount`);let[r,o=""]=n.split(".");if(o.length>wt)throw new Error(`hl-staking: ${t} has more than ${wt} decimals`);let a=BigInt(r)*ka+BigInt((o+"0".repeat(wt)).slice(0,wt)||"0");if(a<=0n)throw new Error(`hl-staking: ${t} must be greater than zero`);if(a>Ky)throw new Error(`hl-staking: ${t} exceeds the uint64 range the signed action encodes`);return a.toString()}function vt(e){let t=BigInt(e);return t<=BigInt(Number.MAX_SAFE_INTEGER)?Number(t):e}function ke(e){let t=BigInt(String(e||"0")),n=t/ka,r=(t%ka).toString().padStart(wt,"0").replace(/0+$/,"");return r?`${n}.${r}`:String(n)}async function Tu(e={}){try{let t=await Ia(e);return{ok:t.count>0,provider:"hl-staking",chain:mn(e),validators:t.count,exec:!1}}catch(t){return{ok:!1,provider:"hl-staking",error:String(t?.message||t).slice(0,160),exec:!1}}}async function Ia(e={}){let t=await V({type:"validatorSummaries"},e),r=(Array.isArray(t)?t:[]).map(o=>({validator:o.validator??null,name:o.name??null,isActive:o.isActive??null,isJailed:o.isJailed??null,commission:o.commission??null,stake:o.stake??null,nRecentBlocks:o.nRecentBlocks??null}));return{provider:"hl-staking",count:r.length,validators:r,exec:!1,raw:t}}async function Aa(e={},t={}){let n=xt(e.user||e.address,"user"),r=await V({type:"delegatorSummary",user:n},t);return{provider:"hl-staking",user:n,delegatedWei:r?.delegated??null,undelegatedWei:r?.undelegated??null,totalPendingWithdrawalWei:r?.totalPendingWithdrawal??null,nPendingWithdrawals:r?.nPendingWithdrawals??null,delegatedHype:r?.delegated!=null?String(r.delegated):null,undelegatedHype:r?.undelegated!=null?String(r.undelegated):null,exec:!1,raw:r}}async function _a(e={},t={}){let n=xt(e.user||e.address,"user"),r=await V({type:"delegations",user:n},t),o=Array.isArray(r)?r:[];return{provider:"hl-staking",user:n,count:o.length,delegations:o.map(a=>({validator:a.validator??null,amount:a.amount??null,lockedUntilTimestamp:a.lockedUntilTimestamp??null})),exec:!1,raw:r}}async function Nu(e={},t={}){let n=xt(e.user||e.address,"user"),r=await V({type:"delegatorRewards",user:n},t);return{provider:"hl-staking",user:n,rewards:Array.isArray(r)?r:[],exec:!1}}async function Ru(e={},t={}){let n=xt(e.user||e.address,"user"),r=await V({type:"delegatorHistory",user:n},t);return{provider:"hl-staking",user:n,history:Array.isArray(r)?r:[],exec:!1}}function Ca(e={}){let t=e.nonce==null?Date.now():Number(e.nonce);if(!Number.isInteger(t)||t<=0)throw new Error("hl-staking: nonce must be a positive integer ms timestamp");return t}function vr(e={}){return String(e.signatureChainId||process.env.HL_SIGNATURE_CHAIN_ID||Gy)}function Jy(e={}){return{name:"HyperliquidSignTransaction",version:"1",chainId:Number(BigInt(vr(e))),verifyingContract:"0x0000000000000000000000000000000000000000"}}function Pa({kind:e,action:t,types:n,primaryType:r,message:o,opts:a,notes:i,caps:s}){return P({provider:"hl-staking",venue:"hypercore",chain:mn(a),kind:e,prepareReady:!0,executionReady:!1,signingReady:!1,broadcastReady:!1,requiresUserSignature:!0,signWith:"user wallet (EIP-712 typed data)",submitTo:Yy(a),submitShape:{action:t,nonce:t.nonce,signature:"<user 65-byte signature>"},action:t,typedData:{domain:Jy(a),types:n,primaryType:r,message:o},caps:s||null,notes:i,exec:!1},{provider:"hl-staking",kind:e})}function Ou(e={},t={}){let n=pn(e.amountHype??e.amount,"amountHype"),r=e.maxHype==null?null:pn(e.maxHype,"maxHype");if(r&&BigInt(n)>BigInt(r))throw new Error(`hl-staking: amount ${ke(n)} HYPE exceeds maxHype cap ${ke(r)} HYPE`);let o=Ca(e),a=mn(t),i={type:"cDeposit",hyperliquidChain:a,signatureChainId:vr(t),wei:vt(n),nonce:o};return Pa({kind:"hype-stake-deposit",action:i,primaryType:"HyperliquidTransaction:CDeposit",types:{"HyperliquidTransaction:CDeposit":[{name:"hyperliquidChain",type:"string"},{name:"wei",type:"uint64"},{name:"nonce",type:"uint64"}]},message:{hyperliquidChain:a,wei:vt(n),nonce:o},opts:t,caps:{amountHype:ke(n),maxHype:r?ke(r):null},notes:["Moves HYPE from your Hyperliquid spot balance into your staking balance.","Staking balance still earns nothing until it is delegated to a validator.","Oracle prepared this. Your wallet signs it. Nothing was submitted."]})}function Lu(e={},t={}){let n=pn(e.amountHype??e.amount,"amountHype"),r=Ca(e),o=mn(t),a={type:"cWithdraw",hyperliquidChain:o,signatureChainId:vr(t),wei:vt(n),nonce:r};return Pa({kind:"hype-stake-withdraw",action:a,primaryType:"HyperliquidTransaction:CWithdraw",types:{"HyperliquidTransaction:CWithdraw":[{name:"hyperliquidChain",type:"string"},{name:"wei",type:"uint64"},{name:"nonce",type:"uint64"}]},message:{hyperliquidChain:o,wei:vt(n),nonce:r},opts:t,caps:{amountHype:ke(n)},notes:[`Starts the ${Pu} day unstaking queue back to spot. The HYPE is not liquid during the queue.`,"Undelegate from the validator first: only undelegated staking balance can be withdrawn.","Oracle prepared this. Your wallet signs it. Nothing was submitted."]})}function Bu(e={},t={}){let n=xt(e.validator,"validator"),r=pn(e.amountHype??e.amount,"amountHype"),o=!!(e.isUndelegate??e.undelegate??!1),a=e.maxHype==null?null:pn(e.maxHype,"maxHype");if(!o&&a&&BigInt(r)>BigInt(a))throw new Error(`hl-staking: delegate amount ${ke(r)} HYPE exceeds maxHype cap ${ke(a)} HYPE`);let i=Ca(e),s=mn(t),c={type:"tokenDelegate",hyperliquidChain:s,signatureChainId:vr(t),validator:n,wei:vt(r),isUndelegate:o,nonce:i};return Pa({kind:o?"hype-undelegate":"hype-delegate",action:c,primaryType:"HyperliquidTransaction:TokenDelegate",types:{"HyperliquidTransaction:TokenDelegate":[{name:"hyperliquidChain",type:"string"},{name:"validator",type:"address"},{name:"wei",type:"uint64"},{name:"isUndelegate",type:"bool"},{name:"nonce",type:"uint64"}]},message:{hyperliquidChain:s,validator:n,wei:vt(r),isUndelegate:o,nonce:i},opts:t,caps:{amountHype:ke(r),maxHype:a?ke(a):null,validator:n},notes:o?["Returns stake from the validator to your staking balance.",`Delegations carry a ${Ea} day validator lockup before they can be undelegated.`,"Oracle prepared this. Your wallet signs it. Nothing was submitted."]:["Delegates staking balance to the chosen validator so it starts earning.",`Once delegated, the stake is locked with that validator for ${Ea} day.`,"Check the validator's commission and jail status before delegating.","Oracle prepared this. Your wallet signs it. Nothing was submitted."]})}async function Mu(e={},t={}){let n=xt(e.user||e.address,"user"),r=await Aa({user:n},t),o=await _a({user:n},t);return{provider:"hl-staking",user:n,stakingBalanceUndelegated:r.undelegatedWei,stakingBalanceDelegated:r.delegatedWei,pendingWithdrawals:r.nPendingWithdrawals,delegations:o.delegations,unstakingQueueDays:Pu,validatorLockupDays:Ea,exec:!1}}async function Ta(e={}){let t=Date.now();try{let n=await ve(e);return{provider:"hl-markets",ok:!0,venue:"hyperliquid",symbols:Object.keys(n||{}).length,latencyMs:Date.now()-t}}catch(n){return{provider:"hl-markets",ok:!1,error:String(n?.message||n),latencyMs:Date.now()-t}}}var Qy=24*365,Zy=8;function Z(e){if(e==null)return null;let t=Number(e);return Number.isFinite(t)?t:null}function ew(e,t){return e==null||t==null||t===0?null:(e-t)/t*100}async function xr(e={},t={}){let[n,r]=await Promise.all([st(t),ve(t).catch(()=>({}))]),o=n?.[0]?.universe??n?.universe??[],a=Array.isArray(n?.[1])?n[1]:[],s=o.map((c,l)=>{let u=a[l]||{},d=Z(u.markPx),p=Z(u.prevDayPx),m=Z(u.openInterest),f=Z(u.funding);return{coin:c.name,index:l,markPx:d,oraclePx:Z(u.oraclePx),midPx:Z(u.midPx)??Z(r?.[c.name]),prevDayPx:p,change24hPct:ew(d,p),dayNtlVolumeUsd:Z(u.dayNtlVlm),premium:Z(u.premium),fundingRate:f,fundingRateAprPct:f==null?null:f*(Qy/Zy)*100,openInterestCoin:m,openInterestUsd:m==null||d==null?null:m*d,maxLeverage:c.maxLeverage??null,szDecimals:c.szDecimals??null,isDelisted:!!c.isDelisted}}).filter(c=>!c.isDelisted);return{provider:"hl-info",venue:"hyperliquid",kind:"market-datapoints",asOfMs:Date.now(),count:s.length,markets:s,totals:{openInterestUsd:s.reduce((c,l)=>c+(l.openInterestUsd||0),0),dayNtlVolumeUsd:s.reduce((c,l)=>c+(l.dayNtlVolumeUsd||0),0)}}}async function $u(e={},t={}){let n=Math.max(1,Math.min(Number(e.limit)||10,50)),{markets:r,asOfMs:o,totals:a}=await xr(e,t),i=(s,c=-1)=>r.filter(l=>l[s]!=null).sort((l,u)=>(l[s]-u[s])*c).slice(0,n);return{provider:"hl-info",venue:"hyperliquid",kind:"leaderboards",asOfMs:o,totals:a,gainers:i("change24hPct"),losers:i("change24hPct",1),byVolume:i("dayNtlVolumeUsd"),byOpenInterest:i("openInterestUsd"),fundingHighest:i("fundingRateAprPct"),fundingLowest:i("fundingRateAprPct",1)}}async function Uu(e={},t={}){let n=String(e.coin||e.symbol||"").trim().toUpperCase();if(!n)throw new Error("hl-markets: coin required");let r=String(e.interval||"1h"),o=Number(e.lookbackMs)||1440*60*1e3,a=Date.now(),i=a-o,[s,c,l]=await Promise.all([xr({},t),jn({coin:n,interval:r,startTime:i,endTime:a},t).catch(()=>[]),Wn(n,t).catch(()=>null)]),u=s.markets.find(h=>h.coin===n)||null;if(!u)throw new Error(`hl-markets: ${n} is not a listed perp`);let d=(Array.isArray(c)?c:[]).map(h=>({t:Number(h.t),open:Z(h.o),high:Z(h.h),low:Z(h.l),close:Z(h.c),volume:Z(h.v)})),p=l?.levels??[],m=Z(p?.[0]?.[0]?.px),f=Z(p?.[1]?.[0]?.px);return{provider:"hl-info",venue:"hyperliquid",kind:"coin-datapoints",asOfMs:Date.now(),coin:n,market:u,book:{bestBid:m,bestAsk:f,spread:m==null||f==null?null:f-m,spreadBps:m==null||f==null||f===0?null:(f-m)/f*1e4},candles:{interval:r,count:d.length,series:d}}}async function Du(e={},t={}){let n=await Kn(t),r=n?.tokens??[],o=n?.universe??[];return{provider:"hl-info",venue:"hyperliquid",kind:"spot-datapoints",asOfMs:Date.now(),tokenCount:r.length,pairCount:o.length,tokens:r.map(a=>({name:a.name,index:a.index,szDecimals:a.szDecimals??null,weiDecimals:a.weiDecimals??null,tokenId:a.tokenId??null,isCanonical:!!a.isCanonical})),pairs:o.map(a=>({name:a.name,index:a.index,tokens:a.tokens,isCanonical:!!a.isCanonical}))}}var Vu=1e8,nw=1e5,fn={at:0,dexs:null},Fu=new Map;async function qu(e={}){let t=Date.now();if(fn.dexs&&t-fn.at<6e4&&!e.fetchImpl)return fn.dexs;let n=await V({type:"perpDexs"},e);return fn={at:t,dexs:Array.isArray(n)?n:[]},fn.dexs}async function Hu(e="",t={}){let n=e||"",r=Date.now(),o=Fu.get(n);if(o&&r-o.at<3e4&&!t.fetchImpl)return o;let a=e?await V({type:"metaAndAssetCtxs",dex:e},t):await st(t),i=a?.[0]?.universe??a?.universe??[],s=Array.isArray(a?.[1])?a[1]:[],c={at:r,universe:i,ctxs:s};return Fu.set(n,c),c}function rw(e){let t=String(e||"").trim(),n;if(t.startsWith("#"))n=Number(t.slice(1));else if(/^\d+$/.test(t))n=Number(t);else return null;if(!Number.isInteger(n)||n<0)return null;let r=n%10;if(r!==0&&r!==1)return null;let o=Math.floor(n/10);return{encoding:n,outcome:o,side:r,coin:`#${n}`,assetId:Vu+n}}function Sr(e,t){let n=Number(e),r=Number(t);if(!Number.isInteger(n)||n<0)throw new Error("hl-assets: outcome id must be a non-negative integer");if(r!==0&&r!==1)throw new Error("hl-assets: outcome side must be 0 or 1");let o=10*n+r;return{encoding:o,outcome:n,side:r,coin:`#${o}`,assetId:Vu+o}}async function Na(e={},t={}){if(e.outcome!=null||e.coin&&String(e.coin).startsWith("#")){let l=e.outcome!=null?Sr(e.outcome,e.side??e.outcomeSide??0):rw(e.coin);if(!l)throw new Error(`hl-assets: invalid outcome coin ${e.coin}`);let u=e.szDecimals!=null?Number(e.szDecimals):2;return{kind:"outcome",coin:l.coin,assetId:l.assetId,encoding:l.encoding,outcome:l.outcome,side:l.side,szDecimals:u,maxLeverage:1,dex:null,markPx:null}}let n=String(e.coin||e.symbol||e.name||"").trim();if(!n)throw new Error("hl-assets: coin required");if(n.includes(":")){let[l,...u]=n.split(":"),d=u.join(":");if(!l||!d)throw new Error(`hl-assets: bad builder coin ${n}`);let m=(await qu(t)).findIndex(w=>w&&w.name===l);if(m<1)throw new Error(`hl-assets: unknown builder dex "${l}"`);let{universe:f,ctxs:h}=await Hu(l,t),g=f.findIndex(w=>w.name===n||w.name===`${l}:${d}`||w.name.endsWith(`:${d}`));if(g<0)throw new Error(`hl-assets: ${n} not in dex ${l} meta`);let v=f[g];if(v.isDelisted)throw new Error(`hl-assets: ${n} is delisted`);let k=nw+m*1e4+g,y=h[g]||{};return{kind:"hip3",coin:v.name||n,assetId:k,szDecimals:v.szDecimals??0,maxLeverage:v.maxLeverage??null,dex:l,dexIndex:m,indexInMeta:g,markPx:y.markPx??null}}let{universe:r,ctxs:o}=await Hu("",t),a=n.toUpperCase(),i=r.findIndex(l=>l.name===a);if(i<0){if(t.allowBareBuilderLeaf===!0)try{let l=await qu(t);for(let u=1;u<l.length;u++){let d=l[u];if(!d?.name)continue;let p=`${d.name}:${a}`;try{return await Na({coin:p},t)}catch{}}}catch{}throw new Error(`hl-perps: ${a} is not a listed perp`)}let s=r[i];if(s.isDelisted)throw new Error(`hl-assets: ${a} is delisted`);let c=o[i]||{};return{kind:"main",coin:s.name,assetId:i,szDecimals:s.szDecimals??0,maxLeverage:s.maxLeverage??null,dex:"",markPx:c.markPx??null}}function Wu(e,t,n="amount"){let r=String(e??"").trim();if(!/^-?\d*(\.\d+)?$/.test(r)||r===""||r==="."||r==="-")throw new Error(`${n} must be a decimal number, got ${JSON.stringify(r)}`);let o=r.startsWith("-"),a=o?r.slice(1):r,[i="0",s=""]=a.split(".");if(s.length>t)throw new Error(`${n} has more than ${t} decimal places, which would lose precision`);let c=BigInt((i||"0")+s.padEnd(t,"0"));return o?-c:c}var ow=5,aw=6,Gu="0x66eee";var zu=10,Ra="ORACLE_HL_BUILDER_ADDRESS",ju="ORACLE_HL_BUILDER_FEE_BPS",kr=Object.freeze({perp:2,spot:1,hip3:1,hip4:1}),ie=Object.freeze({LIMIT:"limit",MARKET:"market",STOP_MARKET:"stopMarket",STOP_LIMIT:"stopLimit",TAKE_PROFIT_MARKET:"takeProfitMarket",TAKE_PROFIT_LIMIT:"takeProfitLimit"}),Ir=Object.freeze({GTC:"Gtc",IOC:"Ioc",ALO:"Alo"}),Er=Object.freeze({CROSS:"cross",ISOLATED:"isolated"});function iw(e="perp"){if(e==="perp"||e==="main")return kr.perp;if(e==="spot")return kr.spot;if(e==="hip3")return kr.hip3;if(e==="outcome"||e==="hip4")return kr.hip4;throw new Error(`hl-perps: unknown builder fee kind ${e}`)}function Ku({env:e=process.env,isHolder:t=!1,kind:n="perp"}={}){if(t)return null;let r=String(e?.[Ra]||"").trim().toLowerCase();if(!r)return null;if(!/^0x[a-f0-9]{40}$/.test(r))throw new Error(`hl-perps: ${Ra} must be an EVM address`);let o=ta(e);if(!o||o!==r)return null;let a=e?.[ju],i=iw(n),s=a==null?i:Number(a);if(!Number.isFinite(s)||s<=0||Math.abs(s*10-Math.round(s*10))>1e-9)throw new Error(`hl-perps: ${ju} must be a positive number in 0.1 bps increments`);if(s>zu)throw new Error(`hl-perps: builder fee ${s} bps exceeds the ${zu} bps cap`);if(s>i)throw new Error(`hl-perps: builder fee ${s} bps exceeds the ${i} bps product tier for ${n}`);let c=Math.round(s*10),l=(c/1e3).toFixed(3).replace(/0+$/,"").replace(/\.$/,"");return{wire:{b:r,f:c},disclosure:{address:r,bps:s,percent:`${l}%`}}}async function sw(e,t={},n={}){if(!e)return{approved:!1,approvedFeeBps:0,status:"not-configured"};let r=String(t.user||n.user||"").trim().toLowerCase();if(!/^0x[a-f0-9]{40}$/.test(r))return{approved:!1,approvedFeeBps:0,status:"wallet-required"};try{let o=Number(await V({type:"maxBuilderFee",user:r,builder:e.disclosure.address},n));return!Number.isInteger(o)||o<0?{approved:!1,approvedFeeBps:0,status:"invalid-response"}:{approved:o>=e.wire.f,approvedFeeBps:o/10,status:o>=e.wire.f?"approved":"insufficient"}}catch{return{approved:!1,approvedFeeBps:0,status:"unavailable"}}}async function cw(e,t={},n={}){if(!e)return{exempt:!1,status:"not-configured"};let r=String(t.user||n.user||"").trim().toLowerCase();if(!/^0x[a-f0-9]{40}$/.test(r))return{exempt:!1,status:"wallet-required"};try{let o=n.holderBalance||sr;return BigInt(await o(r))>0n?{exempt:!0,status:"holder"}:{exempt:!1,status:"non-holder"}}catch{return{exempt:!1,status:"unavailable"}}}function La(e,t,{roundDown:n=null}={}){let r=typeof e=="number"?e.toFixed(Math.min(20,t+8)):String(e).trim();if(!/^-?\d+(\.\d+)?$/.test(r))throw new Error(`hl-perps: "${e}" is not a decimal number`);let o=r.startsWith("-"),[a,i=""]=r.replace(/^-/,"").split(".");if(i.length<=t){let f=i.replace(/0+$/,"");return(o?"-":"")+(f?`${a}.${f}`:a)}let s=i.slice(0,t),c=Number(i[t]),l=BigInt(a+s),u=i.slice(t).replace(/0+$/,"")!=="";n===!0||(n===!1?u&&(l+=1n):c>=5&&(l+=1n));let d=l.toString().padStart(t+1,"0"),m=(t===0?d:`${d.slice(0,-t)}.${d.slice(-t)}`).replace(/(\.\d*?)0+$/,"$1").replace(/\.$/,"");return(o?"-":"")+m}function lw(e,t,n={}){let r=String(e);if(!r.includes("."))return r;let o=Number(r);if(!Number.isFinite(o)||o===0)return r;let a=Math.floor(Math.log10(Math.abs(o))),i=Math.max(0,t-1-a);return La(r,i,n)}function Le(e,t,n={}){let r=aw-Number(t??0);if(r<0)throw new Error("hl-perps: szDecimals out of range");return La(lw(e,ow,n),r,n)}function uw(e,t){let n=La(e,Number(t??0));if(BigInt(n.split(".")[0])<0n)throw new Error("hl-perps: size must be positive");if(Number(n)<=0)throw new Error("hl-perps: size rounds to zero at this asset's precision");return n}async function je(e={},t={}){let n=await Na(e,t);return{coin:n.coin,assetId:n.assetId,szDecimals:n.szDecimals,maxLeverage:n.maxLeverage,markPx:n.markPx,kind:n.kind,dex:n.dex??null,outcome:n.outcome??null,side:n.side??null}}function Oa(e,{tif:t=Ir.GTC,triggerPx:n,isMarket:r,szDecimals:o}={}){switch(e){case ie.LIMIT:return{limit:{tif:t}};case ie.MARKET:return{limit:{tif:Ir.IOC}};case ie.STOP_MARKET:case ie.TAKE_PROFIT_MARKET:return{trigger:{isMarket:!0,triggerPx:Le(n,o),tpsl:e===ie.STOP_MARKET?"sl":"tp"}};case ie.STOP_LIMIT:case ie.TAKE_PROFIT_LIMIT:return{trigger:{isMarket:!1,triggerPx:Le(n,o),tpsl:e===ie.STOP_LIMIT?"sl":"tp"}};default:throw new Error(`hl-perps: unknown order type ${e}`)}}function St(e,t){return{action:e,nonce:t,signatureChainId:Gu,submitTo:"https://api.hyperliquid.xyz/exchange",note:"Sign locally via @oracle-agent/operator or a wallet. Oracle does not submit."}}function kt(e){return P(e,{provider:e.provider||"hl-perps",kind:e.kind})}function Yu(e={},t={}){let n=Ku({env:t.env});if(!n)throw new Error(`hl-perps: ${Ra} is required`);let r=Number(e.nonce??t.nonce??Date.now());if(!Number.isSafeInteger(r)||r<=0)throw new Error("hl-perps: nonce must be a positive integer");let o={type:"approveBuilderFee",hyperliquidChain:t.testnet||process.env.HL_TESTNET==="1"?"Testnet":"Mainnet",signatureChainId:Gu,maxFeeRate:n.disclosure.percent,builder:n.disclosure.address,nonce:r};return kt({provider:"hl-perps",venue:"hyperliquid",kind:"builder-fee-approval",builderFee:n.disclosure,...St(o,r)})}async function hn(e={},t={}){let n=await je(e,t),r=String(e.type||ie.LIMIT),o=e.side?String(e.side).toLowerCase()==="buy":!!e.isBuy,a=!!e.reduceOnly,i=uw(e.size??e.sz,n.szDecimals),s;if(r===ie.MARKET){let k=Number(n.markPx);if(!Number.isFinite(k)){let N=await ve(t);k=Number(N?.[n.coin]??N?.[String(n.assetId)]??NaN)}if(!Number.isFinite(k))throw new Error("hl-perps: no mark price available for a market order");let y=Number(e.maxSlippageBps??50);if(!Number.isInteger(y)||y<0)throw new Error("hl-perps: maxSlippageBps must be a non-negative integer");if(y>100)throw new Error(`hl-perps: maxSlippageBps ${y} exceeds the hard 100 bps cap`);let w=o?k*(1+y/1e4):k*(1-y/1e4);s=Le(w,n.szDecimals,{roundDown:o});let S=Math.abs(Number(s)/k-1)*1e4;if(S>y+1e-9)throw new Error(`hl-perps: tick rounding makes the limit ${S.toFixed(2)} bps from mark, above the ${y} bps cap`)}else{if(e.price==null&&e.limitPx==null)throw new Error("hl-perps: a limit order requires an explicit price");s=Le(e.price??e.limitPx,n.szDecimals)}let c=Oa(r,{tif:e.tif??(r===ie.MARKET?Ir.IOC:Ir.GTC),triggerPx:e.triggerPx,szDecimals:n.szDecimals}),l={a:n.assetId,b:o,p:s,s:i,r:a,t:c};e.clientOrderId&&(l.c=String(e.clientOrderId));let u={type:"order",orders:[l],grouping:e.grouping||"na"},d=Ku({env:t.env,kind:n.kind}),p=await cw(d,e,t),m=p.exempt?null:d,f=await sw(m,e,t),h=f.approved?m:null;h&&(u.builder=h.wire);let g=Number(e.nonce??Date.now()),v=Number(s)*Number(i);return kt({provider:"hl-perps",venue:"hyperliquid",kind:n.kind==="outcome"?"hip4-order":n.kind==="hip3"?"hip3-order":"perp-order",coin:n.coin,assetId:n.assetId,assetKind:n.kind,outcome:n.outcome??null,outcomeSide:n.side??null,dex:n.dex??null,side:o?"buy":"sell",orderType:r,price:s,size:i,reduceOnly:a,notionalUsd:Number.isFinite(v)?v:null,maxLeverage:n.maxLeverage,markPx:n.markPx,builderFee:h?.disclosure??null,holderExempt:p.exempt,holderVerificationStatus:p.status,builderApprovalRequired:m&&!h?{...d.disclosure,...f}:null,...St(u,g)})}async function Ar(e={},t={}){let n=await je(e,t),r=e.orderId??e.oid;if(r==null)throw new Error("hl-perps: orderId required");let o={type:"cancel",cancels:[{a:n.assetId,o:Number(r)}]};return kt({provider:"hl-perps",venue:"hyperliquid",kind:"perp-cancel",coin:n.coin,orderId:Number(r),...St(o,Number(e.nonce??Date.now()))})}async function Ju(e={},t={}){let n=await je(e,t),r=Number(e.leverage);if(!Number.isInteger(r)||r<1)throw new Error("hl-perps: leverage must be a positive integer");if(n.maxLeverage!=null&&r>n.maxLeverage)throw new Error(`hl-perps: ${n.coin} allows at most ${n.maxLeverage}x, requested ${r}x`);let o=String(e.marginMode||Er.CROSS).toLowerCase();if(o!==Er.CROSS&&o!==Er.ISOLATED)throw new Error('hl-perps: marginMode must be "cross" or "isolated"');let a={type:"updateLeverage",asset:n.assetId,isCross:o===Er.CROSS,leverage:r};return kt({provider:"hl-perps",venue:"hyperliquid",kind:"perp-leverage",coin:n.coin,leverage:r,marginMode:o,maxLeverage:n.maxLeverage,liquidationWarning:r>=20?`${r}x liquidates on roughly a ${(100/r).toFixed(2)}% adverse move before fees`:null,...St(a,Number(e.nonce??Date.now()))})}async function Xu(e={},t={}){let n=await je(e,t),r=e.usd??e.amountUsd;if(r==null)throw new Error("hl-perps: usd amount required");let o=String(r).trim();if(!/^-?\d+(\.\d+)?$/.test(o))throw new Error("hl-perps: usd must be a decimal number");let a=Wu(o,6,"hl-perps: usd"),i={type:"updateIsolatedMargin",asset:n.assetId,isBuy:!0,ntli:a<=BigInt(Number.MAX_SAFE_INTEGER)?Number(a):a.toString()};return kt({provider:"hl-perps",venue:"hyperliquid",kind:"perp-isolated-margin",coin:n.coin,usd:o,...St(i,Number(e.nonce??Date.now()))})}async function Qu(e={},t={}){let n=await hn(e,t),r=await je(e,t),o=n.side==="buy",a=[n.action.orders[0]];if(e.takeProfitPx!=null&&a.push({a:r.assetId,b:!o,p:Le(e.takeProfitPx,r.szDecimals),s:n.size,r:!0,t:Oa(ie.TAKE_PROFIT_MARKET,{triggerPx:e.takeProfitPx,szDecimals:r.szDecimals})}),e.stopLossPx!=null&&a.push({a:r.assetId,b:!o,p:Le(e.stopLossPx,r.szDecimals),s:n.size,r:!0,t:Oa(ie.STOP_MARKET,{triggerPx:e.stopLossPx,szDecimals:r.szDecimals})}),a.length===1)throw new Error("hl-perps: a bracket needs takeProfitPx and/or stopLossPx");let i={type:"order",orders:a,grouping:"normalTpsl",...n.action.builder?{builder:n.action.builder}:{}};return kt({provider:"hl-perps",venue:"hyperliquid",kind:"perp-bracket",coin:r.coin,legs:a.length,entry:{side:n.side,price:n.price,size:n.size},takeProfitPx:e.takeProfitPx==null?null:Le(e.takeProfitPx,r.szDecimals),stopLossPx:e.stopLossPx==null?null:Le(e.stopLossPx,r.szDecimals),builderFee:n.builderFee,...St(i,Number(e.nonce??Date.now()))})}async function Zu(e={}){let t=await Xt(e);return{provider:"hl-outcome",kind:"outcome-meta",outcomes:t?.outcomes||[],questions:t?.questions||[]}}async function ed(e={},t={}){let n=e.coin,r=e.outcome,o=e.side;if(typeof o=="string"){let i=o.toLowerCase();i==="yes"||i==="0"?o=0:(i==="no"||i==="1")&&(o=1)}if(e.sideName&&r!=null){let s=((await Xt(t))?.outcomes||[]).find(c=>Number(c.outcome)===Number(r));if(s?.sideSpecs){let c=s.sideSpecs.findIndex(l=>String(l.name).toLowerCase()===String(e.sideName).toLowerCase());c>=0&&(o=c)}}if(!n){if(r==null||o==null)throw new Error("hl-outcome: provide coin (#N) or outcome + side (0/1 or yes/no)");n=Sr(r,o).coin}let a=await hn({...e,coin:n},t);return P({...a,kind:"hip4-order",provider:"hl-perps"},{provider:"hl-perps",kind:"hip4-order"})}async function td(e={},t={}){let n=e.coin;if(!n&&e.outcome!=null){let r=e.side??0;n=Sr(e.outcome,r).coin}return Ar({...e,coin:n},t)}import{createHmac as z_,randomInt as mw}from"node:crypto";import{keccak256 as G_,concat as K_,zeroPadValue as Y_,getCreate2Address as J_,AbiCoder as X_}from"ethers";var id=137;var fw="0xE111180000d2663C0091e4f400237545B87B996B",hw="0xe2222d279d744050d28e00520010520000310F59",nd="0x0000000000000000000000000000000000000000000000000000000000000000",Ba=6;var bw={name:"Polymarket CTF Exchange",version:"2",chainId:id},gw={Order:[{name:"salt",type:"uint256"},{name:"maker",type:"address"},{name:"signer",type:"address"},{name:"tokenId",type:"uint256"},{name:"makerAmount",type:"uint256"},{name:"takerAmount",type:"uint256"},{name:"side",type:"uint8"},{name:"signatureType",type:"uint8"},{name:"timestamp",type:"uint256"},{name:"metadata",type:"bytes32"},{name:"builder",type:"bytes32"}]},rd={"0.1":{price:1,size:2,amount:3},"0.01":{price:2,size:2,amount:4},"0.001":{price:3,size:2,amount:5},"0.0001":{price:4,size:2,amount:6}};function _r(e){let t=String(e);return t.includes(".")?t.split(".")[1].replace(/0+$/,"").length:0}function Cr(e,t){let n=10**t;return Math.floor(e*n+1e-12)/n}function od(e,t){let n=10**t;return Math.ceil(e*n-1e-12)/n}function yw(e,t){let n=10**t;return Math.round(e*n+Number.EPSILON)/n}function ww(e,t,n,r){let o=yw(Number(n),r.price);if(e==="BUY"){let c=Cr(Number(t),r.size),l=c*o;return _r(l)>r.amount&&(l=od(l,r.amount+4),_r(l)>r.amount&&(l=Cr(l,r.amount))),{rawMakerAmt:l,rawTakerAmt:c}}let i=Cr(Number(t),r.size),s=i*o;return _r(s)>r.amount&&(s=od(s,r.amount+4),_r(s)>r.amount&&(s=Cr(s,r.amount))),{rawMakerAmt:i,rawTakerAmt:s}}function ad(e){let t=Number(e).toFixed(Ba),[n,r=""]=t.split(".");return(n+r.padEnd(Ba,"0").slice(0,Ba)).replace(/^0+/,"")||"0"}function vw(e={}){let{tokenId:t,side:n,price:r,size:o,maker:a,signer:i,negRisk:s=!1,tickSize:c="0.01",orderType:l="GTC",signatureType:u=0,metadata:d=nd,builder:p=nd}=e;if(!t)throw new Error("tokenId required");if(n!=="BUY"&&n!=="SELL")throw new Error("side must be BUY or SELL");if(!a||!i)throw new Error("maker and signer required");let m=Number(r),f=Number(o);if(!(m>0&&m<1))throw new Error(`price out of (0,1): ${r}`);if(!(f>0))throw new Error(`size must be > 0: ${o}`);if(![0,3].includes(Number(u)))throw new Error(`Desk poly supports signatureType 0 (EOA) or 3 (deposit wallet), got ${u}`);let h=rd[String(c)]||rd["0.01"],{rawMakerAmt:g,rawTakerAmt:v}=ww(n,f,m,h),k=ad(g),y=ad(v),w=String(mw(1,2**31-1)),S=Date.now().toString(),N=n==="BUY"?0:1,C=s?hw:fw,I={salt:w,maker:a,signer:i,tokenId:String(t),makerAmount:k,takerAmount:y,side:N,signatureType:Number(u),timestamp:S,metadata:d,builder:p};return{domain:{...bw,verifyingContract:C},types:gw,value:I,orderType:l,side:n,notionalUsdc:n==="BUY"?g:v,exchange:C}}function sd(e={}){let t=vw(e);return P({provider:"poly-clob",kind:"poly-order",chainId:id,tokenId:String(e.tokenId),side:t.side,orderType:t.orderType,notionalUsdc:t.notionalUsdc,exchange:t.exchange,domain:t.domain,types:t.types,value:t.value,tickSize:e.tickSize||"0.01",negRisk:!!e.negRisk,signatureType:Number(e.signatureType??0),maxNotionalUsdc:e.maxNotionalUsdc??null},{provider:"poly-clob",kind:"poly-order"})}import{ContractFactory as Hw,keccak256 as vd}from"ethers";import{wordlists as Sw}from"ethers";var kw=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),Ew=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],Iw=new Set([12,15,18,21,24]);function Aw(e){let t=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return Iw.has(t.length)&&t.every(n=>Sw.en.getWordIndex(n)>=0)}var _w=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,Cw=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,Pw=new Set(["calldata","data","publickey","pubkey","message","payload","input","extradata"]);function Tw(e){let t=cd(e);return Pw.has(t)||Cw.test(t)}var bn=class extends Error{constructor(t){super(`action receipt refused: secret-bearing field at ${t}`),this.name="ActionReceiptSecretError",this.code="ACTION_RECEIPT_SECRET"}};function cd(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function Nw(e){let t=cd(e);return[...kw].some(n=>t.includes(n))}function Rw(e,t,n){if(typeof t=="string"){if(Ew.some(r=>r.test(t))||Aw(t))throw new bn(n);if(_w.test(t)&&!Tw(e))throw new bn(n)}}function Ma(e,t="$",n=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return Rw(n,e,t),e;if(typeof e=="number"){if(!Number.isFinite(e))throw new TypeError(`action receipt: non-finite number at ${t}`);return e}if(typeof e=="bigint")return e.toString();if(Array.isArray(e))return e.map((o,a)=>Ma(o,`${t}[${a}]`,n));if(typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`action receipt: JSON-like value required at ${t}`);let r={};for(let o of Object.keys(e).sort()){let a=`${t}.${o}`;if(Nw(o))throw new bn(a);e[o]!==void 0&&(r[o]=Ma(e[o],a,o))}return r}function ld(e){return Ma(e)}import{spawnSync as Da}from"node:child_process";import{existsSync as Ge,readFileSync as Tr,readdirSync as bd,statSync as gd}from"node:fs";import{join as ye}from"node:path";import{createHash as Dw}from"node:crypto";import{existsSync as dd,readFileSync as Ow}from"node:fs";import{dirname as ud,join as $a}from"node:path";import{fileURLToPath as Lw}from"node:url";function Bw(e){let t=ud(Lw(e));for(let n=0;n<8;n+=1){let r=$a(t,"package.json");if(dd(r))try{let a=JSON.parse(Ow(r,"utf8"));if(a&&typeof a.version=="string")return t}catch{}let o=ud(t);if(o===t)break;t=o}throw new Error(`oracle: could not resolve package root from ${e}`)}function pd(e,t){let n=Bw(t),r=$a(n,e);return dd(r)?r:$a(n,"dist","assets",e)}import{isAddress as Mw}from"ethers";var md="5.0.2",$w={"safe-erc20":{contractName:"SafeERC20",source:"src/SafeERC20.sol",constructor:["string name","string symbol","uint256 initialSupply","address initialHolder","address initialOwner"],authority:["initialOwner may pause transfers and use Ownable2Step"],monitor:["OwnershipTransferStarted","OwnershipTransferred","Paused","Unpaused","Transfer"]},"safe-erc721-drop":{contractName:"SafeERC721Drop",source:"src/SafeERC721Drop.sol",constructor:["string name","string symbol","uint256 cap","address treasury","uint256 mintPrice","uint256 perWalletCap","address initialOwner"],authority:["initialOwner may withdraw the full balance to immutable treasury","no mint, proxy, upgrade, or delegatecall authority"],monitor:["Transfer","OwnershipTransferred","Withdrawal"]},"safe-vesting":{contractName:"SafeVesting",source:"src/SafeVesting.sol",constructor:["address beneficiary","uint64 startTimestamp","uint64 durationSeconds"],authority:["beneficiary is the immutable OpenZeppelin owner/recipient identity","ownership transfer and renunciation are disabled","no separate administrator, proxy, upgrade, or delegatecall authority"],monitor:["EtherReleased","ERC20Released"]}};function Uw(e,t){return Object.freeze({id:e,contractName:t.contractName,source:t.source,dependency:Object.freeze({name:"OpenZeppelin Contracts",version:md,tag:`v${md}`}),constructor:Object.freeze([...t.constructor]),authority:Object.freeze([...t.authority]),monitor:Object.freeze([...t.monitor]),fixedSource:!0,proxy:!1,upgradeable:!1,arbitraryDelegatecall:!1,modelEmittedSource:!1})}var Ua=Object.freeze(Object.fromEntries(Object.entries($w).map(([e,t])=>[e,Uw(e,t)])));function Pr(e){let t=Ua[String(e||"")];if(!t)throw new Error(`protocol-templates: unknown template "${e}"`);return t}function gn(e,t){try{if(BigInt(e)<=0n)throw new Error}catch{throw new Error(`${t} must be > 0`)}}function yn(e,t){let n=String(e||"");if(!Mw(n)||/^0x0{40}$/i.test(n))throw new Error(`${t} must be nonzero address`)}function fd(e,t){let n=Pr(e);if(!Array.isArray(t))throw new Error(`${e}: constructor args must be an array`);if(t.length!==n.constructor.length)throw new Error(`${e}: expected ${n.constructor.length} constructor args`);if(e==="safe-erc20"){let[r,o,a,i,s]=t;if(!String(r||"").trim()||!String(o||"").trim())throw new Error("safe-erc20: name/symbol required");gn(a,"safe-erc20: supply"),yn(i,"safe-erc20: initialHolder"),yn(s,"safe-erc20: initialOwner")}else if(e==="safe-erc721-drop"){let[r,o,a,i,s,c,l]=t;if(!String(r||"").trim()||!String(o||"").trim())throw new Error("safe-erc721-drop: name/symbol required");if(gn(a,"safe-erc721-drop: cap"),yn(i,"safe-erc721-drop: treasury"),gn(s,"safe-erc721-drop: mintPrice"),gn(c,"safe-erc721-drop: perWalletCap"),BigInt(c)>BigInt(a))throw new Error("safe-erc721-drop: perWalletCap exceeds cap");yn(l,"safe-erc721-drop: initialOwner")}else if(e==="safe-vesting"){let[r,o,a]=t;yn(r,"safe-vesting: beneficiary");for(let[i,s]of[[o,"startTimestamp"],[a,"durationSeconds"]])try{let c=BigInt(i);if(c<0n||c>18446744073709551615n)throw new Error}catch{throw new Error(`safe-vesting: ${s} must be uint64`)}gn(a,"safe-vesting: durationSeconds")}return n}function hd(e){return{authorities:[...e.authority],proxy:!1,upgradeable:!1,arbitraryDelegatecall:!1}}var wn=pd("protocols/templates",import.meta.url),Nr="Template + Foundry tests + optional static analysis. NOT a paid security-firm audit. Do not put mainnet TVL on forks without an independent Solidity audit.";function Rr(){return Ge(wn)?bd(wn).filter(e=>Ua[e]&&gd(ye(wn,e)).isDirectory()).map(e=>{let t=ye(wn,e),n=ye(t,"SECURITY.md");return{id:e,path:t,metadata:Pr(e),securityNotice:Ge(n)?Tr(n,"utf8").slice(0,500):null,disclaimer:Nr}}):[]}function yd(){if(process.env.FORGE_BIN)return process.env.FORGE_BIN;let e=process.env.HOME||"",t=["forge",ye(e,".foundry/bin/forge")];for(let n of t)if(Da(n,["--version"],{encoding:"utf8"}).status===0)return n;return null}function Fw(){return process.env.SLITHER_BIN?process.env.SLITHER_BIN:Da("slither",["--version"],{encoding:"utf8"}).status===0?"slither":null}function Et(e,t,n){let r=Da(e,t,{cwd:n,encoding:"utf8",env:{...process.env,PATH:`${process.env.HOME||""}/.foundry/bin:${process.env.PATH||""}`},timeout:12e4});return{ok:r.status===0,status:r.status,stdout:r.stdout||"",stderr:r.stderr||""}}function qw(e){let t=Dw("sha256");function n(r){let o=gd(r);if(o.isDirectory()){if(["lib","out","cache",".git"].includes(r.split("/").pop()))return;for(let a of bd(r).sort())n(ye(r,a))}else o.isFile()&&(r.endsWith(".sol")||r.endsWith(".toml")||r.endsWith(".md")||r.endsWith(".txt"))&&(t.update(r.slice(e.length)),t.update(Tr(r)))}return n(e),t.digest("hex")}function Fa(e,t={}){let n=Pr(e),r=t.allowSkipStatic!==!1,o=ye(wn,e);if(!Ge(o))throw new Error(`protocol-templates: unknown template "${e}"`);let a=yd();if(!a)throw new Error("protocol-templates: forge not found. Install Foundry (https://getfoundry.sh) then: cd protocols/templates/"+e+" && forge install && forge test");if(!Ge(ye(o,"lib","forge-std"))){let m=Et(a,["install","foundry-rs/forge-std","--no-git"],o);if(!m.ok)throw new Error(`protocol-templates: forge install forge-std failed
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
${
|
|
9
|
-
${l.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
${a.stderr}`.slice(0,1500));let i=n.metadata.contractName;if(t.contractName&&t.contractName!==i)throw new Error(`protocol-templates: fixed contract name is ${i}`);let s=ye(o,"out",`${i}.sol`,`${i}.json`);if(!Ge(s))throw new Error(`protocol-templates: artifact missing at ${s}`);let c=JSON.parse(Tr(s,"utf8"));return{gate:n,metadata:n.metadata,contractName:i,abi:c.abi,bytecode:c.bytecode?.object||c.bytecode,deployedBytecode:c.deployedBytecode?.object||c.deployedBytecode,artifactPath:s}}var Vw=new Set(["status","chainId","forkBlockNumber","gasUsed","transactionHash","contractAddress","revertReason"]);function Ww(e,t){if(typeof e!="object"||e===null||Array.isArray(e))throw new Error("prepareTemplateDeploy: localForkSimulationReceipt must be an object");let n=ld(e);for(let o of Object.keys(n))if(!Vw.has(o))throw new Error(`prepareTemplateDeploy: unsupported field "${o}" in localForkSimulationReceipt`);if(n.status!=="success"&&n.status!=="reverted")throw new Error('prepareTemplateDeploy: simulation status must be "success" or "reverted"');let r={status:n.status};if(n.chainId!==void 0){let o=Number(n.chainId);if(!Number.isSafeInteger(o)||o!==t)throw new Error("prepareTemplateDeploy: simulation chainId must match deployment chainId");r.chainId=o}if(n.forkBlockNumber!==void 0){let o=Number(n.forkBlockNumber);if(!Number.isSafeInteger(o)||o<0)throw new Error("prepareTemplateDeploy: simulation forkBlockNumber must be a nonnegative safe integer");r.forkBlockNumber=o}if(n.gasUsed!==void 0){let o=String(n.gasUsed);if(!/^(0|[1-9][0-9]*)$/.test(o))throw new Error("prepareTemplateDeploy: simulation gasUsed must be a nonnegative integer");r.gasUsed=o}if(n.transactionHash!==void 0){if(!/^0x[0-9a-fA-F]{64}$/.test(n.transactionHash))throw new Error("prepareTemplateDeploy: simulation transactionHash must be bytes32 hex");r.transactionHash=n.transactionHash}if(n.contractAddress!==void 0){if(!/^0x[0-9a-fA-F]{40}$/.test(n.contractAddress))throw new Error("prepareTemplateDeploy: simulation contractAddress must be an EVM address");r.contractAddress=n.contractAddress}if(n.revertReason!==void 0){if(typeof n.revertReason!="string"||n.revertReason.length>500)throw new Error("prepareTemplateDeploy: simulation revertReason must be at most 500 characters");r.revertReason=n.revertReason}return r}async function xd(e={},t={}){let n=String(e.templateId||"").trim();if(!n)throw new Error("prepareTemplateDeploy: templateId required");let r=Number(e.chainId);if(!Number.isInteger(r)||r<=0)throw new Error("prepareTemplateDeploy: chainId required");let o=e.args??e.constructorArgs??[],a=fd(n,o),i=wd(n,{contractName:e.contractName,allowSkipStatic:t.allowSkipStatic!==!1,allowStaticFail:t.allowStaticFail===!0});if(!i.bytecode||i.bytecode==="0x")throw new Error("prepareTemplateDeploy: empty bytecode");let s=i.bytecode.startsWith("0x")?i.bytecode:`0x${i.bytecode}`,u=(await new Hw(i.abi,s).getDeployTransaction(...o)).data,d=t.localForkSimulationReceipt??e.localForkSimulationReceipt??null,p=d===null?{status:"not-run",injected:!1,trusted:!1,gateDecision:!1,networkSideEffects:!1}:{...Ww(d,r),kind:"local-fork",injected:!0,trusted:!1,gateDecision:!1,networkSideEffects:!1},m={chainId:r,to:null,data:u,value:"0x0"};return P({provider:"protocol-templates",kind:"template-deploy",templateId:n,contractName:i.contractName,template:a,chainId:r,transaction:m,unsignedDeployEnvelope:{transaction:m,signed:!1,broadcast:!1},abi:i.abi,sourceHash:i.gate.sourceHash,bytecodeHash:vd(s),authorityReport:hd(a),simulationReceipt:p,verificationManifest:{contractName:i.contractName,source:a.source,compiler:"0.8.24",optimizer:{enabled:!0,runs:200},openZeppelin:a.dependency,sourceHash:i.gate.sourceHash,creationBytecodeHash:vd(s),constructorData:`0x${u.slice(s.length)}`},addressBookRecord:{status:"pending-deployment",address:null,chainId:r,label:`${n}:${i.contractName}`},monitoringPlan:{activation:"after user-signed deployment confirmation",enabled:!1,events:[...a.monitor],checks:["deployment bytecode matches verification manifest","authority changes","contract balance and release/withdraw events"]},gate:{forgeBuild:i.gate.forgeBuild,forgeTests:i.gate.forgeTests,staticAnalysis:{tool:i.gate.staticAnalysis.tool,ok:i.gate.staticAnalysis.ok,skipped:i.gate.staticAnalysis.skipped},firmAudit:!1,disclaimer:Nr},requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,deploymentActivated:!1,note:"Unsigned deploy. User wallet signs. Template tests passed; not a firm audit."},{provider:"protocol-templates",kind:"template-deploy"})}import{createHash as qa}from"node:crypto";import{secp256k1 as vn}from"@noble/curves/secp256k1.js";import{bech32m as Sd}from"@scure/base";var Va="Reviewed scaffold and source checks only; NOT a paid security audit. Testnet simulation and independent review are required before mainnet use.",kd="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",Lr=Object.freeze({"solana-safe-vault":Object.freeze({id:"solana-safe-vault",family:"solana",language:"Rust / Anchor",supportStatus:"GUIDED_BUILD",protocolModel:"Solana program with PDA-owned vault state",prepareOnly:!0,firmAudit:!1}),"bitcoin-tapscript-vault":Object.freeze({id:"bitcoin-tapscript-vault",family:"bitcoin",language:"Miniscript / Tapscript policy",supportStatus:"GUIDED_BUILD",protocolModel:"UTXO policy; not a general-purpose smart contract",prepareOnly:!0,firmAudit:!1})});function ue(e,t){throw new Error(`${e}: ${t}`)}function _d(e){let t=String(e||"").trim();return/^[a-z][a-z0-9_]{1,47}$/.test(t)||ue("native protocol","projectName must be 2-48 lowercase snake_case characters"),t}function Ha(e,t,{min:n=0n,max:r=18446744073709551615n}={}){try{let o=BigInt(e);if(o<n||o>r)throw new Error;return o}catch{ue(t,`must be an integer from ${n} to ${r}`)}}function jw(e){let t=String(e||"");if(!t||[...t].some(o=>!kd.includes(o)))return null;let n=0n;for(let o of t)n=n*58n+BigInt(kd.indexOf(o));let r=[];for(;n>0n;)r.unshift(Number(n&255n)),n>>=8n;for(let o of t){if(o!=="1")break;r.unshift(0)}return Uint8Array.from(r)}function Ed(e,t){let n=String(e||"").trim(),r=jw(n);return(!r||r.length!==32)&&ue(t,"must be a 32-byte base58 Solana public key"),n}function Id(e,t){let n=String(e||"").trim().toLowerCase();/^(02|03)[0-9a-f]{64}$/.test(n)||ue(t,"must be a compressed secp256k1 public key");try{vn.Point.fromHex(n)}catch{ue(t,"must encode a valid secp256k1 curve point")}return n}function Gw(e){if(e<253)return Buffer.from([e]);if(e<=65535){let t=Buffer.alloc(3);return t[0]=253,t.writeUInt16LE(e,1),t}ue("bitcoin-tapscript-vault","script too large")}function Wa(e,t){let n=qa("sha256").update(e).digest();return qa("sha256").update(n).update(n).update(t).digest()}function Ad(e){return Wa("TapLeaf",Buffer.concat([Buffer.from([192]),Gw(e.length),e]))}function Kw(e,t){let[n,r]=Buffer.compare(e,t)<=0?[e,t]:[t,e];return Wa("TapBranch",Buffer.concat([n,r]))}function Or(e){return vn.Point.fromHex(e).x.toString(16).padStart(64,"0")}function Cd(e){return Buffer.concat([Buffer.from([32]),Buffer.from(e,"hex")])}function Yw(e,t){let n=[];return e.forEach((r,o)=>n.push(Cd(Or(r)),Buffer.from([o===0?172:186]))),n.push(Buffer.from([80+t,156])),Buffer.concat(n)}function Jw(e){let t=Number(e),n=[];for(;t>0;)n.push(t&255),t>>=8;return n[n.length-1]&128&&n.push(0),Buffer.from([n.length,...n])}function Xw(e,t){return Buffer.concat([Jw(t),Buffer.from([178,117]),Cd(Or(e)),Buffer.from([172])])}function Qw(e,t,n){let r=vn.Point.fromHex(e),o=r.y&1n?r.negate():r,a=Buffer.from(o.x.toString(16).padStart(64,"0"),"hex"),i=BigInt(`0x${Wa("TapTweak",Buffer.concat([a,t])).toString("hex")}`)%vn.Point.Fn.ORDER,s=o.add(vn.Point.BASE.multiply(i)),c=Buffer.from(s.x.toString(16).padStart(64,"0"),"hex"),l=n==="mainnet"?"bc":n==="regtest"?"bcrt":"tb";return{address:Sd.encode(l,[1,...Sd.toWords(c)],90),scriptPubKey:`5120${c.toString("hex")}`,outputKey:c.toString("hex"),internalKey:a.toString("hex")}}function fe(e,t){return Object.freeze({path:e,content:t.endsWith(`
|
|
1
|
+
var qF=Object.create;var Gl=Object.defineProperty;var YF=Object.getOwnPropertyDescriptor;var VF=Object.getOwnPropertyNames;var JF=Object.getPrototypeOf,WF=Object.prototype.hasOwnProperty;var w=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var pa=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(n){throw r=[n],n}};var b=(e,t)=>()=>{try{return t||e((t={exports:{}}).exports,t),t.exports}catch(r){throw t=0,r}},$F=(e,t)=>{for(var r in t)Gl(e,r,{get:t[r],enumerable:!0})},zF=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of VF(t))!WF.call(e,o)&&o!==r&&Gl(e,o,{get:()=>t[o],enumerable:!(n=YF(t,o))||n.enumerable});return e};var KF=(e,t,r)=>(r=e!=null?qF(JF(e)):{},zF(t||!e||!e.__esModule?Gl(r,"default",{value:e,enumerable:!0}):r,e));var Ie=b((Az,Im)=>{Im.exports={kClose:Symbol("close"),kDestroy:Symbol("destroy"),kDispatch:Symbol("dispatch"),kUrl:Symbol("url"),kWriting:Symbol("writing"),kResuming:Symbol("resuming"),kQueue:Symbol("queue"),kConnect:Symbol("connect"),kConnecting:Symbol("connecting"),kKeepAliveDefaultTimeout:Symbol("default keep alive timeout"),kKeepAliveMaxTimeout:Symbol("max keep alive timeout"),kKeepAliveTimeoutThreshold:Symbol("keep alive timeout threshold"),kKeepAliveTimeoutValue:Symbol("keep alive timeout"),kKeepAlive:Symbol("keep alive"),kHeadersTimeout:Symbol("headers timeout"),kBodyTimeout:Symbol("body timeout"),kServerName:Symbol("server name"),kLocalAddress:Symbol("local address"),kHost:Symbol("host"),kNoRef:Symbol("no ref"),kBodyUsed:Symbol("used"),kBody:Symbol("abstracted request body"),kRunning:Symbol("running"),kBlocking:Symbol("blocking"),kPending:Symbol("pending"),kSize:Symbol("size"),kBusy:Symbol("busy"),kQueued:Symbol("queued"),kFree:Symbol("free"),kConnected:Symbol("connected"),kClosed:Symbol("closed"),kNeedDrain:Symbol("need drain"),kReset:Symbol("reset"),kDestroyed:Symbol.for("nodejs.stream.destroyed"),kResume:Symbol("resume"),kOnError:Symbol("on error"),kMaxHeadersSize:Symbol("max headers size"),kRunningIdx:Symbol("running index"),kPendingIdx:Symbol("pending index"),kError:Symbol("error"),kClients:Symbol("clients"),kClient:Symbol("client"),kParser:Symbol("parser"),kOnDestroyed:Symbol("destroy callbacks"),kPipelining:Symbol("pipelining"),kSocket:Symbol("socket"),kHostHeader:Symbol("host header"),kConnector:Symbol("connector"),kStrictContentLength:Symbol("strict content length"),kMaxRedirections:Symbol("maxRedirections"),kMaxRequests:Symbol("maxRequestsPerClient"),kProxy:Symbol("proxy agent options"),kCounter:Symbol("socket request counter"),kInterceptors:Symbol("dispatch interceptors"),kMaxResponseSize:Symbol("max response size"),kHTTP2Session:Symbol("http2Session"),kHTTP2SessionState:Symbol("http2Session state"),kRetryHandlerDefaultRetry:Symbol("retry agent default retry"),kConstruct:Symbol("constructable"),kListeners:Symbol("listeners"),kHTTPContext:Symbol("http context"),kMaxConcurrentStreams:Symbol("max concurrent streams"),kNoProxyAgent:Symbol("no proxy agent"),kHttpProxyAgent:Symbol("http proxy agent"),kHttpsProxyAgent:Symbol("https proxy agent")}});var ie=b((cz,Ym)=>{"use strict";var Bm=Symbol.for("undici.error.UND_ERR"),Be=class extends Error{constructor(t){super(t),this.name="UndiciError",this.code="UND_ERR"}static[Symbol.hasInstance](t){return t&&t[Bm]===!0}[Bm]=!0},Cm=Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT"),ql=class extends Be{constructor(t){super(t),this.name="ConnectTimeoutError",this.message=t||"Connect Timeout Error",this.code="UND_ERR_CONNECT_TIMEOUT"}static[Symbol.hasInstance](t){return t&&t[Cm]===!0}[Cm]=!0},Qm=Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT"),Yl=class extends Be{constructor(t){super(t),this.name="HeadersTimeoutError",this.message=t||"Headers Timeout Error",this.code="UND_ERR_HEADERS_TIMEOUT"}static[Symbol.hasInstance](t){return t&&t[Qm]===!0}[Qm]=!0},ym=Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW"),Vl=class extends Be{constructor(t){super(t),this.name="HeadersOverflowError",this.message=t||"Headers Overflow Error",this.code="UND_ERR_HEADERS_OVERFLOW"}static[Symbol.hasInstance](t){return t&&t[ym]===!0}[ym]=!0},wm=Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT"),Jl=class extends Be{constructor(t){super(t),this.name="BodyTimeoutError",this.message=t||"Body Timeout Error",this.code="UND_ERR_BODY_TIMEOUT"}static[Symbol.hasInstance](t){return t&&t[wm]===!0}[wm]=!0},bm=Symbol.for("undici.error.UND_ERR_RESPONSE_STATUS_CODE"),Wl=class extends Be{constructor(t,r,n,o){super(t),this.name="ResponseStatusCodeError",this.message=t||"Response Status Code Error",this.code="UND_ERR_RESPONSE_STATUS_CODE",this.body=o,this.status=r,this.statusCode=r,this.headers=n}static[Symbol.hasInstance](t){return t&&t[bm]===!0}[bm]=!0},km=Symbol.for("undici.error.UND_ERR_INVALID_ARG"),$l=class extends Be{constructor(t){super(t),this.name="InvalidArgumentError",this.message=t||"Invalid Argument Error",this.code="UND_ERR_INVALID_ARG"}static[Symbol.hasInstance](t){return t&&t[km]===!0}[km]=!0},Sm=Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE"),zl=class extends Be{constructor(t){super(t),this.name="InvalidReturnValueError",this.message=t||"Invalid Return Value Error",this.code="UND_ERR_INVALID_RETURN_VALUE"}static[Symbol.hasInstance](t){return t&&t[Sm]===!0}[Sm]=!0},xm=Symbol.for("undici.error.UND_ERR_ABORT"),fa=class extends Be{constructor(t){super(t),this.name="AbortError",this.message=t||"The operation was aborted",this.code="UND_ERR_ABORT"}static[Symbol.hasInstance](t){return t&&t[xm]===!0}[xm]=!0},Dm=Symbol.for("undici.error.UND_ERR_ABORTED"),Kl=class extends fa{constructor(t){super(t),this.name="AbortError",this.message=t||"Request aborted",this.code="UND_ERR_ABORTED"}static[Symbol.hasInstance](t){return t&&t[Dm]===!0}[Dm]=!0},vm=Symbol.for("undici.error.UND_ERR_INFO"),jl=class extends Be{constructor(t){super(t),this.name="InformationalError",this.message=t||"Request information",this.code="UND_ERR_INFO"}static[Symbol.hasInstance](t){return t&&t[vm]===!0}[vm]=!0},Rm=Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"),Zl=class extends Be{constructor(t){super(t),this.name="RequestContentLengthMismatchError",this.message=t||"Request body length does not match content-length header",this.code="UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](t){return t&&t[Rm]===!0}[Rm]=!0},Nm=Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH"),Xl=class extends Be{constructor(t){super(t),this.name="ResponseContentLengthMismatchError",this.message=t||"Response body length does not match content-length header",this.code="UND_ERR_RES_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](t){return t&&t[Nm]===!0}[Nm]=!0},Fm=Symbol.for("undici.error.UND_ERR_DESTROYED"),eu=class extends Be{constructor(t){super(t),this.name="ClientDestroyedError",this.message=t||"The client is destroyed",this.code="UND_ERR_DESTROYED"}static[Symbol.hasInstance](t){return t&&t[Fm]===!0}[Fm]=!0},Mm=Symbol.for("undici.error.UND_ERR_CLOSED"),tu=class extends Be{constructor(t){super(t),this.name="ClientClosedError",this.message=t||"The client is closed",this.code="UND_ERR_CLOSED"}static[Symbol.hasInstance](t){return t&&t[Mm]===!0}[Mm]=!0},Um=Symbol.for("undici.error.UND_ERR_SOCKET"),ru=class extends Be{constructor(t,r){super(t),this.name="SocketError",this.message=t||"Socket error",this.code="UND_ERR_SOCKET",this.socket=r}static[Symbol.hasInstance](t){return t&&t[Um]===!0}[Um]=!0},Lm=Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED"),nu=class extends Be{constructor(t){super(t),this.name="NotSupportedError",this.message=t||"Not supported error",this.code="UND_ERR_NOT_SUPPORTED"}static[Symbol.hasInstance](t){return t&&t[Lm]===!0}[Lm]=!0},Tm=Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM"),ou=class extends Be{constructor(t){super(t),this.name="MissingUpstreamError",this.message=t||"No upstream has been added to the BalancedPool",this.code="UND_ERR_BPL_MISSING_UPSTREAM"}static[Symbol.hasInstance](t){return t&&t[Tm]===!0}[Tm]=!0},Pm=Symbol.for("undici.error.UND_ERR_HTTP_PARSER"),iu=class extends Error{constructor(t,r,n){super(t),this.name="HTTPParserError",this.code=r?`HPE_${r}`:void 0,this.data=n?n.toString():void 0}static[Symbol.hasInstance](t){return t&&t[Pm]===!0}[Pm]=!0},_m=Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE"),su=class extends Be{constructor(t){super(t),this.name="ResponseExceededMaxSizeError",this.message=t||"Response content exceeded max size",this.code="UND_ERR_RES_EXCEEDED_MAX_SIZE"}static[Symbol.hasInstance](t){return t&&t[_m]===!0}[_m]=!0},Om=Symbol.for("undici.error.UND_ERR_REQ_RETRY"),au=class extends Be{constructor(t,r,{headers:n,data:o}){super(t),this.name="RequestRetryError",this.message=t||"Request retry error",this.code="UND_ERR_REQ_RETRY",this.statusCode=r,this.data=o,this.headers=n}static[Symbol.hasInstance](t){return t&&t[Om]===!0}[Om]=!0},Hm=Symbol.for("undici.error.UND_ERR_RESPONSE"),Au=class extends Be{constructor(t,r,{headers:n,data:o}){super(t),this.name="ResponseError",this.message=t||"Response error",this.code="UND_ERR_RESPONSE",this.statusCode=r,this.data=o,this.headers=n}static[Symbol.hasInstance](t){return t&&t[Hm]===!0}[Hm]=!0},Gm=Symbol.for("undici.error.UND_ERR_PRX_TLS"),cu=class extends Be{constructor(t,r,n){super(r,{cause:t,...n??{}}),this.name="SecureProxyConnectionError",this.message=r||"Secure Proxy Connection failed",this.code="UND_ERR_PRX_TLS",this.cause=t}static[Symbol.hasInstance](t){return t&&t[Gm]===!0}[Gm]=!0},qm=Symbol.for("undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"),lu=class extends Be{constructor(t){super(t),this.name="MessageSizeExceededError",this.message=t||"Max decompressed message size exceeded",this.code="UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"}static[Symbol.hasInstance](t){return t&&t[qm]===!0}get[qm](){return!0}};Ym.exports={AbortError:fa,HTTPParserError:iu,UndiciError:Be,HeadersTimeoutError:Yl,HeadersOverflowError:Vl,BodyTimeoutError:Jl,RequestContentLengthMismatchError:Zl,ConnectTimeoutError:ql,ResponseStatusCodeError:Wl,InvalidArgumentError:$l,InvalidReturnValueError:zl,RequestAbortedError:Kl,ClientDestroyedError:eu,ClientClosedError:tu,InformationalError:jl,SocketError:ru,NotSupportedError:nu,ResponseContentLengthMismatchError:Xl,BalancedPoolMissingUpstreamError:ou,ResponseExceededMaxSizeError:su,RequestRetryError:au,ResponseError:Au,SecureProxyConnectionError:cu,MessageSizeExceededError:lu}});var Ea=b((lz,Vm)=>{"use strict";var ma={},uu=["Accept","Accept-Encoding","Accept-Language","Accept-Ranges","Access-Control-Allow-Credentials","Access-Control-Allow-Headers","Access-Control-Allow-Methods","Access-Control-Allow-Origin","Access-Control-Expose-Headers","Access-Control-Max-Age","Access-Control-Request-Headers","Access-Control-Request-Method","Age","Allow","Alt-Svc","Alt-Used","Authorization","Cache-Control","Clear-Site-Data","Connection","Content-Disposition","Content-Encoding","Content-Language","Content-Length","Content-Location","Content-Range","Content-Security-Policy","Content-Security-Policy-Report-Only","Content-Type","Cookie","Cross-Origin-Embedder-Policy","Cross-Origin-Opener-Policy","Cross-Origin-Resource-Policy","Date","Device-Memory","Downlink","ECT","ETag","Expect","Expect-CT","Expires","Forwarded","From","Host","If-Match","If-Modified-Since","If-None-Match","If-Range","If-Unmodified-Since","Keep-Alive","Last-Modified","Link","Location","Max-Forwards","Origin","Permissions-Policy","Pragma","Proxy-Authenticate","Proxy-Authorization","RTT","Range","Referer","Referrer-Policy","Refresh","Retry-After","Sec-WebSocket-Accept","Sec-WebSocket-Extensions","Sec-WebSocket-Key","Sec-WebSocket-Protocol","Sec-WebSocket-Version","Server","Server-Timing","Service-Worker-Allowed","Service-Worker-Navigation-Preload","Set-Cookie","SourceMap","Strict-Transport-Security","Supports-Loading-Mode","TE","Timing-Allow-Origin","Trailer","Transfer-Encoding","Upgrade","Upgrade-Insecure-Requests","User-Agent","Vary","Via","WWW-Authenticate","X-Content-Type-Options","X-DNS-Prefetch-Control","X-Frame-Options","X-Permitted-Cross-Domain-Policies","X-Powered-By","X-Requested-With","X-XSS-Protection"];for(let e=0;e<uu.length;++e){let t=uu[e],r=t.toLowerCase();ma[t]=ma[r]=r}Object.setPrototypeOf(ma,null);Vm.exports={wellknownHeaderNames:uu,headerNameLowerCasedRecord:ma}});var zm=b((uz,$m)=>{"use strict";var{wellknownHeaderNames:Jm,headerNameLowerCasedRecord:jF}=Ea(),du=class e{value=null;left=null;middle=null;right=null;code;constructor(t,r,n){if(n===void 0||n>=t.length)throw new TypeError("Unreachable");if((this.code=t.charCodeAt(n))>127)throw new TypeError("key must be ascii string");t.length!==++n?this.middle=new e(t,r,n):this.value=r}add(t,r){let n=t.length;if(n===0)throw new TypeError("Unreachable");let o=0,i=this;for(;;){let s=t.charCodeAt(o);if(s>127)throw new TypeError("key must be ascii string");if(i.code===s)if(n===++o){i.value=r;break}else if(i.middle!==null)i=i.middle;else{i.middle=new e(t,r,o);break}else if(i.code<s)if(i.left!==null)i=i.left;else{i.left=new e(t,r,o);break}else if(i.right!==null)i=i.right;else{i.right=new e(t,r,o);break}}}search(t){let r=t.length,n=0,o=this;for(;o!==null&&n<r;){let i=t[n];for(i<=90&&i>=65&&(i|=32);o!==null;){if(i===o.code){if(r===++n)return o;o=o.middle;break}o=o.code<i?o.left:o.right}}return null}},Ia=class{node=null;insert(t,r){this.node===null?this.node=new du(t,r,0):this.node.add(t,r)}lookup(t){return this.node?.search(t)?.value??null}},Wm=new Ia;for(let e=0;e<Jm.length;++e){let t=jF[Jm[e]];Wm.insert(t,t)}$m.exports={TernarySearchTree:Ia,tree:Wm}});var j=b((dz,uE)=>{"use strict";var yi=w("node:assert"),{kDestroyed:jm,kBodyUsed:On,kListeners:hu,kBody:Km}=Ie(),{IncomingMessage:ZF}=w("node:http"),Qa=w("node:stream"),XF=w("node:net"),{Blob:eM}=w("node:buffer"),tM=w("node:util"),{stringify:rM}=w("node:querystring"),{EventEmitter:nM}=w("node:events"),{InvalidArgumentError:Me}=ie(),{headerNameLowerCasedRecord:oM}=Ea(),{tree:Zm}=zm(),[iM,sM]=process.versions.node.split(".").map(e=>Number(e)),Ca=class{constructor(t){this[Km]=t,this[On]=!1}async*[Symbol.asyncIterator](){yi(!this[On],"disturbed"),this[On]=!0,yield*this[Km]}};function aM(e){return ya(e)?(nE(e)===0&&e.on("data",function(){yi(!1)}),typeof e.readableDidRead!="boolean"&&(e[On]=!1,nM.prototype.on.call(e,"data",function(){this[On]=!0})),e):e&&typeof e.pipeTo=="function"?new Ca(e):e&&typeof e!="string"&&!ArrayBuffer.isView(e)&&rE(e)?new Ca(e):e}function AM(){}function ya(e){return e&&typeof e=="object"&&typeof e.pipe=="function"&&typeof e.on=="function"}function Xm(e){if(e===null)return!1;if(e instanceof eM)return!0;if(typeof e!="object")return!1;{let t=e[Symbol.toStringTag];return(t==="Blob"||t==="File")&&("stream"in e&&typeof e.stream=="function"||"arrayBuffer"in e&&typeof e.arrayBuffer=="function")}}function cM(e,t){if(e.includes("?")||e.includes("#"))throw new Error('Query params cannot be passed when url already contains "?" or "#".');let r=rM(t);return r&&(e+="?"+r),e}function eE(e){let t=parseInt(e,10);return t===Number(e)&&t>=0&&t<=65535}function Ba(e){return e!=null&&e[0]==="h"&&e[1]==="t"&&e[2]==="t"&&e[3]==="p"&&(e[4]===":"||e[4]==="s"&&e[5]===":")}function tE(e){if(typeof e=="string"){if(e=new URL(e),!Ba(e.origin||e.protocol))throw new Me("Invalid URL protocol: the URL must start with `http:` or `https:`.");return e}if(!e||typeof e!="object")throw new Me("Invalid URL: The URL argument must be a non-null object.");if(!(e instanceof URL)){if(e.port!=null&&e.port!==""&&eE(e.port)===!1)throw new Me("Invalid URL: port must be a valid integer or a string representation of an integer.");if(e.path!=null&&typeof e.path!="string")throw new Me("Invalid URL path: the path must be a string or null/undefined.");if(e.pathname!=null&&typeof e.pathname!="string")throw new Me("Invalid URL pathname: the pathname must be a string or null/undefined.");if(e.hostname!=null&&typeof e.hostname!="string")throw new Me("Invalid URL hostname: the hostname must be a string or null/undefined.");if(e.origin!=null&&typeof e.origin!="string")throw new Me("Invalid URL origin: the origin must be a string or null/undefined.");if(!Ba(e.origin||e.protocol))throw new Me("Invalid URL protocol: the URL must start with `http:` or `https:`.");let t=e.port!=null?e.port:e.protocol==="https:"?443:80,r=e.origin!=null?e.origin:`${e.protocol||""}//${e.hostname||""}:${t}`,n=e.path!=null?e.path:`${e.pathname||""}${e.search||""}`;return r[r.length-1]==="/"&&(r=r.slice(0,r.length-1)),n&&n[0]!=="/"&&(n=`/${n}`),new URL(`${r}${n}`)}if(!Ba(e.origin||e.protocol))throw new Me("Invalid URL protocol: the URL must start with `http:` or `https:`.");return e}function lM(e){if(e=tE(e),e.pathname!=="/"||e.search||e.hash)throw new Me("invalid url");return e}function uM(e){if(e[0]==="["){let r=e.indexOf("]");return yi(r!==-1),e.substring(1,r)}let t=e.indexOf(":");return t===-1?e:e.substring(0,t)}function dM(e){if(!e)return null;yi(typeof e=="string");let t=uM(e);return XF.isIP(t)?"":t}function hM(e){return JSON.parse(JSON.stringify(e))}function gM(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}function rE(e){return e!=null&&(typeof e[Symbol.iterator]=="function"||typeof e[Symbol.asyncIterator]=="function")}function nE(e){if(e==null)return 0;if(ya(e)){let t=e._readableState;return t&&t.objectMode===!1&&t.ended===!0&&Number.isFinite(t.length)?t.length:null}else{if(Xm(e))return e.size!=null?e.size:null;if(sE(e))return e.byteLength}return null}function oE(e){return e&&!!(e.destroyed||e[jm]||Qa.isDestroyed?.(e))}function pM(e,t){e==null||!ya(e)||oE(e)||(typeof e.destroy=="function"?(Object.getPrototypeOf(e).constructor===ZF&&(e.socket=null),e.destroy(t)):t&&queueMicrotask(()=>{e.emit("error",t)}),e.destroyed!==!0&&(e[jm]=!0))}var fM=/timeout=(\d+)/;function mM(e){let t=e.toString().match(fM);return t?parseInt(t[1],10)*1e3:null}function iE(e){return typeof e=="string"?oM[e]??e.toLowerCase():Zm.lookup(e)??e.toString("latin1").toLowerCase()}function EM(e){return Zm.lookup(e)??e.toString("latin1").toLowerCase()}function IM(e,t){t===void 0&&(t={});for(let r=0;r<e.length;r+=2){let n=iE(e[r]),o=t[n];if(o)typeof o=="string"&&(o=[o],t[n]=o),o.push(e[r+1].toString("utf8"));else{let i=e[r+1];typeof i=="string"?t[n]=i:t[n]=Array.isArray(i)?i.map(s=>s.toString("utf8")):i.toString("utf8")}}return"content-length"in t&&"content-disposition"in t&&(t["content-disposition"]=Buffer.from(t["content-disposition"]).toString("latin1")),t}function BM(e){let t=e.length,r=new Array(t),n=!1,o=-1,i,s,a=0;for(let A=0;A<e.length;A+=2)i=e[A],s=e[A+1],typeof i!="string"&&(i=i.toString()),typeof s!="string"&&(s=s.toString("utf8")),a=i.length,a===14&&i[7]==="-"&&(i==="content-length"||i.toLowerCase()==="content-length")?n=!0:a===19&&i[7]==="-"&&(i==="content-disposition"||i.toLowerCase()==="content-disposition")&&(o=A+1),r[A]=i,r[A+1]=s;return n&&o!==-1&&(r[o]=Buffer.from(r[o]).toString("latin1")),r}function sE(e){return e instanceof Uint8Array||Buffer.isBuffer(e)}function CM(e,t,r){if(!e||typeof e!="object")throw new Me("handler must be an object");if(typeof e.onConnect!="function")throw new Me("invalid onConnect method");if(typeof e.onError!="function")throw new Me("invalid onError method");if(typeof e.onBodySent!="function"&&e.onBodySent!==void 0)throw new Me("invalid onBodySent method");if(r||t==="CONNECT"){if(typeof e.onUpgrade!="function")throw new Me("invalid onUpgrade method")}else{if(typeof e.onHeaders!="function")throw new Me("invalid onHeaders method");if(typeof e.onData!="function")throw new Me("invalid onData method");if(typeof e.onComplete!="function")throw new Me("invalid onComplete method")}}function QM(e){return!!(e&&(Qa.isDisturbed(e)||e[On]))}function yM(e){return!!(e&&Qa.isErrored(e))}function wM(e){return!!(e&&Qa.isReadable(e))}function bM(e){return{localAddress:e.localAddress,localPort:e.localPort,remoteAddress:e.remoteAddress,remotePort:e.remotePort,remoteFamily:e.remoteFamily,timeout:e.timeout,bytesWritten:e.bytesWritten,bytesRead:e.bytesRead}}function kM(e){let t;return new ReadableStream({async start(){t=e[Symbol.asyncIterator]()},async pull(r){let{done:n,value:o}=await t.next();if(n)queueMicrotask(()=>{r.close(),r.byobRequest?.respond(0)});else{let i=Buffer.isBuffer(o)?o:Buffer.from(o);i.byteLength&&r.enqueue(new Uint8Array(i))}return r.desiredSize>0},async cancel(r){await t.return()},type:"bytes"})}function SM(e){return e&&typeof e=="object"&&typeof e.append=="function"&&typeof e.delete=="function"&&typeof e.get=="function"&&typeof e.getAll=="function"&&typeof e.has=="function"&&typeof e.set=="function"&&e[Symbol.toStringTag]==="FormData"}function xM(e,t){return"addEventListener"in e?(e.addEventListener("abort",t,{once:!0}),()=>e.removeEventListener("abort",t)):(e.addListener("abort",t),()=>e.removeListener("abort",t))}var DM=typeof String.prototype.toWellFormed=="function",vM=typeof String.prototype.isWellFormed=="function";function aE(e){return DM?`${e}`.toWellFormed():tM.toUSVString(e)}function RM(e){return vM?`${e}`.isWellFormed():aE(e)===`${e}`}function AE(e){switch(e){case 34:case 40:case 41:case 44:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 123:case 125:return!1;default:return e>=33&&e<=126}}function NM(e){if(e.length===0)return!1;for(let t=0;t<e.length;++t)if(!AE(e.charCodeAt(t)))return!1;return!0}var FM=/[^\t\x20-\x7e\x80-\xff]/;function MM(e){return!FM.test(e)}function UM(e){if(e==null||e==="")return{start:0,end:null,size:null};let t=e?e.match(/^bytes (\d+)-(\d+)\/(\d+)?$/):null;return t?{start:parseInt(t[1]),end:t[2]?parseInt(t[2]):null,size:t[3]?parseInt(t[3]):null}:null}function LM(e,t,r){return(e[hu]??=[]).push([t,r]),e.on(t,r),e}function TM(e){for(let[t,r]of e[hu]??[])e.removeListener(t,r);e[hu]=null}function PM(e,t,r){try{t.onError(r),yi(t.aborted)}catch(n){e.emit("error",n)}}var cE=Object.create(null);cE.enumerable=!0;var gu={delete:"DELETE",DELETE:"DELETE",get:"GET",GET:"GET",head:"HEAD",HEAD:"HEAD",options:"OPTIONS",OPTIONS:"OPTIONS",post:"POST",POST:"POST",put:"PUT",PUT:"PUT"},lE={...gu,patch:"patch",PATCH:"PATCH"};Object.setPrototypeOf(gu,null);Object.setPrototypeOf(lE,null);uE.exports={kEnumerableProperty:cE,nop:AM,isDisturbed:QM,isErrored:yM,isReadable:wM,toUSVString:aE,isUSVString:RM,isBlobLike:Xm,parseOrigin:lM,parseURL:tE,getServerName:dM,isStream:ya,isIterable:rE,isAsyncIterable:gM,isDestroyed:oE,headerNameToString:iE,bufferToLowerCasedHeaderName:EM,addListener:LM,removeAllListeners:TM,errorRequest:PM,parseRawHeaders:BM,parseHeaders:IM,parseKeepAliveTimeout:mM,destroy:pM,bodyLength:nE,deepClone:hM,ReadableStreamFrom:kM,isBuffer:sE,validateHandler:CM,getSocketInfo:bM,isFormDataLike:SM,buildURL:cM,addAbortListener:xM,isValidHTTPToken:NM,isValidHeaderValue:MM,isTokenCharCode:AE,parseRangeHeader:UM,normalizedMethodRecordsBase:gu,normalizedMethodRecords:lE,isValidPort:eE,isHttpOrHttpsPrefixed:Ba,nodeMajor:iM,nodeMinor:sM,safeHTTPMethods:["GET","HEAD","OPTIONS","TRACE"],wrapRequestBody:aM}});var Hn=b((hz,hE)=>{"use strict";var Ae=w("node:diagnostics_channel"),fu=w("node:util"),wa=fu.debuglog("undici"),pu=fu.debuglog("fetch"),jr=fu.debuglog("websocket"),dE=!1,_M={beforeConnect:Ae.channel("undici:client:beforeConnect"),connected:Ae.channel("undici:client:connected"),connectError:Ae.channel("undici:client:connectError"),sendHeaders:Ae.channel("undici:client:sendHeaders"),create:Ae.channel("undici:request:create"),bodySent:Ae.channel("undici:request:bodySent"),headers:Ae.channel("undici:request:headers"),trailers:Ae.channel("undici:request:trailers"),error:Ae.channel("undici:request:error"),open:Ae.channel("undici:websocket:open"),close:Ae.channel("undici:websocket:close"),socketError:Ae.channel("undici:websocket:socket_error"),ping:Ae.channel("undici:websocket:ping"),pong:Ae.channel("undici:websocket:pong")};if(wa.enabled||pu.enabled){let e=pu.enabled?pu:wa;Ae.channel("undici:client:beforeConnect").subscribe(t=>{let{connectParams:{version:r,protocol:n,port:o,host:i}}=t;e("connecting to %s using %s%s",`${i}${o?`:${o}`:""}`,n,r)}),Ae.channel("undici:client:connected").subscribe(t=>{let{connectParams:{version:r,protocol:n,port:o,host:i}}=t;e("connected to %s using %s%s",`${i}${o?`:${o}`:""}`,n,r)}),Ae.channel("undici:client:connectError").subscribe(t=>{let{connectParams:{version:r,protocol:n,port:o,host:i},error:s}=t;e("connection to %s using %s%s errored - %s",`${i}${o?`:${o}`:""}`,n,r,s.message)}),Ae.channel("undici:client:sendHeaders").subscribe(t=>{let{request:{method:r,path:n,origin:o}}=t;e("sending request to %s %s/%s",r,o,n)}),Ae.channel("undici:request:headers").subscribe(t=>{let{request:{method:r,path:n,origin:o},response:{statusCode:i}}=t;e("received response to %s %s/%s - HTTP %d",r,o,n,i)}),Ae.channel("undici:request:trailers").subscribe(t=>{let{request:{method:r,path:n,origin:o}}=t;e("trailers received from %s %s/%s",r,o,n)}),Ae.channel("undici:request:error").subscribe(t=>{let{request:{method:r,path:n,origin:o},error:i}=t;e("request to %s %s/%s errored - %s",r,o,n,i.message)}),dE=!0}if(jr.enabled){if(!dE){let e=wa.enabled?wa:jr;Ae.channel("undici:client:beforeConnect").subscribe(t=>{let{connectParams:{version:r,protocol:n,port:o,host:i}}=t;e("connecting to %s%s using %s%s",i,o?`:${o}`:"",n,r)}),Ae.channel("undici:client:connected").subscribe(t=>{let{connectParams:{version:r,protocol:n,port:o,host:i}}=t;e("connected to %s%s using %s%s",i,o?`:${o}`:"",n,r)}),Ae.channel("undici:client:connectError").subscribe(t=>{let{connectParams:{version:r,protocol:n,port:o,host:i},error:s}=t;e("connection to %s%s using %s%s errored - %s",i,o?`:${o}`:"",n,r,s.message)}),Ae.channel("undici:client:sendHeaders").subscribe(t=>{let{request:{method:r,path:n,origin:o}}=t;e("sending request to %s %s/%s",r,o,n)})}Ae.channel("undici:websocket:open").subscribe(e=>{let{address:{address:t,port:r}}=e;jr("connection opened %s%s",t,r?`:${r}`:"")}),Ae.channel("undici:websocket:close").subscribe(e=>{let{websocket:t,code:r,reason:n}=e;jr("closed connection to %s - %s %s",t.url,r,n)}),Ae.channel("undici:websocket:socket_error").subscribe(e=>{jr("connection errored - %s",e.message)}),Ae.channel("undici:websocket:ping").subscribe(e=>{jr("ping received")}),Ae.channel("undici:websocket:pong").subscribe(e=>{jr("pong received")})}hE.exports={channels:_M}});var mE=b((gz,fE)=>{"use strict";var{InvalidArgumentError:ue,NotSupportedError:OM}=ie(),er=w("node:assert"),{isValidHTTPToken:pE,isValidHeaderValue:wi,isStream:HM,destroy:GM,isBuffer:qM,isFormDataLike:YM,isIterable:VM,isBlobLike:JM,buildURL:WM,validateHandler:$M,getServerName:zM,normalizedMethodRecords:KM}=j(),{channels:_t}=Hn(),{headerNameLowerCasedRecord:gE}=Ea(),jM=/[^\u0021-\u00ff]/,gt=Symbol("handler"),mu=class{constructor(t,{path:r,method:n,body:o,headers:i,query:s,idempotent:a,blocking:A,upgrade:c,headersTimeout:l,bodyTimeout:u,reset:d,throwOnError:h,expectContinue:g,servername:p},m){if(typeof r!="string")throw new ue("path must be a string");if(r[0]!=="/"&&!(r.startsWith("http://")||r.startsWith("https://"))&&n!=="CONNECT")throw new ue("path must be an absolute URL or start with a slash");if(jM.test(r))throw new ue("invalid request path");if(typeof n!="string")throw new ue("method must be a string");if(KM[n]===void 0&&!pE(n))throw new ue("invalid request method");if(c&&typeof c!="string")throw new ue("upgrade must be a string");if(c&&!wi(c))throw new ue("invalid upgrade header");if(l!=null&&(!Number.isFinite(l)||l<0))throw new ue("invalid headersTimeout");if(u!=null&&(!Number.isFinite(u)||u<0))throw new ue("invalid bodyTimeout");if(d!=null&&typeof d!="boolean")throw new ue("invalid reset");if(g!=null&&typeof g!="boolean")throw new ue("invalid expectContinue");if(this.headersTimeout=l,this.bodyTimeout=u,this.throwOnError=h===!0,this.method=n,this.abort=null,o==null)this.body=null;else if(HM(o)){this.body=o;let f=this.body._readableState;(!f||!f.autoDestroy)&&(this.endHandler=function(){GM(this)},this.body.on("end",this.endHandler)),this.errorHandler=B=>{this.abort?this.abort(B):this.error=B},this.body.on("error",this.errorHandler)}else if(qM(o))this.body=o.byteLength?o:null;else if(ArrayBuffer.isView(o))this.body=o.buffer.byteLength?Buffer.from(o.buffer,o.byteOffset,o.byteLength):null;else if(o instanceof ArrayBuffer)this.body=o.byteLength?Buffer.from(o):null;else if(typeof o=="string")this.body=o.length?Buffer.from(o):null;else if(YM(o)||VM(o)||JM(o))this.body=o;else throw new ue("body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable");if(this.completed=!1,this.aborted=!1,this.upgrade=c||null,this.path=s?WM(r,s):r,this.origin=t,this.idempotent=a??(n==="HEAD"||n==="GET"),this.blocking=A??!1,this.reset=d??null,this.host=null,this.contentLength=null,this.contentType=null,this.headers=[],this.expectContinue=g??!1,Array.isArray(i)){if(i.length%2!==0)throw new ue("headers array must be even");for(let f=0;f<i.length;f+=2)ba(this,i[f],i[f+1])}else if(i&&typeof i=="object")if(i[Symbol.iterator])for(let f of i){if(!Array.isArray(f)||f.length!==2)throw new ue("headers must be in key-value pair format");ba(this,f[0],f[1])}else{let f=Object.keys(i);for(let B=0;B<f.length;++B)ba(this,f[B],i[f[B]])}else if(i!=null)throw new ue("headers must be an object or an array");$M(m,n,c),this.servername=p||zM(this.host),this[gt]=m,_t.create.hasSubscribers&&_t.create.publish({request:this})}onBodySent(t){if(this[gt].onBodySent)try{return this[gt].onBodySent(t)}catch(r){this.abort(r)}}onRequestSent(){if(_t.bodySent.hasSubscribers&&_t.bodySent.publish({request:this}),this[gt].onRequestSent)try{return this[gt].onRequestSent()}catch(t){this.abort(t)}}onConnect(t){if(er(!this.aborted),er(!this.completed),this.error)t(this.error);else return this.abort=t,this[gt].onConnect(t)}onResponseStarted(){return this[gt].onResponseStarted?.()}onHeaders(t,r,n,o){er(!this.aborted),er(!this.completed),_t.headers.hasSubscribers&&_t.headers.publish({request:this,response:{statusCode:t,headers:r,statusText:o}});try{return this[gt].onHeaders(t,r,n,o)}catch(i){this.abort(i)}}onData(t){er(!this.aborted),er(!this.completed);try{return this[gt].onData(t)}catch(r){return this.abort(r),!1}}onUpgrade(t,r,n){return er(!this.aborted),er(!this.completed),this[gt].onUpgrade(t,r,n)}onComplete(t){this.onFinally(),er(!this.aborted),this.completed=!0,_t.trailers.hasSubscribers&&_t.trailers.publish({request:this,trailers:t});try{return this[gt].onComplete(t)}catch(r){this.onError(r)}}onError(t){if(this.onFinally(),_t.error.hasSubscribers&&_t.error.publish({request:this,error:t}),!this.aborted)return this.aborted=!0,this[gt].onError(t)}onFinally(){this.errorHandler&&(this.body.off("error",this.errorHandler),this.errorHandler=null),this.endHandler&&(this.body.off("end",this.endHandler),this.endHandler=null)}addHeader(t,r){return ba(this,t,r),this}};function ba(e,t,r){if(r&&typeof r=="object"&&!Array.isArray(r))throw new ue(`invalid ${t} header`);if(r===void 0)return;let n=gE[t];if(n===void 0&&(n=t.toLowerCase(),gE[n]===void 0&&!pE(n)))throw new ue("invalid header key");if(Array.isArray(r)){let o=[];for(let i=0;i<r.length;i++)if(typeof r[i]=="string"){if(!wi(r[i]))throw new ue(`invalid ${t} header`);o.push(r[i])}else if(r[i]===null)o.push("");else{if(typeof r[i]=="object")throw new ue(`invalid ${t} header`);{let s=`${r[i]}`;if(!wi(s))throw new ue(`invalid ${t} header`);o.push(s)}}r=o}else if(typeof r=="string"){if(!wi(r))throw new ue(`invalid ${t} header`)}else if(r===null)r="";else if(r=`${r}`,!wi(r))throw new ue(`invalid ${t} header`);if(n==="host"){if(e.host!==null)throw new ue("duplicate host header");if(typeof r!="string")throw new ue("invalid host header");e.host=r}else if(n==="content-length"){if(e.contentLength!==null)throw new ue("duplicate content-length header");if(e.contentLength=parseInt(r,10),!Number.isFinite(e.contentLength))throw new ue("invalid content-length header")}else if(e.contentType===null&&n==="content-type")e.contentType=r,e.headers.push(t,r);else{if(n==="transfer-encoding"||n==="keep-alive"||n==="upgrade")throw new ue(`invalid ${n} header`);if(n==="connection"){let o=typeof r=="string"?r.toLowerCase():null;if(o!=="close"&&o!=="keep-alive")throw new ue("invalid connection header");o==="close"&&(e.reset=!0)}else{if(n==="expect")throw new OM("expect header not supported");e.headers.push(t,r)}}}fE.exports=mu});var bi=b((pz,EE)=>{"use strict";var ZM=w("node:events"),ka=class extends ZM{dispatch(){throw new Error("not implemented")}close(){throw new Error("not implemented")}destroy(){throw new Error("not implemented")}compose(...t){let r=Array.isArray(t[0])?t[0]:t,n=this.dispatch.bind(this);for(let o of r)if(o!=null){if(typeof o!="function")throw new TypeError(`invalid interceptor, expected function received ${typeof o}`);if(n=o(n),n==null||typeof n!="function"||n.length!==2)throw new TypeError("invalid interceptor")}return new Eu(this,n)}},Eu=class extends ka{#e=null;#t=null;constructor(t,r){super(),this.#e=t,this.#t=r}dispatch(...t){this.#t(...t)}close(...t){return this.#e.close(...t)}destroy(...t){return this.#e.destroy(...t)}};EE.exports=ka});var Vn=b((fz,IE)=>{"use strict";var XM=bi(),{ClientDestroyedError:Iu,ClientClosedError:eU,InvalidArgumentError:Gn}=ie(),{kDestroy:tU,kClose:rU,kClosed:ki,kDestroyed:qn,kDispatch:Bu,kInterceptors:Zr}=Ie(),tr=Symbol("onDestroyed"),Yn=Symbol("onClosed"),Sa=Symbol("Intercepted Dispatch"),Cu=Symbol("webSocketOptions"),Qu=class extends XM{constructor(t){super(),this[qn]=!1,this[tr]=null,this[ki]=!1,this[Yn]=[],this[Cu]=t?.webSocket??{}}get webSocketOptions(){return{maxFragments:this[Cu].maxFragments??131072,maxPayloadSize:this[Cu].maxPayloadSize??128*1024*1024}}get destroyed(){return this[qn]}get closed(){return this[ki]}get interceptors(){return this[Zr]}set interceptors(t){if(t){for(let r=t.length-1;r>=0;r--)if(typeof this[Zr][r]!="function")throw new Gn("interceptor must be an function")}this[Zr]=t}close(t){if(t===void 0)return new Promise((n,o)=>{this.close((i,s)=>i?o(i):n(s))});if(typeof t!="function")throw new Gn("invalid callback");if(this[qn]){queueMicrotask(()=>t(new Iu,null));return}if(this[ki]){this[Yn]?this[Yn].push(t):queueMicrotask(()=>t(null,null));return}this[ki]=!0,this[Yn].push(t);let r=()=>{let n=this[Yn];this[Yn]=null;for(let o=0;o<n.length;o++)n[o](null,null)};this[rU]().then(()=>this.destroy()).then(()=>{queueMicrotask(r)})}destroy(t,r){if(typeof t=="function"&&(r=t,t=null),r===void 0)return new Promise((o,i)=>{this.destroy(t,(s,a)=>s?i(s):o(a))});if(typeof r!="function")throw new Gn("invalid callback");if(this[qn]){this[tr]?this[tr].push(r):queueMicrotask(()=>r(null,null));return}t||(t=new Iu),this[qn]=!0,this[tr]=this[tr]||[],this[tr].push(r);let n=()=>{let o=this[tr];this[tr]=null;for(let i=0;i<o.length;i++)o[i](null,null)};this[tU](t).then(()=>{queueMicrotask(n)})}[Sa](t,r){if(!this[Zr]||this[Zr].length===0)return this[Sa]=this[Bu],this[Bu](t,r);let n=this[Bu].bind(this);for(let o=this[Zr].length-1;o>=0;o--)n=this[Zr][o](n);return this[Sa]=n,n(t,r)}dispatch(t,r){if(!r||typeof r!="object")throw new Gn("handler must be an object");try{if(!t||typeof t!="object")throw new Gn("opts must be an object.");if(this[qn]||this[tr])throw new Iu;if(this[ki])throw new eU;return this[Sa](t,r)}catch(n){if(typeof r.onError!="function")throw new Gn("invalid onError method");return r.onError(n),!1}}};IE.exports=Qu});var Du=b((mz,yE)=>{"use strict";var Jn=0,yu=1e3,wu=(yu>>1)-1,rr,bu=Symbol("kFastTimer"),nr=[],ku=-2,Su=-1,CE=0,BE=1;function xu(){Jn+=wu;let e=0,t=nr.length;for(;e<t;){let r=nr[e];r._state===CE?(r._idleStart=Jn-wu,r._state=BE):r._state===BE&&Jn>=r._idleStart+r._idleTimeout&&(r._state=Su,r._idleStart=-1,r._onTimeout(r._timerArg)),r._state===Su?(r._state=ku,--t!==0&&(nr[e]=nr[t])):++e}nr.length=t,nr.length!==0&&QE()}function QE(){rr?rr.refresh():(clearTimeout(rr),rr=setTimeout(xu,wu),rr.unref&&rr.unref())}var xa=class{[bu]=!0;_state=ku;_idleTimeout=-1;_idleStart=-1;_onTimeout;_timerArg;constructor(t,r,n){this._onTimeout=t,this._idleTimeout=r,this._timerArg=n,this.refresh()}refresh(){this._state===ku&&nr.push(this),(!rr||nr.length===1)&&QE(),this._state=CE}clear(){this._state=Su,this._idleStart=-1}};yE.exports={setTimeout(e,t,r){return t<=yu?setTimeout(e,t,r):new xa(e,t,r)},clearTimeout(e){e[bu]?e.clear():clearTimeout(e)},setFastTimeout(e,t,r){return new xa(e,t,r)},clearFastTimeout(e){e.clear()},now(){return Jn},tick(e=0){Jn+=e-yu+1,xu(),xu()},reset(){Jn=0,nr.length=0,clearTimeout(rr),rr=null},kFastTimer:bu}});var Si=b((Bz,xE)=>{"use strict";var nU=w("node:net"),wE=w("node:assert"),SE=j(),{InvalidArgumentError:oU,ConnectTimeoutError:iU}=ie(),Da=Du();function bE(){}var vu,Ru;global.FinalizationRegistry&&!(process.env.NODE_V8_COVERAGE||process.env.UNDICI_NO_FG)?Ru=class{constructor(t){this._maxCachedSessions=t,this._sessionCache=new Map,this._sessionRegistry=new global.FinalizationRegistry(r=>{if(this._sessionCache.size<this._maxCachedSessions)return;let n=this._sessionCache.get(r);n!==void 0&&n.deref()===void 0&&this._sessionCache.delete(r)})}get(t){let r=this._sessionCache.get(t);return r?r.deref():null}set(t,r){this._maxCachedSessions!==0&&(this._sessionCache.set(t,new WeakRef(r)),this._sessionRegistry.register(r,t))}}:Ru=class{constructor(t){this._maxCachedSessions=t,this._sessionCache=new Map}get(t){return this._sessionCache.get(t)}set(t,r){if(this._maxCachedSessions!==0){if(this._sessionCache.size>=this._maxCachedSessions){let{value:n}=this._sessionCache.keys().next();this._sessionCache.delete(n)}this._sessionCache.set(t,r)}}};function sU({allowH2:e,maxCachedSessions:t,socketPath:r,timeout:n,session:o,...i}){if(t!=null&&(!Number.isInteger(t)||t<0))throw new oU("maxCachedSessions must be a positive integer or zero");let s={path:r,...i},a=new Ru(t??100);return n=n??1e4,e=e??!1,function({hostname:c,host:l,protocol:u,port:d,servername:h,localAddress:g,httpSocket:p},m){let f;if(u==="https:"){vu||(vu=w("node:tls")),h=h||s.servername||SE.getServerName(l)||null;let E=h||c;wE(E);let I=o||a.get(E)||null;d=d||443,f=vu.connect({highWaterMark:16384,...s,servername:h,session:I,localAddress:g,ALPNProtocols:e?["http/1.1","h2"]:["http/1.1"],socket:p,port:d,host:c}),f.on("session",function(Q){a.set(E,Q)})}else wE(!p,"httpSocket can only be sent on TLS update"),d=d||80,f=nU.connect({highWaterMark:64*1024,...s,localAddress:g,port:d,host:c});if(s.keepAlive==null||s.keepAlive){let E=s.keepAliveInitialDelay===void 0?6e4:s.keepAliveInitialDelay;f.setKeepAlive(!0,E)}let B=aU(new WeakRef(f),{timeout:n,hostname:c,port:d});return f.setNoDelay(!0).once(u==="https:"?"secureConnect":"connect",function(){if(queueMicrotask(B),m){let E=m;m=null,E(null,this)}}).on("error",function(E){if(queueMicrotask(B),m){let I=m;m=null,I(E)}}),f}}var aU=process.platform==="win32"?(e,t)=>{if(!t.timeout)return bE;let r=null,n=null,o=Da.setFastTimeout(()=>{r=setImmediate(()=>{n=setImmediate(()=>kE(e.deref(),t))})},t.timeout);return()=>{Da.clearFastTimeout(o),clearImmediate(r),clearImmediate(n)}}:(e,t)=>{if(!t.timeout)return bE;let r=null,n=Da.setFastTimeout(()=>{r=setImmediate(()=>{kE(e.deref(),t)})},t.timeout);return()=>{Da.clearFastTimeout(n),clearImmediate(r)}};function kE(e,t){if(e==null)return;let r="Connect Timeout Error";Array.isArray(e.autoSelectFamilyAttemptedAddresses)?r+=` (attempted addresses: ${e.autoSelectFamilyAttemptedAddresses.join(", ")},`:r+=` (attempted address: ${t.hostname}:${t.port},`,r+=` timeout: ${t.timeout}ms)`,SE.destroy(e,new iU(r))}xE.exports=sU});var DE=b(va=>{"use strict";Object.defineProperty(va,"__esModule",{value:!0});va.enumToMap=void 0;function AU(e){let t={};return Object.keys(e).forEach(r=>{let n=e[r];typeof n=="number"&&(t[r]=n)}),t}va.enumToMap=AU});var vE=b(S=>{"use strict";Object.defineProperty(S,"__esModule",{value:!0});S.SPECIAL_HEADERS=S.HEADER_STATE=S.MINOR=S.MAJOR=S.CONNECTION_TOKEN_CHARS=S.HEADER_CHARS=S.TOKEN=S.STRICT_TOKEN=S.HEX=S.URL_CHAR=S.STRICT_URL_CHAR=S.USERINFO_CHARS=S.MARK=S.ALPHANUM=S.NUM=S.HEX_MAP=S.NUM_MAP=S.ALPHA=S.FINISH=S.H_METHOD_MAP=S.METHOD_MAP=S.METHODS_RTSP=S.METHODS_ICE=S.METHODS_HTTP=S.METHODS=S.LENIENT_FLAGS=S.FLAGS=S.TYPE=S.ERROR=void 0;var cU=DE(),lU;(function(e){e[e.OK=0]="OK",e[e.INTERNAL=1]="INTERNAL",e[e.STRICT=2]="STRICT",e[e.LF_EXPECTED=3]="LF_EXPECTED",e[e.UNEXPECTED_CONTENT_LENGTH=4]="UNEXPECTED_CONTENT_LENGTH",e[e.CLOSED_CONNECTION=5]="CLOSED_CONNECTION",e[e.INVALID_METHOD=6]="INVALID_METHOD",e[e.INVALID_URL=7]="INVALID_URL",e[e.INVALID_CONSTANT=8]="INVALID_CONSTANT",e[e.INVALID_VERSION=9]="INVALID_VERSION",e[e.INVALID_HEADER_TOKEN=10]="INVALID_HEADER_TOKEN",e[e.INVALID_CONTENT_LENGTH=11]="INVALID_CONTENT_LENGTH",e[e.INVALID_CHUNK_SIZE=12]="INVALID_CHUNK_SIZE",e[e.INVALID_STATUS=13]="INVALID_STATUS",e[e.INVALID_EOF_STATE=14]="INVALID_EOF_STATE",e[e.INVALID_TRANSFER_ENCODING=15]="INVALID_TRANSFER_ENCODING",e[e.CB_MESSAGE_BEGIN=16]="CB_MESSAGE_BEGIN",e[e.CB_HEADERS_COMPLETE=17]="CB_HEADERS_COMPLETE",e[e.CB_MESSAGE_COMPLETE=18]="CB_MESSAGE_COMPLETE",e[e.CB_CHUNK_HEADER=19]="CB_CHUNK_HEADER",e[e.CB_CHUNK_COMPLETE=20]="CB_CHUNK_COMPLETE",e[e.PAUSED=21]="PAUSED",e[e.PAUSED_UPGRADE=22]="PAUSED_UPGRADE",e[e.PAUSED_H2_UPGRADE=23]="PAUSED_H2_UPGRADE",e[e.USER=24]="USER"})(lU=S.ERROR||(S.ERROR={}));var uU;(function(e){e[e.BOTH=0]="BOTH",e[e.REQUEST=1]="REQUEST",e[e.RESPONSE=2]="RESPONSE"})(uU=S.TYPE||(S.TYPE={}));var dU;(function(e){e[e.CONNECTION_KEEP_ALIVE=1]="CONNECTION_KEEP_ALIVE",e[e.CONNECTION_CLOSE=2]="CONNECTION_CLOSE",e[e.CONNECTION_UPGRADE=4]="CONNECTION_UPGRADE",e[e.CHUNKED=8]="CHUNKED",e[e.UPGRADE=16]="UPGRADE",e[e.CONTENT_LENGTH=32]="CONTENT_LENGTH",e[e.SKIPBODY=64]="SKIPBODY",e[e.TRAILING=128]="TRAILING",e[e.TRANSFER_ENCODING=512]="TRANSFER_ENCODING"})(dU=S.FLAGS||(S.FLAGS={}));var hU;(function(e){e[e.HEADERS=1]="HEADERS",e[e.CHUNKED_LENGTH=2]="CHUNKED_LENGTH",e[e.KEEP_ALIVE=4]="KEEP_ALIVE"})(hU=S.LENIENT_FLAGS||(S.LENIENT_FLAGS={}));var O;(function(e){e[e.DELETE=0]="DELETE",e[e.GET=1]="GET",e[e.HEAD=2]="HEAD",e[e.POST=3]="POST",e[e.PUT=4]="PUT",e[e.CONNECT=5]="CONNECT",e[e.OPTIONS=6]="OPTIONS",e[e.TRACE=7]="TRACE",e[e.COPY=8]="COPY",e[e.LOCK=9]="LOCK",e[e.MKCOL=10]="MKCOL",e[e.MOVE=11]="MOVE",e[e.PROPFIND=12]="PROPFIND",e[e.PROPPATCH=13]="PROPPATCH",e[e.SEARCH=14]="SEARCH",e[e.UNLOCK=15]="UNLOCK",e[e.BIND=16]="BIND",e[e.REBIND=17]="REBIND",e[e.UNBIND=18]="UNBIND",e[e.ACL=19]="ACL",e[e.REPORT=20]="REPORT",e[e.MKACTIVITY=21]="MKACTIVITY",e[e.CHECKOUT=22]="CHECKOUT",e[e.MERGE=23]="MERGE",e[e["M-SEARCH"]=24]="M-SEARCH",e[e.NOTIFY=25]="NOTIFY",e[e.SUBSCRIBE=26]="SUBSCRIBE",e[e.UNSUBSCRIBE=27]="UNSUBSCRIBE",e[e.PATCH=28]="PATCH",e[e.PURGE=29]="PURGE",e[e.MKCALENDAR=30]="MKCALENDAR",e[e.LINK=31]="LINK",e[e.UNLINK=32]="UNLINK",e[e.SOURCE=33]="SOURCE",e[e.PRI=34]="PRI",e[e.DESCRIBE=35]="DESCRIBE",e[e.ANNOUNCE=36]="ANNOUNCE",e[e.SETUP=37]="SETUP",e[e.PLAY=38]="PLAY",e[e.PAUSE=39]="PAUSE",e[e.TEARDOWN=40]="TEARDOWN",e[e.GET_PARAMETER=41]="GET_PARAMETER",e[e.SET_PARAMETER=42]="SET_PARAMETER",e[e.REDIRECT=43]="REDIRECT",e[e.RECORD=44]="RECORD",e[e.FLUSH=45]="FLUSH"})(O=S.METHODS||(S.METHODS={}));S.METHODS_HTTP=[O.DELETE,O.GET,O.HEAD,O.POST,O.PUT,O.CONNECT,O.OPTIONS,O.TRACE,O.COPY,O.LOCK,O.MKCOL,O.MOVE,O.PROPFIND,O.PROPPATCH,O.SEARCH,O.UNLOCK,O.BIND,O.REBIND,O.UNBIND,O.ACL,O.REPORT,O.MKACTIVITY,O.CHECKOUT,O.MERGE,O["M-SEARCH"],O.NOTIFY,O.SUBSCRIBE,O.UNSUBSCRIBE,O.PATCH,O.PURGE,O.MKCALENDAR,O.LINK,O.UNLINK,O.PRI,O.SOURCE];S.METHODS_ICE=[O.SOURCE];S.METHODS_RTSP=[O.OPTIONS,O.DESCRIBE,O.ANNOUNCE,O.SETUP,O.PLAY,O.PAUSE,O.TEARDOWN,O.GET_PARAMETER,O.SET_PARAMETER,O.REDIRECT,O.RECORD,O.FLUSH,O.GET,O.POST];S.METHOD_MAP=cU.enumToMap(O);S.H_METHOD_MAP={};Object.keys(S.METHOD_MAP).forEach(e=>{/^H/.test(e)&&(S.H_METHOD_MAP[e]=S.METHOD_MAP[e])});var gU;(function(e){e[e.SAFE=0]="SAFE",e[e.SAFE_WITH_CB=1]="SAFE_WITH_CB",e[e.UNSAFE=2]="UNSAFE"})(gU=S.FINISH||(S.FINISH={}));S.ALPHA=[];for(let e=65;e<=90;e++)S.ALPHA.push(String.fromCharCode(e)),S.ALPHA.push(String.fromCharCode(e+32));S.NUM_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9};S.HEX_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15};S.NUM=["0","1","2","3","4","5","6","7","8","9"];S.ALPHANUM=S.ALPHA.concat(S.NUM);S.MARK=["-","_",".","!","~","*","'","(",")"];S.USERINFO_CHARS=S.ALPHANUM.concat(S.MARK).concat(["%",";",":","&","=","+","$",","]);S.STRICT_URL_CHAR=["!",'"',"$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","@","[","\\","]","^","_","`","{","|","}","~"].concat(S.ALPHANUM);S.URL_CHAR=S.STRICT_URL_CHAR.concat([" ","\f"]);for(let e=128;e<=255;e++)S.URL_CHAR.push(e);S.HEX=S.NUM.concat(["a","b","c","d","e","f","A","B","C","D","E","F"]);S.STRICT_TOKEN=["!","#","$","%","&","'","*","+","-",".","^","_","`","|","~"].concat(S.ALPHANUM);S.TOKEN=S.STRICT_TOKEN.concat([" "]);S.HEADER_CHARS=[" "];for(let e=32;e<=255;e++)e!==127&&S.HEADER_CHARS.push(e);S.CONNECTION_TOKEN_CHARS=S.HEADER_CHARS.filter(e=>e!==44);S.MAJOR=S.NUM_MAP;S.MINOR=S.MAJOR;var Wn;(function(e){e[e.GENERAL=0]="GENERAL",e[e.CONNECTION=1]="CONNECTION",e[e.CONTENT_LENGTH=2]="CONTENT_LENGTH",e[e.TRANSFER_ENCODING=3]="TRANSFER_ENCODING",e[e.UPGRADE=4]="UPGRADE",e[e.CONNECTION_KEEP_ALIVE=5]="CONNECTION_KEEP_ALIVE",e[e.CONNECTION_CLOSE=6]="CONNECTION_CLOSE",e[e.CONNECTION_UPGRADE=7]="CONNECTION_UPGRADE",e[e.TRANSFER_ENCODING_CHUNKED=8]="TRANSFER_ENCODING_CHUNKED"})(Wn=S.HEADER_STATE||(S.HEADER_STATE={}));S.SPECIAL_HEADERS={connection:Wn.CONNECTION,"content-length":Wn.CONTENT_LENGTH,"proxy-connection":Wn.CONNECTION,"transfer-encoding":Wn.TRANSFER_ENCODING,upgrade:Wn.UPGRADE}});var Nu=b((yz,RE)=>{"use strict";var{Buffer:pU}=w("node:buffer");RE.exports=pU.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEVDF8LQZIBIQMgASAERg2aAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGhzwBqLQAARw1dIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAybAgsgAkEANgIAIAZBAWohAUEeDF4LIAEgBEYEQEGTASEDDJoCCyABLQAAQcwARw1bIAFBAWohAUEKDF0LIAEgBEYEQEGUASEDDJkCCwJAAkAgAS0AAEHBAGsODwBcXFxcXFxcXFxcXFxcAVwLIAFBAWohAUH+ACEDDIACCyABQQFqIQFB/wAhAwz/AQsgASAERgRAQZUBIQMMmAILAkACQCABLQAAQcEAaw4DAFsBWwsgAUEBaiEBQf0AIQMM/wELIAFBAWohAUGAASEDDP4BC0GWASEDIAEgBEYNlgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBp88Aai0AAEcNWSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlwILIAJBADYCACAGQQFqIQFBCwxaCyABIARGBEBBlwEhAwyWAgsCQAJAAkACQCABLQAAQS1rDiMAW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1sBW1tbW1sCW1tbA1sLIAFBAWohAUH7ACEDDP8BCyABQQFqIQFB/AAhAwz+AQsgAUEBaiEBQYEBIQMM/QELIAFBAWohAUGCASEDDPwBC0GYASEDIAEgBEYNlAIgAigCACIAIAQgAWtqIQUgASAAa0EEaiEGAkADQCABLQAAIABBqc8Aai0AAEcNVyAAQQRGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlQILIAJBADYCACAGQQFqIQFBGQxYC0GZASEDIAEgBEYNkwIgAigCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBrs8Aai0AAEcNViAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlAILIAJBADYCACAGQQFqIQFBBgxXC0GaASEDIAEgBEYNkgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBtM8Aai0AAEcNVSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkwILIAJBADYCACAGQQFqIQFBHAxWC0GbASEDIAEgBEYNkQIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBts8Aai0AAEcNVCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkgILIAJBADYCACAGQQFqIQFBJwxVCyABIARGBEBBnAEhAwyRAgsCQAJAIAEtAABB1ABrDgIAAVQLIAFBAWohAUGGASEDDPgBCyABQQFqIQFBhwEhAwz3AQtBnQEhAyABIARGDY8CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbjPAGotAABHDVIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADJACCyACQQA2AgAgBkEBaiEBQSYMUwtBngEhAyABIARGDY4CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbrPAGotAABHDVEgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI8CCyACQQA2AgAgBkEBaiEBQQMMUgtBnwEhAyABIARGDY0CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDVAgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI4CCyACQQA2AgAgBkEBaiEBQQwMUQtBoAEhAyABIARGDYwCIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQbzPAGotAABHDU8gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI0CCyACQQA2AgAgBkEBaiEBQQ0MUAsgASAERgRAQaEBIQMMjAILAkACQCABLQAAQcYAaw4LAE9PT09PT09PTwFPCyABQQFqIQFBiwEhAwzzAQsgAUEBaiEBQYwBIQMM8gELIAEgBEYEQEGiASEDDIsCCyABLQAAQdAARw1MIAFBAWohAQxGCyABIARGBEBBowEhAwyKAgsCQAJAIAEtAABByQBrDgcBTU1NTU0ATQsgAUEBaiEBQY4BIQMM8QELIAFBAWohAUEiDE0LQaQBIQMgASAERg2IAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHAzwBqLQAARw1LIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyJAgsgAkEANgIAIAZBAWohAUEdDEwLIAEgBEYEQEGlASEDDIgCCwJAAkAgAS0AAEHSAGsOAwBLAUsLIAFBAWohAUGQASEDDO8BCyABQQFqIQFBBAxLCyABIARGBEBBpgEhAwyHAgsCQAJAAkACQAJAIAEtAABBwQBrDhUATU1NTU1NTU1NTQFNTQJNTQNNTQRNCyABQQFqIQFBiAEhAwzxAQsgAUEBaiEBQYkBIQMM8AELIAFBAWohAUGKASEDDO8BCyABQQFqIQFBjwEhAwzuAQsgAUEBaiEBQZEBIQMM7QELQacBIQMgASAERg2FAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHtzwBqLQAARw1IIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyGAgsgAkEANgIAIAZBAWohAUERDEkLQagBIQMgASAERg2EAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHCzwBqLQAARw1HIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyFAgsgAkEANgIAIAZBAWohAUEsDEgLQakBIQMgASAERg2DAiACKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHFzwBqLQAARw1GIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyEAgsgAkEANgIAIAZBAWohAUErDEcLQaoBIQMgASAERg2CAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHKzwBqLQAARw1FIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyDAgsgAkEANgIAIAZBAWohAUEUDEYLIAEgBEYEQEGrASEDDIICCwJAAkACQAJAIAEtAABBwgBrDg8AAQJHR0dHR0dHR0dHRwNHCyABQQFqIQFBkwEhAwzrAQsgAUEBaiEBQZQBIQMM6gELIAFBAWohAUGVASEDDOkBCyABQQFqIQFBlgEhAwzoAQsgASAERgRAQawBIQMMgQILIAEtAABBxQBHDUIgAUEBaiEBDD0LQa0BIQMgASAERg3/ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHNzwBqLQAARw1CIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyAAgsgAkEANgIAIAZBAWohAUEODEMLIAEgBEYEQEGuASEDDP8BCyABLQAAQdAARw1AIAFBAWohAUElDEILQa8BIQMgASAERg39ASACKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEHQzwBqLQAARw1AIABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz+AQsgAkEANgIAIAZBAWohAUEqDEELIAEgBEYEQEGwASEDDP0BCwJAAkAgAS0AAEHVAGsOCwBAQEBAQEBAQEABQAsgAUEBaiEBQZoBIQMM5AELIAFBAWohAUGbASEDDOMBCyABIARGBEBBsQEhAwz8AQsCQAJAIAEtAABBwQBrDhQAPz8/Pz8/Pz8/Pz8/Pz8/Pz8/AT8LIAFBAWohAUGZASEDDOMBCyABQQFqIQFBnAEhAwziAQtBsgEhAyABIARGDfoBIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQdnPAGotAABHDT0gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPsBCyACQQA2AgAgBkEBaiEBQSEMPgtBswEhAyABIARGDfkBIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAS0AACAAQd3PAGotAABHDTwgAEEGRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPoBCyACQQA2AgAgBkEBaiEBQRoMPQsgASAERgRAQbQBIQMM+QELAkACQAJAIAEtAABBxQBrDhEAPT09PT09PT09AT09PT09Aj0LIAFBAWohAUGdASEDDOEBCyABQQFqIQFBngEhAwzgAQsgAUEBaiEBQZ8BIQMM3wELQbUBIQMgASAERg33ASACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHkzwBqLQAARw06IABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz4AQsgAkEANgIAIAZBAWohAUEoDDsLQbYBIQMgASAERg32ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHqzwBqLQAARw05IABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz3AQsgAkEANgIAIAZBAWohAUEHDDoLIAEgBEYEQEG3ASEDDPYBCwJAAkAgAS0AAEHFAGsODgA5OTk5OTk5OTk5OTkBOQsgAUEBaiEBQaEBIQMM3QELIAFBAWohAUGiASEDDNwBC0G4ASEDIAEgBEYN9AEgAigCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABB7c8Aai0AAEcNNyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9QELIAJBADYCACAGQQFqIQFBEgw4C0G5ASEDIAEgBEYN8wEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8M8Aai0AAEcNNiAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9AELIAJBADYCACAGQQFqIQFBIAw3C0G6ASEDIAEgBEYN8gEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8s8Aai0AAEcNNSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8wELIAJBADYCACAGQQFqIQFBDww2CyABIARGBEBBuwEhAwzyAQsCQAJAIAEtAABByQBrDgcANTU1NTUBNQsgAUEBaiEBQaUBIQMM2QELIAFBAWohAUGmASEDDNgBC0G8ASEDIAEgBEYN8AEgAigCACIAIAQgAWtqIQUgASAAa0EHaiEGAkADQCABLQAAIABB9M8Aai0AAEcNMyAAQQdGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8QELIAJBADYCACAGQQFqIQFBGww0CyABIARGBEBBvQEhAwzwAQsCQAJAAkAgAS0AAEHCAGsOEgA0NDQ0NDQ0NDQBNDQ0NDQ0AjQLIAFBAWohAUGkASEDDNgBCyABQQFqIQFBpwEhAwzXAQsgAUEBaiEBQagBIQMM1gELIAEgBEYEQEG+ASEDDO8BCyABLQAAQc4ARw0wIAFBAWohAQwsCyABIARGBEBBvwEhAwzuAQsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABLQAAQcEAaw4VAAECAz8EBQY/Pz8HCAkKCz8MDQ4PPwsgAUEBaiEBQegAIQMM4wELIAFBAWohAUHpACEDDOIBCyABQQFqIQFB7gAhAwzhAQsgAUEBaiEBQfIAIQMM4AELIAFBAWohAUHzACEDDN8BCyABQQFqIQFB9gAhAwzeAQsgAUEBaiEBQfcAIQMM3QELIAFBAWohAUH6ACEDDNwBCyABQQFqIQFBgwEhAwzbAQsgAUEBaiEBQYQBIQMM2gELIAFBAWohAUGFASEDDNkBCyABQQFqIQFBkgEhAwzYAQsgAUEBaiEBQZgBIQMM1wELIAFBAWohAUGgASEDDNYBCyABQQFqIQFBowEhAwzVAQsgAUEBaiEBQaoBIQMM1AELIAEgBEcEQCACQRA2AgggAiABNgIEQasBIQMM1AELQcABIQMM7AELQQAhAAJAIAIoAjgiA0UNACADKAI0IgNFDQAgAiADEQAAIQALIABFDV4gAEEVRw0HIAJB0QA2AhwgAiABNgIUIAJBsBc2AhAgAkEVNgIMQQAhAwzrAQsgAUEBaiABIARHDQgaQcIBIQMM6gELA0ACQCABLQAAQQprDgQIAAALAAsgBCABQQFqIgFHDQALQcMBIQMM6QELIAEgBEcEQCACQRE2AgggAiABNgIEQQEhAwzQAQtBxAEhAwzoAQsgASAERgRAQcUBIQMM6AELAkACQCABLQAAQQprDgQBKCgAKAsgAUEBagwJCyABQQFqDAULIAEgBEYEQEHGASEDDOcBCwJAAkAgAS0AAEEKaw4XAQsLAQsLCwsLCwsLCwsLCwsLCwsLCwALCyABQQFqIQELQbABIQMMzQELIAEgBEYEQEHIASEDDOYBCyABLQAAQSBHDQkgAkEAOwEyIAFBAWohAUGzASEDDMwBCwNAIAEhAAJAIAEgBEcEQCABLQAAQTBrQf8BcSIDQQpJDQEMJwtBxwEhAwzmAQsCQCACLwEyIgFBmTNLDQAgAiABQQpsIgU7ATIgBUH+/wNxIANB//8Dc0sNACAAQQFqIQEgAiADIAVqIgM7ATIgA0H//wNxQegHSQ0BCwtBACEDIAJBADYCHCACQcEJNgIQIAJBDTYCDCACIABBAWo2AhQM5AELIAJBADYCHCACIAE2AhQgAkHwDDYCECACQRs2AgxBACEDDOMBCyACKAIEIQAgAkEANgIEIAIgACABECYiAA0BIAFBAWoLIQFBrQEhAwzIAQsgAkHBATYCHCACIAA2AgwgAiABQQFqNgIUQQAhAwzgAQsgAigCBCEAIAJBADYCBCACIAAgARAmIgANASABQQFqCyEBQa4BIQMMxQELIAJBwgE2AhwgAiAANgIMIAIgAUEBajYCFEEAIQMM3QELIAJBADYCHCACIAE2AhQgAkGXCzYCECACQQ02AgxBACEDDNwBCyACQQA2AhwgAiABNgIUIAJB4xA2AhAgAkEJNgIMQQAhAwzbAQsgAkECOgAoDKwBC0EAIQMgAkEANgIcIAJBrws2AhAgAkECNgIMIAIgAUEBajYCFAzZAQtBAiEDDL8BC0ENIQMMvgELQSYhAwy9AQtBFSEDDLwBC0EWIQMMuwELQRghAwy6AQtBHCEDDLkBC0EdIQMMuAELQSAhAwy3AQtBISEDDLYBC0EjIQMMtQELQcYAIQMMtAELQS4hAwyzAQtBPSEDDLIBC0HLACEDDLEBC0HOACEDDLABC0HYACEDDK8BC0HZACEDDK4BC0HbACEDDK0BC0HxACEDDKwBC0H0ACEDDKsBC0GNASEDDKoBC0GXASEDDKkBC0GpASEDDKgBC0GvASEDDKcBC0GxASEDDKYBCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJB8Rs2AhAgAkEGNgIMDL0BCyACQQA2AgAgBkEBaiEBQSQLOgApIAIoAgQhACACQQA2AgQgAiAAIAEQJyIARQRAQeUAIQMMowELIAJB+QA2AhwgAiABNgIUIAIgADYCDEEAIQMMuwELIABBFUcEQCACQQA2AhwgAiABNgIUIAJBzA42AhAgAkEgNgIMQQAhAwy7AQsgAkH4ADYCHCACIAE2AhQgAkHKGDYCECACQRU2AgxBACEDDLoBCyACQQA2AhwgAiABNgIUIAJBjhs2AhAgAkEGNgIMQQAhAwy5AQsgAkEANgIcIAIgATYCFCACQf4RNgIQIAJBBzYCDEEAIQMMuAELIAJBADYCHCACIAE2AhQgAkGMHDYCECACQQc2AgxBACEDDLcBCyACQQA2AhwgAiABNgIUIAJBww82AhAgAkEHNgIMQQAhAwy2AQsgAkEANgIcIAIgATYCFCACQcMPNgIQIAJBBzYCDEEAIQMMtQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv","base64")});var FE=b((wz,NE)=>{"use strict";var{Buffer:fU}=w("node:buffer");NE.exports=fU.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADDsYBAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHyAhIyUmKCorLC8wMTIzNDU2Nzk6Ozw9lANAQkRFRklLTk9QUVJTVFVWWFpbXF1eX2BhYmNkZWZnaGpsb3Bxc3V2eHl6e3x/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcsBzAHNAc4BzwGKA4kDiAOHA4QDgwOAA/sC+gL5AvgC9wL0AvMC8gLLAsECsALZAQsgASAERw3wAkHdASEDDLMDCyABIARHDcgBQcMBIQMMsgMLIAEgBEcNe0H3ACEDDLEDCyABIARHDXBB7wAhAwywAwsgASAERw1pQeoAIQMMrwMLIAEgBEcNZUHoACEDDK4DCyABIARHDWJB5gAhAwytAwsgASAERw0aQRghAwysAwsgASAERw0VQRIhAwyrAwsgASAERw1CQcUAIQMMqgMLIAEgBEcNNEE/IQMMqQMLIAEgBEcNMkE8IQMMqAMLIAEgBEcNK0ExIQMMpwMLIAItAC5BAUYNnwMMwQILQQAhAAJAAkACQCACLQAqRQ0AIAItACtFDQAgAi8BMCIDQQJxRQ0BDAILIAIvATAiA0EBcUUNAQtBASEAIAItAChBAUYNACACLwEyIgVB5ABrQeQASQ0AIAVBzAFGDQAgBUGwAkYNACADQcAAcQ0AQQAhACADQYgEcUGABEYNACADQShxQQBHIQALIAJBADsBMCACQQA6AC8gAEUN3wIgAkIANwMgDOACC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAARQ3MASAAQRVHDd0CIAJBBDYCHCACIAE2AhQgAkGwGDYCECACQRU2AgxBACEDDKQDCyABIARGBEBBBiEDDKQDCyABQQFqIQFBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAA3ZAgwcCyACQgA3AyBBEiEDDIkDCyABIARHDRZBHSEDDKEDCyABIARHBEAgAUEBaiEBQRAhAwyIAwtBByEDDKADCyACIAIpAyAiCiAEIAFrrSILfSIMQgAgCiAMWhs3AyAgCiALWA3UAkEIIQMMnwMLIAEgBEcEQCACQQk2AgggAiABNgIEQRQhAwyGAwtBCSEDDJ4DCyACKQMgQgBSDccBIAIgAi8BMEGAAXI7ATAMQgsgASAERw0/QdAAIQMMnAMLIAEgBEYEQEELIQMMnAMLIAFBAWohAUEAIQACQCACKAI4IgNFDQAgAygCUCIDRQ0AIAIgAxEAACEACyAADc8CDMYBC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ3GASAAQRVHDc0CIAJBCzYCHCACIAE2AhQgAkGCGTYCECACQRU2AgxBACEDDJoDC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ0MIABBFUcNygIgAkEaNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMmQMLQQAhAAJAIAIoAjgiA0UNACADKAJMIgNFDQAgAiADEQAAIQALIABFDcQBIABBFUcNxwIgAkELNgIcIAIgATYCFCACQZEXNgIQIAJBFTYCDEEAIQMMmAMLIAEgBEYEQEEPIQMMmAMLIAEtAAAiAEE7Rg0HIABBDUcNxAIgAUEBaiEBDMMBC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3DASAAQRVHDcICIAJBDzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJYDCwNAIAEtAABB8DVqLQAAIgBBAUcEQCAAQQJHDcECIAIoAgQhAEEAIQMgAkEANgIEIAIgACABQQFqIgEQLSIADcICDMUBCyAEIAFBAWoiAUcNAAtBEiEDDJUDC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3FASAAQRVHDb0CIAJBGzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJQDCyABIARGBEBBFiEDDJQDCyACQQo2AgggAiABNgIEQQAhAAJAIAIoAjgiA0UNACADKAJIIgNFDQAgAiADEQAAIQALIABFDcIBIABBFUcNuQIgAkEVNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMkwMLIAEgBEcEQANAIAEtAABB8DdqLQAAIgBBAkcEQAJAIABBAWsOBMQCvQIAvgK9AgsgAUEBaiEBQQghAwz8AgsgBCABQQFqIgFHDQALQRUhAwyTAwtBFSEDDJIDCwNAIAEtAABB8DlqLQAAIgBBAkcEQCAAQQFrDgTFArcCwwK4ArcCCyAEIAFBAWoiAUcNAAtBGCEDDJEDCyABIARHBEAgAkELNgIIIAIgATYCBEEHIQMM+AILQRkhAwyQAwsgAUEBaiEBDAILIAEgBEYEQEEaIQMMjwMLAkAgAS0AAEENaw4UtQG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwEAvwELQQAhAyACQQA2AhwgAkGvCzYCECACQQI2AgwgAiABQQFqNgIUDI4DCyABIARGBEBBGyEDDI4DCyABLQAAIgBBO0cEQCAAQQ1HDbECIAFBAWohAQy6AQsgAUEBaiEBC0EiIQMM8wILIAEgBEYEQEEcIQMMjAMLQgAhCgJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAS0AAEEwaw43wQLAAgABAgMEBQYH0AHQAdAB0AHQAdAB0AEICQoLDA3QAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdABDg8QERIT0AELQgIhCgzAAgtCAyEKDL8CC0IEIQoMvgILQgUhCgy9AgtCBiEKDLwCC0IHIQoMuwILQgghCgy6AgtCCSEKDLkCC0IKIQoMuAILQgshCgy3AgtCDCEKDLYCC0INIQoMtQILQg4hCgy0AgtCDyEKDLMCC0IKIQoMsgILQgshCgyxAgtCDCEKDLACC0INIQoMrwILQg4hCgyuAgtCDyEKDK0CC0IAIQoCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEtAABBMGsON8ACvwIAAQIDBAUGB74CvgK+Ar4CvgK+Ar4CCAkKCwwNvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ag4PEBESE74CC0ICIQoMvwILQgMhCgy+AgtCBCEKDL0CC0IFIQoMvAILQgYhCgy7AgtCByEKDLoCC0IIIQoMuQILQgkhCgy4AgtCCiEKDLcCC0ILIQoMtgILQgwhCgy1AgtCDSEKDLQCC0IOIQoMswILQg8hCgyyAgtCCiEKDLECC0ILIQoMsAILQgwhCgyvAgtCDSEKDK4CC0IOIQoMrQILQg8hCgysAgsgAiACKQMgIgogBCABa60iC30iDEIAIAogDFobNwMgIAogC1gNpwJBHyEDDIkDCyABIARHBEAgAkEJNgIIIAIgATYCBEElIQMM8AILQSAhAwyIAwtBASEFIAIvATAiA0EIcUUEQCACKQMgQgBSIQULAkAgAi0ALgRAQQEhACACLQApQQVGDQEgA0HAAHFFIAVxRQ0BC0EAIQAgA0HAAHENAEECIQAgA0EIcQ0AIANBgARxBEACQCACLQAoQQFHDQAgAi0ALUEKcQ0AQQUhAAwCC0EEIQAMAQsgA0EgcUUEQAJAIAItAChBAUYNACACLwEyIgBB5ABrQeQASQ0AIABBzAFGDQAgAEGwAkYNAEEEIQAgA0EocUUNAiADQYgEcUGABEYNAgtBACEADAELQQBBAyACKQMgUBshAAsgAEEBaw4FvgIAsAEBpAKhAgtBESEDDO0CCyACQQE6AC8MhAMLIAEgBEcNnQJBJCEDDIQDCyABIARHDRxBxgAhAwyDAwtBACEAAkAgAigCOCIDRQ0AIAMoAkQiA0UNACACIAMRAAAhAAsgAEUNJyAAQRVHDZgCIAJB0AA2AhwgAiABNgIUIAJBkRg2AhAgAkEVNgIMQQAhAwyCAwsgASAERgRAQSghAwyCAwtBACEDIAJBADYCBCACQQw2AgggAiABIAEQKiIARQ2UAiACQSc2AhwgAiABNgIUIAIgADYCDAyBAwsgASAERgRAQSkhAwyBAwsgAS0AACIAQSBGDRMgAEEJRw2VAiABQQFqIQEMFAsgASAERwRAIAFBAWohAQwWC0EqIQMM/wILIAEgBEYEQEErIQMM/wILIAEtAAAiAEEJRyAAQSBHcQ2QAiACLQAsQQhHDd0CIAJBADoALAzdAgsgASAERgRAQSwhAwz+AgsgAS0AAEEKRw2OAiABQQFqIQEMsAELIAEgBEcNigJBLyEDDPwCCwNAIAEtAAAiAEEgRwRAIABBCmsOBIQCiAKIAoQChgILIAQgAUEBaiIBRw0AC0ExIQMM+wILQTIhAyABIARGDfoCIAIoAgAiACAEIAFraiEHIAEgAGtBA2ohBgJAA0AgAEHwO2otAAAgAS0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDQEgAEEDRgRAQQYhAQziAgsgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAc2AgAM+wILIAJBADYCAAyGAgtBMyEDIAQgASIARg35AiAEIAFrIAIoAgAiAWohByAAIAFrQQhqIQYCQANAIAFB9DtqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBCEYEQEEFIQEM4QILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPoCCyACQQA2AgAgACEBDIUCC0E0IQMgBCABIgBGDfgCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgJAA0AgAUHQwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBBUYEQEEHIQEM4AILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPkCCyACQQA2AgAgACEBDIQCCyABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRg0JDIECCyAEIAFBAWoiAUcNAAtBMCEDDPgCC0EwIQMM9wILIAEgBEcEQANAIAEtAAAiAEEgRwRAIABBCmsOBP8B/gH+Af8B/gELIAQgAUEBaiIBRw0AC0E4IQMM9wILQTghAwz2AgsDQCABLQAAIgBBIEcgAEEJR3EN9gEgBCABQQFqIgFHDQALQTwhAwz1AgsDQCABLQAAIgBBIEcEQAJAIABBCmsOBPkBBAT5AQALIABBLEYN9QEMAwsgBCABQQFqIgFHDQALQT8hAwz0AgtBwAAhAyABIARGDfMCIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAEGAQGstAAAgAS0AAEEgckcNASAAQQZGDdsCIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPQCCyACQQA2AgALQTYhAwzZAgsgASAERgRAQcEAIQMM8gILIAJBDDYCCCACIAE2AgQgAi0ALEEBaw4E+wHuAewB6wHUAgsgAUEBaiEBDPoBCyABIARHBEADQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxIgBBCUYNACAAQSBGDQACQAJAAkACQCAAQeMAaw4TAAMDAwMDAwMBAwMDAwMDAwMDAgMLIAFBAWohAUExIQMM3AILIAFBAWohAUEyIQMM2wILIAFBAWohAUEzIQMM2gILDP4BCyAEIAFBAWoiAUcNAAtBNSEDDPACC0E1IQMM7wILIAEgBEcEQANAIAEtAABBgDxqLQAAQQFHDfcBIAQgAUEBaiIBRw0AC0E9IQMM7wILQT0hAwzuAgtBACEAAkAgAigCOCIDRQ0AIAMoAkAiA0UNACACIAMRAAAhAAsgAEUNASAAQRVHDeYBIAJBwgA2AhwgAiABNgIUIAJB4xg2AhAgAkEVNgIMQQAhAwztAgsgAUEBaiEBC0E8IQMM0gILIAEgBEYEQEHCACEDDOsCCwJAA0ACQCABLQAAQQlrDhgAAswCzALRAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAgDMAgsgBCABQQFqIgFHDQALQcIAIQMM6wILIAFBAWohASACLQAtQQFxRQ3+AQtBLCEDDNACCyABIARHDd4BQcQAIQMM6AILA0AgAS0AAEGQwABqLQAAQQFHDZwBIAQgAUEBaiIBRw0AC0HFACEDDOcCCyABLQAAIgBBIEYN/gEgAEE6Rw3AAiACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgAN3gEM3QELQccAIQMgBCABIgBGDeUCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFBkMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvwIgAUEFRg3CAiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzlAgtByAAhAyAEIAEiAEYN5AIgBCABayACKAIAIgFqIQcgACABa0EJaiEGA0AgAUGWwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw2+AkECIAFBCUYNwgIaIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOQCCyABIARGBEBByQAhAwzkAgsCQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxQe4Aaw4HAL8CvwK/Ar8CvwIBvwILIAFBAWohAUE+IQMMywILIAFBAWohAUE/IQMMygILQcoAIQMgBCABIgBGDeICIAQgAWsgAigCACIBaiEGIAAgAWtBAWohBwNAIAFBoMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvAIgAUEBRg2+AiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBjYCAAziAgtBywAhAyAEIAEiAEYN4QIgBCABayACKAIAIgFqIQcgACABa0EOaiEGA0AgAUGiwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw27AiABQQ5GDb4CIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOECC0HMACEDIAQgASIARg3gAiAEIAFrIAIoAgAiAWohByAAIAFrQQ9qIQYDQCABQcDCAGotAAAgAC0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDboCQQMgAUEPRg2+AhogAUEBaiEBIAQgAEEBaiIARw0ACyACIAc2AgAM4AILQc0AIQMgBCABIgBGDd8CIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFB0MIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNuQJBBCABQQVGDb0CGiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzfAgsgASAERgRAQc4AIQMM3wILAkACQAJAAkAgAS0AACIAQSByIAAgAEHBAGtB/wFxQRpJG0H/AXFB4wBrDhMAvAK8ArwCvAK8ArwCvAK8ArwCvAK8ArwCAbwCvAK8AgIDvAILIAFBAWohAUHBACEDDMgCCyABQQFqIQFBwgAhAwzHAgsgAUEBaiEBQcMAIQMMxgILIAFBAWohAUHEACEDDMUCCyABIARHBEAgAkENNgIIIAIgATYCBEHFACEDDMUCC0HPACEDDN0CCwJAAkAgAS0AAEEKaw4EAZABkAEAkAELIAFBAWohAQtBKCEDDMMCCyABIARGBEBB0QAhAwzcAgsgAS0AAEEgRw0AIAFBAWohASACLQAtQQFxRQ3QAQtBFyEDDMECCyABIARHDcsBQdIAIQMM2QILQdMAIQMgASAERg3YAiACKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABB1sIAai0AAEcNxwEgAEEBRg3KASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBjYCAAzYAgsgASAERgRAQdUAIQMM2AILIAEtAABBCkcNwgEgAUEBaiEBDMoBCyABIARGBEBB1gAhAwzXAgsCQAJAIAEtAABBCmsOBADDAcMBAcMBCyABQQFqIQEMygELIAFBAWohAUHKACEDDL0CC0EAIQACQCACKAI4IgNFDQAgAygCPCIDRQ0AIAIgAxEAACEACyAADb8BQc0AIQMMvAILIAItAClBIkYNzwIMiQELIAQgASIFRgRAQdsAIQMM1AILQQAhAEEBIQFBASEGQQAhAwJAAn8CQAJAAkACQAJAAkACQCAFLQAAQTBrDgrFAcQBAAECAwQFBgjDAQtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshA0EAIQFBACEGDL0BC0EJIQNBASEAQQAhAUEAIQYMvAELIAEgBEYEQEHdACEDDNMCCyABLQAAQS5HDbgBIAFBAWohAQyIAQsgASAERw22AUHfACEDDNECCyABIARHBEAgAkEONgIIIAIgATYCBEHQACEDDLgCC0HgACEDDNACC0HhACEDIAEgBEYNzwIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGA0AgAS0AACAAQeLCAGotAABHDbEBIABBA0YNswEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMzwILQeIAIQMgASAERg3OAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYDQCABLQAAIABB5sIAai0AAEcNsAEgAEECRg2vASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAzOAgtB4wAhAyABIARGDc0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgNAIAEtAAAgAEHpwgBqLQAARw2vASAAQQNGDa0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADM0CCyABIARGBEBB5QAhAwzNAgsgAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANqgFB1gAhAwyzAgsgASAERwRAA0AgAS0AACIAQSBHBEACQAJAAkAgAEHIAGsOCwABswGzAbMBswGzAbMBswGzAQKzAQsgAUEBaiEBQdIAIQMMtwILIAFBAWohAUHTACEDDLYCCyABQQFqIQFB1AAhAwy1AgsgBCABQQFqIgFHDQALQeQAIQMMzAILQeQAIQMMywILA0AgAS0AAEHwwgBqLQAAIgBBAUcEQCAAQQJrDgOnAaYBpQGkAQsgBCABQQFqIgFHDQALQeYAIQMMygILIAFBAWogASAERw0CGkHnACEDDMkCCwNAIAEtAABB8MQAai0AACIAQQFHBEACQCAAQQJrDgSiAaEBoAEAnwELQdcAIQMMsQILIAQgAUEBaiIBRw0AC0HoACEDDMgCCyABIARGBEBB6QAhAwzIAgsCQCABLQAAIgBBCmsOGrcBmwGbAbQBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBpAGbAZsBAJkBCyABQQFqCyEBQQYhAwytAgsDQCABLQAAQfDGAGotAABBAUcNfSAEIAFBAWoiAUcNAAtB6gAhAwzFAgsgAUEBaiABIARHDQIaQesAIQMMxAILIAEgBEYEQEHsACEDDMQCCyABQQFqDAELIAEgBEYEQEHtACEDDMMCCyABQQFqCyEBQQQhAwyoAgsgASAERgRAQe4AIQMMwQILAkACQAJAIAEtAABB8MgAai0AAEEBaw4HkAGPAY4BAHwBAo0BCyABQQFqIQEMCwsgAUEBagyTAQtBACEDIAJBADYCHCACQZsSNgIQIAJBBzYCDCACIAFBAWo2AhQMwAILAkADQCABLQAAQfDIAGotAAAiAEEERwRAAkACQCAAQQFrDgeUAZMBkgGNAQAEAY0BC0HaACEDDKoCCyABQQFqIQFB3AAhAwypAgsgBCABQQFqIgFHDQALQe8AIQMMwAILIAFBAWoMkQELIAQgASIARgRAQfAAIQMMvwILIAAtAABBL0cNASAAQQFqIQEMBwsgBCABIgBGBEBB8QAhAwy+AgsgAC0AACIBQS9GBEAgAEEBaiEBQd0AIQMMpQILIAFBCmsiA0EWSw0AIAAhAUEBIAN0QYmAgAJxDfkBC0EAIQMgAkEANgIcIAIgADYCFCACQYwcNgIQIAJBBzYCDAy8AgsgASAERwRAIAFBAWohAUHeACEDDKMCC0HyACEDDLsCCyABIARGBEBB9AAhAwy7AgsCQCABLQAAQfDMAGotAABBAWsOA/cBcwCCAQtB4QAhAwyhAgsgASAERwRAA0AgAS0AAEHwygBqLQAAIgBBA0cEQAJAIABBAWsOAvkBAIUBC0HfACEDDKMCCyAEIAFBAWoiAUcNAAtB8wAhAwy6AgtB8wAhAwy5AgsgASAERwRAIAJBDzYCCCACIAE2AgRB4AAhAwygAgtB9QAhAwy4AgsgASAERgRAQfYAIQMMuAILIAJBDzYCCCACIAE2AgQLQQMhAwydAgsDQCABLQAAQSBHDY4CIAQgAUEBaiIBRw0AC0H3ACEDDLUCCyABIARGBEBB+AAhAwy1AgsgAS0AAEEgRw16IAFBAWohAQxbC0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAADXgMgAILIAEgBEYEQEH6ACEDDLMCCyABLQAAQcwARw10IAFBAWohAUETDHYLQfsAIQMgASAERg2xAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYDQCABLQAAIABB8M4Aai0AAEcNcyAAQQVGDXUgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMsQILIAEgBEYEQEH8ACEDDLECCwJAAkAgAS0AAEHDAGsODAB0dHR0dHR0dHR0AXQLIAFBAWohAUHmACEDDJgCCyABQQFqIQFB5wAhAwyXAgtB/QAhAyABIARGDa8CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDXIgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADLACCyACQQA2AgAgBkEBaiEBQRAMcwtB/gAhAyABIARGDa4CIAIoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQfbOAGotAABHDXEgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK8CCyACQQA2AgAgBkEBaiEBQRYMcgtB/wAhAyABIARGDa0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQfzOAGotAABHDXAgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK4CCyACQQA2AgAgBkEBaiEBQQUMcQsgASAERgRAQYABIQMMrQILIAEtAABB2QBHDW4gAUEBaiEBQQgMcAsgASAERgRAQYEBIQMMrAILAkACQCABLQAAQc4Aaw4DAG8BbwsgAUEBaiEBQesAIQMMkwILIAFBAWohAUHsACEDDJICCyABIARGBEBBggEhAwyrAgsCQAJAIAEtAABByABrDggAbm5ubm5uAW4LIAFBAWohAUHqACEDDJICCyABQQFqIQFB7QAhAwyRAgtBgwEhAyABIARGDakCIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQYDPAGotAABHDWwgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKoCCyACQQA2AgAgBkEBaiEBQQAMbQtBhAEhAyABIARGDagCIAIoAgAiACAEIAFraiEFIAEgAGtBBGohBgJAA0AgAS0AACAAQYPPAGotAABHDWsgAEEERg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKkCCyACQQA2AgAgBkEBaiEBQSMMbAsgASAERgRAQYUBIQMMqAILAkACQCABLQAAQcwAaw4IAGtra2trawFrCyABQQFqIQFB7wAhAwyPAgsgAUEBaiEBQfAAIQMMjgILIAEgBEYEQEGGASEDDKcCCyABLQAAQcUARw1oIAFBAWohAQxgC0GHASEDIAEgBEYNpQIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBiM8Aai0AAEcNaCAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpgILIAJBADYCACAGQQFqIQFBLQxpC0GIASEDIAEgBEYNpAIgAigCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABB0M8Aai0AAEcNZyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpQILIAJBADYCACAGQQFqIQFBKQxoCyABIARGBEBBiQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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AAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==","base64")});var xi=b((bz,HE)=>{"use strict";var ME=["GET","HEAD","POST"],mU=new Set(ME),EU=[101,204,205,304],UE=[301,302,303,307,308],IU=new Set(UE),LE=["1","7","9","11","13","15","17","19","20","21","22","23","25","37","42","43","53","69","77","79","87","95","101","102","103","104","109","110","111","113","115","117","119","123","135","137","139","143","161","179","389","427","465","512","513","514","515","526","530","531","532","540","548","554","556","563","587","601","636","989","990","993","995","1719","1720","1723","2049","3659","4045","4190","5060","5061","6000","6566","6665","6666","6667","6668","6669","6679","6697","10080"],BU=new Set(LE),TE=["","no-referrer","no-referrer-when-downgrade","same-origin","origin","strict-origin","origin-when-cross-origin","strict-origin-when-cross-origin","unsafe-url"],CU=new Set(TE),QU=["follow","manual","error"],PE=["GET","HEAD","OPTIONS","TRACE"],yU=new Set(PE),wU=["navigate","same-origin","no-cors","cors"],bU=["omit","same-origin","include"],kU=["default","no-store","reload","no-cache","force-cache","only-if-cached"],SU=["content-encoding","content-language","content-location","content-type","content-length"],xU=["half"],_E=["CONNECT","TRACE","TRACK"],DU=new Set(_E),OE=["audio","audioworklet","font","image","manifest","paintworklet","script","style","track","video","xslt",""],vU=new Set(OE);HE.exports={subresource:OE,forbiddenMethods:_E,requestBodyHeader:SU,referrerPolicy:TE,requestRedirect:QU,requestMode:wU,requestCredentials:bU,requestCache:kU,redirectStatus:UE,corsSafeListedMethods:ME,nullBodyStatus:EU,safeMethods:PE,badPorts:LE,requestDuplex:xU,subresourceSet:vU,badPortsSet:BU,redirectStatusSet:IU,corsSafeListedMethodsSet:mU,safeMethodsSet:yU,forbiddenMethodsSet:DU,referrerPolicySet:CU}});var Mu=b((kz,GE)=>{"use strict";var Fu=Symbol.for("undici.globalOrigin.1");function RU(){return globalThis[Fu]}function NU(e){if(e===void 0){Object.defineProperty(globalThis,Fu,{value:void 0,writable:!0,enumerable:!1,configurable:!1});return}let t=new URL(e);if(t.protocol!=="http:"&&t.protocol!=="https:")throw new TypeError(`Only http & https urls are allowed, received ${t.protocol}`);Object.defineProperty(globalThis,Fu,{value:t,writable:!0,enumerable:!1,configurable:!1})}GE.exports={getGlobalOrigin:RU,setGlobalOrigin:NU}});var Ve=b((Sz,zE)=>{"use strict";var Na=w("node:assert"),FU=new TextEncoder,Di=/^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/,MU=/[\u000A\u000D\u0009\u0020]/,UU=/[\u0009\u000A\u000C\u000D\u0020]/g,LU=/^[\u0009\u0020-\u007E\u0080-\u00FF]+$/;function TU(e){Na(e.protocol==="data:");let t=VE(e,!0);t=t.slice(5);let r={position:0},n=$n(",",t,r),o=n.length;if(n=qU(n,!0,!0),r.position>=t.length)return"failure";r.position++;let i=t.slice(o+1),s=JE(i);if(/;(\u0020){0,}base64$/i.test(n)){let A=$E(s);if(s=_U(A),s==="failure")return"failure";n=n.slice(0,-6),n=n.replace(/(\u0020)+$/,""),n=n.slice(0,-1)}n.startsWith(";")&&(n="text/plain"+n);let a=Uu(n);return a==="failure"&&(a=Uu("text/plain;charset=US-ASCII")),{mimeType:a,body:s}}function VE(e,t=!1){if(!t)return e.href;let r=e.href,n=e.hash.length,o=n===0?r:r.substring(0,r.length-n);return!n&&r.endsWith("#")?o.slice(0,-1):o}function Fa(e,t,r){let n="";for(;r.position<t.length&&e(t[r.position]);)n+=t[r.position],r.position++;return n}function $n(e,t,r){let n=t.indexOf(e,r.position),o=r.position;return n===-1?(r.position=t.length,t.slice(o)):(r.position=n,t.slice(o,r.position))}function JE(e){let t=FU.encode(e);return PU(t)}function qE(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function YE(e){return e>=48&&e<=57?e-48:(e&223)-55}function PU(e){let t=e.length,r=new Uint8Array(t),n=0;for(let o=0;o<t;++o){let i=e[o];i!==37?r[n++]=i:i===37&&!(qE(e[o+1])&&qE(e[o+2]))?r[n++]=37:(r[n++]=YE(e[o+1])<<4|YE(e[o+2]),o+=2)}return t===n?r:r.subarray(0,n)}function Uu(e){e=Ra(e,!0,!0);let t={position:0},r=$n("/",e,t);if(r.length===0||!Di.test(r)||t.position>e.length)return"failure";t.position++;let n=$n(";",e,t);if(n=Ra(n,!1,!0),n.length===0||!Di.test(n))return"failure";let o=r.toLowerCase(),i=n.toLowerCase(),s={type:o,subtype:i,parameters:new Map,essence:`${o}/${i}`};for(;t.position<e.length;){t.position++,Fa(c=>MU.test(c),e,t);let a=Fa(c=>c!==";"&&c!=="=",e,t);if(a=a.toLowerCase(),t.position<e.length){if(e[t.position]===";")continue;t.position++}if(t.position>e.length)break;let A=null;if(e[t.position]==='"')A=WE(e,t,!0),$n(";",e,t);else if(A=$n(";",e,t),A=Ra(A,!1,!0),A.length===0)continue;a.length!==0&&Di.test(a)&&(A.length===0||LU.test(A))&&!s.parameters.has(a)&&s.parameters.set(a,A)}return s}function _U(e){e=e.replace(UU,"");let t=e.length;if(t%4===0&&e.charCodeAt(t-1)===61&&(--t,e.charCodeAt(t-1)===61&&--t),t%4===1||/[^+/0-9A-Za-z]/.test(e.length===t?e:e.substring(0,t)))return"failure";let r=Buffer.from(e,"base64");return new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}function WE(e,t,r){let n=t.position,o="";for(Na(e[t.position]==='"'),t.position++;o+=Fa(s=>s!=='"'&&s!=="\\",e,t),!(t.position>=e.length);){let i=e[t.position];if(t.position++,i==="\\"){if(t.position>=e.length){o+="\\";break}o+=e[t.position],t.position++}else{Na(i==='"');break}}return r?o:e.slice(n,t.position)}function OU(e){Na(e!=="failure");let{parameters:t,essence:r}=e,n=r;for(let[o,i]of t.entries())n+=";",n+=o,n+="=",Di.test(i)||(i=i.replace(/(\\|")/g,"\\$1"),i='"'+i,i+='"'),n+=i;return n}function HU(e){return e===13||e===10||e===9||e===32}function Ra(e,t=!0,r=!0){return Lu(e,t,r,HU)}function GU(e){return e===13||e===10||e===9||e===12||e===32}function qU(e,t=!0,r=!0){return Lu(e,t,r,GU)}function Lu(e,t,r,n){let o=0,i=e.length-1;if(t)for(;o<e.length&&n(e.charCodeAt(o));)o++;if(r)for(;i>0&&n(e.charCodeAt(i));)i--;return o===0&&i===e.length-1?e:e.slice(o,i+1)}function $E(e){let t=e.length;if(65535>t)return String.fromCharCode.apply(null,e);let r="",n=0,o=65535;for(;n<t;)n+o>t&&(o=t-n),r+=String.fromCharCode.apply(null,e.subarray(n,n+=o));return r}function YU(e){switch(e.essence){case"application/ecmascript":case"application/javascript":case"application/x-ecmascript":case"application/x-javascript":case"text/ecmascript":case"text/javascript":case"text/javascript1.0":case"text/javascript1.1":case"text/javascript1.2":case"text/javascript1.3":case"text/javascript1.4":case"text/javascript1.5":case"text/jscript":case"text/livescript":case"text/x-ecmascript":case"text/x-javascript":return"text/javascript";case"application/json":case"text/json":return"application/json";case"image/svg+xml":return"image/svg+xml";case"text/xml":case"application/xml":return"application/xml"}return e.subtype.endsWith("+json")?"application/json":e.subtype.endsWith("+xml")?"application/xml":""}zE.exports={dataURLProcessor:TU,URLSerializer:VE,collectASequenceOfCodePoints:Fa,collectASequenceOfCodePointsFast:$n,stringPercentDecode:JE,parseMIMEType:Uu,collectAnHTTPQuotedString:WE,serializeAMimeType:OU,removeChars:Lu,removeHTTPWhitespace:Ra,minimizeSupportedMimeType:YU,HTTP_TOKEN_CODEPOINTS:Di,isomorphicDecode:$E}});var Le=b((xz,KE)=>{"use strict";var{types:Ot,inspect:VU}=w("node:util"),{markAsUncloneable:JU}=w("node:worker_threads"),{toUSVString:WU}=j(),k={};k.converters={};k.util={};k.errors={};k.errors.exception=function(e){return new TypeError(`${e.header}: ${e.message}`)};k.errors.conversionFailed=function(e){let t=e.types.length===1?"":" one of",r=`${e.argument} could not be converted to${t}: ${e.types.join(", ")}.`;return k.errors.exception({header:e.prefix,message:r})};k.errors.invalidArgument=function(e){return k.errors.exception({header:e.prefix,message:`"${e.value}" is an invalid ${e.type}.`})};k.brandCheck=function(e,t,r){if(r?.strict!==!1){if(!(e instanceof t)){let n=new TypeError("Illegal invocation");throw n.code="ERR_INVALID_THIS",n}}else if(e?.[Symbol.toStringTag]!==t.prototype[Symbol.toStringTag]){let n=new TypeError("Illegal invocation");throw n.code="ERR_INVALID_THIS",n}};k.argumentLengthCheck=function({length:e},t,r){if(e<t)throw k.errors.exception({message:`${t} argument${t!==1?"s":""} required, but${e?" only":""} ${e} found.`,header:r})};k.illegalConstructor=function(){throw k.errors.exception({header:"TypeError",message:"Illegal constructor"})};k.util.Type=function(e){switch(typeof e){case"undefined":return"Undefined";case"boolean":return"Boolean";case"string":return"String";case"symbol":return"Symbol";case"number":return"Number";case"bigint":return"BigInt";case"function":case"object":return e===null?"Null":"Object"}};k.util.markAsUncloneable=JU||(()=>{});k.util.ConvertToInt=function(e,t,r,n){let o,i;t===64?(o=Math.pow(2,53)-1,r==="unsigned"?i=0:i=Math.pow(-2,53)+1):r==="unsigned"?(i=0,o=Math.pow(2,t)-1):(i=Math.pow(-2,t)-1,o=Math.pow(2,t-1)-1);let s=Number(e);if(s===0&&(s=0),n?.enforceRange===!0){if(Number.isNaN(s)||s===Number.POSITIVE_INFINITY||s===Number.NEGATIVE_INFINITY)throw k.errors.exception({header:"Integer conversion",message:`Could not convert ${k.util.Stringify(e)} to an integer.`});if(s=k.util.IntegerPart(s),s<i||s>o)throw k.errors.exception({header:"Integer conversion",message:`Value must be between ${i}-${o}, got ${s}.`});return s}return!Number.isNaN(s)&&n?.clamp===!0?(s=Math.min(Math.max(s,i),o),Math.floor(s)%2===0?s=Math.floor(s):s=Math.ceil(s),s):Number.isNaN(s)||s===0&&Object.is(0,s)||s===Number.POSITIVE_INFINITY||s===Number.NEGATIVE_INFINITY?0:(s=k.util.IntegerPart(s),s=s%Math.pow(2,t),r==="signed"&&s>=Math.pow(2,t)-1?s-Math.pow(2,t):s)};k.util.IntegerPart=function(e){let t=Math.floor(Math.abs(e));return e<0?-1*t:t};k.util.Stringify=function(e){switch(k.util.Type(e)){case"Symbol":return`Symbol(${e.description})`;case"Object":return VU(e);case"String":return`"${e}"`;default:return`${e}`}};k.sequenceConverter=function(e){return(t,r,n,o)=>{if(k.util.Type(t)!=="Object")throw k.errors.exception({header:r,message:`${n} (${k.util.Stringify(t)}) is not iterable.`});let i=typeof o=="function"?o():t?.[Symbol.iterator]?.(),s=[],a=0;if(i===void 0||typeof i.next!="function")throw k.errors.exception({header:r,message:`${n} is not iterable.`});for(;;){let{done:A,value:c}=i.next();if(A)break;s.push(e(c,r,`${n}[${a++}]`))}return s}};k.recordConverter=function(e,t){return(r,n,o)=>{if(k.util.Type(r)!=="Object")throw k.errors.exception({header:n,message:`${o} ("${k.util.Type(r)}") is not an Object.`});let i={};if(!Ot.isProxy(r)){let a=[...Object.getOwnPropertyNames(r),...Object.getOwnPropertySymbols(r)];for(let A of a){let c=e(A,n,o),l=t(r[A],n,o);i[c]=l}return i}let s=Reflect.ownKeys(r);for(let a of s)if(Reflect.getOwnPropertyDescriptor(r,a)?.enumerable){let c=e(a,n,o),l=t(r[a],n,o);i[c]=l}return i}};k.interfaceConverter=function(e){return(t,r,n,o)=>{if(o?.strict!==!1&&!(t instanceof e))throw k.errors.exception({header:r,message:`Expected ${n} ("${k.util.Stringify(t)}") to be an instance of ${e.name}.`});return t}};k.dictionaryConverter=function(e){return(t,r,n)=>{let o=k.util.Type(t),i={};if(o==="Null"||o==="Undefined")return i;if(o!=="Object")throw k.errors.exception({header:r,message:`Expected ${t} to be one of: Null, Undefined, Object.`});for(let s of e){let{key:a,defaultValue:A,required:c,converter:l}=s;if(c===!0&&!Object.hasOwn(t,a))throw k.errors.exception({header:r,message:`Missing required key "${a}".`});let u=t[a],d=Object.hasOwn(s,"defaultValue");if(d&&u!==null&&(u??=A()),c||d||u!==void 0){if(u=l(u,r,`${n}.${a}`),s.allowedValues&&!s.allowedValues.includes(u))throw k.errors.exception({header:r,message:`${u} is not an accepted type. Expected one of ${s.allowedValues.join(", ")}.`});i[a]=u}}return i}};k.nullableConverter=function(e){return(t,r,n)=>t===null?t:e(t,r,n)};k.converters.DOMString=function(e,t,r,n){if(e===null&&n?.legacyNullToEmptyString)return"";if(typeof e=="symbol")throw k.errors.exception({header:t,message:`${r} is a symbol, which cannot be converted to a DOMString.`});return String(e)};k.converters.ByteString=function(e,t,r){let n=k.converters.DOMString(e,t,r);for(let o=0;o<n.length;o++)if(n.charCodeAt(o)>255)throw new TypeError(`Cannot convert argument to a ByteString because the character at index ${o} has a value of ${n.charCodeAt(o)} which is greater than 255.`);return n};k.converters.USVString=WU;k.converters.boolean=function(e){return!!e};k.converters.any=function(e){return e};k.converters["long long"]=function(e,t,r){return k.util.ConvertToInt(e,64,"signed",void 0,t,r)};k.converters["unsigned long long"]=function(e,t,r){return k.util.ConvertToInt(e,64,"unsigned",void 0,t,r)};k.converters["unsigned long"]=function(e,t,r){return k.util.ConvertToInt(e,32,"unsigned",void 0,t,r)};k.converters["unsigned short"]=function(e,t,r,n){return k.util.ConvertToInt(e,16,"unsigned",n,t,r)};k.converters.ArrayBuffer=function(e,t,r,n){if(k.util.Type(e)!=="Object"||!Ot.isAnyArrayBuffer(e))throw k.errors.conversionFailed({prefix:t,argument:`${r} ("${k.util.Stringify(e)}")`,types:["ArrayBuffer"]});if(n?.allowShared===!1&&Ot.isSharedArrayBuffer(e))throw k.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(e.resizable||e.growable)throw k.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return e};k.converters.TypedArray=function(e,t,r,n,o){if(k.util.Type(e)!=="Object"||!Ot.isTypedArray(e)||e.constructor.name!==t.name)throw k.errors.conversionFailed({prefix:r,argument:`${n} ("${k.util.Stringify(e)}")`,types:[t.name]});if(o?.allowShared===!1&&Ot.isSharedArrayBuffer(e.buffer))throw k.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(e.buffer.resizable||e.buffer.growable)throw k.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return e};k.converters.DataView=function(e,t,r,n){if(k.util.Type(e)!=="Object"||!Ot.isDataView(e))throw k.errors.exception({header:t,message:`${r} is not a DataView.`});if(n?.allowShared===!1&&Ot.isSharedArrayBuffer(e.buffer))throw k.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(e.buffer.resizable||e.buffer.growable)throw k.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return e};k.converters.BufferSource=function(e,t,r,n){if(Ot.isAnyArrayBuffer(e))return k.converters.ArrayBuffer(e,t,r,{...n,allowShared:!1});if(Ot.isTypedArray(e))return k.converters.TypedArray(e,e.constructor,t,r,{...n,allowShared:!1});if(Ot.isDataView(e))return k.converters.DataView(e,t,r,{...n,allowShared:!1});throw k.errors.conversionFailed({prefix:t,argument:`${r} ("${k.util.Stringify(e)}")`,types:["BufferSource"]})};k.converters["sequence<ByteString>"]=k.sequenceConverter(k.converters.ByteString);k.converters["sequence<sequence<ByteString>>"]=k.sequenceConverter(k.converters["sequence<ByteString>"]);k.converters["record<ByteString, ByteString>"]=k.recordConverter(k.converters.ByteString,k.converters.ByteString);KE.exports={webidl:k}});var et=b((Dz,lI)=>{"use strict";var{Transform:$U}=w("node:stream"),jE=w("node:zlib"),{redirectStatusSet:zU,referrerPolicySet:KU,badPortsSet:jU}=xi(),{getGlobalOrigin:ZE}=Mu(),{collectASequenceOfCodePoints:Xr,collectAnHTTPQuotedString:ZU,removeChars:XU,parseMIMEType:eL}=Ve(),{performance:tL}=w("node:perf_hooks"),{isBlobLike:rL,ReadableStreamFrom:nL,isValidHTTPToken:XE,normalizedMethodRecordsBase:oL}=j(),en=w("node:assert"),{isUint8Array:iL}=w("node:util/types"),{webidl:vi}=Le(),eI=[],Ua;try{Ua=w("node:crypto");let e=["sha256","sha384","sha512"];eI=Ua.getHashes().filter(t=>e.includes(t))}catch{}function tI(e){let t=e.urlList,r=t.length;return r===0?null:t[r-1].toString()}function sL(e,t){if(!zU.has(e.status))return null;let r=e.headersList.get("location",!0);return r!==null&&nI(r)&&(rI(r)||(r=aL(r)),r=new URL(r,tI(e))),r&&!r.hash&&(r.hash=t),r}function rI(e){for(let t=0;t<e.length;++t){let r=e.charCodeAt(t);if(r>126||r<32)return!1}return!0}function aL(e){return Buffer.from(e,"binary").toString("utf8")}function Ni(e){return e.urlList[e.urlList.length-1]}function AL(e){let t=Ni(e);return AI(t)&&jU.has(t.port)?"blocked":"allowed"}function cL(e){return e instanceof Error||e?.constructor?.name==="Error"||e?.constructor?.name==="DOMException"}function lL(e){for(let t=0;t<e.length;++t){let r=e.charCodeAt(t);if(!(r===9||r>=32&&r<=126||r>=128&&r<=255))return!1}return!0}var uL=XE;function nI(e){return(e[0]===" "||e[0]===" "||e[e.length-1]===" "||e[e.length-1]===" "||e.includes(`
|
|
2
|
+
`)||e.includes("\r")||e.includes("\0"))===!1}function dL(e,t){let{headersList:r}=t,n=(r.get("referrer-policy",!0)??"").split(","),o="";if(n.length>0)for(let i=n.length;i!==0;i--){let s=n[i-1].trim();if(KU.has(s)){o=s;break}}o!==""&&(e.referrerPolicy=o)}function hL(){return"allowed"}function gL(){return"success"}function pL(){return"success"}function fL(e){let t=null;t=e.mode,e.headersList.set("sec-fetch-mode",t,!0)}function mL(e){let t=e.origin;if(!(t==="client"||t===void 0)){if(e.responseTainting==="cors"||e.mode==="websocket")e.headersList.append("origin",t,!0);else if(e.method!=="GET"&&e.method!=="HEAD"){switch(e.referrerPolicy){case"no-referrer":t=null;break;case"no-referrer-when-downgrade":case"strict-origin":case"strict-origin-when-cross-origin":e.origin&&Pu(e.origin)&&!Pu(Ni(e))&&(t=null);break;case"same-origin":La(e,Ni(e))||(t=null);break;default:}e.headersList.append("origin",t,!0)}}}function zn(e,t){return e}function EL(e,t,r){return!e?.startTime||e.startTime<t?{domainLookupStartTime:t,domainLookupEndTime:t,connectionStartTime:t,connectionEndTime:t,secureConnectionStartTime:t,ALPNNegotiatedProtocol:e?.ALPNNegotiatedProtocol}:{domainLookupStartTime:zn(e.domainLookupStartTime,r),domainLookupEndTime:zn(e.domainLookupEndTime,r),connectionStartTime:zn(e.connectionStartTime,r),connectionEndTime:zn(e.connectionEndTime,r),secureConnectionStartTime:zn(e.secureConnectionStartTime,r),ALPNNegotiatedProtocol:e.ALPNNegotiatedProtocol}}function IL(e){return zn(tL.now(),e)}function BL(e){return{startTime:e.startTime??0,redirectStartTime:0,redirectEndTime:0,postRedirectStartTime:e.startTime??0,finalServiceWorkerStartTime:0,finalNetworkResponseStartTime:0,finalNetworkRequestStartTime:0,endTime:0,encodedBodySize:0,decodedBodySize:0,finalConnectionTimingInfo:null}}function oI(){return{referrerPolicy:"strict-origin-when-cross-origin"}}function CL(e){return{referrerPolicy:e.referrerPolicy}}function QL(e){let t=e.referrerPolicy;en(t);let r=null;if(e.referrer==="client"){let a=ZE();if(!a||a.origin==="null")return"no-referrer";r=new URL(a)}else e.referrer instanceof URL&&(r=e.referrer);let n=Tu(r),o=Tu(r,!0);n.toString().length>4096&&(n=o);let i=La(e,n),s=Ri(n)&&!Ri(e.url);switch(t){case"origin":return o??Tu(r,!0);case"unsafe-url":return n;case"same-origin":return i?o:"no-referrer";case"origin-when-cross-origin":return i?n:o;case"strict-origin-when-cross-origin":{let a=Ni(e);return La(n,a)?n:Ri(n)&&!Ri(a)?"no-referrer":o}default:return s?"no-referrer":o}}function Tu(e,t){return en(e instanceof URL),e=new URL(e),e.protocol==="file:"||e.protocol==="about:"||e.protocol==="blank:"?"no-referrer":(e.username="",e.password="",e.hash="",t&&(e.pathname="",e.search=""),e)}function Ri(e){if(!(e instanceof URL))return!1;if(e.href==="about:blank"||e.href==="about:srcdoc"||e.protocol==="data:"||e.protocol==="file:")return!0;return t(e.origin);function t(r){if(r==null||r==="null")return!1;let n=new URL(r);return!!(n.protocol==="https:"||n.protocol==="wss:"||/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(n.hostname)||n.hostname==="localhost"||n.hostname.includes("localhost.")||n.hostname.endsWith(".localhost"))}}function yL(e,t){if(Ua===void 0)return!0;let r=iI(t);if(r==="no metadata"||r.length===0)return!0;let n=bL(r),o=kL(r,n);for(let i of o){let s=i.algo,a=i.hash,A=Ua.createHash(s).update(e).digest("base64");if(A[A.length-1]==="="&&(A[A.length-2]==="="?A=A.slice(0,-2):A=A.slice(0,-1)),SL(A,a))return!0}return!1}var wL=/(?<algo>sha256|sha384|sha512)-((?<hash>[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i;function iI(e){let t=[],r=!0;for(let n of e.split(" ")){r=!1;let o=wL.exec(n);if(o===null||o.groups===void 0||o.groups.algo===void 0)continue;let i=o.groups.algo.toLowerCase();eI.includes(i)&&t.push(o.groups)}return r===!0?"no metadata":t}function bL(e){let t=e[0].algo;if(t[3]==="5")return t;for(let r=1;r<e.length;++r){let n=e[r];if(n.algo[3]==="5"){t="sha512";break}else{if(t[3]==="3")continue;n.algo[3]==="3"&&(t="sha384")}}return t}function kL(e,t){if(e.length===1)return e;let r=0;for(let n=0;n<e.length;++n)e[n].algo===t&&(e[r++]=e[n]);return e.length=r,e}function SL(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;++r)if(e[r]!==t[r]){if(e[r]==="+"&&t[r]==="-"||e[r]==="/"&&t[r]==="_")continue;return!1}return!0}function xL(e){}function La(e,t){return e.origin===t.origin&&e.origin==="null"||e.protocol===t.protocol&&e.hostname===t.hostname&&e.port===t.port}function DL(){let e,t;return{promise:new Promise((n,o)=>{e=n,t=o}),resolve:e,reject:t}}function vL(e){return e.controller.state==="aborted"}function RL(e){return e.controller.state==="aborted"||e.controller.state==="terminated"}function NL(e){return oL[e.toLowerCase()]??e}function FL(e){let t=JSON.stringify(e);if(t===void 0)throw new TypeError("Value is not JSON serializable");return en(typeof t=="string"),t}var ML=Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));function sI(e,t,r=0,n=1){class o{#e;#t;#r;constructor(s,a){this.#e=s,this.#t=a,this.#r=0}next(){if(typeof this!="object"||this===null||!(#e in this))throw new TypeError(`'next' called on an object that does not implement interface ${e} Iterator.`);let s=this.#r,a=this.#e[t],A=a.length;if(s>=A)return{value:void 0,done:!0};let{[r]:c,[n]:l}=a[s];this.#r=s+1;let u;switch(this.#t){case"key":u=c;break;case"value":u=l;break;case"key+value":u=[c,l];break}return{value:u,done:!1}}}return delete o.prototype.constructor,Object.setPrototypeOf(o.prototype,ML),Object.defineProperties(o.prototype,{[Symbol.toStringTag]:{writable:!1,enumerable:!1,configurable:!0,value:`${e} Iterator`},next:{writable:!0,enumerable:!0,configurable:!0}}),function(i,s){return new o(i,s)}}function UL(e,t,r,n=0,o=1){let i=sI(e,r,n,o),s={keys:{writable:!0,enumerable:!0,configurable:!0,value:function(){return vi.brandCheck(this,t),i(this,"key")}},values:{writable:!0,enumerable:!0,configurable:!0,value:function(){return vi.brandCheck(this,t),i(this,"value")}},entries:{writable:!0,enumerable:!0,configurable:!0,value:function(){return vi.brandCheck(this,t),i(this,"key+value")}},forEach:{writable:!0,enumerable:!0,configurable:!0,value:function(A,c=globalThis){if(vi.brandCheck(this,t),vi.argumentLengthCheck(arguments,1,`${e}.forEach`),typeof A!="function")throw new TypeError(`Failed to execute 'forEach' on '${e}': parameter 1 is not of type 'Function'.`);for(let{0:l,1:u}of i(this,"key+value"))A.call(c,u,l,this)}}};return Object.defineProperties(t.prototype,{...s,[Symbol.iterator]:{writable:!0,enumerable:!1,configurable:!0,value:s.entries.value}})}async function LL(e,t,r){let n=t,o=r,i;try{i=e.stream.getReader()}catch(s){o(s);return}try{n(await aI(i))}catch(s){o(s)}}function TL(e){return e instanceof ReadableStream||e[Symbol.toStringTag]==="ReadableStream"&&typeof e.tee=="function"}function PL(e){try{e.close(),e.byobRequest?.respond(0)}catch(t){if(!t.message.includes("Controller is already closed")&&!t.message.includes("ReadableStream is already closed"))throw t}}var _L=/[^\x00-\xFF]/;function Ma(e){return en(!_L.test(e)),e}async function aI(e){let t=[],r=0;for(;;){let{done:n,value:o}=await e.read();if(n)return Buffer.concat(t,r);if(!iL(o))throw new TypeError("Received non-Uint8Array chunk");t.push(o),r+=o.length}}function OL(e){en("protocol"in e);let t=e.protocol;return t==="about:"||t==="blob:"||t==="data:"}function Pu(e){return typeof e=="string"&&e[5]===":"&&e[0]==="h"&&e[1]==="t"&&e[2]==="t"&&e[3]==="p"&&e[4]==="s"||e.protocol==="https:"}function AI(e){en("protocol"in e);let t=e.protocol;return t==="http:"||t==="https:"}function HL(e,t){let r=e;if(!r.startsWith("bytes"))return"failure";let n={position:5};if(t&&Xr(A=>A===" "||A===" ",r,n),r.charCodeAt(n.position)!==61)return"failure";n.position++,t&&Xr(A=>A===" "||A===" ",r,n);let o=Xr(A=>{let c=A.charCodeAt(0);return c>=48&&c<=57},r,n),i=o.length?Number(o):null;if(t&&Xr(A=>A===" "||A===" ",r,n),r.charCodeAt(n.position)!==45)return"failure";n.position++,t&&Xr(A=>A===" "||A===" ",r,n);let s=Xr(A=>{let c=A.charCodeAt(0);return c>=48&&c<=57},r,n),a=s.length?Number(s):null;return n.position<r.length||a===null&&i===null||i>a?"failure":{rangeStartValue:i,rangeEndValue:a}}function GL(e,t,r){let n="bytes ";return n+=Ma(`${e}`),n+="-",n+=Ma(`${t}`),n+="/",n+=Ma(`${r}`),n}var _u=class extends $U{#e;constructor(t){super(),this.#e=t}_transform(t,r,n){if(!this._inflateStream){if(t.length===0){n();return}this._inflateStream=(t[0]&15)===8?jE.createInflate(this.#e):jE.createInflateRaw(this.#e),this._inflateStream.on("data",this.push.bind(this)),this._inflateStream.on("end",()=>this.push(null)),this._inflateStream.on("error",o=>this.destroy(o))}this._inflateStream.write(t,r,n)}_final(t){this._inflateStream&&(this._inflateStream.end(),this._inflateStream=null),t()}};function qL(e){return new _u(e)}function YL(e){let t=null,r=null,n=null,o=cI("content-type",e);if(o===null)return"failure";for(let i of o){let s=eL(i);s==="failure"||s.essence==="*/*"||(n=s,n.essence!==r?(t=null,n.parameters.has("charset")&&(t=n.parameters.get("charset")),r=n.essence):!n.parameters.has("charset")&&t!==null&&n.parameters.set("charset",t))}return n??"failure"}function VL(e){let t=e,r={position:0},n=[],o="";for(;r.position<t.length;){if(o+=Xr(i=>i!=='"'&&i!==",",t,r),r.position<t.length)if(t.charCodeAt(r.position)===34){if(o+=ZU(t,r),r.position<t.length)continue}else en(t.charCodeAt(r.position)===44),r.position++;o=XU(o,!0,!0,i=>i===9||i===32),n.push(o),o=""}return n}function cI(e,t){let r=t.get(e,!0);return r===null?null:VL(r)}var JL=new TextDecoder;function WL(e){return e.length===0?"":(e[0]===239&&e[1]===187&&e[2]===191&&(e=e.subarray(3)),JL.decode(e))}var Ou=class{get baseUrl(){return ZE()}get origin(){return this.baseUrl?.origin}policyContainer=oI()},Hu=class{settingsObject=new Ou},$L=new Hu;lI.exports={isAborted:vL,isCancelled:RL,isValidEncodedURL:rI,createDeferredPromise:DL,ReadableStreamFrom:nL,tryUpgradeRequestToAPotentiallyTrustworthyURL:xL,clampAndCoarsenConnectionTimingInfo:EL,coarsenedSharedCurrentTime:IL,determineRequestsReferrer:QL,makePolicyContainer:oI,clonePolicyContainer:CL,appendFetchMetadata:fL,appendRequestOriginHeader:mL,TAOCheck:pL,corsCheck:gL,crossOriginResourcePolicyCheck:hL,createOpaqueTimingInfo:BL,setRequestReferrerPolicyOnRedirect:dL,isValidHTTPToken:XE,requestBadPort:AL,requestCurrentURL:Ni,responseURL:tI,responseLocationURL:sL,isBlobLike:rL,isURLPotentiallyTrustworthy:Ri,isValidReasonPhrase:lL,sameOrigin:La,normalizeMethod:NL,serializeJavascriptValueToJSONString:FL,iteratorMixin:UL,createIterator:sI,isValidHeaderName:uL,isValidHeaderValue:nI,isErrorLike:cL,fullyReadBody:LL,bytesMatch:yL,isReadableStreamLike:TL,readableStreamClose:PL,isomorphicEncode:Ma,urlIsLocal:OL,urlHasHttpsScheme:Pu,urlIsHttpHttpsScheme:AI,readAllBytes:aI,simpleRangeHeaderValue:HL,buildContentRange:GL,parseMetadata:iI,createInflate:qL,extractMimeType:YL,getDecodeSplit:cI,utf8DecodeBytes:WL,environmentSettingsObject:$L}});var Br=b((vz,uI)=>{"use strict";uI.exports={kUrl:Symbol("url"),kHeaders:Symbol("headers"),kSignal:Symbol("signal"),kState:Symbol("state"),kDispatcher:Symbol("dispatcher")}});var qu=b((Rz,dI)=>{"use strict";var{Blob:zL,File:KL}=w("node:buffer"),{kState:or}=Br(),{webidl:Ht}=Le(),Gu=class e{constructor(t,r,n={}){let o=r,i=n.type,s=n.lastModified??Date.now();this[or]={blobLike:t,name:o,type:i,lastModified:s}}stream(...t){return Ht.brandCheck(this,e),this[or].blobLike.stream(...t)}arrayBuffer(...t){return Ht.brandCheck(this,e),this[or].blobLike.arrayBuffer(...t)}slice(...t){return Ht.brandCheck(this,e),this[or].blobLike.slice(...t)}text(...t){return Ht.brandCheck(this,e),this[or].blobLike.text(...t)}get size(){return Ht.brandCheck(this,e),this[or].blobLike.size}get type(){return Ht.brandCheck(this,e),this[or].blobLike.type}get name(){return Ht.brandCheck(this,e),this[or].name}get lastModified(){return Ht.brandCheck(this,e),this[or].lastModified}get[Symbol.toStringTag](){return"File"}};Ht.converters.Blob=Ht.interfaceConverter(zL);function jL(e){return e instanceof KL||e&&(typeof e.stream=="function"||typeof e.arrayBuffer=="function")&&e[Symbol.toStringTag]==="File"}dI.exports={FileLike:Gu,isFileLike:jL}});var Mi=b((Nz,mI)=>{"use strict";var{isBlobLike:Ta,iteratorMixin:ZL}=et(),{kState:He}=Br(),{kEnumerableProperty:Kn}=j(),{FileLike:hI,isFileLike:XL}=qu(),{webidl:he}=Le(),{File:fI}=w("node:buffer"),gI=w("node:util"),pI=globalThis.File??fI,Fi=class e{constructor(t){if(he.util.markAsUncloneable(this),t!==void 0)throw he.errors.conversionFailed({prefix:"FormData constructor",argument:"Argument 1",types:["undefined"]});this[He]=[]}append(t,r,n=void 0){he.brandCheck(this,e);let o="FormData.append";if(he.argumentLengthCheck(arguments,2,o),arguments.length===3&&!Ta(r))throw new TypeError("Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'");t=he.converters.USVString(t,o,"name"),r=Ta(r)?he.converters.Blob(r,o,"value",{strict:!1}):he.converters.USVString(r,o,"value"),n=arguments.length===3?he.converters.USVString(n,o,"filename"):void 0;let i=Yu(t,r,n);this[He].push(i)}delete(t){he.brandCheck(this,e);let r="FormData.delete";he.argumentLengthCheck(arguments,1,r),t=he.converters.USVString(t,r,"name"),this[He]=this[He].filter(n=>n.name!==t)}get(t){he.brandCheck(this,e);let r="FormData.get";he.argumentLengthCheck(arguments,1,r),t=he.converters.USVString(t,r,"name");let n=this[He].findIndex(o=>o.name===t);return n===-1?null:this[He][n].value}getAll(t){he.brandCheck(this,e);let r="FormData.getAll";return he.argumentLengthCheck(arguments,1,r),t=he.converters.USVString(t,r,"name"),this[He].filter(n=>n.name===t).map(n=>n.value)}has(t){he.brandCheck(this,e);let r="FormData.has";return he.argumentLengthCheck(arguments,1,r),t=he.converters.USVString(t,r,"name"),this[He].findIndex(n=>n.name===t)!==-1}set(t,r,n=void 0){he.brandCheck(this,e);let o="FormData.set";if(he.argumentLengthCheck(arguments,2,o),arguments.length===3&&!Ta(r))throw new TypeError("Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'");t=he.converters.USVString(t,o,"name"),r=Ta(r)?he.converters.Blob(r,o,"name",{strict:!1}):he.converters.USVString(r,o,"name"),n=arguments.length===3?he.converters.USVString(n,o,"name"):void 0;let i=Yu(t,r,n),s=this[He].findIndex(a=>a.name===t);s!==-1?this[He]=[...this[He].slice(0,s),i,...this[He].slice(s+1).filter(a=>a.name!==t)]:this[He].push(i)}[gI.inspect.custom](t,r){let n=this[He].reduce((i,s)=>(i[s.name]?Array.isArray(i[s.name])?i[s.name].push(s.value):i[s.name]=[i[s.name],s.value]:i[s.name]=s.value,i),{__proto__:null});r.depth??=t,r.colors??=!0;let o=gI.formatWithOptions(r,n);return`FormData ${o.slice(o.indexOf("]")+2)}`}};ZL("FormData",Fi,He,"name","value");Object.defineProperties(Fi.prototype,{append:Kn,delete:Kn,get:Kn,getAll:Kn,has:Kn,set:Kn,[Symbol.toStringTag]:{value:"FormData",configurable:!0}});function Yu(e,t,r){if(typeof t!="string"){if(XL(t)||(t=t instanceof Blob?new pI([t],"blob",{type:t.type}):new hI(t,"blob",{type:t.type})),r!==void 0){let n={type:t.type,lastModified:t.lastModified};t=t instanceof fI?new pI([t],r,n):new hI(t,r,n)}}return{name:e,value:t}}mI.exports={FormData:Fi,makeEntry:Yu}});var yI=b((Fz,QI)=>{"use strict";var{isUSVString:EI,bufferToLowerCasedHeaderName:eT}=j(),{utf8DecodeBytes:tT}=et(),{HTTP_TOKEN_CODEPOINTS:rT,isomorphicDecode:II}=Ve(),{isFileLike:nT}=qu(),{makeEntry:oT}=Mi(),Pa=w("node:assert"),{File:iT}=w("node:buffer"),sT=globalThis.File??iT,aT=Buffer.from('form-data; name="'),BI=Buffer.from("; filename"),AT=Buffer.from("--"),cT=Buffer.from(`--\r
|
|
3
|
+
`);function lT(e){for(let t=0;t<e.length;++t)if((e.charCodeAt(t)&-128)!==0)return!1;return!0}function uT(e){let t=e.length;if(t<27||t>70)return!1;for(let r=0;r<t;++r){let n=e.charCodeAt(r);if(!(n>=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||n===39||n===45||n===95))return!1}return!0}function dT(e,t){Pa(t!=="failure"&&t.essence==="multipart/form-data");let r=t.parameters.get("boundary");if(r===void 0)return"failure";let n=Buffer.from(`--${r}`,"utf8"),o=[],i={position:0};for(;e[i.position]===13&&e[i.position+1]===10;)i.position+=2;let s=e.length;for(;e[s-1]===10&&e[s-2]===13;)s-=2;for(s!==e.length&&(e=e.subarray(0,s));;){if(e.subarray(i.position,i.position+n.length).equals(n))i.position+=n.length;else return"failure";if(i.position===e.length-2&&_a(e,AT,i)||i.position===e.length-4&&_a(e,cT,i))return o;if(e[i.position]!==13||e[i.position+1]!==10)return"failure";i.position+=2;let a=hT(e,i);if(a==="failure")return"failure";let{name:A,filename:c,contentType:l,encoding:u}=a;i.position+=2;let d;{let g=e.indexOf(n.subarray(2),i.position);if(g===-1)return"failure";d=e.subarray(i.position,g-4),i.position+=d.length,u==="base64"&&(d=Buffer.from(d.toString(),"base64"))}if(e[i.position]!==13||e[i.position+1]!==10)return"failure";i.position+=2;let h;c!==null?(l??="text/plain",lT(l)||(l=""),h=new sT([d],c,{type:l})):h=tT(Buffer.from(d)),Pa(EI(A)),Pa(typeof h=="string"&&EI(h)||nT(h)),o.push(oT(A,h,c))}}function hT(e,t){let r=null,n=null,o=null,i=null;for(;;){if(e[t.position]===13&&e[t.position+1]===10)return r===null?"failure":{name:r,filename:n,contentType:o,encoding:i};let s=jn(a=>a!==10&&a!==13&&a!==58,e,t);if(s=Vu(s,!0,!0,a=>a===9||a===32),!rT.test(s.toString())||e[t.position]!==58)return"failure";switch(t.position++,jn(a=>a===32||a===9,e,t),eT(s)){case"content-disposition":{if(r=n=null,!_a(e,aT,t)||(t.position+=17,r=CI(e,t),r===null))return"failure";if(_a(e,BI,t)){let a=t.position+BI.length;if(e[a]===42&&(t.position+=1,a+=1),e[a]!==61||e[a+1]!==34||(t.position+=12,n=CI(e,t),n===null))return"failure"}break}case"content-type":{let a=jn(A=>A!==10&&A!==13,e,t);a=Vu(a,!1,!0,A=>A===9||A===32),o=II(a);break}case"content-transfer-encoding":{let a=jn(A=>A!==10&&A!==13,e,t);a=Vu(a,!1,!0,A=>A===9||A===32),i=II(a);break}default:jn(a=>a!==10&&a!==13,e,t)}if(e[t.position]!==13&&e[t.position+1]!==10)return"failure";t.position+=2}}function CI(e,t){Pa(e[t.position-1]===34);let r=jn(n=>n!==10&&n!==13&&n!==34,e,t);return e[t.position]!==34?null:(t.position++,r=new TextDecoder().decode(r).replace(/%0A/ig,`
|
|
4
|
+
`).replace(/%0D/ig,"\r").replace(/%22/g,'"'),r)}function jn(e,t,r){let n=r.position;for(;n<t.length&&e(t[n]);)++n;return t.subarray(r.position,r.position=n)}function Vu(e,t,r,n){let o=0,i=e.length-1;if(t)for(;o<e.length&&n(e[o]);)o++;if(r)for(;i>0&&n(e[i]);)i--;return o===0&&i===e.length-1?e:e.subarray(o,i+1)}function _a(e,t,r){if(e.length<t.length)return!1;for(let n=0;n<t.length;n++)if(t[n]!==e[r.position+n])return!1;return!0}QI.exports={multipartFormDataParser:dT,validateBoundary:uT}});var eo=b((Mz,FI)=>{"use strict";var Ui=j(),{ReadableStreamFrom:gT,isBlobLike:wI,isReadableStreamLike:pT,readableStreamClose:fT,createDeferredPromise:mT,fullyReadBody:ET,extractMimeType:IT,utf8DecodeBytes:SI}=et(),{FormData:bI}=Mi(),{kState:Xn}=Br(),{webidl:BT}=Le(),{Blob:CT}=w("node:buffer"),Ju=w("node:assert"),{isErrored:xI,isDisturbed:QT}=w("node:stream"),{isArrayBuffer:yT}=w("node:util/types"),{serializeAMimeType:wT}=Ve(),{multipartFormDataParser:bT}=yI(),Wu;try{let e=w("node:crypto");Wu=t=>e.randomInt(0,t)}catch{Wu=e=>Math.floor(Math.random(e))}var Oa=new TextEncoder;function kT(){}var DI=globalThis.FinalizationRegistry&&process.version.indexOf("v18")!==0,vI;DI&&(vI=new FinalizationRegistry(e=>{let t=e.deref();t&&!t.locked&&!QT(t)&&!xI(t)&&t.cancel("Response object has been garbage collected").catch(kT)}));function RI(e,t=!1){let r=null;e instanceof ReadableStream?r=e:wI(e)?r=e.stream():r=new ReadableStream({async pull(A){let c=typeof o=="string"?Oa.encode(o):o;c.byteLength&&A.enqueue(c),queueMicrotask(()=>fT(A))},start(){},type:"bytes"}),Ju(pT(r));let n=null,o=null,i=null,s=null;if(typeof e=="string")o=e,s="text/plain;charset=UTF-8";else if(e instanceof URLSearchParams)o=e.toString(),s="application/x-www-form-urlencoded;charset=UTF-8";else if(yT(e))o=new Uint8Array(e.slice());else if(ArrayBuffer.isView(e))o=new Uint8Array(e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength));else if(Ui.isFormDataLike(e)){let A=`----formdata-undici-0${`${Wu(1e11)}`.padStart(11,"0")}`,c=`--${A}\r
|
|
5
|
+
Content-Disposition: form-data`;let l=m=>m.replace(/\n/g,"%0A").replace(/\r/g,"%0D").replace(/"/g,"%22"),u=m=>m.replace(/\r?\n|\r/g,`\r
|
|
6
|
+
`),d=[],h=new Uint8Array([13,10]);i=0;let g=!1;for(let[m,f]of e)if(typeof f=="string"){let B=Oa.encode(c+`; name="${l(u(m))}"\r
|
|
7
|
+
\r
|
|
8
|
+
${u(f)}\r
|
|
9
|
+
`);d.push(B),i+=B.byteLength}else{let B=Oa.encode(`${c}; name="${l(u(m))}"`+(f.name?`; filename="${l(f.name)}"`:"")+`\r
|
|
10
|
+
Content-Type: ${f.type||"application/octet-stream"}\r
|
|
11
|
+
\r
|
|
12
|
+
`);d.push(B,f,h),typeof f.size=="number"?i+=B.byteLength+f.size+h.byteLength:g=!0}let p=Oa.encode(`--${A}--\r
|
|
13
|
+
`);d.push(p),i+=p.byteLength,g&&(i=null),o=e,n=async function*(){for(let m of d)m.stream?yield*m.stream():yield m},s=`multipart/form-data; boundary=${A}`}else if(wI(e))o=e,i=e.size,e.type&&(s=e.type);else if(typeof e[Symbol.asyncIterator]=="function"){if(t)throw new TypeError("keepalive");if(Ui.isDisturbed(e)||e.locked)throw new TypeError("Response body object should not be disturbed or locked");r=e instanceof ReadableStream?e:gT(e)}if((typeof o=="string"||Ui.isBuffer(o))&&(i=Buffer.byteLength(o)),n!=null){let A;r=new ReadableStream({async start(){A=n(e)[Symbol.asyncIterator]()},async pull(c){let{value:l,done:u}=await A.next();if(u)queueMicrotask(()=>{c.close(),c.byobRequest?.respond(0)});else if(!xI(r)){let d=new Uint8Array(l);d.byteLength&&c.enqueue(d)}return c.desiredSize>0},async cancel(c){await A.return()},type:"bytes"})}return[{stream:r,source:o,length:i},s]}function ST(e,t=!1){return e instanceof ReadableStream&&(Ju(!Ui.isDisturbed(e),"The body has already been consumed."),Ju(!e.locked,"The stream is locked.")),RI(e,t)}function xT(e,t){let[r,n]=t.stream.tee();return t.stream=r,{stream:n,length:t.length,source:t.source}}function DT(e){if(e.aborted)throw new DOMException("The operation was aborted.","AbortError")}function vT(e){return{blob(){return Zn(this,r=>{let n=kI(this);return n===null?n="":n&&(n=wT(n)),new CT([r],{type:n})},e)},arrayBuffer(){return Zn(this,r=>new Uint8Array(r).buffer,e)},text(){return Zn(this,SI,e)},json(){return Zn(this,NT,e)},formData(){return Zn(this,r=>{let n=kI(this);if(n!==null)switch(n.essence){case"multipart/form-data":{let o=bT(r,n);if(o==="failure")throw new TypeError("Failed to parse body as FormData.");let i=new bI;return i[Xn]=o,i}case"application/x-www-form-urlencoded":{let o=new URLSearchParams(r.toString()),i=new bI;for(let[s,a]of o)i.append(s,a);return i}}throw new TypeError('Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded".')},e)},bytes(){return Zn(this,r=>new Uint8Array(r),e)}}}function RT(e){Object.assign(e.prototype,vT(e))}async function Zn(e,t,r){if(BT.brandCheck(e,r),NI(e))throw new TypeError("Body is unusable: Body has already been read");DT(e[Xn]);let n=mT(),o=s=>n.reject(s),i=s=>{try{n.resolve(t(s))}catch(a){o(a)}};return e[Xn].body==null?(i(Buffer.allocUnsafe(0)),n.promise):(await ET(e[Xn].body,i,o),n.promise)}function NI(e){let t=e[Xn].body;return t!=null&&(t.stream.locked||Ui.isDisturbed(t.stream))}function NT(e){return JSON.parse(SI(e))}function kI(e){let t=e[Xn].headersList,r=IT(t);return r==="failure"?null:r}FI.exports={extractBody:RI,safelyExtractBody:ST,cloneBody:xT,mixinBody:RT,streamRegistry:vI,hasFinalizationRegistry:DI,bodyUnusable:NI}});var zI=b((Uz,$I)=>{"use strict";var _=w("node:assert"),H=j(),{channels:MI}=Hn(),$u=Du(),{RequestContentLengthMismatchError:tn,ResponseContentLengthMismatchError:UI,RequestAbortedError:qI,InvalidArgumentError:FT,HeadersTimeoutError:MT,HeadersOverflowError:UT,SocketError:to,InformationalError:ro,BodyTimeoutError:LT,HTTPParserError:TT,ResponseExceededMaxSizeError:PT}=ie(),{kUrl:YI,kReset:Je,kClient:Ya,kParser:pe,kBlocking:Pi,kRunning:ve,kPending:VI,kSize:LI,kWriting:Cr,kQueue:wt,kNoRef:Li,kKeepAliveDefaultTimeout:_T,kHostHeader:OT,kPendingIdx:HT,kRunningIdx:pt,kError:Ge,kPipelining:Va,kSocket:nn,kKeepAliveTimeoutValue:Wa,kMaxHeadersSize:zu,kKeepAliveMaxTimeout:GT,kKeepAliveTimeoutThreshold:qT,kHeadersTimeout:YT,kBodyTimeout:VT,kStrictContentLength:Zu,kMaxRequests:TI,kCounter:JT,kMaxResponseSize:WT,kOnError:PI,kResume:ir,kHTTPContext:JI}=Ie(),tt=vE(),_I=Buffer.alloc(0),Ha=Buffer[Symbol.species],Ga=H.addListener,$T=H.removeAllListeners,on=Symbol("kIdleSocketValidation"),rn=Symbol("kIdleSocketValidationTimeout"),rd=Symbol("kSocketUsed"),Ku;async function zT(){let e=process.env.JEST_WORKER_ID?Nu():void 0,t;try{t=await WebAssembly.compile(FE())}catch{t=await WebAssembly.compile(e||Nu())}return await WebAssembly.instantiate(t,{env:{wasm_on_url:(r,n,o)=>0,wasm_on_status:(r,n,o)=>{_(we.ptr===r);let i=n-qt+Gt.byteOffset;return we.onStatus(new Ha(Gt.buffer,i,o))||0},wasm_on_message_begin:r=>(_(we.ptr===r),we.onMessageBegin()||0),wasm_on_header_field:(r,n,o)=>{_(we.ptr===r);let i=n-qt+Gt.byteOffset;return we.onHeaderField(new Ha(Gt.buffer,i,o))||0},wasm_on_header_value:(r,n,o)=>{_(we.ptr===r);let i=n-qt+Gt.byteOffset;return we.onHeaderValue(new Ha(Gt.buffer,i,o))||0},wasm_on_headers_complete:(r,n,o,i)=>(_(we.ptr===r),we.onHeadersComplete(n,!!o,!!i)||0),wasm_on_body:(r,n,o)=>{_(we.ptr===r);let i=n-qt+Gt.byteOffset;return we.onBody(new Ha(Gt.buffer,i,o))||0},wasm_on_message_complete:r=>(_(we.ptr===r),we.onMessageComplete()||0)}})}var ju=null,Xu=zT();Xu.catch();var we=null,Gt=null,qa=0,qt=null,KT=0,Ti=1,no=2|Ti,Ja=4|Ti,ed=8|KT,td=class{constructor(t,r,{exports:n}){_(Number.isFinite(t[zu])&&t[zu]>0),this.llhttp=n,this.ptr=this.llhttp.llhttp_alloc(tt.TYPE.RESPONSE),this.client=t,this.socket=r,this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.statusCode=null,this.statusText="",this.upgrade=!1,this.headers=[],this.headersSize=0,this.headersMaxSize=t[zu],this.shouldKeepAlive=!1,this.paused=!1,this.resume=this.resume.bind(this),this.bytesRead=0,this.keepAlive="",this.contentLength="",this.connection="",this.maxResponseSize=t[WT]}setTimeout(t,r){t!==this.timeoutValue||r&Ti^this.timeoutType&Ti?(this.timeout&&($u.clearTimeout(this.timeout),this.timeout=null),t&&(r&Ti?this.timeout=$u.setFastTimeout(OI,t,new WeakRef(this)):(this.timeout=setTimeout(OI,t,new WeakRef(this)),this.timeout.unref())),this.timeoutValue=t):this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.timeoutType=r}resume(){this.socket.destroyed||!this.paused||(_(this.ptr!=null),_(we==null),this.llhttp.llhttp_resume(this.ptr),_(this.timeoutType===Ja),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.paused=!1,this.execute(this.socket.read()||_I),this.readMore())}readMore(){for(;!this.paused&&this.ptr;){let t=this.socket.read();if(t===null)break;this.execute(t)}}execute(t){_(this.ptr!=null),_(we==null),_(!this.paused);let{socket:r,llhttp:n}=this;t.length>qa&&(qt&&n.free(qt),qa=Math.ceil(t.length/4096)*4096,qt=n.malloc(qa)),new Uint8Array(n.memory.buffer,qt,qa).set(t);try{let o;try{Gt=t,we=this,o=n.llhttp_execute(this.ptr,qt,t.length)}catch(s){throw s}finally{we=null,Gt=null}let i=n.llhttp_get_error_pos(this.ptr)-qt;if(o!==tt.ERROR.OK){let s=t.subarray(i);if(o===tt.ERROR.PAUSED_UPGRADE)this.onUpgrade(s);else if(o===tt.ERROR.PAUSED)this.paused=!0,r.unshift(s);else throw this.createError(o,s)}}catch(o){H.destroy(r,o)}}finish(){_(we===null),_(this.ptr!=null),_(!this.paused);let{llhttp:t}=this,r;try{we=this,r=t.llhttp_finish(this.ptr)}finally{we=null}return r===tt.ERROR.OK?null:r===tt.ERROR.PAUSED||r===tt.ERROR.PAUSED_UPGRADE?(this.paused=!0,null):this.createError(r,_I)}createError(t,r){let{llhttp:n,contentLength:o,bytesRead:i}=this;if(o&&i!==parseInt(o,10))return new UI;let s=n.llhttp_get_error_reason(this.ptr),a="";if(s){let A=new Uint8Array(n.memory.buffer,s).indexOf(0);a="Response does not match the HTTP/1.1 protocol ("+Buffer.from(n.memory.buffer,s,A).toString()+")"}return new TT(a,tt.ERROR[t],r)}destroy(){_(this.ptr!=null),_(we==null),this.llhttp.llhttp_free(this.ptr),this.ptr=null,this.timeout&&$u.clearTimeout(this.timeout),this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.paused=!1}onStatus(t){this.statusText=t.toString()}onMessageBegin(){let{socket:t,client:r}=this;if(t.destroyed)return-1;if(r[ve]===0)return H.destroy(t,new to("bad response",H.getSocketInfo(t))),-1;let n=r[wt][r[pt]];if(!n)return-1;n.onResponseStarted()}onHeaderField(t){let r=this.headers.length;(r&1)===0?this.headers.push(t):this.headers[r-1]=Buffer.concat([this.headers[r-1],t]),this.trackHeader(t.length)}onHeaderValue(t){let r=this.headers.length;(r&1)===1?(this.headers.push(t),r+=1):this.headers[r-1]=Buffer.concat([this.headers[r-1],t]);let n=this.headers[r-2];if(n.length===10){let o=H.bufferToLowerCasedHeaderName(n);o==="keep-alive"?this.keepAlive+=t.toString():o==="connection"&&(this.connection+=t.toString())}else n.length===14&&H.bufferToLowerCasedHeaderName(n)==="content-length"&&(this.contentLength+=t.toString());this.trackHeader(t.length)}trackHeader(t){this.headersSize+=t,this.headersSize>=this.headersMaxSize&&H.destroy(this.socket,new UT)}onUpgrade(t){let{upgrade:r,client:n,socket:o,headers:i,statusCode:s}=this;_(r),_(n[nn]===o),_(!o.destroyed),_(!this.paused),_((i.length&1)===0);let a=n[wt][n[pt]];_(a),_(a.upgrade||a.method==="CONNECT"),this.statusCode=null,this.statusText="",this.shouldKeepAlive=null,this.headers=[],this.headersSize=0,o.unshift(t),o[pe].destroy(),o[pe]=null,o[Ya]=null,o[Ge]=null,$T(o),n[nn]=null,n[JI]=null,n[wt][n[pt]++]=null,n.emit("disconnect",n[YI],[n],new ro("upgrade"));try{a.onUpgrade(s,i,o)}catch(A){H.destroy(o,A)}n[ir]()}onHeadersComplete(t,r,n){let{client:o,socket:i,headers:s,statusText:a}=this;if(i.destroyed)return-1;if(o[ve]===0)return H.destroy(i,new to("bad response",H.getSocketInfo(i))),-1;let A=o[wt][o[pt]];if(!A)return-1;if(_(!this.upgrade),_(this.statusCode<200),t===100)return H.destroy(i,new to("bad response",H.getSocketInfo(i))),-1;if(r&&!A.upgrade)return H.destroy(i,new to("bad upgrade",H.getSocketInfo(i))),-1;if(_(this.timeoutType===no),this.statusCode=t,this.shouldKeepAlive=n||A.method==="HEAD"&&!i[Je]&&this.connection.toLowerCase()==="keep-alive",this.statusCode>=200){let l=A.bodyTimeout!=null?A.bodyTimeout:o[VT];this.setTimeout(l,Ja)}else this.timeout&&this.timeout.refresh&&this.timeout.refresh();if(A.method==="CONNECT")return _(o[ve]===1),this.upgrade=!0,2;if(r)return _(o[ve]===1),this.upgrade=!0,2;if(_((this.headers.length&1)===0),this.headers=[],this.headersSize=0,this.shouldKeepAlive&&o[Va]){let l=this.keepAlive?H.parseKeepAliveTimeout(this.keepAlive):null;if(l!=null){let u=Math.min(l-o[qT],o[GT]);u<=0?i[Je]=!0:o[Wa]=u}else o[Wa]=o[_T]}else i[Je]=!0;let c=A.onHeaders(t,s,this.resume,a)===!1;return A.aborted?-1:A.method==="HEAD"||t<200?1:(i[Pi]&&(i[Pi]=!1,o[ir]()),c?tt.ERROR.PAUSED:0)}onBody(t){let{client:r,socket:n,statusCode:o,maxResponseSize:i}=this;if(n.destroyed)return-1;let s=r[wt][r[pt]];if(_(s),_(this.timeoutType===Ja),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),_(o>=200),i>-1&&this.bytesRead+t.length>i)return H.destroy(n,new PT),-1;if(this.bytesRead+=t.length,s.onData(t)===!1)return tt.ERROR.PAUSED}onMessageComplete(){let{client:t,socket:r,statusCode:n,upgrade:o,headers:i,contentLength:s,bytesRead:a,shouldKeepAlive:A}=this;if(r.destroyed&&(!n||A))return-1;if(o)return;_(n>=100),_((this.headers.length&1)===0);let c=t[wt][t[pt]];if(_(c),this.statusCode=null,this.statusText="",this.bytesRead=0,this.contentLength="",this.keepAlive="",this.connection="",this.headers=[],this.headersSize=0,!(n<200)){if(c.method!=="HEAD"&&s&&a!==parseInt(s,10))return H.destroy(r,new UI),-1;if(c.onComplete(i),t[wt][t[pt]++]=null,r[rd]=!0,r[Cr])return _(t[ve]===0),H.destroy(r,new ro("reset")),tt.ERROR.PAUSED;if(A){if(r[Je]&&t[ve]===0)return H.destroy(r,new ro("reset")),tt.ERROR.PAUSED;t[Va]==null||t[Va]===1?setImmediate(()=>t[ir]()):t[ir]()}else return H.destroy(r,new ro("reset")),tt.ERROR.PAUSED}}};function OI(e){let{socket:t,timeoutType:r,client:n,paused:o}=e.deref();r===no?(!t[Cr]||t.writableNeedDrain||n[ve]>1)&&(_(!o,"cannot be paused while waiting for headers"),H.destroy(t,new MT)):r===Ja?o||H.destroy(t,new LT):r===ed&&(_(n[ve]===0&&n[Wa]),H.destroy(t,new ro("socket idle timeout")))}async function jT(e,t){e[nn]=t,ju||(ju=await Xu,Xu=null),t[Li]=!1,t[Cr]=!1,t[Je]=!1,t[Pi]=!1,t[on]=0,t[rn]=null,t[rd]=!1,t[pe]=new td(e,t,ju),Ga(t,"error",function(n){_(n.code!=="ERR_TLS_CERT_ALTNAME_INVALID");let o=this[pe];if(n.code==="ECONNRESET"&&o.statusCode&&!o.shouldKeepAlive){let i=o.finish();i&&(this[Ge]=i,this[Ya][PI](i));return}this[Ge]=n,this[Ya][PI](n)}),Ga(t,"readable",function(){let n=this[pe];n&&n.readMore()}),Ga(t,"end",function(){let n=this[pe];if(n.statusCode&&!n.shouldKeepAlive){let o=n.finish();o&&H.destroy(this,o);return}H.destroy(this,new to("other side closed",H.getSocketInfo(this)))}),Ga(t,"close",function(){let n=this[Ya],o=this[pe];WI(this),o&&(!this[Ge]&&o.statusCode&&!o.shouldKeepAlive&&(this[Ge]=o.finish()||this[Ge]),this[pe].destroy(),this[pe]=null);let i=this[Ge]||new to("closed",H.getSocketInfo(this));if(n[nn]=null,n[JI]=null,n.destroyed){_(n[VI]===0);let s=n[wt].splice(n[pt]);for(let a=0;a<s.length;a++){let A=s[a];H.errorRequest(n,A,i)}}else if(n[ve]>0&&i.code!=="UND_ERR_INFO"){let s=n[wt][n[pt]];n[wt][n[pt]++]=null,H.errorRequest(n,s,i)}n[HT]=n[pt],_(n[ve]===0),n.emit("disconnect",n[YI],[n],i),n[ir]()});let r=!1;return t.on("close",()=>{r=!0}),{version:"h1",defaultPipelining:1,write(...n){return t1(e,...n)},resume(){XT(e)},destroy(n,o){r?queueMicrotask(o):t.destroy(n).on("close",o)},get destroyed(){return t.destroyed},busy(n){return!!(t[Cr]||t[Je]||t[Pi]||t[on]===1||n&&(e[ve]>0&&!n.idempotent||e[ve]>0&&(n.upgrade||n.method==="CONNECT")||e[ve]>0&&H.bodyLength(n.body)!==0&&(H.isStream(n.body)||H.isAsyncIterable(n.body)||H.isFormDataLike(n.body))))}}}function WI(e){e[rn]&&(clearTimeout(e[rn]),e[rn]=null),e[on]=0}function ZT(e,t){t[on]=1,t[rn]=setTimeout(()=>{t[rn]=null,t[on]=2,e[nn]===t&&!t.destroyed&&e[ir]()},0),t[rn].unref?.()}function XT(e){let t=e[nn];if(t&&!t.destroyed){if(e[LI]===0?!t[Li]&&t.unref&&(t.unref(),t[Li]=!0):t[Li]&&t.ref&&(t.ref(),t[Li]=!1),e[ve]===0&&e[VI]>0&&t[rd]){if(t[on]===0)return ZT(e,t),t[pe].readMore(),t.destroyed,void 0;if(t[on]===1)return t[pe].readMore(),t.destroyed,void 0}if(e[ve]===0&&(t[pe].readMore(),t.destroyed))return;if(e[LI]===0)t[pe].timeoutType!==ed&&t[pe].setTimeout(e[Wa],ed);else if(e[ve]>0&&t[pe].statusCode<200&&t[pe].timeoutType!==no){let r=e[wt][e[pt]],n=r.headersTimeout!=null?r.headersTimeout:e[YT];t[pe].setTimeout(n,no)}}}function e1(e){return e!=="GET"&&e!=="HEAD"&&e!=="OPTIONS"&&e!=="TRACE"&&e!=="CONNECT"}function t1(e,t){let{method:r,path:n,host:o,upgrade:i,blocking:s,reset:a}=t,{body:A,headers:c,contentLength:l}=t,u=r==="PUT"||r==="POST"||r==="PATCH"||r==="QUERY"||r==="PROPFIND"||r==="PROPPATCH";if(H.isFormDataLike(A)){Ku||(Ku=eo().extractBody);let[m,f]=Ku(A);t.contentType==null&&c.push("content-type",f),A=m.stream,l=m.length}else if(H.isBlobLike(A)&&t.contentType==null){let m=A.type;if(m){let f=`${m}`;if(!H.isValidHeaderValue(f))return H.errorRequest(e,t,new FT("invalid content-type header")),!1;c.push("content-type",f)}}A&&typeof A.read=="function"&&A.read(0);let d=H.bodyLength(A);if(l=d??l,l===null&&(l=t.contentLength),l===0&&!u&&(l=null),e1(r)&&l>0&&t.contentLength!==null&&t.contentLength!==l){if(e[Zu])return H.errorRequest(e,t,new tn),!1;process.emitWarning(new tn)}let h=e[nn];WI(h);let g=m=>{t.aborted||t.completed||(H.errorRequest(e,t,m||new qI),H.destroy(A),H.destroy(h,new ro("aborted")))};try{t.onConnect(g)}catch(m){H.errorRequest(e,t,m)}if(t.aborted)return!1;r==="HEAD"&&(h[Je]=!0),(i||r==="CONNECT")&&(h[Je]=!0),a!=null&&(h[Je]=a),e[TI]&&h[JT]++>=e[TI]&&(h[Je]=!0),s&&(h[Pi]=!0);let p=`${r} ${n} HTTP/1.1\r
|
|
14
|
+
`;if(typeof o=="string"?p+=`host: ${o}\r
|
|
15
|
+
`:p+=e[OT],i?p+=`connection: upgrade\r
|
|
16
|
+
upgrade: ${i}\r
|
|
17
|
+
`:e[Va]&&!h[Je]?p+=`connection: keep-alive\r
|
|
18
|
+
`:p+=`connection: close\r
|
|
19
|
+
`,Array.isArray(c))for(let m=0;m<c.length;m+=2){let f=c[m+0],B=c[m+1];if(Array.isArray(B))for(let E=0;E<B.length;E++)p+=`${f}: ${B[E]}\r
|
|
20
|
+
`;else p+=`${f}: ${B}\r
|
|
21
|
+
`}return MI.sendHeaders.hasSubscribers&&MI.sendHeaders.publish({request:t,headers:p,socket:h}),!A||d===0?HI(g,null,e,t,h,l,p,u):H.isBuffer(A)?HI(g,A,e,t,h,l,p,u):H.isBlobLike(A)?typeof A.stream=="function"?GI(g,A.stream(),e,t,h,l,p,u):n1(g,A,e,t,h,l,p,u):H.isStream(A)?r1(g,A,e,t,h,l,p,u):H.isIterable(A)?GI(g,A,e,t,h,l,p,u):_(!1),!0}function r1(e,t,r,n,o,i,s,a){_(i!==0||r[ve]===0,"stream body cannot be pipelined");let A=!1,c=new $a({abort:e,socket:o,request:n,contentLength:i,client:r,expectsPayload:a,header:s}),l=function(g){if(!A)try{!c.write(g)&&this.pause&&this.pause()}catch(p){H.destroy(this,p)}},u=function(){A||t.resume&&t.resume()},d=function(){if(queueMicrotask(()=>{t.removeListener("error",h)}),!A){let g=new qI;queueMicrotask(()=>h(g))}},h=function(g){if(!A){if(A=!0,_(o.destroyed||o[Cr]&&r[ve]<=1),o.off("drain",u).off("error",h),t.removeListener("data",l).removeListener("end",h).removeListener("close",d),!g)try{c.end()}catch(p){g=p}c.destroy(g),g&&(g.code!=="UND_ERR_INFO"||g.message!=="reset")?H.destroy(t,g):H.destroy(t)}};t.on("data",l).on("end",h).on("error",h).on("close",d),t.resume&&t.resume(),o.on("drain",u).on("error",h),t.errorEmitted??t.errored?setImmediate(()=>h(t.errored)):(t.endEmitted??t.readableEnded)&&setImmediate(()=>h(null)),(t.closeEmitted??t.closed)&&setImmediate(d)}function HI(e,t,r,n,o,i,s,a){try{t?H.isBuffer(t)&&(_(i===t.byteLength,"buffer body must have content length"),o.cork(),o.write(`${s}content-length: ${i}\r
|
|
22
|
+
\r
|
|
23
|
+
`,"latin1"),o.write(t),o.uncork(),n.onBodySent(t),!a&&n.reset!==!1&&(o[Je]=!0)):i===0?o.write(`${s}content-length: 0\r
|
|
24
|
+
\r
|
|
25
|
+
`,"latin1"):(_(i===null,"no body must not have content length"),o.write(`${s}\r
|
|
26
|
+
`,"latin1")),n.onRequestSent(),r[ir]()}catch(A){e(A)}}async function n1(e,t,r,n,o,i,s,a){_(i===t.size,"blob body must have content length");try{if(i!=null&&i!==t.size)throw new tn;let A=Buffer.from(await t.arrayBuffer());o.cork(),o.write(`${s}content-length: ${i}\r
|
|
27
|
+
\r
|
|
28
|
+
`,"latin1"),o.write(A),o.uncork(),n.onBodySent(A),n.onRequestSent(),!a&&n.reset!==!1&&(o[Je]=!0),r[ir]()}catch(A){e(A)}}async function GI(e,t,r,n,o,i,s,a){_(i!==0||r[ve]===0,"iterator body cannot be pipelined");let A=null;function c(){if(A){let d=A;A=null,d()}}let l=()=>new Promise((d,h)=>{_(A===null),o[Ge]?h(o[Ge]):A=d});o.on("close",c).on("drain",c);let u=new $a({abort:e,socket:o,request:n,contentLength:i,client:r,expectsPayload:a,header:s});try{for await(let d of t){if(o[Ge])throw o[Ge];u.write(d)||await l()}u.end()}catch(d){u.destroy(d)}finally{o.off("close",c).off("drain",c)}}var $a=class{constructor({abort:t,socket:r,request:n,contentLength:o,client:i,expectsPayload:s,header:a}){this.socket=r,this.request=n,this.contentLength=o,this.client=i,this.bytesWritten=0,this.expectsPayload=s,this.header=a,this.abort=t,r[Cr]=!0}write(t){let{socket:r,request:n,contentLength:o,client:i,bytesWritten:s,expectsPayload:a,header:A}=this;if(r[Ge])throw r[Ge];if(r.destroyed)return!1;let c=Buffer.byteLength(t);if(!c)return!0;if(o!==null&&s+c>o){if(i[Zu])throw new tn;process.emitWarning(new tn)}r.cork(),s===0&&(!a&&n.reset!==!1&&(r[Je]=!0),o===null?r.write(`${A}transfer-encoding: chunked\r
|
|
29
|
+
`,"latin1"):r.write(`${A}content-length: ${o}\r
|
|
30
|
+
\r
|
|
31
|
+
`,"latin1")),o===null&&r.write(`\r
|
|
32
|
+
${c.toString(16)}\r
|
|
33
|
+
`,"latin1"),this.bytesWritten+=c;let l=r.write(t);return r.uncork(),n.onBodySent(t),l||r[pe].timeout&&r[pe].timeoutType===no&&r[pe].timeout.refresh&&r[pe].timeout.refresh(),l}end(){let{socket:t,contentLength:r,client:n,bytesWritten:o,expectsPayload:i,header:s,request:a}=this;if(a.onRequestSent(),t[Cr]=!1,t[Ge])throw t[Ge];if(!t.destroyed){if(o===0?i?t.write(`${s}content-length: 0\r
|
|
34
|
+
\r
|
|
35
|
+
`,"latin1"):t.write(`${s}\r
|
|
36
|
+
`,"latin1"):r===null&&t.write(`\r
|
|
37
|
+
0\r
|
|
38
|
+
\r
|
|
39
|
+
`,"latin1"),r!==null&&o!==r){if(n[Zu])throw new tn;process.emitWarning(new tn)}t[pe].timeout&&t[pe].timeoutType===no&&t[pe].timeout.refresh&&t[pe].timeout.refresh(),n[ir]()}}destroy(t){let{socket:r,client:n,abort:o}=this;r[Cr]=!1,t&&(_(n[ve]<=1,"pipeline should only contain this request"),o(t))}};$I.exports=jT});var nB=b((Lz,rB)=>{"use strict";var ft=w("node:assert"),{pipeline:o1}=w("node:stream"),te=j(),{RequestContentLengthMismatchError:nd,RequestAbortedError:KI,SocketError:_i,InformationalError:od}=ie(),{kUrl:za,kReset:ja,kClient:oo,kRunning:Za,kPending:i1,kQueue:Qr,kPendingIdx:id,kRunningIdx:bt,kError:St,kSocket:Ue,kStrictContentLength:s1,kOnError:sd,kMaxConcurrentStreams:tB,kHTTP2Session:kt,kResume:yr,kSize:a1,kHTTPContext:A1}=Ie(),sr=Symbol("open streams"),jI,ZI=!1,Ka;try{Ka=w("node:http2")}catch{Ka={constants:{}}}var{constants:{HTTP2_HEADER_AUTHORITY:c1,HTTP2_HEADER_METHOD:l1,HTTP2_HEADER_PATH:u1,HTTP2_HEADER_SCHEME:d1,HTTP2_HEADER_CONTENT_LENGTH:h1,HTTP2_HEADER_EXPECT:g1,HTTP2_HEADER_STATUS:p1}}=Ka;function f1(e){let t=[];for(let[r,n]of Object.entries(e))if(Array.isArray(n))for(let o of n)t.push(Buffer.from(r),Buffer.from(o));else t.push(Buffer.from(r),Buffer.from(n));return t}async function m1(e,t){e[Ue]=t,ZI||(ZI=!0,process.emitWarning("H2 support is experimental, expect them to change at any time.",{code:"UNDICI-H2"}));let r=Ka.connect(e[za],{createConnection:()=>t,peerMaxConcurrentStreams:e[tB]});r[sr]=0,r[oo]=e,r[Ue]=t,te.addListener(r,"error",I1),te.addListener(r,"frameError",B1),te.addListener(r,"end",C1),te.addListener(r,"goaway",Q1),te.addListener(r,"close",function(){let{[oo]:o}=this,{[Ue]:i}=o,s=this[Ue][St]||this[St]||new _i("closed",te.getSocketInfo(i));if(o[kt]=null,o.destroyed){ft(o[i1]===0);let a=o[Qr].splice(o[bt]);for(let A=0;A<a.length;A++){let c=a[A];te.errorRequest(o,c,s)}}}),r.unref(),e[kt]=r,t[kt]=r,te.addListener(t,"error",function(o){ft(o.code!=="ERR_TLS_CERT_ALTNAME_INVALID"),this[St]=o,this[oo][sd](o)}),te.addListener(t,"end",function(){te.destroy(this,new _i("other side closed",te.getSocketInfo(this)))}),te.addListener(t,"close",function(){let o=this[St]||new _i("closed",te.getSocketInfo(this));e[Ue]=null,this[kt]!=null&&this[kt].destroy(o),e[id]=e[bt],ft(e[Za]===0),e.emit("disconnect",e[za],[e],o),e[yr]()});let n=!1;return t.on("close",()=>{n=!0}),{version:"h2",defaultPipelining:1/0,write(...o){return w1(e,...o)},resume(){E1(e)},destroy(o,i){n?queueMicrotask(i):t.destroy(o).on("close",i)},get destroyed(){return t.destroyed},busy(){return!1}}}function E1(e){let t=e[Ue];t?.destroyed===!1&&(e[a1]===0&&e[tB]===0?(t.unref(),e[kt].unref()):(t.ref(),e[kt].ref()))}function I1(e){ft(e.code!=="ERR_TLS_CERT_ALTNAME_INVALID"),this[Ue][St]=e,this[oo][sd](e)}function B1(e,t,r){if(r===0){let n=new od(`HTTP/2: "frameError" received - type ${e}, code ${t}`);this[Ue][St]=n,this[oo][sd](n)}}function C1(){let e=new _i("other side closed",te.getSocketInfo(this[Ue]));this.destroy(e),te.destroy(this[Ue],e)}function Q1(e){let t=this[St]||new _i(`HTTP/2: "GOAWAY" frame received with code ${e}`,te.getSocketInfo(this)),r=this[oo];if(r[Ue]=null,r[A1]=null,this[kt]!=null&&(this[kt].destroy(t),this[kt]=null),te.destroy(this[Ue],t),r[bt]<r[Qr].length){let n=r[Qr][r[bt]];r[Qr][r[bt]++]=null,te.errorRequest(r,n,t),r[id]=r[bt]}ft(r[Za]===0),r.emit("disconnect",r[za],[r],t),r[yr]()}function y1(e){return e!=="GET"&&e!=="HEAD"&&e!=="OPTIONS"&&e!=="TRACE"&&e!=="CONNECT"}function w1(e,t){let r=e[kt],{method:n,path:o,host:i,upgrade:s,expectContinue:a,signal:A,headers:c}=t,{body:l}=t;if(s)return te.errorRequest(e,t,new Error("Upgrade not supported for H2")),!1;let u={};for(let I=0;I<c.length;I+=2){let Q=c[I+0],R=c[I+1];if(Array.isArray(R))for(let D=0;D<R.length;D++)u[Q]?u[Q]+=`,${R[D]}`:u[Q]=R[D];else u[Q]=R}let d,{hostname:h,port:g}=e[za];u[c1]=i||`${h}${g?`:${g}`:""}`,u[l1]=n;let p=I=>{t.aborted||t.completed||(I=I||new KI,te.errorRequest(e,t,I),d!=null&&te.destroy(d,I),te.destroy(l,I),e[Qr][e[bt]++]=null,e[yr]())};try{t.onConnect(p)}catch(I){te.errorRequest(e,t,I)}if(t.aborted)return!1;if(n==="CONNECT")return r.ref(),d=r.request(u,{endStream:!1,signal:A}),d.id&&!d.pending?(t.onUpgrade(null,null,d),++r[sr],e[Qr][e[bt]++]=null):d.once("ready",()=>{t.onUpgrade(null,null,d),++r[sr],e[Qr][e[bt]++]=null}),d.once("close",()=>{r[sr]-=1,r[sr]===0&&r.unref()}),!0;u[u1]=o,u[d1]="https";let m=n==="PUT"||n==="POST"||n==="PATCH";l&&typeof l.read=="function"&&l.read(0);let f=te.bodyLength(l);if(te.isFormDataLike(l)){jI??=eo().extractBody;let[I,Q]=jI(l);u["content-type"]=Q,l=I.stream,f=I.length}if(f==null&&(f=t.contentLength),(f===0||!m)&&(f=null),y1(n)&&f>0&&t.contentLength!=null&&t.contentLength!==f){if(e[s1])return te.errorRequest(e,t,new nd),!1;process.emitWarning(new nd)}f!=null&&(ft(l,"no body must not have content length"),u[h1]=`${f}`),r.ref();let B=n==="GET"||n==="HEAD"||l===null;return a?(u[g1]="100-continue",d=r.request(u,{endStream:B,signal:A}),d.once("continue",E)):(d=r.request(u,{endStream:B,signal:A}),E()),++r[sr],d.once("response",I=>{let{[p1]:Q,...R}=I;if(t.onResponseStarted(),t.aborted){let D=new KI;te.errorRequest(e,t,D),te.destroy(d,D);return}t.onHeaders(Number(Q),f1(R),d.resume.bind(d),"")===!1&&d.pause(),d.on("data",D=>{t.onData(D)===!1&&d.pause()})}),d.once("end",()=>{(d.state?.state==null||d.state.state<6)&&t.onComplete([]),r[sr]===0&&r.unref(),p(new od("HTTP/2: stream half-closed (remote)")),e[Qr][e[bt]++]=null,e[id]=e[bt],e[yr]()}),d.once("close",()=>{r[sr]-=1,r[sr]===0&&r.unref()}),d.once("error",function(I){p(I)}),d.once("frameError",(I,Q)=>{p(new od(`HTTP/2: "frameError" received - type ${I}, code ${Q}`))}),!0;function E(){!l||f===0?XI(p,d,null,e,t,e[Ue],f,m):te.isBuffer(l)?XI(p,d,l,e,t,e[Ue],f,m):te.isBlobLike(l)?typeof l.stream=="function"?eB(p,d,l.stream(),e,t,e[Ue],f,m):k1(p,d,l,e,t,e[Ue],f,m):te.isStream(l)?b1(p,e[Ue],m,d,l,e,t,f):te.isIterable(l)?eB(p,d,l,e,t,e[Ue],f,m):ft(!1)}}function XI(e,t,r,n,o,i,s,a){try{r!=null&&te.isBuffer(r)&&(ft(s===r.byteLength,"buffer body must have content length"),t.cork(),t.write(r),t.uncork(),t.end(),o.onBodySent(r)),a||(i[ja]=!0),o.onRequestSent(),n[yr]()}catch(A){e(A)}}function b1(e,t,r,n,o,i,s,a){ft(a!==0||i[Za]===0,"stream body cannot be pipelined");let A=o1(o,n,l=>{l?(te.destroy(A,l),e(l)):(te.removeAllListeners(A),s.onRequestSent(),r||(t[ja]=!0),i[yr]())});te.addListener(A,"data",c);function c(l){s.onBodySent(l)}}async function k1(e,t,r,n,o,i,s,a){ft(s===r.size,"blob body must have content length");try{if(s!=null&&s!==r.size)throw new nd;let A=Buffer.from(await r.arrayBuffer());t.cork(),t.write(A),t.uncork(),t.end(),o.onBodySent(A),o.onRequestSent(),a||(i[ja]=!0),n[yr]()}catch(A){e(A)}}async function eB(e,t,r,n,o,i,s,a){ft(s!==0||n[Za]===0,"iterator body cannot be pipelined");let A=null;function c(){if(A){let u=A;A=null,u()}}let l=()=>new Promise((u,d)=>{ft(A===null),i[St]?d(i[St]):A=u});t.on("close",c).on("drain",c);try{for await(let u of r){if(i[St])throw i[St];let d=t.write(u);o.onBodySent(u),d||await l()}t.end(),o.onRequestSent(),a||(i[ja]=!0),n[yr]()}catch(u){e(u)}finally{t.off("close",c).off("drain",c)}}rB.exports=m1});var eA=b((Tz,sB)=>{"use strict";var Yt=j(),{kBodyUsed:Oi}=Ie(),Ad=w("node:assert"),{InvalidArgumentError:S1}=ie(),x1=w("node:events"),D1=[300,301,302,303,307,308],oB=Symbol("body"),Xa=class{constructor(t){this[oB]=t,this[Oi]=!1}async*[Symbol.asyncIterator](){Ad(!this[Oi],"disturbed"),this[Oi]=!0,yield*this[oB]}},ad=class{constructor(t,r,n,o){if(r!=null&&(!Number.isInteger(r)||r<0))throw new S1("maxRedirections must be a positive number");Yt.validateHandler(o,n.method,n.upgrade),this.dispatch=t,this.location=null,this.abort=null,this.opts={...n,maxRedirections:0},this.maxRedirections=r,this.handler=o,this.history=[],this.redirectionLimitReached=!1,Yt.isStream(this.opts.body)?(Yt.bodyLength(this.opts.body)===0&&this.opts.body.on("data",function(){Ad(!1)}),typeof this.opts.body.readableDidRead!="boolean"&&(this.opts.body[Oi]=!1,x1.prototype.on.call(this.opts.body,"data",function(){this[Oi]=!0}))):this.opts.body&&typeof this.opts.body.pipeTo=="function"?this.opts.body=new Xa(this.opts.body):this.opts.body&&typeof this.opts.body!="string"&&!ArrayBuffer.isView(this.opts.body)&&Yt.isIterable(this.opts.body)&&(this.opts.body=new Xa(this.opts.body))}onConnect(t){this.abort=t,this.handler.onConnect(t,{history:this.history})}onUpgrade(t,r,n){this.handler.onUpgrade(t,r,n)}onError(t){this.handler.onError(t)}onHeaders(t,r,n,o){if(this.location=this.history.length>=this.maxRedirections||Yt.isDisturbed(this.opts.body)?null:v1(t,r),this.opts.throwOnMaxRedirect&&this.history.length>=this.maxRedirections){this.request&&this.request.abort(new Error("max redirects")),this.redirectionLimitReached=!0,this.abort(new Error("max redirects"));return}if(this.opts.origin&&this.history.push(new URL(this.opts.path,this.opts.origin)),!this.location)return this.handler.onHeaders(t,r,n,o);let{origin:i,pathname:s,search:a}=Yt.parseURL(new URL(this.location,this.opts.origin&&new URL(this.opts.path,this.opts.origin))),A=a?`${s}${a}`:s;this.opts.headers=R1(this.opts.headers,t===303,this.opts.origin!==i),this.opts.path=A,this.opts.origin=i,this.opts.maxRedirections=0,this.opts.query=null,t===303&&this.opts.method!=="HEAD"&&(this.opts.method="GET",this.opts.body=null)}onData(t){if(!this.location)return this.handler.onData(t)}onComplete(t){this.location?(this.location=null,this.abort=null,this.dispatch(this.opts,this)):this.handler.onComplete(t)}onBodySent(t){this.handler.onBodySent&&this.handler.onBodySent(t)}};function v1(e,t){if(D1.indexOf(e)===-1)return null;for(let r=0;r<t.length;r+=2)if(t[r].length===8&&Yt.headerNameToString(t[r])==="location")return t[r+1]}function iB(e,t,r){if(e.length===4)return Yt.headerNameToString(e)==="host";if(t&&Yt.headerNameToString(e).startsWith("content-"))return!0;if(r&&(e.length===13||e.length===6||e.length===19)){let n=Yt.headerNameToString(e);return n==="authorization"||n==="cookie"||n==="proxy-authorization"}return!1}function R1(e,t,r){let n=[];if(Array.isArray(e))for(let o=0;o<e.length;o+=2)iB(e[o],t,r)||n.push(e[o],e[o+1]);else if(e&&typeof e=="object")for(let o of Object.keys(e))iB(o,t,r)||n.push(o,e[o]);else Ad(e==null,"headers must be an object or an array");return n}sB.exports=ad});var tA=b((Pz,aB)=>{"use strict";var N1=eA();function F1({maxRedirections:e}){return t=>function(n,o){let{maxRedirections:i=e}=n;if(!i)return t(n,o);let s=new N1(t,i,n,o);return n={...n,maxRedirections:0},t(n,s)}}aB.exports=F1});var ao=b((_z,mB)=>{"use strict";var ar=w("node:assert"),hB=w("node:net"),M1=w("node:http"),sn=j(),{channels:io}=Hn(),U1=mE(),L1=Vn(),{InvalidArgumentError:Se,InformationalError:T1,ClientDestroyedError:P1}=ie(),_1=Si(),{kUrl:Vt,kServerName:wr,kClient:O1,kBusy:cd,kConnect:H1,kResuming:an,kRunning:Vi,kPending:Ji,kSize:Yi,kQueue:xt,kConnected:G1,kConnecting:so,kNeedDrain:kr,kKeepAliveDefaultTimeout:AB,kHostHeader:q1,kPendingIdx:Dt,kRunningIdx:Ar,kError:Y1,kPipelining:rA,kKeepAliveTimeoutValue:V1,kMaxHeadersSize:J1,kKeepAliveMaxTimeout:W1,kKeepAliveTimeoutThreshold:$1,kHeadersTimeout:z1,kBodyTimeout:K1,kStrictContentLength:j1,kConnector:Hi,kMaxRedirections:Z1,kMaxRequests:ld,kCounter:X1,kClose:e2,kDestroy:t2,kDispatch:r2,kInterceptors:cB,kLocalAddress:Gi,kMaxResponseSize:n2,kOnError:o2,kHTTPContext:xe,kMaxConcurrentStreams:i2,kResume:qi}=Ie(),s2=zI(),a2=nB(),lB=!1,br=Symbol("kClosedResolve"),uB=()=>{};function gB(e){return e[rA]??e[xe]?.defaultPipelining??1}var ud=class extends L1{constructor(t,{interceptors:r,maxHeaderSize:n,headersTimeout:o,socketTimeout:i,requestTimeout:s,connectTimeout:a,bodyTimeout:A,idleTimeout:c,keepAlive:l,keepAliveTimeout:u,maxKeepAliveTimeout:d,keepAliveMaxTimeout:h,keepAliveTimeoutThreshold:g,socketPath:p,pipelining:m,tls:f,strictContentLength:B,maxCachedSessions:E,maxRedirections:I,connect:Q,maxRequestsPerClient:R,localAddress:D,maxResponseSize:x,autoSelectFamily:F,autoSelectFamilyAttemptTimeout:K,maxConcurrentStreams:X,allowH2:z,webSocket:be}={}){if(super({webSocket:be}),l!==void 0)throw new Se("unsupported keepAlive, use pipelining=0 instead");if(i!==void 0)throw new Se("unsupported socketTimeout, use headersTimeout & bodyTimeout instead");if(s!==void 0)throw new Se("unsupported requestTimeout, use headersTimeout & bodyTimeout instead");if(c!==void 0)throw new Se("unsupported idleTimeout, use keepAliveTimeout instead");if(d!==void 0)throw new Se("unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead");if(n!=null&&!Number.isFinite(n))throw new Se("invalid maxHeaderSize");if(p!=null&&typeof p!="string")throw new Se("invalid socketPath");if(a!=null&&(!Number.isFinite(a)||a<0))throw new Se("invalid connectTimeout");if(u!=null&&(!Number.isFinite(u)||u<=0))throw new Se("invalid keepAliveTimeout");if(h!=null&&(!Number.isFinite(h)||h<=0))throw new Se("invalid keepAliveMaxTimeout");if(g!=null&&!Number.isFinite(g))throw new Se("invalid keepAliveTimeoutThreshold");if(o!=null&&(!Number.isInteger(o)||o<0))throw new Se("headersTimeout must be a positive integer or zero");if(A!=null&&(!Number.isInteger(A)||A<0))throw new Se("bodyTimeout must be a positive integer or zero");if(Q!=null&&typeof Q!="function"&&typeof Q!="object")throw new Se("connect must be a function or an object");if(I!=null&&(!Number.isInteger(I)||I<0))throw new Se("maxRedirections must be a positive number");if(R!=null&&(!Number.isInteger(R)||R<0))throw new Se("maxRequestsPerClient must be a positive number");if(D!=null&&(typeof D!="string"||hB.isIP(D)===0))throw new Se("localAddress must be valid string IP address");if(x!=null&&(!Number.isInteger(x)||x<-1))throw new Se("maxResponseSize must be a positive number");if(K!=null&&(!Number.isInteger(K)||K<-1))throw new Se("autoSelectFamilyAttemptTimeout must be a positive number");if(z!=null&&typeof z!="boolean")throw new Se("allowH2 must be a valid boolean value");if(X!=null&&(typeof X!="number"||X<1))throw new Se("maxConcurrentStreams must be a positive integer, greater than 0");typeof Q!="function"&&(Q=_1({...f,maxCachedSessions:E,allowH2:z,socketPath:p,timeout:a,...F?{autoSelectFamily:F,autoSelectFamilyAttemptTimeout:K}:void 0,...Q})),r?.Client&&Array.isArray(r.Client)?(this[cB]=r.Client,lB||(lB=!0,process.emitWarning("Client.Options#interceptor is deprecated. Use Dispatcher#compose instead.",{code:"UNDICI-CLIENT-INTERCEPTOR-DEPRECATED"}))):this[cB]=[A2({maxRedirections:I})],this[Vt]=sn.parseOrigin(t),this[Hi]=Q,this[rA]=m??1,this[J1]=n||M1.maxHeaderSize,this[AB]=u??4e3,this[W1]=h??6e5,this[$1]=g??2e3,this[V1]=this[AB],this[wr]=null,this[Gi]=D??null,this[an]=0,this[kr]=0,this[q1]=`host: ${this[Vt].hostname}${this[Vt].port?`:${this[Vt].port}`:""}\r
|
|
40
|
+
`,this[K1]=A??3e5,this[z1]=o??3e5,this[j1]=B??!0,this[Z1]=I,this[ld]=R,this[br]=null,this[n2]=x>-1?x:-1,this[i2]=X??100,this[xe]=null,this[xt]=[],this[Ar]=0,this[Dt]=0,this[qi]=ht=>dd(this,ht),this[o2]=ht=>pB(this,ht)}get pipelining(){return this[rA]}set pipelining(t){this[rA]=t,this[qi](!0)}get[Ji](){return this[xt].length-this[Dt]}get[Vi](){return this[Dt]-this[Ar]}get[Yi](){return this[xt].length-this[Ar]}get[G1](){return!!this[xe]&&!this[so]&&!this[xe].destroyed}get[cd](){return!!(this[xe]?.busy(null)||this[Yi]>=(gB(this)||1)||this[Ji]>0)}[H1](t){fB(this),this.once("connect",t)}[r2](t,r){let n=t.origin||this[Vt].origin,o=new U1(n,t,r);return this[xt].push(o),this[an]||(sn.bodyLength(o.body)==null&&sn.isIterable(o.body)?(this[an]=1,queueMicrotask(()=>dd(this))):this[qi](!0)),this[an]&&this[kr]!==2&&this[cd]&&(this[kr]=2),this[kr]<2}async[e2](){return new Promise(t=>{this[Yi]?this[br]=t:t(null)})}async[t2](t){return new Promise(r=>{let n=this[xt].splice(this[Dt]);for(let i=0;i<n.length;i++){let s=n[i];sn.errorRequest(this,s,t)}let o=()=>{this[br]&&(this[br](),this[br]=null),r(null)};this[xe]?(this[xe].destroy(t,o),this[xe]=null):queueMicrotask(o),this[qi]()})}},A2=tA();function pB(e,t){if(e[Vi]===0&&t.code!=="UND_ERR_INFO"&&t.code!=="UND_ERR_SOCKET"){ar(e[Dt]===e[Ar]);let r=e[xt].splice(e[Ar]);for(let n=0;n<r.length;n++){let o=r[n];sn.errorRequest(e,o,t)}ar(e[Yi]===0)}}async function fB(e){ar(!e[so]),ar(!e[xe]);let{host:t,hostname:r,protocol:n,port:o}=e[Vt];if(r[0]==="["){let i=r.indexOf("]");ar(i!==-1);let s=r.substring(1,i);ar(hB.isIP(s)),r=s}e[so]=!0,io.beforeConnect.hasSubscribers&&io.beforeConnect.publish({connectParams:{host:t,hostname:r,protocol:n,port:o,version:e[xe]?.version,servername:e[wr],localAddress:e[Gi]},connector:e[Hi]});try{let i=await new Promise((s,a)=>{e[Hi]({host:t,hostname:r,protocol:n,port:o,servername:e[wr],localAddress:e[Gi]},(A,c)=>{A?a(A):s(c)})});if(e.destroyed){sn.destroy(i.on("error",uB),new P1);return}ar(i);try{e[xe]=i.alpnProtocol==="h2"?await a2(e,i):await s2(e,i)}catch(s){throw i.destroy().on("error",uB),s}e[so]=!1,i[X1]=0,i[ld]=e[ld],i[O1]=e,i[Y1]=null,io.connected.hasSubscribers&&io.connected.publish({connectParams:{host:t,hostname:r,protocol:n,port:o,version:e[xe]?.version,servername:e[wr],localAddress:e[Gi]},connector:e[Hi],socket:i}),e.emit("connect",e[Vt],[e])}catch(i){if(e.destroyed)return;if(e[so]=!1,io.connectError.hasSubscribers&&io.connectError.publish({connectParams:{host:t,hostname:r,protocol:n,port:o,version:e[xe]?.version,servername:e[wr],localAddress:e[Gi]},connector:e[Hi],error:i}),i.code==="ERR_TLS_CERT_ALTNAME_INVALID")for(ar(e[Vi]===0);e[Ji]>0&&e[xt][e[Dt]].servername===e[wr];){let s=e[xt][e[Dt]++];sn.errorRequest(e,s,i)}else pB(e,i);e.emit("connectionError",e[Vt],[e],i)}e[qi]()}function dB(e){e[kr]=0,e.emit("drain",e[Vt],[e])}function dd(e,t){e[an]!==2&&(e[an]=2,c2(e,t),e[an]=0,e[Ar]>256&&(e[xt].splice(0,e[Ar]),e[Dt]-=e[Ar],e[Ar]=0))}function c2(e,t){for(;;){if(e.destroyed){ar(e[Ji]===0);return}if(e[br]&&!e[Yi]){e[br](),e[br]=null;return}if(e[xe]&&e[xe].resume(),e[cd])e[kr]=2;else if(e[kr]===2){t?(e[kr]=1,queueMicrotask(()=>dB(e))):dB(e);continue}if(e[Ji]===0||e[Vi]>=(gB(e)||1))return;let r=e[xt][e[Dt]];if(e[Vt].protocol==="https:"&&e[wr]!==r.servername){if(e[Vi]>0)return;e[wr]=r.servername,e[xe]?.destroy(new T1("servername changed"),()=>{e[xe]=null,dd(e)})}if(e[so])return;if(!e[xe]){fB(e);return}if(e[xe].destroyed||e[xe].busy(r))return;!r.aborted&&e[xe].write(r)?e[Dt]++:e[xt].splice(e[Dt],1)}}mB.exports=ud});var hd=b((Hz,EB)=>{"use strict";var nA=class{constructor(){this.bottom=0,this.top=0,this.list=new Array(2048),this.next=null}isEmpty(){return this.top===this.bottom}isFull(){return(this.top+1&2047)===this.bottom}push(t){this.list[this.top]=t,this.top=this.top+1&2047}shift(){let t=this.list[this.bottom];return t===void 0?null:(this.list[this.bottom]=void 0,this.bottom=this.bottom+1&2047,t)}};EB.exports=class{constructor(){this.head=this.tail=new nA}isEmpty(){return this.head.isEmpty()}push(t){this.head.isFull()&&(this.head=this.head.next=new nA),this.head.push(t)}shift(){let t=this.tail,r=t.shift();return t.isEmpty()&&t.next!==null&&(this.tail=t.next),r}}});var BB=b((Gz,IB)=>{var{kFree:l2,kConnected:u2,kPending:d2,kQueued:h2,kRunning:g2,kSize:p2}=Ie(),An=Symbol("pool"),gd=class{constructor(t){this[An]=t}get connected(){return this[An][u2]}get free(){return this[An][l2]}get pending(){return this[An][d2]}get queued(){return this[An][h2]}get running(){return this[An][g2]}get size(){return this[An][p2]}};IB.exports=gd});var Bd=b((qz,vB)=>{"use strict";var f2=Vn(),m2=hd(),{kConnected:pd,kSize:CB,kRunning:QB,kPending:yB,kQueued:Wi,kBusy:E2,kFree:I2,kUrl:B2,kClose:C2,kDestroy:Q2,kDispatch:y2}=Ie(),w2=BB(),We=Symbol("clients"),qe=Symbol("needDrain"),$i=Symbol("queue"),fd=Symbol("closed resolve"),md=Symbol("onDrain"),wB=Symbol("onConnect"),bB=Symbol("onDisconnect"),kB=Symbol("onConnectionError"),Ed=Symbol("get dispatcher"),xB=Symbol("add client"),DB=Symbol("remove client"),SB=Symbol("stats"),Id=class extends f2{constructor(t){super(t),this[$i]=new m2,this[We]=[],this[Wi]=0;let r=this;this[md]=function(o,i){let s=r[$i],a=!1;for(;!a;){let A=s.shift();if(!A)break;r[Wi]--,a=!this.dispatch(A.opts,A.handler)}this[qe]=a,!this[qe]&&r[qe]&&(r[qe]=!1,r.emit("drain",o,[r,...i])),r[fd]&&s.isEmpty()&&Promise.all(r[We].map(A=>A.close())).then(r[fd])},this[wB]=(n,o)=>{r.emit("connect",n,[r,...o])},this[bB]=(n,o,i)=>{r.emit("disconnect",n,[r,...o],i)},this[kB]=(n,o,i)=>{r.emit("connectionError",n,[r,...o],i)},this[SB]=new w2(this)}get[E2](){return this[qe]}get[pd](){return this[We].filter(t=>t[pd]).length}get[I2](){return this[We].filter(t=>t[pd]&&!t[qe]).length}get[yB](){let t=this[Wi];for(let{[yB]:r}of this[We])t+=r;return t}get[QB](){let t=0;for(let{[QB]:r}of this[We])t+=r;return t}get[CB](){let t=this[Wi];for(let{[CB]:r}of this[We])t+=r;return t}get stats(){return this[SB]}async[C2](){this[$i].isEmpty()?await Promise.all(this[We].map(t=>t.close())):await new Promise(t=>{this[fd]=t})}async[Q2](t){for(;;){let r=this[$i].shift();if(!r)break;r.handler.onError(t)}await Promise.all(this[We].map(r=>r.destroy(t)))}[y2](t,r){let n=this[Ed]();return n?n.dispatch(t,r)||(n[qe]=!0,this[qe]=!this[Ed]()):(this[qe]=!0,this[$i].push({opts:t,handler:r}),this[Wi]++),!this[qe]}[xB](t){return t.on("drain",this[md]).on("connect",this[wB]).on("disconnect",this[bB]).on("connectionError",this[kB]),this[We].push(t),this[qe]&&queueMicrotask(()=>{this[qe]&&this[md](t[B2],[this,t])}),this}[DB](t){t.close(()=>{let r=this[We].indexOf(t);r!==-1&&this[We].splice(r,1)}),this[qe]=this[We].some(r=>!r[qe]&&r.closed!==!0&&r.destroyed!==!0)}};vB.exports={PoolBase:Id,kClients:We,kNeedDrain:qe,kAddClient:xB,kRemoveClient:DB,kGetDispatcher:Ed}});var Ao=b((Yz,MB)=>{"use strict";var{PoolBase:b2,kClients:oA,kNeedDrain:k2,kAddClient:S2,kGetDispatcher:x2}=Bd(),D2=ao(),{InvalidArgumentError:Cd}=ie(),RB=j(),{kUrl:NB,kInterceptors:v2}=Ie(),R2=Si(),Qd=Symbol("options"),yd=Symbol("connections"),FB=Symbol("factory");function N2(e,t){return new D2(e,t)}var wd=class extends b2{constructor(t,{connections:r,factory:n=N2,connect:o,connectTimeout:i,tls:s,maxCachedSessions:a,socketPath:A,autoSelectFamily:c,autoSelectFamilyAttemptTimeout:l,allowH2:u,...d}={}){if(r!=null&&(!Number.isFinite(r)||r<0))throw new Cd("invalid connections");if(typeof n!="function")throw new Cd("factory must be a function.");if(o!=null&&typeof o!="function"&&typeof o!="object")throw new Cd("connect must be a function or an object");typeof o!="function"&&(o=R2({...s,maxCachedSessions:a,allowH2:u,socketPath:A,timeout:i,...c?{autoSelectFamily:c,autoSelectFamilyAttemptTimeout:l}:void 0,...o})),super(d),this[v2]=d.interceptors?.Pool&&Array.isArray(d.interceptors.Pool)?d.interceptors.Pool:[],this[yd]=r||null,this[NB]=RB.parseOrigin(t),this[Qd]={...RB.deepClone(d),connect:o,allowH2:u},this[Qd].interceptors=d.interceptors?{...d.interceptors}:void 0,this[FB]=n,this.on("connectionError",(h,g,p)=>{for(let m of g){let f=this[oA].indexOf(m);f!==-1&&this[oA].splice(f,1)}})}[x2](){for(let t of this[oA])if(!t[k2])return t;if(!this[yd]||this[oA].length<this[yd]){let t=this[FB](this[NB],this[Qd]);return this[S2](t),t}}};MB.exports=wd});var _B=b((Vz,PB)=>{"use strict";var{BalancedPoolMissingUpstreamError:F2,InvalidArgumentError:M2}=ie(),{PoolBase:U2,kClients:Pe,kNeedDrain:zi,kAddClient:L2,kRemoveClient:T2,kGetDispatcher:P2}=Bd(),_2=Ao(),{kUrl:bd,kInterceptors:O2}=Ie(),{parseOrigin:UB}=j(),LB=Symbol("factory"),iA=Symbol("options"),TB=Symbol("kGreatestCommonDivisor"),cn=Symbol("kCurrentWeight"),ln=Symbol("kIndex"),mt=Symbol("kWeight"),sA=Symbol("kMaxWeightPerServer"),aA=Symbol("kErrorPenalty");function H2(e,t){if(e===0)return t;for(;t!==0;){let r=t;t=e%t,e=r}return e}function G2(e,t){return new _2(e,t)}var kd=class extends U2{constructor(t=[],{factory:r=G2,...n}={}){if(super(),this[iA]=n,this[ln]=-1,this[cn]=0,this[sA]=this[iA].maxWeightPerServer||100,this[aA]=this[iA].errorPenalty||15,Array.isArray(t)||(t=[t]),typeof r!="function")throw new M2("factory must be a function.");this[O2]=n.interceptors?.BalancedPool&&Array.isArray(n.interceptors.BalancedPool)?n.interceptors.BalancedPool:[],this[LB]=r;for(let o of t)this.addUpstream(o);this._updateBalancedPoolStats()}addUpstream(t){let r=UB(t).origin;if(this[Pe].find(o=>o[bd].origin===r&&o.closed!==!0&&o.destroyed!==!0))return this;let n=this[LB](r,Object.assign({},this[iA]));this[L2](n),n.on("connect",()=>{n[mt]=Math.min(this[sA],n[mt]+this[aA])}),n.on("connectionError",()=>{n[mt]=Math.max(1,n[mt]-this[aA]),this._updateBalancedPoolStats()}),n.on("disconnect",(...o)=>{let i=o[2];i&&i.code==="UND_ERR_SOCKET"&&(n[mt]=Math.max(1,n[mt]-this[aA]),this._updateBalancedPoolStats())});for(let o of this[Pe])o[mt]=this[sA];return this._updateBalancedPoolStats(),this}_updateBalancedPoolStats(){let t=0;for(let r=0;r<this[Pe].length;r++)t=H2(this[Pe][r][mt],t);this[TB]=t}removeUpstream(t){let r=UB(t).origin,n=this[Pe].find(o=>o[bd].origin===r&&o.closed!==!0&&o.destroyed!==!0);return n&&this[T2](n),this}get upstreams(){return this[Pe].filter(t=>t.closed!==!0&&t.destroyed!==!0).map(t=>t[bd].origin)}[P2](){if(this[Pe].length===0)throw new F2;if(!this[Pe].find(i=>!i[zi]&&i.closed!==!0&&i.destroyed!==!0)||this[Pe].map(i=>i[zi]).reduce((i,s)=>i&&s,!0))return;let n=0,o=this[Pe].findIndex(i=>!i[zi]);for(;n++<this[Pe].length;){this[ln]=(this[ln]+1)%this[Pe].length;let i=this[Pe][this[ln]];if(i[mt]>this[Pe][o][mt]&&!i[zi]&&(o=this[ln]),this[ln]===0&&(this[cn]=this[cn]-this[TB],this[cn]<=0&&(this[cn]=this[sA])),i[mt]>=this[cn]&&!i[zi])return i}return this[cn]=this[Pe][o][mt],this[ln]=o,this[Pe][o]}};PB.exports=kd});var co=b((Jz,JB)=>{"use strict";var{InvalidArgumentError:AA}=ie(),{kClients:Sr,kRunning:OB,kClose:q2,kDestroy:Y2,kDispatch:V2,kInterceptors:J2}=Ie(),W2=Vn(),$2=Ao(),z2=ao(),K2=j(),j2=tA(),HB=Symbol("onConnect"),GB=Symbol("onDisconnect"),qB=Symbol("onConnectionError"),Z2=Symbol("maxRedirections"),YB=Symbol("onDrain"),VB=Symbol("factory"),Sd=Symbol("options");function X2(e,t){return t&&t.connections===1?new z2(e,t):new $2(e,t)}var xd=class extends W2{constructor({factory:t=X2,maxRedirections:r=0,connect:n,...o}={}){if(typeof t!="function")throw new AA("factory must be a function.");if(n!=null&&typeof n!="function"&&typeof n!="object")throw new AA("connect must be a function or an object");if(!Number.isInteger(r)||r<0)throw new AA("maxRedirections must be a positive number");super(o),n&&typeof n!="function"&&(n={...n}),this[J2]=o.interceptors?.Agent&&Array.isArray(o.interceptors.Agent)?o.interceptors.Agent:[j2({maxRedirections:r})],this[Sd]={...K2.deepClone(o),connect:n},this[Sd].interceptors=o.interceptors?{...o.interceptors}:void 0,this[Z2]=r,this[VB]=t,this[Sr]=new Map,this[YB]=(i,s)=>{this.emit("drain",i,[this,...s])},this[HB]=(i,s)=>{this.emit("connect",i,[this,...s])},this[GB]=(i,s,a)=>{this.emit("disconnect",i,[this,...s],a)},this[qB]=(i,s,a)=>{this.emit("connectionError",i,[this,...s],a)}}get[OB](){let t=0;for(let r of this[Sr].values())t+=r[OB];return t}[V2](t,r){let n;if(t.origin&&(typeof t.origin=="string"||t.origin instanceof URL))n=String(t.origin);else throw new AA("opts.origin must be a non-empty string or URL.");let o=this[Sr].get(n);return o||(o=this[VB](t.origin,this[Sd]).on("drain",this[YB]).on("connect",this[HB]).on("disconnect",this[GB]).on("connectionError",this[qB]),this[Sr].set(n,o)),o.dispatch(t,r)}async[q2](){let t=[];for(let r of this[Sr].values())t.push(r.close());this[Sr].clear(),await Promise.all(t)}async[Y2](t){let r=[];for(let n of this[Sr].values())r.push(n.destroy(t));this[Sr].clear(),await Promise.all(r)}};JB.exports=xd});var Fd=b((Wz,nC)=>{"use strict";var{kProxy:Dd,kClose:ZB,kDestroy:XB,kDispatch:WB,kInterceptors:eP}=Ie(),{URL:un}=w("node:url"),tP=co(),eC=Ao(),tC=Vn(),{InvalidArgumentError:lo,RequestAbortedError:rP,SecureProxyConnectionError:nP}=ie(),$B=Si(),rC=ao(),cA=Symbol("proxy agent"),lA=Symbol("proxy client"),xr=Symbol("proxy headers"),vd=Symbol("request tls settings"),zB=Symbol("proxy tls settings"),KB=Symbol("connect endpoint function"),jB=Symbol("tunnel proxy");function oP(e){return e==="https:"?443:80}function iP(e,t){return new eC(e,t)}var sP=()=>{};function aP(e,t){return t.connections===1?new rC(e,t):new eC(e,t)}var Rd=class extends tC{#e;constructor(t,{headers:r={},connect:n,factory:o}){if(super(),!t)throw new lo("Proxy URL is mandatory");this[xr]=r,o?this.#e=o(t,{connect:n}):this.#e=new rC(t,{connect:n})}[WB](t,r){let n=r.onHeaders;r.onHeaders=function(a,A,c){if(a===407){typeof r.onError=="function"&&r.onError(new lo("Proxy Authentication Required (407)"));return}n&&n.call(this,a,A,c)};let{origin:o,path:i="/",headers:s={}}=t;if(t.path=o+i,!("host"in s)&&!("Host"in s)){let{host:a}=new un(o);s.host=a}return t.headers={...this[xr],...s},this.#e[WB](t,r)}async[ZB](){return this.#e.close()}async[XB](t){return this.#e.destroy(t)}},Nd=class extends tC{constructor(t){if(super(),!t||typeof t=="object"&&!(t instanceof un)&&!t.uri)throw new lo("Proxy uri is mandatory");let{clientFactory:r=iP}=t;if(typeof r!="function")throw new lo("Proxy opts.clientFactory must be a function.");let{proxyTunnel:n=!0}=t,o=this.#e(t),{href:i,origin:s,port:a,protocol:A,username:c,password:l,hostname:u}=o;if(this[Dd]={uri:i,protocol:A},this[eP]=t.interceptors?.ProxyAgent&&Array.isArray(t.interceptors.ProxyAgent)?t.interceptors.ProxyAgent:[],this[vd]=t.requestTls,this[zB]=t.proxyTls,this[xr]=t.headers||{},this[jB]=n,t.auth&&t.token)throw new lo("opts.auth cannot be used in combination with opts.token");t.auth?this[xr]["proxy-authorization"]=`Basic ${t.auth}`:t.token?this[xr]["proxy-authorization"]=t.token:c&&l&&(this[xr]["proxy-authorization"]=`Basic ${Buffer.from(`${decodeURIComponent(c)}:${decodeURIComponent(l)}`).toString("base64")}`);let d=$B({...t.proxyTls});this[KB]=$B({...t.requestTls});let h=t.factory||aP,g=(p,m)=>{let{protocol:f}=new un(p);return!this[jB]&&f==="http:"&&this[Dd].protocol==="http:"?new Rd(this[Dd].uri,{headers:this[xr],connect:d,factory:h}):h(p,m)};this[lA]=r(o,{connect:d}),this[cA]=new tP({...t,factory:g,connect:async(p,m)=>{let f=p.host;p.port||(f+=`:${oP(p.protocol)}`);try{let{socket:B,statusCode:E}=await this[lA].connect({origin:s,port:a,path:f,signal:p.signal,headers:{...this[xr],host:p.host},servername:this[zB]?.servername||u});if(E!==200&&(B.on("error",sP).destroy(),m(new rP(`Proxy response (${E}) !== 200 when HTTP Tunneling`))),p.protocol!=="https:"){m(null,B);return}let I;this[vd]?I=this[vd].servername:I=p.servername,this[KB]({...p,servername:I,httpSocket:B},m)}catch(B){B.code==="ERR_TLS_CERT_ALTNAME_INVALID"?m(new nP(B)):m(B)}}})}dispatch(t,r){let n=AP(t.headers);if(cP(n),n&&!("host"in n)&&!("Host"in n)){let{host:o}=new un(t.origin);n.host=o}return this[cA].dispatch({...t,headers:n},r)}#e(t){return typeof t=="string"?new un(t):t instanceof un?t:new un(t.uri)}async[ZB](){await this[cA].close(),await this[lA].close()}async[XB](){await this[cA].destroy(),await this[lA].destroy()}};function AP(e){if(Array.isArray(e)){let t={};for(let r=0;r<e.length;r+=2)t[e[r]]=e[r+1];return t}return e}function cP(e){if(e&&Object.keys(e).find(r=>r.toLowerCase()==="proxy-authorization"))throw new lo("Proxy-Authorization should be sent in ProxyAgent constructor")}nC.exports=Nd});var cC=b(($z,AC)=>{"use strict";var lP=Vn(),{kClose:uP,kDestroy:dP,kClosed:oC,kDestroyed:iC,kDispatch:hP,kNoProxyAgent:Ki,kHttpProxyAgent:Dr,kHttpsProxyAgent:dn}=Ie(),sC=Fd(),gP=co(),pP={"http:":80,"https:":443},aC=!1,Md=class extends lP{#e=null;#t=null;#r=null;constructor(t={}){super(),this.#r=t,aC||(aC=!0,process.emitWarning("EnvHttpProxyAgent is experimental, expect them to change at any time.",{code:"UNDICI-EHPA"}));let{httpProxy:r,httpsProxy:n,noProxy:o,...i}=t;this[Ki]=new gP(i);let s=r??process.env.http_proxy??process.env.HTTP_PROXY;s?this[Dr]=new sC({...i,uri:s}):this[Dr]=this[Ki];let a=n??process.env.https_proxy??process.env.HTTPS_PROXY;a?this[dn]=new sC({...i,uri:a}):this[dn]=this[Dr],this.#n()}[hP](t,r){let n=new URL(t.origin);return this.#i(n).dispatch(t,r)}async[uP](){await this[Ki].close(),this[Dr][oC]||await this[Dr].close(),this[dn][oC]||await this[dn].close()}async[dP](t){await this[Ki].destroy(t),this[Dr][iC]||await this[Dr].destroy(t),this[dn][iC]||await this[dn].destroy(t)}#i(t){let{protocol:r,host:n,port:o}=t;return n=n.replace(/:\d*$/,"").toLowerCase(),o=Number.parseInt(o,10)||pP[r]||0,this.#o(n,o)?r==="https:"?this[dn]:this[Dr]:this[Ki]}#o(t,r){if(this.#s&&this.#n(),this.#t.length===0)return!0;if(this.#e==="*")return!1;for(let n=0;n<this.#t.length;n++){let o=this.#t[n];if(!(o.port&&o.port!==r)){if(/^[.*]/.test(o.hostname)){if(t.endsWith(o.hostname.replace(/^\*/,"")))return!1}else if(t===o.hostname)return!1}}return!0}#n(){let t=this.#r.noProxy??this.#a,r=t.split(/[,\s]/),n=[];for(let o=0;o<r.length;o++){let i=r[o];if(!i)continue;let s=i.match(/^(.+):(\d+)$/);n.push({hostname:(s?s[1]:i).toLowerCase(),port:s?Number.parseInt(s[2],10):0})}this.#e=t,this.#t=n}get#s(){return this.#r.noProxy!==void 0?!1:this.#e!==this.#a}get#a(){return process.env.no_proxy??process.env.NO_PROXY??""}};AC.exports=Md});var uA=b((zz,gC)=>{"use strict";var uo=w("node:assert"),{kRetryHandlerDefaultRetry:lC}=Ie(),{RequestRetryError:ho}=ie(),{isDisturbed:uC,parseHeaders:fP,parseRangeHeader:dC,wrapRequestBody:mP}=j();function EP(e){let t=Date.now();return new Date(e).getTime()-t}function hC(e,t,r,n){let o=e["content-length"];if(o==null||!Number.isFinite(t.start)||!Number.isFinite(t.end))return null;let i=Number(o),s=t.end-t.start+1;return!Number.isFinite(i)||i!==s?new ho("Content-Length mismatch",r,{headers:e,data:{count:n}}):null}var Ud=class e{constructor(t,r){let{retryOptions:n,...o}=t,{retry:i,maxRetries:s,maxTimeout:a,minTimeout:A,timeoutFactor:c,methods:l,errorCodes:u,retryAfter:d,statusCodes:h}=n??{};this.dispatch=r.dispatch,this.handler=r.handler,this.opts={...o,body:mP(t.body)},this.abort=null,this.aborted=!1,this.retryOpts={retry:i??e[lC],retryAfter:d??!0,maxTimeout:a??30*1e3,minTimeout:A??500,timeoutFactor:c??2,maxRetries:s??5,methods:l??["GET","HEAD","OPTIONS","PUT","DELETE","TRACE"],statusCodes:h??[500,502,503,504,429],errorCodes:u??["ECONNRESET","ECONNREFUSED","ENOTFOUND","ENETDOWN","ENETUNREACH","EHOSTDOWN","EHOSTUNREACH","EPIPE","UND_ERR_SOCKET"]},this.retryCount=0,this.retryCountCheckpoint=0,this.start=0,this.end=null,this.etag=null,this.resume=null,this.handler.onConnect(g=>{this.aborted=!0,this.abort?this.abort(g):this.reason=g})}onRequestSent(){this.handler.onRequestSent&&this.handler.onRequestSent()}onUpgrade(t,r,n){this.handler.onUpgrade&&this.handler.onUpgrade(t,r,n)}onConnect(t){this.aborted?t(this.reason):this.abort=t}onBodySent(t){if(this.handler.onBodySent)return this.handler.onBodySent(t)}static[lC](t,{state:r,opts:n},o){let{statusCode:i,code:s,headers:a}=t,{method:A,retryOptions:c}=n,{maxRetries:l,minTimeout:u,maxTimeout:d,timeoutFactor:h,statusCodes:g,errorCodes:p,methods:m}=c,{counter:f}=r;if(s&&s!=="UND_ERR_REQ_RETRY"&&!p.includes(s)){o(t);return}if(Array.isArray(m)&&!m.includes(A)){o(t);return}if(i!=null&&Array.isArray(g)&&!g.includes(i)){o(t);return}if(f>l){o(t);return}let B=a?.["retry-after"];B&&(B=Number(B),B=Number.isNaN(B)?EP(B):B*1e3);let E=B>0?Math.min(B,d):Math.min(u*h**(f-1),d);setTimeout(()=>o(null),E)}onHeaders(t,r,n,o){let i=fP(r);if(this.retryCount+=1,t>=300)return this.retryOpts.statusCodes.includes(t)===!1?this.handler.onHeaders(t,r,n,o):(this.abort(new ho("Request failed",t,{headers:i,data:{count:this.retryCount}})),!1);if(this.resume!=null){if(this.resume=null,t!==206&&(this.start>0||t!==200))return this.abort(new ho("server does not support the range header and the payload was partially consumed",t,{headers:i,data:{count:this.retryCount}})),!1;let a=dC(i["content-range"]);if(!a)return this.abort(new ho("Content-Range mismatch",t,{headers:i,data:{count:this.retryCount}})),!1;if(this.etag!=null&&this.etag!==i.etag)return this.abort(new ho("ETag mismatch",t,{headers:i,data:{count:this.retryCount}})),!1;let A=hC(i,a,t,this.retryCount);if(A!=null)return this.abort(A),!1;let{start:c,size:l,end:u=l-1}=a;return uo(this.start===c,"content-range mismatch"),uo(this.end==null||this.end===u,"content-range mismatch"),this.resume=n,!0}if(this.end==null){if(t===206){let a=dC(i["content-range"]);if(a==null)return this.handler.onHeaders(t,r,n,o);let A=hC(i,a,t,this.retryCount);if(A!=null)return this.abort(A),!1;let{start:c,size:l,end:u=l-1}=a;uo(c!=null&&Number.isFinite(c),"content-range mismatch"),uo(u!=null&&Number.isFinite(u),"invalid content-length"),this.start=c,this.end=u}if(this.end==null){let a=i["content-length"];this.end=a!=null?Number(a)-1:null}return uo(Number.isFinite(this.start)),uo(this.end==null||Number.isFinite(this.end),"invalid content-length"),this.resume=n,this.etag=i.etag!=null?i.etag:null,this.etag!=null&&this.etag.startsWith("W/")&&(this.etag=null),this.handler.onHeaders(t,r,n,o)}let s=new ho("Request failed",t,{headers:i,data:{count:this.retryCount}});return this.abort(s),!1}onData(t){return this.start+=t.length,this.handler.onData(t)}onComplete(t){return this.retryCount=0,this.handler.onComplete(t)}onError(t){if(this.aborted||uC(this.opts.body))return this.handler.onError(t);this.retryCount-this.retryCountCheckpoint>0?this.retryCount=this.retryCountCheckpoint+(this.retryCount-this.retryCountCheckpoint):this.retryCount+=1,this.retryOpts.retry(t,{state:{counter:this.retryCount},opts:{retryOptions:this.retryOpts,...this.opts}},r.bind(this));function r(n){if(n!=null||this.aborted||uC(this.opts.body))return this.handler.onError(n);if(this.start!==0){let o={range:`bytes=${this.start}-${this.end??""}`};this.etag!=null&&(o["if-match"]=this.etag),this.opts={...this.opts,headers:{...this.opts.headers,...o}}}try{this.retryCountCheckpoint=this.retryCount,this.dispatch(this.opts,this)}catch(o){this.handler.onError(o)}}}};gC.exports=Ud});var fC=b((Kz,pC)=>{"use strict";var IP=bi(),BP=uA(),Ld=class extends IP{#e=null;#t=null;constructor(t,r={}){super(r),this.#e=t,this.#t=r}dispatch(t,r){let n=new BP({...t,retryOptions:this.#t},{dispatch:this.#e.dispatch.bind(this.#e),handler:r});return this.#e.dispatch(t,n)}close(){return this.#e.close()}destroy(){return this.#e.destroy()}};pC.exports=Ld});var Gd=b((jz,bC)=>{"use strict";var CC=w("node:assert"),{Readable:CP}=w("node:stream"),{RequestAbortedError:QC,NotSupportedError:QP,InvalidArgumentError:yP,AbortError:Td}=ie(),yC=j(),{ReadableStreamFrom:wP}=j(),rt=Symbol("kConsume"),ji=Symbol("kReading"),vr=Symbol("kBody"),mC=Symbol("kAbort"),wC=Symbol("kContentType"),EC=Symbol("kContentLength"),bP=()=>{},Pd=class extends CP{constructor({resume:t,abort:r,contentType:n="",contentLength:o,highWaterMark:i=64*1024}){super({autoDestroy:!0,read:t,highWaterMark:i}),this._readableState.dataEmitted=!1,this[mC]=r,this[rt]=null,this[vr]=null,this[wC]=n,this[EC]=o,this[ji]=!1}destroy(t){return!t&&!this._readableState.endEmitted&&(t=new QC),t&&this[mC](),super.destroy(t)}_destroy(t,r){this[ji]?r(t):setImmediate(()=>{r(t)})}on(t,...r){return(t==="data"||t==="readable")&&(this[ji]=!0),super.on(t,...r)}addListener(t,...r){return this.on(t,...r)}off(t,...r){let n=super.off(t,...r);return(t==="data"||t==="readable")&&(this[ji]=this.listenerCount("data")>0||this.listenerCount("readable")>0),n}removeListener(t,...r){return this.off(t,...r)}push(t){return this[rt]&&t!==null?(Od(this[rt],t),this[ji]?super.push(t):!0):super.push(t)}async text(){return Zi(this,"text")}async json(){return Zi(this,"json")}async blob(){return Zi(this,"blob")}async bytes(){return Zi(this,"bytes")}async arrayBuffer(){return Zi(this,"arrayBuffer")}async formData(){throw new QP}get bodyUsed(){return yC.isDisturbed(this)}get body(){return this[vr]||(this[vr]=wP(this),this[rt]&&(this[vr].getReader(),CC(this[vr].locked))),this[vr]}async dump(t){let r=Number.isFinite(t?.limit)?t.limit:131072,n=t?.signal;if(n!=null&&(typeof n!="object"||!("aborted"in n)))throw new yP("signal must be an AbortSignal");return n?.throwIfAborted(),this._readableState.closeEmitted?null:await new Promise((o,i)=>{this[EC]>r&&this.destroy(new Td);let s=()=>{this.destroy(n.reason??new Td)};n?.addEventListener("abort",s),this.on("close",function(){n?.removeEventListener("abort",s),n?.aborted?i(n.reason??new Td):o(null)}).on("error",bP).on("data",function(a){r-=a.length,r<=0&&this.destroy()}).resume()})}};function kP(e){return e[vr]&&e[vr].locked===!0||e[rt]}function SP(e){return yC.isDisturbed(e)||kP(e)}async function Zi(e,t){return CC(!e[rt]),new Promise((r,n)=>{if(SP(e)){let o=e._readableState;o.destroyed&&o.closeEmitted===!1?e.on("error",i=>{n(i)}).on("close",()=>{n(new TypeError("unusable"))}):n(o.errored??new TypeError("unusable"))}else queueMicrotask(()=>{e[rt]={type:t,stream:e,resolve:r,reject:n,length:0,body:[]},e.on("error",function(o){Hd(this[rt],o)}).on("close",function(){this[rt].body!==null&&Hd(this[rt],new QC)}),xP(e[rt])})})}function xP(e){if(e.body===null)return;let{_readableState:t}=e.stream;if(t.bufferIndex){let r=t.bufferIndex,n=t.buffer.length;for(let o=r;o<n;o++)Od(e,t.buffer[o])}else for(let r of t.buffer)Od(e,r);for(t.endEmitted?BC(this[rt]):e.stream.on("end",function(){BC(this[rt])}),e.stream.resume();e.stream.read()!=null;);}function _d(e,t){if(e.length===0||t===0)return"";let r=e.length===1?e[0]:Buffer.concat(e,t),n=r.length,o=n>2&&r[0]===239&&r[1]===187&&r[2]===191?3:0;return r.utf8Slice(o,n)}function IC(e,t){if(e.length===0||t===0)return new Uint8Array(0);if(e.length===1)return new Uint8Array(e[0]);let r=new Uint8Array(Buffer.allocUnsafeSlow(t).buffer),n=0;for(let o=0;o<e.length;++o){let i=e[o];r.set(i,n),n+=i.length}return r}function BC(e){let{type:t,body:r,resolve:n,stream:o,length:i}=e;try{t==="text"?n(_d(r,i)):t==="json"?n(JSON.parse(_d(r,i))):t==="arrayBuffer"?n(IC(r,i).buffer):t==="blob"?n(new Blob(r,{type:o[wC]})):t==="bytes"&&n(IC(r,i)),Hd(e)}catch(s){o.destroy(s)}}function Od(e,t){e.length+=t.length,e.body.push(t)}function Hd(e,t){e.body!==null&&(t?e.reject(t):e.resolve(),e.type=null,e.stream=null,e.resolve=null,e.reject=null,e.length=0,e.body=null)}bC.exports={Readable:Pd,chunksDecode:_d}});var qd=b((Zz,vC)=>{var DP=w("node:assert"),{ResponseStatusCodeError:kC}=ie(),{chunksDecode:SC}=Gd(),vP=128*1024;async function RP({callback:e,body:t,contentType:r,statusCode:n,statusMessage:o,headers:i}){DP(t);let s=[],a=0;try{for await(let u of t)if(s.push(u),a+=u.length,a>vP){s=[],a=0;break}}catch{s=[],a=0}let A=`Response status code ${n}${o?`: ${o}`:""}`;if(n===204||!r||!a){queueMicrotask(()=>e(new kC(A,n,i)));return}let c=Error.stackTraceLimit;Error.stackTraceLimit=0;let l;try{xC(r)?l=JSON.parse(SC(s,a)):DC(r)&&(l=SC(s,a))}catch{}finally{Error.stackTraceLimit=c}queueMicrotask(()=>e(new kC(A,n,i,l)))}var xC=e=>e.length>15&&e[11]==="/"&&e[0]==="a"&&e[1]==="p"&&e[2]==="p"&&e[3]==="l"&&e[4]==="i"&&e[5]==="c"&&e[6]==="a"&&e[7]==="t"&&e[8]==="i"&&e[9]==="o"&&e[10]==="n"&&e[12]==="j"&&e[13]==="s"&&e[14]==="o"&&e[15]==="n",DC=e=>e.length>4&&e[4]==="/"&&e[0]==="t"&&e[1]==="e"&&e[2]==="x"&&e[3]==="t";vC.exports={getResolveErrorBodyCallback:RP,isContentTypeApplicationJson:xC,isContentTypeText:DC}});var FC=b((Xz,Yd)=>{"use strict";var NP=w("node:assert"),{Readable:FP}=Gd(),{InvalidArgumentError:go,RequestAbortedError:RC}=ie(),nt=j(),{getResolveErrorBodyCallback:MP}=qd(),{AsyncResource:UP}=w("node:async_hooks"),dA=class extends UP{constructor(t,r){if(!t||typeof t!="object")throw new go("invalid opts");let{signal:n,method:o,opaque:i,body:s,onInfo:a,responseHeaders:A,throwOnError:c,highWaterMark:l}=t;try{if(typeof r!="function")throw new go("invalid callback");if(l&&(typeof l!="number"||l<0))throw new go("invalid highWaterMark");if(n&&typeof n.on!="function"&&typeof n.addEventListener!="function")throw new go("signal must be an EventEmitter or EventTarget");if(o==="CONNECT")throw new go("invalid method");if(a&&typeof a!="function")throw new go("invalid onInfo callback");super("UNDICI_REQUEST")}catch(u){throw nt.isStream(s)&&nt.destroy(s.on("error",nt.nop),u),u}this.method=o,this.responseHeaders=A||null,this.opaque=i||null,this.callback=r,this.res=null,this.abort=null,this.body=s,this.trailers={},this.context=null,this.onInfo=a||null,this.throwOnError=c,this.highWaterMark=l,this.signal=n,this.reason=null,this.removeAbortListener=null,nt.isStream(s)&&s.on("error",u=>{this.onError(u)}),this.signal&&(this.signal.aborted?this.reason=this.signal.reason??new RC:this.removeAbortListener=nt.addAbortListener(this.signal,()=>{this.reason=this.signal.reason??new RC,this.res?nt.destroy(this.res.on("error",nt.nop),this.reason):this.abort&&this.abort(this.reason),this.removeAbortListener&&(this.res?.off("close",this.removeAbortListener),this.removeAbortListener(),this.removeAbortListener=null)}))}onConnect(t,r){if(this.reason){t(this.reason);return}NP(this.callback),this.abort=t,this.context=r}onHeaders(t,r,n,o){let{callback:i,opaque:s,abort:a,context:A,responseHeaders:c,highWaterMark:l}=this,u=c==="raw"?nt.parseRawHeaders(r):nt.parseHeaders(r);if(t<200){this.onInfo&&this.onInfo({statusCode:t,headers:u});return}let d=c==="raw"?nt.parseHeaders(r):u,h=d["content-type"],g=d["content-length"],p=new FP({resume:n,abort:a,contentType:h,contentLength:this.method!=="HEAD"&&g?Number(g):null,highWaterMark:l});this.removeAbortListener&&p.on("close",this.removeAbortListener),this.callback=null,this.res=p,i!==null&&(this.throwOnError&&t>=400?this.runInAsyncScope(MP,null,{callback:i,body:p,contentType:h,statusCode:t,statusMessage:o,headers:u}):this.runInAsyncScope(i,null,null,{statusCode:t,headers:u,trailers:this.trailers,opaque:s,body:p,context:A}))}onData(t){return this.res.push(t)}onComplete(t){nt.parseHeaders(t,this.trailers),this.res.push(null)}onError(t){let{res:r,callback:n,body:o,opaque:i}=this;n&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(n,null,t,{opaque:i})})),r&&(this.res=null,queueMicrotask(()=>{nt.destroy(r,t)})),o&&(this.body=null,nt.destroy(o,t)),this.removeAbortListener&&(r?.off("close",this.removeAbortListener),this.removeAbortListener(),this.removeAbortListener=null)}};function NC(e,t){if(t===void 0)return new Promise((r,n)=>{NC.call(this,e,(o,i)=>o?n(o):r(i))});try{this.dispatch(e,new dA(e,t))}catch(r){if(typeof t!="function")throw r;let n=e?.opaque;queueMicrotask(()=>t(r,{opaque:n}))}}Yd.exports=NC;Yd.exports.RequestHandler=dA});var Xi=b((eK,LC)=>{var{addAbortListener:LP}=j(),{RequestAbortedError:TP}=ie(),po=Symbol("kListener"),Jt=Symbol("kSignal");function MC(e){e.abort?e.abort(e[Jt]?.reason):e.reason=e[Jt]?.reason??new TP,UC(e)}function PP(e,t){if(e.reason=null,e[Jt]=null,e[po]=null,!!t){if(t.aborted){MC(e);return}e[Jt]=t,e[po]=()=>{MC(e)},LP(e[Jt],e[po])}}function UC(e){e[Jt]&&("removeEventListener"in e[Jt]?e[Jt].removeEventListener("abort",e[po]):e[Jt].removeListener("abort",e[po]),e[Jt]=null,e[po]=null)}LC.exports={addSignal:PP,removeSignal:UC}});var OC=b((tK,_C)=>{"use strict";var _P=w("node:assert"),{finished:OP,PassThrough:HP}=w("node:stream"),{InvalidArgumentError:fo,InvalidReturnValueError:GP}=ie(),vt=j(),{getResolveErrorBodyCallback:qP}=qd(),{AsyncResource:YP}=w("node:async_hooks"),{addSignal:VP,removeSignal:TC}=Xi(),Vd=class extends YP{constructor(t,r,n){if(!t||typeof t!="object")throw new fo("invalid opts");let{signal:o,method:i,opaque:s,body:a,onInfo:A,responseHeaders:c,throwOnError:l}=t;try{if(typeof n!="function")throw new fo("invalid callback");if(typeof r!="function")throw new fo("invalid factory");if(o&&typeof o.on!="function"&&typeof o.addEventListener!="function")throw new fo("signal must be an EventEmitter or EventTarget");if(i==="CONNECT")throw new fo("invalid method");if(A&&typeof A!="function")throw new fo("invalid onInfo callback");super("UNDICI_STREAM")}catch(u){throw vt.isStream(a)&&vt.destroy(a.on("error",vt.nop),u),u}this.responseHeaders=c||null,this.opaque=s||null,this.factory=r,this.callback=n,this.res=null,this.abort=null,this.context=null,this.trailers=null,this.body=a,this.onInfo=A||null,this.throwOnError=l||!1,vt.isStream(a)&&a.on("error",u=>{this.onError(u)}),VP(this,o)}onConnect(t,r){if(this.reason){t(this.reason);return}_P(this.callback),this.abort=t,this.context=r}onHeaders(t,r,n,o){let{factory:i,opaque:s,context:a,callback:A,responseHeaders:c}=this,l=c==="raw"?vt.parseRawHeaders(r):vt.parseHeaders(r);if(t<200){this.onInfo&&this.onInfo({statusCode:t,headers:l});return}this.factory=null;let u;if(this.throwOnError&&t>=400){let g=(c==="raw"?vt.parseHeaders(r):l)["content-type"];u=new HP,this.callback=null,this.runInAsyncScope(qP,null,{callback:A,body:u,contentType:g,statusCode:t,statusMessage:o,headers:l})}else{if(i===null)return;if(u=this.runInAsyncScope(i,null,{statusCode:t,headers:l,opaque:s,context:a}),!u||typeof u.write!="function"||typeof u.end!="function"||typeof u.on!="function")throw new GP("expected Writable");OP(u,{readable:!1},h=>{let{callback:g,res:p,opaque:m,trailers:f,abort:B}=this;this.res=null,(h||!p.readable)&&vt.destroy(p,h),this.callback=null,this.runInAsyncScope(g,null,h||null,{opaque:m,trailers:f}),h&&B()})}return u.on("drain",n),this.res=u,(u.writableNeedDrain!==void 0?u.writableNeedDrain:u._writableState?.needDrain)!==!0}onData(t){let{res:r}=this;return r?r.write(t):!0}onComplete(t){let{res:r}=this;TC(this),r&&(this.trailers=vt.parseHeaders(t),r.end())}onError(t){let{res:r,callback:n,opaque:o,body:i}=this;TC(this),this.factory=null,r?(this.res=null,vt.destroy(r,t)):n&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(n,null,t,{opaque:o})})),i&&(this.body=null,vt.destroy(i,t))}};function PC(e,t,r){if(r===void 0)return new Promise((n,o)=>{PC.call(this,e,t,(i,s)=>i?o(i):n(s))});try{this.dispatch(e,new Vd(e,t,r))}catch(n){if(typeof r!="function")throw n;let o=e?.opaque;queueMicrotask(()=>r(n,{opaque:o}))}}_C.exports=PC});var YC=b((rK,qC)=>{"use strict";var{Readable:GC,Duplex:JP,PassThrough:WP}=w("node:stream"),{InvalidArgumentError:es,InvalidReturnValueError:$P,RequestAbortedError:Jd}=ie(),Et=j(),{AsyncResource:zP}=w("node:async_hooks"),{addSignal:KP,removeSignal:jP}=Xi(),HC=w("node:assert"),mo=Symbol("resume"),Wd=class extends GC{constructor(){super({autoDestroy:!0}),this[mo]=null}_read(){let{[mo]:t}=this;t&&(this[mo]=null,t())}_destroy(t,r){this._read(),r(t)}},$d=class extends GC{constructor(t){super({autoDestroy:!0}),this[mo]=t}_read(){this[mo]()}_destroy(t,r){!t&&!this._readableState.endEmitted&&(t=new Jd),r(t)}},zd=class extends zP{constructor(t,r){if(!t||typeof t!="object")throw new es("invalid opts");if(typeof r!="function")throw new es("invalid handler");let{signal:n,method:o,opaque:i,onInfo:s,responseHeaders:a}=t;if(n&&typeof n.on!="function"&&typeof n.addEventListener!="function")throw new es("signal must be an EventEmitter or EventTarget");if(o==="CONNECT")throw new es("invalid method");if(s&&typeof s!="function")throw new es("invalid onInfo callback");super("UNDICI_PIPELINE"),this.opaque=i||null,this.responseHeaders=a||null,this.handler=r,this.abort=null,this.context=null,this.onInfo=s||null,this.req=new Wd().on("error",Et.nop),this.ret=new JP({readableObjectMode:t.objectMode,autoDestroy:!0,read:()=>{let{body:A}=this;A?.resume&&A.resume()},write:(A,c,l)=>{let{req:u}=this;u.push(A,c)||u._readableState.destroyed?l():u[mo]=l},destroy:(A,c)=>{let{body:l,req:u,res:d,ret:h,abort:g}=this;!A&&!h._readableState.endEmitted&&(A=new Jd),g&&A&&g(),Et.destroy(l,A),Et.destroy(u,A),Et.destroy(d,A),jP(this),c(A)}}).on("prefinish",()=>{let{req:A}=this;A.push(null)}),this.res=null,KP(this,n)}onConnect(t,r){let{ret:n,res:o}=this;if(this.reason){t(this.reason);return}HC(!o,"pipeline cannot be retried"),HC(!n.destroyed),this.abort=t,this.context=r}onHeaders(t,r,n){let{opaque:o,handler:i,context:s}=this;if(t<200){if(this.onInfo){let A=this.responseHeaders==="raw"?Et.parseRawHeaders(r):Et.parseHeaders(r);this.onInfo({statusCode:t,headers:A})}return}this.res=new $d(n);let a;try{this.handler=null;let A=this.responseHeaders==="raw"?Et.parseRawHeaders(r):Et.parseHeaders(r);a=this.runInAsyncScope(i,null,{statusCode:t,headers:A,opaque:o,body:this.res,context:s})}catch(A){throw this.res.on("error",Et.nop),A}if(!a||typeof a.on!="function")throw new $P("expected Readable");a.on("data",A=>{let{ret:c,body:l}=this;!c.push(A)&&l.pause&&l.pause()}).on("error",A=>{let{ret:c}=this;Et.destroy(c,A)}).on("end",()=>{let{ret:A}=this;A.push(null)}).on("close",()=>{let{ret:A}=this;A._readableState.ended||Et.destroy(A,new Jd)}),this.body=a}onData(t){let{res:r}=this;return r.push(t)}onComplete(t){let{res:r}=this;r.push(null)}onError(t){let{ret:r}=this;this.handler=null,Et.destroy(r,t)}};function ZP(e,t){try{let r=new zd(e,t);return this.dispatch({...e,body:r.req},r),r.ret}catch(r){return new WP().destroy(r)}}qC.exports=ZP});var KC=b((nK,zC)=>{"use strict";var{InvalidArgumentError:Kd,SocketError:XP}=ie(),{AsyncResource:e_}=w("node:async_hooks"),VC=j(),{addSignal:t_,removeSignal:JC}=Xi(),WC=w("node:assert"),jd=class extends e_{constructor(t,r){if(!t||typeof t!="object")throw new Kd("invalid opts");if(typeof r!="function")throw new Kd("invalid callback");let{signal:n,opaque:o,responseHeaders:i}=t;if(n&&typeof n.on!="function"&&typeof n.addEventListener!="function")throw new Kd("signal must be an EventEmitter or EventTarget");super("UNDICI_UPGRADE"),this.responseHeaders=i||null,this.opaque=o||null,this.callback=r,this.abort=null,this.context=null,t_(this,n)}onConnect(t,r){if(this.reason){t(this.reason);return}WC(this.callback),this.abort=t,this.context=null}onHeaders(){throw new XP("bad upgrade",null)}onUpgrade(t,r,n){WC(t===101);let{callback:o,opaque:i,context:s}=this;JC(this),this.callback=null;let a=this.responseHeaders==="raw"?VC.parseRawHeaders(r):VC.parseHeaders(r);this.runInAsyncScope(o,null,null,{headers:a,socket:n,opaque:i,context:s})}onError(t){let{callback:r,opaque:n}=this;JC(this),r&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(r,null,t,{opaque:n})}))}};function $C(e,t){if(t===void 0)return new Promise((r,n)=>{$C.call(this,e,(o,i)=>o?n(o):r(i))});try{let r=new jd(e,t);this.dispatch({...e,method:e.method||"GET",upgrade:e.protocol||"Websocket"},r)}catch(r){if(typeof t!="function")throw r;let n=e?.opaque;queueMicrotask(()=>t(r,{opaque:n}))}}zC.exports=$C});var tQ=b((oK,eQ)=>{"use strict";var r_=w("node:assert"),{AsyncResource:n_}=w("node:async_hooks"),{InvalidArgumentError:Zd,SocketError:o_}=ie(),jC=j(),{addSignal:i_,removeSignal:ZC}=Xi(),Xd=class extends n_{constructor(t,r){if(!t||typeof t!="object")throw new Zd("invalid opts");if(typeof r!="function")throw new Zd("invalid callback");let{signal:n,opaque:o,responseHeaders:i}=t;if(n&&typeof n.on!="function"&&typeof n.addEventListener!="function")throw new Zd("signal must be an EventEmitter or EventTarget");super("UNDICI_CONNECT"),this.opaque=o||null,this.responseHeaders=i||null,this.callback=r,this.abort=null,i_(this,n)}onConnect(t,r){if(this.reason){t(this.reason);return}r_(this.callback),this.abort=t,this.context=r}onHeaders(){throw new o_("bad connect",null)}onUpgrade(t,r,n){let{callback:o,opaque:i,context:s}=this;ZC(this),this.callback=null;let a=r;a!=null&&(a=this.responseHeaders==="raw"?jC.parseRawHeaders(r):jC.parseHeaders(r)),this.runInAsyncScope(o,null,null,{statusCode:t,headers:a,socket:n,opaque:i,context:s})}onError(t){let{callback:r,opaque:n}=this;ZC(this),r&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(r,null,t,{opaque:n})}))}};function XC(e,t){if(t===void 0)return new Promise((r,n)=>{XC.call(this,e,(o,i)=>o?n(o):r(i))});try{let r=new Xd(e,t);this.dispatch({...e,method:"CONNECT"},r)}catch(r){if(typeof t!="function")throw r;let n=e?.opaque;queueMicrotask(()=>t(r,{opaque:n}))}}eQ.exports=XC});var rQ=b((iK,Eo)=>{"use strict";Eo.exports.request=FC();Eo.exports.stream=OC();Eo.exports.pipeline=YC();Eo.exports.upgrade=KC();Eo.exports.connect=tQ()});var th=b((sK,oQ)=>{"use strict";var{UndiciError:s_}=ie(),nQ=Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED"),eh=class e extends s_{constructor(t){super(t),Error.captureStackTrace(this,e),this.name="MockNotMatchedError",this.message=t||"The request does not match any registered mock dispatches",this.code="UND_MOCK_ERR_MOCK_NOT_MATCHED"}static[Symbol.hasInstance](t){return t&&t[nQ]===!0}[nQ]=!0};oQ.exports={MockNotMatchedError:eh}});var Io=b((aK,iQ)=>{"use strict";iQ.exports={kAgent:Symbol("agent"),kOptions:Symbol("options"),kFactory:Symbol("factory"),kDispatches:Symbol("dispatches"),kDispatchKey:Symbol("dispatch key"),kDefaultHeaders:Symbol("default headers"),kDefaultTrailers:Symbol("default trailers"),kContentLength:Symbol("content length"),kMockAgent:Symbol("mock agent"),kMockAgentSet:Symbol("mock agent set"),kMockAgentGet:Symbol("mock agent get"),kMockDispatch:Symbol("mock dispatch"),kClose:Symbol("close"),kOriginalClose:Symbol("original agent close"),kOrigin:Symbol("origin"),kIsMockActive:Symbol("is mock active"),kNetConnect:Symbol("net connect"),kGetNetConnect:Symbol("get net connect"),kConnected:Symbol("connected")}});var ts=b((AK,fQ)=>{"use strict";var{MockNotMatchedError:hn}=th(),{kDispatches:hA,kMockAgent:a_,kOriginalDispatch:A_,kOrigin:c_,kGetNetConnect:l_}=Io(),{buildURL:u_}=j(),{STATUS_CODES:d_}=w("node:http"),{types:{isPromise:h_}}=w("node:util");function cr(e,t){return typeof e=="string"?e===t:e instanceof RegExp?e.test(t):typeof e=="function"?e(t)===!0:!1}function aQ(e){return Object.fromEntries(Object.entries(e).map(([t,r])=>[t.toLocaleLowerCase(),r]))}function AQ(e,t){if(Array.isArray(e)){for(let r=0;r<e.length;r+=2)if(e[r].toLocaleLowerCase()===t.toLocaleLowerCase())return e[r+1];return}else return typeof e.get=="function"?e.get(t):aQ(e)[t.toLocaleLowerCase()]}function oh(e){let t=e.slice(),r=[];for(let n=0;n<t.length;n+=2)r.push([t[n],t[n+1]]);return Object.fromEntries(r)}function cQ(e,t){if(typeof e.headers=="function")return Array.isArray(t)&&(t=oh(t)),e.headers(t?aQ(t):{});if(typeof e.headers>"u")return!0;if(typeof t!="object"||typeof e.headers!="object")return!1;for(let[r,n]of Object.entries(e.headers)){let o=AQ(t,r);if(!cr(n,o))return!1}return!0}function sQ(e){if(typeof e!="string")return e;let t=e.split("?");if(t.length!==2)return e;let r=new URLSearchParams(t.pop());return r.sort(),[...t,r.toString()].join("?")}function g_(e,{path:t,method:r,body:n,headers:o}){let i=cr(e.path,t),s=cr(e.method,r),a=typeof e.body<"u"?cr(e.body,n):!0,A=cQ(e,o);return i&&s&&a&&A}function lQ(e){return Buffer.isBuffer(e)||e instanceof Uint8Array||e instanceof ArrayBuffer?e:typeof e=="object"?JSON.stringify(e):e.toString()}function uQ(e,t){let r=t.query?u_(t.path,t.query):t.path,n=typeof r=="string"?sQ(r):r,o=e.filter(({consumed:i})=>!i).filter(({path:i})=>cr(sQ(i),n));if(o.length===0)throw new hn(`Mock dispatch not matched for path '${n}'`);if(o=o.filter(({method:i})=>cr(i,t.method)),o.length===0)throw new hn(`Mock dispatch not matched for method '${t.method}' on path '${n}'`);if(o=o.filter(({body:i})=>typeof i<"u"?cr(i,t.body):!0),o.length===0)throw new hn(`Mock dispatch not matched for body '${t.body}' on path '${n}'`);if(o=o.filter(i=>cQ(i,t.headers)),o.length===0){let i=typeof t.headers=="object"?JSON.stringify(t.headers):t.headers;throw new hn(`Mock dispatch not matched for headers '${i}' on path '${n}'`)}return o[0]}function p_(e,t,r){let n={timesInvoked:0,times:1,persist:!1,consumed:!1},o=typeof r=="function"?{callback:r}:{...r},i={...n,...t,pending:!0,data:{error:null,...o}};return e.push(i),i}function rh(e,t){let r=e.findIndex(n=>n.consumed?g_(n,t):!1);r!==-1&&e.splice(r,1)}function dQ(e){let{path:t,method:r,body:n,headers:o,query:i}=e;return{path:t,method:r,body:n,headers:o,query:i}}function nh(e){let t=Object.keys(e),r=[];for(let n=0;n<t.length;++n){let o=t[n],i=e[o],s=Buffer.from(`${o}`);if(Array.isArray(i))for(let a=0;a<i.length;++a)r.push(s,Buffer.from(`${i[a]}`));else r.push(s,Buffer.from(`${i}`))}return r}function hQ(e){return d_[e]||"unknown"}async function f_(e){let t=[];for await(let r of e)t.push(r);return Buffer.concat(t).toString("utf8")}function gQ(e,t){let r=dQ(e),n=uQ(this[hA],r);n.timesInvoked++,n.data.callback&&(n.data={...n.data,...n.data.callback(e)});let{data:{statusCode:o,data:i,headers:s,trailers:a,error:A},delay:c,persist:l}=n,{timesInvoked:u,times:d}=n;if(n.consumed=!l&&u>=d,n.pending=u<d,A!==null)return rh(this[hA],r),t.onError(A),!0;typeof c=="number"&&c>0?setTimeout(()=>{h(this[hA])},c):h(this[hA]);function h(p,m=i){let f=Array.isArray(e.headers)?oh(e.headers):e.headers,B=typeof m=="function"?m({...e,headers:f}):m;if(h_(B)){B.then(R=>h(p,R));return}let E=lQ(B),I=nh(s),Q=nh(a);t.onConnect?.(R=>t.onError(R),null),t.onHeaders?.(o,I,g,hQ(o)),t.onData?.(Buffer.from(E)),t.onComplete?.(Q),rh(p,r)}function g(){}return!0}function m_(){let e=this[a_],t=this[c_],r=this[A_];return function(o,i){if(e.isMockActive)try{gQ.call(this,o,i)}catch(s){if(s instanceof hn){let a=e[l_]();if(a===!1)throw new hn(`${s.message}: subsequent request to origin ${t} was not allowed (net.connect disabled)`);if(pQ(a,t))r.call(this,o,i);else throw new hn(`${s.message}: subsequent request to origin ${t} was not allowed (net.connect is not enabled for this origin)`)}else throw s}else r.call(this,o,i)}}function pQ(e,t){let r=new URL(t);return e===!0?!0:!!(Array.isArray(e)&&e.some(n=>cr(n,r.host)))}function E_(e){if(e){let{agent:t,...r}=e;return r}}fQ.exports={getResponseData:lQ,getMockDispatch:uQ,addMockDispatch:p_,deleteMockDispatch:rh,buildKey:dQ,generateKeyValues:nh,matchValue:cr,getResponse:f_,getStatusText:hQ,mockDispatch:gQ,buildMockDispatch:m_,checkNetConnect:pQ,buildMockOptions:E_,getHeaderByName:AQ,buildHeadersFromArray:oh}});var uh=b((cK,lh)=>{"use strict";var{getResponseData:I_,buildKey:B_,addMockDispatch:ih}=ts(),{kDispatches:gA,kDispatchKey:pA,kDefaultHeaders:sh,kDefaultTrailers:ah,kContentLength:Ah,kMockDispatch:fA}=Io(),{InvalidArgumentError:Wt}=ie(),{buildURL:C_}=j(),Bo=class{constructor(t){this[fA]=t}delay(t){if(typeof t!="number"||!Number.isInteger(t)||t<=0)throw new Wt("waitInMs must be a valid integer > 0");return this[fA].delay=t,this}persist(){return this[fA].persist=!0,this}times(t){if(typeof t!="number"||!Number.isInteger(t)||t<=0)throw new Wt("repeatTimes must be a valid integer > 0");return this[fA].times=t,this}},ch=class{constructor(t,r){if(typeof t!="object")throw new Wt("opts must be an object");if(typeof t.path>"u")throw new Wt("opts.path must be defined");if(typeof t.method>"u"&&(t.method="GET"),typeof t.path=="string")if(t.query)t.path=C_(t.path,t.query);else{let n=new URL(t.path,"data://");t.path=n.pathname+n.search}typeof t.method=="string"&&(t.method=t.method.toUpperCase()),this[pA]=B_(t),this[gA]=r,this[sh]={},this[ah]={},this[Ah]=!1}createMockScopeDispatchData({statusCode:t,data:r,responseOptions:n}){let o=I_(r),i=this[Ah]?{"content-length":o.length}:{},s={...this[sh],...i,...n.headers},a={...this[ah],...n.trailers};return{statusCode:t,data:r,headers:s,trailers:a}}validateReplyParameters(t){if(typeof t.statusCode>"u")throw new Wt("statusCode must be defined");if(typeof t.responseOptions!="object"||t.responseOptions===null)throw new Wt("responseOptions must be an object")}reply(t){if(typeof t=="function"){let i=a=>{let A=t(a);if(typeof A!="object"||A===null)throw new Wt("reply options callback must return an object");let c={data:"",responseOptions:{},...A};return this.validateReplyParameters(c),{...this.createMockScopeDispatchData(c)}},s=ih(this[gA],this[pA],i);return new Bo(s)}let r={statusCode:t,data:arguments[1]===void 0?"":arguments[1],responseOptions:arguments[2]===void 0?{}:arguments[2]};this.validateReplyParameters(r);let n=this.createMockScopeDispatchData(r),o=ih(this[gA],this[pA],n);return new Bo(o)}replyWithError(t){if(typeof t>"u")throw new Wt("error must be defined");let r=ih(this[gA],this[pA],{error:t});return new Bo(r)}defaultReplyHeaders(t){if(typeof t>"u")throw new Wt("headers must be defined");return this[sh]=t,this}defaultReplyTrailers(t){if(typeof t>"u")throw new Wt("trailers must be defined");return this[ah]=t,this}replyContentLength(){return this[Ah]=!0,this}};lh.exports.MockInterceptor=ch;lh.exports.MockScope=Bo});var gh=b((lK,yQ)=>{"use strict";var{promisify:Q_}=w("node:util"),y_=ao(),{buildMockDispatch:w_}=ts(),{kDispatches:mQ,kMockAgent:EQ,kClose:IQ,kOriginalClose:BQ,kOrigin:CQ,kOriginalDispatch:b_,kConnected:dh}=Io(),{MockInterceptor:k_}=uh(),QQ=Ie(),{InvalidArgumentError:S_}=ie(),hh=class extends y_{constructor(t,r){if(super(t,r),!r||!r.agent||typeof r.agent.dispatch!="function")throw new S_("Argument opts.agent must implement Agent");this[EQ]=r.agent,this[CQ]=t,this[mQ]=[],this[dh]=1,this[b_]=this.dispatch,this[BQ]=this.close.bind(this),this.dispatch=w_.call(this),this.close=this[IQ]}get[QQ.kConnected](){return this[dh]}intercept(t){return new k_(t,this[mQ])}async[IQ](){await Q_(this[BQ])(),this[dh]=0,this[EQ][QQ.kClients].delete(this[CQ])}};yQ.exports=hh});var mh=b((uK,vQ)=>{"use strict";var{promisify:x_}=w("node:util"),D_=Ao(),{buildMockDispatch:v_}=ts(),{kDispatches:wQ,kMockAgent:bQ,kClose:kQ,kOriginalClose:SQ,kOrigin:xQ,kOriginalDispatch:R_,kConnected:ph}=Io(),{MockInterceptor:N_}=uh(),DQ=Ie(),{InvalidArgumentError:F_}=ie(),fh=class extends D_{constructor(t,r){if(super(t,r),!r||!r.agent||typeof r.agent.dispatch!="function")throw new F_("Argument opts.agent must implement Agent");this[bQ]=r.agent,this[xQ]=t,this[wQ]=[],this[ph]=1,this[R_]=this.dispatch,this[SQ]=this.close.bind(this),this.dispatch=v_.call(this),this.close=this[kQ]}get[DQ.kConnected](){return this[ph]}intercept(t){return new N_(t,this[wQ])}async[kQ](){await x_(this[SQ])(),this[ph]=0,this[bQ][DQ.kClients].delete(this[xQ])}};vQ.exports=fh});var NQ=b((hK,RQ)=>{"use strict";var M_={pronoun:"it",is:"is",was:"was",this:"this"},U_={pronoun:"they",is:"are",was:"were",this:"these"};RQ.exports=class{constructor(t,r){this.singular=t,this.plural=r}pluralize(t){let r=t===1,n=r?M_:U_,o=r?this.singular:this.plural;return{...n,count:t,noun:o}}}});var MQ=b((pK,FQ)=>{"use strict";var{Transform:L_}=w("node:stream"),{Console:T_}=w("node:console"),P_=process.versions.icu?"\u2705":"Y ",__=process.versions.icu?"\u274C":"N ";FQ.exports=class{constructor({disableColors:t}={}){this.transform=new L_({transform(r,n,o){o(null,r)}}),this.logger=new T_({stdout:this.transform,inspectOptions:{colors:!t&&!process.env.CI}})}format(t){let r=t.map(({method:n,path:o,data:{statusCode:i},persist:s,times:a,timesInvoked:A,origin:c})=>({Method:n,Origin:c,Path:o,"Status code":i,Persistent:s?P_:__,Invocations:A,Remaining:s?1/0:a-A}));return this.logger.table(r),this.transform.read().toString()}}});var PQ=b((fK,TQ)=>{"use strict";var{kClients:gn}=Ie(),O_=co(),{kAgent:Eh,kMockAgentSet:mA,kMockAgentGet:UQ,kDispatches:Ih,kIsMockActive:EA,kNetConnect:pn,kGetNetConnect:H_,kOptions:IA,kFactory:BA}=Io(),G_=gh(),q_=mh(),{matchValue:Y_,buildMockOptions:V_}=ts(),{InvalidArgumentError:LQ,UndiciError:J_}=ie(),W_=bi(),$_=NQ(),z_=MQ(),Bh=class extends W_{constructor(t){if(super(t),this[pn]=!0,this[EA]=!0,t?.agent&&typeof t.agent.dispatch!="function")throw new LQ("Argument opts.agent must implement Agent");let r=t?.agent?t.agent:new O_(t);this[Eh]=r,this[gn]=r[gn],this[IA]=V_(t)}get(t){let r=this[UQ](t);return r||(r=this[BA](t),this[mA](t,r)),r}dispatch(t,r){return this.get(t.origin),this[Eh].dispatch(t,r)}async close(){await this[Eh].close(),this[gn].clear()}deactivate(){this[EA]=!1}activate(){this[EA]=!0}enableNetConnect(t){if(typeof t=="string"||typeof t=="function"||t instanceof RegExp)Array.isArray(this[pn])?this[pn].push(t):this[pn]=[t];else if(typeof t>"u")this[pn]=!0;else throw new LQ("Unsupported matcher. Must be one of String|Function|RegExp.")}disableNetConnect(){this[pn]=!1}get isMockActive(){return this[EA]}[mA](t,r){this[gn].set(t,r)}[BA](t){let r=Object.assign({agent:this},this[IA]);return this[IA]&&this[IA].connections===1?new G_(t,r):new q_(t,r)}[UQ](t){let r=this[gn].get(t);if(r)return r;if(typeof t!="string"){let n=this[BA]("http://localhost:9999");return this[mA](t,n),n}for(let[n,o]of Array.from(this[gn]))if(o&&typeof n!="string"&&Y_(n,t)){let i=this[BA](t);return this[mA](t,i),i[Ih]=o[Ih],i}}[H_](){return this[pn]}pendingInterceptors(){let t=this[gn];return Array.from(t.entries()).flatMap(([r,n])=>n[Ih].map(o=>({...o,origin:r}))).filter(({pending:r})=>r)}assertNoPendingInterceptors({pendingInterceptorsFormatter:t=new z_}={}){let r=this.pendingInterceptors();if(r.length===0)return;let n=new $_("interceptor","interceptors").pluralize(r.length);throw new J_(`
|
|
41
|
+
${n.count} ${n.noun} ${n.is} pending:
|
|
42
|
+
|
|
43
|
+
${t.format(r)}
|
|
44
|
+
`.trim())}};TQ.exports=Bh});var CA=b((mK,GQ)=>{"use strict";var _Q=Symbol.for("undici.globalDispatcher.1"),{InvalidArgumentError:K_}=ie(),j_=co();HQ()===void 0&&OQ(new j_);function OQ(e){if(!e||typeof e.dispatch!="function")throw new K_("Argument agent must implement Agent");Object.defineProperty(globalThis,_Q,{value:e,writable:!0,enumerable:!1,configurable:!1})}function HQ(){return globalThis[_Q]}GQ.exports={setGlobalDispatcher:OQ,getGlobalDispatcher:HQ}});var QA=b((IK,qQ)=>{"use strict";qQ.exports=class{#e;constructor(t){if(typeof t!="object"||t===null)throw new TypeError("handler must be an object");this.#e=t}onConnect(...t){return this.#e.onConnect?.(...t)}onError(...t){return this.#e.onError?.(...t)}onUpgrade(...t){return this.#e.onUpgrade?.(...t)}onResponseStarted(...t){return this.#e.onResponseStarted?.(...t)}onHeaders(...t){return this.#e.onHeaders?.(...t)}onData(...t){return this.#e.onData?.(...t)}onComplete(...t){return this.#e.onComplete?.(...t)}onBodySent(...t){return this.#e.onBodySent?.(...t)}}});var VQ=b((BK,YQ)=>{"use strict";var Z_=eA();YQ.exports=e=>{let t=e?.maxRedirections;return r=>function(o,i){let{maxRedirections:s=t,...a}=o;if(!s)return r(o,i);let A=new Z_(r,s,o,i);return r(a,A)}}});var WQ=b((CK,JQ)=>{"use strict";var X_=uA();JQ.exports=e=>t=>function(n,o){return t(n,new X_({...n,retryOptions:{...e,...n.retryOptions}},{handler:o,dispatch:t}))}});var zQ=b((QK,$Q)=>{"use strict";var eO=j(),{InvalidArgumentError:tO,RequestAbortedError:rO}=ie(),nO=QA(),Ch=class extends nO{#e=1024*1024;#t=null;#r=!1;#i=!1;#o=0;#n=null;#s=null;constructor({maxSize:t},r){if(super(r),t!=null&&(!Number.isFinite(t)||t<1))throw new tO("maxSize must be a number greater than 0");this.#e=t??this.#e,this.#s=r}onConnect(t){this.#t=t,this.#s.onConnect(this.#a.bind(this))}#a(t){this.#i=!0,this.#n=t}onHeaders(t,r,n,o){let s=eO.parseHeaders(r)["content-length"];if(s!=null&&s>this.#e)throw new rO(`Response size (${s}) larger than maxSize (${this.#e})`);return this.#i?!0:this.#s.onHeaders(t,r,n,o)}onError(t){this.#r||(t=this.#n??t,this.#s.onError(t))}onData(t){return this.#o=this.#o+t.length,this.#o>=this.#e&&(this.#r=!0,this.#i?this.#s.onError(this.#n):this.#s.onComplete([])),!0}onComplete(t){if(!this.#r){if(this.#i){this.#s.onError(this.reason);return}this.#s.onComplete(t)}}};function oO({maxSize:e}={maxSize:1024*1024}){return t=>function(n,o){let{dumpMaxSize:i=e}=n,s=new Ch({maxSize:i},o);return t(n,s)}}$Q.exports=oO});var ZQ=b((yK,jQ)=>{"use strict";var{isIP:iO}=w("node:net"),{lookup:sO}=w("node:dns"),aO=QA(),{InvalidArgumentError:Co,InformationalError:AO}=ie(),KQ=Math.pow(2,31)-1,Qh=class{#e=0;#t=0;#r=new Map;dualStack=!0;affinity=null;lookup=null;pick=null;constructor(t){this.#e=t.maxTTL,this.#t=t.maxItems,this.dualStack=t.dualStack,this.affinity=t.affinity,this.lookup=t.lookup??this.#i,this.pick=t.pick??this.#o}get full(){return this.#r.size===this.#t}runLookup(t,r,n){let o=this.#r.get(t.hostname);if(o==null&&this.full){n(null,t.origin);return}let i={affinity:this.affinity,dualStack:this.dualStack,lookup:this.lookup,pick:this.pick,...r.dns,maxTTL:this.#e,maxItems:this.#t};if(o==null)this.lookup(t,i,(s,a)=>{if(s||a==null||a.length===0){n(s??new AO("No DNS entries found"));return}this.setRecords(t,a);let A=this.#r.get(t.hostname),c=this.pick(t,A,i.affinity),l;typeof c.port=="number"?l=`:${c.port}`:t.port!==""?l=`:${t.port}`:l="",n(null,`${t.protocol}//${c.family===6?`[${c.address}]`:c.address}${l}`)});else{let s=this.pick(t,o,i.affinity);if(s==null){this.#r.delete(t.hostname),this.runLookup(t,r,n);return}let a;typeof s.port=="number"?a=`:${s.port}`:t.port!==""?a=`:${t.port}`:a="",n(null,`${t.protocol}//${s.family===6?`[${s.address}]`:s.address}${a}`)}}#i(t,r,n){sO(t.hostname,{all:!0,family:this.dualStack===!1?this.affinity:0,order:"ipv4first"},(o,i)=>{if(o)return n(o);let s=new Map;for(let a of i)s.set(`${a.address}:${a.family}`,a);n(null,s.values())})}#o(t,r,n){let o=null,{records:i,offset:s}=r,a;if(this.dualStack?(n==null&&(s==null||s===KQ?(r.offset=0,n=4):(r.offset++,n=(r.offset&1)===1?6:4)),i[n]!=null&&i[n].ips.length>0?a=i[n]:a=i[n===4?6:4]):a=i[n],a==null||a.ips.length===0)return o;a.offset==null||a.offset===KQ?a.offset=0:a.offset++;let A=a.offset%a.ips.length;return o=a.ips[A]??null,o==null?o:Date.now()-o.timestamp>o.ttl?(a.ips.splice(A,1),this.pick(t,r,n)):o}setRecords(t,r){let n=Date.now(),o={records:{4:null,6:null}};for(let i of r){i.timestamp=n,typeof i.ttl=="number"?i.ttl=Math.min(i.ttl,this.#e):i.ttl=this.#e;let s=o.records[i.family]??{ips:[]};s.ips.push(i),o.records[i.family]=s}this.#r.set(t.hostname,o)}getHandler(t,r){return new yh(this,t,r)}},yh=class extends aO{#e=null;#t=null;#r=null;#i=null;#o=null;constructor(t,{origin:r,handler:n,dispatch:o},i){super(n),this.#o=r,this.#i=n,this.#t={...i},this.#e=t,this.#r=o}onError(t){switch(t.code){case"ETIMEDOUT":case"ECONNREFUSED":{if(this.#e.dualStack){this.#e.runLookup(this.#o,this.#t,(r,n)=>{if(r)return this.#i.onError(r);let o={...this.#t,origin:n};this.#r(o,this)});return}this.#i.onError(t);return}case"ENOTFOUND":this.#e.deleteRecord(this.#o);default:this.#i.onError(t);break}}};jQ.exports=e=>{if(e?.maxTTL!=null&&(typeof e?.maxTTL!="number"||e?.maxTTL<0))throw new Co("Invalid maxTTL. Must be a positive number");if(e?.maxItems!=null&&(typeof e?.maxItems!="number"||e?.maxItems<1))throw new Co("Invalid maxItems. Must be a positive number and greater than zero");if(e?.affinity!=null&&e?.affinity!==4&&e?.affinity!==6)throw new Co("Invalid affinity. Must be either 4 or 6");if(e?.dualStack!=null&&typeof e?.dualStack!="boolean")throw new Co("Invalid dualStack. Must be a boolean");if(e?.lookup!=null&&typeof e?.lookup!="function")throw new Co("Invalid lookup. Must be a function");if(e?.pick!=null&&typeof e?.pick!="function")throw new Co("Invalid pick. Must be a function");let t=e?.dualStack??!0,r;t?r=e?.affinity??null:r=e?.affinity??4;let n={maxTTL:e?.maxTTL??1e4,lookup:e?.lookup??null,pick:e?.pick??null,dualStack:t,affinity:r,maxItems:e?.maxItems??1/0},o=new Qh(n);return i=>function(a,A){let c=a.origin.constructor===URL?a.origin:new URL(a.origin);return iO(c.hostname)!==0?i(a,A):(o.runLookup(c,a,(l,u)=>{if(l)return A.onError(l);let d=null;d={...a,servername:c.hostname,origin:u,headers:{host:c.hostname,...a.headers}},i(d,o.getHandler({origin:c,dispatch:i,handler:A},a))}),!0)}}});var fn=b((wK,i0)=>{"use strict";var{kConstruct:cO}=Ie(),{kEnumerableProperty:Qo}=j(),{iteratorMixin:lO,isValidHeaderName:rs,isValidHeaderValue:e0}=et(),{webidl:oe}=Le(),wh=w("node:assert"),yA=w("node:util"),Re=Symbol("headers map"),ot=Symbol("headers map sorted");function XQ(e){return e===10||e===13||e===9||e===32}function t0(e){let t=0,r=e.length;for(;r>t&&XQ(e.charCodeAt(r-1));)--r;for(;r>t&&XQ(e.charCodeAt(t));)++t;return t===0&&r===e.length?e:e.substring(t,r)}function r0(e,t){if(Array.isArray(t))for(let r=0;r<t.length;++r){let n=t[r];if(n.length!==2)throw oe.errors.exception({header:"Headers constructor",message:`expected name/value pair to be length 2, found ${n.length}.`});bh(e,n[0],n[1])}else if(typeof t=="object"&&t!==null){let r=Object.keys(t);for(let n=0;n<r.length;++n)bh(e,r[n],t[r[n]])}else throw oe.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence<sequence<ByteString>>","record<ByteString, ByteString>"]})}function bh(e,t,r){if(r=t0(r),rs(t)){if(!e0(r))throw oe.errors.invalidArgument({prefix:"Headers.append",value:r,type:"header value"})}else throw oe.errors.invalidArgument({prefix:"Headers.append",value:t,type:"header name"});if(o0(e)==="immutable")throw new TypeError("immutable");return kh(e).append(t,r,!1)}function n0(e,t){return e[0]<t[0]?-1:1}var wA=class e{cookies=null;constructor(t){t instanceof e?(this[Re]=new Map(t[Re]),this[ot]=t[ot],this.cookies=t.cookies===null?null:[...t.cookies]):(this[Re]=new Map(t),this[ot]=null)}contains(t,r){return this[Re].has(r?t:t.toLowerCase())}clear(){this[Re].clear(),this[ot]=null,this.cookies=null}append(t,r,n){this[ot]=null;let o=n?t:t.toLowerCase(),i=this[Re].get(o);if(i){let s=o==="cookie"?"; ":", ";this[Re].set(o,{name:i.name,value:`${i.value}${s}${r}`})}else this[Re].set(o,{name:t,value:r});o==="set-cookie"&&(this.cookies??=[]).push(r)}set(t,r,n){this[ot]=null;let o=n?t:t.toLowerCase();o==="set-cookie"&&(this.cookies=[r]),this[Re].set(o,{name:t,value:r})}delete(t,r){this[ot]=null,r||(t=t.toLowerCase()),t==="set-cookie"&&(this.cookies=null),this[Re].delete(t)}get(t,r){return this[Re].get(r?t:t.toLowerCase())?.value??null}*[Symbol.iterator](){for(let{0:t,1:{value:r}}of this[Re])yield[t,r]}get entries(){let t={};if(this[Re].size!==0)for(let{name:r,value:n}of this[Re].values())t[r]=n;return t}rawValues(){return this[Re].values()}get entriesList(){let t=[];if(this[Re].size!==0)for(let{0:r,1:{name:n,value:o}}of this[Re])if(r==="set-cookie")for(let i of this.cookies)t.push([n,i]);else t.push([n,o]);return t}toSortedArray(){let t=this[Re].size,r=new Array(t);if(t<=32){if(t===0)return r;let n=this[Re][Symbol.iterator](),o=n.next().value;r[0]=[o[0],o[1].value],wh(o[1].value!==null);for(let i=1,s=0,a=0,A=0,c=0,l,u;i<t;++i){for(u=n.next().value,l=r[i]=[u[0],u[1].value],wh(l[1]!==null),A=0,a=i;A<a;)c=A+(a-A>>1),r[c][0]<=l[0]?A=c+1:a=c;if(i!==c){for(s=i;s>A;)r[s]=r[--s];r[A]=l}}if(!n.next().done)throw new TypeError("Unreachable");return r}else{let n=0;for(let{0:o,1:{value:i}}of this[Re])r[n++]=[o,i],wh(i!==null);return r.sort(n0)}}},Rt=class e{#e;#t;constructor(t=void 0){oe.util.markAsUncloneable(this),t!==cO&&(this.#t=new wA,this.#e="none",t!==void 0&&(t=oe.converters.HeadersInit(t,"Headers contructor","init"),r0(this,t)))}append(t,r){oe.brandCheck(this,e),oe.argumentLengthCheck(arguments,2,"Headers.append");let n="Headers.append";return t=oe.converters.ByteString(t,n,"name"),r=oe.converters.ByteString(r,n,"value"),bh(this,t,r)}delete(t){if(oe.brandCheck(this,e),oe.argumentLengthCheck(arguments,1,"Headers.delete"),t=oe.converters.ByteString(t,"Headers.delete","name"),!rs(t))throw oe.errors.invalidArgument({prefix:"Headers.delete",value:t,type:"header name"});if(this.#e==="immutable")throw new TypeError("immutable");this.#t.contains(t,!1)&&this.#t.delete(t,!1)}get(t){oe.brandCheck(this,e),oe.argumentLengthCheck(arguments,1,"Headers.get");let r="Headers.get";if(t=oe.converters.ByteString(t,r,"name"),!rs(t))throw oe.errors.invalidArgument({prefix:r,value:t,type:"header name"});return this.#t.get(t,!1)}has(t){oe.brandCheck(this,e),oe.argumentLengthCheck(arguments,1,"Headers.has");let r="Headers.has";if(t=oe.converters.ByteString(t,r,"name"),!rs(t))throw oe.errors.invalidArgument({prefix:r,value:t,type:"header name"});return this.#t.contains(t,!1)}set(t,r){oe.brandCheck(this,e),oe.argumentLengthCheck(arguments,2,"Headers.set");let n="Headers.set";if(t=oe.converters.ByteString(t,n,"name"),r=oe.converters.ByteString(r,n,"value"),r=t0(r),rs(t)){if(!e0(r))throw oe.errors.invalidArgument({prefix:n,value:r,type:"header value"})}else throw oe.errors.invalidArgument({prefix:n,value:t,type:"header name"});if(this.#e==="immutable")throw new TypeError("immutable");this.#t.set(t,r,!1)}getSetCookie(){oe.brandCheck(this,e);let t=this.#t.cookies;return t?[...t]:[]}get[ot](){if(this.#t[ot])return this.#t[ot];let t=[],r=this.#t.toSortedArray(),n=this.#t.cookies;if(n===null||n.length===1)return this.#t[ot]=r;for(let o=0;o<r.length;++o){let{0:i,1:s}=r[o];if(i==="set-cookie")for(let a=0;a<n.length;++a)t.push([i,n[a]]);else t.push([i,s])}return this.#t[ot]=t}[yA.inspect.custom](t,r){return r.depth??=t,`Headers ${yA.formatWithOptions(r,this.#t.entries)}`}static getHeadersGuard(t){return t.#e}static setHeadersGuard(t,r){t.#e=r}static getHeadersList(t){return t.#t}static setHeadersList(t,r){t.#t=r}},{getHeadersGuard:o0,setHeadersGuard:uO,getHeadersList:kh,setHeadersList:dO}=Rt;Reflect.deleteProperty(Rt,"getHeadersGuard");Reflect.deleteProperty(Rt,"setHeadersGuard");Reflect.deleteProperty(Rt,"getHeadersList");Reflect.deleteProperty(Rt,"setHeadersList");lO("Headers",Rt,ot,0,1);Object.defineProperties(Rt.prototype,{append:Qo,delete:Qo,get:Qo,has:Qo,set:Qo,getSetCookie:Qo,[Symbol.toStringTag]:{value:"Headers",configurable:!0},[yA.inspect.custom]:{enumerable:!1}});oe.converters.HeadersInit=function(e,t,r){if(oe.util.Type(e)==="Object"){let n=Reflect.get(e,Symbol.iterator);if(!yA.types.isProxy(e)&&n===Rt.prototype.entries)try{return kh(e).entriesList}catch{}return typeof n=="function"?oe.converters["sequence<sequence<ByteString>>"](e,t,r,n.bind(e)):oe.converters["record<ByteString, ByteString>"](e,t,r)}throw oe.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence<sequence<ByteString>>","record<ByteString, ByteString>"]})};i0.exports={fill:r0,compareHeaderName:n0,Headers:Rt,HeadersList:wA,getHeadersGuard:o0,setHeadersGuard:uO,setHeadersList:dO,getHeadersList:kh}});var os=b((bK,m0)=>{"use strict";var{Headers:u0,HeadersList:s0,fill:hO,getHeadersGuard:gO,setHeadersGuard:d0,setHeadersList:h0}=fn(),{extractBody:a0,cloneBody:pO,mixinBody:fO,hasFinalizationRegistry:g0,streamRegistry:p0,bodyUnusable:mO}=eo(),Sh=j(),A0=w("node:util"),{kEnumerableProperty:it}=Sh,{isValidReasonPhrase:EO,isCancelled:IO,isAborted:BO,isBlobLike:CO,serializeJavascriptValueToJSONString:QO,isErrorLike:yO,isomorphicEncode:wO,environmentSettingsObject:bO}=et(),{redirectStatusSet:kO,nullBodyStatus:SO}=xi(),{kState:Ce,kHeaders:lr}=Br(),{webidl:W}=Le(),{FormData:xO}=Mi(),{URLSerializer:c0}=Ve(),{kConstruct:kA}=Ie(),xh=w("node:assert"),{types:DO}=w("node:util"),vO=new TextEncoder("utf-8"),mn=class e{static error(){return ns(SA(),"immutable")}static json(t,r={}){W.argumentLengthCheck(arguments,1,"Response.json"),r!==null&&(r=W.converters.ResponseInit(r));let n=vO.encode(QO(t)),o=a0(n),i=ns(yo({}),"response");return l0(i,r,{body:o[0],type:"application/json"}),i}static redirect(t,r=302){W.argumentLengthCheck(arguments,1,"Response.redirect"),t=W.converters.USVString(t),r=W.converters["unsigned short"](r);let n;try{n=new URL(t,bO.settingsObject.baseUrl)}catch(s){throw new TypeError(`Failed to parse URL from ${t}`,{cause:s})}if(!kO.has(r))throw new RangeError(`Invalid status code ${r}`);let o=ns(yo({}),"immutable");o[Ce].status=r;let i=wO(c0(n));return o[Ce].headersList.append("location",i,!0),o}constructor(t=null,r={}){if(W.util.markAsUncloneable(this),t===kA)return;t!==null&&(t=W.converters.BodyInit(t)),r=W.converters.ResponseInit(r),this[Ce]=yo({}),this[lr]=new u0(kA),d0(this[lr],"response"),h0(this[lr],this[Ce].headersList);let n=null;if(t!=null){let[o,i]=a0(t);n={body:o,type:i}}l0(this,r,n)}get type(){return W.brandCheck(this,e),this[Ce].type}get url(){W.brandCheck(this,e);let t=this[Ce].urlList,r=t[t.length-1]??null;return r===null?"":c0(r,!0)}get redirected(){return W.brandCheck(this,e),this[Ce].urlList.length>1}get status(){return W.brandCheck(this,e),this[Ce].status}get ok(){return W.brandCheck(this,e),this[Ce].status>=200&&this[Ce].status<=299}get statusText(){return W.brandCheck(this,e),this[Ce].statusText}get headers(){return W.brandCheck(this,e),this[lr]}get body(){return W.brandCheck(this,e),this[Ce].body?this[Ce].body.stream:null}get bodyUsed(){return W.brandCheck(this,e),!!this[Ce].body&&Sh.isDisturbed(this[Ce].body.stream)}clone(){if(W.brandCheck(this,e),mO(this))throw W.errors.exception({header:"Response.clone",message:"Body has already been consumed."});let t=Dh(this[Ce]);return g0&&this[Ce].body?.stream&&p0.register(this,new WeakRef(this[Ce].body.stream)),ns(t,gO(this[lr]))}[A0.inspect.custom](t,r){r.depth===null&&(r.depth=2),r.colors??=!0;let n={status:this.status,statusText:this.statusText,headers:this.headers,body:this.body,bodyUsed:this.bodyUsed,ok:this.ok,redirected:this.redirected,type:this.type,url:this.url};return`Response ${A0.formatWithOptions(r,n)}`}};fO(mn);Object.defineProperties(mn.prototype,{type:it,url:it,status:it,ok:it,redirected:it,statusText:it,headers:it,clone:it,body:it,bodyUsed:it,[Symbol.toStringTag]:{value:"Response",configurable:!0}});Object.defineProperties(mn,{json:it,redirect:it,error:it});function Dh(e){if(e.internalResponse)return f0(Dh(e.internalResponse),e.type);let t=yo({...e,body:null});return e.body!=null&&(t.body=pO(t,e.body)),t}function yo(e){return{aborted:!1,rangeRequested:!1,timingAllowPassed:!1,requestIncludesCredentials:!1,type:"default",status:200,timingInfo:null,cacheState:"",statusText:"",...e,headersList:e?.headersList?new s0(e?.headersList):new s0,urlList:e?.urlList?[...e.urlList]:[]}}function SA(e){let t=yO(e);return yo({type:"error",status:0,error:t?e:new Error(e&&String(e)),aborted:e&&e.name==="AbortError"})}function RO(e){return e.type==="error"&&e.status===0}function bA(e,t){return t={internalResponse:e,...t},new Proxy(e,{get(r,n){return n in t?t[n]:r[n]},set(r,n,o){return xh(!(n in t)),r[n]=o,!0}})}function f0(e,t){if(t==="basic")return bA(e,{type:"basic",headersList:e.headersList});if(t==="cors")return bA(e,{type:"cors",headersList:e.headersList});if(t==="opaque")return bA(e,{type:"opaque",urlList:Object.freeze([]),status:0,statusText:"",body:null});if(t==="opaqueredirect")return bA(e,{type:"opaqueredirect",status:0,statusText:"",headersList:[],body:null});xh(!1)}function NO(e,t=null){return xh(IO(e)),BO(e)?SA(Object.assign(new DOMException("The operation was aborted.","AbortError"),{cause:t})):SA(Object.assign(new DOMException("Request was cancelled."),{cause:t}))}function l0(e,t,r){if(t.status!==null&&(t.status<200||t.status>599))throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.');if("statusText"in t&&t.statusText!=null&&!EO(String(t.statusText)))throw new TypeError("Invalid statusText");if("status"in t&&t.status!=null&&(e[Ce].status=t.status),"statusText"in t&&t.statusText!=null&&(e[Ce].statusText=t.statusText),"headers"in t&&t.headers!=null&&hO(e[lr],t.headers),r){if(SO.includes(e.status))throw W.errors.exception({header:"Response constructor",message:`Invalid response status code ${e.status}`});e[Ce].body=r.body,r.type!=null&&!e[Ce].headersList.contains("content-type",!0)&&e[Ce].headersList.append("content-type",r.type,!0)}}function ns(e,t){let r=new mn(kA);return r[Ce]=e,r[lr]=new u0(kA),h0(r[lr],e.headersList),d0(r[lr],t),g0&&e.body?.stream&&p0.register(r,new WeakRef(e.body.stream)),r}W.converters.ReadableStream=W.interfaceConverter(ReadableStream);W.converters.FormData=W.interfaceConverter(xO);W.converters.URLSearchParams=W.interfaceConverter(URLSearchParams);W.converters.XMLHttpRequestBodyInit=function(e,t,r){return typeof e=="string"?W.converters.USVString(e,t,r):CO(e)?W.converters.Blob(e,t,r,{strict:!1}):ArrayBuffer.isView(e)||DO.isArrayBuffer(e)?W.converters.BufferSource(e,t,r):Sh.isFormDataLike(e)?W.converters.FormData(e,t,r,{strict:!1}):e instanceof URLSearchParams?W.converters.URLSearchParams(e,t,r):W.converters.DOMString(e,t,r)};W.converters.BodyInit=function(e,t,r){return e instanceof ReadableStream?W.converters.ReadableStream(e,t,r):e?.[Symbol.asyncIterator]?e:W.converters.XMLHttpRequestBodyInit(e,t,r)};W.converters.ResponseInit=W.dictionaryConverter([{key:"status",converter:W.converters["unsigned short"],defaultValue:()=>200},{key:"statusText",converter:W.converters.ByteString,defaultValue:()=>""},{key:"headers",converter:W.converters.HeadersInit}]);m0.exports={isNetworkError:RO,makeNetworkError:SA,makeResponse:yo,makeAppropriateNetworkError:NO,filterResponse:f0,Response:mn,cloneResponse:Dh,fromInnerResponse:ns}});var C0=b((kK,B0)=>{"use strict";var{kConnected:E0,kSize:I0}=Ie(),vh=class{constructor(t){this.value=t}deref(){return this.value[E0]===0&&this.value[I0]===0?void 0:this.value}},Rh=class{constructor(t){this.finalizer=t}register(t,r){t.on&&t.on("disconnect",()=>{t[E0]===0&&t[I0]===0&&this.finalizer(r)})}unregister(t){}};B0.exports=function(){return process.env.NODE_V8_COVERAGE&&process.version.startsWith("v18")?(process._rawDebug("Using compatibility WeakRef and FinalizationRegistry"),{WeakRef:vh,FinalizationRegistry:Rh}):{WeakRef,FinalizationRegistry}}});var wo=b((SK,L0)=>{"use strict";var{extractBody:FO,mixinBody:MO,cloneBody:UO,bodyUnusable:Q0}=eo(),{Headers:R0,fill:LO,HeadersList:RA,setHeadersGuard:Fh,getHeadersGuard:TO,setHeadersList:N0,getHeadersList:y0}=fn(),{FinalizationRegistry:PO}=C0()(),DA=j(),w0=w("node:util"),{isValidHTTPToken:_O,sameOrigin:b0,environmentSettingsObject:xA}=et(),{forbiddenMethodsSet:OO,corsSafeListedMethodsSet:HO,referrerPolicy:GO,requestRedirect:qO,requestMode:YO,requestCredentials:VO,requestCache:JO,requestDuplex:WO}=xi(),{kEnumerableProperty:Ne,normalizedMethodRecordsBase:$O,normalizedMethodRecords:zO}=DA,{kHeaders:st,kSignal:vA,kState:fe,kDispatcher:Nh}=Br(),{webidl:G}=Le(),{URLSerializer:KO}=Ve(),{kConstruct:NA}=Ie(),jO=w("node:assert"),{getMaxListeners:k0,setMaxListeners:S0,getEventListeners:ZO,defaultMaxListeners:x0}=w("node:events"),XO=Symbol("abortController"),F0=new PO(({signal:e,abort:t})=>{e.removeEventListener("abort",t)}),FA=new WeakMap;function D0(e){return t;function t(){let r=e.deref();if(r!==void 0){F0.unregister(t),this.removeEventListener("abort",t),r.abort(this.reason);let n=FA.get(r.signal);if(n!==void 0){if(n.size!==0){for(let o of n){let i=o.deref();i!==void 0&&i.abort(this.reason)}n.clear()}FA.delete(r.signal)}}}}var v0=!1,Rr=class e{constructor(t,r={}){if(G.util.markAsUncloneable(this),t===NA)return;let n="Request constructor";G.argumentLengthCheck(arguments,1,n),t=G.converters.RequestInfo(t,n,"input"),r=G.converters.RequestInit(r,n,"init");let o=null,i=null,s=xA.settingsObject.baseUrl,a=null;if(typeof t=="string"){this[Nh]=r.dispatcher;let f;try{f=new URL(t,s)}catch(B){throw new TypeError("Failed to parse URL from "+t,{cause:B})}if(f.username||f.password)throw new TypeError("Request cannot be constructed from a URL that includes credentials: "+t);o=MA({urlList:[f]}),i="cors"}else this[Nh]=r.dispatcher||t[Nh],jO(t instanceof e),o=t[fe],a=t[vA];let A=xA.settingsObject.origin,c="client";if(o.window?.constructor?.name==="EnvironmentSettingsObject"&&b0(o.window,A)&&(c=o.window),r.window!=null)throw new TypeError(`'window' option '${c}' must be null`);"window"in r&&(c="no-window"),o=MA({method:o.method,headersList:o.headersList,unsafeRequest:o.unsafeRequest,client:xA.settingsObject,window:c,priority:o.priority,origin:o.origin,referrer:o.referrer,referrerPolicy:o.referrerPolicy,mode:o.mode,credentials:o.credentials,cache:o.cache,redirect:o.redirect,integrity:o.integrity,keepalive:o.keepalive,reloadNavigation:o.reloadNavigation,historyNavigation:o.historyNavigation,urlList:[...o.urlList]});let l=Object.keys(r).length!==0;if(l&&(o.mode==="navigate"&&(o.mode="same-origin"),o.reloadNavigation=!1,o.historyNavigation=!1,o.origin="client",o.referrer="client",o.referrerPolicy="",o.url=o.urlList[o.urlList.length-1],o.urlList=[o.url]),r.referrer!==void 0){let f=r.referrer;if(f==="")o.referrer="no-referrer";else{let B;try{B=new URL(f,s)}catch(E){throw new TypeError(`Referrer "${f}" is not a valid URL.`,{cause:E})}B.protocol==="about:"&&B.hostname==="client"||A&&!b0(B,xA.settingsObject.baseUrl)?o.referrer="client":o.referrer=B}}r.referrerPolicy!==void 0&&(o.referrerPolicy=r.referrerPolicy);let u;if(r.mode!==void 0?u=r.mode:u=i,u==="navigate")throw G.errors.exception({header:"Request constructor",message:"invalid request mode navigate."});if(u!=null&&(o.mode=u),r.credentials!==void 0&&(o.credentials=r.credentials),r.cache!==void 0&&(o.cache=r.cache),o.cache==="only-if-cached"&&o.mode!=="same-origin")throw new TypeError("'only-if-cached' can be set only with 'same-origin' mode");if(r.redirect!==void 0&&(o.redirect=r.redirect),r.integrity!=null&&(o.integrity=String(r.integrity)),r.keepalive!==void 0&&(o.keepalive=!!r.keepalive),r.method!==void 0){let f=r.method,B=zO[f];if(B!==void 0)o.method=B;else{if(!_O(f))throw new TypeError(`'${f}' is not a valid HTTP method.`);let E=f.toUpperCase();if(OO.has(E))throw new TypeError(`'${f}' HTTP method is unsupported.`);f=$O[E]??f,o.method=f}!v0&&o.method==="patch"&&(process.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.",{code:"UNDICI-FETCH-patch"}),v0=!0)}r.signal!==void 0&&(a=r.signal),this[fe]=o;let d=new AbortController;if(this[vA]=d.signal,a!=null){if(!a||typeof a.aborted!="boolean"||typeof a.addEventListener!="function")throw new TypeError("Failed to construct 'Request': member signal is not of type AbortSignal.");if(a.aborted)d.abort(a.reason);else{this[XO]=d;let f=new WeakRef(d),B=D0(f);try{(typeof k0=="function"&&k0(a)===x0||ZO(a,"abort").length>=x0)&&S0(1500,a)}catch{}DA.addAbortListener(a,B),F0.register(d,{signal:a,abort:B},B)}}if(this[st]=new R0(NA),N0(this[st],o.headersList),Fh(this[st],"request"),u==="no-cors"){if(!HO.has(o.method))throw new TypeError(`'${o.method} is unsupported in no-cors mode.`);Fh(this[st],"request-no-cors")}if(l){let f=y0(this[st]),B=r.headers!==void 0?r.headers:new RA(f);if(f.clear(),B instanceof RA){for(let{name:E,value:I}of B.rawValues())f.append(E,I,!1);f.cookies=B.cookies}else LO(this[st],B)}let h=t instanceof e?t[fe].body:null;if((r.body!=null||h!=null)&&(o.method==="GET"||o.method==="HEAD"))throw new TypeError("Request with GET/HEAD method cannot have body.");let g=null;if(r.body!=null){let[f,B]=FO(r.body,o.keepalive);g=f,B&&!y0(this[st]).contains("content-type",!0)&&this[st].append("content-type",B)}let p=g??h;if(p!=null&&p.source==null){if(g!=null&&r.duplex==null)throw new TypeError("RequestInit: duplex option is required when sending a body.");if(o.mode!=="same-origin"&&o.mode!=="cors")throw new TypeError('If request is made from ReadableStream, mode should be "same-origin" or "cors"');o.useCORSPreflightFlag=!0}let m=p;if(g==null&&h!=null){if(Q0(t))throw new TypeError("Cannot construct a Request with a Request object that has already been used.");let f=new TransformStream;h.stream.pipeThrough(f),m={source:h.source,length:h.length,stream:f.readable}}this[fe].body=m}get method(){return G.brandCheck(this,e),this[fe].method}get url(){return G.brandCheck(this,e),KO(this[fe].url)}get headers(){return G.brandCheck(this,e),this[st]}get destination(){return G.brandCheck(this,e),this[fe].destination}get referrer(){return G.brandCheck(this,e),this[fe].referrer==="no-referrer"?"":this[fe].referrer==="client"?"about:client":this[fe].referrer.toString()}get referrerPolicy(){return G.brandCheck(this,e),this[fe].referrerPolicy}get mode(){return G.brandCheck(this,e),this[fe].mode}get credentials(){return this[fe].credentials}get cache(){return G.brandCheck(this,e),this[fe].cache}get redirect(){return G.brandCheck(this,e),this[fe].redirect}get integrity(){return G.brandCheck(this,e),this[fe].integrity}get keepalive(){return G.brandCheck(this,e),this[fe].keepalive}get isReloadNavigation(){return G.brandCheck(this,e),this[fe].reloadNavigation}get isHistoryNavigation(){return G.brandCheck(this,e),this[fe].historyNavigation}get signal(){return G.brandCheck(this,e),this[vA]}get body(){return G.brandCheck(this,e),this[fe].body?this[fe].body.stream:null}get bodyUsed(){return G.brandCheck(this,e),!!this[fe].body&&DA.isDisturbed(this[fe].body.stream)}get duplex(){return G.brandCheck(this,e),"half"}clone(){if(G.brandCheck(this,e),Q0(this))throw new TypeError("unusable");let t=M0(this[fe]),r=new AbortController;if(this.signal.aborted)r.abort(this.signal.reason);else{let n=FA.get(this.signal);n===void 0&&(n=new Set,FA.set(this.signal,n));let o=new WeakRef(r);n.add(o),DA.addAbortListener(r.signal,D0(o))}return U0(t,r.signal,TO(this[st]))}[w0.inspect.custom](t,r){r.depth===null&&(r.depth=2),r.colors??=!0;let n={method:this.method,url:this.url,headers:this.headers,destination:this.destination,referrer:this.referrer,referrerPolicy:this.referrerPolicy,mode:this.mode,credentials:this.credentials,cache:this.cache,redirect:this.redirect,integrity:this.integrity,keepalive:this.keepalive,isReloadNavigation:this.isReloadNavigation,isHistoryNavigation:this.isHistoryNavigation,signal:this.signal};return`Request ${w0.formatWithOptions(r,n)}`}};MO(Rr);function MA(e){return{method:e.method??"GET",localURLsOnly:e.localURLsOnly??!1,unsafeRequest:e.unsafeRequest??!1,body:e.body??null,client:e.client??null,reservedClient:e.reservedClient??null,replacesClientId:e.replacesClientId??"",window:e.window??"client",keepalive:e.keepalive??!1,serviceWorkers:e.serviceWorkers??"all",initiator:e.initiator??"",destination:e.destination??"",priority:e.priority??null,origin:e.origin??"client",policyContainer:e.policyContainer??"client",referrer:e.referrer??"client",referrerPolicy:e.referrerPolicy??"",mode:e.mode??"no-cors",useCORSPreflightFlag:e.useCORSPreflightFlag??!1,credentials:e.credentials??"same-origin",useCredentials:e.useCredentials??!1,cache:e.cache??"default",redirect:e.redirect??"follow",integrity:e.integrity??"",cryptoGraphicsNonceMetadata:e.cryptoGraphicsNonceMetadata??"",parserMetadata:e.parserMetadata??"",reloadNavigation:e.reloadNavigation??!1,historyNavigation:e.historyNavigation??!1,userActivation:e.userActivation??!1,taintedOrigin:e.taintedOrigin??!1,redirectCount:e.redirectCount??0,responseTainting:e.responseTainting??"basic",preventNoCacheCacheControlHeaderModification:e.preventNoCacheCacheControlHeaderModification??!1,done:e.done??!1,timingAllowFailed:e.timingAllowFailed??!1,urlList:e.urlList,url:e.urlList[0],headersList:e.headersList?new RA(e.headersList):new RA}}function M0(e){let t=MA({...e,body:null});return e.body!=null&&(t.body=UO(t,e.body)),t}function U0(e,t,r){let n=new Rr(NA);return n[fe]=e,n[vA]=t,n[st]=new R0(NA),N0(n[st],e.headersList),Fh(n[st],r),n}Object.defineProperties(Rr.prototype,{method:Ne,url:Ne,headers:Ne,redirect:Ne,clone:Ne,signal:Ne,duplex:Ne,destination:Ne,body:Ne,bodyUsed:Ne,isHistoryNavigation:Ne,isReloadNavigation:Ne,keepalive:Ne,integrity:Ne,cache:Ne,credentials:Ne,attribute:Ne,referrerPolicy:Ne,referrer:Ne,mode:Ne,[Symbol.toStringTag]:{value:"Request",configurable:!0}});G.converters.Request=G.interfaceConverter(Rr);G.converters.RequestInfo=function(e,t,r){return typeof e=="string"?G.converters.USVString(e,t,r):e instanceof Rr?G.converters.Request(e,t,r):G.converters.USVString(e,t,r)};G.converters.AbortSignal=G.interfaceConverter(AbortSignal);G.converters.RequestInit=G.dictionaryConverter([{key:"method",converter:G.converters.ByteString},{key:"headers",converter:G.converters.HeadersInit},{key:"body",converter:G.nullableConverter(G.converters.BodyInit)},{key:"referrer",converter:G.converters.USVString},{key:"referrerPolicy",converter:G.converters.DOMString,allowedValues:GO},{key:"mode",converter:G.converters.DOMString,allowedValues:YO},{key:"credentials",converter:G.converters.DOMString,allowedValues:VO},{key:"cache",converter:G.converters.DOMString,allowedValues:JO},{key:"redirect",converter:G.converters.DOMString,allowedValues:qO},{key:"integrity",converter:G.converters.DOMString},{key:"keepalive",converter:G.converters.boolean},{key:"signal",converter:G.nullableConverter(e=>G.converters.AbortSignal(e,"RequestInit","signal",{strict:!1}))},{key:"window",converter:G.converters.any},{key:"duplex",converter:G.converters.DOMString,allowedValues:WO},{key:"dispatcher",converter:G.converters.any}]);L0.exports={Request:Rr,makeRequest:MA,fromInnerRequest:U0,cloneRequest:M0}});var ss=b((xK,j0)=>{"use strict";var{makeNetworkError:le,makeAppropriateNetworkError:UA,filterResponse:Mh,makeResponse:LA,fromInnerResponse:eH}=os(),{HeadersList:T0}=fn(),{Request:tH,cloneRequest:rH}=wo(),Nr=w("node:zlib"),{bytesMatch:nH,makePolicyContainer:oH,clonePolicyContainer:iH,requestBadPort:sH,TAOCheck:aH,appendRequestOriginHeader:AH,responseLocationURL:cH,requestCurrentURL:$t,setRequestReferrerPolicyOnRedirect:lH,tryUpgradeRequestToAPotentiallyTrustworthyURL:uH,createOpaqueTimingInfo:_h,appendFetchMetadata:dH,corsCheck:hH,crossOriginResourcePolicyCheck:gH,determineRequestsReferrer:pH,coarsenedSharedCurrentTime:is,createDeferredPromise:fH,isBlobLike:mH,sameOrigin:Ph,isCancelled:En,isAborted:P0,isErrorLike:EH,fullyReadBody:IH,readableStreamClose:BH,isomorphicEncode:TA,urlIsLocal:CH,urlIsHttpHttpsScheme:Oh,urlHasHttpsScheme:QH,clampAndCoarsenConnectionTimingInfo:yH,simpleRangeHeaderValue:wH,buildContentRange:bH,createInflate:kH,extractMimeType:SH}=et(),{kState:G0,kDispatcher:xH}=Br(),In=w("node:assert"),{safelyExtractBody:Hh,extractBody:_0}=eo(),{redirectStatusSet:q0,nullBodyStatus:Y0,safeMethodsSet:DH,requestBodyHeader:vH,subresourceSet:RH}=xi(),NH=w("node:events"),{Readable:FH,pipeline:MH,finished:UH}=w("node:stream"),{addAbortListener:LH,isErrored:TH,isReadable:PA,bufferToLowerCasedHeaderName:O0}=j(),{dataURLProcessor:PH,serializeAMimeType:_H,minimizeSupportedMimeType:OH}=Ve(),{getGlobalDispatcher:HH}=CA(),{webidl:GH}=Le(),{STATUS_CODES:qH}=w("node:http"),YH=["GET","HEAD"],VH=typeof __UNDICI_IS_NODE__<"u"||typeof esbuildDetection<"u"?"node":"undici",Uh,_A=class extends NH{constructor(t){super(),this.dispatcher=t,this.connection=null,this.dump=!1,this.state="ongoing"}terminate(t){this.state==="ongoing"&&(this.state="terminated",this.connection?.destroy(t),this.emit("terminated",t))}abort(t){this.state==="ongoing"&&(this.state="aborted",t||(t=new DOMException("The operation was aborted.","AbortError")),this.serializedAbortReason=t,this.connection?.destroy(t),this.emit("terminated",t))}};function JH(e){V0(e,"fetch")}function WH(e,t=void 0){GH.argumentLengthCheck(arguments,1,"globalThis.fetch");let r=fH(),n;try{n=new tH(e,t)}catch(l){return r.reject(l),r.promise}let o=n[G0];if(n.signal.aborted)return Lh(r,o,null,n.signal.reason),r.promise;o.client.globalObject?.constructor?.name==="ServiceWorkerGlobalScope"&&(o.serviceWorkers="none");let s=null,a=!1,A=null;return LH(n.signal,()=>{a=!0,In(A!=null),A.abort(n.signal.reason);let l=s?.deref();Lh(r,o,l,n.signal.reason)}),A=W0({request:o,processResponseEndOfBody:JH,processResponse:l=>{if(!a){if(l.aborted){Lh(r,o,s,A.serializedAbortReason);return}if(l.type==="error"){r.reject(new TypeError("fetch failed",{cause:l.error}));return}s=new WeakRef(eH(l,"immutable")),r.resolve(s.deref()),r=null}},dispatcher:n[xH]}),r.promise}function V0(e,t="other"){if(e.type==="error"&&e.aborted||!e.urlList?.length)return;let r=e.urlList[0],n=e.timingInfo,o=e.cacheState;Oh(r)&&n!==null&&(e.timingAllowPassed||(n=_h({startTime:n.startTime}),o=""),n.endTime=is(),e.timingInfo=n,J0(n,r.href,t,globalThis,o))}var J0=performance.markResourceTiming;function Lh(e,t,r,n){if(e&&e.reject(n),t.body!=null&&PA(t.body?.stream)&&t.body.stream.cancel(n).catch(i=>{if(i.code!=="ERR_INVALID_STATE")throw i}),r==null)return;let o=r[G0];o.body!=null&&PA(o.body?.stream)&&o.body.stream.cancel(n).catch(i=>{if(i.code!=="ERR_INVALID_STATE")throw i})}function W0({request:e,processRequestBodyChunkLength:t,processRequestEndOfBody:r,processResponse:n,processResponseEndOfBody:o,processResponseConsumeBody:i,useParallelQueue:s=!1,dispatcher:a=HH()}){In(a);let A=null,c=!1;e.client!=null&&(A=e.client.globalObject,c=e.client.crossOriginIsolatedCapability);let l=is(c),u=_h({startTime:l}),d={controller:new _A(a),request:e,timingInfo:u,processRequestBodyChunkLength:t,processRequestEndOfBody:r,processResponse:n,processResponseConsumeBody:i,processResponseEndOfBody:o,taskDestination:A,crossOriginIsolatedCapability:c};return In(!e.body||e.body.stream),e.window==="client"&&(e.window=e.client?.globalObject?.constructor?.name==="Window"?e.client:"no-window"),e.origin==="client"&&(e.origin=e.client.origin),e.policyContainer==="client"&&(e.client!=null?e.policyContainer=iH(e.client.policyContainer):e.policyContainer=oH()),e.headersList.contains("accept",!0)||e.headersList.append("accept","*/*",!0),e.headersList.contains("accept-language",!0)||e.headersList.append("accept-language","*",!0),e.priority,RH.has(e.destination),$0(d).catch(h=>{d.controller.terminate(h)}),d.controller}async function $0(e,t=!1){let r=e.request,n=null;if(r.localURLsOnly&&!CH($t(r))&&(n=le("local URLs only")),uH(r),sH(r)==="blocked"&&(n=le("bad port")),r.referrerPolicy===""&&(r.referrerPolicy=r.policyContainer.referrerPolicy),r.referrer!=="no-referrer"&&(r.referrer=pH(r)),n===null&&(n=await(async()=>{let i=$t(r);return Ph(i,r.url)&&r.responseTainting==="basic"||i.protocol==="data:"||r.mode==="navigate"||r.mode==="websocket"?(r.responseTainting="basic",await H0(e)):r.mode==="same-origin"?le('request mode cannot be "same-origin"'):r.mode==="no-cors"?r.redirect!=="follow"?le('redirect mode cannot be "follow" for "no-cors" request'):(r.responseTainting="opaque",await H0(e)):Oh($t(r))?(r.responseTainting="cors",await z0(e)):le("URL scheme must be a HTTP(S) scheme")})()),t)return n;n.status!==0&&!n.internalResponse&&(r.responseTainting,r.responseTainting==="basic"?n=Mh(n,"basic"):r.responseTainting==="cors"?n=Mh(n,"cors"):r.responseTainting==="opaque"?n=Mh(n,"opaque"):In(!1));let o=n.status===0?n:n.internalResponse;if(o.urlList.length===0&&o.urlList.push(...r.urlList),r.timingAllowFailed||(n.timingAllowPassed=!0),n.type==="opaque"&&o.status===206&&o.rangeRequested&&!r.headers.contains("range",!0)&&(n=o=le()),n.status!==0&&(r.method==="HEAD"||r.method==="CONNECT"||Y0.includes(o.status))&&(o.body=null,e.controller.dump=!0),r.integrity){let i=a=>Th(e,le(a));if(r.responseTainting==="opaque"||n.body==null){i(n.error);return}let s=a=>{if(!nH(a,r.integrity)){i("integrity mismatch");return}n.body=Hh(a)[0],Th(e,n)};await IH(n.body,s,i)}else Th(e,n)}function H0(e){if(En(e)&&e.request.redirectCount===0)return Promise.resolve(UA(e));let{request:t}=e,{protocol:r}=$t(t);switch(r){case"about:":return Promise.resolve(le("about scheme is not supported"));case"blob:":{Uh||(Uh=w("node:buffer").resolveObjectURL);let n=$t(t);if(n.search.length!==0)return Promise.resolve(le("NetworkError when attempting to fetch resource."));let o=Uh(n.toString());if(t.method!=="GET"||!mH(o))return Promise.resolve(le("invalid method"));let i=LA(),s=o.size,a=TA(`${s}`),A=o.type;if(t.headersList.contains("range",!0)){i.rangeRequested=!0;let c=t.headersList.get("range",!0),l=wH(c,!0);if(l==="failure")return Promise.resolve(le("failed to fetch the data URL"));let{rangeStartValue:u,rangeEndValue:d}=l;if(u===null)u=s-d,d=u+d-1;else{if(u>=s)return Promise.resolve(le("Range start is greater than the blob's size."));(d===null||d>=s)&&(d=s-1)}let h=o.slice(u,d,A),g=_0(h);i.body=g[0];let p=TA(`${h.size}`),m=bH(u,d,s);i.status=206,i.statusText="Partial Content",i.headersList.set("content-length",p,!0),i.headersList.set("content-type",A,!0),i.headersList.set("content-range",m,!0)}else{let c=_0(o);i.statusText="OK",i.body=c[0],i.headersList.set("content-length",a,!0),i.headersList.set("content-type",A,!0)}return Promise.resolve(i)}case"data:":{let n=$t(t),o=PH(n);if(o==="failure")return Promise.resolve(le("failed to fetch the data URL"));let i=_H(o.mimeType);return Promise.resolve(LA({statusText:"OK",headersList:[["content-type",{name:"Content-Type",value:i}]],body:Hh(o.body)[0]}))}case"file:":return Promise.resolve(le("not implemented... yet..."));case"http:":case"https:":return z0(e).catch(n=>le(n));default:return Promise.resolve(le("unknown scheme"))}}function $H(e,t){e.request.done=!0,e.processResponseDone!=null&&queueMicrotask(()=>e.processResponseDone(t))}function Th(e,t){let r=e.timingInfo,n=()=>{let i=Date.now();e.request.destination==="document"&&(e.controller.fullTimingInfo=r),e.controller.reportTimingSteps=()=>{if(e.request.url.protocol!=="https:")return;r.endTime=i;let a=t.cacheState,A=t.bodyInfo;t.timingAllowPassed||(r=_h(r),a="");let c=0;if(e.request.mode!=="navigator"||!t.hasCrossOriginRedirects){c=t.status;let l=SH(t.headersList);l!=="failure"&&(A.contentType=OH(l))}e.request.initiatorType!=null&&J0(r,e.request.url.href,e.request.initiatorType,globalThis,a,A,c)};let s=()=>{e.request.done=!0,e.processResponseEndOfBody!=null&&queueMicrotask(()=>e.processResponseEndOfBody(t)),e.request.initiatorType!=null&&e.controller.reportTimingSteps()};queueMicrotask(()=>s())};e.processResponse!=null&&queueMicrotask(()=>{e.processResponse(t),e.processResponse=null});let o=t.type==="error"?t:t.internalResponse??t;o.body==null?n():UH(o.body.stream,()=>{n()})}async function z0(e){let t=e.request,r=null,n=null,o=e.timingInfo;if(t.serviceWorkers,r===null){if(t.redirect==="follow"&&(t.serviceWorkers="none"),n=r=await K0(e),t.responseTainting==="cors"&&hH(t,r)==="failure")return le("cors failure");aH(t,r)==="failure"&&(t.timingAllowFailed=!0)}return(t.responseTainting==="opaque"||r.type==="opaque")&&gH(t.origin,t.client,t.destination,n)==="blocked"?le("blocked"):(q0.has(n.status)&&(t.redirect!=="manual"&&e.controller.connection.destroy(void 0,!1),t.redirect==="error"?r=le("unexpected redirect"):t.redirect==="manual"?r=n:t.redirect==="follow"?r=await zH(e,r):In(!1)),r.timingInfo=o,r)}function zH(e,t){let r=e.request,n=t.internalResponse?t.internalResponse:t,o;try{if(o=cH(n,$t(r).hash),o==null)return t}catch(s){return Promise.resolve(le(s))}if(!Oh(o))return Promise.resolve(le("URL scheme must be a HTTP(S) scheme"));if(r.redirectCount===20)return Promise.resolve(le("redirect count exceeded"));if(r.redirectCount+=1,r.mode==="cors"&&(o.username||o.password)&&!Ph(r,o))return Promise.resolve(le('cross origin not allowed for request mode "cors"'));if(r.responseTainting==="cors"&&(o.username||o.password))return Promise.resolve(le('URL cannot contain credentials for request mode "cors"'));if(n.status!==303&&r.body!=null&&r.body.source==null)return Promise.resolve(le());if([301,302].includes(n.status)&&r.method==="POST"||n.status===303&&!YH.includes(r.method)){r.method="GET",r.body=null;for(let s of vH)r.headersList.delete(s)}Ph($t(r),o)||(r.headersList.delete("authorization",!0),r.headersList.delete("proxy-authorization",!0),r.headersList.delete("cookie",!0),r.headersList.delete("host",!0)),r.body!=null&&(In(r.body.source!=null),r.body=Hh(r.body.source)[0]);let i=e.timingInfo;return i.redirectEndTime=i.postRedirectStartTime=is(e.crossOriginIsolatedCapability),i.redirectStartTime===0&&(i.redirectStartTime=i.startTime),r.urlList.push(o),lH(r,n),$0(e,!0)}async function K0(e,t=!1,r=!1){let n=e.request,o=null,i=null,s=null,a=null,A=!1;n.window==="no-window"&&n.redirect==="error"?(o=e,i=n):(i=rH(n),o={...e},o.request=i);let c=n.credentials==="include"||n.credentials==="same-origin"&&n.responseTainting==="basic",l=i.body?i.body.length:null,u=null;if(i.body==null&&["POST","PUT"].includes(i.method)&&(u="0"),l!=null&&(u=TA(`${l}`)),u!=null&&i.headersList.append("content-length",u,!0),l!=null&&i.keepalive,i.referrer instanceof URL&&i.headersList.append("referer",TA(i.referrer.href),!0),AH(i),dH(i),i.headersList.contains("user-agent",!0)||i.headersList.append("user-agent",VH),i.cache==="default"&&(i.headersList.contains("if-modified-since",!0)||i.headersList.contains("if-none-match",!0)||i.headersList.contains("if-unmodified-since",!0)||i.headersList.contains("if-match",!0)||i.headersList.contains("if-range",!0))&&(i.cache="no-store"),i.cache==="no-cache"&&!i.preventNoCacheCacheControlHeaderModification&&!i.headersList.contains("cache-control",!0)&&i.headersList.append("cache-control","max-age=0",!0),(i.cache==="no-store"||i.cache==="reload")&&(i.headersList.contains("pragma",!0)||i.headersList.append("pragma","no-cache",!0),i.headersList.contains("cache-control",!0)||i.headersList.append("cache-control","no-cache",!0)),i.headersList.contains("range",!0)&&i.headersList.append("accept-encoding","identity",!0),i.headersList.contains("accept-encoding",!0)||(QH($t(i))?i.headersList.append("accept-encoding","br, gzip, deflate",!0):i.headersList.append("accept-encoding","gzip, deflate",!0)),i.headersList.delete("host",!0),a==null&&(i.cache="no-store"),i.cache!=="no-store"&&i.cache,s==null){if(i.cache==="only-if-cached")return le("only if cached");let d=await KH(o,c,r);!DH.has(i.method)&&d.status>=200&&d.status<=399,A&&d.status,s==null&&(s=d)}if(s.urlList=[...i.urlList],i.headersList.contains("range",!0)&&(s.rangeRequested=!0),s.requestIncludesCredentials=c,s.status===407)return n.window==="no-window"?le():En(e)?UA(e):le("proxy authentication required");if(s.status===421&&!r&&(n.body==null||n.body.source!=null)){if(En(e))return UA(e);e.controller.connection.destroy(),s=await K0(e,t,!0)}return s}async function KH(e,t=!1,r=!1){In(!e.controller.connection||e.controller.connection.destroyed),e.controller.connection={abort:null,destroyed:!1,destroy(g,p=!0){this.destroyed||(this.destroyed=!0,p&&this.abort?.(g??new DOMException("The operation was aborted.","AbortError")))}};let n=e.request,o=null,i=e.timingInfo;null==null&&(n.cache="no-store");let a=r?"yes":"no";n.mode;let A=null;if(n.body==null&&e.processRequestEndOfBody)queueMicrotask(()=>e.processRequestEndOfBody());else if(n.body!=null){let g=async function*(f){En(e)||(yield f,e.processRequestBodyChunkLength?.(f.byteLength))},p=()=>{En(e)||e.processRequestEndOfBody&&e.processRequestEndOfBody()},m=f=>{En(e)||(f.name==="AbortError"?e.controller.abort():e.controller.terminate(f))};A=(async function*(){try{for await(let f of n.body.stream)yield*g(f);p()}catch(f){m(f)}})()}try{let{body:g,status:p,statusText:m,headersList:f,socket:B}=await h({body:A});if(B)o=LA({status:p,statusText:m,headersList:f,socket:B});else{let E=g[Symbol.asyncIterator]();e.controller.next=()=>E.next(),o=LA({status:p,statusText:m,headersList:f})}}catch(g){return g.name==="AbortError"?(e.controller.connection.destroy(),UA(e,g)):le(g)}let c=async()=>{await e.controller.resume()},l=g=>{En(e)||e.controller.abort(g)},u=new ReadableStream({async start(g){e.controller.controller=g},async pull(g){await c(g)},async cancel(g){await l(g)},type:"bytes"});o.body={stream:u,source:null,length:null},e.controller.onAborted=d,e.controller.on("terminated",d),e.controller.resume=async()=>{for(;;){let g,p;try{let{done:f,value:B}=await e.controller.next();if(P0(e))break;g=f?void 0:B}catch(f){e.controller.ended&&!i.encodedBodySize?g=void 0:(g=f,p=!0)}if(g===void 0){BH(e.controller.controller),$H(e,o);return}if(i.decodedBodySize+=g?.byteLength??0,p){e.controller.terminate(g);return}let m=new Uint8Array(g);if(m.byteLength&&e.controller.controller.enqueue(m),TH(u)){e.controller.terminate();return}if(e.controller.controller.desiredSize<=0)return}};function d(g){P0(e)?(o.aborted=!0,PA(u)&&e.controller.controller.error(e.controller.serializedAbortReason)):PA(u)&&e.controller.controller.error(new TypeError("terminated",{cause:EH(g)?g:void 0})),e.controller.connection.destroy()}return o;function h({body:g}){let p=$t(n),m=e.controller.dispatcher;return new Promise((f,B)=>m.dispatch({path:p.pathname+p.search,origin:p.origin,method:n.method,body:m.isMockActive?n.body&&(n.body.source||n.body.stream):g,headers:n.headersList.entries,maxRedirections:0,upgrade:n.mode==="websocket"?"websocket":void 0},{body:null,abort:null,onConnect(E){let{connection:I}=e.controller;i.finalConnectionTimingInfo=yH(void 0,i.postRedirectStartTime,e.crossOriginIsolatedCapability),I.destroyed?E(new DOMException("The operation was aborted.","AbortError")):(e.controller.on("terminated",E),this.abort=I.abort=E),i.finalNetworkRequestStartTime=is(e.crossOriginIsolatedCapability)},onResponseStarted(){i.finalNetworkResponseStartTime=is(e.crossOriginIsolatedCapability)},onHeaders(E,I,Q,R){if(E<200)return;let D="",x=new T0;for(let z=0;z<I.length;z+=2)x.append(O0(I[z]),I[z+1].toString("latin1"),!0);D=x.get("location",!0),this.body=new FH({read:Q});let F=[],K=D&&n.redirect==="follow"&&q0.has(E);if(n.method!=="HEAD"&&n.method!=="CONNECT"&&!Y0.includes(E)&&!K){let z=x.get("content-encoding",!0),be=z?z.toLowerCase().split(","):[],ht=5;if(be.length>ht)return B(new Error(`too many content-encodings in response: ${be.length}, maximum allowed is ${ht}`)),!0;for(let zr=be.length-1;zr>=0;--zr){let Pt=be[zr].trim();if(Pt==="x-gzip"||Pt==="gzip")F.push(Nr.createGunzip({flush:Nr.constants.Z_SYNC_FLUSH,finishFlush:Nr.constants.Z_SYNC_FLUSH}));else if(Pt==="deflate")F.push(kH({flush:Nr.constants.Z_SYNC_FLUSH,finishFlush:Nr.constants.Z_SYNC_FLUSH}));else if(Pt==="br")F.push(Nr.createBrotliDecompress({flush:Nr.constants.BROTLI_OPERATION_FLUSH,finishFlush:Nr.constants.BROTLI_OPERATION_FLUSH}));else{F.length=0;break}}}let X=this.onError.bind(this);return f({status:E,statusText:R,headersList:x,body:F.length?MH(this.body,...F,z=>{z&&this.onError(z)}).on("error",X):this.body.on("error",X)}),!0},onData(E){if(e.controller.dump)return;let I=E;return i.encodedBodySize+=I.byteLength,this.body.push(I)},onComplete(){this.abort&&e.controller.off("terminated",this.abort),e.controller.onAborted&&e.controller.off("terminated",e.controller.onAborted),e.controller.ended=!0,this.body.push(null)},onError(E){this.abort&&e.controller.off("terminated",this.abort),this.body?.destroy(E),e.controller.terminate(E),B(E)},onUpgrade(E,I,Q){if(E!==101)return;let R=new T0;for(let D=0;D<I.length;D+=2)R.append(O0(I[D]),I[D+1].toString("latin1"),!0);return f({status:E,statusText:qH[E],headersList:R,socket:Q}),!0}}))}}j0.exports={fetch:WH,Fetch:_A,fetching:W0,finalizeAndReportTiming:V0}});var Gh=b((DK,Z0)=>{"use strict";Z0.exports={kState:Symbol("FileReader state"),kResult:Symbol("FileReader result"),kError:Symbol("FileReader error"),kLastProgressEventFired:Symbol("FileReader last progress event fired timestamp"),kEvents:Symbol("FileReader events"),kAborted:Symbol("FileReader aborted")}});var ey=b((vK,X0)=>{"use strict";var{webidl:at}=Le(),OA=Symbol("ProgressEvent state"),qh=class e extends Event{constructor(t,r={}){t=at.converters.DOMString(t,"ProgressEvent constructor","type"),r=at.converters.ProgressEventInit(r??{}),super(t,r),this[OA]={lengthComputable:r.lengthComputable,loaded:r.loaded,total:r.total}}get lengthComputable(){return at.brandCheck(this,e),this[OA].lengthComputable}get loaded(){return at.brandCheck(this,e),this[OA].loaded}get total(){return at.brandCheck(this,e),this[OA].total}};at.converters.ProgressEventInit=at.dictionaryConverter([{key:"lengthComputable",converter:at.converters.boolean,defaultValue:()=>!1},{key:"loaded",converter:at.converters["unsigned long long"],defaultValue:()=>0},{key:"total",converter:at.converters["unsigned long long"],defaultValue:()=>0},{key:"bubbles",converter:at.converters.boolean,defaultValue:()=>!1},{key:"cancelable",converter:at.converters.boolean,defaultValue:()=>!1},{key:"composed",converter:at.converters.boolean,defaultValue:()=>!1}]);X0.exports={ProgressEvent:qh}});var ry=b((RK,ty)=>{"use strict";function jH(e){if(!e)return"failure";switch(e.trim().toLowerCase()){case"unicode-1-1-utf-8":case"unicode11utf8":case"unicode20utf8":case"utf-8":case"utf8":case"x-unicode20utf8":return"UTF-8";case"866":case"cp866":case"csibm866":case"ibm866":return"IBM866";case"csisolatin2":case"iso-8859-2":case"iso-ir-101":case"iso8859-2":case"iso88592":case"iso_8859-2":case"iso_8859-2:1987":case"l2":case"latin2":return"ISO-8859-2";case"csisolatin3":case"iso-8859-3":case"iso-ir-109":case"iso8859-3":case"iso88593":case"iso_8859-3":case"iso_8859-3:1988":case"l3":case"latin3":return"ISO-8859-3";case"csisolatin4":case"iso-8859-4":case"iso-ir-110":case"iso8859-4":case"iso88594":case"iso_8859-4":case"iso_8859-4:1988":case"l4":case"latin4":return"ISO-8859-4";case"csisolatincyrillic":case"cyrillic":case"iso-8859-5":case"iso-ir-144":case"iso8859-5":case"iso88595":case"iso_8859-5":case"iso_8859-5:1988":return"ISO-8859-5";case"arabic":case"asmo-708":case"csiso88596e":case"csiso88596i":case"csisolatinarabic":case"ecma-114":case"iso-8859-6":case"iso-8859-6-e":case"iso-8859-6-i":case"iso-ir-127":case"iso8859-6":case"iso88596":case"iso_8859-6":case"iso_8859-6:1987":return"ISO-8859-6";case"csisolatingreek":case"ecma-118":case"elot_928":case"greek":case"greek8":case"iso-8859-7":case"iso-ir-126":case"iso8859-7":case"iso88597":case"iso_8859-7":case"iso_8859-7:1987":case"sun_eu_greek":return"ISO-8859-7";case"csiso88598e":case"csisolatinhebrew":case"hebrew":case"iso-8859-8":case"iso-8859-8-e":case"iso-ir-138":case"iso8859-8":case"iso88598":case"iso_8859-8":case"iso_8859-8:1988":case"visual":return"ISO-8859-8";case"csiso88598i":case"iso-8859-8-i":case"logical":return"ISO-8859-8-I";case"csisolatin6":case"iso-8859-10":case"iso-ir-157":case"iso8859-10":case"iso885910":case"l6":case"latin6":return"ISO-8859-10";case"iso-8859-13":case"iso8859-13":case"iso885913":return"ISO-8859-13";case"iso-8859-14":case"iso8859-14":case"iso885914":return"ISO-8859-14";case"csisolatin9":case"iso-8859-15":case"iso8859-15":case"iso885915":case"iso_8859-15":case"l9":return"ISO-8859-15";case"iso-8859-16":return"ISO-8859-16";case"cskoi8r":case"koi":case"koi8":case"koi8-r":case"koi8_r":return"KOI8-R";case"koi8-ru":case"koi8-u":return"KOI8-U";case"csmacintosh":case"mac":case"macintosh":case"x-mac-roman":return"macintosh";case"iso-8859-11":case"iso8859-11":case"iso885911":case"tis-620":case"windows-874":return"windows-874";case"cp1250":case"windows-1250":case"x-cp1250":return"windows-1250";case"cp1251":case"windows-1251":case"x-cp1251":return"windows-1251";case"ansi_x3.4-1968":case"ascii":case"cp1252":case"cp819":case"csisolatin1":case"ibm819":case"iso-8859-1":case"iso-ir-100":case"iso8859-1":case"iso88591":case"iso_8859-1":case"iso_8859-1:1987":case"l1":case"latin1":case"us-ascii":case"windows-1252":case"x-cp1252":return"windows-1252";case"cp1253":case"windows-1253":case"x-cp1253":return"windows-1253";case"cp1254":case"csisolatin5":case"iso-8859-9":case"iso-ir-148":case"iso8859-9":case"iso88599":case"iso_8859-9":case"iso_8859-9:1989":case"l5":case"latin5":case"windows-1254":case"x-cp1254":return"windows-1254";case"cp1255":case"windows-1255":case"x-cp1255":return"windows-1255";case"cp1256":case"windows-1256":case"x-cp1256":return"windows-1256";case"cp1257":case"windows-1257":case"x-cp1257":return"windows-1257";case"cp1258":case"windows-1258":case"x-cp1258":return"windows-1258";case"x-mac-cyrillic":case"x-mac-ukrainian":return"x-mac-cyrillic";case"chinese":case"csgb2312":case"csiso58gb231280":case"gb2312":case"gb_2312":case"gb_2312-80":case"gbk":case"iso-ir-58":case"x-gbk":return"GBK";case"gb18030":return"gb18030";case"big5":case"big5-hkscs":case"cn-big5":case"csbig5":case"x-x-big5":return"Big5";case"cseucpkdfmtjapanese":case"euc-jp":case"x-euc-jp":return"EUC-JP";case"csiso2022jp":case"iso-2022-jp":return"ISO-2022-JP";case"csshiftjis":case"ms932":case"ms_kanji":case"shift-jis":case"shift_jis":case"sjis":case"windows-31j":case"x-sjis":return"Shift_JIS";case"cseuckr":case"csksc56011987":case"euc-kr":case"iso-ir-149":case"korean":case"ks_c_5601-1987":case"ks_c_5601-1989":case"ksc5601":case"ksc_5601":case"windows-949":return"EUC-KR";case"csiso2022kr":case"hz-gb-2312":case"iso-2022-cn":case"iso-2022-cn-ext":case"iso-2022-kr":case"replacement":return"replacement";case"unicodefffe":case"utf-16be":return"UTF-16BE";case"csunicode":case"iso-10646-ucs-2":case"ucs-2":case"unicode":case"unicodefeff":case"utf-16":case"utf-16le":return"UTF-16LE";case"x-user-defined":return"x-user-defined";default:return"failure"}}ty.exports={getEncoding:jH}});var ly=b((NK,cy)=>{"use strict";var{kState:bo,kError:Yh,kResult:ny,kAborted:as,kLastProgressEventFired:Vh}=Gh(),{ProgressEvent:ZH}=ey(),{getEncoding:oy}=ry(),{serializeAMimeType:XH,parseMIMEType:iy}=Ve(),{types:eG}=w("node:util"),{StringDecoder:sy}=w("string_decoder"),{btoa:ay}=w("node:buffer"),tG={enumerable:!0,writable:!1,configurable:!1};function rG(e,t,r,n){if(e[bo]==="loading")throw new DOMException("Invalid state","InvalidStateError");e[bo]="loading",e[ny]=null,e[Yh]=null;let i=t.stream().getReader(),s=[],a=i.read(),A=!0;(async()=>{for(;!e[as];)try{let{done:c,value:l}=await a;if(A&&!e[as]&&queueMicrotask(()=>{Fr("loadstart",e)}),A=!1,!c&&eG.isUint8Array(l))s.push(l),(e[Vh]===void 0||Date.now()-e[Vh]>=50)&&!e[as]&&(e[Vh]=Date.now(),queueMicrotask(()=>{Fr("progress",e)})),a=i.read();else if(c){queueMicrotask(()=>{e[bo]="done";try{let u=nG(s,r,t.type,n);if(e[as])return;e[ny]=u,Fr("load",e)}catch(u){e[Yh]=u,Fr("error",e)}e[bo]!=="loading"&&Fr("loadend",e)});break}}catch(c){if(e[as])return;queueMicrotask(()=>{e[bo]="done",e[Yh]=c,Fr("error",e),e[bo]!=="loading"&&Fr("loadend",e)});break}})()}function Fr(e,t){let r=new ZH(e,{bubbles:!1,cancelable:!1});t.dispatchEvent(r)}function nG(e,t,r,n){switch(t){case"DataURL":{let o="data:",i=iy(r||"application/octet-stream");i!=="failure"&&(o+=XH(i)),o+=";base64,";let s=new sy("latin1");for(let a of e)o+=ay(s.write(a));return o+=ay(s.end()),o}case"Text":{let o="failure";if(n&&(o=oy(n)),o==="failure"&&r){let i=iy(r);i!=="failure"&&(o=oy(i.parameters.get("charset")))}return o==="failure"&&(o="UTF-8"),oG(e,o)}case"ArrayBuffer":return Ay(e).buffer;case"BinaryString":{let o="",i=new sy("latin1");for(let s of e)o+=i.write(s);return o+=i.end(),o}}}function oG(e,t){let r=Ay(e),n=iG(r),o=0;n!==null&&(t=n,o=n==="UTF-8"?3:2);let i=r.slice(o);return new TextDecoder(t).decode(i)}function iG(e){let[t,r,n]=e;return t===239&&r===187&&n===191?"UTF-8":t===254&&r===255?"UTF-16BE":t===255&&r===254?"UTF-16LE":null}function Ay(e){let t=e.reduce((n,o)=>n+o.byteLength,0),r=0;return e.reduce((n,o)=>(n.set(o,r),r+=o.byteLength,n),new Uint8Array(t))}cy.exports={staticPropertyDescriptors:tG,readOperation:rG,fireAProgressEvent:Fr}});var gy=b((FK,hy)=>{"use strict";var{staticPropertyDescriptors:ko,readOperation:HA,fireAProgressEvent:uy}=ly(),{kState:Bn,kError:dy,kResult:GA,kEvents:ae,kAborted:sG}=Gh(),{webidl:de}=Le(),{kEnumerableProperty:$e}=j(),Nt=class e extends EventTarget{constructor(){super(),this[Bn]="empty",this[GA]=null,this[dy]=null,this[ae]={loadend:null,error:null,abort:null,load:null,progress:null,loadstart:null}}readAsArrayBuffer(t){de.brandCheck(this,e),de.argumentLengthCheck(arguments,1,"FileReader.readAsArrayBuffer"),t=de.converters.Blob(t,{strict:!1}),HA(this,t,"ArrayBuffer")}readAsBinaryString(t){de.brandCheck(this,e),de.argumentLengthCheck(arguments,1,"FileReader.readAsBinaryString"),t=de.converters.Blob(t,{strict:!1}),HA(this,t,"BinaryString")}readAsText(t,r=void 0){de.brandCheck(this,e),de.argumentLengthCheck(arguments,1,"FileReader.readAsText"),t=de.converters.Blob(t,{strict:!1}),r!==void 0&&(r=de.converters.DOMString(r,"FileReader.readAsText","encoding")),HA(this,t,"Text",r)}readAsDataURL(t){de.brandCheck(this,e),de.argumentLengthCheck(arguments,1,"FileReader.readAsDataURL"),t=de.converters.Blob(t,{strict:!1}),HA(this,t,"DataURL")}abort(){if(this[Bn]==="empty"||this[Bn]==="done"){this[GA]=null;return}this[Bn]==="loading"&&(this[Bn]="done",this[GA]=null),this[sG]=!0,uy("abort",this),this[Bn]!=="loading"&&uy("loadend",this)}get readyState(){switch(de.brandCheck(this,e),this[Bn]){case"empty":return this.EMPTY;case"loading":return this.LOADING;case"done":return this.DONE}}get result(){return de.brandCheck(this,e),this[GA]}get error(){return de.brandCheck(this,e),this[dy]}get onloadend(){return de.brandCheck(this,e),this[ae].loadend}set onloadend(t){de.brandCheck(this,e),this[ae].loadend&&this.removeEventListener("loadend",this[ae].loadend),typeof t=="function"?(this[ae].loadend=t,this.addEventListener("loadend",t)):this[ae].loadend=null}get onerror(){return de.brandCheck(this,e),this[ae].error}set onerror(t){de.brandCheck(this,e),this[ae].error&&this.removeEventListener("error",this[ae].error),typeof t=="function"?(this[ae].error=t,this.addEventListener("error",t)):this[ae].error=null}get onloadstart(){return de.brandCheck(this,e),this[ae].loadstart}set onloadstart(t){de.brandCheck(this,e),this[ae].loadstart&&this.removeEventListener("loadstart",this[ae].loadstart),typeof t=="function"?(this[ae].loadstart=t,this.addEventListener("loadstart",t)):this[ae].loadstart=null}get onprogress(){return de.brandCheck(this,e),this[ae].progress}set onprogress(t){de.brandCheck(this,e),this[ae].progress&&this.removeEventListener("progress",this[ae].progress),typeof t=="function"?(this[ae].progress=t,this.addEventListener("progress",t)):this[ae].progress=null}get onload(){return de.brandCheck(this,e),this[ae].load}set onload(t){de.brandCheck(this,e),this[ae].load&&this.removeEventListener("load",this[ae].load),typeof t=="function"?(this[ae].load=t,this.addEventListener("load",t)):this[ae].load=null}get onabort(){return de.brandCheck(this,e),this[ae].abort}set onabort(t){de.brandCheck(this,e),this[ae].abort&&this.removeEventListener("abort",this[ae].abort),typeof t=="function"?(this[ae].abort=t,this.addEventListener("abort",t)):this[ae].abort=null}};Nt.EMPTY=Nt.prototype.EMPTY=0;Nt.LOADING=Nt.prototype.LOADING=1;Nt.DONE=Nt.prototype.DONE=2;Object.defineProperties(Nt.prototype,{EMPTY:ko,LOADING:ko,DONE:ko,readAsArrayBuffer:$e,readAsBinaryString:$e,readAsText:$e,readAsDataURL:$e,abort:$e,readyState:$e,result:$e,error:$e,onloadstart:$e,onprogress:$e,onload:$e,onabort:$e,onerror:$e,onloadend:$e,[Symbol.toStringTag]:{value:"FileReader",writable:!1,enumerable:!1,configurable:!0}});Object.defineProperties(Nt,{EMPTY:ko,LOADING:ko,DONE:ko});hy.exports={FileReader:Nt}});var qA=b((MK,py)=>{"use strict";py.exports={kConstruct:Ie().kConstruct}});var Ey=b((UK,my)=>{"use strict";var aG=w("node:assert"),{URLSerializer:fy}=Ve(),{isValidHeaderName:AG}=et();function cG(e,t,r=!1){let n=fy(e,r),o=fy(t,r);return n===o}function lG(e){aG(e!==null);let t=[];for(let r of e.split(","))r=r.trim(),AG(r)&&t.push(r);return t}my.exports={urlEquals:cG,getFieldValues:lG}});var Cy=b((LK,By)=>{"use strict";var{kConstruct:uG}=qA(),{urlEquals:dG,getFieldValues:Jh}=Ey(),{kEnumerableProperty:Cn,isDisturbed:hG}=j(),{webidl:T}=Le(),{Response:gG,cloneResponse:pG,fromInnerResponse:fG}=os(),{Request:ur,fromInnerRequest:mG}=wo(),{kState:Ft}=Br(),{fetching:EG}=ss(),{urlIsHttpHttpsScheme:YA,createDeferredPromise:So,readAllBytes:IG}=et(),Wh=w("node:assert"),VA=class e{#e;constructor(){arguments[0]!==uG&&T.illegalConstructor(),T.util.markAsUncloneable(this),this.#e=arguments[1]}async match(t,r={}){T.brandCheck(this,e);let n="Cache.match";T.argumentLengthCheck(arguments,1,n),t=T.converters.RequestInfo(t,n,"request"),r=T.converters.CacheQueryOptions(r,n,"options");let o=this.#o(t,r,1);if(o.length!==0)return o[0]}async matchAll(t=void 0,r={}){T.brandCheck(this,e);let n="Cache.matchAll";return t!==void 0&&(t=T.converters.RequestInfo(t,n,"request")),r=T.converters.CacheQueryOptions(r,n,"options"),this.#o(t,r)}async add(t){T.brandCheck(this,e);let r="Cache.add";T.argumentLengthCheck(arguments,1,r),t=T.converters.RequestInfo(t,r,"request");let n=[t];return await this.addAll(n)}async addAll(t){T.brandCheck(this,e);let r="Cache.addAll";T.argumentLengthCheck(arguments,1,r);let n=[],o=[];for(let d of t){if(d===void 0)throw T.errors.conversionFailed({prefix:r,argument:"Argument 1",types:["undefined is not allowed"]});if(d=T.converters.RequestInfo(d),typeof d=="string")continue;let h=d[Ft];if(!YA(h.url)||h.method!=="GET")throw T.errors.exception({header:r,message:"Expected http/s scheme when method is not GET."})}let i=[];for(let d of t){let h=new ur(d)[Ft];if(!YA(h.url))throw T.errors.exception({header:r,message:"Expected http/s scheme."});h.initiator="fetch",h.destination="subresource",o.push(h);let g=So();i.push(EG({request:h,processResponse(p){if(p.type==="error"||p.status===206||p.status<200||p.status>299)g.reject(T.errors.exception({header:"Cache.addAll",message:"Received an invalid status code or the request failed."}));else if(p.headersList.contains("vary")){let m=Jh(p.headersList.get("vary"));for(let f of m)if(f==="*"){g.reject(T.errors.exception({header:"Cache.addAll",message:"invalid vary field value"}));for(let B of i)B.abort();return}}},processResponseEndOfBody(p){if(p.aborted){g.reject(new DOMException("aborted","AbortError"));return}g.resolve(p)}})),n.push(g.promise)}let a=await Promise.all(n),A=[],c=0;for(let d of a){let h={type:"put",request:o[c],response:d};A.push(h),c++}let l=So(),u=null;try{this.#t(A)}catch(d){u=d}return queueMicrotask(()=>{u===null?l.resolve(void 0):l.reject(u)}),l.promise}async put(t,r){T.brandCheck(this,e);let n="Cache.put";T.argumentLengthCheck(arguments,2,n),t=T.converters.RequestInfo(t,n,"request"),r=T.converters.Response(r,n,"response");let o=null;if(t instanceof ur?o=t[Ft]:o=new ur(t)[Ft],!YA(o.url)||o.method!=="GET")throw T.errors.exception({header:n,message:"Expected an http/s scheme when method is not GET"});let i=r[Ft];if(i.status===206)throw T.errors.exception({header:n,message:"Got 206 status"});if(i.headersList.contains("vary")){let h=Jh(i.headersList.get("vary"));for(let g of h)if(g==="*")throw T.errors.exception({header:n,message:"Got * vary field value"})}if(i.body&&(hG(i.body.stream)||i.body.stream.locked))throw T.errors.exception({header:n,message:"Response body is locked or disturbed"});let s=pG(i),a=So();if(i.body!=null){let g=i.body.stream.getReader();IG(g).then(a.resolve,a.reject)}else a.resolve(void 0);let A=[],c={type:"put",request:o,response:s};A.push(c);let l=await a.promise;s.body!=null&&(s.body.source=l);let u=So(),d=null;try{this.#t(A)}catch(h){d=h}return queueMicrotask(()=>{d===null?u.resolve():u.reject(d)}),u.promise}async delete(t,r={}){T.brandCheck(this,e);let n="Cache.delete";T.argumentLengthCheck(arguments,1,n),t=T.converters.RequestInfo(t,n,"request"),r=T.converters.CacheQueryOptions(r,n,"options");let o=null;if(t instanceof ur){if(o=t[Ft],o.method!=="GET"&&!r.ignoreMethod)return!1}else Wh(typeof t=="string"),o=new ur(t)[Ft];let i=[],s={type:"delete",request:o,options:r};i.push(s);let a=So(),A=null,c;try{c=this.#t(i)}catch(l){A=l}return queueMicrotask(()=>{A===null?a.resolve(!!c?.length):a.reject(A)}),a.promise}async keys(t=void 0,r={}){T.brandCheck(this,e);let n="Cache.keys";t!==void 0&&(t=T.converters.RequestInfo(t,n,"request")),r=T.converters.CacheQueryOptions(r,n,"options");let o=null;if(t!==void 0)if(t instanceof ur){if(o=t[Ft],o.method!=="GET"&&!r.ignoreMethod)return[]}else typeof t=="string"&&(o=new ur(t)[Ft]);let i=So(),s=[];if(t===void 0)for(let a of this.#e)s.push(a[0]);else{let a=this.#r(o,r);for(let A of a)s.push(A[0])}return queueMicrotask(()=>{let a=[];for(let A of s){let c=mG(A,new AbortController().signal,"immutable");a.push(c)}i.resolve(Object.freeze(a))}),i.promise}#t(t){let r=this.#e,n=[...r],o=[],i=[];try{for(let s of t){if(s.type!=="delete"&&s.type!=="put")throw T.errors.exception({header:"Cache.#batchCacheOperations",message:'operation type does not match "delete" or "put"'});if(s.type==="delete"&&s.response!=null)throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"delete operation should not have an associated response"});if(this.#r(s.request,s.options,o).length)throw new DOMException("???","InvalidStateError");let a;if(s.type==="delete"){if(a=this.#r(s.request,s.options),a.length===0)return[];for(let A of a){let c=r.indexOf(A);Wh(c!==-1),r.splice(c,1)}}else if(s.type==="put"){if(s.response==null)throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"put operation should have an associated response"});let A=s.request;if(!YA(A.url))throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"expected http or https scheme"});if(A.method!=="GET")throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"not get method"});if(s.options!=null)throw T.errors.exception({header:"Cache.#batchCacheOperations",message:"options must not be defined"});a=this.#r(s.request);for(let c of a){let l=r.indexOf(c);Wh(l!==-1),r.splice(l,1)}r.push([s.request,s.response]),o.push([s.request,s.response])}i.push([s.request,s.response])}return i}catch(s){throw this.#e.length=0,this.#e=n,s}}#r(t,r,n){let o=[],i=n??this.#e;for(let s of i){let[a,A]=s;this.#i(t,a,A,r)&&o.push(s)}return o}#i(t,r,n=null,o){let i=new URL(t.url),s=new URL(r.url);if(o?.ignoreSearch&&(s.search="",i.search=""),!dG(i,s,!0))return!1;if(n==null||o?.ignoreVary||!n.headersList.contains("vary"))return!0;let a=Jh(n.headersList.get("vary"));for(let A of a){if(A==="*")return!1;let c=r.headersList.get(A),l=t.headersList.get(A);if(c!==l)return!1}return!0}#o(t,r,n=1/0){let o=null;if(t!==void 0)if(t instanceof ur){if(o=t[Ft],o.method!=="GET"&&!r.ignoreMethod)return[]}else typeof t=="string"&&(o=new ur(t)[Ft]);let i=[];if(t===void 0)for(let a of this.#e)i.push(a[1]);else{let a=this.#r(o,r);for(let A of a)i.push(A[1])}let s=[];for(let a of i){let A=fG(a,"immutable");if(s.push(A.clone()),s.length>=n)break}return Object.freeze(s)}};Object.defineProperties(VA.prototype,{[Symbol.toStringTag]:{value:"Cache",configurable:!0},match:Cn,matchAll:Cn,add:Cn,addAll:Cn,put:Cn,delete:Cn,keys:Cn});var Iy=[{key:"ignoreSearch",converter:T.converters.boolean,defaultValue:()=>!1},{key:"ignoreMethod",converter:T.converters.boolean,defaultValue:()=>!1},{key:"ignoreVary",converter:T.converters.boolean,defaultValue:()=>!1}];T.converters.CacheQueryOptions=T.dictionaryConverter(Iy);T.converters.MultiCacheQueryOptions=T.dictionaryConverter([...Iy,{key:"cacheName",converter:T.converters.DOMString}]);T.converters.Response=T.interfaceConverter(gG);T.converters["sequence<RequestInfo>"]=T.sequenceConverter(T.converters.RequestInfo);By.exports={Cache:VA}});var yy=b((TK,Qy)=>{"use strict";var{kConstruct:As}=qA(),{Cache:JA}=Cy(),{webidl:_e}=Le(),{kEnumerableProperty:cs}=j(),WA=class e{#e=new Map;constructor(){arguments[0]!==As&&_e.illegalConstructor(),_e.util.markAsUncloneable(this)}async match(t,r={}){if(_e.brandCheck(this,e),_e.argumentLengthCheck(arguments,1,"CacheStorage.match"),t=_e.converters.RequestInfo(t),r=_e.converters.MultiCacheQueryOptions(r),r.cacheName!=null){if(this.#e.has(r.cacheName)){let n=this.#e.get(r.cacheName);return await new JA(As,n).match(t,r)}}else for(let n of this.#e.values()){let i=await new JA(As,n).match(t,r);if(i!==void 0)return i}}async has(t){_e.brandCheck(this,e);let r="CacheStorage.has";return _e.argumentLengthCheck(arguments,1,r),t=_e.converters.DOMString(t,r,"cacheName"),this.#e.has(t)}async open(t){_e.brandCheck(this,e);let r="CacheStorage.open";if(_e.argumentLengthCheck(arguments,1,r),t=_e.converters.DOMString(t,r,"cacheName"),this.#e.has(t)){let o=this.#e.get(t);return new JA(As,o)}let n=[];return this.#e.set(t,n),new JA(As,n)}async delete(t){_e.brandCheck(this,e);let r="CacheStorage.delete";return _e.argumentLengthCheck(arguments,1,r),t=_e.converters.DOMString(t,r,"cacheName"),this.#e.delete(t)}async keys(){return _e.brandCheck(this,e),[...this.#e.keys()]}};Object.defineProperties(WA.prototype,{[Symbol.toStringTag]:{value:"CacheStorage",configurable:!0},match:cs,has:cs,open:cs,delete:cs,keys:cs});Qy.exports={CacheStorage:WA}});var by=b((PK,wy)=>{"use strict";wy.exports={maxAttributeValueSize:1024,maxNameValuePairSize:4096}});var Kh=b((_K,Dy)=>{"use strict";function BG(e){for(let t=0;t<e.length;++t){let r=e.charCodeAt(t);if(r>=0&&r<=8||r>=10&&r<=31||r===127)return!0}return!1}function $h(e){for(let t=0;t<e.length;++t){let r=e.charCodeAt(t);if(r<33||r>126||r===34||r===40||r===41||r===60||r===62||r===64||r===44||r===59||r===58||r===92||r===47||r===91||r===93||r===63||r===61||r===123||r===125)throw new Error("Invalid cookie name")}}function zh(e){let t=e.length,r=0;if(e[0]==='"'){if(t===1||e[t-1]!=='"')throw new Error("Invalid cookie value");--t,++r}for(;r<t;){let n=e.charCodeAt(r++);if(n<33||n>126||n===34||n===44||n===59||n===92)throw new Error("Invalid cookie value")}}function Sy(e){for(let t=0;t<e.length;++t){let r=e.charCodeAt(t);if(r<32||r>126||r===59)throw new Error("Invalid cookie path")}}function ky(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122}function CG(e){if(e===" ")return;if(e.length>255)throw new Error("Invalid cookie domain");let t=0;for(let r=0;r<e.length;++r){let n=e.charCodeAt(r);if(n===46){if(t===0)throw new Error("Invalid cookie domain");if(e.charCodeAt(r-1)===45)throw new Error("Invalid cookie domain");t=0;continue}if(t===0&&!ky(n))throw new Error("Invalid cookie domain");if(!ky(n)&&n!==45)throw new Error("Invalid cookie domain");if(++t>63)throw new Error("Invalid cookie domain")}if(t===0||e.charCodeAt(e.length-1)===45)throw new Error("Invalid cookie domain")}var QG=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],yG=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],$A=Array(61).fill(0).map((e,t)=>t.toString().padStart(2,"0"));function xy(e){return typeof e=="number"&&(e=new Date(e)),`${QG[e.getUTCDay()]}, ${$A[e.getUTCDate()]} ${yG[e.getUTCMonth()]} ${e.getUTCFullYear()} ${$A[e.getUTCHours()]}:${$A[e.getUTCMinutes()]}:${$A[e.getUTCSeconds()]} GMT`}function wG(e){if(e<0)throw new Error("Invalid cookie max-age")}function bG(e){if(e.name.length===0)return null;$h(e.name),zh(e.value);let t=[`${e.name}=${e.value}`];e.name.startsWith("__Secure-")&&(e.secure=!0),e.name.startsWith("__Host-")&&(e.secure=!0,e.domain=null,e.path="/"),e.secure&&t.push("Secure"),e.httpOnly&&t.push("HttpOnly"),typeof e.maxAge=="number"&&(wG(e.maxAge),t.push(`Max-Age=${e.maxAge}`)),e.domain&&(CG(e.domain),t.push(`Domain=${e.domain}`)),e.path&&(Sy(e.path),t.push(`Path=${e.path}`)),e.expires&&e.expires.toString()!=="Invalid Date"&&t.push(`Expires=${xy(e.expires)}`),e.sameSite&&t.push(`SameSite=${e.sameSite}`);for(let r of e.unparsed){if(!r.includes("="))throw new Error("Invalid unparsed");let[n,...o]=r.split("="),i=n.trim(),s=o.join("=");$h(i),zh(s),t.push(`${i}=${s}`)}return t.join("; ")}Dy.exports={isCTLExcludingHtab:BG,validateCookieName:$h,validateCookiePath:Sy,validateCookieValue:zh,toIMFDate:xy,stringify:bG}});var Ry=b((OK,vy)=>{"use strict";var{maxNameValuePairSize:kG,maxAttributeValueSize:SG}=by(),{isCTLExcludingHtab:xG}=Kh(),{collectASequenceOfCodePointsFast:zA}=Ve(),DG=w("node:assert");function vG(e){if(xG(e))return null;let t="",r="",n="",o="";if(e.includes(";")){let i={position:0};t=zA(";",e,i),r=e.slice(i.position)}else t=e;if(!t.includes("="))o=t;else{let i={position:0};n=zA("=",t,i),o=t.slice(i.position+1)}return n=n.trim(),o=o.trim(),n.length+o.length>kG?null:{name:n,value:o,...xo(r)}}function xo(e,t={}){if(e.length===0)return t;DG(e[0]===";"),e=e.slice(1);let r="";e.includes(";")?(r=zA(";",e,{position:0}),e=e.slice(r.length)):(r=e,e="");let n="",o="";if(r.includes("=")){let s={position:0};n=zA("=",r,s),o=r.slice(s.position+1)}else n=r;if(n=n.trim(),o=o.trim(),o.length>SG)return xo(e,t);let i=n.toLowerCase();if(i==="expires"){let s=new Date(o);t.expires=s}else if(i==="max-age"){let s=o.charCodeAt(0);if((s<48||s>57)&&o[0]!=="-"||!/^\d+$/.test(o))return xo(e,t);let a=Number(o);t.maxAge=a}else if(i==="domain"){let s=o;s[0]==="."&&(s=s.slice(1)),s=s.toLowerCase(),t.domain=s}else if(i==="path"){let s="";o.length===0||o[0]!=="/"?s="/":s=o,t.path=s}else if(i==="secure")t.secure=!0;else if(i==="httponly")t.httpOnly=!0;else if(i==="samesite"){let s=o.toLowerCase();s==="none"?t.sameSite="None":s==="strict"?t.sameSite="Strict":s==="lax"&&(t.sameSite="Lax")}else t.unparsed??=[],t.unparsed.push(`${n}=${o}`);return xo(e,t)}vy.exports={parseSetCookie:vG,parseUnparsedAttributes:xo}});var My=b((HK,Fy)=>{"use strict";var{parseSetCookie:RG}=Ry(),{stringify:NG}=Kh(),{webidl:re}=Le(),{Headers:KA}=fn();function FG(e){re.argumentLengthCheck(arguments,1,"getCookies"),re.brandCheck(e,KA,{strict:!1});let t=e.get("cookie"),r={};if(!t)return r;for(let n of t.split(";")){let[o,...i]=n.split("=");r[o.trim()]=i.join("=")}return r}function MG(e,t,r){re.brandCheck(e,KA,{strict:!1});let n="deleteCookie";re.argumentLengthCheck(arguments,2,n),t=re.converters.DOMString(t,n,"name"),r=re.converters.DeleteCookieAttributes(r),Ny(e,{name:t,value:"",expires:new Date(0),...r})}function UG(e){re.argumentLengthCheck(arguments,1,"getSetCookies"),re.brandCheck(e,KA,{strict:!1});let t=e.getSetCookie();return t?t.map(r=>RG(r)):[]}function Ny(e,t){re.argumentLengthCheck(arguments,2,"setCookie"),re.brandCheck(e,KA,{strict:!1}),t=re.converters.Cookie(t);let r=NG(t);r&&e.append("Set-Cookie",r)}re.converters.DeleteCookieAttributes=re.dictionaryConverter([{converter:re.nullableConverter(re.converters.DOMString),key:"path",defaultValue:()=>null},{converter:re.nullableConverter(re.converters.DOMString),key:"domain",defaultValue:()=>null}]);re.converters.Cookie=re.dictionaryConverter([{converter:re.converters.DOMString,key:"name"},{converter:re.converters.DOMString,key:"value"},{converter:re.nullableConverter(e=>typeof e=="number"?re.converters["unsigned long long"](e):new Date(e)),key:"expires",defaultValue:()=>null},{converter:re.nullableConverter(re.converters["long long"]),key:"maxAge",defaultValue:()=>null},{converter:re.nullableConverter(re.converters.DOMString),key:"domain",defaultValue:()=>null},{converter:re.nullableConverter(re.converters.DOMString),key:"path",defaultValue:()=>null},{converter:re.nullableConverter(re.converters.boolean),key:"secure",defaultValue:()=>null},{converter:re.nullableConverter(re.converters.boolean),key:"httpOnly",defaultValue:()=>null},{converter:re.converters.USVString,key:"sameSite",allowedValues:["Strict","Lax","None"]},{converter:re.sequenceConverter(re.converters.DOMString),key:"unparsed",defaultValue:()=>new Array(0)}]);Fy.exports={getCookies:FG,deleteCookie:MG,getSetCookies:UG,setCookie:Ny}});var vo=b((GK,Ly)=>{"use strict";var{webidl:U}=Le(),{kEnumerableProperty:ze}=j(),{kConstruct:Uy}=Ie(),{MessagePort:LG}=w("node:worker_threads"),Do=class e extends Event{#e;constructor(t,r={}){if(t===Uy){super(arguments[1],arguments[2]),U.util.markAsUncloneable(this);return}let n="MessageEvent constructor";U.argumentLengthCheck(arguments,1,n),t=U.converters.DOMString(t,n,"type"),r=U.converters.MessageEventInit(r,n,"eventInitDict"),super(t,r),this.#e=r,U.util.markAsUncloneable(this)}get data(){return U.brandCheck(this,e),this.#e.data}get origin(){return U.brandCheck(this,e),this.#e.origin}get lastEventId(){return U.brandCheck(this,e),this.#e.lastEventId}get source(){return U.brandCheck(this,e),this.#e.source}get ports(){return U.brandCheck(this,e),Object.isFrozen(this.#e.ports)||Object.freeze(this.#e.ports),this.#e.ports}initMessageEvent(t,r=!1,n=!1,o=null,i="",s="",a=null,A=[]){return U.brandCheck(this,e),U.argumentLengthCheck(arguments,1,"MessageEvent.initMessageEvent"),new e(t,{bubbles:r,cancelable:n,data:o,origin:i,lastEventId:s,source:a,ports:A})}static createFastMessageEvent(t,r){let n=new e(Uy,t,r);return n.#e=r,n.#e.data??=null,n.#e.origin??="",n.#e.lastEventId??="",n.#e.source??=null,n.#e.ports??=[],n}},{createFastMessageEvent:TG}=Do;delete Do.createFastMessageEvent;var jA=class e extends Event{#e;constructor(t,r={}){let n="CloseEvent constructor";U.argumentLengthCheck(arguments,1,n),t=U.converters.DOMString(t,n,"type"),r=U.converters.CloseEventInit(r),super(t,r),this.#e=r,U.util.markAsUncloneable(this)}get wasClean(){return U.brandCheck(this,e),this.#e.wasClean}get code(){return U.brandCheck(this,e),this.#e.code}get reason(){return U.brandCheck(this,e),this.#e.reason}},ZA=class e extends Event{#e;constructor(t,r){let n="ErrorEvent constructor";U.argumentLengthCheck(arguments,1,n),super(t,r),U.util.markAsUncloneable(this),t=U.converters.DOMString(t,n,"type"),r=U.converters.ErrorEventInit(r??{}),this.#e=r}get message(){return U.brandCheck(this,e),this.#e.message}get filename(){return U.brandCheck(this,e),this.#e.filename}get lineno(){return U.brandCheck(this,e),this.#e.lineno}get colno(){return U.brandCheck(this,e),this.#e.colno}get error(){return U.brandCheck(this,e),this.#e.error}};Object.defineProperties(Do.prototype,{[Symbol.toStringTag]:{value:"MessageEvent",configurable:!0},data:ze,origin:ze,lastEventId:ze,source:ze,ports:ze,initMessageEvent:ze});Object.defineProperties(jA.prototype,{[Symbol.toStringTag]:{value:"CloseEvent",configurable:!0},reason:ze,code:ze,wasClean:ze});Object.defineProperties(ZA.prototype,{[Symbol.toStringTag]:{value:"ErrorEvent",configurable:!0},message:ze,filename:ze,lineno:ze,colno:ze,error:ze});U.converters.MessagePort=U.interfaceConverter(LG);U.converters["sequence<MessagePort>"]=U.sequenceConverter(U.converters.MessagePort);var jh=[{key:"bubbles",converter:U.converters.boolean,defaultValue:()=>!1},{key:"cancelable",converter:U.converters.boolean,defaultValue:()=>!1},{key:"composed",converter:U.converters.boolean,defaultValue:()=>!1}];U.converters.MessageEventInit=U.dictionaryConverter([...jh,{key:"data",converter:U.converters.any,defaultValue:()=>null},{key:"origin",converter:U.converters.USVString,defaultValue:()=>""},{key:"lastEventId",converter:U.converters.DOMString,defaultValue:()=>""},{key:"source",converter:U.nullableConverter(U.converters.MessagePort),defaultValue:()=>null},{key:"ports",converter:U.converters["sequence<MessagePort>"],defaultValue:()=>new Array(0)}]);U.converters.CloseEventInit=U.dictionaryConverter([...jh,{key:"wasClean",converter:U.converters.boolean,defaultValue:()=>!1},{key:"code",converter:U.converters["unsigned short"],defaultValue:()=>0},{key:"reason",converter:U.converters.USVString,defaultValue:()=>""}]);U.converters.ErrorEventInit=U.dictionaryConverter([...jh,{key:"message",converter:U.converters.DOMString,defaultValue:()=>""},{key:"filename",converter:U.converters.USVString,defaultValue:()=>""},{key:"lineno",converter:U.converters["unsigned long"],defaultValue:()=>0},{key:"colno",converter:U.converters["unsigned long"],defaultValue:()=>0},{key:"error",converter:U.converters.any}]);Ly.exports={MessageEvent:Do,CloseEvent:jA,ErrorEvent:ZA,createFastMessageEvent:TG}});var Qn=b((qK,Ty)=>{"use strict";var PG="258EAFA5-E914-47DA-95CA-C5AB0DC85B11",_G={enumerable:!0,writable:!1,configurable:!1},OG={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},HG={NOT_SENT:0,PROCESSING:1,SENT:2},GG={CONTINUATION:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10},qG=2**16-1,YG={INFO:0,PAYLOADLENGTH_16:2,PAYLOADLENGTH_64:3,READ_DATA:4},VG=Buffer.allocUnsafe(0),JG={string:1,typedArray:2,arrayBuffer:3,blob:4};Ty.exports={uid:PG,sentCloseFrameState:HG,staticPropertyDescriptors:_G,states:OG,opcodes:GG,maxUnsigned16Bit:qG,parserStates:YG,emptyBuffer:VG,sendHints:JG}});var ls=b((YK,Py)=>{"use strict";Py.exports={kWebSocketURL:Symbol("url"),kReadyState:Symbol("ready state"),kController:Symbol("controller"),kResponse:Symbol("response"),kBinaryType:Symbol("binary type"),kSentClose:Symbol("sent close"),kReceivedClose:Symbol("received close"),kByteParser:Symbol("byte parser")}});var hs=b((VK,Wy)=>{"use strict";var{kReadyState:us,kController:WG,kResponse:$G,kBinaryType:zG,kWebSocketURL:KG}=ls(),{states:ds,opcodes:Mr}=Qn(),{ErrorEvent:jG,createFastMessageEvent:ZG}=vo(),{isUtf8:XG}=w("node:buffer"),{collectASequenceOfCodePointsFast:eq,removeHTTPWhitespace:_y}=Ve();function tq(e){return e[us]===ds.CONNECTING}function rq(e){return e[us]===ds.OPEN}function nq(e){return e[us]===ds.CLOSING}function oq(e){return e[us]===ds.CLOSED}function Zh(e,t,r=(o,i)=>new Event(o,i),n={}){let o=r(e,n);t.dispatchEvent(o)}function iq(e,t,r){if(e[us]!==ds.OPEN)return;let n;if(t===Mr.TEXT)try{n=Jy(r)}catch{Hy(e,"Received invalid UTF-8 in text frame.");return}else t===Mr.BINARY&&(e[zG]==="blob"?n=new Blob([r]):n=sq(r));Zh("message",e,ZG,{origin:e[KG].origin,data:n})}function sq(e){return e.byteLength===e.buffer.byteLength?e.buffer:e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}function aq(e){if(e.length===0)return!1;for(let t=0;t<e.length;++t){let r=e.charCodeAt(t);if(r<33||r>126||r===34||r===40||r===41||r===44||r===47||r===58||r===59||r===60||r===61||r===62||r===63||r===64||r===91||r===92||r===93||r===123||r===125)return!1}return!0}function Aq(e){return e>=1e3&&e<1015?e!==1004&&e!==1005&&e!==1006:e>=3e3&&e<=4999}function Hy(e,t){let{[WG]:r,[$G]:n}=e;r.abort(),n?.socket&&!n.socket.destroyed&&n.socket.destroy(),t&&Zh("error",e,(o,i)=>new jG(o,i),{error:new Error(t),message:t})}function Gy(e){return e===Mr.CLOSE||e===Mr.PING||e===Mr.PONG}function qy(e){return e===Mr.CONTINUATION}function Yy(e){return e===Mr.TEXT||e===Mr.BINARY}function cq(e){return Yy(e)||qy(e)||Gy(e)}function lq(e){let t={position:0},r=new Map;for(;t.position<e.length;){let n=eq(";",e,t),[o,i=""]=n.split("=");r.set(_y(o,!0,!1),_y(i,!1,!0)),t.position++}return r}function uq(e){if(e.length===0)return!1;for(let r=0;r<e.length;r++){let n=e.charCodeAt(r);if(n<48||n>57)return!1}let t=Number.parseInt(e,10);return t>=8&&t<=15}var Vy=typeof process.versions.icu=="string",Oy=Vy?new TextDecoder("utf-8",{fatal:!0}):void 0,Jy=Vy?Oy.decode.bind(Oy):function(e){if(XG(e))return e.toString("utf-8");throw new TypeError("Invalid utf-8 received.")};Wy.exports={isConnecting:tq,isEstablished:rq,isClosing:nq,isClosed:oq,fireEvent:Zh,isValidSubprotocol:aq,isValidStatusCode:Aq,failWebsocketConnection:Hy,websocketMessageReceived:iq,utf8Decode:Jy,isControlFrame:Gy,isContinuationFrame:qy,isTextBinaryFrame:Yy,isValidOpcode:cq,parseExtensions:lq,isValidClientWindowBits:uq}});var ec=b((JK,$y)=>{"use strict";var{maxUnsigned16Bit:dq}=Qn(),XA=16386,Xh,gs=null,Ro=XA;try{Xh=w("node:crypto")}catch{Xh={randomFillSync:function(t,r,n){for(let o=0;o<t.length;++o)t[o]=Math.random()*255|0;return t}}}function hq(){return Ro===XA&&(Ro=0,Xh.randomFillSync(gs??=Buffer.allocUnsafe(XA),0,XA)),[gs[Ro++],gs[Ro++],gs[Ro++],gs[Ro++]]}var eg=class{constructor(t){this.frameData=t}createFrame(t){let r=this.frameData,n=hq(),o=r?.byteLength??0,i=o,s=6;o>dq?(s+=8,i=127):o>125&&(s+=2,i=126);let a=Buffer.allocUnsafe(o+s);a[0]=a[1]=0,a[0]|=128,a[0]=(a[0]&240)+t;a[s-4]=n[0],a[s-3]=n[1],a[s-2]=n[2],a[s-1]=n[3],a[1]=i,i===126?a.writeUInt16BE(o,2):i===127&&(a[2]=a[3]=0,a.writeUIntBE(o,4,6)),a[1]|=128;for(let A=0;A<o;++A)a[s+A]=r[A]^n[A&3];return a}};$y.exports={WebsocketFrameSend:eg}});var rg=b((WK,tw)=>{"use strict";var{uid:gq,states:ps,sentCloseFrameState:tc,emptyBuffer:pq,opcodes:fq}=Qn(),{kReadyState:fs,kSentClose:rc,kByteParser:Ky,kReceivedClose:zy,kResponse:jy}=ls(),{fireEvent:mq,failWebsocketConnection:Ur,isClosing:Eq,isClosed:Iq,isEstablished:Bq,parseExtensions:Cq}=hs(),{channels:No}=Hn(),{CloseEvent:Qq}=vo(),{makeRequest:yq}=wo(),{fetching:wq}=ss(),{Headers:bq,getHeadersList:kq}=fn(),{getDecodeSplit:Sq}=et(),{WebsocketFrameSend:xq}=ec(),tg;try{tg=w("node:crypto")}catch{}function Dq(e,t,r,n,o,i){let s=e;s.protocol=e.protocol==="ws:"?"http:":"https:";let a=yq({urlList:[s],client:r,serviceWorkers:"none",referrer:"no-referrer",mode:"websocket",credentials:"include",cache:"no-store",redirect:"error"});if(i.headers){let u=kq(new bq(i.headers));a.headersList=u}let A=tg.randomBytes(16).toString("base64");a.headersList.append("sec-websocket-key",A),a.headersList.append("sec-websocket-version","13");for(let u of t)a.headersList.append("sec-websocket-protocol",u);return a.headersList.append("sec-websocket-extensions","permessage-deflate; client_max_window_bits"),wq({request:a,useParallelQueue:!0,dispatcher:i.dispatcher,processResponse(u){if(u.type==="error"||u.status!==101){Ur(n,"Received network error or non-101 status code.");return}if(t.length!==0&&!u.headersList.get("Sec-WebSocket-Protocol")){Ur(n,"Server did not respond with sent protocols.");return}if(u.headersList.get("Upgrade")?.toLowerCase()!=="websocket"){Ur(n,'Server did not set Upgrade header to "websocket".');return}if(u.headersList.get("Connection")?.toLowerCase()!=="upgrade"){Ur(n,'Server did not set Connection header to "upgrade".');return}let d=u.headersList.get("Sec-WebSocket-Accept"),h=tg.createHash("sha1").update(A+gq).digest("base64");if(d!==h){Ur(n,"Incorrect hash received in Sec-WebSocket-Accept header.");return}let g=u.headersList.get("Sec-WebSocket-Extensions"),p;if(g!==null&&(p=Cq(g),!p.has("permessage-deflate"))){Ur(n,"Sec-WebSocket-Extensions header does not match.");return}let m=u.headersList.get("Sec-WebSocket-Protocol");if(m!==null&&!Sq("sec-websocket-protocol",a.headersList).includes(m)){Ur(n,"Protocol was not set in the opening handshake.");return}u.socket.on("data",Zy),u.socket.on("close",Xy),u.socket.on("error",ew),No.open.hasSubscribers&&No.open.publish({address:u.socket.address(),protocol:m,extensions:g}),o(u,p)}})}function vq(e,t,r,n){if(!(Eq(e)||Iq(e)))if(!Bq(e))Ur(e,"Connection was closed before it was established."),e[fs]=ps.CLOSING;else if(e[rc]===tc.NOT_SENT){e[rc]=tc.PROCESSING;let o=new xq;t!==void 0&&r===void 0?(o.frameData=Buffer.allocUnsafe(2),o.frameData.writeUInt16BE(t,0)):t!==void 0&&r!==void 0?(o.frameData=Buffer.allocUnsafe(2+n),o.frameData.writeUInt16BE(t,0),o.frameData.write(r,2,"utf-8")):o.frameData=pq,e[jy].socket.write(o.createFrame(fq.CLOSE)),e[rc]=tc.SENT,e[fs]=ps.CLOSING}else e[fs]=ps.CLOSING}function Zy(e){this.ws[Ky].write(e)||this.pause()}function Xy(){let{ws:e}=this,{[jy]:t}=e;t.socket.off("data",Zy),t.socket.off("close",Xy),t.socket.off("error",ew);let r=e[rc]===tc.SENT&&e[zy],n=1005,o="",i=e[Ky].closingInfo;i&&!i.error?(n=i.code??1005,o=i.reason):e[zy]||(n=1006),e[fs]=ps.CLOSED,mq("close",e,(s,a)=>new Qq(s,a),{wasClean:r,code:n,reason:o}),No.close.hasSubscribers&&No.close.publish({websocket:e,code:n,reason:o})}function ew(e){let{ws:t}=this;t[fs]=ps.CLOSING,No.socketError.hasSubscribers&&No.socketError.publish(e),this.destroy()}tw.exports={establishWebSocketConnection:Dq,closeWebSocketConnection:vq}});var nw=b(($K,rw)=>{"use strict";var{createInflateRaw:Rq,Z_DEFAULT_WINDOWBITS:Nq}=w("node:zlib"),{isValidClientWindowBits:Fq}=hs(),{MessageSizeExceededError:Mq}=ie(),Uq=Buffer.from([0,0,255,255]),nc=Symbol("kBuffer"),ms=Symbol("kLength"),ng=class{#e;#t={};#r=0;constructor(t,r){this.#t.serverNoContextTakeover=t.has("server_no_context_takeover"),this.#t.serverMaxWindowBits=t.get("server_max_window_bits"),this.#r=r.maxPayloadSize}decompress(t,r,n){if(!this.#e){let o=Nq;if(this.#t.serverMaxWindowBits){if(!Fq(this.#t.serverMaxWindowBits)){n(new Error("Invalid server_max_window_bits"));return}o=Number.parseInt(this.#t.serverMaxWindowBits)}try{this.#e=Rq({windowBits:o})}catch(i){n(i);return}this.#e[nc]=[],this.#e[ms]=0,this.#e.on("data",i=>{if(this.#e[ms]+=i.length,this.#r>0&&this.#e[ms]>this.#r){n(new Mq),this.#e.removeAllListeners(),this.#e=null;return}this.#e[nc].push(i)}),this.#e.on("error",i=>{this.#e=null,n(i)})}this.#e.write(t),r&&this.#e.write(Uq),this.#e.flush(()=>{if(!this.#e)return;let o=Buffer.concat(this.#e[nc],this.#e[ms]);this.#e[nc].length=0,this.#e[ms]=0,n(null,o)})}};rw.exports={PerMessageDeflate:ng}});var hw=b((zK,dw)=>{"use strict";var{Writable:Lq}=w("node:stream"),Tq=w("node:assert"),{parserStates:Ke,opcodes:Fo,states:Pq,emptyBuffer:ow,sentCloseFrameState:iw}=Qn(),{kReadyState:_q,kSentClose:sw,kResponse:aw,kReceivedClose:Aw}=ls(),{channels:oc}=Hn(),{isValidStatusCode:Oq,isValidOpcode:Hq,failWebsocketConnection:At,websocketMessageReceived:cw,utf8Decode:Gq,isControlFrame:og,isTextBinaryFrame:ig,isContinuationFrame:qq}=hs(),{WebsocketFrameSend:lw}=ec(),{closeWebSocketConnection:uw}=rg(),{PerMessageDeflate:Yq}=nw(),{MessageSizeExceededError:sg}=ie();function Es(e,t,r){uw(e,t,r,Buffer.byteLength(r)),At(e,r)}var ag=class extends Lq{#e=[];#t=0;#r=0;#i=!1;#o=Ke.INFO;#n={};#s=[];#a;#c;#A;constructor(t,r,n={}){super(),this.ws=t,this.#a=r??new Map,this.#c=n.maxFragments??0,this.#A=n.maxPayloadSize??0,this.#a.has("permessage-deflate")&&this.#a.set("permessage-deflate",new Yq(r,n))}_write(t,r,n){this.#e.push(t),this.#r+=t.length,this.#i=!0,this.run(n)}#l(){return this.#A>0&&!og(this.#n.opcode)&&this.#n.payloadLength+this.#t>this.#A?(Es(this.ws,1009,"Payload size exceeds maximum allowed size"),!1):!0}run(t){for(;this.#i;)if(this.#o===Ke.INFO){if(this.#r<2)return t();let r=this.consume(2),n=(r[0]&128)!==0,o=r[0]&15,i=(r[1]&128)===128,s=!n&&o!==Fo.CONTINUATION,a=r[1]&127,A=r[0]&64,c=r[0]&32,l=r[0]&16;if(!Hq(o))return At(this.ws,"Invalid opcode received"),t();if(i)return At(this.ws,"Frame cannot be masked"),t();if(A!==0&&!this.#a.has("permessage-deflate")){At(this.ws,"Expected RSV1 to be clear.");return}if(c!==0||l!==0){At(this.ws,"RSV1, RSV2, RSV3 must be clear");return}if(s&&!ig(o)){At(this.ws,"Invalid frame type was fragmented.");return}if(ig(o)&&this.#s.length>0){At(this.ws,"Expected continuation frame");return}if(this.#n.fragmented&&s){At(this.ws,"Fragmented frame exceeded 125 bytes.");return}if((a>125||s)&&og(o)){At(this.ws,"Control frame either too large or fragmented");return}if(qq(o)&&this.#s.length===0&&!this.#n.compressed){At(this.ws,"Unexpected continuation frame");return}if(a<=125){if(this.#n.payloadLength=a,this.#o=Ke.READ_DATA,!this.#l())return}else a===126?this.#o=Ke.PAYLOADLENGTH_16:a===127&&(this.#o=Ke.PAYLOADLENGTH_64);ig(o)&&(this.#n.binaryType=o,this.#n.compressed=A!==0),this.#n.opcode=o,this.#n.masked=i,this.#n.fin=n,this.#n.fragmented=s}else if(this.#o===Ke.PAYLOADLENGTH_16){if(this.#r<2)return t();let r=this.consume(2);if(this.#n.payloadLength=r.readUInt16BE(0),this.#o=Ke.READ_DATA,!this.#l())return}else if(this.#o===Ke.PAYLOADLENGTH_64){if(this.#r<8)return t();let r=this.consume(8),n=r.readUInt32BE(0),o=r.readUInt32BE(4);if(n!==0||o>2**31-1){At(this.ws,"Received payload length > 2^31 bytes.");return}if(this.#n.payloadLength=o,this.#o=Ke.READ_DATA,!this.#l())return}else if(this.#o===Ke.READ_DATA){if(this.#r<this.#n.payloadLength)return t();let r=this.consume(this.#n.payloadLength);if(og(this.#n.opcode))this.#i=this.parseControlFrame(r),this.#o=Ke.INFO;else if(this.#n.compressed){this.#a.get("permessage-deflate").decompress(r,this.#n.fin,(n,o)=>{if(n){let i=n instanceof sg?1009:1007;Es(this.ws,i,n.message);return}if(this.writeFragments(o)){if(this.#A>0&&this.#t>this.#A){Es(this.ws,1009,new sg().message);return}if(!this.#n.fin){this.#o=Ke.INFO,this.#i=!0,this.run(t);return}cw(this.ws,this.#n.binaryType,this.consumeFragments()),this.#i=!0,this.#o=Ke.INFO,this.run(t)}}),this.#i=!1;break}else{if(!this.writeFragments(r))return;if(this.#A>0&&this.#t>this.#A){Es(this.ws,1009,new sg().message);return}!this.#n.fragmented&&this.#n.fin&&cw(this.ws,this.#n.binaryType,this.consumeFragments()),this.#o=Ke.INFO}}}consume(t){if(t>this.#r)throw new Error("Called consume() before buffers satiated.");if(t===0)return ow;if(this.#e[0].length===t)return this.#r-=this.#e[0].length,this.#e.shift();let r=Buffer.allocUnsafe(t),n=0;for(;n!==t;){let o=this.#e[0],{length:i}=o;if(i+n===t){r.set(this.#e.shift(),n);break}else if(i+n>t){r.set(o.subarray(0,t-n),n),this.#e[0]=o.subarray(t-n);break}else r.set(this.#e.shift(),n),n+=o.length}return this.#r-=t,r}writeFragments(t){return this.#c>0&&this.#s.length===this.#c?(Es(this.ws,1008,"Too many message fragments"),!1):(this.#t+=t.length,this.#s.push(t),!0)}consumeFragments(){let t=this.#s;if(t.length===1)return this.#t=0,t.shift();let r=Buffer.concat(t,this.#t);return this.#s=[],this.#t=0,r}parseCloseBody(t){Tq(t.length!==1);let r;if(t.length>=2&&(r=t.readUInt16BE(0)),r!==void 0&&!Oq(r))return{code:1002,reason:"Invalid status code",error:!0};let n=t.subarray(2);n[0]===239&&n[1]===187&&n[2]===191&&(n=n.subarray(3));try{n=Gq(n)}catch{return{code:1007,reason:"Invalid UTF-8",error:!0}}return{code:r,reason:n,error:!1}}parseControlFrame(t){let{opcode:r,payloadLength:n}=this.#n;if(r===Fo.CLOSE){if(n===1)return At(this.ws,"Received close frame with a 1-byte body."),!1;if(this.#n.closeInfo=this.parseCloseBody(t),this.#n.closeInfo.error){let{code:o,reason:i}=this.#n.closeInfo;return uw(this.ws,o,i,i.length),At(this.ws,i),!1}if(this.ws[sw]!==iw.SENT){let o=ow;this.#n.closeInfo.code&&(o=Buffer.allocUnsafe(2),o.writeUInt16BE(this.#n.closeInfo.code,0));let i=new lw(o);this.ws[aw].socket.write(i.createFrame(Fo.CLOSE),s=>{s||(this.ws[sw]=iw.SENT)})}return this.ws[_q]=Pq.CLOSING,this.ws[Aw]=!0,!1}else if(r===Fo.PING){if(!this.ws[Aw]){let o=new lw(t);this.ws[aw].socket.write(o.createFrame(Fo.PONG)),oc.ping.hasSubscribers&&oc.ping.publish({payload:t})}}else r===Fo.PONG&&oc.pong.hasSubscribers&&oc.pong.publish({payload:t});return!0}get closingInfo(){return this.#n.closeInfo}};dw.exports={ByteParser:ag}});var Ew=b((KK,mw)=>{"use strict";var{WebsocketFrameSend:Vq}=ec(),{opcodes:gw,sendHints:Mo}=Qn(),Jq=hd(),pw=Buffer[Symbol.species],Ag=class{#e=new Jq;#t=!1;#r;constructor(t){this.#r=t}add(t,r,n){if(n!==Mo.blob){let i=fw(t,n);if(!this.#t)this.#r.write(i,r);else{let s={promise:null,callback:r,frame:i};this.#e.push(s)}return}let o={promise:t.arrayBuffer().then(i=>{o.promise=null,o.frame=fw(i,n)}),callback:r,frame:null};this.#e.push(o),this.#t||this.#i()}async#i(){this.#t=!0;let t=this.#e;for(;!t.isEmpty();){let r=t.shift();r.promise!==null&&await r.promise,this.#r.write(r.frame,r.callback),r.callback=r.frame=null}this.#t=!1}};function fw(e,t){return new Vq(Wq(e,t)).createFrame(t===Mo.string?gw.TEXT:gw.BINARY)}function Wq(e,t){switch(t){case Mo.string:return Buffer.from(e);case Mo.arrayBuffer:case Mo.blob:return new pw(e);case Mo.typedArray:return new pw(e.buffer,e.byteOffset,e.byteLength)}}mw.exports={SendQueue:Ag}});var xw=b((jK,Sw)=>{"use strict";var{webidl:Y}=Le(),{URLSerializer:$q}=Ve(),{environmentSettingsObject:Iw}=et(),{staticPropertyDescriptors:Lr,states:Is,sentCloseFrameState:zq,sendHints:ic}=Qn(),{kWebSocketURL:Bw,kReadyState:cg,kController:Cw,kBinaryType:sc,kResponse:Qw,kSentClose:Kq,kByteParser:jq}=ls(),{isConnecting:Zq,isEstablished:Xq,isClosing:eY,isValidSubprotocol:tY,fireEvent:yw}=hs(),{establishWebSocketConnection:rY,closeWebSocketConnection:ww}=rg(),{ByteParser:nY}=hw(),{kEnumerableProperty:It,isBlobLike:bw}=j(),{getGlobalDispatcher:oY}=CA(),{types:kw}=w("node:util"),{ErrorEvent:iY,CloseEvent:sY}=vo(),{SendQueue:aY}=Ew(),ct=class e extends EventTarget{#e={open:null,error:null,close:null,message:null};#t=0;#r="";#i="";#o;constructor(t,r=[]){super(),Y.util.markAsUncloneable(this);let n="WebSocket constructor";Y.argumentLengthCheck(arguments,1,n);let o=Y.converters["DOMString or sequence<DOMString> or WebSocketInit"](r,n,"options");t=Y.converters.USVString(t,n,"url"),r=o.protocols;let i=Iw.settingsObject.baseUrl,s;try{s=new URL(t,i)}catch(A){throw new DOMException(A,"SyntaxError")}if(s.protocol==="http:"?s.protocol="ws:":s.protocol==="https:"&&(s.protocol="wss:"),s.protocol!=="ws:"&&s.protocol!=="wss:")throw new DOMException(`Expected a ws: or wss: protocol, got ${s.protocol}`,"SyntaxError");if(s.hash||s.href.endsWith("#"))throw new DOMException("Got fragment","SyntaxError");if(typeof r=="string"&&(r=[r]),r.length!==new Set(r.map(A=>A.toLowerCase())).size)throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");if(r.length>0&&!r.every(A=>tY(A)))throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");this[Bw]=new URL(s.href);let a=Iw.settingsObject;this[Cw]=rY(s,r,a,this,(A,c)=>this.#n(A,c),o),this[cg]=e.CONNECTING,this[Kq]=zq.NOT_SENT,this[sc]="blob"}close(t=void 0,r=void 0){Y.brandCheck(this,e);let n="WebSocket.close";if(t!==void 0&&(t=Y.converters["unsigned short"](t,n,"code",{clamp:!0})),r!==void 0&&(r=Y.converters.USVString(r,n,"reason")),t!==void 0&&t!==1e3&&(t<3e3||t>4999))throw new DOMException("invalid code","InvalidAccessError");let o=0;if(r!==void 0&&(o=Buffer.byteLength(r),o>123))throw new DOMException(`Reason must be less than 123 bytes; received ${o}`,"SyntaxError");ww(this,t,r,o)}send(t){Y.brandCheck(this,e);let r="WebSocket.send";if(Y.argumentLengthCheck(arguments,1,r),t=Y.converters.WebSocketSendData(t,r,"data"),Zq(this))throw new DOMException("Sent before connected.","InvalidStateError");if(!(!Xq(this)||eY(this)))if(typeof t=="string"){let n=Buffer.byteLength(t);this.#t+=n,this.#o.add(t,()=>{this.#t-=n},ic.string)}else kw.isArrayBuffer(t)?(this.#t+=t.byteLength,this.#o.add(t,()=>{this.#t-=t.byteLength},ic.arrayBuffer)):ArrayBuffer.isView(t)?(this.#t+=t.byteLength,this.#o.add(t,()=>{this.#t-=t.byteLength},ic.typedArray)):bw(t)&&(this.#t+=t.size,this.#o.add(t,()=>{this.#t-=t.size},ic.blob))}get readyState(){return Y.brandCheck(this,e),this[cg]}get bufferedAmount(){return Y.brandCheck(this,e),this.#t}get url(){return Y.brandCheck(this,e),$q(this[Bw])}get extensions(){return Y.brandCheck(this,e),this.#i}get protocol(){return Y.brandCheck(this,e),this.#r}get onopen(){return Y.brandCheck(this,e),this.#e.open}set onopen(t){Y.brandCheck(this,e),this.#e.open&&this.removeEventListener("open",this.#e.open),typeof t=="function"?(this.#e.open=t,this.addEventListener("open",t)):this.#e.open=null}get onerror(){return Y.brandCheck(this,e),this.#e.error}set onerror(t){Y.brandCheck(this,e),this.#e.error&&this.removeEventListener("error",this.#e.error),typeof t=="function"?(this.#e.error=t,this.addEventListener("error",t)):this.#e.error=null}get onclose(){return Y.brandCheck(this,e),this.#e.close}set onclose(t){Y.brandCheck(this,e),this.#e.close&&this.removeEventListener("close",this.#e.close),typeof t=="function"?(this.#e.close=t,this.addEventListener("close",t)):this.#e.close=null}get onmessage(){return Y.brandCheck(this,e),this.#e.message}set onmessage(t){Y.brandCheck(this,e),this.#e.message&&this.removeEventListener("message",this.#e.message),typeof t=="function"?(this.#e.message=t,this.addEventListener("message",t)):this.#e.message=null}get binaryType(){return Y.brandCheck(this,e),this[sc]}set binaryType(t){Y.brandCheck(this,e),t!=="blob"&&t!=="arraybuffer"?this[sc]="blob":this[sc]=t}#n(t,r){this[Qw]=t;let n=this[Cw]?.dispatcher?.webSocketOptions,o=n?.maxFragments,i=n?.maxPayloadSize,s=new nY(this,r,{maxFragments:o,maxPayloadSize:i});s.on("drain",AY),s.on("error",cY.bind(this)),t.socket.ws=this,this[jq]=s,this.#o=new aY(t.socket),this[cg]=Is.OPEN;let a=t.headersList.get("sec-websocket-extensions");a!==null&&(this.#i=a);let A=t.headersList.get("sec-websocket-protocol");A!==null&&(this.#r=A),yw("open",this)}};ct.CONNECTING=ct.prototype.CONNECTING=Is.CONNECTING;ct.OPEN=ct.prototype.OPEN=Is.OPEN;ct.CLOSING=ct.prototype.CLOSING=Is.CLOSING;ct.CLOSED=ct.prototype.CLOSED=Is.CLOSED;Object.defineProperties(ct.prototype,{CONNECTING:Lr,OPEN:Lr,CLOSING:Lr,CLOSED:Lr,url:It,readyState:It,bufferedAmount:It,onopen:It,onerror:It,onclose:It,close:It,onmessage:It,binaryType:It,send:It,extensions:It,protocol:It,[Symbol.toStringTag]:{value:"WebSocket",writable:!1,enumerable:!1,configurable:!0}});Object.defineProperties(ct,{CONNECTING:Lr,OPEN:Lr,CLOSING:Lr,CLOSED:Lr});Y.converters["sequence<DOMString>"]=Y.sequenceConverter(Y.converters.DOMString);Y.converters["DOMString or sequence<DOMString>"]=function(e,t,r){return Y.util.Type(e)==="Object"&&Symbol.iterator in e?Y.converters["sequence<DOMString>"](e):Y.converters.DOMString(e,t,r)};Y.converters.WebSocketInit=Y.dictionaryConverter([{key:"protocols",converter:Y.converters["DOMString or sequence<DOMString>"],defaultValue:()=>new Array(0)},{key:"dispatcher",converter:Y.converters.any,defaultValue:()=>oY()},{key:"headers",converter:Y.nullableConverter(Y.converters.HeadersInit)}]);Y.converters["DOMString or sequence<DOMString> or WebSocketInit"]=function(e){return Y.util.Type(e)==="Object"&&!(Symbol.iterator in e)?Y.converters.WebSocketInit(e):{protocols:Y.converters["DOMString or sequence<DOMString>"](e)}};Y.converters.WebSocketSendData=function(e){if(Y.util.Type(e)==="Object"){if(bw(e))return Y.converters.Blob(e,{strict:!1});if(ArrayBuffer.isView(e)||kw.isArrayBuffer(e))return Y.converters.BufferSource(e)}return Y.converters.USVString(e)};function AY(){this.ws[Qw].socket.resume()}function cY(e){let t,r;e instanceof sY?(t=e.reason,r=e.code):t=e.message,yw("error",this,()=>new iY("error",{error:e,message:t})),ww(this,r)}Sw.exports={WebSocket:ct}});var lg=b((ZK,Dw)=>{"use strict";function lY(e){return e.indexOf("\0")===-1}function uY(e){if(e.length===0)return!1;for(let t=0;t<e.length;t++)if(e.charCodeAt(t)<48||e.charCodeAt(t)>57)return!1;return!0}function dY(e){return new Promise(t=>{setTimeout(t,e).unref()})}Dw.exports={isValidLastEventId:lY,isASCIINumber:uY,delay:dY}});var Fw=b((XK,Nw)=>{"use strict";var{Transform:hY}=w("node:stream"),{isASCIINumber:vw,isValidLastEventId:Rw}=lg(),dr=[239,187,191],ug=10,ac=13,gY=58,pY=32,dg=class extends hY{state=null;checkBOM=!0;crlfCheck=!1;eventEndCheck=!1;buffer=null;pos=0;event={data:void 0,event:void 0,id:void 0,retry:void 0};constructor(t={}){t.readableObjectMode=!0,super(t),this.state=t.eventSourceSettings||{},t.push&&(this.push=t.push)}_transform(t,r,n){if(t.length===0){n();return}if(this.buffer?this.buffer=Buffer.concat([this.buffer,t]):this.buffer=t,this.checkBOM)switch(this.buffer.length){case 1:if(this.buffer[0]===dr[0]){n();return}this.checkBOM=!1,n();return;case 2:if(this.buffer[0]===dr[0]&&this.buffer[1]===dr[1]){n();return}this.checkBOM=!1;break;case 3:if(this.buffer[0]===dr[0]&&this.buffer[1]===dr[1]&&this.buffer[2]===dr[2]){this.buffer=Buffer.alloc(0),this.checkBOM=!1,n();return}this.checkBOM=!1;break;default:this.buffer[0]===dr[0]&&this.buffer[1]===dr[1]&&this.buffer[2]===dr[2]&&(this.buffer=this.buffer.subarray(3)),this.checkBOM=!1;break}for(;this.pos<this.buffer.length;){if(this.eventEndCheck){if(this.crlfCheck){if(this.buffer[this.pos]===ug){this.buffer=this.buffer.subarray(this.pos+1),this.pos=0,this.crlfCheck=!1;continue}this.crlfCheck=!1}if(this.buffer[this.pos]===ug||this.buffer[this.pos]===ac){this.buffer[this.pos]===ac&&(this.crlfCheck=!0),this.buffer=this.buffer.subarray(this.pos+1),this.pos=0,(this.event.data!==void 0||this.event.event||this.event.id||this.event.retry)&&this.processEvent(this.event),this.clearEvent();continue}this.eventEndCheck=!1;continue}if(this.buffer[this.pos]===ug||this.buffer[this.pos]===ac){this.buffer[this.pos]===ac&&(this.crlfCheck=!0),this.parseLine(this.buffer.subarray(0,this.pos),this.event),this.buffer=this.buffer.subarray(this.pos+1),this.pos=0,this.eventEndCheck=!0;continue}this.pos++}n()}parseLine(t,r){if(t.length===0)return;let n=t.indexOf(gY);if(n===0)return;let o="",i="";if(n!==-1){o=t.subarray(0,n).toString("utf8");let s=n+1;t[s]===pY&&++s,i=t.subarray(s).toString("utf8")}else o=t.toString("utf8"),i="";switch(o){case"data":r[o]===void 0?r[o]=i:r[o]+=`
|
|
45
|
+
${i}`;break;case"retry":vw(i)&&(r[o]=i);break;case"id":Rw(i)&&(r[o]=i);break;case"event":i.length>0&&(r[o]=i);break}}processEvent(t){t.retry&&vw(t.retry)&&(this.state.reconnectionTime=parseInt(t.retry,10)),t.id&&Rw(t.id)&&(this.state.lastEventId=t.id),t.data!==void 0&&this.push({type:t.event||"message",options:{data:t.data,lastEventId:this.state.lastEventId,origin:this.state.origin}})}clearEvent(){this.event={data:void 0,event:void 0,id:void 0,retry:void 0}}};Nw.exports={EventSourceStream:dg}});var Hw=b((e7,Ow)=>{"use strict";var{pipeline:fY}=w("node:stream"),{fetching:mY}=ss(),{makeRequest:EY}=wo(),{webidl:hr}=Le(),{EventSourceStream:IY}=Fw(),{parseMIMEType:BY}=Ve(),{createFastMessageEvent:CY}=vo(),{isNetworkError:Mw}=os(),{delay:QY}=lg(),{kEnumerableProperty:yn}=j(),{environmentSettingsObject:Uw}=et(),Lw=!1,Tw=3e3,Bs=0,Pw=1,Cs=2,yY="anonymous",wY="use-credentials",Uo=class e extends EventTarget{#e={open:null,error:null,message:null};#t=null;#r=!1;#i=Bs;#o=null;#n=null;#s;#a;constructor(t,r={}){super(),hr.util.markAsUncloneable(this);let n="EventSource constructor";hr.argumentLengthCheck(arguments,1,n),Lw||(Lw=!0,process.emitWarning("EventSource is experimental, expect them to change at any time.",{code:"UNDICI-ES"})),t=hr.converters.USVString(t,n,"url"),r=hr.converters.EventSourceInitDict(r,n,"eventSourceInitDict"),this.#s=r.dispatcher,this.#a={lastEventId:"",reconnectionTime:Tw};let o=Uw,i;try{i=new URL(t,o.settingsObject.baseUrl),this.#a.origin=i.origin}catch(A){throw new DOMException(A,"SyntaxError")}this.#t=i.href;let s=yY;r.withCredentials&&(s=wY,this.#r=!0);let a={redirect:"follow",keepalive:!0,mode:"cors",credentials:s==="anonymous"?"same-origin":"omit",referrer:"no-referrer"};a.client=Uw.settingsObject,a.headersList=[["accept",{name:"accept",value:"text/event-stream"}]],a.cache="no-store",a.initiator="other",a.urlList=[new URL(this.#t)],this.#o=EY(a),this.#c()}get readyState(){return this.#i}get url(){return this.#t}get withCredentials(){return this.#r}#c(){if(this.#i===Cs)return;this.#i=Bs;let t={request:this.#o,dispatcher:this.#s},r=n=>{Mw(n)&&(this.dispatchEvent(new Event("error")),this.close()),this.#A()};t.processResponseEndOfBody=r,t.processResponse=n=>{if(Mw(n))if(n.aborted){this.close(),this.dispatchEvent(new Event("error"));return}else{this.#A();return}let o=n.headersList.get("content-type",!0),i=o!==null?BY(o):"failure",s=i!=="failure"&&i.essence==="text/event-stream";if(n.status!==200||s===!1){this.close(),this.dispatchEvent(new Event("error"));return}this.#i=Pw,this.dispatchEvent(new Event("open")),this.#a.origin=n.urlList[n.urlList.length-1].origin;let a=new IY({eventSourceSettings:this.#a,push:A=>{this.dispatchEvent(CY(A.type,A.options))}});fY(n.body.stream,a,A=>{A?.aborted===!1&&(this.close(),this.dispatchEvent(new Event("error")))})},this.#n=mY(t)}async#A(){this.#i!==Cs&&(this.#i=Bs,this.dispatchEvent(new Event("error")),await QY(this.#a.reconnectionTime),this.#i===Bs&&(this.#a.lastEventId.length&&this.#o.headersList.set("last-event-id",this.#a.lastEventId,!0),this.#c()))}close(){hr.brandCheck(this,e),this.#i!==Cs&&(this.#i=Cs,this.#n.abort(),this.#o=null)}get onopen(){return this.#e.open}set onopen(t){this.#e.open&&this.removeEventListener("open",this.#e.open),typeof t=="function"?(this.#e.open=t,this.addEventListener("open",t)):this.#e.open=null}get onmessage(){return this.#e.message}set onmessage(t){this.#e.message&&this.removeEventListener("message",this.#e.message),typeof t=="function"?(this.#e.message=t,this.addEventListener("message",t)):this.#e.message=null}get onerror(){return this.#e.error}set onerror(t){this.#e.error&&this.removeEventListener("error",this.#e.error),typeof t=="function"?(this.#e.error=t,this.addEventListener("error",t)):this.#e.error=null}},_w={CONNECTING:{__proto__:null,configurable:!1,enumerable:!0,value:Bs,writable:!1},OPEN:{__proto__:null,configurable:!1,enumerable:!0,value:Pw,writable:!1},CLOSED:{__proto__:null,configurable:!1,enumerable:!0,value:Cs,writable:!1}};Object.defineProperties(Uo,_w);Object.defineProperties(Uo.prototype,_w);Object.defineProperties(Uo.prototype,{close:yn,onerror:yn,onmessage:yn,onopen:yn,readyState:yn,url:yn,withCredentials:yn});hr.converters.EventSourceInitDict=hr.dictionaryConverter([{key:"withCredentials",converter:hr.converters.boolean,defaultValue:()=>!1},{key:"dispatcher",converter:hr.converters.any}]);Ow.exports={EventSource:Uo,defaultReconnectionTime:Tw}});var Vw=b((t7,q)=>{"use strict";var bY=ao(),Gw=bi(),kY=Ao(),SY=_B(),xY=co(),DY=Fd(),vY=cC(),RY=fC(),qw=ie(),cc=j(),{InvalidArgumentError:Ac}=qw,Lo=rQ(),NY=Si(),FY=gh(),MY=PQ(),UY=mh(),LY=th(),TY=uA(),{getGlobalDispatcher:Yw,setGlobalDispatcher:PY}=CA(),_Y=QA(),OY=eA(),HY=tA();Object.assign(Gw.prototype,Lo);q.exports.Dispatcher=Gw;q.exports.Client=bY;q.exports.Pool=kY;q.exports.BalancedPool=SY;q.exports.Agent=xY;q.exports.ProxyAgent=DY;q.exports.EnvHttpProxyAgent=vY;q.exports.RetryAgent=RY;q.exports.RetryHandler=TY;q.exports.DecoratorHandler=_Y;q.exports.RedirectHandler=OY;q.exports.createRedirectInterceptor=HY;q.exports.interceptors={redirect:VQ(),retry:WQ(),dump:zQ(),dns:ZQ()};q.exports.buildConnector=NY;q.exports.errors=qw;q.exports.util={parseHeaders:cc.parseHeaders,headerNameToString:cc.headerNameToString};function Qs(e){return(t,r,n)=>{if(typeof r=="function"&&(n=r,r=null),!t||typeof t!="string"&&typeof t!="object"&&!(t instanceof URL))throw new Ac("invalid url");if(r!=null&&typeof r!="object")throw new Ac("invalid opts");if(r&&r.path!=null){if(typeof r.path!="string")throw new Ac("invalid opts.path");let s=r.path;r.path.startsWith("/")||(s=`/${s}`),t=new URL(cc.parseOrigin(t).origin+s)}else r||(r=typeof t=="object"?t:{}),t=cc.parseURL(t);let{agent:o,dispatcher:i=Yw()}=r;if(o)throw new Ac("unsupported opts.agent. Did you mean opts.client?");return e.call(i,{...r,origin:t.origin,path:t.search?`${t.pathname}${t.search}`:t.pathname,method:r.method||(r.body?"PUT":"GET")},n)}}q.exports.setGlobalDispatcher=PY;q.exports.getGlobalDispatcher=Yw;var GY=ss().fetch;q.exports.fetch=async function(t,r=void 0){try{return await GY(t,r)}catch(n){throw n&&typeof n=="object"&&Error.captureStackTrace(n),n}};q.exports.Headers=fn().Headers;q.exports.Response=os().Response;q.exports.Request=wo().Request;q.exports.FormData=Mi().FormData;q.exports.File=globalThis.File??w("node:buffer").File;q.exports.FileReader=gy().FileReader;var{setGlobalOrigin:qY,getGlobalOrigin:YY}=Mu();q.exports.setGlobalOrigin=qY;q.exports.getGlobalOrigin=YY;var{CacheStorage:VY}=yy(),{kConstruct:JY}=qA();q.exports.caches=new VY(JY);var{deleteCookie:WY,getCookies:$Y,getSetCookies:zY,setCookie:KY}=My();q.exports.deleteCookie=WY;q.exports.getCookies=$Y;q.exports.getSetCookies=zY;q.exports.setCookie=KY;var{parseMIMEType:jY,serializeAMimeType:ZY}=Ve();q.exports.parseMIMEType=jY;q.exports.serializeAMimeType=ZY;var{CloseEvent:XY,ErrorEvent:eV,MessageEvent:tV}=vo();q.exports.WebSocket=xw().WebSocket;q.exports.CloseEvent=XY;q.exports.ErrorEvent=eV;q.exports.MessageEvent=tV;q.exports.request=Qs(Lo.request);q.exports.stream=Qs(Lo.stream);q.exports.pipeline=Qs(Lo.pipeline);q.exports.connect=Qs(Lo.connect);q.exports.upgrade=Qs(Lo.upgrade);q.exports.MockClient=FY;q.exports.MockPool=UY;q.exports.MockAgent=MY;q.exports.mockErrors=LY;var{EventSource:rV}=Hw();q.exports.EventSource=rV});import To from"node:net";import nV from"node:dns";function lc(e){let t=String(e).toLowerCase().split("%")[0];if((t.match(/::/g)||[]).length>1)return null;let r=l=>{if(!l)return[];let u=l.split(":"),d=u.at(-1);if(d?.includes(".")){let h=d.split(".").map(Number);if(h.length!==4||h.some(g=>!Number.isInteger(g)||g<0||g>255))return null;u.splice(u.length-1,1,(h[0]<<8|h[1]).toString(16),(h[2]<<8|h[3]).toString(16))}return u.some(h=>!/^[0-9a-f]{1,4}$/.test(h))?null:u.map(h=>Number.parseInt(h,16))},[n,o]=t.split("::"),i=r(n),s=r(o);if(!i||!s)return null;let a=t.includes("::"),A=8-i.length-s.length;if(!a&&A!==0||a&&A<1)return null;let c=[...i,...Array(Math.max(0,A)).fill(0),...s];return c.length!==8?null:Uint8Array.from(c.flatMap(l=>[l>>8,l&255]))}function hg(e,t,r){let n=Math.floor(r/8),o=r%8;for(let s=0;s<n;s+=1)if(e[s]!==t[s])return!1;if(!o)return!0;let i=255<<8-o;return(e[n]&i)===(t[n]&i)}function gg(e){if(To.isIPv4(e)){let t=e.split(".").map(Number);return!(t[0]===0||t[0]===10||t[0]===127||t[0]>=224||t[0]===100&&t[1]>=64&&t[1]<=127||t[0]===169&&t[1]===254||t[0]===172&&t[1]>=16&&t[1]<=31||t[0]===192&&(t[1]===0||t[1]===2||t[1]===168)||t[0]===192&&t[1]===88&&t[2]===99||t[0]===198&&(t[1]===18||t[1]===19||t[1]===51)||t[0]===203&&t[1]===0&&t[2]===113)}if(To.isIPv6(e)){let t=lc(e);if(!t)return!1;let r=lc("::ffff:0:0");return hg(t,r,96)?gg([...t.slice(12)].join(".")):hg(t,lc("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([o,i])=>hg(t,lc(o),i)):!1}return!1}function iV(e){let t;try{t=new URL(String(e))}catch{return{ok:!1,error:`not a valid URL: ${String(e).slice(0,120)}`}}if(t.protocol!=="http:"&&t.protocol!=="https:")return{ok:!1,error:`refused protocol ${t.protocol} (only http/https)`};let r=t.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,"");if(oV.has(r)||r.endsWith(".localhost")||r.endsWith(".internal"))return{ok:!1,error:`refused internal host ${r}`};let n=To.isIP(r);return n!==0&&!gg(r)?{ok:!1,error:`refused private address ${r}`}:{ok:!0,url:t,host:r,isLiteralIp:n!==0}}async function Jw(e,{lookupFn:t=nV.promises.lookup}={}){let r=iV(e);if(!r.ok)return r;if(r.isLiteralIp)return{ok:!0,url:r.url};let n;try{n=await t(r.host,{all:!0,verbatim:!0})}catch{return{ok:!1,error:`refused: ${r.host} did not resolve`}}return!Array.isArray(n)||n.length===0||n.some(o=>!gg(o.address))?{ok:!1,error:`refused: ${r.host} resolves to a non-public address`}:{ok:!0,url:r.url,addresses:n}}async function Ww(){let e,t;try{let a=await Promise.resolve().then(()=>KF(Vw(),1));e=a.Agent,t=a.fetch}catch{return null}if(typeof e!="function"||typeof t!="function")return null;let r=a=>String(a).toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,""),n=new Map,o=a=>(Array.isArray(a)?a:[a]).map(A=>typeof A=="string"?{address:A}:A).filter(A=>A&&A.address).map(A=>({address:A.address,family:A.family||(To.isIPv6(A.address)?6:4)})),i=a=>{let A=r(a);if(To.isIP(A))return[{address:A,family:To.isIPv6(A)?6:4}];let c=n.get(A);if(!c||!c.length)throw new Error(`refused: unpinned host ${a} during pinned fetch`);return c},s=new e({connect:{lookup(a,A,c){let l;try{l=i(a)}catch(u){return c(u)}return A?.all?c(null,l):c(null,l[0].address,l[0].family)}}});return{dispatcher:s,fetch:(a,A={})=>t(a,{...A,dispatcher:s}),pin(a,A,c){n.set(r(a),o(typeof A=="string"?[{address:A,family:c}]:A))},resolve:i,async close(){try{await s.destroy()}catch{}}}}var oV,$w=pa(()=>{oV=new Set(["localhost","metadata.google.internal","metadata.goog"])});import{createHash as sV}from"node:crypto";function lV(e){let t=String(e||"").toLowerCase();return Zw.includes(t)||/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(t)}function uV(e){let t={};for(let[r,n]of Object.entries(e||{}))lV(r)||(t[r]=n);return t}function dV(e,t){if(!e)throw new Error(`HTTP redirect from ${t} missing Location`);let r=new URL(String(e),String(t));if(r.protocol!=="http:"&&r.protocol!=="https:")throw new Error(`HTTP redirect from ${t} used unsupported protocol ${r.protocol}`);return r.toString()}function hV(e,t){return new URL(String(e)).origin===new URL(String(t)).origin}function gV(e,t,r){let n={};for(let[A,c]of Object.entries(r||{}))n[A.toLowerCase()]=c;let o=Object.keys(n).filter(A=>/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(A)),s=[...new Set([...Zw,...o])].sort().map(A=>`${A}=${n[A]??""}`).join(`
|
|
46
|
+
`),a=sV("sha256").update(s).digest("hex").slice(0,32);return`${e} ${t} ${a}`}function pV(e,t){let r=Number(t);return Number.isFinite(r)&&r>0?Math.min(r*1e3,Kw):Math.min(250*2**e,Kw)+Math.floor(Math.random()*100)}async function mV(e,{fetchImpl:t,method:r,headers:n,body:o,timeoutMs:i,lookupFn:s,realFetch:a}){let A=new AbortController,c=setTimeout(()=>A.abort(),i),l=null,u=t;try{let d=String(e),h={...n||{}};for(let g=0;g<=jw;g+=1){let p=await u(d,{method:r,headers:h,body:o,signal:A.signal,redirect:"manual"}),m=await p.text(),f=null;if(m)try{f=JSON.parse(m)}catch{f=null}if(cV.has(p.status)){if(r!=="GET"&&r!=="HEAD"){let I=new Error(`HTTP ${p.status} ${r} ${d} redirected non-idempotent request`);throw I.status=p.status,I.body=f??m.slice(0,300),I}if(g===jw)throw new Error(`HTTP redirect loop for ${e}`);let B=dV(p.headers?.get?.("location"),d);if(!hV(B,d)){let I=await Jw(B,s?{lookupFn:s}:{});if(!I.ok){let Q=new Error(`HTTP redirect from ${d} ${I.error}`);throw Q.status=p.status,Q}h=uV(h),a&&I.addresses?.length&&(l||(l=await Ww()),l&&(l.pin(new URL(B).hostname,I.addresses[0].address,I.addresses[0].family),u=l.fetch))}d=B;continue}if(!p.ok){let B=new Error(`HTTP ${p.status} ${r} ${d}`);throw B.status=p.status,B.retryAfter=p.headers?.get?.("retry-after")??null,B.body=f??m.slice(0,300),B}return f??m}throw new Error(`HTTP redirect loop for ${e}`)}finally{clearTimeout(c),l&&await l.close()}}async function C(e,t={}){let r=t.fetchImpl||globalThis.fetch;if(typeof r!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let n=t.timeoutMs??12e3,o=(t.method||"GET").toUpperCase(),i={Accept:"application/json",...t.headers||{}},s=t.body;s!=null&&typeof s!="string"&&(i["Content-Type"]=i["Content-Type"]||"application/json",s=JSON.stringify(s));let a=Number.isInteger(t.retries)?Math.max(t.retries,0):AV,A=t.lookupFn,c=!t.fetchImpl,l=async()=>{let p;for(let m=0;m<=a;m++)try{return await mV(e,{fetchImpl:r,method:o,headers:i,body:s,timeoutMs:n,lookupFn:A,realFetch:c})}catch(f){p=f;let B=f?.status,E=f?.name==="AbortError",I=new Set([408,425,429]),Q=B!=null?I.has(B)||aV.has(B)&&zw.has(o):!E&&zw.has(o);if(m===a||!Q)throw f;await fV(pV(m,f?.retryAfter))}throw p};if(!(t.dedupe!==!1&&o==="GET"&&s==null))return l();let d=gV(o,e,i),h=pg.get(d);if(h)return h;let g=l().finally(()=>pg.delete(d));return pg.set(d,g),g}async function Fe(e){let t=Date.now();try{let r=await e();return{ok:!0,ms:Date.now()-t,data:r}}catch(r){return{ok:!1,ms:Date.now()-t,error:String(r.message||r),status:r.status??null}}}async function Po(e,t,r){let n=Array.from(e),o=Math.max(1,Math.min(Number(t)||1,n.length||1)),i=new Array(n.length),s=0;return await Promise.all(Array.from({length:o},async()=>{for(;s<n.length;){let a=s++;i[a]=await r(n[a],a)}})),i}var aV,zw,AV,Kw,Zw,cV,jw,pg,fV,M=pa(()=>{$w();aV=new Set([408,425,429,500,502,503,504]),zw=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),AV=2,Kw=4e3,Zw=["authorization","x-api-key","x-tensor-api-key","0x-api-key","api-key","cookie","proxy-authorization"],cV=new Set([301,302,303,307,308]),jw=3;pg=new Map;fV=e=>new Promise(t=>setTimeout(t,e))});function mg(e){return Xw.get(Number(e))||null}function eb(e,t=process.env){let r=mg(e);if(!r)return null;for(let n of r.rpcEnv){let o=(t[n]||"").trim();if(o)return o}return null}function tb(e){return Xw.has(Number(e))}var fg,Xw,rb=pa(()=>{fg={robinhood:{chainId:4663,name:"Robinhood Chain",rpcEnv:["RH_CHAIN_RPC"],evm:!0},ethereum:{chainId:1,name:"Ethereum",rpcEnv:["ETH_RPC_URL","ETHEREUM_RPC_URL","MAINNET_RPC_URL"],evm:!0},polygon:{chainId:137,name:"Polygon",rpcEnv:["POLYGON_RPC_URL","POLYGON_RPC"],evm:!0},arbitrum:{chainId:42161,name:"Arbitrum One",rpcEnv:["ARBITRUM_RPC_URL","ARB_RPC_URL"],evm:!0},base:{chainId:8453,name:"Base",rpcEnv:["BASE_RPC_URL"],evm:!0},hyperevm:{chainId:999,name:"HyperEVM",rpcEnv:["HYPEREVM_RPC_URL","HYPER_EVM_RPC"],evm:!0},bsc:{chainId:56,name:"BNB Smart Chain",rpcEnv:["BSC_RPC_URL","BNB_RPC_URL"],evm:!0},avalanche:{chainId:43114,name:"Avalanche C-Chain",rpcEnv:["AVALANCHE_RPC_URL","AVAX_RPC_URL"],evm:!0},optimism:{chainId:10,name:"OP Mainnet",rpcEnv:["OPTIMISM_RPC_URL","OP_RPC_URL"],evm:!0},abstract:{chainId:2741,name:"Abstract",rpcEnv:["ABSTRACT_RPC_URL","ABS_RPC_URL"],evm:!0},stable:{chainId:988,name:"Stable Mainnet",rpcEnv:["STABLE_RPC_URL","STABLE_RPC"],evm:!0}},Xw=new Map(Object.values(fg).map(e=>[e.chainId,e]))});var dc={};$F(dc,{PUBLIC_RPC_FALLBACKS:()=>Ig,erc20Allowance:()=>Qg,erc20BalanceOf:()=>ws,resolveRpcUrl:()=>Bg,rpcBlockNumber:()=>ys,rpcCall:()=>V,rpcChainId:()=>Cg,rpcGasPrice:()=>yV,rpcGetBalance:()=>wn,rpcHealth:()=>_o,rpcHealthAll:()=>yg,transactionReceipt:()=>bs});import{Interface as EV,getAddress as IV}from"ethers";function Tr(e,t){try{return IV(e).toLowerCase()}catch{throw new Error(`${t} must be a valid EVM address`)}}function BV(e){let t=String(e||"").trim();if(!/^0x[0-9a-fA-F]{64}$/.test(t))throw new Error("txHash must be a 32-byte hex transaction hash");return t.toLowerCase()}function Eg(e){return e==null?null:Number.parseInt(String(e),16)}function Bg(e,{rpcUrl:t,env:r=process.env}={}){if(t)return t;let n=eb(e,r);return n||Ig[Number(e)]||null}function QV(e){let t=String(e||""),r=t.toLowerCase();if(t!==t.trim()||!/^[a-zA-Z0-9_]+$/.test(t)||!CV.test(r))throw new Error(`evm-rpc: ${t} refused \u2014 @oracle-agent/oracle is prepare-only (read RPC only; no broadcast/sign)`);return r}async function V(e,t,r=[],n={}){let o=String(t||"");QV(o);let i=Bg(e,n);if(!i)throw new Error(`No RPC URL for chainId ${e} (set env from chain registry rpcEnv or pass rpcUrl)`);let a=await C(i,{method:"POST",body:{jsonrpc:"2.0",id:1,method:t,params:r},fetchImpl:n.fetchImpl,timeoutMs:n.timeoutMs??12e3});if(a?.error){let A=new Error(a.error.message||JSON.stringify(a.error));throw A.code=a.error.code,A}return a.result}async function _o(e,t={}){let r=await V(e,"eth_blockNumber",[],t),n=parseInt(r,16),o=await V(e,"eth_chainId",[],t),i=parseInt(o,16);return{ok:Number.isFinite(n)&&i===Number(e),chainId:Number(e),reportedChainId:i,blockNumber:n,name:mg(e)?.name||null}}async function ys(e,t={}){let r=await V(e,"eth_blockNumber",[],t);return parseInt(r,16)}async function Cg(e,t={}){let r=await V(e,"eth_chainId",[],t);return parseInt(r,16)}async function yV(e,t={}){let r=await V(e,"eth_gasPrice",[],t);if(r==null)return null;try{return BigInt(r)}catch{return null}}async function wn(e,t,r={}){if(!t)throw new Error("rpcGetBalance requires address");let n=await V(e,"eth_getBalance",[t,"latest"],r);return{chainId:Number(e),address:t,balanceWei:BigInt(n).toString(),balanceHex:n}}async function Qg(e={},t={}){let r=Number(e.chainId??t.chainId??1),n=Tr(e.token||e.tokenAddress,"token"),o=Tr(e.owner,"owner"),i=Tr(e.spender,"spender"),s=uc.encodeFunctionData("allowance",[o,i]),a=await V(r,"eth_call",[{to:n,data:s},e.blockTag||"latest"],t),A=uc.decodeFunctionResult("allowance",a),c=BigInt(A[0]);return{chainId:r,token:n,owner:o,spender:i,allowance:c.toString(),allowanceHex:`0x${c.toString(16)}`,blockTag:e.blockTag||"latest"}}async function ws(e={},t={}){let r=Number(e.chainId??t.chainId??1),n=Tr(e.token||e.tokenAddress,"token"),o=Tr(e.account||e.owner||e.address,"account"),i=uc.encodeFunctionData("balanceOf",[o]),s=await V(r,"eth_call",[{to:n,data:i},e.blockTag||"latest"],t),a=uc.decodeFunctionResult("balanceOf",s),A=BigInt(a[0]);return{chainId:r,token:n,account:o,balance:A.toString(),balanceHex:`0x${A.toString(16)}`,blockTag:e.blockTag||"latest"}}async function bs(e={},t={}){let r=Number(e.chainId??t.chainId??1),n=BV(e.txHash||e.hash||e.transactionHash),o=await V(r,"eth_getTransactionReceipt",[n],t);if(!o)return{ok:!1,chainId:r,txHash:n,status:"pending",receipt:null,reason:"receipt pending"};let i=Eg(o.status),s=i===1,a=i===1?"success":i===0?"reverted":"unknown",A=s?null:a==="reverted"?"transaction reverted":"unknown receipt status",c=e.expectedTo?Tr(e.expectedTo,"expectedTo"):null,l=o.to?Tr(o.to,"receipt.to"):null;return c&&l!==c&&(s=!1,A=`to mismatch: expected ${c}, got ${l||"null"}`),{ok:s,chainId:r,txHash:n,status:a,reason:A,statusCode:i,to:l,from:o.from?Tr(o.from,"receipt.from"):null,blockNumber:Eg(o.blockNumber),transactionIndex:Eg(o.transactionIndex),logs:Array.isArray(o.logs)?o.logs:[],receipt:o}}async function yg(e={}){let t=e.chainIds||Object.values(fg).map(n=>n.chainId),r={};return await Promise.all(t.map(async n=>{if(!tb(n)&&!Ig[n]&&!Bg(n,e)){r[n]={ok:!1,error:"no rpc configured",chainId:n};return}try{r[n]=await _o(n,e)}catch(o){r[n]={ok:!1,chainId:n,error:String(o.message||o)}}})),r}var uc,Ig,CV,De=pa(()=>{M();rb();uc=new EV(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);Ig={1:"https://ethereum.publicnode.com",137:"https://polygon-bor-rpc.publicnode.com",42161:"https://arbitrum-one-rpc.publicnode.com",8453:"https://base-rpc.publicnode.com",10:"https://optimism-rpc.publicnode.com",988:"https://rpc.stable.xyz",56:"https://bsc-rpc.publicnode.com",43114:"https://avalanche-c-chain-rpc.publicnode.com",999:"https://rpc.hyperliquid.xyz/evm",2741:"https://api.mainnet.abs.xyz",4663:"https://rpc.mainnet.chain.robinhood.com"};CV=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/});De();import{Interface as hb,getAddress as Ss,isAddress as JV}from"ethers";M();var wV="https://api.dexscreener.com",bV=Object.freeze({1:"ethereum",10:"optimism",56:"bsc",137:"polygon",8453:"base",42161:"arbitrum",43114:"avalanche",999:"hyperevm",4663:"robinhood"}),Mt=e=>String(e??"").toLowerCase(),kV=e=>Array.isArray(e)?e:e==null?[]:[e];function SV(e,t,r){let n=Mt(t),o=Mt(r),i=Mt(e?.baseToken?.address),s=Mt(e?.quoteToken?.address);return i===n&&s===o||i===o&&s===n}function xV(e){let t=Number(e?.liquidity?.usd);return Number.isFinite(t)&&t>=0?t:null}function hc(e={}){return(e.baseUrl||process.env.DEXSCREENER_API_URL||wV).replace(/\/$/,"")}async function nb(e={}){let r=(await C(`${hc(e)}/latest/dex/search?q=USDC`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??12e3}))?.pairs?.length||0;return{ok:r>0,pairSample:r}}async function bn(e,t={}){if(!e)throw new Error("tokenAddress required");return C(`${hc(t)}/latest/dex/tokens/${e}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function ks(e,t={}){if(!e)throw new Error("query required");return C(`${hc(t)}/latest/dex/search?q=${encodeURIComponent(e)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function ob(e,t,r={}){if(!e||!t)throw new Error("chainId and pairAddress required");return C(`${hc(r)}/latest/dex/pairs/${e}/${t}`,{fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3})}async function gc({chainId:e,tokenA:t,tokenB:r,dexIds:n=[]}={},o={}){if(e==null||!t||!r)throw new Error("chainId, tokenA, and tokenB required");let i=Mt(bV[Number(e)]||e),s=new Set(kV(n).filter(Boolean).map(Mt)),a=[...new Set([t,r].map(d=>String(d)).filter(Boolean))],A=await Promise.allSettled(a.map(d=>bn(d,{...o,baseUrl:o.dexscreenerBaseUrl,timeoutMs:o.dexscreenerTimeoutMs??Math.min(Number(o.timeoutMs??4e3),4e3)}))),c=new Set,l=[];for(let d of A)if(d.status==="fulfilled")for(let h of d.value?.pairs||d.value?.data?.pairs||[]){let g=`${Mt(h?.chainId)}:${Mt(h?.dexId)}:${Mt(h?.pairAddress)}`;c.has(g)||(c.add(g),l.push(h))}return l.filter(d=>Mt(d?.chainId)===i).filter(d=>SV(d,t,r)).filter(d=>!s.size||s.has(Mt(d?.dexId))).map(d=>({pairAddress:d.pairAddress??null,dexId:d.dexId??null,chainId:d.chainId??null,liquidityUsd:xV(d),pairCreatedAt:d.pairCreatedAt??null})).filter(d=>d.liquidityUsd!=null).sort((d,h)=>h.liquidityUsd-d.liquidityUsd)[0]??null}import{createHash as FV,createHmac as ab,timingSafeEqual as MV}from"node:crypto";import{readFileSync as vV}from"node:fs";import{homedir as RV}from"node:os";import{join as pc}from"node:path";function NV(){if(process.env.ORACLE_TEST_ISOLATE_SECRETS==="1"){let r=(process.env.ORACLE_EXEC_ENV_FILE||"").trim();return r?[r]:[]}let e=(process.env.ORACLE_EXEC_ENV_FILE||process.env.MAD_EXEC_ENV_FILE||"").trim(),t=RV();if(process.env.ORACLE_PUBLIC_DESKTOP==="1"){let r=(process.env.ORACLE_CONFIG_DIR||pc(t,".config","oracle")).trim();return[e,pc(r,"exec.env")].filter(Boolean)}return[e,pc(t,".config","oracle","exec.env"),pc(t,".config","mad-desk","exec.env")].filter(Boolean)}function ib(e,t,r){let n=e??process.env[t]??process.env[r];if(!String(n||"").trim())for(let o of NV())try{let i=vV(o,"utf8"),s=i.match(new RegExp(`^${t}=(.*)$`,"m"))||i.match(new RegExp(`^${r}=(.*)$`,"m"));if(s&&(n=s[1].trim(),n))break}catch{}if(!String(n||"").trim())throw new Error(`${t} required for attestation. Set it in the environment, or place ${t}=<value> in ~/.config/oracle/exec.env`);return n}var fc=100,sb=2e4;function mc(e){return Array.isArray(e)?`[${e.map(mc).join(",")}]`:e&&typeof e=="object"?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${mc(e[t])}`).join(",")}}`:JSON.stringify(e??null)}function Ab(e,{required:t=!1}={}){try{return ib(e,"ORACLE_ROUTE_ATTESTATION_SECRET","MAD_ROUTE_ATTESTATION_SECRET")}catch(r){if(t)throw r;return null}}function bg(e){let{signature:t,...r}=e;return r}function cb(e,{secret:t}={}){let r=Ab(t);return r?{...e,signature:ab("sha256",r).update(mc(bg(e))).digest("hex")}:e}function UV(e){let t=String(e||"").toLowerCase();if(!/^0x[0-9a-f]+$/.test(t)||t.length<10||t.length%2!==0)throw new Error("auto-slippage calldata must be even-length hex with a selector");return FV("sha256").update(Buffer.from(t.slice(2),"hex")).digest("hex")}function Qe(e,{chainId:t,venue:r,data:n,secret:o}={}){if(!e||e.mode!=="auto")throw new Error("bounded auto-slippage guard required");if(Number(e.chainId)!==Number(t))throw new Error("auto-slippage guard chain mismatch");if(String(e.venue).toLowerCase()!==String(r||"").toLowerCase())throw new Error("auto-slippage guard venue mismatch");let i=Ab(o);if(i){let h=ab("sha256",i).update(mc(bg(e))).digest("hex");if(!LV(e.signature,h))throw new Error("auto-slippage guard signature mismatch \u2014 refusing to bind a guard this Oracle did not issue")}let s=Number(e.selectedBps),a=Number(e.capBps);if(!Number.isInteger(s)||s<0||s>fc||!Number.isInteger(a)||a<0||a>fc||s>a)throw new Error("auto-slippage guard bounds are invalid");let A=BigInt(e.quoteAmountOut??0),c=BigInt(e.minAmountOut??0);if(A<=0n||c<=0n)throw new Error("auto-slippage guard amounts must be positive");let l=A*BigInt(1e4-s),u=l/10000n;if(l%10000n!==0n&&(u+=1n),c<u)throw new Error("auto-slippage guard is under-protected relative to its quote");let d=PV(n);if(d!=null&&d!==c)throw new Error(`auto-slippage: calldata encodes floor ${d}, not the guard floor ${c} \u2014 refusing to bind`);return cb({...bg(e),calldataHash:UV(n)},{secret:o})}function LV(e,t){let r=Buffer.from(String(e??""),"utf8"),n=Buffer.from(String(t??""),"utf8");return r.length!==n.length||r.length===0?!1:MV(r,n)}function wg(e,t=0){let r=Number(e);return Number.isFinite(r)?r:t}function TV(e){let t=e==null?fc:Number(e);if(!Number.isInteger(t)||t<0)throw new Error("auto-slippage cap must be a non-negative integer bps value");return Math.min(t,fc)}function je({liquidityUsd:e,priceChange5m:t=0,quoteAgeMs:r=0,crossChain:n=!1,requestedCapBps:o}={}){let i=wg(e,0),s=i>0?i>=25e4?5:i>=1e5?10:i>=5e4?20:i>=1e4?40:70:n?30:10,a=Math.min(60,Math.abs(wg(t,0))*2),A=Math.min(40,Math.floor(Math.max(0,wg(r,0))/5e3)*5),c=Math.max(25,Math.ceil(20+s+a+A)),l=TV(o);return{mode:"auto",requiredBps:c,selectedBps:Math.min(c,l),capBps:l,executable:c<=l}}function kg({chainId:e,venue:t,quoteAmountOut:r,liquidityUsd:n,priceChange5m:o=0,quoteAgeMs:i=0,crossChain:s=!1,requestedCapBps:a,quotedAtMs:A=Date.now(),ttlMs:c=sb,secret:l}={}){let u=BigInt(r??0);if(u<=0n)throw new Error("auto-slippage guard requires positive quoteAmountOut");let d=je({liquidityUsd:n,priceChange5m:o,quoteAgeMs:i,crossChain:s,requestedCapBps:a});if(!d.executable)throw new Error(`auto-slippage requires ${d.requiredBps} bps above hard/requested cap ${d.capBps}; route blocked`);let h=Number(A);if(!Number.isFinite(h))throw new Error("auto-slippage: quotedAtMs must be a finite number");let g=Math.min(3e4,Math.max(1e3,Number(c)||sb)),p=u*BigInt(1e4-d.selectedBps),m=p/10000n;if(p%10000n!==0n&&(m+=1n),m>u&&(m=u),u>0n&&m<=0n)throw new Error(`auto-slippage: quote ${u} is too small to express a ${d.selectedBps} bps floor without rounding to zero`);let f=Number((u-m)*10000n/(u===0n?1n:u));if(f>d.capBps)throw new Error(`auto-slippage: realised floor implies ${f} bps, above cap ${d.capBps} \u2014 refusing to issue a guard weaker than advertised`);return cb({mode:"auto",chainId:Number(e),venue:String(t||"unknown"),quoteAmountOut:u.toString(),minAmountOut:m.toString(),requiredBps:d.requiredBps,selectedBps:d.selectedBps,capBps:d.capBps,quotedAtMs:h,expiresAtMs:h+g},{secret:l})}function PV(e){let t=String(e||"");if(!/^0x[0-9a-fA-F]+$/.test(t)||t.length<10||t.length%2!==0)return null;let r=t.slice(0,10).toLowerCase(),n=[];for(let i=10;i+64<=t.length;i+=64)n.push(t.slice(i,i+64));let o=i=>n[i]==null?null:BigInt("0x"+n[i]);switch(r){case"0x414bf389":return o(6);case"0x04e45aaf":return o(5);case"0xc04b8d59":{let i=o(0);if(i==null)return null;let s=Number(i)/32;return!Number.isInteger(s)||s<0?null:o(s+4)}case"0xb858183f":{let i=o(0);if(i==null)return null;let s=Number(i)/32;return!Number.isInteger(s)||s<0?null:o(s+3)}case"0xa026383e":return o(6);case"0x38ed1739":case"0x5c11d795":return o(1);case"0x7ff36ab5":case"0xb6f9de95":return o(0);case"0x18cbafe5":case"0x791ac947":return o(1);default:return null}}function ce(e,{chainId:t,venue:r,amountOut:n,liquidityUsd:o,priceChange5m:i,crossChain:s,requestedCapBps:a,quotedAtMs:A=Date.now(),ttlMs:c}={}){let l=kg({chainId:t,venue:r,quoteAmountOut:n,liquidityUsd:o,priceChange5m:i,crossChain:s,requestedCapBps:a,quotedAtMs:A,ttlMs:c});return{...e,autoSlippage:l,amountOutMinimum:l.minAmountOut}}import{createHash as _V,createHmac as OV,timingSafeEqual as w7}from"node:crypto";var HV=2,GV=300*1e3,b7=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})();function Sg(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(Sg).join(",")}]`:`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${Sg(e[r])}`).join(",")}}`}function lb(e){let t=String(e?.ORACLE_STAMP_HMAC_SECRET||"").trim();return t.length>=16?t:""}function ub(e=process.env){return lb(process.env)||lb(e)}function qV(e){let{oraclePrepared:t,prepareHash:r,prepareMac:n,note:o,...i}=e||{};return i}function YV(e){let t=qV(e);return _V("sha256").update(Sg(t)).digest("hex")}function VV(e,t=ub()){return t?OV("sha256",t).update(String(e)).digest("hex"):""}function L(e,{provider:t,kind:r,env:n=process.env}={}){if(!e||typeof e!="object")throw new Error("stampPrepared: payload object required");let o={...e,provider:e.provider||t,kind:e.kind||r,requiresUserSignature:e.requiresUserSignature!==!1,signingReady:!1,broadcastReady:!1,executionReady:!1};if(!o.provider)throw new Error("stampPrepared: provider required");if(!o.kind)throw new Error("stampPrepared: kind required");let i=Date.now(),s=i+GV,A={...o,preparedAt:i,expiresAt:s,prepareVersion:HV},c=YV(A),l=ub(n),u=l?VV(c,l):void 0,d={...A,oraclePrepared:!0,prepareHash:c};return u&&(d.prepareMac=u),d}var lt={1:{name:"ethereum",quoter:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",router:"0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45",weth:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",usdc:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},8453:{name:"base",quoter:"0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a",router:"0x2626664c2603336E57B271c5C0b26F421741e481",weth:"0x4200000000000000000000000000000000000006",usdc:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},42161:{name:"arbitrum",quoter:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",router:"0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45",weth:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",usdc:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831"},4663:{name:"robinhood",quoter:"0x33e885ed0ec9bf04ecfb19341582aadcb4c8a9e7",router:"0xcaf681a66d020601342297493863e78c959e5cb2",weth:"0x0bd7d308f8e1639fab988df18a8011f41eacad73",usdc:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168"},999:{name:"hyperevm",weth:"0x5555555555555555555555555555555555555555",usdc:"0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb"},10:{name:"optimism",quoter:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",router:"0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45",weth:"0x4200000000000000000000000000000000000006",usdc:"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85"},56:{name:"bsc",quoter:"0x78D78E420Da98ad378D7799bE8f4AF69033EB077",router:"0xB971eF87ede563556b2ED4b1C0b0019111Dd85d2",weth:"0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c",usdc:"0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d"},137:{name:"polygon",quoter:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",router:"0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45",weth:"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270",usdc:"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"},43114:{name:"avalanche",quoter:"0xbe0F5544EC67e9B3b2D979aaA43f18Fd87E6257F",router:"0xbb00FF08d01D300023C629E8fFfFcb65A5a578cE",weth:"0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7",usdc:"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"}},WV=[100,500,3e3,1e4],Ec=new hb(["function quoteExactInputSingle((address tokenIn, address tokenOut, uint256 amountIn, uint24 fee, uint160 sqrtPriceLimitX96) params) returns (uint256 amountOut, uint160 sqrtPriceX96After, uint32 initializedTicksCrossed, uint256 gasEstimate)","function quoteExactInput(bytes path, uint256 amountIn) returns (uint256 amountOut, uint160[] sqrtPriceX96AfterList, uint32[] initializedTicksCrossedList, uint256 gasEstimate)"]),db=new hb(["function exactInputSingle((address tokenIn,address tokenOut,uint24 fee,address recipient,uint256 amountIn,uint256 amountOutMinimum,uint160 sqrtPriceLimitX96) params) payable returns (uint256 amountOut)","function multicall(uint256 deadline,bytes[] data) payable returns (bytes[] results)"]),gb="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",pb="0x0000000000000000000000000000000000000000",xg=[100,500,2500,1e4],$V={56:{pancakeswap:{name:"pancakeswap",quoter:"0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997",router:"0x13f4EA83D0bd40E75C8222255bc855a974568Dd4",feeTiers:xg}},8453:{pancakeswap:{name:"pancakeswap",quoter:"0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997",router:"0x13f4EA83D0bd40E75C8222255bc855a974568Dd4",feeTiers:xg}},42161:{pancakeswap:{name:"pancakeswap",quoter:"0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997",router:"0x13f4EA83D0bd40E75C8222255bc855a974568Dd4",feeTiers:xg}},999:{hyperswap:{name:"hyperswap",quoter:"0x03A918028f22D9E1473B7959C927AD7425A45C7C",router:"0x4E2960a8cd19B467b82d26D83fAcb0fAE26b094D"}}};function vg(e,t){let r=Number(e),n=lt[r];if(!n)throw new Error(`uniswap-v3: unsupported chainId ${e} (supported: ${Object.keys(lt).join(", ")})`);let o=$V[r]||{};if(!t){if(!n.quoter||!n.router){let A=Object.keys(o).join(", ")||"none registered";throw new Error(`uniswap-v3: chain ${r} (${n.name}) has no canonical Uniswap v3 deployment -- name a venue explicitly (known: ${A})`)}return{chainId:r,venue:n.name,...n}}let i=String(t).toLowerCase();if(i===n.name&&n.quoter&&n.router)return{chainId:r,venue:n.name,...n};let s=o,a=s[i];if(!a){let A=[...n.quoter&&n.router?[n.name]:[],...Object.keys(s)].join(", ");throw new Error(`uniswap-v3: unknown venue "${t}" on chain ${r} (known: ${A})`)}return{chainId:r,venue:i,...n,quoter:a.quoter,router:a.router,feeTiers:a.feeTiers||null}}function Dg(e,t){let r=lt[Number(t)];if(!e||e===gb||e===pb||/^eth$/i.test(String(e)))return Ss(r.weth);let n=String(e);if(/^weth$/i.test(n))return Ss(r.weth);if(/^usdc$/i.test(n))return Ss(r.usdc);if(!JV(n))throw new Error(`invalid token address: ${e}`);return Ss(n)}function zV(e){let t=String(e||"uniswap").toLowerCase();return t==="uniswap"?["uniswap-v3","uniswap"]:t==="pancakeswap"?["pancakeswap-v3","pancakeswap"]:t==="hyperswap"?["hyperswap-v3","hyperswap"]:[t,`${t}-v3`]}function KV(e,t){if(e.length!==t.length+1)throw new Error("path: fees.length must be tokens.length - 1");let r="0x";for(let n=0;n<t.length;n++)r+=e[n].slice(2).toLowerCase(),r+=Number(t[n]).toString(16).padStart(6,"0");return r+=e[e.length-1].slice(2).toLowerCase(),r}async function Oo(e={},t={}){let{chainId:r,quoter:n,router:o,feeTiers:i}=vg(e.chainId??8453,e.venue),s=Dg(e.tokenIn||"WETH",r),a=Dg(e.tokenOut||lt[r].usdc,r),A=BigInt(e.amountIn??0);if(A<=0n)throw new Error("amountIn required (raw base units)");let c=i&&i.length?i:WV,l=e.fee!=null?[Number(e.fee)]:e.tryFees===!1?[c[Math.min(2,c.length-1)]]:[...c],u=[],d=null;for(let p of l){let m=Ec.encodeFunctionData("quoteExactInputSingle",[{tokenIn:s,tokenOut:a,amountIn:A,fee:p,sqrtPriceLimitX96:0n}]);try{let f=await V(r,"eth_call",[{to:n,data:m},"latest"],t);if(!f||f==="0x"){u.push({fee:p,ok:!1,error:"empty result"});continue}let B=Ec.decodeFunctionResult("quoteExactInputSingle",f),E={fee:p,ok:!0,amountOut:B[0].toString(),sqrtPriceX96After:B[1].toString(),initializedTicksCrossed:Number(B[2]),gasEstimate:B[3].toString()};u.push(E),(!d||BigInt(E.amountOut)>BigInt(d.amountOut))&&(d=E)}catch(f){u.push({fee:p,ok:!1,error:String(f.message||f).slice(0,160)})}}if(!d){let p=u.map(m=>`${m.fee}:${m.error||"fail"}`).join("; ");throw new Error(`uniswap-v3 quote failed chain=${r}: ${p}`)}let h=e.liquidityUsd==null?await gc({chainId:r,tokenA:s,tokenB:a,dexIds:zV(e.venue)},t).catch(()=>null):null,g=e.liquidityUsd??h?.liquidityUsd??null;return ce({venue:"uniswap-v3",chainId:r,chain:lt[r].name,quoter:n,tokenIn:s,tokenOut:a,amountIn:A.toString(),fee:d.fee,amountOut:d.amountOut,gasEstimate:d.gasEstimate,liquidityUsd:g,liquiditySource:h,sqrtPriceX96After:d.sqrtPriceX96After,initializedTicksCrossed:d.initializedTicksCrossed,triedFees:u,best:!0},{chainId:r,venue:o,amountOut:d.amountOut,liquidityUsd:g,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps})}async function fb(e={},t={}){let{chainId:r,quoter:n,router:o}=vg(e.chainId??8453),i=(e.tokens||[]).map(d=>Dg(d,r)),s=(e.fees||[]).map(Number);if(i.length<2)throw new Error("tokens[] need at least 2 addresses");let a=BigInt(e.amountIn??0);if(a<=0n)throw new Error("amountIn required");let A=KV(i,s),c=Ec.encodeFunctionData("quoteExactInput",[A,a]),l=await V(r,"eth_call",[{to:n,data:c},"latest"],t),u=Ec.decodeFunctionResult("quoteExactInput",l);return ce({venue:"uniswap-v3",chainId:r,chain:lt[r].name,quoter:n,tokens:i,fees:s,path:A,amountIn:a.toString(),amountOut:u[0].toString(),gasEstimate:u[3].toString()},{chainId:r,venue:o,amountOut:u[0].toString(),liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps})}async function Rg(e={},t={}){let r=Number(e.chainId??8453),n=e.amountIn??"1000000000000000",o=await Oo({chainId:r,tokenIn:lt[r].weth,tokenOut:lt[r].usdc,amountIn:n,fee:e.fee},t),i=Number(o.amountOut)/1e6;return{...o,amountOutUsdc:i,pair:"WETH/USDC"}}async function mb(e={},t={}){let r=Number(e.chainId??8453),n=vg(r,e.venue),o=Ss(e.recipient),i=String(e.tokenIn||"WETH"),s=!e.tokenIn||i===gb||i===pb||/^eth$/i.test(i),a=await Oo(e,t),A=db.encodeFunctionData("exactInputSingle",[{tokenIn:a.tokenIn,tokenOut:a.tokenOut,fee:a.fee,recipient:o,amountIn:BigInt(a.amountIn),amountOutMinimum:BigInt(a.amountOutMinimum),sqrtPriceLimitX96:0n}]),c=Math.min(600,Math.max(30,Number(e.deadlineSeconds??300))),u=Number(t.nowSeconds??Math.floor(Date.now()/1e3))+c,d=db.encodeFunctionData("multicall",[u,[A]]);return L({provider:"uniswap-v3",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:r,deadline:u,quote:a,autoSlippage:a.autoSlippage,requiresApproval:s?null:{token:a.tokenIn,spender:n.router,amount:a.amountIn},transaction:{chainId:r,from:o,to:n.router,data:d,value:s?a.amountIn:"0",slippageGuard:Qe(a.autoSlippage,{chainId:r,venue:n.router,data:d})}},{provider:"uniswap-v3",kind:"univ3-swap-tx"})}async function Eb(e={}){let t=Number(e.chainId??8453);try{let r=await Rg({chainId:t,amountIn:"1000000000000000"},e);return{ok:!0,chainId:t,fee:r.fee,amountOutUsdc:r.amountOutUsdc,midPxHint:r.amountOutUsdc/.001}}catch(r){return{ok:!1,chainId:t,error:String(r.message||r).slice(0,200)}}}async function Ib(){return Object.entries(lt).map(([e,t])=>({chainId:Number(e),name:t.name,quoter:t.quoter,weth:t.weth,usdc:t.usdc}))}De();import{AbiCoder as ZV,Interface as Qb,getAddress as zt,isAddress as Ic,keccak256 as XV}from"ethers";var eJ=ZV.defaultAbiCoder(),Ho="0x0000000000000000000000000000000000000000",Pr={1:{name:"ethereum",poolManager:"0x000000000004444c5dc75cB358380D2e3dE08A90",quoter:"0x52f0e24d1c21c8a0cb1e5a5dd6198556bd9e1203",stateView:"0x7ffe42c4a5deea5b0fec41c94c136cf115597227",universalRouter:"0x66a9893cc07d91d95644aedd05d03f95e1dba8af",weth:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",usdc:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},10:{name:"optimism",poolManager:"0x9a13f98cb987694c9f086b1f5eb990eea8264ec3",quoter:"0x1f3131a13296fb91c90870043742c3cdbff1a8d7",stateView:"0xc18a3169788f4f75a170290584eca6395c75ecdb",universalRouter:"0x851116d9223fabed8e56c0e6b8ad0c31d98b3507",weth:"0x4200000000000000000000000000000000000006",usdc:"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85"},56:{name:"bsc",poolManager:"0x28e2ea090877bf75740558f6bfb36a5ffee9e9df",quoter:"0x9f75dd27d6664c475b90e105573e550ff69437b0",stateView:"0xd13dd3d6e93f276fafc9db9e6bb47c1180aee0c4",universalRouter:"0x1906c1d672b88cd1b9ac7593301ca990f94eae07",weth:"0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c",usdc:"0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d"},137:{name:"polygon",poolManager:"0x67366782805870060151383f4bbff9dab53e5cd6",quoter:"0xb3d5c3dfc3a7aebff71895a7191796bffc2c81b9",stateView:"0x5ea1bd7974c8a611cbab0bdcafcb1d9cc9b3ba5a",universalRouter:"0x1095692a6237d83c6a72f3f5efedb9a670c49223",weth:"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270",usdc:"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"},8453:{name:"base",poolManager:"0x498581fF718922c3f8e6A244956aF099B2652b2b",quoter:"0x0d5e0f971ed27fbff6c2837bf31316121532048d",stateView:"0xa3c0c9b65bad0b08107aa264b0f3db444b867a71",universalRouter:"0x6ff5693b99212da76ad316178a184ab56d299b43",weth:"0x4200000000000000000000000000000000000006",usdc:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},42161:{name:"arbitrum",poolManager:"0x360e68faccca8ca495c1b759fd9eee466db9fb32",quoter:"0x3972c00f7ed4885e145823eb7c655375d275a1c5",stateView:"0x76fd297e2d437cd7f76d50f01afe6160f86e9990",universalRouter:"0xa51afafe0263b40edaef0df8781ea9aa03e381a3",weth:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",usdc:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831"},43114:{name:"avalanche",poolManager:"0x06380c0e0912312b5150364b9dc4542ba0dbbc85",quoter:"0xbe40675bb704506a3c2ccfb762dcfd1e979845c2",stateView:"0xc3c9e198c735a4b97e3e683f391ccbdd60b69286",universalRouter:"0x94b75331ae8d42c1b61065089b7d48fe14aa73b7",weth:"0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7",usdc:"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"},4663:{name:"robinhood",poolManager:"0x8366a39cc670b4001a1121b8f6a443a643e40951",quoter:"0x8dc178efb8111bb0973dd9d722ebeff267c98f94",stateView:"0xf3334192d15450cdd385c8b70e03f9a6bd9e673b",universalRouter:"0x8876789976dEcBfCbBbe364623C63652db8C0904",weth:"0x0bd7d308f8e1639fab988df18a8011f41eacad73",usdc:"0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168"}},tJ=[{fee:100,tickSpacing:1},{fee:500,tickSpacing:10},{fee:3e3,tickSpacing:60},{fee:1e4,tickSpacing:200},{fee:25e3,tickSpacing:8}],Bb=new Qb(["function quoteExactInputSingle(((address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks) poolKey,bool zeroForOne,uint128 exactAmount,bytes hookData) params) returns (uint256 amountOut, uint256 gasEstimate)"]),T7=new Qb(["function execute(bytes commands,bytes[] inputs,uint256 deadline) payable"]);var rJ="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE";function yb(e){let t=Number(e),r=Pr[t];if(!r)throw new Error(`uniswap-v4: unsupported chainId ${e} (supported: ${Object.keys(Pr).join(", ")})`);return{chainId:t,...r}}function Cb(e,t){let r=Pr[Number(t)];if(!e||e===rJ||e===Ho||/^eth$/i.test(String(e)))return zt(r.weth);let n=String(e);if(/^weth$/i.test(n))return zt(r.weth);if(/^usdc$/i.test(n)||/^usdg$/i.test(n))return zt(r.usdc);if(!Ic(n))throw new Error(`invalid token address: ${e}`);return zt(n)}function nJ({currency0:e,currency1:t,fee:r,tickSpacing:n,hooks:o=Ho}){let i=zt(e),s=zt(t);if(i.toLowerCase()===s.toLowerCase())throw new Error("poolKey currencies must differ");let[a,A]=i.toLowerCase()<s.toLowerCase()?[i,s]:[s,i],c=o&&Ic(o)?zt(o):Ho;return XV(eJ.encode(["address","address","uint24","int24","address"],[a,A,Number(r),Number(n),c]))}function oJ({tokenIn:e,tokenOut:t,fee:r,tickSpacing:n,hooks:o=Ho}){let i=zt(e),s=zt(t),[a,A]=i.toLowerCase()<s.toLowerCase()?[i,s]:[s,i],c=i.toLowerCase()===a.toLowerCase();return{poolKey:{currency0:a,currency1:A,fee:Number(r),tickSpacing:Number(n),hooks:o&&Ic(o)?zt(o):Ho},zeroForOne:c}}var iJ=["uniswap-v4","uniswapv4"];async function wb(e={},t={}){let{chainId:r,quoter:n,poolManager:o,universalRouter:i}=yb(e.chainId??8453),s=Cb(e.tokenIn||"WETH",r),a=Cb(e.tokenOut||Pr[r].usdc,r),A=BigInt(e.amountIn??0);if(A<=0n)throw new Error("amountIn required (raw base units)");if(A>0xffffffffffffffffffffffffffffffffn)throw new Error("amountIn exceeds uint128");let c=e.fee!=null&&e.tickSpacing!=null?[{fee:Number(e.fee),tickSpacing:Number(e.tickSpacing)}]:e.tryTiers===!1?[{fee:500,tickSpacing:10}]:[...tJ],l=e.hooks||Ho,u=[],d=null;for(let p of c){let{poolKey:m,zeroForOne:f}=oJ({tokenIn:s,tokenOut:a,fee:p.fee,tickSpacing:p.tickSpacing,hooks:l}),B=Bb.encodeFunctionData("quoteExactInputSingle",[{poolKey:m,zeroForOne:f,exactAmount:A,hookData:"0x"}]);try{let E=await V(r,"eth_call",[{to:n,data:B},"latest"],t);if(!E||E==="0x"){u.push({...p,ok:!1,error:"empty result"});continue}let I=Bb.decodeFunctionResult("quoteExactInputSingle",E),Q={fee:p.fee,tickSpacing:p.tickSpacing,ok:!0,amountOut:I[0].toString(),gasEstimate:I[1].toString(),poolKey:m,zeroForOne:f,poolId:nJ({...m})};u.push(Q),(!d||BigInt(Q.amountOut)>BigInt(d.amountOut))&&(d=Q)}catch(E){u.push({...p,ok:!1,error:String(E.message||E).slice(0,160)})}}if(!d){let p=u.map(m=>`${m.fee}/${m.tickSpacing}:${m.error||"fail"}`).join("; ");throw new Error(`uniswap-v4 quote failed chain=${r}: ${p}`)}let h=e.liquidityUsd==null?await gc({chainId:r,tokenA:s,tokenB:a,dexIds:iJ},t).catch(()=>null):null,g=e.liquidityUsd??h?.liquidityUsd??null;return ce({venue:"uniswap-v4",chainId:r,chain:Pr[r].name,poolManager:o,quoter:n,universalRouter:i||null,tokenIn:s,tokenOut:a,amountIn:A.toString(),fee:d.fee,tickSpacing:d.tickSpacing,hooks:d.poolKey.hooks,poolId:d.poolId,zeroForOne:d.zeroForOne,amountOut:d.amountOut,gasEstimate:d.gasEstimate,liquidityUsd:g,liquiditySource:h,triedTiers:u,best:!0,executionReady:!1,prepareReady:typeof e.recipient=="string"&&Ic(e.recipient)&&e.slippageBps!=null},{chainId:r,venue:i||n,amountOut:d.amountOut,liquidityUsd:g,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps})}async function bb(){return Object.entries(Pr).map(([e,t])=>({chainId:Number(e),name:t.name,poolManager:t.poolManager,quoter:t.quoter,stateView:t.stateView||null,universalRouter:t.universalRouter||null,weth:t.weth,usdc:t.usdc}))}async function kb(e={}){let t=yb(e.chainId??8453),r=await V(t.chainId,"eth_getCode",[t.quoter,"latest"],e),n=typeof r=="string"&&r!=="0x"&&r.length>4;return{ok:n,chainId:t.chainId,quoter:t.quoter,poolManager:t.poolManager,codeBytes:n?(r.length-2)/2:0}}De();var Bc=Object.freeze(["blockNumber","nativeBalance","tokenBalance","resolveToken","resolvePools","scanBlocks","scoreRisk","quote","sellSimulation","prepareUnsignedTx"]),Z=Object.freeze({LIVE:"LIVE",CACHED:"CACHED",STALE:"STALE",UNKNOWN:"UNKNOWN",UNAVAILABLE:"UNAVAILABLE"}),$=Object.freeze({PASS:"PASS",CAUTION:"CAUTION",FAIL:"FAIL",UNKNOWN:"UNKNOWN"}),aJ=/^0x[0-9a-fA-F]{40}$/;function AJ(e={}){let t=[],r=[];if(!e||typeof e!="object")return{ok:!1,errors:["definition must be an object"],warnings:r};if((!Number.isInteger(e.chainId)||e.chainId<=0)&&t.push("chainId must be a positive integer"),(typeof e.key!="string"||!/^[a-z][a-z0-9-]*$/.test(e.key||""))&&t.push('key must be a lowercase slug (e.g. "base")'),(typeof e.name!="string"||!e.name.trim())&&t.push("name is required"),!Array.isArray(e.rpcEnv)||e.rpcEnv.length===0)t.push("rpcEnv must list at least one environment variable name");else for(let o of e.rpcEnv)(typeof o!="string"||!/^[A-Z][A-Z0-9_]*$/.test(o))&&t.push(`rpcEnv entry "${o}" should be an UPPER_SNAKE env var name`);if(e.nativeCurrency){let o=e.nativeCurrency;(typeof o.symbol!="string"||!o.symbol)&&t.push("nativeCurrency.symbol is required when nativeCurrency is set"),Number.isInteger(o.decimals)||t.push("nativeCurrency.decimals must be an integer")}for(let[o,i]of(e.venues||[]).entries()){let s=`venues[${o}]`;if(!i||typeof i!="object"){t.push(`${s} must be an object`);continue}aJ.test(i.address||"")||t.push(`${s}.address is not a valid 20-byte address`),/^0x0{40}$/.test(i.address||"")&&t.push(`${s}.address is the zero address -- placeholder left in place?`),i.kind||t.push(`${s}.kind is required (router|quoter|factory|...)`),i.verified?(i.verified.method||t.push(`${s}.verified.method is required`),i.verified.source||t.push(`${s}.verified.source is required`),i.verified.date||r.push(`${s}.verified.date missing -- add one so staleness is visible`)):t.push(`${s} must record verification: { verified: { method, source, date } }. An unverified venue stays blocked.`)}let n=e.capabilities||{};for(let o of Object.keys(n))Bc.includes(o)?typeof n[o]!="function"&&t.push(`capability "${o}" must be a function`):t.push(`unknown capability "${o}"`);return Object.keys(n).length===0&&r.push("scanner implements no capabilities -- it can only be registered, not used"),n.prepareUnsignedTx&&!n.quote&&r.push("prepareUnsignedTx without quote: no priced expectation to validate the built tx against"),n.prepareUnsignedTx&&!n.sellSimulation&&r.push("prepareUnsignedTx without sellSimulation: cannot prove an asset is exitable before buying"),{ok:t.length===0,errors:t,warnings:r}}function cJ(e){let{ok:t,errors:r,warnings:n}=AJ(e);if(!t)throw new Error(`invalid scanner for ${e?.key??"<unknown>"}:
|
|
47
|
+
- ${r.join(`
|
|
48
|
+
- `)}`);let o=e.capabilities||{},i=Bc.filter(a=>typeof o[a]=="function"),s={key:e.key,chainId:e.chainId,name:e.name,rpcEnv:[...e.rpcEnv],nativeCurrency:e.nativeCurrency?{...e.nativeCurrency}:null,wrappedNative:e.wrappedNative||null,explorer:e.explorer||null,venues:(e.venues||[]).map(a=>({...a})),warnings:n,capabilities(){return{chainId:e.chainId,key:e.key,supported:[...i],unsupported:Bc.filter(a=>!i.includes(a))}},supports(a){return i.includes(a)}};for(let a of Bc)i.includes(a)?s[a]=async(...A)=>o[a](...A,{scanner:s}):s[a]=async()=>{throw new Error(`${e.key} (chain ${e.chainId}) does not implement "${a}". Supported: ${i.join(", ")||"none"}. An unimplemented capability is absent, not assumed -- implement it or treat this chain as fail-closed for that operation.`)};return Object.freeze(s)}var Ng=new Map;function Sb(e){let t=cJ(e);return Ng.set(t.chainId,t),t}function xb(e){return Ng.get(Number(e))||null}function Db(){return[...Ng.values()]}De();var Mg={getAmountsOut:"d06ca61f",swapExactTokensForTokens:"38ed1739",swapExactETHForTokens:"7ff36ab5"},Bt=e=>BigInt(e).toString(16).padStart(64,"0"),xs=e=>e.slice(2).toLowerCase().padStart(64,"0");function lJ(e,t){return`0x${Mg.getAmountsOut}`+Bt(e)+Bt(64)+Bt(t.length)+t.map(xs).join("")}function uJ(e){if(!e||e==="0x")return null;let t=e.slice(2);if(t.length<128)return null;let r=Number(BigInt(`0x${t.slice(64,128)}`));if(!Number.isFinite(r)||r<1||r>16)return null;let n=[];for(let o=0;o<r;o++){let i=128+o*64;if(t.length<i+64)return null;n.push(BigInt(`0x${t.slice(i,i+64)}`))}return n}function Fg(e,t="router"){return(e?.venues||[]).find(n=>n.kind===t)?.address??null}var Ug=100;function dJ(e,t){let r=Number(t);if(!Number.isFinite(r)||r<0)throw new Error("slippageBps must be a non-negative number");if(r>Ug)throw new Error(`slippageBps ${r} exceeds the ${Ug} bps ceiling. Block and requote or split the order -- do not widen the guard to force a fill.`);return BigInt(e)*BigInt(1e4-Math.floor(r))/10000n}function vb(e){let{chainId:t,wrappedNative:r}=e;async function n(o,i,s,a){let A=await V(t,"eth_call",[{to:o,data:lJ(i,s)},"latest"],a);return uJ(A?.result??A)}return{async quote({tokenIn:o,tokenOut:i,amountIn:s,path:a},A={}){let c=Fg(A.scanner);if(!c)return{chainId:t,evidence:Z.UNAVAILABLE,reason:"no verified router configured for this chain; quoting stays fail-closed rather than guessing a venue address"};let l=a||[o,i];if(l.some(d=>!/^0x[0-9a-fA-F]{40}$/.test(d||"")))throw new Error("quote requires valid 20-byte addresses");let u=await n(c,s,l,A);return u?{chainId:t,router:c,path:l,amountIn:String(s),amountOut:u[u.length-1].toString(),hops:l.length-1,evidence:Z.LIVE,note:"exact-input quote at current reserves; not a guaranteed fill"}:{chainId:t,router:c,path:l,evidence:Z.UNKNOWN,reason:"router returned no amounts -- no pool for this path, or the call reverted"}},async sellSimulation({token:o,amountIn:i,base:s},a={}){let A=Fg(a.scanner),c=s||r;if(c&&String(o).toLowerCase()===String(c).toLowerCase())return{chainId:t,token:o,verdict:$.UNKNOWN,evidence:Z.UNAVAILABLE,reason:"token is the base asset for this chain, so there is nothing to round-trip against. Sellability must be judged against a different quote asset."};if(!A||!c)return{chainId:t,token:o,verdict:$.UNKNOWN,evidence:Z.UNAVAILABLE,reason:A?"no wrappedNative configured for this chain, so no base asset to round-trip against":"no verified router configured for this chain"};let l=await n(A,i,[c,o],a);if(!l)return{chainId:t,token:o,verdict:$.FAIL,evidence:Z.LIVE,leg:"buy",reason:"buy leg returned no amounts -- no route in"};let u=l[l.length-1];if(u===0n)return{chainId:t,token:o,verdict:$.FAIL,evidence:Z.LIVE,leg:"buy",reason:"buy leg quotes zero output"};let d=await n(A,u,[o,c],a);if(!d)return{chainId:t,token:o,verdict:$.FAIL,evidence:Z.LIVE,leg:"sell",bought:u.toString(),reason:"SELL LEG FAILED while the buy leg quoted fine. This is the honeypot signature: do not trade."};let h=d[d.length-1],g=Number(h*10000n/BigInt(i)),p=$.PASS,m="round trip completes with expected fee/impact loss";return g<5e3?(p=$.FAIL,m=`round trip returns only ${(g/100).toFixed(2)}% -- punitive tax or no real liquidity`):g<9e3&&(p=$.CAUTION,m=`round trip returns ${(g/100).toFixed(2)}% -- transfer tax or thin liquidity at this size`),{chainId:t,token:o,base:c,router:A,verdict:p,reason:m,amountIn:String(i),bought:u.toString(),returned:h.toString(),retentionBps:g,evidence:Z.LIVE,note:"Quote-level round trip. It does not prove transfer hooks absent at execution time."}},async prepareUnsignedTx({tokenIn:o,tokenOut:i,amountIn:s,recipient:a,slippageBps:A=50,deadlineSeconds:c=900,path:l},u={}){let d=u.scanner,h=Fg(d);if(!h)throw new Error(`chain ${t} has no verified router; preparing a swap stays fail-closed. Add a venue with recorded provenance first (see docs/adding-a-chain.md).`);if(!/^0x[0-9a-fA-F]{40}$/.test(a||""))throw new Error("prepareUnsignedTx requires a valid recipient address");let g=l||[o,i],p=await this.quote({tokenIn:o,tokenOut:i,amountIn:s,path:g},u);if(p.evidence!==Z.LIVE)throw new Error(`cannot prepare without a live quote (${p.evidence}: ${p.reason??"no reason given"})`);let m=dJ(p.amountOut,A);if(m<=0n)throw new Error("computed minOut is zero -- refusing to prepare");let f=BigInt(Math.floor(Date.now()/1e3)+Number(c)),B=r&&g[0].toLowerCase()===r.toLowerCase()&&u.useNative,E=B?`0x${Mg.swapExactETHForTokens}`+Bt(m)+Bt(128)+xs(a)+Bt(f)+Bt(g.length)+g.map(xs).join(""):`0x${Mg.swapExactTokensForTokens}`+Bt(s)+Bt(m)+Bt(160)+xs(a)+Bt(f)+Bt(g.length)+g.map(xs).join("");return{unsigned:!0,signedBy:"user-wallet",chainId:t,tx:{to:h,data:E,value:B?`0x${BigInt(s).toString(16)}`:"0x0"},guard:{quotedOut:p.amountOut,minOut:m.toString(),slippageBps:A,maxSlippageBps:Ug,deadline:f.toString()},requires:B?[]:[{step:"approve",token:g[0],spender:h,amount:String(s)}],note:"UNSIGNED. Re-verify the guard against a fresh quote immediately before signing -- a quote-time minimum is not a minimum at broadcast time."}}}}De();var hJ=[100,500,3e3,1e4],Rb={quoteExactInputSingle:"c6a5026a",exactInputSingle:"04e45aaf"},kn=e=>BigInt(e).toString(16).padStart(64,"0"),Ds=e=>e.slice(2).toLowerCase().padStart(64,"0"),Nb=/^0x[0-9a-fA-F]{40}$/,Tg=100;function gJ(e,t){let r=Number(t);if(!Number.isFinite(r)||r<0)throw new Error("slippageBps must be a non-negative number");if(r>Tg)throw new Error(`slippageBps ${r} exceeds the ${Tg} bps ceiling. Block and requote or split the order -- do not widen the guard to force a fill.`);return BigInt(e)*BigInt(1e4-Math.floor(r))/10000n}function Lg(e,t){return(e?.venues||[]).find(r=>r.kind===t)?.address??null}function Fb(e){let{chainId:t,wrappedNative:r}=e;async function n({quoter:i,tokenIn:s,tokenOut:a,amountIn:A,fee:c},l){let u=`0x${Rb.quoteExactInputSingle}`+Ds(s)+Ds(a)+kn(A)+kn(c)+kn(0),d=await V(t,"eth_call",[{to:i,data:u},"latest"],l).catch(()=>null),h=d?.result??d;if(!h||h==="0x"||h.length<66)return null;let g=BigInt(`0x${h.slice(2,66)}`);return g>0n?g:null}async function o({quoter:i,tokenIn:s,tokenOut:a,amountIn:A},c){let l=[],u=null;for(let d of hJ){let h=await n({quoter:i,tokenIn:s,tokenOut:a,amountIn:A,fee:d},c);l.push({fee:d,amountOut:h?h.toString():null}),h&&(!u||h>u.amountOut)&&(u={fee:d,amountOut:h})}return{best:u,tried:l}}return{async quote({tokenIn:i,tokenOut:s,amountIn:a},A={}){let c=Lg(A.scanner,"quoter");if(!c)return{chainId:t,evidence:Z.UNAVAILABLE,reason:"no verified quoter configured for this chain; quoting stays fail-closed rather than guessing a venue address"};for(let d of[i,s])if(!Nb.test(d||""))throw new Error("quote requires valid 20-byte addresses");let{best:l,tried:u}=await o({quoter:c,tokenIn:i,tokenOut:s,amountIn:a},A);return l?{chainId:t,venue:"uniswap-v3",quoter:c,tokenIn:i,tokenOut:s,amountIn:String(a),amountOut:l.amountOut.toString(),fee:l.fee,useNative:!!r&&String(i).toLowerCase()===String(r).toLowerCase(),triedFeeTiers:u,evidence:Z.LIVE,note:"exact-input single-hop quote at current tick; not a guaranteed fill"}:{chainId:t,quoter:c,tokenIn:i,tokenOut:s,triedFeeTiers:u,evidence:Z.UNKNOWN,reason:"no fee tier returned a quote -- no V3 pool for this pair, or no liquidity"}},async sellSimulation({token:i,amountIn:s,base:a},A={}){let c=Lg(A.scanner,"quoter"),l=a||r;if(l&&String(i).toLowerCase()===String(l).toLowerCase())return{chainId:t,token:i,verdict:$.UNKNOWN,evidence:Z.UNAVAILABLE,reason:"token is the base asset for this chain, so there is nothing to round-trip against. Sellability must be judged against a different quote asset."};if(!c||!l)return{chainId:t,token:i,verdict:$.UNKNOWN,evidence:Z.UNAVAILABLE,reason:c?"no wrappedNative configured, so there is no base asset to round-trip against":"no verified quoter configured for this chain"};let u=await o({quoter:c,tokenIn:l,tokenOut:i,amountIn:s},A);if(!u.best)return{chainId:t,token:i,verdict:$.FAIL,evidence:Z.LIVE,leg:"buy",reason:"no V3 pool priced the buy leg on any fee tier"};let d=await o({quoter:c,tokenIn:i,tokenOut:l,amountIn:u.best.amountOut},A);if(!d.best)return{chainId:t,token:i,verdict:$.FAIL,evidence:Z.LIVE,leg:"sell",bought:u.best.amountOut.toString(),reason:"SELL LEG FAILED while the buy leg quoted fine. This is the honeypot signature: do not trade."};let h=d.best.amountOut,g=Number(h*10000n/BigInt(s)),p=$.PASS,m="round trip completes with expected fee/impact loss";return g<5e3?(p=$.FAIL,m=`round trip returns only ${(g/100).toFixed(2)}% -- punitive tax or no real liquidity`):g<9e3&&(p=$.CAUTION,m=`round trip returns ${(g/100).toFixed(2)}% -- transfer tax or thin liquidity at this size`),{chainId:t,venue:"uniswap-v3",token:i,base:l,verdict:p,reason:m,amountIn:String(s),bought:u.best.amountOut.toString(),returned:h.toString(),retentionBps:g,buyFee:u.best.fee,sellFee:d.best.fee,evidence:Z.LIVE,note:"Quote-level round trip. It does not prove transfer hooks absent at execution time."}},async prepareUnsignedTx({tokenIn:i,tokenOut:s,amountIn:a,recipient:A,slippageBps:c=50,fee:l},u={}){let d=Lg(u.scanner,"router");if(!d)throw new Error(`chain ${t} has no verified V3 router; preparing a swap stays fail-closed. Add a venue with recorded provenance first (see docs/adding-a-chain.md).`);if(!Nb.test(A||""))throw new Error("prepareUnsignedTx requires a valid recipient address");let h=await this.quote({tokenIn:i,tokenOut:s,amountIn:a},u);if(h.evidence!==Z.LIVE)throw new Error(`cannot prepare without a live quote (${h.evidence}: ${h.reason??"no reason given"})`);let g=l??h.fee,p=gJ(h.amountOut,c);if(p<=0n)throw new Error("computed minOut is zero -- refusing to prepare");let m=!!(u.useNative||h.useNative)&&r&&String(i).toLowerCase()===String(r).toLowerCase(),f=`0x${Rb.exactInputSingle}`+Ds(i)+Ds(s)+kn(g)+Ds(A)+kn(a)+kn(p)+kn(0);return{unsigned:!0,signedBy:"user-wallet",chainId:t,venue:"uniswap-v3",tx:{to:d,data:f,value:m?String(a):"0x0"},guard:{quotedOut:h.amountOut,minOut:p.toString(),slippageBps:c,maxSlippageBps:Tg,fee:g},requires:m?[]:[{step:"approve",token:i,spender:d,amount:String(a)}],note:"UNSIGNED. Re-verify the guard against a fresh quote immediately before signing -- a quote-time minimum is not a minimum at broadcast time."}}}}var Cc={decimals:"0x313ce567",symbol:"0x95d89b41",name:"0x06fdde03",totalSupply:"0x18160ddd",owner:"0x8da5cb5b"};function Mb(e){if(!e||e==="0x")return null;try{return BigInt(e)}catch{return null}}function Ub(e){if(!e||e==="0x")return null;let t=e.slice(2);if(t.length>=128){let n=Number(BigInt(`0x${t.slice(64,128)}`));if(n>0&&n<=256&&t.length>=128+n*2){let o=t.slice(128,128+n*2),i=Buffer.from(o,"hex").toString("utf8").replace(/\0+$/,"");if(i)return i}}return Buffer.from(t.slice(0,64),"hex").toString("utf8").replace(/\0+$/,"")||null}function pJ(e){let{chainId:t}=e;async function r(n,o,i){return V(t,"eth_call",[{to:n,data:o},"latest"],i)}return{async blockNumber(n={}){let o=await ys(t,n);return{chainId:t,blockNumber:o?.blockNumber??o,evidence:Z.LIVE}},async nativeBalance(n,o={}){let i=await wn(t,n,o);return{chainId:t,address:n,wei:i?.wei??i?.balance??null,symbol:e.nativeCurrency?.symbol??null,decimals:e.nativeCurrency?.decimals??18,evidence:Z.LIVE}},async tokenBalance({token:n,owner:o},i={}){let s=await ws({chainId:t,token:n,owner:o},i);return{chainId:t,token:n,owner:o,raw:s?.balance??s,evidence:Z.LIVE}},async resolveToken(n,o={}){if(!/^0x[0-9a-fA-F]{40}$/.test(n||""))return{chainId:t,token:n,evidence:Z.UNKNOWN,error:"resolveToken needs a 20-byte address; symbol lookup is a market-data concern"};let[i,s,a,A]=await Promise.all([r(n,Cc.decimals,o).catch(()=>null),r(n,Cc.symbol,o).catch(()=>null),r(n,Cc.name,o).catch(()=>null),r(n,Cc.totalSupply,o).catch(()=>null)]),c=Mb(i?.result??i),l=c!==null||s?.result||a?.result;return{chainId:t,address:n,decimals:c===null?null:Number(c),symbol:Ub(s?.result??s),name:Ub(a?.result??a),totalSupply:(Mb(A?.result??A)??null)?.toString()??null,evidence:l?Z.LIVE:Z.UNKNOWN,warning:l?void 0:"no ERC-20 metadata returned -- may not be a token contract"}},async resolvePools(n,o={}){let i=e.dexscreenerSlug;if(!i)return{chainId:t,token:n,pools:[],evidence:Z.UNAVAILABLE,reason:"no dexscreenerSlug configured for this chain; pool discovery is unavailable rather than guessed"};let s=await bn(n,o).catch(()=>null),A=(s?.pairs||s?.data?.pairs||[]).filter(c=>String(c.chainId).toLowerCase()===String(i).toLowerCase()).map(c=>({pair:c.pairAddress,dex:c.dexId,base:c.baseToken?.address,quote:c.quoteToken?.address,liquidityUsd:c.liquidity?.usd??null,priceUsd:c.priceUsd??null,volume24hUsd:c.volume?.h24??null,createdAt:c.pairCreatedAt??null})).sort((c,l)=>(l.liquidityUsd??0)-(c.liquidityUsd??0));return{chainId:t,token:n,pools:A,evidence:A.length?Z.LIVE:Z.UNKNOWN}},async scanBlocks({fromBlock:n,toBlock:o,address:i,topics:s,chunkSize:a=2e3}={},A={}){if(!Number.isInteger(n)||!Number.isInteger(o))throw new Error("scanBlocks requires integer fromBlock and toBlock");if(o<n)throw new Error("toBlock must be >= fromBlock");let c=[],l=[];for(let u=n;u<=o;u+=a){let d=Math.min(u+a-1,o);l.push([u,d])}for(let[u,d]of l){let h={fromBlock:`0x${u.toString(16)}`,toBlock:`0x${d.toString(16)}`};i&&(h.address=i),s&&(h.topics=s);let g=await V(t,"eth_getLogs",[h],A).catch(p=>({error:String(p?.message||p)}));if(g?.error)return{chainId:t,fromBlock:n,toBlock:o,logs:c,complete:!1,failedAt:[u,d],error:g.error,evidence:Z.UNKNOWN};for(let p of g?.result??g??[])c.push(p)}return{chainId:t,fromBlock:n,toBlock:o,logs:c,complete:!0,chunks:l.length,evidence:Z.LIVE}},async scoreRisk(n,o={}){let i=[],s=$.PASS,a=l=>{let u={[$.PASS]:0,[$.CAUTION]:1,[$.UNKNOWN]:2,[$.FAIL]:3};u[l]>u[s]&&(s=l)},A=await this.resolveToken(n,o);A.evidence!==Z.LIVE?(i.push({check:"erc20-metadata",result:$.UNKNOWN,detail:A.warning}),a($.UNKNOWN)):i.push({check:"erc20-metadata",result:$.PASS,detail:`${A.symbol} / ${A.decimals}d`});let c=await this.resolvePools(n,o);if(c.evidence===Z.UNAVAILABLE)i.push({check:"liquidity",result:$.UNKNOWN,detail:c.reason}),a($.UNKNOWN);else if(!c.pools.length)i.push({check:"liquidity",result:$.FAIL,detail:"no pool with liquidity found"}),a($.FAIL);else{let l=c.pools[0],u=l.liquidityUsd??0;u<5e3?(i.push({check:"liquidity",result:$.CAUTION,detail:`top pool only $${u}`}),a($.CAUTION)):i.push({check:"liquidity",result:$.PASS,detail:`$${u} on ${l.dex}`}),l.createdAt&&Date.now()-l.createdAt<24*3600*1e3&&(i.push({check:"age",result:$.CAUTION,detail:"pool under 24h old"}),a($.CAUTION))}if(typeof this.sellSimulation=="function"){let l=await this.sellSimulation({token:n,amountIn:(10n**16n).toString()},o).catch(u=>({verdict:$.UNKNOWN,reason:String(u?.message||u)}));i.push({check:"sellability",result:l.verdict,detail:l.retentionBps!=null?`round trip returns ${(l.retentionBps/100).toFixed(2)}% -- ${l.reason}`:l.reason}),a(l.verdict)}else i.push({check:"sellability",result:$.UNKNOWN,detail:"no verified router on this chain, so a round-trip sell simulation cannot run. Treat as unproven -- a buy path is not an exit path."}),a($.UNKNOWN);return{chainId:t,token:n,verdict:s,checks:i,note:"Structural checks only. UNKNOWN is not PASS. A token is not tradeable until a sell simulation succeeds."}}}}function Lb(e){let r={...pJ(e)},n=new Set((e.venues||[]).map(i=>i.kind));e.venueKind==="uniswap-v3"&&n.has("quoter")&&n.has("router")?Object.assign(r,Fb({chainId:e.chainId,wrappedNative:e.wrappedNative})):e.venueKind==="uniswap-v2"&&n.has("router")&&Object.assign(r,vb({chainId:e.chainId,wrappedNative:e.wrappedNative}));let o={};for(let[i,s]of Object.entries(r))o[i]=s.bind(r);return{key:e.key,chainId:e.chainId,name:e.name,rpcEnv:e.rpcEnv,nativeCurrency:e.nativeCurrency,explorer:e.explorer,venues:e.venues||[],capabilities:o}}var Go=Object.freeze([{key:"ethereum",chainId:1,name:"Ethereum",rpcEnv:["ETH_RPC_URL","ETHEREUM_RPC_URL","MAINNET_RPC_URL"],nativeCurrency:{symbol:"ETH",decimals:18},explorer:"https://etherscan.io",dexscreenerSlug:"ethereum",venueKind:"uniswap-v3",wrappedNative:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",venues:[{kind:"quoter",address:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",label:"Uniswap V3 QuoterV2",verified:{method:"functional probe, not a codesize check: quoteExactInputSingle returned a live sane price (WETH->USDC fee 500 quoted 1908.71 USDC). A contract that correctly prices a known pair IS a working V3 quoter",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:1}},{kind:"router",address:"0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45",label:"Uniswap V3 SwapRouter02",verified:{method:"eth_getCode returned real bytecode on this chain and the paired quoter at the same deployment passed a live functional quote",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:1}}]},{key:"optimism",chainId:10,name:"OP Mainnet",rpcEnv:["OPTIMISM_RPC_URL","OP_RPC_URL"],nativeCurrency:{symbol:"ETH",decimals:18},explorer:"https://optimistic.etherscan.io",dexscreenerSlug:"optimism",venueKind:"uniswap-v3",wrappedNative:"0x4200000000000000000000000000000000000006",venues:[{kind:"quoter",address:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",label:"Uniswap V3 QuoterV2",verified:{method:"functional probe, not a codesize check: quoteExactInputSingle returned a live sane price (WETH->USDC fee 500 quoted 1905.23 USDC). A contract that correctly prices a known pair IS a working V3 quoter",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:10}},{kind:"router",address:"0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45",label:"Uniswap V3 SwapRouter02",verified:{method:"eth_getCode returned real bytecode on this chain and the paired quoter at the same deployment passed a live functional quote",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:10}}]},{key:"bsc",chainId:56,name:"BNB Smart Chain",rpcEnv:["BSC_RPC_URL","BNB_RPC_URL"],nativeCurrency:{symbol:"BNB",decimals:18},explorer:"https://bscscan.com",dexscreenerSlug:"bsc",venueKind:"uniswap-v3",wrappedNative:"0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c",venues:[{kind:"quoter",address:"0x78D78E420Da98ad378D7799bE8f4AF69033EB077",label:"Uniswap V3 QuoterV2",verified:{method:"functional probe, not a codesize check: quoteExactInputSingle returned a live sane price (WBNB->USDC fee 500 quoted 413.86 USDC). A contract that correctly prices a known pair IS a working V3 quoter",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:56}},{kind:"router",address:"0xB971eF87ede563556b2ED4b1C0b0019111Dd85d2",label:"Uniswap V3 SwapRouter02",verified:{method:"eth_getCode returned real bytecode on this chain and the paired quoter at the same deployment passed a live functional quote",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:56}}]},{key:"polygon",chainId:137,name:"Polygon",rpcEnv:["POLYGON_RPC_URL","POLYGON_RPC"],nativeCurrency:{symbol:"POL",decimals:18},explorer:"https://polygonscan.com",dexscreenerSlug:"polygon",venueKind:"uniswap-v3",wrappedNative:"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270",venues:[{kind:"quoter",address:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",label:"Uniswap V3 QuoterV2",verified:{method:"functional probe, not a codesize check: quoteExactInputSingle returned a live sane price (WMATIC->USDC fee 500 quoted 0.0720 USDC). A contract that correctly prices a known pair IS a working V3 quoter",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:137}},{kind:"router",address:"0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45",label:"Uniswap V3 SwapRouter02",verified:{method:"eth_getCode returned real bytecode on this chain and the paired quoter at the same deployment passed a live functional quote",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:137}}]},{key:"stable",chainId:988,name:"Stable Mainnet",rpcEnv:["STABLE_RPC_URL","STABLE_RPC"],nativeCurrency:{symbol:"USDT0",decimals:18},venueKind:"uniswap-v3",wrappedNative:"0x5d442b349590a6048Eb2dC0eC346cAA5F47A9ab5",venues:[{kind:"quoter",address:"0xb070179E7032CdA868b53e6C1742F80c9e940d1A",label:"Uniswap V3 QuoterV2 (canonical)",verified:{method:"Stable is on the OFFICIAL Uniswap v3 Deployments List (governance-recognised 2026-05-12, UAC process completed 2026-04, deployed by Protofire), so this is a canonical deployment rather than a fork. eth_getCode returned 8273 bytes, the same size as the canonical quoter on the seven already-verified chains. Functional probe on a live pool (TOAST -> USDT0, fee 10000): 100 in -> 0.000003, 1000 -> 0.000031, 10000 -> 0.000319 USDT0. Output scales monotonically with input, which is a working quoter answering, not a revert. Two of three sampled pools carry non-zero liquidity. NOTE: the pools discovered so far are thin, so real routing size is limited -- the venue is proved, deep liquidity is not.",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-08-05",chainId:988}},{kind:"router",address:"0x32eaf9B5d5F2CD7361c5012890C943D7de84C22a",label:"Uniswap SwapRouter02 (canonical)",verified:{method:"eth_getCode returned 24497 bytes. Cross-checked on-chain rather than trusted from docs: router.factory() returns 0x88f0a512ef09175d456bc9547f914f48c013e4aa, the same v3 core factory that created the pools quoted above, and router.WETH9() returns the wrappedNative recorded on this chain entry. Address published in the Stable docs DEX reference and the Uniswap deployments list.",source:"docs.stable.xyz/en/reference/dexes + on-chain factory()/WETH9() round-trip",date:"2026-08-05",chainId:988}}]},{key:"hyperevm",chainId:999,name:"HyperEVM",rpcEnv:["HYPEREVM_RPC_URL","HYPER_EVM_RPC"],nativeCurrency:{symbol:"HYPE",decimals:18},dexscreenerSlug:"hyperevm",venueKind:"uniswap-v3",wrappedNative:"0x5555555555555555555555555555555555555555",venues:[{kind:"quoter",address:"0x03A918028f22D9E1473B7959C927AD7425A45C7C",label:"HyperSwap V3 QuoterV2",verified:{method:"functional probe, not a codesize check: quoteExactInputSingle(1 WHYPE -> USDT0) returned live output on all four fee tiers (100: 57.3385, 500: 57.4187, 3000: 57.3237, 10000: 56.1963 USDT0). Decimals read on-chain: WHYPE 18, USDT0 6. Best tier checked against an INDEPENDENT control the same minute -- Hyperliquid allMids put HYPE at 57.3205, so the pool is 0.171% from the perp mid, which is the right shape for fee plus impact rather than a wrong contract or a decimals bug.",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-08-05",chainId:999}},{kind:"router",address:"0x4E2960a8cd19B467b82d26D83fAcb0fAE26b094D",label:"HyperSwap V3 SwapRouter",verified:{method:"eth_getCode returned 12070 bytes, and it is the router paired with the quoter proved above -- the same pair already shipped in UNI_V3_VENUES[999].hyperswap, which is the map the quote/prepare path actually routes through.",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-08-05",chainId:999}}]},{key:"abstract",chainId:2741,name:"Abstract",rpcEnv:["ABSTRACT_RPC_URL","ABS_RPC_URL"],nativeCurrency:{symbol:"ETH",decimals:18},venueKind:"uniswap-v3",wrappedNative:"0x3439153EB7AF838Ad19d56E1571FBD09333C2809",venues:[{kind:"quoter",address:"0x728BD3eC25D5EDBafebB84F3d67367Cd9EBC7693",label:"Uniswap V3 QuoterV2 (Abstract deployment)",verified:{method:"Abstract is a ZK-stack chain, so CREATE2 addresses differ and the canonical Uniswap addresses are NOT valid here -- probing them returns codesize 0, which is what previously made this chain look like it had no V3 at all. Found the real deployment from live traffic instead: scanned recent Swap(...) logs, took the busiest pool, read pool.factory() = 0xa1160e73b63f322ae88cc2d8e700833e71d0b2a1, then enumerated that factory's deployer (0xf3d63166F0Ca56C3c1A3508FcE03Ff0Cf3Fb691e) and probed each of its 56 contracts with a real quoteExactInputSingle call. Exactly one answered: 1 WETH -> 1846.475731 USDC.e at fee 500. Independent sanity check: the pool's own slot0() spot price is 1873.11 USDC.e per WETH, so the quoter sits ~1.4% below spot, the right shape for fee plus price impact on this size.",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-08-05",chainId:2741}},{kind:"router",address:"0x7712FA47387542819d4E35A23f8116C90C18767C",label:"Uniswap SwapRouter02 (Abstract deployment)",verified:{method:"eth_getCode returned 167392 bytes and the runtime contains the exactInputSingle selector. router.factory() matches the factory proved above and router.WETH9() matches the wrappedNative on this entry. Chosen over its byte-identical twin (0xfD6257F4...) because this is the address real users actually route through: it appeared as tx.to on live swaps against the WETH/USDC.e pool.",source:"on-chain factory()/WETH9() round-trip + live swap tx.to sampling",date:"2026-08-05",chainId:2741}}]},{key:"robinhood",chainId:4663,name:"Robinhood Chain",rpcEnv:["RH_CHAIN_RPC","ROBINHOOD_RPC_URL"],nativeCurrency:{symbol:"ETH",decimals:18},dexscreenerSlug:"robinhood",venueKind:"uniswap-v3",wrappedNative:"0x0bd7d308f8e1639fab988df18a8011f41eacad73",venues:[{kind:"quoter",address:"0x33e885ed0ec9bf04ecfb19341582aadcb4c8a9e7",label:"Uniswap V3 QuoterV2",verified:{method:"functional probe, not a codesize check: quoteExactInputSingle returned a live sane price (WETH->USDG fee 100 quoted 1866.58 USDG, and USDG->CASHCAT fee 10000 quoted a live amount). A contract that correctly prices known pairs IS a working V3 quoter",source:"live eth_call against rpc.mainnet.chain.robinhood.com",date:"2026-07-31",chainId:4663}},{kind:"router",address:"0xcaf681a66d020601342297493863e78c959e5cb2",label:"Uniswap V3 SwapRouter02",verified:{method:"eth_getCode returned real bytecode (24497 bytes) on this chain and the paired quoter at the same deployment passed a live functional quote",source:"live eth_getCode against rpc.mainnet.chain.robinhood.com",date:"2026-07-31",chainId:4663}},{kind:"factory",address:"0x1f7d7550b1b028f7571e69a784071f0205fd2efa",label:"Uniswap V3 Factory",verified:{method:"eth_getCode returned real bytecode (24535 bytes) and a PoolCreated log scan over this factory returned 76 pools in ~9000 recent blocks",source:"live eth_getLogs against rpc.mainnet.chain.robinhood.com",date:"2026-07-31",chainId:4663}}]},{key:"base",chainId:8453,name:"Base",rpcEnv:["BASE_RPC_URL"],nativeCurrency:{symbol:"ETH",decimals:18},explorer:"https://basescan.org",dexscreenerSlug:"base",venueKind:"uniswap-v3",wrappedNative:"0x4200000000000000000000000000000000000006",venues:[{kind:"quoter",address:"0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a",label:"Uniswap V3 QuoterV2 (Base)",verified:{method:"functional probe: quoteExactInputSingle returned WETH->USDC at fee 500 = 1908.44 USDC, a live sane price. The canonical mainnet quoter address also has bytecode on Base but does NOT price this pair, which is exactly the false positive a codesize-only check accepts",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:8453}},{kind:"router",address:"0x2626664c2603336E57B271c5C0b26F421741e481",label:"Uniswap V3 SwapRouter02 (Base)",verified:{method:"eth_getCode returned real bytecode and the paired Base quoter passed a live functional quote",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:8453}},{kind:"router-v2",address:"0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24",label:"Uniswap V2 Router02 (Base)",verified:{method:"eth_getCode returned 17891 bytes; live getAmountsOut on WETH->USDC round-tripped to 98.75% (2x0.30% fee + impact)",source:"https://docs.uniswap.org/contracts/v2/reference/smart-contracts/v2-deployments",date:"2026-07-30",chainId:8453}}]},{key:"arbitrum",chainId:42161,name:"Arbitrum One",rpcEnv:["ARBITRUM_RPC_URL","ARB_RPC_URL"],nativeCurrency:{symbol:"ETH",decimals:18},explorer:"https://arbiscan.io",dexscreenerSlug:"arbitrum",venueKind:"uniswap-v3",wrappedNative:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",venues:[{kind:"quoter",address:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",label:"Uniswap V3 QuoterV2",verified:{method:"functional probe, not a codesize check: quoteExactInputSingle returned a live sane price (WETH->USDC fee 500 quoted 1908.72 USDC). A contract that correctly prices a known pair IS a working V3 quoter",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:42161}},{kind:"router",address:"0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45",label:"Uniswap V3 SwapRouter02",verified:{method:"eth_getCode returned real bytecode on this chain and the paired quoter at the same deployment passed a live functional quote",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:42161}}]},{key:"avalanche",chainId:43114,name:"Avalanche C-Chain",rpcEnv:["AVALANCHE_RPC_URL","AVAX_RPC_URL"],nativeCurrency:{symbol:"AVAX",decimals:18},explorer:"https://snowtrace.io",dexscreenerSlug:"avalanche",venueKind:"uniswap-v3",wrappedNative:"0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7",venues:[{kind:"quoter",address:"0xbe0F5544EC67e9B3b2D979aaA43f18Fd87E6257F",label:"Uniswap V3 QuoterV2",verified:{method:"functional probe, not a codesize check: quoteExactInputSingle returned a live sane price (WAVAX->USDC fee 500 quoted 6.48 USDC). A contract that correctly prices a known pair IS a working V3 quoter",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:43114}},{kind:"router",address:"0xbb00FF08d01D300023C629E8fFfFcb65A5a578cE",label:"Uniswap V3 SwapRouter02",verified:{method:"eth_getCode returned real bytecode on this chain and the paired quoter at the same deployment passed a live functional quote",source:"scripts/verify-v3-venues.mjs (re-runnable)",date:"2026-07-30",chainId:43114}}]}]);function Pg(){return Go.map(e=>Sb(Lb(e)))}var vs=new Map,fJ=Object.keys(lt).map(Number),mJ=Object.keys(Pr).map(Number),EJ=Go.map(e=>e.chainId),_g=new Set,Tb=!1;function v(e){if(!e?.id)throw new Error("registerProvider requires id");if(!e.venue)throw new Error("registerProvider requires venue");if(!Array.isArray(e.ops))throw new Error("registerProvider requires ops[]");let t=String(e.id);if(Tb&&_g.has(t))throw new Error(`registerProvider refuses to overwrite built-in provider: ${t}`);return vs.set(t,{chainIds:e.chainIds||[],auth:e.auth||"none",description:e.description||"",baseEnv:e.baseEnv||[],...e,id:t}),vs.get(t)}function Og(e){return vs.get(e)||null}function Qc({venue:e,op:t}={}){let r=[...vs.values()];return e&&(r=r.filter(n=>n.venue===e)),t&&(r=r.filter(n=>n.ops.includes(t))),r}function IJ(){_g.clear();for(let e of vs.keys())_g.add(e);Tb=!0}v({id:"hl-info",venue:"hl",chainIds:[],auth:"none",ops:["health","allMids","l2Book","outcomeMeta","clearinghouse","userFills","meta","metaAndAssetCtxs","candleSnapshot","openOrders","frontendOpenOrders","userState","spotMeta"],baseEnv:["HL_INFO_URL","HL_API_URL"],description:"Hyperliquid public /info"});v({id:"hl-vaults",venue:"hyperliquid-vaults",chainIds:[],auth:"none",ops:["health","summaries","details","userEquities","tracker"],execution:"read-only",baseEnv:["HL_INFO_URL","HL_API_URL"],description:"Read-only Hyperliquid vault summaries, vault details, user vault equities, and HLP tracking."});v({id:"protocol-templates",venue:"protocol-builder",chainIds:[],auth:"none",ops:["health","list","listNative","gate","prepareDeploy","buildNative"],description:"Gated EVM templates plus deterministic Solana program and Bitcoin policy scaffolds. Native bundles require chain-specific compile, tests, and simulation before any unsigned deploy/funding prepare. NOT a firm audit."});v({id:"poly-public",venue:"poly",chainIds:[137],auth:"none",ops:["health","time","markets","book","midpoint","spread","price","events"],baseEnv:["POLY_CLOB_URL","POLY_GAMMA_URL"],description:"Polymarket CLOB + Gamma public REST"});v({id:"portfolio",venue:"multichain-wallet",chainIds:[1,10,56,137,988,999,2741,4663,8453,42161,43114],auth:"none",ops:["health","balances","snapshot","history","valueGraph"],execution:"read-only",description:"Read-only balance aggregation across configured EVM chains, Solana, Bitcoin, and Hyperliquid, plus profile-local observation snapshots, history, and value graphs with explicit partial coverage."});v({id:"nft-portfolio",venue:"multichain-nft-wallet",chainIds:[1,10,137,988,999,2741,4663,8453,42161,43114],auth:"optionalApiKey",ops:["health","inventory","gallery","pnl","prepareList","traitSnipe"],execution:"prepare",baseEnv:["OPENSEA_API_KEY","MAGICEDEN_API_KEY","SATFLOW_API_KEY"],description:"Normalized EVM, Solana, and Bitcoin NFT inventory, static contact-sheet galleries, explicit PnL coverage, user-confirmed unsigned listing preparation, and evidence-gated trait-snipe buy intents."});v({id:"evm-simulate",venue:"onchain-simulation",chainIds:[1,10,56,137,988,999,2741,4663,8453,42161,43114],auth:"none",ops:["health","simulate"],execution:"read",baseEnv:[],description:"Pre-sign EVM transaction simulation: eth_call at pending state to catch reverts, decoded revert reasons (Error(string), Panic codes, custom-error selectors), and a buffered gas estimate. Distinguishes a genuine revert from an unreachable node \u2014 an infra failure is never reported as 'would fail'. A pass reflects current chain state and is explicitly not a guarantee."});v({id:"nft-mint",venue:"onchain-mint",chainIds:[1,10,56,137,988,999,2741,4663,8453,42161,43114],auth:"none",ops:["health","discover","prepare","priceGas","createTrigger","checkOpen"],execution:"prepare",localSignerSurfaces:["evm-nft"],baseEnv:[],description:"EVM NFT mints: discover the collection's mint entrypoint from bytecode, price a competitive EIP-1559 bid from fee-history percentiles, enforce gas-war caps, surface contract risk, and hand execution to the local signer after explicit arming and bounded grant."});v({id:"contract-risk",venue:"onchain-bytecode",chainIds:[1,10,56,137,988,999,2741,4663,8453,42161,43114],auth:"none",ops:["health","scan"],execution:"read",baseEnv:[],description:"Structural contract risk from on-chain bytecode: retained owner powers (mint, blacklist, pause, fee changes) and upgradeability across EIP-1967, legacy zeppelinos, and EIP-1822 proxy slots. Complements behavioural sell simulation. Never reports 'safe' \u2014 a clean scan is weak evidence, not a guarantee."});v({id:"evm-token-sniper",venue:"evm-token-launches",chainIds:EJ,auth:"none",ops:["health","scan"],execution:"prepare",localSignerSurfaces:["evm-swap"],baseEnv:Go.flatMap(e=>e.rpcEnv),description:"One generic EVM token-sniping path across every configured EVM chain: live identity, pools, structural risk, sell simulation, quote, guarded transaction preparation, and local-signer execution handoff. Robinhood Chain is the default, not a special implementation."});v({id:"evm-rpc",venue:"evm",chainIds:[1,137,42161,8453,10,4663,999],auth:"none",ops:["health","healthAll","blockNumber","chainId","getBalance","call","erc20Allowance","erc20Balance","transactionReceipt"],baseEnv:["ETH_RPC_URL","POLYGON_RPC_URL","RH_CHAIN_RPC","BASE_RPC_URL","ARBITRUM_RPC_URL"],description:"EVM JSON-RPC multi-chain (env RPC or public fallbacks)"});v({id:"solana-rpc",venue:"solana",chainIds:[],auth:"none",ops:["health","latestBlockhash","getBalance","tokenAccounts","simulate"],baseEnv:["SOLANA_RPC_URL"],description:"Solana mainnet JSON-RPC read/prepare surface (no key, no signing, no broadcast)"});v({id:"bitcoin-esplora",venue:"bitcoin",chainIds:[],auth:"none",ops:["health","tipHeight","fees","address","utxos","tx","decode"],execution:"read-only",baseEnv:["BTC_ESPLORA_URL","BTC_NETWORK"],description:"Bitcoin L1 via Esplora (mempool.space/Blockstream). Reads only on data plane. User-signed broadcast is bitcoin_send on exec MCP. No Core RPC, no house keys. Wallets: Xverse/UniSat/Leather/OKX/Phantom"});v({id:"bitcoin-meta",venue:"bitcoin-metaprotocol",chainIds:[],auth:"optionalApiKey",ops:["health","runeBalances","inscriptions","inscriptionInfo","inscriptionChildren","ordBlockInfo"],execution:"read-only",baseEnv:["BTC_META_API_URL","UNISAT_API_KEY","BESTINSLOT_API_KEY"],description:"Bitcoin ordinals/runes reads. Keyless tier via ordinals.com recursive (inscriptionInfo/children/blockInfo); address-indexed ops (inscriptions, runeBalances) need a keyed indexer. Hiro is deprecated (410) and Magic Eden BTC is dead \u2014 use satflow for market."});v({id:"satflow",venue:"bitcoin-marketplace",chainIds:[],auth:"apiKey",ops:["health","collectionFloors","collectionStats","item","walletContents","floorListings","preparePurchase","prepareList"],execution:"prepare",localSignerSurfaces:["btc"],baseEnv:["SATFLOW_API_KEY","SATFLOW_API_URL"],description:"Satflow ordinals+runes marketplace (api.satflow.com). Primary BTC NFT market after Magic Eden BTC sunset. PSBT intents for buy/list; key via x-api-key."});v({id:"jupiter",venue:"solana-dex",chainIds:[],auth:"none",ops:["health","venues","quote","prepare"],execution:"prepare",localSignerSurfaces:["sol"],baseEnv:["JUPITER_SWAP_API_URL","SOLANA_RPC_URL"],description:"Jupiter Swap API v1 quote + local-signer Solana swap handoff"});v({id:"hl-perps",venue:"hyperliquid",chainIds:[],auth:"none",ops:["health","assetInfo","prepareOrder","prepareCancel","prepareLeverage","prepareIsolatedMargin","prepareBracket","prepareBuilderApproval"],execution:"prepare",notes:"Hyperliquid perp orders/leverage through local-signer action handoff."});v({id:"hl-markets",venue:"hyperliquid",chainIds:[],auth:"none",ops:["health","markets","leaderboards","coin","spot"],notes:"Joined Hyperliquid market datapoints for the Hyperliquid agent. Read-only."});v({id:"hl-staking",venue:"hypercore-staking",chainIds:[],auth:"none",ops:["health","validators","delegatorSummary","delegations","rewards","history","preflight","prepareStakeDeposit","prepareStakeWithdraw","prepareDelegate"],execution:"prepare",baseEnv:["HL_INFO_URL","HL_EXCHANGE_URL","HL_TESTNET"],description:"Hyperliquid HyperCore HYPE staking. Public reads (validators, delegations, rewards) plus EIP-712 prepare for cDeposit / cWithdraw / tokenDelegate. Prepare-only: the user's wallet signs and submits, Oracle never posts to /exchange."});v({id:"magiceden-sol",venue:"solana-nft",chainIds:[],auth:"optionalApiKey",ops:["health","stats","listings","tokenListings","prepareBuy","prepareList","prepareMint"],execution:"prepare",baseEnv:["MAGICEDEN_API_KEY","MAGICEDEN_API_URL"],description:"Magic Eden Solana NFT market. Reads (stats/listings) are keyless; buy/list/mint instruction builders need MAGICEDEN_API_KEY and return an unsigned base64 transaction for the user's Solana wallet. Never signs or broadcasts."});v({id:"defillama",venue:"prices",chainIds:[],auth:"none",ops:["health","prices","pricesBySymbol","protocols","yields","stablecoins","dexVolumes"],baseEnv:["DEFILLAMA_COINS_URL","DEFILLAMA_API_URL"],description:"DeFiLlama public prices + protocols TVL"});v({id:"lifi",venue:"dex",chainIds:[1,10,56,137,988,999,2741,4663,8453,42161,43114],auth:"none",ops:["health","quote","prepare","chains"],execution:"prepare",baseEnv:["LIFI_API_URL"],description:"LI.FI public cross-chain / DEX aggregator quotes (no key)"});v({id:"dexscreener",venue:"dex",chainIds:[],auth:"none",ops:["health","token","search","pair"],baseEnv:["DEXSCREENER_API_URL"],description:"DexScreener public token/pair discovery"});v({id:"uniswap-v3",venue:"dex",chainIds:fJ,auth:"none",ops:["health","quote","prepare","quotePath","ethUsdc","chains"],execution:"prepare",baseEnv:["ETH_RPC_URL","BASE_RPC_URL","ARBITRUM_RPC_URL","OPTIMISM_RPC_URL","BSC_RPC_URL","POLYGON_RPC_URL","AVALANCHE_RPC_URL","RH_CHAIN_RPC"],description:"Uniswap V3 QuoterV2 exact-in quotes via eth_call across official deployments plus Robinhood Chain, no key"});v({id:"uniswap-v4",venue:"dex",chainIds:mJ,auth:"none",ops:["health","quote","chains"],execution:"read-only",baseEnv:["ETH_RPC_URL","BASE_RPC_URL","ARBITRUM_RPC_URL","OPTIMISM_RPC_URL","BSC_RPC_URL","POLYGON_RPC_URL","AVALANCHE_RPC_URL","RH_CHAIN_RPC"],description:"Uniswap V4 Quoter exact-in quotes via eth_call across official deployments plus Robinhood Chain. Quote-only until Universal Router prepare is classified."});v({id:"aerodrome",venue:"dex",chainIds:[8453],auth:"none",ops:["health","quote","prepare","chains"],execution:"prepare",baseEnv:["BASE_RPC_URL"],description:"Aerodrome Slipstream CL on Base \u2014 QuoterV2 + SwapRouter exact-input via eth_call (tickSpacing, no key)"});v({id:"zerox",venue:"dex",chainIds:[1,10,137,8453,42161],auth:"apiKey",ops:["health","price","quote","prepare"],execution:"prepare",baseEnv:["ZEROX_API_KEY","ZEROX_API_URL"],description:"0x Swap API v2 price/quote/prepare \u2014 requires ZEROX_API_KEY (unconfigured without key; no Oracle key shipped)"});v({id:"across",venue:"bridge",chainIds:[1,10,137,42161,8453],auth:"none",ops:["health","suggestedFees"],baseEnv:["ACROSS_API_URL"],description:"Across bridge suggested-fees (public)"});v({id:"hop",venue:"bridge",chainIds:[1,10,137,42161],auth:"none",ops:["health","quote"],baseEnv:["HOP_API_URL"],description:"Hop Protocol bridge quotes (public)"});v({id:"relay",venue:"bridge",chainIds:[1,10,137,8453,42161],auth:"none",ops:["health","quote","prepare"],execution:"prepare",baseEnv:["RELAY_API_URL"],description:"Relay.link bridge/swap quotes (public)"});v({id:"cowswap",venue:"dex",chainIds:[1,100,42161,8453],auth:"none",ops:["health","quote","prepareOrder","order","status","chains"],execution:"intent",baseEnv:[],description:"CowSwap batch auction quotes + guarded EIP-712 order intents (public)"});v({id:"oneinch",venue:"dex",chainIds:[1,10,137,8453,42161],auth:"apiKey",ops:["health","quote","prepare","approveSpender"],execution:"prepare",baseEnv:["ONEINCH_API_KEY","ONEINCH_API_URL"],description:"1inch Swap API v6 quote/prepare \u2014 requires ONEINCH_API_KEY (unconfigured without key; no Oracle key shipped)"});v({id:"hl-ws",venue:"hl",chainIds:[],auth:"none",ops:["health","allMids","l2Book","snapshot"],baseEnv:["HL_WS_URL"],description:"Hyperliquid short-lived WS snapshots (allMids/l2Book)"});v({id:"poly-ws",venue:"poly",chainIds:[137],auth:"none",ops:["health","book","snapshot"],baseEnv:["POLY_WS_URL"],description:"Polymarket CLOB short-lived WS market snapshots"});v({id:"opensea-nft",venue:"nft",chainIds:[1,10,137,988,999,2741,4663,8453,42161,43114],auth:"apiKey",ops:["health","collection","floor","bestListings","accountNfts","accountPnl","prepareBuy","prepareSweep","prepareMint","prepareList","prepareCancel"],execution:"prepare",baseEnv:["OPENSEA_API_KEY","OPENSEA_ENV_FILE"],description:"OpenSea multichain NFT inventory, floors, and unsigned bounded buy, sweep, mint, listing, and listing-cancellation preparations"});v({id:"hyperevm-dex",venue:"hyperevm",chainIds:[999],auth:"none",ops:["health","search","token"],baseEnv:["HYPEREVM_RPC_URL"],description:"HyperEVM pair discovery via DexScreener + optional RPC"});v({id:"geckoterminal",venue:"dex-data",chainIds:[],auth:"none",ops:["health","networks","pool","token","ohlcv"],baseEnv:["GECKOTERMINAL_API_URL"],description:"GeckoTerminal public networks, pools, tokens, and OHLCV"});v({id:"curve",venue:"dex",chainIds:[1,10,56,137,988,999,4663,8453,42161,43114],auth:"none",ops:["health","openapi","pools","quote","prepare"],execution:"prepare",baseEnv:["CURVE_API_URL"],description:"Curve public pool registry API + RouterNG validated single-hop prepare"});v({id:"gmx",venue:"perps-data",chainIds:[42161,43114],auth:"none",ops:["health","tickers","markets","marketsInfo","tokens","prepareOrder","positions","orderStatus","verifyOrder"],execution:"intent",baseEnv:[],description:"GMX v2 public oracle/markets plus guarded async order intents on Arbitrum and Avalanche"});v({id:"morpho",venue:"lending-data",chainIds:[1,10,137,2741,8453,42161,4663,999,988],auth:"none",ops:["health","markets","vaults","prepareVault"],execution:"intent",baseEnv:["MORPHO_API_URL"],description:"Morpho public GraphQL markets/vaults + guarded ERC-4626 vault intents"});v({id:"balancer",venue:"dex",chainIds:[1,10,137,42161,43114,8453],auth:"none",ops:["health","pools","quote","prepare"],execution:"prepare",baseEnv:["BALANCER_API_URL"],description:"Balancer public GraphQL pool data + v3 Router exact-input prepare (Polygon read-only)"});v({id:"pendle",venue:"yield",chainIds:[1,10,56,8453,42161,999],auth:"none",ops:["health","markets","quote","prepare"],execution:"prepare",baseEnv:["PENDLE_API_URL"],description:"Pendle public yield-market API + Hosted SDK direct Convert prepare"});v({id:"odos",venue:"dex",chainIds:[1,10,56,137,8453,42161,43114,4663],auth:"none",ops:["health","chains","quote","prepare"],execution:"unavailable",deprecated:{since:"2026-07-30",reason:"Odos sunset the public SOR API; /sor/quote/v2 and v3 both return 410 Gone",evidence:"sunset: Thu, 30 Jul 2026 12:00:00 GMT response header"},baseEnv:["ODOS_API_URL"],description:"Odos public SOR (DEPRECATED upstream 2026-07-30 -- endpoint returns 410)"});v({id:"blockscout",venue:"explorer",chainIds:[1,10,137,8453,42161],auth:"none",ops:["health","stats","address","token"],baseEnv:[],description:"Verified public Blockscout REST v2 instances"});v({id:"paraswap",venue:"dex",chainIds:[1,10,56,137,8453,42161,43114,4663],auth:"none",ops:["health","tokens","price","quote","prepare"],execution:"prepare",baseEnv:["PARASWAP_API_URL"],description:"ParaSwap/Velora public price routes + validated transaction builder"});v({id:"rfq",venue:"intent-rfq",chainIds:[1,10,56,137,8453,42161,43114,4663],auth:"none",ops:["health","intent","quote"],execution:"prepare",baseEnv:["ZEROX_API_KEY","ONEINCH_API_KEY"],description:"Cross-chain RFQ intent normalizer and firm-quote fanout over reviewed venues. Prepares artifacts only, never signs or broadcasts."});v({id:"execution-strategies",venue:"oracle-native",chainIds:[],auth:"none",ops:["health","plan"],execution:"plan-only",baseEnv:[],description:"Oracle-native TWAP, VWAP, POV, iceberg, and implementation-shortfall planners. No Tread.fi/API dependency. Plans never sign or broadcast; every slice requires a fresh best-execution quote, policy check, simulation, confirmation, wallet signature, and receipt."});IJ();v({id:"polygon-staking",venue:"polygon-staking",chainIds:[137],auth:"none",ops:["health","validators","validatorDetail"],baseEnv:["POLYGON_STAKING_API_URL"],description:"Polygon POS staking validators"});v({id:"babylon-staking",venue:"btc-staking",chainIds:[],auth:"none",ops:["health","stats","finalityProviders","delegations"],execution:"read-only",baseEnv:["BABYLON_STAKING_API_URL"],description:"Babylon native BTC staking (staking-api.babylonlabs.io v2). Keyless per-staker positions from a PUBLIC key alone \u2014 APR, TVL, finality-provider roster, and delegations. Read-only; staking/unbonding is user-wallet."});v({id:"mempool-mining",venue:"btc-mining",chainIds:[],auth:"none",ops:["health","difficulty","poolShare","hashrate","rewardStats"],execution:"read-only",baseEnv:["MEMPOOL_API_URL"],description:"Bitcoin mining + network security telemetry via mempool.space /api/v1/mining. Difficulty retarget, pool concentration (top-1/top-3 share), hashrate trend, subsidy-vs-fee split."});v({id:"liquid-esplora",venue:"liquid",chainIds:[],auth:"none",ops:["health","tipHeight","addressInfo","assetInfo"],execution:"read-only",baseEnv:["LIQUID_ESPLORA_URL"],description:"Liquid Network (Blockstream sidechain) via Esplora. Same schema as bitcoin-esplora plus multi-asset issuance/peg stats. Confidential addresses return TXO counts only \u2014 amounts are blinded on chain and reported as such."});v({id:"hiro-stacks",venue:"stacks",chainIds:[],auth:"none",ops:["health","networkInfo","stackingInfo","poxCycles","blocks"],execution:"read-only",baseEnv:["HIRO_API_URL","HIRO_API_KEY"],description:"Stacks (Bitcoin L2) via Hiro public API. Network tip, PoX stacking state (the BTC-yield mechanism), and historical reward cycles. Keyless tier is ~20 rps; HIRO_API_KEY is optional and never required."});v({id:"ordinals-runes",venue:"btc-runes",chainIds:[],auth:"none",ops:["health","blockHeight","blockInfo","satInfo","runeInfo"],execution:"read-only",baseEnv:["ORDINALS_BASE_URL"],description:"Runes + sat/block index via a public ord server (ordinals.com). /r/blockheight is PLAIN TEXT; the /runes listing is 406 'JSON API disabled' so only per-rune lookup exists; rune names must drop the bullet spacer (UNCOMMONGOODS)."});v({id:"mempool-lightning",venue:"btc-lightning",chainIds:[],auth:"none",ops:["health","statistics","nodeRankings","nodeCountries"],execution:"read-only",baseEnv:["MEMPOOL_API_URL"],description:"Lightning Network topology via mempool.space. Capacity/channel/node aggregates, node rankings, country distribution. STALE-PRONE: the crawler snapshot has been observed weeks behind, so every response carries ageDays + a stale flag."});v({id:"bob-rootstock",venue:"btc-l2",chainIds:[60808,30],auth:"none",ops:["health","stats","addressInfo","tokenBalances"],execution:"read-only",baseEnv:["BOB_EXPLORER_URL","ROOTSTOCK_EXPLORER_URL"],description:"BOB (60808) and Rootstock (30) \u2014 the EVM Bitcoin L2s \u2014 via their Blockscout v2 instances (identical schema, one code path). Chain stats, gas prices, native balances, token holdings. Pass chainId 'all' to fan out."});v({id:"bisq-markets",venue:"bisq",chainIds:[],auth:"none",ops:["health","markets","ticker","trades"],execution:"read-only",baseEnv:["BISQ_MARKETS_URL"],description:"Bisq non-KYC P2P BTC price discovery (markets.bisq.network). Value is the BASIS against centralized spot, not the absolute print: volume is thin and the last trade can be hours old, so trade age is always reported."});v({id:"magiceden-ordinals",venue:"btc-ordinals-market",chainIds:[],auth:"none",ops:["health","collectionStat"],execution:"read-only",baseEnv:["MAGICEDEN_ORD_API_URL","MAGICEDEN_API_KEY","MAGICEDEN_PROBE_COLLECTION"],description:"Magic Eden ordinals collection stats. DEGRADED UPSTREAM: /v2/ord/btc/* returned 503 'no healthy upstream' on every verification attempt. health() reports ok:false while it is down and collectionStat() returns upstreamDown:true with fallback 'satflow' instead of throwing. Only /stat is wired; 600 req/min documented."});v({id:"braiins-insights",venue:"btc-mining",chainIds:[],auth:"none",ops:["health","priceStats","poolStats"],execution:"read-only",baseEnv:["BRAIINS_INSIGHTS_URL"],description:"Braiins mining insights \u2014 BTC price tick + per-pool block/hashrate distribution. Use insights.braiins.com (302s to learn.braiins.com, followed transparently); pool.braiins.com/api is 403 and is NOT the public API."});v({id:"pyth-price-feeds",venue:"solana-oracle",chainIds:[],auth:"none",ops:["health","latestPrice","latestPrices","feedDirectory"],baseEnv:["PYTH_HERMES_URL"],description:"Pyth Network: Solana price feeds with confidence intervals, real-time updates, zero auth"});v({id:"solend-lending",venue:"solana-lending",chainIds:[],auth:"none",ops:["health","markets","reserves"],baseEnv:["SAVE_API_URL"],description:"Solend/Save lending: markets + per-reserve supply/borrow APY, Solana's Aave equivalent (keyless)"});v({id:"jito-mev",venue:"solana-mev",chainIds:[],auth:"none",ops:["health","recentBundles","tipFloor"],baseEnv:["JITO_API_URL"],description:"Jito MEV: recent bundles, tippers, tip floor \u2014 real-time Solana MEV data (keyless)"});v({id:"sanctum-lst",venue:"solana-staking",chainIds:[],auth:"none",ops:["health","lstList","apyAll","apyIndividual"],baseEnv:["SANCTUM_API_URL"],description:"Sanctum LST: liquid staking tokens with per-token APY \u2014 JitoSOL, mSOL, bSOL, compSOL, pathSOL, etc. (keyless)"});v({id:"kamino-strategies",venue:"solana-yield",chainIds:[],auth:"none",ops:["health","strategies","strategyMetrics"],baseEnv:["KAMINO_API_URL"],description:"Kamino: live yield strategies with APY, TVL, vault balances (keyless)"});v({id:"meteora-dlmm",venue:"solana-dex",chainIds:[],auth:"none",ops:["health","pools","poolSearch"],baseEnv:["METEORA_API_URL"],description:"Meteora DLMM: concentrated liquidity pools via amm-v2 API, distinct from Jupiter DEX routes (keyless)"});v({id:"aave-v3",venue:"evm-lending",chainIds:[1,10,56,137,59144,1088,534352,8453,42161,43114,5e3,1868],auth:"none",ops:["health","markets","marketReserves","chains"],baseEnv:["AAVE_V3_API_URL"],description:"Aave V3 GraphQL: multi-chain lending, full market + reserve schema with supplyInfo/borrowInfo (keyless)"});v({id:"cow-protocol",venue:"evm-intent",chainIds:[1,100,42161],auth:"none",ops:["health","auction","openOrders","recentTrades"],baseEnv:["COW_API_URL"],description:"CoW Protocol: intent/solver auction data, open orders, trades \u2014 intent-based DEX not covered by existing providers (keyless)"});v({id:"relayscan-mev",venue:"evm-mev",chainIds:[1],auth:"none",ops:["health","overview","builderProfit","dailyStats"],baseEnv:["RELAYSCAN_API_URL"],description:"Relayscan: MEV relay overview, builder profit rankings, daily block stats (keyless)"});v({id:"birdeye-tokens",venue:"solana-tokens",chainIds:[],auth:"none",ops:["health","tokenList"],baseEnv:["BIRDEYE_API_URL"],description:"Birdeye public token list: Solana tokens ranked by 24h volume, market cap (keyless)"});v({id:"das-assets",venue:"solana-nft",chainIds:[],auth:"none",ops:["health","assetsByOwner","searchAssets","assetProof"],baseEnv:["SOLANA_RPC_URL"],description:"Digital Asset Standard (DAS): compressed NFT reads via public Solana RPC \u2014 getAssetsByOwner, searchAssets, assetProof. No Helius key needed."});v({id:"symbiotic-restaking",venue:"evm-restaking",chainIds:[1],auth:"none",ops:["health","vaults","vaultDetail"],baseEnv:["SYMBIOTIC_API_URL"],description:"Symbiotic restaking: vaults with collateral data, approved status, operator metadata (keyless)"});v({id:"beefy-yields",venue:"evm-yield",chainIds:[1,10,56,137,8453,42161,43114,250,1088],auth:"none",ops:["health","apy","apyBreakdown"],baseEnv:["BEEFY_API_URL"],description:"Beefy Finance: cross-chain yield aggregator vaults with APY breakdowns (keyless)"});v({id:"across-bridge",venue:"evm-bridge",chainIds:[1,10,42161,8453,324,59144],auth:"none",ops:["health","pools","suggestedFees"],baseEnv:["ACROSS_API_URL"],description:"Across bridge: pool liquidity + APY per bridge pool with suggested fees (keyless)"});v({id:"spark-lend",venue:"evm-lending",chainIds:[1],auth:"none",ops:["health","markets"],baseEnv:["SPARK_API_URL"],description:"Spark Lend / Sky Savings: ERC-4626 vault APY + TVL + user count (keyless)"});v({id:"l2beat-tvl",venue:"evm-l2",chainIds:[],auth:"none",ops:["health","tvl","activity"],baseEnv:["L2BEAT_API_URL"],description:"L2Beat: L2 scaling TVL, project-level breakdowns, activity metrics (keyless)"});v({id:"celestia-da",venue:"evm-da",chainIds:[],auth:"none",ops:["health","stats","blockStats"],baseEnv:["CELENIUM_API_URL"],description:"Celestia DA via Celenium: blob stats, block-level blob counts, network metrics (keyless)"});M();M();var BJ="https://api.hyperliquid.xyz/info",CJ="https://api.hyperliquid-testnet.xyz/info";function QJ({testnet:e,baseUrl:t}={}){if(t)return t.replace(/\/$/,"").endsWith("/info")?t:`${t.replace(/\/$/,"")}/info`;if(process.env.HL_INFO_URL)return process.env.HL_INFO_URL;if(process.env.HL_API_URL){let r=process.env.HL_API_URL.replace(/\/$/,"");return r.endsWith("/info")?r:`${r}/info`}return e||process.env.HL_TESTNET==="1"?CJ:BJ}async function ge(e,t={}){if(!e||!e.type)throw new Error("hlInfo requires body.type");let r=QJ(t);return C(r,{method:"POST",body:e,fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function Pb(e={}){let t=await ge({type:"allMids"},e),r=t&&typeof t=="object"?Object.keys(t).length:0;return{ok:r>0,midCount:r}}async function gr(e={}){return ge({type:"allMids"},e)}async function yc(e,t={}){if(!e)throw new Error("hlL2Book requires coin");return ge({type:"l2Book",coin:String(e)},t)}async function Rs(e={}){return ge({type:"outcomeMeta"},e)}async function wc(e,t={}){if(!e)throw new Error("hlClearinghouse requires user address");return ge({type:"spotClearinghouseState",user:e},t)}async function _b(e,t={}){if(!e)throw new Error("hlUserFills requires user address");return ge({type:"userFills",user:e},t)}async function Ob(e={}){return ge({type:"meta"},e)}async function qo(e={}){let t={type:"metaAndAssetCtxs"};return e.dex&&(t.dex=e.dex),ge(t,e)}async function bc({coin:e,interval:t="1h",startTime:r,endTime:n},o={}){if(!e)throw new Error("hlCandleSnapshot requires coin");let i={type:"candleSnapshot",req:{coin:String(e),interval:t,startTime:r??Date.now()-24*3600*1e3,endTime:n??Date.now()}};return ge(i,o)}async function Hb(e,t={}){if(!e)throw new Error("hlOpenOrders requires user");return ge({type:"openOrders",user:e},t)}async function Gb(e,t={}){if(!e)throw new Error("hlFrontendOpenOrders requires user");return ge({type:"frontendOpenOrders",user:e},t)}async function kc(e,t={}){if(!e)throw new Error("hlUserState requires user");return ge({type:"clearinghouseState",user:e},t)}async function Sc(e={}){return ge({type:"spotMeta"},e)}var wJ=/^0x[0-9a-fA-F]{40}$/,Yb="0xdfc24b077bc1425ad1dea75bcb6f8158e10df303";function Hg(e,t){let r=String(e||"").trim();if(!wJ.test(r))throw new Error(`hl-vaults: ${t} must be a 0x EVM address`);return r.toLowerCase()}function qb(e){if(e==null||e==="")return null;let t=Number(e);return Number.isFinite(t)?t:null}function Vb(e={}){let t=Array.isArray(e.portfolio)?e.portfolio:[],r=t.find(([i])=>i==="day")?.[1]||null,n=Array.isArray(r?.accountValueHistory)?r.accountValueHistory:[],o=Array.isArray(r?.pnlHistory)?r.pnlHistory:[];return{name:e.name??null,vaultAddress:e.vaultAddress??e.address??null,leader:e.leader??null,description:e.description??null,tvl:e.tvl??n.at(-1)?.[1]??null,apr:e.apr??null,pnl:e.pnl??o.at(-1)?.[1]??null,isClosed:e.isClosed??null,allowDeposits:e.allowDeposits??null,maxDistributable:e.maxDistributable??null,followers:e.followers??null,portfolio:t}}function bJ(e){return[...e].sort((t,r)=>(qb(r.tvl)??-1)-(qb(t.tvl)??-1))}function Gg(e){return e.hlInfo||ge}function qg(e){return{...e,exec:!1,execution:"read-only",armed:!1}}async function Yg(e={},t={}){let r=await Gg(t)({type:"vaultSummaries"},t),n=bJ((Array.isArray(r)?r:[]).map(Vb));return qg({provider:"hl-vaults",count:n.length,vaults:n,raw:r})}async function xc(e={},t={}){let n={type:"vaultDetails",vaultAddress:Hg(e.vaultAddress||e.address,"vaultAddress")};e.user&&(n.user=Hg(e.user,"user"));let o=await Gg(t)(n,t);return qg({provider:"hl-vaults",vault:Vb(o||{}),raw:o})}async function Vg(e={},t={}){let r=Hg(e.user||e.address,"user"),n=await Gg(t)({type:"userVaultEquities",user:r},t),o=(Array.isArray(n)?n:[]).map(i=>({vaultAddress:i.vaultAddress??i.address??null,equity:i.equity??i.vaultEquity??null}));return qg({provider:"hl-vaults",user:r,count:o.length,positions:o,raw:n})}async function Jg(e={},t={}){let r=String(e.mode||"hlp").toLowerCase();if(r==="hlp")return xc({...e,vaultAddress:Yb},t);if(r==="summaries")return Yg(e,t);if(r==="details")return xc(e,t);if(r==="mine")return Vg(e,t);throw new Error("hl-vaults: mode must be hlp, summaries, details, or mine")}async function Jb(e={}){try{let t=await Jg({mode:"hlp"},e);return{ok:t.vault.vaultAddress===Yb&&!!t.vault.name,provider:"hl-vaults",hlp:{name:t.vault.name,vaultAddress:t.vault.vaultAddress,tvl:t.vault.tvl,apr:t.vault.apr,allowDeposits:t.vault.allowDeposits},exec:!1,execution:"read-only",armed:!1}}catch(t){return{ok:!1,provider:"hl-vaults",error:String(t?.message||t).slice(0,160),exec:!1,execution:"read-only",armed:!1}}}M();var SJ="https://clob.polymarket.com",xJ="https://gamma-api.polymarket.com";function Ns(e={}){return(e.clobUrl||process.env.POLY_CLOB_URL||SJ).replace(/\/$/,"")}function Wb(e={}){return(e.gammaUrl||process.env.POLY_GAMMA_URL||xJ).replace(/\/$/,"")}async function Wg(e={}){return C(`${Ns(e)}/time`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs})}async function $b(e={}){let t=await Wg(e);return{ok:t!=null&&t!=="",time:t}}async function zb({limit:e=5,offset:t=0,...r}={},n={}){let o=new URLSearchParams({limit:String(e),offset:String(t),...Object.fromEntries(Object.entries(r).filter(([,i])=>i!=null).map(([i,s])=>[i,String(s)]))});return C(`${Wb(n)}/markets?${o}`,{fetchImpl:n.fetchImpl,timeoutMs:n.timeoutMs})}async function Kb(e,t={}){if(!e)throw new Error("polyBook requires tokenId");let r=new URLSearchParams({token_id:String(e)});return C(`${Ns(t)}/book?${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function jb(e,t={}){if(!e)throw new Error("polyMidpoint requires tokenId");let r=new URLSearchParams({token_id:String(e)});return C(`${Ns(t)}/midpoint?${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function Zb(e,t={}){if(!e)throw new Error("polySpread requires tokenId");let r=new URLSearchParams({token_id:String(e)});return C(`${Ns(t)}/spread?${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function Xb(e,{side:t="buy"}={},r={}){if(!e)throw new Error("polyPrice requires tokenId");let n=new URLSearchParams({token_id:String(e),side:String(t)});return C(`${Ns(r)}/price?${n}`,{fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs})}async function ek({limit:e=5,offset:t=0,...r}={},n={}){let o=new URLSearchParams({limit:String(e),offset:String(t),...Object.fromEntries(Object.entries(r).filter(([,i])=>i!=null).map(([i,s])=>[i,String(s)]))});return C(`${Wb(n)}/events?${o}`,{fetchImpl:n.fetchImpl,timeoutMs:n.timeoutMs})}De();M();import{createHash as tk}from"node:crypto";var Yo="mainnet-beta",vJ="https://api.mainnet-beta.solana.com",$g="TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";function RJ(e={}){return String(e.rpcUrl||process.env.SOLANA_RPC_URL||vJ).trim()}function me(e,t="address"){let r=String(e||"").trim();if(!/^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(r))throw new Error(`solana-rpc: ${t} must be a base58 public key`);return r}function NJ(e,t){return t?[...e,{commitment:t}]:e}async function Fs(e,t=[],r={}){let n=String(e||"");if(n==="sendTransaction"||n==="sendRawTransaction"||n==="requestAirdrop"||n==="requestAirDrop"||/airdrop/i.test(n)||/^send/i.test(n))throw new Error(`solana-rpc: ${n} refused \u2014 @oracle-agent/oracle is prepare-only (no broadcast/airdrop)`);let o=await C(RJ(r),{method:"POST",body:{jsonrpc:"2.0",id:r.id||1,method:e,params:t},fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3});if(o?.error)throw new Error(`solana-rpc ${e}: ${o.error.message||JSON.stringify(o.error)}`);return o?.result}async function zg(e={},t={}){let r=e.commitment?[{commitment:e.commitment}]:[],n=await Fs("getLatestBlockhash",r,t);return{provider:"solana-rpc",cluster:Yo,blockhash:n?.value?.blockhash||null,lastValidBlockHeight:n?.value?.lastValidBlockHeight??null,slot:n?.context?.slot??null,raw:n}}async function rk(e={}){try{let[t,r]=await Promise.all([Fs("getHealth",[],e),zg({},e)]);return{ok:t==="ok",provider:"solana-rpc",cluster:Yo,health:t,latestBlockhash:r,exec:!1}}catch(t){return{ok:!1,provider:"solana-rpc",cluster:Yo,error:String(t?.message||t),exec:!1}}}async function Dc(e={},t={}){let r=me(e.address||e.owner,"address"),n=await Fs("getBalance",NJ([r],e.commitment),t);return{provider:"solana-rpc",cluster:Yo,address:r,lamports:String(n?.value??0),slot:n?.context?.slot??null,raw:n}}function FJ(e={}){let t=e.account?.data?.parsed?.info||{},r=t.tokenAmount||{};return{pubkey:e.pubkey,mint:t.mint||null,owner:t.owner||null,amount:String(r.amount??"0"),decimals:r.decimals??null,uiAmount:r.uiAmount??null,uiAmountString:r.uiAmountString??null,raw:e}}async function Ms(e={},t={}){let r=me(e.owner||e.address,"owner"),n=e.mint?{mint:me(e.mint,"mint")}:{programId:me(e.programId||$g,"token program")},o={encoding:"jsonParsed"};e.commitment&&(o.commitment=e.commitment);let i=await Fs("getTokenAccountsByOwner",[r,n,o],t),s=Array.isArray(i?.value)?i.value.map(FJ):[];return{provider:"solana-rpc",cluster:Yo,owner:r,filter:n,slot:i?.context?.slot??null,accounts:s,raw:i}}function MJ(e){let t=String(e||"").trim();if(!/^[A-Za-z0-9+/]+={0,2}$/.test(t)||t.length%4!==0)throw new Error("solana-rpc: transaction must be base64");return t}function UJ(e,t){let r=0,n=0,o=t;for(let i=0;i<3;i++){if(o>=e.length)throw new Error("solana-rpc: transaction shortvec truncated");let s=e[o++];if(r|=(s&127)<<n,(s&128)===0)return{value:r,offset:o};n+=7}throw new Error("solana-rpc: transaction shortvec too long")}function LJ(e){let t=Buffer.from(e,"base64");try{let r=UJ(t,0),n=r.offset+r.value*64;if(n>=t.length)throw new Error("missing message");return tk("sha256").update(t.subarray(n)).digest("hex")}catch{return tk("sha256").update(t).digest("hex")}}async function nk(e={},t={}){let r=MJ(e.transaction||e.swapTransaction),n={encoding:"base64",sigVerify:!!e.sigVerify,replaceRecentBlockhash:e.replaceRecentBlockhash!==!1};e.commitment&&(n.commitment=e.commitment);let o=await Fs("simulateTransaction",[r,n],t),i=o?.value||{};return{provider:"solana-rpc",cluster:Yo,ok:i.err==null,transactionHash:LJ(r),err:i.err??null,logs:i.logs||[],unitsConsumed:i.unitsConsumed??null,replacementBlockhash:i.replacementBlockhash||null,slot:o?.context?.slot??null,raw:o}}M();var PJ="mainnet",_J="https://mempool.space/api",OJ="https://mempool.space/testnet/api";function Kt(e={}){return String(e.network||process.env.BTC_NETWORK||PJ).trim().toLowerCase()==="testnet"?"testnet":"mainnet"}function jg(e={}){return e.baseUrl?String(e.baseUrl).replace(/\/$/,""):process.env.BTC_ESPLORA_URL?String(process.env.BTC_ESPLORA_URL).replace(/\/$/,""):Kt(e)==="testnet"?OJ:_J}function Kg(e){let t=String(e||"");try{let r=new URL(t);(r.username||r.password)&&(r.username="[REDACTED]",r.password="");for(let n of[...r.searchParams.keys()])/^(key|api[_-]?key|token|secret|password|auth|bearer)$/i.test(n)&&r.searchParams.set(n,"[REDACTED]");t=r.toString().replace(/\/$/,"")}catch{}return t.replace(/(https?:\/\/)([^\s/:@]+):([^\s@/]+)@/gi,"$1[REDACTED]@").replace(/([?&](?:key|api[_-]?key|token|secret|password|auth|bearer)=)[^&\s]+/gi,"$1[REDACTED]")}function Ut(e,t="address"){let r=String(e||"").trim();if(!/^(bc1|tb1|bcrt1)[a-z0-9]{20,90}$/i.test(r)&&!/^[13mn2][a-km-zA-HJ-NP-Z1-9]{25,34}$/.test(r))throw new Error(`bitcoin-esplora: ${t} must look like a Bitcoin address`);return r}function HJ(e,t="txHex"){let r=String(e||"").trim().toLowerCase().replace(/^0x/,"");if(!/^[0-9a-f]+$/.test(r)||r.length<20||r.length%2!==0)throw new Error(`bitcoin-esplora: ${t} must be even-length hex`);return r}async function Zg(e,t={}){let r=`${jg(t)}${e.startsWith("/")?e:`/${e}`}`,o=await(t.fetchImpl||fetch)(r,{method:"GET",headers:{accept:"application/json,text/plain;q=0.9,*/*;q=0.8"},signal:AbortSignal.timeout(t.timeoutMs??12e3)}),i=await o.text();if(!o.ok)throw new Error(`bitcoin-esplora GET ${e}: HTTP ${o.status} ${i.slice(0,160)}`);return i}async function vc(e,t={}){let r=await Zg(e,t);try{return JSON.parse(r)}catch{return r}}async function ok(e={}){try{let t=await Zg("/blocks/tip/height",e),r=Number(t);return{ok:Number.isFinite(r)&&r>0,provider:"bitcoin-esplora",network:Kt(e),baseUrl:Kg(jg(e)),tipHeight:r,exec:!1,signing:"user-wallet"}}catch(t){return{ok:!1,provider:"bitcoin-esplora",network:Kt(e),baseUrl:Kg(jg(e)),error:Kg(t?.message||t),exec:!1}}}async function ik(e={}){let t=await Zg("/blocks/tip/height",e);return{provider:"bitcoin-esplora",network:Kt(e),tipHeight:Number(t)}}async function sk(e={}){try{let t=await vc("/v1/fees/recommended",e);return{provider:"bitcoin-esplora",network:Kt(e),fastestFee:t.fastestFee??null,halfHourFee:t.halfHourFee??null,hourFee:t.hourFee??null,economyFee:t.economyFee??null,minimumFee:t.minimumFee??null,raw:t}}catch{return{provider:"bitcoin-esplora",network:Kt(e),fastestFee:null,halfHourFee:null,hourFee:null,note:"fee endpoint unavailable on this Esplora host"}}}async function Rc(e={},t={}){let r=Ut(e.address||e.addr,"address"),n=await vc(`/address/${r}`,t),o=n.chain_stats||{},i=n.mempool_stats||{},s=Number(o.funded_txo_sum||0)+Number(i.funded_txo_sum||0),a=Number(o.spent_txo_sum||0)+Number(i.spent_txo_sum||0);return{provider:"bitcoin-esplora",network:Kt(t),address:r,balanceSats:String(s-a),chainStats:o,mempoolStats:i,raw:n}}async function ak(e={},t={}){let r=Ut(e.address||e.addr,"address"),n=await vc(`/address/${r}/utxo`,t),o=Array.isArray(n)?n:[];return{provider:"bitcoin-esplora",network:Kt(t),address:r,count:o.length,totalSats:String(o.reduce((i,s)=>i+Number(s.value||0),0)),utxos:o.map(i=>({txid:i.txid,vout:i.vout,value:Number(i.value||0),status:i.status||null}))}}async function Ak(e={},t={}){let r=String(e.txid||e.txId||"").trim().toLowerCase();if(!/^[0-9a-f]{64}$/.test(r))throw new Error("bitcoin-esplora: txid must be 64-char hex");let n=await vc(`/tx/${r}`,t);return{provider:"bitcoin-esplora",network:Kt(t),txid:r,confirmed:!!n.status?.confirmed,fee:n.fee??null,size:n.size??null,weight:n.weight??null,vinCount:Array.isArray(n.vin)?n.vin.length:null,voutCount:Array.isArray(n.vout)?n.vout.length:null,raw:n}}async function ck(e={},t={}){let r=HJ(e.txHex||e.hex||e.transaction,"txHex");return{provider:"bitcoin-esplora",network:Kt(t),encoding:"hex",txHex:r,byteLength:r.length/2,note:"full decode is wallet/client-side or via bitcoinjs; Esplora returns broadcast acceptance only"}}var lk="ORACLE_ALLOW_CUSTOM_PROVIDER_URL";function Lt({provider:e,defaultUrl:t,hosts:r=[],url:n,strict:o=!1}){let s=(String(n??"").trim()||String(t)).replace(/\/$/,"");if(s===String(t).replace(/\/$/,""))return{baseUrl:s,trusted:!0,host:uk(t)};let a;try{a=new URL(s)}catch{throw new Error(`${e}: baseUrl must be an absolute http(s) URL`)}if(a.protocol!=="http:"&&a.protocol!=="https:")throw new Error(`${e}: baseUrl must be an absolute http(s) URL`);let A=a.host;if(!A)throw new Error(`${e}: baseUrl must be an absolute http(s) URL`);if(new Set([uk(t),...r]).has(A)){let l=/^(127\.0\.0\.1|localhost|\[::1\])(:\d+)?$/i.test(A);return a.protocol==="http:"&&!l?{baseUrl:s,trusted:!1,host:A,reason:"plaintext http downgrade"}:{baseUrl:s,trusted:!0,host:A}}if(String(process.env[lk]||"")==="1")return{baseUrl:s,trusted:!1,host:A};if(o)throw new Error(`${e}: refusing to call non-allowlisted host ${A} (set ${lk}=1 to permit it)`);return{baseUrl:s,trusted:!1,host:A}}function uk(e){let t=new URL(String(e));if(t.protocol!=="http:"&&t.protocol!=="https:")throw new Error("unsupported protocol");return t.host}function Ct(e,t,r){let n={...e};if(!r)return n;for(let[o,i]of Object.entries(t||{}))i&&(n[o]=i);return n}var Xg="https://ordinals.com";function Nc(e={}){return String(e.baseUrl||process.env.BTC_META_API_URL||process.env.UNISAT_API_URL||"").trim().replace(/\/$/,"")}var qJ=["open-api.unisat.io","open-api-testnet.unisat.io","api.bestinslot.xyz","api.hiro.so"];function dk(e={}){let t=e.apiKey||process.env.UNISAT_API_KEY||process.env.BESTINSLOT_API_KEY||process.env.BTC_META_API_KEY||"",r=!1;try{let n=Nc(e);if(n){let o=new URL(n).host,i=new URL(n).protocol,s=/^(127\.0\.0\.1|localhost|\[::1\])(:\d+)?$/i.test(o);r=qJ.includes(o)&&(i==="https:"||s)}}catch{r=!1}return Ct({accept:"application/json","user-agent":"oracle-btc-meta/0.1"},{authorization:t?`Bearer ${t}`:"","x-api-key":t},r)}async function Vo(e,t={}){let n=await(t.fetchImpl||fetch)(e,{method:"GET",headers:dk(t),signal:AbortSignal.timeout(t.timeoutMs??12e3)}),o=await n.text(),i;try{i=JSON.parse(o)}catch{i=o}if(!n.ok)throw new Error(`bitcoin-meta GET ${e}: HTTP ${n.status} ${String(o).slice(0,160)}`);return i}async function hk(e={}){let t=Nc(e),r=null;try{let i=await(e.fetchImpl||fetch)("https://ordinals.com/r/blockheight",{signal:AbortSignal.timeout(8e3)});r=Number(await i.text())}catch{r=null}if(!t)return{ok:r!=null,provider:"bitcoin-meta",indexerConfigured:!1,ordinalsComTip:r,note:"Set BTC_META_API_URL and/or UNISAT_API_KEY / BESTINSLOT_API_KEY for balances. Marketplace = Satflow (SATFLOW_API_KEY). Magic Eden BTC is dead.",capabilities:{tip:r!=null,runeBalances:!1,inscriptions:!1,marketplace:!1}};let n={ok:!1,path:null,status:null};for(let o of["/v1/indexer/brc20/best-height","/v1/health","/health","/"])try{let s=await(e.fetchImpl||fetch)(`${t}${o}`,{headers:dk(e),signal:AbortSignal.timeout(8e3)});if(n={ok:s.status>0&&s.status<500,path:o,status:s.status},s.ok)break}catch{}return{ok:n.ok||r!=null,provider:"bitcoin-meta",indexerConfigured:!0,baseUrl:t,probe:n,ordinalsComTip:r,apiKeyPresent:!!(process.env.UNISAT_API_KEY||process.env.BESTINSLOT_API_KEY||process.env.BTC_META_API_KEY),capabilities:{tip:r!=null,runeBalances:!0,inscriptions:!0,marketplace:!!process.env.SATFLOW_API_KEY}}}async function Fc(e={},t={}){let r=Ut(e.address||e.addr,"address"),n=Nc(t);if(!n)return{provider:"bitcoin-meta",address:r,ok:!1,balances:[],error:"no indexer configured (set BTC_META_API_URL or vendor API key env)"};let o=[`${n}/v1/indexer/address/${r}/runes/balance-list?start=0&limit=100`,`${n}/v1/runes/address/${r}`,`${n}/runes/balance/${r}`,`${n}/address/${r}/runes`],i=null;for(let s of o)try{let a=await Vo(s,t),A=YJ(a);return{provider:"bitcoin-meta",address:r,ok:!0,count:A.length,balances:A,source:s}}catch(a){i=a}return{provider:"bitcoin-meta",address:r,ok:!1,balances:[],error:String(i?.message||i||"all indexer paths failed")}}function YJ(e){let t=e?.data?.detail||e?.data?.list||e?.data||e?.balances||e?.results||e?.runes||(Array.isArray(e)?e:[]);return(Array.isArray(t)?t:[]).map(n=>({rune:n.rune||n.runeid||n.runeId||n.spacedRune||n.name||n.ticker||null,runeId:n.runeid||n.runeId||n.id||null,amount:String(n.amount??n.balance??n.total??n.qty??"0"),symbol:n.symbol||null,divisibility:n.divisibility??n.div??null,raw:n}))}async function Jo(e={},t={}){let r=Ut(e.address||e.addr,"address"),n=Nc(t);if(!n)return{provider:"bitcoin-meta",address:r,ok:!1,inscriptions:[],error:"no indexer configured \u2014 address-indexed lookups need a keyed indexer (BTC_META_API_URL + UNISAT_API_KEY / BESTINSLOT_API_KEY). ordinals.com recursive is keyless but has no address index.",unknownNotEmpty:!0,keylessAlternatives:["btc_inscription_info (by inscription id)","btc_meta_health"]};let o=Math.min(Number(e.limit||50),200),i=[`${n}/v1/indexer/address/${r}/inscription-data?cursor=0&size=${o}`,`${n}/v1/inscriptions/address/${r}?limit=${o}`,`${n}/address/${r}/inscriptions?limit=${o}`],s=null;for(let a of i)try{let A=await Vo(a,t),c=VJ(A);return{provider:"bitcoin-meta",address:r,ok:!0,count:c.length,inscriptions:c,source:a}}catch(A){s=A}return{provider:"bitcoin-meta",address:r,ok:!1,inscriptions:[],error:String(s?.message||s||"all indexer paths failed")}}async function gk(e={},t={}){let r=String(e.inscriptionId||e.id||"").trim();if(!/^[0-9a-f]{64}i\d+$/i.test(r))throw new Error("bitcoin-meta: inscriptionId must look like <64-hex-txid>i<index>");let n=t.ordinalsBase||Xg,o=await Vo(`${n}/r/inscription/${r}`,t);return{provider:"bitcoin-meta",source:"ordinals.com/r",keyless:!0,inscriptionId:r,info:o}}async function pk(e={},t={}){let r=String(e.inscriptionId||e.id||"").trim();if(!/^[0-9a-f]{64}i\d+$/i.test(r))throw new Error("bitcoin-meta: inscriptionId must look like <64-hex-txid>i<index>");let n=t.ordinalsBase||Xg,o=Number(e.page||0),i=await Vo(`${n}/r/children/${r}${o?`/${o}`:""}`,t);return{provider:"bitcoin-meta",source:"ordinals.com/r",keyless:!0,inscriptionId:r,page:o,children:Array.isArray(i?.ids)?i.ids:[],more:!!i?.more}}async function fk(e={},t={}){let r=t.ordinalsBase||Xg,n=e.height??await Vo(`${r}/r/blockheight`,t),o=await Vo(`${r}/r/blockinfo/${Number(n)}`,t);return{provider:"bitcoin-meta",source:"ordinals.com/r",keyless:!0,height:Number(n),info:o}}function VJ(e){let t=e?.data?.inscription||e?.data?.detail||e?.data?.list||e?.data||e?.inscriptions||e?.results||(Array.isArray(e)?e:[]);return(Array.isArray(t)?t:[]).map(n=>({id:n.inscriptionId||n.id||n.inscription_id||null,number:n.inscriptionNumber??n.number??null,sat:n.sat||n.satoshi||null,contentType:n.contentType||n.content_type||null,utxo:n.utxo||n.output||(n.txid!=null?`${n.txid}:${n.vout??n.n}`:null),raw:n}))}var WJ=["unsigned","notsigned","tosign","signable"],$J=new Set(["requiresusersignature","requiressignature","needssignature","signaturerequired","signaturesrequired","signingready","signaturecount","signaturethreshold","requiredsignatures","signatureneeded","hassignature","allowsignatures","requestsignature","multisig","cosig","msig"]),zJ=new Set(["sig","sigs","scriptsig","witness","psbt","finalizedpsbt","completepsbt","finalpsbt","psbtfinalized","serializedtransaction"]);function ep(e){return String(e).toLowerCase().replace(/[^a-z0-9]/g,"")}function KJ(e){return WJ.some(t=>e.startsWith(t))||$J.has(e)}function jJ(e){let t=String(e);if(!/^[\x20-\x7e]+$/.test(t))return!0;let r=ep(t);return KJ(r)?!1:zJ.has(r)?!0:r.includes("signed")||r.includes("signature")||r.endsWith("sig")||r.endsWith("sigs")}function ZJ(e){let t=Number(e?.v),r=String(e?.r||""),n=String(e?.s||"");return[0,1,27,28].includes(t)&&/^0x[0-9a-f]{2,64}$/i.test(r)&&/^0x[0-9a-f]{2,64}$/i.test(n)}function tp(e,t=0,r=new Set,n={nodes:0}){if(e==null||typeof e!="object")return[];if(t>16)return["<max-depth>"];if(r.has(e))return[];if(n.nodes+=1,n.nodes>2048)return["<max-nodes>"];if(r.add(e),Array.isArray(e))return e.flatMap(A=>tp(A,t+1,r,n));let o=[];for(let[A,c]of Object.entries(e)){if(jJ(A)){o.push(A);continue}o.push(...tp(c,t+1,r,n))}let s=Object.keys(e).map(ep).some(A=>A.endsWith("psbt")||A.endsWith("psbtbase64")),a=Object.entries(e).some(([A,c])=>/complete|finalized|isfinal/.test(ep(A))&&c===!0);return s&&a&&o.push("psbt(complete)"),ZJ(e)&&o.push("v/r/s"),o}function pr(e,t){let r=tp(t);if(r.length)throw new Error(`${e}: refused a pre-signed transaction payload from the API (fields: ${[...new Set(r)].join(", ")}) \u2014 @oracle-agent/oracle is prepare-only and will not bind signed material into a prepared envelope`)}var XJ="https://api.satflow.com/v1";function mk(e={}){return Lt({provider:"satflow",defaultUrl:XJ,hosts:["api.satflow.com"],url:e.baseUrl||process.env.SATFLOW_API_URL})}function Mc(e={}){return mk(e).baseUrl}function np(e={}){return String(e.apiKey||process.env.SATFLOW_API_KEY||process.env.BTC_SATFLOW_API_KEY||"").trim()}function e5(e={}){return Ct({accept:"application/json","content-type":"application/json","user-agent":"oracle-btc-satflow/0.1"},{"x-api-key":np(e)},mk(e).trusted)}async function _r(e,{method:t="GET",body:r,opts:n={}}={}){if(!np(n))throw new Error("satflow: SATFLOW_API_KEY not set (request key via Satflow docs form)");let i=`${Mc(n)}${e.startsWith("/")?e:`/${e}`}`,a=await(n.fetchImpl||fetch)(i,{method:t,headers:e5(n),body:r!=null?JSON.stringify(r):void 0,signal:AbortSignal.timeout(n.timeoutMs??2e4)}),A=await a.text(),c;try{c=JSON.parse(A)}catch{c=A}if(!a.ok)throw new Error(`satflow ${t} ${e}: HTTP ${a.status} ${String(A).slice(0,200)}`);return c}async function Ek(e={}){if(!!!np(e))return{ok:!1,provider:"satflow",baseUrl:Mc(e),apiKeyPresent:!1,marketplace:"satflow",magicEdenOrdinals:"deprecated-dead",note:"Set SATFLOW_API_KEY. Magic Eden BTC ordinals marketplace is shut down \u2014 do not use ME."};try{return await _r("/collection/stats/floors?type=ordinals",{opts:e}),{ok:!0,provider:"satflow",baseUrl:Mc(e),apiKeyPresent:!0,marketplace:"satflow",magicEdenOrdinals:"deprecated-dead",capabilities:{floors:!0,walletContents:!0,purchaseIntent:!0,listIntent:!0,bidIntent:!0}}}catch(r){return{ok:!1,provider:"satflow",baseUrl:Mc(e),apiKeyPresent:!0,error:String(r?.message||r).slice(0,200),magicEdenOrdinals:"deprecated-dead"}}}async function Ik(e={},t={}){let r=String(e.type||"ordinals").toLowerCase();if(!["ordinals","runes"].includes(r))throw new Error("satflow: type must be ordinals|runes");let n=new URLSearchParams({type:r});e.ids&&n.set("ids",Array.isArray(e.ids)?e.ids.join(","):String(e.ids));let o=await _r(`/collection/stats/floors?${n}`,{opts:t});return{provider:"satflow",type:r,floors:o,magicEdenOrdinals:"deprecated-dead"}}async function Bk(e={},t={}){let r=String(e.collectionId||e.id||e.slug||"").trim();if(!r)throw new Error("satflow: collectionId required");let n=new URLSearchParams({id:r});e.type&&n.set("type",e.type);let o=await _r(`/collection/stats?${n}`,{opts:t});return{provider:"satflow",collectionId:r,stats:o}}async function Ck(e={},t={}){let r=String(e.inscriptionId||e.id||"").trim();if(!r)throw new Error("satflow: inscriptionId required");let n=new URLSearchParams({id:r});return{provider:"satflow",item:await _r(`/item?${n}`,{opts:t})}}async function Uc(e={},t={}){let r=Ut(e.address||e.addr,"address"),n=new URLSearchParams({address:r});e.type&&n.set("type",e.type),e.limit!=null&&n.set("limit",String(e.limit)),e.offset!=null&&n.set("offset",String(e.offset));let o=await _r(`/address/wallet-contents?${n}`,{opts:t});return{provider:"satflow",address:r,contents:o}}async function Qk(e={},t={}){let r=e.collectionIds||e.ids||e.collectionId;if(!r)throw new Error("satflow: collectionIds required");let n=new URLSearchParams({ids:Array.isArray(r)?r.join(","):String(r)});return e.limit!=null&&n.set("limit",String(e.limit)),{provider:"satflow",listings:await _r(`/orders/floor?${n}`,{opts:t})}}var t5=new Set(["body","execute","fetchImpl","opts","apiKey","baseUrl","timeoutMs","maxSats","operator"]);function yk(e={},t=null){let r=e.body&&typeof e.body=="object"?e.body:e,n={};for(let[o,i]of Object.entries(r))t5.has(o)||t&&!t.has(o)||i!==void 0&&(n[o]=i);return n}var r5=new Set(["listing_id","listingId","inscription_id","inscriptionId","runes_output","runesOutput","buyer_address","buyerAddress","ord_address","receive_address","payment_address","pay_address","tap_key","public_key","publicKey","fee_rate","feeRate","price","quantity","slug","collection_slug"]),n5=new Set(["inscription_id","inscriptionId","runes_output","runesOutput","ord_address","receive_address","price","tap_key","collection_slug","expires_at"]);function rp(e){if(!e||typeof e!="object")return null;let t=[e.price,e.priceSats,e.price_sats,e.totalSats,e.total_sats,e.amount,e.satoshis];for(let r of t){if(r==null)continue;let n=String(r).trim();if(/^\d+$/.test(n))return BigInt(n)}return null}function o5(e={},{psbt:t,priceSats:r,nowMs:n=Date.now()}={}){if(!t)throw new Error("satflow: local signer envelope requires unsigned PSBT");let o=Ut(e.owner||e.buyer_address||e.buyerAddress||e.payment_address||e.pay_address,"owner"),i=Ut(e.destination||e.seller_address||e.sellerAddress||e.payment_destination,"destination"),s=String(e.network||"bitcoin").toLowerCase();if(!["bitcoin","mainnet","testnet","signet","regtest"].includes(s))throw new Error("satflow: unsupported Bitcoin network");return{version:1,surface:"btc",action:"transfer",owner:o,destination:i,tradeId:e.tradeId||`satflow-${e.listing_id||e.listingId||e.inscription_id||e.inscriptionId||"purchase"}`,slippageBps:0,expiresAtMs:Number(n)+Math.min(Math.max(Number(e.ttlMs??e.expiresInMs??3e4)||3e4,1e3),6e4),fee:{oracleFeeBps:0},artifact:{network:s,psbt:t},meta:{provider:"satflow",kind:"purchase-intent",priceSats:String(r)}}}async function wk(e={},t={}){let r=yk(e,r5);if(!r||Object.keys(r).length===0)throw new Error("satflow: purchase body required (see docs.satflow.com intent/satflow-purchase)");let n=e.maxSats??e.body?.maxSats;if(n==null)throw new Error("satflow: maxSats is required to prepare a purchase \u2014 an uncapped buy has no spend ceiling");let o=BigInt(String(n).trim());if(o<=0n)throw new Error("satflow: maxSats must be a positive integer sat amount");let i=rp(r);if(i!=null&&i>o)throw new Error(`satflow: requested price ${i} sats exceeds maxSats cap ${o}`);let s=await _r("/intent/satflow-purchase",{method:"POST",body:r,opts:t}),a=rp(s)??rp(s?.intent);if(a==null)throw new Error("satflow: purchase intent did not report a price \u2014 refusing to return an unverifiable PSBT");if(a>o)throw new Error(`satflow: purchase price ${a} sats exceeds maxSats cap ${o} \u2014 PSBT withheld`);pr("satflow",s);let A=s?.unsignedPSBTBase64||s?.unsignedPsbtBase64||s?.unsigned_psbt||null,c=null,l=null;try{c=o5(e,{psbt:A,priceSats:a,nowMs:t.nowMs})}catch(u){l=String(u?.message||u).slice(0,200)}return L({provider:"satflow",kind:"purchase-intent",executionReady:!1,signingReady:!1,broadcastReady:!1,requiresUserSignature:!0,marketplace:"satflow",magicEdenOrdinals:"deprecated-dead",priceSats:a.toString(),maxSats:o.toString(),intent:s,unsignedPsbt:A,localSignerEnvelope:c,localSignerBlockedReason:l,note:"Sign PSBT in a Bitcoin wallet. Broadcast only through the user's wallet or an explicitly armed Bitcoin execution plane."})}async function Lc(e={},t={}){let r=yk(e,n5);if(!r.inscription_id&&!r.runes_output&&!r.inscriptionId&&!r.runesOutput)throw new Error("satflow: list requires inscription_id or runes_output");let n=await _r("/intent/sell",{method:"POST",body:r,opts:t});return pr("satflow",n),L({provider:"satflow",kind:"list-intent",requiresUserSignature:!0,marketplace:"satflow",listingRequest:r,intent:n,unsignedPsbt:n?.unsignedListingPSBTBase64||n?.unsigned_psbt||null,note:"Sign listing PSBTs in a Bitcoin wallet; listing broadcast is outside the data plane."})}M();var Pc="https://lite-api.jup.ag/swap/v1",ip="So11111111111111111111111111111111111111112",Sk="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",s5=100,bk=2e4;function xk(e={}){return String(e.baseUrl||process.env.JUPITER_SWAP_API_URL||Pc).replace(/\/$/,"")}function Us(e,t="amount"){try{let r=BigInt(String(e));if(r<=0n)throw new Error("nonpositive");return r.toString()}catch{throw new Error(`jupiter: ${t} must be a positive integer string`)}}function Dk(e){let t=e==null?50:Number(e);if(!Number.isInteger(t)||t<0)throw new Error("jupiter: slippageBps must be a non-negative integer");if(t>s5)throw new Error("jupiter: slippage exceeds hard 100 bps cap");return t}function Tc(e,t){return e==null?t:!!e}function a5(e){let t=String(e||"").trim();if(!/^[A-Za-z0-9+/]+={0,2}$/.test(t)||t.length%4!==0)throw new Error("jupiter: swapTransaction must be base64");return t}function A5(e,t=0){let r=0,n=0,o=t;for(;o<e.length&&o-t<3;){let i=e[o++];if(r|=(i&127)<<n,(i&128)===0)return{value:r,offset:o};n+=7}return null}function vk(e){let t=Buffer.from(e,"base64"),r=A5(t,0);if(!r||r.value!==1)throw new Error("jupiter: unsigned swapTransaction must declare exactly one signature slot");let n=r.offset+r.value*64;if(n>=t.length)throw new Error("jupiter: Solana transaction missing message bytes");if(t.subarray(r.offset,n).some(i=>i!==0))throw new Error("jupiter: swapTransaction already contains signature material");return t.subarray(n).toString("base64")}function op(e={},{quotedAtMs:t=Date.now(),ttlMs:r=bk}={}){let n=me(e.inputMint,"inputMint"),o=me(e.outputMint,"outputMint"),i=Us(e.inAmount,"inAmount"),s=Us(e.outAmount,"outAmount"),a=Us(e.otherAmountThreshold??e.outAmount,"otherAmountThreshold"),A=Dk(e.slippageBps??50),c=(BigInt(s)-BigInt(s)*BigInt(A)/10000n).toString();if(a!==c)throw new Error("jupiter: otherAmountThreshold does not match serialized min-out");return{mode:"solana-jupiter-quote",provider:"jupiter",venue:"jupiter-swap-v1",inputMint:n,outputMint:o,inAmount:i,outAmount:s,otherAmountThreshold:a,slippageBps:A,contextSlot:e.contextSlot??null,quotedAtMs:t,expiresAtMs:t+Math.min(Math.max(Number(r)||bk,1e3),3e4)}}function c5({userPublicKey:e,guard:t,swapTransaction:r,args:n={},response:o={}}){if(t.inputMint!==ip)throw new Error("jupiter: local signer supports native SOL input only");if(BigInt(o?.prioritizationFeeLamports??0)!==0n)throw new Error("jupiter: local signer requires zero priority fee until exact fee accounting is supplied");let i=vk(r),s=Us(n.exactFeeLamports??o.exactFeeLamports??"5000","exactFeeLamports");return{version:1,surface:"sol",action:"swap",owner:e,destination:t.outputMint,tradeId:n.tradeId||`jupiter-${t.inputMint.slice(0,6)}-${t.outputMint.slice(0,6)}-${t.inAmount}`,slippageBps:t.slippageBps,expiresAtMs:t.expiresAtMs,fee:{oracleFeeBps:5},artifact:{cluster:n.cluster||"mainnet",provider:"jupiter",inputMint:t.inputMint,outputMint:t.outputMint,inAmount:t.inAmount,outAmount:t.outAmount,otherAmountThreshold:t.otherAmountThreshold,slippageBps:t.slippageBps,jupiterProgram:n.jupiterProgram||o.jupiterProgram||"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4",messageBase64:i,exactFeeLamports:s}}}var l5=new Set(["BPFLoaderUpgradeab1e11111111111111111111111","BPFLoader2111111111111111111111111111111111","BPFLoader1111111111111111111111111111111111"]),u5="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";function kk(e){if(typeof e!="string"||!e.length)return!1;let t=0n;for(let o of e){let i=u5.indexOf(o);if(i<0)return!1;t=t*58n+BigInt(i)}let r=t.toString(16);r.length%2&&(r="0"+r);let n=r.length/2;for(let o of e)if(o==="1")n++;else break;return n===32}async function Rk(e={},t={}){let r=e.rpc||t.solanaRpc||process.env.SOLANA_RPC||"https://api.mainnet-beta.solana.com",n=t.fetchImpl||fetch,o=await n(`${Pc}/program-id-to-label`,{signal:AbortSignal.timeout(Number(t.timeoutMs)||15e3)});if(!o.ok)throw new Error(`jupiter venue map failed: HTTP ${o.status}`);let i=await o.json(),s=Object.entries(i),a=s.filter(([d])=>kk(d)),A=[],c=s.filter(([d])=>!kk(d)).map(([d,h])=>({programId:d,label:h,reason:"malformed program id"}));if(e.verify===!1)return{source:`${Pc}/program-id-to-label`,verified:a.map(([d,h])=>({programId:d,label:h})),unresolved:c,verifiedOnChain:!1,totals:{fromRouterMap:s.length,verified:a.length}};let l=async d=>{let g=await(await n(r,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(d),signal:AbortSignal.timeout(Number(t.timeoutMs)||2e4)})).json();if(g.error)throw new Error(g.error.message);return g.result};for(let d=0;d<a.length;d+=90){let h=a.slice(d,d+90),g=null;for(let p=0;p<3&&!g;p++)try{g=await l({jsonrpc:"2.0",id:1,method:"getMultipleAccounts",params:[h.map(([m])=>m),{encoding:"base64",dataSlice:{offset:0,length:0}}]})}catch{await new Promise(m=>setTimeout(m,2e3*(p+1)))}if(!g){for(let[p,m]of h)c.push({programId:p,label:m,reason:"rpc batch failed after 3 attempts"});continue}g.value.forEach((p,m)=>{let[f,B]=h[m];p&&p.executable===!0&&l5.has(p.owner)?A.push({programId:f,label:B,owner:p.owner}):c.push({programId:f,label:B,reason:p?p.executable!==!0?"not executable":`unknown owner ${p.owner}`:"account not found"})}),d+90<a.length&&await new Promise(p=>setTimeout(p,700))}let u=new Set(A.map(d=>d.label.replace(/\s+(CLMM|CP|V\d+|Launchlab|DLMM|Pools?)$/i,"").trim()));return{source:`${Pc}/program-id-to-label`,verifiedOnChain:!0,verifiedAt:new Date().toISOString(),totals:{fromRouterMap:s.length,verified:A.length,unresolved:c.length,distinctLabels:new Set(A.map(d=>d.label)).size,distinctBrands:u.size},verified:A.sort((d,h)=>d.label.localeCompare(h.label)),unresolved:c}}async function Nk(e={}){try{return{ok:!0,provider:"jupiter",outAmount:(await _c({inputMint:ip,outputMint:Sk,amount:"1000000",slippageBps:50},e)).quote.outAmount,exec:!1}}catch(t){return{ok:!1,provider:"jupiter",error:String(t?.message||t),exec:!1}}}async function _c(e={},t={}){let r=me(e.inputMint||e.fromMint||ip,"inputMint"),n=me(e.outputMint||e.toMint||Sk,"outputMint"),o=Us(e.amount||e.inAmount,"amount"),i=Dk(e.slippageBps??e.maxSlippageBps??50),s=new URL(`${xk(t)}/quote`);s.searchParams.set("inputMint",r),s.searchParams.set("outputMint",n),s.searchParams.set("amount",o),s.searchParams.set("slippageBps",String(i)),s.searchParams.set("swapMode",e.swapMode||"ExactIn"),e.onlyDirectRoutes!=null&&s.searchParams.set("onlyDirectRoutes",String(!!e.onlyDirectRoutes)),e.platformFeeBps!=null&&s.searchParams.set("platformFeeBps",String(e.platformFeeBps));let a=await C(s.toString(),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3}),A=op({...a,slippageBps:i},t);return{provider:"jupiter",chain:"solana-mainnet-beta",quoteReady:!0,executionReady:!1,inputMint:r,outputMint:n,amount:o,quote:a,solanaGuard:A}}function d5(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}async function Fk(e={},t={}){let r=me(e.userPublicKey||e.owner||e.wallet,"userPublicKey"),n=e.quoteResponse?{quote:e.quoteResponse,solanaGuard:op(e.quoteResponse,t)}:await _c(e,t),o=n.quote,i=n.solanaGuard||op(o,t);if(Tc(e.dynamicSlippage,!1)===!0)throw new Error("jupiter: dynamicSlippage would override the enforced slippage ceiling \u2014 pass an explicit slippageBps instead");let s=await C(`${xk(t)}/swap`,{method:"POST",body:d5({quoteResponse:o,userPublicKey:r,wrapAndUnwrapSol:Tc(e.wrapAndUnwrapSol,!0),dynamicComputeUnitLimit:Tc(e.dynamicComputeUnitLimit,!0),dynamicSlippage:!1,asLegacyTransaction:Tc(e.asLegacyTransaction,!0),prioritizationFeeLamports:e.prioritizationFeeLamports??0}),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),a=a5(s?.swapTransaction);vk(a),pr("jupiter",s);let A=s?.quoteResponse??s?.quote??null,c=["inAmount","outAmount","otherAmountThreshold","inputMint","outputMint"],l=!1;if(A&&typeof A=="object"){for(let h of c){let g=o?.[h],p=A?.[h];if(g==null||p==null)throw new Error(`jupiter: echoed quote is incomplete \u2014 missing ${h}`);if(String(g)!==String(p))throw new Error(`jupiter: swap response ${h} (${p}) does not match the quoted ${h} (${g}) \u2014 refusing to prepare`)}l=!0}let u=null,d=null;try{u=c5({userPublicKey:r,guard:i,swapTransaction:a,args:e,response:s})}catch(h){d=String(h?.message||h).slice(0,200)}return L({provider:"jupiter",chain:"solana-mainnet-beta",prepareReady:!0,executionReady:!1,signingReady:!1,broadcastReady:!1,requiresUserSignature:!0,verifiedAgainstQuote:l,userPublicKey:r,quote:o,solanaGuard:i,swapTransaction:a,localSignerEnvelope:u,localSignerBlockedReason:d,swapTransactionEncoding:"base64",lastValidBlockHeight:s?.lastValidBlockHeight??null,prioritizationFeeLamports:s?.prioritizationFeeLamports??null,computeUnitLimit:s?.computeUnitLimit??null,raw:s},{provider:"jupiter",kind:"jupiter-swap"})}M();var g5="https://coins.llama.fi",p5="https://api.llama.fi",f5="https://yields.llama.fi",m5="https://stablecoins.llama.fi";function E5(e={}){return(e.baseUrl||process.env.DEFILLAMA_COINS_URL||g5).replace(/\/$/,"")}function Mk(e={}){return(e.baseUrl||process.env.DEFILLAMA_API_URL||p5).replace(/\/$/,"")}async function Sn(e,t={}){if(!Array.isArray(e)||!e.length)throw new Error("llamaPrices requires coins[]");let r=e.map(encodeURIComponent).join(",");return C(`${E5(t)}/prices/current/${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function Uk(e={}){let r=(await Sn(["coingecko:ethereum"],e))?.coins?.["coingecko:ethereum"];return{ok:!!r?.price,ethUsd:r?.price??null}}async function Lk(e={}){return C(`${Mk(e)}/protocols`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??2e4})}async function Tk(e={},t={}){let r=(t.yieldsBaseUrl||process.env.DEFILLAMA_YIELDS_URL||f5).replace(/\/$/,""),n=await C(`${r}/pools`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??3e4}),o=Array.isArray(n?.data)?n.data:[];e.chain&&(o=o.filter(s=>String(s.chain).toLowerCase()===String(e.chain).toLowerCase())),e.project&&(o=o.filter(s=>String(s.project).toLowerCase()===String(e.project).toLowerCase())),e.stablecoin!=null&&(o=o.filter(s=>!!s.stablecoin==!!e.stablecoin)),o.sort((s,a)=>Number(a.tvlUsd||0)-Number(s.tvlUsd||0));let i=Math.min(5e3,Math.max(1,Number(e.limit||o.length||1)));return{...n,data:o.slice(0,i)}}async function Pk(e={},t={}){let r=(t.stablecoinsBaseUrl||process.env.DEFILLAMA_STABLECOINS_URL||m5).replace(/\/$/,""),n=e.includePrices!==!1;return C(`${r}/stablecoins?includePrices=${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??3e4})}async function _k(e={},t={}){let r=encodeURIComponent(String(e.chain||"Ethereum")),n=new URLSearchParams({excludeTotalDataChart:String(e.includeChart!==!0),excludeTotalDataChartBreakdown:String(e.includeBreakdown!==!0),dataType:"dailyVolume"});return C(`${Mk(t)}/overview/dexs/${r}?${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??3e4})}async function Ok(e=["ethereum","bitcoin","solana"],t={}){let r=e.map(i=>`coingecko:${String(i).toLowerCase()}`),n=await Sn(r,t),o={};for(let i of e){let s=`coingecko:${String(i).toLowerCase()}`;o[i]=n?.coins?.[s]||null}return o}M();var Or="0x000000000000000000000000000000000000dEaD";function sp(e){let t=String(e||"").trim();return/^0x[0-9a-fA-F]{40}$/.test(t)?t:Or}import{existsSync as x5,readFileSync as D5,lstatSync as v5}from"node:fs";import{homedir as Hk}from"node:os";import{join as ap}from"node:path";import{Contract as B5,JsonRpcProvider as C5}from"ethers";var Q5="0x62FCFAf7573AD8B41a0FBF347AfEb85e06599A75",y5=999,w5="https://rpc.hyperliquid.xyz/evm",b5=["function balanceOf(address owner) view returns (uint256)"],k5=/^0x[a-fA-F0-9]{40}$/;function S5(e){return k5.test(String(e||""))}async function Oc(e,{contract:t=Q5,rpc:r=w5,chainId:n=y5,balanceOf:o}={}){if(!S5(e))throw new Error("invalid-address");if(o)return BigInt(await o(e));let i=new C5(r,n,{staticNetwork:!0}),s=new B5(t,b5,i);return BigInt(await s.balanceOf(e))}var R5=100,N5=5,Gk=Object.freeze({swap:5,bridge:5,perps:0,nft:0});function F5(e){let t=String(e||"swap").toLowerCase();return Object.prototype.hasOwnProperty.call(Gk,t)?Gk[t]:N5}var M5="ORACLE_INTEGRATOR_FEE_BPS",U5="ORACLE_INTEGRATOR_FEE_RECIPIENT",L5="ORACLE_INTEGRATOR_ID",qk="ORACLE_INTEGRATOR_FEE_RECIPIENT_PIN",T5="oracle";function P5(e=process.env){if(process.env.ORACLE_TEST_ISOLATE_SECRETS==="1"){if(e[qk])return String(e[qk]);let t=e.ORACLE_CONFIG_DIR||ap(Hk(),".config","oracle");return ap(t,"fee-recipient")}return ap(Hk(),".config","oracle","fee-recipient")}function Ap(e=process.env){try{let t=P5(e);if(!x5(t)||v5(t).isSymbolicLink())return"";let r=D5(t,"utf8").trim().toLowerCase();return/^0x[a-f0-9]{40}$/.test(r)?r:""}catch{return""}}function _5(e,{fallback:t=0}={}){if(e==null)return t;if(String(e).trim()==="")return 0;let r=Number(e);return!Number.isFinite(r)||r<=0?0:Math.min(Math.floor(r),R5)}function O5({env:e=process.env,action:t="swap",admin:r=!1}={}){let n=String(e[U5]||"").trim(),o=String(e[L5]||T5).trim();if(r===!0)return{bps:0,recipient:"",integrator:o,action:t,applies:!1,reason:"admin-oracle"};let i=F5(t),s=_5(e[M5],{fallback:n?i:0}),a=Math.min(s,i);if(!a)return{bps:0,recipient:"",integrator:o,action:t,applies:!1,reason:"not-configured"};if(!/^0x[a-fA-F0-9]{40}$/.test(n))return{bps:0,recipient:"",integrator:o,action:t,applies:!1,reason:"no-recipient"};let A=Ap(e);return!A||A!==n.toLowerCase()?{bps:0,recipient:"",integrator:o,action:t,applies:!1,reason:"recipient-not-pinned"}:{bps:a,recipient:n,integrator:o,action:t,applies:!0,reason:"configured"}}async function Hc({wallet:e,env:t=process.env,action:r="swap",holderCheck:n={},admin:o=!1}={}){let i=O5({env:t,action:r,admin:o});if(o===!0)return{...i,holderVerificationStatus:"admin-oracle"};let s=String(e||"").trim().toLowerCase();if(!/^0x[a-f0-9]{40}$/.test(s))return{...i,holderVerificationStatus:"wallet-required"};try{return BigInt(await Oc(s,n))>0n?{...i,bps:0,applies:!1,reason:"locals-only-holder",holderVerificationStatus:"holder"}:{...i,holderVerificationStatus:"non-holder"}}catch{return{...i,holderVerificationStatus:"unavailable"}}}function Yk(e){return e?.applies?{integrator:e.integrator,fee:String(e.bps/1e4)}:{}}function Vk(e){return e?.applies?{partner:e.integrator,partnerFeeBps:String(e.bps),partnerAddress:e.recipient}:{}}var H5="https://li.quest/v1";function lp(e={}){return(e.baseUrl||process.env.LIFI_API_URL||H5).replace(/\/$/,"")}var cp="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",G5="0x0000000000000000000000000000000000000000";function q5(e){let t=String(e||cp).toLowerCase();return t===cp.toLowerCase()||t===G5}function Jk(e,t){let r=String(e||"").trim();if(!/^0x[0-9a-fA-F]{40}$/.test(r))throw new Error(`lifi: ${t} must be a 20-byte address`);return r.toLowerCase()}async function Wk(e={}){let t=await C(`${lp(e)}/chains`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??12e3}),r=Array.isArray(t)?t.length:t?.chains?.length||0;return{ok:r>0,chainCount:r}}async function Ls(e={},t={}){let{fromChain:r,toChain:n=r,fromToken:o=cp,toToken:i,fromAmount:s,fromAddress:a=Or}=e;if(r==null||!i||!s)throw new Error("lifiQuote requires fromChain, toToken, fromAmount");let A=new URLSearchParams({fromChain:String(r),toChain:String(n),fromToken:o,toToken:i,fromAmount:String(s),fromAddress:a}),c=je({liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,crossChain:Number(n)!==Number(r),requestedCapBps:e.maxSlippageBps??e.slippageBps});if(!c.executable)throw new Error(`lifi: route requires ${c.requiredBps} bps above cap ${c.capBps}`);A.set("slippage",String(c.selectedBps/1e4));let l=await Hc({wallet:e.fromAddress,env:t.env,action:e.feeAction||"swap",holderCheck:t.holderCheck});for(let[m,f]of Object.entries(Yk(l)))A.set(m,f);let u=await C(`${lp(t)}/quote?${A}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4}),d=u?.estimate?.toAmount||u?.toAmount;if(!d)return{...u,autoSlippagePolicy:c,oracleFee:l};let h=u?.transactionRequest?.to||u?.estimate?.approvalAddress||"lifi",g=ce(u,{chainId:Number(r),venue:h,amountOut:d,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,crossChain:Number(n)!==Number(r),requestedCapBps:e.maxSlippageBps??e.slippageBps}),p=u?.estimate?.toAmountMin||u?.toAmountMin;if(p!=null&&BigInt(p)<BigInt(g.amountOutMinimum))throw new Error("lifi: provider transaction is under-protected versus bounded auto-slippage floor");return{...g,oracleFee:l}}async function $k(e={},t={}){let r=await Ls(e,t),n=r?.transactionRequest;if(!n?.to||!n?.data)throw new Error("lifi: quote did not return an executable transactionRequest");let o=Number(e.fromChain);if(n.chainId!=null&&Number(n.chainId)!==o)throw new Error("lifi: transaction chain mismatch");if(e.fromAddress&&n.from&&String(n.from).toLowerCase()!==String(e.fromAddress).toLowerCase())throw new Error("lifi: transaction sender mismatch");let i=null;if(!q5(e.fromToken)){let s=r?.estimate?.approvalAddress||r?.approvalAddress;if(!s)throw new Error("lifi: ERC20 route missing approvalAddress");let a=r?.action?.fromToken?.address||r?.estimate?.fromToken?.address||e.fromToken;i={token:Jk(a,"approval token"),spender:Jk(s,"approval spender"),amount:String(e.fromAmount)}}return L({provider:"lifi",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:o,quote:r,autoSlippage:r.autoSlippage,requiresApproval:i,transaction:{chainId:o,from:n.from||e.fromAddress,to:n.to,data:n.data,value:n.value??"0x0",...n.gasLimit!=null?{gasLimit:n.gasLimit}:{},slippageGuard:Qe(r.autoSlippage,{chainId:o,venue:n.to,data:n.data})}},{provider:"lifi",kind:"lifi-tx"})}async function zk(e={}){return C(`${lp(e)}/chains`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??12e3})}De();import{Interface as Zk,getAddress as Ts,isAddress as V5}from"ethers";var Hr={8453:{name:"base",quoter:"0x254cF9E1E6e233aa1AC962CB9B05b2cfeAaE15b0",router:"0xBE6D8f0d05cC4be24d5167a3eF062215bE6D18a5",factory:"0x5e7BB104d84c7CB9B682AaC2F3d509f5F406809A",weth:"0x4200000000000000000000000000000000000006",usdc:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}},J5=[1,50,100,200,2e3],Kk=new Zk(["function quoteExactInputSingle((address tokenIn, address tokenOut, uint256 amountIn, int24 tickSpacing, uint160 sqrtPriceLimitX96) params) returns (uint256 amountOut, uint160 sqrtPriceX96After, uint32 initializedTicksCrossed, uint256 gasEstimate)"]),W5=new Zk(["function exactInputSingle((address tokenIn, address tokenOut, int24 tickSpacing, address recipient, uint256 deadline, uint256 amountIn, uint256 amountOutMinimum, uint160 sqrtPriceLimitX96) params) payable returns (uint256 amountOut)"]),Xk="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",eS="0x0000000000000000000000000000000000000000";function tS(e){let t=Number(e),r=Hr[t];if(!r)throw new Error(`aerodrome: unsupported chainId ${e} (supported: ${Object.keys(Hr).join(", ")})`);return{chainId:t,...r}}function jk(e,t){let r=Hr[Number(t)];if(!e||e===Xk||e===eS||/^eth$/i.test(String(e)))return Ts(r.weth);let n=String(e);if(/^weth$/i.test(n))return Ts(r.weth);if(/^usdc$/i.test(n))return Ts(r.usdc);if(!V5(n))throw new Error(`invalid token address: ${e}`);return Ts(n)}async function Gc(e={},t={}){let{chainId:r,quoter:n,router:o}=tS(e.chainId??8453),i=jk(e.tokenIn||"WETH",r),s=jk(e.tokenOut||Hr[r].usdc,r),a=BigInt(e.amountIn??0);if(a<=0n)throw new Error("amountIn required (raw base units)");let A=e.tickSpacing!=null?[Number(e.tickSpacing)]:e.tryTickSpacings===!1?[100]:[...J5],c=[],l=null;for(let u of A){let d=Kk.encodeFunctionData("quoteExactInputSingle",[{tokenIn:i,tokenOut:s,amountIn:a,tickSpacing:u,sqrtPriceLimitX96:0n}]);try{let h=await V(r,"eth_call",[{to:n,data:d},"latest"],t);if(!h||h==="0x"){c.push({tickSpacing:u,ok:!1,error:"empty result"});continue}let g=Kk.decodeFunctionResult("quoteExactInputSingle",h),p={tickSpacing:u,ok:!0,amountOut:g[0].toString(),sqrtPriceX96After:g[1].toString(),initializedTicksCrossed:Number(g[2]),gasEstimate:g[3].toString()};c.push(p),(!l||BigInt(p.amountOut)>BigInt(l.amountOut))&&(l=p)}catch(h){c.push({tickSpacing:u,ok:!1,error:String(h.message||h).slice(0,160)})}}if(!l){let u=c.map(d=>`${d.tickSpacing}:${d.error||"fail"}`).join("; ");throw new Error(`aerodrome quote failed chain=${r}: ${u}`)}return ce({venue:"aerodrome",chainId:r,chain:Hr[r].name,quoter:n,router:o,tokenIn:i,tokenOut:s,amountIn:a.toString(),tickSpacing:l.tickSpacing,amountOut:l.amountOut,gasEstimate:l.gasEstimate,sqrtPriceX96After:l.sqrtPriceX96After,initializedTicksCrossed:l.initializedTicksCrossed,triedTickSpacings:c,best:!0},{chainId:r,venue:o,amountOut:l.amountOut,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps})}async function rS(e={},t={}){let r=Number(e.chainId??8453),n=tS(r),o=Ts(e.recipient||e.from||e.userAddress),i=String(e.tokenIn||"WETH"),s=!e.tokenIn||i===Xk||i===eS||/^eth$/i.test(i),a=await Gc(e,t),A=Math.min(600,Math.max(30,Number(e.deadlineSeconds??300))),l=Number(t.nowSeconds??Math.floor(Date.now()/1e3))+A,u=W5.encodeFunctionData("exactInputSingle",[{tokenIn:a.tokenIn,tokenOut:a.tokenOut,tickSpacing:a.tickSpacing,recipient:o,deadline:l,amountIn:BigInt(a.amountIn),amountOutMinimum:BigInt(a.amountOutMinimum),sqrtPriceLimitX96:0n}]);return L({provider:"aerodrome",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:r,deadline:l,quote:a,autoSlippage:a.autoSlippage,requiresApproval:s?null:{token:a.tokenIn,spender:n.router,amount:a.amountIn},transaction:{chainId:r,from:o,to:n.router,data:u,value:s?a.amountIn:"0",slippageGuard:Qe(a.autoSlippage,{chainId:r,venue:n.router,data:u})}},{provider:"aerodrome",kind:"aerodrome-exact-in"})}async function nS(e={}){let t=Number(e.chainId??8453);try{let r=await Gc({chainId:t,tokenIn:"WETH",tokenOut:"USDC",amountIn:"1000000000000000"},e),n=Number(r.amountOut)/1e6;return{ok:!0,chainId:t,tickSpacing:r.tickSpacing,amountOutUsdc:n,midPxHint:n/.001,router:Hr[t]?.router,quoter:Hr[t]?.quoter}}catch(r){return{ok:!1,chainId:t,error:String(r.message||r).slice(0,200)}}}async function oS(){return Object.entries(Hr).map(([e,t])=>({chainId:Number(e),name:t.name,quoter:t.quoter,router:t.router,factory:t.factory,weth:t.weth,usdc:t.usdc}))}M();var z5="https://api.0x.org";function iS(e={}){return Lt({provider:"zerox",defaultUrl:z5,hosts:["api.0x.org"],url:e.baseUrl||process.env.ZEROX_API_URL})}function sS(e={}){return iS(e).baseUrl}function qc(e={}){return e.apiKey||process.env.ZEROX_API_KEY||process.env.OX_API_KEY||process.env["0X_API_KEY"]||""}function aS(e={}){return Ct({"0x-version":"v2",accept:"application/json"},{"0x-api-key":qc(e)},iS(e).trusted)}async function AS(e={}){if(!qc(e))return{ok:!1,configured:!1,error:"ZEROX_API_KEY not set"};try{let t=await up({chainId:8453,sellToken:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",buyToken:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",sellAmount:"1000000000000000"},e);return{ok:!0,configured:!0,buyAmount:t.buyAmount||t.grossBuyAmount}}catch(t){return{ok:!1,configured:!0,error:String(t.message||t).slice(0,160)}}}async function up(e={},t={}){if(!qc(t))throw new Error("ZEROX_API_KEY required for 0x");let{chainId:r=8453,sellToken:n,buyToken:o,sellAmount:i,taker:s}=e;if(!n||!o||!i)throw new Error("zeroxPrice requires sellToken, buyToken, sellAmount");let a=new URLSearchParams({chainId:String(r),sellToken:n,buyToken:o,sellAmount:String(i)});return s&&a.set("taker",s),C(`${sS(t)}/swap/allowance-holder/price?${a}`,{headers:aS(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function Ps(e={},t={}){if(!qc(t))throw new Error("ZEROX_API_KEY required for 0x");let{chainId:r=8453,sellToken:n,buyToken:o,sellAmount:i,taker:s}=e;if(!n||!o||!i)throw new Error("zeroxQuote requires sellToken, buyToken, sellAmount");let a=je({liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps});if(!a.executable)throw new Error(`0x: route requires ${a.requiredBps} bps above cap ${a.capBps}`);let A=new URLSearchParams({chainId:String(r),sellToken:n,buyToken:o,sellAmount:String(i),slippageBps:String(a.selectedBps)});s&&A.set("taker",s);let c=await C(`${sS(t)}/swap/allowance-holder/quote?${A}`,{headers:aS(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),l=c?.buyAmount||c?.grossBuyAmount;return l?ce(c,{chainId:r,venue:c?.transaction?.to||c?.to||"0x",amountOut:l,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps}):{...c,autoSlippagePolicy:a}}async function cS(e={},t={}){if(!e.taker)throw new Error("0x: taker required for executable prepare");let r=await Ps(e,t),n=r?.transaction;if(!n?.to||!n?.data)throw new Error("0x: firm quote returned no transaction");let o=Number(e.chainId??8453),i=r?.issues?.allowance?.spender||r?.allowanceTarget;return L({provider:"zerox",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:o,quote:r,autoSlippage:r.autoSlippage,requiresApproval:r?.issues?.allowance?.actual!=null&&BigInt(r.issues.allowance.actual)<BigInt(e.sellAmount)?{token:e.sellToken,spender:i,amount:String(e.sellAmount)}:null,transaction:{chainId:o,from:e.taker,to:n.to,data:n.data,value:n.value??"0x0",...n.gas!=null?{gasLimit:n.gas}:{},slippageGuard:Qe(r.autoSlippage,{chainId:o,venue:n.to,data:n.data})}},{provider:"zerox",kind:"zerox-tx"})}M();var j5="https://across.to/api",Z5="https://api.hop.exchange/v1",X5="https://api.relay.link",e3={ethereum:1,optimism:10,bsc:56,polygon:137,arbitrum:42161,avalanche:43114,base:8453};async function lS(e={}){try{return{ok:!0,estimatedFillTimeSec:(await dp({token:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",destinationToken:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",originChainId:1,destinationChainId:42161,amount:"1000000000000000"},e)).estimatedFillTimeSec}}catch(t){return{ok:!1,error:String(t.message||t).slice(0,160)}}}async function dp(e={},t={}){let{token:r,destinationToken:n=r,originChainId:o,destinationChainId:i,amount:s}=e;if(!r||o==null||i==null||!s)throw new Error("acrossSuggestedFees requires token, originChainId, destinationChainId, amount");let a=new URLSearchParams({token:r,destinationToken:n,originChainId:String(o),destinationChainId:String(i),amount:String(s)}),A=(t.baseUrl||process.env.ACROSS_API_URL||j5).replace(/\/$/,"");return C(`${A}/suggested-fees?${a}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function uS(e={}){try{let t=await hp({amount:"1000000000000000",token:"ETH",fromChain:"ethereum",toChain:"arbitrum",slippage:.5},e);return{ok:!0,estimatedRecieved:t.estimatedRecieved||t.estimatedReceived}}catch(t){return{ok:!1,error:String(t.message||t).slice(0,160)}}}async function hp(e={},t={}){let{amount:r,token:n="ETH",fromChain:o="ethereum",toChain:i="arbitrum"}=e;if(!r)throw new Error("hopQuote requires amount");let s=e.slippage==null?void 0:Math.round(Number(e.slippage)*100),a=je({liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,crossChain:o!==i,requestedCapBps:e.maxSlippageBps??e.slippageBps??s});if(!a.executable)throw new Error(`hop: route requires ${a.requiredBps} bps above cap ${a.capBps}`);let A=new URLSearchParams({amount:String(r),token:n,fromChain:o,toChain:i,slippage:String(a.selectedBps/100)}),c=(t.baseUrl||process.env.HOP_API_URL||Z5).replace(/\/$/,""),l=await C(`${c}/quote?${A}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),u=l?.estimatedRecieved||l?.estimatedReceived;return u?ce(l,{chainId:Number(e.originChainId||e.chainId||e3[o]||0),venue:l?.tx?.to||"hop",amountOut:u,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,crossChain:o!==i,requestedCapBps:e.maxSlippageBps??e.slippageBps??s}):{...l,autoSlippagePolicy:a}}async function dS(e={}){try{let t=await Yc({user:Or,originChainId:1,destinationChainId:8453,originCurrency:"0x0000000000000000000000000000000000000000",destinationCurrency:"0x0000000000000000000000000000000000000000",amount:"1000000000000000",tradeType:"EXACT_INPUT"},e);return{ok:!0,hasSteps:Array.isArray(t.steps),stepCount:t.steps?.length||0}}catch(t){return{ok:!1,error:String(t.message||t).slice(0,160)}}}async function Yc(e={},t={}){let{user:r=Or,originChainId:n,destinationChainId:o,originCurrency:i="0x0000000000000000000000000000000000000000",destinationCurrency:s="0x0000000000000000000000000000000000000000",amount:a,tradeType:A="EXACT_INPUT"}=e;if(n==null||o==null||!a)throw new Error("relayQuote requires originChainId, destinationChainId, amount");let c=je({liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,crossChain:Number(n)!==Number(o),requestedCapBps:e.maxSlippageBps??e.slippageBps});if(!c.executable)throw new Error(`relay: route requires ${c.requiredBps} bps above cap ${c.capBps}`);let l=(t.baseUrl||process.env.RELAY_API_URL||X5).replace(/\/$/,""),u=await C(`${l}/quote`,{method:"POST",body:{user:r,originChainId:Number(n),destinationChainId:Number(o),originCurrency:i,destinationCurrency:s,amount:String(a),tradeType:A,slippageTolerance:String(c.selectedBps)},fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4}),d=u?.details?.currencyOut?.amount;return!d||!/^\d+$/.test(String(d))?{...u,autoSlippagePolicy:c}:ce(u,{chainId:Number(n),venue:u?.steps?.[0]?.items?.[0]?.data?.to||"relay",amountOut:d,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,crossChain:Number(n)!==Number(o),requestedCapBps:e.maxSlippageBps??e.slippageBps})}async function hS(e={},t={}){let r=await Yc(e,t),n=Number(e.originChainId),o=(r.steps||[]).flatMap(a=>(a.items||[]).filter(A=>A?.data?.to&&A?.data?.data).map(A=>({stepId:a.id,...A.data})));if(!o.length)throw new Error("relay: quote returned no executable transaction items");let i=String(r?.autoSlippage?.venue||"").toLowerCase();if(o.some(a=>String(a.to).toLowerCase()!==i))throw new Error("relay: route includes a separate approval/transaction that is not yet safely bound");let s=o.map(a=>({chainId:n,from:a.from||e.user,to:a.to,data:a.data,value:a.value??"0x0",...a.gasLimit!=null||a.gas!=null?{gasLimit:a.gasLimit??a.gas}:{},slippageGuard:Qe(r.autoSlippage,{chainId:n,venue:a.to,data:a.data})}));return L({provider:"relay",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:n,quote:r,autoSlippage:r.autoSlippage,transactions:s},{provider:"relay",kind:"relay-tx"})}M();import{TypedDataEncoder as r3,getAddress as _s,isAddress as n3}from"ethers";var Kj=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"});function gp(e=process.env){return String(e.ORACLE_AUTONOMOUS_TRADING??"").trim()==="1"}function gS(e=process.env){return String(e.ORACLE_AUTONOMOUS_MINT??process.env.ORACLE_AUTONOMOUS_MINT??"").trim()==="1"}var fS={1:"https://api.cow.fi/mainnet/api/v1",100:"https://api.cow.fi/xdai/api/v1",42161:"https://api.cow.fi/arbitrum_one/api/v1",8453:"https://api.cow.fi/base/api/v1"},o3=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),i3=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"}),fp={1:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",8453:"0x4200000000000000000000000000000000000006",42161:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1"},mS={1:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",8453:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",42161:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831"},pS=Object.freeze({Order:[{name:"sellToken",type:"address"},{name:"buyToken",type:"address"},{name:"receiver",type:"address"},{name:"sellAmount",type:"uint256"},{name:"buyAmount",type:"uint256"},{name:"validTo",type:"uint32"},{name:"appData",type:"bytes32"},{name:"feeAmount",type:"uint256"},{name:"kind",type:"string"},{name:"partiallyFillable",type:"bool"},{name:"sellTokenBalance",type:"string"},{name:"buyTokenBalance",type:"string"}]}),iZ=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]});function mp(e,t={}){if(t.baseUrl)return t.baseUrl.replace(/\/$/,"");let r=fS[Number(e)];if(!r)throw new Error(`cowswap: unsupported chainId ${e}`);return r}function Vc(e,t){let r=String(e||"").trim();if(!n3(r))throw new Error(`cowswap: ${t} must be an address`);return _s(r).toLowerCase()}function pp(e,t){try{let r=BigInt(String(e));if(r<0n)throw new Error("negative");return r.toString()}catch{throw new Error(`cowswap: ${t} must be a non-negative integer string`)}}function s3(e,t){let r=String(e||"").trim();if(!/^0x[0-9a-fA-F]{64}$/.test(r))throw new Error(`cowswap: ${t} must be bytes32 hex`);return r.toLowerCase()}function a3(e){let t=o3[Number(e)];if(!t)throw new Error(`cowswap: settlement contract not registered for chain ${e}`);return{name:"Gnosis Protocol",version:"v2",chainId:Number(e),verifyingContract:_s(t)}}function A3(e={},t,r){let n=Vc(e.sellToken,"sellToken"),o=Vc(e.buyToken,"buyToken"),i=Vc(e.receiver||r,"receiver"),s=Number(e.validTo);if(!Number.isInteger(s)||s<=0)throw new Error("cowswap: quote.validTo required");let a=s3(e.appData||e.appDataHash||`0x${"0".repeat(64)}`,"appData");return{sellToken:n,buyToken:o,receiver:i,sellAmount:pp(e.sellAmount,"sellAmount"),buyAmount:pp(e.buyAmount,"buyAmount"),validTo:s,appData:a,feeAmount:pp(e.feeAmount??"0","feeAmount"),kind:String(e.kind||"sell"),partiallyFillable:!!e.partiallyFillable,sellTokenBalance:String(e.sellTokenBalance||"erc20"),buyTokenBalance:String(e.buyTokenBalance||"erc20")}}async function ES(e={}){try{let t=await Wo({chainId:1,sellToken:fp[1],buyToken:mS[1],sellAmountBeforeFee:"1000000000000000",from:Or},e);return{ok:!0,buyAmount:t.quote?.buyAmount||t.buyAmount}}catch(t){return{ok:!1,error:String(t.message||t).slice(0,160)}}}async function Wo(e={},t={}){let r=Number(e.chainId??1),n=sp(e.from||e.owner),o=e.sellToken||fp[r],i=e.buyToken||mS[r],s=String(e.sellAmountBeforeFee||e.sellAmount||"0");if(!o||!i||s==="0")throw new Error("cowQuote requires sellToken, buyToken, sellAmountBeforeFee");if(/eeeeeeee|native|^eth$/i.test(o)&&(o=fp[r],!o))throw new Error("no WETH mapping for chain");let a={sellToken:o,buyToken:i,from:n,receiver:e.receiver||n,sellAmountBeforeFee:s,kind:e.kind||"sell",signingScheme:e.signingScheme||"eip1271"},A=await C(`${mp(r,t)}/quote`,{method:"POST",body:a,fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),c=A?.quote?.buyAmount||A?.buyAmount;return c?ce(A,{chainId:r,venue:"cowswap-order",amountOut:c,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps}):A}async function IS(e={},t={}){let r=Number(e.chainId??1),n=Vc(sp(e.from||e.owner||e.signer),"owner"),o=await Wo({...e,chainId:r,from:n,signingScheme:e.signingScheme||"eip712"},t),i=A3(o?.quote||o,r,n),s=a3(r),a={domain:s,types:pS,primaryType:"Order",message:i},A=r3.hash(s,pS,i),c=i3[r];if(!c)throw new Error(`cowswap: vault relayer not registered for chain ${r}`);return L({provider:"cowswap",orderReady:!0,executionReady:!1,chainId:r,owner:n,signingScheme:"eip712",settlement:s.verifyingContract.toLowerCase(),vaultRelayer:_s(c).toLowerCase(),quote:o,quoteId:o?.id??e.quoteId??null,typedData:a,cowGuard:{mode:"cow-order",version:1,provider:"cowswap",chainId:r,owner:n,settlement:s.verifyingContract.toLowerCase(),vaultRelayer:_s(c).toLowerCase(),sellToken:i.sellToken,buyToken:i.buyToken,sellAmount:i.sellAmount,buyAmount:i.buyAmount,validTo:i.validTo,quoteId:o?.id??e.quoteId??null,typedDataHash:A,issuedAtMs:Date.now(),expiresAtMs:Math.min(i.validTo*1e3,Date.now()+2e4)},requiresApproval:{token:i.sellToken,spender:_s(c).toLowerCase(),amount:i.sellAmount}},{provider:"cowswap",kind:"cow-order"})}async function BS(e={},t={}){let r=Number(e.chainId??1),n=String(e.uid||e.orderUid||"").trim();if(!n)throw new Error("cowOrderStatus requires uid");return C(`${mp(r,t)}/orders/${encodeURIComponent(n)}/status`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function CS(e={},t={}){let r=Number(e.chainId??1),n=String(e.uid||e.orderUid||"").trim();if(!n)throw new Error("cowOrder requires uid");return C(`${mp(r,t)}/orders/${encodeURIComponent(n)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}function QS(){return Object.keys(fS).map(Number)}M();var l3="https://api.1inch.dev/swap/v6.0";function yS(e={}){return Lt({provider:"oneinch",defaultUrl:l3,hosts:["api.1inch.dev"],url:e.baseUrl||process.env.ONEINCH_API_URL})}function Ep(e={}){return yS(e).baseUrl}function Os(e={}){return e.apiKey||process.env.ONEINCH_API_KEY||process.env.ONE_INCH_API_KEY||""}function Ip(e={}){let t=Os(e);return Ct({accept:"application/json"},{Authorization:t?`Bearer ${t}`:""},yS(e).trusted)}async function wS(e={}){if(!Os(e))return{ok:!1,configured:!1,error:"ONEINCH_API_KEY not set"};try{return{ok:!0,configured:!0,dstAmount:(await Bp({chainId:8453,src:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",dst:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",amount:"1000000000000000"},e)).dstAmount}}catch(t){return{ok:!1,configured:!0,error:String(t.message||t).slice(0,160)}}}async function Bp(e={},t={}){if(!Os(t))throw new Error("ONEINCH_API_KEY required for 1inch");let r=Number(e.chainId??1),{src:n,dst:o,amount:i}=e;if(!n||!o||!i)throw new Error("oneinchQuote requires src, dst, amount");let s=new URLSearchParams({src:n,dst:o,amount:String(i)}),a=await C(`${Ep(t)}/${r}/quote?${s}`,{headers:Ip(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3});return a?.dstAmount?ce(a,{chainId:r,venue:"1inch-quote",amountOut:a.dstAmount,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps}):a}function u3(e){return/^(eth|native|0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee)$/i.test(String(e||""))}async function Cp(e={},t={}){if(!Os(t))throw new Error("ONEINCH_API_KEY required for 1inch");let r=Number(e.chainId??1);return C(`${Ep(t)}/${r}/approve/spender`,{headers:Ip(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function bS(e={},t={}){if(!Os(t))throw new Error("ONEINCH_API_KEY required for 1inch");let r=Number(e.chainId??1),{src:n,dst:o,amount:i}=e,s=e.from||e.fromAddress||e.userAddress||e.taker;if(!n||!o||!i||!s)throw new Error("oneinchPrepare requires src, dst, amount, from");let a=je({liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps});if(!a.executable)throw new Error(`1inch: route requires ${a.requiredBps} bps above cap ${a.capBps}`);let A=new URLSearchParams({src:n,dst:o,amount:String(i),from:s,slippage:String(a.selectedBps/100)});e.receiver&&A.set("receiver",e.receiver),e.referrer&&A.set("referrer",e.referrer),e.disableEstimate!=null&&A.set("disableEstimate",String(!!e.disableEstimate)),e.allowPartialFill!=null&&A.set("allowPartialFill",String(!!e.allowPartialFill)),e.includeProtocols&&A.set("includeProtocols",String(e.includeProtocols)),e.excludeProtocols&&A.set("excludeProtocols",String(e.excludeProtocols));let c=await C(`${Ep(t)}/${r}/swap?${A}`,{headers:Ip(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3}),l=c?.tx;if(!l?.to||!l?.data)throw new Error("1inch: swap returned no executable tx");if(l.from&&String(l.from).toLowerCase()!==String(s).toLowerCase())throw new Error("1inch: transaction sender mismatch");let u=c?.dstAmount||c?.toTokenAmount||c?.buyAmount;if(!u)throw new Error("1inch: swap response missing dstAmount");let d=ce(c,{chainId:r,venue:l.to,amountOut:u,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps}),h=null;if(!u3(n)){let g=c?.spender||c?.approvalAddress||(await Cp({chainId:r},t))?.address;if(!g)throw new Error("1inch: ERC-20 route missing approval spender");h={token:n,spender:g,amount:String(i)}}return L({provider:"oneinch",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:r,quote:d,autoSlippage:d.autoSlippage,requiresApproval:h,transaction:{chainId:r,from:l.from||s,to:l.to,data:l.data,value:l.value??"0x0",...l.gas!=null?{gasLimit:l.gas}:{},slippageGuard:Qe(d.autoSlippage,{chainId:r,venue:l.to,data:l.data})}},{provider:"oneinch",kind:"oneinch-tx"})}var h3=process.env.HL_WS_URL||"wss://api.hyperliquid.xyz/ws";async function Hs(e,t={}){if(!e?.type)throw new Error("hlWsSnapshot requires subscription.type");let r=t.timeoutMs??8e3,n=t.maxMessages??1,o=t.WebSocket||globalThis.WebSocket;if(!o)throw new Error("WebSocket not available in this runtime");let i=t.url||h3,s=Date.now();return new Promise((a,A)=>{let c=!1,l=[],u=0,d=new o(i),h=setTimeout(()=>{g(),c||(c=!0,l.length?a({ok:!0,partial:!0,ms:Date.now()-s,messages:l}):A(new Error(`hl ws timeout after ${r}ms`)))},r);function g(){clearTimeout(h);try{d.close()}catch{}}d.addEventListener("open",()=>{d.send(JSON.stringify({method:"subscribe",subscription:e}))}),d.addEventListener("message",p=>{let m;try{m=JSON.parse(typeof p.data=="string"?p.data:String(p.data))}catch{m={raw:String(p.data).slice(0,200)}}l.push(m),m.channel&&m.channel!=="subscriptionResponse"?u+=1:m.data&&m.channel==="subscriptionResponse"||m.channel||(u+=1),u>=n&&(g(),c||(c=!0,a({ok:!0,ms:Date.now()-s,subscription:e,messages:l,last:l[l.length-1]})))}),d.addEventListener("error",()=>{g(),c||(c=!0,A(new Error("hl ws error")))})})}async function kS(e={}){try{let t=await Hs({type:"allMids"},{...e,maxMessages:1}),r=t.last||{},n=r.data?.mids||r.data||{},o=typeof n=="object"?Object.keys(n).length:0;return{ok:!0,ms:t.ms,midCount:o,channel:r.channel||null}}catch(t){return{ok:!1,error:String(t.message||t).slice(0,160)}}}async function SS(e={}){let t=await Hs({type:"allMids"},e),r=t.last||{};return{ms:t.ms,mids:r.data?.mids||r.data||{},channel:r.channel}}async function xS(e,t={}){if(!e)throw new Error("coin required");let r=await Hs({type:"l2Book",coin:String(e)},t);return{ms:r.ms,book:r.last?.data||r.last,channel:r.last?.channel}}var p3=process.env.POLY_WS_URL||"wss://ws-subscriptions-clob.polymarket.com/ws/market";async function Jc(e=[],t={}){let r=Array.isArray(e)?e.map(String):[String(e)];if(!r.length||!r[0])throw new Error("polyWsSnapshot requires assetIds");let n=t.timeoutMs??8e3,o=t.maxMessages??1,i=t.WebSocket||globalThis.WebSocket;if(!i)throw new Error("WebSocket not available");let s=t.url||p3,a=Date.now();return new Promise((A,c)=>{let l=!1,u=[],d=0,h=new i(s),g=setTimeout(()=>{p(),l||(l=!0,u.length?A({ok:!0,partial:!0,ms:Date.now()-a,messages:u}):c(new Error(`poly ws timeout after ${n}ms`)))},n);function p(){clearTimeout(g);try{h.close()}catch{}}h.addEventListener("open",()=>{h.send(JSON.stringify({assets_ids:r,type:"market"}))}),h.addEventListener("message",m=>{let f;try{f=JSON.parse(typeof m.data=="string"?m.data:String(m.data))}catch{f={raw:String(m.data).slice(0,300)}}u.push(f),d+=1,d>=o&&(p(),l||(l=!0,A({ok:!0,ms:Date.now()-a,assetIds:r,messages:u,last:u[u.length-1]})))}),h.addEventListener("error",()=>{p(),l||(l=!0,c(new Error("poly ws error")))})})}async function DS(e={}){let t=e.assetId||"98022490269692409998126496127597032490334070080325855126491859374983463996227";try{let r=await Jc([t],{...e,maxMessages:1});return{ok:!0,ms:r.ms,got:!!r.last,partial:r.partial||!1}}catch(r){return{ok:!1,error:String(r.message||r).slice(0,160)}}}async function vS(e,t={}){if(!e)throw new Error("assetId required");let r=await Jc([e],t);return{ms:r.ms,assetId:String(e),data:r.last,messages:r.messages}}M();import{readFileSync as B3,existsSync as C3}from"node:fs";import{getAddress as Q3,Interface as Wc,TypedDataEncoder as TS,parseUnits as y3}from"ethers";var m3=/^(0|[1-9][0-9]*)$/,Qp=class extends Error{constructor(t){super(`nft gas-war limit: ${t.reason}`),this.name="NftGasWarLimitError",this.verdict=t}};function xn(e,t,{required:r=!0,allowZero:n=!1}={}){if(e==null||e===""){if(r)throw new Error(`${t} required`);return null}let o;if(typeof e=="bigint")o=e;else if(typeof e=="number"){if(!Number.isSafeInteger(e))throw new Error(`${t} must be a safe integer`);o=BigInt(e)}else if(typeof e=="string"){let i=e.trim();if(i.startsWith("0x")||i.startsWith("0X"))o=BigInt(i);else{if(!m3.test(i))throw new Error(`${t} must be an integer wei string`);o=BigInt(i)}}else throw new Error(`${t} must be bigint, number, or integer string`);if(o<0n||!n&&o===0n)throw new Error(`${t} must be ${n?"non-negative":"positive"}`);return o}function E3(e){let t=Number(e);if(!Number.isSafeInteger(t)||t<=0)throw new Error("chainId must be a positive integer");return t}function I3(e={}){return e.maxFeePerGas!=null?xn(e.maxFeePerGas,"maxFeePerGas"):e.gasPrice!=null?xn(e.gasPrice,"gasPrice"):null}function yp(e={}){try{let t=E3(e.chainId??e.tx?.chainId),r=e.tx||e,n=e.policy||e,o=n.grant?.maxGasWei??e.grant?.maxGasWei,i=xn(n.maxTotalGasWei??n.maxGasWei??o,"maxTotalGasWei"),s=xn(r.gasLimit??r.gas,"gasLimit"),a=I3(r);if(a==null)throw new Error("maxFeePerGas or gasPrice required");let A=xn(n.maxFeePerGasWei,"maxFeePerGasWei",{required:!1}),c=xn(n.maxPriorityFeePerGasWei,"maxPriorityFeePerGasWei",{required:!1}),l=r.maxPriorityFeePerGas==null?null:xn(r.maxPriorityFeePerGas,"maxPriorityFeePerGas"),u=s*a;return u>i?{ok:!1,status:"BLOCK",reason:`total gas ${u} exceeds cap ${i}`,chainId:t,totalGasWei:u.toString(),maxTotalGasWei:i.toString()}:A!=null&&a>A?{ok:!1,status:"BLOCK",reason:`unit fee ${a} exceeds cap ${A}`,chainId:t,unitFeeWei:a.toString(),maxFeePerGasWei:A.toString(),totalGasWei:u.toString(),maxTotalGasWei:i.toString()}:l!=null&&c!=null&&l>c?{ok:!1,status:"BLOCK",reason:`priority fee ${l} exceeds cap ${c}`,chainId:t,priorityFeeWei:l.toString(),maxPriorityFeePerGasWei:c.toString(),totalGasWei:u.toString(),maxTotalGasWei:i.toString()}:{ok:!0,status:"PASS",reason:"gas envelope within NFT mint gas-war caps",chainId:t,totalGasWei:u.toString(),maxTotalGasWei:i.toString(),unitFeeWei:a.toString(),maxFeePerGasWei:A?.toString()??null,priorityFeeWei:l?.toString()??null,maxPriorityFeePerGasWei:c?.toString()??null}}catch(t){return{ok:!1,status:"BLOCK",reason:String(t?.message||t)}}}function RS(e={}){let t=yp(e);if(!t.ok)throw new Qp(t);return t}var w3="https://api.opensea.io/api/v2",b3="fulfillAdvancedOrder(((address offerer,address zone,(uint8 itemType,address token,uint256 identifierOrCriteria,uint256 startAmount,uint256 endAmount)[] offer,(uint8 itemType,address token,uint256 identifierOrCriteria,uint256 startAmount,uint256 endAmount,address recipient)[] consideration,uint8 orderType,uint256 startTime,uint256 endTime,bytes32 zoneHash,uint256 salt,bytes32 conduitKey,uint256 totalOriginalConsiderationItems) parameters,uint120 numerator,uint120 denominator,bytes signature,bytes extraData) advancedOrder,(uint256 orderIndex,uint8 side,uint256 index,uint256 identifier,bytes32[] criteriaProof)[] criteriaResolvers,bytes32 fulfillerConduitKey,address recipient)",k3=new Wc([`function ${b3}`]),NS=new Wc(["function mintPublic(address nftContract,address feeRecipient,address minterIfNotPayer,uint256 quantity) payable"]),S3=Object.freeze(["blast","base","ethereum","zora","arbitrum","sei","avalanche","polygon","optimism","ape_chain","flow","b3","soneium","ronin","bera_chain","solana","shape","unichain","gunzilla","abstract","animechain","hyperevm","somnia","monad","hyperliquid","megaeth","ink","robinhood","stablechain"]),x3=new Set(S3),PS=new Set(["solana","flow"]),wp="0x0000000000000000000000000000000000000000";function D3(){let e=process.env.OPENSEA_ENV_FILE||`${process.env.HOME||""}/.config/locals-only/opensea.env`;if(!C3(e))return"";try{for(let t of B3(e,"utf8").split(`
|
|
49
|
+
`)){let r=t.match(/^\s*OPENSEA_API_KEY\s*=\s*(.+)\s*$/);if(r)return r[1].replace(/^["']|["']$/g,"").trim()}}catch{}return""}function jt(e={}){return e.apiKey?e.apiKey:e.allowAmbientCredentials===!1||e.allowDiskCredentials===!1?e.env?.OPENSEA_API_KEY||e.env?.OPEN_SEA_API_KEY||"":e.env?.OPENSEA_API_KEY||process.env.OPENSEA_API_KEY||process.env.OPEN_SEA_API_KEY||D3()}function _S(e={}){return Lt({provider:"opensea",defaultUrl:w3,hosts:["api.opensea.io","testnets-api.opensea.io"],url:e.baseUrl||process.env.OPENSEA_API_URL})}function Gr(e={}){return _S(e).baseUrl}function qr(e={}){return Ct({accept:"application/json"},{"x-api-key":jt(e)},_S(e).trusted)}function OS(e){let t=String(e||"ethereum").trim().toLowerCase();if(!x3.has(t))throw new Error(`opensea: unsupported account chain ${t}`);return t}function ne(e,t="address"){try{return Q3(String(e||"").trim().toLowerCase())}catch{throw new Error(`opensea: invalid ${t}`)}}function HS(e,t=null){let r=String(e||"").trim();if(!r)throw new Error("opensea: account address required");if(t&&!PS.has(t)||!t&&/^0x[0-9a-fA-F]{40}$/.test(r))return ne(r,"account address");if(!/^[1-9A-HJ-NP-Za-km-z]{32,64}$/.test(r))throw new Error("opensea: invalid account address");return r}function v3(e,t){let r=String(e??"").trim();if(!/^(?:0|[1-9]\d*)(?:\.\d+)?$/.test(r)||Number(r)<=0)throw new Error(`opensea: ${t} must be a positive plain decimal`);return r}function R3(e,t){let r=Number(e);if(!Number.isSafeInteger(r)||r<=0)throw new Error(`opensea: ${t} must be a positive integer`);return r}function FS(e,t){let r=String(e||"").trim(),n=Date.parse(r);if(!r||!Number.isFinite(n))throw new Error(`opensea: ${t} must be an ISO 8601 timestamp`);return{text:new Date(n).toISOString(),ms:n}}function N3(e={},t,r){return{chain:t,owner:r,contract:e.contract||null,tokenId:e.identifier==null?null:String(e.identifier),tokenStandard:e.token_standard||null,collection:e.collection||null,name:e.name||null,description:e.description||null,imageUrl:e.display_image_url||e.image_url||e.original_image_url||null,originalImageUrl:e.original_image_url||e.image_url||null,animationUrl:e.display_animation_url||e.original_animation_url||null,metadataUrl:e.metadata_url||null,marketplaceUrl:e.opensea_url||null,estimatedValueUsd:e.estimated_value_usd!=null&&Number.isFinite(Number(e.estimated_value_usd))?Number(e.estimated_value_usd):null,spam:e.is_disabled===!0,disabled:e.is_disabled===!0,nsfw:e.is_nsfw===!0,traits:Array.isArray(e.traits)?e.traits:[],updatedAt:e.updated_at||null,acquisitionCost:null,itemPnl:{status:"unavailable",reason:"OpenSea account inventory does not expose trustworthy per-item acquisition cost"}}}async function GS(e={}){if(!jt(e))return{ok:!1,configured:!1,error:"OPENSEA_API_KEY not set"};try{let t=await Gs("boredapeyachtclub",e);return{ok:!0,configured:!0,name:t.name||t.collection}}catch(t){return{ok:!1,configured:!0,error:String(t.message||t).slice(0,160)}}}async function Gs(e,t={}){if(!e)throw new Error("collection slug required");if(!jt(t))throw new Error("OPENSEA_API_KEY required");return C(`${Gr(t)}/collections/${encodeURIComponent(e)}`,{headers:qr(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function qS(e,t={}){let r=await Gs(e,t),n=r.stats||r.total||{},o=r.floor_price??r.floorPrice??n.floor_price??n.floorPrice??null;return{slug:r.collection||e,name:r.name||null,floor:o,totalSupply:r.total_supply??n.total_supply??null,numOwners:r.num_owners??n.num_owners??null,raw:{contracts:r.contracts,fees:r.fees,category:r.category}}}async function qs(e={},t={}){if(!jt(t))throw new Error("OPENSEA_API_KEY required");let r=OS(e.chain),n=HS(e.address||e.owner,r),o=Math.min(Math.max(Number(e.pageSize??e.limit??200)||200,1),200),i=Math.min(Math.max(Number(e.maxPages??5)||5,1),25),s=[],a=e.next?String(e.next):null,A=0;do{let c=new URL(`${Gr(t)}/chain/${encodeURIComponent(r)}/account/${encodeURIComponent(n)}/nfts`);c.searchParams.set("limit",String(o)),e.collection&&c.searchParams.set("collection",String(e.collection)),a&&c.searchParams.set("next",a);let l=await C(c.toString(),{headers:qr(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4});for(let u of Array.isArray(l?.nfts)?l.nfts:[])s.push(N3(u,r,n));a=l?.next?String(l.next):null,A+=1}while(a&&A<i);return{provider:"opensea-nft",source:"opensea-account-inventory",chain:r,owner:n,count:s.length,pages:A,complete:!a,next:a,nfts:s,exec:!1,readOnly:!0}}async function $c(e={},t={}){if(!jt(t))throw new Error("OPENSEA_API_KEY required");let r=HS(e.address||e.owner),n=await C(`${Gr(t)}/account/${encodeURIComponent(r)}/pnl`,{headers:qr(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4});return{provider:"opensea-nft",source:"opensea-indexed-account-pnl",address:r,scope:"OpenSea-indexed account trading PnL across supported currencies, not per-item NFT cost basis",methodology:"provider-indexed",realizedPnlUsd:n?.realized_pnl_usd??null,unrealizedPnlUsd:n?.unrealized_pnl_usd??null,totalPnlUsd:n?.total_pnl_usd??null,netInvestedUsd:n?.net_invested_usd??null,currentValueUsd:n?.current_value_usd??null,returnPercentage:n?.return_percentage??null,itemLevelPnlAvailable:!1,raw:n,exec:!1,readOnly:!0}}var YS=Object.freeze({robinhood:4663,ethereum:1,base:8453,arbitrum:42161,optimism:10,polygon:137,avalanche:43114,zora:7777777,blast:81457,sei:1329,ape_chain:33139,b3:8333,soneium:1868,ronin:2020,bera_chain:80094,shape:360,unichain:130,gunzilla:43419,abstract:2741,animechain:69e3,hyperevm:999,somnia:5031,monad:143,megaeth:4326,ink:57073,stablechain:988});function Ko(e){let t=String(e||"").trim().toLowerCase(),r=YS[t];if(!r)throw new Error(`opensea: unsupported EVM chain ${t||"(missing)"}`);return{chain:t,chainId:r}}function Ze(e,t,{positive:r=!1}={}){let n=String(e??"").trim();if(!/^\d+$/.test(n))throw new Error(`opensea: ${t} must be an unsigned integer`);let o=BigInt(n);if(r&&o<=0n)throw new Error(`opensea: ${t} must be positive`);return o}function F3(e,t="transaction value"){let r;try{let n=String(e??"0").trim();if(!/^(?:0x[0-9a-fA-F]+|\d+)$/.test(n))throw new Error("invalid");r=BigInt(n)}catch{throw new Error(`opensea: ${t} must be a non-negative integer quantity`)}if(r<0n)throw new Error(`opensea: ${t} must be non-negative`);return{amount:r,hex:`0x${r.toString(16)}`}}function zo(e){let t=String(e??"").trim();if(!/^\d+$/.test(t))throw new Error("opensea: tokenId must be an unsigned integer string");return t}function zc(e,t=10){let r=Number(e??1);if(!Number.isSafeInteger(r)||r<1||r>t)throw new Error(`opensea: quantity must be an integer from 1 through ${t}`);return r}function VS(e,t,r="listing expiry"){let n=e==null?"":String(e).trim(),o;if(/^\d+$/.test(n)){let i=Number(n);o=n.length<=10?i*1e3:i}else o=Date.parse(n);if(!n||!Number.isFinite(o))throw new Error(`opensea: ${r} missing or invalid`);if(o<=t)throw new Error(`opensea: ${r} is expired or stale`);return new Date(o).toISOString()}function M3(e,t){return VS(e.expiration_time??e.expirationTime??e.protocol_data?.parameters?.endTime,t)}function U3(e){let t=e.protocol_data?.parameters?.offer?.[0]||{},r=Ze(t.endAmount??t.startAmount??e.quantity??1,"listing quantity",{positive:!0});if(r>BigInt(Number.MAX_SAFE_INTEGER))throw new Error("opensea: listing quantity exceeds safe integer range");return Number(r)}function L3(e,t,r){if(!e||typeof e!="object")throw new Error("opensea: invalid best listing");let n=String(e.chain||"").trim().toLowerCase();if(n!==t.chain)throw new Error("opensea: OpenSea returned a listing for the wrong chain");if(YS[n]!==t.chainId)throw new Error("opensea: OpenSea listing chain id mismatch");if(String(e.status||"").toUpperCase()!=="ACTIVE")throw new Error("opensea: OpenSea returned a non-active listing");let i=e.protocol_data?.parameters?.offer?.[0]||{},s=ne(e.asset?.contract||i.token,"listing NFT contract");if(t.contract&&s!==t.contract)throw new Error("opensea: OpenSea returned a listing for the wrong contract");let a=zo(e.asset?.identifier??i.identifierOrCriteria),A=Ze(e.price?.current?.value,"listing price",{positive:!0}),c=String(e.order_hash||"").trim().toLowerCase();if(!/^0x[0-9a-f]{64}$/.test(c))throw new Error("opensea: invalid listing order hash");return{orderHash:c,chain:t.chain,chainId:t.chainId,protocolAddress:ne(e.protocol_address,"listing protocol address"),contract:s,tokenId:a,quantity:U3(e),priceWei:A.toString(),currency:String(e.price?.current?.currency||"").trim()||null,decimals:Number(e.price?.current?.decimals??18),expiry:M3(e,r),counter:Ze(e.protocol_data?.parameters?.counter,"listing counter").toString()}}async function Kc(e={},t={}){if(!jt(t))throw new Error("OPENSEA_API_KEY required");let r=Ko(e.chain);r.contract=e.contract?ne(e.contract,"NFT contract"):null;let n=String(e.slug||"").trim();if(!n)throw new Error("opensea: collection slug required");let o=Number(e.limit??12);if(!Number.isSafeInteger(o)||o<1||o>50)throw new Error("opensea: listing limit must be 1 through 50");let i=new URL(`${Gr(t)}/listings/collection/${encodeURIComponent(n)}/best`);i.searchParams.set("limit",String(o)),e.next&&i.searchParams.set("next",String(e.next));let s=await C(i.toString(),{headers:qr(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4}),a=Array.isArray(s?.listings)?s.listings:[];if(!a.length)throw new Error("opensea: no active best listings returned");let A=Number.isFinite(Number(t.nowMs))?Number(t.nowMs):Date.now();return{provider:"opensea-nft",source:"opensea-best-listings",chain:r.chain,chainId:r.chainId,slug:n,contract:r.contract,listings:a.map(c=>L3(c,r,A)),next:s?.next?String(s.next):null,exec:!1,readOnly:!0}}function bp(e){if(e.userConfirmed!==!0)throw new Error("opensea: userConfirmed=true required after buyer, chain, contract, token, quantity, price cap, total cap, and expiry review")}function JS(e){if(!e||typeof e!="object")return!1;let t=String(e.action??e.type??e.method??"");return/approv|setapprovalforall|permit/i.test(t)?!0:Object.values(e).some(r=>r&&typeof r=="object"&&JS(r))}function WS(e){return!e||typeof e!="object"?!1:Object.keys(e).some(t=>/^(?:signed.*|rawtransaction|serializedtransaction|txsigned|r|s|v)$/i.test(t))}function $S(e){return!e||typeof e!="object"?!1:WS(e)?!0:Object.values(e).some(t=>t&&typeof t=="object"&&$S(t))}function zS(e,t=[],r=new Set){if(!e||typeof e!="object"||r.has(e))return t;r.add(e),e.transaction&&typeof e.transaction=="object"?t.push(e.transaction):e.tx&&typeof e.tx=="object"&&t.push(e.tx);for(let[n,o]of Object.entries(e))(n==="transaction"||n==="tx")&&o&&typeof o=="object"||o&&typeof o=="object"&&zS(o,t,r);return t}function MS(e){return e&&typeof e=="object"&&typeof e.value=="string"?e.value:e}function KS(e,{buyer:t,chainId:r,targets:n}){if(!e||typeof e!="object")throw new Error("opensea: transaction object required");if(WS(e))throw new Error("opensea: signed transaction material refused");if((e.from?ne(MS(e.from),"transaction buyer"):t)!==t)throw new Error("opensea: OpenSea returned a transaction for the wrong buyer");let i=ne(MS(e.to??e.target),"transaction target");if(!n.has(i))throw new Error("opensea: OpenSea returned a transaction for the wrong target");let s=e.data??e.calldata,a=e.input_data&&typeof e.input_data=="object"?e.input_data:e.input&&typeof e.input=="object"?e.input:null;if(s==null&&a){if(!String(e.function||"").replace(/^function\s+/,"").startsWith("fulfillAdvancedOrder("))throw new Error("opensea: only exact Seaport fulfillAdvancedOrder preparation is accepted");s=k3.encodeFunctionData("fulfillAdvancedOrder",[a.advancedOrder,a.criteriaResolvers,a.fulfillerConduitKey,a.recipient])}let A=String(s??"").trim().toLowerCase();if(!/^0x(?:[0-9a-f]{2})+$/.test(A))throw new Error("opensea: OpenSea returned invalid transaction calldata");let c=e.calldata_suffix==null?"":String(e.calldata_suffix).trim().toLowerCase();if(c){if(!/^0x[0-9a-f]{8}$/.test(c))throw new Error("opensea: invalid OpenSea calldata suffix");A.endsWith(c.slice(2))||(A+=c.slice(2))}let l=e.chainId??e.chain_id??e.chainIdentifier?.chainId;if(l!=null&&Number(l)!==r)throw new Error("opensea: OpenSea returned a transaction for the wrong chain");let u=F3(e.value_hex??e.valueHex??e.value??0);return{from:t,to:i,data:A,value:u.hex,chainId:r,valueWei:u.amount}}function jo(e){return{from:e.from,to:e.to,data:e.data,value:e.value,chainId:e.chainId,...e.gasLimit==null?{}:{gasLimit:e.gasLimit},...e.maxFeePerGas==null?{}:{maxFeePerGas:e.maxFeePerGas},...e.maxPriorityFeePerGas==null?{}:{maxPriorityFeePerGas:e.maxPriorityFeePerGas},...e.worstCaseFeeWei==null?{}:{worstCaseFeeWei:e.worstCaseFeeWei}}}async function Ys(e,t,r){let n=r.provider,o=!!r.rpcUrl;if(!n&&!o)return{simulated:!1,gasEstimates:[]};let i=[];for(let A of e){let{chainId:c,...l}=jo(A);if(n){if(typeof n.call!="function"||typeof n.estimateGas!="function")throw new Error("opensea: supplied provider must implement call and estimateGas");await n.call(l);let u=await n.estimateGas(l);i.push(BigInt(u).toString())}else{let{rpcCall:u}=await Promise.resolve().then(()=>(De(),dc)),d={...r,fetchImpl:r.rpcFetchImpl||r.fetchImpl};await u(t,"eth_call",[l,"pending"],d);let h=await u(t,"eth_estimateGas",[l],d);i.push(BigInt(h).toString())}}let s=null,a=null;if(n&&typeof n.getFeeData=="function"){let A=await n.getFeeData();a=A?.maxPriorityFeePerGas==null?0n:BigInt(A.maxPriorityFeePerGas),s=A?.maxFeePerGas==null?A?.gasPrice==null?null:BigInt(A.gasPrice):BigInt(A.maxFeePerGas)}else if(o){let{rpcCall:A}=await Promise.resolve().then(()=>(De(),dc)),c={...r,fetchImpl:r.rpcFetchImpl||r.fetchImpl},l=BigInt(await A(t,"eth_gasPrice",[],c));try{a=BigInt(await A(t,"eth_maxPriorityFeePerGas",[],c))}catch{a=0n}let u=await A(t,"eth_getBlockByNumber",["pending",!1],c),h=(u?.baseFeePerGas==null?0n:BigInt(u.baseFeePerGas))*2n+a;s=l>h?l:h}return s!=null&&a!=null&&e.forEach((A,c)=>{let u=(BigInt(i[c])*120n+99n)/100n;A.gasLimit=u.toString(),A.maxPriorityFeePerGas=a.toString(),A.maxFeePerGas=s.toString(),A.worstCaseFeeWei=(u*s).toString()}),{simulated:!0,gasEstimates:i}}function kp(e,t){if(JS(e))throw new Error("opensea: approval steps are not permitted in NFT buy, sweep, or mint preparation");if($S(e))throw new Error("opensea: signed transaction material refused");let r=zS(e);if(!r.length&&e&&typeof e=="object"&&(e.to||e.target)&&r.push(e),!r.length)throw new Error("opensea: OpenSea returned no transaction action");return r.map(n=>KS(n,t))}function Sp(e,t){return L({...e,provider:"opensea-nft",kind:t,marketplace:"opensea",prepareReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,executionReady:!1,note:"Unsigned OpenSea EVM NFT transaction preparation only. The private signer must revalidate every bound field before the user signs or broadcasts."})}function jS(e,t,r){let n=e.find(o=>o.tokenId===t);if(!n)throw new Error(`opensea: no exact active listing for tokenId ${t}`);if(n.quantity!==r)throw new Error("opensea: listing quantity does not match requested quantity");return n}async function ZS(e={},t={}){if(!jt(t))throw new Error("OPENSEA_API_KEY required");bp(e);let{chain:r,chainId:n}=Ko(e.chain),o=ne(e.buyer||e.address,"buyer"),i=ne(e.contract,"NFT contract"),s=zo(e.tokenId),a=zc(e.quantity),A=Ze(e.maxPriceWei,"maxPriceWei",{positive:!0}),c=await Kc({chain:r,slug:e.slug,contract:i,limit:e.limit??50},t),l=jS(c.listings,s,a),u=BigInt(l.priceWei);if(u>A)throw new Error("opensea: listing exceeds max price cap");let d=await C(`${Gr(t)}/listings/fulfillment_data`,{method:"POST",headers:qr(t),body:{listing:{hash:l.orderHash,chain:r,protocol_address:l.protocolAddress},fulfiller:{address:o}},fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3,retries:0,dedupe:!1}),h=kp(d,{buyer:o,chainId:n,targets:new Set([l.protocolAddress])}),g=h.reduce((m,f)=>m+f.valueWei,0n);if(g!==u)throw new Error("opensea: fulfillment total does not match exact listing price");if(g>A)throw new Error("opensea: fulfillment total exceeds max price cap");let p=await Ys(h,n,{...t,provider:e.provider||t.provider});return Sp({action:"buy",chain:r,chainId:n,slug:c.slug,buyer:o,contract:i,tokenId:s,tokenIds:[s],quantity:a,priceWei:u.toString(),totalWei:g.toString(),maxPriceWei:A.toString(),expiry:l.expiry,orderHashes:[l.orderHash],items:[{orderHash:l.orderHash,counter:l.counter,contract:i,tokenId:s,priceWei:u.toString()}],transactions:h.map(jo),...p},"nft-buy")}async function XS(e={},t={}){if(!jt(t))throw new Error("OPENSEA_API_KEY required");bp(e);let{chain:r,chainId:n}=Ko(e.chain),o=ne(e.buyer||e.address,"buyer"),i=ne(e.contract,"NFT contract"),s=zc(e.quantity??e.maxItems),a=Array.isArray(e.tokenIds)?e.tokenIds.map(zo):[];if(a.length&&(a.length!==s||new Set(a).size!==a.length))throw new Error("opensea: sweep requires one unique tokenId per requested item");let A=Ze(e.maxPriceWei,"maxPriceWei",{positive:!0}),c=Ze(e.maxTotalWei,"maxTotalWei",{positive:!0});if(c>A*BigInt(s))throw new Error("opensea: maxTotalWei cannot exceed per-item cap times quantity");let l=Number(e.limit||(a.length?s:50)),u=Math.min(50,Math.max(s,l)),d=new Map,h=null,g=null;for(let x=0;x<5;x+=1){let F=await Kc({chain:r,slug:e.slug,contract:i,limit:u,next:g},t);h||(h=F);for(let z of F.listings)d.set(z.orderHash,z);let K=[...d.values()],X=a.length?a.every(z=>K.some(be=>be.tokenId===z)):new Set(K.filter(z=>z.quantity===1).map(z=>z.tokenId)).size>=s+Math.min(s,5);if(g=F.next,X||!g)break}h={...h,listings:[...d.values()],next:g};let p;if(a.length)p=a.map(x=>jS(h.listings,x,1));else{let x=new Set;if(p=[...h.listings].sort((F,K)=>{let X=BigInt(F.priceWei),z=BigInt(K.priceWei);return X<z?-1:X>z?1:0}).filter(F=>F.quantity!==1||x.has(F.tokenId)?!1:(x.add(F.tokenId),!0)),p.length<s)throw new Error(`opensea: only ${p.length} unique active floor listings available; requested ${s}`)}if(a.length){let x=p.find(F=>BigInt(F.priceWei)>A);if(x)throw new Error(`opensea: listing ${x.tokenId} exceeds max price cap`)}let m=new Set(p.map(x=>x.protocolAddress)),f=[],B=[];for(let x of p){if(f.length>=s)break;if(BigInt(x.priceWei)>A)continue;let F;try{F=await C(`${Gr(t)}/listings/fulfillment_data`,{method:"POST",headers:qr(t),body:{listing:{hash:x.orderHash,chain:r,protocol_address:x.protocolAddress},fulfiller:{address:o}},fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3,retries:0,dedupe:!1})}catch(X){let z=Array.isArray(X?.body?.errors)?X.body.errors.join(" "):String(X?.body?.error||X?.message||"");if(!a.length&&X?.status===400&&/order\s+not\s+valid/i.test(z))continue;throw X}let K=kp(F,{buyer:o,chainId:n,targets:m});if(K.length!==1)throw new Error("opensea: each NFT fulfillment must contain exactly one transaction");f.push(x),B.push(K[0])}if(f.length!==s)throw new Error(`opensea: only ${f.length} valid floor fulfillments available; requested ${s}`);let E=f.map(x=>x.tokenId),I=f.reduce((x,F)=>x+BigInt(F.priceWei),0n);if(I>c)throw new Error("opensea: selected listing total exceeds total cap");let Q=B.reduce((x,F)=>x+F.valueWei,0n);if(Q>c)throw new Error("opensea: sweep total exceeds total cap");if(Q!==I)throw new Error("opensea: sweep total does not match exact selected listing total");let R=await Ys(B,n,{...t,provider:e.provider||t.provider}),D=f.map(x=>x.expiry).sort()[0];return Sp({action:"sweep",chain:r,chainId:n,slug:h.slug,buyer:o,contract:i,tokenIds:E,quantity:s,pricesWei:f.map(x=>x.priceWei),priceWei:null,totalWei:Q.toString(),maxPriceWei:A.toString(),maxTotalWei:c.toString(),expiry:D,orderHashes:f.map(x=>x.orderHash),items:f.map(x=>({orderHash:x.orderHash,counter:x.counter,contract:i,tokenId:x.tokenId,priceWei:x.priceWei})),transactions:B.map(jo),...R},"nft-buy")}function T3(e,t,r){let o=(Array.isArray(e?.contracts)?e.contracts:[]).find(s=>String(s?.chain||t).toLowerCase()===t&&s?.address);if(!o)throw new Error("opensea: collection response contains no contract for requested chain");let i=ne(o.address,"collection NFT contract");if(i!==r)throw new Error("opensea: OpenSea returned the wrong collection contract");return i}async function ex(e={},t={}){if(!jt(t))throw new Error("OPENSEA_API_KEY required");bp(e);let{chain:r,chainId:n}=Ko(e.chain),o=ne(e.buyer||e.minter||e.address,"buyer"),i=ne(e.contract,"NFT contract"),s=zc(e.quantity),a=Ze(e.priceWei,"priceWei"),A=Ze(e.maxTotalWei,"maxTotalWei"),c=Number.isFinite(Number(t.nowMs))?Number(t.nowMs):Date.now(),l=VS(e.expiry,c,"mint expiry"),u=String(e.slug||"").trim();if(!u)throw new Error("opensea: collection slug required");let d=await Gs(u,t),h=T3(d,r,i),g=a*BigInt(s);if(g>A)throw new Error("opensea: mint total exceeds total cap");let p=await C(`${Gr(t)}/drops/${encodeURIComponent(u)}/mint`,{method:"POST",headers:qr(t),body:{minter:o,quantity:s},fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3,retries:0,dedupe:!1}),m=t.allowedMintTargets?.[r]??t.allowedMintTargets?.[n]??e.mintTarget,f=Array.isArray(m)?m:m?[m]:[];if(!f.length)throw new Error("opensea: reviewed SeaDrop mintTarget required");let B=new Set(f.map(be=>ne(be,"SeaDrop mint target"))),E=kp(p,{buyer:o,chainId:n,targets:B});if(E.length!==1)throw new Error("opensea: mint must contain exactly one SeaDrop transaction");let I;try{I=NS.decodeFunctionData("mintPublic",E[0].data)}catch{throw new Error("opensea: mint transaction must call SeaDrop mintPublic")}let Q=ne(I[0],"mint NFT contract"),R=ne(I[1],"mint fee recipient"),D=ne(I[2],"mint recipient");if(Q!==h)throw new Error("opensea: mint calldata collection mismatch");if(D!==o)throw new Error("opensea: mint calldata recipient mismatch");if(BigInt(I[3])!==BigInt(s))throw new Error("opensea: mint calldata quantity mismatch");if(NS.encodeFunctionData("mintPublic",[h,R,o,s]).toLowerCase()!==E[0].data.toLowerCase())throw new Error("opensea: mint calldata must be canonical with no suffix");let F=E.reduce((be,ht)=>be+ht.valueWei,0n);if(F!==g)throw new Error("opensea: mint transaction total does not match exact approved price and quantity");if(F>A)throw new Error("opensea: mint total exceeds total cap");let K=await Ys(E,n,{...t,provider:e.provider||t.provider});if(K.simulated!==!0)throw new Error("opensea: mint RPC simulation required");let X=e.gasPolicy||t.gasPolicy||{maxTotalGasWei:e.maxGasWei,maxFeePerGasWei:e.maxFeePerGasWei,maxPriorityFeePerGasWei:e.maxPriorityFeePerGasWei},z=RS({chainId:n,tx:E[0],policy:X});return Sp({action:"mint",chain:r,chainId:n,slug:u,buyer:o,contract:h,tokenId:e.tokenId==null?null:zo(e.tokenId),quantity:s,priceWei:a.toString(),totalWei:F.toString(),maxTotalWei:A.toString(),mintTarget:E[0].to,feeRecipient:R,expiry:l,transactions:E.map(jo),gasWar:z,...K},"nft-mint")}function P3(e={}){let t=OS(e.chain);if(PS.has(t))throw new Error("opensea: listing actions currently require an EVM NFT chain");let r=e.startTime||e.start_time?FS(e.startTime||e.start_time,"startTime"):{text:new Date().toISOString(),ms:Date.now()},n=FS(e.endTime||e.end_time,"endTime");if(n.ms<=r.ms)throw new Error("opensea: endTime must be after startTime");let o=String(e.tokenId??e.token_id??"").trim();if(!/^\d+$/.test(o))throw new Error("opensea: tokenId must be an unsigned integer string");return{chain:t,contract:ne(e.contract,"NFT contract"),token_id:o,quantity:R3(e.quantity??1,"quantity"),price:{amount:v3(e.price?.amount??e.amount??e.priceAmount,"price amount"),currency:ne(e.price?.currency??e.currency??wp,"price currency")},start_time:r.text,end_time:n.text}}var $o={OrderComponents:[{name:"offerer",type:"address"},{name:"zone",type:"address"},{name:"offer",type:"OfferItem[]"},{name:"consideration",type:"ConsiderationItem[]"},{name:"orderType",type:"uint8"},{name:"startTime",type:"uint256"},{name:"endTime",type:"uint256"},{name:"zoneHash",type:"bytes32"},{name:"salt",type:"uint256"},{name:"conduitKey",type:"bytes32"},{name:"counter",type:"uint256"}],OfferItem:[{name:"itemType",type:"uint8"},{name:"token",type:"address"},{name:"identifierOrCriteria",type:"uint256"},{name:"startAmount",type:"uint256"},{name:"endAmount",type:"uint256"}],ConsiderationItem:[{name:"itemType",type:"uint8"},{name:"token",type:"address"},{name:"identifierOrCriteria",type:"uint256"},{name:"startAmount",type:"uint256"},{name:"endAmount",type:"uint256"},{name:"recipient",type:"address"}]},US=new Wc(["function setApprovalForAll(address operator,bool approved)"]),_3=new Wc(["function cancel((address offerer,address zone,(uint8 itemType,address token,uint256 identifierOrCriteria,uint256 startAmount,uint256 endAmount)[] offer,(uint8 itemType,address token,uint256 identifierOrCriteria,uint256 startAmount,uint256 endAmount,address recipient)[] consideration,uint8 orderType,uint256 startTime,uint256 endTime,bytes32 zoneHash,uint256 salt,bytes32 conduitKey,uint256 counter)[] orders) returns (bool cancelled)"]);function LS(e,t){return e?.[t]||(e?.action===t?e:null)}function O3(e,{seller:t,item:r,chainId:n}){let o=Array.isArray(e?.steps)?e.steps:[],i=o.map(E=>LS(E,"createListingsAction")).find(Boolean)||o.find(E=>/createListings/i.test(String(E?.action||""))),s=i?.signatureRequest?.message??i?.typedData,a;try{a=typeof s=="string"?JSON.parse(s):s}catch{throw new Error("opensea: invalid listing typed-data JSON")}if(!a||a.primaryType!=="OrderComponents"||!a.domain||!a.message)throw new Error("opensea: exact Seaport OrderComponents action required");let A=a.domain;if(A.name!=="Seaport"||A.version!=="1.6"||Number(A.chainId)!==n)throw new Error("opensea: listing domain mismatch");let c=ne(A.verifyingContract,"listing protocol"),l=a.message;if(ne(l.offerer,"listing seller")!==t)throw new Error("opensea: listing seller mismatch");if(!Array.isArray(l.offer)||l.offer.length!==1)throw new Error("opensea: executable listing requires exactly one NFT offer");let u=l.offer[0];if(![2,3].includes(Number(u.itemType)))throw new Error("opensea: listing offer must be ERC721 or ERC1155");if(ne(u.token,"listing collection")!==r.contract||String(u.identifierOrCriteria)!==r.token_id)throw new Error("opensea: listing NFT mismatch");if(String(u.startAmount)!==String(r.quantity)||String(u.endAmount)!==String(r.quantity))throw new Error("opensea: listing quantity mismatch");if(Number(l.orderType)!==2)throw new Error("opensea: only FULL_RESTRICTED listings are executable");if(!Array.isArray(l.consideration)||!l.consideration.length)throw new Error("opensea: listing consideration required");let d=0n;for(let E of l.consideration){if(Number(E.itemType)!==0||ne(E.token,"listing payment token")!==wp)throw new Error("opensea: executable listings currently require native fixed-price consideration");let I=BigInt(E.startAmount),Q=BigInt(E.endAmount);if(I<=0n||I!==Q)throw new Error("opensea: listing consideration must be fixed and positive");ne(E.recipient,"listing consideration recipient"),d+=I}let h=y3(r.price.amount,18);if(d!==h)throw new Error("opensea: listing price mismatch");let g=BigInt(Math.floor(Date.parse(r.start_time)/1e3)),p=BigInt(Math.floor(Date.parse(r.end_time)/1e3));if(BigInt(l.startTime)!==g||BigInt(l.endTime)!==p)throw new Error("opensea: listing time bounds mismatch");let m=TS.hashStruct("OrderComponents",$o,l),f=o.map(E=>LS(E,"itemApprovalAction")).find(Boolean)||o.find(E=>/setApprovalForAll/i.test(String(E?.action||""))),B=null;if(f){let E=f.transaction||f.itemApprovalAction?.transaction,I=KS(E,{buyer:t,chainId:n,targets:new Set([r.contract])}),Q;try{Q=US.decodeFunctionData("setApprovalForAll",I.data)}catch{throw new Error("opensea: listing approval must be setApprovalForAll")}let R=ne(Q[0],"listing approval operator");if(Q[1]!==!0||I.valueWei!==0n)throw new Error("opensea: listing approval must grant one exact operator with zero value");if(US.encodeFunctionData("setApprovalForAll",[R,!0]).toLowerCase()!==I.data.toLowerCase())throw new Error("opensea: listing approval calldata must be canonical");B={...I,operator:R}}return{protocolAddress:c,typedData:{domain:A,types:$o,primaryType:"OrderComponents",message:l},orderHash:m,priceWei:d,approval:B}}async function jc(e={},t={}){if(!jt(t))throw new Error("OPENSEA_API_KEY required");if(e.userConfirmed!==!0)throw new Error("opensea: userConfirmed=true required after NFT, marketplace, price, currency, and expiry review");let r=ne(e.seller||e.address||e.owner,"seller"),n=Array.isArray(e.items)&&e.items.length?e.items:[e];if(n.length!==1)throw new Error("opensea: executable listing preparation supports exactly one NFT per envelope");let o=n.map(P3);if(new Set(o.map(h=>h.chain)).size!==1)throw new Error("opensea: all prepared listing items must be on one chain");let s=e.useCreatorFee!==!1,a={address:r,items:o,use_creator_fee:s};e.taker&&(a.taker=ne(e.taker,"taker"));let A=await C(`${Gr(t)}/listings/actions`,{method:"POST",headers:qr(t),body:a,fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3,retries:0,dedupe:!1}),{chainId:c}=Ko(o[0].chain),l=O3(A,{seller:r,item:o[0],chainId:c}),u=l.approval?[l.approval]:[],d=u.length?await Ys(u,c,{...t,provider:e.provider||t.provider}):{simulated:!0};return L({provider:"opensea-nft",marketplace:"opensea",chain:o[0].chain,chainId:c,kind:"nft-list",action:"list",prepareReady:!0,executionReady:d.simulated===!0,signingReady:d.simulated===!0,broadcastReady:d.simulated===!0,requiresUserSignature:!0,requiresSeparateApproval:u.length>0,seller:r,contract:o[0].contract,tokenId:o[0].token_id,quantity:o[0].quantity,priceWei:l.priceWei.toString(),typedData:l.typedData,orderHash:l.orderHash,submission:{chain:o[0].chain,protocol:"seaport",protocolAddress:l.protocolAddress},transactions:u.map(jo),useCreatorFee:s,taker:a.taker||null,feeDisclosure:s?"Creator fees requested and bound into exact Seaport consideration recipients.":"Creator fees disabled by explicit request; every remaining consideration recipient is still bound.",...d})}async function tx(e={},t={}){if(e.userConfirmed!==!0)throw new Error("opensea: userConfirmed=true required for listing cancellation");let{chain:r,chainId:n}=Ko(e.chain),o=ne(e.seller||e.address||e.owner,"seller"),i=ne(e.protocolAddress,"reviewed Seaport protocol address"),s=ne(e.contract,"NFT contract"),a=zo(e.tokenId),A=zc(e.quantity),c=e.typedData;if(!c||c.primaryType!=="OrderComponents"||!c.domain||!c.message)throw new Error("opensea: exact Seaport OrderComponents typedData required for cancellation");for(let[x,F]of Object.entries($o)){let K=c.types?.[x];if(!Array.isArray(K)||K.length!==F.length||K.some((X,z)=>X?.name!==F[z].name||X?.type!==F[z].type))throw new Error("opensea: cancellation requires canonical Seaport types")}if(Object.keys(c.types||{}).filter(x=>x!=="EIP712Domain").sort().join(",")!==Object.keys($o).sort().join(","))throw new Error("opensea: cancellation requires canonical Seaport types");let u=c.domain;if(u.name!=="Seaport"||u.version!=="1.6"||Number(u.chainId)!==n)throw new Error("opensea: cancellation domain mismatch");let d=ne(u.verifyingContract,"Seaport cancellation target");if(d!==i)throw new Error("opensea: cancellation target mismatch");let h=c.message;if(ne(h.offerer,"listing seller")!==o)throw new Error("opensea: cancellation seller mismatch");if(!Array.isArray(h.offer)||h.offer.length!==1||!Array.isArray(h.consideration)||!h.consideration.length)throw new Error("opensea: cancellation requires one exact previously prepared listing order");if(Number(h.orderType)!==2)throw new Error("opensea: cancellation requires a FULL_RESTRICTED listing order");let g=h.offer[0];if(![2,3].includes(Number(g.itemType)))throw new Error("opensea: cancellation offer must be ERC721 or ERC1155");if(ne(g.token,"cancellation NFT contract")!==s)throw new Error("opensea: cancellation NFT contract mismatch");if(zo(g.identifierOrCriteria)!==a)throw new Error("opensea: cancellation tokenId mismatch");let p=Ze(g.startAmount,"cancellation offer startAmount",{positive:!0}),m=Ze(g.endAmount,"cancellation offer endAmount",{positive:!0});if(p!==BigInt(A)||m!==BigInt(A))throw new Error("opensea: cancellation quantity mismatch");for(let x of h.consideration){if(Number(x.itemType)!==0||ne(x.token,"cancellation payment token")!==wp)throw new Error("opensea: cancellation requires native fixed-price consideration");let F=Ze(x.startAmount,"cancellation consideration startAmount",{positive:!0}),K=Ze(x.endAmount,"cancellation consideration endAmount",{positive:!0});if(F!==K)throw new Error("opensea: cancellation consideration must be fixed and positive");ne(x.recipient,"cancellation consideration recipient")}let f=Ze(h.startTime,"cancellation startTime");if(Ze(h.endTime,"cancellation endTime",{positive:!0})<=f)throw new Error("opensea: cancellation listing time bounds invalid");let E=TS.hashStruct("OrderComponents",$o,h),I=String(e.orderHash||"").trim().toLowerCase();if(!/^0x[0-9a-f]{64}$/.test(I)||I!==E.toLowerCase())throw new Error("opensea: cancellation order hash mismatch");let Q=_3.encodeFunctionData("cancel",[[h]]),R=[{from:o,to:d,data:Q,value:"0x0",valueWei:0n,chainId:n}],D=await Ys(R,n,{...t,provider:e.provider||t.provider});if(D.simulated!==!0)throw new Error("opensea: cancellation RPC simulation required");return L({provider:"opensea-nft",marketplace:"opensea",kind:"nft-cancel",action:"cancel-listing",prepareReady:!0,chain:r,chainId:n,seller:o,contract:s,tokenId:a,quantity:A,protocolAddress:d,orderHash:E,typedData:{domain:u,types:$o,primaryType:"OrderComponents",message:h},transactions:R.map(jo),...D,requiresUserSignature:!0},{provider:"opensea-nft",kind:"nft-cancel"})}De();var rx=999;async function nx(e={}){let t={chainId:rx,rpc:null,dex:null};try{t.rpc=await _o(rx,e)}catch(r){t.rpc={ok:!1,error:String(r.message||r).slice(0,120)}}try{let r=await ks("HYPE",e),n=(r.pairs||[]).filter(o=>/hyper|hl|hyperevm/i.test(String(o.chainId||o.chain||"")));t.dex={ok:!0,hypePairs:n.length||(r.pairs||[]).length,sample:(n[0]||r.pairs?.[0])?.pairAddress||null}}catch(r){t.dex={ok:!1,error:String(r.message||r).slice(0,120)}}return{ok:!!(t.rpc?.ok||t.dex?.ok),...t}}async function ox(e="HYPE",t={}){let n=(await ks(e,t)).pairs||[],o=n.filter(i=>/hyper|hl|hyperevm/i.test(String(i.chainId||"")));return{query:e,hyperPairs:o,allPairs:n.slice(0,20),count:o.length||n.length}}async function ix(e,t={}){return bn(e,t)}M();var q3="https://api-mainnet.magiceden.dev/v2",Vs=1e9;function sx(e={}){return Lt({provider:"magiceden",defaultUrl:q3,hosts:["api-mainnet.magiceden.dev","api-devnet.magiceden.dev"],url:e.baseUrl||process.env.MAGICEDEN_API_URL})}function Xo(e={}){return sx(e).baseUrl}function Dn(e={}){return e.apiKey||process.env.MAGICEDEN_API_KEY||""}function ei(e={}){let t=Dn(e);return Ct({accept:"application/json"},{Authorization:t?`Bearer ${t}`:""},sx(e).trusted)}function xp(e){let t=String(e||"").trim();if(!/^[a-z0-9_]{1,64}$/i.test(t))throw new Error("magiceden: symbol must be a collection slug");return t}function Zo(e,t){if(typeof e=="number"){if(!Number.isFinite(e)||e<=0)throw new Error(`magiceden: ${t} must be a positive number`);return e}let r=String(e??"").trim();if(!/^\d+(\.\d+)?$/.test(r))throw new Error(`magiceden: ${t} must be a plain decimal number (no hex, exponent, or sign)`);let n=Number(r);if(!Number.isFinite(n)||n<=0)throw new Error(`magiceden: ${t} must be a positive number`);return n}function Y3(e){let t=[e?.price,e?.mintPrice,e?.priceSol,e?.v0?.price,e?.launchStageInfo?.price,e?.stage?.price];for(let r of t){if(r==null)continue;let n=Number(r);if(Number.isFinite(n)&&n>=0)return n}return e?.isFree===!0?0:null}function V3(e){return Math.round(Zo(e,"priceSol")*Vs)}function J3(e){if(e==null||e==="")throw new Error("magiceden: listing expiry is required and must be in the future");let t=Number(e);if(!Number.isSafeInteger(t)||t<=0)throw new Error("magiceden: expiry must be a future Unix timestamp in seconds");if(t<=Math.floor(Date.now()/1e3))throw new Error("magiceden: expiry must be in the future");return t}function W3({tokenMint:e,priceSol:t,expiry:r}){return`list ${e} on magiceden-sol for ${t} SOL until ${r}`}function $3(e,t){if(e.userConfirmed!==!0)throw new Error("magiceden: listing requires userConfirmed=true after reviewing tokenMint, priceSol, and expiry");let r=W3(t);if(String(e.confirmation||e.confirmationPhrase||"").trim()!==r)throw new Error(`magiceden: confirmation must equal ${JSON.stringify(r)}`);return r}async function ax(e={}){try{let t=await Dp({symbol:"mad_lads"},e);return{ok:!0,provider:"magiceden-sol",keyed:!!Dn(e),readTier:"keyless",prepareTier:Dn(e)?"keyed":"requires MAGICEDEN_API_KEY",floorPriceSol:t.floorPriceSol,exec:!1}}catch(t){return{ok:!1,provider:"magiceden-sol",keyed:!!Dn(e),error:String(t?.message||t).slice(0,160),exec:!1}}}async function Dp(e={},t={}){let r=xp(e.symbol||e.collection),n=await C(`${Xo(t)}/collections/${encodeURIComponent(r)}/stats`,{headers:ei(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3}),o=Number(n?.floorPrice??0);return{provider:"magiceden-sol",chain:"solana-mainnet-beta",symbol:r,floorPriceLamports:o||null,floorPriceSol:o?o/Vs:null,listedCount:n?.listedCount??null,volume24hrSol:n?.volume24hr!=null?Number(n.volume24hr)/Vs:null,avgPrice24hrSol:n?.avgPrice24hr!=null?Number(n.avgPrice24hr)/Vs:null,exec:!1,raw:n}}function Ax(e={}){let t=Number(e.price??0);return{tokenMint:e.tokenMint??null,tokenATA:e.tokenAddress??null,seller:e.seller??null,sellerReferral:e.sellerReferral??null,auctionHouse:e.auctionHouse??null,pdaAddress:e.pdaAddress??null,priceSol:t||null,priceLamports:t?Math.round(t*Vs):null,tokenSize:e.tokenSize??1}}async function cx(e={},t={}){let r=xp(e.symbol||e.collection),n=Math.min(Math.max(Number(e.limit??20)||20,1),100),o=Math.max(Number(e.offset??0)||0,0),i=new URL(`${Xo(t)}/collections/${encodeURIComponent(r)}/listings`);i.searchParams.set("offset",String(o)),i.searchParams.set("limit",String(n)),e.sort&&i.searchParams.set("sort",String(e.sort));let s=await C(i.toString(),{headers:ei(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3}),a=(Array.isArray(s)?s:[]).map(Ax);return{provider:"magiceden-sol",chain:"solana-mainnet-beta",symbol:r,count:a.length,listings:a,exec:!1}}async function lx(e={},t={}){let r=me(e.tokenMint||e.mint,"tokenMint"),n=await C(`${Xo(t)}/tokens/${encodeURIComponent(r)}/listings`,{headers:ei(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3}),o=(Array.isArray(n)?n:[]).map(Ax);return{provider:"magiceden-sol",chain:"solana-mainnet-beta",tokenMint:r,listings:o,exec:!1}}async function ux(e={},t={}){if(!Dn(t))throw new Error("magiceden: MAGICEDEN_API_KEY required to build a buy instruction");let r=me(e.buyer||e.userPublicKey,"buyer"),n=me(e.seller,"seller"),o=me(e.tokenMint,"tokenMint"),i=me(e.tokenATA||e.tokenAddress,"tokenATA"),s=me(e.auctionHouse,"auctionHouse"),a=Zo(e.priceSol??e.price,"priceSol"),A=e.maxPriceSol==null?a:Zo(e.maxPriceSol,"maxPriceSol");if(a>A)throw new Error(`magiceden: listing price ${a} SOL exceeds maxPriceSol cap ${A} SOL`);let c=new URL(`${Xo(t)}/instructions/buy_now`);c.searchParams.set("buyer",r),c.searchParams.set("seller",n),c.searchParams.set("auctionHouseAddress",s),c.searchParams.set("tokenMint",o),c.searchParams.set("tokenATA",i),c.searchParams.set("price",String(a)),e.sellerReferral&&c.searchParams.set("sellerReferral",String(e.sellerReferral)),e.buyerReferral&&c.searchParams.set("buyerReferral",String(e.buyerReferral));let l=await C(c.toString(),{headers:ei(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3});pr("magiceden",l);let u=l?.v0?.tx?.data??l?.tx?.data??null;if(!Array.isArray(u))throw l?.txSigned?new Error("magiceden: refused a pre-signed transaction payload from the API"):new Error("magiceden: buy_now returned no unsigned transaction payload");let d=Buffer.from(u).toString("base64");return L({provider:"magiceden-sol",chain:"solana-mainnet-beta",kind:"nft-buy",prepareReady:!0,executionReady:!1,signingReady:!1,broadcastReady:!1,requiresUserSignature:!0,buyer:r,seller:n,tokenMint:o,priceSol:a,maxPriceSol:A,lamports:V3(a),transaction:d,transactionEncoding:"base64",raw:l})}async function Zc(e={},t={}){if(!Dn(t))throw new Error("magiceden: MAGICEDEN_API_KEY required to build a list instruction");let r=me(e.seller||e.userPublicKey,"seller"),n=me(e.tokenMint,"tokenMint"),o=me(e.tokenATA||e.tokenAddress,"tokenATA"),i=me(e.auctionHouse,"auctionHouse"),s=Zo(e.priceSol??e.price,"priceSol"),a=J3(e.expiry),A=$3(e,{tokenMint:n,priceSol:s,expiry:a}),c=new URL(`${Xo(t)}/instructions/sell`);c.searchParams.set("seller",r),c.searchParams.set("auctionHouseAddress",i),c.searchParams.set("tokenMint",n),c.searchParams.set("tokenAccount",o),c.searchParams.set("price",String(s)),e.sellerReferral&&c.searchParams.set("sellerReferral",me(e.sellerReferral,"sellerReferral")),a!=null&&c.searchParams.set("expiry",String(a));let l=await C(c.toString(),{headers:ei(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3});pr("magiceden",l);let u=l?.v0?.tx?.data??l?.tx?.data??null;if(!Array.isArray(u))throw l?.txSigned?new Error("magiceden: refused a pre-signed transaction payload from the API"):new Error("magiceden: sell returned no unsigned transaction payload");let d=Buffer.from(u).toString("base64");return L({provider:"magiceden-sol",chain:"solana-mainnet-beta",kind:"nft-list",prepareReady:!0,executionReady:!1,signingReady:!1,broadcastReady:!1,requiresUserSignature:!0,seller:r,tokenMint:n,priceSol:s,expiry:a,confirmation:A,transaction:d,transactionEncoding:"base64",raw:l})}async function dx(e={},t={}){if(!Dn(t))throw new Error("magiceden: MAGICEDEN_API_KEY required to build a mint instruction");let r=me(e.buyer||e.userPublicKey,"buyer"),n=xp(e.symbol||e.collection);if(e.maxPriceSol==null)throw new Error("magiceden: maxPriceSol is required to prepare a mint \u2014 an uncapped mint has no spend ceiling");let o=Zo(e.maxPriceSol,"maxPriceSol"),i=e.nftAmount==null?1:Zo(e.nftAmount,"nftAmount");if(!Number.isInteger(i))throw new Error("magiceden: nftAmount must be a whole number");let s=new URL(`${Xo(t)}/instructions/mint`);s.searchParams.set("symbol",n),s.searchParams.set("wallet",r),s.searchParams.set("nftAmount",String(i));let a=await C(s.toString(),{headers:ei(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),A=Y3(a);if(A==null)throw new Error("magiceden: mint price not present in the API response \u2014 refusing to prepare an unverifiable spend");let c=A*i;if(c>o)throw new Error(`magiceden: mint cost ${c} SOL exceeds maxPriceSol cap ${o} SOL`);pr("magiceden",a);let l=a?.v0?.tx?.data??a?.tx?.data??null;if(!Array.isArray(l))throw a?.txSigned?new Error("magiceden: refused a pre-signed transaction payload from the API"):new Error("magiceden: mint returned no unsigned transaction payload");let u=Buffer.from(l).toString("base64");return L({provider:"magiceden-sol",chain:"solana-mainnet-beta",kind:"nft-mint",prepareReady:!0,executionReady:!1,signingReady:!1,broadcastReady:!1,requiresUserSignature:!0,buyer:r,symbol:n,nftAmount:i,priceSol:A,totalSol:c,maxPriceSol:o,transaction:u,transactionEncoding:"base64",raw:a})}M();var ti=8,vp=10n**BigInt(ti),K3="0xa4b1",hx=7,Rp=1,j3=2n**64n-1n;function Z3(e={}){return e.exchangeUrl?e.exchangeUrl:process.env.HL_EXCHANGE_URL?process.env.HL_EXCHANGE_URL:e.testnet||process.env.HL_TESTNET==="1"?"https://api.hyperliquid-testnet.xyz/exchange":"https://api.hyperliquid.xyz/exchange"}function Ws(e={}){return e.testnet||process.env.HL_TESTNET==="1"?"Testnet":"Mainnet"}function ni(e,t){let r=String(e||"").trim();if(!/^0x[0-9a-fA-F]{40}$/.test(r))throw new Error(`hl-staking: ${t} must be a 0x EVM address`);return r.toLowerCase()}function Js(e,t="amount"){let r=String(e??"").trim();if(!/^\d+(\.\d+)?$/.test(r))throw new Error(`hl-staking: ${t} must be a positive decimal HYPE amount`);let[n,o=""]=r.split(".");if(o.length>ti)throw new Error(`hl-staking: ${t} has more than ${ti} decimals`);let i=BigInt(n)*vp+BigInt((o+"0".repeat(ti)).slice(0,ti)||"0");if(i<=0n)throw new Error(`hl-staking: ${t} must be greater than zero`);if(i>j3)throw new Error(`hl-staking: ${t} exceeds the uint64 range the signed action encodes`);return i.toString()}function ri(e){let t=BigInt(e);return t<=BigInt(Number.MAX_SAFE_INTEGER)?Number(t):e}function fr(e){let t=BigInt(String(e||"0")),r=t/vp,n=(t%vp).toString().padStart(ti,"0").replace(/0+$/,"");return n?`${r}.${n}`:String(r)}async function gx(e={}){try{let t=await Np(e);return{ok:t.count>0,provider:"hl-staking",chain:Ws(e),validators:t.count,exec:!1}}catch(t){return{ok:!1,provider:"hl-staking",error:String(t?.message||t).slice(0,160),exec:!1}}}async function Np(e={}){let t=await ge({type:"validatorSummaries"},e),n=(Array.isArray(t)?t:[]).map(o=>({validator:o.validator??null,name:o.name??null,isActive:o.isActive??null,isJailed:o.isJailed??null,commission:o.commission??null,stake:o.stake??null,nRecentBlocks:o.nRecentBlocks??null}));return{provider:"hl-staking",count:n.length,validators:n,exec:!1,raw:t}}async function Fp(e={},t={}){let r=ni(e.user||e.address,"user"),n=await ge({type:"delegatorSummary",user:r},t);return{provider:"hl-staking",user:r,delegatedWei:n?.delegated??null,undelegatedWei:n?.undelegated??null,totalPendingWithdrawalWei:n?.totalPendingWithdrawal??null,nPendingWithdrawals:n?.nPendingWithdrawals??null,delegatedHype:n?.delegated!=null?String(n.delegated):null,undelegatedHype:n?.undelegated!=null?String(n.undelegated):null,exec:!1,raw:n}}async function Mp(e={},t={}){let r=ni(e.user||e.address,"user"),n=await ge({type:"delegations",user:r},t),o=Array.isArray(n)?n:[];return{provider:"hl-staking",user:r,count:o.length,delegations:o.map(i=>({validator:i.validator??null,amount:i.amount??null,lockedUntilTimestamp:i.lockedUntilTimestamp??null})),exec:!1,raw:n}}async function px(e={},t={}){let r=ni(e.user||e.address,"user"),n=await ge({type:"delegatorRewards",user:r},t);return{provider:"hl-staking",user:r,rewards:Array.isArray(n)?n:[],exec:!1}}async function fx(e={},t={}){let r=ni(e.user||e.address,"user"),n=await ge({type:"delegatorHistory",user:r},t);return{provider:"hl-staking",user:r,history:Array.isArray(n)?n:[],exec:!1}}function Up(e={}){let t=e.nonce==null?Date.now():Number(e.nonce);if(!Number.isInteger(t)||t<=0)throw new Error("hl-staking: nonce must be a positive integer ms timestamp");return t}function Xc(e={}){return String(e.signatureChainId||process.env.HL_SIGNATURE_CHAIN_ID||K3)}function X3(e={}){return{name:"HyperliquidSignTransaction",version:"1",chainId:Number(BigInt(Xc(e))),verifyingContract:"0x0000000000000000000000000000000000000000"}}function Lp({kind:e,action:t,types:r,primaryType:n,message:o,opts:i,notes:s,caps:a}){return L({provider:"hl-staking",venue:"hypercore",chain:Ws(i),kind:e,prepareReady:!0,executionReady:!1,signingReady:!1,broadcastReady:!1,requiresUserSignature:!0,signWith:"user wallet (EIP-712 typed data)",submitTo:Z3(i),submitShape:{action:t,nonce:t.nonce,signature:"<user 65-byte signature>"},action:t,typedData:{domain:X3(i),types:r,primaryType:n,message:o},caps:a||null,notes:s,exec:!1},{provider:"hl-staking",kind:e})}function mx(e={},t={}){let r=Js(e.amountHype??e.amount,"amountHype"),n=e.maxHype==null?null:Js(e.maxHype,"maxHype");if(n&&BigInt(r)>BigInt(n))throw new Error(`hl-staking: amount ${fr(r)} HYPE exceeds maxHype cap ${fr(n)} HYPE`);let o=Up(e),i=Ws(t),s={type:"cDeposit",hyperliquidChain:i,signatureChainId:Xc(t),wei:ri(r),nonce:o};return Lp({kind:"hype-stake-deposit",action:s,primaryType:"HyperliquidTransaction:CDeposit",types:{"HyperliquidTransaction:CDeposit":[{name:"hyperliquidChain",type:"string"},{name:"wei",type:"uint64"},{name:"nonce",type:"uint64"}]},message:{hyperliquidChain:i,wei:ri(r),nonce:o},opts:t,caps:{amountHype:fr(r),maxHype:n?fr(n):null},notes:["Moves HYPE from your Hyperliquid spot balance into your staking balance.","Staking balance still earns nothing until it is delegated to a validator.","Oracle prepared this. Your wallet signs it. Nothing was submitted."]})}function Ex(e={},t={}){let r=Js(e.amountHype??e.amount,"amountHype"),n=Up(e),o=Ws(t),i={type:"cWithdraw",hyperliquidChain:o,signatureChainId:Xc(t),wei:ri(r),nonce:n};return Lp({kind:"hype-stake-withdraw",action:i,primaryType:"HyperliquidTransaction:CWithdraw",types:{"HyperliquidTransaction:CWithdraw":[{name:"hyperliquidChain",type:"string"},{name:"wei",type:"uint64"},{name:"nonce",type:"uint64"}]},message:{hyperliquidChain:o,wei:ri(r),nonce:n},opts:t,caps:{amountHype:fr(r)},notes:[`Starts the ${hx} day unstaking queue back to spot. The HYPE is not liquid during the queue.`,"Undelegate from the validator first: only undelegated staking balance can be withdrawn.","Oracle prepared this. Your wallet signs it. Nothing was submitted."]})}function Ix(e={},t={}){let r=ni(e.validator,"validator"),n=Js(e.amountHype??e.amount,"amountHype"),o=!!(e.isUndelegate??e.undelegate??!1),i=e.maxHype==null?null:Js(e.maxHype,"maxHype");if(!o&&i&&BigInt(n)>BigInt(i))throw new Error(`hl-staking: delegate amount ${fr(n)} HYPE exceeds maxHype cap ${fr(i)} HYPE`);let s=Up(e),a=Ws(t),A={type:"tokenDelegate",hyperliquidChain:a,signatureChainId:Xc(t),validator:r,wei:ri(n),isUndelegate:o,nonce:s};return Lp({kind:o?"hype-undelegate":"hype-delegate",action:A,primaryType:"HyperliquidTransaction:TokenDelegate",types:{"HyperliquidTransaction:TokenDelegate":[{name:"hyperliquidChain",type:"string"},{name:"validator",type:"address"},{name:"wei",type:"uint64"},{name:"isUndelegate",type:"bool"},{name:"nonce",type:"uint64"}]},message:{hyperliquidChain:a,validator:r,wei:ri(n),isUndelegate:o,nonce:s},opts:t,caps:{amountHype:fr(n),maxHype:i?fr(i):null,validator:r},notes:o?["Returns stake from the validator to your staking balance.",`Delegations carry a ${Rp} day validator lockup before they can be undelegated.`,"Oracle prepared this. Your wallet signs it. Nothing was submitted."]:["Delegates staking balance to the chosen validator so it starts earning.",`Once delegated, the stake is locked with that validator for ${Rp} day.`,"Check the validator's commission and jail status before delegating.","Oracle prepared this. Your wallet signs it. Nothing was submitted."]})}async function Bx(e={},t={}){let r=ni(e.user||e.address,"user"),n=await Fp({user:r},t),o=await Mp({user:r},t);return{provider:"hl-staking",user:r,stakingBalanceUndelegated:n.undelegatedWei,stakingBalanceDelegated:n.delegatedWei,pendingWithdrawals:n.nPendingWithdrawals,delegations:o.delegations,unstakingQueueDays:hx,validatorLockupDays:Rp,exec:!1}}async function Tp(e={}){let t=Date.now();try{let r=await gr(e);return{provider:"hl-markets",ok:!0,venue:"hyperliquid",symbols:Object.keys(r||{}).length,latencyMs:Date.now()-t}}catch(r){return{provider:"hl-markets",ok:!1,error:String(r?.message||r),latencyMs:Date.now()-t}}}var t8=24*365,r8=8;function Oe(e){if(e==null)return null;let t=Number(e);return Number.isFinite(t)?t:null}function n8(e,t){return e==null||t==null||t===0?null:(e-t)/t*100}async function el(e={},t={}){let[r,n]=await Promise.all([qo(t),gr(t).catch(()=>({}))]),o=r?.[0]?.universe??r?.universe??[],i=Array.isArray(r?.[1])?r[1]:[],a=o.map((A,c)=>{let l=i[c]||{},u=Oe(l.markPx),d=Oe(l.prevDayPx),h=Oe(l.openInterest),g=Oe(l.funding);return{coin:A.name,index:c,markPx:u,oraclePx:Oe(l.oraclePx),midPx:Oe(l.midPx)??Oe(n?.[A.name]),prevDayPx:d,change24hPct:n8(u,d),dayNtlVolumeUsd:Oe(l.dayNtlVlm),premium:Oe(l.premium),fundingRate:g,fundingRateAprPct:g==null?null:g*(t8/r8)*100,openInterestCoin:h,openInterestUsd:h==null||u==null?null:h*u,maxLeverage:A.maxLeverage??null,szDecimals:A.szDecimals??null,isDelisted:!!A.isDelisted}}).filter(A=>!A.isDelisted);return{provider:"hl-info",venue:"hyperliquid",kind:"market-datapoints",asOfMs:Date.now(),count:a.length,markets:a,totals:{openInterestUsd:a.reduce((A,c)=>A+(c.openInterestUsd||0),0),dayNtlVolumeUsd:a.reduce((A,c)=>A+(c.dayNtlVolumeUsd||0),0)}}}async function Cx(e={},t={}){let r=Math.max(1,Math.min(Number(e.limit)||10,50)),{markets:n,asOfMs:o,totals:i}=await el(e,t),s=(a,A=-1)=>n.filter(c=>c[a]!=null).sort((c,l)=>(c[a]-l[a])*A).slice(0,r);return{provider:"hl-info",venue:"hyperliquid",kind:"leaderboards",asOfMs:o,totals:i,gainers:s("change24hPct"),losers:s("change24hPct",1),byVolume:s("dayNtlVolumeUsd"),byOpenInterest:s("openInterestUsd"),fundingHighest:s("fundingRateAprPct"),fundingLowest:s("fundingRateAprPct",1)}}async function Qx(e={},t={}){let r=String(e.coin||e.symbol||"").trim().toUpperCase();if(!r)throw new Error("hl-markets: coin required");let n=String(e.interval||"1h"),o=Number(e.lookbackMs)||1440*60*1e3,i=Date.now(),s=i-o,[a,A,c]=await Promise.all([el({},t),bc({coin:r,interval:n,startTime:s,endTime:i},t).catch(()=>[]),yc(r,t).catch(()=>null)]),l=a.markets.find(p=>p.coin===r)||null;if(!l)throw new Error(`hl-markets: ${r} is not a listed perp`);let u=(Array.isArray(A)?A:[]).map(p=>({t:Number(p.t),open:Oe(p.o),high:Oe(p.h),low:Oe(p.l),close:Oe(p.c),volume:Oe(p.v)})),d=c?.levels??[],h=Oe(d?.[0]?.[0]?.px),g=Oe(d?.[1]?.[0]?.px);return{provider:"hl-info",venue:"hyperliquid",kind:"coin-datapoints",asOfMs:Date.now(),coin:r,market:l,book:{bestBid:h,bestAsk:g,spread:h==null||g==null?null:g-h,spreadBps:h==null||g==null||g===0?null:(g-h)/g*1e4},candles:{interval:n,count:u.length,series:u}}}async function yx(e={},t={}){let r=await Sc(t),n=r?.tokens??[],o=r?.universe??[];return{provider:"hl-info",venue:"hyperliquid",kind:"spot-datapoints",asOfMs:Date.now(),tokenCount:n.length,pairCount:o.length,tokens:n.map(i=>({name:i.name,index:i.index,szDecimals:i.szDecimals??null,weiDecimals:i.weiDecimals??null,tokenId:i.tokenId??null,isCanonical:!!i.isCanonical})),pairs:o.map(i=>({name:i.name,index:i.index,tokens:i.tokens,isCanonical:!!i.isCanonical}))}}var Sx=1e8,i8=1e5,$s={at:0,dexs:null},wx=new Map;async function bx(e={}){let t=Date.now();if($s.dexs&&t-$s.at<6e4&&!e.fetchImpl)return $s.dexs;let r=await ge({type:"perpDexs"},e);return $s={at:t,dexs:Array.isArray(r)?r:[]},$s.dexs}async function kx(e="",t={}){let r=e||"",n=Date.now(),o=wx.get(r);if(o&&n-o.at<3e4&&!t.fetchImpl)return o;let i=e?await ge({type:"metaAndAssetCtxs",dex:e},t):await qo(t),s=i?.[0]?.universe??i?.universe??[],a=Array.isArray(i?.[1])?i[1]:[],A={at:n,universe:s,ctxs:a};return wx.set(r,A),A}function s8(e){let t=String(e||"").trim(),r;if(t.startsWith("#"))r=Number(t.slice(1));else if(/^\d+$/.test(t))r=Number(t);else return null;if(!Number.isInteger(r)||r<0)return null;let n=r%10;if(n!==0&&n!==1)return null;let o=Math.floor(r/10);return{encoding:r,outcome:o,side:n,coin:`#${r}`,assetId:Sx+r}}function tl(e,t){let r=Number(e),n=Number(t);if(!Number.isInteger(r)||r<0)throw new Error("hl-assets: outcome id must be a non-negative integer");if(n!==0&&n!==1)throw new Error("hl-assets: outcome side must be 0 or 1");let o=10*r+n;return{encoding:o,outcome:r,side:n,coin:`#${o}`,assetId:Sx+o}}async function Pp(e={},t={}){if(e.outcome!=null||e.coin&&String(e.coin).startsWith("#")){let c=e.outcome!=null?tl(e.outcome,e.side??e.outcomeSide??0):s8(e.coin);if(!c)throw new Error(`hl-assets: invalid outcome coin ${e.coin}`);let l=e.szDecimals!=null?Number(e.szDecimals):2;return{kind:"outcome",coin:c.coin,assetId:c.assetId,encoding:c.encoding,outcome:c.outcome,side:c.side,szDecimals:l,maxLeverage:1,dex:null,markPx:null}}let r=String(e.coin||e.symbol||e.name||"").trim();if(!r)throw new Error("hl-assets: coin required");if(r.includes(":")){let[c,...l]=r.split(":"),u=l.join(":");if(!c||!u)throw new Error(`hl-assets: bad builder coin ${r}`);let h=(await bx(t)).findIndex(I=>I&&I.name===c);if(h<1)throw new Error(`hl-assets: unknown builder dex "${c}"`);let{universe:g,ctxs:p}=await kx(c,t),m=g.findIndex(I=>I.name===r||I.name===`${c}:${u}`||I.name.endsWith(`:${u}`));if(m<0)throw new Error(`hl-assets: ${r} not in dex ${c} meta`);let f=g[m];if(f.isDelisted)throw new Error(`hl-assets: ${r} is delisted`);let B=i8+h*1e4+m,E=p[m]||{};return{kind:"hip3",coin:f.name||r,assetId:B,szDecimals:f.szDecimals??0,maxLeverage:f.maxLeverage??null,dex:c,dexIndex:h,indexInMeta:m,markPx:E.markPx??null}}let{universe:n,ctxs:o}=await kx("",t),i=r.toUpperCase(),s=n.findIndex(c=>c.name===i);if(s<0){if(t.allowBareBuilderLeaf===!0)try{let c=await bx(t);for(let l=1;l<c.length;l++){let u=c[l];if(!u?.name)continue;let d=`${u.name}:${i}`;try{return await Pp({coin:d},t)}catch{}}}catch{}throw new Error(`hl-perps: ${i} is not a listed perp`)}let a=n[s];if(a.isDelisted)throw new Error(`hl-assets: ${i} is delisted`);let A=o[s]||{};return{kind:"main",coin:a.name,assetId:s,szDecimals:a.szDecimals??0,maxLeverage:a.maxLeverage??null,dex:"",markPx:A.markPx??null}}function xx(e,t,r="amount"){let n=String(e??"").trim();if(!/^-?\d*(\.\d+)?$/.test(n)||n===""||n==="."||n==="-")throw new Error(`${r} must be a decimal number, got ${JSON.stringify(n)}`);let o=n.startsWith("-"),i=o?n.slice(1):n,[s="0",a=""]=i.split(".");if(a.length>t)throw new Error(`${r} has more than ${t} decimal places, which would lose precision`);let A=BigInt((s||"0")+a.padEnd(t,"0"));return o?-A:A}var a8=5,A8=6,Rx="0x66eee";var Dx=10,_p="ORACLE_HL_BUILDER_ADDRESS",vx="ORACLE_HL_BUILDER_FEE_BPS",rl=Object.freeze({perp:2,spot:1,hip3:1,hip4:1}),ut=Object.freeze({LIMIT:"limit",MARKET:"market",STOP_MARKET:"stopMarket",STOP_LIMIT:"stopLimit",TAKE_PROFIT_MARKET:"takeProfitMarket",TAKE_PROFIT_LIMIT:"takeProfitLimit"}),ol=Object.freeze({GTC:"Gtc",IOC:"Ioc",ALO:"Alo"}),nl=Object.freeze({CROSS:"cross",ISOLATED:"isolated"});function c8(e="perp"){if(e==="perp"||e==="main")return rl.perp;if(e==="spot")return rl.spot;if(e==="hip3")return rl.hip3;if(e==="outcome"||e==="hip4")return rl.hip4;throw new Error(`hl-perps: unknown builder fee kind ${e}`)}function Nx({env:e=process.env,isHolder:t=!1,kind:r="perp"}={}){if(t)return null;let n=String(e?.[_p]||"").trim().toLowerCase();if(!n)return null;if(!/^0x[a-f0-9]{40}$/.test(n))throw new Error(`hl-perps: ${_p} must be an EVM address`);let o=Ap(e);if(!o||o!==n)return null;let i=e?.[vx],s=c8(r),a=i==null?s:Number(i);if(!Number.isFinite(a)||a<=0||Math.abs(a*10-Math.round(a*10))>1e-9)throw new Error(`hl-perps: ${vx} must be a positive number in 0.1 bps increments`);if(a>Dx)throw new Error(`hl-perps: builder fee ${a} bps exceeds the ${Dx} bps cap`);if(a>s)throw new Error(`hl-perps: builder fee ${a} bps exceeds the ${s} bps product tier for ${r}`);let A=Math.round(a*10),c=(A/1e3).toFixed(3).replace(/0+$/,"").replace(/\.$/,"");return{wire:{b:n,f:A},disclosure:{address:n,bps:a,percent:`${c}%`}}}async function l8(e,t={},r={}){if(!e)return{approved:!1,approvedFeeBps:0,status:"not-configured"};let n=String(t.user||r.user||"").trim().toLowerCase();if(!/^0x[a-f0-9]{40}$/.test(n))return{approved:!1,approvedFeeBps:0,status:"wallet-required"};try{let o=Number(await ge({type:"maxBuilderFee",user:n,builder:e.disclosure.address},r));return!Number.isInteger(o)||o<0?{approved:!1,approvedFeeBps:0,status:"invalid-response"}:{approved:o>=e.wire.f,approvedFeeBps:o/10,status:o>=e.wire.f?"approved":"insufficient"}}catch{return{approved:!1,approvedFeeBps:0,status:"unavailable"}}}async function u8(e,t={},r={}){if(!e)return{exempt:!1,status:"not-configured"};let n=String(t.user||r.user||"").trim().toLowerCase();if(!/^0x[a-f0-9]{40}$/.test(n))return{exempt:!1,status:"wallet-required"};try{let o=r.holderBalance||Oc;return BigInt(await o(n))>0n?{exempt:!0,status:"holder"}:{exempt:!1,status:"non-holder"}}catch{return{exempt:!1,status:"unavailable"}}}function Hp(e,t,{roundDown:r=null}={}){let n=typeof e=="number"?e.toFixed(Math.min(20,t+8)):String(e).trim();if(!/^-?\d+(\.\d+)?$/.test(n))throw new Error(`hl-perps: "${e}" is not a decimal number`);let o=n.startsWith("-"),[i,s=""]=n.replace(/^-/,"").split(".");if(s.length<=t){let g=s.replace(/0+$/,"");return(o?"-":"")+(g?`${i}.${g}`:i)}let a=s.slice(0,t),A=Number(s[t]),c=BigInt(i+a),l=s.slice(t).replace(/0+$/,"")!=="";r===!0||(r===!1?l&&(c+=1n):A>=5&&(c+=1n));let u=c.toString().padStart(t+1,"0"),h=(t===0?u:`${u.slice(0,-t)}.${u.slice(-t)}`).replace(/(\.\d*?)0+$/,"$1").replace(/\.$/,"");return(o?"-":"")+h}function d8(e,t,r={}){let n=String(e);if(!n.includes("."))return n;let o=Number(n);if(!Number.isFinite(o)||o===0)return n;let i=Math.floor(Math.log10(Math.abs(o))),s=Math.max(0,t-1-i);return Hp(n,s,r)}function Yr(e,t,r={}){let n=A8-Number(t??0);if(n<0)throw new Error("hl-perps: szDecimals out of range");return Hp(d8(e,a8,r),n,r)}function h8(e,t){let r=Hp(e,Number(t??0));if(BigInt(r.split(".")[0])<0n)throw new Error("hl-perps: size must be positive");if(Number(r)<=0)throw new Error("hl-perps: size rounds to zero at this asset's precision");return r}async function vn(e={},t={}){let r=await Pp(e,t);return{coin:r.coin,assetId:r.assetId,szDecimals:r.szDecimals,maxLeverage:r.maxLeverage,markPx:r.markPx,kind:r.kind,dex:r.dex??null,outcome:r.outcome??null,side:r.side??null}}function Op(e,{tif:t=ol.GTC,triggerPx:r,isMarket:n,szDecimals:o}={}){switch(e){case ut.LIMIT:return{limit:{tif:t}};case ut.MARKET:return{limit:{tif:ol.IOC}};case ut.STOP_MARKET:case ut.TAKE_PROFIT_MARKET:return{trigger:{isMarket:!0,triggerPx:Yr(r,o),tpsl:e===ut.STOP_MARKET?"sl":"tp"}};case ut.STOP_LIMIT:case ut.TAKE_PROFIT_LIMIT:return{trigger:{isMarket:!1,triggerPx:Yr(r,o),tpsl:e===ut.STOP_LIMIT?"sl":"tp"}};default:throw new Error(`hl-perps: unknown order type ${e}`)}}function oi(e,t){return{action:e,nonce:t,signatureChainId:Rx,submitTo:"https://api.hyperliquid.xyz/exchange",note:"Sign locally via @oracle-agent/operator or a wallet. Oracle does not submit."}}function ii(e){return L(e,{provider:e.provider||"hl-perps",kind:e.kind})}function Fx(e={},t={}){let r=Nx({env:t.env});if(!r)throw new Error(`hl-perps: ${_p} is required`);let n=Number(e.nonce??t.nonce??Date.now());if(!Number.isSafeInteger(n)||n<=0)throw new Error("hl-perps: nonce must be a positive integer");let o={type:"approveBuilderFee",hyperliquidChain:t.testnet||process.env.HL_TESTNET==="1"?"Testnet":"Mainnet",signatureChainId:Rx,maxFeeRate:r.disclosure.percent,builder:r.disclosure.address,nonce:n};return ii({provider:"hl-perps",venue:"hyperliquid",kind:"builder-fee-approval",builderFee:r.disclosure,...oi(o,n)})}async function zs(e={},t={}){let r=await vn(e,t),n=String(e.type||ut.LIMIT),o=e.side?String(e.side).toLowerCase()==="buy":!!e.isBuy,i=!!e.reduceOnly,s=h8(e.size??e.sz,r.szDecimals),a;if(n===ut.MARKET){let B=Number(r.markPx);if(!Number.isFinite(B)){let R=await gr(t);B=Number(R?.[r.coin]??R?.[String(r.assetId)]??NaN)}if(!Number.isFinite(B))throw new Error("hl-perps: no mark price available for a market order");let E=Number(e.maxSlippageBps??50);if(!Number.isInteger(E)||E<0)throw new Error("hl-perps: maxSlippageBps must be a non-negative integer");if(E>100)throw new Error(`hl-perps: maxSlippageBps ${E} exceeds the hard 100 bps cap`);let I=o?B*(1+E/1e4):B*(1-E/1e4);a=Yr(I,r.szDecimals,{roundDown:o});let Q=Math.abs(Number(a)/B-1)*1e4;if(Q>E+1e-9)throw new Error(`hl-perps: tick rounding makes the limit ${Q.toFixed(2)} bps from mark, above the ${E} bps cap`)}else{if(e.price==null&&e.limitPx==null)throw new Error("hl-perps: a limit order requires an explicit price");a=Yr(e.price??e.limitPx,r.szDecimals)}let A=Op(n,{tif:e.tif??(n===ut.MARKET?ol.IOC:ol.GTC),triggerPx:e.triggerPx,szDecimals:r.szDecimals}),c={a:r.assetId,b:o,p:a,s,r:i,t:A};e.clientOrderId&&(c.c=String(e.clientOrderId));let l={type:"order",orders:[c],grouping:e.grouping||"na"},u=Nx({env:t.env,kind:r.kind}),d=await u8(u,e,t),h=d.exempt?null:u,g=await l8(h,e,t),p=g.approved?h:null;p&&(l.builder=p.wire);let m=Number(e.nonce??Date.now()),f=Number(a)*Number(s);return ii({provider:"hl-perps",venue:"hyperliquid",kind:r.kind==="outcome"?"hip4-order":r.kind==="hip3"?"hip3-order":"perp-order",coin:r.coin,assetId:r.assetId,assetKind:r.kind,outcome:r.outcome??null,outcomeSide:r.side??null,dex:r.dex??null,side:o?"buy":"sell",orderType:n,price:a,size:s,reduceOnly:i,notionalUsd:Number.isFinite(f)?f:null,maxLeverage:r.maxLeverage,markPx:r.markPx,builderFee:p?.disclosure??null,holderExempt:d.exempt,holderVerificationStatus:d.status,builderApprovalRequired:h&&!p?{...u.disclosure,...g}:null,...oi(l,m)})}async function il(e={},t={}){let r=await vn(e,t),n=e.orderId??e.oid;if(n==null)throw new Error("hl-perps: orderId required");let o={type:"cancel",cancels:[{a:r.assetId,o:Number(n)}]};return ii({provider:"hl-perps",venue:"hyperliquid",kind:"perp-cancel",coin:r.coin,orderId:Number(n),...oi(o,Number(e.nonce??Date.now()))})}async function Mx(e={},t={}){let r=await vn(e,t),n=Number(e.leverage);if(!Number.isInteger(n)||n<1)throw new Error("hl-perps: leverage must be a positive integer");if(r.maxLeverage!=null&&n>r.maxLeverage)throw new Error(`hl-perps: ${r.coin} allows at most ${r.maxLeverage}x, requested ${n}x`);let o=String(e.marginMode||nl.CROSS).toLowerCase();if(o!==nl.CROSS&&o!==nl.ISOLATED)throw new Error('hl-perps: marginMode must be "cross" or "isolated"');let i={type:"updateLeverage",asset:r.assetId,isCross:o===nl.CROSS,leverage:n};return ii({provider:"hl-perps",venue:"hyperliquid",kind:"perp-leverage",coin:r.coin,leverage:n,marginMode:o,maxLeverage:r.maxLeverage,liquidationWarning:n>=20?`${n}x liquidates on roughly a ${(100/n).toFixed(2)}% adverse move before fees`:null,...oi(i,Number(e.nonce??Date.now()))})}async function Ux(e={},t={}){let r=await vn(e,t),n=e.usd??e.amountUsd;if(n==null)throw new Error("hl-perps: usd amount required");let o=String(n).trim();if(!/^-?\d+(\.\d+)?$/.test(o))throw new Error("hl-perps: usd must be a decimal number");let i=xx(o,6,"hl-perps: usd"),s={type:"updateIsolatedMargin",asset:r.assetId,isBuy:!0,ntli:i<=BigInt(Number.MAX_SAFE_INTEGER)?Number(i):i.toString()};return ii({provider:"hl-perps",venue:"hyperliquid",kind:"perp-isolated-margin",coin:r.coin,usd:o,...oi(s,Number(e.nonce??Date.now()))})}async function Lx(e={},t={}){let r=await zs(e,t),n=await vn(e,t),o=r.side==="buy",i=[r.action.orders[0]];if(e.takeProfitPx!=null&&i.push({a:n.assetId,b:!o,p:Yr(e.takeProfitPx,n.szDecimals),s:r.size,r:!0,t:Op(ut.TAKE_PROFIT_MARKET,{triggerPx:e.takeProfitPx,szDecimals:n.szDecimals})}),e.stopLossPx!=null&&i.push({a:n.assetId,b:!o,p:Yr(e.stopLossPx,n.szDecimals),s:r.size,r:!0,t:Op(ut.STOP_MARKET,{triggerPx:e.stopLossPx,szDecimals:n.szDecimals})}),i.length===1)throw new Error("hl-perps: a bracket needs takeProfitPx and/or stopLossPx");let s={type:"order",orders:i,grouping:"normalTpsl",...r.action.builder?{builder:r.action.builder}:{}};return ii({provider:"hl-perps",venue:"hyperliquid",kind:"perp-bracket",coin:n.coin,legs:i.length,entry:{side:r.side,price:r.price,size:r.size},takeProfitPx:e.takeProfitPx==null?null:Yr(e.takeProfitPx,n.szDecimals),stopLossPx:e.stopLossPx==null?null:Yr(e.stopLossPx,n.szDecimals),builderFee:r.builderFee,...oi(s,Number(e.nonce??Date.now()))})}async function Tx(e={}){let t=await Rs(e);return{provider:"hl-outcome",kind:"outcome-meta",outcomes:t?.outcomes||[],questions:t?.questions||[]}}async function Px(e={},t={}){let r=e.coin,n=e.outcome,o=e.side;if(typeof o=="string"){let s=o.toLowerCase();s==="yes"||s==="0"?o=0:(s==="no"||s==="1")&&(o=1)}if(e.sideName&&n!=null){let a=((await Rs(t))?.outcomes||[]).find(A=>Number(A.outcome)===Number(n));if(a?.sideSpecs){let A=a.sideSpecs.findIndex(c=>String(c.name).toLowerCase()===String(e.sideName).toLowerCase());A>=0&&(o=A)}}if(!r){if(n==null||o==null)throw new Error("hl-outcome: provide coin (#N) or outcome + side (0/1 or yes/no)");r=tl(n,o).coin}let i=await zs({...e,coin:r},t);return L({...i,kind:"hip4-order",provider:"hl-perps"},{provider:"hl-perps",kind:"hip4-order"})}async function _x(e={},t={}){let r=e.coin;if(!r&&e.outcome!=null){let n=e.side??0;r=tl(e.outcome,n).coin}return il({...e,coin:r},t)}import{createHmac as JZ,randomInt as f8}from"node:crypto";import{keccak256 as $Z,concat as zZ,zeroPadValue as KZ,getCreate2Address as jZ,AbiCoder as ZZ}from"ethers";var Yx=137;var m8="0xE111180000d2663C0091e4f400237545B87B996B",E8="0xe2222d279d744050d28e00520010520000310F59",Ox="0x0000000000000000000000000000000000000000000000000000000000000000",Gp=6;var I8={name:"Polymarket CTF Exchange",version:"2",chainId:Yx},B8={Order:[{name:"salt",type:"uint256"},{name:"maker",type:"address"},{name:"signer",type:"address"},{name:"tokenId",type:"uint256"},{name:"makerAmount",type:"uint256"},{name:"takerAmount",type:"uint256"},{name:"side",type:"uint8"},{name:"signatureType",type:"uint8"},{name:"timestamp",type:"uint256"},{name:"metadata",type:"bytes32"},{name:"builder",type:"bytes32"}]},Hx={"0.1":{price:1,size:2,amount:3},"0.01":{price:2,size:2,amount:4},"0.001":{price:3,size:2,amount:5},"0.0001":{price:4,size:2,amount:6}};function sl(e){let t=String(e);return t.includes(".")?t.split(".")[1].replace(/0+$/,"").length:0}function al(e,t){let r=10**t;return Math.floor(e*r+1e-12)/r}function Gx(e,t){let r=10**t;return Math.ceil(e*r-1e-12)/r}function C8(e,t){let r=10**t;return Math.round(e*r+Number.EPSILON)/r}function Q8(e,t,r,n){let o=C8(Number(r),n.price);if(e==="BUY"){let A=al(Number(t),n.size),c=A*o;return sl(c)>n.amount&&(c=Gx(c,n.amount+4),sl(c)>n.amount&&(c=al(c,n.amount))),{rawMakerAmt:c,rawTakerAmt:A}}let s=al(Number(t),n.size),a=s*o;return sl(a)>n.amount&&(a=Gx(a,n.amount+4),sl(a)>n.amount&&(a=al(a,n.amount))),{rawMakerAmt:s,rawTakerAmt:a}}function qx(e){let t=Number(e).toFixed(Gp),[r,n=""]=t.split(".");return(r+n.padEnd(Gp,"0").slice(0,Gp)).replace(/^0+/,"")||"0"}function y8(e={}){let{tokenId:t,side:r,price:n,size:o,maker:i,signer:s,negRisk:a=!1,tickSize:A="0.01",orderType:c="GTC",signatureType:l=0,metadata:u=Ox,builder:d=Ox}=e;if(!t)throw new Error("tokenId required");if(r!=="BUY"&&r!=="SELL")throw new Error("side must be BUY or SELL");if(!i||!s)throw new Error("maker and signer required");let h=Number(n),g=Number(o);if(!(h>0&&h<1))throw new Error(`price out of (0,1): ${n}`);if(!(g>0))throw new Error(`size must be > 0: ${o}`);if(![0,3].includes(Number(l)))throw new Error(`Desk poly supports signatureType 0 (EOA) or 3 (deposit wallet), got ${l}`);let p=Hx[String(A)]||Hx["0.01"],{rawMakerAmt:m,rawTakerAmt:f}=Q8(r,g,h,p),B=qx(m),E=qx(f),I=String(f8(1,2**31-1)),Q=Date.now().toString(),R=r==="BUY"?0:1,D=a?E8:m8,x={salt:I,maker:i,signer:s,tokenId:String(t),makerAmount:B,takerAmount:E,side:R,signatureType:Number(l),timestamp:Q,metadata:u,builder:d};return{domain:{...I8,verifyingContract:D},types:B8,value:x,orderType:c,side:r,notionalUsdc:r==="BUY"?m:f,exchange:D}}function Vx(e={}){let t=y8(e);return L({provider:"poly-clob",kind:"poly-order",chainId:Yx,tokenId:String(e.tokenId),side:t.side,orderType:t.orderType,notionalUsdc:t.notionalUsdc,exchange:t.exchange,domain:t.domain,types:t.types,value:t.value,tickSize:e.tickSize||"0.01",negRisk:!!e.negRisk,signatureType:Number(e.signatureType??0),maxNotionalUsdc:e.maxNotionalUsdc??null},{provider:"poly-clob",kind:"poly-order"})}import{ContractFactory as V8,keccak256 as oD}from"ethers";import{wordlists as b8}from"ethers";var k8=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),S8=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],x8=new Set([12,15,18,21,24]);function D8(e){let t=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return x8.has(t.length)&&t.every(r=>b8.en.getWordIndex(r)>=0)}var v8=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,R8=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,N8=new Set(["calldata","data","publickey","pubkey","message","payload","input","extradata"]);function F8(e){let t=Jx(e);return N8.has(t)||R8.test(t)}var Ks=class extends Error{constructor(t){super(`action receipt refused: secret-bearing field at ${t}`),this.name="ActionReceiptSecretError",this.code="ACTION_RECEIPT_SECRET"}};function Jx(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function M8(e){let t=Jx(e);return[...k8].some(r=>t.includes(r))}function U8(e,t,r){if(typeof t=="string"){if(S8.some(n=>n.test(t))||D8(t))throw new Ks(r);if(v8.test(t)&&!F8(e))throw new Ks(r)}}function qp(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return U8(r,e,t),e;if(typeof e=="number"){if(!Number.isFinite(e))throw new TypeError(`action receipt: non-finite number at ${t}`);return e}if(typeof e=="bigint")return e.toString();if(Array.isArray(e))return e.map((o,i)=>qp(o,`${t}[${i}]`,r));if(typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`action receipt: JSON-like value required at ${t}`);let n={};for(let o of Object.keys(e).sort()){let i=`${t}.${o}`;if(M8(o))throw new Ks(i);e[o]!==void 0&&(n[o]=qp(e[o],i,o))}return n}function Wx(e){return qp(e)}import{spawnSync as Jp}from"node:child_process";import{existsSync as Rn,readFileSync as cl,readdirSync as eD,statSync as tD}from"node:fs";import{join as Zt}from"node:path";import{createHash as G8}from"node:crypto";import{existsSync as zx,readFileSync as L8}from"node:fs";import{dirname as $x,join as Yp}from"node:path";import{fileURLToPath as T8}from"node:url";function P8(e){let t=$x(T8(e));for(let r=0;r<8;r+=1){let n=Yp(t,"package.json");if(zx(n))try{let i=JSON.parse(L8(n,"utf8"));if(i&&typeof i.version=="string")return t}catch{}let o=$x(t);if(o===t)break;t=o}throw new Error(`oracle: could not resolve package root from ${e}`)}function Kx(e,t){let r=P8(t),n=Yp(r,e);return zx(n)?n:Yp(r,"dist","assets",e)}import{isAddress as _8}from"ethers";var jx="5.0.2",O8={"safe-erc20":{contractName:"SafeERC20",source:"src/SafeERC20.sol",constructor:["string name","string symbol","uint256 initialSupply","address initialHolder","address initialOwner"],authority:["initialOwner may pause transfers and use Ownable2Step"],monitor:["OwnershipTransferStarted","OwnershipTransferred","Paused","Unpaused","Transfer"]},"safe-erc721-drop":{contractName:"SafeERC721Drop",source:"src/SafeERC721Drop.sol",constructor:["string name","string symbol","uint256 cap","address treasury","uint256 mintPrice","uint256 perWalletCap","address initialOwner"],authority:["initialOwner may withdraw the full balance to immutable treasury","no mint, proxy, upgrade, or delegatecall authority"],monitor:["Transfer","OwnershipTransferred","Withdrawal"]},"safe-vesting":{contractName:"SafeVesting",source:"src/SafeVesting.sol",constructor:["address beneficiary","uint64 startTimestamp","uint64 durationSeconds"],authority:["beneficiary is the immutable OpenZeppelin owner/recipient identity","ownership transfer and renunciation are disabled","no separate administrator, proxy, upgrade, or delegatecall authority"],monitor:["EtherReleased","ERC20Released"]}};function H8(e,t){return Object.freeze({id:e,contractName:t.contractName,source:t.source,dependency:Object.freeze({name:"OpenZeppelin Contracts",version:jx,tag:`v${jx}`}),constructor:Object.freeze([...t.constructor]),authority:Object.freeze([...t.authority]),monitor:Object.freeze([...t.monitor]),fixedSource:!0,proxy:!1,upgradeable:!1,arbitraryDelegatecall:!1,modelEmittedSource:!1})}var Vp=Object.freeze(Object.fromEntries(Object.entries(O8).map(([e,t])=>[e,H8(e,t)])));function Al(e){let t=Vp[String(e||"")];if(!t)throw new Error(`protocol-templates: unknown template "${e}"`);return t}function js(e,t){try{if(BigInt(e)<=0n)throw new Error}catch{throw new Error(`${t} must be > 0`)}}function Zs(e,t){let r=String(e||"");if(!_8(r)||/^0x0{40}$/i.test(r))throw new Error(`${t} must be nonzero address`)}function Zx(e,t){let r=Al(e);if(!Array.isArray(t))throw new Error(`${e}: constructor args must be an array`);if(t.length!==r.constructor.length)throw new Error(`${e}: expected ${r.constructor.length} constructor args`);if(e==="safe-erc20"){let[n,o,i,s,a]=t;if(!String(n||"").trim()||!String(o||"").trim())throw new Error("safe-erc20: name/symbol required");js(i,"safe-erc20: supply"),Zs(s,"safe-erc20: initialHolder"),Zs(a,"safe-erc20: initialOwner")}else if(e==="safe-erc721-drop"){let[n,o,i,s,a,A,c]=t;if(!String(n||"").trim()||!String(o||"").trim())throw new Error("safe-erc721-drop: name/symbol required");if(js(i,"safe-erc721-drop: cap"),Zs(s,"safe-erc721-drop: treasury"),js(a,"safe-erc721-drop: mintPrice"),js(A,"safe-erc721-drop: perWalletCap"),BigInt(A)>BigInt(i))throw new Error("safe-erc721-drop: perWalletCap exceeds cap");Zs(c,"safe-erc721-drop: initialOwner")}else if(e==="safe-vesting"){let[n,o,i]=t;Zs(n,"safe-vesting: beneficiary");for(let[s,a]of[[o,"startTimestamp"],[i,"durationSeconds"]])try{let A=BigInt(s);if(A<0n||A>18446744073709551615n)throw new Error}catch{throw new Error(`safe-vesting: ${a} must be uint64`)}js(i,"safe-vesting: durationSeconds")}return r}function Xx(e){return{authorities:[...e.authority],proxy:!1,upgradeable:!1,arbitraryDelegatecall:!1}}var Xs=Kx("protocols/templates",import.meta.url),ll="Template + Foundry tests + optional static analysis. NOT a paid security-firm audit. Do not put mainnet TVL on forks without an independent Solidity audit.";function ul(){return Rn(Xs)?eD(Xs).filter(e=>Vp[e]&&tD(Zt(Xs,e)).isDirectory()).map(e=>{let t=Zt(Xs,e),r=Zt(t,"SECURITY.md");return{id:e,path:t,metadata:Al(e),securityNotice:Rn(r)?cl(r,"utf8").slice(0,500):null,disclaimer:ll}}):[]}function rD(){if(process.env.FORGE_BIN)return process.env.FORGE_BIN;let e=process.env.HOME||"",t=["forge",Zt(e,".foundry/bin/forge")];for(let r of t)if(Jp(r,["--version"],{encoding:"utf8"}).status===0)return r;return null}function q8(){return process.env.SLITHER_BIN?process.env.SLITHER_BIN:Jp("slither",["--version"],{encoding:"utf8"}).status===0?"slither":null}function si(e,t,r){let n=Jp(e,t,{cwd:r,encoding:"utf8",env:{...process.env,PATH:`${process.env.HOME||""}/.foundry/bin:${process.env.PATH||""}`},timeout:12e4});return{ok:n.status===0,status:n.status,stdout:n.stdout||"",stderr:n.stderr||""}}function Y8(e){let t=G8("sha256");function r(n){let o=tD(n);if(o.isDirectory()){if(["lib","out","cache",".git"].includes(n.split("/").pop()))return;for(let i of eD(n).sort())r(Zt(n,i))}else o.isFile()&&(n.endsWith(".sol")||n.endsWith(".toml")||n.endsWith(".md")||n.endsWith(".txt"))&&(t.update(n.slice(e.length)),t.update(cl(n)))}return r(e),t.digest("hex")}function Wp(e,t={}){let r=Al(e),n=t.allowSkipStatic!==!1,o=Zt(Xs,e);if(!Rn(o))throw new Error(`protocol-templates: unknown template "${e}"`);let i=rD();if(!i)throw new Error("protocol-templates: forge not found. Install Foundry (https://getfoundry.sh) then: cd protocols/templates/"+e+" && forge install && forge test");if(!Rn(Zt(o,"lib","forge-std"))){let h=si(i,["install","foundry-rs/forge-std","--no-git"],o);if(!h.ok)throw new Error(`protocol-templates: forge install forge-std failed
|
|
50
|
+
${h.stderr}`)}if(!Rn(Zt(o,"lib","openzeppelin-contracts"))){let h=si(i,["install","OpenZeppelin/openzeppelin-contracts@v5.0.2","--no-git"],o);if(!h.ok)throw new Error(`protocol-templates: forge install openzeppelin failed
|
|
51
|
+
${h.stderr}`)}let s=Zt(o,"lib","openzeppelin-contracts","package.json"),a=Rn(s)?JSON.parse(cl(s,"utf8")).version:null;if(a!==r.dependency.version)throw new Error(`protocol-templates: OpenZeppelin ${r.dependency.version} required, found ${a||"unknown"}`);let A=si(i,["build","-q"],o);if(!A.ok)throw new Error(`protocol-templates: forge build FAILED for ${e}
|
|
52
|
+
${A.stderr}`.slice(0,2e3));let c=si(i,["test","-q"],o);if(!c.ok)throw new Error(`protocol-templates: forge test FAILED for ${e}
|
|
53
|
+
${c.stdout}
|
|
54
|
+
${c.stderr}`.slice(0,2e3));let l={tool:null,ok:!0,skipped:!0,reason:"slither not installed"},u=q8();if(u){let h=si(u,[".","--filter-paths","lib","--exclude-dependencies"],o);if(l={tool:"slither",ok:h.ok,skipped:!1,stdout:(h.stdout||"").slice(0,1500),stderr:(h.stderr||"").slice(0,500)},!h.ok&&!t.allowStaticFail)throw new Error(`protocol-templates: slither FAILED for ${e}
|
|
55
|
+
${h.stdout}
|
|
56
|
+
${h.stderr}`.slice(0,2e3))}else if(!n)throw new Error("protocol-templates: slither required (allowSkipStatic=false) but not installed");let d=Y8(o);return{ok:!0,templateId:e,metadata:r,path:o,forgeTests:{ok:!0,tool:"forge",summary:"forge test passed"},forgeBuild:{ok:!0,tool:"forge",summary:"forge build passed"},staticAnalysis:l,sourceHash:d,disclaimer:ll,firmAudit:!1}}function nD(e,t={}){let r=Wp(e,t),n=rD(),o=r.path,i=si(n,["build","-q"],o);if(!i.ok)throw new Error(`protocol-templates: forge build failed
|
|
57
|
+
${i.stderr}`.slice(0,1500));let s=r.metadata.contractName;if(t.contractName&&t.contractName!==s)throw new Error(`protocol-templates: fixed contract name is ${s}`);let a=Zt(o,"out",`${s}.sol`,`${s}.json`);if(!Rn(a))throw new Error(`protocol-templates: artifact missing at ${a}`);let A=JSON.parse(cl(a,"utf8"));return{gate:r,metadata:r.metadata,contractName:s,abi:A.abi,bytecode:A.bytecode?.object||A.bytecode,deployedBytecode:A.deployedBytecode?.object||A.deployedBytecode,artifactPath:a}}var J8=new Set(["status","chainId","forkBlockNumber","gasUsed","transactionHash","contractAddress","revertReason"]);function W8(e,t){if(typeof e!="object"||e===null||Array.isArray(e))throw new Error("prepareTemplateDeploy: localForkSimulationReceipt must be an object");let r=Wx(e);for(let o of Object.keys(r))if(!J8.has(o))throw new Error(`prepareTemplateDeploy: unsupported field "${o}" in localForkSimulationReceipt`);if(r.status!=="success"&&r.status!=="reverted")throw new Error('prepareTemplateDeploy: simulation status must be "success" or "reverted"');let n={status:r.status};if(r.chainId!==void 0){let o=Number(r.chainId);if(!Number.isSafeInteger(o)||o!==t)throw new Error("prepareTemplateDeploy: simulation chainId must match deployment chainId");n.chainId=o}if(r.forkBlockNumber!==void 0){let o=Number(r.forkBlockNumber);if(!Number.isSafeInteger(o)||o<0)throw new Error("prepareTemplateDeploy: simulation forkBlockNumber must be a nonnegative safe integer");n.forkBlockNumber=o}if(r.gasUsed!==void 0){let o=String(r.gasUsed);if(!/^(0|[1-9][0-9]*)$/.test(o))throw new Error("prepareTemplateDeploy: simulation gasUsed must be a nonnegative integer");n.gasUsed=o}if(r.transactionHash!==void 0){if(!/^0x[0-9a-fA-F]{64}$/.test(r.transactionHash))throw new Error("prepareTemplateDeploy: simulation transactionHash must be bytes32 hex");n.transactionHash=r.transactionHash}if(r.contractAddress!==void 0){if(!/^0x[0-9a-fA-F]{40}$/.test(r.contractAddress))throw new Error("prepareTemplateDeploy: simulation contractAddress must be an EVM address");n.contractAddress=r.contractAddress}if(r.revertReason!==void 0){if(typeof r.revertReason!="string"||r.revertReason.length>500)throw new Error("prepareTemplateDeploy: simulation revertReason must be at most 500 characters");n.revertReason=r.revertReason}return n}async function iD(e={},t={}){let r=String(e.templateId||"").trim();if(!r)throw new Error("prepareTemplateDeploy: templateId required");let n=Number(e.chainId);if(!Number.isInteger(n)||n<=0)throw new Error("prepareTemplateDeploy: chainId required");let o=e.args??e.constructorArgs??[],i=Zx(r,o),s=nD(r,{contractName:e.contractName,allowSkipStatic:t.allowSkipStatic!==!1,allowStaticFail:t.allowStaticFail===!0});if(!s.bytecode||s.bytecode==="0x")throw new Error("prepareTemplateDeploy: empty bytecode");let a=s.bytecode.startsWith("0x")?s.bytecode:`0x${s.bytecode}`,l=(await new V8(s.abi,a).getDeployTransaction(...o)).data,u=t.localForkSimulationReceipt??e.localForkSimulationReceipt??null,d=u===null?{status:"not-run",injected:!1,trusted:!1,gateDecision:!1,networkSideEffects:!1}:{...W8(u,n),kind:"local-fork",injected:!0,trusted:!1,gateDecision:!1,networkSideEffects:!1},h={chainId:n,to:null,data:l,value:"0x0"};return L({provider:"protocol-templates",kind:"template-deploy",templateId:r,contractName:s.contractName,template:i,chainId:n,transaction:h,unsignedDeployEnvelope:{transaction:h,signed:!1,broadcast:!1},abi:s.abi,sourceHash:s.gate.sourceHash,bytecodeHash:oD(a),authorityReport:Xx(i),simulationReceipt:d,verificationManifest:{contractName:s.contractName,source:i.source,compiler:"0.8.24",optimizer:{enabled:!0,runs:200},openZeppelin:i.dependency,sourceHash:s.gate.sourceHash,creationBytecodeHash:oD(a),constructorData:`0x${l.slice(a.length)}`},addressBookRecord:{status:"pending-deployment",address:null,chainId:n,label:`${r}:${s.contractName}`},monitoringPlan:{activation:"after user-signed deployment confirmation",enabled:!1,events:[...i.monitor],checks:["deployment bytecode matches verification manifest","authority changes","contract balance and release/withdraw events"]},gate:{forgeBuild:s.gate.forgeBuild,forgeTests:s.gate.forgeTests,staticAnalysis:{tool:s.gate.staticAnalysis.tool,ok:s.gate.staticAnalysis.ok,skipped:s.gate.staticAnalysis.skipped},firmAudit:!1,disclaimer:ll},requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,deploymentActivated:!1,note:"Unsigned deploy. User wallet signs. Template tests passed; not a firm audit."},{provider:"protocol-templates",kind:"template-deploy"})}import{createHash as $p}from"node:crypto";import{secp256k1 as ea}from"@noble/curves/secp256k1.js";import{bech32m as sD}from"@scure/base";var Kp="Reviewed scaffold and source checks only; NOT a paid security audit. Testnet simulation and independent review are required before mainnet use.",aD="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",hl=Object.freeze({"solana-safe-vault":Object.freeze({id:"solana-safe-vault",family:"solana",language:"Rust / Anchor",supportStatus:"GUIDED_BUILD",protocolModel:"Solana program with PDA-owned vault state",prepareOnly:!0,firmAudit:!1}),"bitcoin-tapscript-vault":Object.freeze({id:"bitcoin-tapscript-vault",family:"bitcoin",language:"Miniscript / Tapscript policy",supportStatus:"GUIDED_BUILD",protocolModel:"UTXO policy; not a general-purpose smart contract",prepareOnly:!0,firmAudit:!1})});function Qt(e,t){throw new Error(`${e}: ${t}`)}function uD(e){let t=String(e||"").trim();return/^[a-z][a-z0-9_]{1,47}$/.test(t)||Qt("native protocol","projectName must be 2-48 lowercase snake_case characters"),t}function zp(e,t,{min:r=0n,max:n=18446744073709551615n}={}){try{let o=BigInt(e);if(o<r||o>n)throw new Error;return o}catch{Qt(t,`must be an integer from ${r} to ${n}`)}}function z8(e){let t=String(e||"");if(!t||[...t].some(o=>!aD.includes(o)))return null;let r=0n;for(let o of t)r=r*58n+BigInt(aD.indexOf(o));let n=[];for(;r>0n;)n.unshift(Number(r&255n)),r>>=8n;for(let o of t){if(o!=="1")break;n.unshift(0)}return Uint8Array.from(n)}function AD(e,t){let r=String(e||"").trim(),n=z8(r);return(!n||n.length!==32)&&Qt(t,"must be a 32-byte base58 Solana public key"),r}function cD(e,t){let r=String(e||"").trim().toLowerCase();/^(02|03)[0-9a-f]{64}$/.test(r)||Qt(t,"must be a compressed secp256k1 public key");try{ea.Point.fromHex(r)}catch{Qt(t,"must encode a valid secp256k1 curve point")}return r}function K8(e){if(e<253)return Buffer.from([e]);if(e<=65535){let t=Buffer.alloc(3);return t[0]=253,t.writeUInt16LE(e,1),t}Qt("bitcoin-tapscript-vault","script too large")}function jp(e,t){let r=$p("sha256").update(e).digest();return $p("sha256").update(r).update(r).update(t).digest()}function lD(e){return jp("TapLeaf",Buffer.concat([Buffer.from([192]),K8(e.length),e]))}function j8(e,t){let[r,n]=Buffer.compare(e,t)<=0?[e,t]:[t,e];return jp("TapBranch",Buffer.concat([r,n]))}function dl(e){return ea.Point.fromHex(e).x.toString(16).padStart(64,"0")}function dD(e){return Buffer.concat([Buffer.from([32]),Buffer.from(e,"hex")])}function Z8(e,t){let r=[];return e.forEach((n,o)=>r.push(dD(dl(n)),Buffer.from([o===0?172:186]))),r.push(Buffer.from([80+t,156])),Buffer.concat(r)}function X8(e){let t=Number(e),r=[];for(;t>0;)r.push(t&255),t>>=8;return r[r.length-1]&128&&r.push(0),Buffer.from([r.length,...r])}function e9(e,t){return Buffer.concat([X8(t),Buffer.from([178,117]),dD(dl(e)),Buffer.from([172])])}function t9(e,t,r){let n=ea.Point.fromHex(e),o=n.y&1n?n.negate():n,i=Buffer.from(o.x.toString(16).padStart(64,"0"),"hex"),s=BigInt(`0x${jp("TapTweak",Buffer.concat([i,t])).toString("hex")}`)%ea.Point.Fn.ORDER,a=o.add(ea.Point.BASE.multiply(s)),A=Buffer.from(a.x.toString(16).padStart(64,"0"),"hex"),c=r==="mainnet"?"bc":r==="regtest"?"bcrt":"tb";return{address:sD.encode(c,[1,...sD.toWords(A)],90),scriptPubKey:`5120${A.toString("hex")}`,outputKey:A.toString("hex"),internalKey:i.toString("hex")}}function Tt(e,t){return Object.freeze({path:e,content:t.endsWith(`
|
|
14
58
|
`)?t:`${t}
|
|
15
|
-
`})}function
|
|
59
|
+
`})}function r9(e){let t=$p("sha256");for(let r of[...e].sort((n,o)=>n.path.localeCompare(o.path)))t.update(r.path).update("\0").update(r.content).update("\0");return t.digest("hex")}function n9(e){let t=uD(e.projectName),r=AD(e.authority,"solana-safe-vault authority"),n=zp(e.unlockDelaySlots,"solana-safe-vault unlockDelaySlots",{min:1n}),o=String(e.network||"devnet");["localnet","devnet","testnet","mainnet-beta"].includes(o)||Qt("solana-safe-vault network","must be localnet, devnet, testnet, or mainnet-beta");let i=AD(e.programId,"solana-safe-vault programId");i==="11111111111111111111111111111111"&&Qt("solana-safe-vault programId","must not be the System Program placeholder");let s=`use anchor_lang::prelude::*;
|
|
16
60
|
use anchor_lang::system_program::{transfer, Transfer};
|
|
17
61
|
|
|
18
|
-
declare_id!("${
|
|
62
|
+
declare_id!("${i}");
|
|
19
63
|
|
|
20
64
|
#[program]
|
|
21
65
|
pub mod ${t} {
|
|
@@ -59,7 +103,7 @@ pub mod ${t} {
|
|
|
59
103
|
|
|
60
104
|
#[derive(Accounts)]
|
|
61
105
|
pub struct Initialize<'info> {
|
|
62
|
-
#[account(mut, address = pubkey!("${
|
|
106
|
+
#[account(mut, address = pubkey!("${r}"))]
|
|
63
107
|
pub authority: Signer<'info>,
|
|
64
108
|
#[account(init, payer = authority, space = 8 + Vault::INIT_SPACE, seeds = [b"vault", authority.key().as_ref()], bump)]
|
|
65
109
|
pub vault: Account<'info, Vault>,
|
|
@@ -100,16 +144,16 @@ pub enum VaultError {
|
|
|
100
144
|
#[msg("Vault has insufficient funds")] InsufficientFunds,
|
|
101
145
|
#[msg("Arithmetic overflow")] ArithmeticOverflow,
|
|
102
146
|
}
|
|
103
|
-
`,
|
|
147
|
+
`,a=[Tt("Anchor.toml",`[provider]
|
|
104
148
|
cluster = "${o}"
|
|
105
149
|
wallet = "~/.config/solana/id.json"
|
|
106
150
|
|
|
107
151
|
[programs.${o}]
|
|
108
|
-
${t} = "${
|
|
109
|
-
`),
|
|
152
|
+
${t} = "${i}"
|
|
153
|
+
`),Tt("Cargo.toml",`[workspace]
|
|
110
154
|
members = ["programs/${t}"]
|
|
111
155
|
resolver = "2"
|
|
112
|
-
`),
|
|
156
|
+
`),Tt(`programs/${t}/Cargo.toml`,`[package]
|
|
113
157
|
name = "${t}"
|
|
114
158
|
version = "0.1.0"
|
|
115
159
|
edition = "2021"
|
|
@@ -125,24 +169,24 @@ default = []
|
|
|
125
169
|
|
|
126
170
|
[dependencies]
|
|
127
171
|
anchor-lang = "0.31.1"
|
|
128
|
-
`),
|
|
129
|
-
// 1. initialize with ${
|
|
172
|
+
`),Tt(`programs/${t}/src/lib.rs`,s),Tt(`tests/${t}.ts`,`// Generated lifecycle test plan. Run with Anchor on ${o}.
|
|
173
|
+
// 1. initialize with ${n} slots; 2. deposit; 3. reject early withdrawal;
|
|
130
174
|
// 4. advance slots; 5. withdraw as authority; 6. reject non-authority.
|
|
131
|
-
`),
|
|
175
|
+
`),Tt("SECURITY.md",`# Security model
|
|
132
176
|
|
|
133
|
-
- Initial and permanent withdrawal authority: \`${
|
|
134
|
-
- Unlock delay: ${
|
|
177
|
+
- Initial and permanent withdrawal authority: \`${r}\`
|
|
178
|
+
- Unlock delay: ${n} slots after the most recent deposit
|
|
135
179
|
- No upgrade authority is created by this source; deployment authority handling is external
|
|
136
180
|
- Run \`anchor build\`, \`anchor test\`, program simulation, and independent review before deployment
|
|
137
|
-
`)];return{family:"solana",network:o,projectName:t,protocolModel:
|
|
181
|
+
`)];return{family:"solana",network:o,projectName:t,protocolModel:hl["solana-safe-vault"].protocolModel,authorityReport:{initialAuthority:r,mutable:!1,unlockDelaySlots:n.toString()},programIdentity:{publicKey:i,callerSupplied:!0,secretKeyAccepted:!1},files:a,gate:{sourceChecks:{ok:s.includes("address = vault.authority")&&s.includes("checked_add")&&s.includes('seeds = [b"vault"')&&!s.includes("invoke_signed_unchecked"),checks:["authority constraint","checked slot arithmetic","PDA seed binding","no unchecked CPI"]},compiler:{tool:"anchor",requiredBeforeDeploy:!0,run:!1},tests:{tool:"anchor test",requiredBeforeDeploy:!0,run:!1},simulation:{cluster:o,requiredBeforeDeploy:!0,run:!1},firmAudit:!1,disclaimer:Kp},deploymentPrepared:!1}}function o9(e){let t=uD(e.projectName),r=String(e.network||"testnet");["regtest","signet","testnet","mainnet"].includes(r)||Qt("bitcoin-tapscript-vault network","must be regtest, signet, testnet, or mainnet");let n=Array.isArray(e.signerPubkeys)?e.signerPubkeys.map((f,B)=>cD(f,`signerPubkeys[${B}]`)):[];(n.length<2||n.length>15||new Set(n).size!==n.length)&&Qt("bitcoin-tapscript-vault signerPubkeys","must contain 2-15 unique compressed public keys");let o=Number(zp(e.threshold,"bitcoin-tapscript-vault threshold",{min:1n,max:BigInt(n.length)})),i=cD(e.recoveryPubkey,"bitcoin-tapscript-vault recoveryPubkey");n.includes(i)&&Qt("bitcoin-tapscript-vault recoveryPubkey","must be distinct from signer keys");let s=zp(e.recoveryDelayBlocks,"bitcoin-tapscript-vault recoveryDelayBlocks",{min:1n,max:65535n}),a=`multi_a(${o},${n.map(dl).join(",")})`,A=`and_v(v:older(${s}),pk(${dl(i)}))`,c=`taproot_tree(${a},${A})`,l=Z8(n,o),u=e9(i,Number(s)),d=j8(lD(l),lD(u)),h=t9(n[0],d,r),g=`tr(${h.internalKey},{${a},${A}})`,p={version:1,name:t,network:r,descriptorType:"tr",threshold:o,signerPubkeys:n,recoveryPubkey:i,recoveryDelayBlocks:Number(s),miniscript:c,cooperativeMiniscript:a,recoveryMiniscript:A,descriptor:g,address:h.address,scriptPubKey:h.scriptPubKey},m=[Tt("policy/miniscript.txt",c),Tt("policy/descriptor.txt",g),Tt("policy/manifest.json",JSON.stringify(p,null,2)),Tt("tests/policy-vectors.json",JSON.stringify({cooperative:{requiredSignatures:o,csvBlocks:0,expected:"spendable"},insufficientCooperative:{requiredSignatures:Math.max(0,o-1),csvBlocks:0,expected:"rejected"},earlyRecovery:{recoverySignature:!0,csvBlocks:Math.max(0,Number(s)-1),expected:"rejected"},matureRecovery:{recoverySignature:!0,csvBlocks:Number(s),expected:"spendable"}},null,2)),Tt("SECURITY.md",`# Security model
|
|
138
182
|
|
|
139
|
-
- Cooperative path: ${o}-of-${
|
|
140
|
-
- Recovery path: ${
|
|
183
|
+
- Cooperative path: ${o}-of-${n.length}
|
|
184
|
+
- Recovery path: ${i} after ${s} blocks (BIP68 relative locktime)
|
|
141
185
|
- This is a policy scaffold, not a funded address, PSBT, signature, or broadcast
|
|
142
186
|
- Compile and satisfy on regtest/signet with a reviewed Miniscript implementation before mainnet
|
|
143
|
-
`)];return{family:"bitcoin",network:n,projectName:t,protocolModel:Lr["bitcoin-tapscript-vault"].protocolModel,policy:{descriptorType:"tr",miniscript:l,cooperativeMiniscript:s,recoveryMiniscript:c,descriptor:f,address:m.address,scriptPubKey:m.scriptPubKey,threshold:o,signerCount:r.length,recoveryDelayBlocks:i.toString()},authorityReport:{cooperativeSigners:r,threshold:o,recoveryPubkey:a,recoveryDelayBlocks:i.toString()},files:g,gate:{sourceChecks:{ok:o<=r.length&&i>0n&&new Set([...r,a]).size===r.length+1,checks:["bounded threshold","unique keys","positive BIP68 delay","separate recovery key"]},compiler:{tool:"rust-miniscript or equivalent",requiredBeforeFunding:!0,run:!1},tests:{tool:"regtest/signet policy satisfaction",requiredBeforeFunding:!0,run:!1},simulation:{network:n==="mainnet"?"signet or regtest required first":n,requiredBeforeFunding:!0,run:!1},firmAudit:!1,disclaimer:Va},psbtPrepared:!1,fundingPrepared:!1}}function za(){return Object.values(Lr).map(e=>({...e,disclaimer:Va}))}async function Pd(e={}){let t=String(e.templateId||"").trim(),n=Lr[t];n||ue("protocol-templates",`unknown native template "${t}"`);let r=t==="solana-safe-vault"?ev(e):tv(e),o=Zw(r.files);return P({provider:"protocol-templates",kind:"native-protocol-build",templateId:t,supportStatus:n.supportStatus,prepareOnly:!0,firmAudit:!1,artifactHash:o,...r,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,note:"Deterministic native protocol source bundle only. Compile, test, simulate, and separately prepare deployment/funding before user signature."},{provider:"protocol-templates",kind:"native-protocol-build"})}_();var nv="https://api.geckoterminal.com/api/v2",Br=(e={})=>(e.baseUrl||process.env.GECKOTERMINAL_API_URL||nv).replace(/\/$/,""),It=e=>encodeURIComponent(String(e));async function ja(e={},t={}){let n=Math.max(1,Number(e.page||1));return b(`${Br(t)}/networks?page=${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function Td(e={},t={}){if(!e.network||!e.poolAddress)throw new Error("network and poolAddress required");return b(`${Br(t)}/networks/${It(e.network)}/pools/${It(e.poolAddress)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function Nd(e={},t={}){if(!e.network||!(e.address||e.tokenAddress))throw new Error("network and token address required");return b(`${Br(t)}/networks/${It(e.network)}/tokens/${It(e.address||e.tokenAddress)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function Rd(e={},t={}){if(!e.network||!e.poolAddress)throw new Error("network and poolAddress required");let n=["minute","hour","day"].includes(e.timeframe)?e.timeframe:"hour",r=new URLSearchParams;return r.set("aggregate",String(Math.max(1,Number(e.aggregate||1)))),r.set("limit",String(Math.min(1e3,Math.max(1,Number(e.limit||168))))),e.beforeTimestamp!=null&&r.set("before_timestamp",String(e.beforeTimestamp)),e.currency&&r.set("currency",String(e.currency)),e.token&&r.set("token",String(e.token)),b(`${Br(t)}/networks/${It(e.network)}/pools/${It(e.poolAddress)}/ohlcv/${n}?${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function Od(e={}){let t=await ja({page:1},e);return{ok:Array.isArray(t?.data)&&t.data.length>0,networkSample:t?.data?.length||0}}_();J();import{Interface as $d,getAddress as Ud,isAddress as ov}from"ethers";var av="https://api.curve.finance/v1",Dd=(e={})=>(e.baseUrl||process.env.CURVE_API_URL||av).replace(/\/$/,""),iv=Object.freeze({1:"0x45312ea0eFf7E09C83CBE249fa1d7598c4C8cd4e",10:"0x0DCDED3545D565bA3B19E683431381007245d983",56:"0xA72C85C258A81761433B4e8da60505Fe3Dd551CC",137:"0x0DCDED3545D565bA3B19E683431381007245d983",988:"0xFF5Cb29241F002fFeD2eAa224e3e996D24A6E8d1",999:"0xd2002373543Ce3527023C75e7518C274A51ce712",4663:"0xFF5Cb29241F002fFeD2eAa224e3e996D24A6E8d1",8453:"0x4f37A9d177470499A2dD084621020b023fcffc1F",42161:"0x2191718CD32d02B8E60BAdFFeA33E4B5DD9A0A0D",43114:"0x0DCDED3545D565bA3B19E683431381007245d983"}),Fd="0x0000000000000000000000000000000000000000",Ga=new $d(["function get_dy(address[11] route,uint256[5][5] swap_params,uint256 amount,address[5] pools) view returns (uint256)","function exchange(address[11] route,uint256[5][5] swap_params,uint256 amount,uint256 expected,address[5] pools,address receiver) payable returns (uint256)"]),Ld=new $d(["function coins(uint256) view returns (address)"]);function qd(e){let t=iv[Number(e)];if(!t)throw new Error(`curve-router-ng: unsupported chainId ${e}`);return t}function xn(e,t){if(!ov(e))throw new Error(`${t} must be a valid EVM address`);return Ud(e)}function sv(e,t){let n;try{n=BigInt(String(e))}catch{throw new Error(`${t} must be an integer string`)}if(n<=0n)throw new Error(`${t} must be positive`);return n}function Bd(e,t,n,r){let o=Number(e);if(!Number.isInteger(o)||o<n||o>r)throw new Error(`${t} must be an integer ${n}..${r}`);return o}function Hd(e,t,n){return[e,t,n,...Array(8).fill(Fd)]}function Vd(e,t,n,r){return[[BigInt(e),BigInt(t),1n,BigInt(n),BigInt(r)],...Array.from({length:4},()=>[0n,0n,0n,0n,0n])]}function Wd(e){return[e,...Array(4).fill(Fd)]}async function cv({chainId:e,pool:t,nCoins:n,rpcCall:r,opts:o}){let a=[];for(let i=0;i<n;i++){let s=Ld.encodeFunctionData("coins",[i]),c=await r(e,"eth_call",[{to:t,data:s},o.blockTag||"latest"],o),l=Ld.decodeFunctionResult("coins",c);a.push(Ud(l[0]))}return a}function Md(e,t,n){let r=t.toLowerCase(),o=e.findIndex(a=>a.toLowerCase()===r);if(o<0)throw new Error(`Curve pool does not contain ${n}`);return o}async function zd(e={}){return b(`${Dd(e)}/openapi.json`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs})}async function Ka(e={},t={}){let n=String(e.chain||e.network||"ethereum").toLowerCase(),r=String(e.registry||"main").toLowerCase();if(!/^[a-z0-9-]+$/.test(n)||!/^[a-z0-9-]+$/.test(r))throw new Error("invalid Curve chain or registry");return b(`${Dd(t)}/getPools/${n}/${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function jd(e={}){let t=await Ka({chain:"ethereum",registry:"main"},e),n=t?.data?.poolData?.length||0;return{ok:t?.success===!0&&n>0,poolSample:n}}async function Ya(e={},t={}){let n=Number(e.chainId??8453),r=qd(n),o=xn(e.pool,"curve pool"),a=xn(e.tokenIn,"curve tokenIn"),i=xn(e.tokenOut,"curve tokenOut"),s=sv(e.amountIn,"curve amountIn"),c=Bd(e.nCoins??2,"curve nCoins",2,8),l=Bd(e.poolType,"curve poolType",1,4),u=t.rpcCall||O,d=await cv({chainId:n,pool:o,nCoins:c,rpcCall:u,opts:t}),p=Md(d,a,"tokenIn"),m=Md(d,i,"tokenOut");if(p===m)throw new Error("Curve token indexes must differ");let f=Hd(a,o,i),h=Vd(p,m,l,c),g=Wd(o),v=Ga.encodeFunctionData("get_dy",[f,h,s,g]),k=await u(n,"eth_call",[{to:r,data:v},e.blockTag||"latest"],t),y=Ga.decodeFunctionResult("get_dy",k),w=BigInt(y[0]);if(w<=0n)throw new Error("curve quote returned zero output");return q({venue:"curve",router:r,chainId:n,pool:o,tokenIn:a,tokenOut:i,amountIn:s.toString(),amountOut:w.toString(),nCoins:c,poolType:l,swapType:1,i:p,j:m,route:f,swapParams:h.map(S=>S.map(N=>N.toString())),pools:g},{chainId:n,venue:r,amountOut:w.toString(),liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps})}async function Gd(e={},t={}){let n=Number(e.chainId??8453),r=qd(n),o=xn(e.sender||e.from||e.fromAddress||e.receiver,"curve sender"),a=xn(e.receiver||e.recipient||o,"curve receiver"),i=await Ya({...e,sender:o},t),s=Hd(i.tokenIn,i.pool,i.tokenOut),c=Vd(i.i,i.j,i.poolType,i.nCoins),l=Wd(i.pool),u=Ga.encodeFunctionData("exchange",[s,c,BigInt(i.amountIn),BigInt(i.amountOutMinimum),l,a]);return P({provider:"curve",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:n,quote:i,autoSlippage:i.autoSlippage,requiresApproval:{token:i.tokenIn,spender:r,amount:i.amountIn},transaction:{chainId:n,from:o,to:r,data:u,value:"0",slippageGuard:K(i.autoSlippage,{chainId:n,venue:r,data:u})}},{provider:"curve",kind:"curve-tx"})}_();J();import{Interface as Ja,getAddress as ep,isAddress as uv}from"ethers";var Kd=Object.freeze({42161:"https://arbitrum-api.gmxinfra.io",43114:"https://avalanche-api.gmxinfra.io"}),Yd=Object.freeze({42161:{name:"arbitrum",api:Kd[42161],exchangeRouter:"0x1C3fa76e6E1088bCE750f23a5BFcffa1efEF6A41",router:"0x7452c558d45f8afC8c83dAe62C3f8A5BE19c71f6",orderVault:"0x31eF83a530Fde1B38EE9A18093A333D8Bbbc40D5",dataStore:"0xFD70de6b91282D8017aA4E741e9Ae325CAb992d8",reader:"0x470fbC46bcC0f16532691Df360A07d8Bf5ee0789",eventEmitter:"0xC8ee91A54287DB53897056e12D9819156D3822Fb",wnt:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",usdc:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831"},43114:{name:"avalanche",api:Kd[43114],exchangeRouter:"0x8f550E53DFe96C055D5Bdb267c21F268fCAF63B2",router:"0x820F5FfC5b525cD4d88Cd91aCf2c28F16530Cc68",orderVault:"0xD3D60D22d415aD43b7e64b510D86A30f19B1B12C",dataStore:"0x2F0b22339414ADeD7D5F06f9D604c7fF5b2fe3f6",reader:"0x62Cb8740E6986B29dC671B2EB596676f60590A5B",eventEmitter:"0xDb17B211c34240B014ab6d61d4A31FA0C0e20c26",wnt:"0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7",usdc:"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"}}),Jd="0x0000000000000000000000000000000000000000",dv=`0x${"0".repeat(64)}`,Xd=Object.freeze({marketSwap:0,limitSwap:1,marketIncrease:2,limitIncrease:3,marketDecrease:4,limitDecrease:5,stopLossDecrease:6,stopIncrease:8}),Qd=Object.freeze({noSwap:0,swapPnlTokenToCollateralToken:1,swapCollateralTokenToPnlToken:2}),Mr=new Ja(["function multicall(bytes[] data) payable returns (bytes[] results)","function sendTokens(address token,address receiver,uint256 amount) payable","function sendWnt(address receiver,uint256 amount) payable","function createOrder(((address receiver,address cancellationReceiver,address callbackContract,address uiFeeReceiver,address market,address initialCollateralToken,address[] swapPath) addresses,(uint256 sizeDeltaUsd,uint256 initialCollateralDeltaAmount,uint256 triggerPrice,uint256 acceptablePrice,uint256 executionFee,uint256 callbackGasLimit,uint256 minOutputAmount,uint256 validFromTime) numbers,uint8 orderType,uint8 decreasePositionSwapType,bool isLong,bool shouldUnwrapNativeToken,bool autoCancel,bytes32 referralCode,bytes32[] dataList) params) payable returns (bytes32)","function cancelOrder(bytes32 key) payable"]),tp=new Ja(["function getAccountPositions(address dataStore,address account,uint256 start,uint256 end) view returns (bytes)","function getAccountOrders(address dataStore,address account,uint256 start,uint256 end) view returns (bytes)","function getOrder(address dataStore,bytes32 key) view returns (bytes)"]),pv=new Ja(["event EventLog1(address msgSender,string eventName,string indexed eventNameHash,bytes32 indexed topic1,((tuple(string key,address value)[] items,tuple(string key,address[] value)[] arrayItems),(tuple(string key,uint256 value)[] items,tuple(string key,uint256[] value)[] arrayItems),(tuple(string key,int256 value)[] items,tuple(string key,int256[] value)[] arrayItems),(tuple(string key,bool value)[] items,tuple(string key,bool[] value)[] arrayItems),(tuple(string key,bytes32 value)[] items,tuple(string key,bytes32[] value)[] arrayItems),(tuple(string key,bytes value)[] items,tuple(string key,bytes[] value)[] arrayItems),(tuple(string key,string value)[] items,tuple(string key,string[] value)[] arrayItems)) eventData)","event EventLog2(address msgSender,string eventName,string indexed eventNameHash,bytes32 indexed topic1,bytes32 indexed topic2,((tuple(string key,address value)[] items,tuple(string key,address[] value)[] arrayItems),(tuple(string key,uint256 value)[] items,tuple(string key,uint256[] value)[] arrayItems),(tuple(string key,int256 value)[] items,tuple(string key,int256[] value)[] arrayItems),(tuple(string key,bool value)[] items,tuple(string key,bool[] value)[] arrayItems),(tuple(string key,bytes32 value)[] items,tuple(string key,bytes32[] value)[] arrayItems),(tuple(string key,bytes value)[] items,tuple(string key,bytes[] value)[] arrayItems),(tuple(string key,string value)[] items,tuple(string key,string[] value)[] arrayItems)) eventData)"]),mv=Object.freeze({OrderCreated:"created",OrderUpdated:"updated",OrderExecuted:"executed",OrderCancelled:"cancelled",OrderFrozen:"frozen"});function _t(e){let t=Number(e??42161),n=Yd[t];if(!n)throw new Error(`gmx: unsupported chainId ${e} (supported: ${Object.keys(Yd).join(", ")})`);return{chainId:t,...n}}function $r(e,t={}){let n=_t(e);return(t.baseUrl||n.api).replace(/\/$/,"")}function de(e,t){if(!uv(e))throw new Error(`${t} must be a valid EVM address`);return ep(e)}function D(e){return ep(e).toLowerCase()}function At(e,t){let n;try{n=BigInt(String(e))}catch{throw new Error(`${t} must be an integer string`)}if(n<=0n)throw new Error(`${t} must be positive`);return n}function Ke(e,t){let n;try{n=BigInt(String(e??"0"))}catch{throw new Error(`${t} must be an integer string`)}if(n<0n)throw new Error(`${t} must be non-negative`);return n}function fv(e,t=50){let n=Number(e??t);if(!Number.isFinite(n)||n<0||n>100)throw new Error("gmx maxSlippageBps must be 0..100");return Math.floor(n)}function hv(e){let t=String(e||"marketIncrease").trim();if(!(t in Xd))throw new Error(`gmx unsupported orderType ${t}`);if(!["marketIncrease","marketDecrease"].includes(t))throw new Error("gmx prepare currently supports marketIncrease and marketDecrease only");return{key:t,code:Xd[t]}}function bv(e){let t=String(e||"noSwap").trim();if(!(t in Qd))throw new Error(`gmx unsupported decreasePositionSwapType ${t}`);return{key:t,code:Qd[t]}}function gv(e,t){return Array.isArray(e)?e:Array.isArray(e?.[t])?e[t]:[]}function yv(e,t){let n=D(t);return e.find(r=>D(r.marketToken||r.market||r.address)===n)||null}function wv(e,t){let n=D(t);return e.find(r=>D(r.tokenAddress||r.address)===n)||null}function vv({ticker:e,isLong:t,typeKey:n,maxSlippageBps:r}){let o=At(e?.minPrice,"gmx minPrice"),a=At(e?.maxPrice,"gmx maxPrice"),i=BigInt(r),s=10000n;return n==="marketIncrease"?(t?a*(s+i)/s:o*(s-i)/s).toString():(t?o*(s-i)/s:a*(s+i)/s).toString()}function xv(e,t){let n=t?e.availableLiquidityLong:e.availableLiquidityShort;try{return BigInt(String(n??"0"))}catch{return 0n}}function Sv(e){let t=String(e||"").toLowerCase();return/^0x[0-9a-f]{64}$/.test(t)?`0x${t.slice(-40)}`:null}function we(e,t,n=r=>r){let o=Array.from(e?.items||e?.[0]||[]).find(a=>String(a?.key??a?.[0]??"")===t);return o?n(o.value??o[1]):null}function kv(e={}){let t=e.addressItems||e[0],n=e.uintItems||e[1],r=e.boolItems||e[3],o=e.bytes32Items||e[4],a=e.stringItems||e[6];return{account:we(t,"account",i=>D(i)),market:we(t,"market",i=>D(i)),initialCollateralToken:we(t,"initialCollateralToken",i=>D(i)),key:we(o,"key",i=>String(i).toLowerCase()),reason:we(a,"reason",i=>String(i)),sizeDeltaUsd:we(n,"sizeDeltaUsd",i=>BigInt(i).toString()),initialCollateralDeltaAmount:we(n,"initialCollateralDeltaAmount",i=>BigInt(i).toString()),executionFee:we(n,"executionFee",i=>BigInt(i).toString()),acceptablePrice:we(n,"acceptablePrice",i=>BigInt(i).toString()),isLong:we(r,"isLong",i=>!!i)}}function Ev(e={},t){if(D(e.address)!==D(t.eventEmitter))return null;let n;try{n=pv.parseLog({topics:e.topics,data:e.data})}catch{return null}let r=String(n?.args?.eventName||""),o=mv[r];if(!o)return null;let a=kv(n.args.eventData||{}),i=(a.key||String(n.args.topic1||"")).toLowerCase(),s=a.account||Sv(n.args.topic2);return{eventName:r,status:o,orderKey:i,account:s?D(s):null,market:a.market,initialCollateralToken:a.initialCollateralToken,sizeDeltaUsd:a.sizeDeltaUsd,initialCollateralDeltaAmount:a.initialCollateralDeltaAmount,executionFee:a.executionFee,acceptablePrice:a.acceptablePrice,isLong:a.isLong,reason:a.reason,logIndex:e.logIndex==null?null:Number.parseInt(String(e.logIndex),16)}}function Zd(e){return{executed:5,cancelled:4,frozen:3,created:2,updated:1}[e]||0}function Iv(e=[],{chainId:t}={}){let n=_t(t);return(Array.isArray(e)?e:[]).map(r=>Ev(r,n)).filter(Boolean).sort((r,o)=>(r.logIndex??0)-(o.logIndex??0))}async function np(e={},t={}){return b(`${$r(e.chainId??42161,t)}/markets`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function Xa(e={},t={}){return b(`${$r(e.chainId??42161,t)}/markets/info`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function rp(e={},t={}){return b(`${$r(e.chainId??42161,t)}/tokens`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function Ur(e={},t={}){return b(`${$r(e.chainId??42161,t)}/prices/tickers`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function op(e={}){let t=await Ur({chainId:42161},e);return{ok:Array.isArray(t)&&t.length>0,tickerSample:Array.isArray(t)?t.length:0}}async function ap(e={},t={}){let n=_t(e.chainId??42161),r=de(e.account||e.owner||e.user,"gmx account"),o=Ke(e.start??0,"gmx start"),a=Ke(e.end??e.limit??20,"gmx end"),i=tp.encodeFunctionData("getAccountPositions",[n.dataStore,r,o,a]),c=await(t.rpcCall||O)(n.chainId,"eth_call",[{to:n.reader,data:i},e.blockTag||"latest"],t);return{provider:"gmx",chainId:n.chainId,reader:D(n.reader),dataStore:D(n.dataStore),account:D(r),raw:c}}async function ip(e={},t={}){let n=_t(e.chainId??42161),r=String(e.key||e.orderKey||"").trim();if(!/^0x[0-9a-fA-F]{64}$/.test(r))throw new Error("gmx order key must be bytes32 hex");let o=tp.encodeFunctionData("getOrder",[n.dataStore,r]),i=await(t.rpcCall||O)(n.chainId,"eth_call",[{to:n.reader,data:o},e.blockTag||"latest"],t);return{provider:"gmx",chainId:n.chainId,reader:D(n.reader),dataStore:D(n.dataStore),key:r,raw:i}}async function sp(e={},t={}){let n=_t(e.chainId??42161),r=t.receipt||await zt({chainId:n.chainId,txHash:e.txHash,expectedTo:e.expectedTo||n.exchangeRouter},t),o=String(e.txHash||r.txHash||"").toLowerCase();if(r.ok!==!0)return{ok:!1,provider:"gmx",chainId:n.chainId,txHash:o,status:r.status||"unknown",reason:r.reason||"receipt not successful",receipt:r};let a=Iv(r.logs||[],{chainId:n.chainId}),i=e.expectedOrderKey||e.orderKey?String(e.expectedOrderKey||e.orderKey).toLowerCase():null,s=i?a.filter(u=>u.orderKey===i):a;if(s.length===0)return{ok:!1,provider:"gmx",chainId:n.chainId,txHash:o,status:"unknown",reason:i?"order key not found in GMX EventEmitter logs":"no GMX order lifecycle event found",events:a,receipt:r};let c=s.reduce((u,d)=>Zd(d.status)>=Zd(u.status)?d:u,s[0]),l=e.expectedAccount||e.account?D(e.expectedAccount||e.account):null;return l&&c.account!==l?{ok:!1,provider:"gmx",chainId:n.chainId,txHash:o,status:c.status,reason:`account mismatch: expected ${l}, got ${c.account||"null"}`,orderKey:c.orderKey,account:c.account,events:a,receipt:r}:{ok:!0,provider:"gmx",chainId:n.chainId,txHash:o,status:c.status,orderKey:c.orderKey,account:c.account,market:c.market,eventEmitter:D(n.eventEmitter),events:s,receipt:r}}async function cp(e={},t={}){let n=_t(e.chainId??42161),r=hv(e.orderType||e.type),o=bv(e.decreasePositionSwapType),a=de(e.account||e.owner||e.from||e.sender||e.receiver,"gmx account"),i=de(e.receiver||a,"gmx receiver"),s=de(e.cancellationReceiver||i,"gmx cancellationReceiver"),c=e.callbackContract?de(e.callbackContract,"gmx callbackContract"):Jd,l=e.uiFeeReceiver?de(e.uiFeeReceiver,"gmx uiFeeReceiver"):Jd,u=de(e.market||e.marketToken,"gmx market"),d=de(e.initialCollateralToken||e.collateralToken||n.usdc,"gmx initialCollateralToken"),p=r.key==="marketIncrease"?At(e.initialCollateralDeltaAmount??e.collateralAmount??e.amountIn,"gmx initialCollateralDeltaAmount"):Ke(e.initialCollateralDeltaAmount??e.collateralAmount??"0","gmx initialCollateralDeltaAmount"),m=At(e.sizeDeltaUsd,"gmx sizeDeltaUsd"),f=At(e.executionFee,"gmx executionFee"),h=BigInt(String(e.maxExecutionFeeWei??"10000000000000000"));if(f>h)throw new Error("gmx executionFee exceeds maxExecutionFeeWei");let g=BigInt(String(e.maxSizeDeltaUsd??"50000000000000000000000000000000000"));if(m>g)throw new Error("gmx sizeDeltaUsd exceeds maxSizeDeltaUsd");let v=fv(e.maxSlippageBps??e.slippageBps,50),k=e.isLong==null?!0:!!e.isLong,[y,w]=await Promise.all([Xa({chainId:n.chainId},t),Ur({chainId:n.chainId},t)]),S=yv(gv(y,"markets"),u);if(!S)throw new Error("gmx market not found in public registry");if(S.isListed===!1)throw new Error("gmx market is not listed");let N=de(S.indexToken,"gmx market indexToken"),C=de(S.longToken,"gmx market longToken"),I=de(S.shortToken,"gmx market shortToken"),R=D(d);if(![D(C),D(I)].includes(R))throw new Error("gmx collateral token must match market longToken or shortToken for this guarded slice");let F=xv(S,k);if(F>0n&&m>F)throw new Error("gmx sizeDeltaUsd exceeds available market liquidity");let H=wv(w,N);if(!H)throw new Error("gmx index ticker not found");let W=e.acceptablePrice?At(e.acceptablePrice,"gmx acceptablePrice").toString():vv({ticker:H,isLong:k,typeKey:r.key,maxSlippageBps:v}),te=(e.swapPath||[]).map(j=>de(j,"gmx swapPath market"));if(te.length>3)throw new Error("gmx swapPath too long for guarded slice");let $t=Ke(e.triggerPrice??"0","gmx triggerPrice"),so=Ke(e.callbackGasLimit??"0","gmx callbackGasLimit"),Ut=Ke(e.minOutputAmount??"0","gmx minOutputAmount"),Ie=Ke(e.validFromTime??"0","gmx validFromTime"),Ae=!!e.shouldUnwrapNativeToken,Dt=e.autoCancel==null?!0:!!e.autoCancel,Ft=String(e.referralCode||dv);if(!/^0x[0-9a-fA-F]{64}$/.test(Ft))throw new Error("gmx referralCode must be bytes32 hex");let tt=Array.isArray(e.dataList)?e.dataList:[];for(let j of tt)if(!/^0x[0-9a-fA-F]{64}$/.test(String(j)))throw new Error("gmx dataList entries must be bytes32 hex");let co={addresses:{receiver:i,cancellationReceiver:s,callbackContract:c,uiFeeReceiver:l,market:u,initialCollateralToken:d,swapPath:te},numbers:{sizeDeltaUsd:m,initialCollateralDeltaAmount:p,triggerPrice:$t,acceptablePrice:BigInt(W),executionFee:f,callbackGasLimit:so,minOutputAmount:Ut,validFromTime:Ie},orderType:r.code,decreasePositionSwapType:o.code,isLong:k,shouldUnwrapNativeToken:Ae,autoCancel:Dt,referralCode:Ft,dataList:tt},A=[];r.key==="marketIncrease"&&p>0n&&A.push(Mr.encodeFunctionData("sendTokens",[d,n.orderVault,p])),A.push(Mr.encodeFunctionData("sendWnt",[n.orderVault,f])),A.push(Mr.encodeFunctionData("createOrder",[co]));let T=Mr.encodeFunctionData("multicall",[A]),$={mode:"gmx-order",provider:"gmx",chainId:n.chainId,chain:n.name,orderType:r.key,orderTypeCode:r.code,decreasePositionSwapType:o.key,account:D(a),receiver:D(i),exchangeRouter:D(n.exchangeRouter),router:D(n.router),orderVault:D(n.orderVault),market:D(u),indexToken:D(N),initialCollateralToken:D(d),initialCollateralDeltaAmount:p.toString(),sizeDeltaUsd:m.toString(),executionFee:f.toString(),acceptablePrice:W,maxSlippageBps:v,isLong:k,asyncExecution:!0,issuedAtMs:Number(t.nowMs??Date.now())};return P({provider:"gmx",chainId:n.chainId,chain:n.name,orderReady:!0,executionReady:!1,asyncExecution:!0,orderType:r.key,market:D(u),requiresApproval:r.key==="marketIncrease"&&p>0n?{token:D(d),spender:D(n.router),amount:p.toString()}:null,gmxGuard:$,transaction:{chainId:n.chainId,from:D(a),to:D(n.exchangeRouter),data:T,value:f.toString(),gmxGuard:$}},{provider:"gmx",kind:"gmx-order"})}_();J();import{Interface as _v,getAddress as Cv,isAddress as Pv,keccak256 as lp,toUtf8Bytes as up}from"ethers";var Tv="https://api.morpho.org/graphql",Dr=new _v(["function asset() view returns (address)","function maxDeposit(address owner) view returns (uint256)","function previewDeposit(uint256 assets) view returns (uint256)","function deposit(uint256 assets,address receiver) returns (uint256)","function maxWithdraw(address owner) view returns (uint256)","function previewWithdraw(uint256 assets) view returns (uint256)","function withdraw(uint256 assets,address receiver,address owner) returns (uint256)"]),Nv=(e={})=>e.baseUrl||process.env.MORPHO_API_URL||Tv;async function Za(e,t,n={}){return b(Nv(n),{method:"POST",body:{query:e,variables:t},fetchImpl:n.fetchImpl,timeoutMs:n.timeoutMs??2e4})}var Rv="query Markets($first: Int, $where: MarketFilters) { markets(first: $first, where: $where) { items { marketId lltv listed loanAsset { address symbol decimals } collateralAsset { address symbol decimals } state { supplyAssetsUsd borrowAssetsUsd } } } }",Ov="query Vaults($first: Int, $where: VaultFilters) { vaults(first: $first, where: $where) { items { address name symbol listed asset { address symbol decimals } state { totalAssets totalAssetsUsd apy } } } }";function Sn(e,t){let n=String(e||"").trim();if(!Pv(n))throw new Error(`morpho: ${t} must be an address`);return Cv(n).toLowerCase()}function Lv(e,t="amount"){try{let n=BigInt(String(e));if(n<=0n)throw new Error("nonpositive");return n.toString()}catch{throw new Error(`morpho: ${t} must be a positive integer string`)}}function Qa(e){return Array.isArray(e)?`[${e.map(Qa).join(",")}]`:e&&typeof e=="object"?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${Qa(e[t])}`).join(",")}}`:JSON.stringify(e)}async function kn(e,t,n,r,o={}){let a=Dr.encodeFunctionData(n,r),s=await(o.rpcCall||O)(Number(e),"eth_call",[{to:t,data:a},"latest"],o);return Dr.decodeFunctionResult(n,s)}function Bv(e,t){let n=t.toLowerCase();return(e||[]).find(r=>String(r?.address||"").toLowerCase()===n)||null}async function dp(e={},t={}){let n=Math.min(100,Math.max(1,Number(e.first||20))),r=(e.chainIds||[e.chainId||1]).map(Number);return Za(Rv,{first:n,chainIds:r,where:{chainId_in:r}},t)}async function ei(e={},t={}){let n=Math.min(100,Math.max(1,Number(e.first||20))),r=(e.chainIds||[e.chainId||1]).map(Number);return Za(Ov,{first:n,chainIds:r,where:{chainId_in:r}},t)}async function pp(e={}){return{ok:(await Za("query { __typename }",{},e))?.data?.__typename==="Query"}}async function mp(e={},t={}){let n=Number(e.chainId??8453),r=String(e.action||"deposit").toLowerCase();if(!["deposit","withdraw"].includes(r))throw new Error("morpho: action must be deposit or withdraw");let o=Sn(e.vault||e.vaultAddress,"vault"),a=Sn(e.owner||e.from||e.sender,"owner"),i=Sn(e.receiver||a,"receiver"),s=Lv(e.amount||e.assets,"amount"),c=Number(e.minTotalAssetsUsd??1e5),l=await ei({chainId:n,first:100},t),u=Bv(l?.data?.vaults?.items,o);if(!u)throw new Error("morpho: vault not found in public Morpho vault registry");if(u.listed===!1)throw new Error("morpho: vault is not listed");let d=Number(u?.state?.totalAssetsUsd??0);if(Number.isFinite(c)&&d<c)throw new Error(`morpho: vault totalAssetsUsd ${d} below minimum ${c}`);let[p]=await kn(n,o,"asset",[],t),m=Sn(p,"vault asset");if((u?.asset?.address?Sn(u.asset.address,"api vault asset"):m)!==m)throw new Error("morpho: API asset and on-chain asset mismatch");let h,g;if(r==="deposit"){let[k]=await kn(n,o,"maxDeposit",[a],t);if(BigInt(s)>BigInt(k.toString()))throw new Error("morpho: amount exceeds maxDeposit");let[y]=await kn(n,o,"previewDeposit",[s],t);if(BigInt(y.toString())<=0n)throw new Error("morpho: previewDeposit returned zero shares");g={minSharesOut:y.toString()},h=Dr.encodeFunctionData("deposit",[s,i])}else{let[k]=await kn(n,o,"maxWithdraw",[a],t);if(BigInt(s)>BigInt(k.toString()))throw new Error("morpho: amount exceeds maxWithdraw");let[y]=await kn(n,o,"previewWithdraw",[s],t);if(BigInt(y.toString())<=0n)throw new Error("morpho: previewWithdraw returned zero shares");g={maxSharesIn:y.toString()},h=Dr.encodeFunctionData("withdraw",[s,i,a])}let v={mode:"erc4626-vault",version:1,provider:"morpho",chainId:n,action:r,vault:o,asset:m,owner:a,receiver:i,amount:s,totalAssetsUsd:d,...g,calldataHash:lp(up(h)),issuedAtMs:Date.now(),expiresAtMs:Date.now()+2e4};return v.guardHash=lp(up(Qa(v))),P({provider:"morpho",protocol:"erc4626-vault",vaultReady:!0,executionReady:!1,signingReady:!1,broadcastReady:!1,requiresUserSignature:!0,chainId:n,action:r,vault:o,asset:m,owner:a,receiver:i,amount:s,vaultInfo:u,vaultGuard:v,requiresApproval:r==="deposit"?{token:m,spender:o,amount:s}:null,transaction:{chainId:n,from:a,to:o,data:h,value:"0x0",madVault:v}},{provider:"morpho",kind:"erc4626-vault"})}_();J();import{Interface as $v,getAddress as ti,isAddress as Uv}from"ethers";var Dv="https://api-v3.balancer.fi/",Fv=(e={})=>e.baseUrl||process.env.BALANCER_API_URL||Dv;async function bp(e,t,n={}){return b(Fv(n),{method:"POST",body:{query:e,variables:t},fetchImpl:n.fetchImpl,timeoutMs:n.timeoutMs??2e4})}var qv="query Pools($first: Int, $where: GqlPoolFilter) { poolGetPools(first: $first, where: $where) { id address chain type protocolVersion dynamicData { totalLiquidity volume24h fees24h } } }",fp=Object.freeze({1:{name:"ethereum",router:"0xAE563E3f8219521950555F5962419C8919758Ea2",weth:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",usdc:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},10:{name:"optimism",router:"0xe2fa4e1d17725e72dcdAfe943Ecf45dF4B9E285b",weth:"0x4200000000000000000000000000000000000006",usdc:"0x0b2c639c533813f4aa9d7837caf62653d097ff85"},8453:{name:"base",router:"0x3f170631ed9821Ca51A59D996aB095162438DC10",weth:"0x4200000000000000000000000000000000000006",usdc:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},42161:{name:"arbitrum",router:"0xEAedc32a51c510d35ebC11088fD5fF2b47aACF2E",weth:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",usdc:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831"},43114:{name:"avalanche",router:"0xF39CA6ede9BF7820a952b52f3c94af526bAB9015",weth:"0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7",usdc:"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"}}),Hv="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",Vv="0x0000000000000000000000000000000000000000",ni=new $v(["function querySwapSingleTokenExactIn(address pool,address tokenIn,address tokenOut,uint256 exactAmountIn,address sender,bytes userData) returns (uint256 amountOut)","function swapSingleTokenExactIn(address pool,address tokenIn,address tokenOut,uint256 exactAmountIn,uint256 minAmountOut,uint256 deadline,bool wethIsEth,bytes userData) payable returns (uint256 amountOut)"]);function gp(e){let t=Number(e??8453),n=fp[t];if(!n)throw new Error(`balancer-v3: unsupported chainId ${e} (supported: ${Object.keys(fp).join(", ")})`);return{chainId:t,...n}}function yp(e){let t=String(e||"").toLowerCase();return!t||t==="eth"||t==="native"||t===Vv||t===Hv.toLowerCase()}function Fr(e,t){if(!Uv(e))throw new Error(`${t} must be a valid EVM address`);return ti(e)}function hp(e,t,n){let r=String(e||"");return yp(r)||/^weth$/i.test(r)?ti(t.weth):/^usdc$/i.test(r)?ti(t.usdc):Fr(r,n)}function Wv(e,t){let n;try{n=BigInt(String(e))}catch{throw new Error(`${t} must be an integer string`)}if(n<=0n)throw new Error(`${t} must be positive`);return n}function wp(e){if(e==null||e==="")return"0x";let t=String(e);if(!/^0x[0-9a-fA-F]*$/.test(t))throw new Error("balancer userData must be hex");return t}async function vp(e={},t={}){let n=Math.min(100,Math.max(1,Number(e.first||20))),r=(e.chains||[e.chain||"ETHEREUM"]).map(o=>String(o).toUpperCase());return bp(qv,{first:n,chains:r,where:{chainIn:r}},t)}async function xp(e={}){return{ok:(await bp("query { __typename }",{},e))?.data?.__typename==="Query"}}async function ri(e={},t={}){let n=gp(e.chainId),r=Fr(e.pool,"balancer pool"),o=e.tokenIn||"WETH",a=hp(o,n,"balancer tokenIn"),i=hp(e.tokenOut||"USDC",n,"balancer tokenOut"),s=Wv(e.amountIn,"balancer amountIn"),c=Fr(e.sender||e.from||e.fromAddress||e.recipient,"balancer sender"),l=ni.encodeFunctionData("querySwapSingleTokenExactIn",[r,a,i,s,c,wp(e.userData)]),d=await(t.rpcCall||O)(n.chainId,"eth_call",[{to:n.router,data:l},e.blockTag||"latest"],t),p=ni.decodeFunctionResult("querySwapSingleTokenExactIn",d),m=BigInt(p[0]);if(m<=0n)throw new Error("balancer quote returned zero output");return q({venue:"balancer",protocolVersion:3,chainId:n.chainId,chain:n.name,router:n.router,pool:r,tokenIn:a,tokenOut:i,amountIn:s.toString(),amountOut:m.toString()},{chainId:n.chainId,venue:n.router,amountOut:m.toString(),liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps})}async function Sp(e={},t={}){let n=gp(e.chainId),r=Fr(e.sender||e.from||e.fromAddress||e.recipient,"balancer sender"),o=e.tokenIn||"WETH",a=yp(o),i=await ri({...e,sender:r},t),s=Math.min(600,Math.max(30,Number(e.deadlineSeconds??300))),c=Number(t.nowSeconds??Math.floor(Date.now()/1e3)),l=BigInt(c+s),u=e.wethIsEth!=null?!!e.wethIsEth:a,d=ni.encodeFunctionData("swapSingleTokenExactIn",[i.pool,i.tokenIn,i.tokenOut,BigInt(i.amountIn),BigInt(i.amountOutMinimum),l,u,wp(e.userData)]);return P({provider:"balancer",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:n.chainId,deadline:l.toString(),quote:i,autoSlippage:i.autoSlippage,requiresApproval:a?null:{token:i.tokenIn,spender:n.router,amount:i.amountIn},transaction:{chainId:n.chainId,from:r,to:n.router,data:d,value:a?i.amountIn:"0",slippageGuard:K(i.autoSlippage,{chainId:n.chainId,venue:n.router,data:d})}},{provider:"balancer",kind:"balancer-tx"})}_();import{getAddress as jv}from"ethers";var Gv="https://api-v2.pendle.finance/core",Kv=Object.freeze({42161:"0x888888888889758F76e7103c6CbF23ABbF58F946",8453:"0x888888888889758F76e7103c6CbF23ABbF58F946"}),Yv="0x0000000000000000000000000000000000000000",Jv="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",kp=(e={})=>(e.baseUrl||process.env.PENDLE_API_URL||Gv).replace(/\/$/,"");function qr(e,t){try{return jv(e)}catch{throw new Error(`${t} must be a valid EVM address`)}}function Ct(e,t){return qr(e,t).toLowerCase()}function Xv(e){let t=String(e||"").toLowerCase();return t==="native"||t==="eth"||t===Jv||t===Yv}function oi(e,t){let n;try{n=BigInt(String(e))}catch{throw new Error(`${t} must be an integer string`)}if(n<=0n)throw new Error(`${t} must be positive`);return n.toString()}function Qv(e){if(!Array.isArray(e)||e.length===0)throw new Error("pendle convert requires inputs[]");return e.map((t,n)=>({token:qr(t.token,`pendle input ${n} token`),amount:oi(t.amount,`pendle input ${n} amount`)}))}function Zv(e){if(!Array.isArray(e)||e.length===0)throw new Error("pendle convert requires outputs[]");return e.map((t,n)=>qr(t,`pendle output ${n} token`))}function ex(e){let t=Kv[Number(e)];if(!t)throw new Error(`Pendle prepare not enabled for chainId ${e}`);return t}function tx(e){let t=e?.routes?.[0]?.outputs?.[0]?.amount||e?.outputs?.[0]?.amount;if(!t)throw new Error("Pendle convert response missing output amount");return oi(t,"pendle output amount")}function nx(e,t){let n=(Array.isArray(e)?e:[]).filter(r=>r?.token&&r?.amount&&!Xv(r.token)).map(r=>({token:Ct(r.token,"pendle approval token"),spender:Ct(t,"pendle approval spender"),amount:oi(r.amount,"pendle approval amount")}));return n.length?n.length===1?n[0]:n:null}async function ai(e={},t={}){let n=Number(e.chainId||42161),r=new URLSearchParams({limit:String(Math.min(100,Math.max(1,Number(e.limit||20)))),skip:String(Math.max(0,Number(e.skip||0)))});return e.isExpired!=null&&r.set("isExpired",String(!!e.isExpired)),b(`${kp(t)}/v1/${n}/markets?${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function Ep(e={}){let t=await ai({chainId:42161,limit:1},e);return{ok:Array.isArray(t?.results),marketSample:t?.results?.length||0}}async function ii(e={},t={}){let n=Number(e.chainId??42161),r=ex(n),o=e.from||e.fromAddress||e.userAddress||e.taker||e.receiver;if(!o)throw new Error("pendlePrepare requires from/receiver");let a=qr(e.receiver||o,"pendle receiver"),i=Qv(e.inputs),s=Zv(e.outputs);if(e.enableAggregator===!0||Array.isArray(e.aggregators)&&e.aggregators.length)throw new Error("Pendle aggregator paths are disabled by policy; use direct convert only");let c=ne({liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps});if(!c.executable)throw new Error(`Pendle: route requires ${c.requiredBps} bps above cap ${c.capBps}`);let l={receiver:a,slippage:c.selectedBps/1e4,enableAggregator:!1,useLimitOrder:!1,inputs:i,outputs:s,...e.redeemRewards!=null?{redeemRewards:!!e.redeemRewards}:{},...e.needScale!=null?{needScale:!!e.needScale}:{},...e.additionalData?{additionalData:String(e.additionalData)}:{}},u=await b(`${kp(t)}/v3/sdk/${n}/convert`,{method:"POST",body:l,fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3}),p=u?.routes?.[0]?.tx;if(!p?.to||!p?.data)throw new Error("Pendle convert returned no executable tx");if(Ct(p.to,"pendle tx target")!==Ct(r,"pendle router"))throw new Error("Pendle convert returned unexpected router target");if(p.from&&Ct(p.from,"pendle tx sender")!==Ct(o,"pendle sender"))throw new Error("Pendle convert transaction sender mismatch");let m=tx(u),f=q(u,{chainId:n,venue:p.to,amountOut:m,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps});return P({provider:"pendle",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:n,action:u.action||null,quote:f,autoSlippage:f.autoSlippage,requiresApproval:nx(u.requiredApprovals,p.to),transaction:{chainId:n,from:p.from||o,to:p.to,data:p.data,value:p.value??"0x0",slippageGuard:K(f.autoSlippage,{chainId:n,venue:p.to,data:p.data})}},{provider:"pendle",kind:"pendle-swap"})}async function Ip(e={},t={}){let n=await ii(e,t),{transaction:r,...o}=n;return o}_();import{isAddress as ox}from"ethers";var ax="https://api.odos.xyz",si=(e={})=>(e.baseUrl||process.env.ODOS_API_URL||ax).replace(/\/$/,"");async function ci(e={}){return b(`${si(e)}/info/chains`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs})}function ix(e={}){let t=Number(e.chainId);if(!Number.isInteger(t))throw new Error("odos: chainId required");if(!Array.isArray(e.inputTokens)||e.inputTokens.length<1)throw new Error("odos: inputTokens[] required");if(!Array.isArray(e.outputTokens)||e.outputTokens.length!==1)throw new Error("odos: agentic execution currently requires exactly one output token");if(!ox(String(e.userAddr||"")))throw new Error("odos: valid userAddr required");return t}async function Ap(e={},t={}){let n=ix(e),r=ne({liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps});if(!r.executable)throw new Error(`odos: route requires ${r.requiredBps} bps above cap ${r.capBps}`);let o={chainId:n,inputTokens:e.inputTokens,outputTokens:e.outputTokens,userAddr:e.userAddr,slippageLimitPercent:r.selectedBps/100,disableRFQs:e.disableRFQs??!0,compact:e.compact??!0,simple:e.simple??!1},a=await b(`${si(t)}/sor/quote/v3`,{method:"POST",body:o,fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3}),i=a?.outAmounts?.[0];if(!a?.pathId||!i)throw new Error("odos: quote missing pathId or outAmounts[0]");return{chainId:n,selected:r,quote:a,amountOut:i}}async function _p(e={},t={}){let{chainId:n,quote:r,amountOut:o}=await Ap(e,t);return{...q(r,{chainId:n,venue:"odos-quote",amountOut:o,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps}),executionReady:!1,executionBlocker:"call prepare to assemble and simulate the path"}}async function Cp(e={},t={}){let{chainId:n,quote:r,amountOut:o}=await Ap(e,t),a=await b(`${si(t)}/sor/assemble`,{method:"POST",body:{userAddr:e.userAddr,pathId:r.pathId,simulate:!0,...e.receiver?{receiver:e.receiver}:{}},fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??3e4}),i=a?.transaction;if(!i?.to||!i?.data)throw new Error("odos: assemble returned no executable transaction");if(Number(i.chainId??n)!==n)throw new Error("odos: transaction chain mismatch");if(i.from&&String(i.from).toLowerCase()!==String(e.userAddr).toLowerCase())throw new Error("odos: transaction sender mismatch");if(a?.simulation?.isSuccess!==!0)throw new Error(`odos: assembled transaction simulation failed: ${a?.simulation?.simulationError||"unknown"}`);let s=q(r,{chainId:n,venue:i.to,amountOut:o,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps}),c=a?.simulation?.amountsOut?.[0];if(c!=null&&BigInt(c)<BigInt(s.amountOutMinimum))throw new Error("odos: simulation output is below the bounded automatic floor");let l="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",u="0x0000000000000000000000000000000000000000",d=e.inputTokens.filter(p=>![l,u].includes(String(p.tokenAddress).toLowerCase())).map(p=>({token:p.tokenAddress,spender:i.to,amount:String(p.amount)}));return P({provider:"odos",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:n,quote:s,simulation:a.simulation,requiresApproval:d,autoSlippage:s.autoSlippage,transaction:{chainId:n,from:i.from||e.userAddr,to:i.to,data:i.data,value:i.value??"0x0",...i.gas!=null?{gasLimit:i.gas}:{},...i.nonce!=null?{nonce:i.nonce}:{},slippageGuard:K(s.autoSlippage,{chainId:n,venue:i.to,data:i.data})}},{provider:"odos",kind:"odos-tx"})}async function Pp(e={}){let t=await ci(e);return{ok:Array.isArray(t?.chains)&&t.chains.length>0,chainCount:t?.chains?.length||0}}_();var Tp=/[\u200B-\u200F\u202A-\u202E\u2060-\u2064\uFEFF]/g,cx=/[<>&`*_~[\]()|\\]/g,lx=/[\u0000-\u001F\u007F]/g;function li(e,{max:t=32,fallback:n=""}={}){return e==null?n:String(e).normalize("NFKC").replace(Tp,"").replace(lx,"").replace(cx,"").replace(/\s+/g," ").trim().slice(0,t).trim()||n}function ui(e){if(e==null)return!1;let t=String(e);return Tp.test(t)?!0:/[\u0400-\u04FF\u0370-\u03FF]/.test(t)&&/[A-Za-z]/.test(t)}var Np=Object.freeze({1:"https://eth.blockscout.com",10:"https://explorer.optimism.io",137:"https://polygon.blockscout.com",324:"https://zksync.blockscout.com",8453:"https://base.blockscout.com",42161:"https://arbitrum.blockscout.com",534352:"https://scrollscan.com"});function Hr(e,t={}){let n=Number(e),r=t.baseUrl||Np[n];if(!r)throw new Error(`Blockscout not configured for chainId ${n}`);return r.replace(/\/$/,"")}function Rp(e){return!!Np[Number(e)]}async function di(e={},t={}){return b(`${Hr(e.chainId||1,t)}/api/v2/stats`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function Op(e={},t={}){if(!e.address)throw new Error("address required");return b(`${Hr(e.chainId||1,t)}/api/v2/addresses/${encodeURIComponent(e.address)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function Lp(e={},t={}){if(!e.address&&!e.tokenAddress)throw new Error("token address required");return b(`${Hr(e.chainId||1,t)}/api/v2/tokens/${encodeURIComponent(e.address||e.tokenAddress)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function Bp(e={},t={}){if(!e.address)throw new Error("address required");let n=Number(e.chainId||1),r=`${Hr(n,t)}/api/v2/addresses/${encodeURIComponent(e.address)}/token-balances`,o=await b(r,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??18e3,headers:{accept:"application/json","user-agent":"OraclePortfolio/1.0"}});return Array.isArray(o)?o:[]}function Mp(e=[],{fungibleOnly:t=!0}={}){let n=[];for(let r of e){if(!r||typeof r!="object")continue;let o=r.token&&typeof r.token=="object"?r.token:{},a=String(o.type||r.token_type||"").toUpperCase();if(t&&a&&!a.includes("ERC-20")&&a!=="ERC20")continue;let i=o.address_hash||o.address||r.token_address||r.tokenAddress||null;if(!i||typeof i!="string")continue;let s=String(r.value??r.balance??"0").replace(/^0x/i,"");if(!/^\d+$/.test(s)||s==="0")continue;let c=o.decimals??r.decimals;typeof c=="string"&&/^\d+$/.test(c)&&(c=Number(c)),(typeof c!="number"||!Number.isInteger(c)||c<0||c>36)&&(c=18);let l=li(o.symbol||o.name,{max:32,fallback:"TOKEN"}),u=li(o.name,{max:80,fallback:""})||null;n.push({address:i.toLowerCase().startsWith("0x")?i:`0x${i}`,symbol:l,name:u,decimals:c,amountRaw:s,tokenType:a||"ERC-20",source:"blockscout",verification:"indexer-reported",displaySuspicious:ui(o.symbol)||ui(o.name)||void 0})}return n}async function $p(e={}){let t=await di({chainId:8453},e);return{ok:t?.total_blocks!=null||t?.total_transactions!=null,chainId:8453}}import{getAddress as dx}from"ethers";_();J();var px="TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",Dp=Object.freeze({ETH:"coingecko:ethereum",POL:"coingecko:polygon-ecosystem-token",BNB:"coingecko:binancecoin",AVAX:"coingecko:avalanche-2",HYPE:"coingecko:hyperliquid",USDT0:"coingecko:tether",SOL:"coingecko:solana",BTC:"coingecko:bitcoin"});function Be(e={},t){return{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs,env:e.env,...e[t]||{}}}function Vr(e,...t){for(let n of t){let r=String(e?.[n]||"").trim();if(r)return r}return null}function Up(e){if(!e)return null;try{return dx(String(e).trim().toLowerCase())}catch{throw new Error("portfolio: EVM address must be a valid 20-byte address")}}function Ye(e={},t=process.env){let n=e.addresses||{},r=Up(n.evm||e.evmAddress||Vr(t,"ORACLE_EVM_ADDRESS","ORACLE_DEFAULT_ADDRESS","MAD_OPERATOR_ADDRESS")),o=n.solana||e.solanaAddress||Vr(t,"ORACLE_SOLANA_ADDRESS"),a=n.bitcoin||e.bitcoinAddress||Vr(t,"ORACLE_BITCOIN_ADDRESS"),i=Up(n.hyperliquid||e.hyperliquidAddress||Vr(t,"ORACLE_HYPERLIQUID_ADDRESS")||r);return{evm:r,solana:o?z(o,"portfolio Solana address"):null,bitcoin:a?xe(a,"portfolio Bitcoin address"):null,hyperliquid:i}}function En(e,t){let n=BigInt(String(e||"0")),r=Number(t);if(!Number.isInteger(r)||r<0||r>36)throw new Error("portfolio: decimals must be an integer from 0 to 36");if(r===0)return n.toString();let o=n<0n,a=o?-n:n,i=10n**BigInt(r),s=a/i,c=String(a%i).padStart(r,"0").replace(/0+$/,"");return`${o?"-":""}${s}${c?`.${c}`:""}`}function Pt(e){let t=Number(e);return Number.isFinite(t)?t:null}function Wr(e){return Number.isFinite(e)?Number(e.toFixed(2)):null}function Me(e){let t=Number(e);return Number.isFinite(t)&&t!==0}function Fp(e,t){let n=Dp[t],r=n?e?.coins?.[n]:null,o=Number(r?.price);return{key:n||null,priceUsd:Number.isFinite(o)?o:null,timestamp:r?.timestamp??null,confidence:r?.confidence??null}}function mx(e){let t=new Map;for(let n of e)if(n?.ok)for(let r of n.data?.accounts||[]){let o=BigInt(String(r.amount||"0"));if(o===0n||!r.mint)continue;let a=`${r.mint}:${r.decimals??"unknown"}`,i=t.get(a)||{mint:r.mint,amountRaw:0n,decimals:r.decimals??null,programs:new Set,accounts:0};i.amountRaw+=o,i.accounts+=1,n.program&&i.programs.add(n.program),t.set(a,i)}return[...t.values()].map(n=>{let r=n.amountRaw.toString(),o=n.decimals==null?null:En(r,n.decimals),a=n.decimals===0&&n.amountRaw===1n;return{mint:n.mint,amountRaw:r,amount:o,decimals:n.decimals,tokenPrograms:[...n.programs],accountCount:n.accounts,verification:"unverified",classification:a?"collectible-candidate":"fungible-or-unclassified",priceUsd:null,usdValue:null}})}function pi(e,t){return{family:e,status:"unsupported",reason:t}}function mi(e,t){if(!e||e.status!=="ok")return e;let n=Fp(t,e.symbol),r=Pt(e.amount),o=r!=null&&n.priceUsd!=null?Wr(r*n.priceUsd):null;return{...e,price:n,usdValue:o}}async function qp(e={}){let t=Ye({},e.env||process.env);return{ok:!0,provider:"portfolio",readOnly:!0,configuredFamilies:Object.entries(t).filter(([,n])=>!!n).map(([n])=>n)}}async function zr(e={},t={}){let n=new Date().toISOString(),r=Ye(e,t.env||process.env),o=e.includePrices!==!1,a=e.includeTokens!==!1,i=e.includeCollectibles!==!1,s=new Map(it.map(A=>[A.chainId,A])),c=Array.isArray(e.evmChainIds)&&e.evmChainIds.length?[...new Set(e.evmChainIds.map(Number))]:[...s.keys()],l=[...new Set(Object.values(Dp))],u=o?X(()=>Ve(l,Be(t,"prices"))):Promise.resolve({ok:!1,ms:0,error:"price lookup disabled"}),d=nt(c,e.concurrency||5,async A=>{let T=s.get(A);if(!T)return{family:"evm",chainId:A,name:null,address:r.evm,status:"unsupported",error:"chainId is not in Oracle's configured EVM registry"};if(!r.evm)return{family:"evm",chainId:A,name:T.name,address:null,status:"not-configured",error:"set ORACLE_EVM_ADDRESS or pass addresses.evm"};let $={...Be(t,"evm"),rpcUrl:e.rpcUrls?.[A]||t.evm?.rpcUrls?.[A]},j=await X(()=>Fe(A,r.evm,$));if(!j.ok)return{family:"evm",chainId:A,name:T.name,address:r.evm,status:"unavailable",latencyMs:j.ms,error:j.error};let Q=T.nativeCurrency?.decimals??18,oe=T.nativeCurrency?.symbol||"NATIVE",L=j.data.balanceWei,Y={status:a?"unavailable":"not-requested",assets:[],reason:a?"EVM JSON-RPC cannot enumerate wallet tokens without an address indexer":"token discovery disabled"};if(a&&Rp(A)){let De=await X(()=>Bp({chainId:A,address:r.evm},{...Be(t,"blockscout"),timeoutMs:t.timeoutMs??18e3}));De.ok?Y={status:"ok",assets:Mp(De.data,{fungibleOnly:!0}).map(qt=>{let Ht=En(qt.amountRaw,qt.decimals);return{...qt,amount:Ht,priceUsd:null,usdValue:null}}),reason:null,source:"blockscout",latencyMs:De.ms}:Y={status:"unavailable",assets:[],reason:De.error||"blockscout token-balances failed",source:"blockscout",latencyMs:De.ms}}return{family:"evm",chainId:A,name:T.name,address:r.evm,status:"ok",latencyMs:j.ms,native:{status:"ok",symbol:oe,amountRaw:L,decimals:Q,amount:En(L,Q)},fungibleTokens:Y,collectibles:{status:i?"unavailable":"not-requested",assets:[],reason:i?"EVM JSON-RPC cannot enumerate wallet NFTs without an address indexer":"collectible discovery disabled"},source:Y.source==="blockscout"?"evm-rpc+blockscout":"evm-rpc"}}),p=(async()=>{if(!r.solana)return{family:"solana",name:"Solana Mainnet",address:null,status:"not-configured",error:"set ORACLE_SOLANA_ADDRESS or pass addresses.solana"};let A=Be(t,"solana"),T=await X(()=>Jn({address:r.solana},A)),$=a||i?await Promise.all([X(()=>en({owner:r.solana,programId:Ho},A)).then(Y=>({...Y,program:"spl-token"})),X(()=>en({owner:r.solana,programId:px},A)).then(Y=>({...Y,program:"token-2022"}))]):[],j=mx($),Q=j.filter(Y=>Y.classification==="collectible-candidate"),oe=j.filter(Y=>Y.classification!=="collectible-candidate"),L=$.filter(Y=>!Y.ok).map(Y=>Y.error);return{family:"solana",name:"Solana Mainnet",address:r.solana,status:T.ok||$.some(Y=>Y.ok)?"ok":"unavailable",native:T.ok?{status:"ok",symbol:"SOL",amountRaw:T.data.lamports,decimals:9,amount:En(T.data.lamports,9),slot:T.data.slot}:{status:"unavailable",symbol:"SOL",error:T.error},fungibleTokens:{status:a?L.length===$.length?"unavailable":L.length?"partial":"ok":"not-requested",assets:a?oe:[],errors:L,note:"SPL accounts are unverified until a metadata/indexer source confirms symbol and spam status"},collectibles:{status:i?L.length===$.length?"unavailable":"partial":"not-requested",assets:i?Q:[],errors:L,note:"decimals=0 and amount=1 is only a collectible candidate, not verified NFT metadata"},source:"solana-rpc"}})(),m=(async()=>{if(!r.bitcoin)return{family:"bitcoin",name:"Bitcoin Mainnet",address:null,status:"not-configured",error:"set ORACLE_BITCOIN_ADDRESS or pass addresses.bitcoin"};let A=Be(t,"bitcoin"),T=Be(t,"bitcoinMeta"),[$,j,Q]=await Promise.all([X(()=>Qn({address:r.bitcoin},A)),a?X(()=>er({address:r.bitcoin},T)):Promise.resolve({ok:!1,ms:0,error:"token discovery disabled"}),i?X(()=>ut({address:r.bitcoin},T)):Promise.resolve({ok:!1,ms:0,error:"collectible discovery disabled"})]),oe=j.ok?j.data:null,L=Q.ok?Q.data:null;return{family:"bitcoin",name:"Bitcoin Mainnet",address:r.bitcoin,status:$.ok||oe?.ok||L?.ok?"ok":"unavailable",native:$.ok?{status:"ok",symbol:"BTC",amountRaw:$.data.balanceSats,decimals:8,amount:En($.data.balanceSats,8)}:{status:"unavailable",symbol:"BTC",error:$.error},fungibleTokens:{status:a?oe?.ok?"ok":"unavailable":"not-requested",assets:oe?.balances||[],error:oe?.ok?null:oe?.error||j.error,verification:"indexer-reported"},collectibles:{status:i?L?.ok?"ok":"unavailable":"not-requested",assets:L?.inscriptions||[],error:L?.ok?null:L?.error||Q.error,unknownNotEmpty:!!L?.unknownNotEmpty,verification:"indexer-reported"},source:"bitcoin-esplora+bitcoin-meta"}})(),f=(async()=>{if(!r.hyperliquid)return{family:"hyperliquid",name:"Hyperliquid HyperCore",address:null,status:"not-configured",error:"set ORACLE_HYPERLIQUID_ADDRESS or pass addresses.hyperliquid"};let A=Be(t,"hyperliquid"),[T,$,j]=await Promise.all([X(()=>zn(r.hyperliquid,A)),X(()=>Gn(r.hyperliquid,A)),X(()=>ve(A))]),Q=(T.ok&&Array.isArray(T.data?.balances)?T.data.balances:[]).filter(L=>Me(L.total)||Me(L.hold)).map(L=>({coin:L.coin||null,total:String(L.total??"0"),hold:String(L.hold??"0"),priceUsd:null,usdValue:null})),oe=($.ok&&Array.isArray($.data?.assetPositions)?$.data.assetPositions:[]).map(L=>L.position||L).filter(L=>Me(L.szi)).map(L=>({coin:L.coin||null,size:String(L.szi??"0"),entryPrice:L.entryPx??null,positionValueUsd:L.positionValue??null,unrealizedPnlUsd:L.unrealizedPnl??null,liquidationPrice:L.liquidationPx??null}));return{family:"hyperliquid",name:"Hyperliquid HyperCore",address:r.hyperliquid,status:T.ok||$.ok?"ok":"unavailable",spot:{status:T.ok?"ok":"unavailable",balances:Q,error:T.ok?null:T.error},perps:{status:$.ok?"ok":"unavailable",accountValueUsd:$.data?.marginSummary?.accountValue??null,withdrawableUsd:$.data?.withdrawable??null,positions:oe,error:$.ok?null:$.error},mids:j.ok?j.data:{},source:"hyperliquid-info"}})(),[h,g,v,k,y]=await Promise.all([d,p,m,f,u]),w=y.ok?y.data:null,S=Object.freeze({1:"ethereum",10:"optimism",56:"bsc",137:"polygon",8453:"base",42161:"arbitrum",43114:"avax",81457:"blast",534352:"scroll",59144:"linea",324:"era"}),N=[];for(let A of h){if(A.family!=="evm"||A.fungibleTokens?.status!=="ok")continue;let T=S[A.chainId];if(T)for(let $ of A.fungibleTokens.assets||[])$.address&&N.push(`${T}:${String($.address).toLowerCase()}`)}let C=null;if(o&&N.length){let A=[...new Set(N)],T=await X(()=>Ve(A,Be(t,"prices")));T.ok&&(C=T.data)}let I=h.map(A=>{let T=A.native?{...A,native:mi(A.native,w)}:A;if(T.fungibleTokens?.status==="ok"&&Array.isArray(T.fungibleTokens.assets)){let $=S[T.chainId],j=T.fungibleTokens.assets.map(Q=>{let oe=String(Q.symbol||"").toUpperCase(),L=null;if(["USDC","USDT","USDT0","DAI","USDBC","USDE","USDCE"].includes(oe)&&(L=1),L==null&&$&&Q.address&&C?.coins){let us=`${$}:${String(Q.address).toLowerCase()}`,qt=C.coins[us],Ht=Number(qt?.price);Number.isFinite(Ht)&&Ht>0&&(L=Ht)}let Y=Pt(Q.amount),De=Y!=null&&L!=null?Wr(Y*L):null;return{...Q,priceUsd:L,usdValue:De}});T={...T,fungibleTokens:{...T.fungibleTokens,assets:j}}}return T});g.native&&(g.native=mi(g.native,w)),v.native&&(v.native=mi(v.native,w));let R=0,F=0,H=0;for(let A of[...I,g,v]){A.native?.status==="ok"&&Me(A.native.amount)&&(A.native.usdValue!=null?(R+=A.native.usdValue,F+=1):H+=1);for(let T of A.fungibleTokens?.assets||[])!Me(T.amount)&&!Me(T.amountRaw)||(T.usdValue!=null?(R+=T.usdValue,F+=1):H+=1)}let W=Fp(w,"HYPE");for(let A of k.spot?.balances||[]){let T=String(A.coin||"").toUpperCase(),$=T==="USDC"||T==="USDT"||T==="USDT0"?1:T==="HYPE"?W.priceUsd||Pt(k.mids?.HYPE):Pt(k.mids?.[A.coin]),j=Pt(A.total);A.priceUsd=$,A.usdValue=j!=null&&$!=null?Wr(j*$):null,Me(A.total)&&(A.usdValue!=null?(R+=A.usdValue,F+=1):H+=1)}let te=Pt(k.perps?.accountValueUsd);te!=null&&te!==0&&(R+=te,F+=1);let $t=[...g.fungibleTokens?.assets||[],...g.collectibles?.assets||[]].filter(A=>Me(A.amount)).length,so=(v.fungibleTokens?.assets||[]).length+(v.collectibles?.assets||[]).length;H+=$t+so;let Ut=[...I,g,v,k],Ie=A=>Ut.filter(T=>T.status===A).length,Ae=[],Dt=I.filter(A=>A.fungibleTokens?.status==="unavailable"),Ft=I.filter(A=>A.fungibleTokens?.status==="ok");Dt.length&&!Ft.length?Ae.push("EVM token discovery is unavailable without a working address indexer; native balances are still live."):Dt.length&&Ae.push(`EVM token discovery partial: Blockscout covered ${Ft.length} chain(s); ${Dt.length} chain(s) still native-only.`),(g.fungibleTokens?.assets?.length||g.collectibles?.assets?.length)&&Ae.push("Solana token accounts are unverified and may include spam; collectible candidates are not confirmed NFTs."),v.collectibles?.unknownNotEmpty&&Ae.push("Bitcoin inscription holdings are unknown, not zero, because no address indexer is configured."),y.ok||Ae.push(`Price provider unavailable: ${y.error}`);let tt=[pi("cosmos","requires a chain-specific bech32 address and LCD/RPC adapter"),pi("sui","Sui balance adapter is not installed"),pi("aptos","Aptos balance adapter is not installed")],co=Ut.some(A=>["unavailable","partial","not-configured"].includes(A.fungibleTokens?.status)||["unavailable","partial","not-configured"].includes(A.collectibles?.status));return{provider:"portfolio",operation:"balances",readOnly:!0,queriedAt:n,addresses:r,coverage:{requestedSurfaces:Ut.length,ok:Ie("ok"),unavailable:Ie("unavailable"),notConfigured:Ie("not-configured"),unsupported:Ie("unsupported")+tt.length,evmChainsRequested:c.length,evmChainsOk:I.filter(A=>A.status==="ok").length},valuation:{knownUsd:Wr(R),label:"known priced value, not a complete portfolio total",pricedItems:F,unpricedNonzeroItems:H,complete:H===0&&!co&&Ie("unavailable")===0&&Ie("not-configured")===0&&tt.length===0,priceSource:o?"DefiLlama":null,priceStatus:y.ok?"ok":"unavailable",priceQueriedAt:n},chains:[...I,g,v,k],unsupportedFamilies:tt,warnings:Ae}}import{constants as Gr}from"node:fs";import{chmod as Ux,mkdir as Dx,open as Fx,readFile as qx}from"node:fs/promises";import{createHash as Hx,randomUUID as Vx}from"node:crypto";import Wx from"node:os";import Nt from"node:path";_();_();var hx=Object.freeze(["i.seadn.io","openseauserdata.com","arweave.net","ipfs.io","nftstorage.link","dweb.link","cloudflare-ipfs.com","ordinals.com","ordinals.g.com","cdn.helius-rpc.com","shdw-drive.genesysgo.net"]),bx=new Set(["image/jpeg","image/png","image/webp"]);function gx(e){let t=String(e||"").toLowerCase();return hx.some(n=>t===n||t.endsWith(`.${n}`))}function yx(e){let t=String(e||"").trim();return t.startsWith("ipfs://")?`https://ipfs.io/ipfs/${t.slice(7).replace(/^ipfs\//,"")}`:t.startsWith("ar://")?`https://arweave.net/${t.slice(5)}`:t}function Hp(e){let t=yx(e),n;try{n=new URL(t)}catch{return null}return n.protocol!=="https:"||n.username||n.password||!gx(n.hostname)?null:n}async function wx(e,t={}){let n=t.fetchImpl||globalThis.fetch;if(typeof n!="function")throw new Error("gallery fetch unavailable");let r=Hp(e);if(!r)throw new Error("image host is not on the raster gallery allowlist");let o=Math.min(Math.max(Number(t.maxImageBytes??15e5),5e4),4e6);for(let a=0;a<=3;a+=1){let i=await X(()=>n(r.toString(),{method:"GET",redirect:"manual",headers:{accept:"image/jpeg,image/png,image/webp"},signal:AbortSignal.timeout(t.timeoutMs??12e3)}));if(!i.ok)throw new Error(i.error);let s=i.data;if(s.status>=300&&s.status<400){let d=s.headers?.get?.("location");if(!d)throw new Error("image redirect missing location");let p=Hp(new URL(d,r).toString());if(!p)throw new Error("image redirect left the host allowlist");r=p;continue}if(!s.ok)throw new Error(`image HTTP ${s.status}`);let c=String(s.headers?.get?.("content-type")||"").split(";",1)[0].toLowerCase();if(!bx.has(c))throw new Error(`unsafe or unsupported image type ${c||"unknown"}`);if(Number(s.headers?.get?.("content-length")||0)>o)throw new Error("image exceeds gallery byte cap");let u=Buffer.from(await s.arrayBuffer());if(!u.length||u.length>o)throw new Error("image exceeds gallery byte cap");return{mimeType:c,data:u.toString("base64"),sourceUrl:r.toString(),bytes:u.length}}throw new Error("too many image redirects")}function fi(e){return String(e??"").replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function vx(e,t){return e.name||e.collection||e.tokenId||`NFT ${t+1}`}async function Vp(e={},t={}){let n=Array.isArray(e.items)?e.items:[];if(!n.length)throw new Error("nft gallery requires inventory items");let r=Math.min(Math.max(Number(e.pageSize??12)||12,1),12),o=Math.max(Number(e.page??1)||1,1),a=Math.max(Math.ceil(n.length/r),1);if(o>a)throw new Error(`nft gallery page ${o} exceeds ${a}`);let i=n.slice((o-1)*r,o*r),s=[],c=0,l=Math.min(Math.max(Number(e.maxTotalBytes??8e6),25e4),12e6);for(let y of i){if(c>=l){s.push({item:y,image:null,error:"gallery page byte cap reached"});continue}try{let w=await wx(y.imageUrl||y.originalImageUrl,{...t,maxImageBytes:Math.min(Number(e.maxImageBytes??15e5),l-c)});c+=w.bytes,s.push({item:y,image:w,error:null})}catch(w){s.push({item:y,image:null,error:String(w?.message||w).slice(0,180)})}}let u=3,d=340,p=400,m=76,f=Math.ceil(i.length/u),h=u*d,g=m+f*p,v=s.map(({item:y,image:w,error:S},N)=>{let C=N%u,I=Math.floor(N/u),R=C*d,F=m+I*p,H=w?`<image x="${R+14}" y="${F+14}" width="312" height="312" preserveAspectRatio="xMidYMid slice" href="data:${w.mimeType};base64,${w.data}"/>`:`<rect x="${R+14}" y="${F+14}" width="312" height="312" rx="14" fill="#151820"/><text x="${R+170}" y="${F+165}" text-anchor="middle" fill="#76808f" font-size="16">image unavailable</text>`,W=fi(vx(y,N).slice(0,34)),te=fi(y.chain||"unknown chain");return`${H}<text x="${R+16}" y="${F+350}" fill="#f3f5f7" font-size="17" font-weight="600">${W}</text><text x="${R+16}" y="${F+376}" fill="#8d98a8" font-size="13">${te}${S?" \xB7 placeholder":""}</text>`}).join(""),k=`<svg xmlns="http://www.w3.org/2000/svg" width="${h}" height="${g}" viewBox="0 0 ${h} ${g}"><rect width="100%" height="100%" fill="#090b10"/><text x="24" y="34" fill="#ffffff" font-size="24" font-weight="700">NFT INVENTORY</text><text x="24" y="58" fill="#8d98a8" font-size="14">page ${o} of ${a} \xB7 ${n.length} assets \xB7 generated ${fi(new Date().toISOString())}</text>${v}</svg>`;return{provider:"nft-portfolio",operation:"gallery",mimeType:"image/svg+xml",dataBase64:Buffer.from(k).toString("base64"),page:o,pageSize:r,totalPages:a,totalItems:n.length,renderedItems:s.filter(y=>y.image).length,placeholders:s.filter(y=>!y.image).map(y=>({assetKey:y.item.assetKey||null,name:y.item.name||null,sourceUrl:y.item.imageUrl||null,error:y.error})),rasterOnly:!0,externalScripts:!1}}var xx=[/\bclaim\b/i,/\breward\b/i,/\bairdrop\b/i,/\bvoucher\b/i,/\bwinner\b/i,/\bfree\s*mint\b/i,/\bactivate\b/i,/\bunlock\b/i,/\bverify\b/i,/\bconnect\s+wallet\b/i],Sx=/(https?:\/\/|www\.|[a-z0-9-]+\.(?:com|net|io|xyz|org|app|finance|gift|claims?|site|link|live|vip|top|cc))/i,kx=/(\$\s?\d|\d[\d,.]*\s*(?:usd|usdc|usdt|eth|weth|btc|sol)\b)/i;function Ex(e={}){let t=[],n=String(e.name||""),r=String(e.description||""),o=`${n} ${r}`;Sx.test(n)&&t.push("url-in-name");let a=xx.filter(l=>l.test(o)).length;a>0&&t.push(`lure-language:${a}`),kx.test(n)&&t.push("value-claim-in-name"),/[\u200B-\u200F\u202A-\u202E\uFEFF]/.test(n)&&t.push("invisible-characters"),e.disabled===!0&&t.push("marketplace-disabled");let i=e.estimatedValueUsd==null&&e.estimatedValueSats==null,s=!Array.isArray(e.traits)||e.traits.length===0;i&&s&&a>0&&t.push("valueless-airdrop-with-lure");let c=t.includes("url-in-name")||t.includes("invisible-characters")||t.includes("valueless-airdrop-with-lure")||t.length>=2;return{spam:c,risk:c?"high":t.length>0?"low":"none",reasons:t}}function Wp(e={}){let t=Ex(e);return{...e,spam:e.spam===!0||t.spam,riskLevel:t.risk,riskReasons:t.reasons.length?t.reasons:void 0}}var Ix=Object.freeze([{chain:"ethereum",chainId:1,family:"evm"},{chain:"optimism",chainId:10,family:"evm"},{chain:"polygon",chainId:137,family:"evm"},{chain:"stablechain",chainId:988,family:"evm"},{chain:"hyperevm",chainId:999,family:"evm"},{chain:"abstract",chainId:2741,family:"evm"},{chain:"robinhood",chainId:4663,family:"evm"},{chain:"base",chainId:8453,family:"evm"},{chain:"arbitrum",chainId:42161,family:"evm"},{chain:"avalanche",chainId:43114,family:"evm"},{chain:"hyperliquid",chainId:null,family:"hyperliquid"}]),Ax=Object.freeze([{family:"evm",chain:"bsc",chainId:56,reason:"OpenSea account inventory does not support BSC"},{family:"cosmos",reason:"requires a chain-specific bech32 address and NFT indexer"},{family:"sui",reason:"owner inventory adapter not installed"},{family:"aptos",reason:"owner inventory adapter not installed"}]);function Je(e={},t){return{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs,env:e.env,allowDiskCredentials:e.allowDiskCredentials,allowAmbientCredentials:e.allowAmbientCredentials,...e[t]||{}}}async function In(e,t){let n=await X(t);return n.ok?{ok:!0,data:n.data}:{ok:!1,error:`${e}: ${n.error}`.slice(0,300)}}function _x(e){if(Array.isArray(e))return e;for(let t of["items","results","ordinals","inscriptions","data"])if(Array.isArray(e?.[t]))return e[t];return[]}function Cx(e={},t){let n=e.inscription_id||e.inscriptionId||e.id||e.inscription||null;return{chain:"bitcoin",family:"bitcoin",owner:t,contract:null,tokenId:n==null?null:String(n),tokenStandard:"ordinal",collection:e.collection_slug||e.collectionSlug||e.collection?.slug||e.collection||null,name:e.name||e.meta?.name||(n?`Inscription ${n}`:"Bitcoin inscription"),description:e.description||e.meta?.description||null,imageUrl:e.image_url||e.imageUrl||e.content_url||e.contentUrl||e.thumbnail||null,originalImageUrl:e.content_url||e.contentUrl||e.image_url||e.imageUrl||null,animationUrl:null,metadataUrl:e.metadata_url||e.metadataUrl||null,marketplaceUrl:e.marketplace_url||e.marketplaceUrl||null,estimatedValueUsd:e.estimated_value_usd!=null&&Number.isFinite(Number(e.estimated_value_usd))?Number(e.estimated_value_usd):null,estimatedValueSats:(e.floor_price_sats??e.price_sats)!=null&&Number.isFinite(Number(e.floor_price_sats??e.price_sats))?Number(e.floor_price_sats??e.price_sats):null,spam:!1,disabled:!1,nsfw:!1,listed:e.listed===!0||e.is_listed===!0,listingId:e.listing_id||e.listingId||null,traits:Array.isArray(e.traits)?e.traits:[],updatedAt:e.updated_at||e.updatedAt||null,acquisitionCost:null,itemPnl:{status:"unavailable",reason:"Satflow wallet inventory does not expose trustworthy acquisition cost"},listingAdapter:"satflow",source:"satflow-wallet-contents"}}function Px(e,t){return{chain:"bitcoin",family:"bitcoin",owner:t,contract:null,tokenId:String(e),tokenStandard:"ordinal",collection:null,name:`Inscription ${e}`,description:null,imageUrl:null,originalImageUrl:null,animationUrl:null,metadataUrl:null,marketplaceUrl:null,estimatedValueUsd:null,spam:!1,disabled:!1,nsfw:!1,traits:[],updatedAt:null,acquisitionCost:null,itemPnl:{status:"unavailable",reason:"address indexer returned no acquisition or valuation data"},listingAdapter:"satflow",source:"bitcoin-meta-address-indexer"}}function Gp(e={}){return[e.chain||"unknown",e.contract||"native",e.tokenId||"unknown"].join(":").toLowerCase()}function Tx(e){let t=new Map;if(Array.isArray(e)){for(let n of e)n?.assetKey&&t.set(String(n.assetKey).toLowerCase(),n);return t}if(e&&typeof e=="object")for(let[n,r]of Object.entries(e))t.set(n.toLowerCase(),r);return t}function Nx(e,t){let n=Gp(e),r=t.get(n),o=e.estimatedValueUsd==null?null:Number(e.estimatedValueUsd);if(!r)return{...e,assetKey:n};let a=Number(r.costUsd),i=Number(r.feesUsd??0);if(!Number.isFinite(a)||a<0||!Number.isFinite(i)||i<0)return{...e,assetKey:n,acquisitionCost:null,itemPnl:{status:"unavailable",reason:"invalid user-supplied cost basis"}};let s=Math.round((a+i)*100)/100;return Number.isFinite(o)?{...e,assetKey:n,acquisitionCost:{costUsd:a,feesUsd:i,totalCostUsd:s,acquiredAt:r.acquiredAt||null,source:r.source||"user-supplied"},itemPnl:{status:"estimated",methodology:"provider estimated current value minus supplied USD acquisition cost and fees",unrealizedUsd:Math.round((o-s)*100)/100,currentValueUsd:o,totalCostUsd:s,realizedUsd:null}}:{...e,assetKey:n,acquisitionCost:{costUsd:a,feesUsd:i,totalCostUsd:s,acquiredAt:r.acquiredAt||null,source:r.source||"user-supplied"},itemPnl:{status:"unavailable",reason:"current NFT valuation is unavailable"}}}function Rx(e){let t=new Map;for(let n of e){let r=Gp(n);t.has(r)||t.set(r,n)}return[...t.values()]}function Ox(e,t){let n=e.filter(a=>a.itemPnl?.status==="estimated"),r=e.length-n.length,o=Math.round(n.reduce((a,i)=>a+Number(i.itemPnl.unrealizedUsd||0),0)*100)/100;return{nftItemPnl:{status:r===0&&e.length?"estimated-complete-for-held-items":n.length?"partial":"unavailable",methodology:"Only items with explicit acquisition cost and provider estimated current value are included",knownUnrealizedUsd:o,knownItems:n.length,unknownItems:r,realizedUsd:null,warning:"Transfers, gifts, airdrops, mints, bridges, gas, royalties, and off-market sales can make cost basis unavailable or incomplete."},providerAccountPnl:t}}async function Kp(){return{ok:!0,provider:"nft-portfolio",readOnly:!0,marketplaces:["opensea","magiceden-sol","satflow"],listingExecution:"prepare-only"}}async function Tt(e={},t={}){let n=new Date().toISOString(),r=Ye(e,t.env||process.env),o=Array.isArray(e.chains)&&e.chains.length?new Set(e.chains.map(w=>String(w).toLowerCase())):null,a=Ix.filter(w=>!o||o.has(w.chain)),i=[],s=[],c=Je(t,"opensea"),l=r.evm?a.filter(w=>w.family!=="solana"):[],u=await nt(l,4,async w=>({row:w,result:await In(`opensea-${w.chain}`,()=>ln({chain:w.chain,address:r.evm,pageSize:e.pageSize,maxPages:e.maxPages},c),t.timeoutMs??35e3)}));for(let{row:w,result:S}of u)if(S.ok){let N=S.data.nfts.map(C=>({...C,family:w.family,chainId:w.chainId,listingAdapter:"opensea",source:"opensea-account-inventory"}));s.push(...N),i.push({family:w.family,chain:w.chain,chainId:w.chainId,status:S.data.complete?"ok":"partial",count:N.length,complete:S.data.complete,next:S.data.next,source:"opensea"})}else i.push({family:w.family,chain:w.chain,chainId:w.chainId,status:"unavailable",error:S.error,source:"opensea"});if(!r.evm)for(let w of a.filter(S=>S.family!=="solana"))i.push({family:w.family,chain:w.chain,chainId:w.chainId,status:"not-configured",reason:"EVM address missing"});if(r.solana&&(!o||o.has("solana"))){let w=await In("opensea-solana",()=>ln({chain:"solana",address:r.solana,pageSize:e.pageSize,maxPages:e.maxPages},c),t.timeoutMs??35e3);if(w.ok){let S=w.data.nfts.map(N=>({...N,family:"solana",chainId:null,listingAdapter:null,source:"opensea-account-inventory"}));s.push(...S),i.push({family:"solana",chain:"solana",status:w.data.complete?"ok":"partial",count:S.length,complete:w.data.complete,next:w.data.next,source:"opensea"})}else i.push({family:"solana",chain:"solana",status:"unavailable",error:w.error,source:"opensea"})}else(!o||o.has("solana"))&&i.push({family:"solana",chain:"solana",status:"not-configured",reason:"Solana address missing"});if(r.bitcoin&&(!o||o.has("bitcoin"))){let w=await In("satflow-wallet-contents",()=>nr({address:r.bitcoin,type:"ordinals",limit:e.bitcoinLimit??100,offset:0},Je(t,"satflow")),t.timeoutMs??35e3);if(w.ok){let S=_x(w.data.contents).map(C=>Cx(C,r.bitcoin));s.push(...S);let N=S.length<Number(e.bitcoinLimit??100);i.push({family:"bitcoin",chain:"bitcoin",status:N?"ok":"partial",count:S.length,complete:N,source:"satflow"})}else{let S=await In("bitcoin-meta-inscriptions",()=>ut({address:r.bitcoin},Je(t,"bitcoinMeta")),t.timeoutMs??35e3),N=S.ok&&S.data?.ok&&Array.isArray(S.data.inscriptions)?S.data.inscriptions:[];s.push(...N.map(C=>Px(C,r.bitcoin))),i.push({family:"bitcoin",chain:"bitcoin",status:N.length?"partial":"unavailable",count:N.length,complete:!1,source:N.length?"bitcoin-meta":"satflow",error:N.length?"Satflow unavailable; fallback has IDs only":w.error})}}else(!o||o.has("bitcoin"))&&i.push({family:"bitcoin",chain:"bitcoin",status:"not-configured",reason:"Bitcoin address missing"});let d=[];if(e.includePnl!==!1)for(let w of[...new Set([r.evm,r.solana].filter(Boolean))]){let S=await In(`opensea-pnl-${w}`,()=>hr({address:w},c),t.timeoutMs??35e3);d.push(S.ok?{status:"ok",...S.data}:{status:"unavailable",address:w,source:"opensea-indexed-account-pnl",error:S.error})}let p=Tx(e.costBasis),m=Rx(s).map(w=>Nx(w,p)).map(w=>Wp(w)),f=m.filter(w=>!w.spam),h=m.filter(w=>w.spam),g=f.filter(w=>w.estimatedValueUsd!=null&&Number.isFinite(Number(w.estimatedValueUsd))),v=Math.round(g.reduce((w,S)=>w+Number(S.estimatedValueUsd),0)*100)/100,k=f.length-g.length,y=i.filter(w=>w.status!=="ok"||w.complete===!1);return{provider:"nft-portfolio",operation:"inventory",readOnly:!0,generatedAt:n,addresses:r,coverage:i,unsupported:Ax,inventory:{count:m.length,visibleCount:f.length,flaggedCount:h.length,items:m,visibleItems:f,flaggedItems:h},valuation:{estimatedCurrentValueUsd:v,valuedItems:g.length,unvaluedItems:k,complete:k===0&&y.length===0,methodology:"Sum of provider estimated_value_usd for non-flagged items. It is not an executable bid."},pnl:Ox(f,d),listingCoverage:{opensea:"EVM listing actions available with OPENSEA_API_KEY, explicit price/currency/expiry, and user confirmation",satflow:"Bitcoin unsigned listing PSBT available with SATFLOW_API_KEY, explicit price/expiry, and user confirmation",solana:"Magic Eden unsigned list transaction available with MAGICEDEN_API_KEY, explicit SOL price/expiry, and user confirmation",unsupported:"Sui, Aptos, Cosmos, BSC, and unknown marketplaces fail closed"},traitSniperCoverage:{opensea:"Evaluates reveal/trait-floor mispricing only with recent trait sales and volume evidence. Buy intents require local vault signing.",execution:"prepare-only on hosted surfaces; local vault required for purchase"},metadataSafety:{imagesAreUntrusted:!0,animationAndHtmlNotRendered:!0,galleryRasterOnly:!0,missingImagesUsePlaceholders:!0}}}function zp(e,t){let n=typeof e=="number"?e*1e3:Date.parse(String(e||""));if(!Number.isFinite(n))throw new Error(`${t} must be an ISO 8601 timestamp or Unix seconds`);let r=Math.floor(n/1e3);if(r<=Math.floor(Date.now()/1e3))throw new Error(`${t} must be in the future`);return r}function Lx(e){let t=String(e??"").trim();if(!/^[1-9]\d*$/.test(t))throw new Error("Bitcoin NFT list priceSats must be a positive integer");return t}async function Yp(e={},t={}){if(e.userConfirmed!==!0)throw new Error("NFT listing preparation requires userConfirmed=true after reviewing asset, marketplace, price, currency, fees, royalties, and expiry");let n=String(e.marketplace||"").trim().toLowerCase();if(n==="opensea")return yr(e,Je(t,"opensea"));if(n==="magiceden"||n==="magiceden-sol"){let r=zp(e.expiry??e.endTime,"Solana NFT listing expiry");return wr({...e,expiry:r},Je(t,"magiceden"))}if(n==="satflow"){let r=zp(e.expiry??e.endTime??e.expiresAt,"Bitcoin NFT listing expiry");return rr({inscription_id:e.inscriptionId||e.tokenId,runes_output:e.runesOutput,ord_address:e.ordAddress||e.seller,receive_address:e.receiveAddress,price:Lx(e.priceSats??e.price),tap_key:e.tapKey,collection_slug:e.collectionSlug||e.collection,expires_at:r},Je(t,"satflow"))}throw new Error(`unsupported NFT marketplace: ${n||"<missing>"}`)}function hi(e,t){let n=Number(e);if(!Number.isFinite(n)||n<0)throw new Error(`${t} must be a non-negative ETH number`);return n}function bi(e){if(e==null||e==="")return null;let t=Number(e);return Number.isFinite(t)&&t>0?t:null}function jr(e){return String(e??"").trim().toLowerCase()}function Bx(e={},t,n){let r=Array.isArray(e.traits)?e.traits:[],o=jr(t),a=jr(n);return!o||!a?!1:r.some(i=>jr(i.trait_type??i.traitType??i.type)===o&&jr(i.value??i.trait_value??i.traitValue)===a)}function Mx(e={},t){if(!t)return!0;let n=String(e.contract||e.tokenContract||e.assetContract||"").toLowerCase();return!n||n===String(t).toLowerCase()}function jp(e={},t=["timestamp","listedAt","createdAt"]){for(let n of t){let r=e[n]??e[n.replace(/[A-Z]/g,a=>`_${a.toLowerCase()}`)];if(r==null)continue;let o=typeof r=="number"?r:Date.parse(String(r));if(Number.isFinite(o))return o}return null}function gi(e){return Math.round(Number(e)*1e6)/1e6}function $e(e,t,n={}){return{provider:"nft-portfolio",operation:"traitSnipe",marketplace:String(e.marketplace||"").toLowerCase(),collectionSlug:e.collectionSlug||e.collection||null,contract:e.contract||null,decision:"PASS",reason:t,executionReady:!1,signingReady:!1,broadcastReady:!1,requiresLocalVault:!0,best:null,evidence:n,prepareIntent:null}}async function Jp(e={},t={}){let n=String(e.marketplace||"").trim().toLowerCase();if(n!=="opensea")return $e(e,`unsupported NFT marketplace: ${n||"<missing>"}`);let o=["traitType","traitValue","maxPriceEth","minDiscountBps","minTraitSales","minTraitVolumeEth","traitFloorEth"].filter(C=>e[C]==null||e[C]==="");if(o.length)return $e(e,`trait-risk-params-required: ${o.join(",")}`);let a=Number.isFinite(Number(e.nowMs))?Number(e.nowMs):Date.now(),i=hi(e.maxPriceEth,"maxPriceEth"),s=Number(e.minDiscountBps),c=Number(e.minTraitSales),l=hi(e.minTraitVolumeEth,"minTraitVolumeEth"),u=hi(e.traitFloorEth,"traitFloorEth"),d=bi(e.collectionFloorEth),p=bi(e.maxListingAgeMs),m=bi(e.maxSaleAgeMs??e.salesWindowMs);if(!Number.isFinite(s)||s<0)return $e(e,"invalid-min-discount-bps");if(!Number.isFinite(c)||c<1)return $e(e,"invalid-min-trait-sales");if(u<=0)return $e(e,"trait-floor-unavailable");let f=C=>Bx(C,e.traitType,e.traitValue)&&Mx(C,e.contract),h=(Array.isArray(e.sales)?e.sales:[]).filter(f).filter(C=>{if(!m)return!0;let I=jp(C,["timestamp","soldAt","createdAt"]);return I!=null&&a-I<=m}),g=gi(h.reduce((C,I)=>C+Number(I.priceEth??I.price??0),0)),v={count:h.length,volumeEth:g,minSales:c,minVolumeEth:l};if(h.length<c||g<l)return $e(e,"trait-liquidity-insufficient",{traitSales:v});let k=(Array.isArray(e.listings)?e.listings:[]).filter(f).filter(C=>{let I=Number(C.priceEth??C.price);if(!Number.isFinite(I)||I<=0||I>i)return!1;if(!p)return!0;let R=jp(C,["listedAt","createdAt","timestamp"]);return R!=null&&a-R<=p}).map(C=>{let I=Number(C.priceEth??C.price),R=Math.round((u-I)/u*1e4);return{...C,priceEth:I,discountBps:R}}).filter(C=>C.discountBps>=s).sort((C,I)=>C.priceEth-I.priceEth||I.discountBps-C.discountBps),y={traitSales:v,collectionFloorEth:d,traitFloorEth:u,listingDepth:{count:k.length,minFreshListings:e.minTraitListings==null?null:Number(e.minTraitListings)},methodology:"Trait buy intent requires caller-supplied fresh listings, real trait sales, volume, max price, and min discount gates. Rarity metadata alone is ignored."},w=e.minTraitListings==null?1:Number(e.minTraitListings);if(!Number.isFinite(w)||w<1)return $e(e,"invalid-min-trait-listings",y);if(k.length<w)return $e(e,"trait-listing-depth-insufficient",y);let S=k[0],N=P({provider:"nft-portfolio",kind:"nft-trait-buy-intent",marketplace:n,chain:e.chain||null,collectionSlug:e.collectionSlug||e.collection||null,contract:e.contract||null,tokenId:S.tokenId==null?null:String(S.tokenId),listingId:S.listingId||null,orderHash:S.orderHash||null,priceEth:gi(S.priceEth),maxPriceEth:i,traitType:e.traitType,traitValue:e.traitValue,evidence:y,localOnly:!0,requiresLocalVault:!0},{provider:"nft-portfolio",kind:"nft-trait-buy-intent",env:t.env||process.env});return{provider:"nft-portfolio",operation:"traitSnipe",marketplace:n,collectionSlug:e.collectionSlug||e.collection||null,contract:e.contract||null,decision:"BUY",reason:"trait-mispricing-evidence-met",executionReady:!1,signingReady:!1,broadcastReady:!1,requiresLocalVault:!0,best:{tokenId:S.tokenId==null?null:String(S.tokenId),listingId:S.listingId||null,orderHash:S.orderHash||null,priceEth:gi(S.priceEth),discountBps:S.discountBps},evidence:y,prepareIntent:N}}async function Xp(e={},t={}){let n=await Tt({...e,includePnl:!0},t);return{provider:"nft-portfolio",operation:"pnl",readOnly:!0,generatedAt:n.generatedAt,addresses:n.addresses,coverage:n.coverage,unsupported:n.unsupported,valuation:n.valuation,pnl:n.pnl}}async function Qp(e={},t={}){let n=Array.isArray(e.items)?e.items:null,r=null;return n||(r=await Tt({...e,includePnl:!1},t),n=r.inventory.visibleItems),{...await Vp({...e,items:n},Je(t,"gallery")),inventorySummary:r?{visibleCount:r.inventory.visibleCount,flaggedCount:r.inventory.flaggedCount,coverage:r.coverage}:null}}var Zp=10*1024*1024,nm=1e3;function Ue(e){if(e==null||e==="")return null;let t=Number(e);return Number.isFinite(t)?t:null}function Rt(e){return Number.isFinite(e)?Number(e.toFixed(2)):null}function em(e,t){if(e==null||e==="")return null;let n=Date.parse(String(e));if(!Number.isFinite(n))throw new Error(`${t} must be an ISO 8601 timestamp`);return new Date(n).toISOString()}function rm(e,t,n,r,o){if(e==null||e==="")return t;let a=Number(e);if(!Number.isInteger(a)||a<n||a>r)throw new Error(`${o} must be an integer from ${n} to ${r}`);return a}function zx(e={}){return["evm","solana","bitcoin","hyperliquid"].map(t=>`${t}:${String(e[t]||"").trim().toLowerCase()}`).join("|")}function om(e={}){return`portfolio_${Hx("sha256").update(zx(e)).digest("hex").slice(0,20)}`}function am(e={}){if(e.historyFile)return Nt.resolve(String(e.historyFile));let t=e.env||process.env;if(t.ORACLE_PORTFOLIO_HISTORY_FILE)return Nt.resolve(String(t.ORACLE_PORTFOLIO_HISTORY_FILE));let n=String(t.HERMES_HOME||"").trim()||Nt.join(Wx.homedir(),".hermes");return Nt.join(Nt.resolve(n),"state","oracle","portfolio-history.jsonl")}function jx(e){let t=Ue(e?.valuation?.knownUsd);return t==null?null:Number(e?.valuation?.pricedItems||0)>0||e?.valuation?.complete===!0?Rt(t):null}function Gx(e){if(!e||e.status==="unavailable"||e.status==="not-requested")return null;let t=Ue(e?.valuation?.estimatedCurrentValueUsd);return t==null?null:Number(e?.valuation?.valuedItems||0)>0||e?.valuation?.complete===!0?Rt(t):null}function Kx(e){let t=[];for(let n of e?.chains||[]){if(n.family==="hyperliquid"){let o=(n.spot?.balances||[]).reduce((s,c)=>{let l=Ue(c.usdValue);return l==null?s:s+l},0),a=Ue(n.perps?.accountValueUsd),i=Rt(o+(a??0));(i!==0||a!=null||(n.spot?.balances||[]).some(s=>Ue(s.usdValue)!=null))&&t.push({family:"hyperliquid",chainId:null,name:n.name||"Hyperliquid",knownUsd:i});continue}let r=Ue(n.native?.usdValue);r!=null&&t.push({family:n.family||"evm",chainId:n.chainId??null,name:n.name||n.native?.symbol||"Unknown",knownUsd:Rt(r)})}return t}function Yx(e,t,n){let r=Array.isArray(t?.coverage)?t.coverage:[];return{balances:e?.coverage||null,nfts:{requested:n,ok:r.filter(o=>o.status==="ok").length,partial:r.filter(o=>o.status==="partial").length,unavailable:r.filter(o=>o.status==="unavailable").length,notConfigured:r.filter(o=>o.status==="not-configured").length,status:n?t?.status==="unavailable"?"unavailable":t?.valuation?.complete?"ok":"partial":"not-requested"}}}async function Jx(e,t){let n=am(t),r=`${JSON.stringify(e)}
|
|
144
|
-
`;if(Buffer.byteLength(
|
|
145
|
-
`))if(a.trim())try{let i=JSON.parse(a);i?.schemaVersion===1&&i?.portfolioId&&i?.recordedAt?r.push(i):o+=1}catch{o+=1}return{file:t,snapshots:r,corruptLines:o}}catch(n){if(n?.code==="ENOENT")return{file:t,snapshots:[],corruptLines:0};throw n}}function Qx(e,t){if(e.allPortfolios===!0)return null;if(e.portfolioId)return String(e.portfolioId);let n=Ye(e,t.env||process.env);return Object.values(n).some(Boolean)?om(n):null}async function yi(e={},t={}){let n=rm(e.limit,100,1,nm,"portfolio history limit"),r=String(e.order||"desc").toLowerCase();if(!new Set(["asc","desc"]).has(r))throw new Error("portfolio history order must be asc or desc");let o=em(e.since,"portfolio history since"),a=em(e.until,"portfolio history until"),i=Qx(e,t),s=await Xx(t),c=s.snapshots.filter(d=>!(i&&d.portfolioId!==i||o&&d.recordedAt<o||a&&d.recordedAt>a));c.sort((d,p)=>String(d.recordedAt).localeCompare(String(p.recordedAt)));let l=c.length;c=c.slice(-n),r==="desc"&&c.reverse();let u=c.filter(d=>Ue(d?.valuation?.knownUsd)!=null);return{provider:"portfolio",operation:"history",readOnly:!0,historyFile:s.file,portfolioId:i,order:r,totalStored:s.snapshots.length,totalMatching:l,corruptLines:s.corruptLines,snapshots:c,stats:{returned:c.length,valuedSnapshots:u.length,unpricedSnapshots:c.length-u.length,firstRecordedAt:c.length?[...c].sort((d,p)=>String(d.recordedAt).localeCompare(String(p.recordedAt)))[0].recordedAt:null,lastRecordedAt:c.length?[...c].sort((d,p)=>String(d.recordedAt).localeCompare(String(p.recordedAt))).at(-1).recordedAt:null}}}function tm(e){return`$${Number(e).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}`}function Kr(e){return String(e).replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function Zx(e,t){if(e.length<=t)return e;let n=[];for(let r=0;r<t;r+=1)n.push(e[Math.round(r*(e.length-1)/(t-1))]);return n}function eS(e,t){let c=e.map(y=>y.value),l=Math.min(...c),u=Math.max(...c);if(l===u){let y=Math.max(1,Math.abs(l)*.05);l-=y,u+=y}else{let y=(u-l)*.1;l=Math.max(0,l-y),u+=y}let d=y=>e.length===1?1240/2:100+1040*y/(e.length-1),p=y=>570-(y-l)/(u-l)*470,m=e.map((y,w)=>`${w?"L":"M"}${d(w).toFixed(2)},${p(y.value).toFixed(2)}`).join(" "),f=Array.from({length:5},(y,w)=>{let S=w/4,N=100+S*470,C=u-S*(u-l);return`<line x1="100" y1="${N}" x2="1140" y2="${N}" stroke="#26313c" stroke-width="1"/><text x="86" y="${N+5}" text-anchor="end" fill="#8795a5" font-size="15">${tm(C)}</text>`}).join(""),h=e.map((y,w)=>`<circle cx="${d(w)}" cy="${p(y.value)}" r="5" fill="#b8f0ff"><title>${Kr(y.recordedAt)}: ${tm(y.value)}</title></circle>`).join(""),g=Kr(e[0].recordedAt.slice(0,10)),v=Kr(e.at(-1).recordedAt.slice(0,10));return`<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="675" viewBox="0 0 1200 675"><rect width="1200" height="675" fill="#0b1016"/><text x="60" y="50" fill="#f4f7fa" font-size="28" font-family="Inter,Arial,sans-serif" font-weight="700">Oracle Portfolio Value</text><text x="60" y="78" fill="#8795a5" font-size="15" font-family="Inter,Arial,sans-serif">Known priced value, not a complete total unless every snapshot says complete \xB7 ${Kr(t||"configured portfolio")}</text>${f}<line x1="100" y1="570" x2="1140" y2="570" stroke="#526171" stroke-width="1"/><path d="${m}" fill="none" stroke="#b8f0ff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>${h}<text x="100" y="610" fill="#8795a5" font-size="15">${g}</text><text x="1140" y="610" text-anchor="end" fill="#8795a5" font-size="15">${v}</text><text x="60" y="650" fill="#526171" font-size="13">NFT values are provider estimates, not executable bids. Unavailable values are omitted, never plotted as zero.</text></svg>`}async function sm(e={},t={}){if(e.allPortfolios===!0)throw new Error("portfolio value graph requires one portfolioId or configured public-address portfolio");let n=rm(e.maxPoints,200,2,500,"portfolio graph maxPoints"),r=await yi({...e,order:"asc",limit:e.limit??nm},t);if(!r.portfolioId)throw new Error("portfolio value graph requires one portfolioId or configured public-address portfolio");let o=r.snapshots.map(d=>({recordedAt:d.recordedAt,value:Ue(d?.valuation?.knownUsd),complete:d?.valuation?.complete===!0})).filter(d=>d.value!=null);if(!o.length)throw new Error("portfolio value graph requires at least one snapshot with known priced value");let a=Zx(o,n),i=a[0].value,s=a.at(-1).value,c=Rt(s-i),l=i===0?null:Number(((s-i)/i*100).toFixed(2)),u=eS(a,r.portfolioId);return{provider:"portfolio",operation:"valueGraph",readOnly:!0,portfolioId:r.portfolioId,mimeType:"image/svg+xml",dataBase64:Buffer.from(u).toString("base64"),byteLength:Buffer.byteLength(u),summary:{points:a.length,omittedUnavailablePoints:r.snapshots.length-o.length,startRecordedAt:a[0].recordedAt,endRecordedAt:a.at(-1).recordedAt,startKnownUsd:i,endKnownUsd:s,changeUsd:c,changePct:l,completeSnapshots:a.filter(d=>d.complete).length,label:"known priced value history; incomplete snapshots are not complete portfolio totals"}}}J();var nS=Object.freeze({"8da5cb5b":{name:"owner()",weight:"low",note:"contract has an owner"},f2fde38b:{name:"transferOwnership(address)",weight:"low",note:"ownership transferable"},"40c10f19":{name:"mint(address,uint256)",weight:"high",note:"owner can mint new supply"},a0712d68:{name:"mint(uint256)",weight:"high",note:"owner can mint new supply"},f9f92be4:{name:"blacklist(address)",weight:"high",note:"addresses can be blocked from selling"},e4997dc5:{name:"removeBlackList(address)",weight:"high",note:"blacklist machinery present"},"8456cb59":{name:"pause()",weight:"high",note:"transfers can be frozen"},"3f4ba83a":{name:"unpause()",weight:"high",note:"pausable transfers"},c0246668:{name:"setFee/excludeFromFee",weight:"high",note:"transfer fees can be changed"},"3659cfe6":{name:"upgradeTo(address)",weight:"high",note:"logic can be replaced entirely"},"4f1ef286":{name:"upgradeToAndCall(address,bytes)",weight:"high",note:"logic can be replaced entirely"}}),rS=Object.freeze([{label:"eip1967",slot:"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"},{label:"zeppelinos",slot:"0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3"},{label:"eip1822",slot:"0xc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7"}]),oS=`0x${"0".repeat(64)}`;function aS(e){return!e||e==="0x"||e===oS}async function Xe(e={},t={}){let n=t.rpcCall||O,r=String(e.address||"").trim().toLowerCase(),o=Number(e.chainId);if(!/^0x[a-f0-9]{40}$/.test(r))return{status:"error",error:"address must be a 0x-prefixed EVM address",risk:"unknown-risk",findings:[],notes:[]};if(!Number.isInteger(o))return{status:"error",error:"chainId is required",risk:"unknown-risk",findings:[],notes:[]};let a;try{a=await n(o,"eth_getCode",[r,"latest"],t)}catch(f){return{address:r,chainId:o,status:"unavailable",error:f?.message||"eth_getCode failed",risk:"unknown-risk",findings:[],isProxy:!1,codeSize:0,notes:["could not read contract code; treat as unverified"]}}if(!a||a==="0x")return{address:r,chainId:o,status:"ok",risk:"high",findings:[{selector:"-",name:"no-code",weight:"high",note:"no contract deployed at this address"}],isProxy:!1,codeSize:0,notes:["nothing is deployed here \u2014 an approval or transfer to this address is unrecoverable"]};let i=[],s=[],c=a.slice(2).toLowerCase();for(let[f,h]of Object.entries(nS))c.includes(f)&&s.push({selector:`0x${f}`,...h});let l=!1,u=null,d=null;for(let{label:f,slot:h}of rS)try{let g=await n(o,"eth_getStorageAt",[r,h,"latest"],t);if(!aS(g)){l=!0,u=f,d=`0x${String(g).slice(-40)}`;break}}catch{i.push(`proxy slot (${f}) unreadable; proxy status uncertain`)}l&&(s.push({selector:u,name:"proxy",weight:"high",note:"implementation is upgradeable \u2014 current behaviour is not a guarantee"}),i.push(`bytecode scan covers the proxy (${u}), not the implementation ${d} it delegates to`));let m=s.filter(f=>f.weight==="high").length>0?"high":s.length>0?"elevated":"unknown-risk";return m==="unknown-risk"&&i.push("no owner-power selectors found; this is weak evidence, not a safety guarantee"),{address:r,chainId:o,status:"ok",risk:m,findings:s,isProxy:l,proxyStandard:u,implementation:d,codeSize:Math.floor(c.length/2),notes:i}}async function cm(e={}){let t=Date.now();try{let n=await Xe({address:"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",chainId:1},e),r=n.status==="ok";return{provider:"contract-risk",status:r?"ok":"degraded",latencyMs:Date.now()-t,detail:r?"bytecode reads reachable":n.error||"probe returned no code"}}catch(n){return{provider:"contract-risk",status:"down",latencyMs:Date.now()-t,detail:n?.message||"probe failed"}}}var sS=/^0x[0-9a-fA-F]{40}$/,lm=4663;function wi(e,t){let n=String(e||"").trim();if(!sS.test(n))throw new Error(`evm-token-sniper: ${t} must be a 0x EVM address`);return n}function cS(e,t){let n=String(e??"").trim();if(!/^\d+$/.test(n)||BigInt(n)<=0n)throw new Error(`evm-token-sniper: ${t} must be a positive raw integer amount`);return n}function lS(e,t){if(t){if(Number(t.chainId)!==e)throw new Error(`evm-token-sniper: supplied scanner chain ${t.chainId} does not match ${e}`);return t}Oo();let n=Ws(e);if(!n)throw new Error(`evm-token-sniper: unsupported EVM chainId ${e}`);return n}function uS({token:e,pools:t,structuralRisk:n,scannerRisk:r,sellability:o,quote:a,args:i,scanner:s}){let c=[];return e?.evidence!==M.LIVE&&c.push("token identity is not live-verified"),(!Array.isArray(t?.pools)||t.pools.length===0)&&c.push("no liquid pool was resolved"),n?.status!=="ok"&&c.push("structural contract risk is unavailable"),n?.risk==="high"&&c.push("structural contract risk is high"),r?.verdict!==B.PASS&&c.push(`scanner risk verdict is ${r?.verdict||"UNKNOWN"}`),s.supports?.("sellSimulation")?o?.verdict!==B.PASS&&c.push(`sellability verdict is ${o?.verdict||"UNKNOWN"}`):c.push("sell simulation is unavailable on this chain"),s.supports?.("quote")?a?.evidence!==M.LIVE&&c.push("no live quote was returned"):c.push("live quoting is unavailable on this chain"),s.supports?.("prepareUnsignedTx")||c.push("unsigned transaction preparation is unavailable on this chain"),i.tokenIn||c.push("tokenIn is required to prepare"),i.amountIn||c.push("amountIn is required to prepare"),i.recipient||c.push("recipient is required to prepare"),c}async function um(e={},t={}){let n=Number(e.chainId??lm);if(!Number.isInteger(n)||n<=0)throw new Error("evm-token-sniper: chainId must be a positive integer");let r=wi(e.tokenAddress||e.address||e.token,"tokenAddress"),o=e.tokenIn?wi(e.tokenIn,"tokenIn"):null,a=e.recipient?wi(e.recipient,"recipient"):null,i=e.amountIn==null?null:cS(e.amountIn,"amountIn"),s=lS(n,t.scanner),c=t.scanContractRisk||Xe,[l,u,d]=await Promise.all([s.resolveToken(r),s.resolvePools(r),c({address:r,chainId:n},t.contractRiskOpts||t)]),p=await s.scoreRisk(r),m=null;s.supports?.("sellSimulation")&&i?m=await s.sellSimulation({token:r,amountIn:i,base:o||void 0}):s.supports?.("sellSimulation")&&(m=await s.sellSimulation({token:r,amountIn:"10000000000000000"}));let f=null;s.supports?.("quote")&&o&&i&&(f=await s.quote({tokenIn:o,tokenOut:r,amountIn:i}));let h={...e,tokenIn:o,amountIn:i,recipient:a},g=uS({token:l,pools:u,structuralRisk:d,scannerRisk:p,sellability:m,quote:f,args:h,scanner:s}),v=null;return e.prepare===!0&&g.length===0&&(v=await s.prepareUnsignedTx({tokenIn:o,tokenOut:r,amountIn:i,recipient:a,slippageBps:e.slippageBps??50,fee:f?.fee})),{provider:"evm-token-sniper",execution:"prepare-only",chainId:n,chain:{key:s.key,name:s.name,nativeCurrency:s.nativeCurrency},token:l,pools:u,topPool:u?.pools?.[0]||null,structuralRisk:d,scannerRisk:p,sellability:m,quote:f,blockedReasons:g,prepared:!!v,unsignedTx:v,signed:!1,broadcast:!1}}async function dm(){Oo();let e=zs();return{ok:e.length>0,provider:"evm-token-sniper",defaultChainId:lm,chainIds:e.map(t=>t.chainId),execution:"prepare-only",signed:!1,broadcast:!1}}J();J();var pS=5,vi=[50,75,90],pm=Object.freeze({normal:{percentile:0,baseFeeMultiplier:2n,label:"normal"},fast:{percentile:1,baseFeeMultiplier:3n,label:"fast"},war:{percentile:2,baseFeeMultiplier:4n,label:"war"}});function Qe(e,t){if(e==null)return null;try{if(typeof e=="bigint")return e;if(typeof e=="number"){if(!Number.isFinite(e)||e<0)throw new Error("bad number");return BigInt(Math.floor(e))}let n=String(e).trim();return n.startsWith("0x"),BigInt(n)}catch{throw new Error(`${t} must be a non-negative integer (wei)`)}}function mS(e){let t=e.filter(n=>n!=null).sort((n,r)=>n<r?-1:n>r?1:0);return t.length?t[Math.floor(t.length/2)]:null}async function Yr(e={},t={}){let n=t.rpcCall||O,r=Number(e.chainId);if(!Number.isInteger(r))return{status:"error",error:"chainId is required",viable:!1};let o=pm[e.urgency||"fast"];if(!o)return{status:"error",viable:!1,error:`urgency must be one of: ${Object.keys(pm).join(", ")}`};let a,i,s,c;try{a=Qe(e.maxFeePerGasWei,"maxFeePerGasWei"),i=Qe(e.maxPriorityFeePerGasWei,"maxPriorityFeePerGasWei"),s=Qe(e.gasLimit,"gasLimit"),c=Qe(e.maxTotalGasWei,"maxTotalGasWei")}catch(C){return{status:"error",viable:!1,error:C.message}}let l,u;try{[l,u]=await Promise.all([n(r,"eth_feeHistory",[`0x${pS.toString(16)}`,"pending",vi],t),n(r,"eth_getBlockByNumber",["pending",!1],t)])}catch(C){return{status:"unavailable",viable:!1,error:C?.message||"fee history unavailable",notes:["could not read live fee data; refusing to guess a competitive bid"]}}let d=Qe(u?.baseFeePerGas,"baseFeePerGas")??Qe(l?.baseFeePerGas?.[l.baseFeePerGas.length-1],"baseFeePerGas");if(d==null)return{status:"unavailable",viable:!1,error:"chain did not report a baseFeePerGas (pre-EIP-1559?)",notes:["this pricer is EIP-1559 only"]};let m=(Array.isArray(l?.reward)?l.reward:[]).map(C=>{try{return Qe(C?.[o.percentile],"reward")}catch{return null}}).filter(C=>C!=null&&C>0n),f=mS(m),h=[];f==null&&h.push("no non-zero tips observed in recent blocks; using a 1 gwei floor");let g=f??1000000000n,v=d*o.baseFeeMultiplier+g,k=[];i!=null&&g>i&&(k.push({field:"maxPriorityFeePerGas",wanted:g.toString(),capped:i.toString()}),g=i,v=d*o.baseFeeMultiplier+g),a!=null&&v>a&&(k.push({field:"maxFeePerGas",wanted:v.toString(),capped:a.toString()}),v=a,g>v&&(g=v));let y=s!=null?s*v:null;c!=null&&y!=null&&y>c&&k.push({field:"totalGas",wanted:y.toString(),capped:c.toString()});let w=f==null||g>=f,S=c==null||y==null||y<=c,N=w&&S;return w||h.push(`tip cap ${g} is below the observed ${vi[o.percentile]}th-percentile tip ${f}; this bid is unlikely to land`),S||h.push(`worst-case gas ${y} exceeds the ${c} total cap`),h.push("maxFeePerGas is a ceiling \u2014 unused headroom above basefee+tip is refunded, not spent"),{status:"ok",viable:N,chainId:r,urgency:o.label,baseFeePerGas:d.toString(),observedTip:f==null?null:f.toString(),percentile:vi[o.percentile],maxFeePerGas:v.toString(),maxPriorityFeePerGas:g.toString(),worstCaseGasWei:y==null?null:y.toString(),clamps:k,notes:h}}J();var hS="08c379a0",bS="4e487b71",gS=Object.freeze({1:"assertion failed",17:"arithmetic overflow or underflow",18:"division or modulo by zero",33:"invalid enum value",34:"invalid storage byte array encoding",49:"pop() on an empty array",50:"array index out of bounds",65:"out of memory",81:"call to an uninitialized function pointer"});function yS(e){if(!e||e==="0x")return{kind:"empty",reason:"reverted without a reason (often a require with no message, or out of gas)"};let t=String(e).slice(2),n=t.slice(0,8);if(n===hS)try{let r=parseInt(t.slice(72,136),16),o=t.slice(136,136+r*2);return{kind:"revert",reason:Buffer.from(o,"hex").toString("utf8"),selector:`0x${n}`}}catch{return{kind:"revert",reason:"Error(string) payload could not be decoded",selector:`0x${n}`}}if(n===bS){let r=parseInt(t.slice(8,72),16);return{kind:"panic",code:r,reason:gS[r]||`panic code 0x${r.toString(16)}`,selector:`0x${n}`}}return{kind:"custom",reason:`custom error ${`0x${n}`} (decoding needs the contract ABI)`,selector:`0x${n}`}}function wS(e){let t=[e?.data,e?.error?.data,e?.data?.data,e?.cause?.data,e?.body?.error?.data];for(let o of t){if(typeof o=="string"&&o.startsWith("0x")&&o.length>2)return o;if(typeof o?.data=="string"&&o.data.startsWith("0x")&&o.data.length>2)return o.data}let r=String(e?.message||"").match(/0x[0-9a-fA-F]{72,}/);return r?r[0]:null}function vS(e,t){if(t)return!0;let n=String(e?.message||"").toLowerCase();return!!/execution reverted|revert|invalid opcode|out of gas|stack underflow|insufficient funds for/.test(n)}function xS(e={}){let t={};return e.from&&(t.from=String(e.from).toLowerCase()),e.to&&(t.to=String(e.to).toLowerCase()),e.data&&e.data!=="0x"&&(t.data=e.data),e.value!=null&&String(e.value)!=="0"&&(t.value=`0x${BigInt(e.value).toString(16)}`),t}async function An(e={},t={}){let n=t.rpcCall||O,r=Number(e.chainId),o=e.tx||{};if(!Number.isInteger(r))return{status:"error",willRevert:null,error:"chainId is required"};if(!o.to||!/^0x[a-fA-F0-9]{40}$/.test(String(o.to)))return{status:"error",willRevert:null,error:"tx.to must be a valid address"};if(o.from&&!/^0x[a-fA-F0-9]{40}$/.test(String(o.from)))return{status:"error",willRevert:null,error:"tx.from must be a valid address"};let a=xS(o),i=[],s=null,c=!1,l=null;try{s=await n(r,"eth_call",[a,"pending"],t)}catch(f){let h=wS(f);if(!vS(f,!!h))return{status:"unavailable",willRevert:null,chainId:r,error:f?.message||"simulation unavailable",notes:["could not reach the node; this is NOT evidence the transaction would fail"]};c=!0,l=yS(h),h||(l.reason="execution reverted (node did not return a reason payload)",l.kind="revert-no-data")}if(c)return{status:"ok",willRevert:!0,chainId:r,revert:l,summary:`would REVERT: ${l.reason}`,notes:["simulated against current chain state; signing this now would burn gas and fail"]};let u=null,d=null;if(e.estimateGas!==!1)try{let f=await n(r,"eth_estimateGas",[a,"pending"],t);u=BigInt(f);let h=BigInt(Math.max(0,Math.floor(e.gasBufferPercent??20)));d=u+u*h/100n,i.push(`gasLimit includes a ${h}% buffer over the ${u} estimate`)}catch(f){i.push(`gas estimation failed: ${f?.message||"unknown"}`)}i.push("a pass reflects CURRENT chain state \u2014 it is not a guarantee the transaction lands, and in a contested mint the state changes between blocks");let p=`0x${"0".repeat(64)}`,m=s===p;return m&&i.push("call did not revert but returned boolean false \u2014 some ERC-20s (e.g. USDC) signal failure this way instead of reverting"),{status:"ok",willRevert:!1,returnsFalse:m,chainId:r,returnData:s,gasEstimate:u==null?null:u.toString(),gasLimit:d==null?null:d.toString(),summary:m?"executes but returns FALSE \u2014 the contract is rejecting this operation":u?`would succeed, ~${u} gas`:"would succeed",notes:i}}async function mm(e={}){let t=Date.now();try{let n=await An({chainId:1,tx:{to:"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",data:`0x70a08231${"0".repeat(64)}`},estimateGas:!1},e),r=n.status==="ok";return{provider:"evm-simulate",status:r?"ok":"degraded",latencyMs:Date.now()-t,detail:r?"eth_call reachable":n.error||"probe failed"}}catch(n){return{provider:"evm-simulate",status:"down",latencyMs:Date.now()-t,detail:n?.message||"probe failed"}}}var kS=Object.freeze([{selector:"a0712d68",signature:"mint(uint256)",args:["quantity"]},{selector:"40c10f19",signature:"mint(address,uint256)",args:["to","quantity"]},{selector:"1249c58b",signature:"mint()",args:[]},{selector:"2db11544",signature:"publicMint(uint256)",args:["quantity"]},{selector:"efef39a1",signature:"purchase(uint256)",args:["quantity"]},{selector:"a6f2ae3a",signature:"buy()",args:[]}]);function ES(e){let t=BigInt(e).toString(16);if(t.length>64)throw new Error("value too large for a 32-byte word");return t.padStart(64,"0")}function IS(e){let t=String(e).toLowerCase().replace(/^0x/,"");if(!/^[a-f0-9]{40}$/.test(t))throw new Error(`invalid address: ${e}`);return t.padStart(64,"0")}function fm(e,{minter:t,quantity:n}){let r=`0x${e.selector}`;for(let o of e.args)if(o==="to")r+=IS(t);else if(o==="quantity")r+=ES(n);else throw new Error(`unsupported mint argument: ${o}`);return r}async function Jr(e={},t={}){let n=t.rpcCall||O,r=String(e.address||"").trim().toLowerCase(),o=Number(e.chainId);if(!/^0x[a-f0-9]{40}$/.test(r))return{status:"error",error:"address must be a 0x-prefixed EVM address",found:[]};if(!Number.isInteger(o))return{status:"error",error:"chainId is required",found:[]};let a;try{a=await n(o,"eth_getCode",[r,"latest"],t)}catch(c){return{status:"unavailable",error:c?.message||"eth_getCode failed",found:[]}}if(!a||a==="0x")return{status:"ok",found:[],notes:["no contract deployed at this address"]};let i=a.slice(2).toLowerCase(),s=kS.filter(c=>i.includes(c.selector));return{status:"ok",address:r,chainId:o,found:s,notes:s.length?[]:["no known public mint selector found; this contract may use a custom or allowlist-only entrypoint"]}}async function hm(e={}){let t=Date.now();try{let n=await Jr({address:"0x8a90cab2b38dba80c64b7734e58ee1db38b8992e",chainId:1},e),r=n.status==="ok";return{provider:"nft-mint",status:r?"ok":"degraded",latencyMs:Date.now()-t,detail:r?"bytecode reads reachable":n.error||"probe failed"}}catch(n){return{provider:"nft-mint",status:"down",latencyMs:Date.now()-t,detail:n?.message||"probe failed"}}}async function xi(e={},t={}){let n=String(e.contract||e.address||"").trim().toLowerCase(),r=Number(e.chainId),o=String(e.minter||e.from||"").trim().toLowerCase(),a=e.quantity==null?1:Number(e.quantity);if(!/^0x[a-f0-9]{40}$/.test(n))return{status:"error",error:"contract must be a 0x-prefixed EVM address"};if(!/^0x[a-f0-9]{40}$/.test(o))return{status:"error",error:"minter address is required"};if(!Number.isInteger(a)||a<1)return{status:"error",error:"quantity must be a positive integer"};if(!Number.isInteger(r))return{status:"error",error:"chainId is required"};let i=await Jr({address:n,chainId:r},t);if(i.status!=="ok")return{status:i.status,error:i.error};if(!i.found.length)return{status:"unsupported",error:"no known public mint function found in this contract's bytecode",notes:i.notes};let s=e.signature?i.found.find(v=>v.signature===e.signature):i.found[0];if(!s)return{status:"error",error:`requested signature ${e.signature} not present in this contract`,available:i.found.map(v=>v.signature)};let c=i.found.length>1&&!e.signature,l=await Xe({address:n,chainId:r},t),u=null;if(e.simulate!==!1&&(u=await An({chainId:r,tx:{from:o,to:n,data:fm(s,{minter:o,quantity:a}),value:e.valueWei},gasBufferPercent:e.gasBufferPercent},t),u.willRevert===!0&&e.ignoreRevert!==!0))return{status:"would-revert",error:`mint would revert: ${u.revert.reason}`,simulation:u,mintFunction:s.signature,notes:["signing this now would burn gas and fail; pass ignoreRevert to prepare anyway (e.g. a mint that has not opened yet)"]};let d=e.gasLimit??(u?.gasLimit?Number(u.gasLimit):null),p=await Yr({chainId:r,urgency:e.urgency||"war",gasLimit:d,maxFeePerGasWei:e.maxFeePerGasWei,maxPriorityFeePerGasWei:e.maxPriorityFeePerGasWei,maxTotalGasWei:e.maxTotalGasWei},t);if(p.status!=="ok")return{status:"unavailable",error:p.error,notes:p.notes};let m;try{m=fm(s,{minter:o,quantity:a})}catch(v){return{status:"error",error:v.message}}let f={chainId:r,from:o,to:n,data:m,value:e.valueWei==null?"0":String(e.valueWei),gasLimit:d==null?null:String(d),maxFeePerGas:p.maxFeePerGas,maxPriorityFeePerGas:p.maxPriorityFeePerGas},h={ok:!0,skipped:!0,reason:"no gasLimit or cap supplied"};if(d!=null&&(e.maxTotalGasWei!=null||e.grant!=null)&&(h=ba({chainId:r,tx:{gasLimit:d,maxFeePerGas:p.maxFeePerGas,maxPriorityFeePerGas:p.maxPriorityFeePerGas},policy:{maxTotalGasWei:e.maxTotalGasWei,maxFeePerGasWei:e.maxFeePerGasWei,maxPriorityFeePerGasWei:e.maxPriorityFeePerGasWei,grant:e.grant}}),!h.ok))return{status:"refused",error:`gas-war cap exceeded: ${h.reason||h.error}`,gas:p,capCheck:h};let g=[];return c&&g.push(`contract exposes ${i.found.length} mint entrypoints (${i.found.map(v=>v.signature).join(", ")}); defaulted to ${s.signature} \u2014 pass signature to choose`),l.risk==="high"&&g.push(`contract risk HIGH: ${l.findings.map(v=>v.name).join(", ")}`),p.viable||g.push(p.notes[0]),h.skipped&&g.push("gas-war caps NOT enforced: supply gasLimit plus maxTotalGasWei or a grant"),{status:"ok",execution:"prepare-only",signed:!1,tx:f,mintFunction:s.signature,alternatives:i.found.map(v=>v.signature),quantity:a,gas:p,simulation:u,contractRisk:{risk:l.risk,findings:l.findings,isProxy:l.isProxy},capCheck:h,warnings:g}}J();var _S=1440*60*1e3;function CS(e={},{nowMs:t=Date.now()}={}){let n=[];if(!e||typeof e!="object")return{ok:!1,problems:["grant is required for execute mode"]};let r=String(e.contract||"").toLowerCase();/^0x[a-f0-9]{40}$/.test(r)||n.push("grant.contract must be an exact address"),Number.isInteger(Number(e.chainId))||n.push("grant.chainId is required"),e.maxTotalGasWei==null&&n.push("grant.maxTotalGasWei is required"),e.maxValueWei==null&&n.push("grant.maxValueWei is required (mint price ceiling)");let o=Number(e.expiresAt);return Number.isFinite(o)?o<=t?n.push("grant has expired"):o-t>_S&&n.push("grant TTL exceeds 24h"):n.push("grant.expiresAt is required"),{ok:n.length===0,problems:n,contract:r,chainId:Number(e.chainId)}}function bm(e={},t={}){let r=e.actionMode==="execute"?"execute":e.actionMode||"alert_only",o=String(e.contract||"").trim().toLowerCase(),a=Number(e.chainId),i=[];if(!/^0x[a-f0-9]{40}$/.test(o))return{status:"error",error:"contract must be a 0x-prefixed EVM address"};if(!Number.isInteger(a))return{status:"error",error:"chainId is required"};if(r!=="alert_only"&&r!=="execute")return{status:"ok",actionMode:"alert_only",requestedMode:r,downgraded:!0,contract:o,chainId:a,quantity:e.quantity==null?1:Number(e.quantity),urgency:e.urgency||"war",grant:null,notes:[`unrecognized actionMode ${JSON.stringify(r)} \u2014 defaulted to alert_only; only the exact string "execute" arms a trigger`]};let s=r;if(r==="execute")if(!sa(t.env||process.env))s="alert_only",i.push("DOWNGRADED to alert_only: autonomous trading is off \u2014 set ORACLE_AUTONOMOUS_TRADING=1 to let a trigger fire unattended");else{let c=CS(e.grant,{nowMs:t.nowMs});c.ok?(c.contract!==o||c.chainId!==a)&&(s="alert_only",i.push("DOWNGRADED to alert_only: grant does not match this contract/chain \u2014 a grant authorizes one exact target")):(s="alert_only",i.push(`DOWNGRADED to alert_only: ${c.problems.join("; ")}`))}return s==="alert_only"?i.push("alert_only: Oracle will notify and prepare an artifact; you sign it"):i.push("ARMED: this trigger will submit a prepared, capped mint automatically when the mint opens"),{status:"ok",actionMode:s,requestedMode:r,downgraded:s!==r,contract:o,chainId:a,quantity:e.quantity==null?1:Number(e.quantity),urgency:e.urgency||"war",grant:s==="execute"?e.grant:null,notes:i}}async function gm(e={},t={}){let n=t.rpcCall||O,r=String(e.contract||"").trim().toLowerCase(),o=Number(e.chainId);if(!/^0x[a-f0-9]{40}$/.test(r)||!Number.isInteger(o))return{status:"error",open:!1,error:"contract and chainId are required"};let a=[{selector:"0xeb8d2444",name:"saleIsActive()",openWhen:!0},{selector:"0x25fd90f3",name:"mintActive()",openWhen:!0},{selector:"0x68428a1b",name:"saleActive()",openWhen:!0},{selector:"0x22f3e2d4",name:"isActive()",openWhen:!0},{selector:"0x5c975abb",name:"paused()",openWhen:!1}];for(let i of a)try{let s=await n(o,"eth_call",[{to:r,data:i.selector},"latest"],t);if(s&&s!=="0x"){let c=BigInt(s)===1n;return{status:"ok",open:i.openWhen?c:!c,evidence:i.name,raw:s}}}catch{}return{status:"unknown",open:!1,notes:["no readable sale-state flag; cannot confirm the mint is open \u2014 will not fire on a guess"]}}var TS=1440*60*1e3;function NS(e={},{nowMs:t=Date.now()}={}){let n=[];if(!e||typeof e!="object")return{ok:!1,problems:["grant is required for execute mode"]};let r=String(e.contract||"").toLowerCase();/^0x[a-f0-9]{40}$/.test(r)||n.push("grant.contract must be an exact address"),Number.isInteger(Number(e.chainId))||n.push("grant.chainId is required"),e.maxTotalGasWei==null&&n.push("grant.maxTotalGasWei is required"),e.maxValueWei==null&&n.push("grant.maxValueWei is required (mint price ceiling)"),String(e.maxValueWei)!=="0"&&n.push("grant.maxValueWei must be 0 for Mancers free mints");let o=Number(e.expiresAt);return Number.isFinite(o)?o<=t?n.push("grant has expired"):o-t>TS&&n.push("grant TTL exceeds 24h"):n.push("grant.expiresAt is required"),{ok:n.length===0,problems:n,contract:r,chainId:Number(e.chainId)}}var ym="0x797a2e030B7e49107C8F07bF0300Ea9caE88cA57",RS=4663,OS="0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",wm="a22cb465",LS="a0712d68";function Si(e){return String(e||"").trim().toLowerCase()}function Ot(e){return String(e||"").toLowerCase().replace(/^0x/,"")}function BS(e){let t=Ot(e);if(!/^[a-f0-9]{40}$/.test(t))throw new Error("revoke operator must be an address");return`0x${wm}${t.padStart(64,"0")}${"0".repeat(64)}`}function MS(e){return Ot(e).includes(Ot(ym))}function $S(e={}){return(Array.isArray(e.calls)?e.calls:[]).some(n=>Ot(n?.data).startsWith(wm))}function US(e={},t){let n=Ot(t).padStart(64,"0");return(Array.isArray(e.logs)?e.logs:[]).some(o=>{let a=o?.topics||[];return Si(a[0])!==OS?!1:Ot(a[2])===n})}function DS(e=1){return`0x${LS}${BigInt(e).toString(16).padStart(64,"0")}`}function vm(e={},t={}){let n=Si(e.contract),r=Si(e.minter),o=Number(e.chainId),a=e.valueWei==null?"0":String(e.valueWei),i=[];/^0x[a-f0-9]{40}$/.test(n)||i.push("contract must be a 0x address"),/^0x[a-f0-9]{40}$/.test(r)||i.push("minter must be a 0x address"),o!==RS&&i.push("only Robinhood chain 4663"),a!=="0"&&i.push("value must be 0 \u2014 paid mints are skipped"),MS(e.bytecode||"")||i.push("bytecode does not reference Mancers 0x797a\u20268cA57 \u2014 no allowlist gate found");let s=e.simulation||{};s.willRevert===!0&&i.push("mint simulation reverts"),$S(s)&&i.push("simulation sets approval / setApprovalForAll"),US(s,r)||i.push("simulation has no ERC721 Transfer to minter");let c=i.length===0,l={chainId:o,from:r,to:n,data:DS(e.quantity??1),value:"0"},u={chainId:o,from:r,to:n,data:BS(n),value:"0"},d=!1;if(c&&e.actionMode==="execute")if(!Tl(t.env||process.env))i.push("DOWNGRADED: ORACLE_AUTONOMOUS_MINT=1 required to fire");else{let p=NS(e.grant,{nowMs:t.nowMs});p.ok?p.contract!==n||p.chainId!==o?i.push("DOWNGRADED: grant does not match this contract/chain"):d=!0:i.push(`DOWNGRADED: ${p.problems.join("; ")}`)}return{status:c?"ok":"fail",verdict:c?"unknown-risk":"fail",failClosedPass:c,executeFire:d,oneShot:d,execution:"prepare-only",signed:!1,chainId:o,contract:n,minter:r,gate:ym.toLowerCase(),reasons:i,mintTx:l,revokeTx:u,notes:["failClosedPass is not safe \u2014 owner can still change the contract after this block",d?"ARMED one-shot: fire mint then revoke; grant must not be reused":"prepare-only: unsigned mint + revoke; arm this exact contract to fire"]}}_();var qS="https://api.paraswap.io",ki=(e={})=>(e.baseUrl||process.env.PARASWAP_API_URL||qS).replace(/\/$/,"");function Lt(e,t){let n=String(e||"");if(!/^0x[0-9a-fA-F]{40}$/.test(n))throw new Error(`${t} must be a 20-byte token address`);return n.toLowerCase()}async function Ei(e={},t={}){let n=Number(e.chainId||1);return b(`${ki(t)}/tokens/${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function Bt(e={},t={}){let n=Number(e.chainId||e.network||1);if(e.amount==null)throw new Error("amount required");let r=new URLSearchParams({srcToken:Lt(e.srcToken,"srcToken"),destToken:Lt(e.destToken,"destToken"),amount:String(e.amount),srcDecimals:String(Number(e.srcDecimals)),destDecimals:String(Number(e.destDecimals)),side:String(e.side||"SELL").toUpperCase(),network:String(n),version:String(e.version||"6.2")});e.includeDEXS&&r.set("includeDEXS",String(e.includeDEXS)),e.excludeDEXS&&r.set("excludeDEXS",String(e.excludeDEXS));let o=await cr({wallet:e.userAddress||e.fromAddress,env:t.env,action:e.feeAction||"swap",holderCheck:t.holderCheck});for(let[s,c]of Object.entries(sl(o)))r.set(s,c);let a=await b(`${ki(t)}/prices?${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4}),i=a?.priceRoute?.destAmount;return i?{...q(a,{chainId:n,venue:a?.priceRoute?.contractAddress||"paraswap-quote",amountOut:i,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,quoteAgeMs:0,requestedCapBps:e.maxSlippageBps??e.slippageBps}),executionReady:!1,executionBlocker:"call prepare to bind the price route to a validated transaction",oracleFee:o}:{...a,executionReady:!1,oracleFee:o}}async function xm(e={},t={}){if(String(e.side||"SELL").toUpperCase()!=="SELL")throw new Error("paraswap: agentic prepare currently supports exact-input SELL only");let n=Number(e.chainId||e.network||1),r=Lt(e.userAddress,"userAddress"),o=await Bt(e,t),a=o?.priceRoute,i=String(a?.contractAddress||"").toLowerCase();if(!i)throw new Error("paraswap: price route missing contractAddress");let s={srcToken:Lt(e.srcToken,"srcToken"),destToken:Lt(e.destToken,"destToken"),srcAmount:String(a.srcAmount||e.amount),destAmount:String(o.amountOutMinimum),priceRoute:a,userAddress:r,ignoreChecks:!1,ignoreGasEstimate:!1};e.receiver&&(s.receiver=Lt(e.receiver,"receiver"));let c=await b(`${ki(t)}/transactions/${n}`,{method:"POST",body:s,fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3});if(Number(c.chainId??n)!==n)throw new Error("paraswap: transaction chain mismatch");if(String(c.to||"").toLowerCase()!==i)throw new Error("paraswap: transaction target mismatch");if(c.from&&String(c.from).toLowerCase()!==r)throw new Error("paraswap: transaction sender mismatch");return P({provider:"paraswap",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:n,quote:o,autoSlippage:o.autoSlippage,requiresApproval:s.srcToken!=="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"?{token:s.srcToken,spender:a.tokenTransferProxy||i,amount:s.srcAmount}:null,transaction:{chainId:n,from:c.from||r,to:c.to,data:c.data,value:c.value??"0x0",...c.gas!=null?{gasLimit:c.gas}:{},slippageGuard:K(o.autoSlippage,{chainId:n,venue:c.to,data:c.data})}},{provider:"paraswap",kind:"paraswap-tx"})}async function Sm(e={}){let t=await Ei({chainId:1},e),n=Array.isArray(t?.tokens)?t.tokens.length:Object.keys(t?.tokens||{}).length;return{ok:n>0,tokenSample:n}}import{createHash as VS}from"node:crypto";import{getAddress as Cm,isAddress as Ii}from"ethers";var km="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",WS=Object.freeze(["lifi","paraswap","0x","cow","uniswap-v3"]),zS=Object.freeze(["lifi"]),Em=/^0x[0-9a-fA-F]{64}$/,jS=/^\d+$/;function G(e,t="invalid"){throw new Error(`rfq: ${e} ${t}`)}function Im(e,t){let n=Number(e);return(!Number.isSafeInteger(n)||n<=0)&&G(t,"must be a positive chainId"),n}function Xr(e,t){let n=String(e??"").trim();return(!jS.test(n)||BigInt(n)<=0n)&&G(t,"must be a positive integer string"),n}function GS(e,t){return e==null||e===""?null:Xr(e,t)}function Am(e,t){let n=String(e??"").trim();return n.toLowerCase()===km.toLowerCase()?km:(Ii(n)||G(t,"must be an EVM address or native token sentinel"),Cm(n))}function Pm(e,t){let n=String(e??"").trim();return Ii(n)||G(t,"must be an EVM address"),Cm(n)}function KS(e,t){return e==null||e===""?null:Pm(e,t)}function _m(e,t,n){return e===void 0?[...n]:(Array.isArray(e)||G(t,"must be an array"),e.map(r=>String(r).trim()).filter(Boolean))}function YS(e,{nowMs:t,maxDeadlineMs:n},r){let o=Number(e);return Number.isFinite(o)||G(r,"must be a finite millisecond timestamp"),o<=t&&G(r,"expired"),o>t+n&&G(r,"exceeds maxDeadlineMs"),Math.floor(o)}function Mt(e){if(Array.isArray(e))return e.map(Mt);if(e&&typeof e=="object"){let t={};for(let n of Object.keys(e).sort())e[n]!==void 0&&(t[n]=Mt(e[n]));return t}return e}function JS(e){return JSON.stringify(Mt(e))}function Qr(e){return`0x${VS("sha256").update(JS(e)).digest("hex")}`}function Tm(e,t){let n={...e};for(let r of t)delete n[r];return n}function XS(e){return Qr(Tm(e,["intentHash"]))}function QS(e){return Qr(Tm(e,["firmQuoteHash"]))}function Ai(e={},t={}){let n=Number(t.nowMs??Date.now()),r=Number(t.maxDeadlineMs??1800*1e3);(!Number.isFinite(n)||!Number.isFinite(r)||r<=0)&&G("time","is invalid");let o=Im(e.fromChainId??e.fromChain,"fromChainId"),a=Im(e.toChainId??e.toChain,"toChainId"),s=o===a?WS:zS,c={kind:"rfq-intent",version:1,fromChainId:o,toChainId:a,sellToken:Am(e.sellToken??e.tokenIn??e.fromToken,"sellToken"),buyToken:Am(e.buyToken??e.tokenOut??e.toToken,"buyToken"),sellAmount:Xr(e.sellAmount??e.amountIn??e.fromAmount,"sellAmount"),receiver:Pm(e.receiver??e.recipient??e.to,"receiver"),deadlineMs:YS(e.deadlineMs??e.deadline??e.expiresAtMs,{nowMs:n,maxDeadlineMs:r},"deadline"),minBuyAmount:GS(e.minBuyAmount??e.minOut??e.amountOutMin,"minBuyAmount"),allowedSources:_m(e.allowedSources,"allowedSources",s),allowedRouters:_m(e.allowedRouters,"allowedRouters",[]),slippageBps:Number.isFinite(Number(e.slippageBps))?Number(e.slippageBps):null,partialFill:e.partialFill===!0,metadata:e.metadata&&typeof e.metadata=="object"&&!Array.isArray(e.metadata)?Mt(e.metadata):{}};return c.slippageBps!=null&&(!Number.isInteger(c.slippageBps)||c.slippageBps<0||c.slippageBps>1e4)&&G("slippageBps","must be 0 to 10000"),c.intentId=e.intentId?String(e.intentId):Qr({seed:"rfq-intent",intent:c}).slice(0,34),c.intentHash=XS(c),Object.freeze(c)}function ZS(e){return(!e||typeof e!="object"||Array.isArray(e))&&G("artifact","required"),e.typedDataHash!=null&&!Em.test(String(e.typedDataHash))&&G("artifact.typedDataHash","must be bytes32"),e.calldataHash!=null&&!Em.test(String(e.calldataHash))&&G("artifact.calldataHash","must be bytes32"),e.to!=null&&!Ii(String(e.to))&&G("artifact.to","must be an address"),e.data!=null&&!/^0x(?:[0-9a-fA-F]{2})*$/.test(String(e.data))&&G("artifact.data","must be hex"),Mt(e)}function Nm(e,t={},n={}){(!e||e.kind!=="rfq-intent")&&G("intent","required");let r=Number(n.nowMs??Date.now()),o=Number(t.expiryMs??t.expiresAtMs??t.validUntilMs);Number.isFinite(o)||G("quote expiry","required"),o<=r&&G("quote","expired"),o>e.deadlineMs&&G("quote expiry","exceeds intent deadline");let a=String(t.source??t.provider??"").trim();a||G("source","required"),e.allowedSources.includes(a)||G("source","not allowed by intent");let i=Xr(t.amountOut??t.buyAmount,"amountOut"),s=Xr(t.minBuyAmount??t.minOut??i,"minBuyAmount");BigInt(s)>BigInt(i)&&G("minBuyAmount","exceeds amountOut");let c=ZS(t.artifact??t.executableArtifact??t.transaction??t.typedData),l=Number(t.quotedAtMs??t.timestampMs??n.nowMs??Date.now());Number.isFinite(l)||G("quotedAtMs","must be finite");let u=KS(t.router??t.settlementRouter??c.to,"router"),d={kind:"rfq-firm-quote",provider:"rfq",surface:"rfq",version:1,quoteId:String(t.quoteId??t.id??"").trim(),source:a,intentHash:e.intentHash,fromChainId:e.fromChainId,toChainId:e.toChainId,sellToken:e.sellToken,buyToken:e.buyToken,sellAmount:e.sellAmount,receiver:e.receiver,router:u,amountOut:i,minBuyAmount:s,quotedAtMs:Math.floor(l),expiryMs:Math.floor(o),artifact:c,maker:t.maker?String(t.maker):null,metadata:t.metadata&&typeof t.metadata=="object"&&!Array.isArray(t.metadata)?Mt(t.metadata):{}};return d.quoteId||(d.quoteId=Qr({seed:"rfq-quote",out:d}).slice(0,34)),d.firmQuoteHash=QS(d),Object.freeze(d)}function _n(e,t){return Array.isArray(e?.allowedSources)&&e.allowedSources.includes(t)}function Rm(e,t){return String(e?.[t]??"").trim()}function Cn(e,t){return Object.freeze({source:e,run:t})}function ek(e,t={}){if(!e||e.kind!=="rfq-intent")throw new Error("rfq: intent required");let n=t.env??process.env,r=t.providers??{},o=t.supportedUniV3Chains??ae,a=Number(e.fromChainId)===Number(e.toChainId),i=[];return _n(e,"lifi")&&i.push(Cn("lifi",async()=>{let c=await(r.lifiQuote??tn)({fromChain:e.fromChainId,toChain:e.toChainId,fromToken:e.sellToken,toToken:e.buyToken,fromAmount:e.sellAmount,fromAddress:e.receiver},t),l=c?.estimate??c?.[0]?.estimate??c;return{quoteId:c?.id??c?.routeId??null,amountOut:l?.toAmount??c?.toAmount,minBuyAmount:l?.toAmountMin??c?.toAmountMin??l?.toAmount??c?.toAmount,expiryMs:Date.now()+Number(t.defaultQuoteTtlMs??2e4),artifact:{type:"lifi-route",calldataHash:c?.transactionRequest?.data?await tk(t,c.transactionRequest.data):void 0,route:c},metadata:{tool:c?.tool??c?.toolDetails?.name??null}}})),a&&(_n(e,"paraswap")&&i.push(Cn("paraswap",async()=>{let c=await(r.paraswapPrice??Bt)({chainId:e.fromChainId,srcToken:e.sellToken,destToken:e.buyToken,amount:e.sellAmount,srcDecimals:t.decimalsIn,destDecimals:t.decimalsOut},t),l=c?.priceRoute??c;return{quoteId:l?.id??null,amountOut:l?.destAmount,minBuyAmount:c?.amountOutMinimum??l?.destAmount,expiryMs:Date.now()+Number(t.defaultQuoteTtlMs??2e4),artifact:{type:"paraswap-price-route",route:l},metadata:{contractAddress:l?.contractAddress??null}}})),_n(e,"0x")&&(Rm(n,"ZEROX_API_KEY")||Rm(n,"0X_API_KEY")||r.zeroxQuote)&&i.push(Cn("0x",async()=>{let c=await(r.zeroxQuote??rn)({chainId:e.fromChainId,sellToken:e.sellToken,buyToken:e.buyToken,sellAmount:e.sellAmount,taker:e.receiver},t);return{quoteId:c?.id??null,amountOut:c?.buyAmount??c?.grossBuyAmount,minBuyAmount:c?.minBuyAmount??c?.buyAmount,expiryMs:Date.now()+Number(t.defaultQuoteTtlMs??2e4),artifact:{type:"0x-transaction",to:c?.transaction?.to,data:c?.transaction?.data,value:c?.transaction?.value??"0"},metadata:{route:c?.route??null}}})),_n(e,"cow")&&i.push(Cn("cow",async()=>{let c=await(r.cowQuote??dt)({chainId:e.fromChainId,sellToken:e.sellToken,buyToken:e.buyToken,sellAmountBeforeFee:e.sellAmount,from:e.receiver,signingScheme:"eip712"},t),l=c?.quote??c;return{quoteId:c?.id??null,amountOut:l?.buyAmount,minBuyAmount:l?.buyAmount,expiryMs:Math.min(Number(l?.validTo??0)*1e3||Date.now()+Number(t.defaultQuoteTtlMs??2e4),e.deadlineMs),artifact:{type:"cow-order",order:l},metadata:{solver:!0}}})),_n(e,"uniswap-v3")&&o[Number(e.fromChainId)]&&i.push(Cn("uniswap-v3",async()=>{let c=await(r.uniV3QuoteExactIn??ot)({chainId:e.fromChainId,tokenIn:e.sellToken,tokenOut:e.buyToken,amountIn:e.sellAmount},t);return{quoteId:c?.id??null,amountOut:c?.amountOut,minBuyAmount:c?.minOut??c?.amountOutMinimum??c?.amountOut,expiryMs:Date.now()+Number(t.defaultQuoteTtlMs??2e4),artifact:{type:"uniswap-v3-quote",quoter:c?.quoter,fee:c?.fee},metadata:{onchain:!0}}}))),i}async function tk(e,t){return`0x${(await import("node:crypto")).createHash("sha256").update(String(t)).digest("hex")}`}async function nk(e,t){return Promise.race([Promise.resolve().then(e.run),new Promise((n,r)=>setTimeout(()=>r(new Error(`${e.source}: timeout`)),t))])}async function rk(e,t,n={}){let r=Number(n.timeoutMs??12e3),o=await Promise.allSettled(t.map(s=>nk(s,r))),a=[],i=[];for(let s=0;s<o.length;s++){let c=t[s],l=o[s];if(l.status==="rejected"){i.push({source:c.source,error:String(l.reason?.message||l.reason)});continue}try{a.push(Nm(e,{...l.value,source:c.source},n))}catch(u){i.push({source:c.source,error:String(u?.message||u)})}}return{quotes:a,failed:i}}function ok(e=[],t={}){let n=Number(t.nowMs??Date.now()),r=e.filter(i=>Number(i.expiryMs??0)>n);r.sort((i,s)=>{let c=BigInt(s.minBuyAmount??0)-BigInt(i.minBuyAmount??0);if(c!==0n)return c>0n?1:-1;let l=BigInt(s.amountOut??0)-BigInt(i.amountOut??0);return l>0n?1:l<0n?-1:0});let o=r.map(i=>({...i,scoreBasis:"minBuyAmount"})),a=[];return o.length||a.push("no RFQ source returned a usable firm quote"),e.length!==o.length&&a.push("expired RFQ quotes were excluded from ranking"),{best:o[0]??null,quotes:o,failed:[],warnings:a}}async function Om(e,t={}){let n=ek(e,t),{quotes:r,failed:o}=await rk(e,n,t),a=ok(r,t);return{kind:"rfq-result",intent:e,best:a.best,quotes:a.quotes,failed:o,warnings:[...a.warnings],sourcesTried:n.length,sourcesAnswered:r.length}}function Lm(e={},t={}){return Ai(e,t)}async function Bm(e={},t={}){let n=e.intent?.kind==="rfq-intent"?e.intent:Ai(e,t);return Om(n,t)}async function Mm(){return{ok:!0,provider:"rfq",mode:"intent-rfq",execution:"prepare"}}_();var ik="https://app.across.to";function _i(e={}){return(e.baseUrl||process.env.ACROSS_API_URL||ik).replace(/\/$/,"")}async function $m(e={}){try{let t=await b(`${_i(e)}/api/pools?token=0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??1e4});return{ok:t&&typeof t.totalPoolSize=="string",provider:"across-bridge",l1Token:t.l1Token}}catch(t){return{ok:!1,provider:"across-bridge",error:String(t.message||t).slice(0,120)}}}async function Um(e={},t={}){let n=String(e.l1Token||"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2");return b(`${_i(t)}/api/pools?token=${encodeURIComponent(n)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function Dm(e={},t={}){let n=new URLSearchParams;return e.originChainId&&n.set("originChainId",String(e.originChainId)),e.destinationChainId&&n.set("destinationChainId",String(e.destinationChainId)),e.token&&n.set("token",String(e.token)),e.amount&&n.set("amount",String(e.amount)),b(`${_i(t)}/api/suggested-fees?${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}_();var ck="https://api.beefy.finance";function Ci(e={}){return(e.baseUrl||process.env.BEEFY_API_URL||ck).replace(/\/$/,"")}async function Fm(e={}){try{let t=await b(`${Ci(e)}/apy`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??15e3}),n=Object.keys(t||{});return{ok:n.length>0,provider:"beefy-yields",vaultCount:n.length}}catch(t){return{ok:!1,provider:"beefy-yields",error:String(t.message||t).slice(0,120)}}}async function qm(e={},t={}){let n=await b(`${Ci(t)}/apy`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4});if(e.chain){let r=String(e.chain).toLowerCase(),o={};for(let[a,i]of Object.entries(n))String(a).toLowerCase().startsWith(r)&&(o[a]=i);return o}return n}async function Hm(e={}){return b(`${Ci(e)}/apy/breakdown`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??25e3})}_();var uk="https://public-api.birdeye.so";function Vm(e={}){return(e.baseUrl||process.env.BIRDEYE_API_URL||uk).replace(/\/$/,"")}async function Wm(e={}){try{let t=await b(`${Vm(e)}/public/tokenlist?sort_by=v24hUSD&sort_type=desc&offset=0&limit=1`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??1e4});return{ok:Array.isArray(t?.data)&&t.data.length>0,provider:"birdeye-tokens"}}catch(t){return{ok:!1,provider:"birdeye-tokens",error:String(t.message||t).slice(0,120)}}}async function zm(e={},t={}){let n=String(e.sortBy||"v24hUSD"),r=String(e.sortType||"desc"),o=Math.max(0,Number(e.offset||0)),a=Math.min(50,Math.max(1,Number(e.limit||20)));return b(`${Vm(t)}/public/tokenlist?sort_by=${encodeURIComponent(n)}&sort_type=${encodeURIComponent(r)}&offset=${o}&limit=${a}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}_();var pk="https://api.celenium.io";function Pi(e={}){return(e.baseUrl||process.env.CELENIUM_API_URL||pk).replace(/\/$/,"")}async function jm(e={}){try{let t=await b(`${Pi(e)}/v1/stats`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??1e4});return{ok:t&&t.blobs_count!=null,provider:"celestia-da"}}catch(t){return{ok:!1,provider:"celestia-da",error:String(t.message||t).slice(0,120)}}}async function Gm(e={}){return b(`${Pi(e)}/v1/stats`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??15e3})}async function Km(e={},t={}){let n=Number(e.height);if(n&&(!Number.isFinite(n)||n<1))throw new Error("celestia-da: height must be positive");let r=n?`/v1/block/${n}`:"/v1/block";return b(`${Pi(t)}${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}_();var fk="https://api.mainnet-beta.solana.com";function hk(e={}){return(e.rpcUrl||process.env.SOLANA_RPC_URL||fk).replace(/\/$/,"")}async function Zr(e,t,n={}){let r=hk(n),o=JSON.stringify({jsonrpc:"2.0",id:1,method:e,params:t}),s=await(await(n.fetchImpl||fetch)(r,{method:"POST",headers:{"content-type":"application/json",accept:"application/json"},body:o,signal:AbortSignal.timeout(n.timeoutMs??2e4)})).json();if(s.error)throw new Error(`das-assets ${e}: ${s.error.message||JSON.stringify(s.error)}`);return s.result}async function Ym(e={}){try{let t=await Zr("getAsset",{id:"12He3nqt2XLbpuWGdwsJBNcomm7r3M8Kh6Dj9w7ZAK9"},e);return{ok:t&&typeof t=="object",provider:"das-assets"}}catch(t){return{ok:!1,provider:"das-assets",error:String(t.message||t).slice(0,120)}}}async function Jm(e={},t={}){let n=String(e.ownerAddress||"").trim();if(!n)throw new Error("das-assets: ownerAddress is required");let r=Math.max(1,Number(e.page||1)),o=Math.min(1e3,Math.max(1,Number(e.limit||50)));return Zr("getAssetsByOwner",{ownerAddress:n,page:r,limit:o,...e.sortBy?{sortBy:{sortBy:e.sortBy,sortDirection:e.sortDirection||"asc"}}:{}},t)}async function Xm(e={},t={}){let n=Math.max(1,Number(e.page||1)),r=Math.min(100,Math.max(1,Number(e.limit||20))),o={page:n,limit:r};return e.ownerAddress&&(o.ownerAddress=String(e.ownerAddress)),e.collectionId&&(o.collectionId=String(e.collectionId)),e.creatorAddress&&(o.creatorAddress=String(e.creatorAddress)),e.delegate&&(o.delegate=String(e.delegate)),Zr("searchAssets",o,t)}async function Qm(e={},t={}){let n=String(e.assetId||"").trim();if(!n)throw new Error("das-assets: assetId is required");return Zr("getAssetProof",{id:n},t)}_();var gk="https://api.l2beat.com";function Ti(e={}){return(e.baseUrl||process.env.L2BEAT_API_URL||gk).replace(/\/$/,"")}async function Zm(e={}){try{let t=await b(`${Ti(e)}/api/scaling/tvl`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??15e3});return{ok:t&&typeof t.totalUsd=="string",provider:"l2beat-tvl"}}catch(t){return{ok:!1,provider:"l2beat-tvl",error:String(t.message||t).slice(0,120)}}}async function ef(e={},t={}){let n=await b(`${Ti(t)}/api/scaling/tvl`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4});if(e.project){let r=String(e.project).toLowerCase(),o=n?.projects||{},a=Object.entries(o).find(([i])=>String(i).toLowerCase()===r);return a?{[a[0]]:a[1]}:{}}return n}async function tf(e={},t={}){return b(`${Ti(t)}/api/scaling/activity`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}_();var wk="https://api.spark.fi";function Ni(e={}){return(e.baseUrl||process.env.SPARK_API_URL||wk).replace(/\/$/,"")}async function nf(e={}){try{return{ok:(await b(`${Ni(e)}/v1/savings/spark/mainnet/usdc`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??1e4}))?.data?.vault?.address!=null,provider:"spark-lend"}}catch(t){return{ok:!1,provider:"spark-lend",error:String(t.message||t).slice(0,120)}}}async function rf(e={},t={}){let n=String(e.protocol||"spark"),r=String(e.chain||"mainnet"),o=e.token?String(e.token).toLowerCase():null;return o?b(`${Ni(t)}/v1/savings/${encodeURIComponent(n)}/${encodeURIComponent(r)}/${encodeURIComponent(o)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}):b(`${Ni(t)}/v1/savings/${encodeURIComponent(n)}/${encodeURIComponent(r)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}_();var xk="https://api.symbiotic.fi";function Ri(e={}){return(e.baseUrl||process.env.SYMBIOTIC_API_URL||xk).replace(/\/$/,"")}async function of(e={}){try{let t=await b(`${Ri(e)}/v1/vaults`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??15e3});return{ok:Array.isArray(t)&&t.length>0,provider:"symbiotic-restaking",count:t.length}}catch(t){return{ok:!1,provider:"symbiotic-restaking",error:String(t.message||t).slice(0,120)}}}async function af(e={},t={}){let n=Math.min(200,Math.max(1,Number(e.limit||50))),r=await b(`${Ri(t)}/v1/vaults?limit=${n}&offset=${Math.max(0,Number(e.offset||0))}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4});return e.approvedOnly?r.filter(o=>o.approved===!0):r}async function sf(e={},t={}){let n=String(e.address||"").trim();if(!n)throw new Error("symbiotic-restaking: address is required");return b(`${Ri(t)}/v1/vaults/${encodeURIComponent(n)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}_();var kk="https://staking-api.polygon.technology/api/v2",Ek=18,Ik=200,Ak=50,_k=new Set(["id","totalStaked","selfStake","delegatedStake","commissionPercent","uptimePercent","performanceIndex"]);function Li(e={}){return String(e.baseUrl||process.env.POLYGON_STAKING_API_URL||kk).replace(/\/$/,"")}function Ck(e,t="id"){let n=String(e??"").trim();if(!/^\d+$/.test(n))throw new Error(`polygon-staking: ${t} must be a positive integer validator id`);let r=Number(n);if(!Number.isSafeInteger(r)||r<1)throw new Error(`polygon-staking: ${t} must be a positive integer validator id`);return r}function Pk(e,t=Ak){let n=Number(e??t);return Number.isFinite(n)?Math.min(Ik,Math.max(1,Math.trunc(n))):t}function Oi(e){let t=Number(e);return Number.isFinite(t)?t/10**Ek:null}async function Bi(e,t={}){let n=await b(`${Li(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3});if(typeof n=="string")throw new Error(`polygon-staking GET ${e}: non-JSON response`);if(n?.success===!1){let r=n?.message||n?.error||n?.status||"request rejected";throw new Error(`polygon-staking GET ${e}: ${r}`)}return n}function cf(e={}){return{id:e.id??null,name:typeof e.name=="string"?e.name.trim():null,status:e.status??null,currentState:e.currentState??null,owner:e.owner??null,signer:e.signer??null,contractAddress:e.contractAddress??null,commissionPercent:e.commissionPercent??null,uptimePercent:e.uptimePercent??null,performanceIndex:e.performanceIndex??null,delegationEnabled:e.delegationEnabled??null,activationEpoch:e.activationEpoch??null,deactivationEpoch:e.deactivationEpoch??null,jailEndEpoch:e.jailEndEpoch??null,missedLatestCheckpointCount:e.missedLatestCheckpointcount??null,totalStakedRaw:e.totalStaked??null,selfStakeRaw:e.selfStake??null,delegatedStakeRaw:e.delegatedStake??null,totalStakedPolApprox:Oi(e.totalStaked),selfStakePolApprox:Oi(e.selfStake),delegatedStakePolApprox:Oi(e.delegatedStake),stakePrecision:"approximate \u2014 upstream serves wei-scale as float64"}}async function lf(e={},t={}){let n=await Bi("/validators",t),r=Array.isArray(n?.result)?n.result:[],o=n?.summary?.total??r.length;if(e.status){let d=String(e.status).toLowerCase();r=r.filter(p=>String(p?.status||"").toLowerCase()===d)}if(e.currentState){let d=String(e.currentState).toUpperCase();r=r.filter(p=>String(p?.currentState||"").toUpperCase()===d)}if(e.delegationEnabled!=null){let d=!!e.delegationEnabled;r=r.filter(p=>!!p?.delegationEnabled===d)}let a=_k.has(String(e.sortBy))?String(e.sortBy):"id",i=String(e.direction||"").toUpperCase()==="DESC";r=[...r].sort((d,p)=>{let m=Number(d?.[a]??0),f=Number(p?.[a]??0),h=Number.isFinite(m)&&Number.isFinite(f)?m-f:0;return i?-h:h});let s=r.length,c=Math.max(0,Math.trunc(Number(e.offset||0))||0),l=Pk(e.limit),u=r.slice(c,c+l);return{provider:"polygon-staking",chainId:137,count:u.length,matched:s,total:o,limit:l,offset:c,sortBy:a,direction:i?"DESC":"ASC",paginatedBy:"client \u2014 upstream /validators ignores limit/offset",validators:e.raw?u:u.map(cf)}}async function uf(e={},t={}){let n=Ck(e.id??e.validatorId,"id"),o=(await Bi(`/validators/${n}`,t))?.result;if(!o||typeof o!="object")throw new Error(`polygon-staking: validator ${n} not found`);return{provider:"polygon-staking",chainId:137,id:n,validator:e.raw?o:{...cf(o),delegatorCount:o.delegatorCount??null,checkpointsSigned:o.checkpointsSigned??null,checkpointsMissed:o.checkpointsMissed??null,isInAuction:o.isInAuction??null,auctionAmount:o.auctionAmount??null,delegatorUnclaimedRewardsRaw:o.delegatorUnclaimedRewards??null,validatorUnclaimedRewardsRaw:o.validatorUnclaimedRewards??null,claimedRewardRaw:o.claimedReward??null,description:typeof o.description=="string"?o.description:null,logoUrl:o.logoUrl??null},raw:e.raw?void 0:o}}async function df(e={}){try{let t=await Bi("/validators",{...e,timeoutMs:e.timeoutMs??1e4}),n=Array.isArray(t?.result)?t.result:[];return{ok:n.length>0,provider:"polygon-staking",chainId:137,baseUrl:Li(e),validatorTotal:t?.summary?.total??n.length,exec:!1}}catch(t){return{ok:!1,provider:"polygon-staking",chainId:137,baseUrl:Li(e),error:String(t?.message||t),exec:!1}}}_();var Nk="https://api.v3.aave.com/graphql",bP=Object.freeze([1,10,56,100,137,146,232,324,1088,1868,5e3,42161,42220,43114,57073,59144,534352]),Rk=(e={})=>e.baseUrl||process.env.AAVE_V3_API_URL||Nk;async function eo(e,t,n={}){let r=await b(Rk(n),{method:"POST",body:{query:e,variables:t},fetchImpl:n.fetchImpl,timeoutMs:n.timeoutMs??2e4});if(r?.errors?.length)throw new Error(`aave-v3: ${r.errors.map(o=>o?.message||String(o)).join("; ")}`);return r}var Ok=`query Markets($request: MarketsRequest!) {
|
|
187
|
+
`)];return{family:"bitcoin",network:r,projectName:t,protocolModel:hl["bitcoin-tapscript-vault"].protocolModel,policy:{descriptorType:"tr",miniscript:c,cooperativeMiniscript:a,recoveryMiniscript:A,descriptor:g,address:h.address,scriptPubKey:h.scriptPubKey,threshold:o,signerCount:n.length,recoveryDelayBlocks:s.toString()},authorityReport:{cooperativeSigners:n,threshold:o,recoveryPubkey:i,recoveryDelayBlocks:s.toString()},files:m,gate:{sourceChecks:{ok:o<=n.length&&s>0n&&new Set([...n,i]).size===n.length+1,checks:["bounded threshold","unique keys","positive BIP68 delay","separate recovery key"]},compiler:{tool:"rust-miniscript or equivalent",requiredBeforeFunding:!0,run:!1},tests:{tool:"regtest/signet policy satisfaction",requiredBeforeFunding:!0,run:!1},simulation:{network:r==="mainnet"?"signet or regtest required first":r,requiredBeforeFunding:!0,run:!1},firmAudit:!1,disclaimer:Kp},psbtPrepared:!1,fundingPrepared:!1}}function Zp(){return Object.values(hl).map(e=>({...e,disclaimer:Kp}))}async function hD(e={}){let t=String(e.templateId||"").trim(),r=hl[t];r||Qt("protocol-templates",`unknown native template "${t}"`);let n=t==="solana-safe-vault"?n9(e):o9(e),o=r9(n.files);return L({provider:"protocol-templates",kind:"native-protocol-build",templateId:t,supportStatus:r.supportStatus,prepareOnly:!0,firmAudit:!1,artifactHash:o,...n,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,note:"Deterministic native protocol source bundle only. Compile, test, simulate, and separately prepare deployment/funding before user signature."},{provider:"protocol-templates",kind:"native-protocol-build"})}M();var i9="https://api.geckoterminal.com/api/v2",gl=(e={})=>(e.baseUrl||process.env.GECKOTERMINAL_API_URL||i9).replace(/\/$/,""),ai=e=>encodeURIComponent(String(e));async function Xp(e={},t={}){let r=Math.max(1,Number(e.page||1));return C(`${gl(t)}/networks?page=${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function gD(e={},t={}){if(!e.network||!e.poolAddress)throw new Error("network and poolAddress required");return C(`${gl(t)}/networks/${ai(e.network)}/pools/${ai(e.poolAddress)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function pD(e={},t={}){if(!e.network||!(e.address||e.tokenAddress))throw new Error("network and token address required");return C(`${gl(t)}/networks/${ai(e.network)}/tokens/${ai(e.address||e.tokenAddress)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function fD(e={},t={}){if(!e.network||!e.poolAddress)throw new Error("network and poolAddress required");let r=["minute","hour","day"].includes(e.timeframe)?e.timeframe:"hour",n=new URLSearchParams;return n.set("aggregate",String(Math.max(1,Number(e.aggregate||1)))),n.set("limit",String(Math.min(1e3,Math.max(1,Number(e.limit||168))))),e.beforeTimestamp!=null&&n.set("before_timestamp",String(e.beforeTimestamp)),e.currency&&n.set("currency",String(e.currency)),e.token&&n.set("token",String(e.token)),C(`${gl(t)}/networks/${ai(e.network)}/pools/${ai(e.poolAddress)}/ohlcv/${r}?${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function mD(e={}){let t=await Xp({page:1},e);return{ok:Array.isArray(t?.data)&&t.data.length>0,networkSample:t?.data?.length||0}}M();De();import{Interface as CD,getAddress as QD,isAddress as a9}from"ethers";var A9="https://api.curve.finance/v1",yD=(e={})=>(e.baseUrl||process.env.CURVE_API_URL||A9).replace(/\/$/,""),c9=Object.freeze({1:"0x45312ea0eFf7E09C83CBE249fa1d7598c4C8cd4e",10:"0x0DCDED3545D565bA3B19E683431381007245d983",56:"0xA72C85C258A81761433B4e8da60505Fe3Dd551CC",137:"0x0DCDED3545D565bA3B19E683431381007245d983",988:"0xFF5Cb29241F002fFeD2eAa224e3e996D24A6E8d1",999:"0xd2002373543Ce3527023C75e7518C274A51ce712",4663:"0xFF5Cb29241F002fFeD2eAa224e3e996D24A6E8d1",8453:"0x4f37A9d177470499A2dD084621020b023fcffc1F",42161:"0x2191718CD32d02B8E60BAdFFeA33E4B5DD9A0A0D",43114:"0x0DCDED3545D565bA3B19E683431381007245d983"}),wD="0x0000000000000000000000000000000000000000",ef=new CD(["function get_dy(address[11] route,uint256[5][5] swap_params,uint256 amount,address[5] pools) view returns (uint256)","function exchange(address[11] route,uint256[5][5] swap_params,uint256 amount,uint256 expected,address[5] pools,address receiver) payable returns (uint256)"]),ED=new CD(["function coins(uint256) view returns (address)"]);function bD(e){let t=c9[Number(e)];if(!t)throw new Error(`curve-router-ng: unsupported chainId ${e}`);return t}function ta(e,t){if(!a9(e))throw new Error(`${t} must be a valid EVM address`);return QD(e)}function l9(e,t){let r;try{r=BigInt(String(e))}catch{throw new Error(`${t} must be an integer string`)}if(r<=0n)throw new Error(`${t} must be positive`);return r}function ID(e,t,r,n){let o=Number(e);if(!Number.isInteger(o)||o<r||o>n)throw new Error(`${t} must be an integer ${r}..${n}`);return o}function kD(e,t,r){return[e,t,r,...Array(8).fill(wD)]}function SD(e,t,r,n){return[[BigInt(e),BigInt(t),1n,BigInt(r),BigInt(n)],...Array.from({length:4},()=>[0n,0n,0n,0n,0n])]}function xD(e){return[e,...Array(4).fill(wD)]}async function u9({chainId:e,pool:t,nCoins:r,rpcCall:n,opts:o}){let i=[];for(let s=0;s<r;s++){let a=ED.encodeFunctionData("coins",[s]),A=await n(e,"eth_call",[{to:t,data:a},o.blockTag||"latest"],o),c=ED.decodeFunctionResult("coins",A);i.push(QD(c[0]))}return i}function BD(e,t,r){let n=t.toLowerCase(),o=e.findIndex(i=>i.toLowerCase()===n);if(o<0)throw new Error(`Curve pool does not contain ${r}`);return o}async function DD(e={}){return C(`${yD(e)}/openapi.json`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs})}async function tf(e={},t={}){let r=String(e.chain||e.network||"ethereum").toLowerCase(),n=String(e.registry||"main").toLowerCase();if(!/^[a-z0-9-]+$/.test(r)||!/^[a-z0-9-]+$/.test(n))throw new Error("invalid Curve chain or registry");return C(`${yD(t)}/getPools/${r}/${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function vD(e={}){let t=await tf({chain:"ethereum",registry:"main"},e),r=t?.data?.poolData?.length||0;return{ok:t?.success===!0&&r>0,poolSample:r}}async function rf(e={},t={}){let r=Number(e.chainId??8453),n=bD(r),o=ta(e.pool,"curve pool"),i=ta(e.tokenIn,"curve tokenIn"),s=ta(e.tokenOut,"curve tokenOut"),a=l9(e.amountIn,"curve amountIn"),A=ID(e.nCoins??2,"curve nCoins",2,8),c=ID(e.poolType,"curve poolType",1,4),l=t.rpcCall||V,u=await u9({chainId:r,pool:o,nCoins:A,rpcCall:l,opts:t}),d=BD(u,i,"tokenIn"),h=BD(u,s,"tokenOut");if(d===h)throw new Error("Curve token indexes must differ");let g=kD(i,o,s),p=SD(d,h,c,A),m=xD(o),f=ef.encodeFunctionData("get_dy",[g,p,a,m]),B=await l(r,"eth_call",[{to:n,data:f},e.blockTag||"latest"],t),E=ef.decodeFunctionResult("get_dy",B),I=BigInt(E[0]);if(I<=0n)throw new Error("curve quote returned zero output");return ce({venue:"curve",router:n,chainId:r,pool:o,tokenIn:i,tokenOut:s,amountIn:a.toString(),amountOut:I.toString(),nCoins:A,poolType:c,swapType:1,i:d,j:h,route:g,swapParams:p.map(Q=>Q.map(R=>R.toString())),pools:m},{chainId:r,venue:n,amountOut:I.toString(),liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps})}async function RD(e={},t={}){let r=Number(e.chainId??8453),n=bD(r),o=ta(e.sender||e.from||e.fromAddress||e.receiver,"curve sender"),i=ta(e.receiver||e.recipient||o,"curve receiver"),s=await rf({...e,sender:o},t),a=kD(s.tokenIn,s.pool,s.tokenOut),A=SD(s.i,s.j,s.poolType,s.nCoins),c=xD(s.pool),l=ef.encodeFunctionData("exchange",[a,A,BigInt(s.amountIn),BigInt(s.amountOutMinimum),c,i]);return L({provider:"curve",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:r,quote:s,autoSlippage:s.autoSlippage,requiresApproval:{token:s.tokenIn,spender:n,amount:s.amountIn},transaction:{chainId:r,from:o,to:n,data:l,value:"0",slippageGuard:Qe(s.autoSlippage,{chainId:r,venue:n,data:l})}},{provider:"curve",kind:"curve-tx"})}M();De();import{Interface as nf,getAddress as PD,isAddress as h9}from"ethers";var ND=Object.freeze({42161:"https://arbitrum-api.gmxinfra.io",43114:"https://avalanche-api.gmxinfra.io"}),FD=Object.freeze({42161:{name:"arbitrum",api:ND[42161],exchangeRouter:"0x1C3fa76e6E1088bCE750f23a5BFcffa1efEF6A41",router:"0x7452c558d45f8afC8c83dAe62C3f8A5BE19c71f6",orderVault:"0x31eF83a530Fde1B38EE9A18093A333D8Bbbc40D5",dataStore:"0xFD70de6b91282D8017aA4E741e9Ae325CAb992d8",reader:"0x470fbC46bcC0f16532691Df360A07d8Bf5ee0789",eventEmitter:"0xC8ee91A54287DB53897056e12D9819156D3822Fb",wnt:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",usdc:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831"},43114:{name:"avalanche",api:ND[43114],exchangeRouter:"0x8f550E53DFe96C055D5Bdb267c21F268fCAF63B2",router:"0x820F5FfC5b525cD4d88Cd91aCf2c28F16530Cc68",orderVault:"0xD3D60D22d415aD43b7e64b510D86A30f19B1B12C",dataStore:"0x2F0b22339414ADeD7D5F06f9D604c7fF5b2fe3f6",reader:"0x62Cb8740E6986B29dC671B2EB596676f60590A5B",eventEmitter:"0xDb17B211c34240B014ab6d61d4A31FA0C0e20c26",wnt:"0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7",usdc:"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"}}),MD="0x0000000000000000000000000000000000000000",g9=`0x${"0".repeat(64)}`,UD=Object.freeze({marketSwap:0,limitSwap:1,marketIncrease:2,limitIncrease:3,marketDecrease:4,limitDecrease:5,stopLossDecrease:6,stopIncrease:8}),LD=Object.freeze({noSwap:0,swapPnlTokenToCollateralToken:1,swapCollateralTokenToPnlToken:2}),pl=new nf(["function multicall(bytes[] data) payable returns (bytes[] results)","function sendTokens(address token,address receiver,uint256 amount) payable","function sendWnt(address receiver,uint256 amount) payable","function createOrder(((address receiver,address cancellationReceiver,address callbackContract,address uiFeeReceiver,address market,address initialCollateralToken,address[] swapPath) addresses,(uint256 sizeDeltaUsd,uint256 initialCollateralDeltaAmount,uint256 triggerPrice,uint256 acceptablePrice,uint256 executionFee,uint256 callbackGasLimit,uint256 minOutputAmount,uint256 validFromTime) numbers,uint8 orderType,uint8 decreasePositionSwapType,bool isLong,bool shouldUnwrapNativeToken,bool autoCancel,bytes32 referralCode,bytes32[] dataList) params) payable returns (bytes32)","function cancelOrder(bytes32 key) payable"]),_D=new nf(["function getAccountPositions(address dataStore,address account,uint256 start,uint256 end) view returns (bytes)","function getAccountOrders(address dataStore,address account,uint256 start,uint256 end) view returns (bytes)","function getOrder(address dataStore,bytes32 key) view returns (bytes)"]),p9=new nf(["event EventLog1(address msgSender,string eventName,string indexed eventNameHash,bytes32 indexed topic1,((tuple(string key,address value)[] items,tuple(string key,address[] value)[] arrayItems),(tuple(string key,uint256 value)[] items,tuple(string key,uint256[] value)[] arrayItems),(tuple(string key,int256 value)[] items,tuple(string key,int256[] value)[] arrayItems),(tuple(string key,bool value)[] items,tuple(string key,bool[] value)[] arrayItems),(tuple(string key,bytes32 value)[] items,tuple(string key,bytes32[] value)[] arrayItems),(tuple(string key,bytes value)[] items,tuple(string key,bytes[] value)[] arrayItems),(tuple(string key,string value)[] items,tuple(string key,string[] value)[] arrayItems)) eventData)","event EventLog2(address msgSender,string eventName,string indexed eventNameHash,bytes32 indexed topic1,bytes32 indexed topic2,((tuple(string key,address value)[] items,tuple(string key,address[] value)[] arrayItems),(tuple(string key,uint256 value)[] items,tuple(string key,uint256[] value)[] arrayItems),(tuple(string key,int256 value)[] items,tuple(string key,int256[] value)[] arrayItems),(tuple(string key,bool value)[] items,tuple(string key,bool[] value)[] arrayItems),(tuple(string key,bytes32 value)[] items,tuple(string key,bytes32[] value)[] arrayItems),(tuple(string key,bytes value)[] items,tuple(string key,bytes[] value)[] arrayItems),(tuple(string key,string value)[] items,tuple(string key,string[] value)[] arrayItems)) eventData)"]),f9=Object.freeze({OrderCreated:"created",OrderUpdated:"updated",OrderExecuted:"executed",OrderCancelled:"cancelled",OrderFrozen:"frozen"});function ci(e){let t=Number(e??42161),r=FD[t];if(!r)throw new Error(`gmx: unsupported chainId ${e} (supported: ${Object.keys(FD).join(", ")})`);return{chainId:t,...r}}function fl(e,t={}){let r=ci(e);return(t.baseUrl||r.api).replace(/\/$/,"")}function yt(e,t){if(!h9(e))throw new Error(`${t} must be a valid EVM address`);return PD(e)}function se(e){return PD(e).toLowerCase()}function Ai(e,t){let r;try{r=BigInt(String(e))}catch{throw new Error(`${t} must be an integer string`)}if(r<=0n)throw new Error(`${t} must be positive`);return r}function Nn(e,t){let r;try{r=BigInt(String(e??"0"))}catch{throw new Error(`${t} must be an integer string`)}if(r<0n)throw new Error(`${t} must be non-negative`);return r}function m9(e,t=50){let r=Number(e??t);if(!Number.isFinite(r)||r<0||r>100)throw new Error("gmx maxSlippageBps must be 0..100");return Math.floor(r)}function E9(e){let t=String(e||"marketIncrease").trim();if(!(t in UD))throw new Error(`gmx unsupported orderType ${t}`);if(!["marketIncrease","marketDecrease"].includes(t))throw new Error("gmx prepare currently supports marketIncrease and marketDecrease only");return{key:t,code:UD[t]}}function I9(e){let t=String(e||"noSwap").trim();if(!(t in LD))throw new Error(`gmx unsupported decreasePositionSwapType ${t}`);return{key:t,code:LD[t]}}function B9(e,t){return Array.isArray(e)?e:Array.isArray(e?.[t])?e[t]:[]}function C9(e,t){let r=se(t);return e.find(n=>se(n.marketToken||n.market||n.address)===r)||null}function Q9(e,t){let r=se(t);return e.find(n=>se(n.tokenAddress||n.address)===r)||null}function y9({ticker:e,isLong:t,typeKey:r,maxSlippageBps:n}){let o=Ai(e?.minPrice,"gmx minPrice"),i=Ai(e?.maxPrice,"gmx maxPrice"),s=BigInt(n),a=10000n;return r==="marketIncrease"?(t?i*(a+s)/a:o*(a-s)/a).toString():(t?o*(a-s)/a:i*(a+s)/a).toString()}function w9(e,t){let r=t?e.availableLiquidityLong:e.availableLiquidityShort;try{return BigInt(String(r??"0"))}catch{return 0n}}function b9(e){let t=String(e||"").toLowerCase();return/^0x[0-9a-f]{64}$/.test(t)?`0x${t.slice(-40)}`:null}function Xt(e,t,r=n=>n){let o=Array.from(e?.items||e?.[0]||[]).find(i=>String(i?.key??i?.[0]??"")===t);return o?r(o.value??o[1]):null}function k9(e={}){let t=e.addressItems||e[0],r=e.uintItems||e[1],n=e.boolItems||e[3],o=e.bytes32Items||e[4],i=e.stringItems||e[6];return{account:Xt(t,"account",s=>se(s)),market:Xt(t,"market",s=>se(s)),initialCollateralToken:Xt(t,"initialCollateralToken",s=>se(s)),key:Xt(o,"key",s=>String(s).toLowerCase()),reason:Xt(i,"reason",s=>String(s)),sizeDeltaUsd:Xt(r,"sizeDeltaUsd",s=>BigInt(s).toString()),initialCollateralDeltaAmount:Xt(r,"initialCollateralDeltaAmount",s=>BigInt(s).toString()),executionFee:Xt(r,"executionFee",s=>BigInt(s).toString()),acceptablePrice:Xt(r,"acceptablePrice",s=>BigInt(s).toString()),isLong:Xt(n,"isLong",s=>!!s)}}function S9(e={},t){if(se(e.address)!==se(t.eventEmitter))return null;let r;try{r=p9.parseLog({topics:e.topics,data:e.data})}catch{return null}let n=String(r?.args?.eventName||""),o=f9[n];if(!o)return null;let i=k9(r.args.eventData||{}),s=(i.key||String(r.args.topic1||"")).toLowerCase(),a=i.account||b9(r.args.topic2);return{eventName:n,status:o,orderKey:s,account:a?se(a):null,market:i.market,initialCollateralToken:i.initialCollateralToken,sizeDeltaUsd:i.sizeDeltaUsd,initialCollateralDeltaAmount:i.initialCollateralDeltaAmount,executionFee:i.executionFee,acceptablePrice:i.acceptablePrice,isLong:i.isLong,reason:i.reason,logIndex:e.logIndex==null?null:Number.parseInt(String(e.logIndex),16)}}function TD(e){return{executed:5,cancelled:4,frozen:3,created:2,updated:1}[e]||0}function x9(e=[],{chainId:t}={}){let r=ci(t);return(Array.isArray(e)?e:[]).map(n=>S9(n,r)).filter(Boolean).sort((n,o)=>(n.logIndex??0)-(o.logIndex??0))}async function OD(e={},t={}){return C(`${fl(e.chainId??42161,t)}/markets`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function of(e={},t={}){return C(`${fl(e.chainId??42161,t)}/markets/info`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function HD(e={},t={}){return C(`${fl(e.chainId??42161,t)}/tokens`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function ml(e={},t={}){return C(`${fl(e.chainId??42161,t)}/prices/tickers`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function GD(e={}){let t=await ml({chainId:42161},e);return{ok:Array.isArray(t)&&t.length>0,tickerSample:Array.isArray(t)?t.length:0}}async function qD(e={},t={}){let r=ci(e.chainId??42161),n=yt(e.account||e.owner||e.user,"gmx account"),o=Nn(e.start??0,"gmx start"),i=Nn(e.end??e.limit??20,"gmx end"),s=_D.encodeFunctionData("getAccountPositions",[r.dataStore,n,o,i]),A=await(t.rpcCall||V)(r.chainId,"eth_call",[{to:r.reader,data:s},e.blockTag||"latest"],t);return{provider:"gmx",chainId:r.chainId,reader:se(r.reader),dataStore:se(r.dataStore),account:se(n),raw:A}}async function YD(e={},t={}){let r=ci(e.chainId??42161),n=String(e.key||e.orderKey||"").trim();if(!/^0x[0-9a-fA-F]{64}$/.test(n))throw new Error("gmx order key must be bytes32 hex");let o=_D.encodeFunctionData("getOrder",[r.dataStore,n]),s=await(t.rpcCall||V)(r.chainId,"eth_call",[{to:r.reader,data:o},e.blockTag||"latest"],t);return{provider:"gmx",chainId:r.chainId,reader:se(r.reader),dataStore:se(r.dataStore),key:n,raw:s}}async function VD(e={},t={}){let r=ci(e.chainId??42161),n=t.receipt||await bs({chainId:r.chainId,txHash:e.txHash,expectedTo:e.expectedTo||r.exchangeRouter},t),o=String(e.txHash||n.txHash||"").toLowerCase();if(n.ok!==!0)return{ok:!1,provider:"gmx",chainId:r.chainId,txHash:o,status:n.status||"unknown",reason:n.reason||"receipt not successful",receipt:n};let i=x9(n.logs||[],{chainId:r.chainId}),s=e.expectedOrderKey||e.orderKey?String(e.expectedOrderKey||e.orderKey).toLowerCase():null,a=s?i.filter(l=>l.orderKey===s):i;if(a.length===0)return{ok:!1,provider:"gmx",chainId:r.chainId,txHash:o,status:"unknown",reason:s?"order key not found in GMX EventEmitter logs":"no GMX order lifecycle event found",events:i,receipt:n};let A=a.reduce((l,u)=>TD(u.status)>=TD(l.status)?u:l,a[0]),c=e.expectedAccount||e.account?se(e.expectedAccount||e.account):null;return c&&A.account!==c?{ok:!1,provider:"gmx",chainId:r.chainId,txHash:o,status:A.status,reason:`account mismatch: expected ${c}, got ${A.account||"null"}`,orderKey:A.orderKey,account:A.account,events:i,receipt:n}:{ok:!0,provider:"gmx",chainId:r.chainId,txHash:o,status:A.status,orderKey:A.orderKey,account:A.account,market:A.market,eventEmitter:se(r.eventEmitter),events:a,receipt:n}}async function JD(e={},t={}){let r=ci(e.chainId??42161),n=E9(e.orderType||e.type),o=I9(e.decreasePositionSwapType),i=yt(e.account||e.owner||e.from||e.sender||e.receiver,"gmx account"),s=yt(e.receiver||i,"gmx receiver"),a=yt(e.cancellationReceiver||s,"gmx cancellationReceiver"),A=e.callbackContract?yt(e.callbackContract,"gmx callbackContract"):MD,c=e.uiFeeReceiver?yt(e.uiFeeReceiver,"gmx uiFeeReceiver"):MD,l=yt(e.market||e.marketToken,"gmx market"),u=yt(e.initialCollateralToken||e.collateralToken||r.usdc,"gmx initialCollateralToken"),d=n.key==="marketIncrease"?Ai(e.initialCollateralDeltaAmount??e.collateralAmount??e.amountIn,"gmx initialCollateralDeltaAmount"):Nn(e.initialCollateralDeltaAmount??e.collateralAmount??"0","gmx initialCollateralDeltaAmount"),h=Ai(e.sizeDeltaUsd,"gmx sizeDeltaUsd"),g=Ai(e.executionFee,"gmx executionFee"),p=BigInt(String(e.maxExecutionFeeWei??"10000000000000000"));if(g>p)throw new Error("gmx executionFee exceeds maxExecutionFeeWei");let m=BigInt(String(e.maxSizeDeltaUsd??"50000000000000000000000000000000000"));if(h>m)throw new Error("gmx sizeDeltaUsd exceeds maxSizeDeltaUsd");let f=m9(e.maxSlippageBps??e.slippageBps,50),B=e.isLong==null?!0:!!e.isLong,[E,I]=await Promise.all([of({chainId:r.chainId},t),ml({chainId:r.chainId},t)]),Q=C9(B9(E,"markets"),l);if(!Q)throw new Error("gmx market not found in public registry");if(Q.isListed===!1)throw new Error("gmx market is not listed");let R=yt(Q.indexToken,"gmx market indexToken"),D=yt(Q.longToken,"gmx market longToken"),x=yt(Q.shortToken,"gmx market shortToken"),F=se(u);if(![se(D),se(x)].includes(F))throw new Error("gmx collateral token must match market longToken or shortToken for this guarded slice");let K=w9(Q,B);if(K>0n&&h>K)throw new Error("gmx sizeDeltaUsd exceeds available market liquidity");let X=Q9(I,R);if(!X)throw new Error("gmx index ticker not found");let z=e.acceptablePrice?Ai(e.acceptablePrice,"gmx acceptablePrice").toString():y9({ticker:X,isLong:B,typeKey:n.key,maxSlippageBps:f}),be=(e.swapPath||[]).map(Ee=>yt(Ee,"gmx swapPath market"));if(be.length>3)throw new Error("gmx swapPath too long for guarded slice");let ht=Nn(e.triggerPrice??"0","gmx triggerPrice"),zr=Nn(e.callbackGasLimit??"0","gmx callbackGasLimit"),Pt=Nn(e.minOutputAmount??"0","gmx minOutputAmount"),Er=Nn(e.validFromTime??"0","gmx validFromTime"),Ir=!!e.shouldUnwrapNativeToken,Ii=e.autoCancel==null?!0:!!e.autoCancel,Bi=String(e.referralCode||g9);if(!/^0x[0-9a-fA-F]{64}$/.test(Bi))throw new Error("gmx referralCode must be bytes32 hex");let _n=Array.isArray(e.dataList)?e.dataList:[];for(let Ee of _n)if(!/^0x[0-9a-fA-F]{64}$/.test(String(Ee)))throw new Error("gmx dataList entries must be bytes32 hex");let Hl={addresses:{receiver:s,cancellationReceiver:a,callbackContract:A,uiFeeReceiver:c,market:l,initialCollateralToken:u,swapPath:be},numbers:{sizeDeltaUsd:h,initialCollateralDeltaAmount:d,triggerPrice:ht,acceptablePrice:BigInt(z),executionFee:g,callbackGasLimit:zr,minOutputAmount:Pt,validFromTime:Er},orderType:n.code,decreasePositionSwapType:o.code,isLong:B,shouldUnwrapNativeToken:Ir,autoCancel:Ii,referralCode:Bi,dataList:_n},N=[];n.key==="marketIncrease"&&d>0n&&N.push(pl.encodeFunctionData("sendTokens",[u,r.orderVault,d])),N.push(pl.encodeFunctionData("sendWnt",[r.orderVault,g])),N.push(pl.encodeFunctionData("createOrder",[Hl]));let P=pl.encodeFunctionData("multicall",[N]),ee={mode:"gmx-order",provider:"gmx",chainId:r.chainId,chain:r.name,orderType:n.key,orderTypeCode:n.code,decreasePositionSwapType:o.key,account:se(i),receiver:se(s),exchangeRouter:se(r.exchangeRouter),router:se(r.router),orderVault:se(r.orderVault),market:se(l),indexToken:se(R),initialCollateralToken:se(u),initialCollateralDeltaAmount:d.toString(),sizeDeltaUsd:h.toString(),executionFee:g.toString(),acceptablePrice:z,maxSlippageBps:f,isLong:B,asyncExecution:!0,issuedAtMs:Number(t.nowMs??Date.now())};return L({provider:"gmx",chainId:r.chainId,chain:r.name,orderReady:!0,executionReady:!1,asyncExecution:!0,orderType:n.key,market:se(l),requiresApproval:n.key==="marketIncrease"&&d>0n?{token:se(u),spender:se(r.router),amount:d.toString()}:null,gmxGuard:ee,transaction:{chainId:r.chainId,from:se(i),to:se(r.exchangeRouter),data:P,value:g.toString(),gmxGuard:ee}},{provider:"gmx",kind:"gmx-order"})}M();De();import{Interface as v9,getAddress as R9,isAddress as N9,keccak256 as WD,toUtf8Bytes as $D}from"ethers";var F9="https://api.morpho.org/graphql",El=new v9(["function asset() view returns (address)","function maxDeposit(address owner) view returns (uint256)","function previewDeposit(uint256 assets) view returns (uint256)","function deposit(uint256 assets,address receiver) returns (uint256)","function maxWithdraw(address owner) view returns (uint256)","function previewWithdraw(uint256 assets) view returns (uint256)","function withdraw(uint256 assets,address receiver,address owner) returns (uint256)"]),M9=(e={})=>e.baseUrl||process.env.MORPHO_API_URL||F9;async function af(e,t,r={}){return C(M9(r),{method:"POST",body:{query:e,variables:t},fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??2e4})}var U9="query Markets($first: Int, $where: MarketFilters) { markets(first: $first, where: $where) { items { marketId lltv listed loanAsset { address symbol decimals } collateralAsset { address symbol decimals } state { supplyAssetsUsd borrowAssetsUsd } } } }",L9="query Vaults($first: Int, $where: VaultFilters) { vaults(first: $first, where: $where) { items { address name symbol listed asset { address symbol decimals } state { totalAssets totalAssetsUsd apy } } } }";function ra(e,t){let r=String(e||"").trim();if(!N9(r))throw new Error(`morpho: ${t} must be an address`);return R9(r).toLowerCase()}function T9(e,t="amount"){try{let r=BigInt(String(e));if(r<=0n)throw new Error("nonpositive");return r.toString()}catch{throw new Error(`morpho: ${t} must be a positive integer string`)}}function sf(e){return Array.isArray(e)?`[${e.map(sf).join(",")}]`:e&&typeof e=="object"?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${sf(e[t])}`).join(",")}}`:JSON.stringify(e)}async function na(e,t,r,n,o={}){let i=El.encodeFunctionData(r,n),a=await(o.rpcCall||V)(Number(e),"eth_call",[{to:t,data:i},"latest"],o);return El.decodeFunctionResult(r,a)}function P9(e,t){let r=t.toLowerCase();return(e||[]).find(n=>String(n?.address||"").toLowerCase()===r)||null}async function zD(e={},t={}){let r=Math.min(100,Math.max(1,Number(e.first||20))),n=(e.chainIds||[e.chainId||1]).map(Number);return af(U9,{first:r,chainIds:n,where:{chainId_in:n}},t)}async function Af(e={},t={}){let r=Math.min(100,Math.max(1,Number(e.first||20))),n=(e.chainIds||[e.chainId||1]).map(Number);return af(L9,{first:r,chainIds:n,where:{chainId_in:n}},t)}async function KD(e={}){return{ok:(await af("query { __typename }",{},e))?.data?.__typename==="Query"}}async function jD(e={},t={}){let r=Number(e.chainId??8453),n=String(e.action||"deposit").toLowerCase();if(!["deposit","withdraw"].includes(n))throw new Error("morpho: action must be deposit or withdraw");let o=ra(e.vault||e.vaultAddress,"vault"),i=ra(e.owner||e.from||e.sender,"owner"),s=ra(e.receiver||i,"receiver"),a=T9(e.amount||e.assets,"amount"),A=Number(e.minTotalAssetsUsd??1e5),c=await Af({chainId:r,first:100},t),l=P9(c?.data?.vaults?.items,o);if(!l)throw new Error("morpho: vault not found in public Morpho vault registry");if(l.listed===!1)throw new Error("morpho: vault is not listed");let u=Number(l?.state?.totalAssetsUsd??0);if(Number.isFinite(A)&&u<A)throw new Error(`morpho: vault totalAssetsUsd ${u} below minimum ${A}`);let[d]=await na(r,o,"asset",[],t),h=ra(d,"vault asset");if((l?.asset?.address?ra(l.asset.address,"api vault asset"):h)!==h)throw new Error("morpho: API asset and on-chain asset mismatch");let p,m;if(n==="deposit"){let[B]=await na(r,o,"maxDeposit",[i],t);if(BigInt(a)>BigInt(B.toString()))throw new Error("morpho: amount exceeds maxDeposit");let[E]=await na(r,o,"previewDeposit",[a],t);if(BigInt(E.toString())<=0n)throw new Error("morpho: previewDeposit returned zero shares");m={minSharesOut:E.toString()},p=El.encodeFunctionData("deposit",[a,s])}else{let[B]=await na(r,o,"maxWithdraw",[i],t);if(BigInt(a)>BigInt(B.toString()))throw new Error("morpho: amount exceeds maxWithdraw");let[E]=await na(r,o,"previewWithdraw",[a],t);if(BigInt(E.toString())<=0n)throw new Error("morpho: previewWithdraw returned zero shares");m={maxSharesIn:E.toString()},p=El.encodeFunctionData("withdraw",[a,s,i])}let f={mode:"erc4626-vault",version:1,provider:"morpho",chainId:r,action:n,vault:o,asset:h,owner:i,receiver:s,amount:a,totalAssetsUsd:u,...m,calldataHash:WD($D(p)),issuedAtMs:Date.now(),expiresAtMs:Date.now()+2e4};return f.guardHash=WD($D(sf(f))),L({provider:"morpho",protocol:"erc4626-vault",vaultReady:!0,executionReady:!1,signingReady:!1,broadcastReady:!1,requiresUserSignature:!0,chainId:r,action:n,vault:o,asset:h,owner:i,receiver:s,amount:a,vaultInfo:l,vaultGuard:f,requiresApproval:n==="deposit"?{token:h,spender:o,amount:a}:null,transaction:{chainId:r,from:i,to:o,data:p,value:"0x0",madVault:f}},{provider:"morpho",kind:"erc4626-vault"})}M();De();import{Interface as O9,getAddress as cf,isAddress as H9}from"ethers";var G9="https://api-v3.balancer.fi/",q9=(e={})=>e.baseUrl||process.env.BALANCER_API_URL||G9;async function ev(e,t,r={}){return C(q9(r),{method:"POST",body:{query:e,variables:t},fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??2e4})}var Y9="query Pools($first: Int, $where: GqlPoolFilter) { poolGetPools(first: $first, where: $where) { id address chain type protocolVersion dynamicData { totalLiquidity volume24h fees24h } } }",ZD=Object.freeze({1:{name:"ethereum",router:"0xAE563E3f8219521950555F5962419C8919758Ea2",weth:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",usdc:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},10:{name:"optimism",router:"0xe2fa4e1d17725e72dcdAfe943Ecf45dF4B9E285b",weth:"0x4200000000000000000000000000000000000006",usdc:"0x0b2c639c533813f4aa9d7837caf62653d097ff85"},8453:{name:"base",router:"0x3f170631ed9821Ca51A59D996aB095162438DC10",weth:"0x4200000000000000000000000000000000000006",usdc:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},42161:{name:"arbitrum",router:"0xEAedc32a51c510d35ebC11088fD5fF2b47aACF2E",weth:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",usdc:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831"},43114:{name:"avalanche",router:"0xF39CA6ede9BF7820a952b52f3c94af526bAB9015",weth:"0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7",usdc:"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"}}),V9="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",J9="0x0000000000000000000000000000000000000000",lf=new O9(["function querySwapSingleTokenExactIn(address pool,address tokenIn,address tokenOut,uint256 exactAmountIn,address sender,bytes userData) returns (uint256 amountOut)","function swapSingleTokenExactIn(address pool,address tokenIn,address tokenOut,uint256 exactAmountIn,uint256 minAmountOut,uint256 deadline,bool wethIsEth,bytes userData) payable returns (uint256 amountOut)"]);function tv(e){let t=Number(e??8453),r=ZD[t];if(!r)throw new Error(`balancer-v3: unsupported chainId ${e} (supported: ${Object.keys(ZD).join(", ")})`);return{chainId:t,...r}}function rv(e){let t=String(e||"").toLowerCase();return!t||t==="eth"||t==="native"||t===J9||t===V9.toLowerCase()}function Il(e,t){if(!H9(e))throw new Error(`${t} must be a valid EVM address`);return cf(e)}function XD(e,t,r){let n=String(e||"");return rv(n)||/^weth$/i.test(n)?cf(t.weth):/^usdc$/i.test(n)?cf(t.usdc):Il(n,r)}function W9(e,t){let r;try{r=BigInt(String(e))}catch{throw new Error(`${t} must be an integer string`)}if(r<=0n)throw new Error(`${t} must be positive`);return r}function nv(e){if(e==null||e==="")return"0x";let t=String(e);if(!/^0x[0-9a-fA-F]*$/.test(t))throw new Error("balancer userData must be hex");return t}async function ov(e={},t={}){let r=Math.min(100,Math.max(1,Number(e.first||20))),n=(e.chains||[e.chain||"ETHEREUM"]).map(o=>String(o).toUpperCase());return ev(Y9,{first:r,chains:n,where:{chainIn:n}},t)}async function iv(e={}){return{ok:(await ev("query { __typename }",{},e))?.data?.__typename==="Query"}}async function uf(e={},t={}){let r=tv(e.chainId),n=Il(e.pool,"balancer pool"),o=e.tokenIn||"WETH",i=XD(o,r,"balancer tokenIn"),s=XD(e.tokenOut||"USDC",r,"balancer tokenOut"),a=W9(e.amountIn,"balancer amountIn"),A=Il(e.sender||e.from||e.fromAddress||e.recipient,"balancer sender"),c=lf.encodeFunctionData("querySwapSingleTokenExactIn",[n,i,s,a,A,nv(e.userData)]),u=await(t.rpcCall||V)(r.chainId,"eth_call",[{to:r.router,data:c},e.blockTag||"latest"],t),d=lf.decodeFunctionResult("querySwapSingleTokenExactIn",u),h=BigInt(d[0]);if(h<=0n)throw new Error("balancer quote returned zero output");return ce({venue:"balancer",protocolVersion:3,chainId:r.chainId,chain:r.name,router:r.router,pool:n,tokenIn:i,tokenOut:s,amountIn:a.toString(),amountOut:h.toString()},{chainId:r.chainId,venue:r.router,amountOut:h.toString(),liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps})}async function sv(e={},t={}){let r=tv(e.chainId),n=Il(e.sender||e.from||e.fromAddress||e.recipient,"balancer sender"),o=e.tokenIn||"WETH",i=rv(o),s=await uf({...e,sender:n},t),a=Math.min(600,Math.max(30,Number(e.deadlineSeconds??300))),A=Number(t.nowSeconds??Math.floor(Date.now()/1e3)),c=BigInt(A+a),l=e.wethIsEth!=null?!!e.wethIsEth:i,u=lf.encodeFunctionData("swapSingleTokenExactIn",[s.pool,s.tokenIn,s.tokenOut,BigInt(s.amountIn),BigInt(s.amountOutMinimum),c,l,nv(e.userData)]);return L({provider:"balancer",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:r.chainId,deadline:c.toString(),quote:s,autoSlippage:s.autoSlippage,requiresApproval:i?null:{token:s.tokenIn,spender:r.router,amount:s.amountIn},transaction:{chainId:r.chainId,from:n,to:r.router,data:u,value:i?s.amountIn:"0",slippageGuard:Qe(s.autoSlippage,{chainId:r.chainId,venue:r.router,data:u})}},{provider:"balancer",kind:"balancer-tx"})}M();import{getAddress as z9}from"ethers";var K9="https://api-v2.pendle.finance/core",j9=Object.freeze({42161:"0x888888888889758F76e7103c6CbF23ABbF58F946",8453:"0x888888888889758F76e7103c6CbF23ABbF58F946"}),Z9="0x0000000000000000000000000000000000000000",X9="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",av=(e={})=>(e.baseUrl||process.env.PENDLE_API_URL||K9).replace(/\/$/,"");function Bl(e,t){try{return z9(e)}catch{throw new Error(`${t} must be a valid EVM address`)}}function li(e,t){return Bl(e,t).toLowerCase()}function e4(e){let t=String(e||"").toLowerCase();return t==="native"||t==="eth"||t===X9||t===Z9}function df(e,t){let r;try{r=BigInt(String(e))}catch{throw new Error(`${t} must be an integer string`)}if(r<=0n)throw new Error(`${t} must be positive`);return r.toString()}function t4(e){if(!Array.isArray(e)||e.length===0)throw new Error("pendle convert requires inputs[]");return e.map((t,r)=>({token:Bl(t.token,`pendle input ${r} token`),amount:df(t.amount,`pendle input ${r} amount`)}))}function r4(e){if(!Array.isArray(e)||e.length===0)throw new Error("pendle convert requires outputs[]");return e.map((t,r)=>Bl(t,`pendle output ${r} token`))}function n4(e){let t=j9[Number(e)];if(!t)throw new Error(`Pendle prepare not enabled for chainId ${e}`);return t}function o4(e){let t=e?.routes?.[0]?.outputs?.[0]?.amount||e?.outputs?.[0]?.amount;if(!t)throw new Error("Pendle convert response missing output amount");return df(t,"pendle output amount")}function i4(e,t){let r=(Array.isArray(e)?e:[]).filter(n=>n?.token&&n?.amount&&!e4(n.token)).map(n=>({token:li(n.token,"pendle approval token"),spender:li(t,"pendle approval spender"),amount:df(n.amount,"pendle approval amount")}));return r.length?r.length===1?r[0]:r:null}async function hf(e={},t={}){let r=Number(e.chainId||42161),n=new URLSearchParams({limit:String(Math.min(100,Math.max(1,Number(e.limit||20)))),skip:String(Math.max(0,Number(e.skip||0)))});return e.isExpired!=null&&n.set("isExpired",String(!!e.isExpired)),C(`${av(t)}/v1/${r}/markets?${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function Av(e={}){let t=await hf({chainId:42161,limit:1},e);return{ok:Array.isArray(t?.results),marketSample:t?.results?.length||0}}async function gf(e={},t={}){let r=Number(e.chainId??42161),n=n4(r),o=e.from||e.fromAddress||e.userAddress||e.taker||e.receiver;if(!o)throw new Error("pendlePrepare requires from/receiver");let i=Bl(e.receiver||o,"pendle receiver"),s=t4(e.inputs),a=r4(e.outputs);if(e.enableAggregator===!0||Array.isArray(e.aggregators)&&e.aggregators.length)throw new Error("Pendle aggregator paths are disabled by policy; use direct convert only");let A=je({liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps});if(!A.executable)throw new Error(`Pendle: route requires ${A.requiredBps} bps above cap ${A.capBps}`);let c={receiver:i,slippage:A.selectedBps/1e4,enableAggregator:!1,useLimitOrder:!1,inputs:s,outputs:a,...e.redeemRewards!=null?{redeemRewards:!!e.redeemRewards}:{},...e.needScale!=null?{needScale:!!e.needScale}:{},...e.additionalData?{additionalData:String(e.additionalData)}:{}},l=await C(`${av(t)}/v3/sdk/${r}/convert`,{method:"POST",body:c,fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3}),d=l?.routes?.[0]?.tx;if(!d?.to||!d?.data)throw new Error("Pendle convert returned no executable tx");if(li(d.to,"pendle tx target")!==li(n,"pendle router"))throw new Error("Pendle convert returned unexpected router target");if(d.from&&li(d.from,"pendle tx sender")!==li(o,"pendle sender"))throw new Error("Pendle convert transaction sender mismatch");let h=o4(l),g=ce(l,{chainId:r,venue:d.to,amountOut:h,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps});return L({provider:"pendle",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:r,action:l.action||null,quote:g,autoSlippage:g.autoSlippage,requiresApproval:i4(l.requiredApprovals,d.to),transaction:{chainId:r,from:d.from||o,to:d.to,data:d.data,value:d.value??"0x0",slippageGuard:Qe(g.autoSlippage,{chainId:r,venue:d.to,data:d.data})}},{provider:"pendle",kind:"pendle-swap"})}async function cv(e={},t={}){let r=await gf(e,t),{transaction:n,...o}=r;return o}M();import{isAddress as a4}from"ethers";var A4="https://api.odos.xyz",pf=(e={})=>(e.baseUrl||process.env.ODOS_API_URL||A4).replace(/\/$/,"");async function ff(e={}){return C(`${pf(e)}/info/chains`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs})}function c4(e={}){let t=Number(e.chainId);if(!Number.isInteger(t))throw new Error("odos: chainId required");if(!Array.isArray(e.inputTokens)||e.inputTokens.length<1)throw new Error("odos: inputTokens[] required");if(!Array.isArray(e.outputTokens)||e.outputTokens.length!==1)throw new Error("odos: agentic execution currently requires exactly one output token");if(!a4(String(e.userAddr||"")))throw new Error("odos: valid userAddr required");return t}async function lv(e={},t={}){let r=c4(e),n=je({liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps});if(!n.executable)throw new Error(`odos: route requires ${n.requiredBps} bps above cap ${n.capBps}`);let o={chainId:r,inputTokens:e.inputTokens,outputTokens:e.outputTokens,userAddr:e.userAddr,slippageLimitPercent:n.selectedBps/100,disableRFQs:e.disableRFQs??!0,compact:e.compact??!0,simple:e.simple??!1},i=await C(`${pf(t)}/sor/quote/v3`,{method:"POST",body:o,fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3}),s=i?.outAmounts?.[0];if(!i?.pathId||!s)throw new Error("odos: quote missing pathId or outAmounts[0]");return{chainId:r,selected:n,quote:i,amountOut:s}}async function uv(e={},t={}){let{chainId:r,quote:n,amountOut:o}=await lv(e,t);return{...ce(n,{chainId:r,venue:"odos-quote",amountOut:o,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps}),executionReady:!1,executionBlocker:"call prepare to assemble and simulate the path"}}async function dv(e={},t={}){let{chainId:r,quote:n,amountOut:o}=await lv(e,t),i=await C(`${pf(t)}/sor/assemble`,{method:"POST",body:{userAddr:e.userAddr,pathId:n.pathId,simulate:!0,...e.receiver?{receiver:e.receiver}:{}},fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??3e4}),s=i?.transaction;if(!s?.to||!s?.data)throw new Error("odos: assemble returned no executable transaction");if(Number(s.chainId??r)!==r)throw new Error("odos: transaction chain mismatch");if(s.from&&String(s.from).toLowerCase()!==String(e.userAddr).toLowerCase())throw new Error("odos: transaction sender mismatch");if(i?.simulation?.isSuccess!==!0)throw new Error(`odos: assembled transaction simulation failed: ${i?.simulation?.simulationError||"unknown"}`);let a=ce(n,{chainId:r,venue:s.to,amountOut:o,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps}),A=i?.simulation?.amountsOut?.[0];if(A!=null&&BigInt(A)<BigInt(a.amountOutMinimum))throw new Error("odos: simulation output is below the bounded automatic floor");let c="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",l="0x0000000000000000000000000000000000000000",u=e.inputTokens.filter(d=>![c,l].includes(String(d.tokenAddress).toLowerCase())).map(d=>({token:d.tokenAddress,spender:s.to,amount:String(d.amount)}));return L({provider:"odos",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:r,quote:a,simulation:i.simulation,requiresApproval:u,autoSlippage:a.autoSlippage,transaction:{chainId:r,from:s.from||e.userAddr,to:s.to,data:s.data,value:s.value??"0x0",...s.gas!=null?{gasLimit:s.gas}:{},...s.nonce!=null?{nonce:s.nonce}:{},slippageGuard:Qe(a.autoSlippage,{chainId:r,venue:s.to,data:s.data})}},{provider:"odos",kind:"odos-tx"})}async function hv(e={}){let t=await ff(e);return{ok:Array.isArray(t?.chains)&&t.chains.length>0,chainCount:t?.chains?.length||0}}M();var gv=/[\u200B-\u200F\u202A-\u202E\u2060-\u2064\uFEFF]/g,u4=/[<>&`*_~[\]()|\\]/g,d4=/[\u0000-\u001F\u007F]/g;function mf(e,{max:t=32,fallback:r=""}={}){return e==null?r:String(e).normalize("NFKC").replace(gv,"").replace(d4,"").replace(u4,"").replace(/\s+/g," ").trim().slice(0,t).trim()||r}function Ef(e){if(e==null)return!1;let t=String(e);return gv.test(t)?!0:/[\u0400-\u04FF\u0370-\u03FF]/.test(t)&&/[A-Za-z]/.test(t)}var pv=Object.freeze({1:"https://eth.blockscout.com",10:"https://explorer.optimism.io",137:"https://polygon.blockscout.com",324:"https://zksync.blockscout.com",8453:"https://base.blockscout.com",42161:"https://arbitrum.blockscout.com",534352:"https://scrollscan.com"});function Cl(e,t={}){let r=Number(e),n=t.baseUrl||pv[r];if(!n)throw new Error(`Blockscout not configured for chainId ${r}`);return n.replace(/\/$/,"")}function fv(e){return!!pv[Number(e)]}async function If(e={},t={}){return C(`${Cl(e.chainId||1,t)}/api/v2/stats`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function mv(e={},t={}){if(!e.address)throw new Error("address required");return C(`${Cl(e.chainId||1,t)}/api/v2/addresses/${encodeURIComponent(e.address)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function Ev(e={},t={}){if(!e.address&&!e.tokenAddress)throw new Error("token address required");return C(`${Cl(e.chainId||1,t)}/api/v2/tokens/${encodeURIComponent(e.address||e.tokenAddress)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function Iv(e={},t={}){if(!e.address)throw new Error("address required");let r=Number(e.chainId||1),n=`${Cl(r,t)}/api/v2/addresses/${encodeURIComponent(e.address)}/token-balances`,o=await C(n,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??18e3,headers:{accept:"application/json","user-agent":"OraclePortfolio/1.0"}});return Array.isArray(o)?o:[]}function Bv(e=[],{fungibleOnly:t=!0}={}){let r=[];for(let n of e){if(!n||typeof n!="object")continue;let o=n.token&&typeof n.token=="object"?n.token:{},i=String(o.type||n.token_type||"").toUpperCase();if(t&&i&&!i.includes("ERC-20")&&i!=="ERC20")continue;let s=o.address_hash||o.address||n.token_address||n.tokenAddress||null;if(!s||typeof s!="string")continue;let a=String(n.value??n.balance??"0").replace(/^0x/i,"");if(!/^\d+$/.test(a)||a==="0")continue;let A=o.decimals??n.decimals;typeof A=="string"&&/^\d+$/.test(A)&&(A=Number(A)),(typeof A!="number"||!Number.isInteger(A)||A<0||A>36)&&(A=18);let c=mf(o.symbol||o.name,{max:32,fallback:"TOKEN"}),l=mf(o.name,{max:80,fallback:""})||null;r.push({address:s.toLowerCase().startsWith("0x")?s:`0x${s}`,symbol:c,name:l,decimals:A,amountRaw:a,tokenType:i||"ERC-20",source:"blockscout",verification:"indexer-reported",displaySuspicious:Ef(o.symbol)||Ef(o.name)||void 0})}return r}async function Cv(e={}){let t=await If({chainId:8453},e);return{ok:t?.total_blocks!=null||t?.total_transactions!=null,chainId:8453}}import{getAddress as g4}from"ethers";M();De();var p4="TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",yv=Object.freeze({ETH:"coingecko:ethereum",POL:"coingecko:polygon-ecosystem-token",BNB:"coingecko:binancecoin",AVAX:"coingecko:avalanche-2",HYPE:"coingecko:hyperliquid",USDT0:"coingecko:tether",SOL:"coingecko:solana",BTC:"coingecko:bitcoin"});function Vr(e={},t){return{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs,env:e.env,...e[t]||{}}}function Ql(e,...t){for(let r of t){let n=String(e?.[r]||"").trim();if(n)return n}return null}function Qv(e){if(!e)return null;try{return g4(String(e).trim().toLowerCase())}catch{throw new Error("portfolio: EVM address must be a valid 20-byte address")}}function Fn(e={},t=process.env){let r=e.addresses||{},n=Qv(r.evm||e.evmAddress||Ql(t,"ORACLE_EVM_ADDRESS","ORACLE_DEFAULT_ADDRESS","MAD_OPERATOR_ADDRESS")),o=r.solana||e.solanaAddress||Ql(t,"ORACLE_SOLANA_ADDRESS"),i=r.bitcoin||e.bitcoinAddress||Ql(t,"ORACLE_BITCOIN_ADDRESS"),s=Qv(r.hyperliquid||e.hyperliquidAddress||Ql(t,"ORACLE_HYPERLIQUID_ADDRESS")||n);return{evm:n,solana:o?me(o,"portfolio Solana address"):null,bitcoin:i?Ut(i,"portfolio Bitcoin address"):null,hyperliquid:s}}function oa(e,t){let r=BigInt(String(e||"0")),n=Number(t);if(!Number.isInteger(n)||n<0||n>36)throw new Error("portfolio: decimals must be an integer from 0 to 36");if(n===0)return r.toString();let o=r<0n,i=o?-r:r,s=10n**BigInt(n),a=i/s,A=String(i%s).padStart(n,"0").replace(/0+$/,"");return`${o?"-":""}${a}${A?`.${A}`:""}`}function ui(e){let t=Number(e);return Number.isFinite(t)?t:null}function yl(e){return Number.isFinite(e)?Number(e.toFixed(2)):null}function Jr(e){let t=Number(e);return Number.isFinite(t)&&t!==0}function wv(e,t){let r=yv[t],n=r?e?.coins?.[r]:null,o=Number(n?.price);return{key:r||null,priceUsd:Number.isFinite(o)?o:null,timestamp:n?.timestamp??null,confidence:n?.confidence??null}}function f4(e){let t=new Map;for(let r of e)if(r?.ok)for(let n of r.data?.accounts||[]){let o=BigInt(String(n.amount||"0"));if(o===0n||!n.mint)continue;let i=`${n.mint}:${n.decimals??"unknown"}`,s=t.get(i)||{mint:n.mint,amountRaw:0n,decimals:n.decimals??null,programs:new Set,accounts:0};s.amountRaw+=o,s.accounts+=1,r.program&&s.programs.add(r.program),t.set(i,s)}return[...t.values()].map(r=>{let n=r.amountRaw.toString(),o=r.decimals==null?null:oa(n,r.decimals),i=r.decimals===0&&r.amountRaw===1n;return{mint:r.mint,amountRaw:n,amount:o,decimals:r.decimals,tokenPrograms:[...r.programs],accountCount:r.accounts,verification:"unverified",classification:i?"collectible-candidate":"fungible-or-unclassified",priceUsd:null,usdValue:null}})}function Bf(e,t){return{family:e,status:"unsupported",reason:t}}function Cf(e,t){if(!e||e.status!=="ok")return e;let r=wv(t,e.symbol),n=ui(e.amount),o=n!=null&&r.priceUsd!=null?yl(n*r.priceUsd):null;return{...e,price:r,usdValue:o}}async function bv(e={}){let t=Fn({},e.env||process.env);return{ok:!0,provider:"portfolio",readOnly:!0,configuredFamilies:Object.entries(t).filter(([,r])=>!!r).map(([r])=>r)}}async function wl(e={},t={}){let r=new Date().toISOString(),n=Fn(e,t.env||process.env),o=e.includePrices!==!1,i=e.includeTokens!==!1,s=e.includeCollectibles!==!1,a=new Map(Go.map(N=>[N.chainId,N])),A=Array.isArray(e.evmChainIds)&&e.evmChainIds.length?[...new Set(e.evmChainIds.map(Number))]:[...a.keys()],c=[...new Set(Object.values(yv))],l=o?Fe(()=>Sn(c,Vr(t,"prices"))):Promise.resolve({ok:!1,ms:0,error:"price lookup disabled"}),u=Po(A,e.concurrency||5,async N=>{let P=a.get(N);if(!P)return{family:"evm",chainId:N,name:null,address:n.evm,status:"unsupported",error:"chainId is not in Oracle's configured EVM registry"};if(!n.evm)return{family:"evm",chainId:N,name:P.name,address:null,status:"not-configured",error:"set ORACLE_EVM_ADDRESS or pass addresses.evm"};let ee={...Vr(t,"evm"),rpcUrl:e.rpcUrls?.[N]||t.evm?.rpcUrls?.[N]},Ee=await Fe(()=>wn(N,n.evm,ee));if(!Ee.ok)return{family:"evm",chainId:N,name:P.name,address:n.evm,status:"unavailable",latencyMs:Ee.ms,error:Ee.error};let Te=P.nativeCurrency?.decimals??18,Xe=P.nativeCurrency?.symbol||"NATIVE",J=Ee.data.balanceWei,ke={status:i?"unavailable":"not-requested",assets:[],reason:i?"EVM JSON-RPC cannot enumerate wallet tokens without an address indexer":"token discovery disabled"};if(i&&fv(N)){let Kr=await Fe(()=>Iv({chainId:N,address:n.evm},{...Vr(t,"blockscout"),timeoutMs:t.timeoutMs??18e3}));Kr.ok?ke={status:"ok",assets:Bv(Kr.data,{fungibleOnly:!0}).map(Ci=>{let Qi=oa(Ci.amountRaw,Ci.decimals);return{...Ci,amount:Qi,priceUsd:null,usdValue:null}}),reason:null,source:"blockscout",latencyMs:Kr.ms}:ke={status:"unavailable",assets:[],reason:Kr.error||"blockscout token-balances failed",source:"blockscout",latencyMs:Kr.ms}}return{family:"evm",chainId:N,name:P.name,address:n.evm,status:"ok",latencyMs:Ee.ms,native:{status:"ok",symbol:Xe,amountRaw:J,decimals:Te,amount:oa(J,Te)},fungibleTokens:ke,collectibles:{status:s?"unavailable":"not-requested",assets:[],reason:s?"EVM JSON-RPC cannot enumerate wallet NFTs without an address indexer":"collectible discovery disabled"},source:ke.source==="blockscout"?"evm-rpc+blockscout":"evm-rpc"}}),d=(async()=>{if(!n.solana)return{family:"solana",name:"Solana Mainnet",address:null,status:"not-configured",error:"set ORACLE_SOLANA_ADDRESS or pass addresses.solana"};let N=Vr(t,"solana"),P=await Fe(()=>Dc({address:n.solana},N)),ee=i||s?await Promise.all([Fe(()=>Ms({owner:n.solana,programId:$g},N)).then(ke=>({...ke,program:"spl-token"})),Fe(()=>Ms({owner:n.solana,programId:p4},N)).then(ke=>({...ke,program:"token-2022"}))]):[],Ee=f4(ee),Te=Ee.filter(ke=>ke.classification==="collectible-candidate"),Xe=Ee.filter(ke=>ke.classification!=="collectible-candidate"),J=ee.filter(ke=>!ke.ok).map(ke=>ke.error);return{family:"solana",name:"Solana Mainnet",address:n.solana,status:P.ok||ee.some(ke=>ke.ok)?"ok":"unavailable",native:P.ok?{status:"ok",symbol:"SOL",amountRaw:P.data.lamports,decimals:9,amount:oa(P.data.lamports,9),slot:P.data.slot}:{status:"unavailable",symbol:"SOL",error:P.error},fungibleTokens:{status:i?J.length===ee.length?"unavailable":J.length?"partial":"ok":"not-requested",assets:i?Xe:[],errors:J,note:"SPL accounts are unverified until a metadata/indexer source confirms symbol and spam status"},collectibles:{status:s?J.length===ee.length?"unavailable":"partial":"not-requested",assets:s?Te:[],errors:J,note:"decimals=0 and amount=1 is only a collectible candidate, not verified NFT metadata"},source:"solana-rpc"}})(),h=(async()=>{if(!n.bitcoin)return{family:"bitcoin",name:"Bitcoin Mainnet",address:null,status:"not-configured",error:"set ORACLE_BITCOIN_ADDRESS or pass addresses.bitcoin"};let N=Vr(t,"bitcoin"),P=Vr(t,"bitcoinMeta"),[ee,Ee,Te]=await Promise.all([Fe(()=>Rc({address:n.bitcoin},N)),i?Fe(()=>Fc({address:n.bitcoin},P)):Promise.resolve({ok:!1,ms:0,error:"token discovery disabled"}),s?Fe(()=>Jo({address:n.bitcoin},P)):Promise.resolve({ok:!1,ms:0,error:"collectible discovery disabled"})]),Xe=Ee.ok?Ee.data:null,J=Te.ok?Te.data:null;return{family:"bitcoin",name:"Bitcoin Mainnet",address:n.bitcoin,status:ee.ok||Xe?.ok||J?.ok?"ok":"unavailable",native:ee.ok?{status:"ok",symbol:"BTC",amountRaw:ee.data.balanceSats,decimals:8,amount:oa(ee.data.balanceSats,8)}:{status:"unavailable",symbol:"BTC",error:ee.error},fungibleTokens:{status:i?Xe?.ok?"ok":"unavailable":"not-requested",assets:Xe?.balances||[],error:Xe?.ok?null:Xe?.error||Ee.error,verification:"indexer-reported"},collectibles:{status:s?J?.ok?"ok":"unavailable":"not-requested",assets:J?.inscriptions||[],error:J?.ok?null:J?.error||Te.error,unknownNotEmpty:!!J?.unknownNotEmpty,verification:"indexer-reported"},source:"bitcoin-esplora+bitcoin-meta"}})(),g=(async()=>{if(!n.hyperliquid)return{family:"hyperliquid",name:"Hyperliquid HyperCore",address:null,status:"not-configured",error:"set ORACLE_HYPERLIQUID_ADDRESS or pass addresses.hyperliquid"};let N=Vr(t,"hyperliquid"),[P,ee,Ee]=await Promise.all([Fe(()=>wc(n.hyperliquid,N)),Fe(()=>kc(n.hyperliquid,N)),Fe(()=>gr(N))]),Te=(P.ok&&Array.isArray(P.data?.balances)?P.data.balances:[]).filter(J=>Jr(J.total)||Jr(J.hold)).map(J=>({coin:J.coin||null,total:String(J.total??"0"),hold:String(J.hold??"0"),priceUsd:null,usdValue:null})),Xe=(ee.ok&&Array.isArray(ee.data?.assetPositions)?ee.data.assetPositions:[]).map(J=>J.position||J).filter(J=>Jr(J.szi)).map(J=>({coin:J.coin||null,size:String(J.szi??"0"),entryPrice:J.entryPx??null,positionValueUsd:J.positionValue??null,unrealizedPnlUsd:J.unrealizedPnl??null,liquidationPrice:J.liquidationPx??null}));return{family:"hyperliquid",name:"Hyperliquid HyperCore",address:n.hyperliquid,status:P.ok||ee.ok?"ok":"unavailable",spot:{status:P.ok?"ok":"unavailable",balances:Te,error:P.ok?null:P.error},perps:{status:ee.ok?"ok":"unavailable",accountValueUsd:ee.data?.marginSummary?.accountValue??null,withdrawableUsd:ee.data?.withdrawable??null,positions:Xe,error:ee.ok?null:ee.error},mids:Ee.ok?Ee.data:{},source:"hyperliquid-info"}})(),[p,m,f,B,E]=await Promise.all([u,d,h,g,l]),I=E.ok?E.data:null,Q=Object.freeze({1:"ethereum",10:"optimism",56:"bsc",137:"polygon",8453:"base",42161:"arbitrum",43114:"avax",81457:"blast",534352:"scroll",59144:"linea",324:"era"}),R=[];for(let N of p){if(N.family!=="evm"||N.fungibleTokens?.status!=="ok")continue;let P=Q[N.chainId];if(P)for(let ee of N.fungibleTokens.assets||[])ee.address&&R.push(`${P}:${String(ee.address).toLowerCase()}`)}let D=null;if(o&&R.length){let N=[...new Set(R)],P=await Fe(()=>Sn(N,Vr(t,"prices")));P.ok&&(D=P.data)}let x=p.map(N=>{let P=N.native?{...N,native:Cf(N.native,I)}:N;if(P.fungibleTokens?.status==="ok"&&Array.isArray(P.fungibleTokens.assets)){let ee=Q[P.chainId],Ee=P.fungibleTokens.assets.map(Te=>{let Xe=String(Te.symbol||"").toUpperCase(),J=null;if(["USDC","USDT","USDT0","DAI","USDBC","USDE","USDCE"].includes(Xe)&&(J=1),J==null&&ee&&Te.address&&D?.coins){let Em=`${ee}:${String(Te.address).toLowerCase()}`,Ci=D.coins[Em],Qi=Number(Ci?.price);Number.isFinite(Qi)&&Qi>0&&(J=Qi)}let ke=ui(Te.amount),Kr=ke!=null&&J!=null?yl(ke*J):null;return{...Te,priceUsd:J,usdValue:Kr}});P={...P,fungibleTokens:{...P.fungibleTokens,assets:Ee}}}return P});m.native&&(m.native=Cf(m.native,I)),f.native&&(f.native=Cf(f.native,I));let F=0,K=0,X=0;for(let N of[...x,m,f]){N.native?.status==="ok"&&Jr(N.native.amount)&&(N.native.usdValue!=null?(F+=N.native.usdValue,K+=1):X+=1);for(let P of N.fungibleTokens?.assets||[])!Jr(P.amount)&&!Jr(P.amountRaw)||(P.usdValue!=null?(F+=P.usdValue,K+=1):X+=1)}let z=wv(I,"HYPE");for(let N of B.spot?.balances||[]){let P=String(N.coin||"").toUpperCase(),ee=P==="USDC"||P==="USDT"||P==="USDT0"?1:P==="HYPE"?z.priceUsd||ui(B.mids?.HYPE):ui(B.mids?.[N.coin]),Ee=ui(N.total);N.priceUsd=ee,N.usdValue=Ee!=null&&ee!=null?yl(Ee*ee):null,Jr(N.total)&&(N.usdValue!=null?(F+=N.usdValue,K+=1):X+=1)}let be=ui(B.perps?.accountValueUsd);be!=null&&be!==0&&(F+=be,K+=1);let ht=[...m.fungibleTokens?.assets||[],...m.collectibles?.assets||[]].filter(N=>Jr(N.amount)).length,zr=(f.fungibleTokens?.assets||[]).length+(f.collectibles?.assets||[]).length;X+=ht+zr;let Pt=[...x,m,f,B],Er=N=>Pt.filter(P=>P.status===N).length,Ir=[],Ii=x.filter(N=>N.fungibleTokens?.status==="unavailable"),Bi=x.filter(N=>N.fungibleTokens?.status==="ok");Ii.length&&!Bi.length?Ir.push("EVM token discovery is unavailable without a working address indexer; native balances are still live."):Ii.length&&Ir.push(`EVM token discovery partial: Blockscout covered ${Bi.length} chain(s); ${Ii.length} chain(s) still native-only.`),(m.fungibleTokens?.assets?.length||m.collectibles?.assets?.length)&&Ir.push("Solana token accounts are unverified and may include spam; collectible candidates are not confirmed NFTs."),f.collectibles?.unknownNotEmpty&&Ir.push("Bitcoin inscription holdings are unknown, not zero, because no address indexer is configured."),E.ok||Ir.push(`Price provider unavailable: ${E.error}`);let _n=[Bf("cosmos","requires a chain-specific bech32 address and LCD/RPC adapter"),Bf("sui","Sui balance adapter is not installed"),Bf("aptos","Aptos balance adapter is not installed")],Hl=Pt.some(N=>["unavailable","partial","not-configured"].includes(N.fungibleTokens?.status)||["unavailable","partial","not-configured"].includes(N.collectibles?.status));return{provider:"portfolio",operation:"balances",readOnly:!0,queriedAt:r,addresses:n,coverage:{requestedSurfaces:Pt.length,ok:Er("ok"),unavailable:Er("unavailable"),notConfigured:Er("not-configured"),unsupported:Er("unsupported")+_n.length,evmChainsRequested:A.length,evmChainsOk:x.filter(N=>N.status==="ok").length},valuation:{knownUsd:yl(F),label:"known priced value, not a complete portfolio total",pricedItems:K,unpricedNonzeroItems:X,complete:X===0&&!Hl&&Er("unavailable")===0&&Er("not-configured")===0&&_n.length===0,priceSource:o?"DefiLlama":null,priceStatus:E.ok?"ok":"unavailable",priceQueriedAt:r},chains:[...x,m,f,B],unsupportedFamilies:_n,warnings:Ir}}import{constants as kl}from"node:fs";import{chmod as H4,mkdir as G4,open as q4,readFile as Y4}from"node:fs/promises";import{createHash as V4,randomUUID as J4}from"node:crypto";import W4 from"node:os";import hi from"node:path";M();M();var E4=Object.freeze(["i.seadn.io","openseauserdata.com","arweave.net","ipfs.io","nftstorage.link","dweb.link","cloudflare-ipfs.com","ordinals.com","ordinals.g.com","cdn.helius-rpc.com","shdw-drive.genesysgo.net"]),I4=new Set(["image/jpeg","image/png","image/webp"]);function B4(e){let t=String(e||"").toLowerCase();return E4.some(r=>t===r||t.endsWith(`.${r}`))}function C4(e){let t=String(e||"").trim();return t.startsWith("ipfs://")?`https://ipfs.io/ipfs/${t.slice(7).replace(/^ipfs\//,"")}`:t.startsWith("ar://")?`https://arweave.net/${t.slice(5)}`:t}function kv(e){let t=C4(e),r;try{r=new URL(t)}catch{return null}return r.protocol!=="https:"||r.username||r.password||!B4(r.hostname)?null:r}async function Q4(e,t={}){let r=t.fetchImpl||globalThis.fetch;if(typeof r!="function")throw new Error("gallery fetch unavailable");let n=kv(e);if(!n)throw new Error("image host is not on the raster gallery allowlist");let o=Math.min(Math.max(Number(t.maxImageBytes??15e5),5e4),4e6);for(let i=0;i<=3;i+=1){let s=await Fe(()=>r(n.toString(),{method:"GET",redirect:"manual",headers:{accept:"image/jpeg,image/png,image/webp"},signal:AbortSignal.timeout(t.timeoutMs??12e3)}));if(!s.ok)throw new Error(s.error);let a=s.data;if(a.status>=300&&a.status<400){let u=a.headers?.get?.("location");if(!u)throw new Error("image redirect missing location");let d=kv(new URL(u,n).toString());if(!d)throw new Error("image redirect left the host allowlist");n=d;continue}if(!a.ok)throw new Error(`image HTTP ${a.status}`);let A=String(a.headers?.get?.("content-type")||"").split(";",1)[0].toLowerCase();if(!I4.has(A))throw new Error(`unsafe or unsupported image type ${A||"unknown"}`);if(Number(a.headers?.get?.("content-length")||0)>o)throw new Error("image exceeds gallery byte cap");let l=Buffer.from(await a.arrayBuffer());if(!l.length||l.length>o)throw new Error("image exceeds gallery byte cap");return{mimeType:A,data:l.toString("base64"),sourceUrl:n.toString(),bytes:l.length}}throw new Error("too many image redirects")}function Qf(e){return String(e??"").replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function y4(e,t){return e.name||e.collection||e.tokenId||`NFT ${t+1}`}async function Sv(e={},t={}){let r=Array.isArray(e.items)?e.items:[];if(!r.length)throw new Error("nft gallery requires inventory items");let n=Math.min(Math.max(Number(e.pageSize??12)||12,1),12),o=Math.max(Number(e.page??1)||1,1),i=Math.max(Math.ceil(r.length/n),1);if(o>i)throw new Error(`nft gallery page ${o} exceeds ${i}`);let s=r.slice((o-1)*n,o*n),a=[],A=0,c=Math.min(Math.max(Number(e.maxTotalBytes??8e6),25e4),12e6);for(let E of s){if(A>=c){a.push({item:E,image:null,error:"gallery page byte cap reached"});continue}try{let I=await Q4(E.imageUrl||E.originalImageUrl,{...t,maxImageBytes:Math.min(Number(e.maxImageBytes??15e5),c-A)});A+=I.bytes,a.push({item:E,image:I,error:null})}catch(I){a.push({item:E,image:null,error:String(I?.message||I).slice(0,180)})}}let l=3,u=340,d=400,h=76,g=Math.ceil(s.length/l),p=l*u,m=h+g*d,f=a.map(({item:E,image:I,error:Q},R)=>{let D=R%l,x=Math.floor(R/l),F=D*u,K=h+x*d,X=I?`<image x="${F+14}" y="${K+14}" width="312" height="312" preserveAspectRatio="xMidYMid slice" href="data:${I.mimeType};base64,${I.data}"/>`:`<rect x="${F+14}" y="${K+14}" width="312" height="312" rx="14" fill="#151820"/><text x="${F+170}" y="${K+165}" text-anchor="middle" fill="#76808f" font-size="16">image unavailable</text>`,z=Qf(y4(E,R).slice(0,34)),be=Qf(E.chain||"unknown chain");return`${X}<text x="${F+16}" y="${K+350}" fill="#f3f5f7" font-size="17" font-weight="600">${z}</text><text x="${F+16}" y="${K+376}" fill="#8d98a8" font-size="13">${be}${Q?" \xB7 placeholder":""}</text>`}).join(""),B=`<svg xmlns="http://www.w3.org/2000/svg" width="${p}" height="${m}" viewBox="0 0 ${p} ${m}"><rect width="100%" height="100%" fill="#090b10"/><text x="24" y="34" fill="#ffffff" font-size="24" font-weight="700">NFT INVENTORY</text><text x="24" y="58" fill="#8d98a8" font-size="14">page ${o} of ${i} \xB7 ${r.length} assets \xB7 generated ${Qf(new Date().toISOString())}</text>${f}</svg>`;return{provider:"nft-portfolio",operation:"gallery",mimeType:"image/svg+xml",dataBase64:Buffer.from(B).toString("base64"),page:o,pageSize:n,totalPages:i,totalItems:r.length,renderedItems:a.filter(E=>E.image).length,placeholders:a.filter(E=>!E.image).map(E=>({assetKey:E.item.assetKey||null,name:E.item.name||null,sourceUrl:E.item.imageUrl||null,error:E.error})),rasterOnly:!0,externalScripts:!1}}var w4=[/\bclaim\b/i,/\breward\b/i,/\bairdrop\b/i,/\bvoucher\b/i,/\bwinner\b/i,/\bfree\s*mint\b/i,/\bactivate\b/i,/\bunlock\b/i,/\bverify\b/i,/\bconnect\s+wallet\b/i],b4=/(https?:\/\/|www\.|[a-z0-9-]+\.(?:com|net|io|xyz|org|app|finance|gift|claims?|site|link|live|vip|top|cc))/i,k4=/(\$\s?\d|\d[\d,.]*\s*(?:usd|usdc|usdt|eth|weth|btc|sol)\b)/i;function S4(e={}){let t=[],r=String(e.name||""),n=String(e.description||""),o=`${r} ${n}`;b4.test(r)&&t.push("url-in-name");let i=w4.filter(c=>c.test(o)).length;i>0&&t.push(`lure-language:${i}`),k4.test(r)&&t.push("value-claim-in-name"),/[\u200B-\u200F\u202A-\u202E\uFEFF]/.test(r)&&t.push("invisible-characters"),e.disabled===!0&&t.push("marketplace-disabled");let s=e.estimatedValueUsd==null&&e.estimatedValueSats==null,a=!Array.isArray(e.traits)||e.traits.length===0;s&&a&&i>0&&t.push("valueless-airdrop-with-lure");let A=t.includes("url-in-name")||t.includes("invisible-characters")||t.includes("valueless-airdrop-with-lure")||t.length>=2;return{spam:A,risk:A?"high":t.length>0?"low":"none",reasons:t}}function xv(e={}){let t=S4(e);return{...e,spam:e.spam===!0||t.spam,riskLevel:t.risk,riskReasons:t.reasons.length?t.reasons:void 0}}var x4=Object.freeze([{chain:"ethereum",chainId:1,family:"evm"},{chain:"optimism",chainId:10,family:"evm"},{chain:"polygon",chainId:137,family:"evm"},{chain:"stablechain",chainId:988,family:"evm"},{chain:"hyperevm",chainId:999,family:"evm"},{chain:"abstract",chainId:2741,family:"evm"},{chain:"robinhood",chainId:4663,family:"evm"},{chain:"base",chainId:8453,family:"evm"},{chain:"arbitrum",chainId:42161,family:"evm"},{chain:"avalanche",chainId:43114,family:"evm"},{chain:"hyperliquid",chainId:null,family:"hyperliquid"}]),D4=Object.freeze([{family:"evm",chain:"bsc",chainId:56,reason:"OpenSea account inventory does not support BSC"},{family:"cosmos",reason:"requires a chain-specific bech32 address and NFT indexer"},{family:"sui",reason:"owner inventory adapter not installed"},{family:"aptos",reason:"owner inventory adapter not installed"}]);function Mn(e={},t){return{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs,env:e.env,allowDiskCredentials:e.allowDiskCredentials,allowAmbientCredentials:e.allowAmbientCredentials,...e[t]||{}}}async function ia(e,t){let r=await Fe(t);return r.ok?{ok:!0,data:r.data}:{ok:!1,error:`${e}: ${r.error}`.slice(0,300)}}function v4(e){if(Array.isArray(e))return e;for(let t of["items","results","ordinals","inscriptions","data"])if(Array.isArray(e?.[t]))return e[t];return[]}function R4(e={},t){let r=e.inscription_id||e.inscriptionId||e.id||e.inscription||null;return{chain:"bitcoin",family:"bitcoin",owner:t,contract:null,tokenId:r==null?null:String(r),tokenStandard:"ordinal",collection:e.collection_slug||e.collectionSlug||e.collection?.slug||e.collection||null,name:e.name||e.meta?.name||(r?`Inscription ${r}`:"Bitcoin inscription"),description:e.description||e.meta?.description||null,imageUrl:e.image_url||e.imageUrl||e.content_url||e.contentUrl||e.thumbnail||null,originalImageUrl:e.content_url||e.contentUrl||e.image_url||e.imageUrl||null,animationUrl:null,metadataUrl:e.metadata_url||e.metadataUrl||null,marketplaceUrl:e.marketplace_url||e.marketplaceUrl||null,estimatedValueUsd:e.estimated_value_usd!=null&&Number.isFinite(Number(e.estimated_value_usd))?Number(e.estimated_value_usd):null,estimatedValueSats:(e.floor_price_sats??e.price_sats)!=null&&Number.isFinite(Number(e.floor_price_sats??e.price_sats))?Number(e.floor_price_sats??e.price_sats):null,spam:!1,disabled:!1,nsfw:!1,listed:e.listed===!0||e.is_listed===!0,listingId:e.listing_id||e.listingId||null,traits:Array.isArray(e.traits)?e.traits:[],updatedAt:e.updated_at||e.updatedAt||null,acquisitionCost:null,itemPnl:{status:"unavailable",reason:"Satflow wallet inventory does not expose trustworthy acquisition cost"},listingAdapter:"satflow",source:"satflow-wallet-contents"}}function N4(e,t){return{chain:"bitcoin",family:"bitcoin",owner:t,contract:null,tokenId:String(e),tokenStandard:"ordinal",collection:null,name:`Inscription ${e}`,description:null,imageUrl:null,originalImageUrl:null,animationUrl:null,metadataUrl:null,marketplaceUrl:null,estimatedValueUsd:null,spam:!1,disabled:!1,nsfw:!1,traits:[],updatedAt:null,acquisitionCost:null,itemPnl:{status:"unavailable",reason:"address indexer returned no acquisition or valuation data"},listingAdapter:"satflow",source:"bitcoin-meta-address-indexer"}}function Rv(e={}){return[e.chain||"unknown",e.contract||"native",e.tokenId||"unknown"].join(":").toLowerCase()}function F4(e){let t=new Map;if(Array.isArray(e)){for(let r of e)r?.assetKey&&t.set(String(r.assetKey).toLowerCase(),r);return t}if(e&&typeof e=="object")for(let[r,n]of Object.entries(e))t.set(r.toLowerCase(),n);return t}function M4(e,t){let r=Rv(e),n=t.get(r),o=e.estimatedValueUsd==null?null:Number(e.estimatedValueUsd);if(!n)return{...e,assetKey:r};let i=Number(n.costUsd),s=Number(n.feesUsd??0);if(!Number.isFinite(i)||i<0||!Number.isFinite(s)||s<0)return{...e,assetKey:r,acquisitionCost:null,itemPnl:{status:"unavailable",reason:"invalid user-supplied cost basis"}};let a=Math.round((i+s)*100)/100;return Number.isFinite(o)?{...e,assetKey:r,acquisitionCost:{costUsd:i,feesUsd:s,totalCostUsd:a,acquiredAt:n.acquiredAt||null,source:n.source||"user-supplied"},itemPnl:{status:"estimated",methodology:"provider estimated current value minus supplied USD acquisition cost and fees",unrealizedUsd:Math.round((o-a)*100)/100,currentValueUsd:o,totalCostUsd:a,realizedUsd:null}}:{...e,assetKey:r,acquisitionCost:{costUsd:i,feesUsd:s,totalCostUsd:a,acquiredAt:n.acquiredAt||null,source:n.source||"user-supplied"},itemPnl:{status:"unavailable",reason:"current NFT valuation is unavailable"}}}function U4(e){let t=new Map;for(let r of e){let n=Rv(r);t.has(n)||t.set(n,r)}return[...t.values()]}function L4(e,t){let r=e.filter(i=>i.itemPnl?.status==="estimated"),n=e.length-r.length,o=Math.round(r.reduce((i,s)=>i+Number(s.itemPnl.unrealizedUsd||0),0)*100)/100;return{nftItemPnl:{status:n===0&&e.length?"estimated-complete-for-held-items":r.length?"partial":"unavailable",methodology:"Only items with explicit acquisition cost and provider estimated current value are included",knownUnrealizedUsd:o,knownItems:r.length,unknownItems:n,realizedUsd:null,warning:"Transfers, gifts, airdrops, mints, bridges, gas, royalties, and off-market sales can make cost basis unavailable or incomplete."},providerAccountPnl:t}}async function Nv(){return{ok:!0,provider:"nft-portfolio",readOnly:!0,marketplaces:["opensea","magiceden-sol","satflow"],listingExecution:"prepare-only"}}async function di(e={},t={}){let r=new Date().toISOString(),n=Fn(e,t.env||process.env),o=Array.isArray(e.chains)&&e.chains.length?new Set(e.chains.map(I=>String(I).toLowerCase())):null,i=x4.filter(I=>!o||o.has(I.chain)),s=[],a=[],A=Mn(t,"opensea"),c=n.evm?i.filter(I=>I.family!=="solana"):[],l=await Po(c,4,async I=>({row:I,result:await ia(`opensea-${I.chain}`,()=>qs({chain:I.chain,address:n.evm,pageSize:e.pageSize,maxPages:e.maxPages},A),t.timeoutMs??35e3)}));for(let{row:I,result:Q}of l)if(Q.ok){let R=Q.data.nfts.map(D=>({...D,family:I.family,chainId:I.chainId,listingAdapter:"opensea",source:"opensea-account-inventory"}));a.push(...R),s.push({family:I.family,chain:I.chain,chainId:I.chainId,status:Q.data.complete?"ok":"partial",count:R.length,complete:Q.data.complete,next:Q.data.next,source:"opensea"})}else s.push({family:I.family,chain:I.chain,chainId:I.chainId,status:"unavailable",error:Q.error,source:"opensea"});if(!n.evm)for(let I of i.filter(Q=>Q.family!=="solana"))s.push({family:I.family,chain:I.chain,chainId:I.chainId,status:"not-configured",reason:"EVM address missing"});if(n.solana&&(!o||o.has("solana"))){let I=await ia("opensea-solana",()=>qs({chain:"solana",address:n.solana,pageSize:e.pageSize,maxPages:e.maxPages},A),t.timeoutMs??35e3);if(I.ok){let Q=I.data.nfts.map(R=>({...R,family:"solana",chainId:null,listingAdapter:null,source:"opensea-account-inventory"}));a.push(...Q),s.push({family:"solana",chain:"solana",status:I.data.complete?"ok":"partial",count:Q.length,complete:I.data.complete,next:I.data.next,source:"opensea"})}else s.push({family:"solana",chain:"solana",status:"unavailable",error:I.error,source:"opensea"})}else(!o||o.has("solana"))&&s.push({family:"solana",chain:"solana",status:"not-configured",reason:"Solana address missing"});if(n.bitcoin&&(!o||o.has("bitcoin"))){let I=await ia("satflow-wallet-contents",()=>Uc({address:n.bitcoin,type:"ordinals",limit:e.bitcoinLimit??100,offset:0},Mn(t,"satflow")),t.timeoutMs??35e3);if(I.ok){let Q=v4(I.data.contents).map(D=>R4(D,n.bitcoin));a.push(...Q);let R=Q.length<Number(e.bitcoinLimit??100);s.push({family:"bitcoin",chain:"bitcoin",status:R?"ok":"partial",count:Q.length,complete:R,source:"satflow"})}else{let Q=await ia("bitcoin-meta-inscriptions",()=>Jo({address:n.bitcoin},Mn(t,"bitcoinMeta")),t.timeoutMs??35e3),R=Q.ok&&Q.data?.ok&&Array.isArray(Q.data.inscriptions)?Q.data.inscriptions:[];a.push(...R.map(D=>N4(D,n.bitcoin))),s.push({family:"bitcoin",chain:"bitcoin",status:R.length?"partial":"unavailable",count:R.length,complete:!1,source:R.length?"bitcoin-meta":"satflow",error:R.length?"Satflow unavailable; fallback has IDs only":I.error})}}else(!o||o.has("bitcoin"))&&s.push({family:"bitcoin",chain:"bitcoin",status:"not-configured",reason:"Bitcoin address missing"});let u=[];if(e.includePnl!==!1)for(let I of[...new Set([n.evm,n.solana].filter(Boolean))]){let Q=await ia(`opensea-pnl-${I}`,()=>$c({address:I},A),t.timeoutMs??35e3);u.push(Q.ok?{status:"ok",...Q.data}:{status:"unavailable",address:I,source:"opensea-indexed-account-pnl",error:Q.error})}let d=F4(e.costBasis),h=U4(a).map(I=>M4(I,d)).map(I=>xv(I)),g=h.filter(I=>!I.spam),p=h.filter(I=>I.spam),m=g.filter(I=>I.estimatedValueUsd!=null&&Number.isFinite(Number(I.estimatedValueUsd))),f=Math.round(m.reduce((I,Q)=>I+Number(Q.estimatedValueUsd),0)*100)/100,B=g.length-m.length,E=s.filter(I=>I.status!=="ok"||I.complete===!1);return{provider:"nft-portfolio",operation:"inventory",readOnly:!0,generatedAt:r,addresses:n,coverage:s,unsupported:D4,inventory:{count:h.length,visibleCount:g.length,flaggedCount:p.length,items:h,visibleItems:g,flaggedItems:p},valuation:{estimatedCurrentValueUsd:f,valuedItems:m.length,unvaluedItems:B,complete:B===0&&E.length===0,methodology:"Sum of provider estimated_value_usd for non-flagged items. It is not an executable bid."},pnl:L4(g,u),listingCoverage:{opensea:"EVM listing actions available with OPENSEA_API_KEY, explicit price/currency/expiry, and user confirmation",satflow:"Bitcoin unsigned listing PSBT available with SATFLOW_API_KEY, explicit price/expiry, and user confirmation",solana:"Magic Eden unsigned list transaction available with MAGICEDEN_API_KEY, explicit SOL price/expiry, and user confirmation",unsupported:"Sui, Aptos, Cosmos, BSC, and unknown marketplaces fail closed"},traitSniperCoverage:{opensea:"Evaluates reveal/trait-floor mispricing only with recent trait sales and volume evidence. Buy intents require local vault signing.",execution:"prepare-only on hosted surfaces; local vault required for purchase"},metadataSafety:{imagesAreUntrusted:!0,animationAndHtmlNotRendered:!0,galleryRasterOnly:!0,missingImagesUsePlaceholders:!0}}}function Dv(e,t){let r=typeof e=="number"?e*1e3:Date.parse(String(e||""));if(!Number.isFinite(r))throw new Error(`${t} must be an ISO 8601 timestamp or Unix seconds`);let n=Math.floor(r/1e3);if(n<=Math.floor(Date.now()/1e3))throw new Error(`${t} must be in the future`);return n}function T4(e){let t=String(e??"").trim();if(!/^[1-9]\d*$/.test(t))throw new Error("Bitcoin NFT list priceSats must be a positive integer");return t}async function Fv(e={},t={}){if(e.userConfirmed!==!0)throw new Error("NFT listing preparation requires userConfirmed=true after reviewing asset, marketplace, price, currency, fees, royalties, and expiry");let r=String(e.marketplace||"").trim().toLowerCase();if(r==="opensea")return jc(e,Mn(t,"opensea"));if(r==="magiceden"||r==="magiceden-sol"){let n=Dv(e.expiry??e.endTime,"Solana NFT listing expiry");return Zc({...e,expiry:n},Mn(t,"magiceden"))}if(r==="satflow"){let n=Dv(e.expiry??e.endTime??e.expiresAt,"Bitcoin NFT listing expiry");return Lc({inscription_id:e.inscriptionId||e.tokenId,runes_output:e.runesOutput,ord_address:e.ordAddress||e.seller,receive_address:e.receiveAddress,price:T4(e.priceSats??e.price),tap_key:e.tapKey,collection_slug:e.collectionSlug||e.collection,expires_at:n},Mn(t,"satflow"))}throw new Error(`unsupported NFT marketplace: ${r||"<missing>"}`)}function yf(e,t){let r=Number(e);if(!Number.isFinite(r)||r<0)throw new Error(`${t} must be a non-negative ETH number`);return r}function wf(e){if(e==null||e==="")return null;let t=Number(e);return Number.isFinite(t)&&t>0?t:null}function bl(e){return String(e??"").trim().toLowerCase()}function P4(e={},t,r){let n=Array.isArray(e.traits)?e.traits:[],o=bl(t),i=bl(r);return!o||!i?!1:n.some(s=>bl(s.trait_type??s.traitType??s.type)===o&&bl(s.value??s.trait_value??s.traitValue)===i)}function _4(e={},t){if(!t)return!0;let r=String(e.contract||e.tokenContract||e.assetContract||"").toLowerCase();return!r||r===String(t).toLowerCase()}function vv(e={},t=["timestamp","listedAt","createdAt"]){for(let r of t){let n=e[r]??e[r.replace(/[A-Z]/g,i=>`_${i.toLowerCase()}`)];if(n==null)continue;let o=typeof n=="number"?n:Date.parse(String(n));if(Number.isFinite(o))return o}return null}function bf(e){return Math.round(Number(e)*1e6)/1e6}function Wr(e,t,r={}){return{provider:"nft-portfolio",operation:"traitSnipe",marketplace:String(e.marketplace||"").toLowerCase(),collectionSlug:e.collectionSlug||e.collection||null,contract:e.contract||null,decision:"PASS",reason:t,executionReady:!1,signingReady:!1,broadcastReady:!1,requiresLocalVault:!0,best:null,evidence:r,prepareIntent:null}}async function Mv(e={},t={}){let r=String(e.marketplace||"").trim().toLowerCase();if(r!=="opensea")return Wr(e,`unsupported NFT marketplace: ${r||"<missing>"}`);let o=["traitType","traitValue","maxPriceEth","minDiscountBps","minTraitSales","minTraitVolumeEth","traitFloorEth"].filter(D=>e[D]==null||e[D]==="");if(o.length)return Wr(e,`trait-risk-params-required: ${o.join(",")}`);let i=Number.isFinite(Number(e.nowMs))?Number(e.nowMs):Date.now(),s=yf(e.maxPriceEth,"maxPriceEth"),a=Number(e.minDiscountBps),A=Number(e.minTraitSales),c=yf(e.minTraitVolumeEth,"minTraitVolumeEth"),l=yf(e.traitFloorEth,"traitFloorEth"),u=wf(e.collectionFloorEth),d=wf(e.maxListingAgeMs),h=wf(e.maxSaleAgeMs??e.salesWindowMs);if(!Number.isFinite(a)||a<0)return Wr(e,"invalid-min-discount-bps");if(!Number.isFinite(A)||A<1)return Wr(e,"invalid-min-trait-sales");if(l<=0)return Wr(e,"trait-floor-unavailable");let g=D=>P4(D,e.traitType,e.traitValue)&&_4(D,e.contract),p=(Array.isArray(e.sales)?e.sales:[]).filter(g).filter(D=>{if(!h)return!0;let x=vv(D,["timestamp","soldAt","createdAt"]);return x!=null&&i-x<=h}),m=bf(p.reduce((D,x)=>D+Number(x.priceEth??x.price??0),0)),f={count:p.length,volumeEth:m,minSales:A,minVolumeEth:c};if(p.length<A||m<c)return Wr(e,"trait-liquidity-insufficient",{traitSales:f});let B=(Array.isArray(e.listings)?e.listings:[]).filter(g).filter(D=>{let x=Number(D.priceEth??D.price);if(!Number.isFinite(x)||x<=0||x>s)return!1;if(!d)return!0;let F=vv(D,["listedAt","createdAt","timestamp"]);return F!=null&&i-F<=d}).map(D=>{let x=Number(D.priceEth??D.price),F=Math.round((l-x)/l*1e4);return{...D,priceEth:x,discountBps:F}}).filter(D=>D.discountBps>=a).sort((D,x)=>D.priceEth-x.priceEth||x.discountBps-D.discountBps),E={traitSales:f,collectionFloorEth:u,traitFloorEth:l,listingDepth:{count:B.length,minFreshListings:e.minTraitListings==null?null:Number(e.minTraitListings)},methodology:"Trait buy intent requires caller-supplied fresh listings, real trait sales, volume, max price, and min discount gates. Rarity metadata alone is ignored."},I=e.minTraitListings==null?1:Number(e.minTraitListings);if(!Number.isFinite(I)||I<1)return Wr(e,"invalid-min-trait-listings",E);if(B.length<I)return Wr(e,"trait-listing-depth-insufficient",E);let Q=B[0],R=L({provider:"nft-portfolio",kind:"nft-trait-buy-intent",marketplace:r,chain:e.chain||null,collectionSlug:e.collectionSlug||e.collection||null,contract:e.contract||null,tokenId:Q.tokenId==null?null:String(Q.tokenId),listingId:Q.listingId||null,orderHash:Q.orderHash||null,priceEth:bf(Q.priceEth),maxPriceEth:s,traitType:e.traitType,traitValue:e.traitValue,evidence:E,localOnly:!0,requiresLocalVault:!0},{provider:"nft-portfolio",kind:"nft-trait-buy-intent",env:t.env||process.env});return{provider:"nft-portfolio",operation:"traitSnipe",marketplace:r,collectionSlug:e.collectionSlug||e.collection||null,contract:e.contract||null,decision:"BUY",reason:"trait-mispricing-evidence-met",executionReady:!1,signingReady:!1,broadcastReady:!1,requiresLocalVault:!0,best:{tokenId:Q.tokenId==null?null:String(Q.tokenId),listingId:Q.listingId||null,orderHash:Q.orderHash||null,priceEth:bf(Q.priceEth),discountBps:Q.discountBps},evidence:E,prepareIntent:R}}async function Uv(e={},t={}){let r=await di({...e,includePnl:!0},t);return{provider:"nft-portfolio",operation:"pnl",readOnly:!0,generatedAt:r.generatedAt,addresses:r.addresses,coverage:r.coverage,unsupported:r.unsupported,valuation:r.valuation,pnl:r.pnl}}async function Lv(e={},t={}){let r=Array.isArray(e.items)?e.items:null,n=null;return r||(n=await di({...e,includePnl:!1},t),r=n.inventory.visibleItems),{...await Sv({...e,items:r},Mn(t,"gallery")),inventorySummary:n?{visibleCount:n.inventory.visibleCount,flaggedCount:n.inventory.flaggedCount,coverage:n.coverage}:null}}var Tv=10*1024*1024,Ov=1e3;function $r(e){if(e==null||e==="")return null;let t=Number(e);return Number.isFinite(t)?t:null}function gi(e){return Number.isFinite(e)?Number(e.toFixed(2)):null}function Pv(e,t){if(e==null||e==="")return null;let r=Date.parse(String(e));if(!Number.isFinite(r))throw new Error(`${t} must be an ISO 8601 timestamp`);return new Date(r).toISOString()}function Hv(e,t,r,n,o){if(e==null||e==="")return t;let i=Number(e);if(!Number.isInteger(i)||i<r||i>n)throw new Error(`${o} must be an integer from ${r} to ${n}`);return i}function $4(e={}){return["evm","solana","bitcoin","hyperliquid"].map(t=>`${t}:${String(e[t]||"").trim().toLowerCase()}`).join("|")}function Gv(e={}){return`portfolio_${V4("sha256").update($4(e)).digest("hex").slice(0,20)}`}function qv(e={}){if(e.historyFile)return hi.resolve(String(e.historyFile));let t=e.env||process.env;if(t.ORACLE_PORTFOLIO_HISTORY_FILE)return hi.resolve(String(t.ORACLE_PORTFOLIO_HISTORY_FILE));let r=String(t.HERMES_HOME||"").trim()||hi.join(W4.homedir(),".hermes");return hi.join(hi.resolve(r),"state","oracle","portfolio-history.jsonl")}function z4(e){let t=$r(e?.valuation?.knownUsd);return t==null?null:Number(e?.valuation?.pricedItems||0)>0||e?.valuation?.complete===!0?gi(t):null}function K4(e){if(!e||e.status==="unavailable"||e.status==="not-requested")return null;let t=$r(e?.valuation?.estimatedCurrentValueUsd);return t==null?null:Number(e?.valuation?.valuedItems||0)>0||e?.valuation?.complete===!0?gi(t):null}function j4(e){let t=[];for(let r of e?.chains||[]){if(r.family==="hyperliquid"){let o=(r.spot?.balances||[]).reduce((a,A)=>{let c=$r(A.usdValue);return c==null?a:a+c},0),i=$r(r.perps?.accountValueUsd),s=gi(o+(i??0));(s!==0||i!=null||(r.spot?.balances||[]).some(a=>$r(a.usdValue)!=null))&&t.push({family:"hyperliquid",chainId:null,name:r.name||"Hyperliquid",knownUsd:s});continue}let n=$r(r.native?.usdValue);n!=null&&t.push({family:r.family||"evm",chainId:r.chainId??null,name:r.name||r.native?.symbol||"Unknown",knownUsd:gi(n)})}return t}function Z4(e,t,r){let n=Array.isArray(t?.coverage)?t.coverage:[];return{balances:e?.coverage||null,nfts:{requested:r,ok:n.filter(o=>o.status==="ok").length,partial:n.filter(o=>o.status==="partial").length,unavailable:n.filter(o=>o.status==="unavailable").length,notConfigured:n.filter(o=>o.status==="not-configured").length,status:r?t?.status==="unavailable"?"unavailable":t?.valuation?.complete?"ok":"partial":"not-requested"}}}async function X4(e,t){let r=qv(t),n=`${JSON.stringify(e)}
|
|
188
|
+
`;if(Buffer.byteLength(n)>32*1024)throw new Error("portfolio history snapshot exceeds 32 KiB");await G4(hi.dirname(r),{recursive:!0,mode:448});let o=kl.O_APPEND|kl.O_CREAT|kl.O_WRONLY|(kl.O_NOFOLLOW||0),i=await q4(r,o,384);try{await i.writeFile(n,"utf8")}finally{await i.close()}return await H4(r,384),r}async function Yv(e={},t={}){let r=e.includeNfts!==!1,n=t.portfolioBalanceImpl||wl,o=t.nftInventoryImpl||di,i=n(e,t),s=r?o({...e,includePnl:!1},t).catch(Q=>({status:"unavailable",error:String(Q?.message||Q).slice(0,300)})):Promise.resolve({status:"not-requested"}),[a,A]=await Promise.all([i,s]),c=z4(a),l=K4(A),u=[c,l].filter(Q=>Q!=null),d=u.length?gi(u.reduce((Q,R)=>Q+R,0)):null,h=!!(a?.valuation?.complete&&(!r||A?.valuation?.complete===!0)),g=typeof t.now=="function"?t.now():new Date,p=new Date(g).toISOString(),m=a?.addresses||Fn(e,t.env||process.env),f=Gv(m),B=[...a?.warnings||[]];r&&A?.status==="unavailable"&&B.push(`NFT inventory unavailable: ${A.error}`),r&&A?.valuation&&A.valuation.complete!==!0&&B.push("NFT estimated value is incomplete and is not an executable bid.");let E={schemaVersion:1,id:`snapshot_${J4()}`,portfolioId:f,recordedAt:p,sourceQueriedAt:{balances:a?.queriedAt||null,nfts:A?.generatedAt||null},configuredFamilies:Object.fromEntries(["evm","solana","bitcoin","hyperliquid"].map(Q=>[Q,!!m?.[Q]])),valuation:{knownUsd:d,liquidKnownUsd:c,nftEstimatedValueUsd:l,complete:h,label:h?"complete known portfolio value":"known priced value, including provider-estimated NFTs when available, not a complete portfolio total",liquidPricedItems:Number(a?.valuation?.pricedItems||0),liquidUnpricedNonzeroItems:Number(a?.valuation?.unpricedNonzeroItems||0),nftValuedItems:Number(A?.valuation?.valuedItems||0),nftUnvaluedItems:Number(A?.valuation?.unvaluedItems||0)},breakdown:{liquid:j4(a),nfts:{knownUsd:l,visibleItems:Number(A?.inventory?.visibleCount||0),flaggedItems:Number(A?.inventory?.flaggedCount||0)}},coverage:Z4(a,A,r),warnings:[...new Set(B)].slice(0,50)};return{provider:"portfolio",operation:"snapshot",readOnly:!0,localObservationRecorded:!0,historyFile:await X4(E,t),snapshot:E,balance:a,nfts:A}}async function eW(e){let t=qv(e);try{let r=await Y4(t);if(r.byteLength>Tv)throw new Error(`portfolio history exceeds ${Tv} bytes`);let n=[],o=0;for(let i of r.toString("utf8").split(`
|
|
189
|
+
`))if(i.trim())try{let s=JSON.parse(i);s?.schemaVersion===1&&s?.portfolioId&&s?.recordedAt?n.push(s):o+=1}catch{o+=1}return{file:t,snapshots:n,corruptLines:o}}catch(r){if(r?.code==="ENOENT")return{file:t,snapshots:[],corruptLines:0};throw r}}function tW(e,t){if(e.allPortfolios===!0)return null;if(e.portfolioId)return String(e.portfolioId);let r=Fn(e,t.env||process.env);return Object.values(r).some(Boolean)?Gv(r):null}async function kf(e={},t={}){let r=Hv(e.limit,100,1,Ov,"portfolio history limit"),n=String(e.order||"desc").toLowerCase();if(!new Set(["asc","desc"]).has(n))throw new Error("portfolio history order must be asc or desc");let o=Pv(e.since,"portfolio history since"),i=Pv(e.until,"portfolio history until"),s=tW(e,t),a=await eW(t),A=a.snapshots.filter(u=>!(s&&u.portfolioId!==s||o&&u.recordedAt<o||i&&u.recordedAt>i));A.sort((u,d)=>String(u.recordedAt).localeCompare(String(d.recordedAt)));let c=A.length;A=A.slice(-r),n==="desc"&&A.reverse();let l=A.filter(u=>$r(u?.valuation?.knownUsd)!=null);return{provider:"portfolio",operation:"history",readOnly:!0,historyFile:a.file,portfolioId:s,order:n,totalStored:a.snapshots.length,totalMatching:c,corruptLines:a.corruptLines,snapshots:A,stats:{returned:A.length,valuedSnapshots:l.length,unpricedSnapshots:A.length-l.length,firstRecordedAt:A.length?[...A].sort((u,d)=>String(u.recordedAt).localeCompare(String(d.recordedAt)))[0].recordedAt:null,lastRecordedAt:A.length?[...A].sort((u,d)=>String(u.recordedAt).localeCompare(String(d.recordedAt))).at(-1).recordedAt:null}}}function _v(e){return`$${Number(e).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}`}function Sl(e){return String(e).replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function rW(e,t){if(e.length<=t)return e;let r=[];for(let n=0;n<t;n+=1)r.push(e[Math.round(n*(e.length-1)/(t-1))]);return r}function nW(e,t){let A=e.map(E=>E.value),c=Math.min(...A),l=Math.max(...A);if(c===l){let E=Math.max(1,Math.abs(c)*.05);c-=E,l+=E}else{let E=(l-c)*.1;c=Math.max(0,c-E),l+=E}let u=E=>e.length===1?1240/2:100+1040*E/(e.length-1),d=E=>570-(E-c)/(l-c)*470,h=e.map((E,I)=>`${I?"L":"M"}${u(I).toFixed(2)},${d(E.value).toFixed(2)}`).join(" "),g=Array.from({length:5},(E,I)=>{let Q=I/4,R=100+Q*470,D=l-Q*(l-c);return`<line x1="100" y1="${R}" x2="1140" y2="${R}" stroke="#26313c" stroke-width="1"/><text x="86" y="${R+5}" text-anchor="end" fill="#8795a5" font-size="15">${_v(D)}</text>`}).join(""),p=e.map((E,I)=>`<circle cx="${u(I)}" cy="${d(E.value)}" r="5" fill="#b8f0ff"><title>${Sl(E.recordedAt)}: ${_v(E.value)}</title></circle>`).join(""),m=Sl(e[0].recordedAt.slice(0,10)),f=Sl(e.at(-1).recordedAt.slice(0,10));return`<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="675" viewBox="0 0 1200 675"><rect width="1200" height="675" fill="#0b1016"/><text x="60" y="50" fill="#f4f7fa" font-size="28" font-family="Inter,Arial,sans-serif" font-weight="700">Oracle Portfolio Value</text><text x="60" y="78" fill="#8795a5" font-size="15" font-family="Inter,Arial,sans-serif">Known priced value, not a complete total unless every snapshot says complete \xB7 ${Sl(t||"configured portfolio")}</text>${g}<line x1="100" y1="570" x2="1140" y2="570" stroke="#526171" stroke-width="1"/><path d="${h}" fill="none" stroke="#b8f0ff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>${p}<text x="100" y="610" fill="#8795a5" font-size="15">${m}</text><text x="1140" y="610" text-anchor="end" fill="#8795a5" font-size="15">${f}</text><text x="60" y="650" fill="#526171" font-size="13">NFT values are provider estimates, not executable bids. Unavailable values are omitted, never plotted as zero.</text></svg>`}async function Vv(e={},t={}){if(e.allPortfolios===!0)throw new Error("portfolio value graph requires one portfolioId or configured public-address portfolio");let r=Hv(e.maxPoints,200,2,500,"portfolio graph maxPoints"),n=await kf({...e,order:"asc",limit:e.limit??Ov},t);if(!n.portfolioId)throw new Error("portfolio value graph requires one portfolioId or configured public-address portfolio");let o=n.snapshots.map(u=>({recordedAt:u.recordedAt,value:$r(u?.valuation?.knownUsd),complete:u?.valuation?.complete===!0})).filter(u=>u.value!=null);if(!o.length)throw new Error("portfolio value graph requires at least one snapshot with known priced value");let i=rW(o,r),s=i[0].value,a=i.at(-1).value,A=gi(a-s),c=s===0?null:Number(((a-s)/s*100).toFixed(2)),l=nW(i,n.portfolioId);return{provider:"portfolio",operation:"valueGraph",readOnly:!0,portfolioId:n.portfolioId,mimeType:"image/svg+xml",dataBase64:Buffer.from(l).toString("base64"),byteLength:Buffer.byteLength(l),summary:{points:i.length,omittedUnavailablePoints:n.snapshots.length-o.length,startRecordedAt:i[0].recordedAt,endRecordedAt:i.at(-1).recordedAt,startKnownUsd:s,endKnownUsd:a,changeUsd:A,changePct:c,completeSnapshots:i.filter(u=>u.complete).length,label:"known priced value history; incomplete snapshots are not complete portfolio totals"}}}De();var iW=Object.freeze({"8da5cb5b":{name:"owner()",weight:"low",note:"contract has an owner"},f2fde38b:{name:"transferOwnership(address)",weight:"low",note:"ownership transferable"},"40c10f19":{name:"mint(address,uint256)",weight:"high",note:"owner can mint new supply"},a0712d68:{name:"mint(uint256)",weight:"high",note:"owner can mint new supply"},f9f92be4:{name:"blacklist(address)",weight:"high",note:"addresses can be blocked from selling"},e4997dc5:{name:"removeBlackList(address)",weight:"high",note:"blacklist machinery present"},"8456cb59":{name:"pause()",weight:"high",note:"transfers can be frozen"},"3f4ba83a":{name:"unpause()",weight:"high",note:"pausable transfers"},c0246668:{name:"setFee/excludeFromFee",weight:"high",note:"transfer fees can be changed"},"3659cfe6":{name:"upgradeTo(address)",weight:"high",note:"logic can be replaced entirely"},"4f1ef286":{name:"upgradeToAndCall(address,bytes)",weight:"high",note:"logic can be replaced entirely"}}),sW=Object.freeze([{label:"eip1967",slot:"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"},{label:"zeppelinos",slot:"0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3"},{label:"eip1822",slot:"0xc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7"}]),aW=`0x${"0".repeat(64)}`;function AW(e){return!e||e==="0x"||e===aW}async function Un(e={},t={}){let r=t.rpcCall||V,n=String(e.address||"").trim().toLowerCase(),o=Number(e.chainId);if(!/^0x[a-f0-9]{40}$/.test(n))return{status:"error",error:"address must be a 0x-prefixed EVM address",risk:"unknown-risk",findings:[],notes:[]};if(!Number.isInteger(o))return{status:"error",error:"chainId is required",risk:"unknown-risk",findings:[],notes:[]};let i;try{i=await r(o,"eth_getCode",[n,"latest"],t)}catch(g){return{address:n,chainId:o,status:"unavailable",error:g?.message||"eth_getCode failed",risk:"unknown-risk",findings:[],isProxy:!1,codeSize:0,notes:["could not read contract code; treat as unverified"]}}if(!i||i==="0x")return{address:n,chainId:o,status:"ok",risk:"high",findings:[{selector:"-",name:"no-code",weight:"high",note:"no contract deployed at this address"}],isProxy:!1,codeSize:0,notes:["nothing is deployed here \u2014 an approval or transfer to this address is unrecoverable"]};let s=[],a=[],A=i.slice(2).toLowerCase();for(let[g,p]of Object.entries(iW))A.includes(g)&&a.push({selector:`0x${g}`,...p});let c=!1,l=null,u=null;for(let{label:g,slot:p}of sW)try{let m=await r(o,"eth_getStorageAt",[n,p,"latest"],t);if(!AW(m)){c=!0,l=g,u=`0x${String(m).slice(-40)}`;break}}catch{s.push(`proxy slot (${g}) unreadable; proxy status uncertain`)}c&&(a.push({selector:l,name:"proxy",weight:"high",note:"implementation is upgradeable \u2014 current behaviour is not a guarantee"}),s.push(`bytecode scan covers the proxy (${l}), not the implementation ${u} it delegates to`));let h=a.filter(g=>g.weight==="high").length>0?"high":a.length>0?"elevated":"unknown-risk";return h==="unknown-risk"&&s.push("no owner-power selectors found; this is weak evidence, not a safety guarantee"),{address:n,chainId:o,status:"ok",risk:h,findings:a,isProxy:c,proxyStandard:l,implementation:u,codeSize:Math.floor(A.length/2),notes:s}}async function Jv(e={}){let t=Date.now();try{let r=await Un({address:"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",chainId:1},e),n=r.status==="ok";return{provider:"contract-risk",status:n?"ok":"degraded",latencyMs:Date.now()-t,detail:n?"bytecode reads reachable":r.error||"probe returned no code"}}catch(r){return{provider:"contract-risk",status:"down",latencyMs:Date.now()-t,detail:r?.message||"probe failed"}}}var lW=/^0x[0-9a-fA-F]{40}$/,Wv=4663;function xl(e,t){let r=String(e||"").trim();if(!lW.test(r))throw new Error(`evm-token-sniper: ${t} must be a 0x EVM address`);return r}function Sf(e,t){let r=String(e??"").trim();if(!/^\d+$/.test(r)||BigInt(r)<=0n)throw new Error(`evm-token-sniper: ${t} must be a positive raw integer amount`);return r}function sa(e,t){return e==null||e===""?null:Sf(e,t)}function uW({chainId:e,tokenAddress:t,tokenIn:r,amountIn:n,recipient:o,quote:i,topPool:s,unsignedTx:a,args:A,opts:c}){let l=a?.tx;if(!l||typeof l!="object")throw new Error("local-signer envelope requires unsigned tx object");let u=xl(l.to,"prepared destination"),d=String(l.data||"").toLowerCase();if(!/^0x[0-9a-f]+$/.test(d))throw new Error("local-signer envelope requires hex calldata");let h=Sf(l.value??n,"prepared native value");if(BigInt(h)!==BigInt(n))throw new Error("local-signer envelope requires native value equal amountIn");let g=sa(l.gasLimit??A.gasLimit,"gasLimit"),p=sa(l.maxFeePerGas??A.maxFeePerGas,"maxFeePerGas");if(!g||!p)throw new Error("local-signer envelope requires explicit gasLimit and maxFeePerGas caps");let m=Number(c.nowMs??Date.now()),f=Math.min(6e4,Math.max(1e3,Number(A.ttlMs??A.expiresInMs??3e4)||3e4)),B=kg({chainId:e,venue:"uniswap-v3",quoteAmountOut:i?.amountOut,liquidityUsd:s?.liquidityUsd,requestedCapBps:A.slippageBps??50,quotedAtMs:m,ttlMs:f,secret:c.routeAttestationSecret}),E=Qe(B,{chainId:e,venue:"uniswap-v3",data:d,secret:c.routeAttestationSecret}),I={chainId:e,from:o,to:u,data:d,value:h,gasLimit:g,maxFeePerGas:p,slippageBps:E.selectedBps,expiresAtMs:m+f},Q=sa(l.maxPriorityFeePerGas??A.maxPriorityFeePerGas,"maxPriorityFeePerGas");return Q&&(I.maxPriorityFeePerGas=Q),A.nonce!==void 0&&(I.nonce=Number(A.nonce)),(A.txType!==void 0||Q)&&(I.type=Number(A.txType??2)),A.l1FeeWei!==void 0&&(I.l1FeeWei=sa(A.l1FeeWei,"l1FeeWei")??"0"),A.operatorFeeWei!==void 0&&(I.operatorFeeWei=sa(A.operatorFeeWei,"operatorFeeWei")??"0"),{version:1,surface:"evm-swap",action:"swap",provider:"uniswap-v3",owner:o,destination:u,tradeId:A.tradeId||`evm-token-sniper-${e}-${t.toLowerCase()}`,slippageBps:E.selectedBps,expiresAtMs:m+f,fee:{oracleFeeBps:5},autoSlippage:E,artifact:{chainId:e,owner:o,transactions:[I]},meta:{source:"evm-token-sniper",tokenIn:r,tokenOut:t}}}function dW(e,t){if(t){if(Number(t.chainId)!==e)throw new Error(`evm-token-sniper: supplied scanner chain ${t.chainId} does not match ${e}`);return t}Pg();let r=xb(e);if(!r)throw new Error(`evm-token-sniper: unsupported EVM chainId ${e}`);return r}function hW({token:e,pools:t,structuralRisk:r,scannerRisk:n,sellability:o,quote:i,args:s,scanner:a}){let A=[];return e?.evidence!==Z.LIVE&&A.push("token identity is not live-verified"),(!Array.isArray(t?.pools)||t.pools.length===0)&&A.push("no liquid pool was resolved"),r?.status!=="ok"&&A.push("structural contract risk is unavailable"),r?.risk==="high"&&A.push("structural contract risk is high"),n?.verdict!==$.PASS&&A.push(`scanner risk verdict is ${n?.verdict||"UNKNOWN"}`),a.supports?.("sellSimulation")?o?.verdict!==$.PASS&&A.push(`sellability verdict is ${o?.verdict||"UNKNOWN"}`):A.push("sell simulation is unavailable on this chain"),a.supports?.("quote")?i?.evidence!==Z.LIVE&&A.push("no live quote was returned"):A.push("live quoting is unavailable on this chain"),a.supports?.("prepareUnsignedTx")||A.push("unsigned transaction preparation is unavailable on this chain"),s.tokenIn||A.push("tokenIn is required to prepare"),s.amountIn||A.push("amountIn is required to prepare"),s.recipient||A.push("recipient is required to prepare"),A}async function $v(e={},t={}){let r=Number(e.chainId??Wv);if(!Number.isInteger(r)||r<=0)throw new Error("evm-token-sniper: chainId must be a positive integer");let n=xl(e.tokenAddress||e.address||e.token,"tokenAddress"),o=e.tokenIn?xl(e.tokenIn,"tokenIn"):null,i=e.recipient?xl(e.recipient,"recipient"):null,s=e.amountIn==null?null:Sf(e.amountIn,"amountIn"),a=dW(r,t.scanner),A=t.scanContractRisk||Un,[c,l,u]=await Promise.all([a.resolveToken(n),a.resolvePools(n),A({address:n,chainId:r},t.contractRiskOpts||t)]),d=await a.scoreRisk(n),h=null;a.supports?.("sellSimulation")&&s?h=await a.sellSimulation({token:n,amountIn:s,base:o||void 0}):a.supports?.("sellSimulation")&&(h=await a.sellSimulation({token:n,amountIn:"10000000000000000"}));let g=null;a.supports?.("quote")&&o&&s&&(g=await a.quote({tokenIn:o,tokenOut:n,amountIn:s}));let p={...e,tokenIn:o,amountIn:s,recipient:i},m=hW({token:c,pools:l,structuralRisk:u,scannerRisk:d,sellability:h,quote:g,args:p,scanner:a}),f=null,B=null,E=null;if(e.prepare===!0&&m.length===0){f=await a.prepareUnsignedTx({tokenIn:o,tokenOut:n,amountIn:s,recipient:i,slippageBps:e.slippageBps??50,fee:g?.fee});try{B=uW({chainId:r,tokenAddress:n,tokenIn:o,amountIn:s,recipient:i,quote:g,topPool:l?.pools?.[0]||null,unsignedTx:f,args:e,opts:t})}catch(I){E=String(I?.message||I).slice(0,200)}}return{provider:"evm-token-sniper",execution:"armed-local",armed:!!B,signing:"local-signer",broadcasting:"local-signer",chainId:r,chain:{key:a.key,name:a.name,nativeCurrency:a.nativeCurrency},token:c,pools:l,topPool:l?.pools?.[0]||null,structuralRisk:u,scannerRisk:d,sellability:h,quote:g,blockedReasons:m,prepared:!!f,unsignedTx:f,localSignerEnvelope:B,localSignerBlockedReason:E,signed:B?"pending-local-signer":!1,broadcast:B?"pending-local-signer":!1}}async function zv(){Pg();let e=Db();return{ok:e.length>0,provider:"evm-token-sniper",defaultChainId:Wv,chainIds:e.map(t=>t.chainId),execution:"armed-local",armed:!1,signing:"local-signer",broadcasting:"local-signer",signed:!1,broadcast:!1,note:"capability only; actual arming requires owner-local signer policy and a compatible prepared artifact"}}De();De();var pW=5,xf=[50,75,90],Kv=Object.freeze({normal:{percentile:0,baseFeeMultiplier:2n,label:"normal"},fast:{percentile:1,baseFeeMultiplier:3n,label:"fast"},war:{percentile:2,baseFeeMultiplier:4n,label:"war"}});function Ln(e,t){if(e==null)return null;try{if(typeof e=="bigint")return e;if(typeof e=="number"){if(!Number.isFinite(e)||e<0)throw new Error("bad number");return BigInt(Math.floor(e))}let r=String(e).trim();return r.startsWith("0x"),BigInt(r)}catch{throw new Error(`${t} must be a non-negative integer (wei)`)}}function fW(e){let t=e.filter(r=>r!=null).sort((r,n)=>r<n?-1:r>n?1:0);return t.length?t[Math.floor(t.length/2)]:null}async function Dl(e={},t={}){let r=t.rpcCall||V,n=Number(e.chainId);if(!Number.isInteger(n))return{status:"error",error:"chainId is required",viable:!1};let o=Kv[e.urgency||"fast"];if(!o)return{status:"error",viable:!1,error:`urgency must be one of: ${Object.keys(Kv).join(", ")}`};let i,s,a,A;try{i=Ln(e.maxFeePerGasWei,"maxFeePerGasWei"),s=Ln(e.maxPriorityFeePerGasWei,"maxPriorityFeePerGasWei"),a=Ln(e.gasLimit,"gasLimit"),A=Ln(e.maxTotalGasWei,"maxTotalGasWei")}catch(D){return{status:"error",viable:!1,error:D.message}}let c,l;try{[c,l]=await Promise.all([r(n,"eth_feeHistory",[`0x${pW.toString(16)}`,"pending",xf],t),r(n,"eth_getBlockByNumber",["pending",!1],t)])}catch(D){return{status:"unavailable",viable:!1,error:D?.message||"fee history unavailable",notes:["could not read live fee data; refusing to guess a competitive bid"]}}let u=Ln(l?.baseFeePerGas,"baseFeePerGas")??Ln(c?.baseFeePerGas?.[c.baseFeePerGas.length-1],"baseFeePerGas");if(u==null)return{status:"unavailable",viable:!1,error:"chain did not report a baseFeePerGas (pre-EIP-1559?)",notes:["this pricer is EIP-1559 only"]};let h=(Array.isArray(c?.reward)?c.reward:[]).map(D=>{try{return Ln(D?.[o.percentile],"reward")}catch{return null}}).filter(D=>D!=null&&D>0n),g=fW(h),p=[];g==null&&p.push("no non-zero tips observed in recent blocks; using a 1 gwei floor");let m=g??1000000000n,f=u*o.baseFeeMultiplier+m,B=[];s!=null&&m>s&&(B.push({field:"maxPriorityFeePerGas",wanted:m.toString(),capped:s.toString()}),m=s,f=u*o.baseFeeMultiplier+m),i!=null&&f>i&&(B.push({field:"maxFeePerGas",wanted:f.toString(),capped:i.toString()}),f=i,m>f&&(m=f));let E=a!=null?a*f:null;A!=null&&E!=null&&E>A&&B.push({field:"totalGas",wanted:E.toString(),capped:A.toString()});let I=g==null||m>=g,Q=A==null||E==null||E<=A,R=I&&Q;return I||p.push(`tip cap ${m} is below the observed ${xf[o.percentile]}th-percentile tip ${g}; this bid is unlikely to land`),Q||p.push(`worst-case gas ${E} exceeds the ${A} total cap`),p.push("maxFeePerGas is a ceiling \u2014 unused headroom above basefee+tip is refunded, not spent"),{status:"ok",viable:R,chainId:n,urgency:o.label,baseFeePerGas:u.toString(),observedTip:g==null?null:g.toString(),percentile:xf[o.percentile],maxFeePerGas:f.toString(),maxPriorityFeePerGas:m.toString(),worstCaseGasWei:E==null?null:E.toString(),clamps:B,notes:p}}De();var EW="08c379a0",IW="4e487b71",BW=Object.freeze({1:"assertion failed",17:"arithmetic overflow or underflow",18:"division or modulo by zero",33:"invalid enum value",34:"invalid storage byte array encoding",49:"pop() on an empty array",50:"array index out of bounds",65:"out of memory",81:"call to an uninitialized function pointer"});function CW(e){if(!e||e==="0x")return{kind:"empty",reason:"reverted without a reason (often a require with no message, or out of gas)"};let t=String(e).slice(2),r=t.slice(0,8);if(r===EW)try{let n=parseInt(t.slice(72,136),16),o=t.slice(136,136+n*2);return{kind:"revert",reason:Buffer.from(o,"hex").toString("utf8"),selector:`0x${r}`}}catch{return{kind:"revert",reason:"Error(string) payload could not be decoded",selector:`0x${r}`}}if(r===IW){let n=parseInt(t.slice(8,72),16);return{kind:"panic",code:n,reason:BW[n]||`panic code 0x${n.toString(16)}`,selector:`0x${r}`}}return{kind:"custom",reason:`custom error ${`0x${r}`} (decoding needs the contract ABI)`,selector:`0x${r}`}}function QW(e){let t=[e?.data,e?.error?.data,e?.data?.data,e?.cause?.data,e?.body?.error?.data];for(let o of t){if(typeof o=="string"&&o.startsWith("0x")&&o.length>2)return o;if(typeof o?.data=="string"&&o.data.startsWith("0x")&&o.data.length>2)return o.data}let n=String(e?.message||"").match(/0x[0-9a-fA-F]{72,}/);return n?n[0]:null}function yW(e,t){if(t)return!0;let r=String(e?.message||"").toLowerCase();return!!/execution reverted|revert|invalid opcode|out of gas|stack underflow|insufficient funds for/.test(r)}function wW(e={}){let t={};return e.from&&(t.from=String(e.from).toLowerCase()),e.to&&(t.to=String(e.to).toLowerCase()),e.data&&e.data!=="0x"&&(t.data=e.data),e.value!=null&&String(e.value)!=="0"&&(t.value=`0x${BigInt(e.value).toString(16)}`),t}async function aa(e={},t={}){let r=t.rpcCall||V,n=Number(e.chainId),o=e.tx||{};if(!Number.isInteger(n))return{status:"error",willRevert:null,error:"chainId is required"};if(!o.to||!/^0x[a-fA-F0-9]{40}$/.test(String(o.to)))return{status:"error",willRevert:null,error:"tx.to must be a valid address"};if(o.from&&!/^0x[a-fA-F0-9]{40}$/.test(String(o.from)))return{status:"error",willRevert:null,error:"tx.from must be a valid address"};let i=wW(o),s=[],a=null,A=!1,c=null;try{a=await r(n,"eth_call",[i,"pending"],t)}catch(g){let p=QW(g);if(!yW(g,!!p))return{status:"unavailable",willRevert:null,chainId:n,error:g?.message||"simulation unavailable",notes:["could not reach the node; this is NOT evidence the transaction would fail"]};A=!0,c=CW(p),p||(c.reason="execution reverted (node did not return a reason payload)",c.kind="revert-no-data")}if(A)return{status:"ok",willRevert:!0,chainId:n,revert:c,summary:`would REVERT: ${c.reason}`,notes:["simulated against current chain state; signing this now would burn gas and fail"]};let l=null,u=null;if(e.estimateGas!==!1)try{let g=await r(n,"eth_estimateGas",[i,"pending"],t);l=BigInt(g);let p=BigInt(Math.max(0,Math.floor(e.gasBufferPercent??20)));u=l+l*p/100n,s.push(`gasLimit includes a ${p}% buffer over the ${l} estimate`)}catch(g){s.push(`gas estimation failed: ${g?.message||"unknown"}`)}s.push("a pass reflects CURRENT chain state \u2014 it is not a guarantee the transaction lands, and in a contested mint the state changes between blocks");let d=`0x${"0".repeat(64)}`,h=a===d;return h&&s.push("call did not revert but returned boolean false \u2014 some ERC-20s (e.g. USDC) signal failure this way instead of reverting"),{status:"ok",willRevert:!1,returnsFalse:h,chainId:n,returnData:a,gasEstimate:l==null?null:l.toString(),gasLimit:u==null?null:u.toString(),summary:h?"executes but returns FALSE \u2014 the contract is rejecting this operation":l?`would succeed, ~${l} gas`:"would succeed",notes:s}}async function jv(e={}){let t=Date.now();try{let r=await aa({chainId:1,tx:{to:"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",data:`0x70a08231${"0".repeat(64)}`},estimateGas:!1},e),n=r.status==="ok";return{provider:"evm-simulate",status:n?"ok":"degraded",latencyMs:Date.now()-t,detail:n?"eth_call reachable":r.error||"probe failed"}}catch(r){return{provider:"evm-simulate",status:"down",latencyMs:Date.now()-t,detail:r?.message||"probe failed"}}}var kW=Object.freeze([{selector:"a0712d68",signature:"mint(uint256)",args:["quantity"]},{selector:"40c10f19",signature:"mint(address,uint256)",args:["to","quantity"]},{selector:"1249c58b",signature:"mint()",args:[]},{selector:"2db11544",signature:"publicMint(uint256)",args:["quantity"]},{selector:"efef39a1",signature:"purchase(uint256)",args:["quantity"]},{selector:"a6f2ae3a",signature:"buy()",args:[]}]);function SW(e){let t=BigInt(e).toString(16);if(t.length>64)throw new Error("value too large for a 32-byte word");return t.padStart(64,"0")}function xW(e){let t=String(e).toLowerCase().replace(/^0x/,"");if(!/^[a-f0-9]{40}$/.test(t))throw new Error(`invalid address: ${e}`);return t.padStart(64,"0")}function Zv(e,{minter:t,quantity:r}){let n=`0x${e.selector}`;for(let o of e.args)if(o==="to")n+=xW(t);else if(o==="quantity")n+=SW(r);else throw new Error(`unsupported mint argument: ${o}`);return n}function DW({address:e,chainId:t,minter:r,quantity:n,tx:o,nowMs:i,ttlMs:s=3e4}){if(!o?.gasLimit||!o?.maxFeePerGas)throw new Error("local-signer envelope requires gasLimit and maxFeePerGas");let a=Number(i??Date.now()),A=String(o.value??"0");return{version:1,surface:"evm-nft",action:"mint",provider:"nft-mint",owner:r,destination:e,contract:e,quantity:String(n),totalWei:A,slippageBps:0,expiresAtMs:a+Math.min(Math.max(Number(s)||3e4,1e3),6e4),fee:{oracleFeeBps:0},artifact:{chainId:t,owner:r,contract:e,quantity:String(n),totalWei:A,transactions:[{chainId:t,from:r,to:e,data:o.data,value:A,gasLimit:String(o.gasLimit),maxFeePerGas:String(o.maxFeePerGas),...o.maxPriorityFeePerGas!=null?{maxPriorityFeePerGas:String(o.maxPriorityFeePerGas),type:2}:{}}]}}}async function vl(e={},t={}){let r=t.rpcCall||V,n=String(e.address||"").trim().toLowerCase(),o=Number(e.chainId);if(!/^0x[a-f0-9]{40}$/.test(n))return{status:"error",error:"address must be a 0x-prefixed EVM address",found:[]};if(!Number.isInteger(o))return{status:"error",error:"chainId is required",found:[]};let i;try{i=await r(o,"eth_getCode",[n,"latest"],t)}catch(A){return{status:"unavailable",error:A?.message||"eth_getCode failed",found:[]}}if(!i||i==="0x")return{status:"ok",found:[],notes:["no contract deployed at this address"]};let s=i.slice(2).toLowerCase(),a=kW.filter(A=>s.includes(A.selector));return{status:"ok",address:n,chainId:o,found:a,notes:a.length?[]:["no known public mint selector found; this contract may use a custom or allowlist-only entrypoint"]}}async function Xv(e={}){let t=Date.now();try{let r=await vl({address:"0x8a90cab2b38dba80c64b7734e58ee1db38b8992e",chainId:1},e),n=r.status==="ok";return{provider:"nft-mint",status:n?"ok":"degraded",latencyMs:Date.now()-t,detail:n?"bytecode reads reachable":r.error||"probe failed"}}catch(r){return{provider:"nft-mint",status:"down",latencyMs:Date.now()-t,detail:r?.message||"probe failed"}}}async function Df(e={},t={}){let r=String(e.contract||e.address||"").trim().toLowerCase(),n=Number(e.chainId),o=String(e.minter||e.from||"").trim().toLowerCase(),i=e.quantity==null?1:Number(e.quantity);if(!/^0x[a-f0-9]{40}$/.test(r))return{status:"error",error:"contract must be a 0x-prefixed EVM address"};if(!/^0x[a-f0-9]{40}$/.test(o))return{status:"error",error:"minter address is required"};if(!Number.isInteger(i)||i<1)return{status:"error",error:"quantity must be a positive integer"};if(!Number.isInteger(n))return{status:"error",error:"chainId is required"};let s=await vl({address:r,chainId:n},t);if(s.status!=="ok")return{status:s.status,error:s.error};if(!s.found.length)return{status:"unsupported",error:"no known public mint function found in this contract's bytecode",notes:s.notes};let a=e.signature?s.found.find(E=>E.signature===e.signature):s.found[0];if(!a)return{status:"error",error:`requested signature ${e.signature} not present in this contract`,available:s.found.map(E=>E.signature)};let A=s.found.length>1&&!e.signature,c=await Un({address:r,chainId:n},t),l=null;if(e.simulate!==!1&&(l=await aa({chainId:n,tx:{from:o,to:r,data:Zv(a,{minter:o,quantity:i}),value:e.valueWei},gasBufferPercent:e.gasBufferPercent},t),l.willRevert===!0&&e.ignoreRevert!==!0))return{status:"would-revert",error:`mint would revert: ${l.revert.reason}`,simulation:l,mintFunction:a.signature,notes:["signing this now would burn gas and fail; pass ignoreRevert to prepare anyway (e.g. a mint that has not opened yet)"]};let u=e.gasLimit??(l?.gasLimit?Number(l.gasLimit):null),d=await Dl({chainId:n,urgency:e.urgency||"war",gasLimit:u,maxFeePerGasWei:e.maxFeePerGasWei,maxPriorityFeePerGasWei:e.maxPriorityFeePerGasWei,maxTotalGasWei:e.maxTotalGasWei},t);if(d.status!=="ok")return{status:"unavailable",error:d.error,notes:d.notes};let h;try{h=Zv(a,{minter:o,quantity:i})}catch(E){return{status:"error",error:E.message}}let g={chainId:n,from:o,to:r,data:h,value:e.valueWei==null?"0":String(e.valueWei),gasLimit:u==null?null:String(u),maxFeePerGas:d.maxFeePerGas,maxPriorityFeePerGas:d.maxPriorityFeePerGas},p={ok:!0,skipped:!0,reason:"no gasLimit or cap supplied"};if(u!=null&&(e.maxTotalGasWei!=null||e.grant!=null)&&(p=yp({chainId:n,tx:{gasLimit:u,maxFeePerGas:d.maxFeePerGas,maxPriorityFeePerGas:d.maxPriorityFeePerGas},policy:{maxTotalGasWei:e.maxTotalGasWei,maxFeePerGasWei:e.maxFeePerGasWei,maxPriorityFeePerGasWei:e.maxPriorityFeePerGasWei,grant:e.grant}}),!p.ok))return{status:"refused",error:`gas-war cap exceeded: ${p.reason||p.error}`,gas:d,capCheck:p};let m=[];A&&m.push(`contract exposes ${s.found.length} mint entrypoints (${s.found.map(E=>E.signature).join(", ")}); defaulted to ${a.signature} \u2014 pass signature to choose`),c.risk==="high"&&m.push(`contract risk HIGH: ${c.findings.map(E=>E.name).join(", ")}`),d.viable||m.push(d.notes[0]),p.skipped&&m.push("gas-war caps NOT enforced: supply gasLimit plus maxTotalGasWei or a grant");let f=null,B=null;try{f=DW({address:r,chainId:n,minter:o,quantity:i,tx:g,nowMs:t.nowMs,ttlMs:e.ttlMs??e.expiresInMs})}catch(E){B=String(E?.message||E).slice(0,200)}return{status:"ok",execution:f?"armed-local":"prepare-only",signed:f?"pending-local-signer":!1,broadcast:f?"pending-local-signer":!1,tx:g,localSignerEnvelope:f,localSignerBlockedReason:B,mintFunction:a.signature,alternatives:s.found.map(E=>E.signature),quantity:i,gas:d,simulation:l,contractRisk:{risk:c.risk,findings:c.findings,isProxy:c.isProxy},capCheck:p,warnings:m}}De();function RW(e={},{nowMs:t=Date.now()}={}){let r=[];if(!e||typeof e!="object")return{ok:!1,problems:["grant is required for execute mode"]};let n=String(e.contract||"").toLowerCase();if(/^0x[a-f0-9]{40}$/.test(n)||r.push("grant.contract must be an exact address"),Number.isInteger(Number(e.chainId))||r.push("grant.chainId is required"),e.maxTotalGasWei==null&&r.push("grant.maxTotalGasWei is required"),e.maxValueWei==null&&r.push("grant.maxValueWei is required (mint price ceiling)"),e.expiresAt!=null){let o=Number(e.expiresAt);Number.isFinite(o)?o<=t&&r.push("grant has expired"):r.push("grant.expiresAt must be a timestamp when supplied")}return{ok:r.length===0,problems:r,contract:n,chainId:Number(e.chainId)}}function eR(e={},t={}){let n=e.actionMode==="execute"?"execute":e.actionMode||"alert_only",o=String(e.contract||"").trim().toLowerCase(),i=Number(e.chainId),s=[];if(!/^0x[a-f0-9]{40}$/.test(o))return{status:"error",error:"contract must be a 0x-prefixed EVM address"};if(!Number.isInteger(i))return{status:"error",error:"chainId is required"};if(n!=="alert_only"&&n!=="execute")return{status:"ok",actionMode:"alert_only",requestedMode:n,downgraded:!0,contract:o,chainId:i,quantity:e.quantity==null?1:Number(e.quantity),urgency:e.urgency||"war",grant:null,notes:[`unrecognized actionMode ${JSON.stringify(n)} \u2014 defaulted to alert_only; only the exact string "execute" arms a trigger`]};let a=n;if(n==="execute")if(!gp(t.env||process.env))a="alert_only",s.push("DOWNGRADED to alert_only: autonomous trading is off \u2014 set ORACLE_AUTONOMOUS_TRADING=1 to let a trigger fire unattended");else{let A=RW(e.grant,{nowMs:t.nowMs});A.ok?(A.contract!==o||A.chainId!==i)&&(a="alert_only",s.push("DOWNGRADED to alert_only: grant does not match this contract/chain \u2014 a grant authorizes one exact target")):(a="alert_only",s.push(`DOWNGRADED to alert_only: ${A.problems.join("; ")}`))}return a==="alert_only"?s.push("alert_only: Oracle will notify and prepare an artifact; you sign it"):s.push("ARMED until mint opens: this trigger will submit one prepared, capped mint automatically when the mint opens"),{status:"ok",actionMode:a,requestedMode:n,downgraded:a!==n,contract:o,chainId:i,quantity:e.quantity==null?1:Number(e.quantity),urgency:e.urgency||"war",grant:a==="execute"?e.grant:null,armedUntil:a==="execute"?"mint-opens":null,notes:s}}async function tR(e={},t={}){let r=t.rpcCall||V,n=String(e.contract||"").trim().toLowerCase(),o=Number(e.chainId);if(!/^0x[a-f0-9]{40}$/.test(n)||!Number.isInteger(o))return{status:"error",open:!1,error:"contract and chainId are required"};let i=[{selector:"0xeb8d2444",name:"saleIsActive()",openWhen:!0},{selector:"0x25fd90f3",name:"mintActive()",openWhen:!0},{selector:"0x68428a1b",name:"saleActive()",openWhen:!0},{selector:"0x22f3e2d4",name:"isActive()",openWhen:!0},{selector:"0x5c975abb",name:"paused()",openWhen:!1}];for(let s of i)try{let a=await r(o,"eth_call",[{to:n,data:s.selector},"latest"],t);if(a&&a!=="0x"){let A=BigInt(a)===1n;return{status:"ok",open:s.openWhen?A:!A,evidence:s.name,raw:a}}}catch{}return{status:"unknown",open:!1,notes:["no readable sale-state flag; cannot confirm the mint is open \u2014 will not fire on a guess"]}}var FW=1440*60*1e3;function MW(e={},{nowMs:t=Date.now()}={}){let r=[];if(!e||typeof e!="object")return{ok:!1,problems:["grant is required for execute mode"]};let n=String(e.contract||"").toLowerCase();/^0x[a-f0-9]{40}$/.test(n)||r.push("grant.contract must be an exact address"),Number.isInteger(Number(e.chainId))||r.push("grant.chainId is required"),e.maxTotalGasWei==null&&r.push("grant.maxTotalGasWei is required"),e.maxValueWei==null&&r.push("grant.maxValueWei is required (mint price ceiling)"),String(e.maxValueWei)!=="0"&&r.push("grant.maxValueWei must be 0 for Mancers free mints");let o=Number(e.expiresAt);return Number.isFinite(o)?o<=t?r.push("grant has expired"):o-t>FW&&r.push("grant TTL exceeds 24h"):r.push("grant.expiresAt is required"),{ok:r.length===0,problems:r,contract:n,chainId:Number(e.chainId)}}var rR="0x797a2e030B7e49107C8F07bF0300Ea9caE88cA57",UW=4663,LW="0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",nR="a22cb465",TW="a0712d68";function vf(e){return String(e||"").trim().toLowerCase()}function pi(e){return String(e||"").toLowerCase().replace(/^0x/,"")}function PW(e){let t=pi(e);if(!/^[a-f0-9]{40}$/.test(t))throw new Error("revoke operator must be an address");return`0x${nR}${t.padStart(64,"0")}${"0".repeat(64)}`}function _W(e){return pi(e).includes(pi(rR))}function OW(e={}){return(Array.isArray(e.calls)?e.calls:[]).some(r=>pi(r?.data).startsWith(nR))}function HW(e={},t){let r=pi(t).padStart(64,"0");return(Array.isArray(e.logs)?e.logs:[]).some(o=>{let i=o?.topics||[];return vf(i[0])!==LW?!1:pi(i[2])===r})}function GW(e=1){return`0x${TW}${BigInt(e).toString(16).padStart(64,"0")}`}function oR(e={},t={}){let r=vf(e.contract),n=vf(e.minter),o=Number(e.chainId),i=e.valueWei==null?"0":String(e.valueWei),s=[];/^0x[a-f0-9]{40}$/.test(r)||s.push("contract must be a 0x address"),/^0x[a-f0-9]{40}$/.test(n)||s.push("minter must be a 0x address"),o!==UW&&s.push("only Robinhood chain 4663"),i!=="0"&&s.push("value must be 0 \u2014 paid mints are skipped"),_W(e.bytecode||"")||s.push("bytecode does not reference Mancers 0x797a\u20268cA57 \u2014 no allowlist gate found");let a=e.simulation||{};a.willRevert===!0&&s.push("mint simulation reverts"),OW(a)&&s.push("simulation sets approval / setApprovalForAll"),HW(a,n)||s.push("simulation has no ERC721 Transfer to minter");let A=s.length===0,c={chainId:o,from:n,to:r,data:GW(e.quantity??1),value:"0"},l={chainId:o,from:n,to:r,data:PW(r),value:"0"},u=!1;if(A&&e.actionMode==="execute")if(!gS(t.env||process.env))s.push("DOWNGRADED: ORACLE_AUTONOMOUS_MINT=1 required to fire");else{let d=MW(e.grant,{nowMs:t.nowMs});d.ok?d.contract!==r||d.chainId!==o?s.push("DOWNGRADED: grant does not match this contract/chain"):u=!0:s.push(`DOWNGRADED: ${d.problems.join("; ")}`)}return{status:A?"ok":"fail",verdict:A?"unknown-risk":"fail",failClosedPass:A,executeFire:u,oneShot:u,execution:"prepare-only",signed:!1,chainId:o,contract:r,minter:n,gate:rR.toLowerCase(),reasons:s,mintTx:c,revokeTx:l,notes:["failClosedPass is not safe \u2014 owner can still change the contract after this block",u?"ARMED one-shot: fire mint then revoke; grant must not be reused":"prepare-only: unsigned mint + revoke; arm this exact contract to fire"]}}M();var YW="https://api.paraswap.io",Rf=(e={})=>(e.baseUrl||process.env.PARASWAP_API_URL||YW).replace(/\/$/,"");function fi(e,t){let r=String(e||"");if(!/^0x[0-9a-fA-F]{40}$/.test(r))throw new Error(`${t} must be a 20-byte token address`);return r.toLowerCase()}async function Nf(e={},t={}){let r=Number(e.chainId||1);return C(`${Rf(t)}/tokens/${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function mi(e={},t={}){let r=Number(e.chainId||e.network||1);if(e.amount==null)throw new Error("amount required");let n=new URLSearchParams({srcToken:fi(e.srcToken,"srcToken"),destToken:fi(e.destToken,"destToken"),amount:String(e.amount),srcDecimals:String(Number(e.srcDecimals)),destDecimals:String(Number(e.destDecimals)),side:String(e.side||"SELL").toUpperCase(),network:String(r),version:String(e.version||"6.2")});e.includeDEXS&&n.set("includeDEXS",String(e.includeDEXS)),e.excludeDEXS&&n.set("excludeDEXS",String(e.excludeDEXS));let o=await Hc({wallet:e.userAddress||e.fromAddress,env:t.env,action:e.feeAction||"swap",holderCheck:t.holderCheck});for(let[a,A]of Object.entries(Vk(o)))n.set(a,A);let i=await C(`${Rf(t)}/prices?${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4}),s=i?.priceRoute?.destAmount;return s?{...ce(i,{chainId:r,venue:i?.priceRoute?.contractAddress||"paraswap-quote",amountOut:s,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,quoteAgeMs:0,requestedCapBps:e.maxSlippageBps??e.slippageBps}),executionReady:!1,executionBlocker:"call prepare to bind the price route to a validated transaction",oracleFee:o}:{...i,executionReady:!1,oracleFee:o}}async function iR(e={},t={}){if(String(e.side||"SELL").toUpperCase()!=="SELL")throw new Error("paraswap: agentic prepare currently supports exact-input SELL only");let r=Number(e.chainId||e.network||1),n=fi(e.userAddress,"userAddress"),o=await mi(e,t),i=o?.priceRoute,s=String(i?.contractAddress||"").toLowerCase();if(!s)throw new Error("paraswap: price route missing contractAddress");let a={srcToken:fi(e.srcToken,"srcToken"),destToken:fi(e.destToken,"destToken"),srcAmount:String(i.srcAmount||e.amount),destAmount:String(o.amountOutMinimum),priceRoute:i,userAddress:n,ignoreChecks:!1,ignoreGasEstimate:!1};e.receiver&&(a.receiver=fi(e.receiver,"receiver"));let A=await C(`${Rf(t)}/transactions/${r}`,{method:"POST",body:a,fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3});if(Number(A.chainId??r)!==r)throw new Error("paraswap: transaction chain mismatch");if(String(A.to||"").toLowerCase()!==s)throw new Error("paraswap: transaction target mismatch");if(A.from&&String(A.from).toLowerCase()!==n)throw new Error("paraswap: transaction sender mismatch");return L({provider:"paraswap",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:r,quote:o,autoSlippage:o.autoSlippage,requiresApproval:a.srcToken!=="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"?{token:a.srcToken,spender:i.tokenTransferProxy||s,amount:a.srcAmount}:null,transaction:{chainId:r,from:A.from||n,to:A.to,data:A.data,value:A.value??"0x0",...A.gas!=null?{gasLimit:A.gas}:{},slippageGuard:Qe(o.autoSlippage,{chainId:r,venue:A.to,data:A.data})}},{provider:"paraswap",kind:"paraswap-tx"})}async function sR(e={}){let t=await Nf({chainId:1},e),r=Array.isArray(t?.tokens)?t.tokens.length:Object.keys(t?.tokens||{}).length;return{ok:r>0,tokenSample:r}}import{createHash as JW}from"node:crypto";import{getAddress as dR,isAddress as Ff}from"ethers";var aR="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",WW=Object.freeze(["lifi","paraswap","0x","cow","uniswap-v3"]),$W=Object.freeze(["lifi"]),AR=/^0x[0-9a-fA-F]{64}$/,zW=/^\d+$/;function ye(e,t="invalid"){throw new Error(`rfq: ${e} ${t}`)}function cR(e,t){let r=Number(e);return(!Number.isSafeInteger(r)||r<=0)&&ye(t,"must be a positive chainId"),r}function Rl(e,t){let r=String(e??"").trim();return(!zW.test(r)||BigInt(r)<=0n)&&ye(t,"must be a positive integer string"),r}function KW(e,t){return e==null||e===""?null:Rl(e,t)}function lR(e,t){let r=String(e??"").trim();return r.toLowerCase()===aR.toLowerCase()?aR:(Ff(r)||ye(t,"must be an EVM address or native token sentinel"),dR(r))}function hR(e,t){let r=String(e??"").trim();return Ff(r)||ye(t,"must be an EVM address"),dR(r)}function jW(e,t){return e==null||e===""?null:hR(e,t)}function uR(e,t,r){return e===void 0?[...r]:(Array.isArray(e)||ye(t,"must be an array"),e.map(n=>String(n).trim()).filter(Boolean))}function ZW(e,{nowMs:t,maxDeadlineMs:r},n){let o=Number(e);return Number.isFinite(o)||ye(n,"must be a finite millisecond timestamp"),o<=t&&ye(n,"expired"),o>t+r&&ye(n,"exceeds maxDeadlineMs"),Math.floor(o)}function Ei(e){if(Array.isArray(e))return e.map(Ei);if(e&&typeof e=="object"){let t={};for(let r of Object.keys(e).sort())e[r]!==void 0&&(t[r]=Ei(e[r]));return t}return e}function XW(e){return JSON.stringify(Ei(e))}function Nl(e){return`0x${JW("sha256").update(XW(e)).digest("hex")}`}function gR(e,t){let r={...e};for(let n of t)delete r[n];return r}function e6(e){return Nl(gR(e,["intentHash"]))}function t6(e){return Nl(gR(e,["firmQuoteHash"]))}function Mf(e={},t={}){let r=Number(t.nowMs??Date.now()),n=Number(t.maxDeadlineMs??1800*1e3);(!Number.isFinite(r)||!Number.isFinite(n)||n<=0)&&ye("time","is invalid");let o=cR(e.fromChainId??e.fromChain,"fromChainId"),i=cR(e.toChainId??e.toChain,"toChainId"),a=o===i?WW:$W,A={kind:"rfq-intent",version:1,fromChainId:o,toChainId:i,sellToken:lR(e.sellToken??e.tokenIn??e.fromToken,"sellToken"),buyToken:lR(e.buyToken??e.tokenOut??e.toToken,"buyToken"),sellAmount:Rl(e.sellAmount??e.amountIn??e.fromAmount,"sellAmount"),receiver:hR(e.receiver??e.recipient??e.to,"receiver"),deadlineMs:ZW(e.deadlineMs??e.deadline??e.expiresAtMs,{nowMs:r,maxDeadlineMs:n},"deadline"),minBuyAmount:KW(e.minBuyAmount??e.minOut??e.amountOutMin,"minBuyAmount"),allowedSources:uR(e.allowedSources,"allowedSources",a),allowedRouters:uR(e.allowedRouters,"allowedRouters",[]),slippageBps:Number.isFinite(Number(e.slippageBps))?Number(e.slippageBps):null,partialFill:e.partialFill===!0,metadata:e.metadata&&typeof e.metadata=="object"&&!Array.isArray(e.metadata)?Ei(e.metadata):{}};return A.slippageBps!=null&&(!Number.isInteger(A.slippageBps)||A.slippageBps<0||A.slippageBps>1e4)&&ye("slippageBps","must be 0 to 10000"),A.intentId=e.intentId?String(e.intentId):Nl({seed:"rfq-intent",intent:A}).slice(0,34),A.intentHash=e6(A),Object.freeze(A)}function r6(e){return(!e||typeof e!="object"||Array.isArray(e))&&ye("artifact","required"),e.typedDataHash!=null&&!AR.test(String(e.typedDataHash))&&ye("artifact.typedDataHash","must be bytes32"),e.calldataHash!=null&&!AR.test(String(e.calldataHash))&&ye("artifact.calldataHash","must be bytes32"),e.to!=null&&!Ff(String(e.to))&&ye("artifact.to","must be an address"),e.data!=null&&!/^0x(?:[0-9a-fA-F]{2})*$/.test(String(e.data))&&ye("artifact.data","must be hex"),Ei(e)}function pR(e,t={},r={}){(!e||e.kind!=="rfq-intent")&&ye("intent","required");let n=Number(r.nowMs??Date.now()),o=Number(t.expiryMs??t.expiresAtMs??t.validUntilMs);Number.isFinite(o)||ye("quote expiry","required"),o<=n&&ye("quote","expired"),o>e.deadlineMs&&ye("quote expiry","exceeds intent deadline");let i=String(t.source??t.provider??"").trim();i||ye("source","required"),e.allowedSources.includes(i)||ye("source","not allowed by intent");let s=Rl(t.amountOut??t.buyAmount,"amountOut"),a=Rl(t.minBuyAmount??t.minOut??s,"minBuyAmount");BigInt(a)>BigInt(s)&&ye("minBuyAmount","exceeds amountOut");let A=r6(t.artifact??t.executableArtifact??t.transaction??t.typedData),c=Number(t.quotedAtMs??t.timestampMs??r.nowMs??Date.now());Number.isFinite(c)||ye("quotedAtMs","must be finite");let l=jW(t.router??t.settlementRouter??A.to,"router"),u={kind:"rfq-firm-quote",provider:"rfq",surface:"rfq",version:1,quoteId:String(t.quoteId??t.id??"").trim(),source:i,intentHash:e.intentHash,fromChainId:e.fromChainId,toChainId:e.toChainId,sellToken:e.sellToken,buyToken:e.buyToken,sellAmount:e.sellAmount,receiver:e.receiver,router:l,amountOut:s,minBuyAmount:a,quotedAtMs:Math.floor(c),expiryMs:Math.floor(o),artifact:A,maker:t.maker?String(t.maker):null,metadata:t.metadata&&typeof t.metadata=="object"&&!Array.isArray(t.metadata)?Ei(t.metadata):{}};return u.quoteId||(u.quoteId=Nl({seed:"rfq-quote",out:u}).slice(0,34)),u.firmQuoteHash=t6(u),Object.freeze(u)}function Aa(e,t){return Array.isArray(e?.allowedSources)&&e.allowedSources.includes(t)}function fR(e,t){return String(e?.[t]??"").trim()}function ca(e,t){return Object.freeze({source:e,run:t})}function n6(e,t={}){if(!e||e.kind!=="rfq-intent")throw new Error("rfq: intent required");let r=t.env??process.env,n=t.providers??{},o=t.supportedUniV3Chains??lt,i=Number(e.fromChainId)===Number(e.toChainId),s=[];return Aa(e,"lifi")&&s.push(ca("lifi",async()=>{let A=await(n.lifiQuote??Ls)({fromChain:e.fromChainId,toChain:e.toChainId,fromToken:e.sellToken,toToken:e.buyToken,fromAmount:e.sellAmount,fromAddress:e.receiver},t),c=A?.estimate??A?.[0]?.estimate??A;return{quoteId:A?.id??A?.routeId??null,amountOut:c?.toAmount??A?.toAmount,minBuyAmount:c?.toAmountMin??A?.toAmountMin??c?.toAmount??A?.toAmount,expiryMs:Date.now()+Number(t.defaultQuoteTtlMs??2e4),artifact:{type:"lifi-route",calldataHash:A?.transactionRequest?.data?await o6(t,A.transactionRequest.data):void 0,route:A},metadata:{tool:A?.tool??A?.toolDetails?.name??null}}})),i&&(Aa(e,"paraswap")&&s.push(ca("paraswap",async()=>{let A=await(n.paraswapPrice??mi)({chainId:e.fromChainId,srcToken:e.sellToken,destToken:e.buyToken,amount:e.sellAmount,srcDecimals:t.decimalsIn,destDecimals:t.decimalsOut},t),c=A?.priceRoute??A;return{quoteId:c?.id??null,amountOut:c?.destAmount,minBuyAmount:A?.amountOutMinimum??c?.destAmount,expiryMs:Date.now()+Number(t.defaultQuoteTtlMs??2e4),artifact:{type:"paraswap-price-route",route:c},metadata:{contractAddress:c?.contractAddress??null}}})),Aa(e,"0x")&&(fR(r,"ZEROX_API_KEY")||fR(r,"0X_API_KEY")||n.zeroxQuote)&&s.push(ca("0x",async()=>{let A=await(n.zeroxQuote??Ps)({chainId:e.fromChainId,sellToken:e.sellToken,buyToken:e.buyToken,sellAmount:e.sellAmount,taker:e.receiver},t);return{quoteId:A?.id??null,amountOut:A?.buyAmount??A?.grossBuyAmount,minBuyAmount:A?.minBuyAmount??A?.buyAmount,expiryMs:Date.now()+Number(t.defaultQuoteTtlMs??2e4),artifact:{type:"0x-transaction",to:A?.transaction?.to,data:A?.transaction?.data,value:A?.transaction?.value??"0"},metadata:{route:A?.route??null}}})),Aa(e,"cow")&&s.push(ca("cow",async()=>{let A=await(n.cowQuote??Wo)({chainId:e.fromChainId,sellToken:e.sellToken,buyToken:e.buyToken,sellAmountBeforeFee:e.sellAmount,from:e.receiver,signingScheme:"eip712"},t),c=A?.quote??A;return{quoteId:A?.id??null,amountOut:c?.buyAmount,minBuyAmount:c?.buyAmount,expiryMs:Math.min(Number(c?.validTo??0)*1e3||Date.now()+Number(t.defaultQuoteTtlMs??2e4),e.deadlineMs),artifact:{type:"cow-order",order:c},metadata:{solver:!0}}})),Aa(e,"uniswap-v3")&&o[Number(e.fromChainId)]&&s.push(ca("uniswap-v3",async()=>{let A=await(n.uniV3QuoteExactIn??Oo)({chainId:e.fromChainId,tokenIn:e.sellToken,tokenOut:e.buyToken,amountIn:e.sellAmount},t);return{quoteId:A?.id??null,amountOut:A?.amountOut,minBuyAmount:A?.minOut??A?.amountOutMinimum??A?.amountOut,expiryMs:Date.now()+Number(t.defaultQuoteTtlMs??2e4),artifact:{type:"uniswap-v3-quote",quoter:A?.quoter,fee:A?.fee},metadata:{onchain:!0}}}))),s}async function o6(e,t){return`0x${(await import("node:crypto")).createHash("sha256").update(String(t)).digest("hex")}`}async function i6(e,t){return Promise.race([Promise.resolve().then(e.run),new Promise((r,n)=>setTimeout(()=>n(new Error(`${e.source}: timeout`)),t))])}async function s6(e,t,r={}){let n=Number(r.timeoutMs??12e3),o=await Promise.allSettled(t.map(a=>i6(a,n))),i=[],s=[];for(let a=0;a<o.length;a++){let A=t[a],c=o[a];if(c.status==="rejected"){s.push({source:A.source,error:String(c.reason?.message||c.reason)});continue}try{i.push(pR(e,{...c.value,source:A.source},r))}catch(l){s.push({source:A.source,error:String(l?.message||l)})}}return{quotes:i,failed:s}}function a6(e=[],t={}){let r=Number(t.nowMs??Date.now()),n=e.filter(s=>Number(s.expiryMs??0)>r);n.sort((s,a)=>{let A=BigInt(a.minBuyAmount??0)-BigInt(s.minBuyAmount??0);if(A!==0n)return A>0n?1:-1;let c=BigInt(a.amountOut??0)-BigInt(s.amountOut??0);return c>0n?1:c<0n?-1:0});let o=n.map(s=>({...s,scoreBasis:"minBuyAmount"})),i=[];return o.length||i.push("no RFQ source returned a usable firm quote"),e.length!==o.length&&i.push("expired RFQ quotes were excluded from ranking"),{best:o[0]??null,quotes:o,failed:[],warnings:i}}async function mR(e,t={}){let r=n6(e,t),{quotes:n,failed:o}=await s6(e,r,t),i=a6(n,t);return{kind:"rfq-result",intent:e,best:i.best,quotes:i.quotes,failed:o,warnings:[...i.warnings],sourcesTried:r.length,sourcesAnswered:n.length}}function ER(e={},t={}){return Mf(e,t)}async function IR(e={},t={}){let r=e.intent?.kind==="rfq-intent"?e.intent:Mf(e,t);return mR(r,t)}async function BR(){return{ok:!0,provider:"rfq",mode:"intent-rfq",execution:"prepare"}}M();var c6="https://app.across.to";function Uf(e={}){return(e.baseUrl||process.env.ACROSS_API_URL||c6).replace(/\/$/,"")}async function CR(e={}){try{let t=await C(`${Uf(e)}/api/pools?token=0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??1e4});return{ok:t&&typeof t.totalPoolSize=="string",provider:"across-bridge",l1Token:t.l1Token}}catch(t){return{ok:!1,provider:"across-bridge",error:String(t.message||t).slice(0,120)}}}async function QR(e={},t={}){let r=String(e.l1Token||"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2");return C(`${Uf(t)}/api/pools?token=${encodeURIComponent(r)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function yR(e={},t={}){let r=new URLSearchParams;return e.originChainId&&r.set("originChainId",String(e.originChainId)),e.destinationChainId&&r.set("destinationChainId",String(e.destinationChainId)),e.token&&r.set("token",String(e.token)),e.amount&&r.set("amount",String(e.amount)),C(`${Uf(t)}/api/suggested-fees?${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}M();var u6="https://api.beefy.finance";function Lf(e={}){return(e.baseUrl||process.env.BEEFY_API_URL||u6).replace(/\/$/,"")}async function wR(e={}){try{let t=await C(`${Lf(e)}/apy`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??15e3}),r=Object.keys(t||{});return{ok:r.length>0,provider:"beefy-yields",vaultCount:r.length}}catch(t){return{ok:!1,provider:"beefy-yields",error:String(t.message||t).slice(0,120)}}}async function bR(e={},t={}){let r=await C(`${Lf(t)}/apy`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4});if(e.chain){let n=String(e.chain).toLowerCase(),o={};for(let[i,s]of Object.entries(r))String(i).toLowerCase().startsWith(n)&&(o[i]=s);return o}return r}async function kR(e={}){return C(`${Lf(e)}/apy/breakdown`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??25e3})}M();var h6="https://public-api.birdeye.so";function SR(e={}){return(e.baseUrl||process.env.BIRDEYE_API_URL||h6).replace(/\/$/,"")}async function xR(e={}){try{let t=await C(`${SR(e)}/public/tokenlist?sort_by=v24hUSD&sort_type=desc&offset=0&limit=1`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??1e4});return{ok:Array.isArray(t?.data)&&t.data.length>0,provider:"birdeye-tokens"}}catch(t){return{ok:!1,provider:"birdeye-tokens",error:String(t.message||t).slice(0,120)}}}async function DR(e={},t={}){let r=String(e.sortBy||"v24hUSD"),n=String(e.sortType||"desc"),o=Math.max(0,Number(e.offset||0)),i=Math.min(50,Math.max(1,Number(e.limit||20)));return C(`${SR(t)}/public/tokenlist?sort_by=${encodeURIComponent(r)}&sort_type=${encodeURIComponent(n)}&offset=${o}&limit=${i}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}M();var p6="https://api.celenium.io";function Tf(e={}){return(e.baseUrl||process.env.CELENIUM_API_URL||p6).replace(/\/$/,"")}async function vR(e={}){try{let t=await C(`${Tf(e)}/v1/stats`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??1e4});return{ok:t&&t.blobs_count!=null,provider:"celestia-da"}}catch(t){return{ok:!1,provider:"celestia-da",error:String(t.message||t).slice(0,120)}}}async function RR(e={}){return C(`${Tf(e)}/v1/stats`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??15e3})}async function NR(e={},t={}){let r=Number(e.height);if(r&&(!Number.isFinite(r)||r<1))throw new Error("celestia-da: height must be positive");let n=r?`/v1/block/${r}`:"/v1/block";return C(`${Tf(t)}${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}M();var m6="https://api.mainnet-beta.solana.com";function E6(e={}){return(e.rpcUrl||process.env.SOLANA_RPC_URL||m6).replace(/\/$/,"")}async function Fl(e,t,r={}){let n=E6(r),o=JSON.stringify({jsonrpc:"2.0",id:1,method:e,params:t}),a=await(await(r.fetchImpl||fetch)(n,{method:"POST",headers:{"content-type":"application/json",accept:"application/json"},body:o,signal:AbortSignal.timeout(r.timeoutMs??2e4)})).json();if(a.error)throw new Error(`das-assets ${e}: ${a.error.message||JSON.stringify(a.error)}`);return a.result}async function FR(e={}){try{let t=await Fl("getAsset",{id:"12He3nqt2XLbpuWGdwsJBNcomm7r3M8Kh6Dj9w7ZAK9"},e);return{ok:t&&typeof t=="object",provider:"das-assets"}}catch(t){return{ok:!1,provider:"das-assets",error:String(t.message||t).slice(0,120)}}}async function MR(e={},t={}){let r=String(e.ownerAddress||"").trim();if(!r)throw new Error("das-assets: ownerAddress is required");let n=Math.max(1,Number(e.page||1)),o=Math.min(1e3,Math.max(1,Number(e.limit||50)));return Fl("getAssetsByOwner",{ownerAddress:r,page:n,limit:o,...e.sortBy?{sortBy:{sortBy:e.sortBy,sortDirection:e.sortDirection||"asc"}}:{}},t)}async function UR(e={},t={}){let r=Math.max(1,Number(e.page||1)),n=Math.min(100,Math.max(1,Number(e.limit||20))),o={page:r,limit:n};return e.ownerAddress&&(o.ownerAddress=String(e.ownerAddress)),e.collectionId&&(o.collectionId=String(e.collectionId)),e.creatorAddress&&(o.creatorAddress=String(e.creatorAddress)),e.delegate&&(o.delegate=String(e.delegate)),Fl("searchAssets",o,t)}async function LR(e={},t={}){let r=String(e.assetId||"").trim();if(!r)throw new Error("das-assets: assetId is required");return Fl("getAssetProof",{id:r},t)}M();var B6="https://api.l2beat.com";function Pf(e={}){return(e.baseUrl||process.env.L2BEAT_API_URL||B6).replace(/\/$/,"")}async function TR(e={}){try{let t=await C(`${Pf(e)}/api/scaling/tvl`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??15e3});return{ok:t&&typeof t.totalUsd=="string",provider:"l2beat-tvl"}}catch(t){return{ok:!1,provider:"l2beat-tvl",error:String(t.message||t).slice(0,120)}}}async function PR(e={},t={}){let r=await C(`${Pf(t)}/api/scaling/tvl`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4});if(e.project){let n=String(e.project).toLowerCase(),o=r?.projects||{},i=Object.entries(o).find(([s])=>String(s).toLowerCase()===n);return i?{[i[0]]:i[1]}:{}}return r}async function _R(e={},t={}){return C(`${Pf(t)}/api/scaling/activity`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}M();var Q6="https://api.spark.fi";function _f(e={}){return(e.baseUrl||process.env.SPARK_API_URL||Q6).replace(/\/$/,"")}async function OR(e={}){try{return{ok:(await C(`${_f(e)}/v1/savings/spark/mainnet/usdc`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??1e4}))?.data?.vault?.address!=null,provider:"spark-lend"}}catch(t){return{ok:!1,provider:"spark-lend",error:String(t.message||t).slice(0,120)}}}async function HR(e={},t={}){let r=String(e.protocol||"spark"),n=String(e.chain||"mainnet"),o=e.token?String(e.token).toLowerCase():null;return o?C(`${_f(t)}/v1/savings/${encodeURIComponent(r)}/${encodeURIComponent(n)}/${encodeURIComponent(o)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}):C(`${_f(t)}/v1/savings/${encodeURIComponent(r)}/${encodeURIComponent(n)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}M();var w6="https://api.symbiotic.fi";function Of(e={}){return(e.baseUrl||process.env.SYMBIOTIC_API_URL||w6).replace(/\/$/,"")}async function GR(e={}){try{let t=await C(`${Of(e)}/v1/vaults`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??15e3});return{ok:Array.isArray(t)&&t.length>0,provider:"symbiotic-restaking",count:t.length}}catch(t){return{ok:!1,provider:"symbiotic-restaking",error:String(t.message||t).slice(0,120)}}}async function qR(e={},t={}){let r=Math.min(200,Math.max(1,Number(e.limit||50))),n=await C(`${Of(t)}/v1/vaults?limit=${r}&offset=${Math.max(0,Number(e.offset||0))}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4});return e.approvedOnly?n.filter(o=>o.approved===!0):n}async function YR(e={},t={}){let r=String(e.address||"").trim();if(!r)throw new Error("symbiotic-restaking: address is required");return C(`${Of(t)}/v1/vaults/${encodeURIComponent(r)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}M();var k6="https://staking-api.polygon.technology/api/v2",S6=18,x6=200,D6=50,v6=new Set(["id","totalStaked","selfStake","delegatedStake","commissionPercent","uptimePercent","performanceIndex"]);function Gf(e={}){return String(e.baseUrl||process.env.POLYGON_STAKING_API_URL||k6).replace(/\/$/,"")}function R6(e,t="id"){let r=String(e??"").trim();if(!/^\d+$/.test(r))throw new Error(`polygon-staking: ${t} must be a positive integer validator id`);let n=Number(r);if(!Number.isSafeInteger(n)||n<1)throw new Error(`polygon-staking: ${t} must be a positive integer validator id`);return n}function N6(e,t=D6){let r=Number(e??t);return Number.isFinite(r)?Math.min(x6,Math.max(1,Math.trunc(r))):t}function Hf(e){let t=Number(e);return Number.isFinite(t)?t/10**S6:null}async function qf(e,t={}){let r=await C(`${Gf(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3});if(typeof r=="string")throw new Error(`polygon-staking GET ${e}: non-JSON response`);if(r?.success===!1){let n=r?.message||r?.error||r?.status||"request rejected";throw new Error(`polygon-staking GET ${e}: ${n}`)}return r}function VR(e={}){return{id:e.id??null,name:typeof e.name=="string"?e.name.trim():null,status:e.status??null,currentState:e.currentState??null,owner:e.owner??null,signer:e.signer??null,contractAddress:e.contractAddress??null,commissionPercent:e.commissionPercent??null,uptimePercent:e.uptimePercent??null,performanceIndex:e.performanceIndex??null,delegationEnabled:e.delegationEnabled??null,activationEpoch:e.activationEpoch??null,deactivationEpoch:e.deactivationEpoch??null,jailEndEpoch:e.jailEndEpoch??null,missedLatestCheckpointCount:e.missedLatestCheckpointcount??null,totalStakedRaw:e.totalStaked??null,selfStakeRaw:e.selfStake??null,delegatedStakeRaw:e.delegatedStake??null,totalStakedPolApprox:Hf(e.totalStaked),selfStakePolApprox:Hf(e.selfStake),delegatedStakePolApprox:Hf(e.delegatedStake),stakePrecision:"approximate \u2014 upstream serves wei-scale as float64"}}async function JR(e={},t={}){let r=await qf("/validators",t),n=Array.isArray(r?.result)?r.result:[],o=r?.summary?.total??n.length;if(e.status){let u=String(e.status).toLowerCase();n=n.filter(d=>String(d?.status||"").toLowerCase()===u)}if(e.currentState){let u=String(e.currentState).toUpperCase();n=n.filter(d=>String(d?.currentState||"").toUpperCase()===u)}if(e.delegationEnabled!=null){let u=!!e.delegationEnabled;n=n.filter(d=>!!d?.delegationEnabled===u)}let i=v6.has(String(e.sortBy))?String(e.sortBy):"id",s=String(e.direction||"").toUpperCase()==="DESC";n=[...n].sort((u,d)=>{let h=Number(u?.[i]??0),g=Number(d?.[i]??0),p=Number.isFinite(h)&&Number.isFinite(g)?h-g:0;return s?-p:p});let a=n.length,A=Math.max(0,Math.trunc(Number(e.offset||0))||0),c=N6(e.limit),l=n.slice(A,A+c);return{provider:"polygon-staking",chainId:137,count:l.length,matched:a,total:o,limit:c,offset:A,sortBy:i,direction:s?"DESC":"ASC",paginatedBy:"client \u2014 upstream /validators ignores limit/offset",validators:e.raw?l:l.map(VR)}}async function WR(e={},t={}){let r=R6(e.id??e.validatorId,"id"),o=(await qf(`/validators/${r}`,t))?.result;if(!o||typeof o!="object")throw new Error(`polygon-staking: validator ${r} not found`);return{provider:"polygon-staking",chainId:137,id:r,validator:e.raw?o:{...VR(o),delegatorCount:o.delegatorCount??null,checkpointsSigned:o.checkpointsSigned??null,checkpointsMissed:o.checkpointsMissed??null,isInAuction:o.isInAuction??null,auctionAmount:o.auctionAmount??null,delegatorUnclaimedRewardsRaw:o.delegatorUnclaimedRewards??null,validatorUnclaimedRewardsRaw:o.validatorUnclaimedRewards??null,claimedRewardRaw:o.claimedReward??null,description:typeof o.description=="string"?o.description:null,logoUrl:o.logoUrl??null},raw:e.raw?void 0:o}}async function $R(e={}){try{let t=await qf("/validators",{...e,timeoutMs:e.timeoutMs??1e4}),r=Array.isArray(t?.result)?t.result:[];return{ok:r.length>0,provider:"polygon-staking",chainId:137,baseUrl:Gf(e),validatorTotal:t?.summary?.total??r.length,exec:!1}}catch(t){return{ok:!1,provider:"polygon-staking",chainId:137,baseUrl:Gf(e),error:String(t?.message||t),exec:!1}}}M();var M6="https://api.v3.aave.com/graphql",Ete=Object.freeze([1,10,56,100,137,146,232,324,1088,1868,5e3,42161,42220,43114,57073,59144,534352]),U6=(e={})=>e.baseUrl||process.env.AAVE_V3_API_URL||M6;async function Ml(e,t,r={}){let n=await C(U6(r),{method:"POST",body:{query:e,variables:t},fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??2e4});if(n?.errors?.length)throw new Error(`aave-v3: ${n.errors.map(o=>o?.message||String(o)).join("; ")}`);return n}var L6=`query Markets($request: MarketsRequest!) {
|
|
146
190
|
markets(request: $request) {
|
|
147
191
|
name
|
|
148
192
|
address
|
|
@@ -150,7 +194,7 @@ anchor-lang = "0.31.1"
|
|
|
150
194
|
totalMarketSize
|
|
151
195
|
totalAvailableLiquidity
|
|
152
196
|
}
|
|
153
|
-
}`,
|
|
197
|
+
}`,T6=`query Market($request: MarketRequest!) {
|
|
154
198
|
market(request: $request) {
|
|
155
199
|
name
|
|
156
200
|
address
|
|
@@ -183,6 +227,6 @@ anchor-lang = "0.31.1"
|
|
|
183
227
|
}
|
|
184
228
|
}
|
|
185
229
|
}
|
|
186
|
-
}`,
|
|
230
|
+
}`,P6=`query Chains($filter: ChainsFilter!) {
|
|
187
231
|
chains(filter: $filter) { chainId name isTestnet explorerUrl }
|
|
188
|
-
}`;function Mk(e={}){let t=e.chainIds??(e.chainId!=null?[e.chainId]:null),n=(Array.isArray(t)?t:[t??1]).map(Number).filter(r=>Number.isInteger(r)&&r>0);if(!n.length)throw new Error("aave-v3: chainIds must contain at least one chain id");return[...new Set(n)]}async function pf(e={},t={}){let n={chainIds:Mk(e)};return e.user&&(n.user=String(e.user)),{markets:(await eo(Ok,{request:n},t))?.data?.markets??[]}}async function mf(e={},t={}){let n=String(e.address||e.market||e.marketAddress||"").trim();if(!/^0x[0-9a-fA-F]{40}$/.test(n))throw new Error("aave-v3: marketReserves requires an EVM market (pool) address");let r=Number(e.chainId??1);if(!Number.isInteger(r)||r<=0)throw new Error("aave-v3: chainId must be a positive integer");let o={address:n,chainId:r};e.user&&(o.user=String(e.user));let i=(await eo(Lk,{request:o},t))?.data?.market??null;if(!i)throw new Error(`aave-v3: no market at ${n} on chain ${r}`);return{market:i}}async function ff(e={},t={}){let n=new Set(["MAINNET_ONLY","TESTNET_ONLY","ALL"]),r=String(e.filter||"MAINNET_ONLY").toUpperCase();if(!n.has(r))throw new Error(`aave-v3: filter must be one of ${[...n].join(", ")}`);return{chains:(await eo(Bk,{filter:r},t))?.data?.chains??[]}}async function hf(e={}){return{ok:(await eo("query { health }",{},e))?.data?.health===!0,provider:"aave-v3"}}_();var Uk="https://staking-api.babylonlabs.io";function Mi(e={}){return String(e.baseUrl||process.env.BABYLON_STAKING_API_URL||Uk).replace(/\/$/,"")}function to(e,t={}){return b(`${Mi(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:{Accept:"application/json"}})}function bf(e,t="pkHex"){let n=String(e||"").trim().toLowerCase().replace(/^0x/,"");if(!/^[0-9a-f]+$/.test(n))throw new Error(`babylon-staking: ${t} must be hex`);if(n.length===66&&(n.startsWith("02")||n.startsWith("03")))return n.slice(2);if(n.length!==64)throw new Error(`babylon-staking: ${t} must be a 64-char x-only (or 66-char compressed) BTC public key`);return n}async function gf(e={}){try{let n=(await to("/v2/stats",e))?.data||{},r=Number(n.active_tvl??0);return{ok:Number.isFinite(r)&&r>0,provider:"babylon-staking",baseUrl:Mi(e),activeTvlSats:String(n.active_tvl??""),activeFinalityProviders:n.active_finality_providers??null,exec:!1}}catch(t){return{ok:!1,provider:"babylon-staking",baseUrl:Mi(e),error:String(t?.message||t),exec:!1}}}async function yf(e={},t={}){let r=(await to("/v2/stats",t))?.data||{};return{provider:"babylon-staking",activeTvlSats:String(r.active_tvl??""),totalActiveTvlSats:String(r.total_active_tvl??""),activeDelegations:r.active_delegations??null,totalActiveDelegations:r.total_active_delegations??null,activeFinalityProviders:r.active_finality_providers??null,totalFinalityProviders:r.total_finality_providers??null,btcStakingApr:r.btc_staking_apr??null,btcStakingAprPct:r.btc_staking_apr==null?null:Number(r.btc_staking_apr)*100,maxStakingApr:r.max_staking_apr??null,maxStakingAprPct:r.max_staking_apr==null?null:Number(r.max_staking_apr)*100,raw:r}}async function wf(e={},t={}){let n=await to("/v2/finality-providers",t),r=Array.isArray(n?.data)?n.data:[];if(e.state){let a=String(e.state).trim().toUpperCase();r=r.filter(i=>String(i.state||"").toUpperCase().includes(a))}if(e.btcPk){let a=bf(e.btcPk,"btcPk");r=r.filter(i=>String(i.btc_pk||"").toLowerCase()===a)}let o=Math.min(500,Math.max(1,Number(e.limit||r.length||1)));return{provider:"babylon-staking",count:r.length,finalityProviders:r.slice(0,o).map(a=>({btcPk:a.btc_pk??null,moniker:a.description?.moniker??null,website:a.description?.website??null,state:a.state??null,commission:a.commission??null,activeTvlSats:a.active_tvl==null?null:String(a.active_tvl),activeDelegations:a.active_delegations??null}))}}async function vf(e={},t={}){let n=bf(e.stakerPkHex||e.stakerPk||e.pkHex||e.pk,"stakerPkHex"),r=new URLSearchParams({staker_pk_hex:n});e.paginationKey&&r.set("pagination_key",String(e.paginationKey));let o=await to(`/v2/delegations?${r}`,t),a=Array.isArray(o?.data)?o.data:[],i=a.reduce((s,c)=>s+Number(c.delegation_staking?.staking_amount??c.staking_amount??0),0);return{provider:"babylon-staking",stakerPkHex:n,count:a.length,totalStakedSats:String(i),nextKey:o?.pagination?.next_key||null,delegations:a.map(s=>({stakingTxHashHex:s.delegation_staking?.staking_tx_hash_hex??s.staking_tx_hash_hex??null,state:s.state??null,stakingAmountSats:s.delegation_staking?.staking_amount==null&&s.staking_amount==null?null:String(s.delegation_staking?.staking_amount??s.staking_amount),stakingTimelock:s.delegation_staking?.staking_timelock??null,startHeight:s.delegation_staking?.start_height??null,finalityProviderBtcPks:s.finality_provider_btc_pks_hex??null})),raw:a}}_();var Fk="https://markets.bisq.network";function $i(e={}){return String(e.baseUrl||process.env.BISQ_MARKETS_URL||Fk).replace(/\/$/,"")}function xf(e,t="market"){let n=String(e||"").trim().toLowerCase().replace(/[/\-\s]/g,"_");if(!/^[a-z0-9]{2,12}_[a-z0-9]{2,12}$/.test(n))throw new Error(`bisq-markets: ${t} must look like btc_usd (got "${e}")`);return n}function no(e,t={}){return b(`${$i(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function Sf(e={}){try{let t=await no("/api/markets",e),n=t&&typeof t=="object"?Object.keys(t).length:0;return{ok:n>0,provider:"bisq-markets",baseUrl:$i(e),marketCount:n,exec:!1}}catch(t){return{ok:!1,provider:"bisq-markets",baseUrl:$i(e),error:String(t?.message||t),exec:!1}}}async function kf(e={},t={}){let n=await no("/api/markets",t),r=Object.values(n&&typeof n=="object"?n:{});if(e.base){let o=String(e.base).trim().toLowerCase();r=r.filter(a=>String(a.lsymbol||"").toLowerCase()===o)}if(e.quote){let o=String(e.quote).trim().toLowerCase();r=r.filter(a=>String(a.rsymbol||"").toLowerCase()===o)}return{provider:"bisq-markets",count:r.length,markets:r.map(o=>({pair:o.pair??null,name:o.name??null,base:o.lsymbol??null,baseName:o.lname??null,quote:o.rsymbol??null,quoteName:o.rname??null,baseType:o.ltype??null,quoteType:o.rtype??null}))}}async function Ef(e={},t={}){let n=xf(e.market||e.pair||"btc_usd","market"),r=await no(`/api/ticker?market=${encodeURIComponent(n)}`,t),o=Array.isArray(r)?r[0]||{}:r||{};return{provider:"bisq-markets",market:n,last:o.last==null?null:Number(o.last),high:o.high==null?null:Number(o.high),low:o.low==null?null:Number(o.low),bid:o.buy==null?null:Number(o.buy),ask:o.sell==null?null:Number(o.sell),volumeBase:o.volume_left==null?null:Number(o.volume_left),volumeQuote:o.volume_right==null?null:Number(o.volume_right),note:"Bisq is thin, non-KYC P2P \u2014 treat as a basis signal against centralized spot, not a reference rate",raw:o}}async function If(e={},t={}){let n=xf(e.market||e.pair||"btc_usd","market"),r=Math.min(2e3,Math.max(1,Number(e.limit||50))),o=new URLSearchParams({market:n,limit:String(r)});e.timestampFrom&&o.set("timestamp_from",String(e.timestampFrom)),e.timestampTo&&o.set("timestamp_to",String(e.timestampTo));let a=await no(`/api/trades?${o}`,t),i=Array.isArray(a)?a:[],s=i.length?Number(i[0].trade_date||0):null,c=i.reduce((l,u)=>l+Number(u.amount||0),0);return{provider:"bisq-markets",market:n,count:i.length,latestTradeAt:s?new Date(s).toISOString():null,latestTradeAgeHours:s?Math.round((Date.now()-s)/36e5*10)/10:null,volumeBase:c,trades:i.slice(0,r).map(l=>({price:l.price==null?null:Number(l.price),amount:l.amount==null?null:Number(l.amount),volume:l.volume==null?null:Number(l.volume),paymentMethod:l.payment_method??null,tradeDate:l.trade_date??null,tradeAt:l.trade_date?new Date(Number(l.trade_date)).toISOString():null}))}}_();var Ee=Object.freeze({60808:{name:"bob",label:"BOB (Build on Bitcoin)",url:"https://explorer.gobob.xyz",nativeSymbol:"ETH"},30:{name:"rootstock",label:"Rootstock (RSK)",url:"https://rootstock.blockscout.com",nativeSymbol:"RBTC"}}),Hk=new Map([["bob",60808],["rootstock",30],["rsk",30]]),Vk=60808;function Pn(e){if(e==null||e==="")return Vk;let t=Hk.get(String(e).trim().toLowerCase());if(t)return t;let n=Number(e);if(!Ee[n])throw new Error(`bob-rootstock: unsupported chain ${e} (supported: ${Object.keys(Ee).join(", ")} / bob, rootstock)`);return n}function Ui(e,t={}){if(t.baseUrl)return String(t.baseUrl).replace(/\/$/,"");let n=Pn(e),r=n===30?process.env.ROOTSTOCK_EXPLORER_URL:process.env.BOB_EXPLORER_URL;return String(r||Ee[n].url).replace(/\/$/,"")}function Af(e,t="address"){let n=String(e||"").trim();if(!/^0x[0-9a-fA-F]{40}$/.test(n))throw new Error(`bob-rootstock: ${t} must be a 0x EVM address`);return n}function ro(e,t,n={}){return b(`${Ui(e,n)}${t.startsWith("/")?t:`/${t}`}`,{fetchImpl:n.fetchImpl,timeoutMs:n.timeoutMs??15e3})}async function _f(e={},t={}){let n;try{n=Pn(t.chainId??t.chain??e.chainId)}catch(o){return{ok:!1,provider:"bob-rootstock",error:String(o?.message||o),exec:!1}}let r=Ee[n];try{let o=await ro(n,"/api/v2/stats",e);return{ok:o?.total_blocks!=null||o?.total_transactions!=null,provider:"bob-rootstock",chainId:n,chain:r.name,baseUrl:Ui(n,e),totalBlocks:o?.total_blocks??null,averageBlockTimeMs:o?.average_block_time??null,exec:!1}}catch(o){return{ok:!1,provider:"bob-rootstock",chainId:n,chain:r.name,baseUrl:Ui(n,e),error:String(o?.message||o),exec:!1}}}async function Di(e={},t={}){let n=e.chainId??e.chain;if(String(n).trim().toLowerCase()==="all"){let i=Object.keys(Ee).map(Number);return{provider:"bob-rootstock",chains:await Promise.all(i.map(async c=>{try{return await Di({chainId:c},t)}catch(l){return{provider:"bob-rootstock",chainId:c,chain:Ee[c].name,error:String(l?.message||l)}}}))}}let r=Pn(n),o=Ee[r],a=await ro(r,"/api/v2/stats",t);return{provider:"bob-rootstock",chainId:r,chain:o.name,label:o.label,nativeSymbol:o.nativeSymbol,averageBlockTimeMs:a.average_block_time??null,averageBlockTimeSec:a.average_block_time==null?null:Number(a.average_block_time)/1e3,gasPrices:a.gas_prices??null,gasPriceUpdatedAt:a.gas_price_updated_at??null,gasUsedToday:a.gas_used_today??null,coinPrice:a.coin_price??null,coinPriceChangePct:a.coin_price_change_percentage??null,marketCap:a.market_cap??null,tvl:a.tvl??null,totalBlocks:a.total_blocks??null,totalAddresses:a.total_addresses??null,totalTransactions:a.total_transactions??null,transactionsToday:a.transactions_today??null,networkUtilizationPct:a.network_utilization_percentage??null,raw:a}}async function Cf(e={},t={}){let n=Pn(e.chainId??e.chain),r=Af(e.address||e.addr,"address"),o=Ee[n],a=await ro(n,`/api/v2/addresses/${encodeURIComponent(r)}`,t);return{provider:"bob-rootstock",chainId:n,chain:o.name,address:r,nativeSymbol:o.nativeSymbol,coinBalanceWei:a.coin_balance==null?null:String(a.coin_balance),coinBalance:a.coin_balance==null?null:Number(a.coin_balance)/1e18,isContract:a.is_contract??null,isVerified:a.is_verified??null,name:a.name??null,blockNumberBalanceUpdatedAt:a.block_number_balance_updated_at??null,raw:a}}async function Pf(e={},t={}){let n=Pn(e.chainId??e.chain),r=Af(e.address||e.addr,"address"),o=await ro(n,`/api/v2/addresses/${encodeURIComponent(r)}/token-balances`,t),a=Array.isArray(o)?o:[],i=Math.min(500,Math.max(1,Number(e.limit||a.length||1)));return{provider:"bob-rootstock",chainId:n,chain:Ee[n].name,address:r,count:a.length,tokens:a.slice(0,i).map(s=>({symbol:s.token?.symbol??null,name:s.token?.name??null,address:s.token?.address??s.token?.address_hash??null,type:s.token?.type??null,decimals:s.token?.decimals??null,rawBalance:s.value==null?null:String(s.value),balance:s.value==null||s.token?.decimals==null?null:Number(s.value)/10**Number(s.token.decimals),exchangeRate:s.token?.exchange_rate??null}))}}_();var zk="https://insights.braiins.com/api/v1.0";function Fi(e={}){return String(e.baseUrl||process.env.BRAIINS_INSIGHTS_URL||zk).replace(/\/$/,"")}function qi(e,t={}){return b(`${Fi(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:{Accept:"application/json"}})}async function Tf(e={}){try{let t=await qi("/price-stats",e),n=Number(t?.price??0);return{ok:Number.isFinite(n)&&n>0,provider:"braiins-insights",baseUrl:Fi(e),btcUsd:Number.isFinite(n)?n:null,timestamp:t?.timestamp??null,exec:!1}}catch(t){return{ok:!1,provider:"braiins-insights",baseUrl:Fi(e),error:String(t?.message||t),exec:!1}}}async function Nf(e={},t={}){let n=await qi("/price-stats",t);return{provider:"braiins-insights",btcUsd:n?.price==null?null:Number(n.price),percentChange24h:n?.percent_change_24h??null,timestamp:n?.timestamp??null,raw:n}}async function Rf(e={},t={}){let n=await qi("/pool-stats",t),r=Array.isArray(n)?n:Array.isArray(n?.pools)?n.pools:[],o=String(e.window||"1w").trim().toLowerCase(),a=l=>l?.blocks_mined?.[o]||null,i=[...r].sort((l,u)=>Number(a(u)?.absolute||0)-Number(a(l)?.absolute||0)),s=Math.min(200,Math.max(1,Number(e.limit||i.length||1))),c=r.length?Object.keys(r[0]?.blocks_mined||{}):[];if(c.length&&!c.includes(o))throw new Error(`braiins-insights: window must be one of ${c.join(", ")}`);return{provider:"braiins-insights",window:o,availableWindows:c,count:i.length,pools:i.slice(0,s).map(l=>({name:l.pool_name??l.name??null,blocksMined:a(l)?.absolute??null,sharePct:a(l)?.relative_pct??null,blockValueAvg:l.block_value_avg??null,hashrate:l.hashrate??null,luck:l.luck??null,blocksMinedAllWindows:l.blocks_mined??null})),raw:i.slice(0,s)}}_();var Gk="https://api.cow.fi",Of=Object.freeze({1:"mainnet",100:"xdai",42161:"arbitrum_one",8453:"base",11155111:"sepolia"});function Lf(e={}){return(e.baseUrl||process.env.COW_API_URL||Gk).replace(/\/$/,"")}function Kk(e={}){if(e.network)return String(e.network);let t=Number(e.chainId??1),n=Of[t];if(!n)throw new Error(`cow-protocol: unsupported chainId ${t} (have: ${Object.keys(Of).join(", ")})`);return n}function Hi(e,t,n){return`${Lf(n)}/${Kk(e)}/api/v1${t}`}function Bf(e,t){let n=String(e||"").trim();if(!/^0x[0-9a-fA-F]{40}$/.test(n))throw new Error(`cow-protocol: ${t} must be an EVM address`);return n}function Mf(e,t=10){return Math.min(1e3,Math.max(1,Number(e.limit??t)))}async function $f(e={},t={}){return b(Hi(e,"/auction",t),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function Uf(e={},t={}){let n=Bf(e.owner||e.address||e.user,"owner"),r=new URLSearchParams({limit:String(Mf(e))});e.offset!=null&&r.set("offset",String(Math.max(0,Number(e.offset))));let o=await b(`${Hi(e,`/account/${n}/orders`,t)}?${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4}),a=Array.isArray(o)?o:[],i=e.openOnly===!1?a:a.filter(s=>String(s?.status||"").toLowerCase()==="open");return{owner:n,count:i.length,total:a.length,orders:i}}async function Df(e={},t={}){let n=new URLSearchParams;e.orderUid?n.set("orderUid",String(e.orderUid)):n.set("owner",Bf(e.owner||e.address||e.user,"owner"));let r=await b(`${Hi(e,"/trades",t)}?${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4}),o=Array.isArray(r)?r:[];return{count:o.length,trades:o.slice(0,Mf(e))}}async function Ff(e={}){let t=await b(`${Lf(e)}/mainnet/api/v1/version`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??12e3}),n=typeof t=="string"?t:JSON.stringify(t??"");return{ok:n.trim().length>0,provider:"cow-protocol",version:n.trim()||null}}_();var Jk="https://api.hiro.so",Xk=20;function Vi(e={}){return String(e.baseUrl||process.env.HIRO_API_URL||Jk).replace(/\/$/,"")}function Qk(e={}){let t={Accept:"application/json"},n=e.apiKey||process.env.HIRO_API_KEY;return n&&(t["x-api-key"]=String(n)),t}function Tn(e,t={}){return b(`${Vi(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:Qk(t)})}async function qf(e={}){try{let t=await Tn("/v2/info",e),n=Number(t?.burn_block_height??0);return{ok:Number.isFinite(n)&&n>0,provider:"hiro-stacks",baseUrl:Vi(e),burnBlockHeight:t?.burn_block_height??null,stacksTipHeight:t?.stacks_tip_height??null,serverVersion:t?.server_version??null,rateLimitRps:Xk,keyed:!!(e.apiKey||process.env.HIRO_API_KEY),exec:!1}}catch(t){return{ok:!1,provider:"hiro-stacks",baseUrl:Vi(e),error:String(t?.message||t),exec:!1}}}async function Hf(e={},t={}){let n=await Tn("/v2/info",t);return{provider:"hiro-stacks",peerVersion:n.peer_version??null,serverVersion:n.server_version??null,networkId:n.network_id??null,burnBlockHeight:n.burn_block_height??null,stableBurnBlockHeight:n.stable_burn_block_height??null,stacksTipHeight:n.stacks_tip_height??null,stacksTip:n.stacks_tip??null,poxConsensus:n.pox_consensus??null,raw:n}}async function Vf(e={},t={}){let n=await Tn("/v2/pox",t),r=Number(n.total_liquid_supply_ustx||0),o=Number(n.current_cycle?.stacked_ustx||0);return{provider:"hiro-stacks",contractId:n.contract_id??null,currentCycleId:n.current_cycle?.id??null,currentCycleStackedUstx:n.current_cycle?.stacked_ustx==null?null:String(n.current_cycle.stacked_ustx),currentCycleIsPoX:n.current_cycle?.is_pox_active??null,nextCycleId:n.next_cycle?.id??null,nextCycleStackedUstx:n.next_cycle?.stacked_ustx==null?null:String(n.next_cycle.stacked_ustx),nextCycleMinThresholdUstx:n.next_cycle?.min_threshold_ustx==null?null:String(n.next_cycle.min_threshold_ustx),blocksUntilNextCycle:n.next_cycle?.blocks_until_prepare_phase??null,minAmountUstx:n.min_amount_ustx==null?null:String(n.min_amount_ustx),totalLiquidSupplyUstx:n.total_liquid_supply_ustx==null?null:String(n.total_liquid_supply_ustx),participationPct:r>0?o/r*100:null,rewardCycleLength:n.reward_cycle_length??null,rewardSlots:n.reward_slots??null,currentBurnchainBlockHeight:n.current_burnchain_block_height??null,raw:n}}async function Wf(e={},t={}){let n=Math.min(60,Math.max(1,Number(e.limit||20))),r=Math.max(0,Number(e.offset||0)),o=await Tn(`/extended/v2/pox/cycles?limit=${n}&offset=${r}`,t),a=Array.isArray(o?.results)?o.results:[];return{provider:"hiro-stacks",total:o?.total??null,limit:n,offset:r,cycles:a.map(i=>({cycleNumber:i.cycle_number??null,blockHeight:i.block_height??null,totalStackedAmount:i.total_stacked_amount==null?null:String(i.total_stacked_amount),totalWeight:i.total_weight??null,totalSigners:i.total_signers??null}))}}async function zf(e={},t={}){let n=Math.min(30,Math.max(1,Number(e.limit||1))),r=await Tn(`/extended/v2/blocks?limit=${n}`,t),o=Array.isArray(r?.results)?r.results:[];return{provider:"hiro-stacks",total:r?.total??null,limit:n,blocks:o.map(a=>({height:a.height??null,hash:a.hash??null,burnBlockHeight:a.burn_block_height??null,burnBlockTime:a.burn_block_time??null,txCount:a.tx_count??null,canonical:a.canonical??null}))}}_();var eE="https://bundles.jito.wtf",Gf=1e9;function Wi(e={}){return String(e.baseUrl||process.env.JITO_BUNDLES_URL||eE).replace(/\/$/,"")}function tE(e,t,n){let r=Number(e);return Number.isFinite(r)?Math.max(1,Math.min(Math.floor(r),n)):t}function jf(e){let t=Number(e);return Number.isFinite(t)?Math.round(t*Gf):null}function nE(e={}){let t=Number(e.landedTipLamports);return{bundleId:e.bundleId||null,timestamp:e.timestamp||null,validator:e.validator||null,tippers:e.tippers||[],transactions:e.transactions||[],transactionCount:Array.isArray(e.transactions)?e.transactions.length:0,landedTipLamports:Number.isFinite(t)?t:null,landedTipSol:Number.isFinite(t)?t/Gf:null,raw:e}}async function Kf(e={}){try{let t=await b(`${Wi(e)}/api/v1/bundles/tip_floor`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??12e3}),n=Array.isArray(t)?t[0]:t,r=Number(n?.landed_tips_50th_percentile);return{ok:Number.isFinite(r),provider:"jito-mev",tipFloorP50Sol:Number.isFinite(r)?r:null,asOf:n?.time||null,exec:!1}}catch(t){return{ok:!1,provider:"jito-mev",error:String(t?.message||t),exec:!1}}}async function Yf(e={},t={}){let n=tE(e.limit,5,100),r=new URL(`${Wi(t)}/api/v1/bundles/recent`);r.searchParams.set("limit",String(n)),r.searchParams.set("sort",String(e.sort||"Time")),r.searchParams.set("asc",String(!!e.asc));let o=await b(r.toString(),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),i=(Array.isArray(o)?o:Array.isArray(o?.bundles)?o.bundles:[]).map(nE),s=i.map(c=>c.landedTipLamports).filter(c=>Number.isFinite(c));return{provider:"jito-mev",chain:"solana-mainnet-beta",count:i.length,totalTipLamports:s.reduce((c,l)=>c+l,0),maxTipLamports:s.length?Math.max(...s):null,bundles:i}}async function Jf(e={}){let t=await b(`${Wi(e)}/api/v1/bundles/tip_floor`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??12e3}),n=(Array.isArray(t)?t[0]:t)||{},r={p25:Number(n.landed_tips_25th_percentile)||0,p50:Number(n.landed_tips_50th_percentile)||0,p75:Number(n.landed_tips_75th_percentile)||0,p95:Number(n.landed_tips_95th_percentile)||0,p99:Number(n.landed_tips_99th_percentile)||0,ema50:Number(n.ema_landed_tips_50th_percentile)||0};return{provider:"jito-mev",chain:"solana-mainnet-beta",asOf:n.time||null,tipFloorSol:r,tipFloorLamports:Object.fromEntries(Object.entries(r).map(([o,a])=>[o,jf(a)])),suggestedTipLamports:jf(r.p75||r.p50),raw:n}}_();var oE="https://api.kamino.finance";function aE(e={}){return String(e.baseUrl||process.env.KAMINO_API_URL||oE).replace(/\/$/,"")}function se(e){let t=Number(e);return Number.isFinite(t)?t:null}function Xf(e={}){let t=se(e.totalValueLocked)??0,n=se(e.apy?.totalApy)??0,r=se(e.kaminoApy?.totalApy)??0;return{strategy:e.strategy||null,pair:e.tokenA&&e.tokenB?`${e.tokenA}-${e.tokenB}`:null,tokenA:e.tokenA||null,tokenB:e.tokenB||null,tokenAMint:e.tokenAMint||null,tokenBMint:e.tokenBMint||null,tvlUsd:t,sharePrice:se(e.sharePrice),sharesIssued:se(e.sharesIssued),profitAndLoss:se(e.profitAndLoss),feeApy:n,feeApyPct:n*100,rewardApy:r,rewardApyPct:r*100,totalApy:n+r,totalApyPct:(n+r)*100,apr24h:se(e.apy?.vault?.totalApr),apy24h:se(e.kaminoApy?.vault?.apy24h),apy7d:se(e.kaminoApy?.vault?.apy7d),apy30d:se(e.kaminoApy?.vault?.apy30d),poolPrice:se(e.apy?.vault?.poolPrice),priceLower:se(e.apy?.vault?.priceLower),priceUpper:se(e.apy?.vault?.priceUpper),outOfRange:!!e.apy?.vault?.strategyOutOfRange,rewardMints:e.rewardMints||[],balances:e.vaultBalances||null,lastCalculated:e.kaminoApy?.vault?.lastCalculated||null}}async function zi(e={},t={}){let n=new URL(`${aE(t)}/strategies/metrics`);n.searchParams.set("env",String(e.env||"mainnet-beta")),n.searchParams.set("status",String(e.status||"LIVE"));let r=await b(n.toString(),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??45e3});return Array.isArray(r)?r:[]}async function Qf(e={}){try{let t=await zi({},e),n=t.filter(r=>(Number(r.totalValueLocked)||0)>0).length;return{ok:t.length>0,provider:"kamino-strategies",strategies:t.length,funded:n,exec:!1}}catch(t){return{ok:!1,provider:"kamino-strategies",error:String(t?.message||t),exec:!1}}}async function Zf(e={},t={}){let r=(await zi(e,t)).map(Xf),o=r.length,a=Number.isFinite(Number(e.minTvlUsd))?Number(e.minTvlUsd):1e4;if(r=r.filter(l=>l.tvlUsd>=a),e.token){let l=String(e.token).toLowerCase();r=r.filter(u=>String(u.tokenA||"").toLowerCase()===l||String(u.tokenB||"").toLowerCase()===l||u.tokenAMint===e.token||u.tokenBMint===e.token)}if(e.pair){let l=String(e.pair).toLowerCase().replace(/[/_]/g,"-");r=r.filter(u=>String(u.pair||"").toLowerCase()===l)}e.inRangeOnly===!0&&(r=r.filter(l=>!l.outOfRange));let i=String(e.sortBy||"apy");r.sort((l,u)=>i==="tvl"?u.tvlUsd-l.tvlUsd:u.totalApy-l.totalApy);let s=Number.isFinite(Number(e.limit))&&Number(e.limit)>0?Number(e.limit):25,c=r.slice(0,s);return{provider:"kamino-strategies",chain:"solana-mainnet-beta",env:e.env||"mainnet-beta",status:e.status||"LIVE",totalStrategies:o,matched:r.length,count:c.length,minTvlUsd:a,tvlUsdMatched:r.reduce((l,u)=>l+u.tvlUsd,0),strategies:c}}async function eh(e={},t={}){let n=String(e.strategy||e.address||"").trim();if(!n)throw new Error("kamino-strategies: strategy address required");let o=(await zi({...e,status:e.status||"ALL"},t)).find(a=>a.strategy===n);if(!o)throw new Error(`kamino-strategies: strategy ${n} not found`);return{provider:"kamino-strategies",chain:"solana-mainnet-beta",...Xf(o),raw:o}}_();var sE="https://blockstream.info/liquid/api",th="6f0279e9ed041c3d710a9f57d0c02928416460c4b722ae3457a11eec381c526d";function oo(e={}){return String(e.baseUrl||process.env.LIQUID_ESPLORA_URL||sE).replace(/\/$/,"")}function cE(e,t="address"){let n=String(e||"").trim(),r=/^(ex1|lq1|el1|tex1|tlq1)[a-z0-9]{20,200}$/i.test(n),o=/^[QVGH][a-km-zA-HJ-NP-Z1-9]{25,110}$/.test(n);if(!r&&!o)throw new Error(`liquid-esplora: ${t} must look like a Liquid address (Q\u2026, VJL\u2026, ex1\u2026, lq1\u2026)`);return n}function lE(e,t="assetId"){let n=String(e||"").trim().toLowerCase().replace(/^0x/,"");if(!/^[0-9a-f]{64}$/.test(n))throw new Error(`liquid-esplora: ${t} must be 64-char hex`);return n}async function nh(e,t={}){let n=`${oo(t)}${e.startsWith("/")?e:`/${e}`}`,o=await(t.fetchImpl||fetch)(n,{method:"GET",headers:{accept:"application/json,text/plain;q=0.9,*/*;q=0.8"},signal:AbortSignal.timeout(t.timeoutMs??12e3)}),a=await o.text();if(!o.ok)throw new Error(`liquid-esplora GET ${e}: HTTP ${o.status} ${a.slice(0,160)}`);return a}function rh(e,t={}){return b(`${oo(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function oh(e={}){try{let t=await nh("/blocks/tip/height",e),n=Number(t);return{ok:Number.isFinite(n)&&n>0,provider:"liquid-esplora",baseUrl:oo(e),tipHeight:n,exec:!1,signing:"user-wallet"}}catch(t){return{ok:!1,provider:"liquid-esplora",baseUrl:oo(e),error:String(t?.message||t),exec:!1}}}async function ah(e={},t={}){let n=await nh("/blocks/tip/height",t);return{provider:"liquid-esplora",tipHeight:Number(n)}}async function ih(e={},t={}){let n=cE(e.address||e.addr,"address"),r=await rh(`/address/${n}`,t),o=r.chain_stats||{},a=r.mempool_stats||{},i=o.funded_txo_sum!=null,s=Number(o.funded_txo_sum||0)+Number(a.funded_txo_sum||0),c=Number(o.spent_txo_sum||0)+Number(a.spent_txo_sum||0);return{provider:"liquid-esplora",address:n,txCount:Number(o.tx_count||0)+Number(a.tx_count||0),balanceSats:i?String(s-c):null,confidential:!i,note:i?void 0:"Liquid amounts are blinded \u2014 Esplora returns TXO counts only for confidential outputs. Unblind with the wallet's blinding key for values.",chainStats:o,mempoolStats:a,raw:r}}async function sh(e={},t={}){let n=lE(e.assetId||e.asset||th,"assetId"),r=await rh(`/asset/${n}`,t),o=r.chain_stats||{};return{provider:"liquid-esplora",assetId:n,isPolicyAsset:n===th,name:r.name??r.entity?.domain??null,ticker:r.ticker??null,precision:r.precision??null,issuanceTxid:r.issuance_txin?.txid??null,txCount:o.tx_count??null,pegInAmount:o.peg_in_amount==null?null:String(o.peg_in_amount),pegOutAmount:o.peg_out_amount==null?null:String(o.peg_out_amount),issuedAmount:o.issued_amount==null?null:String(o.issued_amount),burnedAmount:o.burned_amount==null?null:String(o.burned_amount),circulatingAmount:o.peg_in_amount!=null?String(Number(o.peg_in_amount)-Number(o.peg_out_amount||0)-Number(o.burned_amount||0)):o.issued_amount!=null?String(Number(o.issued_amount)-Number(o.burned_amount||0)):null,raw:r}}_();var dE="https://api-mainnet.magiceden.dev/v2/ord/btc",pE=600;function ji(e={}){return String(e.baseUrl||process.env.MAGICEDEN_ORD_API_URL||dE).replace(/\/$/,"")}function mE(e={}){let t={Accept:"application/json"},n=e.apiKey||process.env.MAGICEDEN_API_KEY;return n&&(t.Authorization=`Bearer ${n}`),t}function ch(e,t="collectionSymbol"){let n=String(e||"").trim().toLowerCase();if(!/^[a-z0-9][a-z0-9_-]{0,63}$/.test(n))throw new Error(`magiceden-ordinals: ${t} must be a slug like "nodemonkes"`);return n}function lh(e,t={}){return b(`${ji(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:mE(t),retries:t.retries??1})}async function uh(e={}){let t=ch(e.probeCollection||process.env.MAGICEDEN_PROBE_COLLECTION||"nodemonkes");try{let n=await lh(`/stat?collectionSymbol=${encodeURIComponent(t)}`,e);return{ok:n!=null&&typeof n=="object",provider:"magiceden-ordinals",baseUrl:ji(e),probeCollection:t,rateLimitRpm:pE,exec:!1}}catch(n){let r=n?.status??null;return{ok:!1,provider:"magiceden-ordinals",baseUrl:ji(e),probeCollection:t,status:r,upstreamDown:r===503||r===502||r===504,error:String(n?.message||n),fallback:"satflow",note:r===503?"Magic Eden ordinals API returned 503 'no healthy upstream'. Use the satflow provider for BTC NFT market data.":void 0,exec:!1}}}async function dh(e={},t={}){let n=ch(e.collectionSymbol||e.symbol||e.collection,"collectionSymbol");try{let r=await lh(`/stat?collectionSymbol=${encodeURIComponent(n)}`,t),o=r?.floorPrice==null?null:Number(r.floorPrice);return{ok:!0,provider:"magiceden-ordinals",collectionSymbol:n,floorPriceSats:o==null?null:String(r.floorPrice),floorPriceBtc:o==null?null:o/1e8,totalVolumeSats:r?.totalVolume==null?null:String(r.totalVolume),totalVolumeBtc:r?.totalVolume==null?null:Number(r.totalVolume)/1e8,totalListed:r?.totalListed??null,owners:r?.owners??null,supply:r?.supply??null,pendingTransactions:r?.pendingTransactions??null,inscriptionNumberMin:r?.inscriptionNumberMin??null,inscriptionNumberMax:r?.inscriptionNumberMax??null,raw:r}}catch(r){let o=r?.status??null;if(!(o===502||o===503||o===504))throw r;return{ok:!1,provider:"magiceden-ordinals",collectionSymbol:n,status:o,upstreamDown:!0,error:String(r?.message||r),fallback:"satflow",note:"Magic Eden ordinals API is returning 5xx ('no healthy upstream'). Query the satflow provider for floors and listings."}}}_();var hE="https://mempool.space/api",bE=7;function Gi(e={}){return String(e.baseUrl||process.env.MEMPOOL_API_URL||hE).replace(/\/$/,"")}function ao(e,t={}){return b(`${Gi(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}function ph(e){if(!e)return{ageDays:null,stale:null};let t=new Date(e).getTime();if(!Number.isFinite(t))return{ageDays:null,stale:null};let n=(Date.now()-t)/864e5;return{ageDays:Math.round(n*10)/10,stale:n>bE}}async function mh(e={}){try{let n=(await ao("/v1/lightning/statistics/latest",e))?.latest||{},{ageDays:r,stale:o}=ph(n.added);return{ok:Number(n.node_count||0)>0,provider:"mempool-lightning",baseUrl:Gi(e),snapshotAt:n.added??null,ageDays:r,stale:o,nodeCount:n.node_count??null,exec:!1}}catch(t){return{ok:!1,provider:"mempool-lightning",baseUrl:Gi(e),error:String(t?.message||t),exec:!1}}}async function fh(e={},t={}){let r=(await ao("/v1/lightning/statistics/latest",t))?.latest||{},{ageDays:o,stale:a}=ph(r.added);return{provider:"mempool-lightning",snapshotAt:r.added??null,ageDays:o,stale:a,staleNote:a?`mempool.space Lightning snapshot is ${o} days old \u2014 trend only, not live state`:void 0,nodeCount:r.node_count??null,channelCount:r.channel_count??null,totalCapacitySats:r.total_capacity==null?null:String(r.total_capacity),totalCapacityBtc:r.total_capacity==null?null:Number(r.total_capacity)/1e8,avgCapacitySats:r.avg_capacity==null?null:String(r.avg_capacity),avgFeeRatePpm:r.avg_fee_rate??null,avgBaseFeeMsat:r.avg_base_fee_mtokens??null,torNodes:r.tor_nodes??null,clearnetNodes:r.clearnet_nodes??null,unannouncedNodes:r.unannounced_nodes??null,raw:r}}async function hh(e={},t={}){let n=String(e.metric||e.ranking||"connectivity").trim().toLowerCase(),r=new Set(["connectivity","liquidity","channels"]);if(!r.has(n))throw new Error(`mempool-lightning: metric must be one of ${[...r].join(", ")}`);let o=await ao(`/v1/lightning/nodes/rankings/${n}`,t),a=Array.isArray(o)?o:[],i=Math.min(100,Math.max(1,Number(e.limit||a.length||1)));return{provider:"mempool-lightning",metric:n,count:a.length,nodes:a.slice(0,i).map(s=>({publicKey:s.publicKey??null,alias:s.alias??null,channels:s.channels??null,capacitySats:s.capacity==null?null:String(s.capacity),firstSeen:s.firstSeen??null,updatedAt:s.updatedAt??null,city:s.city?.en??s.city??null,country:s.country?.en??s.country??null,iso:s.iso_code??null}))}}async function bh(e={},t={}){let n=await ao("/v1/lightning/nodes/countries",t),r=Array.isArray(n)?n:[],o=Math.min(250,Math.max(1,Number(e.limit||r.length||1))),a=r.reduce((i,s)=>i+Number(s.count||0),0);return{provider:"mempool-lightning",countryCount:r.length,totalNodes:a,topCountrySharePct:r[0]?.share??null,countries:r.slice(0,o).map(i=>({name:i.name?.en??i.name??null,iso:i.iso??null,count:i.count??null,sharePct:i.share??null,capacitySats:i.capacity==null?null:String(i.capacity)}))}}_();var yE="https://mempool.space/api",gh=new Set(["24h","3d","1w","1m","3m","6m","1y","2y","3y","all"]);function Ki(e={}){return String(e.baseUrl||process.env.MEMPOOL_API_URL||yE).replace(/\/$/,"")}function yh(e,t){let n=String(e||t).trim().toLowerCase();if(!gh.has(n))throw new Error(`mempool-mining: window must be one of ${[...gh].join(", ")}`);return n}function Nn(e,t={}){return b(`${Ki(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function wh(e={}){try{let t=await Nn("/v1/difficulty-adjustment",e);return{ok:Number.isFinite(Number(t?.nextRetargetHeight))&&Number(t.nextRetargetHeight)>0,provider:"mempool-mining",baseUrl:Ki(e),nextRetargetHeight:t?.nextRetargetHeight??null,exec:!1}}catch(t){return{ok:!1,provider:"mempool-mining",baseUrl:Ki(e),error:String(t?.message||t),exec:!1}}}async function vh(e={},t={}){let n=await Nn("/v1/difficulty-adjustment",t);return{provider:"mempool-mining",progressPercent:n.progressPercent??null,difficultyChangePct:n.difficultyChange??null,estimatedRetargetDate:n.estimatedRetargetDate??null,remainingBlocks:n.remainingBlocks??null,remainingTimeMs:n.remainingTime??null,previousRetargetPct:n.previousRetarget??null,nextRetargetHeight:n.nextRetargetHeight??null,timeAvgMs:n.timeAvg??null,raw:n}}async function xh(e={},t={}){let n=yh(e.window||e.timeframe,"1w"),r=await Nn(`/v1/mining/pools/${n}`,t),o=Array.isArray(r?.pools)?r.pools:[],a=o.reduce((l,u)=>l+Number(u.blockCount||0),0),i=l=>a>0?Number(l.blockCount||0)/a*100:null,s=[...o].sort((l,u)=>Number(u.blockCount||0)-Number(l.blockCount||0)),c=Math.min(200,Math.max(1,Number(e.limit||s.length||1)));return{provider:"mempool-mining",window:n,totalBlocks:a,blockCount:r?.blockCount??null,lastEstimatedHashrate:r?.lastEstimatedHashrate??null,topPoolSharePct:s[0]?i(s[0]):null,top3SharePct:s.slice(0,3).reduce((l,u)=>l+(i(u)||0),0)||null,pools:s.slice(0,c).map(l=>({name:l.name??null,slug:l.slug??null,blockCount:l.blockCount??null,rank:l.rank??null,sharePct:i(l),emptyBlocks:l.emptyBlocks??null,avgMatchRate:l.avgMatchRate??null}))}}async function Sh(e={},t={}){let n=yh(e.window||e.timeframe,"3d"),r=await Nn(`/v1/mining/hashrate/${n}`,t),o=Array.isArray(r?.hashrates)?r.hashrates:[];return{provider:"mempool-mining",window:n,currentHashrate:r?.currentHashrate??null,currentHashrateEhs:r?.currentHashrate==null?null:Number(r.currentHashrate)/1e18,currentDifficulty:r?.currentDifficulty??null,points:o.length,hashrates:o,difficulty:Array.isArray(r?.difficulty)?r.difficulty:[]}}async function kh(e={},t={}){let n=Math.min(1e4,Math.max(1,Number(e.blockCount||e.blocks||144))),r=await Nn(`/v1/mining/reward-stats/${n}`,t),o=Number(r.totalReward||0),a=Number(r.totalFee||0);return{provider:"mempool-mining",blockCount:n,startBlock:r.startBlock??null,endBlock:r.endBlock??null,totalRewardSats:String(r.totalReward??""),totalFeeSats:String(r.totalFee??""),totalSubsidySats:String(o-a),feeSharePct:o>0?a/o*100:null,totalTx:r.totalTx??null,raw:r}}_();var vE="https://amm-v2.meteora.ag",Eh=new Set(["tvl","volume","fee_tvl_ratio","l_m"]),Ih=new Set(["dynamic","multitoken","lst","farms"]),xE=/^[1-9A-HJ-NP-Za-km-z]{32,44}$/;function SE(e={}){return String(e.baseUrl||process.env.METEORA_API_URL||vE).replace(/\/$/,"")}function ee(e){let t=Number(e);return Number.isFinite(t)?t:null}function kE(e={}){return{address:e.pool_address||null,name:e.pool_name||null,type:e.pool_type||null,version:e.pool_version??null,mints:e.pool_token_mints||[],tokenAmounts:e.pool_token_amounts||[],tokenUsdAmounts:e.pool_token_usd_amounts||[],lpMint:e.lp_mint||null,lpDecimals:e.lp_decimal??null,lpPriceUsd:ee(e.pool_lp_price_in_usd),tvlUsd:ee(e.pool_tvl),farmTvlUsd:ee(e.farm_tvl),volume24hUsd:ee(e.trading_volume),volume7dUsd:ee(e.weekly_trading_volume),fee24hUsd:ee(e.fee_volume),fee7dUsd:ee(e.weekly_fee_volume),tradeApyPct:ee(e.trade_apy),weeklyTradeApyPct:ee(e.weekly_trade_apy),baseApyPct:ee(e.daily_base_apy),farmingApyPct:ee(e.farming_apy),totalApyPct:(ee(e.trade_apy)??0)+(ee(e.farming_apy)??0),aprPct:ee(e.apr),feePct:ee(e.total_fee_pct),farmingPool:e.farming_pool||null,isLst:!!e.is_lst,isMeme:!!e.is_meme,permissioned:!!e.permissioned,unknownTokens:!!e.unknown,createdAt:e.created_at??null}}function EE(e={},t={}){let n=new URL(`${SE(t)}/pools/search`),r=Math.max(0,Number(e.page)||0),o=Math.max(1,Math.min(Number(e.size??e.limit)||20,100));if(n.searchParams.set("page",String(r)),n.searchParams.set("size",String(o)),e.sortKey!=null){let s=String(e.sortKey);if(!Eh.has(s))throw new Error(`meteora-dlmm: sortKey must be one of ${[...Eh].join(", ")}`);n.searchParams.set("sort_key",s),n.searchParams.set("order_by",e.orderBy==="asc"?"asc":"desc")}if(e.poolType!=null){let s=String(e.poolType);if(!Ih.has(s))throw new Error(`meteora-dlmm: poolType must be one of ${[...Ih].join(", ")}`);n.searchParams.set("pool_type",s)}let a=e.filter??e.query??e.search;a!=null&&String(a).trim()&&n.searchParams.set("filter",String(a).trim());let i=e.mints||e.includeTokenMints;if(i){let s=(Array.isArray(i)?i:[i]).map(c=>String(c).trim());for(let c of s)if(!xE.test(c))throw new Error(`meteora-dlmm: mint ${c} is not a base58 public key`);n.searchParams.set("include_token_mints",s.join(","))}return{url:n,page:r,size:o}}async function Yi(e={},t={}){let{url:n,page:r,size:o}=EE(e,t),a=await b(n.toString(),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4});return{pools:(Array.isArray(a?.data)?a.data:[]).map(kE),totalCount:a?.total_count??null,page:r,size:o}}async function Ah(e={}){try{let{pools:t,totalCount:n}=await Yi({size:3},e);return{ok:t.length>0,provider:"meteora-dlmm",poolsIndexed:n,sample:t.length,exec:!1}}catch(t){return{ok:!1,provider:"meteora-dlmm",error:String(t?.message||t),exec:!1}}}async function _h(e={},t={}){let n=await Yi({sortKey:e.sortKey||"tvl",orderBy:e.orderBy||"desc",...e},t),r=n.pools,o=Number(e.minTvlUsd);return Number.isFinite(o)&&(r=r.filter(a=>(a.tvlUsd??0)>=o)),e.excludeUnknown===!0&&(r=r.filter(a=>!a.unknownTokens)),{provider:"meteora-dlmm",chain:"solana-mainnet-beta",page:n.page,size:n.size,totalCount:n.totalCount,count:r.length,tvlUsd:r.reduce((a,i)=>a+(i.tvlUsd??0),0),pools:r}}async function Ch(e={},t={}){let n=e.filter??e.query??e.search,r=e.mints||e.includeTokenMints;if((n==null||!String(n).trim())&&!r)throw new Error("meteora-dlmm: poolSearch requires filter text or mints[]");let o=await Yi({sortKey:e.sortKey||"tvl",orderBy:"desc",...e},t);return{provider:"meteora-dlmm",chain:"solana-mainnet-beta",filter:n??null,mints:r?Array.isArray(r)?r:[r]:[],page:o.page,size:o.size,totalCount:o.totalCount,count:o.pools.length,pools:o.pools}}_();var AE="https://ordinals.com";function io(e={}){return String(e.baseUrl||e.ordinalsBase||process.env.ORDINALS_BASE_URL||AE).replace(/\/$/,"")}function _E(e,t="name"){let n=String(e||"").trim().toUpperCase().replace(/[•.\s_-]/g,"");if(!/^[A-Z]{1,28}$/.test(n))throw new Error(`ordinals-runes: ${t} must be 1-28 letters (spacers are stripped automatically)`);return n}async function Ph(e,t={}){let n=`${io(t)}${e.startsWith("/")?e:`/${e}`}`,o=await(t.fetchImpl||fetch)(n,{method:"GET",headers:{accept:"application/json,text/plain;q=0.9,*/*;q=0.8"},signal:AbortSignal.timeout(t.timeoutMs??12e3)}),a=await o.text();if(!o.ok)throw new Error(`ordinals-runes GET ${e}: HTTP ${o.status} ${a.slice(0,160)}`);return a.trim()}function Ji(e,t={}){return b(`${io(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:{Accept:"application/json"}})}async function Th(e={}){try{let t=await Ph("/r/blockheight",e),n=Number(t);return{ok:Number.isFinite(n)&&n>0,provider:"ordinals-runes",baseUrl:io(e),blockHeight:n,exec:!1}}catch(t){return{ok:!1,provider:"ordinals-runes",baseUrl:io(e),error:String(t?.message||t),exec:!1}}}async function Nh(e={},t={}){let n=await Ph("/r/blockheight",t),r=Number(n);if(!Number.isFinite(r))throw new Error(`ordinals-runes: unexpected blockheight response ${n.slice(0,60)}`);return{provider:"ordinals-runes",blockHeight:r}}async function Rh(e={},t={}){let n=e.height??e.block??e.hash;if(n==null||n==="")throw new Error("ordinals-runes: blockInfo requires height or hash");let r;if(/^[0-9a-f]{64}$/i.test(String(n)))r=String(n).toLowerCase();else{let a=Number(n);if(!Number.isInteger(a)||a<0)throw new Error("ordinals-runes: height must be a non-negative integer or a 64-hex block hash");r=String(a)}let o=await Ji(`/r/blockinfo/${r}`,t);return{provider:"ordinals-runes",height:o.height??null,hash:o.hash??null,timestamp:o.timestamp??null,difficulty:o.difficulty??null,transactionCount:o.transaction_count??null,averageFee:o.average_fee??null,averageFeeRate:o.average_fee_rate??null,feerangeSats:o.feerange??null,totalFee:o.total_fee??null,totalSize:o.total_size??null,confirmations:o.confirmations??null,raw:o}}async function Oh(e={},t={}){let n=e.sat??e.ordinal,r=Number(n);if(!Number.isInteger(r)||r<0||r>209999999769e4)throw new Error("ordinals-runes: sat must be an integer in [0, 2099999997690000]");let o=Math.max(0,Number(e.page||0)),a=o>0?`/r/sat/${r}/${o}`:`/r/sat/${r}`,i=await Ji(a,t),s=Array.isArray(i?.ids)?i.ids:[];return{provider:"ordinals-runes",sat:r,page:o,inscriptionCount:s.length,inscriptionIds:s,more:!!i?.more,raw:i}}async function Lh(e={},t={}){let n=_E(e.name||e.rune||e.runeName,"name"),r=await Ji(`/rune/${n}`,t),o=r?.entry||{},a=o.terms||{},i=a.cap==null?null:Number(a.cap),s=o.mints==null?null:Number(o.mints);return{provider:"ordinals-runes",name:n,spacedRune:o.spaced_rune??null,number:o.number??null,symbol:o.symbol??null,divisibility:o.divisibility??null,etchingBlock:o.block??null,etchingTxid:o.etching??null,premine:o.premine==null?null:String(o.premine),mints:s==null?null:String(s),burned:o.burned==null?null:String(o.burned),mintCap:i==null?null:String(i),mintProgressPct:i&&i>0&&s!=null?s/i*100:null,mintable:r?.mintable??null,amountPerMint:a.amount==null?null:String(a.amount),turbo:o.turbo??null,parent:r?.parent??null,raw:r}}_();var PE="https://hermes.pyth.network",Qi={"SOL/USD":"ef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d","BTC/USD":"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43","ETH/USD":"ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace","USDC/USD":"eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a","USDT/USD":"2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b","JUP/USD":"0a0408d619e9380abad35060f9192039ed5042fa6f82301d0e48bb52be830996","JTO/USD":"b43660a5f790c69354b0729a5ef9d50d68f1df92107540210b9cccba1f947cc2","BONK/USD":"72b021217ca3fe68922a19aaf990109cb9d84e9ad004b4d2025ad6f529314419","PYTH/USD":"0bbf28e9a841a1cc788f6a361b17ca072d0ea3098a1e5df1c3922d06719579ff","HYPE/USD":"4279e31cc369bbcc2faf022b382b080e32a8e689ff20fbc530d2a603eb6cd98b"},TE=/^[0-9a-fA-F]{64}$/;function Bh(e={}){return String(e.baseUrl||process.env.PYTH_HERMES_URL||PE).replace(/\/$/,"")}function Mh(e,t="feedId"){let n=String(e??"").trim();if(!n)throw new Error(`pyth-price-feeds: ${t} required`);let r=Qi[n.toUpperCase()]||Qi[`${n.toUpperCase()}/USD`];if(r)return r;let o=n.startsWith("0x")||n.startsWith("0X")?n.slice(2):n;if(!TE.test(o))throw new Error(`pyth-price-feeds: ${t} must be a 32-byte hex feed id or a known symbol`);return o.toLowerCase()}function Xi(e={}){let t=Number(e.price),n=Number(e.expo);return!Number.isFinite(t)||!Number.isFinite(n)?null:t*10**n}function Zi(e={}){let t=Xi({price:Number(e.price?.conf),expo:e.price?.expo}),n=Xi(e.price);return{id:e.id||null,price:n,confidence:t,confidenceBps:n&&t!=null?Math.round(t/Math.abs(n)*1e4):null,emaPrice:Xi(e.ema_price),publishTime:e.price?.publish_time??null,publishTimeIso:e.price?.publish_time?new Date(e.price.publish_time*1e3).toISOString():null,ageSeconds:e.price?.publish_time?Math.max(0,Math.round(Date.now()/1e3-e.price.publish_time)):null,expo:e.price?.expo??null,raw:{price:e.price??null,emaPrice:e.ema_price??null,metadata:e.metadata??null}}}async function es(e,t={}){let n=new URL(`${Bh(t)}/v2/updates/price/latest`);for(let r of e)n.searchParams.append("ids[]",r);return n.searchParams.set("encoding","hex"),n.searchParams.set("parsed","true"),n.searchParams.set("ignore_invalid_price_ids","true"),b(n.toString(),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function $h(e={}){try{let t=await es([Qi["SOL/USD"]],e),r=(Array.isArray(t?.parsed)?t.parsed.map(Zi):[])[0]||null;return{ok:!!(r&&Number.isFinite(r.price)&&r.price>0),provider:"pyth-price-feeds",solUsd:r?.price??null,ageSeconds:r?.ageSeconds??null,exec:!1}}catch(t){return{ok:!1,provider:"pyth-price-feeds",error:String(t?.message||t),exec:!1}}}async function Uh(e={},t={}){let n=Mh(e.feedId||e.id||e.symbol,"feedId"),r=await es([n],t),o=Array.isArray(r?.parsed)?r.parsed.map(Zi):[],a=o.find(i=>String(i.id).toLowerCase()===n)||o[0]||null;if(!a)throw new Error(`pyth-price-feeds: no price returned for feed ${n}`);return{provider:"pyth-price-feeds",chain:"solana-mainnet-beta",feedId:n,...a,binaryUpdate:r?.binary?.data?.[0]||null,binaryEncoding:r?.binary?.encoding||null}}async function Dh(e={},t={}){let n=Array.isArray(e)?e:e.feedIds||e.ids||e.symbols||[],r=[...new Set(n.map(l=>Mh(l,"feedIds[]")))];if(!r.length)throw new Error("pyth-price-feeds: feedIds[] required");let o=40,a=[];for(let l=0;l<r.length;l+=o)a.push(r.slice(l,l+o));let i=[];for(let l of a)i.push(await es(l,t));let s=i.flatMap(l=>Array.isArray(l?.parsed)?l.parsed.map(Zi):[]),c=Object.fromEntries(s.map(l=>[String(l.id).toLowerCase(),l]));return{provider:"pyth-price-feeds",chain:"solana-mainnet-beta",requested:r.length,returned:s.length,missing:r.filter(l=>!c[l]),prices:s,byId:c}}async function Fh(e={},t={}){let n=new URL(`${Bh(t)}/v2/price_feeds`);e.query&&n.searchParams.set("query",String(e.query)),n.searchParams.set("asset_type",String(e.assetType||"crypto"));let r=await b(n.toString(),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),o=Array.isArray(r)?r:[];return{provider:"pyth-price-feeds",count:o.length,feeds:o.map(a=>({id:a.id,symbol:a.attributes?.symbol||null,displaySymbol:a.attributes?.display_symbol||null,base:a.attributes?.base||null,quote:a.attributes?.quote_currency||null,assetType:a.attributes?.asset_type||null}))}}_();var RE="https://relayscan.io",qh=new Set(["1h","12h","24h","7d"]);function ts(e={}){return(e.baseUrl||process.env.RELAYSCAN_API_URL||RE).replace(/\/$/,"")}function Hh(e={}){let t=String(e.timespan||e.t||"24h").toLowerCase();if(!qh.has(t))throw new Error(`relayscan-mev: timespan must be one of ${[...qh].join(", ")}`);return t}function OE(e={}){let t=e.date||e.day;if(t==null)return new Date(Date.now()-864e5).toISOString().slice(0,10);let n=String(t).trim();if(!/^\d{4}-\d{2}-\d{2}$/.test(n))throw new Error("relayscan-mev: date must be YYYY-MM-DD");return n}async function ns(e={},t={}){return b(`${ts(t)}/overview/json?t=${Hh(e)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function Vh(e={},t={}){return b(`${ts(t)}/builder-profit/json?t=${Hh(e)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function Wh(e={},t={}){let n=OE(e);return b(`${ts(t)}/stats/day/${n}/json`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3})}async function zh(e={}){let t=await ns({timespan:"1h"},e);return{ok:Array.isArray(t?.relays)&&t.relays.length>0,provider:"relayscan-mev",relays:Array.isArray(t?.relays)?t.relays.length:0}}_();var BE="https://extra-api.sanctum.so",ME=30,$E=["jitoSOL","mSOL","bSOL","INF","hSOL","bonkSOL","jupSOL","dSOL"];function rs(e={}){return String(e.baseUrl||process.env.SANCTUM_API_URL||BE).replace(/\/$/,"")}function jh(e,t="lst"){let n=String(e??"").trim();if(!n||/[?&=\s]/.test(n))throw new Error(`sanctum-lst: ${t} must be an LST symbol or mint`);return n}function UE(e,t){let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}async function Ze(e,t,n={}){let r={},o={};for(let a of UE(t,ME)){let i=new URL(`${rs(n)}/v1/${e}`);for(let l of a)i.searchParams.append("lst",l);let s=await b(i.toString(),{fetchImpl:n.fetchImpl,timeoutMs:n.timeoutMs??2e4}),c=s?.apys||s?.tvls||s?.solValues||{};Object.assign(r,c),Object.assign(o,s?.errs||{})}return{values:r,errs:o}}async function Gh(e={}){try{let[t,n]=await Promise.all([b(`${rs(e)}/v1/lsts`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??15e3}),Ze("apy/inception",["jitoSOL"],e)]),r=Array.isArray(t?.lsts)?t.lsts:[];return{ok:r.length>0&&Number.isFinite(Number(n.values.jitoSOL)),provider:"sanctum-lst",lstCount:r.length,jitoSolApyInception:Number(n.values.jitoSOL)??null,exec:!1}}catch(t){return{ok:!1,provider:"sanctum-lst",error:String(t?.message||t),exec:!1}}}async function os(e={},t={}){let n=await b(`${rs(t)}/v1/lsts`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4}),r=(Array.isArray(n?.lsts)?n.lsts:[]).map(a=>({symbol:a.symbol||null,name:a.name||null,mint:a.mint||null,decimals:a.decimals??null,pool:a.pool?.pool||null,poolProgram:a.pool?.program||null,voteAccount:a.pool?.vote_account||null,logoUri:a.logo_uri||null}));if(e.symbol){let a=String(e.symbol).toLowerCase();r=r.filter(i=>String(i.symbol||"").toLowerCase()===a||i.mint===e.symbol)}let o=Number(e.limit);return Number.isFinite(o)&&o>0&&(r=r.slice(0,o)),{provider:"sanctum-lst",chain:"solana-mainnet-beta",count:r.length,lsts:r}}async function Kh(e={},t={}){let n=e.lsts||e.symbols||null;e.all===!0&&(n=(await os({},t)).lsts.map(c=>c.symbol).filter(Boolean)),(!Array.isArray(n)||!n.length)&&(n=$E);let r=[...new Set(n.map(s=>jh(s,"lsts[]")))],[o,a]=await Promise.all([Ze("apy/latest",r,t),Ze("apy/inception",r,t)]),i=r.map(s=>{let c=Number(o.values[s]),l=Number(a.values[s]);return{lst:s,apyLatest:Number.isFinite(c)?c:null,apyLatestPct:Number.isFinite(c)?c*100:null,apyInception:Number.isFinite(l)?l:null,apyInceptionPct:Number.isFinite(l)?l*100:null,error:o.errs[s]||a.errs[s]||null}});return i.sort((s,c)=>(c.apyInception??-1)-(s.apyInception??-1)),{provider:"sanctum-lst",chain:"solana-mainnet-beta",count:i.length,apys:i,byLst:Object.fromEntries(i.map(s=>[s.lst,s]))}}async function Yh(e={},t={}){let n=jh(e.lst||e.mint||e.symbol,"lst"),[r,o,a,i]=await Promise.all([Ze("apy/latest",[n],t),Ze("apy/inception",[n],t),Ze("tvl/current",[n],t).catch(()=>({values:{},errs:{}})),Ze("sol-value/current",[n],t).catch(()=>({values:{},errs:{}}))]),s=Number(r.values[n]),c=Number(o.values[n]),l=r.errs[n]||o.errs[n]||null;if(!Number.isFinite(s)&&!Number.isFinite(c))throw new Error(`sanctum-lst: no APY for ${n}${l?` (${JSON.stringify(l)})`:""}`);let u=i.values[n];return{provider:"sanctum-lst",chain:"solana-mainnet-beta",lst:n,apyLatest:Number.isFinite(s)?s:null,apyLatestPct:Number.isFinite(s)?s*100:null,apyInception:Number.isFinite(c)?c:null,apyInceptionPct:Number.isFinite(c)?c*100:null,tvlLamports:a.values[n]??null,tvlSol:a.values[n]!=null?Number(a.values[n])/1e9:null,solValueLamports:u??null,solPerToken:u!=null?Number(u)/1e9:null,error:l}}_();var FE="https://api.save.finance",qE="4UpD2fh7xH3VP9QQaXtsS1YY3bxzWhtfpks7FatyKvdY",Jh="CCpirWrgNuBVLdkP2haxLTbD6XqEgaYuVXixbbpxUB6",HE=/^[1-9A-HJ-NP-Za-km-z]{32,44}$/;function as(e={}){return String(e.baseUrl||process.env.SAVE_API_URL||process.env.SOLEND_API_URL||FE).replace(/\/$/,"")}function Xh(e,t="address"){let n=String(e??"").trim();if(!HE.test(n))throw new Error(`solend-lending: ${t} must be a base58 public key`);return n}function Qh(e){let t=Number(e);return Number.isFinite(t)?t:null}function VE(e={}){return{address:e.address||null,name:e.name||null,description:e.description||"",isPrimary:!!e.isPrimary,isPermissionless:!!e.isPermissionless,hidden:!!e.hidden,owner:e.owner||null,authorityAddress:e.authorityAddress||null,lookupTableAddress:e.lookupTableAddress||null,reserveCount:Array.isArray(e.reserves)?e.reserves.length:0,reserves:(e.reserves||[]).map(t=>({address:t.address||null,symbol:t.liquidityToken?.symbol||null,name:t.liquidityToken?.name||null,mint:t.liquidityToken?.mint||null,decimals:t.liquidityToken?.decimals??null,collateralMint:t.collateralMintAddress||null,pythOracle:t.pythOracle||null,switchboardOracle:t.switchboardOracle||null,volume24h:t.liquidityToken?.volume24h??null}))}}function WE(e={}){let t=e.reserve||{},n=t.liquidity||{},r=t.collateral||{};return{address:e.address||t.address||null,lendingMarket:t.lendingMarket||null,mint:n.mintPubkey||null,mintDecimals:n.mintDecimals??null,supplyApyPct:Qh(e.rates?.supplyInterest),borrowApyPct:Qh(e.rates?.borrowInterest),cTokenExchangeRate:e.cTokenExchangeRate??null,availableAmount:n.availableAmount??null,borrowedAmountWads:n.borrowedAmountWads??null,marketPrice:n.marketPrice??null,collateralMint:r.mintPubkey||null,collateralTotalSupply:r.mintTotalSupply??null,rewards:e.rewards||[],lastUpdateSlot:t.lastUpdate?.slot??null,stale:t.lastUpdate?.stale===1,raw:e}}async function Zh(e={}){try{let t=await b(`${as(e)}/v1/reserves?ids=${Jh}`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??15e3}),n=Array.isArray(t?.results)?t.results:[];return{ok:n.length>0,provider:"solend-lending",probeReserve:Jh,reserves:n.length,exec:!1}}catch(t){return{ok:!1,provider:"solend-lending",error:String(t?.message||t),exec:!1}}}async function is(e={},t={}){let n=new URL(`${as(t)}/v1/markets/configs`);e.scope&&n.searchParams.set("scope",String(e.scope)),e.deployment&&n.searchParams.set("deployment",String(e.deployment));let r=await b(n.toString(),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??(e.scope==="all"?45e3:2e4)}),o=(Array.isArray(r)?r:[]).map(VE);if(e.includeHidden!==!0&&(o=o.filter(i=>!i.hidden)),e.name){let i=String(e.name).toLowerCase();o=o.filter(s=>String(s.name||"").toLowerCase()===i)}let a=Number(e.limit);return Number.isFinite(a)&&a>0&&(o=o.slice(0,a)),{provider:"solend-lending",chain:"solana-mainnet-beta",scope:e.scope||"default",count:o.length,markets:o}}async function e0(e={},t={}){let n=[];if(e.ids||e.reserves)n=(Array.isArray(e.ids||e.reserves)?e.ids||e.reserves:String(e.ids||e.reserves).split(",")).map(s=>Xh(String(s).trim(),"reserve"));else{let i=Xh(e.market||e.marketAddress||qE,"market"),c=(await is({scope:"all",includeHidden:!0},t)).markets.find(l=>l.address===i);if(!c)throw new Error(`solend-lending: market ${i} not found`);n=c.reserves.map(l=>l.address).filter(Boolean)}if(!n.length)throw new Error("solend-lending: no reserves to query");let r=Number.isFinite(Number(e.limit))&&Number(e.limit)>0?Number(e.limit):50;n=n.slice(0,r);let o=await b(`${as(t)}/v1/reserves?ids=${n.join(",")}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3}),a=(Array.isArray(o?.results)?o.results:[]).map((i,s)=>({...WE(i),address:i.address||i.reserve?.address||n[s]||null}));return{provider:"solend-lending",chain:"solana-mainnet-beta",requested:n.length,count:a.length,reserves:a}}function ss(e,t){let n;try{n=BigInt(e)}catch{throw new Error(`${t} must be a positive integer amount`)}if(n<=0n)throw new Error(`${t} must be a positive integer amount`);return n}function et(e,t,n,r){let o=Number(e);if(!Number.isInteger(o)||o<n||o>r)throw new Error(`${t} must be an integer between ${n} and ${r}`);return o}function Rn(e={}){if(!Number.isInteger(Number(e.chainId))||Number(e.chainId)<=0)throw new Error("strategy requires chainId");if(!String(e.tokenIn||"").trim()||!String(e.tokenOut||"").trim())throw new Error("strategy requires tokenIn and tokenOut");if(!String(e.taker||"").trim())throw new Error("strategy requires taker");return{chainId:Number(e.chainId),tokenIn:String(e.tokenIn),tokenOut:String(e.tokenOut),taker:String(e.taker),total:ss(e.amount,"amount")}}function cs(e,t){let n=t.map(i=>BigInt(i)),r=n.reduce((i,s)=>i+s,0n);if(r<=0n)throw new Error("weights must total above zero");let o=n.map(i=>e*i/r),a=e-o.reduce((i,s)=>i+s,0n);for(let i=0;a>0n;i=(i+1)%o.length)o[i]+=1n,a-=1n;return o}function On(e,t,n,r={}){return{kind:"execution-strategy-plan",strategy:t,chainId:e.chainId,tokenIn:e.tokenIn,tokenOut:e.tokenOut,taker:e.taker,totalAmount:String(e.total),slices:n,executable:!1,signs:!1,broadcasts:!1,requiresFreshQuotePerSlice:!0,requiresPolicyCheckPerSlice:!0,requiresSimulationPerSlice:!0,requiresUserConfirmationPerSlice:!0,receiptRequiredPerSlice:!0,...r}}function ls(e,t,n=Date.now()){let r=Math.floor(t/e.length);return e.map((o,a)=>({index:a+1,amount:String(o),offsetSec:a*r,executeAfter:new Date(n+a*r*1e3).toISOString()}))}function jE(e={},t={}){let n=Rn(e),r=et(e.slices??10,"slices",2,100),o=et(e.durationSec??3600,"durationSec",r,604800),a=cs(n.total,Array(r).fill(1));return On(n,"TWAP",ls(a,o,t.nowMs),{durationSec:o})}function GE(e={},t={}){let n=Rn(e);if(!Array.isArray(e.volumeProfile)||e.volumeProfile.length<2||e.volumeProfile.length>100)throw new Error("volumeProfile must contain 2-100 positive weights");let r=e.volumeProfile.map(c=>{let l=Number(c);if(!Number.isFinite(l)||l<=0)throw new Error("volumeProfile must contain positive weights");return BigInt(Math.round(l*1e6))}),o=et(e.durationSec??3600,"durationSec",r.length,604800),a=cs(n.total,r),i=r.reduce((c,l)=>c+l,0n),s=ls(a,o,t.nowMs).map((c,l)=>({...c,volumeWeightBps:Number(r[l]*10000n/i)}));return On(n,"VWAP",s,{durationSec:o,requiresLiveVolumeValidation:!0})}function KE(e={}){let t=Rn(e),n=et(e.participationBps,"participationBps",1,1e4);if(!Array.isArray(e.observedMarketVolumes)||e.observedMarketVolumes.length===0||e.observedMarketVolumes.length>100)throw new Error("observedMarketVolumes must contain 1-100 positive integer amounts");let r=t.total,o=[];for(let[a,i]of e.observedMarketVolumes.entries()){let s=ss(i,"observedMarketVolumes"),c=s*BigInt(n)/10000n,l=c>r?r:c;if(l>0n&&o.push({index:a+1,amount:String(l),observedMarketVolume:String(s)}),r-=l,r===0n)break}return On(t,"POV",o,{participationBps:n,residualAmount:String(r),requiresLiveVolumeValidation:!0})}function YE(e={}){let t=Rn(e),n=ss(e.displayAmount,"displayAmount");if(n>t.total)throw new Error("displayAmount cannot exceed total amount");let r=[],o=t.total;for(;o>0n;){if(r.length>=100)throw new Error("iceberg requires more than 100 refills");let a=o>n?n:o;r.push({index:r.length+1,amount:String(a),displayAmount:String(n)}),o-=a}return On(t,"ICEBERG",r,{displayAmount:String(n),refillCount:r.length-1})}function JE(e={},t={}){let n=Rn(e),r=et(e.slices??10,"slices",2,100),o=et(e.durationSec??3600,"durationSec",r,604800),a=et(e.urgencyBps??5e3,"urgencyBps",1,1e4),i=Array.from({length:r},(c,l)=>{let u=Math.floor(a*l/Math.max(1,r-1));return BigInt(Math.max(1,1e4-u))}),s=cs(n.total,i);return On(n,"IS",ls(s,o,t.nowMs),{durationSec:o,urgencyBps:a})}function t0(e={},t={}){let n=String(e.strategy||"").trim().toUpperCase();if(n==="TWAP")return jE(e,t);if(n==="VWAP")return GE(e,t);if(n==="POV")return KE(e,t);if(n==="ICEBERG")return YE(e,t);if(n==="IS"||n==="IMPLEMENTATION SHORTFALL")return JE(e,t);throw new Error("strategy must be TWAP, VWAP, POV, ICEBERG, or IS")}function n0(){return{ok:!0,provider:"execution-strategies",strategies:["TWAP","VWAP","POV","ICEBERG","IS"],execution:"plan-only",externalProtocol:!1}}var QE={"hl-info":{health:e=>ec(e),allMids:e=>ve(e),l2Book:(e,t={})=>Wn(t.coin,e),outcomeMeta:e=>Xt(e),clearinghouse:(e,t={})=>zn(t.user,e),userFills:(e,t={})=>tc(t.user,e),meta:e=>nc(e),metaAndAssetCtxs:e=>st(e),candleSnapshot:(e,t={})=>jn(t,e),openOrders:(e,t={})=>rc(t.user,e),frontendOpenOrders:(e,t={})=>oc(t.user,e),userState:(e,t={})=>Gn(t.user,e),spotMeta:e=>Kn(e)},"hl-vaults":{health:e=>cc(e),summaries:(e,t={})=>Uo(t,e),details:(e,t={})=>Yn(t,e),userEquities:(e,t={})=>Do(t,e),tracker:(e,t={})=>Fo(t,e)},"poly-public":{health:e=>uc(e),time:e=>qo(e),markets:(e,t={})=>dc(t,e),book:(e,t={})=>pc(t.tokenId,e),midpoint:(e,t={})=>mc(t.tokenId,e),spread:(e,t={})=>fc(t.tokenId,e),price:(e,t={})=>hc(t.tokenId,{side:t.side},e),events:(e,t={})=>bc(t,e)},"evm-rpc":{health:(e,t={})=>rt(t.chainId??1,e),healthAll:(e,t={})=>wo({...e,chainIds:t.chainIds}),blockNumber:(e,t={})=>Vt(t.chainId??1,e),chainId:(e,t={})=>go(t.chainId??1,e),getBalance:(e,t={})=>Fe(t.chainId??1,t.address,e),call:(e,t={})=>O(t.chainId??1,t.method,t.params||[],e),erc20Allowance:(e,t={})=>yo(t,e),erc20Balance:(e,t={})=>Wt(t,e),transactionReceipt:(e,t={})=>zt(t,e)},portfolio:{health:e=>qp(e),balances:(e,t={})=>zr(t,e),snapshot:(e,t={})=>im(t,e),history:(e,t={})=>yi(t,e),valueGraph:(e,t={})=>sm(t,e)},"nft-portfolio":{health:e=>Kp(e),inventory:(e,t={})=>Tt(t,e),gallery:(e,t={})=>Qp(t,e),pnl:(e,t={})=>Xp(t,e),prepareList:(e,t={})=>Yp(t,e),traitSnipe:(e,t={})=>Jp(t,e)},"contract-risk":{health:e=>cm(e),scan:(e,t={})=>Xe(t,e)},"evm-token-sniper":{health:e=>dm(e),scan:(e,t={})=>um(t,e)},"evm-simulate":{health:e=>mm(e),simulate:(e,t={})=>An(t,e)},"nft-mint":{health:e=>hm(e),discover:(e,t={})=>Jr(t,e),prepare:(e,t={})=>xi(t,e),priceGas:(e,t={})=>Yr(t,e),createTrigger:(e,t={})=>bm(t,e),checkOpen:(e,t={})=>gm(t,e),evaluateMancerOs:(e,t={})=>vm(t,e)},"solana-rpc":{health:e=>yc(e),latestBlockhash:(e,t={})=>Vo(t,e),getBalance:(e,t={})=>Jn(t,e),tokenAccounts:(e,t={})=>en(t,e),simulate:(e,t={})=>wc(t,e)},"bitcoin-esplora":{health:e=>vc(e),tipHeight:e=>xc(e),fees:e=>Sc(e),address:(e,t={})=>Qn(t,e),utxos:(e,t={})=>kc(t,e),tx:(e,t={})=>Ec(t,e),decode:(e,t={})=>Ic(t,e)},"bitcoin-meta":{health:e=>Pc(e),runeBalances:(e,t={})=>er(t,e),inscriptions:(e,t={})=>ut(t,e),inscriptionInfo:(e,t={})=>Tc(t,e),inscriptionChildren:(e,t={})=>Nc(t,e),ordBlockInfo:(e,t={})=>Rc(t,e)},satflow:{health:e=>Lc(e),collectionFloors:(e,t={})=>Bc(t,e),collectionStats:(e,t={})=>Mc(t,e),item:(e,t={})=>$c(t,e),walletContents:(e,t={})=>nr(t,e),floorListings:(e,t={})=>Uc(t,e),preparePurchase:(e,t={})=>Fc(t,e),prepareList:(e,t={})=>rr(t,e)},jupiter:{health:e=>Kc(e),venues:(e,t={})=>Gc(t,e),quote:(e,t={})=>ir(t,e),prepare:(e,t={})=>Yc(t,e)},defillama:{health:e=>Xc(e),prices:(e,t={})=>Ve(t.coins||[],e),pricesBySymbol:(e,t={})=>nl(t.symbols,e),protocols:e=>Qc(e),yields:(e,t={})=>Zc(t,e),stablecoins:(e,t={})=>el(t,e),dexVolumes:(e,t={})=>tl(t,e)},lifi:{health:e=>ll(e),quote:(e,t={})=>tn(t,e),prepare:(e,t={})=>ul(t,e),chains:e=>dl(e)},dexscreener:{health:e=>ws(e),token:(e,t={})=>qe(t.address||t.tokenAddress,e),search:(e,t={})=>jt(t.q||t.query,e),pair:(e,t={})=>vs(t.chainId,t.pairAddress,e)},"uniswap-v3":{health:(e,t={})=>Ls({...e,chainId:t.chainId??8453}),quote:(e,t={})=>ot(t,e),prepare:(e,t={})=>Os(t,e),quotePath:(e,t={})=>Rs(t,e),ethUsdc:(e,t={})=>Ao(t,e),chains:()=>Bs()},"uniswap-v4":{health:(e,t={})=>Hs({...e,chainId:t.chainId??8453}),quote:(e,t={})=>Fs(t,e),chains:()=>qs()},aerodrome:{health:(e,t={})=>wl({...e,chainId:t.chainId??8453}),quote:(e,t={})=>lr(t,e),prepare:(e,t={})=>yl(t,e),chains:()=>vl()},zerox:{health:e=>El(e),price:(e,t={})=>oa(t,e),quote:(e,t={})=>rn(t,e),prepare:(e,t={})=>Il(t,e)},across:{health:e=>Al(e),suggestedFees:(e,t={})=>aa(t,e)},hop:{health:e=>_l(e),quote:(e,t={})=>ia(t,e)},relay:{health:e=>Cl(e),quote:(e,t={})=>dr(t,e),prepare:(e,t={})=>Pl(t,e)},cowswap:{health:e=>Ll(e),quote:(e,t={})=>dt(t,e),prepareOrder:(e,t={})=>Bl(t,e),order:(e,t={})=>$l(t,e),status:(e,t={})=>Ml(t,e),chains:()=>Ul()},oneinch:{health:e=>Fl(e),quote:(e,t={})=>ma(t,e),prepare:(e,t={})=>ql(t,e),approveSpender:(e,t={})=>fa(t,e)},"hl-ws":{health:e=>Hl(e),allMids:e=>Vl(e),l2Book:(e,t={})=>Wl(t.coin,e),snapshot:(e,t={})=>sn(t.subscription||t,e)},"poly-ws":{health:(e,t={})=>zl({...e,assetId:t.assetId}),book:(e,t={})=>jl(t.assetId||t.tokenId,e),snapshot:(e,t={})=>mr(t.assetIds||t.assets_ids||[t.assetId],e)},"opensea-nft":{health:e=>ou(e),collection:(e,t={})=>cn(t.slug,e),floor:(e,t={})=>au(t.slug,e),bestListings:(e,t={})=>gr(t,e),accountNfts:(e,t={})=>ln(t,e),accountPnl:(e,t={})=>hr(t,e),prepareBuy:(e,t={})=>fu(t,e),prepareSweep:(e,t={})=>hu(t,e),prepareMint:(e,t={})=>bu(t,e),prepareList:(e,t={})=>yr(t,e),prepareCancel:(e,t={})=>gu(t,e)},"hl-outcome":{list:e=>Zu(e),prepareOrder:(e,t={})=>ed(t,e),prepareCancel:(e,t={})=>td(t,e)},"protocol-templates":{health:()=>({ok:!0,templates:Rr().map(e=>e.id),nativeTemplates:za().map(e=>e.id),families:["evm","solana","bitcoin"],firmAudit:!1}),list:()=>Rr(),listNative:()=>za(),gate:(e,t={})=>Fa(t.templateId||t.id,e),prepareDeploy:(e,t={})=>xd(t,e),buildNative:(e,t={})=>Pd(t)},"poly-clob":{prepareOrder:(e,t={})=>sd(t||{})},"hl-perps":{health:e=>Ta(e),assetInfo:(e,t={})=>je(t,e),prepareOrder:(e,t={})=>hn(t,e),prepareCancel:(e,t={})=>Ar(t,e),prepareLeverage:(e,t={})=>Ju(t,e),prepareIsolatedMargin:(e,t={})=>Xu(t,e),prepareBracket:(e,t={})=>Qu(t,e),prepareBuilderApproval:(e,t={})=>Yu(t,e)},"hl-markets":{health:e=>Ta(e),markets:(e,t={})=>xr(t,e),leaderboards:(e,t={})=>$u(t,e),coin:(e,t={})=>Uu(t,e),spot:(e,t={})=>Du(t,e)},"magiceden-sol":{health:e=>ku(e),stats:(e,t={})=>Sa(t,e),listings:(e,t={})=>Iu(t,e),tokenListings:(e,t={})=>Au(t,e),prepareBuy:(e,t={})=>_u(t,e),prepareList:(e,t={})=>wr(t,e),prepareMint:(e,t={})=>Cu(t,e)},"hl-staking":{health:e=>Tu(e),validators:e=>Ia(e),delegatorSummary:(e,t={})=>Aa(t,e),delegations:(e,t={})=>_a(t,e),rewards:(e,t={})=>Nu(t,e),history:(e,t={})=>Ru(t,e),preflight:(e,t={})=>Mu(t,e),prepareStakeDeposit:(e,t={})=>Ou(t,e),prepareStakeWithdraw:(e,t={})=>Lu(t,e),prepareDelegate:(e,t={})=>Bu(t,e)},"hyperevm-dex":{health:e=>wu(e),search:(e,t={})=>vu(t.q||t.query||"HYPE",e),token:(e,t={})=>xu(t.address||t.tokenAddress,e)},geckoterminal:{health:e=>Od(e),networks:(e,t={})=>ja(t,e),pool:(e,t={})=>Td(t,e),token:(e,t={})=>Nd(t,e),ohlcv:(e,t={})=>Rd(t,e)},curve:{health:e=>jd(e),openapi:e=>zd(e),pools:(e,t={})=>Ka(t,e),quote:(e,t={})=>Ya(t,e),prepare:(e,t={})=>Gd(t,e)},gmx:{health:e=>op(e),tickers:(e,t={})=>Ur(t,e),markets:(e,t={})=>np(t,e),marketsInfo:(e,t={})=>Xa(t,e),tokens:(e,t={})=>rp(t,e),prepareOrder:(e,t={})=>cp(t,e),positions:(e,t={})=>ap(t,e),orderStatus:(e,t={})=>ip(t,e),verifyOrder:(e,t={})=>sp(t,e)},morpho:{health:e=>pp(e),markets:(e,t={})=>dp(t,e),vaults:(e,t={})=>ei(t,e),prepareVault:(e,t={})=>mp(t,e)},balancer:{health:e=>xp(e),pools:(e,t={})=>vp(t,e),quote:(e,t={})=>ri(t,e),prepare:(e,t={})=>Sp(t,e)},pendle:{health:e=>Ep(e),markets:(e,t={})=>ai(t,e),quote:(e,t={})=>Ip(t,e),prepare:(e,t={})=>ii(t,e)},odos:{health:e=>Pp(e),chains:e=>ci(e),quote:(e,t={})=>_p(t,e),prepare:(e,t={})=>Cp(t,e)},blockscout:{health:e=>$p(e),stats:(e,t={})=>di(t,e),address:(e,t={})=>Op(t,e),token:(e,t={})=>Lp(t,e)},paraswap:{health:e=>Sm(e),tokens:(e,t={})=>Ei(t,e),price:(e,t={})=>Bt(t,e),quote:(e,t={})=>Bt(t,e),prepare:(e,t={})=>xm(t,e)},rfq:{health:e=>Mm(e),intent:(e,t={})=>Lm(t,e),quote:(e,t={})=>Bm(t,e)},"polygon-staking":{health:e=>df(e),validators:(e,t={})=>lf(t,e),validatorDetail:(e,t={})=>uf(t,e)},"aave-v3":{health:e=>hf(e),markets:(e,t={})=>pf(t,e),marketReserves:(e,t={})=>mf(t,e),chains:e=>ff(e)},"babylon-staking":{health:e=>gf(e),stats:e=>yf(e),finalityProviders:e=>wf(e),delegations:(e,t={})=>vf(t,e)},"bisq-markets":{health:e=>Sf(e),markets:e=>kf(e),ticker:(e,t={})=>Ef(t,e),trades:(e,t={})=>If(t,e)},"bob-rootstock":{health:(e,t={})=>_f(t.chainId,e),stats:(e,t={})=>Di(t,e),addressInfo:(e,t={})=>Cf(t,e),tokenBalances:(e,t={})=>Pf(t,e)},"braiins-insights":{health:e=>Tf(e),priceStats:e=>Nf(e),poolStats:e=>Rf(e)},"cow-protocol":{health:e=>Ff(e),auction:e=>$f(e),openOrders:(e,t={})=>Uf(t,e),recentTrades:(e,t={})=>Df(t,e)},"hiro-stacks":{health:e=>qf(e),networkInfo:e=>Hf(e),stackingInfo:e=>Vf(e),poxCycles:e=>Wf(e),blocks:(e,t={})=>zf(t,e)},"jito-mev":{health:e=>Kf(e),recentBundles:(e,t={})=>Yf(t,e),tipFloor:e=>Jf(e)},"kamino-strategies":{health:e=>Qf(e),strategies:(e,t={})=>Zf(t,e),strategyMetrics:(e,t={})=>eh(t,e)},"liquid-esplora":{health:e=>oh(e),tipHeight:e=>ah(e),addressInfo:(e,t={})=>ih(t,e),assetInfo:(e,t={})=>sh(t,e)},"magiceden-ordinals":{health:e=>uh(e),collectionStat:(e,t={})=>dh(t,e)},"mempool-lightning":{health:e=>mh(e),statistics:e=>fh(e),nodeRankings:(e,t={})=>hh(t,e),nodeCountries:e=>bh(e)},"mempool-mining":{health:e=>wh(e),difficulty:e=>vh(e),poolShare:(e,t={})=>xh(t,e),hashrate:(e,t={})=>Sh(t,e),rewardStats:(e,t={})=>kh(t,e)},"meteora-dlmm":{health:e=>Ah(e),pools:(e,t={})=>_h(t,e),poolSearch:(e,t={})=>Ch(t,e)},"ordinals-runes":{health:e=>Th(e),blockHeight:e=>Nh(e),blockInfo:(e,t={})=>Rh(t,e),satInfo:(e,t={})=>Oh(t,e),runeInfo:(e,t={})=>Lh(t,e)},"pyth-price-feeds":{health:e=>$h(e),latestPrice:(e,t={})=>Uh(t,e),latestPrices:(e,t={})=>Dh(t,e),feedDirectory:e=>Fh(e)},"relayscan-mev":{health:e=>zh(e),overview:(e,t={})=>ns(t,e),builderProfit:(e,t={})=>Vh(t,e),dailyStats:(e,t={})=>Wh(t,e)},"sanctum-lst":{health:e=>Gh(e),lstList:e=>os(e),apyAll:e=>Kh(e),apyIndividual:(e,t={})=>Yh(t,e)},"solend-lending":{health:e=>Zh(e),markets:e=>is(e),reserves:(e,t={})=>e0(t,e)},"execution-strategies":{health:()=>n0(),plan:(e,t={})=>t0(t)},"across-bridge":{health:e=>$m(e),pools:(e,t={})=>Um(t,e),suggestedFees:(e,t={})=>Dm(t,e)},"beefy-yields":{health:e=>Fm(e),apy:(e,t={})=>qm(t,e),apyBreakdown:e=>Hm(e)},"birdeye-tokens":{health:e=>Wm(e),tokenList:(e,t={})=>zm(t,e)},"celestia-da":{health:e=>jm(e),stats:e=>Gm(e),blockStats:(e,t={})=>Km(t,e)},"das-assets":{health:e=>Ym(e),assetsByOwner:(e,t={})=>Jm(t,e),searchAssets:(e,t={})=>Xm(t,e),assetProof:(e,t={})=>Qm(t,e)},"l2beat-tvl":{health:e=>Zm(e),tvl:(e,t={})=>ef(t,e),activity:(e,t={})=>tf(t,e)},"spark-lend":{health:e=>nf(e),markets:(e,t={})=>rf(t,e)},"symbiotic-restaking":{health:e=>of(e),vaults:(e,t={})=>af(t,e),vaultDetail:(e,t={})=>sf(t,e)}},r0=new Set(["prepareBuilderApproval","prepareBracket","prepareIsolatedMargin","prepareLeverage","prepareCancel","prepareOrder","preparePurchase","prepareList","prepareSell","prepareBuy","prepareMint","prepare","prepareStakeDeposit","prepareStakeWithdraw","prepareDelegate","prepareSwap","prepareTransfer","createOrder","cancelOrder"]),o0=new Set(["hl-exec"]);function ZE(e){return o0.has(String(e||""))}function eI(e,t,n={}){let r=String(t||""),o=`${e}.${r}`;if(o0.has(e))throw new Error(`data plane forbidden execution provider: ${e}`);let a=Vn().find(i=>i.id===e);if(/sign|execute|broadcast|submit|send|write|place/i.test(r)&&!r0.has(r))throw new Error(`data plane forbidden op: ${o}`);if(a&&Array.isArray(a.ops)&&a.ops.length>0&&!a.ops.includes(r))throw new Error(`data plane: provider ${e} does not support op ${r}`);if(r0.has(r)&&n&&typeof n=="object"&&Object.defineProperty(n,"__oracleStateCreating",{value:!0,enumerable:!1,configurable:!0}),e==="evm-rpc"&&r==="call"){let i=String(n?.method||"").trim();if(!new Set(["eth_call","eth_getBalance","eth_blockNumber","eth_chainId","eth_getCode","eth_getLogs","eth_getTransactionByHash","eth_getTransactionReceipt","eth_getBlockByNumber","eth_getBlockByHash","eth_feeHistory","eth_gasPrice","eth_maxPriorityFeePerGas","net_version","web3_clientVersion"]).has(i))throw new Error(`data plane allows only read-only JSON-RPC methods through evm-rpc.call: ${i||"<missing>"}`)}}async function x(e,t,n={},r={}){if(ZE(e))throw new Error(`${e} is an execution provider: it signs and submits with a real key. dataCall() is the public read plane and will not route to it.`);eI(e,t,n);let o=Bo(e);if(!o)throw new Error(`Unknown data provider: ${e}`);if(!o.ops.includes(t))throw new Error(`Provider ${e} does not support op '${t}' (has: ${o.ops.join(", ")})`);let a=QE[e];if(!a||typeof a[t]!="function")throw new Error(`No client implementation for ${e}.${t}`);return a[t](r,n)}async function tI({providers:e,fetchImpl:t,timeoutMs:n,includeRpc:r,includeWs:o,concurrency:a,healthCall:i}={}){let s=e||Vn().map(d=>d.id);!o&&!e&&(s=s.filter(d=>d!=="hl-ws"&&d!=="poly-ws"));let c={fetchImpl:t,timeoutMs:n??8e3},l=typeof i=="function"?i:(d,p,m)=>x(d,"health",p,m),u={};return await nt(s,a??8,async d=>{if(!Bo(d)){u[d]={ok:!1,ms:0,reason:"transport",error:"unknown provider"};return}let p=d==="evm-rpc"?{chainId:1}:{},m=await X(()=>l(d,p,c));if(!m.ok){u[d]={ok:!1,ms:m.ms,reason:"transport",error:m.error};return}let f=m.data;if(f&&typeof f=="object"&&f.ok===!1){u[d]={ok:!1,ms:m.ms,reason:"provider",error:f.error||f.message||"provider reported unhealthy",detail:f};return}u[d]={ok:!0,ms:m.ms,detail:f}}),{when:new Date().toISOString(),plane:"data",exec:!1,providers:u}}function nI(){return Vn().map(e=>({id:e.id,venue:e.venue,chainIds:e.chainIds,auth:e.auth,ops:e.ops,execution:e.execution||"read-only",description:e.description}))}var DP={catalog:nI,health:tI,call:x,hl:{health:e=>x("hl-info","health",{},e),allMids:e=>x("hl-info","allMids",{},e),l2Book:(e,t)=>x("hl-info","l2Book",{coin:e},t),outcomeMeta:e=>x("hl-info","outcomeMeta",{},e),clearinghouse:(e,t)=>x("hl-info","clearinghouse",{user:e},t),userFills:(e,t)=>x("hl-info","userFills",{user:e},t),meta:e=>x("hl-info","meta",{},e),metaAndAssetCtxs:e=>x("hl-info","metaAndAssetCtxs",{},e),candleSnapshot:(e,t)=>x("hl-info","candleSnapshot",e||{},t),openOrders:(e,t)=>x("hl-info","openOrders",{user:e},t),userState:(e,t)=>x("hl-info","userState",{user:e},t),spotMeta:e=>x("hl-info","spotMeta",{},e),vaults:{health:e=>x("hl-vaults","health",{},e),summaries:(e,t)=>x("hl-vaults","summaries",e||{},t),details:(e,t)=>x("hl-vaults","details",e||{},t),mine:(e,t)=>x("hl-vaults","userEquities",{user:e},t),track:(e,t)=>x("hl-vaults","tracker",e||{},t)},staking:{health:e=>x("hl-staking","health",{},e),validators:e=>x("hl-staking","validators",{},e),summary:(e,t)=>x("hl-staking","delegatorSummary",{user:e},t),delegations:(e,t)=>x("hl-staking","delegations",{user:e},t),rewards:(e,t)=>x("hl-staking","rewards",{user:e},t),history:(e,t)=>x("hl-staking","history",{user:e},t),preflight:(e,t)=>x("hl-staking","preflight",{user:e},t),prepareStake:(e,t)=>x("hl-staking","prepareStakeDeposit",e||{},t),prepareUnstake:(e,t)=>x("hl-staking","prepareStakeWithdraw",e||{},t),prepareDelegate:(e,t)=>x("hl-staking","prepareDelegate",e||{},t)}},poly:{health:e=>x("poly-public","health",{},e),time:e=>x("poly-public","time",{},e),markets:(e,t)=>x("poly-public","markets",e||{},t),book:(e,t)=>x("poly-public","book",{tokenId:e},t),midpoint:(e,t)=>x("poly-public","midpoint",{tokenId:e},t),spread:(e,t)=>x("poly-public","spread",{tokenId:e},t),price:(e,t,n)=>x("poly-public","price",{tokenId:e,side:t},n),events:(e,t)=>x("poly-public","events",e||{},t)},polyClob:{prepareOrder:(e,t)=>x("poly-clob","prepareOrder",e||{},t)},rpc:{health:(e,t)=>x("evm-rpc","health",{chainId:e},t),healthAll:(e,t)=>x("evm-rpc","healthAll",e||{},t),blockNumber:(e,t)=>x("evm-rpc","blockNumber",{chainId:e},t),getBalance:(e,t,n)=>x("evm-rpc","getBalance",{chainId:e,address:t},n),call:(e,t,n,r)=>x("evm-rpc","call",{chainId:e,method:t,params:n},r)},evmSniper:{health:e=>x("evm-token-sniper","health",{},e),scan:(e,t)=>x("evm-token-sniper","scan",e||{},t)},portfolio:{balance:(e,t)=>x("portfolio","balances",e||{},t),snapshot:(e,t)=>x("portfolio","snapshot",e||{},t),history:(e,t)=>x("portfolio","history",e||{},t),valueGraph:(e,t)=>x("portfolio","valueGraph",e||{},t)},nft:{inventory:(e,t)=>x("nft-portfolio","inventory",e||{},t),gallery:(e,t)=>x("nft-portfolio","gallery",e||{},t),pnl:(e,t)=>x("nft-portfolio","pnl",e||{},t),prepareList:(e,t)=>x("nft-portfolio","prepareList",e||{},t),traitSnipe:(e,t)=>x("nft-portfolio","traitSnipe",e||{},t),floor:(e,t)=>x("opensea-nft","floor",{slug:e},t),collection:(e,t)=>x("opensea-nft","collection",{slug:e},t),bestListings:(e,t)=>x("opensea-nft","bestListings",e||{},t),prepareBuy:(e,t)=>x("opensea-nft","prepareBuy",e||{},t),prepareSweep:(e,t)=>x("opensea-nft","prepareSweep",e||{},t),prepareMint:(e,t)=>x("opensea-nft","prepareMint",e||{},t),prepareCancel:(e,t)=>x("opensea-nft","prepareCancel",e||{},t)},solana:{health:e=>x("solana-rpc","health",{},e),latestBlockhash:(e,t)=>x("solana-rpc","latestBlockhash",e||{},t),balance:(e,t)=>x("solana-rpc","getBalance",{address:e},t),tokenAccounts:(e,t)=>x("solana-rpc","tokenAccounts",e||{},t),simulate:(e,t)=>x("solana-rpc","simulate",e||{},t),jupiterQuote:(e,t)=>x("jupiter","quote",e||{},t),jupiterPrepare:(e,t)=>x("jupiter","prepare",e||{},t),nftStats:(e,t)=>x("magiceden-sol","stats",e||{},t),nftListings:(e,t)=>x("magiceden-sol","listings",e||{},t),nftTokenListings:(e,t)=>x("magiceden-sol","tokenListings",e||{},t),nftPrepareBuy:(e,t)=>x("magiceden-sol","prepareBuy",e||{},t),nftPrepareList:(e,t)=>x("magiceden-sol","prepareList",e||{},t),nftPrepareMint:(e,t)=>x("magiceden-sol","prepareMint",e||{},t)},bitcoin:{health:e=>x("bitcoin-esplora","health",{},e),tipHeight:e=>x("bitcoin-esplora","tipHeight",{},e),fees:e=>x("bitcoin-esplora","fees",{},e),address:(e,t)=>x("bitcoin-esplora","address",{address:e},t),utxos:(e,t)=>x("bitcoin-esplora","utxos",{address:e},t),tx:(e,t)=>x("bitcoin-esplora","tx",{txid:e},t),decode:(e,t)=>x("bitcoin-esplora","decode",e||{},t),metaHealth:e=>x("bitcoin-meta","health",{},e),runeBalances:(e,t)=>x("bitcoin-meta","runeBalances",{address:e},t),inscriptions:(e,t)=>x("bitcoin-meta","inscriptions",{address:e},t),satflowHealth:e=>x("satflow","health",{},e),satflowFloors:(e,t)=>x("satflow","collectionFloors",e||{},t),satflowWallet:(e,t)=>x("satflow","walletContents",{address:e},t)},prices:{health:e=>x("defillama","health",{},e),current:(e,t)=>x("defillama","prices",{coins:e},t),bySymbol:(e,t)=>x("defillama","pricesBySymbol",{symbols:e},t),protocols:e=>x("defillama","protocols",{},e)},lifi:{health:e=>x("lifi","health",{},e),quote:(e,t)=>x("lifi","quote",e||{},t),chains:e=>x("lifi","chains",{},e)},dex:{health:e=>x("dexscreener","health",{},e),token:(e,t)=>x("dexscreener","token",{address:e},t),search:(e,t)=>x("dexscreener","search",{q:e},t),pair:(e,t,n)=>x("dexscreener","pair",{chainId:e,pairAddress:t},n)},uni:{health:(e,t)=>x("uniswap-v3","health",e||{},t),quote:(e,t)=>x("uniswap-v3","quote",e||{},t),quotePath:(e,t)=>x("uniswap-v3","quotePath",e||{},t),ethUsdc:(e,t)=>x("uniswap-v3","ethUsdc",e||{},t),chains:e=>x("uniswap-v3","chains",{},e)},univ4:{health:(e,t)=>x("uniswap-v4","health",e||{},t),quote:(e,t)=>x("uniswap-v4","quote",e||{},t),chains:e=>x("uniswap-v4","chains",{},e)},bridges:{across:(e,t)=>x("across","suggestedFees",e||{},t),hop:(e,t)=>x("hop","quote",e||{},t),relay:(e,t)=>x("relay","quote",e||{},t)},cow:{quote:(e,t)=>x("cowswap","quote",e||{},t)},hlWs:{allMids:e=>x("hl-ws","allMids",{},e),l2Book:(e,t)=>x("hl-ws","l2Book",{coin:e},t)},polyWs:{book:(e,t)=>x("poly-ws","book",{assetId:e},t)}};export{o0 as EXECUTION_PROVIDERS,eI as assertDataOpAllowed,DP as data,x as dataCall,nI as dataCatalog,tI as dataHealth,ZE as isExecutionProvider};
|
|
232
|
+
}`;function _6(e={}){let t=e.chainIds??(e.chainId!=null?[e.chainId]:null),r=(Array.isArray(t)?t:[t??1]).map(Number).filter(n=>Number.isInteger(n)&&n>0);if(!r.length)throw new Error("aave-v3: chainIds must contain at least one chain id");return[...new Set(r)]}async function zR(e={},t={}){let r={chainIds:_6(e)};return e.user&&(r.user=String(e.user)),{markets:(await Ml(L6,{request:r},t))?.data?.markets??[]}}async function KR(e={},t={}){let r=String(e.address||e.market||e.marketAddress||"").trim();if(!/^0x[0-9a-fA-F]{40}$/.test(r))throw new Error("aave-v3: marketReserves requires an EVM market (pool) address");let n=Number(e.chainId??1);if(!Number.isInteger(n)||n<=0)throw new Error("aave-v3: chainId must be a positive integer");let o={address:r,chainId:n};e.user&&(o.user=String(e.user));let s=(await Ml(T6,{request:o},t))?.data?.market??null;if(!s)throw new Error(`aave-v3: no market at ${r} on chain ${n}`);return{market:s}}async function jR(e={},t={}){let r=new Set(["MAINNET_ONLY","TESTNET_ONLY","ALL"]),n=String(e.filter||"MAINNET_ONLY").toUpperCase();if(!r.has(n))throw new Error(`aave-v3: filter must be one of ${[...r].join(", ")}`);return{chains:(await Ml(P6,{filter:n},t))?.data?.chains??[]}}async function ZR(e={}){return{ok:(await Ml("query { health }",{},e))?.data?.health===!0,provider:"aave-v3"}}M();var H6="https://staking-api.babylonlabs.io";function Yf(e={}){return String(e.baseUrl||process.env.BABYLON_STAKING_API_URL||H6).replace(/\/$/,"")}function Ul(e,t={}){return C(`${Yf(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:{Accept:"application/json"}})}function XR(e,t="pkHex"){let r=String(e||"").trim().toLowerCase().replace(/^0x/,"");if(!/^[0-9a-f]+$/.test(r))throw new Error(`babylon-staking: ${t} must be hex`);if(r.length===66&&(r.startsWith("02")||r.startsWith("03")))return r.slice(2);if(r.length!==64)throw new Error(`babylon-staking: ${t} must be a 64-char x-only (or 66-char compressed) BTC public key`);return r}async function eN(e={}){try{let r=(await Ul("/v2/stats",e))?.data||{},n=Number(r.active_tvl??0);return{ok:Number.isFinite(n)&&n>0,provider:"babylon-staking",baseUrl:Yf(e),activeTvlSats:String(r.active_tvl??""),activeFinalityProviders:r.active_finality_providers??null,exec:!1}}catch(t){return{ok:!1,provider:"babylon-staking",baseUrl:Yf(e),error:String(t?.message||t),exec:!1}}}async function tN(e={},t={}){let n=(await Ul("/v2/stats",t))?.data||{};return{provider:"babylon-staking",activeTvlSats:String(n.active_tvl??""),totalActiveTvlSats:String(n.total_active_tvl??""),activeDelegations:n.active_delegations??null,totalActiveDelegations:n.total_active_delegations??null,activeFinalityProviders:n.active_finality_providers??null,totalFinalityProviders:n.total_finality_providers??null,btcStakingApr:n.btc_staking_apr??null,btcStakingAprPct:n.btc_staking_apr==null?null:Number(n.btc_staking_apr)*100,maxStakingApr:n.max_staking_apr??null,maxStakingAprPct:n.max_staking_apr==null?null:Number(n.max_staking_apr)*100,raw:n}}async function rN(e={},t={}){let r=await Ul("/v2/finality-providers",t),n=Array.isArray(r?.data)?r.data:[];if(e.state){let i=String(e.state).trim().toUpperCase();n=n.filter(s=>String(s.state||"").toUpperCase().includes(i))}if(e.btcPk){let i=XR(e.btcPk,"btcPk");n=n.filter(s=>String(s.btc_pk||"").toLowerCase()===i)}let o=Math.min(500,Math.max(1,Number(e.limit||n.length||1)));return{provider:"babylon-staking",count:n.length,finalityProviders:n.slice(0,o).map(i=>({btcPk:i.btc_pk??null,moniker:i.description?.moniker??null,website:i.description?.website??null,state:i.state??null,commission:i.commission??null,activeTvlSats:i.active_tvl==null?null:String(i.active_tvl),activeDelegations:i.active_delegations??null}))}}async function nN(e={},t={}){let r=XR(e.stakerPkHex||e.stakerPk||e.pkHex||e.pk,"stakerPkHex"),n=new URLSearchParams({staker_pk_hex:r});e.paginationKey&&n.set("pagination_key",String(e.paginationKey));let o=await Ul(`/v2/delegations?${n}`,t),i=Array.isArray(o?.data)?o.data:[],s=i.reduce((a,A)=>a+Number(A.delegation_staking?.staking_amount??A.staking_amount??0),0);return{provider:"babylon-staking",stakerPkHex:r,count:i.length,totalStakedSats:String(s),nextKey:o?.pagination?.next_key||null,delegations:i.map(a=>({stakingTxHashHex:a.delegation_staking?.staking_tx_hash_hex??a.staking_tx_hash_hex??null,state:a.state??null,stakingAmountSats:a.delegation_staking?.staking_amount==null&&a.staking_amount==null?null:String(a.delegation_staking?.staking_amount??a.staking_amount),stakingTimelock:a.delegation_staking?.staking_timelock??null,startHeight:a.delegation_staking?.start_height??null,finalityProviderBtcPks:a.finality_provider_btc_pks_hex??null})),raw:i}}M();var q6="https://markets.bisq.network";function Vf(e={}){return String(e.baseUrl||process.env.BISQ_MARKETS_URL||q6).replace(/\/$/,"")}function oN(e,t="market"){let r=String(e||"").trim().toLowerCase().replace(/[/\-\s]/g,"_");if(!/^[a-z0-9]{2,12}_[a-z0-9]{2,12}$/.test(r))throw new Error(`bisq-markets: ${t} must look like btc_usd (got "${e}")`);return r}function Ll(e,t={}){return C(`${Vf(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function iN(e={}){try{let t=await Ll("/api/markets",e),r=t&&typeof t=="object"?Object.keys(t).length:0;return{ok:r>0,provider:"bisq-markets",baseUrl:Vf(e),marketCount:r,exec:!1}}catch(t){return{ok:!1,provider:"bisq-markets",baseUrl:Vf(e),error:String(t?.message||t),exec:!1}}}async function sN(e={},t={}){let r=await Ll("/api/markets",t),n=Object.values(r&&typeof r=="object"?r:{});if(e.base){let o=String(e.base).trim().toLowerCase();n=n.filter(i=>String(i.lsymbol||"").toLowerCase()===o)}if(e.quote){let o=String(e.quote).trim().toLowerCase();n=n.filter(i=>String(i.rsymbol||"").toLowerCase()===o)}return{provider:"bisq-markets",count:n.length,markets:n.map(o=>({pair:o.pair??null,name:o.name??null,base:o.lsymbol??null,baseName:o.lname??null,quote:o.rsymbol??null,quoteName:o.rname??null,baseType:o.ltype??null,quoteType:o.rtype??null}))}}async function aN(e={},t={}){let r=oN(e.market||e.pair||"btc_usd","market"),n=await Ll(`/api/ticker?market=${encodeURIComponent(r)}`,t),o=Array.isArray(n)?n[0]||{}:n||{};return{provider:"bisq-markets",market:r,last:o.last==null?null:Number(o.last),high:o.high==null?null:Number(o.high),low:o.low==null?null:Number(o.low),bid:o.buy==null?null:Number(o.buy),ask:o.sell==null?null:Number(o.sell),volumeBase:o.volume_left==null?null:Number(o.volume_left),volumeQuote:o.volume_right==null?null:Number(o.volume_right),note:"Bisq is thin, non-KYC P2P \u2014 treat as a basis signal against centralized spot, not a reference rate",raw:o}}async function AN(e={},t={}){let r=oN(e.market||e.pair||"btc_usd","market"),n=Math.min(2e3,Math.max(1,Number(e.limit||50))),o=new URLSearchParams({market:r,limit:String(n)});e.timestampFrom&&o.set("timestamp_from",String(e.timestampFrom)),e.timestampTo&&o.set("timestamp_to",String(e.timestampTo));let i=await Ll(`/api/trades?${o}`,t),s=Array.isArray(i)?i:[],a=s.length?Number(s[0].trade_date||0):null,A=s.reduce((c,l)=>c+Number(l.amount||0),0);return{provider:"bisq-markets",market:r,count:s.length,latestTradeAt:a?new Date(a).toISOString():null,latestTradeAgeHours:a?Math.round((Date.now()-a)/36e5*10)/10:null,volumeBase:A,trades:s.slice(0,n).map(c=>({price:c.price==null?null:Number(c.price),amount:c.amount==null?null:Number(c.amount),volume:c.volume==null?null:Number(c.volume),paymentMethod:c.payment_method??null,tradeDate:c.trade_date??null,tradeAt:c.trade_date?new Date(Number(c.trade_date)).toISOString():null}))}}M();var mr=Object.freeze({60808:{name:"bob",label:"BOB (Build on Bitcoin)",url:"https://explorer.gobob.xyz",nativeSymbol:"ETH"},30:{name:"rootstock",label:"Rootstock (RSK)",url:"https://rootstock.blockscout.com",nativeSymbol:"RBTC"}}),V6=new Map([["bob",60808],["rootstock",30],["rsk",30]]),J6=60808;function la(e){if(e==null||e==="")return J6;let t=V6.get(String(e).trim().toLowerCase());if(t)return t;let r=Number(e);if(!mr[r])throw new Error(`bob-rootstock: unsupported chain ${e} (supported: ${Object.keys(mr).join(", ")} / bob, rootstock)`);return r}function Jf(e,t={}){if(t.baseUrl)return String(t.baseUrl).replace(/\/$/,"");let r=la(e),n=r===30?process.env.ROOTSTOCK_EXPLORER_URL:process.env.BOB_EXPLORER_URL;return String(n||mr[r].url).replace(/\/$/,"")}function cN(e,t="address"){let r=String(e||"").trim();if(!/^0x[0-9a-fA-F]{40}$/.test(r))throw new Error(`bob-rootstock: ${t} must be a 0x EVM address`);return r}function Tl(e,t,r={}){return C(`${Jf(e,r)}${t.startsWith("/")?t:`/${t}`}`,{fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??15e3})}async function lN(e={},t={}){let r;try{r=la(t.chainId??t.chain??e.chainId)}catch(o){return{ok:!1,provider:"bob-rootstock",error:String(o?.message||o),exec:!1}}let n=mr[r];try{let o=await Tl(r,"/api/v2/stats",e);return{ok:o?.total_blocks!=null||o?.total_transactions!=null,provider:"bob-rootstock",chainId:r,chain:n.name,baseUrl:Jf(r,e),totalBlocks:o?.total_blocks??null,averageBlockTimeMs:o?.average_block_time??null,exec:!1}}catch(o){return{ok:!1,provider:"bob-rootstock",chainId:r,chain:n.name,baseUrl:Jf(r,e),error:String(o?.message||o),exec:!1}}}async function Wf(e={},t={}){let r=e.chainId??e.chain;if(String(r).trim().toLowerCase()==="all"){let s=Object.keys(mr).map(Number);return{provider:"bob-rootstock",chains:await Promise.all(s.map(async A=>{try{return await Wf({chainId:A},t)}catch(c){return{provider:"bob-rootstock",chainId:A,chain:mr[A].name,error:String(c?.message||c)}}}))}}let n=la(r),o=mr[n],i=await Tl(n,"/api/v2/stats",t);return{provider:"bob-rootstock",chainId:n,chain:o.name,label:o.label,nativeSymbol:o.nativeSymbol,averageBlockTimeMs:i.average_block_time??null,averageBlockTimeSec:i.average_block_time==null?null:Number(i.average_block_time)/1e3,gasPrices:i.gas_prices??null,gasPriceUpdatedAt:i.gas_price_updated_at??null,gasUsedToday:i.gas_used_today??null,coinPrice:i.coin_price??null,coinPriceChangePct:i.coin_price_change_percentage??null,marketCap:i.market_cap??null,tvl:i.tvl??null,totalBlocks:i.total_blocks??null,totalAddresses:i.total_addresses??null,totalTransactions:i.total_transactions??null,transactionsToday:i.transactions_today??null,networkUtilizationPct:i.network_utilization_percentage??null,raw:i}}async function uN(e={},t={}){let r=la(e.chainId??e.chain),n=cN(e.address||e.addr,"address"),o=mr[r],i=await Tl(r,`/api/v2/addresses/${encodeURIComponent(n)}`,t);return{provider:"bob-rootstock",chainId:r,chain:o.name,address:n,nativeSymbol:o.nativeSymbol,coinBalanceWei:i.coin_balance==null?null:String(i.coin_balance),coinBalance:i.coin_balance==null?null:Number(i.coin_balance)/1e18,isContract:i.is_contract??null,isVerified:i.is_verified??null,name:i.name??null,blockNumberBalanceUpdatedAt:i.block_number_balance_updated_at??null,raw:i}}async function dN(e={},t={}){let r=la(e.chainId??e.chain),n=cN(e.address||e.addr,"address"),o=await Tl(r,`/api/v2/addresses/${encodeURIComponent(n)}/token-balances`,t),i=Array.isArray(o)?o:[],s=Math.min(500,Math.max(1,Number(e.limit||i.length||1)));return{provider:"bob-rootstock",chainId:r,chain:mr[r].name,address:n,count:i.length,tokens:i.slice(0,s).map(a=>({symbol:a.token?.symbol??null,name:a.token?.name??null,address:a.token?.address??a.token?.address_hash??null,type:a.token?.type??null,decimals:a.token?.decimals??null,rawBalance:a.value==null?null:String(a.value),balance:a.value==null||a.token?.decimals==null?null:Number(a.value)/10**Number(a.token.decimals),exchangeRate:a.token?.exchange_rate??null}))}}M();var $6="https://insights.braiins.com/api/v1.0";function $f(e={}){return String(e.baseUrl||process.env.BRAIINS_INSIGHTS_URL||$6).replace(/\/$/,"")}function zf(e,t={}){return C(`${$f(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:{Accept:"application/json"}})}async function hN(e={}){try{let t=await zf("/price-stats",e),r=Number(t?.price??0);return{ok:Number.isFinite(r)&&r>0,provider:"braiins-insights",baseUrl:$f(e),btcUsd:Number.isFinite(r)?r:null,timestamp:t?.timestamp??null,exec:!1}}catch(t){return{ok:!1,provider:"braiins-insights",baseUrl:$f(e),error:String(t?.message||t),exec:!1}}}async function gN(e={},t={}){let r=await zf("/price-stats",t);return{provider:"braiins-insights",btcUsd:r?.price==null?null:Number(r.price),percentChange24h:r?.percent_change_24h??null,timestamp:r?.timestamp??null,raw:r}}async function pN(e={},t={}){let r=await zf("/pool-stats",t),n=Array.isArray(r)?r:Array.isArray(r?.pools)?r.pools:[],o=String(e.window||"1w").trim().toLowerCase(),i=c=>c?.blocks_mined?.[o]||null,s=[...n].sort((c,l)=>Number(i(l)?.absolute||0)-Number(i(c)?.absolute||0)),a=Math.min(200,Math.max(1,Number(e.limit||s.length||1))),A=n.length?Object.keys(n[0]?.blocks_mined||{}):[];if(A.length&&!A.includes(o))throw new Error(`braiins-insights: window must be one of ${A.join(", ")}`);return{provider:"braiins-insights",window:o,availableWindows:A,count:s.length,pools:s.slice(0,a).map(c=>({name:c.pool_name??c.name??null,blocksMined:i(c)?.absolute??null,sharePct:i(c)?.relative_pct??null,blockValueAvg:c.block_value_avg??null,hashrate:c.hashrate??null,luck:c.luck??null,blocksMinedAllWindows:c.blocks_mined??null})),raw:s.slice(0,a)}}M();var K6="https://api.cow.fi",fN=Object.freeze({1:"mainnet",100:"xdai",42161:"arbitrum_one",8453:"base",11155111:"sepolia"});function mN(e={}){return(e.baseUrl||process.env.COW_API_URL||K6).replace(/\/$/,"")}function j6(e={}){if(e.network)return String(e.network);let t=Number(e.chainId??1),r=fN[t];if(!r)throw new Error(`cow-protocol: unsupported chainId ${t} (have: ${Object.keys(fN).join(", ")})`);return r}function Kf(e,t,r){return`${mN(r)}/${j6(e)}/api/v1${t}`}function EN(e,t){let r=String(e||"").trim();if(!/^0x[0-9a-fA-F]{40}$/.test(r))throw new Error(`cow-protocol: ${t} must be an EVM address`);return r}function IN(e,t=10){return Math.min(1e3,Math.max(1,Number(e.limit??t)))}async function BN(e={},t={}){return C(Kf(e,"/auction",t),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function CN(e={},t={}){let r=EN(e.owner||e.address||e.user,"owner"),n=new URLSearchParams({limit:String(IN(e))});e.offset!=null&&n.set("offset",String(Math.max(0,Number(e.offset))));let o=await C(`${Kf(e,`/account/${r}/orders`,t)}?${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4}),i=Array.isArray(o)?o:[],s=e.openOnly===!1?i:i.filter(a=>String(a?.status||"").toLowerCase()==="open");return{owner:r,count:s.length,total:i.length,orders:s}}async function QN(e={},t={}){let r=new URLSearchParams;e.orderUid?r.set("orderUid",String(e.orderUid)):r.set("owner",EN(e.owner||e.address||e.user,"owner"));let n=await C(`${Kf(e,"/trades",t)}?${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4}),o=Array.isArray(n)?n:[];return{count:o.length,trades:o.slice(0,IN(e))}}async function yN(e={}){let t=await C(`${mN(e)}/mainnet/api/v1/version`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??12e3}),r=typeof t=="string"?t:JSON.stringify(t??"");return{ok:r.trim().length>0,provider:"cow-protocol",version:r.trim()||null}}M();var X6="https://api.hiro.so",e$=20;function jf(e={}){return String(e.baseUrl||process.env.HIRO_API_URL||X6).replace(/\/$/,"")}function t$(e={}){let t={Accept:"application/json"},r=e.apiKey||process.env.HIRO_API_KEY;return r&&(t["x-api-key"]=String(r)),t}function ua(e,t={}){return C(`${jf(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:t$(t)})}async function wN(e={}){try{let t=await ua("/v2/info",e),r=Number(t?.burn_block_height??0);return{ok:Number.isFinite(r)&&r>0,provider:"hiro-stacks",baseUrl:jf(e),burnBlockHeight:t?.burn_block_height??null,stacksTipHeight:t?.stacks_tip_height??null,serverVersion:t?.server_version??null,rateLimitRps:e$,keyed:!!(e.apiKey||process.env.HIRO_API_KEY),exec:!1}}catch(t){return{ok:!1,provider:"hiro-stacks",baseUrl:jf(e),error:String(t?.message||t),exec:!1}}}async function bN(e={},t={}){let r=await ua("/v2/info",t);return{provider:"hiro-stacks",peerVersion:r.peer_version??null,serverVersion:r.server_version??null,networkId:r.network_id??null,burnBlockHeight:r.burn_block_height??null,stableBurnBlockHeight:r.stable_burn_block_height??null,stacksTipHeight:r.stacks_tip_height??null,stacksTip:r.stacks_tip??null,poxConsensus:r.pox_consensus??null,raw:r}}async function kN(e={},t={}){let r=await ua("/v2/pox",t),n=Number(r.total_liquid_supply_ustx||0),o=Number(r.current_cycle?.stacked_ustx||0);return{provider:"hiro-stacks",contractId:r.contract_id??null,currentCycleId:r.current_cycle?.id??null,currentCycleStackedUstx:r.current_cycle?.stacked_ustx==null?null:String(r.current_cycle.stacked_ustx),currentCycleIsPoX:r.current_cycle?.is_pox_active??null,nextCycleId:r.next_cycle?.id??null,nextCycleStackedUstx:r.next_cycle?.stacked_ustx==null?null:String(r.next_cycle.stacked_ustx),nextCycleMinThresholdUstx:r.next_cycle?.min_threshold_ustx==null?null:String(r.next_cycle.min_threshold_ustx),blocksUntilNextCycle:r.next_cycle?.blocks_until_prepare_phase??null,minAmountUstx:r.min_amount_ustx==null?null:String(r.min_amount_ustx),totalLiquidSupplyUstx:r.total_liquid_supply_ustx==null?null:String(r.total_liquid_supply_ustx),participationPct:n>0?o/n*100:null,rewardCycleLength:r.reward_cycle_length??null,rewardSlots:r.reward_slots??null,currentBurnchainBlockHeight:r.current_burnchain_block_height??null,raw:r}}async function SN(e={},t={}){let r=Math.min(60,Math.max(1,Number(e.limit||20))),n=Math.max(0,Number(e.offset||0)),o=await ua(`/extended/v2/pox/cycles?limit=${r}&offset=${n}`,t),i=Array.isArray(o?.results)?o.results:[];return{provider:"hiro-stacks",total:o?.total??null,limit:r,offset:n,cycles:i.map(s=>({cycleNumber:s.cycle_number??null,blockHeight:s.block_height??null,totalStackedAmount:s.total_stacked_amount==null?null:String(s.total_stacked_amount),totalWeight:s.total_weight??null,totalSigners:s.total_signers??null}))}}async function xN(e={},t={}){let r=Math.min(30,Math.max(1,Number(e.limit||1))),n=await ua(`/extended/v2/blocks?limit=${r}`,t),o=Array.isArray(n?.results)?n.results:[];return{provider:"hiro-stacks",total:n?.total??null,limit:r,blocks:o.map(i=>({height:i.height??null,hash:i.hash??null,burnBlockHeight:i.burn_block_height??null,burnBlockTime:i.burn_block_time??null,txCount:i.tx_count??null,canonical:i.canonical??null}))}}M();var n$="https://bundles.jito.wtf",vN=1e9;function Zf(e={}){return String(e.baseUrl||process.env.JITO_BUNDLES_URL||n$).replace(/\/$/,"")}function o$(e,t,r){let n=Number(e);return Number.isFinite(n)?Math.max(1,Math.min(Math.floor(n),r)):t}function DN(e){let t=Number(e);return Number.isFinite(t)?Math.round(t*vN):null}function i$(e={}){let t=Number(e.landedTipLamports);return{bundleId:e.bundleId||null,timestamp:e.timestamp||null,validator:e.validator||null,tippers:e.tippers||[],transactions:e.transactions||[],transactionCount:Array.isArray(e.transactions)?e.transactions.length:0,landedTipLamports:Number.isFinite(t)?t:null,landedTipSol:Number.isFinite(t)?t/vN:null,raw:e}}async function RN(e={}){try{let t=await C(`${Zf(e)}/api/v1/bundles/tip_floor`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??12e3}),r=Array.isArray(t)?t[0]:t,n=Number(r?.landed_tips_50th_percentile);return{ok:Number.isFinite(n),provider:"jito-mev",tipFloorP50Sol:Number.isFinite(n)?n:null,asOf:r?.time||null,exec:!1}}catch(t){return{ok:!1,provider:"jito-mev",error:String(t?.message||t),exec:!1}}}async function NN(e={},t={}){let r=o$(e.limit,5,100),n=new URL(`${Zf(t)}/api/v1/bundles/recent`);n.searchParams.set("limit",String(r)),n.searchParams.set("sort",String(e.sort||"Time")),n.searchParams.set("asc",String(!!e.asc));let o=await C(n.toString(),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),s=(Array.isArray(o)?o:Array.isArray(o?.bundles)?o.bundles:[]).map(i$),a=s.map(A=>A.landedTipLamports).filter(A=>Number.isFinite(A));return{provider:"jito-mev",chain:"solana-mainnet-beta",count:s.length,totalTipLamports:a.reduce((A,c)=>A+c,0),maxTipLamports:a.length?Math.max(...a):null,bundles:s}}async function FN(e={}){let t=await C(`${Zf(e)}/api/v1/bundles/tip_floor`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??12e3}),r=(Array.isArray(t)?t[0]:t)||{},n={p25:Number(r.landed_tips_25th_percentile)||0,p50:Number(r.landed_tips_50th_percentile)||0,p75:Number(r.landed_tips_75th_percentile)||0,p95:Number(r.landed_tips_95th_percentile)||0,p99:Number(r.landed_tips_99th_percentile)||0,ema50:Number(r.ema_landed_tips_50th_percentile)||0};return{provider:"jito-mev",chain:"solana-mainnet-beta",asOf:r.time||null,tipFloorSol:n,tipFloorLamports:Object.fromEntries(Object.entries(n).map(([o,i])=>[o,DN(i)])),suggestedTipLamports:DN(n.p75||n.p50),raw:r}}M();var a$="https://api.kamino.finance";function A$(e={}){return String(e.baseUrl||process.env.KAMINO_API_URL||a$).replace(/\/$/,"")}function dt(e){let t=Number(e);return Number.isFinite(t)?t:null}function MN(e={}){let t=dt(e.totalValueLocked)??0,r=dt(e.apy?.totalApy)??0,n=dt(e.kaminoApy?.totalApy)??0;return{strategy:e.strategy||null,pair:e.tokenA&&e.tokenB?`${e.tokenA}-${e.tokenB}`:null,tokenA:e.tokenA||null,tokenB:e.tokenB||null,tokenAMint:e.tokenAMint||null,tokenBMint:e.tokenBMint||null,tvlUsd:t,sharePrice:dt(e.sharePrice),sharesIssued:dt(e.sharesIssued),profitAndLoss:dt(e.profitAndLoss),feeApy:r,feeApyPct:r*100,rewardApy:n,rewardApyPct:n*100,totalApy:r+n,totalApyPct:(r+n)*100,apr24h:dt(e.apy?.vault?.totalApr),apy24h:dt(e.kaminoApy?.vault?.apy24h),apy7d:dt(e.kaminoApy?.vault?.apy7d),apy30d:dt(e.kaminoApy?.vault?.apy30d),poolPrice:dt(e.apy?.vault?.poolPrice),priceLower:dt(e.apy?.vault?.priceLower),priceUpper:dt(e.apy?.vault?.priceUpper),outOfRange:!!e.apy?.vault?.strategyOutOfRange,rewardMints:e.rewardMints||[],balances:e.vaultBalances||null,lastCalculated:e.kaminoApy?.vault?.lastCalculated||null}}async function Xf(e={},t={}){let r=new URL(`${A$(t)}/strategies/metrics`);r.searchParams.set("env",String(e.env||"mainnet-beta")),r.searchParams.set("status",String(e.status||"LIVE"));let n=await C(r.toString(),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??45e3});return Array.isArray(n)?n:[]}async function UN(e={}){try{let t=await Xf({},e),r=t.filter(n=>(Number(n.totalValueLocked)||0)>0).length;return{ok:t.length>0,provider:"kamino-strategies",strategies:t.length,funded:r,exec:!1}}catch(t){return{ok:!1,provider:"kamino-strategies",error:String(t?.message||t),exec:!1}}}async function LN(e={},t={}){let n=(await Xf(e,t)).map(MN),o=n.length,i=Number.isFinite(Number(e.minTvlUsd))?Number(e.minTvlUsd):1e4;if(n=n.filter(c=>c.tvlUsd>=i),e.token){let c=String(e.token).toLowerCase();n=n.filter(l=>String(l.tokenA||"").toLowerCase()===c||String(l.tokenB||"").toLowerCase()===c||l.tokenAMint===e.token||l.tokenBMint===e.token)}if(e.pair){let c=String(e.pair).toLowerCase().replace(/[/_]/g,"-");n=n.filter(l=>String(l.pair||"").toLowerCase()===c)}e.inRangeOnly===!0&&(n=n.filter(c=>!c.outOfRange));let s=String(e.sortBy||"apy");n.sort((c,l)=>s==="tvl"?l.tvlUsd-c.tvlUsd:l.totalApy-c.totalApy);let a=Number.isFinite(Number(e.limit))&&Number(e.limit)>0?Number(e.limit):25,A=n.slice(0,a);return{provider:"kamino-strategies",chain:"solana-mainnet-beta",env:e.env||"mainnet-beta",status:e.status||"LIVE",totalStrategies:o,matched:n.length,count:A.length,minTvlUsd:i,tvlUsdMatched:n.reduce((c,l)=>c+l.tvlUsd,0),strategies:A}}async function TN(e={},t={}){let r=String(e.strategy||e.address||"").trim();if(!r)throw new Error("kamino-strategies: strategy address required");let o=(await Xf({...e,status:e.status||"ALL"},t)).find(i=>i.strategy===r);if(!o)throw new Error(`kamino-strategies: strategy ${r} not found`);return{provider:"kamino-strategies",chain:"solana-mainnet-beta",...MN(o),raw:o}}M();var l$="https://blockstream.info/liquid/api",PN="6f0279e9ed041c3d710a9f57d0c02928416460c4b722ae3457a11eec381c526d";function Pl(e={}){return String(e.baseUrl||process.env.LIQUID_ESPLORA_URL||l$).replace(/\/$/,"")}function u$(e,t="address"){let r=String(e||"").trim(),n=/^(ex1|lq1|el1|tex1|tlq1)[a-z0-9]{20,200}$/i.test(r),o=/^[QVGH][a-km-zA-HJ-NP-Z1-9]{25,110}$/.test(r);if(!n&&!o)throw new Error(`liquid-esplora: ${t} must look like a Liquid address (Q\u2026, VJL\u2026, ex1\u2026, lq1\u2026)`);return r}function d$(e,t="assetId"){let r=String(e||"").trim().toLowerCase().replace(/^0x/,"");if(!/^[0-9a-f]{64}$/.test(r))throw new Error(`liquid-esplora: ${t} must be 64-char hex`);return r}async function _N(e,t={}){let r=`${Pl(t)}${e.startsWith("/")?e:`/${e}`}`,o=await(t.fetchImpl||fetch)(r,{method:"GET",headers:{accept:"application/json,text/plain;q=0.9,*/*;q=0.8"},signal:AbortSignal.timeout(t.timeoutMs??12e3)}),i=await o.text();if(!o.ok)throw new Error(`liquid-esplora GET ${e}: HTTP ${o.status} ${i.slice(0,160)}`);return i}function ON(e,t={}){return C(`${Pl(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function HN(e={}){try{let t=await _N("/blocks/tip/height",e),r=Number(t);return{ok:Number.isFinite(r)&&r>0,provider:"liquid-esplora",baseUrl:Pl(e),tipHeight:r,exec:!1,signing:"user-wallet"}}catch(t){return{ok:!1,provider:"liquid-esplora",baseUrl:Pl(e),error:String(t?.message||t),exec:!1}}}async function GN(e={},t={}){let r=await _N("/blocks/tip/height",t);return{provider:"liquid-esplora",tipHeight:Number(r)}}async function qN(e={},t={}){let r=u$(e.address||e.addr,"address"),n=await ON(`/address/${r}`,t),o=n.chain_stats||{},i=n.mempool_stats||{},s=o.funded_txo_sum!=null,a=Number(o.funded_txo_sum||0)+Number(i.funded_txo_sum||0),A=Number(o.spent_txo_sum||0)+Number(i.spent_txo_sum||0);return{provider:"liquid-esplora",address:r,txCount:Number(o.tx_count||0)+Number(i.tx_count||0),balanceSats:s?String(a-A):null,confidential:!s,note:s?void 0:"Liquid amounts are blinded \u2014 Esplora returns TXO counts only for confidential outputs. Unblind with the wallet's blinding key for values.",chainStats:o,mempoolStats:i,raw:n}}async function YN(e={},t={}){let r=d$(e.assetId||e.asset||PN,"assetId"),n=await ON(`/asset/${r}`,t),o=n.chain_stats||{};return{provider:"liquid-esplora",assetId:r,isPolicyAsset:r===PN,name:n.name??n.entity?.domain??null,ticker:n.ticker??null,precision:n.precision??null,issuanceTxid:n.issuance_txin?.txid??null,txCount:o.tx_count??null,pegInAmount:o.peg_in_amount==null?null:String(o.peg_in_amount),pegOutAmount:o.peg_out_amount==null?null:String(o.peg_out_amount),issuedAmount:o.issued_amount==null?null:String(o.issued_amount),burnedAmount:o.burned_amount==null?null:String(o.burned_amount),circulatingAmount:o.peg_in_amount!=null?String(Number(o.peg_in_amount)-Number(o.peg_out_amount||0)-Number(o.burned_amount||0)):o.issued_amount!=null?String(Number(o.issued_amount)-Number(o.burned_amount||0)):null,raw:n}}M();var g$="https://api-mainnet.magiceden.dev/v2/ord/btc",p$=600;function em(e={}){return String(e.baseUrl||process.env.MAGICEDEN_ORD_API_URL||g$).replace(/\/$/,"")}function f$(e={}){let t={Accept:"application/json"},r=e.apiKey||process.env.MAGICEDEN_API_KEY;return r&&(t.Authorization=`Bearer ${r}`),t}function VN(e,t="collectionSymbol"){let r=String(e||"").trim().toLowerCase();if(!/^[a-z0-9][a-z0-9_-]{0,63}$/.test(r))throw new Error(`magiceden-ordinals: ${t} must be a slug like "nodemonkes"`);return r}function JN(e,t={}){return C(`${em(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:f$(t),retries:t.retries??1})}async function WN(e={}){let t=VN(e.probeCollection||process.env.MAGICEDEN_PROBE_COLLECTION||"nodemonkes");try{let r=await JN(`/stat?collectionSymbol=${encodeURIComponent(t)}`,e);return{ok:r!=null&&typeof r=="object",provider:"magiceden-ordinals",baseUrl:em(e),probeCollection:t,rateLimitRpm:p$,exec:!1}}catch(r){let n=r?.status??null;return{ok:!1,provider:"magiceden-ordinals",baseUrl:em(e),probeCollection:t,status:n,upstreamDown:n===503||n===502||n===504,error:String(r?.message||r),fallback:"satflow",note:n===503?"Magic Eden ordinals API returned 503 'no healthy upstream'. Use the satflow provider for BTC NFT market data.":void 0,exec:!1}}}async function $N(e={},t={}){let r=VN(e.collectionSymbol||e.symbol||e.collection,"collectionSymbol");try{let n=await JN(`/stat?collectionSymbol=${encodeURIComponent(r)}`,t),o=n?.floorPrice==null?null:Number(n.floorPrice);return{ok:!0,provider:"magiceden-ordinals",collectionSymbol:r,floorPriceSats:o==null?null:String(n.floorPrice),floorPriceBtc:o==null?null:o/1e8,totalVolumeSats:n?.totalVolume==null?null:String(n.totalVolume),totalVolumeBtc:n?.totalVolume==null?null:Number(n.totalVolume)/1e8,totalListed:n?.totalListed??null,owners:n?.owners??null,supply:n?.supply??null,pendingTransactions:n?.pendingTransactions??null,inscriptionNumberMin:n?.inscriptionNumberMin??null,inscriptionNumberMax:n?.inscriptionNumberMax??null,raw:n}}catch(n){let o=n?.status??null;if(!(o===502||o===503||o===504))throw n;return{ok:!1,provider:"magiceden-ordinals",collectionSymbol:r,status:o,upstreamDown:!0,error:String(n?.message||n),fallback:"satflow",note:"Magic Eden ordinals API is returning 5xx ('no healthy upstream'). Query the satflow provider for floors and listings."}}}M();var E$="https://mempool.space/api",I$=7;function tm(e={}){return String(e.baseUrl||process.env.MEMPOOL_API_URL||E$).replace(/\/$/,"")}function _l(e,t={}){return C(`${tm(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}function zN(e){if(!e)return{ageDays:null,stale:null};let t=new Date(e).getTime();if(!Number.isFinite(t))return{ageDays:null,stale:null};let r=(Date.now()-t)/864e5;return{ageDays:Math.round(r*10)/10,stale:r>I$}}async function KN(e={}){try{let r=(await _l("/v1/lightning/statistics/latest",e))?.latest||{},{ageDays:n,stale:o}=zN(r.added);return{ok:Number(r.node_count||0)>0,provider:"mempool-lightning",baseUrl:tm(e),snapshotAt:r.added??null,ageDays:n,stale:o,nodeCount:r.node_count??null,exec:!1}}catch(t){return{ok:!1,provider:"mempool-lightning",baseUrl:tm(e),error:String(t?.message||t),exec:!1}}}async function jN(e={},t={}){let n=(await _l("/v1/lightning/statistics/latest",t))?.latest||{},{ageDays:o,stale:i}=zN(n.added);return{provider:"mempool-lightning",snapshotAt:n.added??null,ageDays:o,stale:i,staleNote:i?`mempool.space Lightning snapshot is ${o} days old \u2014 trend only, not live state`:void 0,nodeCount:n.node_count??null,channelCount:n.channel_count??null,totalCapacitySats:n.total_capacity==null?null:String(n.total_capacity),totalCapacityBtc:n.total_capacity==null?null:Number(n.total_capacity)/1e8,avgCapacitySats:n.avg_capacity==null?null:String(n.avg_capacity),avgFeeRatePpm:n.avg_fee_rate??null,avgBaseFeeMsat:n.avg_base_fee_mtokens??null,torNodes:n.tor_nodes??null,clearnetNodes:n.clearnet_nodes??null,unannouncedNodes:n.unannounced_nodes??null,raw:n}}async function ZN(e={},t={}){let r=String(e.metric||e.ranking||"connectivity").trim().toLowerCase(),n=new Set(["connectivity","liquidity","channels"]);if(!n.has(r))throw new Error(`mempool-lightning: metric must be one of ${[...n].join(", ")}`);let o=await _l(`/v1/lightning/nodes/rankings/${r}`,t),i=Array.isArray(o)?o:[],s=Math.min(100,Math.max(1,Number(e.limit||i.length||1)));return{provider:"mempool-lightning",metric:r,count:i.length,nodes:i.slice(0,s).map(a=>({publicKey:a.publicKey??null,alias:a.alias??null,channels:a.channels??null,capacitySats:a.capacity==null?null:String(a.capacity),firstSeen:a.firstSeen??null,updatedAt:a.updatedAt??null,city:a.city?.en??a.city??null,country:a.country?.en??a.country??null,iso:a.iso_code??null}))}}async function XN(e={},t={}){let r=await _l("/v1/lightning/nodes/countries",t),n=Array.isArray(r)?r:[],o=Math.min(250,Math.max(1,Number(e.limit||n.length||1))),i=n.reduce((s,a)=>s+Number(a.count||0),0);return{provider:"mempool-lightning",countryCount:n.length,totalNodes:i,topCountrySharePct:n[0]?.share??null,countries:n.slice(0,o).map(s=>({name:s.name?.en??s.name??null,iso:s.iso??null,count:s.count??null,sharePct:s.share??null,capacitySats:s.capacity==null?null:String(s.capacity)}))}}M();var C$="https://mempool.space/api",eF=new Set(["24h","3d","1w","1m","3m","6m","1y","2y","3y","all"]);function rm(e={}){return String(e.baseUrl||process.env.MEMPOOL_API_URL||C$).replace(/\/$/,"")}function tF(e,t){let r=String(e||t).trim().toLowerCase();if(!eF.has(r))throw new Error(`mempool-mining: window must be one of ${[...eF].join(", ")}`);return r}function da(e,t={}){return C(`${rm(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function rF(e={}){try{let t=await da("/v1/difficulty-adjustment",e);return{ok:Number.isFinite(Number(t?.nextRetargetHeight))&&Number(t.nextRetargetHeight)>0,provider:"mempool-mining",baseUrl:rm(e),nextRetargetHeight:t?.nextRetargetHeight??null,exec:!1}}catch(t){return{ok:!1,provider:"mempool-mining",baseUrl:rm(e),error:String(t?.message||t),exec:!1}}}async function nF(e={},t={}){let r=await da("/v1/difficulty-adjustment",t);return{provider:"mempool-mining",progressPercent:r.progressPercent??null,difficultyChangePct:r.difficultyChange??null,estimatedRetargetDate:r.estimatedRetargetDate??null,remainingBlocks:r.remainingBlocks??null,remainingTimeMs:r.remainingTime??null,previousRetargetPct:r.previousRetarget??null,nextRetargetHeight:r.nextRetargetHeight??null,timeAvgMs:r.timeAvg??null,raw:r}}async function oF(e={},t={}){let r=tF(e.window||e.timeframe,"1w"),n=await da(`/v1/mining/pools/${r}`,t),o=Array.isArray(n?.pools)?n.pools:[],i=o.reduce((c,l)=>c+Number(l.blockCount||0),0),s=c=>i>0?Number(c.blockCount||0)/i*100:null,a=[...o].sort((c,l)=>Number(l.blockCount||0)-Number(c.blockCount||0)),A=Math.min(200,Math.max(1,Number(e.limit||a.length||1)));return{provider:"mempool-mining",window:r,totalBlocks:i,blockCount:n?.blockCount??null,lastEstimatedHashrate:n?.lastEstimatedHashrate??null,topPoolSharePct:a[0]?s(a[0]):null,top3SharePct:a.slice(0,3).reduce((c,l)=>c+(s(l)||0),0)||null,pools:a.slice(0,A).map(c=>({name:c.name??null,slug:c.slug??null,blockCount:c.blockCount??null,rank:c.rank??null,sharePct:s(c),emptyBlocks:c.emptyBlocks??null,avgMatchRate:c.avgMatchRate??null}))}}async function iF(e={},t={}){let r=tF(e.window||e.timeframe,"3d"),n=await da(`/v1/mining/hashrate/${r}`,t),o=Array.isArray(n?.hashrates)?n.hashrates:[];return{provider:"mempool-mining",window:r,currentHashrate:n?.currentHashrate??null,currentHashrateEhs:n?.currentHashrate==null?null:Number(n.currentHashrate)/1e18,currentDifficulty:n?.currentDifficulty??null,points:o.length,hashrates:o,difficulty:Array.isArray(n?.difficulty)?n.difficulty:[]}}async function sF(e={},t={}){let r=Math.min(1e4,Math.max(1,Number(e.blockCount||e.blocks||144))),n=await da(`/v1/mining/reward-stats/${r}`,t),o=Number(n.totalReward||0),i=Number(n.totalFee||0);return{provider:"mempool-mining",blockCount:r,startBlock:n.startBlock??null,endBlock:n.endBlock??null,totalRewardSats:String(n.totalReward??""),totalFeeSats:String(n.totalFee??""),totalSubsidySats:String(o-i),feeSharePct:o>0?i/o*100:null,totalTx:n.totalTx??null,raw:n}}M();var y$="https://amm-v2.meteora.ag",aF=new Set(["tvl","volume","fee_tvl_ratio","l_m"]),AF=new Set(["dynamic","multitoken","lst","farms"]),w$=/^[1-9A-HJ-NP-Za-km-z]{32,44}$/;function b$(e={}){return String(e.baseUrl||process.env.METEORA_API_URL||y$).replace(/\/$/,"")}function Ye(e){let t=Number(e);return Number.isFinite(t)?t:null}function k$(e={}){return{address:e.pool_address||null,name:e.pool_name||null,type:e.pool_type||null,version:e.pool_version??null,mints:e.pool_token_mints||[],tokenAmounts:e.pool_token_amounts||[],tokenUsdAmounts:e.pool_token_usd_amounts||[],lpMint:e.lp_mint||null,lpDecimals:e.lp_decimal??null,lpPriceUsd:Ye(e.pool_lp_price_in_usd),tvlUsd:Ye(e.pool_tvl),farmTvlUsd:Ye(e.farm_tvl),volume24hUsd:Ye(e.trading_volume),volume7dUsd:Ye(e.weekly_trading_volume),fee24hUsd:Ye(e.fee_volume),fee7dUsd:Ye(e.weekly_fee_volume),tradeApyPct:Ye(e.trade_apy),weeklyTradeApyPct:Ye(e.weekly_trade_apy),baseApyPct:Ye(e.daily_base_apy),farmingApyPct:Ye(e.farming_apy),totalApyPct:(Ye(e.trade_apy)??0)+(Ye(e.farming_apy)??0),aprPct:Ye(e.apr),feePct:Ye(e.total_fee_pct),farmingPool:e.farming_pool||null,isLst:!!e.is_lst,isMeme:!!e.is_meme,permissioned:!!e.permissioned,unknownTokens:!!e.unknown,createdAt:e.created_at??null}}function S$(e={},t={}){let r=new URL(`${b$(t)}/pools/search`),n=Math.max(0,Number(e.page)||0),o=Math.max(1,Math.min(Number(e.size??e.limit)||20,100));if(r.searchParams.set("page",String(n)),r.searchParams.set("size",String(o)),e.sortKey!=null){let a=String(e.sortKey);if(!aF.has(a))throw new Error(`meteora-dlmm: sortKey must be one of ${[...aF].join(", ")}`);r.searchParams.set("sort_key",a),r.searchParams.set("order_by",e.orderBy==="asc"?"asc":"desc")}if(e.poolType!=null){let a=String(e.poolType);if(!AF.has(a))throw new Error(`meteora-dlmm: poolType must be one of ${[...AF].join(", ")}`);r.searchParams.set("pool_type",a)}let i=e.filter??e.query??e.search;i!=null&&String(i).trim()&&r.searchParams.set("filter",String(i).trim());let s=e.mints||e.includeTokenMints;if(s){let a=(Array.isArray(s)?s:[s]).map(A=>String(A).trim());for(let A of a)if(!w$.test(A))throw new Error(`meteora-dlmm: mint ${A} is not a base58 public key`);r.searchParams.set("include_token_mints",a.join(","))}return{url:r,page:n,size:o}}async function nm(e={},t={}){let{url:r,page:n,size:o}=S$(e,t),i=await C(r.toString(),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4});return{pools:(Array.isArray(i?.data)?i.data:[]).map(k$),totalCount:i?.total_count??null,page:n,size:o}}async function cF(e={}){try{let{pools:t,totalCount:r}=await nm({size:3},e);return{ok:t.length>0,provider:"meteora-dlmm",poolsIndexed:r,sample:t.length,exec:!1}}catch(t){return{ok:!1,provider:"meteora-dlmm",error:String(t?.message||t),exec:!1}}}async function lF(e={},t={}){let r=await nm({sortKey:e.sortKey||"tvl",orderBy:e.orderBy||"desc",...e},t),n=r.pools,o=Number(e.minTvlUsd);return Number.isFinite(o)&&(n=n.filter(i=>(i.tvlUsd??0)>=o)),e.excludeUnknown===!0&&(n=n.filter(i=>!i.unknownTokens)),{provider:"meteora-dlmm",chain:"solana-mainnet-beta",page:r.page,size:r.size,totalCount:r.totalCount,count:n.length,tvlUsd:n.reduce((i,s)=>i+(s.tvlUsd??0),0),pools:n}}async function uF(e={},t={}){let r=e.filter??e.query??e.search,n=e.mints||e.includeTokenMints;if((r==null||!String(r).trim())&&!n)throw new Error("meteora-dlmm: poolSearch requires filter text or mints[]");let o=await nm({sortKey:e.sortKey||"tvl",orderBy:"desc",...e},t);return{provider:"meteora-dlmm",chain:"solana-mainnet-beta",filter:r??null,mints:n?Array.isArray(n)?n:[n]:[],page:o.page,size:o.size,totalCount:o.totalCount,count:o.pools.length,pools:o.pools}}M();var D$="https://ordinals.com";function Ol(e={}){return String(e.baseUrl||e.ordinalsBase||process.env.ORDINALS_BASE_URL||D$).replace(/\/$/,"")}function v$(e,t="name"){let r=String(e||"").trim().toUpperCase().replace(/[•.\s_-]/g,"");if(!/^[A-Z]{1,28}$/.test(r))throw new Error(`ordinals-runes: ${t} must be 1-28 letters (spacers are stripped automatically)`);return r}async function dF(e,t={}){let r=`${Ol(t)}${e.startsWith("/")?e:`/${e}`}`,o=await(t.fetchImpl||fetch)(r,{method:"GET",headers:{accept:"application/json,text/plain;q=0.9,*/*;q=0.8"},signal:AbortSignal.timeout(t.timeoutMs??12e3)}),i=await o.text();if(!o.ok)throw new Error(`ordinals-runes GET ${e}: HTTP ${o.status} ${i.slice(0,160)}`);return i.trim()}function om(e,t={}){return C(`${Ol(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:{Accept:"application/json"}})}async function hF(e={}){try{let t=await dF("/r/blockheight",e),r=Number(t);return{ok:Number.isFinite(r)&&r>0,provider:"ordinals-runes",baseUrl:Ol(e),blockHeight:r,exec:!1}}catch(t){return{ok:!1,provider:"ordinals-runes",baseUrl:Ol(e),error:String(t?.message||t),exec:!1}}}async function gF(e={},t={}){let r=await dF("/r/blockheight",t),n=Number(r);if(!Number.isFinite(n))throw new Error(`ordinals-runes: unexpected blockheight response ${r.slice(0,60)}`);return{provider:"ordinals-runes",blockHeight:n}}async function pF(e={},t={}){let r=e.height??e.block??e.hash;if(r==null||r==="")throw new Error("ordinals-runes: blockInfo requires height or hash");let n;if(/^[0-9a-f]{64}$/i.test(String(r)))n=String(r).toLowerCase();else{let i=Number(r);if(!Number.isInteger(i)||i<0)throw new Error("ordinals-runes: height must be a non-negative integer or a 64-hex block hash");n=String(i)}let o=await om(`/r/blockinfo/${n}`,t);return{provider:"ordinals-runes",height:o.height??null,hash:o.hash??null,timestamp:o.timestamp??null,difficulty:o.difficulty??null,transactionCount:o.transaction_count??null,averageFee:o.average_fee??null,averageFeeRate:o.average_fee_rate??null,feerangeSats:o.feerange??null,totalFee:o.total_fee??null,totalSize:o.total_size??null,confirmations:o.confirmations??null,raw:o}}async function fF(e={},t={}){let r=e.sat??e.ordinal,n=Number(r);if(!Number.isInteger(n)||n<0||n>209999999769e4)throw new Error("ordinals-runes: sat must be an integer in [0, 2099999997690000]");let o=Math.max(0,Number(e.page||0)),i=o>0?`/r/sat/${n}/${o}`:`/r/sat/${n}`,s=await om(i,t),a=Array.isArray(s?.ids)?s.ids:[];return{provider:"ordinals-runes",sat:n,page:o,inscriptionCount:a.length,inscriptionIds:a,more:!!s?.more,raw:s}}async function mF(e={},t={}){let r=v$(e.name||e.rune||e.runeName,"name"),n=await om(`/rune/${r}`,t),o=n?.entry||{},i=o.terms||{},s=i.cap==null?null:Number(i.cap),a=o.mints==null?null:Number(o.mints);return{provider:"ordinals-runes",name:r,spacedRune:o.spaced_rune??null,number:o.number??null,symbol:o.symbol??null,divisibility:o.divisibility??null,etchingBlock:o.block??null,etchingTxid:o.etching??null,premine:o.premine==null?null:String(o.premine),mints:a==null?null:String(a),burned:o.burned==null?null:String(o.burned),mintCap:s==null?null:String(s),mintProgressPct:s&&s>0&&a!=null?a/s*100:null,mintable:n?.mintable??null,amountPerMint:i.amount==null?null:String(i.amount),turbo:o.turbo??null,parent:n?.parent??null,raw:n}}M();var N$="https://hermes.pyth.network",sm={"SOL/USD":"ef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d","BTC/USD":"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43","ETH/USD":"ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace","USDC/USD":"eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a","USDT/USD":"2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b","JUP/USD":"0a0408d619e9380abad35060f9192039ed5042fa6f82301d0e48bb52be830996","JTO/USD":"b43660a5f790c69354b0729a5ef9d50d68f1df92107540210b9cccba1f947cc2","BONK/USD":"72b021217ca3fe68922a19aaf990109cb9d84e9ad004b4d2025ad6f529314419","PYTH/USD":"0bbf28e9a841a1cc788f6a361b17ca072d0ea3098a1e5df1c3922d06719579ff","HYPE/USD":"4279e31cc369bbcc2faf022b382b080e32a8e689ff20fbc530d2a603eb6cd98b"},F$=/^[0-9a-fA-F]{64}$/;function EF(e={}){return String(e.baseUrl||process.env.PYTH_HERMES_URL||N$).replace(/\/$/,"")}function IF(e,t="feedId"){let r=String(e??"").trim();if(!r)throw new Error(`pyth-price-feeds: ${t} required`);let n=sm[r.toUpperCase()]||sm[`${r.toUpperCase()}/USD`];if(n)return n;let o=r.startsWith("0x")||r.startsWith("0X")?r.slice(2):r;if(!F$.test(o))throw new Error(`pyth-price-feeds: ${t} must be a 32-byte hex feed id or a known symbol`);return o.toLowerCase()}function im(e={}){let t=Number(e.price),r=Number(e.expo);return!Number.isFinite(t)||!Number.isFinite(r)?null:t*10**r}function am(e={}){let t=im({price:Number(e.price?.conf),expo:e.price?.expo}),r=im(e.price);return{id:e.id||null,price:r,confidence:t,confidenceBps:r&&t!=null?Math.round(t/Math.abs(r)*1e4):null,emaPrice:im(e.ema_price),publishTime:e.price?.publish_time??null,publishTimeIso:e.price?.publish_time?new Date(e.price.publish_time*1e3).toISOString():null,ageSeconds:e.price?.publish_time?Math.max(0,Math.round(Date.now()/1e3-e.price.publish_time)):null,expo:e.price?.expo??null,raw:{price:e.price??null,emaPrice:e.ema_price??null,metadata:e.metadata??null}}}async function Am(e,t={}){let r=new URL(`${EF(t)}/v2/updates/price/latest`);for(let n of e)r.searchParams.append("ids[]",n);return r.searchParams.set("encoding","hex"),r.searchParams.set("parsed","true"),r.searchParams.set("ignore_invalid_price_ids","true"),C(r.toString(),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function BF(e={}){try{let t=await Am([sm["SOL/USD"]],e),n=(Array.isArray(t?.parsed)?t.parsed.map(am):[])[0]||null;return{ok:!!(n&&Number.isFinite(n.price)&&n.price>0),provider:"pyth-price-feeds",solUsd:n?.price??null,ageSeconds:n?.ageSeconds??null,exec:!1}}catch(t){return{ok:!1,provider:"pyth-price-feeds",error:String(t?.message||t),exec:!1}}}async function CF(e={},t={}){let r=IF(e.feedId||e.id||e.symbol,"feedId"),n=await Am([r],t),o=Array.isArray(n?.parsed)?n.parsed.map(am):[],i=o.find(s=>String(s.id).toLowerCase()===r)||o[0]||null;if(!i)throw new Error(`pyth-price-feeds: no price returned for feed ${r}`);return{provider:"pyth-price-feeds",chain:"solana-mainnet-beta",feedId:r,...i,binaryUpdate:n?.binary?.data?.[0]||null,binaryEncoding:n?.binary?.encoding||null}}async function QF(e={},t={}){let r=Array.isArray(e)?e:e.feedIds||e.ids||e.symbols||[],n=[...new Set(r.map(c=>IF(c,"feedIds[]")))];if(!n.length)throw new Error("pyth-price-feeds: feedIds[] required");let o=40,i=[];for(let c=0;c<n.length;c+=o)i.push(n.slice(c,c+o));let s=[];for(let c of i)s.push(await Am(c,t));let a=s.flatMap(c=>Array.isArray(c?.parsed)?c.parsed.map(am):[]),A=Object.fromEntries(a.map(c=>[String(c.id).toLowerCase(),c]));return{provider:"pyth-price-feeds",chain:"solana-mainnet-beta",requested:n.length,returned:a.length,missing:n.filter(c=>!A[c]),prices:a,byId:A}}async function yF(e={},t={}){let r=new URL(`${EF(t)}/v2/price_feeds`);e.query&&r.searchParams.set("query",String(e.query)),r.searchParams.set("asset_type",String(e.assetType||"crypto"));let n=await C(r.toString(),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),o=Array.isArray(n)?n:[];return{provider:"pyth-price-feeds",count:o.length,feeds:o.map(i=>({id:i.id,symbol:i.attributes?.symbol||null,displaySymbol:i.attributes?.display_symbol||null,base:i.attributes?.base||null,quote:i.attributes?.quote_currency||null,assetType:i.attributes?.asset_type||null}))}}M();var U$="https://relayscan.io",wF=new Set(["1h","12h","24h","7d"]);function cm(e={}){return(e.baseUrl||process.env.RELAYSCAN_API_URL||U$).replace(/\/$/,"")}function bF(e={}){let t=String(e.timespan||e.t||"24h").toLowerCase();if(!wF.has(t))throw new Error(`relayscan-mev: timespan must be one of ${[...wF].join(", ")}`);return t}function L$(e={}){let t=e.date||e.day;if(t==null)return new Date(Date.now()-864e5).toISOString().slice(0,10);let r=String(t).trim();if(!/^\d{4}-\d{2}-\d{2}$/.test(r))throw new Error("relayscan-mev: date must be YYYY-MM-DD");return r}async function lm(e={},t={}){return C(`${cm(t)}/overview/json?t=${bF(e)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function kF(e={},t={}){return C(`${cm(t)}/builder-profit/json?t=${bF(e)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function SF(e={},t={}){let r=L$(e);return C(`${cm(t)}/stats/day/${r}/json`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3})}async function xF(e={}){let t=await lm({timespan:"1h"},e);return{ok:Array.isArray(t?.relays)&&t.relays.length>0,provider:"relayscan-mev",relays:Array.isArray(t?.relays)?t.relays.length:0}}M();var P$="https://extra-api.sanctum.so",_$=30,O$=["jitoSOL","mSOL","bSOL","INF","hSOL","bonkSOL","jupSOL","dSOL"];function um(e={}){return String(e.baseUrl||process.env.SANCTUM_API_URL||P$).replace(/\/$/,"")}function DF(e,t="lst"){let r=String(e??"").trim();if(!r||/[?&=\s]/.test(r))throw new Error(`sanctum-lst: ${t} must be an LST symbol or mint`);return r}function H$(e,t){let r=[];for(let n=0;n<e.length;n+=t)r.push(e.slice(n,n+t));return r}async function Tn(e,t,r={}){let n={},o={};for(let i of H$(t,_$)){let s=new URL(`${um(r)}/v1/${e}`);for(let c of i)s.searchParams.append("lst",c);let a=await C(s.toString(),{fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??2e4}),A=a?.apys||a?.tvls||a?.solValues||{};Object.assign(n,A),Object.assign(o,a?.errs||{})}return{values:n,errs:o}}async function vF(e={}){try{let[t,r]=await Promise.all([C(`${um(e)}/v1/lsts`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??15e3}),Tn("apy/inception",["jitoSOL"],e)]),n=Array.isArray(t?.lsts)?t.lsts:[];return{ok:n.length>0&&Number.isFinite(Number(r.values.jitoSOL)),provider:"sanctum-lst",lstCount:n.length,jitoSolApyInception:Number(r.values.jitoSOL)??null,exec:!1}}catch(t){return{ok:!1,provider:"sanctum-lst",error:String(t?.message||t),exec:!1}}}async function dm(e={},t={}){let r=await C(`${um(t)}/v1/lsts`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4}),n=(Array.isArray(r?.lsts)?r.lsts:[]).map(i=>({symbol:i.symbol||null,name:i.name||null,mint:i.mint||null,decimals:i.decimals??null,pool:i.pool?.pool||null,poolProgram:i.pool?.program||null,voteAccount:i.pool?.vote_account||null,logoUri:i.logo_uri||null}));if(e.symbol){let i=String(e.symbol).toLowerCase();n=n.filter(s=>String(s.symbol||"").toLowerCase()===i||s.mint===e.symbol)}let o=Number(e.limit);return Number.isFinite(o)&&o>0&&(n=n.slice(0,o)),{provider:"sanctum-lst",chain:"solana-mainnet-beta",count:n.length,lsts:n}}async function RF(e={},t={}){let r=e.lsts||e.symbols||null;e.all===!0&&(r=(await dm({},t)).lsts.map(A=>A.symbol).filter(Boolean)),(!Array.isArray(r)||!r.length)&&(r=O$);let n=[...new Set(r.map(a=>DF(a,"lsts[]")))],[o,i]=await Promise.all([Tn("apy/latest",n,t),Tn("apy/inception",n,t)]),s=n.map(a=>{let A=Number(o.values[a]),c=Number(i.values[a]);return{lst:a,apyLatest:Number.isFinite(A)?A:null,apyLatestPct:Number.isFinite(A)?A*100:null,apyInception:Number.isFinite(c)?c:null,apyInceptionPct:Number.isFinite(c)?c*100:null,error:o.errs[a]||i.errs[a]||null}});return s.sort((a,A)=>(A.apyInception??-1)-(a.apyInception??-1)),{provider:"sanctum-lst",chain:"solana-mainnet-beta",count:s.length,apys:s,byLst:Object.fromEntries(s.map(a=>[a.lst,a]))}}async function NF(e={},t={}){let r=DF(e.lst||e.mint||e.symbol,"lst"),[n,o,i,s]=await Promise.all([Tn("apy/latest",[r],t),Tn("apy/inception",[r],t),Tn("tvl/current",[r],t).catch(()=>({values:{},errs:{}})),Tn("sol-value/current",[r],t).catch(()=>({values:{},errs:{}}))]),a=Number(n.values[r]),A=Number(o.values[r]),c=n.errs[r]||o.errs[r]||null;if(!Number.isFinite(a)&&!Number.isFinite(A))throw new Error(`sanctum-lst: no APY for ${r}${c?` (${JSON.stringify(c)})`:""}`);let l=s.values[r];return{provider:"sanctum-lst",chain:"solana-mainnet-beta",lst:r,apyLatest:Number.isFinite(a)?a:null,apyLatestPct:Number.isFinite(a)?a*100:null,apyInception:Number.isFinite(A)?A:null,apyInceptionPct:Number.isFinite(A)?A*100:null,tvlLamports:i.values[r]??null,tvlSol:i.values[r]!=null?Number(i.values[r])/1e9:null,solValueLamports:l??null,solPerToken:l!=null?Number(l)/1e9:null,error:c}}M();var q$="https://api.save.finance",Y$="4UpD2fh7xH3VP9QQaXtsS1YY3bxzWhtfpks7FatyKvdY",FF="CCpirWrgNuBVLdkP2haxLTbD6XqEgaYuVXixbbpxUB6",V$=/^[1-9A-HJ-NP-Za-km-z]{32,44}$/;function hm(e={}){return String(e.baseUrl||process.env.SAVE_API_URL||process.env.SOLEND_API_URL||q$).replace(/\/$/,"")}function MF(e,t="address"){let r=String(e??"").trim();if(!V$.test(r))throw new Error(`solend-lending: ${t} must be a base58 public key`);return r}function UF(e){let t=Number(e);return Number.isFinite(t)?t:null}function J$(e={}){return{address:e.address||null,name:e.name||null,description:e.description||"",isPrimary:!!e.isPrimary,isPermissionless:!!e.isPermissionless,hidden:!!e.hidden,owner:e.owner||null,authorityAddress:e.authorityAddress||null,lookupTableAddress:e.lookupTableAddress||null,reserveCount:Array.isArray(e.reserves)?e.reserves.length:0,reserves:(e.reserves||[]).map(t=>({address:t.address||null,symbol:t.liquidityToken?.symbol||null,name:t.liquidityToken?.name||null,mint:t.liquidityToken?.mint||null,decimals:t.liquidityToken?.decimals??null,collateralMint:t.collateralMintAddress||null,pythOracle:t.pythOracle||null,switchboardOracle:t.switchboardOracle||null,volume24h:t.liquidityToken?.volume24h??null}))}}function W$(e={}){let t=e.reserve||{},r=t.liquidity||{},n=t.collateral||{};return{address:e.address||t.address||null,lendingMarket:t.lendingMarket||null,mint:r.mintPubkey||null,mintDecimals:r.mintDecimals??null,supplyApyPct:UF(e.rates?.supplyInterest),borrowApyPct:UF(e.rates?.borrowInterest),cTokenExchangeRate:e.cTokenExchangeRate??null,availableAmount:r.availableAmount??null,borrowedAmountWads:r.borrowedAmountWads??null,marketPrice:r.marketPrice??null,collateralMint:n.mintPubkey||null,collateralTotalSupply:n.mintTotalSupply??null,rewards:e.rewards||[],lastUpdateSlot:t.lastUpdate?.slot??null,stale:t.lastUpdate?.stale===1,raw:e}}async function LF(e={}){try{let t=await C(`${hm(e)}/v1/reserves?ids=${FF}`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??15e3}),r=Array.isArray(t?.results)?t.results:[];return{ok:r.length>0,provider:"solend-lending",probeReserve:FF,reserves:r.length,exec:!1}}catch(t){return{ok:!1,provider:"solend-lending",error:String(t?.message||t),exec:!1}}}async function gm(e={},t={}){let r=new URL(`${hm(t)}/v1/markets/configs`);e.scope&&r.searchParams.set("scope",String(e.scope)),e.deployment&&r.searchParams.set("deployment",String(e.deployment));let n=await C(r.toString(),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??(e.scope==="all"?45e3:2e4)}),o=(Array.isArray(n)?n:[]).map(J$);if(e.includeHidden!==!0&&(o=o.filter(s=>!s.hidden)),e.name){let s=String(e.name).toLowerCase();o=o.filter(a=>String(a.name||"").toLowerCase()===s)}let i=Number(e.limit);return Number.isFinite(i)&&i>0&&(o=o.slice(0,i)),{provider:"solend-lending",chain:"solana-mainnet-beta",scope:e.scope||"default",count:o.length,markets:o}}async function TF(e={},t={}){let r=[];if(e.ids||e.reserves)r=(Array.isArray(e.ids||e.reserves)?e.ids||e.reserves:String(e.ids||e.reserves).split(",")).map(a=>MF(String(a).trim(),"reserve"));else{let s=MF(e.market||e.marketAddress||Y$,"market"),A=(await gm({scope:"all",includeHidden:!0},t)).markets.find(c=>c.address===s);if(!A)throw new Error(`solend-lending: market ${s} not found`);r=A.reserves.map(c=>c.address).filter(Boolean)}if(!r.length)throw new Error("solend-lending: no reserves to query");let n=Number.isFinite(Number(e.limit))&&Number(e.limit)>0?Number(e.limit):50;r=r.slice(0,n);let o=await C(`${hm(t)}/v1/reserves?ids=${r.join(",")}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3}),i=(Array.isArray(o?.results)?o.results:[]).map((s,a)=>({...W$(s),address:s.address||s.reserve?.address||r[a]||null}));return{provider:"solend-lending",chain:"solana-mainnet-beta",requested:r.length,count:i.length,reserves:i}}function pm(e,t){let r;try{r=BigInt(e)}catch{throw new Error(`${t} must be a positive integer amount`)}if(r<=0n)throw new Error(`${t} must be a positive integer amount`);return r}function Pn(e,t,r,n){let o=Number(e);if(!Number.isInteger(o)||o<r||o>n)throw new Error(`${t} must be an integer between ${r} and ${n}`);return o}function ha(e={}){if(!Number.isInteger(Number(e.chainId))||Number(e.chainId)<=0)throw new Error("strategy requires chainId");if(!String(e.tokenIn||"").trim()||!String(e.tokenOut||"").trim())throw new Error("strategy requires tokenIn and tokenOut");if(!String(e.taker||"").trim())throw new Error("strategy requires taker");return{chainId:Number(e.chainId),tokenIn:String(e.tokenIn),tokenOut:String(e.tokenOut),taker:String(e.taker),total:pm(e.amount,"amount")}}function fm(e,t){let r=t.map(s=>BigInt(s)),n=r.reduce((s,a)=>s+a,0n);if(n<=0n)throw new Error("weights must total above zero");let o=r.map(s=>e*s/n),i=e-o.reduce((s,a)=>s+a,0n);for(let s=0;i>0n;s=(s+1)%o.length)o[s]+=1n,i-=1n;return o}function ga(e,t,r,n={}){return{kind:"execution-strategy-plan",strategy:t,chainId:e.chainId,tokenIn:e.tokenIn,tokenOut:e.tokenOut,taker:e.taker,totalAmount:String(e.total),slices:r,executable:!1,signs:!1,broadcasts:!1,requiresFreshQuotePerSlice:!0,requiresPolicyCheckPerSlice:!0,requiresSimulationPerSlice:!0,requiresUserConfirmationPerSlice:!0,receiptRequiredPerSlice:!0,...n}}function mm(e,t,r=Date.now()){let n=Math.floor(t/e.length);return e.map((o,i)=>({index:i+1,amount:String(o),offsetSec:i*n,executeAfter:new Date(r+i*n*1e3).toISOString()}))}function z$(e={},t={}){let r=ha(e),n=Pn(e.slices??10,"slices",2,100),o=Pn(e.durationSec??3600,"durationSec",n,604800),i=fm(r.total,Array(n).fill(1));return ga(r,"TWAP",mm(i,o,t.nowMs),{durationSec:o})}function K$(e={},t={}){let r=ha(e);if(!Array.isArray(e.volumeProfile)||e.volumeProfile.length<2||e.volumeProfile.length>100)throw new Error("volumeProfile must contain 2-100 positive weights");let n=e.volumeProfile.map(A=>{let c=Number(A);if(!Number.isFinite(c)||c<=0)throw new Error("volumeProfile must contain positive weights");return BigInt(Math.round(c*1e6))}),o=Pn(e.durationSec??3600,"durationSec",n.length,604800),i=fm(r.total,n),s=n.reduce((A,c)=>A+c,0n),a=mm(i,o,t.nowMs).map((A,c)=>({...A,volumeWeightBps:Number(n[c]*10000n/s)}));return ga(r,"VWAP",a,{durationSec:o,requiresLiveVolumeValidation:!0})}function j$(e={}){let t=ha(e),r=Pn(e.participationBps,"participationBps",1,1e4);if(!Array.isArray(e.observedMarketVolumes)||e.observedMarketVolumes.length===0||e.observedMarketVolumes.length>100)throw new Error("observedMarketVolumes must contain 1-100 positive integer amounts");let n=t.total,o=[];for(let[i,s]of e.observedMarketVolumes.entries()){let a=pm(s,"observedMarketVolumes"),A=a*BigInt(r)/10000n,c=A>n?n:A;if(c>0n&&o.push({index:i+1,amount:String(c),observedMarketVolume:String(a)}),n-=c,n===0n)break}return ga(t,"POV",o,{participationBps:r,residualAmount:String(n),requiresLiveVolumeValidation:!0})}function Z$(e={}){let t=ha(e),r=pm(e.displayAmount,"displayAmount");if(r>t.total)throw new Error("displayAmount cannot exceed total amount");let n=[],o=t.total;for(;o>0n;){if(n.length>=100)throw new Error("iceberg requires more than 100 refills");let i=o>r?r:o;n.push({index:n.length+1,amount:String(i),displayAmount:String(r)}),o-=i}return ga(t,"ICEBERG",n,{displayAmount:String(r),refillCount:n.length-1})}function X$(e={},t={}){let r=ha(e),n=Pn(e.slices??10,"slices",2,100),o=Pn(e.durationSec??3600,"durationSec",n,604800),i=Pn(e.urgencyBps??5e3,"urgencyBps",1,1e4),s=Array.from({length:n},(A,c)=>{let l=Math.floor(i*c/Math.max(1,n-1));return BigInt(Math.max(1,1e4-l))}),a=fm(r.total,s);return ga(r,"IS",mm(a,o,t.nowMs),{durationSec:o,urgencyBps:i})}function PF(e={},t={}){let r=String(e.strategy||"").trim().toUpperCase();if(r==="TWAP")return z$(e,t);if(r==="VWAP")return K$(e,t);if(r==="POV")return j$(e,t);if(r==="ICEBERG")return Z$(e,t);if(r==="IS"||r==="IMPLEMENTATION SHORTFALL")return X$(e,t);throw new Error("strategy must be TWAP, VWAP, POV, ICEBERG, or IS")}function _F(){return{ok:!0,provider:"execution-strategies",strategies:["TWAP","VWAP","POV","ICEBERG","IS"],execution:"plan-only",externalProtocol:!1}}var tz={"hl-info":{health:e=>Pb(e),allMids:e=>gr(e),l2Book:(e,t={})=>yc(t.coin,e),outcomeMeta:e=>Rs(e),clearinghouse:(e,t={})=>wc(t.user,e),userFills:(e,t={})=>_b(t.user,e),meta:e=>Ob(e),metaAndAssetCtxs:e=>qo(e),candleSnapshot:(e,t={})=>bc(t,e),openOrders:(e,t={})=>Hb(t.user,e),frontendOpenOrders:(e,t={})=>Gb(t.user,e),userState:(e,t={})=>kc(t.user,e),spotMeta:e=>Sc(e)},"hl-vaults":{health:e=>Jb(e),summaries:(e,t={})=>Yg(t,e),details:(e,t={})=>xc(t,e),userEquities:(e,t={})=>Vg(t,e),tracker:(e,t={})=>Jg(t,e)},"poly-public":{health:e=>$b(e),time:e=>Wg(e),markets:(e,t={})=>zb(t,e),book:(e,t={})=>Kb(t.tokenId,e),midpoint:(e,t={})=>jb(t.tokenId,e),spread:(e,t={})=>Zb(t.tokenId,e),price:(e,t={})=>Xb(t.tokenId,{side:t.side},e),events:(e,t={})=>ek(t,e)},"evm-rpc":{health:(e,t={})=>_o(t.chainId??1,e),healthAll:(e,t={})=>yg({...e,chainIds:t.chainIds}),blockNumber:(e,t={})=>ys(t.chainId??1,e),chainId:(e,t={})=>Cg(t.chainId??1,e),getBalance:(e,t={})=>wn(t.chainId??1,t.address,e),call:(e,t={})=>V(t.chainId??1,t.method,t.params||[],e),erc20Allowance:(e,t={})=>Qg(t,e),erc20Balance:(e,t={})=>ws(t,e),transactionReceipt:(e,t={})=>bs(t,e)},portfolio:{health:e=>bv(e),balances:(e,t={})=>wl(t,e),snapshot:(e,t={})=>Yv(t,e),history:(e,t={})=>kf(t,e),valueGraph:(e,t={})=>Vv(t,e)},"nft-portfolio":{health:e=>Nv(e),inventory:(e,t={})=>di(t,e),gallery:(e,t={})=>Lv(t,e),pnl:(e,t={})=>Uv(t,e),prepareList:(e,t={})=>Fv(t,e),traitSnipe:(e,t={})=>Mv(t,e)},"contract-risk":{health:e=>Jv(e),scan:(e,t={})=>Un(t,e)},"evm-token-sniper":{health:e=>zv(e),scan:(e,t={})=>$v(t,e)},"evm-simulate":{health:e=>jv(e),simulate:(e,t={})=>aa(t,e)},"nft-mint":{health:e=>Xv(e),discover:(e,t={})=>vl(t,e),prepare:(e,t={})=>Df(t,e),priceGas:(e,t={})=>Dl(t,e),createTrigger:(e,t={})=>eR(t,e),checkOpen:(e,t={})=>tR(t,e),evaluateMancerOs:(e,t={})=>oR(t,e)},"solana-rpc":{health:e=>rk(e),latestBlockhash:(e,t={})=>zg(t,e),getBalance:(e,t={})=>Dc(t,e),tokenAccounts:(e,t={})=>Ms(t,e),simulate:(e,t={})=>nk(t,e)},"bitcoin-esplora":{health:e=>ok(e),tipHeight:e=>ik(e),fees:e=>sk(e),address:(e,t={})=>Rc(t,e),utxos:(e,t={})=>ak(t,e),tx:(e,t={})=>Ak(t,e),decode:(e,t={})=>ck(t,e)},"bitcoin-meta":{health:e=>hk(e),runeBalances:(e,t={})=>Fc(t,e),inscriptions:(e,t={})=>Jo(t,e),inscriptionInfo:(e,t={})=>gk(t,e),inscriptionChildren:(e,t={})=>pk(t,e),ordBlockInfo:(e,t={})=>fk(t,e)},satflow:{health:e=>Ek(e),collectionFloors:(e,t={})=>Ik(t,e),collectionStats:(e,t={})=>Bk(t,e),item:(e,t={})=>Ck(t,e),walletContents:(e,t={})=>Uc(t,e),floorListings:(e,t={})=>Qk(t,e),preparePurchase:(e,t={})=>wk(t,e),prepareList:(e,t={})=>Lc(t,e)},jupiter:{health:e=>Nk(e),venues:(e,t={})=>Rk(t,e),quote:(e,t={})=>_c(t,e),prepare:(e,t={})=>Fk(t,e)},defillama:{health:e=>Uk(e),prices:(e,t={})=>Sn(t.coins||[],e),pricesBySymbol:(e,t={})=>Ok(t.symbols,e),protocols:e=>Lk(e),yields:(e,t={})=>Tk(t,e),stablecoins:(e,t={})=>Pk(t,e),dexVolumes:(e,t={})=>_k(t,e)},lifi:{health:e=>Wk(e),quote:(e,t={})=>Ls(t,e),prepare:(e,t={})=>$k(t,e),chains:e=>zk(e)},dexscreener:{health:e=>nb(e),token:(e,t={})=>bn(t.address||t.tokenAddress,e),search:(e,t={})=>ks(t.q||t.query,e),pair:(e,t={})=>ob(t.chainId,t.pairAddress,e)},"uniswap-v3":{health:(e,t={})=>Eb({...e,chainId:t.chainId??8453}),quote:(e,t={})=>Oo(t,e),prepare:(e,t={})=>mb(t,e),quotePath:(e,t={})=>fb(t,e),ethUsdc:(e,t={})=>Rg(t,e),chains:()=>Ib()},"uniswap-v4":{health:(e,t={})=>kb({...e,chainId:t.chainId??8453}),quote:(e,t={})=>wb(t,e),chains:()=>bb()},aerodrome:{health:(e,t={})=>nS({...e,chainId:t.chainId??8453}),quote:(e,t={})=>Gc(t,e),prepare:(e,t={})=>rS(t,e),chains:()=>oS()},zerox:{health:e=>AS(e),price:(e,t={})=>up(t,e),quote:(e,t={})=>Ps(t,e),prepare:(e,t={})=>cS(t,e)},across:{health:e=>lS(e),suggestedFees:(e,t={})=>dp(t,e)},hop:{health:e=>uS(e),quote:(e,t={})=>hp(t,e)},relay:{health:e=>dS(e),quote:(e,t={})=>Yc(t,e),prepare:(e,t={})=>hS(t,e)},cowswap:{health:e=>ES(e),quote:(e,t={})=>Wo(t,e),prepareOrder:(e,t={})=>IS(t,e),order:(e,t={})=>CS(t,e),status:(e,t={})=>BS(t,e),chains:()=>QS()},oneinch:{health:e=>wS(e),quote:(e,t={})=>Bp(t,e),prepare:(e,t={})=>bS(t,e),approveSpender:(e,t={})=>Cp(t,e)},"hl-ws":{health:e=>kS(e),allMids:e=>SS(e),l2Book:(e,t={})=>xS(t.coin,e),snapshot:(e,t={})=>Hs(t.subscription||t,e)},"poly-ws":{health:(e,t={})=>DS({...e,assetId:t.assetId}),book:(e,t={})=>vS(t.assetId||t.tokenId,e),snapshot:(e,t={})=>Jc(t.assetIds||t.assets_ids||[t.assetId],e)},"opensea-nft":{health:e=>GS(e),collection:(e,t={})=>Gs(t.slug,e),floor:(e,t={})=>qS(t.slug,e),bestListings:(e,t={})=>Kc(t,e),accountNfts:(e,t={})=>qs(t,e),accountPnl:(e,t={})=>$c(t,e),prepareBuy:(e,t={})=>ZS(t,e),prepareSweep:(e,t={})=>XS(t,e),prepareMint:(e,t={})=>ex(t,e),prepareList:(e,t={})=>jc(t,e),prepareCancel:(e,t={})=>tx(t,e)},"hl-outcome":{list:e=>Tx(e),prepareOrder:(e,t={})=>Px(t,e),prepareCancel:(e,t={})=>_x(t,e)},"protocol-templates":{health:()=>({ok:!0,templates:ul().map(e=>e.id),nativeTemplates:Zp().map(e=>e.id),families:["evm","solana","bitcoin"],firmAudit:!1}),list:()=>ul(),listNative:()=>Zp(),gate:(e,t={})=>Wp(t.templateId||t.id,e),prepareDeploy:(e,t={})=>iD(t,e),buildNative:(e,t={})=>hD(t)},"poly-clob":{prepareOrder:(e,t={})=>Vx(t||{})},"hl-perps":{health:e=>Tp(e),assetInfo:(e,t={})=>vn(t,e),prepareOrder:(e,t={})=>zs(t,e),prepareCancel:(e,t={})=>il(t,e),prepareLeverage:(e,t={})=>Mx(t,e),prepareIsolatedMargin:(e,t={})=>Ux(t,e),prepareBracket:(e,t={})=>Lx(t,e),prepareBuilderApproval:(e,t={})=>Fx(t,e)},"hl-markets":{health:e=>Tp(e),markets:(e,t={})=>el(t,e),leaderboards:(e,t={})=>Cx(t,e),coin:(e,t={})=>Qx(t,e),spot:(e,t={})=>yx(t,e)},"magiceden-sol":{health:e=>ax(e),stats:(e,t={})=>Dp(t,e),listings:(e,t={})=>cx(t,e),tokenListings:(e,t={})=>lx(t,e),prepareBuy:(e,t={})=>ux(t,e),prepareList:(e,t={})=>Zc(t,e),prepareMint:(e,t={})=>dx(t,e)},"hl-staking":{health:e=>gx(e),validators:e=>Np(e),delegatorSummary:(e,t={})=>Fp(t,e),delegations:(e,t={})=>Mp(t,e),rewards:(e,t={})=>px(t,e),history:(e,t={})=>fx(t,e),preflight:(e,t={})=>Bx(t,e),prepareStakeDeposit:(e,t={})=>mx(t,e),prepareStakeWithdraw:(e,t={})=>Ex(t,e),prepareDelegate:(e,t={})=>Ix(t,e)},"hyperevm-dex":{health:e=>nx(e),search:(e,t={})=>ox(t.q||t.query||"HYPE",e),token:(e,t={})=>ix(t.address||t.tokenAddress,e)},geckoterminal:{health:e=>mD(e),networks:(e,t={})=>Xp(t,e),pool:(e,t={})=>gD(t,e),token:(e,t={})=>pD(t,e),ohlcv:(e,t={})=>fD(t,e)},curve:{health:e=>vD(e),openapi:e=>DD(e),pools:(e,t={})=>tf(t,e),quote:(e,t={})=>rf(t,e),prepare:(e,t={})=>RD(t,e)},gmx:{health:e=>GD(e),tickers:(e,t={})=>ml(t,e),markets:(e,t={})=>OD(t,e),marketsInfo:(e,t={})=>of(t,e),tokens:(e,t={})=>HD(t,e),prepareOrder:(e,t={})=>JD(t,e),positions:(e,t={})=>qD(t,e),orderStatus:(e,t={})=>YD(t,e),verifyOrder:(e,t={})=>VD(t,e)},morpho:{health:e=>KD(e),markets:(e,t={})=>zD(t,e),vaults:(e,t={})=>Af(t,e),prepareVault:(e,t={})=>jD(t,e)},balancer:{health:e=>iv(e),pools:(e,t={})=>ov(t,e),quote:(e,t={})=>uf(t,e),prepare:(e,t={})=>sv(t,e)},pendle:{health:e=>Av(e),markets:(e,t={})=>hf(t,e),quote:(e,t={})=>cv(t,e),prepare:(e,t={})=>gf(t,e)},odos:{health:e=>hv(e),chains:e=>ff(e),quote:(e,t={})=>uv(t,e),prepare:(e,t={})=>dv(t,e)},blockscout:{health:e=>Cv(e),stats:(e,t={})=>If(t,e),address:(e,t={})=>mv(t,e),token:(e,t={})=>Ev(t,e)},paraswap:{health:e=>sR(e),tokens:(e,t={})=>Nf(t,e),price:(e,t={})=>mi(t,e),quote:(e,t={})=>mi(t,e),prepare:(e,t={})=>iR(t,e)},rfq:{health:e=>BR(e),intent:(e,t={})=>ER(t,e),quote:(e,t={})=>IR(t,e)},"polygon-staking":{health:e=>$R(e),validators:(e,t={})=>JR(t,e),validatorDetail:(e,t={})=>WR(t,e)},"aave-v3":{health:e=>ZR(e),markets:(e,t={})=>zR(t,e),marketReserves:(e,t={})=>KR(t,e),chains:e=>jR(e)},"babylon-staking":{health:e=>eN(e),stats:e=>tN(e),finalityProviders:e=>rN(e),delegations:(e,t={})=>nN(t,e)},"bisq-markets":{health:e=>iN(e),markets:e=>sN(e),ticker:(e,t={})=>aN(t,e),trades:(e,t={})=>AN(t,e)},"bob-rootstock":{health:(e,t={})=>lN(t.chainId,e),stats:(e,t={})=>Wf(t,e),addressInfo:(e,t={})=>uN(t,e),tokenBalances:(e,t={})=>dN(t,e)},"braiins-insights":{health:e=>hN(e),priceStats:e=>gN(e),poolStats:e=>pN(e)},"cow-protocol":{health:e=>yN(e),auction:e=>BN(e),openOrders:(e,t={})=>CN(t,e),recentTrades:(e,t={})=>QN(t,e)},"hiro-stacks":{health:e=>wN(e),networkInfo:e=>bN(e),stackingInfo:e=>kN(e),poxCycles:e=>SN(e),blocks:(e,t={})=>xN(t,e)},"jito-mev":{health:e=>RN(e),recentBundles:(e,t={})=>NN(t,e),tipFloor:e=>FN(e)},"kamino-strategies":{health:e=>UN(e),strategies:(e,t={})=>LN(t,e),strategyMetrics:(e,t={})=>TN(t,e)},"liquid-esplora":{health:e=>HN(e),tipHeight:e=>GN(e),addressInfo:(e,t={})=>qN(t,e),assetInfo:(e,t={})=>YN(t,e)},"magiceden-ordinals":{health:e=>WN(e),collectionStat:(e,t={})=>$N(t,e)},"mempool-lightning":{health:e=>KN(e),statistics:e=>jN(e),nodeRankings:(e,t={})=>ZN(t,e),nodeCountries:e=>XN(e)},"mempool-mining":{health:e=>rF(e),difficulty:e=>nF(e),poolShare:(e,t={})=>oF(t,e),hashrate:(e,t={})=>iF(t,e),rewardStats:(e,t={})=>sF(t,e)},"meteora-dlmm":{health:e=>cF(e),pools:(e,t={})=>lF(t,e),poolSearch:(e,t={})=>uF(t,e)},"ordinals-runes":{health:e=>hF(e),blockHeight:e=>gF(e),blockInfo:(e,t={})=>pF(t,e),satInfo:(e,t={})=>fF(t,e),runeInfo:(e,t={})=>mF(t,e)},"pyth-price-feeds":{health:e=>BF(e),latestPrice:(e,t={})=>CF(t,e),latestPrices:(e,t={})=>QF(t,e),feedDirectory:e=>yF(e)},"relayscan-mev":{health:e=>xF(e),overview:(e,t={})=>lm(t,e),builderProfit:(e,t={})=>kF(t,e),dailyStats:(e,t={})=>SF(t,e)},"sanctum-lst":{health:e=>vF(e),lstList:e=>dm(e),apyAll:e=>RF(e),apyIndividual:(e,t={})=>NF(t,e)},"solend-lending":{health:e=>LF(e),markets:e=>gm(e),reserves:(e,t={})=>TF(t,e)},"execution-strategies":{health:()=>_F(),plan:(e,t={})=>PF(t)},"across-bridge":{health:e=>CR(e),pools:(e,t={})=>QR(t,e),suggestedFees:(e,t={})=>yR(t,e)},"beefy-yields":{health:e=>wR(e),apy:(e,t={})=>bR(t,e),apyBreakdown:e=>kR(e)},"birdeye-tokens":{health:e=>xR(e),tokenList:(e,t={})=>DR(t,e)},"celestia-da":{health:e=>vR(e),stats:e=>RR(e),blockStats:(e,t={})=>NR(t,e)},"das-assets":{health:e=>FR(e),assetsByOwner:(e,t={})=>MR(t,e),searchAssets:(e,t={})=>UR(t,e),assetProof:(e,t={})=>LR(t,e)},"l2beat-tvl":{health:e=>TR(e),tvl:(e,t={})=>PR(t,e),activity:(e,t={})=>_R(t,e)},"spark-lend":{health:e=>OR(e),markets:(e,t={})=>HR(t,e)},"symbiotic-restaking":{health:e=>GR(e),vaults:(e,t={})=>qR(t,e),vaultDetail:(e,t={})=>YR(t,e)}},OF=new Set(["prepareBuilderApproval","prepareBracket","prepareIsolatedMargin","prepareLeverage","prepareCancel","prepareOrder","preparePurchase","prepareList","prepareSell","prepareBuy","prepareMint","prepare","prepareStakeDeposit","prepareStakeWithdraw","prepareDelegate","prepareSwap","prepareTransfer","createOrder","cancelOrder"]),HF=new Set(["hl-exec"]);function rz(e){return HF.has(String(e||""))}function nz(e,t,r={}){let n=String(t||""),o=`${e}.${n}`;if(HF.has(e))throw new Error(`data plane forbidden execution provider: ${e}`);let i=Qc().find(s=>s.id===e);if(/sign|execute|broadcast|submit|send|write|place/i.test(n)&&!OF.has(n))throw new Error(`data plane forbidden op: ${o}`);if(i&&Array.isArray(i.ops)&&i.ops.length>0&&!i.ops.includes(n))throw new Error(`data plane: provider ${e} does not support op ${n}`);if(OF.has(n)&&r&&typeof r=="object"&&Object.defineProperty(r,"__oracleStateCreating",{value:!0,enumerable:!1,configurable:!0}),e==="evm-rpc"&&n==="call"){let s=String(r?.method||"").trim();if(!new Set(["eth_call","eth_getBalance","eth_blockNumber","eth_chainId","eth_getCode","eth_getLogs","eth_getTransactionByHash","eth_getTransactionReceipt","eth_getBlockByNumber","eth_getBlockByHash","eth_feeHistory","eth_gasPrice","eth_maxPriorityFeePerGas","net_version","web3_clientVersion"]).has(s))throw new Error(`data plane allows only read-only JSON-RPC methods through evm-rpc.call: ${s||"<missing>"}`)}}async function y(e,t,r={},n={}){if(rz(e))throw new Error(`${e} is an execution provider: it signs and submits with a real key. dataCall() is the public read plane and will not route to it.`);nz(e,t,r);let o=Og(e);if(!o)throw new Error(`Unknown data provider: ${e}`);if(!o.ops.includes(t))throw new Error(`Provider ${e} does not support op '${t}' (has: ${o.ops.join(", ")})`);let i=tz[e];if(!i||typeof i[t]!="function")throw new Error(`No client implementation for ${e}.${t}`);return i[t](n,r)}async function oz({providers:e,fetchImpl:t,timeoutMs:r,includeRpc:n,includeWs:o,concurrency:i,healthCall:s}={}){let a=e||Qc().map(u=>u.id);!o&&!e&&(a=a.filter(u=>u!=="hl-ws"&&u!=="poly-ws"));let A={fetchImpl:t,timeoutMs:r??8e3},c=typeof s=="function"?s:(u,d,h)=>y(u,"health",d,h),l={};return await Po(a,i??8,async u=>{if(!Og(u)){l[u]={ok:!1,ms:0,reason:"transport",error:"unknown provider"};return}let d=u==="evm-rpc"?{chainId:1}:{},h=await Fe(()=>c(u,d,A));if(!h.ok){l[u]={ok:!1,ms:h.ms,reason:"transport",error:h.error};return}let g=h.data;if(g&&typeof g=="object"&&g.ok===!1){l[u]={ok:!1,ms:h.ms,reason:"provider",error:g.error||g.message||"provider reported unhealthy",detail:g};return}l[u]={ok:!0,ms:h.ms,detail:g}}),{when:new Date().toISOString(),plane:"data",exec:"local-signer",providers:l}}function GF(e){return Array.isArray(e.localSignerSurfaces)?e.localSignerSurfaces:[]}function iz(e){return e.execution==="prepare"&&GF(e).length?"armed-local":e.execution||"read-only"}function sz(){return Qc().map(e=>({id:e.id,venue:e.venue,chainIds:e.chainIds,auth:e.auth,ops:e.ops,execution:iz(e),localSignerSurfaces:GF(e),description:e.description}))}var Hte={catalog:sz,health:oz,call:y,hl:{health:e=>y("hl-info","health",{},e),allMids:e=>y("hl-info","allMids",{},e),l2Book:(e,t)=>y("hl-info","l2Book",{coin:e},t),outcomeMeta:e=>y("hl-info","outcomeMeta",{},e),clearinghouse:(e,t)=>y("hl-info","clearinghouse",{user:e},t),userFills:(e,t)=>y("hl-info","userFills",{user:e},t),meta:e=>y("hl-info","meta",{},e),metaAndAssetCtxs:e=>y("hl-info","metaAndAssetCtxs",{},e),candleSnapshot:(e,t)=>y("hl-info","candleSnapshot",e||{},t),openOrders:(e,t)=>y("hl-info","openOrders",{user:e},t),userState:(e,t)=>y("hl-info","userState",{user:e},t),spotMeta:e=>y("hl-info","spotMeta",{},e),vaults:{health:e=>y("hl-vaults","health",{},e),summaries:(e,t)=>y("hl-vaults","summaries",e||{},t),details:(e,t)=>y("hl-vaults","details",e||{},t),mine:(e,t)=>y("hl-vaults","userEquities",{user:e},t),track:(e,t)=>y("hl-vaults","tracker",e||{},t)},staking:{health:e=>y("hl-staking","health",{},e),validators:e=>y("hl-staking","validators",{},e),summary:(e,t)=>y("hl-staking","delegatorSummary",{user:e},t),delegations:(e,t)=>y("hl-staking","delegations",{user:e},t),rewards:(e,t)=>y("hl-staking","rewards",{user:e},t),history:(e,t)=>y("hl-staking","history",{user:e},t),preflight:(e,t)=>y("hl-staking","preflight",{user:e},t),prepareStake:(e,t)=>y("hl-staking","prepareStakeDeposit",e||{},t),prepareUnstake:(e,t)=>y("hl-staking","prepareStakeWithdraw",e||{},t),prepareDelegate:(e,t)=>y("hl-staking","prepareDelegate",e||{},t)}},poly:{health:e=>y("poly-public","health",{},e),time:e=>y("poly-public","time",{},e),markets:(e,t)=>y("poly-public","markets",e||{},t),book:(e,t)=>y("poly-public","book",{tokenId:e},t),midpoint:(e,t)=>y("poly-public","midpoint",{tokenId:e},t),spread:(e,t)=>y("poly-public","spread",{tokenId:e},t),price:(e,t,r)=>y("poly-public","price",{tokenId:e,side:t},r),events:(e,t)=>y("poly-public","events",e||{},t)},polyClob:{prepareOrder:(e,t)=>y("poly-clob","prepareOrder",e||{},t)},rpc:{health:(e,t)=>y("evm-rpc","health",{chainId:e},t),healthAll:(e,t)=>y("evm-rpc","healthAll",e||{},t),blockNumber:(e,t)=>y("evm-rpc","blockNumber",{chainId:e},t),getBalance:(e,t,r)=>y("evm-rpc","getBalance",{chainId:e,address:t},r),call:(e,t,r,n)=>y("evm-rpc","call",{chainId:e,method:t,params:r},n)},evmSniper:{health:e=>y("evm-token-sniper","health",{},e),scan:(e,t)=>y("evm-token-sniper","scan",e||{},t)},portfolio:{balance:(e,t)=>y("portfolio","balances",e||{},t),snapshot:(e,t)=>y("portfolio","snapshot",e||{},t),history:(e,t)=>y("portfolio","history",e||{},t),valueGraph:(e,t)=>y("portfolio","valueGraph",e||{},t)},nft:{inventory:(e,t)=>y("nft-portfolio","inventory",e||{},t),gallery:(e,t)=>y("nft-portfolio","gallery",e||{},t),pnl:(e,t)=>y("nft-portfolio","pnl",e||{},t),prepareList:(e,t)=>y("nft-portfolio","prepareList",e||{},t),traitSnipe:(e,t)=>y("nft-portfolio","traitSnipe",e||{},t),floor:(e,t)=>y("opensea-nft","floor",{slug:e},t),collection:(e,t)=>y("opensea-nft","collection",{slug:e},t),bestListings:(e,t)=>y("opensea-nft","bestListings",e||{},t),prepareBuy:(e,t)=>y("opensea-nft","prepareBuy",e||{},t),prepareSweep:(e,t)=>y("opensea-nft","prepareSweep",e||{},t),prepareMint:(e,t)=>y("opensea-nft","prepareMint",e||{},t),prepareCancel:(e,t)=>y("opensea-nft","prepareCancel",e||{},t)},solana:{health:e=>y("solana-rpc","health",{},e),latestBlockhash:(e,t)=>y("solana-rpc","latestBlockhash",e||{},t),balance:(e,t)=>y("solana-rpc","getBalance",{address:e},t),tokenAccounts:(e,t)=>y("solana-rpc","tokenAccounts",e||{},t),simulate:(e,t)=>y("solana-rpc","simulate",e||{},t),jupiterQuote:(e,t)=>y("jupiter","quote",e||{},t),jupiterPrepare:(e,t)=>y("jupiter","prepare",e||{},t),nftStats:(e,t)=>y("magiceden-sol","stats",e||{},t),nftListings:(e,t)=>y("magiceden-sol","listings",e||{},t),nftTokenListings:(e,t)=>y("magiceden-sol","tokenListings",e||{},t),nftPrepareBuy:(e,t)=>y("magiceden-sol","prepareBuy",e||{},t),nftPrepareList:(e,t)=>y("magiceden-sol","prepareList",e||{},t),nftPrepareMint:(e,t)=>y("magiceden-sol","prepareMint",e||{},t)},bitcoin:{health:e=>y("bitcoin-esplora","health",{},e),tipHeight:e=>y("bitcoin-esplora","tipHeight",{},e),fees:e=>y("bitcoin-esplora","fees",{},e),address:(e,t)=>y("bitcoin-esplora","address",{address:e},t),utxos:(e,t)=>y("bitcoin-esplora","utxos",{address:e},t),tx:(e,t)=>y("bitcoin-esplora","tx",{txid:e},t),decode:(e,t)=>y("bitcoin-esplora","decode",e||{},t),metaHealth:e=>y("bitcoin-meta","health",{},e),runeBalances:(e,t)=>y("bitcoin-meta","runeBalances",{address:e},t),inscriptions:(e,t)=>y("bitcoin-meta","inscriptions",{address:e},t),satflowHealth:e=>y("satflow","health",{},e),satflowFloors:(e,t)=>y("satflow","collectionFloors",e||{},t),satflowWallet:(e,t)=>y("satflow","walletContents",{address:e},t)},prices:{health:e=>y("defillama","health",{},e),current:(e,t)=>y("defillama","prices",{coins:e},t),bySymbol:(e,t)=>y("defillama","pricesBySymbol",{symbols:e},t),protocols:e=>y("defillama","protocols",{},e)},lifi:{health:e=>y("lifi","health",{},e),quote:(e,t)=>y("lifi","quote",e||{},t),chains:e=>y("lifi","chains",{},e)},dex:{health:e=>y("dexscreener","health",{},e),token:(e,t)=>y("dexscreener","token",{address:e},t),search:(e,t)=>y("dexscreener","search",{q:e},t),pair:(e,t,r)=>y("dexscreener","pair",{chainId:e,pairAddress:t},r)},uni:{health:(e,t)=>y("uniswap-v3","health",e||{},t),quote:(e,t)=>y("uniswap-v3","quote",e||{},t),quotePath:(e,t)=>y("uniswap-v3","quotePath",e||{},t),ethUsdc:(e,t)=>y("uniswap-v3","ethUsdc",e||{},t),chains:e=>y("uniswap-v3","chains",{},e)},univ4:{health:(e,t)=>y("uniswap-v4","health",e||{},t),quote:(e,t)=>y("uniswap-v4","quote",e||{},t),chains:e=>y("uniswap-v4","chains",{},e)},bridges:{across:(e,t)=>y("across","suggestedFees",e||{},t),hop:(e,t)=>y("hop","quote",e||{},t),relay:(e,t)=>y("relay","quote",e||{},t)},cow:{quote:(e,t)=>y("cowswap","quote",e||{},t)},hlWs:{allMids:e=>y("hl-ws","allMids",{},e),l2Book:(e,t)=>y("hl-ws","l2Book",{coin:e},t)},polyWs:{book:(e,t)=>y("poly-ws","book",{assetId:e},t)}};export{HF as EXECUTION_PROVIDERS,nz as assertDataOpAllowed,Hte as data,y as dataCall,sz as dataCatalog,oz as dataHealth,rz as isExecutionProvider};
|