@oracle-agent/oracle 0.24.7 → 0.24.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +49 -45
  2. package/SECURITY.md +1 -1
  3. package/SETUP.md +16 -13
  4. package/dist/assets/profiles/_template/SOUL.md +2 -2
  5. package/dist/assets/profiles/oracle/SOUL.md +11 -13
  6. package/dist/assets/profiles/profile.schema.json +1 -1
  7. package/dist/assets/profiles/robinhood-agent/SOUL.md +5 -5
  8. package/dist/assets/skills/multi-venue-prepare-only-ranking/SKILL.md +2 -2
  9. package/dist/assets/skills/oracle-action-semantics/SKILL.md +5 -5
  10. package/dist/assets/skills/oracle-chat/SKILL.md +8 -8
  11. package/dist/assets/skills/oracle-desk-product/SKILL.md +1 -1
  12. package/dist/assets/skills/oracle-receipts/SKILL.md +2 -2
  13. package/dist/bin/desk-server.mjs +80 -36
  14. package/dist/bin/oracle-data-mcp.mjs +51 -7
  15. package/dist/bin/oracle-gateway.mjs +13 -15
  16. package/dist/bin/oracle-init.mjs +9 -9
  17. package/dist/bin/oracle-public-server.mjs +48 -4
  18. package/dist/bin/oracle-route.mjs +66 -22
  19. package/dist/bin/oracle-scan.mjs +58 -14
  20. package/dist/cli/commands/chat.mjs +140 -96
  21. package/dist/cli/commands/doctor.mjs +6 -6
  22. package/dist/cli/commands/eval.mjs +17 -17
  23. package/dist/cli/commands/farm.mjs +72 -28
  24. package/dist/cli/commands/follow.mjs +61 -17
  25. package/dist/cli/commands/model.mjs +147 -103
  26. package/dist/cli/commands/receipt.mjs +3 -3
  27. package/dist/cli/commands/resolve.mjs +55 -11
  28. package/dist/cli/commands/setup.mjs +27 -27
  29. package/dist/cli/commands/sign.mjs +14 -13
  30. package/dist/cli/commands/signer.mjs +12 -17
  31. package/dist/cli/commands/strategy.mjs +50 -6
  32. package/dist/cli/commands/swap.mjs +72 -29
  33. package/dist/cli/commands/venues.mjs +3 -3
  34. package/dist/data/desk-data.mjs +78 -34
  35. package/dist/data/names.mjs +46 -2
  36. package/dist/data/providers/farming.mjs +46 -2
  37. package/dist/index.mjs +83 -39
  38. package/dist/local-signer/index.mjs +1 -1
  39. package/dist/router/index.mjs +46 -2
  40. package/dist/router/prepare-bridge.mjs +46 -2
  41. package/dist/scanner/index.mjs +48 -4
  42. package/dist/strategy/index.mjs +47 -3
  43. package/package.json +5 -3
  44. package/public/install.ps1 +1 -1
  45. package/public/install.sh +5 -4
  46. package/public/oracle-splash/_variants/ice.html +3 -3
  47. package/public/oracle-splash/_variants/ivory.html +3 -3
  48. package/public/oracle-splash/downloads/index.html +5 -5
  49. package/public/oracle-splash/index.html +7 -7
  50. package/public/oracle-splash/install.ps1 +1 -1
  51. package/public/oracle-splash/install.sh +5 -4
@@ -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
- - ${n.join(`
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
- ${m.stderr}`)}if(!Ge(ye(o,"lib","openzeppelin-contracts"))){let m=Et(a,["install","OpenZeppelin/openzeppelin-contracts@v5.0.2","--no-git"],o);if(!m.ok)throw new Error(`protocol-templates: forge install openzeppelin failed
7
- ${m.stderr}`)}let i=ye(o,"lib","openzeppelin-contracts","package.json"),s=Ge(i)?JSON.parse(Tr(i,"utf8")).version:null;if(s!==n.dependency.version)throw new Error(`protocol-templates: OpenZeppelin ${n.dependency.version} required, found ${s||"unknown"}`);let c=Et(a,["build","-q"],o);if(!c.ok)throw new Error(`protocol-templates: forge build FAILED for ${e}
8
- ${c.stderr}`.slice(0,2e3));let l=Et(a,["test","-q"],o);if(!l.ok)throw new Error(`protocol-templates: forge test FAILED for ${e}
9
- ${l.stdout}
10
- ${l.stderr}`.slice(0,2e3));let u={tool:null,ok:!0,skipped:!0,reason:"slither not installed"},d=Fw();if(d){let m=Et(d,[".","--filter-paths","lib","--exclude-dependencies"],o);if(u={tool:"slither",ok:m.ok,skipped:!1,stdout:(m.stdout||"").slice(0,1500),stderr:(m.stderr||"").slice(0,500)},!m.ok&&!t.allowStaticFail)throw new Error(`protocol-templates: slither FAILED for ${e}
11
- ${m.stdout}
12
- ${m.stderr}`.slice(0,2e3))}else if(!r)throw new Error("protocol-templates: slither required (allowSkipStatic=false) but not installed");let p=qw(o);return{ok:!0,templateId:e,metadata:n,path:o,forgeTests:{ok:!0,tool:"forge",summary:"forge test passed"},forgeBuild:{ok:!0,tool:"forge",summary:"forge build passed"},staticAnalysis:u,sourceHash:p,disclaimer:Nr,firmAudit:!1}}function wd(e,t={}){let n=Fa(e,t),r=yd(),o=n.path,a=Et(r,["build","-q"],o);if(!a.ok)throw new Error(`protocol-templates: forge build failed
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 TF=Object.create;var Pl=Object.defineProperty;var _F=Object.getOwnPropertyDescriptor;var PF=Object.getOwnPropertyNames;var OF=Object.getPrototypeOf,HF=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 ha=(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}},GF=(e,t)=>{for(var r in t)Pl(e,r,{get:t[r],enumerable:!0})},qF=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of PF(t))!HF.call(e,o)&&o!==r&&Pl(e,o,{get:()=>t[o],enumerable:!(n=_F(t,o))||n.enumerable});return e};var YF=(e,t,r)=>(r=e!=null?TF(OF(e)):{},qF(t||!e||!e.__esModule?Pl(r,"default",{value:e,enumerable:!0}):r,e));var Ie=b((X$,gm)=>{gm.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((ez,Pm)=>{"use strict";var pm=Symbol.for("undici.error.UND_ERR"),Ce=class extends Error{constructor(t){super(t),this.name="UndiciError",this.code="UND_ERR"}static[Symbol.hasInstance](t){return t&&t[pm]===!0}[pm]=!0},fm=Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT"),Ol=class extends Ce{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[fm]===!0}[fm]=!0},mm=Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT"),Hl=class extends Ce{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[mm]===!0}[mm]=!0},Em=Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW"),Gl=class extends Ce{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[Em]===!0}[Em]=!0},Im=Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT"),ql=class extends Ce{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[Im]===!0}[Im]=!0},Cm=Symbol.for("undici.error.UND_ERR_RESPONSE_STATUS_CODE"),Yl=class extends Ce{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[Cm]===!0}[Cm]=!0},Bm=Symbol.for("undici.error.UND_ERR_INVALID_ARG"),Vl=class extends Ce{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[Bm]===!0}[Bm]=!0},Qm=Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE"),Jl=class extends Ce{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[Qm]===!0}[Qm]=!0},ym=Symbol.for("undici.error.UND_ERR_ABORT"),ga=class extends Ce{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[ym]===!0}[ym]=!0},wm=Symbol.for("undici.error.UND_ERR_ABORTED"),Wl=class extends ga{constructor(t){super(t),this.name="AbortError",this.message=t||"Request aborted",this.code="UND_ERR_ABORTED"}static[Symbol.hasInstance](t){return t&&t[wm]===!0}[wm]=!0},bm=Symbol.for("undici.error.UND_ERR_INFO"),$l=class extends Ce{constructor(t){super(t),this.name="InformationalError",this.message=t||"Request information",this.code="UND_ERR_INFO"}static[Symbol.hasInstance](t){return t&&t[bm]===!0}[bm]=!0},km=Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"),zl=class extends Ce{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[km]===!0}[km]=!0},Sm=Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH"),Kl=class extends Ce{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[Sm]===!0}[Sm]=!0},xm=Symbol.for("undici.error.UND_ERR_DESTROYED"),jl=class extends Ce{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[xm]===!0}[xm]=!0},Dm=Symbol.for("undici.error.UND_ERR_CLOSED"),Zl=class extends Ce{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[Dm]===!0}[Dm]=!0},vm=Symbol.for("undici.error.UND_ERR_SOCKET"),Xl=class extends Ce{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[vm]===!0}[vm]=!0},Rm=Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED"),eu=class extends Ce{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[Rm]===!0}[Rm]=!0},Nm=Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM"),tu=class extends Ce{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[Nm]===!0}[Nm]=!0},Fm=Symbol.for("undici.error.UND_ERR_HTTP_PARSER"),ru=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[Fm]===!0}[Fm]=!0},Mm=Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE"),nu=class extends Ce{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[Mm]===!0}[Mm]=!0},Um=Symbol.for("undici.error.UND_ERR_REQ_RETRY"),ou=class extends Ce{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[Um]===!0}[Um]=!0},Lm=Symbol.for("undici.error.UND_ERR_RESPONSE"),iu=class extends Ce{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[Lm]===!0}[Lm]=!0},Tm=Symbol.for("undici.error.UND_ERR_PRX_TLS"),su=class extends Ce{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[Tm]===!0}[Tm]=!0},_m=Symbol.for("undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"),au=class extends Ce{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[_m]===!0}get[_m](){return!0}};Pm.exports={AbortError:ga,HTTPParserError:ru,UndiciError:Ce,HeadersTimeoutError:Hl,HeadersOverflowError:Gl,BodyTimeoutError:ql,RequestContentLengthMismatchError:zl,ConnectTimeoutError:Ol,ResponseStatusCodeError:Yl,InvalidArgumentError:Vl,InvalidReturnValueError:Jl,RequestAbortedError:Wl,ClientDestroyedError:jl,ClientClosedError:Zl,InformationalError:$l,SocketError:Xl,NotSupportedError:eu,ResponseContentLengthMismatchError:Kl,BalancedPoolMissingUpstreamError:tu,ResponseExceededMaxSizeError:nu,RequestRetryError:ou,ResponseError:iu,SecureProxyConnectionError:su,MessageSizeExceededError:au}});var fa=b((tz,Om)=>{"use strict";var pa={},Au=["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<Au.length;++e){let t=Au[e],r=t.toLowerCase();pa[t]=pa[r]=r}Object.setPrototypeOf(pa,null);Om.exports={wellknownHeaderNames:Au,headerNameLowerCasedRecord:pa}});var Ym=b((rz,qm)=>{"use strict";var{wellknownHeaderNames:Hm,headerNameLowerCasedRecord:VF}=fa(),cu=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}},ma=class{node=null;insert(t,r){this.node===null?this.node=new cu(t,r,0):this.node.add(t,r)}lookup(t){return this.node?.search(t)?.value??null}},Gm=new ma;for(let e=0;e<Hm.length;++e){let t=VF[Hm[e]];Gm.insert(t,t)}qm.exports={TernarySearchTree:ma,tree:Gm}});var j=b((nz,sE)=>{"use strict";var yi=w("node:assert"),{kDestroyed:Jm,kBodyUsed:On,kListeners:lu,kBody:Vm}=Ie(),{IncomingMessage:JF}=w("node:http"),Ca=w("node:stream"),WF=w("node:net"),{Blob:$F}=w("node:buffer"),zF=w("node:util"),{stringify:KF}=w("node:querystring"),{EventEmitter:jF}=w("node:events"),{InvalidArgumentError:Me}=ie(),{headerNameLowerCasedRecord:ZF}=fa(),{tree:Wm}=Ym(),[XF,eM]=process.versions.node.split(".").map(e=>Number(e)),Ia=class{constructor(t){this[Vm]=t,this[On]=!1}async*[Symbol.asyncIterator](){yi(!this[On],"disturbed"),this[On]=!0,yield*this[Vm]}};function tM(e){return Ba(e)?(Zm(e)===0&&e.on("data",function(){yi(!1)}),typeof e.readableDidRead!="boolean"&&(e[On]=!1,jF.prototype.on.call(e,"data",function(){this[On]=!0})),e):e&&typeof e.pipeTo=="function"?new Ia(e):e&&typeof e!="string"&&!ArrayBuffer.isView(e)&&jm(e)?new Ia(e):e}function rM(){}function Ba(e){return e&&typeof e=="object"&&typeof e.pipe=="function"&&typeof e.on=="function"}function $m(e){if(e===null)return!1;if(e instanceof $F)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 nM(e,t){if(e.includes("?")||e.includes("#"))throw new Error('Query params cannot be passed when url already contains "?" or "#".');let r=KF(t);return r&&(e+="?"+r),e}function zm(e){let t=parseInt(e,10);return t===Number(e)&&t>=0&&t<=65535}function Ea(e){return e!=null&&e[0]==="h"&&e[1]==="t"&&e[2]==="t"&&e[3]==="p"&&(e[4]===":"||e[4]==="s"&&e[5]===":")}function Km(e){if(typeof e=="string"){if(e=new URL(e),!Ea(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!==""&&zm(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(!Ea(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(!Ea(e.origin||e.protocol))throw new Me("Invalid URL protocol: the URL must start with `http:` or `https:`.");return e}function oM(e){if(e=Km(e),e.pathname!=="/"||e.search||e.hash)throw new Me("invalid url");return e}function iM(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 sM(e){if(!e)return null;yi(typeof e=="string");let t=iM(e);return WF.isIP(t)?"":t}function aM(e){return JSON.parse(JSON.stringify(e))}function AM(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}function jm(e){return e!=null&&(typeof e[Symbol.iterator]=="function"||typeof e[Symbol.asyncIterator]=="function")}function Zm(e){if(e==null)return 0;if(Ba(e)){let t=e._readableState;return t&&t.objectMode===!1&&t.ended===!0&&Number.isFinite(t.length)?t.length:null}else{if($m(e))return e.size!=null?e.size:null;if(tE(e))return e.byteLength}return null}function Xm(e){return e&&!!(e.destroyed||e[Jm]||Ca.isDestroyed?.(e))}function cM(e,t){e==null||!Ba(e)||Xm(e)||(typeof e.destroy=="function"?(Object.getPrototypeOf(e).constructor===JF&&(e.socket=null),e.destroy(t)):t&&queueMicrotask(()=>{e.emit("error",t)}),e.destroyed!==!0&&(e[Jm]=!0))}var lM=/timeout=(\d+)/;function uM(e){let t=e.toString().match(lM);return t?parseInt(t[1],10)*1e3:null}function eE(e){return typeof e=="string"?ZF[e]??e.toLowerCase():Wm.lookup(e)??e.toString("latin1").toLowerCase()}function dM(e){return Wm.lookup(e)??e.toString("latin1").toLowerCase()}function hM(e,t){t===void 0&&(t={});for(let r=0;r<e.length;r+=2){let n=eE(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 gM(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 tE(e){return e instanceof Uint8Array||Buffer.isBuffer(e)}function pM(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 fM(e){return!!(e&&(Ca.isDisturbed(e)||e[On]))}function mM(e){return!!(e&&Ca.isErrored(e))}function EM(e){return!!(e&&Ca.isReadable(e))}function IM(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 CM(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 BM(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 QM(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 yM=typeof String.prototype.toWellFormed=="function",wM=typeof String.prototype.isWellFormed=="function";function rE(e){return yM?`${e}`.toWellFormed():zF.toUSVString(e)}function bM(e){return wM?`${e}`.isWellFormed():rE(e)===`${e}`}function nE(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 kM(e){if(e.length===0)return!1;for(let t=0;t<e.length;++t)if(!nE(e.charCodeAt(t)))return!1;return!0}var SM=/[^\t\x20-\x7e\x80-\xff]/;function xM(e){return!SM.test(e)}function DM(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 vM(e,t,r){return(e[lu]??=[]).push([t,r]),e.on(t,r),e}function RM(e){for(let[t,r]of e[lu]??[])e.removeListener(t,r);e[lu]=null}function NM(e,t,r){try{t.onError(r),yi(t.aborted)}catch(n){e.emit("error",n)}}var oE=Object.create(null);oE.enumerable=!0;var uu={delete:"DELETE",DELETE:"DELETE",get:"GET",GET:"GET",head:"HEAD",HEAD:"HEAD",options:"OPTIONS",OPTIONS:"OPTIONS",post:"POST",POST:"POST",put:"PUT",PUT:"PUT"},iE={...uu,patch:"patch",PATCH:"PATCH"};Object.setPrototypeOf(uu,null);Object.setPrototypeOf(iE,null);sE.exports={kEnumerableProperty:oE,nop:rM,isDisturbed:fM,isErrored:mM,isReadable:EM,toUSVString:rE,isUSVString:bM,isBlobLike:$m,parseOrigin:oM,parseURL:Km,getServerName:sM,isStream:Ba,isIterable:jm,isAsyncIterable:AM,isDestroyed:Xm,headerNameToString:eE,bufferToLowerCasedHeaderName:dM,addListener:vM,removeAllListeners:RM,errorRequest:NM,parseRawHeaders:gM,parseHeaders:hM,parseKeepAliveTimeout:uM,destroy:cM,bodyLength:Zm,deepClone:aM,ReadableStreamFrom:CM,isBuffer:tE,validateHandler:pM,getSocketInfo:IM,isFormDataLike:BM,buildURL:nM,addAbortListener:QM,isValidHTTPToken:kM,isValidHeaderValue:xM,isTokenCharCode:nE,parseRangeHeader:DM,normalizedMethodRecordsBase:uu,normalizedMethodRecords:iE,isValidPort:zm,isHttpOrHttpsPrefixed:Ea,nodeMajor:XF,nodeMinor:eM,safeHTTPMethods:["GET","HEAD","OPTIONS","TRACE"],wrapRequestBody:tM}});var Hn=b((oz,AE)=>{"use strict";var Ae=w("node:diagnostics_channel"),hu=w("node:util"),Qa=hu.debuglog("undici"),du=hu.debuglog("fetch"),jr=hu.debuglog("websocket"),aE=!1,FM={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(Qa.enabled||du.enabled){let e=du.enabled?du:Qa;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)}),aE=!0}if(jr.enabled){if(!aE){let e=Qa.enabled?Qa: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")})}AE.exports={channels:FM}});var dE=b((iz,uE)=>{"use strict";var{InvalidArgumentError:ue,NotSupportedError:MM}=ie(),Xt=w("node:assert"),{isValidHTTPToken:lE,isValidHeaderValue:wi,isStream:UM,destroy:LM,isBuffer:TM,isFormDataLike:_M,isIterable:PM,isBlobLike:OM,buildURL:HM,validateHandler:GM,getServerName:qM,normalizedMethodRecords:YM}=j(),{channels:_t}=Hn(),{headerNameLowerCasedRecord:cE}=fa(),VM=/[^\u0021-\u00ff]/,gt=Symbol("handler"),gu=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(VM.test(r))throw new ue("invalid request path");if(typeof n!="string")throw new ue("method must be a string");if(YM[n]===void 0&&!lE(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(UM(o)){this.body=o;let f=this.body._readableState;(!f||!f.autoDestroy)&&(this.endHandler=function(){LM(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(TM(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(_M(o)||PM(o)||OM(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?HM(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)ya(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");ya(this,f[0],f[1])}else{let f=Object.keys(i);for(let B=0;B<f.length;++B)ya(this,f[B],i[f[B]])}else if(i!=null)throw new ue("headers must be an object or an array");GM(m,n,c),this.servername=p||qM(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(Xt(!this.aborted),Xt(!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){Xt(!this.aborted),Xt(!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){Xt(!this.aborted),Xt(!this.completed);try{return this[gt].onData(t)}catch(r){return this.abort(r),!1}}onUpgrade(t,r,n){return Xt(!this.aborted),Xt(!this.completed),this[gt].onUpgrade(t,r,n)}onComplete(t){this.onFinally(),Xt(!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 ya(this,t,r),this}};function ya(e,t,r){if(r&&typeof r=="object"&&!Array.isArray(r))throw new ue(`invalid ${t} header`);if(r===void 0)return;let n=cE[t];if(n===void 0&&(n=t.toLowerCase(),cE[n]===void 0&&!lE(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 MM("expect header not supported");e.headers.push(t,r)}}}uE.exports=gu});var bi=b((sz,hE)=>{"use strict";var JM=w("node:events"),wa=class extends JM{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 pu(this,n)}},pu=class extends wa{#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)}};hE.exports=wa});var Vn=b((az,gE)=>{"use strict";var WM=bi(),{ClientDestroyedError:fu,ClientClosedError:$M,InvalidArgumentError:Gn}=ie(),{kDestroy:zM,kClose:KM,kClosed:ki,kDestroyed:qn,kDispatch:mu,kInterceptors:Zr}=Ie(),er=Symbol("onDestroyed"),Yn=Symbol("onClosed"),ba=Symbol("Intercepted Dispatch"),Eu=Symbol("webSocketOptions"),Iu=class extends WM{constructor(t){super(),this[qn]=!1,this[er]=null,this[ki]=!1,this[Yn]=[],this[Eu]=t?.webSocket??{}}get webSocketOptions(){return{maxFragments:this[Eu].maxFragments??131072,maxPayloadSize:this[Eu].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 fu,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[KM]().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[er]?this[er].push(r):queueMicrotask(()=>r(null,null));return}t||(t=new fu),this[qn]=!0,this[er]=this[er]||[],this[er].push(r);let n=()=>{let o=this[er];this[er]=null;for(let i=0;i<o.length;i++)o[i](null,null)};this[zM](t).then(()=>{queueMicrotask(n)})}[ba](t,r){if(!this[Zr]||this[Zr].length===0)return this[ba]=this[mu],this[mu](t,r);let n=this[mu].bind(this);for(let o=this[Zr].length-1;o>=0;o--)n=this[Zr][o](n);return this[ba]=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[er])throw new fu;if(this[ki])throw new $M;return this[ba](t,r)}catch(n){if(typeof r.onError!="function")throw new Gn("invalid onError method");return r.onError(n),!1}}};gE.exports=Iu});var ku=b((Az,EE)=>{"use strict";var Jn=0,Cu=1e3,Bu=(Cu>>1)-1,tr,Qu=Symbol("kFastTimer"),rr=[],yu=-2,wu=-1,fE=0,pE=1;function bu(){Jn+=Bu;let e=0,t=rr.length;for(;e<t;){let r=rr[e];r._state===fE?(r._idleStart=Jn-Bu,r._state=pE):r._state===pE&&Jn>=r._idleStart+r._idleTimeout&&(r._state=wu,r._idleStart=-1,r._onTimeout(r._timerArg)),r._state===wu?(r._state=yu,--t!==0&&(rr[e]=rr[t])):++e}rr.length=t,rr.length!==0&&mE()}function mE(){tr?tr.refresh():(clearTimeout(tr),tr=setTimeout(bu,Bu),tr.unref&&tr.unref())}var ka=class{[Qu]=!0;_state=yu;_idleTimeout=-1;_idleStart=-1;_onTimeout;_timerArg;constructor(t,r,n){this._onTimeout=t,this._idleTimeout=r,this._timerArg=n,this.refresh()}refresh(){this._state===yu&&rr.push(this),(!tr||rr.length===1)&&mE(),this._state=fE}clear(){this._state=wu,this._idleStart=-1}};EE.exports={setTimeout(e,t,r){return t<=Cu?setTimeout(e,t,r):new ka(e,t,r)},clearTimeout(e){e[Qu]?e.clear():clearTimeout(e)},setFastTimeout(e,t,r){return new ka(e,t,r)},clearFastTimeout(e){e.clear()},now(){return Jn},tick(e=0){Jn+=e-Cu+1,bu(),bu()},reset(){Jn=0,rr.length=0,clearTimeout(tr),tr=null},kFastTimer:Qu}});var Si=b((uz,yE)=>{"use strict";var jM=w("node:net"),IE=w("node:assert"),QE=j(),{InvalidArgumentError:ZM,ConnectTimeoutError:XM}=ie(),Sa=ku();function CE(){}var Su,xu;global.FinalizationRegistry&&!(process.env.NODE_V8_COVERAGE||process.env.UNDICI_NO_FG)?xu=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))}}:xu=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 eU({allowH2:e,maxCachedSessions:t,socketPath:r,timeout:n,session:o,...i}){if(t!=null&&(!Number.isInteger(t)||t<0))throw new ZM("maxCachedSessions must be a positive integer or zero");let s={path:r,...i},a=new xu(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:"){Su||(Su=w("node:tls")),h=h||s.servername||QE.getServerName(l)||null;let I=h||c;IE(I);let E=o||a.get(I)||null;d=d||443,f=Su.connect({highWaterMark:16384,...s,servername:h,session:E,localAddress:g,ALPNProtocols:e?["http/1.1","h2"]:["http/1.1"],socket:p,port:d,host:c}),f.on("session",function(Q){a.set(I,Q)})}else IE(!p,"httpSocket can only be sent on TLS update"),d=d||80,f=jM.connect({highWaterMark:64*1024,...s,localAddress:g,port:d,host:c});if(s.keepAlive==null||s.keepAlive){let I=s.keepAliveInitialDelay===void 0?6e4:s.keepAliveInitialDelay;f.setKeepAlive(!0,I)}let B=tU(new WeakRef(f),{timeout:n,hostname:c,port:d});return f.setNoDelay(!0).once(u==="https:"?"secureConnect":"connect",function(){if(queueMicrotask(B),m){let I=m;m=null,I(null,this)}}).on("error",function(I){if(queueMicrotask(B),m){let E=m;m=null,E(I)}}),f}}var tU=process.platform==="win32"?(e,t)=>{if(!t.timeout)return CE;let r=null,n=null,o=Sa.setFastTimeout(()=>{r=setImmediate(()=>{n=setImmediate(()=>BE(e.deref(),t))})},t.timeout);return()=>{Sa.clearFastTimeout(o),clearImmediate(r),clearImmediate(n)}}:(e,t)=>{if(!t.timeout)return CE;let r=null,n=Sa.setFastTimeout(()=>{r=setImmediate(()=>{BE(e.deref(),t)})},t.timeout);return()=>{Sa.clearFastTimeout(n),clearImmediate(r)}};function BE(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)`,QE.destroy(e,new XM(r))}yE.exports=eU});var wE=b(xa=>{"use strict";Object.defineProperty(xa,"__esModule",{value:!0});xa.enumToMap=void 0;function rU(e){let t={};return Object.keys(e).forEach(r=>{let n=e[r];typeof n=="number"&&(t[r]=n)}),t}xa.enumToMap=rU});var bE=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 nU=wE(),oU;(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"})(oU=S.ERROR||(S.ERROR={}));var iU;(function(e){e[e.BOTH=0]="BOTH",e[e.REQUEST=1]="REQUEST",e[e.RESPONSE=2]="RESPONSE"})(iU=S.TYPE||(S.TYPE={}));var sU;(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"})(sU=S.FLAGS||(S.FLAGS={}));var aU;(function(e){e[e.HEADERS=1]="HEADERS",e[e.CHUNKED_LENGTH=2]="CHUNKED_LENGTH",e[e.KEEP_ALIVE=4]="KEEP_ALIVE"})(aU=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=nU.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 AU;(function(e){e[e.SAFE=0]="SAFE",e[e.SAFE_WITH_CB=1]="SAFE_WITH_CB",e[e.UNSAFE=2]="UNSAFE"})(AU=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 Du=b((gz,kE)=>{"use strict";var{Buffer:cU}=w("node:buffer");kE.exports=cU.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv","base64")});var xE=b((pz,SE)=>{"use strict";var{Buffer:lU}=w("node:buffer");SE.exports=lU.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((fz,LE)=>{"use strict";var DE=["GET","HEAD","POST"],uU=new Set(DE),dU=[101,204,205,304],vE=[301,302,303,307,308],hU=new Set(vE),RE=["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"],gU=new Set(RE),NE=["","no-referrer","no-referrer-when-downgrade","same-origin","origin","strict-origin","origin-when-cross-origin","strict-origin-when-cross-origin","unsafe-url"],pU=new Set(NE),fU=["follow","manual","error"],FE=["GET","HEAD","OPTIONS","TRACE"],mU=new Set(FE),EU=["navigate","same-origin","no-cors","cors"],IU=["omit","same-origin","include"],CU=["default","no-store","reload","no-cache","force-cache","only-if-cached"],BU=["content-encoding","content-language","content-location","content-type","content-length"],QU=["half"],ME=["CONNECT","TRACE","TRACK"],yU=new Set(ME),UE=["audio","audioworklet","font","image","manifest","paintworklet","script","style","track","video","xslt",""],wU=new Set(UE);LE.exports={subresource:UE,forbiddenMethods:ME,requestBodyHeader:BU,referrerPolicy:NE,requestRedirect:fU,requestMode:EU,requestCredentials:IU,requestCache:CU,redirectStatus:vE,corsSafeListedMethods:DE,nullBodyStatus:dU,safeMethods:FE,badPorts:RE,requestDuplex:QU,subresourceSet:wU,badPortsSet:gU,redirectStatusSet:hU,corsSafeListedMethodsSet:uU,safeMethodsSet:mU,forbiddenMethodsSet:yU,referrerPolicySet:pU}});var Ru=b((mz,TE)=>{"use strict";var vu=Symbol.for("undici.globalOrigin.1");function bU(){return globalThis[vu]}function kU(e){if(e===void 0){Object.defineProperty(globalThis,vu,{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,vu,{value:t,writable:!0,enumerable:!1,configurable:!1})}TE.exports={getGlobalOrigin:bU,setGlobalOrigin:kU}});var Ve=b((Ez,YE)=>{"use strict";var va=w("node:assert"),SU=new TextEncoder,Di=/^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/,xU=/[\u000A\u000D\u0009\u0020]/,DU=/[\u0009\u000A\u000C\u000D\u0020]/g,vU=/^[\u0009\u0020-\u007E\u0080-\u00FF]+$/;function RU(e){va(e.protocol==="data:");let t=OE(e,!0);t=t.slice(5);let r={position:0},n=$n(",",t,r),o=n.length;if(n=TU(n,!0,!0),r.position>=t.length)return"failure";r.position++;let i=t.slice(o+1),s=HE(i);if(/;(\u0020){0,}base64$/i.test(n)){let A=qE(s);if(s=FU(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=Nu(n);return a==="failure"&&(a=Nu("text/plain;charset=US-ASCII")),{mimeType:a,body:s}}function OE(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 Ra(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 HE(e){let t=SU.encode(e);return NU(t)}function _E(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function PE(e){return e>=48&&e<=57?e-48:(e&223)-55}function NU(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&&!(_E(e[o+1])&&_E(e[o+2]))?r[n++]=37:(r[n++]=PE(e[o+1])<<4|PE(e[o+2]),o+=2)}return t===n?r:r.subarray(0,n)}function Nu(e){e=Da(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=Da(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++,Ra(c=>xU.test(c),e,t);let a=Ra(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=GE(e,t,!0),$n(";",e,t);else if(A=$n(";",e,t),A=Da(A,!1,!0),A.length===0)continue;a.length!==0&&Di.test(a)&&(A.length===0||vU.test(A))&&!s.parameters.has(a)&&s.parameters.set(a,A)}return s}function FU(e){e=e.replace(DU,"");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 GE(e,t,r){let n=t.position,o="";for(va(e[t.position]==='"'),t.position++;o+=Ra(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{va(i==='"');break}}return r?o:e.slice(n,t.position)}function MU(e){va(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 UU(e){return e===13||e===10||e===9||e===32}function Da(e,t=!0,r=!0){return Fu(e,t,r,UU)}function LU(e){return e===13||e===10||e===9||e===12||e===32}function TU(e,t=!0,r=!0){return Fu(e,t,r,LU)}function Fu(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 qE(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 _U(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":""}YE.exports={dataURLProcessor:RU,URLSerializer:OE,collectASequenceOfCodePoints:Ra,collectASequenceOfCodePointsFast:$n,stringPercentDecode:HE,parseMIMEType:Nu,collectAnHTTPQuotedString:GE,serializeAMimeType:MU,removeChars:Fu,removeHTTPWhitespace:Da,minimizeSupportedMimeType:_U,HTTP_TOKEN_CODEPOINTS:Di,isomorphicDecode:qE}});var Le=b((Iz,VE)=>{"use strict";var{types:Pt,inspect:PU}=w("node:util"),{markAsUncloneable:OU}=w("node:worker_threads"),{toUSVString:HU}=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=OU||(()=>{});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 PU(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(!Pt.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=HU;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"||!Pt.isAnyArrayBuffer(e))throw k.errors.conversionFailed({prefix:t,argument:`${r} ("${k.util.Stringify(e)}")`,types:["ArrayBuffer"]});if(n?.allowShared===!1&&Pt.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"||!Pt.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&&Pt.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"||!Pt.isDataView(e))throw k.errors.exception({header:t,message:`${r} is not a DataView.`});if(n?.allowShared===!1&&Pt.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(Pt.isAnyArrayBuffer(e))return k.converters.ArrayBuffer(e,t,r,{...n,allowShared:!1});if(Pt.isTypedArray(e))return k.converters.TypedArray(e,e.constructor,t,r,{...n,allowShared:!1});if(Pt.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);VE.exports={webidl:k}});var et=b((Cz,iI)=>{"use strict";var{Transform:GU}=w("node:stream"),JE=w("node:zlib"),{redirectStatusSet:qU,referrerPolicySet:YU,badPortsSet:VU}=xi(),{getGlobalOrigin:WE}=Ru(),{collectASequenceOfCodePoints:Xr,collectAnHTTPQuotedString:JU,removeChars:WU,parseMIMEType:$U}=Ve(),{performance:zU}=w("node:perf_hooks"),{isBlobLike:KU,ReadableStreamFrom:jU,isValidHTTPToken:$E,normalizedMethodRecordsBase:ZU}=j(),en=w("node:assert"),{isUint8Array:XU}=w("node:util/types"),{webidl:vi}=Le(),zE=[],Fa;try{Fa=w("node:crypto");let e=["sha256","sha384","sha512"];zE=Fa.getHashes().filter(t=>e.includes(t))}catch{}function KE(e){let t=e.urlList,r=t.length;return r===0?null:t[r-1].toString()}function eL(e,t){if(!qU.has(e.status))return null;let r=e.headersList.get("location",!0);return r!==null&&ZE(r)&&(jE(r)||(r=tL(r)),r=new URL(r,KE(e))),r&&!r.hash&&(r.hash=t),r}function jE(e){for(let t=0;t<e.length;++t){let r=e.charCodeAt(t);if(r>126||r<32)return!1}return!0}function tL(e){return Buffer.from(e,"binary").toString("utf8")}function Ni(e){return e.urlList[e.urlList.length-1]}function rL(e){let t=Ni(e);return nI(t)&&VU.has(t.port)?"blocked":"allowed"}function nL(e){return e instanceof Error||e?.constructor?.name==="Error"||e?.constructor?.name==="DOMException"}function oL(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 iL=$E;function ZE(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 sL(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(YU.has(s)){o=s;break}}o!==""&&(e.referrerPolicy=o)}function aL(){return"allowed"}function AL(){return"success"}function cL(){return"success"}function lL(e){let t=null;t=e.mode,e.headersList.set("sec-fetch-mode",t,!0)}function uL(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&&Uu(e.origin)&&!Uu(Ni(e))&&(t=null);break;case"same-origin":Ma(e,Ni(e))||(t=null);break;default:}e.headersList.append("origin",t,!0)}}}function zn(e,t){return e}function dL(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 hL(e){return zn(zU.now(),e)}function gL(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 XE(){return{referrerPolicy:"strict-origin-when-cross-origin"}}function pL(e){return{referrerPolicy:e.referrerPolicy}}function fL(e){let t=e.referrerPolicy;en(t);let r=null;if(e.referrer==="client"){let a=WE();if(!a||a.origin==="null")return"no-referrer";r=new URL(a)}else e.referrer instanceof URL&&(r=e.referrer);let n=Mu(r),o=Mu(r,!0);n.toString().length>4096&&(n=o);let i=Ma(e,n),s=Ri(n)&&!Ri(e.url);switch(t){case"origin":return o??Mu(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 Ma(n,a)?n:Ri(n)&&!Ri(a)?"no-referrer":o}default:return s?"no-referrer":o}}function Mu(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 mL(e,t){if(Fa===void 0)return!0;let r=eI(t);if(r==="no metadata"||r.length===0)return!0;let n=IL(r),o=CL(r,n);for(let i of o){let s=i.algo,a=i.hash,A=Fa.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)),BL(A,a))return!0}return!1}var EL=/(?<algo>sha256|sha384|sha512)-((?<hash>[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i;function eI(e){let t=[],r=!0;for(let n of e.split(" ")){r=!1;let o=EL.exec(n);if(o===null||o.groups===void 0||o.groups.algo===void 0)continue;let i=o.groups.algo.toLowerCase();zE.includes(i)&&t.push(o.groups)}return r===!0?"no metadata":t}function IL(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 CL(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 BL(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 QL(e){}function Ma(e,t){return e.origin===t.origin&&e.origin==="null"||e.protocol===t.protocol&&e.hostname===t.hostname&&e.port===t.port}function yL(){let e,t;return{promise:new Promise((n,o)=>{e=n,t=o}),resolve:e,reject:t}}function wL(e){return e.controller.state==="aborted"}function bL(e){return e.controller.state==="aborted"||e.controller.state==="terminated"}function kL(e){return ZU[e.toLowerCase()]??e}function SL(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 xL=Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));function tI(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,xL),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 DL(e,t,r,n=0,o=1){let i=tI(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 vL(e,t,r){let n=t,o=r,i;try{i=e.stream.getReader()}catch(s){o(s);return}try{n(await rI(i))}catch(s){o(s)}}function RL(e){return e instanceof ReadableStream||e[Symbol.toStringTag]==="ReadableStream"&&typeof e.tee=="function"}function NL(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 FL=/[^\x00-\xFF]/;function Na(e){return en(!FL.test(e)),e}async function rI(e){let t=[],r=0;for(;;){let{done:n,value:o}=await e.read();if(n)return Buffer.concat(t,r);if(!XU(o))throw new TypeError("Received non-Uint8Array chunk");t.push(o),r+=o.length}}function ML(e){en("protocol"in e);let t=e.protocol;return t==="about:"||t==="blob:"||t==="data:"}function Uu(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 nI(e){en("protocol"in e);let t=e.protocol;return t==="http:"||t==="https:"}function UL(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 LL(e,t,r){let n="bytes ";return n+=Na(`${e}`),n+="-",n+=Na(`${t}`),n+="/",n+=Na(`${r}`),n}var Lu=class extends GU{#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 TL(e){return new Lu(e)}function _L(e){let t=null,r=null,n=null,o=oI("content-type",e);if(o===null)return"failure";for(let i of o){let s=$U(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 PL(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+=JU(t,r),r.position<t.length)continue}else en(t.charCodeAt(r.position)===44),r.position++;o=WU(o,!0,!0,i=>i===9||i===32),n.push(o),o=""}return n}function oI(e,t){let r=t.get(e,!0);return r===null?null:PL(r)}var OL=new TextDecoder;function HL(e){return e.length===0?"":(e[0]===239&&e[1]===187&&e[2]===191&&(e=e.subarray(3)),OL.decode(e))}var Tu=class{get baseUrl(){return WE()}get origin(){return this.baseUrl?.origin}policyContainer=XE()},_u=class{settingsObject=new Tu},GL=new _u;iI.exports={isAborted:wL,isCancelled:bL,isValidEncodedURL:jE,createDeferredPromise:yL,ReadableStreamFrom:jU,tryUpgradeRequestToAPotentiallyTrustworthyURL:QL,clampAndCoarsenConnectionTimingInfo:dL,coarsenedSharedCurrentTime:hL,determineRequestsReferrer:fL,makePolicyContainer:XE,clonePolicyContainer:pL,appendFetchMetadata:lL,appendRequestOriginHeader:uL,TAOCheck:cL,corsCheck:AL,crossOriginResourcePolicyCheck:aL,createOpaqueTimingInfo:gL,setRequestReferrerPolicyOnRedirect:sL,isValidHTTPToken:$E,requestBadPort:rL,requestCurrentURL:Ni,responseURL:KE,responseLocationURL:eL,isBlobLike:KU,isURLPotentiallyTrustworthy:Ri,isValidReasonPhrase:oL,sameOrigin:Ma,normalizeMethod:kL,serializeJavascriptValueToJSONString:SL,iteratorMixin:DL,createIterator:tI,isValidHeaderName:iL,isValidHeaderValue:ZE,isErrorLike:nL,fullyReadBody:vL,bytesMatch:mL,isReadableStreamLike:RL,readableStreamClose:NL,isomorphicEncode:Na,urlIsLocal:ML,urlHasHttpsScheme:Uu,urlIsHttpHttpsScheme:nI,readAllBytes:rI,simpleRangeHeaderValue:UL,buildContentRange:LL,parseMetadata:eI,createInflate:TL,extractMimeType:_L,getDecodeSplit:oI,utf8DecodeBytes:HL,environmentSettingsObject:GL}});var Cr=b((Bz,sI)=>{"use strict";sI.exports={kUrl:Symbol("url"),kHeaders:Symbol("headers"),kSignal:Symbol("signal"),kState:Symbol("state"),kDispatcher:Symbol("dispatcher")}});var Ou=b((Qz,aI)=>{"use strict";var{Blob:qL,File:YL}=w("node:buffer"),{kState:nr}=Cr(),{webidl:Ot}=Le(),Pu=class e{constructor(t,r,n={}){let o=r,i=n.type,s=n.lastModified??Date.now();this[nr]={blobLike:t,name:o,type:i,lastModified:s}}stream(...t){return Ot.brandCheck(this,e),this[nr].blobLike.stream(...t)}arrayBuffer(...t){return Ot.brandCheck(this,e),this[nr].blobLike.arrayBuffer(...t)}slice(...t){return Ot.brandCheck(this,e),this[nr].blobLike.slice(...t)}text(...t){return Ot.brandCheck(this,e),this[nr].blobLike.text(...t)}get size(){return Ot.brandCheck(this,e),this[nr].blobLike.size}get type(){return Ot.brandCheck(this,e),this[nr].blobLike.type}get name(){return Ot.brandCheck(this,e),this[nr].name}get lastModified(){return Ot.brandCheck(this,e),this[nr].lastModified}get[Symbol.toStringTag](){return"File"}};Ot.converters.Blob=Ot.interfaceConverter(qL);function VL(e){return e instanceof YL||e&&(typeof e.stream=="function"||typeof e.arrayBuffer=="function")&&e[Symbol.toStringTag]==="File"}aI.exports={FileLike:Pu,isFileLike:VL}});var Mi=b((yz,dI)=>{"use strict";var{isBlobLike:Ua,iteratorMixin:JL}=et(),{kState:He}=Cr(),{kEnumerableProperty:Kn}=j(),{FileLike:AI,isFileLike:WL}=Ou(),{webidl:he}=Le(),{File:uI}=w("node:buffer"),cI=w("node:util"),lI=globalThis.File??uI,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&&!Ua(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=Ua(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=Hu(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&&!Ua(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=Ua(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=Hu(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)}[cI.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=cI.formatWithOptions(r,n);return`FormData ${o.slice(o.indexOf("]")+2)}`}};JL("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 Hu(e,t,r){if(typeof t!="string"){if(WL(t)||(t=t instanceof Blob?new lI([t],"blob",{type:t.type}):new AI(t,"blob",{type:t.type})),r!==void 0){let n={type:t.type,lastModified:t.lastModified};t=t instanceof uI?new lI([t],r,n):new AI(t,r,n)}}return{name:e,value:t}}dI.exports={FormData:Fi,makeEntry:Hu}});var EI=b((wz,mI)=>{"use strict";var{isUSVString:hI,bufferToLowerCasedHeaderName:$L}=j(),{utf8DecodeBytes:zL}=et(),{HTTP_TOKEN_CODEPOINTS:KL,isomorphicDecode:gI}=Ve(),{isFileLike:jL}=Ou(),{makeEntry:ZL}=Mi(),La=w("node:assert"),{File:XL}=w("node:buffer"),eT=globalThis.File??XL,tT=Buffer.from('form-data; name="'),pI=Buffer.from("; filename"),rT=Buffer.from("--"),nT=Buffer.from(`--\r
3
+ `);function oT(e){for(let t=0;t<e.length;++t)if((e.charCodeAt(t)&-128)!==0)return!1;return!0}function iT(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 sT(e,t){La(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&&Ta(e,rT,i)||i.position===e.length-4&&Ta(e,nT,i))return o;if(e[i.position]!==13||e[i.position+1]!==10)return"failure";i.position+=2;let a=aT(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",oT(l)||(l=""),h=new eT([d],c,{type:l})):h=zL(Buffer.from(d)),La(hI(A)),La(typeof h=="string"&&hI(h)||jL(h)),o.push(ZL(A,h,c))}}function aT(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=Gu(s,!0,!0,a=>a===9||a===32),!KL.test(s.toString())||e[t.position]!==58)return"failure";switch(t.position++,jn(a=>a===32||a===9,e,t),$L(s)){case"content-disposition":{if(r=n=null,!Ta(e,tT,t)||(t.position+=17,r=fI(e,t),r===null))return"failure";if(Ta(e,pI,t)){let a=t.position+pI.length;if(e[a]===42&&(t.position+=1,a+=1),e[a]!==61||e[a+1]!==34||(t.position+=12,n=fI(e,t),n===null))return"failure"}break}case"content-type":{let a=jn(A=>A!==10&&A!==13,e,t);a=Gu(a,!1,!0,A=>A===9||A===32),o=gI(a);break}case"content-transfer-encoding":{let a=jn(A=>A!==10&&A!==13,e,t);a=Gu(a,!1,!0,A=>A===9||A===32),i=gI(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 fI(e,t){La(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 Gu(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 Ta(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}mI.exports={multipartFormDataParser:sT,validateBoundary:iT}});var eo=b((bz,xI)=>{"use strict";var Ui=j(),{ReadableStreamFrom:AT,isBlobLike:II,isReadableStreamLike:cT,readableStreamClose:lT,createDeferredPromise:uT,fullyReadBody:dT,extractMimeType:hT,utf8DecodeBytes:QI}=et(),{FormData:CI}=Mi(),{kState:Xn}=Cr(),{webidl:gT}=Le(),{Blob:pT}=w("node:buffer"),qu=w("node:assert"),{isErrored:yI,isDisturbed:fT}=w("node:stream"),{isArrayBuffer:mT}=w("node:util/types"),{serializeAMimeType:ET}=Ve(),{multipartFormDataParser:IT}=EI(),Yu;try{let e=w("node:crypto");Yu=t=>e.randomInt(0,t)}catch{Yu=e=>Math.floor(Math.random(e))}var _a=new TextEncoder;function CT(){}var wI=globalThis.FinalizationRegistry&&process.version.indexOf("v18")!==0,bI;wI&&(bI=new FinalizationRegistry(e=>{let t=e.deref();t&&!t.locked&&!fT(t)&&!yI(t)&&t.cancel("Response object has been garbage collected").catch(CT)}));function kI(e,t=!1){let r=null;e instanceof ReadableStream?r=e:II(e)?r=e.stream():r=new ReadableStream({async pull(A){let c=typeof o=="string"?_a.encode(o):o;c.byteLength&&A.enqueue(c),queueMicrotask(()=>lT(A))},start(){},type:"bytes"}),qu(cT(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(mT(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${`${Yu(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=_a.encode(c+`; name="${l(u(m))}"\r
7
+ \r
8
+ ${u(f)}\r
9
+ `);d.push(B),i+=B.byteLength}else{let B=_a.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=_a.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(II(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:AT(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(!yI(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 BT(e,t=!1){return e instanceof ReadableStream&&(qu(!Ui.isDisturbed(e),"The body has already been consumed."),qu(!e.locked,"The stream is locked.")),kI(e,t)}function QT(e,t){let[r,n]=t.stream.tee();return t.stream=r,{stream:n,length:t.length,source:t.source}}function yT(e){if(e.aborted)throw new DOMException("The operation was aborted.","AbortError")}function wT(e){return{blob(){return Zn(this,r=>{let n=BI(this);return n===null?n="":n&&(n=ET(n)),new pT([r],{type:n})},e)},arrayBuffer(){return Zn(this,r=>new Uint8Array(r).buffer,e)},text(){return Zn(this,QI,e)},json(){return Zn(this,kT,e)},formData(){return Zn(this,r=>{let n=BI(this);if(n!==null)switch(n.essence){case"multipart/form-data":{let o=IT(r,n);if(o==="failure")throw new TypeError("Failed to parse body as FormData.");let i=new CI;return i[Xn]=o,i}case"application/x-www-form-urlencoded":{let o=new URLSearchParams(r.toString()),i=new CI;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 bT(e){Object.assign(e.prototype,wT(e))}async function Zn(e,t,r){if(gT.brandCheck(e,r),SI(e))throw new TypeError("Body is unusable: Body has already been read");yT(e[Xn]);let n=uT(),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 dT(e[Xn].body,i,o),n.promise)}function SI(e){let t=e[Xn].body;return t!=null&&(t.stream.locked||Ui.isDisturbed(t.stream))}function kT(e){return JSON.parse(QI(e))}function BI(e){let t=e[Xn].headersList,r=hT(t);return r==="failure"?null:r}xI.exports={extractBody:kI,safelyExtractBody:BT,cloneBody:QT,mixinBody:bT,streamRegistry:bI,hasFinalizationRegistry:wI,bodyUnusable:SI}});var YI=b((kz,qI)=>{"use strict";var P=w("node:assert"),H=j(),{channels:DI}=Hn(),Vu=ku(),{RequestContentLengthMismatchError:tn,ResponseContentLengthMismatchError:vI,RequestAbortedError:_I,InvalidArgumentError:ST,HeadersTimeoutError:xT,HeadersOverflowError:DT,SocketError:to,InformationalError:ro,BodyTimeoutError:vT,HTTPParserError:RT,ResponseExceededMaxSizeError:NT}=ie(),{kUrl:PI,kReset:Je,kClient:Ga,kParser:pe,kBlocking:_i,kRunning:ve,kPending:OI,kSize:RI,kWriting:Br,kQueue:wt,kNoRef:Li,kKeepAliveDefaultTimeout:FT,kHostHeader:MT,kPendingIdx:UT,kRunningIdx:pt,kError:Ge,kPipelining:qa,kSocket:nn,kKeepAliveTimeoutValue:Va,kMaxHeadersSize:Ju,kKeepAliveMaxTimeout:LT,kKeepAliveTimeoutThreshold:TT,kHeadersTimeout:_T,kBodyTimeout:PT,kStrictContentLength:zu,kMaxRequests:NI,kCounter:OT,kMaxResponseSize:HT,kOnError:FI,kResume:or,kHTTPContext:HI}=Ie(),tt=bE(),MI=Buffer.alloc(0),Pa=Buffer[Symbol.species],Oa=H.addListener,GT=H.removeAllListeners,on=Symbol("kIdleSocketValidation"),rn=Symbol("kIdleSocketValidationTimeout"),Xu=Symbol("kSocketUsed"),Wu;async function qT(){let e=process.env.JEST_WORKER_ID?Du():void 0,t;try{t=await WebAssembly.compile(xE())}catch{t=await WebAssembly.compile(e||Du())}return await WebAssembly.instantiate(t,{env:{wasm_on_url:(r,n,o)=>0,wasm_on_status:(r,n,o)=>{P(ye.ptr===r);let i=n-Gt+Ht.byteOffset;return ye.onStatus(new Pa(Ht.buffer,i,o))||0},wasm_on_message_begin:r=>(P(ye.ptr===r),ye.onMessageBegin()||0),wasm_on_header_field:(r,n,o)=>{P(ye.ptr===r);let i=n-Gt+Ht.byteOffset;return ye.onHeaderField(new Pa(Ht.buffer,i,o))||0},wasm_on_header_value:(r,n,o)=>{P(ye.ptr===r);let i=n-Gt+Ht.byteOffset;return ye.onHeaderValue(new Pa(Ht.buffer,i,o))||0},wasm_on_headers_complete:(r,n,o,i)=>(P(ye.ptr===r),ye.onHeadersComplete(n,!!o,!!i)||0),wasm_on_body:(r,n,o)=>{P(ye.ptr===r);let i=n-Gt+Ht.byteOffset;return ye.onBody(new Pa(Ht.buffer,i,o))||0},wasm_on_message_complete:r=>(P(ye.ptr===r),ye.onMessageComplete()||0)}})}var $u=null,Ku=qT();Ku.catch();var ye=null,Ht=null,Ha=0,Gt=null,YT=0,Ti=1,no=2|Ti,Ya=4|Ti,ju=8|YT,Zu=class{constructor(t,r,{exports:n}){P(Number.isFinite(t[Ju])&&t[Ju]>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[Ju],this.shouldKeepAlive=!1,this.paused=!1,this.resume=this.resume.bind(this),this.bytesRead=0,this.keepAlive="",this.contentLength="",this.connection="",this.maxResponseSize=t[HT]}setTimeout(t,r){t!==this.timeoutValue||r&Ti^this.timeoutType&Ti?(this.timeout&&(Vu.clearTimeout(this.timeout),this.timeout=null),t&&(r&Ti?this.timeout=Vu.setFastTimeout(UI,t,new WeakRef(this)):(this.timeout=setTimeout(UI,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||(P(this.ptr!=null),P(ye==null),this.llhttp.llhttp_resume(this.ptr),P(this.timeoutType===Ya),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.paused=!1,this.execute(this.socket.read()||MI),this.readMore())}readMore(){for(;!this.paused&&this.ptr;){let t=this.socket.read();if(t===null)break;this.execute(t)}}execute(t){P(this.ptr!=null),P(ye==null),P(!this.paused);let{socket:r,llhttp:n}=this;t.length>Ha&&(Gt&&n.free(Gt),Ha=Math.ceil(t.length/4096)*4096,Gt=n.malloc(Ha)),new Uint8Array(n.memory.buffer,Gt,Ha).set(t);try{let o;try{Ht=t,ye=this,o=n.llhttp_execute(this.ptr,Gt,t.length)}catch(s){throw s}finally{ye=null,Ht=null}let i=n.llhttp_get_error_pos(this.ptr)-Gt;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(){P(ye===null),P(this.ptr!=null),P(!this.paused);let{llhttp:t}=this,r;try{ye=this,r=t.llhttp_finish(this.ptr)}finally{ye=null}return r===tt.ERROR.OK?null:r===tt.ERROR.PAUSED||r===tt.ERROR.PAUSED_UPGRADE?(this.paused=!0,null):this.createError(r,MI)}createError(t,r){let{llhttp:n,contentLength:o,bytesRead:i}=this;if(o&&i!==parseInt(o,10))return new vI;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 RT(a,tt.ERROR[t],r)}destroy(){P(this.ptr!=null),P(ye==null),this.llhttp.llhttp_free(this.ptr),this.ptr=null,this.timeout&&Vu.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 DT)}onUpgrade(t){let{upgrade:r,client:n,socket:o,headers:i,statusCode:s}=this;P(r),P(n[nn]===o),P(!o.destroyed),P(!this.paused),P((i.length&1)===0);let a=n[wt][n[pt]];P(a),P(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[Ga]=null,o[Ge]=null,GT(o),n[nn]=null,n[HI]=null,n[wt][n[pt]++]=null,n.emit("disconnect",n[PI],[n],new ro("upgrade"));try{a.onUpgrade(s,i,o)}catch(A){H.destroy(o,A)}n[or]()}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(P(!this.upgrade),P(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(P(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[PT];this.setTimeout(l,Ya)}else this.timeout&&this.timeout.refresh&&this.timeout.refresh();if(A.method==="CONNECT")return P(o[ve]===1),this.upgrade=!0,2;if(r)return P(o[ve]===1),this.upgrade=!0,2;if(P((this.headers.length&1)===0),this.headers=[],this.headersSize=0,this.shouldKeepAlive&&o[qa]){let l=this.keepAlive?H.parseKeepAliveTimeout(this.keepAlive):null;if(l!=null){let u=Math.min(l-o[TT],o[LT]);u<=0?i[Je]=!0:o[Va]=u}else o[Va]=o[FT]}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[_i]&&(i[_i]=!1,o[or]()),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(P(s),P(this.timeoutType===Ya),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),P(o>=200),i>-1&&this.bytesRead+t.length>i)return H.destroy(n,new NT),-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;P(n>=100),P((this.headers.length&1)===0);let c=t[wt][t[pt]];if(P(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 vI),-1;if(c.onComplete(i),t[wt][t[pt]++]=null,r[Xu]=!0,r[Br])return P(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[qa]==null||t[qa]===1?setImmediate(()=>t[or]()):t[or]()}else return H.destroy(r,new ro("reset")),tt.ERROR.PAUSED}}};function UI(e){let{socket:t,timeoutType:r,client:n,paused:o}=e.deref();r===no?(!t[Br]||t.writableNeedDrain||n[ve]>1)&&(P(!o,"cannot be paused while waiting for headers"),H.destroy(t,new xT)):r===Ya?o||H.destroy(t,new vT):r===ju&&(P(n[ve]===0&&n[Va]),H.destroy(t,new ro("socket idle timeout")))}async function VT(e,t){e[nn]=t,$u||($u=await Ku,Ku=null),t[Li]=!1,t[Br]=!1,t[Je]=!1,t[_i]=!1,t[on]=0,t[rn]=null,t[Xu]=!1,t[pe]=new Zu(e,t,$u),Oa(t,"error",function(n){P(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[Ga][FI](i));return}this[Ge]=n,this[Ga][FI](n)}),Oa(t,"readable",function(){let n=this[pe];n&&n.readMore()}),Oa(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)))}),Oa(t,"close",function(){let n=this[Ga],o=this[pe];GI(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[HI]=null,n.destroyed){P(n[OI]===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[UT]=n[pt],P(n[ve]===0),n.emit("disconnect",n[PI],[n],i),n[or]()});let r=!1;return t.on("close",()=>{r=!0}),{version:"h1",defaultPipelining:1,write(...n){return zT(e,...n)},resume(){WT(e)},destroy(n,o){r?queueMicrotask(o):t.destroy(n).on("close",o)},get destroyed(){return t.destroyed},busy(n){return!!(t[Br]||t[Je]||t[_i]||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 GI(e){e[rn]&&(clearTimeout(e[rn]),e[rn]=null),e[on]=0}function JT(e,t){t[on]=1,t[rn]=setTimeout(()=>{t[rn]=null,t[on]=2,e[nn]===t&&!t.destroyed&&e[or]()},0),t[rn].unref?.()}function WT(e){let t=e[nn];if(t&&!t.destroyed){if(e[RI]===0?!t[Li]&&t.unref&&(t.unref(),t[Li]=!0):t[Li]&&t.ref&&(t.ref(),t[Li]=!1),e[ve]===0&&e[OI]>0&&t[Xu]){if(t[on]===0)return JT(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[RI]===0)t[pe].timeoutType!==ju&&t[pe].setTimeout(e[Va],ju);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[_T];t[pe].setTimeout(n,no)}}}function $T(e){return e!=="GET"&&e!=="HEAD"&&e!=="OPTIONS"&&e!=="TRACE"&&e!=="CONNECT"}function zT(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)){Wu||(Wu=eo().extractBody);let[m,f]=Wu(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 ST("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),$T(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];GI(h);let g=m=>{t.aborted||t.completed||(H.errorRequest(e,t,m||new _I),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[NI]&&h[OT]++>=e[NI]&&(h[Je]=!0),s&&(h[_i]=!0);let p=`${r} ${n} HTTP/1.1\r
14
+ `;if(typeof o=="string"?p+=`host: ${o}\r
15
+ `:p+=e[MT],i?p+=`connection: upgrade\r
16
+ upgrade: ${i}\r
17
+ `:e[qa]&&!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 I=0;I<B.length;I++)p+=`${f}: ${B[I]}\r
20
+ `;else p+=`${f}: ${B}\r
21
+ `}return DI.sendHeaders.hasSubscribers&&DI.sendHeaders.publish({request:t,headers:p,socket:h}),!A||d===0?LI(g,null,e,t,h,l,p,u):H.isBuffer(A)?LI(g,A,e,t,h,l,p,u):H.isBlobLike(A)?typeof A.stream=="function"?TI(g,A.stream(),e,t,h,l,p,u):jT(g,A,e,t,h,l,p,u):H.isStream(A)?KT(g,A,e,t,h,l,p,u):H.isIterable(A)?TI(g,A,e,t,h,l,p,u):P(!1),!0}function KT(e,t,r,n,o,i,s,a){P(i!==0||r[ve]===0,"stream body cannot be pipelined");let A=!1,c=new Ja({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 _I;queueMicrotask(()=>h(g))}},h=function(g){if(!A){if(A=!0,P(o.destroyed||o[Br]&&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 LI(e,t,r,n,o,i,s,a){try{t?H.isBuffer(t)&&(P(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"):(P(i===null,"no body must not have content length"),o.write(`${s}\r
26
+ `,"latin1")),n.onRequestSent(),r[or]()}catch(A){e(A)}}async function jT(e,t,r,n,o,i,s,a){P(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[or]()}catch(A){e(A)}}async function TI(e,t,r,n,o,i,s,a){P(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)=>{P(A===null),o[Ge]?h(o[Ge]):A=d});o.on("close",c).on("drain",c);let u=new Ja({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 Ja=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[Br]=!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[Br]=!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[or]()}}destroy(t){let{socket:r,client:n,abort:o}=this;r[Br]=!1,t&&(P(n[ve]<=1,"pipeline should only contain this request"),o(t))}};qI.exports=VT});var ZI=b((Sz,jI)=>{"use strict";var ft=w("node:assert"),{pipeline:ZT}=w("node:stream"),te=j(),{RequestContentLengthMismatchError:ed,RequestAbortedError:VI,SocketError:Pi,InformationalError:td}=ie(),{kUrl:Wa,kReset:za,kClient:oo,kRunning:Ka,kPending:XT,kQueue:Qr,kPendingIdx:rd,kRunningIdx:bt,kError:St,kSocket:Ue,kStrictContentLength:e1,kOnError:nd,kMaxConcurrentStreams:KI,kHTTP2Session:kt,kResume:yr,kSize:t1,kHTTPContext:r1}=Ie(),ir=Symbol("open streams"),JI,WI=!1,$a;try{$a=w("node:http2")}catch{$a={constants:{}}}var{constants:{HTTP2_HEADER_AUTHORITY:n1,HTTP2_HEADER_METHOD:o1,HTTP2_HEADER_PATH:i1,HTTP2_HEADER_SCHEME:s1,HTTP2_HEADER_CONTENT_LENGTH:a1,HTTP2_HEADER_EXPECT:A1,HTTP2_HEADER_STATUS:c1}}=$a;function l1(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 u1(e,t){e[Ue]=t,WI||(WI=!0,process.emitWarning("H2 support is experimental, expect them to change at any time.",{code:"UNDICI-H2"}));let r=$a.connect(e[Wa],{createConnection:()=>t,peerMaxConcurrentStreams:e[KI]});r[ir]=0,r[oo]=e,r[Ue]=t,te.addListener(r,"error",h1),te.addListener(r,"frameError",g1),te.addListener(r,"end",p1),te.addListener(r,"goaway",f1),te.addListener(r,"close",function(){let{[oo]:o}=this,{[Ue]:i}=o,s=this[Ue][St]||this[St]||new Pi("closed",te.getSocketInfo(i));if(o[kt]=null,o.destroyed){ft(o[XT]===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][nd](o)}),te.addListener(t,"end",function(){te.destroy(this,new Pi("other side closed",te.getSocketInfo(this)))}),te.addListener(t,"close",function(){let o=this[St]||new Pi("closed",te.getSocketInfo(this));e[Ue]=null,this[kt]!=null&&this[kt].destroy(o),e[rd]=e[bt],ft(e[Ka]===0),e.emit("disconnect",e[Wa],[e],o),e[yr]()});let n=!1;return t.on("close",()=>{n=!0}),{version:"h2",defaultPipelining:1/0,write(...o){return E1(e,...o)},resume(){d1(e)},destroy(o,i){n?queueMicrotask(i):t.destroy(o).on("close",i)},get destroyed(){return t.destroyed},busy(){return!1}}}function d1(e){let t=e[Ue];t?.destroyed===!1&&(e[t1]===0&&e[KI]===0?(t.unref(),e[kt].unref()):(t.ref(),e[kt].ref()))}function h1(e){ft(e.code!=="ERR_TLS_CERT_ALTNAME_INVALID"),this[Ue][St]=e,this[oo][nd](e)}function g1(e,t,r){if(r===0){let n=new td(`HTTP/2: "frameError" received - type ${e}, code ${t}`);this[Ue][St]=n,this[oo][nd](n)}}function p1(){let e=new Pi("other side closed",te.getSocketInfo(this[Ue]));this.destroy(e),te.destroy(this[Ue],e)}function f1(e){let t=this[St]||new Pi(`HTTP/2: "GOAWAY" frame received with code ${e}`,te.getSocketInfo(this)),r=this[oo];if(r[Ue]=null,r[r1]=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[rd]=r[bt]}ft(r[Ka]===0),r.emit("disconnect",r[Wa],[r],t),r[yr]()}function m1(e){return e!=="GET"&&e!=="HEAD"&&e!=="OPTIONS"&&e!=="TRACE"&&e!=="CONNECT"}function E1(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 E=0;E<c.length;E+=2){let Q=c[E+0],R=c[E+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[Wa];u[n1]=i||`${h}${g?`:${g}`:""}`,u[o1]=n;let p=E=>{t.aborted||t.completed||(E=E||new VI,te.errorRequest(e,t,E),d!=null&&te.destroy(d,E),te.destroy(l,E),e[Qr][e[bt]++]=null,e[yr]())};try{t.onConnect(p)}catch(E){te.errorRequest(e,t,E)}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[ir],e[Qr][e[bt]++]=null):d.once("ready",()=>{t.onUpgrade(null,null,d),++r[ir],e[Qr][e[bt]++]=null}),d.once("close",()=>{r[ir]-=1,r[ir]===0&&r.unref()}),!0;u[i1]=o,u[s1]="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[E,Q]=JI(l);u["content-type"]=Q,l=E.stream,f=E.length}if(f==null&&(f=t.contentLength),(f===0||!m)&&(f=null),m1(n)&&f>0&&t.contentLength!=null&&t.contentLength!==f){if(e[e1])return te.errorRequest(e,t,new ed),!1;process.emitWarning(new ed)}f!=null&&(ft(l,"no body must not have content length"),u[a1]=`${f}`),r.ref();let B=n==="GET"||n==="HEAD"||l===null;return a?(u[A1]="100-continue",d=r.request(u,{endStream:B,signal:A}),d.once("continue",I)):(d=r.request(u,{endStream:B,signal:A}),I()),++r[ir],d.once("response",E=>{let{[c1]:Q,...R}=E;if(t.onResponseStarted(),t.aborted){let D=new VI;te.errorRequest(e,t,D),te.destroy(d,D);return}t.onHeaders(Number(Q),l1(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[ir]===0&&r.unref(),p(new td("HTTP/2: stream half-closed (remote)")),e[Qr][e[bt]++]=null,e[rd]=e[bt],e[yr]()}),d.once("close",()=>{r[ir]-=1,r[ir]===0&&r.unref()}),d.once("error",function(E){p(E)}),d.once("frameError",(E,Q)=>{p(new td(`HTTP/2: "frameError" received - type ${E}, code ${Q}`))}),!0;function I(){!l||f===0?$I(p,d,null,e,t,e[Ue],f,m):te.isBuffer(l)?$I(p,d,l,e,t,e[Ue],f,m):te.isBlobLike(l)?typeof l.stream=="function"?zI(p,d,l.stream(),e,t,e[Ue],f,m):C1(p,d,l,e,t,e[Ue],f,m):te.isStream(l)?I1(p,e[Ue],m,d,l,e,t,f):te.isIterable(l)?zI(p,d,l,e,t,e[Ue],f,m):ft(!1)}}function $I(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[za]=!0),o.onRequestSent(),n[yr]()}catch(A){e(A)}}function I1(e,t,r,n,o,i,s,a){ft(a!==0||i[Ka]===0,"stream body cannot be pipelined");let A=ZT(o,n,l=>{l?(te.destroy(A,l),e(l)):(te.removeAllListeners(A),s.onRequestSent(),r||(t[za]=!0),i[yr]())});te.addListener(A,"data",c);function c(l){s.onBodySent(l)}}async function C1(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 ed;let A=Buffer.from(await r.arrayBuffer());t.cork(),t.write(A),t.uncork(),t.end(),o.onBodySent(A),o.onRequestSent(),a||(i[za]=!0),n[yr]()}catch(A){e(A)}}async function zI(e,t,r,n,o,i,s,a){ft(s!==0||n[Ka]===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[za]=!0),n[yr]()}catch(u){e(u)}finally{t.off("close",c).off("drain",c)}}jI.exports=u1});var Za=b((xz,tC)=>{"use strict";var qt=j(),{kBodyUsed:Oi}=Ie(),id=w("node:assert"),{InvalidArgumentError:B1}=ie(),Q1=w("node:events"),y1=[300,301,302,303,307,308],XI=Symbol("body"),ja=class{constructor(t){this[XI]=t,this[Oi]=!1}async*[Symbol.asyncIterator](){id(!this[Oi],"disturbed"),this[Oi]=!0,yield*this[XI]}},od=class{constructor(t,r,n,o){if(r!=null&&(!Number.isInteger(r)||r<0))throw new B1("maxRedirections must be a positive number");qt.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,qt.isStream(this.opts.body)?(qt.bodyLength(this.opts.body)===0&&this.opts.body.on("data",function(){id(!1)}),typeof this.opts.body.readableDidRead!="boolean"&&(this.opts.body[Oi]=!1,Q1.prototype.on.call(this.opts.body,"data",function(){this[Oi]=!0}))):this.opts.body&&typeof this.opts.body.pipeTo=="function"?this.opts.body=new ja(this.opts.body):this.opts.body&&typeof this.opts.body!="string"&&!ArrayBuffer.isView(this.opts.body)&&qt.isIterable(this.opts.body)&&(this.opts.body=new ja(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||qt.isDisturbed(this.opts.body)?null:w1(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}=qt.parseURL(new URL(this.location,this.opts.origin&&new URL(this.opts.path,this.opts.origin))),A=a?`${s}${a}`:s;this.opts.headers=b1(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 w1(e,t){if(y1.indexOf(e)===-1)return null;for(let r=0;r<t.length;r+=2)if(t[r].length===8&&qt.headerNameToString(t[r])==="location")return t[r+1]}function eC(e,t,r){if(e.length===4)return qt.headerNameToString(e)==="host";if(t&&qt.headerNameToString(e).startsWith("content-"))return!0;if(r&&(e.length===13||e.length===6||e.length===19)){let n=qt.headerNameToString(e);return n==="authorization"||n==="cookie"||n==="proxy-authorization"}return!1}function b1(e,t,r){let n=[];if(Array.isArray(e))for(let o=0;o<e.length;o+=2)eC(e[o],t,r)||n.push(e[o],e[o+1]);else if(e&&typeof e=="object")for(let o of Object.keys(e))eC(o,t,r)||n.push(o,e[o]);else id(e==null,"headers must be an object or an array");return n}tC.exports=od});var Xa=b((Dz,rC)=>{"use strict";var k1=Za();function S1({maxRedirections:e}){return t=>function(n,o){let{maxRedirections:i=e}=n;if(!i)return t(n,o);let s=new k1(t,i,n,o);return n={...n,maxRedirections:0},t(n,s)}}rC.exports=S1});var ao=b((vz,dC)=>{"use strict";var sr=w("node:assert"),AC=w("node:net"),x1=w("node:http"),sn=j(),{channels:io}=Hn(),D1=dE(),v1=Vn(),{InvalidArgumentError:Se,InformationalError:R1,ClientDestroyedError:N1}=ie(),F1=Si(),{kUrl:Yt,kServerName:wr,kClient:M1,kBusy:sd,kConnect:U1,kResuming:an,kRunning:Vi,kPending:Ji,kSize:Yi,kQueue:xt,kConnected:L1,kConnecting:so,kNeedDrain:kr,kKeepAliveDefaultTimeout:nC,kHostHeader:T1,kPendingIdx:Dt,kRunningIdx:ar,kError:_1,kPipelining:eA,kKeepAliveTimeoutValue:P1,kMaxHeadersSize:O1,kKeepAliveMaxTimeout:H1,kKeepAliveTimeoutThreshold:G1,kHeadersTimeout:q1,kBodyTimeout:Y1,kStrictContentLength:V1,kConnector:Hi,kMaxRedirections:J1,kMaxRequests:ad,kCounter:W1,kClose:$1,kDestroy:z1,kDispatch:K1,kInterceptors:oC,kLocalAddress:Gi,kMaxResponseSize:j1,kOnError:Z1,kHTTPContext:xe,kMaxConcurrentStreams:X1,kResume:qi}=Ie(),e2=YI(),t2=ZI(),iC=!1,br=Symbol("kClosedResolve"),sC=()=>{};function cC(e){return e[eA]??e[xe]?.defaultPipelining??1}var Ad=class extends v1{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:I,maxRedirections:E,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(E!=null&&(!Number.isInteger(E)||E<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"||AC.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=F1({...f,maxCachedSessions:I,allowH2:z,socketPath:p,timeout:a,...F?{autoSelectFamily:F,autoSelectFamilyAttemptTimeout:K}:void 0,...Q})),r?.Client&&Array.isArray(r.Client)?(this[oC]=r.Client,iC||(iC=!0,process.emitWarning("Client.Options#interceptor is deprecated. Use Dispatcher#compose instead.",{code:"UNDICI-CLIENT-INTERCEPTOR-DEPRECATED"}))):this[oC]=[r2({maxRedirections:E})],this[Yt]=sn.parseOrigin(t),this[Hi]=Q,this[eA]=m??1,this[O1]=n||x1.maxHeaderSize,this[nC]=u??4e3,this[H1]=h??6e5,this[G1]=g??2e3,this[P1]=this[nC],this[wr]=null,this[Gi]=D??null,this[an]=0,this[kr]=0,this[T1]=`host: ${this[Yt].hostname}${this[Yt].port?`:${this[Yt].port}`:""}\r
40
+ `,this[Y1]=A??3e5,this[q1]=o??3e5,this[V1]=B??!0,this[J1]=E,this[ad]=R,this[br]=null,this[j1]=x>-1?x:-1,this[X1]=X??100,this[xe]=null,this[xt]=[],this[ar]=0,this[Dt]=0,this[qi]=ht=>cd(this,ht),this[Z1]=ht=>lC(this,ht)}get pipelining(){return this[eA]}set pipelining(t){this[eA]=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[L1](){return!!this[xe]&&!this[so]&&!this[xe].destroyed}get[sd](){return!!(this[xe]?.busy(null)||this[Yi]>=(cC(this)||1)||this[Ji]>0)}[U1](t){uC(this),this.once("connect",t)}[K1](t,r){let n=t.origin||this[Yt].origin,o=new D1(n,t,r);return this[xt].push(o),this[an]||(sn.bodyLength(o.body)==null&&sn.isIterable(o.body)?(this[an]=1,queueMicrotask(()=>cd(this))):this[qi](!0)),this[an]&&this[kr]!==2&&this[sd]&&(this[kr]=2),this[kr]<2}async[$1](){return new Promise(t=>{this[Yi]?this[br]=t:t(null)})}async[z1](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]()})}},r2=Xa();function lC(e,t){if(e[Vi]===0&&t.code!=="UND_ERR_INFO"&&t.code!=="UND_ERR_SOCKET"){sr(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)}sr(e[Yi]===0)}}async function uC(e){sr(!e[so]),sr(!e[xe]);let{host:t,hostname:r,protocol:n,port:o}=e[Yt];if(r[0]==="["){let i=r.indexOf("]");sr(i!==-1);let s=r.substring(1,i);sr(AC.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",sC),new N1);return}sr(i);try{e[xe]=i.alpnProtocol==="h2"?await t2(e,i):await e2(e,i)}catch(s){throw i.destroy().on("error",sC),s}e[so]=!1,i[W1]=0,i[ad]=e[ad],i[M1]=e,i[_1]=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[Yt],[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(sr(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 lC(e,i);e.emit("connectionError",e[Yt],[e],i)}e[qi]()}function aC(e){e[kr]=0,e.emit("drain",e[Yt],[e])}function cd(e,t){e[an]!==2&&(e[an]=2,n2(e,t),e[an]=0,e[ar]>256&&(e[xt].splice(0,e[ar]),e[Dt]-=e[ar],e[ar]=0))}function n2(e,t){for(;;){if(e.destroyed){sr(e[Ji]===0);return}if(e[br]&&!e[Yi]){e[br](),e[br]=null;return}if(e[xe]&&e[xe].resume(),e[sd])e[kr]=2;else if(e[kr]===2){t?(e[kr]=1,queueMicrotask(()=>aC(e))):aC(e);continue}if(e[Ji]===0||e[Vi]>=(cC(e)||1))return;let r=e[xt][e[Dt]];if(e[Yt].protocol==="https:"&&e[wr]!==r.servername){if(e[Vi]>0)return;e[wr]=r.servername,e[xe]?.destroy(new R1("servername changed"),()=>{e[xe]=null,cd(e)})}if(e[so])return;if(!e[xe]){uC(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)}}dC.exports=Ad});var ld=b((Nz,hC)=>{"use strict";var tA=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)}};hC.exports=class{constructor(){this.head=this.tail=new tA}isEmpty(){return this.head.isEmpty()}push(t){this.head.isFull()&&(this.head=this.head.next=new tA),this.head.push(t)}shift(){let t=this.tail,r=t.shift();return t.isEmpty()&&t.next!==null&&(this.tail=t.next),r}}});var pC=b((Fz,gC)=>{var{kFree:o2,kConnected:i2,kPending:s2,kQueued:a2,kRunning:A2,kSize:c2}=Ie(),An=Symbol("pool"),ud=class{constructor(t){this[An]=t}get connected(){return this[An][i2]}get free(){return this[An][o2]}get pending(){return this[An][s2]}get queued(){return this[An][a2]}get running(){return this[An][A2]}get size(){return this[An][c2]}};gC.exports=ud});var md=b((Mz,bC)=>{"use strict";var l2=Vn(),u2=ld(),{kConnected:dd,kSize:fC,kRunning:mC,kPending:EC,kQueued:Wi,kBusy:d2,kFree:h2,kUrl:g2,kClose:p2,kDestroy:f2,kDispatch:m2}=Ie(),E2=pC(),We=Symbol("clients"),qe=Symbol("needDrain"),$i=Symbol("queue"),hd=Symbol("closed resolve"),gd=Symbol("onDrain"),IC=Symbol("onConnect"),CC=Symbol("onDisconnect"),BC=Symbol("onConnectionError"),pd=Symbol("get dispatcher"),yC=Symbol("add client"),wC=Symbol("remove client"),QC=Symbol("stats"),fd=class extends l2{constructor(t){super(t),this[$i]=new u2,this[We]=[],this[Wi]=0;let r=this;this[gd]=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[hd]&&s.isEmpty()&&Promise.all(r[We].map(A=>A.close())).then(r[hd])},this[IC]=(n,o)=>{r.emit("connect",n,[r,...o])},this[CC]=(n,o,i)=>{r.emit("disconnect",n,[r,...o],i)},this[BC]=(n,o,i)=>{r.emit("connectionError",n,[r,...o],i)},this[QC]=new E2(this)}get[d2](){return this[qe]}get[dd](){return this[We].filter(t=>t[dd]).length}get[h2](){return this[We].filter(t=>t[dd]&&!t[qe]).length}get[EC](){let t=this[Wi];for(let{[EC]:r}of this[We])t+=r;return t}get[mC](){let t=0;for(let{[mC]:r}of this[We])t+=r;return t}get[fC](){let t=this[Wi];for(let{[fC]:r}of this[We])t+=r;return t}get stats(){return this[QC]}async[p2](){this[$i].isEmpty()?await Promise.all(this[We].map(t=>t.close())):await new Promise(t=>{this[hd]=t})}async[f2](t){for(;;){let r=this[$i].shift();if(!r)break;r.handler.onError(t)}await Promise.all(this[We].map(r=>r.destroy(t)))}[m2](t,r){let n=this[pd]();return n?n.dispatch(t,r)||(n[qe]=!0,this[qe]=!this[pd]()):(this[qe]=!0,this[$i].push({opts:t,handler:r}),this[Wi]++),!this[qe]}[yC](t){return t.on("drain",this[gd]).on("connect",this[IC]).on("disconnect",this[CC]).on("connectionError",this[BC]),this[We].push(t),this[qe]&&queueMicrotask(()=>{this[qe]&&this[gd](t[g2],[this,t])}),this}[wC](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)}};bC.exports={PoolBase:fd,kClients:We,kNeedDrain:qe,kAddClient:yC,kRemoveClient:wC,kGetDispatcher:pd}});var Ao=b((Uz,DC)=>{"use strict";var{PoolBase:I2,kClients:rA,kNeedDrain:C2,kAddClient:B2,kGetDispatcher:Q2}=md(),y2=ao(),{InvalidArgumentError:Ed}=ie(),kC=j(),{kUrl:SC,kInterceptors:w2}=Ie(),b2=Si(),Id=Symbol("options"),Cd=Symbol("connections"),xC=Symbol("factory");function k2(e,t){return new y2(e,t)}var Bd=class extends I2{constructor(t,{connections:r,factory:n=k2,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 Ed("invalid connections");if(typeof n!="function")throw new Ed("factory must be a function.");if(o!=null&&typeof o!="function"&&typeof o!="object")throw new Ed("connect must be a function or an object");typeof o!="function"&&(o=b2({...s,maxCachedSessions:a,allowH2:u,socketPath:A,timeout:i,...c?{autoSelectFamily:c,autoSelectFamilyAttemptTimeout:l}:void 0,...o})),super(d),this[w2]=d.interceptors?.Pool&&Array.isArray(d.interceptors.Pool)?d.interceptors.Pool:[],this[Cd]=r||null,this[SC]=kC.parseOrigin(t),this[Id]={...kC.deepClone(d),connect:o,allowH2:u},this[Id].interceptors=d.interceptors?{...d.interceptors}:void 0,this[xC]=n,this.on("connectionError",(h,g,p)=>{for(let m of g){let f=this[rA].indexOf(m);f!==-1&&this[rA].splice(f,1)}})}[Q2](){for(let t of this[rA])if(!t[C2])return t;if(!this[Cd]||this[rA].length<this[Cd]){let t=this[xC](this[SC],this[Id]);return this[B2](t),t}}};DC.exports=Bd});var MC=b((Lz,FC)=>{"use strict";var{BalancedPoolMissingUpstreamError:S2,InvalidArgumentError:x2}=ie(),{PoolBase:D2,kClients:_e,kNeedDrain:zi,kAddClient:v2,kRemoveClient:R2,kGetDispatcher:N2}=md(),F2=Ao(),{kUrl:Qd,kInterceptors:M2}=Ie(),{parseOrigin:vC}=j(),RC=Symbol("factory"),nA=Symbol("options"),NC=Symbol("kGreatestCommonDivisor"),cn=Symbol("kCurrentWeight"),ln=Symbol("kIndex"),mt=Symbol("kWeight"),oA=Symbol("kMaxWeightPerServer"),iA=Symbol("kErrorPenalty");function U2(e,t){if(e===0)return t;for(;t!==0;){let r=t;t=e%t,e=r}return e}function L2(e,t){return new F2(e,t)}var yd=class extends D2{constructor(t=[],{factory:r=L2,...n}={}){if(super(),this[nA]=n,this[ln]=-1,this[cn]=0,this[oA]=this[nA].maxWeightPerServer||100,this[iA]=this[nA].errorPenalty||15,Array.isArray(t)||(t=[t]),typeof r!="function")throw new x2("factory must be a function.");this[M2]=n.interceptors?.BalancedPool&&Array.isArray(n.interceptors.BalancedPool)?n.interceptors.BalancedPool:[],this[RC]=r;for(let o of t)this.addUpstream(o);this._updateBalancedPoolStats()}addUpstream(t){let r=vC(t).origin;if(this[_e].find(o=>o[Qd].origin===r&&o.closed!==!0&&o.destroyed!==!0))return this;let n=this[RC](r,Object.assign({},this[nA]));this[v2](n),n.on("connect",()=>{n[mt]=Math.min(this[oA],n[mt]+this[iA])}),n.on("connectionError",()=>{n[mt]=Math.max(1,n[mt]-this[iA]),this._updateBalancedPoolStats()}),n.on("disconnect",(...o)=>{let i=o[2];i&&i.code==="UND_ERR_SOCKET"&&(n[mt]=Math.max(1,n[mt]-this[iA]),this._updateBalancedPoolStats())});for(let o of this[_e])o[mt]=this[oA];return this._updateBalancedPoolStats(),this}_updateBalancedPoolStats(){let t=0;for(let r=0;r<this[_e].length;r++)t=U2(this[_e][r][mt],t);this[NC]=t}removeUpstream(t){let r=vC(t).origin,n=this[_e].find(o=>o[Qd].origin===r&&o.closed!==!0&&o.destroyed!==!0);return n&&this[R2](n),this}get upstreams(){return this[_e].filter(t=>t.closed!==!0&&t.destroyed!==!0).map(t=>t[Qd].origin)}[N2](){if(this[_e].length===0)throw new S2;if(!this[_e].find(i=>!i[zi]&&i.closed!==!0&&i.destroyed!==!0)||this[_e].map(i=>i[zi]).reduce((i,s)=>i&&s,!0))return;let n=0,o=this[_e].findIndex(i=>!i[zi]);for(;n++<this[_e].length;){this[ln]=(this[ln]+1)%this[_e].length;let i=this[_e][this[ln]];if(i[mt]>this[_e][o][mt]&&!i[zi]&&(o=this[ln]),this[ln]===0&&(this[cn]=this[cn]-this[NC],this[cn]<=0&&(this[cn]=this[oA])),i[mt]>=this[cn]&&!i[zi])return i}return this[cn]=this[_e][o][mt],this[ln]=o,this[_e][o]}};FC.exports=yd});var co=b((Tz,HC)=>{"use strict";var{InvalidArgumentError:sA}=ie(),{kClients:Sr,kRunning:UC,kClose:T2,kDestroy:_2,kDispatch:P2,kInterceptors:O2}=Ie(),H2=Vn(),G2=Ao(),q2=ao(),Y2=j(),V2=Xa(),LC=Symbol("onConnect"),TC=Symbol("onDisconnect"),_C=Symbol("onConnectionError"),J2=Symbol("maxRedirections"),PC=Symbol("onDrain"),OC=Symbol("factory"),wd=Symbol("options");function W2(e,t){return t&&t.connections===1?new q2(e,t):new G2(e,t)}var bd=class extends H2{constructor({factory:t=W2,maxRedirections:r=0,connect:n,...o}={}){if(typeof t!="function")throw new sA("factory must be a function.");if(n!=null&&typeof n!="function"&&typeof n!="object")throw new sA("connect must be a function or an object");if(!Number.isInteger(r)||r<0)throw new sA("maxRedirections must be a positive number");super(o),n&&typeof n!="function"&&(n={...n}),this[O2]=o.interceptors?.Agent&&Array.isArray(o.interceptors.Agent)?o.interceptors.Agent:[V2({maxRedirections:r})],this[wd]={...Y2.deepClone(o),connect:n},this[wd].interceptors=o.interceptors?{...o.interceptors}:void 0,this[J2]=r,this[OC]=t,this[Sr]=new Map,this[PC]=(i,s)=>{this.emit("drain",i,[this,...s])},this[LC]=(i,s)=>{this.emit("connect",i,[this,...s])},this[TC]=(i,s,a)=>{this.emit("disconnect",i,[this,...s],a)},this[_C]=(i,s,a)=>{this.emit("connectionError",i,[this,...s],a)}}get[UC](){let t=0;for(let r of this[Sr].values())t+=r[UC];return t}[P2](t,r){let n;if(t.origin&&(typeof t.origin=="string"||t.origin instanceof URL))n=String(t.origin);else throw new sA("opts.origin must be a non-empty string or URL.");let o=this[Sr].get(n);return o||(o=this[OC](t.origin,this[wd]).on("drain",this[PC]).on("connect",this[LC]).on("disconnect",this[TC]).on("connectionError",this[_C]),this[Sr].set(n,o)),o.dispatch(t,r)}async[T2](){let t=[];for(let r of this[Sr].values())t.push(r.close());this[Sr].clear(),await Promise.all(t)}async[_2](t){let r=[];for(let n of this[Sr].values())r.push(n.destroy(t));this[Sr].clear(),await Promise.all(r)}};HC.exports=bd});var vd=b((_z,ZC)=>{"use strict";var{kProxy:kd,kClose:WC,kDestroy:$C,kDispatch:GC,kInterceptors:$2}=Ie(),{URL:un}=w("node:url"),z2=co(),zC=Ao(),KC=Vn(),{InvalidArgumentError:lo,RequestAbortedError:K2,SecureProxyConnectionError:j2}=ie(),qC=Si(),jC=ao(),aA=Symbol("proxy agent"),AA=Symbol("proxy client"),xr=Symbol("proxy headers"),Sd=Symbol("request tls settings"),YC=Symbol("proxy tls settings"),VC=Symbol("connect endpoint function"),JC=Symbol("tunnel proxy");function Z2(e){return e==="https:"?443:80}function X2(e,t){return new zC(e,t)}var e_=()=>{};function t_(e,t){return t.connections===1?new jC(e,t):new zC(e,t)}var xd=class extends KC{#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 jC(t,{connect:n})}[GC](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[GC](t,r)}async[WC](){return this.#e.close()}async[$C](t){return this.#e.destroy(t)}},Dd=class extends KC{constructor(t){if(super(),!t||typeof t=="object"&&!(t instanceof un)&&!t.uri)throw new lo("Proxy uri is mandatory");let{clientFactory:r=X2}=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[kd]={uri:i,protocol:A},this[$2]=t.interceptors?.ProxyAgent&&Array.isArray(t.interceptors.ProxyAgent)?t.interceptors.ProxyAgent:[],this[Sd]=t.requestTls,this[YC]=t.proxyTls,this[xr]=t.headers||{},this[JC]=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=qC({...t.proxyTls});this[VC]=qC({...t.requestTls});let h=t.factory||t_,g=(p,m)=>{let{protocol:f}=new un(p);return!this[JC]&&f==="http:"&&this[kd].protocol==="http:"?new xd(this[kd].uri,{headers:this[xr],connect:d,factory:h}):h(p,m)};this[AA]=r(o,{connect:d}),this[aA]=new z2({...t,factory:g,connect:async(p,m)=>{let f=p.host;p.port||(f+=`:${Z2(p.protocol)}`);try{let{socket:B,statusCode:I}=await this[AA].connect({origin:s,port:a,path:f,signal:p.signal,headers:{...this[xr],host:p.host},servername:this[YC]?.servername||u});if(I!==200&&(B.on("error",e_).destroy(),m(new K2(`Proxy response (${I}) !== 200 when HTTP Tunneling`))),p.protocol!=="https:"){m(null,B);return}let E;this[Sd]?E=this[Sd].servername:E=p.servername,this[VC]({...p,servername:E,httpSocket:B},m)}catch(B){B.code==="ERR_TLS_CERT_ALTNAME_INVALID"?m(new j2(B)):m(B)}}})}dispatch(t,r){let n=r_(t.headers);if(n_(n),n&&!("host"in n)&&!("Host"in n)){let{host:o}=new un(t.origin);n.host=o}return this[aA].dispatch({...t,headers:n},r)}#e(t){return typeof t=="string"?new un(t):t instanceof un?t:new un(t.uri)}async[WC](){await this[aA].close(),await this[AA].close()}async[$C](){await this[aA].destroy(),await this[AA].destroy()}};function r_(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 n_(e){if(e&&Object.keys(e).find(r=>r.toLowerCase()==="proxy-authorization"))throw new lo("Proxy-Authorization should be sent in ProxyAgent constructor")}ZC.exports=Dd});var oB=b((Pz,nB)=>{"use strict";var o_=Vn(),{kClose:i_,kDestroy:s_,kClosed:XC,kDestroyed:eB,kDispatch:a_,kNoProxyAgent:Ki,kHttpProxyAgent:Dr,kHttpsProxyAgent:dn}=Ie(),tB=vd(),A_=co(),c_={"http:":80,"https:":443},rB=!1,Rd=class extends o_{#e=null;#t=null;#r=null;constructor(t={}){super(),this.#r=t,rB||(rB=!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 A_(i);let s=r??process.env.http_proxy??process.env.HTTP_PROXY;s?this[Dr]=new tB({...i,uri:s}):this[Dr]=this[Ki];let a=n??process.env.https_proxy??process.env.HTTPS_PROXY;a?this[dn]=new tB({...i,uri:a}):this[dn]=this[Dr],this.#n()}[a_](t,r){let n=new URL(t.origin);return this.#i(n).dispatch(t,r)}async[i_](){await this[Ki].close(),this[Dr][XC]||await this[Dr].close(),this[dn][XC]||await this[dn].close()}async[s_](t){await this[Ki].destroy(t),this[Dr][eB]||await this[Dr].destroy(t),this[dn][eB]||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)||c_[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??""}};nB.exports=Rd});var cA=b((Oz,cB)=>{"use strict";var uo=w("node:assert"),{kRetryHandlerDefaultRetry:iB}=Ie(),{RequestRetryError:ho}=ie(),{isDisturbed:sB,parseHeaders:l_,parseRangeHeader:aB,wrapRequestBody:u_}=j();function d_(e){let t=Date.now();return new Date(e).getTime()-t}function AB(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 Nd=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:u_(t.body)},this.abort=null,this.aborted=!1,this.retryOpts={retry:i??e[iB],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[iB](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)?d_(B):B*1e3);let I=B>0?Math.min(B,d):Math.min(u*h**(f-1),d);setTimeout(()=>o(null),I)}onHeaders(t,r,n,o){let i=l_(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=aB(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=AB(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=aB(i["content-range"]);if(a==null)return this.handler.onHeaders(t,r,n,o);let A=AB(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||sB(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||sB(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)}}}};cB.exports=Nd});var uB=b((Hz,lB)=>{"use strict";var h_=bi(),g_=cA(),Fd=class extends h_{#e=null;#t=null;constructor(t,r={}){super(r),this.#e=t,this.#t=r}dispatch(t,r){let n=new g_({...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()}};lB.exports=Fd});var Pd=b((Gz,CB)=>{"use strict";var fB=w("node:assert"),{Readable:p_}=w("node:stream"),{RequestAbortedError:mB,NotSupportedError:f_,InvalidArgumentError:m_,AbortError:Md}=ie(),EB=j(),{ReadableStreamFrom:E_}=j(),rt=Symbol("kConsume"),ji=Symbol("kReading"),vr=Symbol("kBody"),dB=Symbol("kAbort"),IB=Symbol("kContentType"),hB=Symbol("kContentLength"),I_=()=>{},Ud=class extends p_{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[dB]=r,this[rt]=null,this[vr]=null,this[IB]=n,this[hB]=o,this[ji]=!1}destroy(t){return!t&&!this._readableState.endEmitted&&(t=new mB),t&&this[dB](),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?(Td(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 f_}get bodyUsed(){return EB.isDisturbed(this)}get body(){return this[vr]||(this[vr]=E_(this),this[rt]&&(this[vr].getReader(),fB(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 m_("signal must be an AbortSignal");return n?.throwIfAborted(),this._readableState.closeEmitted?null:await new Promise((o,i)=>{this[hB]>r&&this.destroy(new Md);let s=()=>{this.destroy(n.reason??new Md)};n?.addEventListener("abort",s),this.on("close",function(){n?.removeEventListener("abort",s),n?.aborted?i(n.reason??new Md):o(null)}).on("error",I_).on("data",function(a){r-=a.length,r<=0&&this.destroy()}).resume()})}};function C_(e){return e[vr]&&e[vr].locked===!0||e[rt]}function B_(e){return EB.isDisturbed(e)||C_(e)}async function Zi(e,t){return fB(!e[rt]),new Promise((r,n)=>{if(B_(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){_d(this[rt],o)}).on("close",function(){this[rt].body!==null&&_d(this[rt],new mB)}),Q_(e[rt])})})}function Q_(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++)Td(e,t.buffer[o])}else for(let r of t.buffer)Td(e,r);for(t.endEmitted?pB(this[rt]):e.stream.on("end",function(){pB(this[rt])}),e.stream.resume();e.stream.read()!=null;);}function Ld(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 gB(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 pB(e){let{type:t,body:r,resolve:n,stream:o,length:i}=e;try{t==="text"?n(Ld(r,i)):t==="json"?n(JSON.parse(Ld(r,i))):t==="arrayBuffer"?n(gB(r,i).buffer):t==="blob"?n(new Blob(r,{type:o[IB]})):t==="bytes"&&n(gB(r,i)),_d(e)}catch(s){o.destroy(s)}}function Td(e,t){e.length+=t.length,e.body.push(t)}function _d(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)}CB.exports={Readable:Ud,chunksDecode:Ld}});var Od=b((qz,bB)=>{var y_=w("node:assert"),{ResponseStatusCodeError:BB}=ie(),{chunksDecode:QB}=Pd(),w_=128*1024;async function b_({callback:e,body:t,contentType:r,statusCode:n,statusMessage:o,headers:i}){y_(t);let s=[],a=0;try{for await(let u of t)if(s.push(u),a+=u.length,a>w_){s=[],a=0;break}}catch{s=[],a=0}let A=`Response status code ${n}${o?`: ${o}`:""}`;if(n===204||!r||!a){queueMicrotask(()=>e(new BB(A,n,i)));return}let c=Error.stackTraceLimit;Error.stackTraceLimit=0;let l;try{yB(r)?l=JSON.parse(QB(s,a)):wB(r)&&(l=QB(s,a))}catch{}finally{Error.stackTraceLimit=c}queueMicrotask(()=>e(new BB(A,n,i,l)))}var yB=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",wB=e=>e.length>4&&e[4]==="/"&&e[0]==="t"&&e[1]==="e"&&e[2]==="x"&&e[3]==="t";bB.exports={getResolveErrorBodyCallback:b_,isContentTypeApplicationJson:yB,isContentTypeText:wB}});var xB=b((Yz,Hd)=>{"use strict";var k_=w("node:assert"),{Readable:S_}=Pd(),{InvalidArgumentError:go,RequestAbortedError:kB}=ie(),nt=j(),{getResolveErrorBodyCallback:x_}=Od(),{AsyncResource:D_}=w("node:async_hooks"),lA=class extends D_{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 kB:this.removeAbortListener=nt.addAbortListener(this.signal,()=>{this.reason=this.signal.reason??new kB,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}k_(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 S_({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(x_,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 SB(e,t){if(t===void 0)return new Promise((r,n)=>{SB.call(this,e,(o,i)=>o?n(o):r(i))});try{this.dispatch(e,new lA(e,t))}catch(r){if(typeof t!="function")throw r;let n=e?.opaque;queueMicrotask(()=>t(r,{opaque:n}))}}Hd.exports=SB;Hd.exports.RequestHandler=lA});var Xi=b((Vz,RB)=>{var{addAbortListener:v_}=j(),{RequestAbortedError:R_}=ie(),po=Symbol("kListener"),Vt=Symbol("kSignal");function DB(e){e.abort?e.abort(e[Vt]?.reason):e.reason=e[Vt]?.reason??new R_,vB(e)}function N_(e,t){if(e.reason=null,e[Vt]=null,e[po]=null,!!t){if(t.aborted){DB(e);return}e[Vt]=t,e[po]=()=>{DB(e)},v_(e[Vt],e[po])}}function vB(e){e[Vt]&&("removeEventListener"in e[Vt]?e[Vt].removeEventListener("abort",e[po]):e[Vt].removeListener("abort",e[po]),e[Vt]=null,e[po]=null)}RB.exports={addSignal:N_,removeSignal:vB}});var UB=b((Jz,MB)=>{"use strict";var F_=w("node:assert"),{finished:M_,PassThrough:U_}=w("node:stream"),{InvalidArgumentError:fo,InvalidReturnValueError:L_}=ie(),vt=j(),{getResolveErrorBodyCallback:T_}=Od(),{AsyncResource:__}=w("node:async_hooks"),{addSignal:P_,removeSignal:NB}=Xi(),Gd=class extends __{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)}),P_(this,o)}onConnect(t,r){if(this.reason){t(this.reason);return}F_(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 U_,this.callback=null,this.runInAsyncScope(T_,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 L_("expected Writable");M_(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;NB(this),r&&(this.trailers=vt.parseHeaders(t),r.end())}onError(t){let{res:r,callback:n,opaque:o,body:i}=this;NB(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 FB(e,t,r){if(r===void 0)return new Promise((n,o)=>{FB.call(this,e,t,(i,s)=>i?o(i):n(s))});try{this.dispatch(e,new Gd(e,t,r))}catch(n){if(typeof r!="function")throw n;let o=e?.opaque;queueMicrotask(()=>r(n,{opaque:o}))}}MB.exports=FB});var PB=b((Wz,_B)=>{"use strict";var{Readable:TB,Duplex:O_,PassThrough:H_}=w("node:stream"),{InvalidArgumentError:es,InvalidReturnValueError:G_,RequestAbortedError:qd}=ie(),Et=j(),{AsyncResource:q_}=w("node:async_hooks"),{addSignal:Y_,removeSignal:V_}=Xi(),LB=w("node:assert"),mo=Symbol("resume"),Yd=class extends TB{constructor(){super({autoDestroy:!0}),this[mo]=null}_read(){let{[mo]:t}=this;t&&(this[mo]=null,t())}_destroy(t,r){this._read(),r(t)}},Vd=class extends TB{constructor(t){super({autoDestroy:!0}),this[mo]=t}_read(){this[mo]()}_destroy(t,r){!t&&!this._readableState.endEmitted&&(t=new qd),r(t)}},Jd=class extends q_{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 Yd().on("error",Et.nop),this.ret=new O_({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 qd),g&&A&&g(),Et.destroy(l,A),Et.destroy(u,A),Et.destroy(d,A),V_(this),c(A)}}).on("prefinish",()=>{let{req:A}=this;A.push(null)}),this.res=null,Y_(this,n)}onConnect(t,r){let{ret:n,res:o}=this;if(this.reason){t(this.reason);return}LB(!o,"pipeline cannot be retried"),LB(!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 Vd(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 G_("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 qd)}),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 J_(e,t){try{let r=new Jd(e,t);return this.dispatch({...e,body:r.req},r),r.ret}catch(r){return new H_().destroy(r)}}_B.exports=J_});var VB=b(($z,YB)=>{"use strict";var{InvalidArgumentError:Wd,SocketError:W_}=ie(),{AsyncResource:$_}=w("node:async_hooks"),OB=j(),{addSignal:z_,removeSignal:HB}=Xi(),GB=w("node:assert"),$d=class extends $_{constructor(t,r){if(!t||typeof t!="object")throw new Wd("invalid opts");if(typeof r!="function")throw new Wd("invalid callback");let{signal:n,opaque:o,responseHeaders:i}=t;if(n&&typeof n.on!="function"&&typeof n.addEventListener!="function")throw new Wd("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,z_(this,n)}onConnect(t,r){if(this.reason){t(this.reason);return}GB(this.callback),this.abort=t,this.context=null}onHeaders(){throw new W_("bad upgrade",null)}onUpgrade(t,r,n){GB(t===101);let{callback:o,opaque:i,context:s}=this;HB(this),this.callback=null;let a=this.responseHeaders==="raw"?OB.parseRawHeaders(r):OB.parseHeaders(r);this.runInAsyncScope(o,null,null,{headers:a,socket:n,opaque:i,context:s})}onError(t){let{callback:r,opaque:n}=this;HB(this),r&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(r,null,t,{opaque:n})}))}};function qB(e,t){if(t===void 0)return new Promise((r,n)=>{qB.call(this,e,(o,i)=>o?n(o):r(i))});try{let r=new $d(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}))}}YB.exports=qB});var KB=b((zz,zB)=>{"use strict";var K_=w("node:assert"),{AsyncResource:j_}=w("node:async_hooks"),{InvalidArgumentError:zd,SocketError:Z_}=ie(),JB=j(),{addSignal:X_,removeSignal:WB}=Xi(),Kd=class extends j_{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,X_(this,n)}onConnect(t,r){if(this.reason){t(this.reason);return}K_(this.callback),this.abort=t,this.context=r}onHeaders(){throw new Z_("bad connect",null)}onUpgrade(t,r,n){let{callback:o,opaque:i,context:s}=this;WB(this),this.callback=null;let a=r;a!=null&&(a=this.responseHeaders==="raw"?JB.parseRawHeaders(r):JB.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;WB(this),r&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(r,null,t,{opaque:n})}))}};function $B(e,t){if(t===void 0)return new Promise((r,n)=>{$B.call(this,e,(o,i)=>o?n(o):r(i))});try{let r=new Kd(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}))}}zB.exports=$B});var jB=b((Kz,Eo)=>{"use strict";Eo.exports.request=xB();Eo.exports.stream=UB();Eo.exports.pipeline=PB();Eo.exports.upgrade=VB();Eo.exports.connect=KB()});var Zd=b((jz,XB)=>{"use strict";var{UndiciError:eP}=ie(),ZB=Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED"),jd=class e extends eP{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[ZB]===!0}[ZB]=!0};XB.exports={MockNotMatchedError:jd}});var Io=b((Zz,eQ)=>{"use strict";eQ.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((Xz,uQ)=>{"use strict";var{MockNotMatchedError:hn}=Zd(),{kDispatches:uA,kMockAgent:tP,kOriginalDispatch:rP,kOrigin:nP,kGetNetConnect:oP}=Io(),{buildURL:iP}=j(),{STATUS_CODES:sP}=w("node:http"),{types:{isPromise:aP}}=w("node:util");function Ar(e,t){return typeof e=="string"?e===t:e instanceof RegExp?e.test(t):typeof e=="function"?e(t)===!0:!1}function rQ(e){return Object.fromEntries(Object.entries(e).map(([t,r])=>[t.toLocaleLowerCase(),r]))}function nQ(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):rQ(e)[t.toLocaleLowerCase()]}function th(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 oQ(e,t){if(typeof e.headers=="function")return Array.isArray(t)&&(t=th(t)),e.headers(t?rQ(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=nQ(t,r);if(!Ar(n,o))return!1}return!0}function tQ(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 AP(e,{path:t,method:r,body:n,headers:o}){let i=Ar(e.path,t),s=Ar(e.method,r),a=typeof e.body<"u"?Ar(e.body,n):!0,A=oQ(e,o);return i&&s&&a&&A}function iQ(e){return Buffer.isBuffer(e)||e instanceof Uint8Array||e instanceof ArrayBuffer?e:typeof e=="object"?JSON.stringify(e):e.toString()}function sQ(e,t){let r=t.query?iP(t.path,t.query):t.path,n=typeof r=="string"?tQ(r):r,o=e.filter(({consumed:i})=>!i).filter(({path:i})=>Ar(tQ(i),n));if(o.length===0)throw new hn(`Mock dispatch not matched for path '${n}'`);if(o=o.filter(({method:i})=>Ar(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"?Ar(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=>oQ(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 cP(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 Xd(e,t){let r=e.findIndex(n=>n.consumed?AP(n,t):!1);r!==-1&&e.splice(r,1)}function aQ(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 eh(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 AQ(e){return sP[e]||"unknown"}async function lP(e){let t=[];for await(let r of e)t.push(r);return Buffer.concat(t).toString("utf8")}function cQ(e,t){let r=aQ(e),n=sQ(this[uA],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 Xd(this[uA],r),t.onError(A),!0;typeof c=="number"&&c>0?setTimeout(()=>{h(this[uA])},c):h(this[uA]);function h(p,m=i){let f=Array.isArray(e.headers)?th(e.headers):e.headers,B=typeof m=="function"?m({...e,headers:f}):m;if(aP(B)){B.then(R=>h(p,R));return}let I=iQ(B),E=eh(s),Q=eh(a);t.onConnect?.(R=>t.onError(R),null),t.onHeaders?.(o,E,g,AQ(o)),t.onData?.(Buffer.from(I)),t.onComplete?.(Q),Xd(p,r)}function g(){}return!0}function uP(){let e=this[tP],t=this[nP],r=this[rP];return function(o,i){if(e.isMockActive)try{cQ.call(this,o,i)}catch(s){if(s instanceof hn){let a=e[oP]();if(a===!1)throw new hn(`${s.message}: subsequent request to origin ${t} was not allowed (net.connect disabled)`);if(lQ(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 lQ(e,t){let r=new URL(t);return e===!0?!0:!!(Array.isArray(e)&&e.some(n=>Ar(n,r.host)))}function dP(e){if(e){let{agent:t,...r}=e;return r}}uQ.exports={getResponseData:iQ,getMockDispatch:sQ,addMockDispatch:cP,deleteMockDispatch:Xd,buildKey:aQ,generateKeyValues:eh,matchValue:Ar,getResponse:lP,getStatusText:AQ,mockDispatch:cQ,buildMockDispatch:uP,checkNetConnect:lQ,buildMockOptions:dP,getHeaderByName:nQ,buildHeadersFromArray:th}});var Ah=b((eK,ah)=>{"use strict";var{getResponseData:hP,buildKey:gP,addMockDispatch:rh}=ts(),{kDispatches:dA,kDispatchKey:hA,kDefaultHeaders:nh,kDefaultTrailers:oh,kContentLength:ih,kMockDispatch:gA}=Io(),{InvalidArgumentError:Jt}=ie(),{buildURL:pP}=j(),Co=class{constructor(t){this[gA]=t}delay(t){if(typeof t!="number"||!Number.isInteger(t)||t<=0)throw new Jt("waitInMs must be a valid integer > 0");return this[gA].delay=t,this}persist(){return this[gA].persist=!0,this}times(t){if(typeof t!="number"||!Number.isInteger(t)||t<=0)throw new Jt("repeatTimes must be a valid integer > 0");return this[gA].times=t,this}},sh=class{constructor(t,r){if(typeof t!="object")throw new Jt("opts must be an object");if(typeof t.path>"u")throw new Jt("opts.path must be defined");if(typeof t.method>"u"&&(t.method="GET"),typeof t.path=="string")if(t.query)t.path=pP(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[hA]=gP(t),this[dA]=r,this[nh]={},this[oh]={},this[ih]=!1}createMockScopeDispatchData({statusCode:t,data:r,responseOptions:n}){let o=hP(r),i=this[ih]?{"content-length":o.length}:{},s={...this[nh],...i,...n.headers},a={...this[oh],...n.trailers};return{statusCode:t,data:r,headers:s,trailers:a}}validateReplyParameters(t){if(typeof t.statusCode>"u")throw new Jt("statusCode must be defined");if(typeof t.responseOptions!="object"||t.responseOptions===null)throw new Jt("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 Jt("reply options callback must return an object");let c={data:"",responseOptions:{},...A};return this.validateReplyParameters(c),{...this.createMockScopeDispatchData(c)}},s=rh(this[dA],this[hA],i);return new Co(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=rh(this[dA],this[hA],n);return new Co(o)}replyWithError(t){if(typeof t>"u")throw new Jt("error must be defined");let r=rh(this[dA],this[hA],{error:t});return new Co(r)}defaultReplyHeaders(t){if(typeof t>"u")throw new Jt("headers must be defined");return this[nh]=t,this}defaultReplyTrailers(t){if(typeof t>"u")throw new Jt("trailers must be defined");return this[oh]=t,this}replyContentLength(){return this[ih]=!0,this}};ah.exports.MockInterceptor=sh;ah.exports.MockScope=Co});var uh=b((tK,EQ)=>{"use strict";var{promisify:fP}=w("node:util"),mP=ao(),{buildMockDispatch:EP}=ts(),{kDispatches:dQ,kMockAgent:hQ,kClose:gQ,kOriginalClose:pQ,kOrigin:fQ,kOriginalDispatch:IP,kConnected:ch}=Io(),{MockInterceptor:CP}=Ah(),mQ=Ie(),{InvalidArgumentError:BP}=ie(),lh=class extends mP{constructor(t,r){if(super(t,r),!r||!r.agent||typeof r.agent.dispatch!="function")throw new BP("Argument opts.agent must implement Agent");this[hQ]=r.agent,this[fQ]=t,this[dQ]=[],this[ch]=1,this[IP]=this.dispatch,this[pQ]=this.close.bind(this),this.dispatch=EP.call(this),this.close=this[gQ]}get[mQ.kConnected](){return this[ch]}intercept(t){return new CP(t,this[dQ])}async[gQ](){await fP(this[pQ])(),this[ch]=0,this[hQ][mQ.kClients].delete(this[fQ])}};EQ.exports=lh});var gh=b((rK,bQ)=>{"use strict";var{promisify:QP}=w("node:util"),yP=Ao(),{buildMockDispatch:wP}=ts(),{kDispatches:IQ,kMockAgent:CQ,kClose:BQ,kOriginalClose:QQ,kOrigin:yQ,kOriginalDispatch:bP,kConnected:dh}=Io(),{MockInterceptor:kP}=Ah(),wQ=Ie(),{InvalidArgumentError:SP}=ie(),hh=class extends yP{constructor(t,r){if(super(t,r),!r||!r.agent||typeof r.agent.dispatch!="function")throw new SP("Argument opts.agent must implement Agent");this[CQ]=r.agent,this[yQ]=t,this[IQ]=[],this[dh]=1,this[bP]=this.dispatch,this[QQ]=this.close.bind(this),this.dispatch=wP.call(this),this.close=this[BQ]}get[wQ.kConnected](){return this[dh]}intercept(t){return new kP(t,this[IQ])}async[BQ](){await QP(this[QQ])(),this[dh]=0,this[CQ][wQ.kClients].delete(this[yQ])}};bQ.exports=hh});var SQ=b((oK,kQ)=>{"use strict";var xP={pronoun:"it",is:"is",was:"was",this:"this"},DP={pronoun:"they",is:"are",was:"were",this:"these"};kQ.exports=class{constructor(t,r){this.singular=t,this.plural=r}pluralize(t){let r=t===1,n=r?xP:DP,o=r?this.singular:this.plural;return{...n,count:t,noun:o}}}});var DQ=b((sK,xQ)=>{"use strict";var{Transform:vP}=w("node:stream"),{Console:RP}=w("node:console"),NP=process.versions.icu?"\u2705":"Y ",FP=process.versions.icu?"\u274C":"N ";xQ.exports=class{constructor({disableColors:t}={}){this.transform=new vP({transform(r,n,o){o(null,r)}}),this.logger=new RP({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?NP:FP,Invocations:A,Remaining:s?1/0:a-A}));return this.logger.table(r),this.transform.read().toString()}}});var FQ=b((aK,NQ)=>{"use strict";var{kClients:gn}=Ie(),MP=co(),{kAgent:ph,kMockAgentSet:pA,kMockAgentGet:vQ,kDispatches:fh,kIsMockActive:fA,kNetConnect:pn,kGetNetConnect:UP,kOptions:mA,kFactory:EA}=Io(),LP=uh(),TP=gh(),{matchValue:_P,buildMockOptions:PP}=ts(),{InvalidArgumentError:RQ,UndiciError:OP}=ie(),HP=bi(),GP=SQ(),qP=DQ(),mh=class extends HP{constructor(t){if(super(t),this[pn]=!0,this[fA]=!0,t?.agent&&typeof t.agent.dispatch!="function")throw new RQ("Argument opts.agent must implement Agent");let r=t?.agent?t.agent:new MP(t);this[ph]=r,this[gn]=r[gn],this[mA]=PP(t)}get(t){let r=this[vQ](t);return r||(r=this[EA](t),this[pA](t,r)),r}dispatch(t,r){return this.get(t.origin),this[ph].dispatch(t,r)}async close(){await this[ph].close(),this[gn].clear()}deactivate(){this[fA]=!1}activate(){this[fA]=!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 RQ("Unsupported matcher. Must be one of String|Function|RegExp.")}disableNetConnect(){this[pn]=!1}get isMockActive(){return this[fA]}[pA](t,r){this[gn].set(t,r)}[EA](t){let r=Object.assign({agent:this},this[mA]);return this[mA]&&this[mA].connections===1?new LP(t,r):new TP(t,r)}[vQ](t){let r=this[gn].get(t);if(r)return r;if(typeof t!="string"){let n=this[EA]("http://localhost:9999");return this[pA](t,n),n}for(let[n,o]of Array.from(this[gn]))if(o&&typeof n!="string"&&_P(n,t)){let i=this[EA](t);return this[pA](t,i),i[fh]=o[fh],i}}[UP](){return this[pn]}pendingInterceptors(){let t=this[gn];return Array.from(t.entries()).flatMap(([r,n])=>n[fh].map(o=>({...o,origin:r}))).filter(({pending:r})=>r)}assertNoPendingInterceptors({pendingInterceptorsFormatter:t=new qP}={}){let r=this.pendingInterceptors();if(r.length===0)return;let n=new GP("interceptor","interceptors").pluralize(r.length);throw new OP(`
41
+ ${n.count} ${n.noun} ${n.is} pending:
42
+
43
+ ${t.format(r)}
44
+ `.trim())}};NQ.exports=mh});var IA=b((AK,TQ)=>{"use strict";var MQ=Symbol.for("undici.globalDispatcher.1"),{InvalidArgumentError:YP}=ie(),VP=co();LQ()===void 0&&UQ(new VP);function UQ(e){if(!e||typeof e.dispatch!="function")throw new YP("Argument agent must implement Agent");Object.defineProperty(globalThis,MQ,{value:e,writable:!0,enumerable:!1,configurable:!1})}function LQ(){return globalThis[MQ]}TQ.exports={setGlobalDispatcher:UQ,getGlobalDispatcher:LQ}});var CA=b((lK,_Q)=>{"use strict";_Q.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 OQ=b((uK,PQ)=>{"use strict";var JP=Za();PQ.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 JP(r,s,o,i);return r(a,A)}}});var GQ=b((dK,HQ)=>{"use strict";var WP=cA();HQ.exports=e=>t=>function(n,o){return t(n,new WP({...n,retryOptions:{...e,...n.retryOptions}},{handler:o,dispatch:t}))}});var YQ=b((hK,qQ)=>{"use strict";var $P=j(),{InvalidArgumentError:zP,RequestAbortedError:KP}=ie(),jP=CA(),Eh=class extends jP{#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 zP("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=$P.parseHeaders(r)["content-length"];if(s!=null&&s>this.#e)throw new KP(`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 ZP({maxSize:e}={maxSize:1024*1024}){return t=>function(n,o){let{dumpMaxSize:i=e}=n,s=new Eh({maxSize:i},o);return t(n,s)}}qQ.exports=ZP});var WQ=b((gK,JQ)=>{"use strict";var{isIP:XP}=w("node:net"),{lookup:eO}=w("node:dns"),tO=CA(),{InvalidArgumentError:Bo,InformationalError:rO}=ie(),VQ=Math.pow(2,31)-1,Ih=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 rO("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){eO(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===VQ?(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===VQ?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 Ch(this,t,r)}},Ch=class extends tO{#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 Bo("Invalid maxTTL. Must be a positive number");if(e?.maxItems!=null&&(typeof e?.maxItems!="number"||e?.maxItems<1))throw new Bo("Invalid maxItems. Must be a positive number and greater than zero");if(e?.affinity!=null&&e?.affinity!==4&&e?.affinity!==6)throw new Bo("Invalid affinity. Must be either 4 or 6");if(e?.dualStack!=null&&typeof e?.dualStack!="boolean")throw new Bo("Invalid dualStack. Must be a boolean");if(e?.lookup!=null&&typeof e?.lookup!="function")throw new Bo("Invalid lookup. Must be a function");if(e?.pick!=null&&typeof e?.pick!="function")throw new Bo("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 Ih(n);return i=>function(a,A){let c=a.origin.constructor===URL?a.origin:new URL(a.origin);return XP(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((pK,e0)=>{"use strict";var{kConstruct:nO}=Ie(),{kEnumerableProperty:Qo}=j(),{iteratorMixin:oO,isValidHeaderName:rs,isValidHeaderValue:zQ}=et(),{webidl:oe}=Le(),Bh=w("node:assert"),BA=w("node:util"),Re=Symbol("headers map"),ot=Symbol("headers map sorted");function $Q(e){return e===10||e===13||e===9||e===32}function KQ(e){let t=0,r=e.length;for(;r>t&&$Q(e.charCodeAt(r-1));)--r;for(;r>t&&$Q(e.charCodeAt(t));)++t;return t===0&&r===e.length?e:e.substring(t,r)}function jQ(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}.`});Qh(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)Qh(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 Qh(e,t,r){if(r=KQ(r),rs(t)){if(!zQ(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(XQ(e)==="immutable")throw new TypeError("immutable");return yh(e).append(t,r,!1)}function ZQ(e,t){return e[0]<t[0]?-1:1}var QA=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],Bh(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],Bh(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],Bh(i!==null);return r.sort(ZQ)}}},Rt=class e{#e;#t;constructor(t=void 0){oe.util.markAsUncloneable(this),t!==nO&&(this.#t=new QA,this.#e="none",t!==void 0&&(t=oe.converters.HeadersInit(t,"Headers contructor","init"),jQ(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"),Qh(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=KQ(r),rs(t)){if(!zQ(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}[BA.inspect.custom](t,r){return r.depth??=t,`Headers ${BA.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:XQ,setHeadersGuard:iO,getHeadersList:yh,setHeadersList:sO}=Rt;Reflect.deleteProperty(Rt,"getHeadersGuard");Reflect.deleteProperty(Rt,"setHeadersGuard");Reflect.deleteProperty(Rt,"getHeadersList");Reflect.deleteProperty(Rt,"setHeadersList");oO("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},[BA.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(!BA.types.isProxy(e)&&n===Rt.prototype.entries)try{return yh(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>"]})};e0.exports={fill:jQ,compareHeaderName:ZQ,Headers:Rt,HeadersList:QA,getHeadersGuard:XQ,setHeadersGuard:iO,setHeadersList:sO,getHeadersList:yh}});var os=b((fK,d0)=>{"use strict";var{Headers:s0,HeadersList:t0,fill:aO,getHeadersGuard:AO,setHeadersGuard:a0,setHeadersList:A0}=fn(),{extractBody:r0,cloneBody:cO,mixinBody:lO,hasFinalizationRegistry:c0,streamRegistry:l0,bodyUnusable:uO}=eo(),wh=j(),n0=w("node:util"),{kEnumerableProperty:it}=wh,{isValidReasonPhrase:dO,isCancelled:hO,isAborted:gO,isBlobLike:pO,serializeJavascriptValueToJSONString:fO,isErrorLike:mO,isomorphicEncode:EO,environmentSettingsObject:IO}=et(),{redirectStatusSet:CO,nullBodyStatus:BO}=xi(),{kState:Be,kHeaders:cr}=Cr(),{webidl:W}=Le(),{FormData:QO}=Mi(),{URLSerializer:o0}=Ve(),{kConstruct:wA}=Ie(),bh=w("node:assert"),{types:yO}=w("node:util"),wO=new TextEncoder("utf-8"),mn=class e{static error(){return ns(bA(),"immutable")}static json(t,r={}){W.argumentLengthCheck(arguments,1,"Response.json"),r!==null&&(r=W.converters.ResponseInit(r));let n=wO.encode(fO(t)),o=r0(n),i=ns(yo({}),"response");return i0(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,IO.settingsObject.baseUrl)}catch(s){throw new TypeError(`Failed to parse URL from ${t}`,{cause:s})}if(!CO.has(r))throw new RangeError(`Invalid status code ${r}`);let o=ns(yo({}),"immutable");o[Be].status=r;let i=EO(o0(n));return o[Be].headersList.append("location",i,!0),o}constructor(t=null,r={}){if(W.util.markAsUncloneable(this),t===wA)return;t!==null&&(t=W.converters.BodyInit(t)),r=W.converters.ResponseInit(r),this[Be]=yo({}),this[cr]=new s0(wA),a0(this[cr],"response"),A0(this[cr],this[Be].headersList);let n=null;if(t!=null){let[o,i]=r0(t);n={body:o,type:i}}i0(this,r,n)}get type(){return W.brandCheck(this,e),this[Be].type}get url(){W.brandCheck(this,e);let t=this[Be].urlList,r=t[t.length-1]??null;return r===null?"":o0(r,!0)}get redirected(){return W.brandCheck(this,e),this[Be].urlList.length>1}get status(){return W.brandCheck(this,e),this[Be].status}get ok(){return W.brandCheck(this,e),this[Be].status>=200&&this[Be].status<=299}get statusText(){return W.brandCheck(this,e),this[Be].statusText}get headers(){return W.brandCheck(this,e),this[cr]}get body(){return W.brandCheck(this,e),this[Be].body?this[Be].body.stream:null}get bodyUsed(){return W.brandCheck(this,e),!!this[Be].body&&wh.isDisturbed(this[Be].body.stream)}clone(){if(W.brandCheck(this,e),uO(this))throw W.errors.exception({header:"Response.clone",message:"Body has already been consumed."});let t=kh(this[Be]);return c0&&this[Be].body?.stream&&l0.register(this,new WeakRef(this[Be].body.stream)),ns(t,AO(this[cr]))}[n0.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 ${n0.formatWithOptions(r,n)}`}};lO(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 kh(e){if(e.internalResponse)return u0(kh(e.internalResponse),e.type);let t=yo({...e,body:null});return e.body!=null&&(t.body=cO(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 t0(e?.headersList):new t0,urlList:e?.urlList?[...e.urlList]:[]}}function bA(e){let t=mO(e);return yo({type:"error",status:0,error:t?e:new Error(e&&String(e)),aborted:e&&e.name==="AbortError"})}function bO(e){return e.type==="error"&&e.status===0}function yA(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 bh(!(n in t)),r[n]=o,!0}})}function u0(e,t){if(t==="basic")return yA(e,{type:"basic",headersList:e.headersList});if(t==="cors")return yA(e,{type:"cors",headersList:e.headersList});if(t==="opaque")return yA(e,{type:"opaque",urlList:Object.freeze([]),status:0,statusText:"",body:null});if(t==="opaqueredirect")return yA(e,{type:"opaqueredirect",status:0,statusText:"",headersList:[],body:null});bh(!1)}function kO(e,t=null){return bh(hO(e)),gO(e)?bA(Object.assign(new DOMException("The operation was aborted.","AbortError"),{cause:t})):bA(Object.assign(new DOMException("Request was cancelled."),{cause:t}))}function i0(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&&!dO(String(t.statusText)))throw new TypeError("Invalid statusText");if("status"in t&&t.status!=null&&(e[Be].status=t.status),"statusText"in t&&t.statusText!=null&&(e[Be].statusText=t.statusText),"headers"in t&&t.headers!=null&&aO(e[cr],t.headers),r){if(BO.includes(e.status))throw W.errors.exception({header:"Response constructor",message:`Invalid response status code ${e.status}`});e[Be].body=r.body,r.type!=null&&!e[Be].headersList.contains("content-type",!0)&&e[Be].headersList.append("content-type",r.type,!0)}}function ns(e,t){let r=new mn(wA);return r[Be]=e,r[cr]=new s0(wA),A0(r[cr],e.headersList),a0(r[cr],t),c0&&e.body?.stream&&l0.register(r,new WeakRef(e.body.stream)),r}W.converters.ReadableStream=W.interfaceConverter(ReadableStream);W.converters.FormData=W.interfaceConverter(QO);W.converters.URLSearchParams=W.interfaceConverter(URLSearchParams);W.converters.XMLHttpRequestBodyInit=function(e,t,r){return typeof e=="string"?W.converters.USVString(e,t,r):pO(e)?W.converters.Blob(e,t,r,{strict:!1}):ArrayBuffer.isView(e)||yO.isArrayBuffer(e)?W.converters.BufferSource(e,t,r):wh.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}]);d0.exports={isNetworkError:bO,makeNetworkError:bA,makeResponse:yo,makeAppropriateNetworkError:kO,filterResponse:u0,Response:mn,cloneResponse:kh,fromInnerResponse:ns}});var f0=b((mK,p0)=>{"use strict";var{kConnected:h0,kSize:g0}=Ie(),Sh=class{constructor(t){this.value=t}deref(){return this.value[h0]===0&&this.value[g0]===0?void 0:this.value}},xh=class{constructor(t){this.finalizer=t}register(t,r){t.on&&t.on("disconnect",()=>{t[h0]===0&&t[g0]===0&&this.finalizer(r)})}unregister(t){}};p0.exports=function(){return process.env.NODE_V8_COVERAGE&&process.version.startsWith("v18")?(process._rawDebug("Using compatibility WeakRef and FinalizationRegistry"),{WeakRef:Sh,FinalizationRegistry:xh}):{WeakRef,FinalizationRegistry}}});var wo=b((EK,R0)=>{"use strict";var{extractBody:SO,mixinBody:xO,cloneBody:DO,bodyUnusable:m0}=eo(),{Headers:k0,fill:vO,HeadersList:DA,setHeadersGuard:vh,getHeadersGuard:RO,setHeadersList:S0,getHeadersList:E0}=fn(),{FinalizationRegistry:NO}=f0()(),SA=j(),I0=w("node:util"),{isValidHTTPToken:FO,sameOrigin:C0,environmentSettingsObject:kA}=et(),{forbiddenMethodsSet:MO,corsSafeListedMethodsSet:UO,referrerPolicy:LO,requestRedirect:TO,requestMode:_O,requestCredentials:PO,requestCache:OO,requestDuplex:HO}=xi(),{kEnumerableProperty:Ne,normalizedMethodRecordsBase:GO,normalizedMethodRecords:qO}=SA,{kHeaders:st,kSignal:xA,kState:fe,kDispatcher:Dh}=Cr(),{webidl:G}=Le(),{URLSerializer:YO}=Ve(),{kConstruct:vA}=Ie(),VO=w("node:assert"),{getMaxListeners:B0,setMaxListeners:Q0,getEventListeners:JO,defaultMaxListeners:y0}=w("node:events"),WO=Symbol("abortController"),x0=new NO(({signal:e,abort:t})=>{e.removeEventListener("abort",t)}),RA=new WeakMap;function w0(e){return t;function t(){let r=e.deref();if(r!==void 0){x0.unregister(t),this.removeEventListener("abort",t),r.abort(this.reason);let n=RA.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()}RA.delete(r.signal)}}}}var b0=!1,Rr=class e{constructor(t,r={}){if(G.util.markAsUncloneable(this),t===vA)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=kA.settingsObject.baseUrl,a=null;if(typeof t=="string"){this[Dh]=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=NA({urlList:[f]}),i="cors"}else this[Dh]=r.dispatcher||t[Dh],VO(t instanceof e),o=t[fe],a=t[xA];let A=kA.settingsObject.origin,c="client";if(o.window?.constructor?.name==="EnvironmentSettingsObject"&&C0(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=NA({method:o.method,headersList:o.headersList,unsafeRequest:o.unsafeRequest,client:kA.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(I){throw new TypeError(`Referrer "${f}" is not a valid URL.`,{cause:I})}B.protocol==="about:"&&B.hostname==="client"||A&&!C0(B,kA.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=qO[f];if(B!==void 0)o.method=B;else{if(!FO(f))throw new TypeError(`'${f}' is not a valid HTTP method.`);let I=f.toUpperCase();if(MO.has(I))throw new TypeError(`'${f}' HTTP method is unsupported.`);f=GO[I]??f,o.method=f}!b0&&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"}),b0=!0)}r.signal!==void 0&&(a=r.signal),this[fe]=o;let d=new AbortController;if(this[xA]=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[WO]=d;let f=new WeakRef(d),B=w0(f);try{(typeof B0=="function"&&B0(a)===y0||JO(a,"abort").length>=y0)&&Q0(1500,a)}catch{}SA.addAbortListener(a,B),x0.register(d,{signal:a,abort:B},B)}}if(this[st]=new k0(vA),S0(this[st],o.headersList),vh(this[st],"request"),u==="no-cors"){if(!UO.has(o.method))throw new TypeError(`'${o.method} is unsupported in no-cors mode.`);vh(this[st],"request-no-cors")}if(l){let f=E0(this[st]),B=r.headers!==void 0?r.headers:new DA(f);if(f.clear(),B instanceof DA){for(let{name:I,value:E}of B.rawValues())f.append(I,E,!1);f.cookies=B.cookies}else vO(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]=SO(r.body,o.keepalive);g=f,B&&!E0(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(m0(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),YO(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[xA]}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&&SA.isDisturbed(this[fe].body.stream)}get duplex(){return G.brandCheck(this,e),"half"}clone(){if(G.brandCheck(this,e),m0(this))throw new TypeError("unusable");let t=D0(this[fe]),r=new AbortController;if(this.signal.aborted)r.abort(this.signal.reason);else{let n=RA.get(this.signal);n===void 0&&(n=new Set,RA.set(this.signal,n));let o=new WeakRef(r);n.add(o),SA.addAbortListener(r.signal,w0(o))}return v0(t,r.signal,RO(this[st]))}[I0.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 ${I0.formatWithOptions(r,n)}`}};xO(Rr);function NA(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 DA(e.headersList):new DA}}function D0(e){let t=NA({...e,body:null});return e.body!=null&&(t.body=DO(t,e.body)),t}function v0(e,t,r){let n=new Rr(vA);return n[fe]=e,n[xA]=t,n[st]=new k0(vA),S0(n[st],e.headersList),vh(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:LO},{key:"mode",converter:G.converters.DOMString,allowedValues:_O},{key:"credentials",converter:G.converters.DOMString,allowedValues:PO},{key:"cache",converter:G.converters.DOMString,allowedValues:OO},{key:"redirect",converter:G.converters.DOMString,allowedValues:TO},{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:HO},{key:"dispatcher",converter:G.converters.any}]);R0.exports={Request:Rr,makeRequest:NA,fromInnerRequest:v0,cloneRequest:D0}});var ss=b((IK,J0)=>{"use strict";var{makeNetworkError:le,makeAppropriateNetworkError:FA,filterResponse:Rh,makeResponse:MA,fromInnerResponse:$O}=os(),{HeadersList:N0}=fn(),{Request:zO,cloneRequest:KO}=wo(),Nr=w("node:zlib"),{bytesMatch:jO,makePolicyContainer:ZO,clonePolicyContainer:XO,requestBadPort:eH,TAOCheck:tH,appendRequestOriginHeader:rH,responseLocationURL:nH,requestCurrentURL:Wt,setRequestReferrerPolicyOnRedirect:oH,tryUpgradeRequestToAPotentiallyTrustworthyURL:iH,createOpaqueTimingInfo:Lh,appendFetchMetadata:sH,corsCheck:aH,crossOriginResourcePolicyCheck:AH,determineRequestsReferrer:cH,coarsenedSharedCurrentTime:is,createDeferredPromise:lH,isBlobLike:uH,sameOrigin:Uh,isCancelled:En,isAborted:F0,isErrorLike:dH,fullyReadBody:hH,readableStreamClose:gH,isomorphicEncode:UA,urlIsLocal:pH,urlIsHttpHttpsScheme:Th,urlHasHttpsScheme:fH,clampAndCoarsenConnectionTimingInfo:mH,simpleRangeHeaderValue:EH,buildContentRange:IH,createInflate:CH,extractMimeType:BH}=et(),{kState:T0,kDispatcher:QH}=Cr(),In=w("node:assert"),{safelyExtractBody:_h,extractBody:M0}=eo(),{redirectStatusSet:_0,nullBodyStatus:P0,safeMethodsSet:yH,requestBodyHeader:wH,subresourceSet:bH}=xi(),kH=w("node:events"),{Readable:SH,pipeline:xH,finished:DH}=w("node:stream"),{addAbortListener:vH,isErrored:RH,isReadable:LA,bufferToLowerCasedHeaderName:U0}=j(),{dataURLProcessor:NH,serializeAMimeType:FH,minimizeSupportedMimeType:MH}=Ve(),{getGlobalDispatcher:UH}=IA(),{webidl:LH}=Le(),{STATUS_CODES:TH}=w("node:http"),_H=["GET","HEAD"],PH=typeof __UNDICI_IS_NODE__<"u"||typeof esbuildDetection<"u"?"node":"undici",Nh,TA=class extends kH{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 OH(e){O0(e,"fetch")}function HH(e,t=void 0){LH.argumentLengthCheck(arguments,1,"globalThis.fetch");let r=lH(),n;try{n=new zO(e,t)}catch(l){return r.reject(l),r.promise}let o=n[T0];if(n.signal.aborted)return Fh(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 vH(n.signal,()=>{a=!0,In(A!=null),A.abort(n.signal.reason);let l=s?.deref();Fh(r,o,l,n.signal.reason)}),A=G0({request:o,processResponseEndOfBody:OH,processResponse:l=>{if(!a){if(l.aborted){Fh(r,o,s,A.serializedAbortReason);return}if(l.type==="error"){r.reject(new TypeError("fetch failed",{cause:l.error}));return}s=new WeakRef($O(l,"immutable")),r.resolve(s.deref()),r=null}},dispatcher:n[QH]}),r.promise}function O0(e,t="other"){if(e.type==="error"&&e.aborted||!e.urlList?.length)return;let r=e.urlList[0],n=e.timingInfo,o=e.cacheState;Th(r)&&n!==null&&(e.timingAllowPassed||(n=Lh({startTime:n.startTime}),o=""),n.endTime=is(),e.timingInfo=n,H0(n,r.href,t,globalThis,o))}var H0=performance.markResourceTiming;function Fh(e,t,r,n){if(e&&e.reject(n),t.body!=null&&LA(t.body?.stream)&&t.body.stream.cancel(n).catch(i=>{if(i.code!=="ERR_INVALID_STATE")throw i}),r==null)return;let o=r[T0];o.body!=null&&LA(o.body?.stream)&&o.body.stream.cancel(n).catch(i=>{if(i.code!=="ERR_INVALID_STATE")throw i})}function G0({request:e,processRequestBodyChunkLength:t,processRequestEndOfBody:r,processResponse:n,processResponseEndOfBody:o,processResponseConsumeBody:i,useParallelQueue:s=!1,dispatcher:a=UH()}){In(a);let A=null,c=!1;e.client!=null&&(A=e.client.globalObject,c=e.client.crossOriginIsolatedCapability);let l=is(c),u=Lh({startTime:l}),d={controller:new TA(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=XO(e.client.policyContainer):e.policyContainer=ZO()),e.headersList.contains("accept",!0)||e.headersList.append("accept","*/*",!0),e.headersList.contains("accept-language",!0)||e.headersList.append("accept-language","*",!0),e.priority,bH.has(e.destination),q0(d).catch(h=>{d.controller.terminate(h)}),d.controller}async function q0(e,t=!1){let r=e.request,n=null;if(r.localURLsOnly&&!pH(Wt(r))&&(n=le("local URLs only")),iH(r),eH(r)==="blocked"&&(n=le("bad port")),r.referrerPolicy===""&&(r.referrerPolicy=r.policyContainer.referrerPolicy),r.referrer!=="no-referrer"&&(r.referrer=cH(r)),n===null&&(n=await(async()=>{let i=Wt(r);return Uh(i,r.url)&&r.responseTainting==="basic"||i.protocol==="data:"||r.mode==="navigate"||r.mode==="websocket"?(r.responseTainting="basic",await L0(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 L0(e)):Th(Wt(r))?(r.responseTainting="cors",await Y0(e)):le("URL scheme must be a HTTP(S) scheme")})()),t)return n;n.status!==0&&!n.internalResponse&&(r.responseTainting,r.responseTainting==="basic"?n=Rh(n,"basic"):r.responseTainting==="cors"?n=Rh(n,"cors"):r.responseTainting==="opaque"?n=Rh(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"||P0.includes(o.status))&&(o.body=null,e.controller.dump=!0),r.integrity){let i=a=>Mh(e,le(a));if(r.responseTainting==="opaque"||n.body==null){i(n.error);return}let s=a=>{if(!jO(a,r.integrity)){i("integrity mismatch");return}n.body=_h(a)[0],Mh(e,n)};await hH(n.body,s,i)}else Mh(e,n)}function L0(e){if(En(e)&&e.request.redirectCount===0)return Promise.resolve(FA(e));let{request:t}=e,{protocol:r}=Wt(t);switch(r){case"about:":return Promise.resolve(le("about scheme is not supported"));case"blob:":{Nh||(Nh=w("node:buffer").resolveObjectURL);let n=Wt(t);if(n.search.length!==0)return Promise.resolve(le("NetworkError when attempting to fetch resource."));let o=Nh(n.toString());if(t.method!=="GET"||!uH(o))return Promise.resolve(le("invalid method"));let i=MA(),s=o.size,a=UA(`${s}`),A=o.type;if(t.headersList.contains("range",!0)){i.rangeRequested=!0;let c=t.headersList.get("range",!0),l=EH(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=M0(h);i.body=g[0];let p=UA(`${h.size}`),m=IH(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=M0(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=Wt(t),o=NH(n);if(o==="failure")return Promise.resolve(le("failed to fetch the data URL"));let i=FH(o.mimeType);return Promise.resolve(MA({statusText:"OK",headersList:[["content-type",{name:"Content-Type",value:i}]],body:_h(o.body)[0]}))}case"file:":return Promise.resolve(le("not implemented... yet..."));case"http:":case"https:":return Y0(e).catch(n=>le(n));default:return Promise.resolve(le("unknown scheme"))}}function GH(e,t){e.request.done=!0,e.processResponseDone!=null&&queueMicrotask(()=>e.processResponseDone(t))}function Mh(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=Lh(r),a="");let c=0;if(e.request.mode!=="navigator"||!t.hasCrossOriginRedirects){c=t.status;let l=BH(t.headersList);l!=="failure"&&(A.contentType=MH(l))}e.request.initiatorType!=null&&H0(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():DH(o.body.stream,()=>{n()})}async function Y0(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 V0(e),t.responseTainting==="cors"&&aH(t,r)==="failure")return le("cors failure");tH(t,r)==="failure"&&(t.timingAllowFailed=!0)}return(t.responseTainting==="opaque"||r.type==="opaque")&&AH(t.origin,t.client,t.destination,n)==="blocked"?le("blocked"):(_0.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 qH(e,r):In(!1)),r.timingInfo=o,r)}function qH(e,t){let r=e.request,n=t.internalResponse?t.internalResponse:t,o;try{if(o=nH(n,Wt(r).hash),o==null)return t}catch(s){return Promise.resolve(le(s))}if(!Th(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)&&!Uh(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&&!_H.includes(r.method)){r.method="GET",r.body=null;for(let s of wH)r.headersList.delete(s)}Uh(Wt(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=_h(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),oH(r,n),q0(e,!0)}async function V0(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=KO(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=UA(`${l}`)),u!=null&&i.headersList.append("content-length",u,!0),l!=null&&i.keepalive,i.referrer instanceof URL&&i.headersList.append("referer",UA(i.referrer.href),!0),rH(i),sH(i),i.headersList.contains("user-agent",!0)||i.headersList.append("user-agent",PH),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)||(fH(Wt(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 YH(o,c,r);!yH.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)?FA(e):le("proxy authentication required");if(s.status===421&&!r&&(n.body==null||n.body.source!=null)){if(En(e))return FA(e);e.controller.connection.destroy(),s=await V0(e,t,!0)}return s}async function YH(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=MA({status:p,statusText:m,headersList:f,socket:B});else{let I=g[Symbol.asyncIterator]();e.controller.next=()=>I.next(),o=MA({status:p,statusText:m,headersList:f})}}catch(g){return g.name==="AbortError"?(e.controller.connection.destroy(),FA(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(F0(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){gH(e.controller.controller),GH(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),RH(u)){e.controller.terminate();return}if(e.controller.controller.desiredSize<=0)return}};function d(g){F0(e)?(o.aborted=!0,LA(u)&&e.controller.controller.error(e.controller.serializedAbortReason)):LA(u)&&e.controller.controller.error(new TypeError("terminated",{cause:dH(g)?g:void 0})),e.controller.connection.destroy()}return o;function h({body:g}){let p=Wt(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(I){let{connection:E}=e.controller;i.finalConnectionTimingInfo=mH(void 0,i.postRedirectStartTime,e.crossOriginIsolatedCapability),E.destroyed?I(new DOMException("The operation was aborted.","AbortError")):(e.controller.on("terminated",I),this.abort=E.abort=I),i.finalNetworkRequestStartTime=is(e.crossOriginIsolatedCapability)},onResponseStarted(){i.finalNetworkResponseStartTime=is(e.crossOriginIsolatedCapability)},onHeaders(I,E,Q,R){if(I<200)return;let D="",x=new N0;for(let z=0;z<E.length;z+=2)x.append(U0(E[z]),E[z+1].toString("latin1"),!0);D=x.get("location",!0),this.body=new SH({read:Q});let F=[],K=D&&n.redirect==="follow"&&_0.has(I);if(n.method!=="HEAD"&&n.method!=="CONNECT"&&!P0.includes(I)&&!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 Tt=be[zr].trim();if(Tt==="x-gzip"||Tt==="gzip")F.push(Nr.createGunzip({flush:Nr.constants.Z_SYNC_FLUSH,finishFlush:Nr.constants.Z_SYNC_FLUSH}));else if(Tt==="deflate")F.push(CH({flush:Nr.constants.Z_SYNC_FLUSH,finishFlush:Nr.constants.Z_SYNC_FLUSH}));else if(Tt==="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:I,statusText:R,headersList:x,body:F.length?xH(this.body,...F,z=>{z&&this.onError(z)}).on("error",X):this.body.on("error",X)}),!0},onData(I){if(e.controller.dump)return;let E=I;return i.encodedBodySize+=E.byteLength,this.body.push(E)},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(I){this.abort&&e.controller.off("terminated",this.abort),this.body?.destroy(I),e.controller.terminate(I),B(I)},onUpgrade(I,E,Q){if(I!==101)return;let R=new N0;for(let D=0;D<E.length;D+=2)R.append(U0(E[D]),E[D+1].toString("latin1"),!0);return f({status:I,statusText:TH[I],headersList:R,socket:Q}),!0}}))}}J0.exports={fetch:HH,Fetch:TA,fetching:G0,finalizeAndReportTiming:O0}});var Ph=b((CK,W0)=>{"use strict";W0.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 z0=b((BK,$0)=>{"use strict";var{webidl:at}=Le(),_A=Symbol("ProgressEvent state"),Oh=class e extends Event{constructor(t,r={}){t=at.converters.DOMString(t,"ProgressEvent constructor","type"),r=at.converters.ProgressEventInit(r??{}),super(t,r),this[_A]={lengthComputable:r.lengthComputable,loaded:r.loaded,total:r.total}}get lengthComputable(){return at.brandCheck(this,e),this[_A].lengthComputable}get loaded(){return at.brandCheck(this,e),this[_A].loaded}get total(){return at.brandCheck(this,e),this[_A].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}]);$0.exports={ProgressEvent:Oh}});var j0=b((QK,K0)=>{"use strict";function VH(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"}}K0.exports={getEncoding:VH}});var iy=b((yK,oy)=>{"use strict";var{kState:bo,kError:Hh,kResult:Z0,kAborted:as,kLastProgressEventFired:Gh}=Ph(),{ProgressEvent:JH}=z0(),{getEncoding:X0}=j0(),{serializeAMimeType:WH,parseMIMEType:ey}=Ve(),{types:$H}=w("node:util"),{StringDecoder:ty}=w("string_decoder"),{btoa:ry}=w("node:buffer"),zH={enumerable:!0,writable:!1,configurable:!1};function KH(e,t,r,n){if(e[bo]==="loading")throw new DOMException("Invalid state","InvalidStateError");e[bo]="loading",e[Z0]=null,e[Hh]=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&&$H.isUint8Array(l))s.push(l),(e[Gh]===void 0||Date.now()-e[Gh]>=50)&&!e[as]&&(e[Gh]=Date.now(),queueMicrotask(()=>{Fr("progress",e)})),a=i.read();else if(c){queueMicrotask(()=>{e[bo]="done";try{let u=jH(s,r,t.type,n);if(e[as])return;e[Z0]=u,Fr("load",e)}catch(u){e[Hh]=u,Fr("error",e)}e[bo]!=="loading"&&Fr("loadend",e)});break}}catch(c){if(e[as])return;queueMicrotask(()=>{e[bo]="done",e[Hh]=c,Fr("error",e),e[bo]!=="loading"&&Fr("loadend",e)});break}})()}function Fr(e,t){let r=new JH(e,{bubbles:!1,cancelable:!1});t.dispatchEvent(r)}function jH(e,t,r,n){switch(t){case"DataURL":{let o="data:",i=ey(r||"application/octet-stream");i!=="failure"&&(o+=WH(i)),o+=";base64,";let s=new ty("latin1");for(let a of e)o+=ry(s.write(a));return o+=ry(s.end()),o}case"Text":{let o="failure";if(n&&(o=X0(n)),o==="failure"&&r){let i=ey(r);i!=="failure"&&(o=X0(i.parameters.get("charset")))}return o==="failure"&&(o="UTF-8"),ZH(e,o)}case"ArrayBuffer":return ny(e).buffer;case"BinaryString":{let o="",i=new ty("latin1");for(let s of e)o+=i.write(s);return o+=i.end(),o}}}function ZH(e,t){let r=ny(e),n=XH(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 XH(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 ny(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))}oy.exports={staticPropertyDescriptors:zH,readOperation:KH,fireAProgressEvent:Fr}});var cy=b((wK,Ay)=>{"use strict";var{staticPropertyDescriptors:ko,readOperation:PA,fireAProgressEvent:sy}=iy(),{kState:Cn,kError:ay,kResult:OA,kEvents:ae,kAborted:eG}=Ph(),{webidl:de}=Le(),{kEnumerableProperty:$e}=j(),Nt=class e extends EventTarget{constructor(){super(),this[Cn]="empty",this[OA]=null,this[ay]=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}),PA(this,t,"ArrayBuffer")}readAsBinaryString(t){de.brandCheck(this,e),de.argumentLengthCheck(arguments,1,"FileReader.readAsBinaryString"),t=de.converters.Blob(t,{strict:!1}),PA(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")),PA(this,t,"Text",r)}readAsDataURL(t){de.brandCheck(this,e),de.argumentLengthCheck(arguments,1,"FileReader.readAsDataURL"),t=de.converters.Blob(t,{strict:!1}),PA(this,t,"DataURL")}abort(){if(this[Cn]==="empty"||this[Cn]==="done"){this[OA]=null;return}this[Cn]==="loading"&&(this[Cn]="done",this[OA]=null),this[eG]=!0,sy("abort",this),this[Cn]!=="loading"&&sy("loadend",this)}get readyState(){switch(de.brandCheck(this,e),this[Cn]){case"empty":return this.EMPTY;case"loading":return this.LOADING;case"done":return this.DONE}}get result(){return de.brandCheck(this,e),this[OA]}get error(){return de.brandCheck(this,e),this[ay]}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});Ay.exports={FileReader:Nt}});var HA=b((bK,ly)=>{"use strict";ly.exports={kConstruct:Ie().kConstruct}});var hy=b((kK,dy)=>{"use strict";var tG=w("node:assert"),{URLSerializer:uy}=Ve(),{isValidHeaderName:rG}=et();function nG(e,t,r=!1){let n=uy(e,r),o=uy(t,r);return n===o}function oG(e){tG(e!==null);let t=[];for(let r of e.split(","))r=r.trim(),rG(r)&&t.push(r);return t}dy.exports={urlEquals:nG,getFieldValues:oG}});var fy=b((SK,py)=>{"use strict";var{kConstruct:iG}=HA(),{urlEquals:sG,getFieldValues:qh}=hy(),{kEnumerableProperty:Bn,isDisturbed:aG}=j(),{webidl:T}=Le(),{Response:AG,cloneResponse:cG,fromInnerResponse:lG}=os(),{Request:lr,fromInnerRequest:uG}=wo(),{kState:Ft}=Cr(),{fetching:dG}=ss(),{urlIsHttpHttpsScheme:GA,createDeferredPromise:So,readAllBytes:hG}=et(),Yh=w("node:assert"),qA=class e{#e;constructor(){arguments[0]!==iG&&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(!GA(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 lr(d)[Ft];if(!GA(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(dG({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=qh(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 lr?o=t[Ft]:o=new lr(t)[Ft],!GA(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=qh(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&&(aG(i.body.stream)||i.body.stream.locked))throw T.errors.exception({header:n,message:"Response body is locked or disturbed"});let s=cG(i),a=So();if(i.body!=null){let g=i.body.stream.getReader();hG(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 lr){if(o=t[Ft],o.method!=="GET"&&!r.ignoreMethod)return!1}else Yh(typeof t=="string"),o=new lr(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 lr){if(o=t[Ft],o.method!=="GET"&&!r.ignoreMethod)return[]}else typeof t=="string"&&(o=new lr(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=uG(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);Yh(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(!GA(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);Yh(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=""),!sG(i,s,!0))return!1;if(n==null||o?.ignoreVary||!n.headersList.contains("vary"))return!0;let a=qh(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 lr){if(o=t[Ft],o.method!=="GET"&&!r.ignoreMethod)return[]}else typeof t=="string"&&(o=new lr(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=lG(a,"immutable");if(s.push(A.clone()),s.length>=n)break}return Object.freeze(s)}};Object.defineProperties(qA.prototype,{[Symbol.toStringTag]:{value:"Cache",configurable:!0},match:Bn,matchAll:Bn,add:Bn,addAll:Bn,put:Bn,delete:Bn,keys:Bn});var gy=[{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(gy);T.converters.MultiCacheQueryOptions=T.dictionaryConverter([...gy,{key:"cacheName",converter:T.converters.DOMString}]);T.converters.Response=T.interfaceConverter(AG);T.converters["sequence<RequestInfo>"]=T.sequenceConverter(T.converters.RequestInfo);py.exports={Cache:qA}});var Ey=b((xK,my)=>{"use strict";var{kConstruct:As}=HA(),{Cache:YA}=fy(),{webidl:Pe}=Le(),{kEnumerableProperty:cs}=j(),VA=class e{#e=new Map;constructor(){arguments[0]!==As&&Pe.illegalConstructor(),Pe.util.markAsUncloneable(this)}async match(t,r={}){if(Pe.brandCheck(this,e),Pe.argumentLengthCheck(arguments,1,"CacheStorage.match"),t=Pe.converters.RequestInfo(t),r=Pe.converters.MultiCacheQueryOptions(r),r.cacheName!=null){if(this.#e.has(r.cacheName)){let n=this.#e.get(r.cacheName);return await new YA(As,n).match(t,r)}}else for(let n of this.#e.values()){let i=await new YA(As,n).match(t,r);if(i!==void 0)return i}}async has(t){Pe.brandCheck(this,e);let r="CacheStorage.has";return Pe.argumentLengthCheck(arguments,1,r),t=Pe.converters.DOMString(t,r,"cacheName"),this.#e.has(t)}async open(t){Pe.brandCheck(this,e);let r="CacheStorage.open";if(Pe.argumentLengthCheck(arguments,1,r),t=Pe.converters.DOMString(t,r,"cacheName"),this.#e.has(t)){let o=this.#e.get(t);return new YA(As,o)}let n=[];return this.#e.set(t,n),new YA(As,n)}async delete(t){Pe.brandCheck(this,e);let r="CacheStorage.delete";return Pe.argumentLengthCheck(arguments,1,r),t=Pe.converters.DOMString(t,r,"cacheName"),this.#e.delete(t)}async keys(){return Pe.brandCheck(this,e),[...this.#e.keys()]}};Object.defineProperties(VA.prototype,{[Symbol.toStringTag]:{value:"CacheStorage",configurable:!0},match:cs,has:cs,open:cs,delete:cs,keys:cs});my.exports={CacheStorage:VA}});var Cy=b((DK,Iy)=>{"use strict";Iy.exports={maxAttributeValueSize:1024,maxNameValuePairSize:4096}});var Wh=b((vK,wy)=>{"use strict";function gG(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 Vh(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 Jh(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 Qy(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 By(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122}function pG(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&&!By(n))throw new Error("Invalid cookie domain");if(!By(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 fG=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],mG=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],JA=Array(61).fill(0).map((e,t)=>t.toString().padStart(2,"0"));function yy(e){return typeof e=="number"&&(e=new Date(e)),`${fG[e.getUTCDay()]}, ${JA[e.getUTCDate()]} ${mG[e.getUTCMonth()]} ${e.getUTCFullYear()} ${JA[e.getUTCHours()]}:${JA[e.getUTCMinutes()]}:${JA[e.getUTCSeconds()]} GMT`}function EG(e){if(e<0)throw new Error("Invalid cookie max-age")}function IG(e){if(e.name.length===0)return null;Vh(e.name),Jh(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"&&(EG(e.maxAge),t.push(`Max-Age=${e.maxAge}`)),e.domain&&(pG(e.domain),t.push(`Domain=${e.domain}`)),e.path&&(Qy(e.path),t.push(`Path=${e.path}`)),e.expires&&e.expires.toString()!=="Invalid Date"&&t.push(`Expires=${yy(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("=");Vh(i),Jh(s),t.push(`${i}=${s}`)}return t.join("; ")}wy.exports={isCTLExcludingHtab:gG,validateCookieName:Vh,validateCookiePath:Qy,validateCookieValue:Jh,toIMFDate:yy,stringify:IG}});var ky=b((RK,by)=>{"use strict";var{maxNameValuePairSize:CG,maxAttributeValueSize:BG}=Cy(),{isCTLExcludingHtab:QG}=Wh(),{collectASequenceOfCodePointsFast:WA}=Ve(),yG=w("node:assert");function wG(e){if(QG(e))return null;let t="",r="",n="",o="";if(e.includes(";")){let i={position:0};t=WA(";",e,i),r=e.slice(i.position)}else t=e;if(!t.includes("="))o=t;else{let i={position:0};n=WA("=",t,i),o=t.slice(i.position+1)}return n=n.trim(),o=o.trim(),n.length+o.length>CG?null:{name:n,value:o,...xo(r)}}function xo(e,t={}){if(e.length===0)return t;yG(e[0]===";"),e=e.slice(1);let r="";e.includes(";")?(r=WA(";",e,{position:0}),e=e.slice(r.length)):(r=e,e="");let n="",o="";if(r.includes("=")){let s={position:0};n=WA("=",r,s),o=r.slice(s.position+1)}else n=r;if(n=n.trim(),o=o.trim(),o.length>BG)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)}by.exports={parseSetCookie:wG,parseUnparsedAttributes:xo}});var Dy=b((NK,xy)=>{"use strict";var{parseSetCookie:bG}=ky(),{stringify:kG}=Wh(),{webidl:re}=Le(),{Headers:$A}=fn();function SG(e){re.argumentLengthCheck(arguments,1,"getCookies"),re.brandCheck(e,$A,{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 xG(e,t,r){re.brandCheck(e,$A,{strict:!1});let n="deleteCookie";re.argumentLengthCheck(arguments,2,n),t=re.converters.DOMString(t,n,"name"),r=re.converters.DeleteCookieAttributes(r),Sy(e,{name:t,value:"",expires:new Date(0),...r})}function DG(e){re.argumentLengthCheck(arguments,1,"getSetCookies"),re.brandCheck(e,$A,{strict:!1});let t=e.getSetCookie();return t?t.map(r=>bG(r)):[]}function Sy(e,t){re.argumentLengthCheck(arguments,2,"setCookie"),re.brandCheck(e,$A,{strict:!1}),t=re.converters.Cookie(t);let r=kG(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)}]);xy.exports={getCookies:SG,deleteCookie:xG,getSetCookies:DG,setCookie:Sy}});var vo=b((FK,Ry)=>{"use strict";var{webidl:U}=Le(),{kEnumerableProperty:ze}=j(),{kConstruct:vy}=Ie(),{MessagePort:vG}=w("node:worker_threads"),Do=class e extends Event{#e;constructor(t,r={}){if(t===vy){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(vy,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:RG}=Do;delete Do.createFastMessageEvent;var zA=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}},KA=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(zA.prototype,{[Symbol.toStringTag]:{value:"CloseEvent",configurable:!0},reason:ze,code:ze,wasClean:ze});Object.defineProperties(KA.prototype,{[Symbol.toStringTag]:{value:"ErrorEvent",configurable:!0},message:ze,filename:ze,lineno:ze,colno:ze,error:ze});U.converters.MessagePort=U.interfaceConverter(vG);U.converters["sequence<MessagePort>"]=U.sequenceConverter(U.converters.MessagePort);var $h=[{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([...$h,{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([...$h,{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([...$h,{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}]);Ry.exports={MessageEvent:Do,CloseEvent:zA,ErrorEvent:KA,createFastMessageEvent:RG}});var Qn=b((MK,Ny)=>{"use strict";var NG="258EAFA5-E914-47DA-95CA-C5AB0DC85B11",FG={enumerable:!0,writable:!1,configurable:!1},MG={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},UG={NOT_SENT:0,PROCESSING:1,SENT:2},LG={CONTINUATION:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10},TG=2**16-1,_G={INFO:0,PAYLOADLENGTH_16:2,PAYLOADLENGTH_64:3,READ_DATA:4},PG=Buffer.allocUnsafe(0),OG={string:1,typedArray:2,arrayBuffer:3,blob:4};Ny.exports={uid:NG,sentCloseFrameState:UG,staticPropertyDescriptors:FG,states:MG,opcodes:LG,maxUnsigned16Bit:TG,parserStates:_G,emptyBuffer:PG,sendHints:OG}});var ls=b((UK,Fy)=>{"use strict";Fy.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((LK,Gy)=>{"use strict";var{kReadyState:us,kController:HG,kResponse:GG,kBinaryType:qG,kWebSocketURL:YG}=ls(),{states:ds,opcodes:Mr}=Qn(),{ErrorEvent:VG,createFastMessageEvent:JG}=vo(),{isUtf8:WG}=w("node:buffer"),{collectASequenceOfCodePointsFast:$G,removeHTTPWhitespace:My}=Ve();function zG(e){return e[us]===ds.CONNECTING}function KG(e){return e[us]===ds.OPEN}function jG(e){return e[us]===ds.CLOSING}function ZG(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 XG(e,t,r){if(e[us]!==ds.OPEN)return;let n;if(t===Mr.TEXT)try{n=Hy(r)}catch{Ly(e,"Received invalid UTF-8 in text frame.");return}else t===Mr.BINARY&&(e[qG]==="blob"?n=new Blob([r]):n=eq(r));zh("message",e,JG,{origin:e[YG].origin,data:n})}function eq(e){return e.byteLength===e.buffer.byteLength?e.buffer:e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}function tq(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 rq(e){return e>=1e3&&e<1015?e!==1004&&e!==1005&&e!==1006:e>=3e3&&e<=4999}function Ly(e,t){let{[HG]:r,[GG]:n}=e;r.abort(),n?.socket&&!n.socket.destroyed&&n.socket.destroy(),t&&zh("error",e,(o,i)=>new VG(o,i),{error:new Error(t),message:t})}function Ty(e){return e===Mr.CLOSE||e===Mr.PING||e===Mr.PONG}function _y(e){return e===Mr.CONTINUATION}function Py(e){return e===Mr.TEXT||e===Mr.BINARY}function nq(e){return Py(e)||_y(e)||Ty(e)}function oq(e){let t={position:0},r=new Map;for(;t.position<e.length;){let n=$G(";",e,t),[o,i=""]=n.split("=");r.set(My(o,!0,!1),My(i,!1,!0)),t.position++}return r}function iq(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 Oy=typeof process.versions.icu=="string",Uy=Oy?new TextDecoder("utf-8",{fatal:!0}):void 0,Hy=Oy?Uy.decode.bind(Uy):function(e){if(WG(e))return e.toString("utf-8");throw new TypeError("Invalid utf-8 received.")};Gy.exports={isConnecting:zG,isEstablished:KG,isClosing:jG,isClosed:ZG,fireEvent:zh,isValidSubprotocol:tq,isValidStatusCode:rq,failWebsocketConnection:Ly,websocketMessageReceived:XG,utf8Decode:Hy,isControlFrame:Ty,isContinuationFrame:_y,isTextBinaryFrame:Py,isValidOpcode:nq,parseExtensions:oq,isValidClientWindowBits:iq}});var ZA=b((TK,qy)=>{"use strict";var{maxUnsigned16Bit:sq}=Qn(),jA=16386,Kh,gs=null,Ro=jA;try{Kh=w("node:crypto")}catch{Kh={randomFillSync:function(t,r,n){for(let o=0;o<t.length;++o)t[o]=Math.random()*255|0;return t}}}function aq(){return Ro===jA&&(Ro=0,Kh.randomFillSync(gs??=Buffer.allocUnsafe(jA),0,jA)),[gs[Ro++],gs[Ro++],gs[Ro++],gs[Ro++]]}var jh=class{constructor(t){this.frameData=t}createFrame(t){let r=this.frameData,n=aq(),o=r?.byteLength??0,i=o,s=6;o>sq?(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}};qy.exports={WebsocketFrameSend:jh}});var Xh=b((_K,Ky)=>{"use strict";var{uid:Aq,states:ps,sentCloseFrameState:XA,emptyBuffer:cq,opcodes:lq}=Qn(),{kReadyState:fs,kSentClose:ec,kByteParser:Vy,kReceivedClose:Yy,kResponse:Jy}=ls(),{fireEvent:uq,failWebsocketConnection:Ur,isClosing:dq,isClosed:hq,isEstablished:gq,parseExtensions:pq}=hs(),{channels:No}=Hn(),{CloseEvent:fq}=vo(),{makeRequest:mq}=wo(),{fetching:Eq}=ss(),{Headers:Iq,getHeadersList:Cq}=fn(),{getDecodeSplit:Bq}=et(),{WebsocketFrameSend:Qq}=ZA(),Zh;try{Zh=w("node:crypto")}catch{}function yq(e,t,r,n,o,i){let s=e;s.protocol=e.protocol==="ws:"?"http:":"https:";let a=mq({urlList:[s],client:r,serviceWorkers:"none",referrer:"no-referrer",mode:"websocket",credentials:"include",cache:"no-store",redirect:"error"});if(i.headers){let u=Cq(new Iq(i.headers));a.headersList=u}let A=Zh.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"),Eq({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=Zh.createHash("sha1").update(A+Aq).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=pq(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&&!Bq("sec-websocket-protocol",a.headersList).includes(m)){Ur(n,"Protocol was not set in the opening handshake.");return}u.socket.on("data",Wy),u.socket.on("close",$y),u.socket.on("error",zy),No.open.hasSubscribers&&No.open.publish({address:u.socket.address(),protocol:m,extensions:g}),o(u,p)}})}function wq(e,t,r,n){if(!(dq(e)||hq(e)))if(!gq(e))Ur(e,"Connection was closed before it was established."),e[fs]=ps.CLOSING;else if(e[ec]===XA.NOT_SENT){e[ec]=XA.PROCESSING;let o=new Qq;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=cq,e[Jy].socket.write(o.createFrame(lq.CLOSE)),e[ec]=XA.SENT,e[fs]=ps.CLOSING}else e[fs]=ps.CLOSING}function Wy(e){this.ws[Vy].write(e)||this.pause()}function $y(){let{ws:e}=this,{[Jy]:t}=e;t.socket.off("data",Wy),t.socket.off("close",$y),t.socket.off("error",zy);let r=e[ec]===XA.SENT&&e[Yy],n=1005,o="",i=e[Vy].closingInfo;i&&!i.error?(n=i.code??1005,o=i.reason):e[Yy]||(n=1006),e[fs]=ps.CLOSED,uq("close",e,(s,a)=>new fq(s,a),{wasClean:r,code:n,reason:o}),No.close.hasSubscribers&&No.close.publish({websocket:e,code:n,reason:o})}function zy(e){let{ws:t}=this;t[fs]=ps.CLOSING,No.socketError.hasSubscribers&&No.socketError.publish(e),this.destroy()}Ky.exports={establishWebSocketConnection:yq,closeWebSocketConnection:wq}});var Zy=b((PK,jy)=>{"use strict";var{createInflateRaw:bq,Z_DEFAULT_WINDOWBITS:kq}=w("node:zlib"),{isValidClientWindowBits:Sq}=hs(),{MessageSizeExceededError:xq}=ie(),Dq=Buffer.from([0,0,255,255]),tc=Symbol("kBuffer"),ms=Symbol("kLength"),eg=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=kq;if(this.#t.serverMaxWindowBits){if(!Sq(this.#t.serverMaxWindowBits)){n(new Error("Invalid server_max_window_bits"));return}o=Number.parseInt(this.#t.serverMaxWindowBits)}try{this.#e=bq({windowBits:o})}catch(i){n(i);return}this.#e[tc]=[],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 xq),this.#e.removeAllListeners(),this.#e=null;return}this.#e[tc].push(i)}),this.#e.on("error",i=>{this.#e=null,n(i)})}this.#e.write(t),r&&this.#e.write(Dq),this.#e.flush(()=>{if(!this.#e)return;let o=Buffer.concat(this.#e[tc],this.#e[ms]);this.#e[tc].length=0,this.#e[ms]=0,n(null,o)})}};jy.exports={PerMessageDeflate:eg}});var Aw=b((OK,aw)=>{"use strict";var{Writable:vq}=w("node:stream"),Rq=w("node:assert"),{parserStates:Ke,opcodes:Fo,states:Nq,emptyBuffer:Xy,sentCloseFrameState:ew}=Qn(),{kReadyState:Fq,kSentClose:tw,kResponse:rw,kReceivedClose:nw}=ls(),{channels:rc}=Hn(),{isValidStatusCode:Mq,isValidOpcode:Uq,failWebsocketConnection:At,websocketMessageReceived:ow,utf8Decode:Lq,isControlFrame:tg,isTextBinaryFrame:rg,isContinuationFrame:Tq}=hs(),{WebsocketFrameSend:iw}=ZA(),{closeWebSocketConnection:sw}=Xh(),{PerMessageDeflate:_q}=Zy(),{MessageSizeExceededError:ng}=ie();function Es(e,t,r){sw(e,t,r,Buffer.byteLength(r)),At(e,r)}var og=class extends vq{#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 _q(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&&!tg(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(!Uq(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&&!rg(o)){At(this.ws,"Invalid frame type was fragmented.");return}if(rg(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)&&tg(o)){At(this.ws,"Control frame either too large or fragmented");return}if(Tq(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);rg(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(tg(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 ng?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 ng().message);return}if(!this.#n.fin){this.#o=Ke.INFO,this.#i=!0,this.run(t);return}ow(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 ng().message);return}!this.#n.fragmented&&this.#n.fin&&ow(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 Xy;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){Rq(t.length!==1);let r;if(t.length>=2&&(r=t.readUInt16BE(0)),r!==void 0&&!Mq(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=Lq(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 sw(this.ws,o,i,i.length),At(this.ws,i),!1}if(this.ws[tw]!==ew.SENT){let o=Xy;this.#n.closeInfo.code&&(o=Buffer.allocUnsafe(2),o.writeUInt16BE(this.#n.closeInfo.code,0));let i=new iw(o);this.ws[rw].socket.write(i.createFrame(Fo.CLOSE),s=>{s||(this.ws[tw]=ew.SENT)})}return this.ws[Fq]=Nq.CLOSING,this.ws[nw]=!0,!1}else if(r===Fo.PING){if(!this.ws[nw]){let o=new iw(t);this.ws[rw].socket.write(o.createFrame(Fo.PONG)),rc.ping.hasSubscribers&&rc.ping.publish({payload:t})}}else r===Fo.PONG&&rc.pong.hasSubscribers&&rc.pong.publish({payload:t});return!0}get closingInfo(){return this.#n.closeInfo}};aw.exports={ByteParser:og}});var hw=b((HK,dw)=>{"use strict";var{WebsocketFrameSend:Pq}=ZA(),{opcodes:cw,sendHints:Mo}=Qn(),Oq=ld(),lw=Buffer[Symbol.species],ig=class{#e=new Oq;#t=!1;#r;constructor(t){this.#r=t}add(t,r,n){if(n!==Mo.blob){let i=uw(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=uw(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 uw(e,t){return new Pq(Hq(e,t)).createFrame(t===Mo.string?cw.TEXT:cw.BINARY)}function Hq(e,t){switch(t){case Mo.string:return Buffer.from(e);case Mo.arrayBuffer:case Mo.blob:return new lw(e);case Mo.typedArray:return new lw(e.buffer,e.byteOffset,e.byteLength)}}dw.exports={SendQueue:ig}});var yw=b((GK,Qw)=>{"use strict";var{webidl:Y}=Le(),{URLSerializer:Gq}=Ve(),{environmentSettingsObject:gw}=et(),{staticPropertyDescriptors:Lr,states:Is,sentCloseFrameState:qq,sendHints:nc}=Qn(),{kWebSocketURL:pw,kReadyState:sg,kController:fw,kBinaryType:oc,kResponse:mw,kSentClose:Yq,kByteParser:Vq}=ls(),{isConnecting:Jq,isEstablished:Wq,isClosing:$q,isValidSubprotocol:zq,fireEvent:Ew}=hs(),{establishWebSocketConnection:Kq,closeWebSocketConnection:Iw}=Xh(),{ByteParser:jq}=Aw(),{kEnumerableProperty:It,isBlobLike:Cw}=j(),{getGlobalDispatcher:Zq}=IA(),{types:Bw}=w("node:util"),{ErrorEvent:Xq,CloseEvent:eY}=vo(),{SendQueue:tY}=hw(),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=gw.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=>zq(A)))throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");this[pw]=new URL(s.href);let a=gw.settingsObject;this[fw]=Kq(s,r,a,this,(A,c)=>this.#n(A,c),o),this[sg]=e.CONNECTING,this[Yq]=qq.NOT_SENT,this[oc]="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");Iw(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"),Jq(this))throw new DOMException("Sent before connected.","InvalidStateError");if(!(!Wq(this)||$q(this)))if(typeof t=="string"){let n=Buffer.byteLength(t);this.#t+=n,this.#o.add(t,()=>{this.#t-=n},nc.string)}else Bw.isArrayBuffer(t)?(this.#t+=t.byteLength,this.#o.add(t,()=>{this.#t-=t.byteLength},nc.arrayBuffer)):ArrayBuffer.isView(t)?(this.#t+=t.byteLength,this.#o.add(t,()=>{this.#t-=t.byteLength},nc.typedArray)):Cw(t)&&(this.#t+=t.size,this.#o.add(t,()=>{this.#t-=t.size},nc.blob))}get readyState(){return Y.brandCheck(this,e),this[sg]}get bufferedAmount(){return Y.brandCheck(this,e),this.#t}get url(){return Y.brandCheck(this,e),Gq(this[pw])}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[oc]}set binaryType(t){Y.brandCheck(this,e),t!=="blob"&&t!=="arraybuffer"?this[oc]="blob":this[oc]=t}#n(t,r){this[mw]=t;let n=this[fw]?.dispatcher?.webSocketOptions,o=n?.maxFragments,i=n?.maxPayloadSize,s=new jq(this,r,{maxFragments:o,maxPayloadSize:i});s.on("drain",rY),s.on("error",nY.bind(this)),t.socket.ws=this,this[Vq]=s,this.#o=new tY(t.socket),this[sg]=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),Ew("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:()=>Zq()},{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(Cw(e))return Y.converters.Blob(e,{strict:!1});if(ArrayBuffer.isView(e)||Bw.isArrayBuffer(e))return Y.converters.BufferSource(e)}return Y.converters.USVString(e)};function rY(){this.ws[mw].socket.resume()}function nY(e){let t,r;e instanceof eY?(t=e.reason,r=e.code):t=e.message,Ew("error",this,()=>new Xq("error",{error:e,message:t})),Iw(this,r)}Qw.exports={WebSocket:ct}});var ag=b((qK,ww)=>{"use strict";function oY(e){return e.indexOf("\0")===-1}function iY(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 sY(e){return new Promise(t=>{setTimeout(t,e).unref()})}ww.exports={isValidLastEventId:oY,isASCIINumber:iY,delay:sY}});var xw=b((YK,Sw)=>{"use strict";var{Transform:aY}=w("node:stream"),{isASCIINumber:bw,isValidLastEventId:kw}=ag(),ur=[239,187,191],Ag=10,ic=13,AY=58,cY=32,cg=class extends aY{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]===ur[0]){n();return}this.checkBOM=!1,n();return;case 2:if(this.buffer[0]===ur[0]&&this.buffer[1]===ur[1]){n();return}this.checkBOM=!1;break;case 3:if(this.buffer[0]===ur[0]&&this.buffer[1]===ur[1]&&this.buffer[2]===ur[2]){this.buffer=Buffer.alloc(0),this.checkBOM=!1,n();return}this.checkBOM=!1;break;default:this.buffer[0]===ur[0]&&this.buffer[1]===ur[1]&&this.buffer[2]===ur[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]===Ag){this.buffer=this.buffer.subarray(this.pos+1),this.pos=0,this.crlfCheck=!1;continue}this.crlfCheck=!1}if(this.buffer[this.pos]===Ag||this.buffer[this.pos]===ic){this.buffer[this.pos]===ic&&(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]===Ag||this.buffer[this.pos]===ic){this.buffer[this.pos]===ic&&(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(AY);if(n===0)return;let o="",i="";if(n!==-1){o=t.subarray(0,n).toString("utf8");let s=n+1;t[s]===cY&&++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":bw(i)&&(r[o]=i);break;case"id":kw(i)&&(r[o]=i);break;case"event":i.length>0&&(r[o]=i);break}}processEvent(t){t.retry&&bw(t.retry)&&(this.state.reconnectionTime=parseInt(t.retry,10)),t.id&&kw(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}}};Sw.exports={EventSourceStream:cg}});var Lw=b((VK,Uw)=>{"use strict";var{pipeline:lY}=w("node:stream"),{fetching:uY}=ss(),{makeRequest:dY}=wo(),{webidl:dr}=Le(),{EventSourceStream:hY}=xw(),{parseMIMEType:gY}=Ve(),{createFastMessageEvent:pY}=vo(),{isNetworkError:Dw}=os(),{delay:fY}=ag(),{kEnumerableProperty:yn}=j(),{environmentSettingsObject:vw}=et(),Rw=!1,Nw=3e3,Cs=0,Fw=1,Bs=2,mY="anonymous",EY="use-credentials",Uo=class e extends EventTarget{#e={open:null,error:null,message:null};#t=null;#r=!1;#i=Cs;#o=null;#n=null;#s;#a;constructor(t,r={}){super(),dr.util.markAsUncloneable(this);let n="EventSource constructor";dr.argumentLengthCheck(arguments,1,n),Rw||(Rw=!0,process.emitWarning("EventSource is experimental, expect them to change at any time.",{code:"UNDICI-ES"})),t=dr.converters.USVString(t,n,"url"),r=dr.converters.EventSourceInitDict(r,n,"eventSourceInitDict"),this.#s=r.dispatcher,this.#a={lastEventId:"",reconnectionTime:Nw};let o=vw,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=mY;r.withCredentials&&(s=EY,this.#r=!0);let a={redirect:"follow",keepalive:!0,mode:"cors",credentials:s==="anonymous"?"same-origin":"omit",referrer:"no-referrer"};a.client=vw.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=dY(a),this.#c()}get readyState(){return this.#i}get url(){return this.#t}get withCredentials(){return this.#r}#c(){if(this.#i===Bs)return;this.#i=Cs;let t={request:this.#o,dispatcher:this.#s},r=n=>{Dw(n)&&(this.dispatchEvent(new Event("error")),this.close()),this.#A()};t.processResponseEndOfBody=r,t.processResponse=n=>{if(Dw(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?gY(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=Fw,this.dispatchEvent(new Event("open")),this.#a.origin=n.urlList[n.urlList.length-1].origin;let a=new hY({eventSourceSettings:this.#a,push:A=>{this.dispatchEvent(pY(A.type,A.options))}});lY(n.body.stream,a,A=>{A?.aborted===!1&&(this.close(),this.dispatchEvent(new Event("error")))})},this.#n=uY(t)}async#A(){this.#i!==Bs&&(this.#i=Cs,this.dispatchEvent(new Event("error")),await fY(this.#a.reconnectionTime),this.#i===Cs&&(this.#a.lastEventId.length&&this.#o.headersList.set("last-event-id",this.#a.lastEventId,!0),this.#c()))}close(){dr.brandCheck(this,e),this.#i!==Bs&&(this.#i=Bs,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}},Mw={CONNECTING:{__proto__:null,configurable:!1,enumerable:!0,value:Cs,writable:!1},OPEN:{__proto__:null,configurable:!1,enumerable:!0,value:Fw,writable:!1},CLOSED:{__proto__:null,configurable:!1,enumerable:!0,value:Bs,writable:!1}};Object.defineProperties(Uo,Mw);Object.defineProperties(Uo.prototype,Mw);Object.defineProperties(Uo.prototype,{close:yn,onerror:yn,onmessage:yn,onopen:yn,readyState:yn,url:yn,withCredentials:yn});dr.converters.EventSourceInitDict=dr.dictionaryConverter([{key:"withCredentials",converter:dr.converters.boolean,defaultValue:()=>!1},{key:"dispatcher",converter:dr.converters.any}]);Uw.exports={EventSource:Uo,defaultReconnectionTime:Nw}});var Ow=b((JK,q)=>{"use strict";var IY=ao(),Tw=bi(),CY=Ao(),BY=MC(),QY=co(),yY=vd(),wY=oB(),bY=uB(),_w=ie(),ac=j(),{InvalidArgumentError:sc}=_w,Lo=jB(),kY=Si(),SY=uh(),xY=FQ(),DY=gh(),vY=Zd(),RY=cA(),{getGlobalDispatcher:Pw,setGlobalDispatcher:NY}=IA(),FY=CA(),MY=Za(),UY=Xa();Object.assign(Tw.prototype,Lo);q.exports.Dispatcher=Tw;q.exports.Client=IY;q.exports.Pool=CY;q.exports.BalancedPool=BY;q.exports.Agent=QY;q.exports.ProxyAgent=yY;q.exports.EnvHttpProxyAgent=wY;q.exports.RetryAgent=bY;q.exports.RetryHandler=RY;q.exports.DecoratorHandler=FY;q.exports.RedirectHandler=MY;q.exports.createRedirectInterceptor=UY;q.exports.interceptors={redirect:OQ(),retry:GQ(),dump:YQ(),dns:WQ()};q.exports.buildConnector=kY;q.exports.errors=_w;q.exports.util={parseHeaders:ac.parseHeaders,headerNameToString:ac.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 sc("invalid url");if(r!=null&&typeof r!="object")throw new sc("invalid opts");if(r&&r.path!=null){if(typeof r.path!="string")throw new sc("invalid opts.path");let s=r.path;r.path.startsWith("/")||(s=`/${s}`),t=new URL(ac.parseOrigin(t).origin+s)}else r||(r=typeof t=="object"?t:{}),t=ac.parseURL(t);let{agent:o,dispatcher:i=Pw()}=r;if(o)throw new sc("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=NY;q.exports.getGlobalDispatcher=Pw;var LY=ss().fetch;q.exports.fetch=async function(t,r=void 0){try{return await LY(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=cy().FileReader;var{setGlobalOrigin:TY,getGlobalOrigin:_Y}=Ru();q.exports.setGlobalOrigin=TY;q.exports.getGlobalOrigin=_Y;var{CacheStorage:PY}=Ey(),{kConstruct:OY}=HA();q.exports.caches=new PY(OY);var{deleteCookie:HY,getCookies:GY,getSetCookies:qY,setCookie:YY}=Dy();q.exports.deleteCookie=HY;q.exports.getCookies=GY;q.exports.getSetCookies=qY;q.exports.setCookie=YY;var{parseMIMEType:VY,serializeAMimeType:JY}=Ve();q.exports.parseMIMEType=VY;q.exports.serializeAMimeType=JY;var{CloseEvent:WY,ErrorEvent:$Y,MessageEvent:zY}=vo();q.exports.WebSocket=yw().WebSocket;q.exports.CloseEvent=WY;q.exports.ErrorEvent=$Y;q.exports.MessageEvent=zY;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=SY;q.exports.MockPool=DY;q.exports.MockAgent=xY;q.exports.mockErrors=vY;var{EventSource:KY}=Lw();q.exports.EventSource=KY});import To from"node:net";import jY from"node:dns";function Ac(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 lg(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 ug(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=Ac(e);if(!t)return!1;let r=Ac("::ffff:0:0");return lg(t,r,96)?ug([...t.slice(12)].join(".")):lg(t,Ac("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([o,i])=>lg(t,Ac(o),i)):!1}return!1}function XY(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(ZY.has(r)||r.endsWith(".localhost")||r.endsWith(".internal"))return{ok:!1,error:`refused internal host ${r}`};let n=To.isIP(r);return n!==0&&!ug(r)?{ok:!1,error:`refused private address ${r}`}:{ok:!0,url:t,host:r,isLiteralIp:n!==0}}async function Hw(e,{lookupFn:t=jY.promises.lookup}={}){let r=XY(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=>!ug(o.address))?{ok:!1,error:`refused: ${r.host} resolves to a non-public address`}:{ok:!0,url:r.url,addresses:n}}async function Gw(){let e,t;try{let a=await Promise.resolve().then(()=>YF(Ow(),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 ZY,qw=ha(()=>{ZY=new Set(["localhost","metadata.google.internal","metadata.goog"])});import{createHash as eV}from"node:crypto";function oV(e){let t=String(e||"").toLowerCase();return Ww.includes(t)||/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(t)}function iV(e){let t={};for(let[r,n]of Object.entries(e||{}))oV(r)||(t[r]=n);return t}function sV(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 aV(e,t){return new URL(String(e)).origin===new URL(String(t)).origin}function AV(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([...Ww,...o])].sort().map(A=>`${A}=${n[A]??""}`).join(`
46
+ `),a=eV("sha256").update(s).digest("hex").slice(0,32);return`${e} ${t} ${a}`}function cV(e,t){let r=Number(t);return Number.isFinite(r)&&r>0?Math.min(r*1e3,Vw):Math.min(250*2**e,Vw)+Math.floor(Math.random()*100)}async function uV(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(nV.has(p.status)){if(r!=="GET"&&r!=="HEAD"){let E=new Error(`HTTP ${p.status} ${r} ${d} redirected non-idempotent request`);throw E.status=p.status,E.body=f??m.slice(0,300),E}if(g===Jw)throw new Error(`HTTP redirect loop for ${e}`);let B=sV(p.headers?.get?.("location"),d);if(!aV(B,d)){let E=await Hw(B,s?{lookupFn:s}:{});if(!E.ok){let Q=new Error(`HTTP redirect from ${d} ${E.error}`);throw Q.status=p.status,Q}h=iV(h),a&&E.addresses?.length&&(l||(l=await Gw()),l&&(l.pin(new URL(B).hostname,E.addresses[0].address,E.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):rV,A=t.lookupFn,c=!t.fetchImpl,l=async()=>{let p;for(let m=0;m<=a;m++)try{return await uV(e,{fetchImpl:r,method:o,headers:i,body:s,timeoutMs:n,lookupFn:A,realFetch:c})}catch(f){p=f;let B=f?.status,I=f?.name==="AbortError",E=new Set([408,425,429]),Q=B!=null?E.has(B)||tV.has(B)&&Yw.has(o):!I&&Yw.has(o);if(m===a||!Q)throw f;await lV(cV(m,f?.retryAfter))}throw p};if(!(t.dedupe!==!1&&o==="GET"&&s==null))return l();let d=AV(o,e,i),h=dg.get(d);if(h)return h;let g=l().finally(()=>dg.delete(d));return dg.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 _o(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 tV,Yw,rV,Vw,Ww,nV,Jw,dg,lV,M=ha(()=>{qw();tV=new Set([408,425,429,500,502,503,504]),Yw=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),rV=2,Vw=4e3,Ww=["authorization","x-api-key","x-tensor-api-key","0x-api-key","api-key","cookie","proxy-authorization"],nV=new Set([301,302,303,307,308]),Jw=3;dg=new Map;lV=e=>new Promise(t=>setTimeout(t,e))});function gg(e){return $w.get(Number(e))||null}function zw(e,t=process.env){let r=gg(e);if(!r)return null;for(let n of r.rpcEnv){let o=(t[n]||"").trim();if(o)return o}return null}function Kw(e){return $w.has(Number(e))}var hg,$w,jw=ha(()=>{hg={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}},$w=new Map(Object.values(hg).map(e=>[e.chainId,e]))});var lc={};GF(lc,{PUBLIC_RPC_FALLBACKS:()=>fg,erc20Allowance:()=>Ig,erc20BalanceOf:()=>ws,resolveRpcUrl:()=>mg,rpcBlockNumber:()=>ys,rpcCall:()=>V,rpcChainId:()=>Eg,rpcGasPrice:()=>mV,rpcGetBalance:()=>wn,rpcHealth:()=>Po,rpcHealthAll:()=>Cg,transactionReceipt:()=>bs});import{Interface as dV,getAddress as hV}from"ethers";function Tr(e,t){try{return hV(e).toLowerCase()}catch{throw new Error(`${t} must be a valid EVM address`)}}function gV(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 pg(e){return e==null?null:Number.parseInt(String(e),16)}function mg(e,{rpcUrl:t,env:r=process.env}={}){if(t)return t;let n=zw(e,r);return n||fg[Number(e)]||null}function fV(e){let t=String(e||""),r=t.toLowerCase();if(t!==t.trim()||!/^[a-zA-Z0-9_]+$/.test(t)||!pV.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||"");fV(o);let i=mg(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 Po(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:gg(e)?.name||null}}async function ys(e,t={}){let r=await V(e,"eth_blockNumber",[],t);return parseInt(r,16)}async function Eg(e,t={}){let r=await V(e,"eth_chainId",[],t);return parseInt(r,16)}async function mV(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 Ig(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=cc.encodeFunctionData("allowance",[o,i]),a=await V(r,"eth_call",[{to:n,data:s},e.blockTag||"latest"],t),A=cc.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=cc.encodeFunctionData("balanceOf",[o]),s=await V(r,"eth_call",[{to:n,data:i},e.blockTag||"latest"],t),a=cc.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=gV(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=pg(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:pg(o.blockNumber),transactionIndex:pg(o.transactionIndex),logs:Array.isArray(o.logs)?o.logs:[],receipt:o}}async function Cg(e={}){let t=e.chainIds||Object.values(hg).map(n=>n.chainId),r={};return await Promise.all(t.map(async n=>{if(!Kw(n)&&!fg[n]&&!mg(n,e)){r[n]={ok:!1,error:"no rpc configured",chainId:n};return}try{r[n]=await Po(n,e)}catch(o){r[n]={ok:!1,chainId:n,error:String(o.message||o)}}})),r}var cc,fg,pV,De=ha(()=>{M();jw();cc=new dV(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);fg={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"};pV=/^(?: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 Ab,getAddress as Ss,isAddress as HV}from"ethers";M();var EV="https://api.dexscreener.com",IV=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(),CV=e=>Array.isArray(e)?e:e==null?[]:[e];function BV(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 QV(e){let t=Number(e?.liquidity?.usd);return Number.isFinite(t)&&t>=0?t:null}function uc(e={}){return(e.baseUrl||process.env.DEXSCREENER_API_URL||EV).replace(/\/$/,"")}async function Zw(e={}){let r=(await C(`${uc(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(`${uc(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(`${uc(t)}/latest/dex/search?q=${encodeURIComponent(e)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function Xw(e,t,r={}){if(!e||!t)throw new Error("chainId and pairAddress required");return C(`${uc(r)}/latest/dex/pairs/${e}/${t}`,{fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3})}async function dc({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(IV[Number(e)]||e),s=new Set(CV(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=>BV(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:QV(d),pairCreatedAt:d.pairCreatedAt??null})).filter(d=>d.liquidityUsd!=null).sort((d,h)=>h.liquidityUsd-d.liquidityUsd)[0]??null}import{createHash as SV,createHmac as rb,timingSafeEqual as xV}from"node:crypto";import{readFileSync as wV}from"node:fs";import{homedir as bV}from"node:os";import{join as hc}from"node:path";function kV(){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=bV();if(process.env.ORACLE_PUBLIC_DESKTOP==="1"){let r=(process.env.ORACLE_CONFIG_DIR||hc(t,".config","oracle")).trim();return[e,hc(r,"exec.env")].filter(Boolean)}return[e,hc(t,".config","oracle","exec.env"),hc(t,".config","mad-desk","exec.env")].filter(Boolean)}function eb(e,t,r){let n=e??process.env[t]??process.env[r];if(!String(n||"").trim())for(let o of kV())try{let i=wV(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 gc=100,tb=2e4;function pc(e){return Array.isArray(e)?`[${e.map(pc).join(",")}]`:e&&typeof e=="object"?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${pc(e[t])}`).join(",")}}`:JSON.stringify(e??null)}function nb(e,{required:t=!1}={}){try{return eb(e,"ORACLE_ROUTE_ATTESTATION_SECRET","MAD_ROUTE_ATTESTATION_SECRET")}catch(r){if(t)throw r;return null}}function Qg(e){let{signature:t,...r}=e;return r}function ob(e,{secret:t}={}){let r=nb(t);return r?{...e,signature:rb("sha256",r).update(pc(Qg(e))).digest("hex")}:e}function DV(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 SV("sha256").update(Buffer.from(t.slice(2),"hex")).digest("hex")}function we(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=nb(o);if(i){let h=rb("sha256",i).update(pc(Qg(e))).digest("hex");if(!vV(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>gc||!Number.isInteger(a)||a<0||a>gc||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=FV(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 ob({...Qg(e),calldataHash:DV(n)},{secret:o})}function vV(e,t){let r=Buffer.from(String(e??""),"utf8"),n=Buffer.from(String(t??""),"utf8");return r.length!==n.length||r.length===0?!1:xV(r,n)}function Bg(e,t=0){let r=Number(e);return Number.isFinite(r)?r:t}function RV(e){let t=e==null?gc: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,gc)}function je({liquidityUsd:e,priceChange5m:t=0,quoteAgeMs:r=0,crossChain:n=!1,requestedCapBps:o}={}){let i=Bg(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(Bg(t,0))*2),A=Math.min(40,Math.floor(Math.max(0,Bg(r,0))/5e3)*5),c=Math.max(25,Math.ceil(20+s+a+A)),l=RV(o);return{mode:"auto",requiredBps:c,selectedBps:Math.min(c,l),capBps:l,executable:c<=l}}function NV({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=tb,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)||tb)),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 ob({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 FV(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=NV({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 MV,createHmac as UV,timingSafeEqual as p7}from"node:crypto";var LV=2,TV=300*1e3,f7=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})();function yg(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(yg).join(",")}]`:`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${yg(e[r])}`).join(",")}}`}function ib(e){let t=String(e?.ORACLE_STAMP_HMAC_SECRET||"").trim();return t.length>=16?t:""}function sb(e=process.env){return ib(process.env)||ib(e)}function _V(e){let{oraclePrepared:t,prepareHash:r,prepareMac:n,note:o,...i}=e||{};return i}function PV(e){let t=_V(e);return MV("sha256").update(yg(t)).digest("hex")}function OV(e,t=sb()){return t?UV("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+TV,A={...o,preparedAt:i,expiresAt:s,prepareVersion:LV},c=PV(A),l=sb(n),u=l?OV(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"}},GV=[100,500,3e3,1e4],fc=new Ab(["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)"]),ab=new Ab(["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)"]),cb="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",lb="0x0000000000000000000000000000000000000000",wg=[100,500,2500,1e4],qV={56:{pancakeswap:{name:"pancakeswap",quoter:"0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997",router:"0x13f4EA83D0bd40E75C8222255bc855a974568Dd4",feeTiers:wg}},8453:{pancakeswap:{name:"pancakeswap",quoter:"0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997",router:"0x13f4EA83D0bd40E75C8222255bc855a974568Dd4",feeTiers:wg}},42161:{pancakeswap:{name:"pancakeswap",quoter:"0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997",router:"0x13f4EA83D0bd40E75C8222255bc855a974568Dd4",feeTiers:wg}},999:{hyperswap:{name:"hyperswap",quoter:"0x03A918028f22D9E1473B7959C927AD7425A45C7C",router:"0x4E2960a8cd19B467b82d26D83fAcb0fAE26b094D"}}};function kg(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=qV[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 bg(e,t){let r=lt[Number(t)];if(!e||e===cb||e===lb||/^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(!HV(n))throw new Error(`invalid token address: ${e}`);return Ss(n)}function YV(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 VV(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}=kg(e.chainId??8453,e.venue),s=bg(e.tokenIn||"WETH",r),a=bg(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:GV,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=fc.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=fc.decodeFunctionResult("quoteExactInputSingle",f),I={fee:p,ok:!0,amountOut:B[0].toString(),sqrtPriceX96After:B[1].toString(),initializedTicksCrossed:Number(B[2]),gasEstimate:B[3].toString()};u.push(I),(!d||BigInt(I.amountOut)>BigInt(d.amountOut))&&(d=I)}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 dc({chainId:r,tokenA:s,tokenB:a,dexIds:YV(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 ub(e={},t={}){let{chainId:r,quoter:n,router:o}=kg(e.chainId??8453),i=(e.tokens||[]).map(d=>bg(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=VV(i,s),c=fc.encodeFunctionData("quoteExactInput",[A,a]),l=await V(r,"eth_call",[{to:n,data:c},"latest"],t),u=fc.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 Sg(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 db(e={},t={}){let r=Number(e.chainId??8453),n=kg(r,e.venue),o=Ss(e.recipient),i=String(e.tokenIn||"WETH"),s=!e.tokenIn||i===cb||i===lb||/^eth$/i.test(i),a=await Oo(e,t),A=ab.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=ab.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:we(a.autoSlippage,{chainId:r,venue:n.router,data:d})}},{provider:"uniswap-v3",kind:"univ3-swap-tx"})}async function hb(e={}){let t=Number(e.chainId??8453);try{let r=await Sg({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 gb(){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 WV,Interface as mb,getAddress as $t,isAddress as mc,keccak256 as $V}from"ethers";var zV=WV.defaultAbiCoder(),Ho="0x0000000000000000000000000000000000000000",_r={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"}},KV=[{fee:100,tickSpacing:1},{fee:500,tickSpacing:10},{fee:3e3,tickSpacing:60},{fee:1e4,tickSpacing:200},{fee:25e3,tickSpacing:8}],pb=new mb(["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)"]),x7=new mb(["function execute(bytes commands,bytes[] inputs,uint256 deadline) payable"]);var jV="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE";function Eb(e){let t=Number(e),r=_r[t];if(!r)throw new Error(`uniswap-v4: unsupported chainId ${e} (supported: ${Object.keys(_r).join(", ")})`);return{chainId:t,...r}}function fb(e,t){let r=_r[Number(t)];if(!e||e===jV||e===Ho||/^eth$/i.test(String(e)))return $t(r.weth);let n=String(e);if(/^weth$/i.test(n))return $t(r.weth);if(/^usdc$/i.test(n)||/^usdg$/i.test(n))return $t(r.usdc);if(!mc(n))throw new Error(`invalid token address: ${e}`);return $t(n)}function ZV({currency0:e,currency1:t,fee:r,tickSpacing:n,hooks:o=Ho}){let i=$t(e),s=$t(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&&mc(o)?$t(o):Ho;return $V(zV.encode(["address","address","uint24","int24","address"],[a,A,Number(r),Number(n),c]))}function XV({tokenIn:e,tokenOut:t,fee:r,tickSpacing:n,hooks:o=Ho}){let i=$t(e),s=$t(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&&mc(o)?$t(o):Ho},zeroForOne:c}}var eJ=["uniswap-v4","uniswapv4"];async function Ib(e={},t={}){let{chainId:r,quoter:n,poolManager:o,universalRouter:i}=Eb(e.chainId??8453),s=fb(e.tokenIn||"WETH",r),a=fb(e.tokenOut||_r[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}]:[...KV],l=e.hooks||Ho,u=[],d=null;for(let p of c){let{poolKey:m,zeroForOne:f}=XV({tokenIn:s,tokenOut:a,fee:p.fee,tickSpacing:p.tickSpacing,hooks:l}),B=pb.encodeFunctionData("quoteExactInputSingle",[{poolKey:m,zeroForOne:f,exactAmount:A,hookData:"0x"}]);try{let I=await V(r,"eth_call",[{to:n,data:B},"latest"],t);if(!I||I==="0x"){u.push({...p,ok:!1,error:"empty result"});continue}let E=pb.decodeFunctionResult("quoteExactInputSingle",I),Q={fee:p.fee,tickSpacing:p.tickSpacing,ok:!0,amountOut:E[0].toString(),gasEstimate:E[1].toString(),poolKey:m,zeroForOne:f,poolId:ZV({...m})};u.push(Q),(!d||BigInt(Q.amountOut)>BigInt(d.amountOut))&&(d=Q)}catch(I){u.push({...p,ok:!1,error:String(I.message||I).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 dc({chainId:r,tokenA:s,tokenB:a,dexIds:eJ},t).catch(()=>null):null,g=e.liquidityUsd??h?.liquidityUsd??null;return ce({venue:"uniswap-v4",chainId:r,chain:_r[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"&&mc(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 Cb(){return Object.entries(_r).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 Bb(e={}){let t=Eb(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 Ec=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"}),rJ=/^0x[0-9a-fA-F]{40}$/;function nJ(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}rJ.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))Ec.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 oJ(e){let{ok:t,errors:r,warnings:n}=nJ(e);if(!t)throw new Error(`invalid scanner for ${e?.key??"<unknown>"}:
47
+ - ${r.join(`
48
+ - `)}`);let o=e.capabilities||{},i=Ec.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,explorer:e.explorer||null,venues:(e.venues||[]).map(a=>({...a})),warnings:n,capabilities(){return{chainId:e.chainId,key:e.key,supported:[...i],unsupported:Ec.filter(a=>!i.includes(a))}},supports(a){return i.includes(a)}};for(let a of Ec)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 xg=new Map;function Qb(e){let t=oJ(e);return xg.set(t.chainId,t),t}function yb(e){return xg.get(Number(e))||null}function wb(){return[...xg.values()]}De();var vg={getAmountsOut:"d06ca61f",swapExactTokensForTokens:"38ed1739",swapExactETHForTokens:"7ff36ab5"},Ct=e=>BigInt(e).toString(16).padStart(64,"0"),xs=e=>e.slice(2).toLowerCase().padStart(64,"0");function iJ(e,t){return`0x${vg.getAmountsOut}`+Ct(e)+Ct(64)+Ct(t.length)+t.map(xs).join("")}function sJ(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 Dg(e,t="router"){return(e?.venues||[]).find(n=>n.kind===t)?.address??null}var Rg=100;function aJ(e,t){let r=Number(t);if(!Number.isFinite(r)||r<0)throw new Error("slippageBps must be a non-negative number");if(r>Rg)throw new Error(`slippageBps ${r} exceeds the ${Rg} 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 bb(e){let{chainId:t,wrappedNative:r}=e;async function n(o,i,s,a){let A=await V(t,"eth_call",[{to:o,data:iJ(i,s)},"latest"],a);return sJ(A?.result??A)}return{async quote({tokenIn:o,tokenOut:i,amountIn:s,path:a},A={}){let c=Dg(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=Dg(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=Dg(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=aJ(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,I=B?`0x${vg.swapExactETHForTokens}`+Ct(m)+Ct(128)+xs(a)+Ct(f)+Ct(g.length)+g.map(xs).join(""):`0x${vg.swapExactTokensForTokens}`+Ct(s)+Ct(m)+Ct(160)+xs(a)+Ct(f)+Ct(g.length)+g.map(xs).join("");return{unsigned:!0,signedBy:"user-wallet",chainId:t,tx:{to:h,data:I,value:B?`0x${BigInt(s).toString(16)}`:"0x0"},guard:{quotedOut:p.amountOut,minOut:m.toString(),slippageBps:A,maxSlippageBps:Rg,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 AJ=[100,500,3e3,1e4],kb={quoteExactInputSingle:"c6a5026a",exactInputSingle:"04e45aaf"},kn=e=>BigInt(e).toString(16).padStart(64,"0"),Ds=e=>e.slice(2).toLowerCase().padStart(64,"0"),Sb=/^0x[0-9a-fA-F]{40}$/,Fg=100;function cJ(e,t){let r=Number(t);if(!Number.isFinite(r)||r<0)throw new Error("slippageBps must be a non-negative number");if(r>Fg)throw new Error(`slippageBps ${r} exceeds the ${Fg} 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 Ng(e,t){return(e?.venues||[]).find(r=>r.kind===t)?.address??null}function xb(e){let{chainId:t,wrappedNative:r}=e;async function n({quoter:i,tokenIn:s,tokenOut:a,amountIn:A,fee:c},l){let u=`0x${kb.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 AJ){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=Ng(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(!Sb.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,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=Ng(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=Ng(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(!Sb.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=cJ(h.amountOut,c);if(p<=0n)throw new Error("computed minOut is zero -- refusing to prepare");let m=`0x${kb.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:m,value:"0x0"},guard:{quotedOut:h.amountOut,minOut:p.toString(),slippageBps:c,maxSlippageBps:Fg,fee:g},requires:[{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 Ic={decimals:"0x313ce567",symbol:"0x95d89b41",name:"0x06fdde03",totalSupply:"0x18160ddd",owner:"0x8da5cb5b"};function Db(e){if(!e||e==="0x")return null;try{return BigInt(e)}catch{return null}}function vb(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 lJ(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,Ic.decimals,o).catch(()=>null),r(n,Ic.symbol,o).catch(()=>null),r(n,Ic.name,o).catch(()=>null),r(n,Ic.totalSupply,o).catch(()=>null)]),c=Db(i?.result??i),l=c!==null||s?.result||a?.result;return{chainId:t,address:n,decimals:c===null?null:Number(c),symbol:vb(s?.result??s),name:vb(a?.result??a),totalSupply:(Db(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 Rb(e){let r={...lJ(e)},n=new Set((e.venues||[]).map(i=>i.kind));e.venueKind==="uniswap-v3"&&n.has("quoter")&&n.has("router")?Object.assign(r,xb({chainId:e.chainId,wrappedNative:e.wrappedNative})):e.venueKind==="uniswap-v2"&&n.has("router")&&Object.assign(r,bb({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 Mg(){return Go.map(e=>Qb(Rb(e)))}var vs=new Map,uJ=Object.keys(lt).map(Number),dJ=Object.keys(_r).map(Number),hJ=Go.map(e=>e.chainId),Ug=new Set,Nb=!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(Nb&&Ug.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 Lg(e){return vs.get(e)||null}function Cc({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 gJ(){Ug.clear();for(let e of vs.keys())Ug.add(e);Nb=!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, and user vault equities, including 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",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."});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:hJ,auth:"none",ops:["health","scan"],execution:"prepare",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, and guarded unsigned transaction preparation. Robinhood Chain is the default, not a special implementation. Never signs or broadcasts."});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",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",baseEnv:["JUPITER_SWAP_API_URL","SOLANA_RPC_URL"],description:"Jupiter Swap API v1 quote + unsigned user-signature swap transaction preparation"});v({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."});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:uJ,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:dJ,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."});gJ();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 pJ="https://api.hyperliquid.xyz/info",fJ="https://api.hyperliquid-testnet.xyz/info";function mJ({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"?fJ:pJ}async function ge(e,t={}){if(!e||!e.type)throw new Error("hlInfo requires body.type");let r=mJ(t);return C(r,{method:"POST",body:e,fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function Fb(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 hr(e={}){return ge({type:"allMids"},e)}async function Bc(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 Qc(e,t={}){if(!e)throw new Error("hlClearinghouse requires user address");return ge({type:"spotClearinghouseState",user:e},t)}async function Mb(e,t={}){if(!e)throw new Error("hlUserFills requires user address");return ge({type:"userFills",user:e},t)}async function Ub(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 yc({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 Lb(e,t={}){if(!e)throw new Error("hlOpenOrders requires user");return ge({type:"openOrders",user:e},t)}async function Tb(e,t={}){if(!e)throw new Error("hlFrontendOpenOrders requires user");return ge({type:"frontendOpenOrders",user:e},t)}async function wc(e,t={}){if(!e)throw new Error("hlUserState requires user");return ge({type:"clearinghouseState",user:e},t)}async function bc(e={}){return ge({type:"spotMeta"},e)}var IJ=/^0x[0-9a-fA-F]{40}$/,Pb="0xdfc24b077bc1425ad1dea75bcb6f8158e10df303";function Tg(e,t){let r=String(e||"").trim();if(!IJ.test(r))throw new Error(`hl-vaults: ${t} must be a 0x EVM address`);return r.toLowerCase()}function _b(e){if(e==null||e==="")return null;let t=Number(e);return Number.isFinite(t)?t:null}function Ob(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 CJ(e){return[...e].sort((t,r)=>(_b(r.tvl)??-1)-(_b(t.tvl)??-1))}function _g(e){return e.hlInfo||ge}async function Pg(e={},t={}){let r=await _g(t)({type:"vaultSummaries"},t),n=CJ((Array.isArray(r)?r:[]).map(Ob));return{provider:"hl-vaults",count:n.length,vaults:n,exec:!1,raw:r}}async function kc(e={},t={}){let n={type:"vaultDetails",vaultAddress:Tg(e.vaultAddress||e.address,"vaultAddress")};e.user&&(n.user=Tg(e.user,"user"));let o=await _g(t)(n,t);return{provider:"hl-vaults",vault:Ob(o||{}),exec:!1,raw:o}}async function Og(e={},t={}){let r=Tg(e.user||e.address,"user"),n=await _g(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{provider:"hl-vaults",user:r,count:o.length,positions:o,exec:!1,raw:n}}async function Hg(e={},t={}){let r=String(e.mode||"hlp").toLowerCase();if(r==="hlp")return kc({...e,vaultAddress:Pb},t);if(r==="summaries")return Pg(e,t);if(r==="details")return kc(e,t);if(r==="mine")return Og(e,t);throw new Error("hl-vaults: mode must be hlp, summaries, details, or mine")}async function Hb(e={}){try{let t=await Hg({mode:"hlp"},e);return{ok:t.vault.vaultAddress===Pb&&!!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}}}M();var QJ="https://clob.polymarket.com",yJ="https://gamma-api.polymarket.com";function Ns(e={}){return(e.clobUrl||process.env.POLY_CLOB_URL||QJ).replace(/\/$/,"")}function Gb(e={}){return(e.gammaUrl||process.env.POLY_GAMMA_URL||yJ).replace(/\/$/,"")}async function Gg(e={}){return C(`${Ns(e)}/time`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs})}async function qb(e={}){let t=await Gg(e);return{ok:t!=null&&t!=="",time:t}}async function Yb({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(`${Gb(n)}/markets?${o}`,{fetchImpl:n.fetchImpl,timeoutMs:n.timeoutMs})}async function Vb(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 Wb(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 $b(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 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(`${Gb(n)}/events?${o}`,{fetchImpl:n.fetchImpl,timeoutMs:n.timeoutMs})}De();M();import{createHash as Kb}from"node:crypto";var Yo="mainnet-beta",bJ="https://api.mainnet-beta.solana.com",qg="TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";function kJ(e={}){return String(e.rpcUrl||process.env.SOLANA_RPC_URL||bJ).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 SJ(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(kJ(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 Yg(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 jb(e={}){try{let[t,r]=await Promise.all([Fs("getHealth",[],e),Yg({},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 Sc(e={},t={}){let r=me(e.address||e.owner,"address"),n=await Fs("getBalance",SJ([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 xJ(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||qg,"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(xJ):[];return{provider:"solana-rpc",cluster:Yo,owner:r,filter:n,slot:i?.context?.slot??null,accounts:s,raw:i}}function DJ(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 vJ(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 RJ(e){let t=Buffer.from(e,"base64");try{let r=vJ(t,0),n=r.offset+r.value*64;if(n>=t.length)throw new Error("missing message");return Kb("sha256").update(t.subarray(n)).digest("hex")}catch{return Kb("sha256").update(t).digest("hex")}}async function Zb(e={},t={}){let r=DJ(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:RJ(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 FJ="mainnet",MJ="https://mempool.space/api",UJ="https://mempool.space/testnet/api";function zt(e={}){return String(e.network||process.env.BTC_NETWORK||FJ).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(/\/$/,""):zt(e)==="testnet"?UJ:MJ}function Vg(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 gr(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 LJ(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 Wg(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 xc(e,t={}){let r=await Wg(e,t);try{return JSON.parse(r)}catch{return r}}async function Xb(e={}){try{let t=await Wg("/blocks/tip/height",e),r=Number(t);return{ok:Number.isFinite(r)&&r>0,provider:"bitcoin-esplora",network:zt(e),baseUrl:Vg(Jg(e)),tipHeight:r,exec:!1,signing:"user-wallet"}}catch(t){return{ok:!1,provider:"bitcoin-esplora",network:zt(e),baseUrl:Vg(Jg(e)),error:Vg(t?.message||t),exec:!1}}}async function ek(e={}){let t=await Wg("/blocks/tip/height",e);return{provider:"bitcoin-esplora",network:zt(e),tipHeight:Number(t)}}async function tk(e={}){try{let t=await xc("/v1/fees/recommended",e);return{provider:"bitcoin-esplora",network:zt(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:zt(e),fastestFee:null,halfHourFee:null,hourFee:null,note:"fee endpoint unavailable on this Esplora host"}}}async function Dc(e={},t={}){let r=gr(e.address||e.addr,"address"),n=await xc(`/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:zt(t),address:r,balanceSats:String(s-a),chainStats:o,mempoolStats:i,raw:n}}async function rk(e={},t={}){let r=gr(e.address||e.addr,"address"),n=await xc(`/address/${r}/utxo`,t),o=Array.isArray(n)?n:[];return{provider:"bitcoin-esplora",network:zt(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 nk(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 xc(`/tx/${r}`,t);return{provider:"bitcoin-esplora",network:zt(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 ok(e={},t={}){let r=LJ(e.txHex||e.hex||e.transaction,"txHex");return{provider:"bitcoin-esplora",network:zt(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 ik="ORACLE_ALLOW_CUSTOM_PROVIDER_URL";function Ut({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:sk(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([sk(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[ik]||"")==="1")return{baseUrl:s,trusted:!1,host:A};if(o)throw new Error(`${e}: refusing to call non-allowlisted host ${A} (set ${ik}=1 to permit it)`);return{baseUrl:s,trusted:!1,host:A}}function sk(e){let t=new URL(String(e));if(t.protocol!=="http:"&&t.protocol!=="https:")throw new Error("unsupported protocol");return t.host}function Bt(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 $g="https://ordinals.com";function vc(e={}){return String(e.baseUrl||process.env.BTC_META_API_URL||process.env.UNISAT_API_URL||"").trim().replace(/\/$/,"")}var _J=["open-api.unisat.io","open-api-testnet.unisat.io","api.bestinslot.xyz","api.hiro.so"];function ak(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=vc(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=_J.includes(o)&&(i==="https:"||s)}}catch{r=!1}return Bt({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:ak(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 Ak(e={}){let t=vc(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:ak(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 Rc(e={},t={}){let r=gr(e.address||e.addr,"address"),n=vc(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=PJ(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 PJ(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=gr(e.address||e.addr,"address"),n=vc(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=OJ(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 ck(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||$g,o=await Vo(`${n}/r/inscription/${r}`,t);return{provider:"bitcoin-meta",source:"ordinals.com/r",keyless:!0,inscriptionId:r,info:o}}async function lk(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||$g,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 uk(e={},t={}){let r=t.ordinalsBase||$g,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 OJ(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 GJ=["unsigned","notsigned","tosign","signable"],qJ=new Set(["requiresusersignature","requiressignature","needssignature","signaturerequired","signaturesrequired","signingready","signaturecount","signaturethreshold","requiredsignatures","signatureneeded","hassignature","allowsignatures","requestsignature","multisig","cosig","msig"]),YJ=new Set(["sig","sigs","scriptsig","witness","psbt","finalizedpsbt","completepsbt","finalpsbt","psbtfinalized","serializedtransaction"]);function zg(e){return String(e).toLowerCase().replace(/[^a-z0-9]/g,"")}function VJ(e){return GJ.some(t=>e.startsWith(t))||qJ.has(e)}function JJ(e){let t=String(e);if(!/^[\x20-\x7e]+$/.test(t))return!0;let r=zg(t);return VJ(r)?!1:YJ.has(r)?!0:r.includes("signed")||r.includes("signature")||r.endsWith("sig")||r.endsWith("sigs")}function WJ(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 Kg(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=>Kg(A,t+1,r,n));let o=[];for(let[A,c]of Object.entries(e)){if(JJ(A)){o.push(A);continue}o.push(...Kg(c,t+1,r,n))}let s=Object.keys(e).map(zg).some(A=>A.endsWith("psbt")||A.endsWith("psbtbase64")),a=Object.entries(e).some(([A,c])=>/complete|finalized|isfinal/.test(zg(A))&&c===!0);return s&&a&&o.push("psbt(complete)"),WJ(e)&&o.push("v/r/s"),o}function pr(e,t){let r=Kg(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 $J="https://api.satflow.com/v1";function dk(e={}){return Ut({provider:"satflow",defaultUrl:$J,hosts:["api.satflow.com"],url:e.baseUrl||process.env.SATFLOW_API_URL})}function Nc(e={}){return dk(e).baseUrl}function Zg(e={}){return String(e.apiKey||process.env.SATFLOW_API_KEY||process.env.BTC_SATFLOW_API_KEY||"").trim()}function zJ(e={}){return Bt({accept:"application/json","content-type":"application/json","user-agent":"oracle-btc-satflow/0.1"},{"x-api-key":Zg(e)},dk(e).trusted)}async function Pr(e,{method:t="GET",body:r,opts:n={}}={}){if(!Zg(n))throw new Error("satflow: SATFLOW_API_KEY not set (request key via Satflow docs form)");let i=`${Nc(n)}${e.startsWith("/")?e:`/${e}`}`,a=await(n.fetchImpl||fetch)(i,{method:t,headers:zJ(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 hk(e={}){if(!!!Zg(e))return{ok:!1,provider:"satflow",baseUrl:Nc(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 Pr("/collection/stats/floors?type=ordinals",{opts:e}),{ok:!0,provider:"satflow",baseUrl:Nc(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:Nc(e),apiKeyPresent:!0,error:String(r?.message||r).slice(0,200),magicEdenOrdinals:"deprecated-dead"}}}async function gk(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 Pr(`/collection/stats/floors?${n}`,{opts:t});return{provider:"satflow",type:r,floors:o,magicEdenOrdinals:"deprecated-dead"}}async function pk(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 Pr(`/collection/stats?${n}`,{opts:t});return{provider:"satflow",collectionId:r,stats:o}}async function fk(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 Pr(`/item?${n}`,{opts:t})}}async function Fc(e={},t={}){let r=gr(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 Pr(`/address/wallet-contents?${n}`,{opts:t});return{provider:"satflow",address:r,contents:o}}async function mk(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 Pr(`/orders/floor?${n}`,{opts:t})}}var KJ=new Set(["body","execute","fetchImpl","opts","apiKey","baseUrl","timeoutMs","maxSats","operator"]);function Ek(e={},t=null){let r=e.body&&typeof e.body=="object"?e.body:e,n={};for(let[o,i]of Object.entries(r))KJ.has(o)||t&&!t.has(o)||i!==void 0&&(n[o]=i);return n}var jJ=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"]),ZJ=new Set(["inscription_id","inscriptionId","runes_output","runesOutput","ord_address","receive_address","price","tap_key","collection_slug","expires_at"]);function jg(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}async function Ik(e={},t={}){let r=Ek(e,jJ);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=jg(r);if(i!=null&&i>o)throw new Error(`satflow: requested price ${i} sats exceeds maxSats cap ${o}`);let s=await Pr("/intent/satflow-purchase",{method:"POST",body:r,opts:t}),a=jg(s)??jg(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`);return pr("satflow",s),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:s?.unsignedPSBTBase64||s?.unsignedPsbtBase64||s?.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 Mc(e={},t={}){let r=Ek(e,ZJ);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 Pr("/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 Uc="https://lite-api.jup.ag/swap/v1",Qk="So11111111111111111111111111111111111111112",yk="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",e5=100,Ck=2e4;function wk(e={}){return String(e.baseUrl||process.env.JUPITER_SWAP_API_URL||Uc).replace(/\/$/,"")}function Lc(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 bk(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>e5)throw new Error("jupiter: slippage exceeds hard 100 bps cap");return t}function Xg(e,t){return e==null?t:!!e}function t5(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 ep(e={},{quotedAtMs:t=Date.now(),ttlMs:r=Ck}={}){let n=me(e.inputMint,"inputMint"),o=me(e.outputMint,"outputMint"),i=Lc(e.inAmount,"inAmount"),s=Lc(e.outAmount,"outAmount"),a=Lc(e.otherAmountThreshold??e.outAmount,"otherAmountThreshold"),A=bk(e.slippageBps??50);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)||Ck,1e3),3e4)}}var r5=new Set(["BPFLoaderUpgradeab1e11111111111111111111111","BPFLoader2111111111111111111111111111111111","BPFLoader1111111111111111111111111111111111"]),n5="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";function Bk(e){if(typeof e!="string"||!e.length)return!1;let t=0n;for(let o of e){let i=n5.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 kk(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(`${Uc}/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])=>Bk(d)),A=[],c=s.filter(([d])=>!Bk(d)).map(([d,h])=>({programId:d,label:h,reason:"malformed program id"}));if(e.verify===!1)return{source:`${Uc}/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&&r5.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:`${Uc}/program-id-to-label`,rpc:r,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 Sk(e={}){try{return{ok:!0,provider:"jupiter",outAmount:(await Tc({inputMint:Qk,outputMint:yk,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 Tc(e={},t={}){let r=me(e.inputMint||e.fromMint||Qk,"inputMint"),n=me(e.outputMint||e.toMint||yk,"outputMint"),o=Lc(e.amount||e.inAmount,"amount"),i=bk(e.slippageBps??e.maxSlippageBps??50),s=new URL(`${wk(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=ep({...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 o5(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}async function xk(e={},t={}){let r=me(e.userPublicKey||e.owner||e.wallet,"userPublicKey"),n=e.quoteResponse?{quote:e.quoteResponse,solanaGuard:ep(e.quoteResponse,t)}:await Tc(e,t),o=n.quote,i=n.solanaGuard||ep(o,t);if(Xg(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(`${wk(t)}/swap`,{method:"POST",body:o5({quoteResponse:o,userPublicKey:r,wrapAndUnwrapSol:Xg(e.wrapAndUnwrapSol,!0),dynamicComputeUnitLimit:Xg(e.dynamicComputeUnitLimit,!0),dynamicSlippage:!1,prioritizationFeeLamports:e.prioritizationFeeLamports}),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),a=t5(s?.swapTransaction);pr("jupiter",s);let A=s?.quoteResponse??s?.quote??null;if(A)for(let c of["inAmount","outAmount","otherAmountThreshold","inputMint","outputMint"]){let l=o?.[c],u=A?.[c];if(l!=null&&u!=null&&String(l)!==String(u))throw new Error(`jupiter: swap response ${c} (${u}) does not match the quoted ${c} (${l}) \u2014 refusing to prepare`)}return L({provider:"jupiter",chain:"solana-mainnet-beta",prepareReady:!0,executionReady:!1,signingReady:!1,broadcastReady:!1,requiresUserSignature:!0,verifiedAgainstQuote:!!A,userPublicKey:r,quote:o,solanaGuard:i,swapTransaction:a,swapTransactionEncoding:"base64",lastValidBlockHeight:s?.lastValidBlockHeight??null,prioritizationFeeLamports:s?.prioritizationFeeLamports??null,computeUnitLimit:s?.computeUnitLimit??null,raw:s},{provider:"jupiter",kind:"jupiter-swap"})}M();var s5="https://coins.llama.fi",a5="https://api.llama.fi",A5="https://yields.llama.fi",c5="https://stablecoins.llama.fi";function l5(e={}){return(e.baseUrl||process.env.DEFILLAMA_COINS_URL||s5).replace(/\/$/,"")}function Dk(e={}){return(e.baseUrl||process.env.DEFILLAMA_API_URL||a5).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(`${l5(t)}/prices/current/${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function vk(e={}){let r=(await Sn(["coingecko:ethereum"],e))?.coins?.["coingecko:ethereum"];return{ok:!!r?.price,ethUsd:r?.price??null}}async function Rk(e={}){return C(`${Dk(e)}/protocols`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??2e4})}async function Nk(e={},t={}){let r=(t.yieldsBaseUrl||process.env.DEFILLAMA_YIELDS_URL||A5).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 Fk(e={},t={}){let r=(t.stablecoinsBaseUrl||process.env.DEFILLAMA_STABLECOINS_URL||c5).replace(/\/$/,""),n=e.includePrices!==!1;return C(`${r}/stablecoins?includePrices=${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??3e4})}async function Mk(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(`${Dk(t)}/overview/dexs/${r}?${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??3e4})}async function Uk(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 tp(e){let t=String(e||"").trim();return/^0x[0-9a-fA-F]{40}$/.test(t)?t:Or}import{existsSync as C5,readFileSync as B5,lstatSync as Q5}from"node:fs";import{homedir as Lk}from"node:os";import{join as rp}from"node:path";import{Contract as d5,JsonRpcProvider as h5}from"ethers";var g5="0x62FCFAf7573AD8B41a0FBF347AfEb85e06599A75",p5=999,f5="https://rpc.hyperliquid.xyz/evm",m5=["function balanceOf(address owner) view returns (uint256)"],E5=/^0x[a-fA-F0-9]{40}$/;function I5(e){return E5.test(String(e||""))}async function _c(e,{contract:t=g5,rpc:r=f5,chainId:n=p5,balanceOf:o}={}){if(!I5(e))throw new Error("invalid-address");if(o)return BigInt(await o(e));let i=new h5(r,n,{staticNetwork:!0}),s=new d5(t,m5,i);return BigInt(await s.balanceOf(e))}var y5=100,w5=5,Tk=Object.freeze({swap:5,bridge:5,perps:0,nft:0});function b5(e){let t=String(e||"swap").toLowerCase();return Object.prototype.hasOwnProperty.call(Tk,t)?Tk[t]:w5}var k5="ORACLE_INTEGRATOR_FEE_BPS",S5="ORACLE_INTEGRATOR_FEE_RECIPIENT",x5="ORACLE_INTEGRATOR_ID",_k="ORACLE_INTEGRATOR_FEE_RECIPIENT_PIN",D5="oracle";function v5(e=process.env){if(process.env.ORACLE_TEST_ISOLATE_SECRETS==="1"){if(e[_k])return String(e[_k]);let t=e.ORACLE_CONFIG_DIR||rp(Lk(),".config","oracle");return rp(t,"fee-recipient")}return rp(Lk(),".config","oracle","fee-recipient")}function np(e=process.env){try{let t=v5(e);if(!C5(t)||Q5(t).isSymbolicLink())return"";let r=B5(t,"utf8").trim().toLowerCase();return/^0x[a-f0-9]{40}$/.test(r)?r:""}catch{return""}}function R5(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),y5)}function N5({env:e=process.env,action:t="swap",admin:r=!1}={}){let n=String(e[S5]||"").trim(),o=String(e[x5]||D5).trim();if(r===!0)return{bps:0,recipient:"",integrator:o,action:t,applies:!1,reason:"admin-oracle"};let i=b5(t),s=R5(e[k5],{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=np(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 Pc({wallet:e,env:t=process.env,action:r="swap",holderCheck:n={},admin:o=!1}={}){let i=N5({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 _c(s,n))>0n?{...i,bps:0,applies:!1,reason:"locals-only-holder",holderVerificationStatus:"holder"}:{...i,holderVerificationStatus:"non-holder"}}catch{return{...i,holderVerificationStatus:"unavailable"}}}function Pk(e){return e?.applies?{integrator:e.integrator,fee:String(e.bps/1e4)}:{}}function Ok(e){return e?.applies?{partner:e.integrator,partnerFeeBps:String(e.bps),partnerAddress:e.recipient}:{}}var F5="https://li.quest/v1";function ip(e={}){return(e.baseUrl||process.env.LIFI_API_URL||F5).replace(/\/$/,"")}var op="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",M5="0x0000000000000000000000000000000000000000";function U5(e){let t=String(e||op).toLowerCase();return t===op.toLowerCase()||t===M5}function Hk(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 Gk(e={}){let t=await C(`${ip(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 Us(e={},t={}){let{fromChain:r,toChain:n=r,fromToken:o=op,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 Pc({wallet:e.fromAddress,env:t.env,action:e.feeAction||"swap",holderCheck:t.holderCheck});for(let[m,f]of Object.entries(Pk(l)))A.set(m,f);let u=await C(`${ip(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 qk(e={},t={}){let r=await Us(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(!U5(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:Hk(a,"approval token"),spender:Hk(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:we(r.autoSlippage,{chainId:o,venue:n.to,data:n.data})}},{provider:"lifi",kind:"lifi-tx"})}async function Yk(e={}){return C(`${ip(e)}/chains`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??12e3})}De();import{Interface as Wk,getAddress as Ls,isAddress as T5}from"ethers";var Hr={8453:{name:"base",quoter:"0x254cF9E1E6e233aa1AC962CB9B05b2cfeAaE15b0",router:"0xBE6D8f0d05cC4be24d5167a3eF062215bE6D18a5",factory:"0x5e7BB104d84c7CB9B682AaC2F3d509f5F406809A",weth:"0x4200000000000000000000000000000000000006",usdc:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}},_5=[1,50,100,200,2e3],Vk=new Wk(["function quoteExactInputSingle((address tokenIn, address tokenOut, uint256 amountIn, int24 tickSpacing, uint160 sqrtPriceLimitX96) params) returns (uint256 amountOut, uint160 sqrtPriceX96After, uint32 initializedTicksCrossed, uint256 gasEstimate)"]),P5=new Wk(["function exactInputSingle((address tokenIn, address tokenOut, int24 tickSpacing, address recipient, uint256 deadline, uint256 amountIn, uint256 amountOutMinimum, uint160 sqrtPriceLimitX96) params) payable returns (uint256 amountOut)"]),$k="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",zk="0x0000000000000000000000000000000000000000";function Kk(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===$k||e===zk||/^eth$/i.test(String(e)))return Ls(r.weth);let n=String(e);if(/^weth$/i.test(n))return Ls(r.weth);if(/^usdc$/i.test(n))return Ls(r.usdc);if(!T5(n))throw new Error(`invalid token address: ${e}`);return Ls(n)}async function Oc(e={},t={}){let{chainId:r,quoter:n,router:o}=Kk(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]:[..._5],c=[],l=null;for(let u of A){let d=Vk.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=Vk.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 jk(e={},t={}){let r=Number(e.chainId??8453),n=Kk(r),o=Ls(e.recipient||e.from||e.userAddress),i=String(e.tokenIn||"WETH"),s=!e.tokenIn||i===$k||i===zk||/^eth$/i.test(i),a=await Oc(e,t),A=Math.min(600,Math.max(30,Number(e.deadlineSeconds??300))),l=Number(t.nowSeconds??Math.floor(Date.now()/1e3))+A,u=P5.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:we(a.autoSlippage,{chainId:r,venue:n.router,data:u})}},{provider:"aerodrome",kind:"aerodrome-exact-in"})}async function Zk(e={}){let t=Number(e.chainId??8453);try{let r=await Oc({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 Xk(){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 H5="https://api.0x.org";function eS(e={}){return Ut({provider:"zerox",defaultUrl:H5,hosts:["api.0x.org"],url:e.baseUrl||process.env.ZEROX_API_URL})}function tS(e={}){return eS(e).baseUrl}function Hc(e={}){return e.apiKey||process.env.ZEROX_API_KEY||process.env.OX_API_KEY||process.env["0X_API_KEY"]||""}function rS(e={}){return Bt({"0x-version":"v2",accept:"application/json"},{"0x-api-key":Hc(e)},eS(e).trusted)}async function nS(e={}){if(!Hc(e))return{ok:!1,configured:!1,error:"ZEROX_API_KEY not set"};try{let t=await sp({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 sp(e={},t={}){if(!Hc(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(`${tS(t)}/swap/allowance-holder/price?${a}`,{headers:rS(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function Ts(e={},t={}){if(!Hc(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(`${tS(t)}/swap/allowance-holder/quote?${A}`,{headers:rS(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 oS(e={},t={}){if(!e.taker)throw new Error("0x: taker required for executable prepare");let r=await Ts(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:we(r.autoSlippage,{chainId:o,venue:n.to,data:n.data})}},{provider:"zerox",kind:"zerox-tx"})}M();var q5="https://across.to/api",Y5="https://api.hop.exchange/v1",V5="https://api.relay.link",J5={ethereum:1,optimism:10,bsc:56,polygon:137,arbitrum:42161,avalanche:43114,base:8453};async function iS(e={}){try{return{ok:!0,estimatedFillTimeSec:(await ap({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 ap(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||q5).replace(/\/$/,"");return C(`${A}/suggested-fees?${a}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function sS(e={}){try{let t=await Ap({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 Ap(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||Y5).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||J5[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 aS(e={}){try{let t=await Gc({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 Gc(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||V5).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 AS(e={},t={}){let r=await Gc(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:we(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 $5,getAddress as _s,isAddress as z5}from"ethers";var Hj=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"});function cp(e=process.env){return String(e.ORACLE_AUTONOMOUS_TRADING??"").trim()==="1"}function cS(e=process.env){return String(e.ORACLE_AUTONOMOUS_MINT??process.env.ORACLE_AUTONOMOUS_MINT??"").trim()==="1"}var uS={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"},K5=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),j5=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"}),up={1:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",8453:"0x4200000000000000000000000000000000000006",42161:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1"},dS={1:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",8453:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",42161:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831"},lS=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"}]}),Kj=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]});function dp(e,t={}){if(t.baseUrl)return t.baseUrl.replace(/\/$/,"");let r=uS[Number(e)];if(!r)throw new Error(`cowswap: unsupported chainId ${e}`);return r}function qc(e,t){let r=String(e||"").trim();if(!z5(r))throw new Error(`cowswap: ${t} must be an address`);return _s(r).toLowerCase()}function lp(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 Z5(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 X5(e){let t=K5[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 e3(e={},t,r){let n=qc(e.sellToken,"sellToken"),o=qc(e.buyToken,"buyToken"),i=qc(e.receiver||r,"receiver"),s=Number(e.validTo);if(!Number.isInteger(s)||s<=0)throw new Error("cowswap: quote.validTo required");let a=Z5(e.appData||e.appDataHash||`0x${"0".repeat(64)}`,"appData");return{sellToken:n,buyToken:o,receiver:i,sellAmount:lp(e.sellAmount,"sellAmount"),buyAmount:lp(e.buyAmount,"buyAmount"),validTo:s,appData:a,feeAmount:lp(e.feeAmount??"0","feeAmount"),kind:String(e.kind||"sell"),partiallyFillable:!!e.partiallyFillable,sellTokenBalance:String(e.sellTokenBalance||"erc20"),buyTokenBalance:String(e.buyTokenBalance||"erc20")}}async function hS(e={}){try{let t=await Wo({chainId:1,sellToken:up[1],buyToken:dS[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=tp(e.from||e.owner),o=e.sellToken||up[r],i=e.buyToken||dS[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=up[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(`${dp(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 gS(e={},t={}){let r=Number(e.chainId??1),n=qc(tp(e.from||e.owner||e.signer),"owner"),o=await Wo({...e,chainId:r,from:n,signingScheme:e.signingScheme||"eip712"},t),i=e3(o?.quote||o,r,n),s=X5(r),a={domain:s,types:lS,primaryType:"Order",message:i},A=$5.hash(s,lS,i),c=j5[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 pS(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(`${dp(r,t)}/orders/${encodeURIComponent(n)}/status`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function fS(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(`${dp(r,t)}/orders/${encodeURIComponent(n)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}function mS(){return Object.keys(uS).map(Number)}M();var r3="https://api.1inch.dev/swap/v6.0";function ES(e={}){return Ut({provider:"oneinch",defaultUrl:r3,hosts:["api.1inch.dev"],url:e.baseUrl||process.env.ONEINCH_API_URL})}function hp(e={}){return ES(e).baseUrl}function Ps(e={}){return e.apiKey||process.env.ONEINCH_API_KEY||process.env.ONE_INCH_API_KEY||""}function gp(e={}){let t=Ps(e);return Bt({accept:"application/json"},{Authorization:t?`Bearer ${t}`:""},ES(e).trusted)}async function IS(e={}){if(!Ps(e))return{ok:!1,configured:!1,error:"ONEINCH_API_KEY not set"};try{return{ok:!0,configured:!0,dstAmount:(await pp({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 pp(e={},t={}){if(!Ps(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(`${hp(t)}/${r}/quote?${s}`,{headers:gp(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 n3(e){return/^(eth|native|0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee)$/i.test(String(e||""))}async function fp(e={},t={}){if(!Ps(t))throw new Error("ONEINCH_API_KEY required for 1inch");let r=Number(e.chainId??1);return C(`${hp(t)}/${r}/approve/spender`,{headers:gp(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function CS(e={},t={}){if(!Ps(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(`${hp(t)}/${r}/swap?${A}`,{headers:gp(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(!n3(n)){let g=c?.spender||c?.approvalAddress||(await fp({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:we(d.autoSlippage,{chainId:r,venue:l.to,data:l.data})}},{provider:"oneinch",kind:"oneinch-tx"})}var i3=process.env.HL_WS_URL||"wss://api.hyperliquid.xyz/ws";async function Os(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||i3,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 BS(e={}){try{let t=await Os({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 QS(e={}){let t=await Os({type:"allMids"},e),r=t.last||{};return{ms:t.ms,mids:r.data?.mids||r.data||{},channel:r.channel}}async function yS(e,t={}){if(!e)throw new Error("coin required");let r=await Os({type:"l2Book",coin:String(e)},t);return{ms:r.ms,book:r.last?.data||r.last,channel:r.last?.channel}}var a3=process.env.POLY_WS_URL||"wss://ws-subscriptions-clob.polymarket.com/ws/market";async function Yc(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||a3,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 wS(e={}){let t=e.assetId||"98022490269692409998126496127597032490334070080325855126491859374983463996227";try{let r=await Yc([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 bS(e,t={}){if(!e)throw new Error("assetId required");let r=await Yc([e],t);return{ms:r.ms,assetId:String(e),data:r.last,messages:r.messages}}M();import{readFileSync as d3,existsSync as h3}from"node:fs";import{getAddress as g3,Interface as Vc,TypedDataEncoder as NS,parseUnits as p3}from"ethers";var c3=/^(0|[1-9][0-9]*)$/,mp=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(!c3.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 l3(e){let t=Number(e);if(!Number.isSafeInteger(t)||t<=0)throw new Error("chainId must be a positive integer");return t}function u3(e={}){return e.maxFeePerGas!=null?xn(e.maxFeePerGas,"maxFeePerGas"):e.gasPrice!=null?xn(e.gasPrice,"gasPrice"):null}function Ep(e={}){try{let t=l3(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=u3(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 kS(e={}){let t=Ep(e);if(!t.ok)throw new mp(t);return t}var f3="https://api.opensea.io/api/v2",m3="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)",E3=new Vc([`function ${m3}`]),SS=new Vc(["function mintPublic(address nftContract,address feeRecipient,address minterIfNotPayer,uint256 quantity) payable"]),I3=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"]),C3=new Set(I3),FS=new Set(["solana","flow"]),Ip="0x0000000000000000000000000000000000000000";function B3(){let e=process.env.OPENSEA_ENV_FILE||`${process.env.HOME||""}/.config/locals-only/opensea.env`;if(!h3(e))return"";try{for(let t of d3(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 Kt(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||B3()}function MS(e={}){return Ut({provider:"opensea",defaultUrl:f3,hosts:["api.opensea.io","testnets-api.opensea.io"],url:e.baseUrl||process.env.OPENSEA_API_URL})}function Gr(e={}){return MS(e).baseUrl}function qr(e={}){return Bt({accept:"application/json"},{"x-api-key":Kt(e)},MS(e).trusted)}function US(e){let t=String(e||"ethereum").trim().toLowerCase();if(!C3.has(t))throw new Error(`opensea: unsupported account chain ${t}`);return t}function ne(e,t="address"){try{return g3(String(e||"").trim().toLowerCase())}catch{throw new Error(`opensea: invalid ${t}`)}}function LS(e,t=null){let r=String(e||"").trim();if(!r)throw new Error("opensea: account address required");if(t&&!FS.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 Q3(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 y3(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 xS(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 w3(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 TS(e={}){if(!Kt(e))return{ok:!1,configured:!1,error:"OPENSEA_API_KEY not set"};try{let t=await Hs("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 Hs(e,t={}){if(!e)throw new Error("collection slug required");if(!Kt(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 _S(e,t={}){let r=await Hs(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 Gs(e={},t={}){if(!Kt(t))throw new Error("OPENSEA_API_KEY required");let r=US(e.chain),n=LS(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(w3(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 Jc(e={},t={}){if(!Kt(t))throw new Error("OPENSEA_API_KEY required");let r=LS(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 PS=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=PS[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 b3(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 Wc(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 OS(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 k3(e,t){return OS(e.expiration_time??e.expirationTime??e.protocol_data?.parameters?.endTime,t)}function S3(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 x3(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(PS[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:S3(e),priceWei:A.toString(),currency:String(e.price?.current?.currency||"").trim()||null,decimals:Number(e.price?.current?.decimals??18),expiry:k3(e,r),counter:Ze(e.protocol_data?.parameters?.counter,"listing counter").toString()}}async function $c(e={},t={}){if(!Kt(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=>x3(c,r,A)),next:s?.next?String(s.next):null,exec:!1,readOnly:!0}}function Cp(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 HS(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"&&HS(r))}function GS(e){return!e||typeof e!="object"?!1:Object.keys(e).some(t=>/^(?:signed.*|rawtransaction|serializedtransaction|txsigned|r|s|v)$/i.test(t))}function qS(e){return!e||typeof e!="object"?!1:GS(e)?!0:Object.values(e).some(t=>t&&typeof t=="object"&&qS(t))}function YS(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"&&YS(o,t,r);return t}function DS(e){return e&&typeof e=="object"&&typeof e.value=="string"?e.value:e}function VS(e,{buyer:t,chainId:r,targets:n}){if(!e||typeof e!="object")throw new Error("opensea: transaction object required");if(GS(e))throw new Error("opensea: signed transaction material refused");if((e.from?ne(DS(e.from),"transaction buyer"):t)!==t)throw new Error("opensea: OpenSea returned a transaction for the wrong buyer");let i=ne(DS(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=E3.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=b3(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 qs(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(),lc)),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(),lc)),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 Bp(e,t){if(HS(e))throw new Error("opensea: approval steps are not permitted in NFT buy, sweep, or mint preparation");if(qS(e))throw new Error("opensea: signed transaction material refused");let r=YS(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=>VS(n,t))}function Qp(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 WS(e={},t={}){if(!Kt(t))throw new Error("OPENSEA_API_KEY required");Cp(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=Wc(e.quantity),A=Ze(e.maxPriceWei,"maxPriceWei",{positive:!0}),c=await $c({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=Bp(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 qs(h,n,{...t,provider:e.provider||t.provider});return Qp({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 $S(e={},t={}){if(!Kt(t))throw new Error("OPENSEA_API_KEY required");Cp(e);let{chain:r,chainId:n}=Ko(e.chain),o=ne(e.buyer||e.address,"buyer"),i=ne(e.contract,"NFT contract"),s=Wc(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 $c({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=Bp(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 I=f.map(x=>x.tokenId),E=f.reduce((x,F)=>x+BigInt(F.priceWei),0n);if(E>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!==E)throw new Error("opensea: sweep total does not match exact selected listing total");let R=await qs(B,n,{...t,provider:e.provider||t.provider}),D=f.map(x=>x.expiry).sort()[0];return Qp({action:"sweep",chain:r,chainId:n,slug:h.slug,buyer:o,contract:i,tokenIds:I,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 D3(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 zS(e={},t={}){if(!Kt(t))throw new Error("OPENSEA_API_KEY required");Cp(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=Wc(e.quantity),a=Ze(e.priceWei,"priceWei"),A=Ze(e.maxTotalWei,"maxTotalWei"),c=Number.isFinite(Number(t.nowMs))?Number(t.nowMs):Date.now(),l=OS(e.expiry,c,"mint expiry"),u=String(e.slug||"").trim();if(!u)throw new Error("opensea: collection slug required");let d=await Hs(u,t),h=D3(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"))),I=Bp(p,{buyer:o,chainId:n,targets:B});if(I.length!==1)throw new Error("opensea: mint must contain exactly one SeaDrop transaction");let E;try{E=SS.decodeFunctionData("mintPublic",I[0].data)}catch{throw new Error("opensea: mint transaction must call SeaDrop mintPublic")}let Q=ne(E[0],"mint NFT contract"),R=ne(E[1],"mint fee recipient"),D=ne(E[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(E[3])!==BigInt(s))throw new Error("opensea: mint calldata quantity mismatch");if(SS.encodeFunctionData("mintPublic",[h,R,o,s]).toLowerCase()!==I[0].data.toLowerCase())throw new Error("opensea: mint calldata must be canonical with no suffix");let F=I.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 qs(I,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=kS({chainId:n,tx:I[0],policy:X});return Qp({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:I[0].to,feeRecipient:R,expiry:l,transactions:I.map(jo),gasWar:z,...K},"nft-mint")}function v3(e={}){let t=US(e.chain);if(FS.has(t))throw new Error("opensea: listing actions currently require an EVM NFT chain");let r=e.startTime||e.start_time?xS(e.startTime||e.start_time,"startTime"):{text:new Date().toISOString(),ms:Date.now()},n=xS(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:y3(e.quantity??1,"quantity"),price:{amount:Q3(e.price?.amount??e.amount??e.priceAmount,"price amount"),currency:ne(e.price?.currency??e.currency??Ip,"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"}]},vS=new Vc(["function setApprovalForAll(address operator,bool approved)"]),R3=new Vc(["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 RS(e,t){return e?.[t]||(e?.action===t?e:null)}function N3(e,{seller:t,item:r,chainId:n}){let o=Array.isArray(e?.steps)?e.steps:[],i=o.map(I=>RS(I,"createListingsAction")).find(Boolean)||o.find(I=>/createListings/i.test(String(I?.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 I of l.consideration){if(Number(I.itemType)!==0||ne(I.token,"listing payment token")!==Ip)throw new Error("opensea: executable listings currently require native fixed-price consideration");let E=BigInt(I.startAmount),Q=BigInt(I.endAmount);if(E<=0n||E!==Q)throw new Error("opensea: listing consideration must be fixed and positive");ne(I.recipient,"listing consideration recipient"),d+=E}let h=p3(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=NS.hashStruct("OrderComponents",$o,l),f=o.map(I=>RS(I,"itemApprovalAction")).find(Boolean)||o.find(I=>/setApprovalForAll/i.test(String(I?.action||""))),B=null;if(f){let I=f.transaction||f.itemApprovalAction?.transaction,E=VS(I,{buyer:t,chainId:n,targets:new Set([r.contract])}),Q;try{Q=vS.decodeFunctionData("setApprovalForAll",E.data)}catch{throw new Error("opensea: listing approval must be setApprovalForAll")}let R=ne(Q[0],"listing approval operator");if(Q[1]!==!0||E.valueWei!==0n)throw new Error("opensea: listing approval must grant one exact operator with zero value");if(vS.encodeFunctionData("setApprovalForAll",[R,!0]).toLowerCase()!==E.data.toLowerCase())throw new Error("opensea: listing approval calldata must be canonical");B={...E,operator:R}}return{protocolAddress:c,typedData:{domain:A,types:$o,primaryType:"OrderComponents",message:l},orderHash:m,priceWei:d,approval:B}}async function zc(e={},t={}){if(!Kt(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(v3);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=N3(A,{seller:r,item:o[0],chainId:c}),u=l.approval?[l.approval]:[],d=u.length?await qs(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 KS(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=Wc(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")!==Ip)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 I=NS.hashStruct("OrderComponents",$o,h),E=String(e.orderHash||"").trim().toLowerCase();if(!/^0x[0-9a-f]{64}$/.test(E)||E!==I.toLowerCase())throw new Error("opensea: cancellation order hash mismatch");let Q=R3.encodeFunctionData("cancel",[[h]]),R=[{from:o,to:d,data:Q,value:"0x0",valueWei:0n,chainId:n}],D=await qs(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:I,typedData:{domain:u,types:$o,primaryType:"OrderComponents",message:h},transactions:R.map(jo),...D,requiresUserSignature:!0},{provider:"opensea-nft",kind:"nft-cancel"})}De();var jS=999;async function ZS(e={}){let t={chainId:jS,rpc:null,dex:null};try{t.rpc=await Po(jS,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 XS(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 ex(e,t={}){return bn(e,t)}M();var U3="https://api-mainnet.magiceden.dev/v2",Ys=1e9;function tx(e={}){return Ut({provider:"magiceden",defaultUrl:U3,hosts:["api-mainnet.magiceden.dev","api-devnet.magiceden.dev"],url:e.baseUrl||process.env.MAGICEDEN_API_URL})}function Xo(e={}){return tx(e).baseUrl}function Dn(e={}){return e.apiKey||process.env.MAGICEDEN_API_KEY||""}function ei(e={}){let t=Dn(e);return Bt({accept:"application/json"},{Authorization:t?`Bearer ${t}`:""},tx(e).trusted)}function yp(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 L3(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 T3(e){return Math.round(Zo(e,"priceSol")*Ys)}function _3(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 P3({tokenMint:e,priceSol:t,expiry:r}){return`list ${e} on magiceden-sol for ${t} SOL until ${r}`}function O3(e,t){if(e.userConfirmed!==!0)throw new Error("magiceden: listing requires userConfirmed=true after reviewing tokenMint, priceSol, and expiry");let r=P3(t);if(String(e.confirmation||e.confirmationPhrase||"").trim()!==r)throw new Error(`magiceden: confirmation must equal ${JSON.stringify(r)}`);return r}async function rx(e={}){try{let t=await wp({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 wp(e={},t={}){let r=yp(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/Ys:null,listedCount:n?.listedCount??null,volume24hrSol:n?.volume24hr!=null?Number(n.volume24hr)/Ys:null,avgPrice24hrSol:n?.avgPrice24hr!=null?Number(n.avgPrice24hr)/Ys:null,exec:!1,raw:n}}function nx(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*Ys):null,tokenSize:e.tokenSize??1}}async function ox(e={},t={}){let r=yp(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(nx);return{provider:"magiceden-sol",chain:"solana-mainnet-beta",symbol:r,count:a.length,listings:a,exec:!1}}async function ix(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(nx);return{provider:"magiceden-sol",chain:"solana-mainnet-beta",tokenMint:r,listings:o,exec:!1}}async function sx(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:T3(a),transaction:d,transactionEncoding:"base64",raw:l})}async function Kc(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=_3(e.expiry),A=O3(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 ax(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=yp(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=L3(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,bp=10n**BigInt(ti),G3="0xa4b1",Ax=7,kp=1,q3=2n**64n-1n;function Y3(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 Js(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 Vs(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)*bp+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>q3)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/bp,n=(t%bp).toString().padStart(ti,"0").replace(/0+$/,"");return n?`${r}.${n}`:String(r)}async function cx(e={}){try{let t=await Sp(e);return{ok:t.count>0,provider:"hl-staking",chain:Js(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 Sp(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 xp(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 Dp(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 lx(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 ux(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 vp(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 jc(e={}){return String(e.signatureChainId||process.env.HL_SIGNATURE_CHAIN_ID||G3)}function V3(e={}){return{name:"HyperliquidSignTransaction",version:"1",chainId:Number(BigInt(jc(e))),verifyingContract:"0x0000000000000000000000000000000000000000"}}function Rp({kind:e,action:t,types:r,primaryType:n,message:o,opts:i,notes:s,caps:a}){return L({provider:"hl-staking",venue:"hypercore",chain:Js(i),kind:e,prepareReady:!0,executionReady:!1,signingReady:!1,broadcastReady:!1,requiresUserSignature:!0,signWith:"user wallet (EIP-712 typed data)",submitTo:Y3(i),submitShape:{action:t,nonce:t.nonce,signature:"<user 65-byte signature>"},action:t,typedData:{domain:V3(i),types:r,primaryType:n,message:o},caps:a||null,notes:s,exec:!1},{provider:"hl-staking",kind:e})}function dx(e={},t={}){let r=Vs(e.amountHype??e.amount,"amountHype"),n=e.maxHype==null?null:Vs(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=vp(e),i=Js(t),s={type:"cDeposit",hyperliquidChain:i,signatureChainId:jc(t),wei:ri(r),nonce:o};return Rp({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 hx(e={},t={}){let r=Vs(e.amountHype??e.amount,"amountHype"),n=vp(e),o=Js(t),i={type:"cWithdraw",hyperliquidChain:o,signatureChainId:jc(t),wei:ri(r),nonce:n};return Rp({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 ${Ax} 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 gx(e={},t={}){let r=ni(e.validator,"validator"),n=Vs(e.amountHype??e.amount,"amountHype"),o=!!(e.isUndelegate??e.undelegate??!1),i=e.maxHype==null?null:Vs(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=vp(e),a=Js(t),A={type:"tokenDelegate",hyperliquidChain:a,signatureChainId:jc(t),validator:r,wei:ri(n),isUndelegate:o,nonce:s};return Rp({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 ${kp} 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 ${kp} day.`,"Check the validator's commission and jail status before delegating.","Oracle prepared this. Your wallet signs it. Nothing was submitted."]})}async function px(e={},t={}){let r=ni(e.user||e.address,"user"),n=await xp({user:r},t),o=await Dp({user:r},t);return{provider:"hl-staking",user:r,stakingBalanceUndelegated:n.undelegatedWei,stakingBalanceDelegated:n.delegatedWei,pendingWithdrawals:n.nPendingWithdrawals,delegations:o.delegations,unstakingQueueDays:Ax,validatorLockupDays:kp,exec:!1}}async function Np(e={}){let t=Date.now();try{let r=await hr(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 W3=24*365,$3=8;function Oe(e){if(e==null)return null;let t=Number(e);return Number.isFinite(t)?t:null}function z3(e,t){return e==null||t==null||t===0?null:(e-t)/t*100}async function Zc(e={},t={}){let[r,n]=await Promise.all([qo(t),hr(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:z3(u,d),dayNtlVolumeUsd:Oe(l.dayNtlVlm),premium:Oe(l.premium),fundingRate:g,fundingRateAprPct:g==null?null:g*(W3/$3)*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 fx(e={},t={}){let r=Math.max(1,Math.min(Number(e.limit)||10,50)),{markets:n,asOfMs:o,totals:i}=await Zc(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 mx(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([Zc({},t),yc({coin:r,interval:n,startTime:s,endTime:i},t).catch(()=>[]),Bc(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 Ex(e={},t={}){let r=await bc(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 Qx=1e8,j3=1e5,Ws={at:0,dexs:null},Ix=new Map;async function Cx(e={}){let t=Date.now();if(Ws.dexs&&t-Ws.at<6e4&&!e.fetchImpl)return Ws.dexs;let r=await ge({type:"perpDexs"},e);return Ws={at:t,dexs:Array.isArray(r)?r:[]},Ws.dexs}async function Bx(e="",t={}){let r=e||"",n=Date.now(),o=Ix.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 Ix.set(r,A),A}function Z3(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:Qx+r}}function Xc(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:Qx+o}}async function Fp(e={},t={}){if(e.outcome!=null||e.coin&&String(e.coin).startsWith("#")){let c=e.outcome!=null?Xc(e.outcome,e.side??e.outcomeSide??0):Z3(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 Cx(t)).findIndex(E=>E&&E.name===c);if(h<1)throw new Error(`hl-assets: unknown builder dex "${c}"`);let{universe:g,ctxs:p}=await Bx(c,t),m=g.findIndex(E=>E.name===r||E.name===`${c}:${u}`||E.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=j3+h*1e4+m,I=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:I.markPx??null}}let{universe:n,ctxs:o}=await Bx("",t),i=r.toUpperCase(),s=n.findIndex(c=>c.name===i);if(s<0){if(t.allowBareBuilderLeaf===!0)try{let c=await Cx(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 Fp({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 yx(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 X3=5,e8=6,kx="0x66eee";var wx=10,Mp="ORACLE_HL_BUILDER_ADDRESS",bx="ORACLE_HL_BUILDER_FEE_BPS",el=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"}),rl=Object.freeze({GTC:"Gtc",IOC:"Ioc",ALO:"Alo"}),tl=Object.freeze({CROSS:"cross",ISOLATED:"isolated"});function t8(e="perp"){if(e==="perp"||e==="main")return el.perp;if(e==="spot")return el.spot;if(e==="hip3")return el.hip3;if(e==="outcome"||e==="hip4")return el.hip4;throw new Error(`hl-perps: unknown builder fee kind ${e}`)}function Sx({env:e=process.env,isHolder:t=!1,kind:r="perp"}={}){if(t)return null;let n=String(e?.[Mp]||"").trim().toLowerCase();if(!n)return null;if(!/^0x[a-f0-9]{40}$/.test(n))throw new Error(`hl-perps: ${Mp} must be an EVM address`);let o=np(e);if(!o||o!==n)return null;let i=e?.[bx],s=t8(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: ${bx} must be a positive number in 0.1 bps increments`);if(a>wx)throw new Error(`hl-perps: builder fee ${a} bps exceeds the ${wx} 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 r8(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 n8(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||_c;return BigInt(await o(n))>0n?{exempt:!0,status:"holder"}:{exempt:!1,status:"non-holder"}}catch{return{exempt:!1,status:"unavailable"}}}function Lp(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 o8(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 Lp(n,s,r)}function Yr(e,t,r={}){let n=e8-Number(t??0);if(n<0)throw new Error("hl-perps: szDecimals out of range");return Lp(o8(e,X3,r),n,r)}function i8(e,t){let r=Lp(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 Fp(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 Up(e,{tif:t=rl.GTC,triggerPx:r,isMarket:n,szDecimals:o}={}){switch(e){case ut.LIMIT:return{limit:{tif:t}};case ut.MARKET:return{limit:{tif:rl.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:kx,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 xx(e={},t={}){let r=Sx({env:t.env});if(!r)throw new Error(`hl-perps: ${Mp} 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:kx,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 $s(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=i8(e.size??e.sz,r.szDecimals),a;if(n===ut.MARKET){let B=Number(r.markPx);if(!Number.isFinite(B)){let R=await hr(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 I=Number(e.maxSlippageBps??50);if(!Number.isInteger(I)||I<0)throw new Error("hl-perps: maxSlippageBps must be a non-negative integer");if(I>100)throw new Error(`hl-perps: maxSlippageBps ${I} exceeds the hard 100 bps cap`);let E=o?B*(1+I/1e4):B*(1-I/1e4);a=Yr(E,r.szDecimals,{roundDown:o});let Q=Math.abs(Number(a)/B-1)*1e4;if(Q>I+1e-9)throw new Error(`hl-perps: tick rounding makes the limit ${Q.toFixed(2)} bps from mark, above the ${I} 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=Up(n,{tif:e.tif??(n===ut.MARKET?rl.IOC:rl.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=Sx({env:t.env,kind:r.kind}),d=await n8(u,e,t),h=d.exempt?null:u,g=await r8(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 nl(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 Dx(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||tl.CROSS).toLowerCase();if(o!==tl.CROSS&&o!==tl.ISOLATED)throw new Error('hl-perps: marginMode must be "cross" or "isolated"');let i={type:"updateLeverage",asset:r.assetId,isCross:o===tl.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 vx(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=yx(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 Rx(e={},t={}){let r=await $s(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:Up(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:Up(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 Nx(e={}){let t=await Rs(e);return{provider:"hl-outcome",kind:"outcome-meta",outcomes:t?.outcomes||[],questions:t?.questions||[]}}async function Fx(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=Xc(n,o).coin}let i=await $s({...e,coin:r},t);return L({...i,kind:"hip4-order",provider:"hl-perps"},{provider:"hl-perps",kind:"hip4-order"})}async function Mx(e={},t={}){let r=e.coin;if(!r&&e.outcome!=null){let n=e.side??0;r=Xc(e.outcome,n).coin}return nl({...e,coin:r},t)}import{createHmac as TZ,randomInt as A8}from"node:crypto";import{keccak256 as PZ,concat as OZ,zeroPadValue as HZ,getCreate2Address as GZ,AbiCoder as qZ}from"ethers";var Px=137;var c8="0xE111180000d2663C0091e4f400237545B87B996B",l8="0xe2222d279d744050d28e00520010520000310F59",Ux="0x0000000000000000000000000000000000000000000000000000000000000000",Tp=6;var u8={name:"Polymarket CTF Exchange",version:"2",chainId:Px},d8={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"}]},Lx={"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 ol(e){let t=String(e);return t.includes(".")?t.split(".")[1].replace(/0+$/,"").length:0}function il(e,t){let r=10**t;return Math.floor(e*r+1e-12)/r}function Tx(e,t){let r=10**t;return Math.ceil(e*r-1e-12)/r}function h8(e,t){let r=10**t;return Math.round(e*r+Number.EPSILON)/r}function g8(e,t,r,n){let o=h8(Number(r),n.price);if(e==="BUY"){let A=il(Number(t),n.size),c=A*o;return ol(c)>n.amount&&(c=Tx(c,n.amount+4),ol(c)>n.amount&&(c=il(c,n.amount))),{rawMakerAmt:c,rawTakerAmt:A}}let s=il(Number(t),n.size),a=s*o;return ol(a)>n.amount&&(a=Tx(a,n.amount+4),ol(a)>n.amount&&(a=il(a,n.amount))),{rawMakerAmt:s,rawTakerAmt:a}}function _x(e){let t=Number(e).toFixed(Tp),[r,n=""]=t.split(".");return(r+n.padEnd(Tp,"0").slice(0,Tp)).replace(/^0+/,"")||"0"}function p8(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=Ux,builder:d=Ux}=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=Lx[String(A)]||Lx["0.01"],{rawMakerAmt:m,rawTakerAmt:f}=g8(r,g,h,p),B=_x(m),I=_x(f),E=String(A8(1,2**31-1)),Q=Date.now().toString(),R=r==="BUY"?0:1,D=a?l8:c8,x={salt:E,maker:i,signer:s,tokenId:String(t),makerAmount:B,takerAmount:I,side:R,signatureType:Number(l),timestamp:Q,metadata:u,builder:d};return{domain:{...u8,verifyingContract:D},types:d8,value:x,orderType:c,side:r,notionalUsdc:r==="BUY"?m:f,exchange:D}}function Ox(e={}){let t=p8(e);return L({provider:"poly-clob",kind:"poly-order",chainId:Px,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 T8,keccak256 as Xx}from"ethers";import{wordlists as m8}from"ethers";var E8=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),I8=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],C8=new Set([12,15,18,21,24]);function B8(e){let t=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return C8.has(t.length)&&t.every(r=>m8.en.getWordIndex(r)>=0)}var Q8=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,y8=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,w8=new Set(["calldata","data","publickey","pubkey","message","payload","input","extradata"]);function b8(e){let t=Hx(e);return w8.has(t)||y8.test(t)}var zs=class extends Error{constructor(t){super(`action receipt refused: secret-bearing field at ${t}`),this.name="ActionReceiptSecretError",this.code="ACTION_RECEIPT_SECRET"}};function Hx(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function k8(e){let t=Hx(e);return[...E8].some(r=>t.includes(r))}function S8(e,t,r){if(typeof t=="string"){if(I8.some(n=>n.test(t))||B8(t))throw new zs(r);if(Q8.test(t)&&!b8(e))throw new zs(r)}}function _p(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return S8(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)=>_p(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(k8(o))throw new zs(i);e[o]!==void 0&&(n[o]=_p(e[o],i,o))}return n}function Gx(e){return _p(e)}import{spawnSync as Hp}from"node:child_process";import{existsSync as Rn,readFileSync as al,readdirSync as zx,statSync as Kx}from"node:fs";import{join as jt}from"node:path";import{createHash as M8}from"node:crypto";import{existsSync as Yx,readFileSync as x8}from"node:fs";import{dirname as qx,join as Pp}from"node:path";import{fileURLToPath as D8}from"node:url";function v8(e){let t=qx(D8(e));for(let r=0;r<8;r+=1){let n=Pp(t,"package.json");if(Yx(n))try{let i=JSON.parse(x8(n,"utf8"));if(i&&typeof i.version=="string")return t}catch{}let o=qx(t);if(o===t)break;t=o}throw new Error(`oracle: could not resolve package root from ${e}`)}function Vx(e,t){let r=v8(t),n=Pp(r,e);return Yx(n)?n:Pp(r,"dist","assets",e)}import{isAddress as R8}from"ethers";var Jx="5.0.2",N8={"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 F8(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 Op=Object.freeze(Object.fromEntries(Object.entries(N8).map(([e,t])=>[e,F8(e,t)])));function sl(e){let t=Op[String(e||"")];if(!t)throw new Error(`protocol-templates: unknown template "${e}"`);return t}function Ks(e,t){try{if(BigInt(e)<=0n)throw new Error}catch{throw new Error(`${t} must be > 0`)}}function js(e,t){let r=String(e||"");if(!R8(r)||/^0x0{40}$/i.test(r))throw new Error(`${t} must be nonzero address`)}function Wx(e,t){let r=sl(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");Ks(i,"safe-erc20: supply"),js(s,"safe-erc20: initialHolder"),js(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(Ks(i,"safe-erc721-drop: cap"),js(s,"safe-erc721-drop: treasury"),Ks(a,"safe-erc721-drop: mintPrice"),Ks(A,"safe-erc721-drop: perWalletCap"),BigInt(A)>BigInt(i))throw new Error("safe-erc721-drop: perWalletCap exceeds cap");js(c,"safe-erc721-drop: initialOwner")}else if(e==="safe-vesting"){let[n,o,i]=t;js(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`)}Ks(i,"safe-vesting: durationSeconds")}return r}function $x(e){return{authorities:[...e.authority],proxy:!1,upgradeable:!1,arbitraryDelegatecall:!1}}var Zs=Vx("protocols/templates",import.meta.url),Al="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 cl(){return Rn(Zs)?zx(Zs).filter(e=>Op[e]&&Kx(jt(Zs,e)).isDirectory()).map(e=>{let t=jt(Zs,e),r=jt(t,"SECURITY.md");return{id:e,path:t,metadata:sl(e),securityNotice:Rn(r)?al(r,"utf8").slice(0,500):null,disclaimer:Al}}):[]}function jx(){if(process.env.FORGE_BIN)return process.env.FORGE_BIN;let e=process.env.HOME||"",t=["forge",jt(e,".foundry/bin/forge")];for(let r of t)if(Hp(r,["--version"],{encoding:"utf8"}).status===0)return r;return null}function U8(){return process.env.SLITHER_BIN?process.env.SLITHER_BIN:Hp("slither",["--version"],{encoding:"utf8"}).status===0?"slither":null}function si(e,t,r){let n=Hp(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 L8(e){let t=M8("sha256");function r(n){let o=Kx(n);if(o.isDirectory()){if(["lib","out","cache",".git"].includes(n.split("/").pop()))return;for(let i of zx(n).sort())r(jt(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(al(n)))}return r(e),t.digest("hex")}function Gp(e,t={}){let r=sl(e),n=t.allowSkipStatic!==!1,o=jt(Zs,e);if(!Rn(o))throw new Error(`protocol-templates: unknown template "${e}"`);let i=jx();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(jt(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(jt(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=jt(o,"lib","openzeppelin-contracts","package.json"),a=Rn(s)?JSON.parse(al(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=U8();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=L8(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:Al,firmAudit:!1}}function Zx(e,t={}){let r=Gp(e,t),n=jx(),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=jt(o,"out",`${s}.sol`,`${s}.json`);if(!Rn(a))throw new Error(`protocol-templates: artifact missing at ${a}`);let A=JSON.parse(al(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 _8=new Set(["status","chainId","forkBlockNumber","gasUsed","transactionHash","contractAddress","revertReason"]);function P8(e,t){if(typeof e!="object"||e===null||Array.isArray(e))throw new Error("prepareTemplateDeploy: localForkSimulationReceipt must be an object");let r=Gx(e);for(let o of Object.keys(r))if(!_8.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 eD(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=Wx(r,o),s=Zx(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 T8(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}:{...P8(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:Xx(a),authorityReport:$x(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:Xx(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:Al},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 qp}from"node:crypto";import{secp256k1 as Xs}from"@noble/curves/secp256k1.js";import{bech32m as tD}from"@scure/base";var Vp="Reviewed scaffold and source checks only; NOT a paid security audit. Testnet simulation and independent review are required before mainnet use.",rD="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",ul=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 sD(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 Yp(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 H8(e){let t=String(e||"");if(!t||[...t].some(o=>!rD.includes(o)))return null;let r=0n;for(let o of t)r=r*58n+BigInt(rD.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 nD(e,t){let r=String(e||"").trim(),n=H8(r);return(!n||n.length!==32)&&Qt(t,"must be a 32-byte base58 Solana public key"),r}function oD(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{Xs.Point.fromHex(r)}catch{Qt(t,"must encode a valid secp256k1 curve point")}return r}function G8(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=qp("sha256").update(e).digest();return qp("sha256").update(r).update(r).update(t).digest()}function iD(e){return Jp("TapLeaf",Buffer.concat([Buffer.from([192]),G8(e.length),e]))}function q8(e,t){let[r,n]=Buffer.compare(e,t)<=0?[e,t]:[t,e];return Jp("TapBranch",Buffer.concat([r,n]))}function ll(e){return Xs.Point.fromHex(e).x.toString(16).padStart(64,"0")}function aD(e){return Buffer.concat([Buffer.from([32]),Buffer.from(e,"hex")])}function Y8(e,t){let r=[];return e.forEach((n,o)=>r.push(aD(ll(n)),Buffer.from([o===0?172:186]))),r.push(Buffer.from([80+t,156])),Buffer.concat(r)}function V8(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 J8(e,t){return Buffer.concat([V8(t),Buffer.from([178,117]),aD(ll(e)),Buffer.from([172])])}function W8(e,t,r){let n=Xs.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")}`)%Xs.Point.Fn.ORDER,a=o.add(Xs.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:tD.encode(c,[1,...tD.toWords(A)],90),scriptPubKey:`5120${A.toString("hex")}`,outputKey:A.toString("hex"),internalKey:i.toString("hex")}}function Lt(e,t){return Object.freeze({path:e,content:t.endsWith(`
14
58
  `)?t:`${t}
15
- `})}function Zw(e){let t=qa("sha256");for(let n of[...e].sort((r,o)=>r.path.localeCompare(o.path)))t.update(n.path).update("\0").update(n.content).update("\0");return t.digest("hex")}function ev(e){let t=_d(e.projectName),n=Ed(e.authority,"solana-safe-vault authority"),r=Ha(e.unlockDelaySlots,"solana-safe-vault unlockDelaySlots",{min:1n}),o=String(e.network||"devnet");["localnet","devnet","testnet","mainnet-beta"].includes(o)||ue("solana-safe-vault network","must be localnet, devnet, testnet, or mainnet-beta");let a=Ed(e.programId,"solana-safe-vault programId");a==="11111111111111111111111111111111"&&ue("solana-safe-vault programId","must not be the System Program placeholder");let i=`use anchor_lang::prelude::*;
59
+ `})}function $8(e){let t=qp("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 z8(e){let t=sD(e.projectName),r=nD(e.authority,"solana-safe-vault authority"),n=Yp(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=nD(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!("${a}");
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!("${n}"))]
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
- `,s=[fe("Anchor.toml",`[provider]
147
+ `,a=[Lt("Anchor.toml",`[provider]
104
148
  cluster = "${o}"
105
149
  wallet = "~/.config/solana/id.json"
106
150
 
107
151
  [programs.${o}]
108
- ${t} = "${a}"
109
- `),fe("Cargo.toml",`[workspace]
152
+ ${t} = "${i}"
153
+ `),Lt("Cargo.toml",`[workspace]
110
154
  members = ["programs/${t}"]
111
155
  resolver = "2"
112
- `),fe(`programs/${t}/Cargo.toml`,`[package]
156
+ `),Lt(`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
- `),fe(`programs/${t}/src/lib.rs`,i),fe(`tests/${t}.ts`,`// Generated lifecycle test plan. Run with Anchor on ${o}.
129
- // 1. initialize with ${r} slots; 2. deposit; 3. reject early withdrawal;
172
+ `),Lt(`programs/${t}/src/lib.rs`,s),Lt(`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
- `),fe("SECURITY.md",`# Security model
175
+ `),Lt("SECURITY.md",`# Security model
132
176
 
133
- - Initial and permanent withdrawal authority: \`${n}\`
134
- - Unlock delay: ${r} slots after the most recent deposit
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:Lr["solana-safe-vault"].protocolModel,authorityReport:{initialAuthority:n,mutable:!1,unlockDelaySlots:r.toString()},programIdentity:{publicKey:a,callerSupplied:!0,secretKeyAccepted:!1},files:s,gate:{sourceChecks:{ok:i.includes("address = vault.authority")&&i.includes("checked_add")&&i.includes('seeds = [b"vault"')&&!i.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:Va},deploymentPrepared:!1}}function tv(e){let t=_d(e.projectName),n=String(e.network||"testnet");["regtest","signet","testnet","mainnet"].includes(n)||ue("bitcoin-tapscript-vault network","must be regtest, signet, testnet, or mainnet");let r=Array.isArray(e.signerPubkeys)?e.signerPubkeys.map((v,k)=>Id(v,`signerPubkeys[${k}]`)):[];(r.length<2||r.length>15||new Set(r).size!==r.length)&&ue("bitcoin-tapscript-vault signerPubkeys","must contain 2-15 unique compressed public keys");let o=Number(Ha(e.threshold,"bitcoin-tapscript-vault threshold",{min:1n,max:BigInt(r.length)})),a=Id(e.recoveryPubkey,"bitcoin-tapscript-vault recoveryPubkey");r.includes(a)&&ue("bitcoin-tapscript-vault recoveryPubkey","must be distinct from signer keys");let i=Ha(e.recoveryDelayBlocks,"bitcoin-tapscript-vault recoveryDelayBlocks",{min:1n,max:65535n}),s=`multi_a(${o},${r.map(Or).join(",")})`,c=`and_v(v:older(${i}),pk(${Or(a)}))`,l=`taproot_tree(${s},${c})`,u=Yw(r,o),d=Xw(a,Number(i)),p=Kw(Ad(u),Ad(d)),m=Qw(r[0],p,n),f=`tr(${m.internalKey},{${s},${c}})`,h={version:1,name:t,network:n,descriptorType:"tr",threshold:o,signerPubkeys:r,recoveryPubkey:a,recoveryDelayBlocks:Number(i),miniscript:l,cooperativeMiniscript:s,recoveryMiniscript:c,descriptor:f,address:m.address,scriptPubKey:m.scriptPubKey},g=[fe("policy/miniscript.txt",l),fe("policy/descriptor.txt",f),fe("policy/manifest.json",JSON.stringify(h,null,2)),fe("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(i)-1),expected:"rejected"},matureRecovery:{recoverySignature:!0,csvBlocks:Number(i),expected:"spendable"}},null,2)),fe("SECURITY.md",`# Security model
181
+ `)];return{family:"solana",network:o,projectName:t,protocolModel:ul["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:Vp},deploymentPrepared:!1}}function K8(e){let t=sD(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)=>oD(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(Yp(e.threshold,"bitcoin-tapscript-vault threshold",{min:1n,max:BigInt(n.length)})),i=oD(e.recoveryPubkey,"bitcoin-tapscript-vault recoveryPubkey");n.includes(i)&&Qt("bitcoin-tapscript-vault recoveryPubkey","must be distinct from signer keys");let s=Yp(e.recoveryDelayBlocks,"bitcoin-tapscript-vault recoveryDelayBlocks",{min:1n,max:65535n}),a=`multi_a(${o},${n.map(ll).join(",")})`,A=`and_v(v:older(${s}),pk(${ll(i)}))`,c=`taproot_tree(${a},${A})`,l=Y8(n,o),u=J8(i,Number(s)),d=q8(iD(l),iD(u)),h=W8(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=[Lt("policy/miniscript.txt",c),Lt("policy/descriptor.txt",g),Lt("policy/manifest.json",JSON.stringify(p,null,2)),Lt("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)),Lt("SECURITY.md",`# Security model
138
182
 
139
- - Cooperative path: ${o}-of-${r.length}
140
- - Recovery path: ${a} after ${i} blocks (BIP68 relative locktime)
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("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&apos;")}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(r)>32*1024)throw new Error("portfolio history snapshot exceeds 32 KiB");await Dx(Nt.dirname(n),{recursive:!0,mode:448});let o=Gr.O_APPEND|Gr.O_CREAT|Gr.O_WRONLY|(Gr.O_NOFOLLOW||0),a=await Fx(n,o,384);try{await a.writeFile(r,"utf8")}finally{await a.close()}return await Ux(n,384),n}async function im(e={},t={}){let n=e.includeNfts!==!1,r=t.portfolioBalanceImpl||zr,o=t.nftInventoryImpl||Tt,a=r(e,t),i=n?o({...e,includePnl:!1},t).catch(S=>({status:"unavailable",error:String(S?.message||S).slice(0,300)})):Promise.resolve({status:"not-requested"}),[s,c]=await Promise.all([a,i]),l=jx(s),u=Gx(c),d=[l,u].filter(S=>S!=null),p=d.length?Rt(d.reduce((S,N)=>S+N,0)):null,m=!!(s?.valuation?.complete&&(!n||c?.valuation?.complete===!0)),f=typeof t.now=="function"?t.now():new Date,h=new Date(f).toISOString(),g=s?.addresses||Ye(e,t.env||process.env),v=om(g),k=[...s?.warnings||[]];n&&c?.status==="unavailable"&&k.push(`NFT inventory unavailable: ${c.error}`),n&&c?.valuation&&c.valuation.complete!==!0&&k.push("NFT estimated value is incomplete and is not an executable bid.");let y={schemaVersion:1,id:`snapshot_${Vx()}`,portfolioId:v,recordedAt:h,sourceQueriedAt:{balances:s?.queriedAt||null,nfts:c?.generatedAt||null},configuredFamilies:Object.fromEntries(["evm","solana","bitcoin","hyperliquid"].map(S=>[S,!!g?.[S]])),valuation:{knownUsd:p,liquidKnownUsd:l,nftEstimatedValueUsd:u,complete:m,label:m?"complete known portfolio value":"known priced value, including provider-estimated NFTs when available, not a complete portfolio total",liquidPricedItems:Number(s?.valuation?.pricedItems||0),liquidUnpricedNonzeroItems:Number(s?.valuation?.unpricedNonzeroItems||0),nftValuedItems:Number(c?.valuation?.valuedItems||0),nftUnvaluedItems:Number(c?.valuation?.unvaluedItems||0)},breakdown:{liquid:Kx(s),nfts:{knownUsd:u,visibleItems:Number(c?.inventory?.visibleCount||0),flaggedItems:Number(c?.inventory?.flaggedCount||0)}},coverage:Yx(s,c,n),warnings:[...new Set(k)].slice(0,50)};return{provider:"portfolio",operation:"snapshot",readOnly:!0,localObservationRecorded:!0,historyFile:await Jx(y,t),snapshot:y,balance:s,nfts:c}}async function Xx(e){let t=am(e);try{let n=await qx(t);if(n.byteLength>Zp)throw new Error(`portfolio history exceeds ${Zp} bytes`);let r=[],o=0;for(let a of n.toString("utf8").split(`
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("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&apos;")}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:ul["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:Vp},psbtPrepared:!1,fundingPrepared:!1}}function Wp(){return Object.values(ul).map(e=>({...e,disclaimer:Vp}))}async function AD(e={}){let t=String(e.templateId||"").trim(),r=ul[t];r||Qt("protocol-templates",`unknown native template "${t}"`);let n=t==="solana-safe-vault"?z8(e):K8(e),o=$8(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 j8="https://api.geckoterminal.com/api/v2",dl=(e={})=>(e.baseUrl||process.env.GECKOTERMINAL_API_URL||j8).replace(/\/$/,""),ai=e=>encodeURIComponent(String(e));async function $p(e={},t={}){let r=Math.max(1,Number(e.page||1));return C(`${dl(t)}/networks?page=${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function cD(e={},t={}){if(!e.network||!e.poolAddress)throw new Error("network and poolAddress required");return C(`${dl(t)}/networks/${ai(e.network)}/pools/${ai(e.poolAddress)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function lD(e={},t={}){if(!e.network||!(e.address||e.tokenAddress))throw new Error("network and token address required");return C(`${dl(t)}/networks/${ai(e.network)}/tokens/${ai(e.address||e.tokenAddress)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function uD(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(`${dl(t)}/networks/${ai(e.network)}/pools/${ai(e.poolAddress)}/ohlcv/${r}?${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function dD(e={}){let t=await $p({page:1},e);return{ok:Array.isArray(t?.data)&&t.data.length>0,networkSample:t?.data?.length||0}}M();De();import{Interface as fD,getAddress as mD,isAddress as X8}from"ethers";var e9="https://api.curve.finance/v1",ED=(e={})=>(e.baseUrl||process.env.CURVE_API_URL||e9).replace(/\/$/,""),t9=Object.freeze({1:"0x45312ea0eFf7E09C83CBE249fa1d7598c4C8cd4e",10:"0x0DCDED3545D565bA3B19E683431381007245d983",56:"0xA72C85C258A81761433B4e8da60505Fe3Dd551CC",137:"0x0DCDED3545D565bA3B19E683431381007245d983",988:"0xFF5Cb29241F002fFeD2eAa224e3e996D24A6E8d1",999:"0xd2002373543Ce3527023C75e7518C274A51ce712",4663:"0xFF5Cb29241F002fFeD2eAa224e3e996D24A6E8d1",8453:"0x4f37A9d177470499A2dD084621020b023fcffc1F",42161:"0x2191718CD32d02B8E60BAdFFeA33E4B5DD9A0A0D",43114:"0x0DCDED3545D565bA3B19E683431381007245d983"}),ID="0x0000000000000000000000000000000000000000",zp=new fD(["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)"]),hD=new fD(["function coins(uint256) view returns (address)"]);function CD(e){let t=t9[Number(e)];if(!t)throw new Error(`curve-router-ng: unsupported chainId ${e}`);return t}function ea(e,t){if(!X8(e))throw new Error(`${t} must be a valid EVM address`);return mD(e)}function r9(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 gD(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 BD(e,t,r){return[e,t,r,...Array(8).fill(ID)]}function QD(e,t,r,n){return[[BigInt(e),BigInt(t),1n,BigInt(r),BigInt(n)],...Array.from({length:4},()=>[0n,0n,0n,0n,0n])]}function yD(e){return[e,...Array(4).fill(ID)]}async function n9({chainId:e,pool:t,nCoins:r,rpcCall:n,opts:o}){let i=[];for(let s=0;s<r;s++){let a=hD.encodeFunctionData("coins",[s]),A=await n(e,"eth_call",[{to:t,data:a},o.blockTag||"latest"],o),c=hD.decodeFunctionResult("coins",A);i.push(mD(c[0]))}return i}function pD(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 wD(e={}){return C(`${ED(e)}/openapi.json`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs})}async function Kp(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(`${ED(t)}/getPools/${r}/${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function bD(e={}){let t=await Kp({chain:"ethereum",registry:"main"},e),r=t?.data?.poolData?.length||0;return{ok:t?.success===!0&&r>0,poolSample:r}}async function jp(e={},t={}){let r=Number(e.chainId??8453),n=CD(r),o=ea(e.pool,"curve pool"),i=ea(e.tokenIn,"curve tokenIn"),s=ea(e.tokenOut,"curve tokenOut"),a=r9(e.amountIn,"curve amountIn"),A=gD(e.nCoins??2,"curve nCoins",2,8),c=gD(e.poolType,"curve poolType",1,4),l=t.rpcCall||V,u=await n9({chainId:r,pool:o,nCoins:A,rpcCall:l,opts:t}),d=pD(u,i,"tokenIn"),h=pD(u,s,"tokenOut");if(d===h)throw new Error("Curve token indexes must differ");let g=BD(i,o,s),p=QD(d,h,c,A),m=yD(o),f=zp.encodeFunctionData("get_dy",[g,p,a,m]),B=await l(r,"eth_call",[{to:n,data:f},e.blockTag||"latest"],t),I=zp.decodeFunctionResult("get_dy",B),E=BigInt(I[0]);if(E<=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:E.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:E.toString(),liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps})}async function kD(e={},t={}){let r=Number(e.chainId??8453),n=CD(r),o=ea(e.sender||e.from||e.fromAddress||e.receiver,"curve sender"),i=ea(e.receiver||e.recipient||o,"curve receiver"),s=await jp({...e,sender:o},t),a=BD(s.tokenIn,s.pool,s.tokenOut),A=QD(s.i,s.j,s.poolType,s.nCoins),c=yD(s.pool),l=zp.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:we(s.autoSlippage,{chainId:r,venue:n,data:l})}},{provider:"curve",kind:"curve-tx"})}M();De();import{Interface as Zp,getAddress as FD,isAddress as i9}from"ethers";var SD=Object.freeze({42161:"https://arbitrum-api.gmxinfra.io",43114:"https://avalanche-api.gmxinfra.io"}),xD=Object.freeze({42161:{name:"arbitrum",api:SD[42161],exchangeRouter:"0x1C3fa76e6E1088bCE750f23a5BFcffa1efEF6A41",router:"0x7452c558d45f8afC8c83dAe62C3f8A5BE19c71f6",orderVault:"0x31eF83a530Fde1B38EE9A18093A333D8Bbbc40D5",dataStore:"0xFD70de6b91282D8017aA4E741e9Ae325CAb992d8",reader:"0x470fbC46bcC0f16532691Df360A07d8Bf5ee0789",eventEmitter:"0xC8ee91A54287DB53897056e12D9819156D3822Fb",wnt:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",usdc:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831"},43114:{name:"avalanche",api:SD[43114],exchangeRouter:"0x8f550E53DFe96C055D5Bdb267c21F268fCAF63B2",router:"0x820F5FfC5b525cD4d88Cd91aCf2c28F16530Cc68",orderVault:"0xD3D60D22d415aD43b7e64b510D86A30f19B1B12C",dataStore:"0x2F0b22339414ADeD7D5F06f9D604c7fF5b2fe3f6",reader:"0x62Cb8740E6986B29dC671B2EB596676f60590A5B",eventEmitter:"0xDb17B211c34240B014ab6d61d4A31FA0C0e20c26",wnt:"0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7",usdc:"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"}}),DD="0x0000000000000000000000000000000000000000",s9=`0x${"0".repeat(64)}`,vD=Object.freeze({marketSwap:0,limitSwap:1,marketIncrease:2,limitIncrease:3,marketDecrease:4,limitDecrease:5,stopLossDecrease:6,stopIncrease:8}),RD=Object.freeze({noSwap:0,swapPnlTokenToCollateralToken:1,swapCollateralTokenToPnlToken:2}),hl=new Zp(["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"]),MD=new Zp(["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)"]),a9=new Zp(["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)"]),A9=Object.freeze({OrderCreated:"created",OrderUpdated:"updated",OrderExecuted:"executed",OrderCancelled:"cancelled",OrderFrozen:"frozen"});function ci(e){let t=Number(e??42161),r=xD[t];if(!r)throw new Error(`gmx: unsupported chainId ${e} (supported: ${Object.keys(xD).join(", ")})`);return{chainId:t,...r}}function gl(e,t={}){let r=ci(e);return(t.baseUrl||r.api).replace(/\/$/,"")}function yt(e,t){if(!i9(e))throw new Error(`${t} must be a valid EVM address`);return FD(e)}function se(e){return FD(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 c9(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 l9(e){let t=String(e||"marketIncrease").trim();if(!(t in vD))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:vD[t]}}function u9(e){let t=String(e||"noSwap").trim();if(!(t in RD))throw new Error(`gmx unsupported decreasePositionSwapType ${t}`);return{key:t,code:RD[t]}}function d9(e,t){return Array.isArray(e)?e:Array.isArray(e?.[t])?e[t]:[]}function h9(e,t){let r=se(t);return e.find(n=>se(n.marketToken||n.market||n.address)===r)||null}function g9(e,t){let r=se(t);return e.find(n=>se(n.tokenAddress||n.address)===r)||null}function p9({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 f9(e,t){let r=t?e.availableLiquidityLong:e.availableLiquidityShort;try{return BigInt(String(r??"0"))}catch{return 0n}}function m9(e){let t=String(e||"").toLowerCase();return/^0x[0-9a-f]{64}$/.test(t)?`0x${t.slice(-40)}`:null}function Zt(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 E9(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:Zt(t,"account",s=>se(s)),market:Zt(t,"market",s=>se(s)),initialCollateralToken:Zt(t,"initialCollateralToken",s=>se(s)),key:Zt(o,"key",s=>String(s).toLowerCase()),reason:Zt(i,"reason",s=>String(s)),sizeDeltaUsd:Zt(r,"sizeDeltaUsd",s=>BigInt(s).toString()),initialCollateralDeltaAmount:Zt(r,"initialCollateralDeltaAmount",s=>BigInt(s).toString()),executionFee:Zt(r,"executionFee",s=>BigInt(s).toString()),acceptablePrice:Zt(r,"acceptablePrice",s=>BigInt(s).toString()),isLong:Zt(n,"isLong",s=>!!s)}}function I9(e={},t){if(se(e.address)!==se(t.eventEmitter))return null;let r;try{r=a9.parseLog({topics:e.topics,data:e.data})}catch{return null}let n=String(r?.args?.eventName||""),o=A9[n];if(!o)return null;let i=E9(r.args.eventData||{}),s=(i.key||String(r.args.topic1||"")).toLowerCase(),a=i.account||m9(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 ND(e){return{executed:5,cancelled:4,frozen:3,created:2,updated:1}[e]||0}function C9(e=[],{chainId:t}={}){let r=ci(t);return(Array.isArray(e)?e:[]).map(n=>I9(n,r)).filter(Boolean).sort((n,o)=>(n.logIndex??0)-(o.logIndex??0))}async function UD(e={},t={}){return C(`${gl(e.chainId??42161,t)}/markets`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function Xp(e={},t={}){return C(`${gl(e.chainId??42161,t)}/markets/info`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function LD(e={},t={}){return C(`${gl(e.chainId??42161,t)}/tokens`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function pl(e={},t={}){return C(`${gl(e.chainId??42161,t)}/prices/tickers`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function TD(e={}){let t=await pl({chainId:42161},e);return{ok:Array.isArray(t)&&t.length>0,tickerSample:Array.isArray(t)?t.length:0}}async function _D(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=MD.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 PD(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=MD.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 OD(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=C9(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)=>ND(u.status)>=ND(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 HD(e={},t={}){let r=ci(e.chainId??42161),n=l9(e.orderType||e.type),o=u9(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"):DD,c=e.uiFeeReceiver?yt(e.uiFeeReceiver,"gmx uiFeeReceiver"):DD,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=c9(e.maxSlippageBps??e.slippageBps,50),B=e.isLong==null?!0:!!e.isLong,[I,E]=await Promise.all([Xp({chainId:r.chainId},t),pl({chainId:r.chainId},t)]),Q=h9(d9(I,"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=f9(Q,B);if(K>0n&&h>K)throw new Error("gmx sizeDeltaUsd exceeds available market liquidity");let X=g9(E,R);if(!X)throw new Error("gmx index ticker not found");let z=e.acceptablePrice?Ai(e.acceptablePrice,"gmx acceptablePrice").toString():p9({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"),Tt=Nn(e.minOutputAmount??"0","gmx minOutputAmount"),Er=Nn(e.validFromTime??"0","gmx validFromTime"),Ir=!!e.shouldUnwrapNativeToken,Ii=e.autoCancel==null?!0:!!e.autoCancel,Ci=String(e.referralCode||s9);if(!/^0x[0-9a-fA-F]{64}$/.test(Ci))throw new Error("gmx referralCode must be bytes32 hex");let Pn=Array.isArray(e.dataList)?e.dataList:[];for(let Ee of Pn)if(!/^0x[0-9a-fA-F]{64}$/.test(String(Ee)))throw new Error("gmx dataList entries must be bytes32 hex");let _l={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:Tt,validFromTime:Er},orderType:n.code,decreasePositionSwapType:o.code,isLong:B,shouldUnwrapNativeToken:Ir,autoCancel:Ii,referralCode:Ci,dataList:Pn},N=[];n.key==="marketIncrease"&&d>0n&&N.push(hl.encodeFunctionData("sendTokens",[u,r.orderVault,d])),N.push(hl.encodeFunctionData("sendWnt",[r.orderVault,g])),N.push(hl.encodeFunctionData("createOrder",[_l]));let _=hl.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:_,value:g.toString(),gmxGuard:ee}},{provider:"gmx",kind:"gmx-order"})}M();De();import{Interface as Q9,getAddress as y9,isAddress as w9,keccak256 as GD,toUtf8Bytes as qD}from"ethers";var b9="https://api.morpho.org/graphql",fl=new Q9(["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)"]),k9=(e={})=>e.baseUrl||process.env.MORPHO_API_URL||b9;async function tf(e,t,r={}){return C(k9(r),{method:"POST",body:{query:e,variables:t},fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??2e4})}var S9="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 } } } }",x9="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 ta(e,t){let r=String(e||"").trim();if(!w9(r))throw new Error(`morpho: ${t} must be an address`);return y9(r).toLowerCase()}function D9(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 ef(e){return Array.isArray(e)?`[${e.map(ef).join(",")}]`:e&&typeof e=="object"?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${ef(e[t])}`).join(",")}}`:JSON.stringify(e)}async function ra(e,t,r,n,o={}){let i=fl.encodeFunctionData(r,n),a=await(o.rpcCall||V)(Number(e),"eth_call",[{to:t,data:i},"latest"],o);return fl.decodeFunctionResult(r,a)}function v9(e,t){let r=t.toLowerCase();return(e||[]).find(n=>String(n?.address||"").toLowerCase()===r)||null}async function YD(e={},t={}){let r=Math.min(100,Math.max(1,Number(e.first||20))),n=(e.chainIds||[e.chainId||1]).map(Number);return tf(S9,{first:r,chainIds:n,where:{chainId_in:n}},t)}async function rf(e={},t={}){let r=Math.min(100,Math.max(1,Number(e.first||20))),n=(e.chainIds||[e.chainId||1]).map(Number);return tf(x9,{first:r,chainIds:n,where:{chainId_in:n}},t)}async function VD(e={}){return{ok:(await tf("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=ta(e.vault||e.vaultAddress,"vault"),i=ta(e.owner||e.from||e.sender,"owner"),s=ta(e.receiver||i,"receiver"),a=D9(e.amount||e.assets,"amount"),A=Number(e.minTotalAssetsUsd??1e5),c=await rf({chainId:r,first:100},t),l=v9(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 ra(r,o,"asset",[],t),h=ta(d,"vault asset");if((l?.asset?.address?ta(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 ra(r,o,"maxDeposit",[i],t);if(BigInt(a)>BigInt(B.toString()))throw new Error("morpho: amount exceeds maxDeposit");let[I]=await ra(r,o,"previewDeposit",[a],t);if(BigInt(I.toString())<=0n)throw new Error("morpho: previewDeposit returned zero shares");m={minSharesOut:I.toString()},p=fl.encodeFunctionData("deposit",[a,s])}else{let[B]=await ra(r,o,"maxWithdraw",[i],t);if(BigInt(a)>BigInt(B.toString()))throw new Error("morpho: amount exceeds maxWithdraw");let[I]=await ra(r,o,"previewWithdraw",[a],t);if(BigInt(I.toString())<=0n)throw new Error("morpho: previewWithdraw returned zero shares");m={maxSharesIn:I.toString()},p=fl.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:GD(qD(p)),issuedAtMs:Date.now(),expiresAtMs:Date.now()+2e4};return f.guardHash=GD(qD(ef(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 N9,getAddress as nf,isAddress as F9}from"ethers";var M9="https://api-v3.balancer.fi/",U9=(e={})=>e.baseUrl||process.env.BALANCER_API_URL||M9;async function zD(e,t,r={}){return C(U9(r),{method:"POST",body:{query:e,variables:t},fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??2e4})}var L9="query Pools($first: Int, $where: GqlPoolFilter) { poolGetPools(first: $first, where: $where) { id address chain type protocolVersion dynamicData { totalLiquidity volume24h fees24h } } }",WD=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"}}),T9="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",_9="0x0000000000000000000000000000000000000000",of=new N9(["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 KD(e){let t=Number(e??8453),r=WD[t];if(!r)throw new Error(`balancer-v3: unsupported chainId ${e} (supported: ${Object.keys(WD).join(", ")})`);return{chainId:t,...r}}function jD(e){let t=String(e||"").toLowerCase();return!t||t==="eth"||t==="native"||t===_9||t===T9.toLowerCase()}function ml(e,t){if(!F9(e))throw new Error(`${t} must be a valid EVM address`);return nf(e)}function $D(e,t,r){let n=String(e||"");return jD(n)||/^weth$/i.test(n)?nf(t.weth):/^usdc$/i.test(n)?nf(t.usdc):ml(n,r)}function P9(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 ZD(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 XD(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 zD(L9,{first:r,chains:n,where:{chainIn:n}},t)}async function ev(e={}){return{ok:(await zD("query { __typename }",{},e))?.data?.__typename==="Query"}}async function sf(e={},t={}){let r=KD(e.chainId),n=ml(e.pool,"balancer pool"),o=e.tokenIn||"WETH",i=$D(o,r,"balancer tokenIn"),s=$D(e.tokenOut||"USDC",r,"balancer tokenOut"),a=P9(e.amountIn,"balancer amountIn"),A=ml(e.sender||e.from||e.fromAddress||e.recipient,"balancer sender"),c=of.encodeFunctionData("querySwapSingleTokenExactIn",[n,i,s,a,A,ZD(e.userData)]),u=await(t.rpcCall||V)(r.chainId,"eth_call",[{to:r.router,data:c},e.blockTag||"latest"],t),d=of.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 tv(e={},t={}){let r=KD(e.chainId),n=ml(e.sender||e.from||e.fromAddress||e.recipient,"balancer sender"),o=e.tokenIn||"WETH",i=jD(o),s=await sf({...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=of.encodeFunctionData("swapSingleTokenExactIn",[s.pool,s.tokenIn,s.tokenOut,BigInt(s.amountIn),BigInt(s.amountOutMinimum),c,l,ZD(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:we(s.autoSlippage,{chainId:r.chainId,venue:r.router,data:u})}},{provider:"balancer",kind:"balancer-tx"})}M();import{getAddress as H9}from"ethers";var G9="https://api-v2.pendle.finance/core",q9=Object.freeze({42161:"0x888888888889758F76e7103c6CbF23ABbF58F946",8453:"0x888888888889758F76e7103c6CbF23ABbF58F946"}),Y9="0x0000000000000000000000000000000000000000",V9="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",rv=(e={})=>(e.baseUrl||process.env.PENDLE_API_URL||G9).replace(/\/$/,"");function El(e,t){try{return H9(e)}catch{throw new Error(`${t} must be a valid EVM address`)}}function li(e,t){return El(e,t).toLowerCase()}function J9(e){let t=String(e||"").toLowerCase();return t==="native"||t==="eth"||t===V9||t===Y9}function af(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 W9(e){if(!Array.isArray(e)||e.length===0)throw new Error("pendle convert requires inputs[]");return e.map((t,r)=>({token:El(t.token,`pendle input ${r} token`),amount:af(t.amount,`pendle input ${r} amount`)}))}function $9(e){if(!Array.isArray(e)||e.length===0)throw new Error("pendle convert requires outputs[]");return e.map((t,r)=>El(t,`pendle output ${r} token`))}function z9(e){let t=q9[Number(e)];if(!t)throw new Error(`Pendle prepare not enabled for chainId ${e}`);return t}function K9(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 af(t,"pendle output amount")}function j9(e,t){let r=(Array.isArray(e)?e:[]).filter(n=>n?.token&&n?.amount&&!J9(n.token)).map(n=>({token:li(n.token,"pendle approval token"),spender:li(t,"pendle approval spender"),amount:af(n.amount,"pendle approval amount")}));return r.length?r.length===1?r[0]:r:null}async function Af(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(`${rv(t)}/v1/${r}/markets?${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function nv(e={}){let t=await Af({chainId:42161,limit:1},e);return{ok:Array.isArray(t?.results),marketSample:t?.results?.length||0}}async function cf(e={},t={}){let r=Number(e.chainId??42161),n=z9(r),o=e.from||e.fromAddress||e.userAddress||e.taker||e.receiver;if(!o)throw new Error("pendlePrepare requires from/receiver");let i=El(e.receiver||o,"pendle receiver"),s=W9(e.inputs),a=$9(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(`${rv(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=K9(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:j9(l.requiredApprovals,d.to),transaction:{chainId:r,from:d.from||o,to:d.to,data:d.data,value:d.value??"0x0",slippageGuard:we(g.autoSlippage,{chainId:r,venue:d.to,data:d.data})}},{provider:"pendle",kind:"pendle-swap"})}async function ov(e={},t={}){let r=await cf(e,t),{transaction:n,...o}=r;return o}M();import{isAddress as X9}from"ethers";var e4="https://api.odos.xyz",lf=(e={})=>(e.baseUrl||process.env.ODOS_API_URL||e4).replace(/\/$/,"");async function uf(e={}){return C(`${lf(e)}/info/chains`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs})}function t4(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(!X9(String(e.userAddr||"")))throw new Error("odos: valid userAddr required");return t}async function iv(e={},t={}){let r=t4(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(`${lf(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 sv(e={},t={}){let{chainId:r,quote:n,amountOut:o}=await iv(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 av(e={},t={}){let{chainId:r,quote:n,amountOut:o}=await iv(e,t),i=await C(`${lf(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:we(a.autoSlippage,{chainId:r,venue:s.to,data:s.data})}},{provider:"odos",kind:"odos-tx"})}async function Av(e={}){let t=await uf(e);return{ok:Array.isArray(t?.chains)&&t.chains.length>0,chainCount:t?.chains?.length||0}}M();var cv=/[\u200B-\u200F\u202A-\u202E\u2060-\u2064\uFEFF]/g,n4=/[<>&`*_~[\]()|\\]/g,o4=/[\u0000-\u001F\u007F]/g;function df(e,{max:t=32,fallback:r=""}={}){return e==null?r:String(e).normalize("NFKC").replace(cv,"").replace(o4,"").replace(n4,"").replace(/\s+/g," ").trim().slice(0,t).trim()||r}function hf(e){if(e==null)return!1;let t=String(e);return cv.test(t)?!0:/[\u0400-\u04FF\u0370-\u03FF]/.test(t)&&/[A-Za-z]/.test(t)}var lv=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 Il(e,t={}){let r=Number(e),n=t.baseUrl||lv[r];if(!n)throw new Error(`Blockscout not configured for chainId ${r}`);return n.replace(/\/$/,"")}function uv(e){return!!lv[Number(e)]}async function gf(e={},t={}){return C(`${Il(e.chainId||1,t)}/api/v2/stats`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function dv(e={},t={}){if(!e.address)throw new Error("address required");return C(`${Il(e.chainId||1,t)}/api/v2/addresses/${encodeURIComponent(e.address)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function hv(e={},t={}){if(!e.address&&!e.tokenAddress)throw new Error("token address required");return C(`${Il(e.chainId||1,t)}/api/v2/tokens/${encodeURIComponent(e.address||e.tokenAddress)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function gv(e={},t={}){if(!e.address)throw new Error("address required");let r=Number(e.chainId||1),n=`${Il(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 pv(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=df(o.symbol||o.name,{max:32,fallback:"TOKEN"}),l=df(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:hf(o.symbol)||hf(o.name)||void 0})}return r}async function fv(e={}){let t=await gf({chainId:8453},e);return{ok:t?.total_blocks!=null||t?.total_transactions!=null,chainId:8453}}import{getAddress as s4}from"ethers";M();De();var a4="TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",Ev=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 Cl(e,...t){for(let r of t){let n=String(e?.[r]||"").trim();if(n)return n}return null}function mv(e){if(!e)return null;try{return s4(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=mv(r.evm||e.evmAddress||Cl(t,"ORACLE_EVM_ADDRESS","ORACLE_DEFAULT_ADDRESS","MAD_OPERATOR_ADDRESS")),o=r.solana||e.solanaAddress||Cl(t,"ORACLE_SOLANA_ADDRESS"),i=r.bitcoin||e.bitcoinAddress||Cl(t,"ORACLE_BITCOIN_ADDRESS"),s=mv(r.hyperliquid||e.hyperliquidAddress||Cl(t,"ORACLE_HYPERLIQUID_ADDRESS")||n);return{evm:n,solana:o?me(o,"portfolio Solana address"):null,bitcoin:i?gr(i,"portfolio Bitcoin address"):null,hyperliquid:s}}function na(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 Bl(e){return Number.isFinite(e)?Number(e.toFixed(2)):null}function Jr(e){let t=Number(e);return Number.isFinite(t)&&t!==0}function Iv(e,t){let r=Ev[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 A4(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:na(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 pf(e,t){return{family:e,status:"unsupported",reason:t}}function ff(e,t){if(!e||e.status!=="ok")return e;let r=Iv(t,e.symbol),n=ui(e.amount),o=n!=null&&r.priceUsd!=null?Bl(n*r.priceUsd):null;return{...e,price:r,usdValue:o}}async function Cv(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 Ql(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(Ev))],l=o?Fe(()=>Sn(c,Vr(t,"prices"))):Promise.resolve({ok:!1,ms:0,error:"price lookup disabled"}),u=_o(A,e.concurrency||5,async N=>{let _=a.get(N);if(!_)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:_.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:_.name,address:n.evm,status:"unavailable",latencyMs:Ee.ms,error:Ee.error};let Te=_.nativeCurrency?.decimals??18,Xe=_.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&&uv(N)){let Kr=await Fe(()=>gv({chainId:N,address:n.evm},{...Vr(t,"blockscout"),timeoutMs:t.timeoutMs??18e3}));Kr.ok?ke={status:"ok",assets:pv(Kr.data,{fungibleOnly:!0}).map(Bi=>{let Qi=na(Bi.amountRaw,Bi.decimals);return{...Bi,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:_.name,address:n.evm,status:"ok",latencyMs:Ee.ms,native:{status:"ok",symbol:Xe,amountRaw:J,decimals:Te,amount:na(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"),_=await Fe(()=>Sc({address:n.solana},N)),ee=i||s?await Promise.all([Fe(()=>Ms({owner:n.solana,programId:qg},N)).then(ke=>({...ke,program:"spl-token"})),Fe(()=>Ms({owner:n.solana,programId:a4},N)).then(ke=>({...ke,program:"token-2022"}))]):[],Ee=A4(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:_.ok||ee.some(ke=>ke.ok)?"ok":"unavailable",native:_.ok?{status:"ok",symbol:"SOL",amountRaw:_.data.lamports,decimals:9,amount:na(_.data.lamports,9),slot:_.data.slot}:{status:"unavailable",symbol:"SOL",error:_.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"),_=Vr(t,"bitcoinMeta"),[ee,Ee,Te]=await Promise.all([Fe(()=>Dc({address:n.bitcoin},N)),i?Fe(()=>Rc({address:n.bitcoin},_)):Promise.resolve({ok:!1,ms:0,error:"token discovery disabled"}),s?Fe(()=>Jo({address:n.bitcoin},_)):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:na(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"),[_,ee,Ee]=await Promise.all([Fe(()=>Qc(n.hyperliquid,N)),Fe(()=>wc(n.hyperliquid,N)),Fe(()=>hr(N))]),Te=(_.ok&&Array.isArray(_.data?.balances)?_.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:_.ok||ee.ok?"ok":"unavailable",spot:{status:_.ok?"ok":"unavailable",balances:Te,error:_.ok?null:_.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,I]=await Promise.all([u,d,h,g,l]),E=I.ok?I.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 _=Q[N.chainId];if(_)for(let ee of N.fungibleTokens.assets||[])ee.address&&R.push(`${_}:${String(ee.address).toLowerCase()}`)}let D=null;if(o&&R.length){let N=[...new Set(R)],_=await Fe(()=>Sn(N,Vr(t,"prices")));_.ok&&(D=_.data)}let x=p.map(N=>{let _=N.native?{...N,native:ff(N.native,E)}:N;if(_.fungibleTokens?.status==="ok"&&Array.isArray(_.fungibleTokens.assets)){let ee=Q[_.chainId],Ee=_.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 hm=`${ee}:${String(Te.address).toLowerCase()}`,Bi=D.coins[hm],Qi=Number(Bi?.price);Number.isFinite(Qi)&&Qi>0&&(J=Qi)}let ke=ui(Te.amount),Kr=ke!=null&&J!=null?Bl(ke*J):null;return{...Te,priceUsd:J,usdValue:Kr}});_={..._,fungibleTokens:{..._.fungibleTokens,assets:Ee}}}return _});m.native&&(m.native=ff(m.native,E)),f.native&&(f.native=ff(f.native,E));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 _ of N.fungibleTokens?.assets||[])!Jr(_.amount)&&!Jr(_.amountRaw)||(_.usdValue!=null?(F+=_.usdValue,K+=1):X+=1)}let z=Iv(E,"HYPE");for(let N of B.spot?.balances||[]){let _=String(N.coin||"").toUpperCase(),ee=_==="USDC"||_==="USDT"||_==="USDT0"?1:_==="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?Bl(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 Tt=[...x,m,f,B],Er=N=>Tt.filter(_=>_.status===N).length,Ir=[],Ii=x.filter(N=>N.fungibleTokens?.status==="unavailable"),Ci=x.filter(N=>N.fungibleTokens?.status==="ok");Ii.length&&!Ci.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 ${Ci.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."),I.ok||Ir.push(`Price provider unavailable: ${I.error}`);let Pn=[pf("cosmos","requires a chain-specific bech32 address and LCD/RPC adapter"),pf("sui","Sui balance adapter is not installed"),pf("aptos","Aptos balance adapter is not installed")],_l=Tt.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:Tt.length,ok:Er("ok"),unavailable:Er("unavailable"),notConfigured:Er("not-configured"),unsupported:Er("unsupported")+Pn.length,evmChainsRequested:A.length,evmChainsOk:x.filter(N=>N.status==="ok").length},valuation:{knownUsd:Bl(F),label:"known priced value, not a complete portfolio total",pricedItems:K,unpricedNonzeroItems:X,complete:X===0&&!_l&&Er("unavailable")===0&&Er("not-configured")===0&&Pn.length===0,priceSource:o?"DefiLlama":null,priceStatus:I.ok?"ok":"unavailable",priceQueriedAt:r},chains:[...x,m,f,B],unsupportedFamilies:Pn,warnings:Ir}}import{constants as wl}from"node:fs";import{chmod as F4,mkdir as M4,open as U4,readFile as L4}from"node:fs/promises";import{createHash as T4,randomUUID as _4}from"node:crypto";import P4 from"node:os";import hi from"node:path";M();M();var l4=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"]),u4=new Set(["image/jpeg","image/png","image/webp"]);function d4(e){let t=String(e||"").toLowerCase();return l4.some(r=>t===r||t.endsWith(`.${r}`))}function h4(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 Bv(e){let t=h4(e),r;try{r=new URL(t)}catch{return null}return r.protocol!=="https:"||r.username||r.password||!d4(r.hostname)?null:r}async function g4(e,t={}){let r=t.fetchImpl||globalThis.fetch;if(typeof r!="function")throw new Error("gallery fetch unavailable");let n=Bv(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=Bv(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(!u4.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 mf(e){return String(e??"").replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&apos;")}function p4(e,t){return e.name||e.collection||e.tokenId||`NFT ${t+1}`}async function Qv(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 I of s){if(A>=c){a.push({item:I,image:null,error:"gallery page byte cap reached"});continue}try{let E=await g4(I.imageUrl||I.originalImageUrl,{...t,maxImageBytes:Math.min(Number(e.maxImageBytes??15e5),c-A)});A+=E.bytes,a.push({item:I,image:E,error:null})}catch(E){a.push({item:I,image:null,error:String(E?.message||E).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:I,image:E,error:Q},R)=>{let D=R%l,x=Math.floor(R/l),F=D*u,K=h+x*d,X=E?`<image x="${F+14}" y="${K+14}" width="312" height="312" preserveAspectRatio="xMidYMid slice" href="data:${E.mimeType};base64,${E.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=mf(p4(I,R).slice(0,34)),be=mf(I.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 ${mf(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(I=>I.image).length,placeholders:a.filter(I=>!I.image).map(I=>({assetKey:I.item.assetKey||null,name:I.item.name||null,sourceUrl:I.item.imageUrl||null,error:I.error})),rasterOnly:!0,externalScripts:!1}}var f4=[/\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],m4=/(https?:\/\/|www\.|[a-z0-9-]+\.(?:com|net|io|xyz|org|app|finance|gift|claims?|site|link|live|vip|top|cc))/i,E4=/(\$\s?\d|\d[\d,.]*\s*(?:usd|usdc|usdt|eth|weth|btc|sol)\b)/i;function I4(e={}){let t=[],r=String(e.name||""),n=String(e.description||""),o=`${r} ${n}`;m4.test(r)&&t.push("url-in-name");let i=f4.filter(c=>c.test(o)).length;i>0&&t.push(`lure-language:${i}`),E4.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 yv(e={}){let t=I4(e);return{...e,spam:e.spam===!0||t.spam,riskLevel:t.risk,riskReasons:t.reasons.length?t.reasons:void 0}}var C4=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"}]),B4=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 oa(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 Q4(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 y4(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 w4(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 kv(e={}){return[e.chain||"unknown",e.contract||"native",e.tokenId||"unknown"].join(":").toLowerCase()}function b4(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 k4(e,t){let r=kv(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 S4(e){let t=new Map;for(let r of e){let n=kv(r);t.has(n)||t.set(n,r)}return[...t.values()]}function x4(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 Sv(){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(E=>String(E).toLowerCase())):null,i=C4.filter(E=>!o||o.has(E.chain)),s=[],a=[],A=Mn(t,"opensea"),c=n.evm?i.filter(E=>E.family!=="solana"):[],l=await _o(c,4,async E=>({row:E,result:await oa(`opensea-${E.chain}`,()=>Gs({chain:E.chain,address:n.evm,pageSize:e.pageSize,maxPages:e.maxPages},A),t.timeoutMs??35e3)}));for(let{row:E,result:Q}of l)if(Q.ok){let R=Q.data.nfts.map(D=>({...D,family:E.family,chainId:E.chainId,listingAdapter:"opensea",source:"opensea-account-inventory"}));a.push(...R),s.push({family:E.family,chain:E.chain,chainId:E.chainId,status:Q.data.complete?"ok":"partial",count:R.length,complete:Q.data.complete,next:Q.data.next,source:"opensea"})}else s.push({family:E.family,chain:E.chain,chainId:E.chainId,status:"unavailable",error:Q.error,source:"opensea"});if(!n.evm)for(let E of i.filter(Q=>Q.family!=="solana"))s.push({family:E.family,chain:E.chain,chainId:E.chainId,status:"not-configured",reason:"EVM address missing"});if(n.solana&&(!o||o.has("solana"))){let E=await oa("opensea-solana",()=>Gs({chain:"solana",address:n.solana,pageSize:e.pageSize,maxPages:e.maxPages},A),t.timeoutMs??35e3);if(E.ok){let Q=E.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:E.data.complete?"ok":"partial",count:Q.length,complete:E.data.complete,next:E.data.next,source:"opensea"})}else s.push({family:"solana",chain:"solana",status:"unavailable",error:E.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 E=await oa("satflow-wallet-contents",()=>Fc({address:n.bitcoin,type:"ordinals",limit:e.bitcoinLimit??100,offset:0},Mn(t,"satflow")),t.timeoutMs??35e3);if(E.ok){let Q=Q4(E.data.contents).map(D=>y4(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 oa("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=>w4(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":E.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 E of[...new Set([n.evm,n.solana].filter(Boolean))]){let Q=await oa(`opensea-pnl-${E}`,()=>Jc({address:E},A),t.timeoutMs??35e3);u.push(Q.ok?{status:"ok",...Q.data}:{status:"unavailable",address:E,source:"opensea-indexed-account-pnl",error:Q.error})}let d=b4(e.costBasis),h=S4(a).map(E=>k4(E,d)).map(E=>yv(E)),g=h.filter(E=>!E.spam),p=h.filter(E=>E.spam),m=g.filter(E=>E.estimatedValueUsd!=null&&Number.isFinite(Number(E.estimatedValueUsd))),f=Math.round(m.reduce((E,Q)=>E+Number(Q.estimatedValueUsd),0)*100)/100,B=g.length-m.length,I=s.filter(E=>E.status!=="ok"||E.complete===!1);return{provider:"nft-portfolio",operation:"inventory",readOnly:!0,generatedAt:r,addresses:n,coverage:s,unsupported:B4,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&&I.length===0,methodology:"Sum of provider estimated_value_usd for non-flagged items. It is not an executable bid."},pnl:x4(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 wv(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 D4(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 xv(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 zc(e,Mn(t,"opensea"));if(r==="magiceden"||r==="magiceden-sol"){let n=wv(e.expiry??e.endTime,"Solana NFT listing expiry");return Kc({...e,expiry:n},Mn(t,"magiceden"))}if(r==="satflow"){let n=wv(e.expiry??e.endTime??e.expiresAt,"Bitcoin NFT listing expiry");return Mc({inscription_id:e.inscriptionId||e.tokenId,runes_output:e.runesOutput,ord_address:e.ordAddress||e.seller,receive_address:e.receiveAddress,price:D4(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 Ef(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 If(e){if(e==null||e==="")return null;let t=Number(e);return Number.isFinite(t)&&t>0?t:null}function yl(e){return String(e??"").trim().toLowerCase()}function v4(e={},t,r){let n=Array.isArray(e.traits)?e.traits:[],o=yl(t),i=yl(r);return!o||!i?!1:n.some(s=>yl(s.trait_type??s.traitType??s.type)===o&&yl(s.value??s.trait_value??s.traitValue)===i)}function R4(e={},t){if(!t)return!0;let r=String(e.contract||e.tokenContract||e.assetContract||"").toLowerCase();return!r||r===String(t).toLowerCase()}function bv(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 Cf(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 Dv(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=Ef(e.maxPriceEth,"maxPriceEth"),a=Number(e.minDiscountBps),A=Number(e.minTraitSales),c=Ef(e.minTraitVolumeEth,"minTraitVolumeEth"),l=Ef(e.traitFloorEth,"traitFloorEth"),u=If(e.collectionFloorEth),d=If(e.maxListingAgeMs),h=If(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=>v4(D,e.traitType,e.traitValue)&&R4(D,e.contract),p=(Array.isArray(e.sales)?e.sales:[]).filter(g).filter(D=>{if(!h)return!0;let x=bv(D,["timestamp","soldAt","createdAt"]);return x!=null&&i-x<=h}),m=Cf(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=bv(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),I={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."},E=e.minTraitListings==null?1:Number(e.minTraitListings);if(!Number.isFinite(E)||E<1)return Wr(e,"invalid-min-trait-listings",I);if(B.length<E)return Wr(e,"trait-listing-depth-insufficient",I);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:Cf(Q.priceEth),maxPriceEth:s,traitType:e.traitType,traitValue:e.traitValue,evidence:I,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:Cf(Q.priceEth),discountBps:Q.discountBps},evidence:I,prepareIntent:R}}async function vv(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 Rv(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 Qv({...e,items:r},Mn(t,"gallery")),inventorySummary:n?{visibleCount:n.inventory.visibleCount,flaggedCount:n.inventory.flaggedCount,coverage:n.coverage}:null}}var Nv=10*1024*1024,Uv=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 Fv(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 Lv(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 O4(e={}){return["evm","solana","bitcoin","hyperliquid"].map(t=>`${t}:${String(e[t]||"").trim().toLowerCase()}`).join("|")}function Tv(e={}){return`portfolio_${T4("sha256").update(O4(e)).digest("hex").slice(0,20)}`}function _v(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(P4.homedir(),".hermes");return hi.join(hi.resolve(r),"state","oracle","portfolio-history.jsonl")}function H4(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 G4(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 q4(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 Y4(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 V4(e,t){let r=_v(t),n=`${JSON.stringify(e)}
188
+ `;if(Buffer.byteLength(n)>32*1024)throw new Error("portfolio history snapshot exceeds 32 KiB");await M4(hi.dirname(r),{recursive:!0,mode:448});let o=wl.O_APPEND|wl.O_CREAT|wl.O_WRONLY|(wl.O_NOFOLLOW||0),i=await U4(r,o,384);try{await i.writeFile(n,"utf8")}finally{await i.close()}return await F4(r,384),r}async function Pv(e={},t={}){let r=e.includeNfts!==!1,n=t.portfolioBalanceImpl||Ql,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=H4(a),l=G4(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=Tv(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 I={schemaVersion:1,id:`snapshot_${_4()}`,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:q4(a),nfts:{knownUsd:l,visibleItems:Number(A?.inventory?.visibleCount||0),flaggedItems:Number(A?.inventory?.flaggedCount||0)}},coverage:Y4(a,A,r),warnings:[...new Set(B)].slice(0,50)};return{provider:"portfolio",operation:"snapshot",readOnly:!0,localObservationRecorded:!0,historyFile:await V4(I,t),snapshot:I,balance:a,nfts:A}}async function J4(e){let t=_v(e);try{let r=await L4(t);if(r.byteLength>Nv)throw new Error(`portfolio history exceeds ${Nv} 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 W4(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)?Tv(r):null}async function Bf(e={},t={}){let r=Lv(e.limit,100,1,Uv,"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=Fv(e.since,"portfolio history since"),i=Fv(e.until,"portfolio history until"),s=W4(e,t),a=await J4(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 Mv(e){return`$${Number(e).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}`}function bl(e){return String(e).replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&apos;")}function $4(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 z4(e,t){let A=e.map(I=>I.value),c=Math.min(...A),l=Math.max(...A);if(c===l){let I=Math.max(1,Math.abs(c)*.05);c-=I,l+=I}else{let I=(l-c)*.1;c=Math.max(0,c-I),l+=I}let u=I=>e.length===1?1240/2:100+1040*I/(e.length-1),d=I=>570-(I-c)/(l-c)*470,h=e.map((I,E)=>`${E?"L":"M"}${u(E).toFixed(2)},${d(I.value).toFixed(2)}`).join(" "),g=Array.from({length:5},(I,E)=>{let Q=E/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">${Mv(D)}</text>`}).join(""),p=e.map((I,E)=>`<circle cx="${u(E)}" cy="${d(I.value)}" r="5" fill="#b8f0ff"><title>${bl(I.recordedAt)}: ${Mv(I.value)}</title></circle>`).join(""),m=bl(e[0].recordedAt.slice(0,10)),f=bl(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 ${bl(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 Ov(e={},t={}){if(e.allPortfolios===!0)throw new Error("portfolio value graph requires one portfolioId or configured public-address portfolio");let r=Lv(e.maxPoints,200,2,500,"portfolio graph maxPoints"),n=await Bf({...e,order:"asc",limit:e.limit??Uv},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=$4(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=z4(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 j4=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"}}),Z4=Object.freeze([{label:"eip1967",slot:"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"},{label:"zeppelinos",slot:"0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3"},{label:"eip1822",slot:"0xc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7"}]),X4=`0x${"0".repeat(64)}`;function eW(e){return!e||e==="0x"||e===X4}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(j4))A.includes(g)&&a.push({selector:`0x${g}`,...p});let c=!1,l=null,u=null;for(let{label:g,slot:p}of Z4)try{let m=await r(o,"eth_getStorageAt",[n,p,"latest"],t);if(!eW(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 Hv(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 rW=/^0x[0-9a-fA-F]{40}$/,Gv=4663;function Qf(e,t){let r=String(e||"").trim();if(!rW.test(r))throw new Error(`evm-token-sniper: ${t} must be a 0x EVM address`);return r}function nW(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 oW(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}Mg();let r=yb(e);if(!r)throw new Error(`evm-token-sniper: unsupported EVM chainId ${e}`);return r}function iW({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 qv(e={},t={}){let r=Number(e.chainId??Gv);if(!Number.isInteger(r)||r<=0)throw new Error("evm-token-sniper: chainId must be a positive integer");let n=Qf(e.tokenAddress||e.address||e.token,"tokenAddress"),o=e.tokenIn?Qf(e.tokenIn,"tokenIn"):null,i=e.recipient?Qf(e.recipient,"recipient"):null,s=e.amountIn==null?null:nW(e.amountIn,"amountIn"),a=oW(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=iW({token:c,pools:l,structuralRisk:u,scannerRisk:d,sellability:h,quote:g,args:p,scanner:a}),f=null;return 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})),{provider:"evm-token-sniper",execution:"prepare-only",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,signed:!1,broadcast:!1}}async function Yv(){Mg();let e=wb();return{ok:e.length>0,provider:"evm-token-sniper",defaultChainId:Gv,chainIds:e.map(t=>t.chainId),execution:"prepare-only",signed:!1,broadcast:!1}}De();De();var aW=5,yf=[50,75,90],Vv=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 AW(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 kl(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=Vv[e.urgency||"fast"];if(!o)return{status:"error",viable:!1,error:`urgency must be one of: ${Object.keys(Vv).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${aW.toString(16)}`,"pending",yf],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=AW(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 I=a!=null?a*f:null;A!=null&&I!=null&&I>A&&B.push({field:"totalGas",wanted:I.toString(),capped:A.toString()});let E=g==null||m>=g,Q=A==null||I==null||I<=A,R=E&&Q;return E||p.push(`tip cap ${m} is below the observed ${yf[o.percentile]}th-percentile tip ${g}; this bid is unlikely to land`),Q||p.push(`worst-case gas ${I} 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:yf[o.percentile],maxFeePerGas:f.toString(),maxPriorityFeePerGas:m.toString(),worstCaseGasWei:I==null?null:I.toString(),clamps:B,notes:p}}De();var lW="08c379a0",uW="4e487b71",dW=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 hW(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===lW)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===uW){let n=parseInt(t.slice(8,72),16);return{kind:"panic",code:n,reason:dW[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 gW(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 pW(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 fW(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 ia(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=fW(o),s=[],a=null,A=!1,c=null;try{a=await r(n,"eth_call",[i,"pending"],t)}catch(g){let p=gW(g);if(!pW(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=hW(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 ia({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 EW=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 IW(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 CW(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 Wv(e,{minter:t,quantity:r}){let n=`0x${e.selector}`;for(let o of e.args)if(o==="to")n+=CW(t);else if(o==="quantity")n+=IW(r);else throw new Error(`unsupported mint argument: ${o}`);return n}async function Sl(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=EW.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 $v(e={}){let t=Date.now();try{let r=await Sl({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 wf(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 Sl({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(f=>f.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(f=>f.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 ia({chainId:n,tx:{from:o,to:r,data:Wv(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 kl({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=Wv(a,{minter:o,quantity:i})}catch(f){return{status:"error",error:f.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=Ep({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=[];return A&&m.push(`contract exposes ${s.found.length} mint entrypoints (${s.found.map(f=>f.signature).join(", ")}); defaulted to ${a.signature} \u2014 pass signature to choose`),c.risk==="high"&&m.push(`contract risk HIGH: ${c.findings.map(f=>f.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"),{status:"ok",execution:"prepare-only",signed:!1,tx:g,mintFunction:a.signature,alternatives:s.found.map(f=>f.signature),quantity:i,gas:d,simulation:l,contractRisk:{risk:c.risk,findings:c.findings,isProxy:c.isProxy},capCheck:p,warnings:m}}De();var QW=1440*60*1e3;function yW(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)");let o=Number(e.expiresAt);return Number.isFinite(o)?o<=t?r.push("grant has expired"):o-t>QW&&r.push("grant TTL exceeds 24h"):r.push("grant.expiresAt is required"),{ok:r.length===0,problems:r,contract:n,chainId:Number(e.chainId)}}function zv(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(!cp(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=yW(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: this trigger will submit a 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,notes:s}}async function Kv(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 bW=1440*60*1e3;function kW(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>bW&&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 jv="0x797a2e030B7e49107C8F07bF0300Ea9caE88cA57",SW=4663,xW="0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",Zv="a22cb465",DW="a0712d68";function bf(e){return String(e||"").trim().toLowerCase()}function pi(e){return String(e||"").toLowerCase().replace(/^0x/,"")}function vW(e){let t=pi(e);if(!/^[a-f0-9]{40}$/.test(t))throw new Error("revoke operator must be an address");return`0x${Zv}${t.padStart(64,"0")}${"0".repeat(64)}`}function RW(e){return pi(e).includes(pi(jv))}function NW(e={}){return(Array.isArray(e.calls)?e.calls:[]).some(r=>pi(r?.data).startsWith(Zv))}function FW(e={},t){let r=pi(t).padStart(64,"0");return(Array.isArray(e.logs)?e.logs:[]).some(o=>{let i=o?.topics||[];return bf(i[0])!==xW?!1:pi(i[2])===r})}function MW(e=1){return`0x${DW}${BigInt(e).toString(16).padStart(64,"0")}`}function Xv(e={},t={}){let r=bf(e.contract),n=bf(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!==SW&&s.push("only Robinhood chain 4663"),i!=="0"&&s.push("value must be 0 \u2014 paid mints are skipped"),RW(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"),NW(a)&&s.push("simulation sets approval / setApprovalForAll"),FW(a,n)||s.push("simulation has no ERC721 Transfer to minter");let A=s.length===0,c={chainId:o,from:n,to:r,data:MW(e.quantity??1),value:"0"},l={chainId:o,from:n,to:r,data:vW(r),value:"0"},u=!1;if(A&&e.actionMode==="execute")if(!cS(t.env||process.env))s.push("DOWNGRADED: ORACLE_AUTONOMOUS_MINT=1 required to fire");else{let d=kW(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:jv.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 LW="https://api.paraswap.io",kf=(e={})=>(e.baseUrl||process.env.PARASWAP_API_URL||LW).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 Sf(e={},t={}){let r=Number(e.chainId||1);return C(`${kf(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 Pc({wallet:e.userAddress||e.fromAddress,env:t.env,action:e.feeAction||"swap",holderCheck:t.holderCheck});for(let[a,A]of Object.entries(Ok(o)))n.set(a,A);let i=await C(`${kf(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 eR(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(`${kf(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:we(o.autoSlippage,{chainId:r,venue:A.to,data:A.data})}},{provider:"paraswap",kind:"paraswap-tx"})}async function tR(e={}){let t=await Sf({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 _W}from"node:crypto";import{getAddress as aR,isAddress as xf}from"ethers";var rR="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",PW=Object.freeze(["lifi","paraswap","0x","cow","uniswap-v3"]),OW=Object.freeze(["lifi"]),nR=/^0x[0-9a-fA-F]{64}$/,HW=/^\d+$/;function Qe(e,t="invalid"){throw new Error(`rfq: ${e} ${t}`)}function oR(e,t){let r=Number(e);return(!Number.isSafeInteger(r)||r<=0)&&Qe(t,"must be a positive chainId"),r}function xl(e,t){let r=String(e??"").trim();return(!HW.test(r)||BigInt(r)<=0n)&&Qe(t,"must be a positive integer string"),r}function GW(e,t){return e==null||e===""?null:xl(e,t)}function iR(e,t){let r=String(e??"").trim();return r.toLowerCase()===rR.toLowerCase()?rR:(xf(r)||Qe(t,"must be an EVM address or native token sentinel"),aR(r))}function AR(e,t){let r=String(e??"").trim();return xf(r)||Qe(t,"must be an EVM address"),aR(r)}function qW(e,t){return e==null||e===""?null:AR(e,t)}function sR(e,t,r){return e===void 0?[...r]:(Array.isArray(e)||Qe(t,"must be an array"),e.map(n=>String(n).trim()).filter(Boolean))}function YW(e,{nowMs:t,maxDeadlineMs:r},n){let o=Number(e);return Number.isFinite(o)||Qe(n,"must be a finite millisecond timestamp"),o<=t&&Qe(n,"expired"),o>t+r&&Qe(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 VW(e){return JSON.stringify(Ei(e))}function Dl(e){return`0x${_W("sha256").update(VW(e)).digest("hex")}`}function cR(e,t){let r={...e};for(let n of t)delete r[n];return r}function JW(e){return Dl(cR(e,["intentHash"]))}function WW(e){return Dl(cR(e,["firmQuoteHash"]))}function Df(e={},t={}){let r=Number(t.nowMs??Date.now()),n=Number(t.maxDeadlineMs??1800*1e3);(!Number.isFinite(r)||!Number.isFinite(n)||n<=0)&&Qe("time","is invalid");let o=oR(e.fromChainId??e.fromChain,"fromChainId"),i=oR(e.toChainId??e.toChain,"toChainId"),a=o===i?PW:OW,A={kind:"rfq-intent",version:1,fromChainId:o,toChainId:i,sellToken:iR(e.sellToken??e.tokenIn??e.fromToken,"sellToken"),buyToken:iR(e.buyToken??e.tokenOut??e.toToken,"buyToken"),sellAmount:xl(e.sellAmount??e.amountIn??e.fromAmount,"sellAmount"),receiver:AR(e.receiver??e.recipient??e.to,"receiver"),deadlineMs:YW(e.deadlineMs??e.deadline??e.expiresAtMs,{nowMs:r,maxDeadlineMs:n},"deadline"),minBuyAmount:GW(e.minBuyAmount??e.minOut??e.amountOutMin,"minBuyAmount"),allowedSources:sR(e.allowedSources,"allowedSources",a),allowedRouters:sR(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)&&Qe("slippageBps","must be 0 to 10000"),A.intentId=e.intentId?String(e.intentId):Dl({seed:"rfq-intent",intent:A}).slice(0,34),A.intentHash=JW(A),Object.freeze(A)}function $W(e){return(!e||typeof e!="object"||Array.isArray(e))&&Qe("artifact","required"),e.typedDataHash!=null&&!nR.test(String(e.typedDataHash))&&Qe("artifact.typedDataHash","must be bytes32"),e.calldataHash!=null&&!nR.test(String(e.calldataHash))&&Qe("artifact.calldataHash","must be bytes32"),e.to!=null&&!xf(String(e.to))&&Qe("artifact.to","must be an address"),e.data!=null&&!/^0x(?:[0-9a-fA-F]{2})*$/.test(String(e.data))&&Qe("artifact.data","must be hex"),Ei(e)}function lR(e,t={},r={}){(!e||e.kind!=="rfq-intent")&&Qe("intent","required");let n=Number(r.nowMs??Date.now()),o=Number(t.expiryMs??t.expiresAtMs??t.validUntilMs);Number.isFinite(o)||Qe("quote expiry","required"),o<=n&&Qe("quote","expired"),o>e.deadlineMs&&Qe("quote expiry","exceeds intent deadline");let i=String(t.source??t.provider??"").trim();i||Qe("source","required"),e.allowedSources.includes(i)||Qe("source","not allowed by intent");let s=xl(t.amountOut??t.buyAmount,"amountOut"),a=xl(t.minBuyAmount??t.minOut??s,"minBuyAmount");BigInt(a)>BigInt(s)&&Qe("minBuyAmount","exceeds amountOut");let A=$W(t.artifact??t.executableArtifact??t.transaction??t.typedData),c=Number(t.quotedAtMs??t.timestampMs??r.nowMs??Date.now());Number.isFinite(c)||Qe("quotedAtMs","must be finite");let l=qW(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=Dl({seed:"rfq-quote",out:u}).slice(0,34)),u.firmQuoteHash=WW(u),Object.freeze(u)}function sa(e,t){return Array.isArray(e?.allowedSources)&&e.allowedSources.includes(t)}function uR(e,t){return String(e?.[t]??"").trim()}function aa(e,t){return Object.freeze({source:e,run:t})}function zW(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 sa(e,"lifi")&&s.push(aa("lifi",async()=>{let A=await(n.lifiQuote??Us)({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 KW(t,A.transactionRequest.data):void 0,route:A},metadata:{tool:A?.tool??A?.toolDetails?.name??null}}})),i&&(sa(e,"paraswap")&&s.push(aa("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}}})),sa(e,"0x")&&(uR(r,"ZEROX_API_KEY")||uR(r,"0X_API_KEY")||n.zeroxQuote)&&s.push(aa("0x",async()=>{let A=await(n.zeroxQuote??Ts)({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}}})),sa(e,"cow")&&s.push(aa("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}}})),sa(e,"uniswap-v3")&&o[Number(e.fromChainId)]&&s.push(aa("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 KW(e,t){return`0x${(await import("node:crypto")).createHash("sha256").update(String(t)).digest("hex")}`}async function jW(e,t){return Promise.race([Promise.resolve().then(e.run),new Promise((r,n)=>setTimeout(()=>n(new Error(`${e.source}: timeout`)),t))])}async function ZW(e,t,r={}){let n=Number(r.timeoutMs??12e3),o=await Promise.allSettled(t.map(a=>jW(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(lR(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 XW(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 dR(e,t={}){let r=zW(e,t),{quotes:n,failed:o}=await ZW(e,r,t),i=XW(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 hR(e={},t={}){return Df(e,t)}async function gR(e={},t={}){let r=e.intent?.kind==="rfq-intent"?e.intent:Df(e,t);return dR(r,t)}async function pR(){return{ok:!0,provider:"rfq",mode:"intent-rfq",execution:"prepare"}}M();var t6="https://app.across.to";function vf(e={}){return(e.baseUrl||process.env.ACROSS_API_URL||t6).replace(/\/$/,"")}async function fR(e={}){try{let t=await C(`${vf(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 mR(e={},t={}){let r=String(e.l1Token||"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2");return C(`${vf(t)}/api/pools?token=${encodeURIComponent(r)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function ER(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(`${vf(t)}/api/suggested-fees?${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}M();var n6="https://api.beefy.finance";function Rf(e={}){return(e.baseUrl||process.env.BEEFY_API_URL||n6).replace(/\/$/,"")}async function IR(e={}){try{let t=await C(`${Rf(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 CR(e={},t={}){let r=await C(`${Rf(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 BR(e={}){return C(`${Rf(e)}/apy/breakdown`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??25e3})}M();var i6="https://public-api.birdeye.so";function QR(e={}){return(e.baseUrl||process.env.BIRDEYE_API_URL||i6).replace(/\/$/,"")}async function yR(e={}){try{let t=await C(`${QR(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 wR(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(`${QR(t)}/public/tokenlist?sort_by=${encodeURIComponent(r)}&sort_type=${encodeURIComponent(n)}&offset=${o}&limit=${i}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}M();var a6="https://api.celenium.io";function Nf(e={}){return(e.baseUrl||process.env.CELENIUM_API_URL||a6).replace(/\/$/,"")}async function bR(e={}){try{let t=await C(`${Nf(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 kR(e={}){return C(`${Nf(e)}/v1/stats`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??15e3})}async function SR(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(`${Nf(t)}${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}M();var c6="https://api.mainnet-beta.solana.com";function l6(e={}){return(e.rpcUrl||process.env.SOLANA_RPC_URL||c6).replace(/\/$/,"")}async function vl(e,t,r={}){let n=l6(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 xR(e={}){try{let t=await vl("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 DR(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 vl("getAssetsByOwner",{ownerAddress:r,page:n,limit:o,...e.sortBy?{sortBy:{sortBy:e.sortBy,sortDirection:e.sortDirection||"asc"}}:{}},t)}async function vR(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)),vl("searchAssets",o,t)}async function RR(e={},t={}){let r=String(e.assetId||"").trim();if(!r)throw new Error("das-assets: assetId is required");return vl("getAssetProof",{id:r},t)}M();var d6="https://api.l2beat.com";function Ff(e={}){return(e.baseUrl||process.env.L2BEAT_API_URL||d6).replace(/\/$/,"")}async function NR(e={}){try{let t=await C(`${Ff(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 FR(e={},t={}){let r=await C(`${Ff(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 MR(e={},t={}){return C(`${Ff(t)}/api/scaling/activity`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}M();var g6="https://api.spark.fi";function Mf(e={}){return(e.baseUrl||process.env.SPARK_API_URL||g6).replace(/\/$/,"")}async function UR(e={}){try{return{ok:(await C(`${Mf(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 LR(e={},t={}){let r=String(e.protocol||"spark"),n=String(e.chain||"mainnet"),o=e.token?String(e.token).toLowerCase():null;return o?C(`${Mf(t)}/v1/savings/${encodeURIComponent(r)}/${encodeURIComponent(n)}/${encodeURIComponent(o)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}):C(`${Mf(t)}/v1/savings/${encodeURIComponent(r)}/${encodeURIComponent(n)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}M();var f6="https://api.symbiotic.fi";function Uf(e={}){return(e.baseUrl||process.env.SYMBIOTIC_API_URL||f6).replace(/\/$/,"")}async function TR(e={}){try{let t=await C(`${Uf(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 _R(e={},t={}){let r=Math.min(200,Math.max(1,Number(e.limit||50))),n=await C(`${Uf(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 PR(e={},t={}){let r=String(e.address||"").trim();if(!r)throw new Error("symbiotic-restaking: address is required");return C(`${Uf(t)}/v1/vaults/${encodeURIComponent(r)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}M();var E6="https://staking-api.polygon.technology/api/v2",I6=18,C6=200,B6=50,Q6=new Set(["id","totalStaked","selfStake","delegatedStake","commissionPercent","uptimePercent","performanceIndex"]);function Tf(e={}){return String(e.baseUrl||process.env.POLYGON_STAKING_API_URL||E6).replace(/\/$/,"")}function y6(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 w6(e,t=B6){let r=Number(e??t);return Number.isFinite(r)?Math.min(C6,Math.max(1,Math.trunc(r))):t}function Lf(e){let t=Number(e);return Number.isFinite(t)?t/10**I6:null}async function _f(e,t={}){let r=await C(`${Tf(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 OR(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:Lf(e.totalStaked),selfStakePolApprox:Lf(e.selfStake),delegatedStakePolApprox:Lf(e.delegatedStake),stakePrecision:"approximate \u2014 upstream serves wei-scale as float64"}}async function HR(e={},t={}){let r=await _f("/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=Q6.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=w6(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(OR)}}async function GR(e={},t={}){let r=y6(e.id??e.validatorId,"id"),o=(await _f(`/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:{...OR(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 qR(e={}){try{let t=await _f("/validators",{...e,timeoutMs:e.timeoutMs??1e4}),r=Array.isArray(t?.result)?t.result:[];return{ok:r.length>0,provider:"polygon-staking",chainId:137,baseUrl:Tf(e),validatorTotal:t?.summary?.total??r.length,exec:!1}}catch(t){return{ok:!1,provider:"polygon-staking",chainId:137,baseUrl:Tf(e),error:String(t?.message||t),exec:!1}}}M();var k6="https://api.v3.aave.com/graphql",Ate=Object.freeze([1,10,56,100,137,146,232,324,1088,1868,5e3,42161,42220,43114,57073,59144,534352]),S6=(e={})=>e.baseUrl||process.env.AAVE_V3_API_URL||k6;async function Rl(e,t,r={}){let n=await C(S6(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 x6=`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
- }`,Lk=`query Market($request: MarketRequest!) {
197
+ }`,D6=`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
- }`,Bk=`query Chains($filter: ChainsFilter!) {
230
+ }`,v6=`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 R6(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 YR(e={},t={}){let r={chainIds:R6(e)};return e.user&&(r.user=String(e.user)),{markets:(await Rl(x6,{request:r},t))?.data?.markets??[]}}async function VR(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 Rl(D6,{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 Rl(v6,{filter:n},t))?.data?.chains??[]}}async function WR(e={}){return{ok:(await Rl("query { health }",{},e))?.data?.health===!0,provider:"aave-v3"}}M();var F6="https://staking-api.babylonlabs.io";function Pf(e={}){return String(e.baseUrl||process.env.BABYLON_STAKING_API_URL||F6).replace(/\/$/,"")}function Nl(e,t={}){return C(`${Pf(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:{Accept:"application/json"}})}function $R(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 zR(e={}){try{let r=(await Nl("/v2/stats",e))?.data||{},n=Number(r.active_tvl??0);return{ok:Number.isFinite(n)&&n>0,provider:"babylon-staking",baseUrl:Pf(e),activeTvlSats:String(r.active_tvl??""),activeFinalityProviders:r.active_finality_providers??null,exec:!1}}catch(t){return{ok:!1,provider:"babylon-staking",baseUrl:Pf(e),error:String(t?.message||t),exec:!1}}}async function KR(e={},t={}){let n=(await Nl("/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 jR(e={},t={}){let r=await Nl("/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=$R(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 ZR(e={},t={}){let r=$R(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 Nl(`/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 U6="https://markets.bisq.network";function Of(e={}){return String(e.baseUrl||process.env.BISQ_MARKETS_URL||U6).replace(/\/$/,"")}function XR(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 Fl(e,t={}){return C(`${Of(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function eN(e={}){try{let t=await Fl("/api/markets",e),r=t&&typeof t=="object"?Object.keys(t).length:0;return{ok:r>0,provider:"bisq-markets",baseUrl:Of(e),marketCount:r,exec:!1}}catch(t){return{ok:!1,provider:"bisq-markets",baseUrl:Of(e),error:String(t?.message||t),exec:!1}}}async function tN(e={},t={}){let r=await Fl("/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 rN(e={},t={}){let r=XR(e.market||e.pair||"btc_usd","market"),n=await Fl(`/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 nN(e={},t={}){let r=XR(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 Fl(`/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"}}),T6=new Map([["bob",60808],["rootstock",30],["rsk",30]]),_6=60808;function Aa(e){if(e==null||e==="")return _6;let t=T6.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 Hf(e,t={}){if(t.baseUrl)return String(t.baseUrl).replace(/\/$/,"");let r=Aa(e),n=r===30?process.env.ROOTSTOCK_EXPLORER_URL:process.env.BOB_EXPLORER_URL;return String(n||mr[r].url).replace(/\/$/,"")}function oN(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 Ml(e,t,r={}){return C(`${Hf(e,r)}${t.startsWith("/")?t:`/${t}`}`,{fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??15e3})}async function iN(e={},t={}){let r;try{r=Aa(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 Ml(r,"/api/v2/stats",e);return{ok:o?.total_blocks!=null||o?.total_transactions!=null,provider:"bob-rootstock",chainId:r,chain:n.name,baseUrl:Hf(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:Hf(r,e),error:String(o?.message||o),exec:!1}}}async function Gf(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 Gf({chainId:A},t)}catch(c){return{provider:"bob-rootstock",chainId:A,chain:mr[A].name,error:String(c?.message||c)}}}))}}let n=Aa(r),o=mr[n],i=await Ml(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 sN(e={},t={}){let r=Aa(e.chainId??e.chain),n=oN(e.address||e.addr,"address"),o=mr[r],i=await Ml(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 aN(e={},t={}){let r=Aa(e.chainId??e.chain),n=oN(e.address||e.addr,"address"),o=await Ml(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 O6="https://insights.braiins.com/api/v1.0";function qf(e={}){return String(e.baseUrl||process.env.BRAIINS_INSIGHTS_URL||O6).replace(/\/$/,"")}function Yf(e,t={}){return C(`${qf(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:{Accept:"application/json"}})}async function AN(e={}){try{let t=await Yf("/price-stats",e),r=Number(t?.price??0);return{ok:Number.isFinite(r)&&r>0,provider:"braiins-insights",baseUrl:qf(e),btcUsd:Number.isFinite(r)?r:null,timestamp:t?.timestamp??null,exec:!1}}catch(t){return{ok:!1,provider:"braiins-insights",baseUrl:qf(e),error:String(t?.message||t),exec:!1}}}async function cN(e={},t={}){let r=await Yf("/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 lN(e={},t={}){let r=await Yf("/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 G6="https://api.cow.fi",uN=Object.freeze({1:"mainnet",100:"xdai",42161:"arbitrum_one",8453:"base",11155111:"sepolia"});function dN(e={}){return(e.baseUrl||process.env.COW_API_URL||G6).replace(/\/$/,"")}function q6(e={}){if(e.network)return String(e.network);let t=Number(e.chainId??1),r=uN[t];if(!r)throw new Error(`cow-protocol: unsupported chainId ${t} (have: ${Object.keys(uN).join(", ")})`);return r}function Vf(e,t,r){return`${dN(r)}/${q6(e)}/api/v1${t}`}function hN(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 gN(e,t=10){return Math.min(1e3,Math.max(1,Number(e.limit??t)))}async function pN(e={},t={}){return C(Vf(e,"/auction",t),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function fN(e={},t={}){let r=hN(e.owner||e.address||e.user,"owner"),n=new URLSearchParams({limit:String(gN(e))});e.offset!=null&&n.set("offset",String(Math.max(0,Number(e.offset))));let o=await C(`${Vf(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 mN(e={},t={}){let r=new URLSearchParams;e.orderUid?r.set("orderUid",String(e.orderUid)):r.set("owner",hN(e.owner||e.address||e.user,"owner"));let n=await C(`${Vf(e,"/trades",t)}?${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4}),o=Array.isArray(n)?n:[];return{count:o.length,trades:o.slice(0,gN(e))}}async function EN(e={}){let t=await C(`${dN(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 V6="https://api.hiro.so",J6=20;function Jf(e={}){return String(e.baseUrl||process.env.HIRO_API_URL||V6).replace(/\/$/,"")}function W6(e={}){let t={Accept:"application/json"},r=e.apiKey||process.env.HIRO_API_KEY;return r&&(t["x-api-key"]=String(r)),t}function ca(e,t={}){return C(`${Jf(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:W6(t)})}async function IN(e={}){try{let t=await ca("/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:J6,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 CN(e={},t={}){let r=await ca("/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 BN(e={},t={}){let r=await ca("/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 QN(e={},t={}){let r=Math.min(60,Math.max(1,Number(e.limit||20))),n=Math.max(0,Number(e.offset||0)),o=await ca(`/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 yN(e={},t={}){let r=Math.min(30,Math.max(1,Number(e.limit||1))),n=await ca(`/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 z6="https://bundles.jito.wtf",bN=1e9;function Wf(e={}){return String(e.baseUrl||process.env.JITO_BUNDLES_URL||z6).replace(/\/$/,"")}function K6(e,t,r){let n=Number(e);return Number.isFinite(n)?Math.max(1,Math.min(Math.floor(n),r)):t}function wN(e){let t=Number(e);return Number.isFinite(t)?Math.round(t*bN):null}function j6(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/bN:null,raw:e}}async function kN(e={}){try{let t=await C(`${Wf(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 SN(e={},t={}){let r=K6(e.limit,5,100),n=new URL(`${Wf(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(j6),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 xN(e={}){let t=await C(`${Wf(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,wN(i)])),suggestedTipLamports:wN(n.p75||n.p50),raw:r}}M();var X6="https://api.kamino.finance";function e$(e={}){return String(e.baseUrl||process.env.KAMINO_API_URL||X6).replace(/\/$/,"")}function dt(e){let t=Number(e);return Number.isFinite(t)?t:null}function DN(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 $f(e={},t={}){let r=new URL(`${e$(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 vN(e={}){try{let t=await $f({},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 RN(e={},t={}){let n=(await $f(e,t)).map(DN),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 NN(e={},t={}){let r=String(e.strategy||e.address||"").trim();if(!r)throw new Error("kamino-strategies: strategy address required");let o=(await $f({...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",...DN(o),raw:o}}M();var r$="https://blockstream.info/liquid/api",FN="6f0279e9ed041c3d710a9f57d0c02928416460c4b722ae3457a11eec381c526d";function Ul(e={}){return String(e.baseUrl||process.env.LIQUID_ESPLORA_URL||r$).replace(/\/$/,"")}function n$(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 o$(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 MN(e,t={}){let r=`${Ul(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 UN(e,t={}){return C(`${Ul(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function LN(e={}){try{let t=await MN("/blocks/tip/height",e),r=Number(t);return{ok:Number.isFinite(r)&&r>0,provider:"liquid-esplora",baseUrl:Ul(e),tipHeight:r,exec:!1,signing:"user-wallet"}}catch(t){return{ok:!1,provider:"liquid-esplora",baseUrl:Ul(e),error:String(t?.message||t),exec:!1}}}async function TN(e={},t={}){let r=await MN("/blocks/tip/height",t);return{provider:"liquid-esplora",tipHeight:Number(r)}}async function _N(e={},t={}){let r=n$(e.address||e.addr,"address"),n=await UN(`/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 PN(e={},t={}){let r=o$(e.assetId||e.asset||FN,"assetId"),n=await UN(`/asset/${r}`,t),o=n.chain_stats||{};return{provider:"liquid-esplora",assetId:r,isPolicyAsset:r===FN,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 s$="https://api-mainnet.magiceden.dev/v2/ord/btc",a$=600;function zf(e={}){return String(e.baseUrl||process.env.MAGICEDEN_ORD_API_URL||s$).replace(/\/$/,"")}function A$(e={}){let t={Accept:"application/json"},r=e.apiKey||process.env.MAGICEDEN_API_KEY;return r&&(t.Authorization=`Bearer ${r}`),t}function ON(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 HN(e,t={}){return C(`${zf(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:A$(t),retries:t.retries??1})}async function GN(e={}){let t=ON(e.probeCollection||process.env.MAGICEDEN_PROBE_COLLECTION||"nodemonkes");try{let r=await HN(`/stat?collectionSymbol=${encodeURIComponent(t)}`,e);return{ok:r!=null&&typeof r=="object",provider:"magiceden-ordinals",baseUrl:zf(e),probeCollection:t,rateLimitRpm:a$,exec:!1}}catch(r){let n=r?.status??null;return{ok:!1,provider:"magiceden-ordinals",baseUrl:zf(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 qN(e={},t={}){let r=ON(e.collectionSymbol||e.symbol||e.collection,"collectionSymbol");try{let n=await HN(`/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 l$="https://mempool.space/api",u$=7;function Kf(e={}){return String(e.baseUrl||process.env.MEMPOOL_API_URL||l$).replace(/\/$/,"")}function Ll(e,t={}){return C(`${Kf(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}function YN(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>u$}}async function VN(e={}){try{let r=(await Ll("/v1/lightning/statistics/latest",e))?.latest||{},{ageDays:n,stale:o}=YN(r.added);return{ok:Number(r.node_count||0)>0,provider:"mempool-lightning",baseUrl:Kf(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:Kf(e),error:String(t?.message||t),exec:!1}}}async function JN(e={},t={}){let n=(await Ll("/v1/lightning/statistics/latest",t))?.latest||{},{ageDays:o,stale:i}=YN(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 WN(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 Ll(`/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 $N(e={},t={}){let r=await Ll("/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 h$="https://mempool.space/api",zN=new Set(["24h","3d","1w","1m","3m","6m","1y","2y","3y","all"]);function jf(e={}){return String(e.baseUrl||process.env.MEMPOOL_API_URL||h$).replace(/\/$/,"")}function KN(e,t){let r=String(e||t).trim().toLowerCase();if(!zN.has(r))throw new Error(`mempool-mining: window must be one of ${[...zN].join(", ")}`);return r}function la(e,t={}){return C(`${jf(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function jN(e={}){try{let t=await la("/v1/difficulty-adjustment",e);return{ok:Number.isFinite(Number(t?.nextRetargetHeight))&&Number(t.nextRetargetHeight)>0,provider:"mempool-mining",baseUrl:jf(e),nextRetargetHeight:t?.nextRetargetHeight??null,exec:!1}}catch(t){return{ok:!1,provider:"mempool-mining",baseUrl:jf(e),error:String(t?.message||t),exec:!1}}}async function ZN(e={},t={}){let r=await la("/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 XN(e={},t={}){let r=KN(e.window||e.timeframe,"1w"),n=await la(`/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 eF(e={},t={}){let r=KN(e.window||e.timeframe,"3d"),n=await la(`/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 tF(e={},t={}){let r=Math.min(1e4,Math.max(1,Number(e.blockCount||e.blocks||144))),n=await la(`/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 p$="https://amm-v2.meteora.ag",rF=new Set(["tvl","volume","fee_tvl_ratio","l_m"]),nF=new Set(["dynamic","multitoken","lst","farms"]),f$=/^[1-9A-HJ-NP-Za-km-z]{32,44}$/;function m$(e={}){return String(e.baseUrl||process.env.METEORA_API_URL||p$).replace(/\/$/,"")}function Ye(e){let t=Number(e);return Number.isFinite(t)?t:null}function E$(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 I$(e={},t={}){let r=new URL(`${m$(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(!rF.has(a))throw new Error(`meteora-dlmm: sortKey must be one of ${[...rF].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(!nF.has(a))throw new Error(`meteora-dlmm: poolType must be one of ${[...nF].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(!f$.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 Zf(e={},t={}){let{url:r,page:n,size:o}=I$(e,t),i=await C(r.toString(),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4});return{pools:(Array.isArray(i?.data)?i.data:[]).map(E$),totalCount:i?.total_count??null,page:n,size:o}}async function oF(e={}){try{let{pools:t,totalCount:r}=await Zf({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 iF(e={},t={}){let r=await Zf({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 sF(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 Zf({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 B$="https://ordinals.com";function Tl(e={}){return String(e.baseUrl||e.ordinalsBase||process.env.ORDINALS_BASE_URL||B$).replace(/\/$/,"")}function Q$(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 aF(e,t={}){let r=`${Tl(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 Xf(e,t={}){return C(`${Tl(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:{Accept:"application/json"}})}async function AF(e={}){try{let t=await aF("/r/blockheight",e),r=Number(t);return{ok:Number.isFinite(r)&&r>0,provider:"ordinals-runes",baseUrl:Tl(e),blockHeight:r,exec:!1}}catch(t){return{ok:!1,provider:"ordinals-runes",baseUrl:Tl(e),error:String(t?.message||t),exec:!1}}}async function cF(e={},t={}){let r=await aF("/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 lF(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 Xf(`/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 uF(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 Xf(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 dF(e={},t={}){let r=Q$(e.name||e.rune||e.runeName,"name"),n=await Xf(`/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 w$="https://hermes.pyth.network",tm={"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"},b$=/^[0-9a-fA-F]{64}$/;function hF(e={}){return String(e.baseUrl||process.env.PYTH_HERMES_URL||w$).replace(/\/$/,"")}function gF(e,t="feedId"){let r=String(e??"").trim();if(!r)throw new Error(`pyth-price-feeds: ${t} required`);let n=tm[r.toUpperCase()]||tm[`${r.toUpperCase()}/USD`];if(n)return n;let o=r.startsWith("0x")||r.startsWith("0X")?r.slice(2):r;if(!b$.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 em(e={}){let t=Number(e.price),r=Number(e.expo);return!Number.isFinite(t)||!Number.isFinite(r)?null:t*10**r}function rm(e={}){let t=em({price:Number(e.price?.conf),expo:e.price?.expo}),r=em(e.price);return{id:e.id||null,price:r,confidence:t,confidenceBps:r&&t!=null?Math.round(t/Math.abs(r)*1e4):null,emaPrice:em(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 nm(e,t={}){let r=new URL(`${hF(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 pF(e={}){try{let t=await nm([tm["SOL/USD"]],e),n=(Array.isArray(t?.parsed)?t.parsed.map(rm):[])[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 fF(e={},t={}){let r=gF(e.feedId||e.id||e.symbol,"feedId"),n=await nm([r],t),o=Array.isArray(n?.parsed)?n.parsed.map(rm):[],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 mF(e={},t={}){let r=Array.isArray(e)?e:e.feedIds||e.ids||e.symbols||[],n=[...new Set(r.map(c=>gF(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 nm(c,t));let a=s.flatMap(c=>Array.isArray(c?.parsed)?c.parsed.map(rm):[]),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 EF(e={},t={}){let r=new URL(`${hF(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 S$="https://relayscan.io",IF=new Set(["1h","12h","24h","7d"]);function om(e={}){return(e.baseUrl||process.env.RELAYSCAN_API_URL||S$).replace(/\/$/,"")}function CF(e={}){let t=String(e.timespan||e.t||"24h").toLowerCase();if(!IF.has(t))throw new Error(`relayscan-mev: timespan must be one of ${[...IF].join(", ")}`);return t}function x$(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 im(e={},t={}){return C(`${om(t)}/overview/json?t=${CF(e)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function BF(e={},t={}){return C(`${om(t)}/builder-profit/json?t=${CF(e)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function QF(e={},t={}){let r=x$(e);return C(`${om(t)}/stats/day/${r}/json`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3})}async function yF(e={}){let t=await im({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 v$="https://extra-api.sanctum.so",R$=30,N$=["jitoSOL","mSOL","bSOL","INF","hSOL","bonkSOL","jupSOL","dSOL"];function sm(e={}){return String(e.baseUrl||process.env.SANCTUM_API_URL||v$).replace(/\/$/,"")}function wF(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 F$(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 F$(t,R$)){let s=new URL(`${sm(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 bF(e={}){try{let[t,r]=await Promise.all([C(`${sm(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 am(e={},t={}){let r=await C(`${sm(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 kF(e={},t={}){let r=e.lsts||e.symbols||null;e.all===!0&&(r=(await am({},t)).lsts.map(A=>A.symbol).filter(Boolean)),(!Array.isArray(r)||!r.length)&&(r=N$);let n=[...new Set(r.map(a=>wF(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 SF(e={},t={}){let r=wF(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 U$="https://api.save.finance",L$="4UpD2fh7xH3VP9QQaXtsS1YY3bxzWhtfpks7FatyKvdY",xF="CCpirWrgNuBVLdkP2haxLTbD6XqEgaYuVXixbbpxUB6",T$=/^[1-9A-HJ-NP-Za-km-z]{32,44}$/;function Am(e={}){return String(e.baseUrl||process.env.SAVE_API_URL||process.env.SOLEND_API_URL||U$).replace(/\/$/,"")}function DF(e,t="address"){let r=String(e??"").trim();if(!T$.test(r))throw new Error(`solend-lending: ${t} must be a base58 public key`);return r}function vF(e){let t=Number(e);return Number.isFinite(t)?t:null}function _$(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 P$(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:vF(e.rates?.supplyInterest),borrowApyPct:vF(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 RF(e={}){try{let t=await C(`${Am(e)}/v1/reserves?ids=${xF}`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??15e3}),r=Array.isArray(t?.results)?t.results:[];return{ok:r.length>0,provider:"solend-lending",probeReserve:xF,reserves:r.length,exec:!1}}catch(t){return{ok:!1,provider:"solend-lending",error:String(t?.message||t),exec:!1}}}async function cm(e={},t={}){let r=new URL(`${Am(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(_$);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 NF(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=>DF(String(a).trim(),"reserve"));else{let s=DF(e.market||e.marketAddress||L$,"market"),A=(await cm({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(`${Am(t)}/v1/reserves?ids=${r.join(",")}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3}),i=(Array.isArray(o?.results)?o.results:[]).map((s,a)=>({...P$(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 lm(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 _n(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 ua(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:lm(e.amount,"amount")}}function um(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 da(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 dm(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 H$(e={},t={}){let r=ua(e),n=_n(e.slices??10,"slices",2,100),o=_n(e.durationSec??3600,"durationSec",n,604800),i=um(r.total,Array(n).fill(1));return da(r,"TWAP",dm(i,o,t.nowMs),{durationSec:o})}function G$(e={},t={}){let r=ua(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=_n(e.durationSec??3600,"durationSec",n.length,604800),i=um(r.total,n),s=n.reduce((A,c)=>A+c,0n),a=dm(i,o,t.nowMs).map((A,c)=>({...A,volumeWeightBps:Number(n[c]*10000n/s)}));return da(r,"VWAP",a,{durationSec:o,requiresLiveVolumeValidation:!0})}function q$(e={}){let t=ua(e),r=_n(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=lm(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 da(t,"POV",o,{participationBps:r,residualAmount:String(n),requiresLiveVolumeValidation:!0})}function Y$(e={}){let t=ua(e),r=lm(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 da(t,"ICEBERG",n,{displayAmount:String(r),refillCount:n.length-1})}function V$(e={},t={}){let r=ua(e),n=_n(e.slices??10,"slices",2,100),o=_n(e.durationSec??3600,"durationSec",n,604800),i=_n(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=um(r.total,s);return da(r,"IS",dm(a,o,t.nowMs),{durationSec:o,urgencyBps:i})}function FF(e={},t={}){let r=String(e.strategy||"").trim().toUpperCase();if(r==="TWAP")return H$(e,t);if(r==="VWAP")return G$(e,t);if(r==="POV")return q$(e,t);if(r==="ICEBERG")return Y$(e,t);if(r==="IS"||r==="IMPLEMENTATION SHORTFALL")return V$(e,t);throw new Error("strategy must be TWAP, VWAP, POV, ICEBERG, or IS")}function MF(){return{ok:!0,provider:"execution-strategies",strategies:["TWAP","VWAP","POV","ICEBERG","IS"],execution:"plan-only",externalProtocol:!1}}var W$={"hl-info":{health:e=>Fb(e),allMids:e=>hr(e),l2Book:(e,t={})=>Bc(t.coin,e),outcomeMeta:e=>Rs(e),clearinghouse:(e,t={})=>Qc(t.user,e),userFills:(e,t={})=>Mb(t.user,e),meta:e=>Ub(e),metaAndAssetCtxs:e=>qo(e),candleSnapshot:(e,t={})=>yc(t,e),openOrders:(e,t={})=>Lb(t.user,e),frontendOpenOrders:(e,t={})=>Tb(t.user,e),userState:(e,t={})=>wc(t.user,e),spotMeta:e=>bc(e)},"hl-vaults":{health:e=>Hb(e),summaries:(e,t={})=>Pg(t,e),details:(e,t={})=>kc(t,e),userEquities:(e,t={})=>Og(t,e),tracker:(e,t={})=>Hg(t,e)},"poly-public":{health:e=>qb(e),time:e=>Gg(e),markets:(e,t={})=>Yb(t,e),book:(e,t={})=>Vb(t.tokenId,e),midpoint:(e,t={})=>Jb(t.tokenId,e),spread:(e,t={})=>Wb(t.tokenId,e),price:(e,t={})=>$b(t.tokenId,{side:t.side},e),events:(e,t={})=>zb(t,e)},"evm-rpc":{health:(e,t={})=>Po(t.chainId??1,e),healthAll:(e,t={})=>Cg({...e,chainIds:t.chainIds}),blockNumber:(e,t={})=>ys(t.chainId??1,e),chainId:(e,t={})=>Eg(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={})=>Ig(t,e),erc20Balance:(e,t={})=>ws(t,e),transactionReceipt:(e,t={})=>bs(t,e)},portfolio:{health:e=>Cv(e),balances:(e,t={})=>Ql(t,e),snapshot:(e,t={})=>Pv(t,e),history:(e,t={})=>Bf(t,e),valueGraph:(e,t={})=>Ov(t,e)},"nft-portfolio":{health:e=>Sv(e),inventory:(e,t={})=>di(t,e),gallery:(e,t={})=>Rv(t,e),pnl:(e,t={})=>vv(t,e),prepareList:(e,t={})=>xv(t,e),traitSnipe:(e,t={})=>Dv(t,e)},"contract-risk":{health:e=>Hv(e),scan:(e,t={})=>Un(t,e)},"evm-token-sniper":{health:e=>Yv(e),scan:(e,t={})=>qv(t,e)},"evm-simulate":{health:e=>Jv(e),simulate:(e,t={})=>ia(t,e)},"nft-mint":{health:e=>$v(e),discover:(e,t={})=>Sl(t,e),prepare:(e,t={})=>wf(t,e),priceGas:(e,t={})=>kl(t,e),createTrigger:(e,t={})=>zv(t,e),checkOpen:(e,t={})=>Kv(t,e),evaluateMancerOs:(e,t={})=>Xv(t,e)},"solana-rpc":{health:e=>jb(e),latestBlockhash:(e,t={})=>Yg(t,e),getBalance:(e,t={})=>Sc(t,e),tokenAccounts:(e,t={})=>Ms(t,e),simulate:(e,t={})=>Zb(t,e)},"bitcoin-esplora":{health:e=>Xb(e),tipHeight:e=>ek(e),fees:e=>tk(e),address:(e,t={})=>Dc(t,e),utxos:(e,t={})=>rk(t,e),tx:(e,t={})=>nk(t,e),decode:(e,t={})=>ok(t,e)},"bitcoin-meta":{health:e=>Ak(e),runeBalances:(e,t={})=>Rc(t,e),inscriptions:(e,t={})=>Jo(t,e),inscriptionInfo:(e,t={})=>ck(t,e),inscriptionChildren:(e,t={})=>lk(t,e),ordBlockInfo:(e,t={})=>uk(t,e)},satflow:{health:e=>hk(e),collectionFloors:(e,t={})=>gk(t,e),collectionStats:(e,t={})=>pk(t,e),item:(e,t={})=>fk(t,e),walletContents:(e,t={})=>Fc(t,e),floorListings:(e,t={})=>mk(t,e),preparePurchase:(e,t={})=>Ik(t,e),prepareList:(e,t={})=>Mc(t,e)},jupiter:{health:e=>Sk(e),venues:(e,t={})=>kk(t,e),quote:(e,t={})=>Tc(t,e),prepare:(e,t={})=>xk(t,e)},defillama:{health:e=>vk(e),prices:(e,t={})=>Sn(t.coins||[],e),pricesBySymbol:(e,t={})=>Uk(t.symbols,e),protocols:e=>Rk(e),yields:(e,t={})=>Nk(t,e),stablecoins:(e,t={})=>Fk(t,e),dexVolumes:(e,t={})=>Mk(t,e)},lifi:{health:e=>Gk(e),quote:(e,t={})=>Us(t,e),prepare:(e,t={})=>qk(t,e),chains:e=>Yk(e)},dexscreener:{health:e=>Zw(e),token:(e,t={})=>bn(t.address||t.tokenAddress,e),search:(e,t={})=>ks(t.q||t.query,e),pair:(e,t={})=>Xw(t.chainId,t.pairAddress,e)},"uniswap-v3":{health:(e,t={})=>hb({...e,chainId:t.chainId??8453}),quote:(e,t={})=>Oo(t,e),prepare:(e,t={})=>db(t,e),quotePath:(e,t={})=>ub(t,e),ethUsdc:(e,t={})=>Sg(t,e),chains:()=>gb()},"uniswap-v4":{health:(e,t={})=>Bb({...e,chainId:t.chainId??8453}),quote:(e,t={})=>Ib(t,e),chains:()=>Cb()},aerodrome:{health:(e,t={})=>Zk({...e,chainId:t.chainId??8453}),quote:(e,t={})=>Oc(t,e),prepare:(e,t={})=>jk(t,e),chains:()=>Xk()},zerox:{health:e=>nS(e),price:(e,t={})=>sp(t,e),quote:(e,t={})=>Ts(t,e),prepare:(e,t={})=>oS(t,e)},across:{health:e=>iS(e),suggestedFees:(e,t={})=>ap(t,e)},hop:{health:e=>sS(e),quote:(e,t={})=>Ap(t,e)},relay:{health:e=>aS(e),quote:(e,t={})=>Gc(t,e),prepare:(e,t={})=>AS(t,e)},cowswap:{health:e=>hS(e),quote:(e,t={})=>Wo(t,e),prepareOrder:(e,t={})=>gS(t,e),order:(e,t={})=>fS(t,e),status:(e,t={})=>pS(t,e),chains:()=>mS()},oneinch:{health:e=>IS(e),quote:(e,t={})=>pp(t,e),prepare:(e,t={})=>CS(t,e),approveSpender:(e,t={})=>fp(t,e)},"hl-ws":{health:e=>BS(e),allMids:e=>QS(e),l2Book:(e,t={})=>yS(t.coin,e),snapshot:(e,t={})=>Os(t.subscription||t,e)},"poly-ws":{health:(e,t={})=>wS({...e,assetId:t.assetId}),book:(e,t={})=>bS(t.assetId||t.tokenId,e),snapshot:(e,t={})=>Yc(t.assetIds||t.assets_ids||[t.assetId],e)},"opensea-nft":{health:e=>TS(e),collection:(e,t={})=>Hs(t.slug,e),floor:(e,t={})=>_S(t.slug,e),bestListings:(e,t={})=>$c(t,e),accountNfts:(e,t={})=>Gs(t,e),accountPnl:(e,t={})=>Jc(t,e),prepareBuy:(e,t={})=>WS(t,e),prepareSweep:(e,t={})=>$S(t,e),prepareMint:(e,t={})=>zS(t,e),prepareList:(e,t={})=>zc(t,e),prepareCancel:(e,t={})=>KS(t,e)},"hl-outcome":{list:e=>Nx(e),prepareOrder:(e,t={})=>Fx(t,e),prepareCancel:(e,t={})=>Mx(t,e)},"protocol-templates":{health:()=>({ok:!0,templates:cl().map(e=>e.id),nativeTemplates:Wp().map(e=>e.id),families:["evm","solana","bitcoin"],firmAudit:!1}),list:()=>cl(),listNative:()=>Wp(),gate:(e,t={})=>Gp(t.templateId||t.id,e),prepareDeploy:(e,t={})=>eD(t,e),buildNative:(e,t={})=>AD(t)},"poly-clob":{prepareOrder:(e,t={})=>Ox(t||{})},"hl-perps":{health:e=>Np(e),assetInfo:(e,t={})=>vn(t,e),prepareOrder:(e,t={})=>$s(t,e),prepareCancel:(e,t={})=>nl(t,e),prepareLeverage:(e,t={})=>Dx(t,e),prepareIsolatedMargin:(e,t={})=>vx(t,e),prepareBracket:(e,t={})=>Rx(t,e),prepareBuilderApproval:(e,t={})=>xx(t,e)},"hl-markets":{health:e=>Np(e),markets:(e,t={})=>Zc(t,e),leaderboards:(e,t={})=>fx(t,e),coin:(e,t={})=>mx(t,e),spot:(e,t={})=>Ex(t,e)},"magiceden-sol":{health:e=>rx(e),stats:(e,t={})=>wp(t,e),listings:(e,t={})=>ox(t,e),tokenListings:(e,t={})=>ix(t,e),prepareBuy:(e,t={})=>sx(t,e),prepareList:(e,t={})=>Kc(t,e),prepareMint:(e,t={})=>ax(t,e)},"hl-staking":{health:e=>cx(e),validators:e=>Sp(e),delegatorSummary:(e,t={})=>xp(t,e),delegations:(e,t={})=>Dp(t,e),rewards:(e,t={})=>lx(t,e),history:(e,t={})=>ux(t,e),preflight:(e,t={})=>px(t,e),prepareStakeDeposit:(e,t={})=>dx(t,e),prepareStakeWithdraw:(e,t={})=>hx(t,e),prepareDelegate:(e,t={})=>gx(t,e)},"hyperevm-dex":{health:e=>ZS(e),search:(e,t={})=>XS(t.q||t.query||"HYPE",e),token:(e,t={})=>ex(t.address||t.tokenAddress,e)},geckoterminal:{health:e=>dD(e),networks:(e,t={})=>$p(t,e),pool:(e,t={})=>cD(t,e),token:(e,t={})=>lD(t,e),ohlcv:(e,t={})=>uD(t,e)},curve:{health:e=>bD(e),openapi:e=>wD(e),pools:(e,t={})=>Kp(t,e),quote:(e,t={})=>jp(t,e),prepare:(e,t={})=>kD(t,e)},gmx:{health:e=>TD(e),tickers:(e,t={})=>pl(t,e),markets:(e,t={})=>UD(t,e),marketsInfo:(e,t={})=>Xp(t,e),tokens:(e,t={})=>LD(t,e),prepareOrder:(e,t={})=>HD(t,e),positions:(e,t={})=>_D(t,e),orderStatus:(e,t={})=>PD(t,e),verifyOrder:(e,t={})=>OD(t,e)},morpho:{health:e=>VD(e),markets:(e,t={})=>YD(t,e),vaults:(e,t={})=>rf(t,e),prepareVault:(e,t={})=>JD(t,e)},balancer:{health:e=>ev(e),pools:(e,t={})=>XD(t,e),quote:(e,t={})=>sf(t,e),prepare:(e,t={})=>tv(t,e)},pendle:{health:e=>nv(e),markets:(e,t={})=>Af(t,e),quote:(e,t={})=>ov(t,e),prepare:(e,t={})=>cf(t,e)},odos:{health:e=>Av(e),chains:e=>uf(e),quote:(e,t={})=>sv(t,e),prepare:(e,t={})=>av(t,e)},blockscout:{health:e=>fv(e),stats:(e,t={})=>gf(t,e),address:(e,t={})=>dv(t,e),token:(e,t={})=>hv(t,e)},paraswap:{health:e=>tR(e),tokens:(e,t={})=>Sf(t,e),price:(e,t={})=>mi(t,e),quote:(e,t={})=>mi(t,e),prepare:(e,t={})=>eR(t,e)},rfq:{health:e=>pR(e),intent:(e,t={})=>hR(t,e),quote:(e,t={})=>gR(t,e)},"polygon-staking":{health:e=>qR(e),validators:(e,t={})=>HR(t,e),validatorDetail:(e,t={})=>GR(t,e)},"aave-v3":{health:e=>WR(e),markets:(e,t={})=>YR(t,e),marketReserves:(e,t={})=>VR(t,e),chains:e=>JR(e)},"babylon-staking":{health:e=>zR(e),stats:e=>KR(e),finalityProviders:e=>jR(e),delegations:(e,t={})=>ZR(t,e)},"bisq-markets":{health:e=>eN(e),markets:e=>tN(e),ticker:(e,t={})=>rN(t,e),trades:(e,t={})=>nN(t,e)},"bob-rootstock":{health:(e,t={})=>iN(t.chainId,e),stats:(e,t={})=>Gf(t,e),addressInfo:(e,t={})=>sN(t,e),tokenBalances:(e,t={})=>aN(t,e)},"braiins-insights":{health:e=>AN(e),priceStats:e=>cN(e),poolStats:e=>lN(e)},"cow-protocol":{health:e=>EN(e),auction:e=>pN(e),openOrders:(e,t={})=>fN(t,e),recentTrades:(e,t={})=>mN(t,e)},"hiro-stacks":{health:e=>IN(e),networkInfo:e=>CN(e),stackingInfo:e=>BN(e),poxCycles:e=>QN(e),blocks:(e,t={})=>yN(t,e)},"jito-mev":{health:e=>kN(e),recentBundles:(e,t={})=>SN(t,e),tipFloor:e=>xN(e)},"kamino-strategies":{health:e=>vN(e),strategies:(e,t={})=>RN(t,e),strategyMetrics:(e,t={})=>NN(t,e)},"liquid-esplora":{health:e=>LN(e),tipHeight:e=>TN(e),addressInfo:(e,t={})=>_N(t,e),assetInfo:(e,t={})=>PN(t,e)},"magiceden-ordinals":{health:e=>GN(e),collectionStat:(e,t={})=>qN(t,e)},"mempool-lightning":{health:e=>VN(e),statistics:e=>JN(e),nodeRankings:(e,t={})=>WN(t,e),nodeCountries:e=>$N(e)},"mempool-mining":{health:e=>jN(e),difficulty:e=>ZN(e),poolShare:(e,t={})=>XN(t,e),hashrate:(e,t={})=>eF(t,e),rewardStats:(e,t={})=>tF(t,e)},"meteora-dlmm":{health:e=>oF(e),pools:(e,t={})=>iF(t,e),poolSearch:(e,t={})=>sF(t,e)},"ordinals-runes":{health:e=>AF(e),blockHeight:e=>cF(e),blockInfo:(e,t={})=>lF(t,e),satInfo:(e,t={})=>uF(t,e),runeInfo:(e,t={})=>dF(t,e)},"pyth-price-feeds":{health:e=>pF(e),latestPrice:(e,t={})=>fF(t,e),latestPrices:(e,t={})=>mF(t,e),feedDirectory:e=>EF(e)},"relayscan-mev":{health:e=>yF(e),overview:(e,t={})=>im(t,e),builderProfit:(e,t={})=>BF(t,e),dailyStats:(e,t={})=>QF(t,e)},"sanctum-lst":{health:e=>bF(e),lstList:e=>am(e),apyAll:e=>kF(e),apyIndividual:(e,t={})=>SF(t,e)},"solend-lending":{health:e=>RF(e),markets:e=>cm(e),reserves:(e,t={})=>NF(t,e)},"execution-strategies":{health:()=>MF(),plan:(e,t={})=>FF(t)},"across-bridge":{health:e=>fR(e),pools:(e,t={})=>mR(t,e),suggestedFees:(e,t={})=>ER(t,e)},"beefy-yields":{health:e=>IR(e),apy:(e,t={})=>CR(t,e),apyBreakdown:e=>BR(e)},"birdeye-tokens":{health:e=>yR(e),tokenList:(e,t={})=>wR(t,e)},"celestia-da":{health:e=>bR(e),stats:e=>kR(e),blockStats:(e,t={})=>SR(t,e)},"das-assets":{health:e=>xR(e),assetsByOwner:(e,t={})=>DR(t,e),searchAssets:(e,t={})=>vR(t,e),assetProof:(e,t={})=>RR(t,e)},"l2beat-tvl":{health:e=>NR(e),tvl:(e,t={})=>FR(t,e),activity:(e,t={})=>MR(t,e)},"spark-lend":{health:e=>UR(e),markets:(e,t={})=>LR(t,e)},"symbiotic-restaking":{health:e=>TR(e),vaults:(e,t={})=>_R(t,e),vaultDetail:(e,t={})=>PR(t,e)}},UF=new Set(["prepareBuilderApproval","prepareBracket","prepareIsolatedMargin","prepareLeverage","prepareCancel","prepareOrder","preparePurchase","prepareList","prepareSell","prepareBuy","prepareMint","prepare","prepareStakeDeposit","prepareStakeWithdraw","prepareDelegate","prepareSwap","prepareTransfer","createOrder","cancelOrder"]),LF=new Set(["hl-exec"]);function $$(e){return LF.has(String(e||""))}function z$(e,t,r={}){let n=String(t||""),o=`${e}.${n}`;if(LF.has(e))throw new Error(`data plane forbidden execution provider: ${e}`);let i=Cc().find(s=>s.id===e);if(/sign|execute|broadcast|submit|send|write|place/i.test(n)&&!UF.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(UF.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($$(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.`);z$(e,t,r);let o=Lg(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=W$[e];if(!i||typeof i[t]!="function")throw new Error(`No client implementation for ${e}.${t}`);return i[t](n,r)}async function K$({providers:e,fetchImpl:t,timeoutMs:r,includeRpc:n,includeWs:o,concurrency:i,healthCall:s}={}){let a=e||Cc().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 _o(a,i??8,async u=>{if(!Lg(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:!1,providers:l}}function j$(){return Cc().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 Rte={catalog:j$,health:K$,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{LF as EXECUTION_PROVIDERS,z$ as assertDataOpAllowed,Rte as data,y as dataCall,j$ as dataCatalog,K$ as dataHealth,$$ as isExecutionProvider};