@oracle-agent/oracle 0.24.8 → 0.24.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +57 -49
- package/SECURITY.md +1 -1
- package/SETUP.md +16 -13
- package/dist/assets/profiles/_template/SOUL.md +2 -2
- package/dist/assets/profiles/oracle/SOUL.md +11 -13
- package/dist/assets/profiles/profile.schema.json +1 -1
- package/dist/assets/profiles/robinhood-agent/SOUL.md +5 -5
- package/dist/assets/skills/multi-venue-prepare-only-ranking/SKILL.md +1 -1
- package/dist/assets/skills/oracle-action-semantics/SKILL.md +5 -5
- package/dist/assets/skills/oracle-chat/SKILL.md +8 -8
- package/dist/assets/skills/oracle-desk-product/SKILL.md +3 -3
- package/dist/assets/skills/oracle-receipts/SKILL.md +2 -2
- package/dist/bin/desk-server.mjs +78 -34
- package/dist/bin/oracle-data-mcp.mjs +51 -7
- package/dist/bin/oracle-gateway.mjs +13 -15
- package/dist/bin/oracle-init.mjs +9 -9
- package/dist/bin/oracle-public-server.mjs +48 -4
- package/dist/bin/oracle-route.mjs +66 -22
- package/dist/bin/oracle-scan.mjs +58 -14
- package/dist/bin/oracle-upgrade.mjs +9 -9
- package/dist/bin/oracle.mjs +6 -6
- package/dist/cli/commands/chat.mjs +140 -96
- package/dist/cli/commands/doctor.mjs +5 -5
- package/dist/cli/commands/eval.mjs +17 -17
- package/dist/cli/commands/farm.mjs +72 -28
- package/dist/cli/commands/follow.mjs +61 -17
- package/dist/cli/commands/model.mjs +147 -103
- package/dist/cli/commands/receipt.mjs +3 -3
- package/dist/cli/commands/resolve.mjs +55 -11
- package/dist/cli/commands/setup.mjs +27 -27
- package/dist/cli/commands/sign.mjs +14 -13
- package/dist/cli/commands/signer.mjs +14 -17
- package/dist/cli/commands/strategy.mjs +50 -6
- package/dist/cli/commands/swap.mjs +72 -29
- package/dist/cli/commands/venues.mjs +3 -3
- package/dist/data/desk-data.mjs +78 -34
- package/dist/data/names.mjs +46 -2
- package/dist/data/providers/farming.mjs +46 -2
- package/dist/index.mjs +80 -36
- package/dist/local-signer/index.mjs +3 -1
- package/dist/router/index.mjs +46 -2
- package/dist/router/prepare-bridge.mjs +46 -2
- package/dist/scanner/index.mjs +48 -4
- package/dist/strategy/index.mjs +47 -3
- package/package.json +6 -3
- package/public/install.ps1 +1 -1
- package/public/install.sh +5 -4
- package/public/oracle-splash/_variants/ice.html +3 -3
- package/public/oracle-splash/_variants/ivory.html +3 -3
- package/public/oracle-splash/downloads/index.html +5 -5
- package/public/oracle-splash/index.html +7 -7
- package/public/oracle-splash/install.ps1 +1 -1
- package/public/oracle-splash/install.sh +5 -4
package/dist/index.mjs
CHANGED
|
@@ -1,18 +1,62 @@
|
|
|
1
|
-
var Qx=Object.defineProperty;var nt=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};var Vu=(e,t)=>{for(var n in t)Qx(e,n,{get:t[n],enumerable:!0})};import{createHash as Jx,createHmac as Zx,timingSafeEqual as eS}from"node:crypto";function Wu(e){let t=e==null||e===""?ar:Number(e);return!Number.isFinite(t)||t<0?ar:Math.min(t,Ms)}function $s(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map($s).join(",")}]`:`{${Object.keys(e).sort().map(n=>`${JSON.stringify(n)}:${$s(e[n])}`).join(",")}}`}function zu(e){let t=String(e?.ORACLE_STAMP_HMAC_SECRET||"").trim();return t.length>=16?t:""}function Bs(e=process.env){return zu(process.env)||zu(e)}function tS(e=process.env){return String(process.env.ORACLE_STAMP_REQUIRE_MAC||"").trim()==="1"||String(e?.ORACLE_STAMP_REQUIRE_MAC||"").trim()==="1"}function nS(e){let{oraclePrepared:t,prepareHash:n,prepareMac:r,note:o,...i}=e||{};return i}function Us(e){let t=nS(e);return Jx("sha256").update($s(t)).digest("hex")}function Ds(e,t=Bs()){return t?Zx("sha256",t).update(String(e)).digest("hex"):""}function rS(e,t){try{let n=Buffer.from(String(e),"hex"),r=Buffer.from(String(t),"hex");return n.length===0||n.length!==r.length?!1:eS(n,r)}catch{return!1}}function O(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 i=Date.now(),s=i+ar,c={...o,preparedAt:i,expiresAt:s,prepareVersion:Ls},l=Us(c),u=Bs(r),d=u?Ds(l,u):void 0,p={...c,oraclePrepared:!0,prepareHash:l};return d&&(p.prepareMac=d),p}function oS(e,{maxAgeMs:t=ar,nowMs:n=Date.now(),providers:r=null,kinds:o=null,label:i="operator",env:s=process.env}={}){if(!e||typeof e!="object")throw new Error(`${i}: prepared envelope object required`);if(e.oraclePrepared!==!0)throw new Error(`${i}: prepared integrity envelope missing \u2014 use an @oracle-agent/oracle prepare result`);if(Number(e.prepareVersion)!==Ls)throw new Error(`${i}: unsupported prepareVersion ${e.prepareVersion}`);let a=Us(e);if(String(e.prepareHash||"")!==a)throw new Error(`${i}: prepareHash mismatch \u2014 payload was altered after prepare`);let c=Bs(s),l=String(e.prepareMac||"");if(tS(s)||l||c){if(!c)throw new Error(`${i}: prepareMac present or ORACLE_STAMP_REQUIRE_MAC=1 but ORACLE_STAMP_HMAC_SECRET missing in signer`);let h=Ds(a,c);if(!l||!rS(l,h))throw new Error(`${i}: prepareMac mismatch \u2014 stamp not from trusted preparer`)}let u=Number(e.preparedAt),d=Number(e.expiresAt),p=Wu(t),m=n-u,f=d-u;if(!Number.isFinite(m)||!Number.isFinite(d)||!Number.isFinite(f)||m<0||f<=0||f>Ms||m>p||n>d)throw new Error(`${i}: prepare envelope expired or clock-skewed (ageMs=${m}, max=${p})`);if(r&&!new Set(r).has(e.provider))throw new Error(`${i}: provider ${e.provider} not allowed here`);if(o&&!new Set(o).has(e.kind))throw new Error(`${i}: kind ${e.kind} not allowed here`);return!0}var Ls,ar,Ms,K=nt(()=>{Ls=2,ar=300*1e3,Ms=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});import{createHash as iS}from"node:crypto";function lS(e){let t=String(e||"").toLowerCase();return Xu.includes(t)||/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(t)}function uS(e){let t={};for(let[n,r]of Object.entries(e||{}))lS(n)||(t[n]=r);return t}function dS(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 pS(e,t){return new URL(String(e)).origin===new URL(String(t)).origin}function mS(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)),s=[...new Set([...Xu,...o])].sort().map(c=>`${c}=${r[c]??""}`).join(`
|
|
2
|
-
`),a=iS("sha256").update(s).digest("hex").slice(0,32);return`${e} ${t} ${a}`}function fS(e,t){let n=Number(t);return Number.isFinite(n)&&n>0?Math.min(n*1e3,Ku):Math.min(250*2**e,Ku)+Math.floor(Math.random()*100)}async function gS(e,{fetchImpl:t,method:n,headers:r,body:o,timeoutMs:i}){let s=new AbortController,a=setTimeout(()=>s.abort(),i);try{let c=String(e),l={...r||{}};for(let u=0;u<=Yu;u+=1){let d=await t(c,{method:n,headers:l,body:o,signal:s.signal,redirect:"manual"}),p=await d.text(),m=null;if(p)try{m=JSON.parse(p)}catch{m=null}if(cS.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===Yu)throw new Error(`HTTP redirect loop for ${e}`);let f=dS(d.headers?.get?.("location"),c);pS(f,c)||(l=uS(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(a)}}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(),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):aS,c=async()=>{let m;for(let f=0;f<=a;f++)try{return await gS(e,{fetchImpl:n,method:o,headers:i,body:s,timeoutMs:r})}catch(h){m=h;let g=h?.status,y=h?.name==="AbortError",S=new Set([408,425,429]),w=g!=null?S.has(g)||sS.has(g)&&Gu.has(o):!y&&Gu.has(o);if(f===a||!w)throw h;await hS(fS(f,h?.retryAfter))}throw m};if(!(t.dedupe!==!1&&o==="GET"&&s==null))return c();let u=mS(o,e,i),d=Fs.get(u);if(d)return d;let p=c().finally(()=>Fs.delete(u));return Fs.set(u,p),p}async function ie(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 ln(e,t,n){let r=Array.from(e),o=Math.max(1,Math.min(Number(t)||1,r.length||1)),i=new Array(r.length),s=0;return await Promise.all(Array.from({length:o},async()=>{for(;s<r.length;){let a=s++;i[a]=await n(r[a],a)}})),i}var sS,Gu,aS,Ku,Xu,cS,Yu,Fs,hS,R=nt(()=>{sS=new Set([408,425,429,500,502,503,504]),Gu=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),aS=2,Ku=4e3,Xu=["authorization","x-api-key","x-tensor-api-key","0x-api-key","api-key","cookie","proxy-authorization"],cS=new Set([301,302,303,307,308]),Yu=3;Fs=new Map;hS=e=>new Promise(t=>setTimeout(t,e))});function bo(e){return qs.get(Number(e))||null}function yS({key:e,chainId:t,name:n,rpcEnv:r=[]}){if(!e)throw new Error("registerChain requires a key");if(!Number.isInteger(Number(t)))throw new Error("registerChain requires a numeric chainId");let o={chainId:Number(t),name:n||e,rpcEnv:r,evm:!0};return cr[e]=o,qs.set(o.chainId,o),o}function Hs(e,t=process.env){let n=bo(e);if(!n)return null;for(let r of n.rpcEnv){let o=(t[r]||"").trim();if(o)return o}return null}function js(e){return qs.has(Number(e))}var cr,qs,Vs=nt(()=>{cr={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}},qs=new Map(Object.values(cr).map(e=>[e.chainId,e]))});var xo={};Vu(xo,{PUBLIC_RPC_FALLBACKS:()=>Ws,erc20Allowance:()=>Ys,erc20BalanceOf:()=>ur,resolveRpcUrl:()=>Gs,rpcBlockNumber:()=>lr,rpcCall:()=>M,rpcChainId:()=>Ks,rpcGetBalance:()=>Ft,rpcHealth:()=>un,rpcHealthAll:()=>Xs,transactionReceipt:()=>dr});import{Interface as bS,getAddress as wS}from"ethers";function dt(e,t){try{return wS(e).toLowerCase()}catch{throw new Error(`${t} must be a valid EVM address`)}}function xS(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 zs(e){return e==null?null:Number.parseInt(String(e),16)}function Gs(e,{rpcUrl:t,env:n=process.env}={}){if(t)return t;let r=Hs(e,n);return r||Ws[Number(e)]||null}function vS(e){let t=String(e||""),n=t.toLowerCase();if(t!==t.trim()||!/^[a-zA-Z0-9_]+$/.test(t)||!SS.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 M(e,t,n=[],r={}){let o=String(t||"");vS(o);let i=Gs(e,r);if(!i)throw new Error(`No RPC URL for chainId ${e} (set env from chain registry rpcEnv or pass rpcUrl)`);let a=await b(i,{method:"POST",body:{jsonrpc:"2.0",id:1,method:t,params:n},fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3});if(a?.error){let c=new Error(a.error.message||JSON.stringify(a.error));throw c.code=a.error.code,c}return a.result}async function un(e,t={}){let n=await M(e,"eth_blockNumber",[],t),r=parseInt(n,16),o=await M(e,"eth_chainId",[],t),i=parseInt(o,16);return{ok:Number.isFinite(r)&&i===Number(e),chainId:Number(e),reportedChainId:i,blockNumber:r,name:bo(e)?.name||null}}async function lr(e,t={}){let n=await M(e,"eth_blockNumber",[],t);return parseInt(n,16)}async function Ks(e,t={}){let n=await M(e,"eth_chainId",[],t);return parseInt(n,16)}async function Ft(e,t,n={}){if(!t)throw new Error("rpcGetBalance requires address");let r=await M(e,"eth_getBalance",[t,"latest"],n);return{chainId:Number(e),address:t,balanceWei:BigInt(r).toString(),balanceHex:r}}async function Ys(e={},t={}){let n=Number(e.chainId??t.chainId??1),r=dt(e.token||e.tokenAddress,"token"),o=dt(e.owner,"owner"),i=dt(e.spender,"spender"),s=wo.encodeFunctionData("allowance",[o,i]),a=await M(n,"eth_call",[{to:r,data:s},e.blockTag||"latest"],t),c=wo.decodeFunctionResult("allowance",a),l=BigInt(c[0]);return{chainId:n,token:r,owner:o,spender:i,allowance:l.toString(),allowanceHex:`0x${l.toString(16)}`,blockTag:e.blockTag||"latest"}}async function ur(e={},t={}){let n=Number(e.chainId??t.chainId??1),r=dt(e.token||e.tokenAddress,"token"),o=dt(e.account||e.owner||e.address,"account"),i=wo.encodeFunctionData("balanceOf",[o]),s=await M(n,"eth_call",[{to:r,data:i},e.blockTag||"latest"],t),a=wo.decodeFunctionResult("balanceOf",s),c=BigInt(a[0]);return{chainId:n,token:r,account:o,balance:c.toString(),balanceHex:`0x${c.toString(16)}`,blockTag:e.blockTag||"latest"}}async function dr(e={},t={}){let n=Number(e.chainId??t.chainId??1),r=xS(e.txHash||e.hash||e.transactionHash),o=await M(n,"eth_getTransactionReceipt",[r],t);if(!o)return{ok:!1,chainId:n,txHash:r,status:"pending",receipt:null,reason:"receipt pending"};let i=zs(o.status),s=i===1,a=i===1?"success":i===0?"reverted":"unknown",c=s?null:a==="reverted"?"transaction reverted":"unknown receipt status",l=e.expectedTo?dt(e.expectedTo,"expectedTo"):null,u=o.to?dt(o.to,"receipt.to"):null;return l&&u!==l&&(s=!1,c=`to mismatch: expected ${l}, got ${u||"null"}`),{ok:s,chainId:n,txHash:r,status:a,reason:c,statusCode:i,to:u,from:o.from?dt(o.from,"receipt.from"):null,blockNumber:zs(o.blockNumber),transactionIndex:zs(o.transactionIndex),logs:Array.isArray(o.logs)?o.logs:[],receipt:o}}async function Xs(e={}){let t=e.chainIds||Object.values(cr).map(r=>r.chainId),n={};return await Promise.all(t.map(async r=>{if(!js(r)&&!Ws[r]&&!Gs(r,e)){n[r]={ok:!1,error:"no rpc configured",chainId:r};return}try{n[r]=await un(r,e)}catch(o){n[r]={ok:!1,chainId:r,error:String(o.message||o)}}})),n}var wo,Ws,SS,re=nt(()=>{R();Vs();wo=new bS(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);Ws={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"};SS=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/});import{readFileSync as TS}from"node:fs";import{homedir as CS}from"node:os";import{join as Eo}from"node:path";function NS(){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=CS();if(process.env.ORACLE_PUBLIC_DESKTOP==="1"){let n=(process.env.ORACLE_CONFIG_DIR||Eo(t,".config","oracle")).trim();return[e,Eo(n,"exec.env")].filter(Boolean)}return[e,Eo(t,".config","oracle","exec.env"),Eo(t,".config","mad-desk","exec.env")].filter(Boolean)}function Zu(e,t,n){let r=e??process.env[t]??process.env[n];if(!String(r||"").trim())for(let o of NS())try{let i=TS(o,"utf8"),s=i.match(new RegExp(`^${t}=(.*)$`,"m"))||i.match(new RegExp(`^${n}=(.*)$`,"m"));if(s&&(r=s[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 ed=nt(()=>{});var td=nt(()=>{});import{createHash as OS,createHmac as RS,timingSafeEqual as _$}from"node:crypto";function Js(e){return Array.isArray(e)?`[${e.map(Js).join(",")}]`:e&&typeof e=="object"?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${Js(e[t])}`).join(",")}}`:JSON.stringify(e??null)}function $S(e,{required:t=!1}={}){try{return Zu(e,"ORACLE_ROUTE_ATTESTATION_SECRET","MAD_ROUTE_ATTESTATION_SECRET")}catch(n){if(t)throw n;return null}}function od(e){let{signature:t,...n}=e;return n}function id(e,{secret:t}={}){let n=$S(t);return n?{...e,signature:RS("sha256",n).update(Js(od(e))).digest("hex")}:e}function LS(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 OS("sha256").update(Buffer.from(t.slice(2),"hex")).digest("hex")}function ee(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 id({...od(e),calldataHash:LS(r)},{secret:o})}function Qs(e,t=0){let n=Number(e);return Number.isFinite(n)?n:t}function MS(e){let t=e==null?nd: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,nd)}function ge({liquidityUsd:e,priceChange5m:t=0,quoteAgeMs:n=0,crossChain:r=!1,requestedCapBps:o}={}){let i=Qs(e,0),s=i>0?i>=25e4?5:i>=1e5?10:i>=5e4?20:i>=1e4?40:70:r?30:10,a=Math.min(60,Math.abs(Qs(t,0))*2),c=Math.min(40,Math.floor(Math.max(0,Qs(n,0))/5e3)*5),l=Math.max(25,Math.ceil(20+s+a+c)),u=MS(o);return{mode:"auto",requiredBps:l,selectedBps:Math.min(l,u),capBps:u,executable:l<=u}}function BS({chainId:e,venue:t,quoteAmountOut:n,liquidityUsd:r,priceChange5m:o=0,quoteAgeMs:i=0,crossChain:s=!1,requestedCapBps:a,quotedAtMs:c=Date.now(),ttlMs:l=rd,secret:u}={}){let d=BigInt(n??0);if(d<=0n)throw new Error("auto-slippage guard requires positive quoteAmountOut");let p=ge({liquidityUsd:r,priceChange5m:o,quoteAgeMs:i,crossChain:s,requestedCapBps:a});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)||rd)),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 y=Number((d-g)*10000n/(d===0n?1n:d));if(y>p.capBps)throw new Error(`auto-slippage: realised floor implies ${y} bps, above cap ${p.capBps} \u2014 refusing to issue a guard weaker than advertised`);return id({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 W(e,{chainId:t,venue:n,amountOut:r,liquidityUsd:o,priceChange5m:i,crossChain:s,requestedCapBps:a,quotedAtMs:c=Date.now(),ttlMs:l}={}){let u=BS({chainId:t,venue:n,quoteAmountOut:r,liquidityUsd:o,priceChange5m:i,crossChain:s,requestedCapBps:a,quotedAtMs:c,ttlMs:l});return{...e,autoSlippage:u,amountOutMinimum:u.minAmountOut}}var nd,rd,ye=nt(()=>{ed();td();nd=100,rd=2e4});function Ca(e){let t=String(e||"").trim();return/^0x[0-9a-fA-F]{40}$/.test(t)?t:ht}var ht,Ko=nt(()=>{ht="0x000000000000000000000000000000000000dEaD"});var ti={};Vu(ti,{ACROSS_API:()=>nm,HOP_API:()=>rm,RELAY_API:()=>om,acrossHealth:()=>La,acrossSuggestedFees:()=>Zo,hopHealth:()=>Ma,hopQuote:()=>ei,relayHealth:()=>Ba,relayPrepare:()=>Ua,relayQuote:()=>Ar});async function La(e={}){try{return{ok:!0,estimatedFillTimeSec:(await Zo({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 Zo(e={},t={}){let{token:n,destinationToken:r=n,originChainId:o,destinationChainId:i,amount:s}=e;if(!n||o==null||i==null||!s)throw new Error("acrossSuggestedFees requires token, originChainId, destinationChainId, amount");let a=new URLSearchParams({token:n,destinationToken:r,originChainId:String(o),destinationChainId:String(i),amount:String(s)}),c=(t.baseUrl||process.env.ACROSS_API_URL||nm).replace(/\/$/,"");return b(`${c}/suggested-fees?${a}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function Ma(e={}){try{let t=await ei({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 ei(e={},t={}){let{amount:n,token:r="ETH",fromChain:o="ethereum",toChain:i="arbitrum"}=e;if(!n)throw new Error("hopQuote requires amount");let s=e.slippage==null?void 0:Math.round(Number(e.slippage)*100),a=ge({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 c=new URLSearchParams({amount:String(n),token:r,fromChain:o,toChain:i,slippage:String(a.selectedBps/100)}),l=(t.baseUrl||process.env.HOP_API_URL||rm).replace(/\/$/,""),u=await b(`${l}/quote?${c}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),d=u?.estimatedRecieved||u?.estimatedReceived;return d?W(u,{chainId:Number(e.originChainId||e.chainId||DE[o]||0),venue:u?.tx?.to||"hop",amountOut:d,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,crossChain:o!==i,requestedCapBps:e.maxSlippageBps??e.slippageBps??s}):{...u,autoSlippagePolicy:a}}async function Ba(e={}){try{let t=await Ar({user:ht,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 Ar(e={},t={}){let{user:n=ht,originChainId:r,destinationChainId:o,originCurrency:i="0x0000000000000000000000000000000000000000",destinationCurrency:s="0x0000000000000000000000000000000000000000",amount:a,tradeType:c="EXACT_INPUT"}=e;if(r==null||o==null||!a)throw new Error("relayQuote requires originChainId, destinationChainId, amount");let l=ge({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||om).replace(/\/$/,""),d=await b(`${u}/quote`,{method:"POST",body:{user:n,originChainId:Number(r),destinationChainId:Number(o),originCurrency:i,destinationCurrency:s,amount:String(a),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}:W(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 Ua(e={},t={}){let n=await Ar(e,t),r=Number(e.originChainId),o=(n.steps||[]).flatMap(a=>(a.items||[]).filter(c=>c?.data?.to&&c?.data?.data).map(c=>({stepId:a.id,...c.data})));if(!o.length)throw new Error("relay: quote returned no executable transaction items");let i=String(n?.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:r,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:ee(n.autoSlippage,{chainId:r,venue:a.to,data:a.data})}));return O({provider:"relay",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:r,quote:n,autoSlippage:n.autoSlippage,transactions:s},{provider:"relay",kind:"relay-tx"})}var nm,rm,om,DE,ni=nt(()=>{R();ye();Ko();K();nm="https://across.to/api",rm="https://api.hop.exchange/v1",om="https://api.relay.link",DE={ethereum:1,optimism:10,bsc:56,polygon:137,arbitrum:42161,avalanche:43114,base:8453}});K();re();import{Interface as ad,getAddress as mr,isAddress as US}from"ethers";R();var ES="https://api.dexscreener.com",kS=Object.freeze({1:"ethereum",10:"optimism",56:"bsc",137:"polygon",8453:"base",42161:"arbitrum",43114:"avalanche",999:"hyperevm",4663:"robinhood"}),$e=e=>String(e??"").toLowerCase(),AS=e=>Array.isArray(e)?e:e==null?[]:[e];function IS(e,t,n){let r=$e(t),o=$e(n),i=$e(e?.baseToken?.address),s=$e(e?.quoteToken?.address);return i===r&&s===o||i===o&&s===r}function _S(e){let t=Number(e?.liquidity?.usd);return Number.isFinite(t)&&t>=0?t:null}function So(e={}){return(e.baseUrl||process.env.DEXSCREENER_API_URL||ES).replace(/\/$/,"")}async function Qu(e={}){let n=(await b(`${So(e)}/latest/dex/search?q=USDC`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??12e3}))?.pairs?.length||0;return{ok:n>0,pairSample:n}}async function qt(e,t={}){if(!e)throw new Error("tokenAddress required");return b(`${So(t)}/latest/dex/tokens/${e}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function pr(e,t={}){if(!e)throw new Error("query required");return b(`${So(t)}/latest/dex/search?q=${encodeURIComponent(e)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function Ju(e,t,n={}){if(!e||!t)throw new Error("chainId and pairAddress required");return b(`${So(n)}/latest/dex/pairs/${e}/${t}`,{fetchImpl:n.fetchImpl,timeoutMs:n.timeoutMs??12e3})}async function vo({chainId:e,tokenA:t,tokenB:n,dexIds:r=[]}={},o={}){if(e==null||!t||!n)throw new Error("chainId, tokenA, and tokenB required");let i=$e(kS[Number(e)]||e),s=new Set(AS(r).filter(Boolean).map($e)),a=[...new Set([t,n].map(p=>String(p)).filter(Boolean))],c=await Promise.allSettled(a.map(p=>qt(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=`${$e(m?.chainId)}:${$e(m?.dexId)}:${$e(m?.pairAddress)}`;l.has(f)||(l.add(f),u.push(m))}return u.filter(p=>$e(p?.chainId)===i).filter(p=>IS(p,t,n)).filter(p=>!s.size||s.has($e(p?.dexId))).map(p=>({pairAddress:p.pairAddress??null,dexId:p.dexId??null,chainId:p.chainId??null,liquidityUsd:_S(p),pairCreatedAt:p.pairCreatedAt??null})).filter(p=>p.liquidityUsd!=null).sort((p,m)=>m.liquidityUsd-p.liquidityUsd)[0]??null}ye();K();var pe={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"}},DS=[100,500,3e3,1e4],ko=new ad(["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)"]),sd=new ad(["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)"]),cd="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",ld="0x0000000000000000000000000000000000000000",Zs=[100,500,2500,1e4],FS={56:{pancakeswap:{name:"pancakeswap",quoter:"0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997",router:"0x13f4EA83D0bd40E75C8222255bc855a974568Dd4",feeTiers:Zs}},8453:{pancakeswap:{name:"pancakeswap",quoter:"0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997",router:"0x13f4EA83D0bd40E75C8222255bc855a974568Dd4",feeTiers:Zs}},42161:{pancakeswap:{name:"pancakeswap",quoter:"0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997",router:"0x13f4EA83D0bd40E75C8222255bc855a974568Dd4",feeTiers:Zs}},999:{hyperswap:{name:"hyperswap",quoter:"0x03A918028f22D9E1473B7959C927AD7425A45C7C",router:"0x4E2960a8cd19B467b82d26D83fAcb0fAE26b094D"}}};function ta(e,t){let n=Number(e),r=pe[n];if(!r)throw new Error(`uniswap-v3: unsupported chainId ${e} (supported: ${Object.keys(pe).join(", ")})`);let o=FS[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 i=String(t).toLowerCase();if(i===r.name&&r.quoter&&r.router)return{chainId:n,venue:r.name,...r};let s=o,a=s[i];if(!a){let c=[...r.quoter&&r.router?[r.name]:[],...Object.keys(s)].join(", ");throw new Error(`uniswap-v3: unknown venue "${t}" on chain ${n} (known: ${c})`)}return{chainId:n,venue:i,...r,quoter:a.quoter,router:a.router,feeTiers:a.feeTiers||null}}function ea(e,t){let n=pe[Number(t)];if(!e||e===cd||e===ld||/^eth$/i.test(String(e)))return mr(n.weth);let r=String(e);if(/^weth$/i.test(r))return mr(n.weth);if(/^usdc$/i.test(r))return mr(n.usdc);if(!US(r))throw new Error(`invalid token address: ${e}`);return mr(r)}function qS(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 HS(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 pt(e={},t={}){let{chainId:n,quoter:r,router:o,feeTiers:i}=ta(e.chainId??8453,e.venue),s=ea(e.tokenIn||"WETH",n),a=ea(e.tokenOut||pe[n].usdc,n),c=BigInt(e.amountIn??0);if(c<=0n)throw new Error("amountIn required (raw base units)");let l=i&&i.length?i:DS,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=ko.encodeFunctionData("quoteExactInputSingle",[{tokenIn:s,tokenOut:a,amountIn:c,fee:h,sqrtPriceLimitX96:0n}]);try{let y=await M(n,"eth_call",[{to:r,data:g},"latest"],t);if(!y||y==="0x"){d.push({fee:h,ok:!1,error:"empty result"});continue}let S=ko.decodeFunctionResult("quoteExactInputSingle",y),w={fee:h,ok:!0,amountOut:S[0].toString(),sqrtPriceX96After:S[1].toString(),initializedTicksCrossed:Number(S[2]),gasEstimate:S[3].toString()};d.push(w),(!p||BigInt(w.amountOut)>BigInt(p.amountOut))&&(p=w)}catch(y){d.push({fee:h,ok:!1,error:String(y.message||y).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 vo({chainId:n,tokenA:s,tokenB:a,dexIds:qS(e.venue)},t).catch(()=>null):null,f=e.liquidityUsd??m?.liquidityUsd??null;return W({venue:"uniswap-v3",chainId:n,chain:pe[n].name,quoter:r,tokenIn:s,tokenOut:a,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 ud(e={},t={}){let{chainId:n,quoter:r,router:o}=ta(e.chainId??8453),i=(e.tokens||[]).map(p=>ea(p,n)),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 c=HS(i,s),l=ko.encodeFunctionData("quoteExactInput",[c,a]),u=await M(n,"eth_call",[{to:r,data:l},"latest"],t),d=ko.decodeFunctionResult("quoteExactInput",u);return W({venue:"uniswap-v3",chainId:n,chain:pe[n].name,quoter:r,tokens:i,fees:s,path:c,amountIn:a.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 na(e={},t={}){let n=Number(e.chainId??8453),r=e.amountIn??"1000000000000000",o=await pt({chainId:n,tokenIn:pe[n].weth,tokenOut:pe[n].usdc,amountIn:r,fee:e.fee},t),i=Number(o.amountOut)/1e6;return{...o,amountOutUsdc:i,pair:"WETH/USDC"}}async function dd(e={},t={}){let n=Number(e.chainId??8453),r=ta(n,e.venue),o=mr(e.recipient),i=String(e.tokenIn||"WETH"),s=!e.tokenIn||i===cd||i===ld||/^eth$/i.test(i),a=await pt(e,t),c=sd.encodeFunctionData("exactInputSingle",[{tokenIn:a.tokenIn,tokenOut:a.tokenOut,fee:a.fee,recipient:o,amountIn:BigInt(a.amountIn),amountOutMinimum:BigInt(a.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=sd.encodeFunctionData("multicall",[d,[c]]);return O({provider:"uniswap-v3",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:n,deadline:d,quote:a,autoSlippage:a.autoSlippage,requiresApproval:s?null:{token:a.tokenIn,spender:r.router,amount:a.amountIn},transaction:{chainId:n,from:o,to:r.router,data:p,value:s?a.amountIn:"0",slippageGuard:ee(a.autoSlippage,{chainId:n,venue:r.router,data:p})}},{provider:"uniswap-v3",kind:"univ3-swap-tx"})}async function pd(e={}){let t=Number(e.chainId??8453);try{let n=await na({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 md(){return Object.entries(pe).map(([e,t])=>({chainId:Number(e),name:t.name,quoter:t.quoter,weth:t.weth,usdc:t.usdc}))}re();import{AbiCoder as VS,Interface as gd,getAddress as We,isAddress as Ao,keccak256 as zS}from"ethers";ye();K();var WS=VS.defaultAbiCoder(),dn="0x0000000000000000000000000000000000000000",Ge={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"}},GS=[{fee:100,tickSpacing:1},{fee:500,tickSpacing:10},{fee:3e3,tickSpacing:60},{fee:1e4,tickSpacing:200},{fee:25e3,tickSpacing:8}],fd=new gd(["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)"]),q$=new gd(["function execute(bytes commands,bytes[] inputs,uint256 deadline) payable"]);var KS="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE";function yd(e){let t=Number(e),n=Ge[t];if(!n)throw new Error(`uniswap-v4: unsupported chainId ${e} (supported: ${Object.keys(Ge).join(", ")})`);return{chainId:t,...n}}function hd(e,t){let n=Ge[Number(t)];if(!e||e===KS||e===dn||/^eth$/i.test(String(e)))return We(n.weth);let r=String(e);if(/^weth$/i.test(r))return We(n.weth);if(/^usdc$/i.test(r)||/^usdg$/i.test(r))return We(n.usdc);if(!Ao(r))throw new Error(`invalid token address: ${e}`);return We(r)}function YS({currency0:e,currency1:t,fee:n,tickSpacing:r,hooks:o=dn}){let i=We(e),s=We(t);if(i.toLowerCase()===s.toLowerCase())throw new Error("poolKey currencies must differ");let[a,c]=i.toLowerCase()<s.toLowerCase()?[i,s]:[s,i],l=o&&Ao(o)?We(o):dn;return zS(WS.encode(["address","address","uint24","int24","address"],[a,c,Number(n),Number(r),l]))}function XS({tokenIn:e,tokenOut:t,fee:n,tickSpacing:r,hooks:o=dn}){let i=We(e),s=We(t),[a,c]=i.toLowerCase()<s.toLowerCase()?[i,s]:[s,i],l=i.toLowerCase()===a.toLowerCase();return{poolKey:{currency0:a,currency1:c,fee:Number(n),tickSpacing:Number(r),hooks:o&&Ao(o)?We(o):dn},zeroForOne:l}}var QS=["uniswap-v4","uniswapv4"];async function Io(e={},t={}){let{chainId:n,quoter:r,poolManager:o,universalRouter:i}=yd(e.chainId??8453),s=hd(e.tokenIn||"WETH",n),a=hd(e.tokenOut||Ge[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}]:[...GS],u=e.hooks||dn,d=[],p=null;for(let h of l){let{poolKey:g,zeroForOne:y}=XS({tokenIn:s,tokenOut:a,fee:h.fee,tickSpacing:h.tickSpacing,hooks:u}),S=fd.encodeFunctionData("quoteExactInputSingle",[{poolKey:g,zeroForOne:y,exactAmount:c,hookData:"0x"}]);try{let w=await M(n,"eth_call",[{to:r,data:S},"latest"],t);if(!w||w==="0x"){d.push({...h,ok:!1,error:"empty result"});continue}let x=fd.decodeFunctionResult("quoteExactInputSingle",w),k={fee:h.fee,tickSpacing:h.tickSpacing,ok:!0,amountOut:x[0].toString(),gasEstimate:x[1].toString(),poolKey:g,zeroForOne:y,poolId:YS({...g})};d.push(k),(!p||BigInt(k.amountOut)>BigInt(p.amountOut))&&(p=k)}catch(w){d.push({...h,ok:!1,error:String(w.message||w).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 vo({chainId:n,tokenA:s,tokenB:a,dexIds:QS},t).catch(()=>null):null,f=e.liquidityUsd??m?.liquidityUsd??null;return W({venue:"uniswap-v4",chainId:n,chain:Ge[n].name,poolManager:o,quoter:r,universalRouter:i||null,tokenIn:s,tokenOut:a,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"&&Ao(e.recipient)&&e.slippageBps!=null},{chainId:n,venue:i||r,amountOut:p.amountOut,liquidityUsd:f,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps})}async function bd(){return Object.entries(Ge).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 wd(e={}){let t=yd(e.chainId??8453),n=await M(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}}re();var pn=Object.freeze(["blockNumber","nativeBalance","tokenBalance","resolveToken","resolvePools","scanBlocks","scoreRisk","quote","sellSimulation","prepareUnsignedTx"]),D=Object.freeze({LIVE:"LIVE",CACHED:"CACHED",STALE:"STALE",UNKNOWN:"UNKNOWN",UNAVAILABLE:"UNAVAILABLE"}),B=Object.freeze({PASS:"PASS",CAUTION:"CAUTION",FAIL:"FAIL",UNKNOWN:"UNKNOWN"}),ZS=/^0x[0-9a-fA-F]{40}$/;function xd(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,i]of(e.venues||[]).entries()){let s=`venues[${o}]`;if(!i||typeof i!="object"){t.push(`${s} must be an object`);continue}ZS.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||n.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 r=e.capabilities||{};for(let o of Object.keys(r))pn.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 Sd(e){let{ok:t,errors:n,warnings:r}=xd(e);if(!t)throw new Error(`invalid scanner for ${e?.key??"<unknown>"}:
|
|
3
|
-
|
|
4
|
-
- `)}`);let o=e.capabilities||{},i=pn.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:r,capabilities(){return{chainId:e.chainId,key:e.key,supported:[...i],unsupported:pn.filter(a=>!i.includes(a))}},supports(a){return i.includes(a)}};for(let a of pn)i.includes(a)?s[a]=async(...c)=>o[a](...c,{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 fr=new Map;function _o(e){let t=Sd(e);return fr.set(t.chainId,t),t}function ra(e){return fr.get(Number(e))||null}function oa(){return[...fr.values()]}function ev(){let e={};for(let t of fr.values())e[t.chainId]={key:t.key,name:t.name,...t.capabilities(),venueCount:t.venues.length,failClosed:t.venues.length===0};return{generatedAt:new Date().toISOString(),chainCount:fr.size,capabilities:[...pn],chains:e}}re();var sa={getAmountsOut:"d06ca61f",swapExactTokensForTokens:"38ed1739",swapExactETHForTokens:"7ff36ab5"},Ie=e=>BigInt(e).toString(16).padStart(64,"0"),hr=e=>e.slice(2).toLowerCase().padStart(64,"0");function tv(e,t){return`0x${sa.getAmountsOut}`+Ie(e)+Ie(64)+Ie(t.length)+t.map(hr).join("")}function nv(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 i=128+o*64;if(t.length<i+64)return null;r.push(BigInt(`0x${t.slice(i,i+64)}`))}return r}function ia(e,t="router"){return(e?.venues||[]).find(r=>r.kind===t)?.address??null}var aa=100;function rv(e,t){let n=Number(t);if(!Number.isFinite(n)||n<0)throw new Error("slippageBps must be a non-negative number");if(n>aa)throw new Error(`slippageBps ${n} exceeds the ${aa} 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 vd(e){let{chainId:t,wrappedNative:n}=e;async function r(o,i,s,a){let c=await M(t,"eth_call",[{to:o,data:tv(i,s)},"latest"],a);return nv(c?.result??c)}return{async quote({tokenIn:o,tokenOut:i,amountIn:s,path:a},c={}){let l=ia(c.scanner);if(!l)return{chainId:t,evidence:D.UNAVAILABLE,reason:"no verified router configured for this chain; quoting stays fail-closed rather than guessing a venue address"};let u=a||[o,i];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,s,u,c);return d?{chainId:t,router:l,path:u,amountIn:String(s),amountOut:d[d.length-1].toString(),hops:u.length-1,evidence:D.LIVE,note:"exact-input quote at current reserves; not a guaranteed fill"}:{chainId:t,router:l,path:u,evidence:D.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 c=ia(a.scanner),l=s||n;if(l&&String(o).toLowerCase()===String(l).toLowerCase())return{chainId:t,token:o,verdict:B.UNKNOWN,evidence:D.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:D.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,i,[l,o],a);if(!u)return{chainId:t,token:o,verdict:B.FAIL,evidence:D.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:D.LIVE,leg:"buy",reason:"buy leg quotes zero output"};let p=await r(c,d,[o,l],a);if(!p)return{chainId:t,token:o,verdict:B.FAIL,evidence:D.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(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,token:o,base:l,router:c,verdict:h,reason:g,amountIn:String(i),bought:d.toString(),returned:m.toString(),retentionBps:f,evidence:D.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:c=50,deadlineSeconds:l=900,path:u},d={}){let p=d.scanner,m=ia(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(a||""))throw new Error("prepareUnsignedTx requires a valid recipient address");let f=u||[o,i],h=await this.quote({tokenIn:o,tokenOut:i,amountIn:s,path:f},d);if(h.evidence!==D.LIVE)throw new Error(`cannot prepare without a live quote (${h.evidence}: ${h.reason??"no reason given"})`);let g=rv(h.amountOut,c);if(g<=0n)throw new Error("computed minOut is zero -- refusing to prepare");let y=BigInt(Math.floor(Date.now()/1e3)+Number(l)),S=n&&f[0].toLowerCase()===n.toLowerCase()&&d.useNative,w=S?`0x${sa.swapExactETHForTokens}`+Ie(g)+Ie(128)+hr(a)+Ie(y)+Ie(f.length)+f.map(hr).join(""):`0x${sa.swapExactTokensForTokens}`+Ie(s)+Ie(g)+Ie(160)+hr(a)+Ie(y)+Ie(f.length)+f.map(hr).join("");return{unsigned:!0,signedBy:"user-wallet",chainId:t,tx:{to:m,data:w,value:S?`0x${BigInt(s).toString(16)}`:"0x0"},guard:{quotedOut:h.amountOut,minOut:g.toString(),slippageBps:c,maxSlippageBps:aa,deadline:y.toString()},requires:S?[]:[{step:"approve",token:f[0],spender:m,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."}}}}re();var ov=[100,500,3e3,1e4],Ed={quoteExactInputSingle:"c6a5026a",exactInputSingle:"04e45aaf"},Ht=e=>BigInt(e).toString(16).padStart(64,"0"),gr=e=>e.slice(2).toLowerCase().padStart(64,"0"),kd=/^0x[0-9a-fA-F]{40}$/,la=100;function iv(e,t){let n=Number(t);if(!Number.isFinite(n)||n<0)throw new Error("slippageBps must be a non-negative number");if(n>la)throw new Error(`slippageBps ${n} exceeds the ${la} 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 ca(e,t){return(e?.venues||[]).find(n=>n.kind===t)?.address??null}function Ad(e){let{chainId:t,wrappedNative:n}=e;async function r({quoter:i,tokenIn:s,tokenOut:a,amountIn:c,fee:l},u){let d=`0x${Ed.quoteExactInputSingle}`+gr(s)+gr(a)+Ht(c)+Ht(l)+Ht(0),p=await M(t,"eth_call",[{to:i,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:i,tokenIn:s,tokenOut:a,amountIn:c},l){let u=[],d=null;for(let p of ov){let m=await r({quoter:i,tokenIn:s,tokenOut:a,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:i,tokenOut:s,amountIn:a},c={}){let l=ca(c.scanner,"quoter");if(!l)return{chainId:t,evidence:D.UNAVAILABLE,reason:"no verified quoter configured for this chain; quoting stays fail-closed rather than guessing a venue address"};for(let p of[i,s])if(!kd.test(p||""))throw new Error("quote requires valid 20-byte addresses");let{best:u,tried:d}=await o({quoter:l,tokenIn:i,tokenOut:s,amountIn:a},c);return u?{chainId:t,venue:"uniswap-v3",quoter:l,tokenIn:i,tokenOut:s,amountIn:String(a),amountOut:u.amountOut.toString(),fee:u.fee,triedFeeTiers:d,evidence:D.LIVE,note:"exact-input single-hop quote at current tick; not a guaranteed fill"}:{chainId:t,quoter:l,tokenIn:i,tokenOut:s,triedFeeTiers:d,evidence:D.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},c={}){let l=ca(c.scanner,"quoter"),u=a||n;if(u&&String(i).toLowerCase()===String(u).toLowerCase())return{chainId:t,token:i,verdict:B.UNKNOWN,evidence:D.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:i,verdict:B.UNKNOWN,evidence:D.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:i,amountIn:s},c);if(!d.best)return{chainId:t,token:i,verdict:B.FAIL,evidence:D.LIVE,leg:"buy",reason:"no V3 pool priced the buy leg on any fee tier"};let p=await o({quoter:l,tokenIn:i,tokenOut:u,amountIn:d.best.amountOut},c);if(!p.best)return{chainId:t,token:i,verdict:B.FAIL,evidence:D.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(s)),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:i,base:u,verdict:h,reason:g,amountIn:String(s),bought:d.best.amountOut.toString(),returned:m.toString(),retentionBps:f,buyFee:d.best.fee,sellFee:p.best.fee,evidence:D.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:c,slippageBps:l=50,fee:u},d={}){let p=ca(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(!kd.test(c||""))throw new Error("prepareUnsignedTx requires a valid recipient address");let m=await this.quote({tokenIn:i,tokenOut:s,amountIn:a},d);if(m.evidence!==D.LIVE)throw new Error(`cannot prepare without a live quote (${m.evidence}: ${m.reason??"no reason given"})`);let f=u??m.fee,h=iv(m.amountOut,l);if(h<=0n)throw new Error("computed minOut is zero -- refusing to prepare");let g=`0x${Ed.exactInputSingle}`+gr(i)+gr(s)+Ht(f)+gr(c)+Ht(a)+Ht(h)+Ht(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:la,fee:f},requires:[{step:"approve",token:i,spender:p,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 Po={decimals:"0x313ce567",symbol:"0x95d89b41",name:"0x06fdde03",totalSupply:"0x18160ddd",owner:"0x8da5cb5b"};function Id(e){if(!e||e==="0x")return null;try{return BigInt(e)}catch{return null}}function _d(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),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 sv(e){let{chainId:t}=e;async function n(r,o,i){return M(t,"eth_call",[{to:r,data:o},"latest"],i)}return{async blockNumber(r={}){let o=await lr(t,r);return{chainId:t,blockNumber:o?.blockNumber??o,evidence:D.LIVE}},async nativeBalance(r,o={}){let i=await Ft(t,r,o);return{chainId:t,address:r,wei:i?.wei??i?.balance??null,symbol:e.nativeCurrency?.symbol??null,decimals:e.nativeCurrency?.decimals??18,evidence:D.LIVE}},async tokenBalance({token:r,owner:o},i={}){let s=await ur({chainId:t,token:r,owner:o},i);return{chainId:t,token:r,owner:o,raw:s?.balance??s,evidence:D.LIVE}},async resolveToken(r,o={}){if(!/^0x[0-9a-fA-F]{40}$/.test(r||""))return{chainId:t,token:r,evidence:D.UNKNOWN,error:"resolveToken needs a 20-byte address; symbol lookup is a market-data concern"};let[i,s,a,c]=await Promise.all([n(r,Po.decimals,o).catch(()=>null),n(r,Po.symbol,o).catch(()=>null),n(r,Po.name,o).catch(()=>null),n(r,Po.totalSupply,o).catch(()=>null)]),l=Id(i?.result??i),u=l!==null||s?.result||a?.result;return{chainId:t,address:r,decimals:l===null?null:Number(l),symbol:_d(s?.result??s),name:_d(a?.result??a),totalSupply:(Id(c?.result??c)??null)?.toString()??null,evidence:u?D.LIVE:D.UNKNOWN,warning:u?void 0:"no ERC-20 metadata returned -- may not be a token contract"}},async resolvePools(r,o={}){let i=e.dexscreenerSlug;if(!i)return{chainId:t,token:r,pools:[],evidence:D.UNAVAILABLE,reason:"no dexscreenerSlug configured for this chain; pool discovery is unavailable rather than guessed"};let s=await qt(r,o).catch(()=>null),c=(s?.pairs||s?.data?.pairs||[]).filter(l=>String(l.chainId).toLowerCase()===String(i).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?D.LIVE:D.UNKNOWN}},async scanBlocks({fromBlock:r,toBlock:o,address:i,topics:s,chunkSize:a=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+=a){let p=Math.min(d+a-1,o);u.push([d,p])}for(let[d,p]of u){let m={fromBlock:`0x${d.toString(16)}`,toBlock:`0x${p.toString(16)}`};i&&(m.address=i),s&&(m.topics=s);let f=await M(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:D.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:D.LIVE}},async scoreRisk(r,o={}){let i=[],s=B.PASS,a=u=>{let d={[B.PASS]:0,[B.CAUTION]:1,[B.UNKNOWN]:2,[B.FAIL]:3};d[u]>d[s]&&(s=u)},c=await this.resolveToken(r,o);c.evidence!==D.LIVE?(i.push({check:"erc20-metadata",result:B.UNKNOWN,detail:c.warning}),a(B.UNKNOWN)):i.push({check:"erc20-metadata",result:B.PASS,detail:`${c.symbol} / ${c.decimals}d`});let l=await this.resolvePools(r,o);if(l.evidence===D.UNAVAILABLE)i.push({check:"liquidity",result:B.UNKNOWN,detail:l.reason}),a(B.UNKNOWN);else if(!l.pools.length)i.push({check:"liquidity",result:B.FAIL,detail:"no pool with liquidity found"}),a(B.FAIL);else{let u=l.pools[0],d=u.liquidityUsd??0;d<5e3?(i.push({check:"liquidity",result:B.CAUTION,detail:`top pool only $${d}`}),a(B.CAUTION)):i.push({check:"liquidity",result:B.PASS,detail:`$${d} on ${u.dex}`}),u.createdAt&&Date.now()-u.createdAt<24*3600*1e3&&(i.push({check:"age",result:B.CAUTION,detail:"pool under 24h old"}),a(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)}));i.push({check:"sellability",result:u.verdict,detail:u.retentionBps!=null?`round trip returns ${(u.retentionBps/100).toFixed(2)}% -- ${u.reason}`:u.reason}),a(u.verdict)}else i.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."}),a(B.UNKNOWN);return{chainId:t,token:r,verdict:s,checks:i,note:"Structural checks only. UNKNOWN is not PASS. A token is not tradeable until a sell simulation succeeds."}}}}function ua(e){let n={...sv(e)},r=new Set((e.venues||[]).map(i=>i.kind));e.venueKind==="uniswap-v3"&&r.has("quoter")&&r.has("router")?Object.assign(n,Ad({chainId:e.chainId,wrappedNative:e.wrappedNative})):e.venueKind==="uniswap-v2"&&r.has("router")&&Object.assign(n,vd({chainId:e.chainId,wrappedNative:e.wrappedNative}));let o={};for(let[i,s]of Object.entries(n))o[i]=s.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 mt=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 yr(){return mt.map(e=>_o(ua(e)))}function Pd(e){return _o(ua(e))}var br=new Map,av=Object.keys(pe).map(Number),cv=Object.keys(Ge).map(Number),lv=mt.map(e=>e.chainId),da=new Set,Td=!1;function T(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(Td&&da.has(t))throw new Error(`registerProvider refuses to overwrite built-in provider: ${t}`);return br.set(t,{chainIds:e.chainIds||[],auth:e.auth||"none",description:e.description||"",baseEnv:e.baseEnv||[],...e,id:t}),br.get(t)}function To(e){return br.get(e)||null}function wr({venue:e,op:t}={}){let n=[...br.values()];return e&&(n=n.filter(r=>r.venue===e)),t&&(n=n.filter(r=>r.ops.includes(t))),n}function uv(){da.clear();for(let e of br.keys())da.add(e);Td=!0}T({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"});T({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."});T({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."});T({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"});T({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."});T({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."});T({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."});T({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."});T({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."});T({id:"evm-token-sniper",venue:"evm-token-launches",chainIds:lv,auth:"none",ops:["health","scan"],execution:"prepare",baseEnv:mt.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."});T({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)"});T({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)"});T({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"});T({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."});T({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."});T({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"});T({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."});T({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."});T({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."});T({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."});T({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"});T({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)"});T({id:"dexscreener",venue:"dex",chainIds:[],auth:"none",ops:["health","token","search","pair"],baseEnv:["DEXSCREENER_API_URL"],description:"DexScreener public token/pair discovery"});T({id:"uniswap-v3",venue:"dex",chainIds:av,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"});T({id:"uniswap-v4",venue:"dex",chainIds:cv,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."});T({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)"});T({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)"});T({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)"});T({id:"hop",venue:"bridge",chainIds:[1,10,137,42161],auth:"none",ops:["health","quote"],baseEnv:["HOP_API_URL"],description:"Hop Protocol bridge quotes (public)"});T({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)"});T({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)"});T({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)"});T({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)"});T({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"});T({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"});T({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"});T({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"});T({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"});T({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"});T({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"});T({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)"});T({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"});T({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)"});T({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"});T({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"});T({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."});T({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."});uv();T({id:"polygon-staking",venue:"polygon-staking",chainIds:[137],auth:"none",ops:["health","validators","validatorDetail"],baseEnv:["POLYGON_STAKING_API_URL"],description:"Polygon POS staking validators"});T({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."});T({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."});T({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."});T({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."});T({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)."});T({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."});T({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."});T({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."});T({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."});T({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."});T({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"});T({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)"});T({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)"});T({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)"});T({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)"});T({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)"});T({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)"});T({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)"});T({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)"});T({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)"});T({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."});T({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)"});T({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)"});T({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)"});T({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)"});T({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)"});T({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)"});R();R();var dv="https://api.hyperliquid.xyz/info",pv="https://api.hyperliquid-testnet.xyz/info";function mv({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"?pv:dv}async function Y(e,t={}){if(!e||!e.type)throw new Error("hlInfo requires body.type");let n=mv(t);return b(n,{method:"POST",body:e,fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function Cd(e={}){let t=await Y({type:"allMids"},e),n=t&&typeof t=="object"?Object.keys(t).length:0;return{ok:n>0,midCount:n}}async function rt(e={}){return Y({type:"allMids"},e)}async function Co(e,t={}){if(!e)throw new Error("hlL2Book requires coin");return Y({type:"l2Book",coin:String(e)},t)}async function xr(e={}){return Y({type:"outcomeMeta"},e)}async function No(e,t={}){if(!e)throw new Error("hlClearinghouse requires user address");return Y({type:"spotClearinghouseState",user:e},t)}async function Nd(e,t={}){if(!e)throw new Error("hlUserFills requires user address");return Y({type:"userFills",user:e},t)}async function Oo(e={}){return Y({type:"meta"},e)}async function mn(e={}){let t={type:"metaAndAssetCtxs"};return e.dex&&(t.dex=e.dex),Y(t,e)}async function fn({coin:e,interval:t="1h",startTime:n,endTime:r},o={}){if(!e)throw new Error("hlCandleSnapshot requires coin");let i={type:"candleSnapshot",req:{coin:String(e),interval:t,startTime:n??Date.now()-24*3600*1e3,endTime:r??Date.now()}};return Y(i,o)}async function Od({coin:e,startTime:t,endTime:n},r={}){if(!e)throw new Error("hlFundingHistory requires coin");return Y({type:"fundingHistory",coin:String(e),startTime:t??Date.now()-24*3600*1e3,endTime:n??Date.now()},r)}async function Rd(e,t={}){if(!e)throw new Error("hlOpenOrders requires user");return Y({type:"openOrders",user:e},t)}async function $d(e,t={}){if(!e)throw new Error("hlFrontendOpenOrders requires user");return Y({type:"frontendOpenOrders",user:e},t)}async function Ro(e,t={}){if(!e)throw new Error("hlUserState requires user");return Y({type:"clearinghouseState",user:e},t)}async function $o(e={}){return Y({type:"spotMeta"},e)}var hv=/^0x[0-9a-fA-F]{40}$/,Md="0xdfc24b077bc1425ad1dea75bcb6f8158e10df303";function pa(e,t){let n=String(e||"").trim();if(!hv.test(n))throw new Error(`hl-vaults: ${t} must be a 0x EVM address`);return n.toLowerCase()}function Ld(e){if(e==null||e==="")return null;let t=Number(e);return Number.isFinite(t)?t:null}function Bd(e={}){let t=Array.isArray(e.portfolio)?e.portfolio:[],n=t.find(([i])=>i==="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 gv(e){return[...e].sort((t,n)=>(Ld(n.tvl)??-1)-(Ld(t.tvl)??-1))}function ma(e){return e.hlInfo||Y}async function fa(e={},t={}){let n=await ma(t)({type:"vaultSummaries"},t),r=gv((Array.isArray(n)?n:[]).map(Bd));return{provider:"hl-vaults",count:r.length,vaults:r,exec:!1,raw:n}}async function Lo(e={},t={}){let r={type:"vaultDetails",vaultAddress:pa(e.vaultAddress||e.address,"vaultAddress")};e.user&&(r.user=pa(e.user,"user"));let o=await ma(t)(r,t);return{provider:"hl-vaults",vault:Bd(o||{}),exec:!1,raw:o}}async function ha(e={},t={}){let n=pa(e.user||e.address,"user"),r=await ma(t)({type:"userVaultEquities",user:n},t),o=(Array.isArray(r)?r:[]).map(i=>({vaultAddress:i.vaultAddress??i.address??null,equity:i.equity??i.vaultEquity??null}));return{provider:"hl-vaults",user:n,count:o.length,positions:o,exec:!1,raw:r}}async function ga(e={},t={}){let n=String(e.mode||"hlp").toLowerCase();if(n==="hlp")return Lo({...e,vaultAddress:Md},t);if(n==="summaries")return fa(e,t);if(n==="details")return Lo(e,t);if(n==="mine")return ha(e,t);throw new Error("hl-vaults: mode must be hlp, summaries, details, or mine")}async function Ud(e={}){try{let t=await ga({mode:"hlp"},e);return{ok:t.vault.vaultAddress===Md&&!!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}}}R();var bv="https://clob.polymarket.com",wv="https://gamma-api.polymarket.com";function Sr(e={}){return(e.clobUrl||process.env.POLY_CLOB_URL||bv).replace(/\/$/,"")}function Dd(e={}){return(e.gammaUrl||process.env.POLY_GAMMA_URL||wv).replace(/\/$/,"")}async function ya(e={}){return b(`${Sr(e)}/time`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs})}async function Fd(e={}){let t=await ya(e);return{ok:t!=null&&t!=="",time:t}}async function qd({limit:e=5,offset:t=0,...n}={},r={}){let o=new URLSearchParams({limit:String(e),offset:String(t),...Object.fromEntries(Object.entries(n).filter(([,i])=>i!=null).map(([i,s])=>[i,String(s)]))});return b(`${Dd(r)}/markets?${o}`,{fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs})}async function Hd(e,t={}){if(!e)throw new Error("polyBook requires tokenId");let n=new URLSearchParams({token_id:String(e)});return b(`${Sr(t)}/book?${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function jd(e,t={}){if(!e)throw new Error("polyMidpoint requires tokenId");let n=new URLSearchParams({token_id:String(e)});return b(`${Sr(t)}/midpoint?${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function Vd(e,t={}){if(!e)throw new Error("polySpread requires tokenId");let n=new URLSearchParams({token_id:String(e)});return b(`${Sr(t)}/spread?${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function zd(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(`${Sr(n)}/price?${r}`,{fetchImpl:n.fetchImpl,timeoutMs:n.timeoutMs})}async function Wd({limit:e=5,offset:t=0,...n}={},r={}){let o=new URLSearchParams({limit:String(e),offset:String(t),...Object.fromEntries(Object.entries(n).filter(([,i])=>i!=null).map(([i,s])=>[i,String(s)]))});return b(`${Dd(r)}/events?${o}`,{fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs})}re();R();import{createHash as Gd}from"node:crypto";var hn="mainnet-beta",Sv="https://api.mainnet-beta.solana.com",ba="TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";function vv(e={}){return String(e.rpcUrl||process.env.SOLANA_RPC_URL||Sv).trim()}function X(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 Ev(e,t){return t?[...e,{commitment:t}]:e}async function vr(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(vv(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 wa(e={},t={}){let n=e.commitment?[{commitment:e.commitment}]:[],r=await vr("getLatestBlockhash",n,t);return{provider:"solana-rpc",cluster:hn,blockhash:r?.value?.blockhash||null,lastValidBlockHeight:r?.value?.lastValidBlockHeight??null,slot:r?.context?.slot??null,raw:r}}async function Kd(e={}){try{let[t,n]=await Promise.all([vr("getHealth",[],e),wa({},e)]);return{ok:t==="ok",provider:"solana-rpc",cluster:hn,health:t,latestBlockhash:n,exec:!1}}catch(t){return{ok:!1,provider:"solana-rpc",cluster:hn,error:String(t?.message||t),exec:!1}}}async function Mo(e={},t={}){let n=X(e.address||e.owner,"address"),r=await vr("getBalance",Ev([n],e.commitment),t);return{provider:"solana-rpc",cluster:hn,address:n,lamports:String(r?.value??0),slot:r?.context?.slot??null,raw:r}}function kv(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 Er(e={},t={}){let n=X(e.owner||e.address,"owner"),r=e.mint?{mint:X(e.mint,"mint")}:{programId:X(e.programId||ba,"token program")},o={encoding:"jsonParsed"};e.commitment&&(o.commitment=e.commitment);let i=await vr("getTokenAccountsByOwner",[n,r,o],t),s=Array.isArray(i?.value)?i.value.map(kv):[];return{provider:"solana-rpc",cluster:hn,owner:n,filter:r,slot:i?.context?.slot??null,accounts:s,raw:i}}function Av(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 Iv(e,t){let n=0,r=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(n|=(s&127)<<r,(s&128)===0)return{value:n,offset:o};r+=7}throw new Error("solana-rpc: transaction shortvec too long")}function _v(e){let t=Buffer.from(e,"base64");try{let n=Iv(t,0),r=n.offset+n.value*64;if(r>=t.length)throw new Error("missing message");return Gd("sha256").update(t.subarray(r)).digest("hex")}catch{return Gd("sha256").update(t).digest("hex")}}async function Yd(e={},t={}){let n=Av(e.transaction||e.swapTransaction),r={encoding:"base64",sigVerify:!!e.sigVerify,replaceRecentBlockhash:e.replaceRecentBlockhash!==!1};e.commitment&&(r.commitment=e.commitment);let o=await vr("simulateTransaction",[n,r],t),i=o?.value||{};return{provider:"solana-rpc",cluster:hn,ok:i.err==null,transactionHash:_v(n),err:i.err??null,logs:i.logs||[],unitsConsumed:i.unitsConsumed??null,replacementBlockhash:i.replacementBlockhash||null,slot:o?.context?.slot??null,raw:o}}R();var Tv="mainnet",Cv="https://mempool.space/api",Nv="https://mempool.space/testnet/api";function Ke(e={}){return String(e.network||process.env.BTC_NETWORK||Tv).trim().toLowerCase()==="testnet"?"testnet":"mainnet"}function Sa(e={}){return e.baseUrl?String(e.baseUrl).replace(/\/$/,""):process.env.BTC_ESPLORA_URL?String(process.env.BTC_ESPLORA_URL).replace(/\/$/,""):Ke(e)==="testnet"?Nv:Cv}function xa(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 ot(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 Ov(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 va(e,t={}){let n=`${Sa(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)}),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 Bo(e,t={}){let n=await va(e,t);try{return JSON.parse(n)}catch{return n}}async function Xd(e={}){try{let t=await va("/blocks/tip/height",e),n=Number(t);return{ok:Number.isFinite(n)&&n>0,provider:"bitcoin-esplora",network:Ke(e),baseUrl:xa(Sa(e)),tipHeight:n,exec:!1,signing:"user-wallet"}}catch(t){return{ok:!1,provider:"bitcoin-esplora",network:Ke(e),baseUrl:xa(Sa(e)),error:xa(t?.message||t),exec:!1}}}async function Qd(e={}){let t=await va("/blocks/tip/height",e);return{provider:"bitcoin-esplora",network:Ke(e),tipHeight:Number(t)}}async function Jd(e={}){try{let t=await Bo("/v1/fees/recommended",e);return{provider:"bitcoin-esplora",network:Ke(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:Ke(e),fastestFee:null,halfHourFee:null,hourFee:null,note:"fee endpoint unavailable on this Esplora host"}}}async function Uo(e={},t={}){let n=ot(e.address||e.addr,"address"),r=await Bo(`/address/${n}`,t),o=r.chain_stats||{},i=r.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:Ke(t),address:n,balanceSats:String(s-a),chainStats:o,mempoolStats:i,raw:r}}async function Zd(e={},t={}){let n=ot(e.address||e.addr,"address"),r=await Bo(`/address/${n}/utxo`,t),o=Array.isArray(r)?r:[];return{provider:"bitcoin-esplora",network:Ke(t),address:n,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 ep(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 Bo(`/tx/${n}`,t);return{provider:"bitcoin-esplora",network:Ke(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 tp(e={},t={}){let n=Ov(e.txHex||e.hex||e.transaction,"txHex");return{provider:"bitcoin-esplora",network:Ke(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 np="ORACLE_ALLOW_CUSTOM_PROVIDER_URL";function Le({provider:e,defaultUrl:t,hosts:n=[],url:r,strict:o=!1}){let s=(String(r??"").trim()||String(t)).replace(/\/$/,"");if(s===String(t).replace(/\/$/,""))return{baseUrl:s,trusted:!0,host:rp(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 c=a.host;if(!c)throw new Error(`${e}: baseUrl must be an absolute http(s) URL`);if(new Set([rp(t),...n]).has(c)){let u=/^(127\.0\.0\.1|localhost|\[::1\])(:\d+)?$/i.test(c);return a.protocol==="http:"&&!u?{baseUrl:s,trusted:!1,host:c,reason:"plaintext http downgrade"}:{baseUrl:s,trusted:!0,host:c}}if(String(process.env[np]||"")==="1")return{baseUrl:s,trusted:!1,host:c};if(o)throw new Error(`${e}: refusing to call non-allowlisted host ${c} (set ${np}=1 to permit it)`);return{baseUrl:s,trusted:!1,host:c}}function rp(e){let t=new URL(String(e));if(t.protocol!=="http:"&&t.protocol!=="https:")throw new Error("unsupported protocol");return t.host}function _e(e,t,n){let r={...e};if(!n)return r;for(let[o,i]of Object.entries(t||{}))i&&(r[o]=i);return r}var Ea="https://ordinals.com";function Do(e={}){return String(e.baseUrl||process.env.BTC_META_API_URL||process.env.UNISAT_API_URL||"").trim().replace(/\/$/,"")}var $v=["open-api.unisat.io","open-api-testnet.unisat.io","api.bestinslot.xyz","api.hiro.so"];function op(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=Do(e);if(r){let o=new URL(r).host,i=new URL(r).protocol,s=/^(127\.0\.0\.1|localhost|\[::1\])(:\d+)?$/i.test(o);n=$v.includes(o)&&(i==="https:"||s)}}catch{n=!1}return _e({accept:"application/json","user-agent":"oracle-btc-meta/0.1"},{authorization:t?`Bearer ${t}`:"","x-api-key":t},n)}async function gn(e,t={}){let r=await(t.fetchImpl||fetch)(e,{method:"GET",headers:op(t),signal:AbortSignal.timeout(t.timeoutMs??12e3)}),o=await r.text(),i;try{i=JSON.parse(o)}catch{i=o}if(!r.ok)throw new Error(`bitcoin-meta GET ${e}: HTTP ${r.status} ${String(o).slice(0,160)}`);return i}async function ip(e={}){let t=Do(e),n=null;try{let i=await(e.fetchImpl||fetch)("https://ordinals.com/r/blockheight",{signal:AbortSignal.timeout(8e3)});n=Number(await i.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 s=await(e.fetchImpl||fetch)(`${t}${o}`,{headers:op(e),signal:AbortSignal.timeout(8e3)});if(r={ok:s.status>0&&s.status<500,path:o,status:s.status},s.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 Fo(e={},t={}){let n=ot(e.address||e.addr,"address"),r=Do(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`],i=null;for(let s of o)try{let a=await gn(s,t),c=Lv(a);return{provider:"bitcoin-meta",address:n,ok:!0,count:c.length,balances:c,source:s}}catch(a){i=a}return{provider:"bitcoin-meta",address:n,ok:!1,balances:[],error:String(i?.message||i||"all indexer paths failed")}}function Lv(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 yn(e={},t={}){let n=ot(e.address||e.addr,"address"),r=Do(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),i=[`${r}/v1/indexer/address/${n}/inscription-data?cursor=0&size=${o}`,`${r}/v1/inscriptions/address/${n}?limit=${o}`,`${r}/address/${n}/inscriptions?limit=${o}`],s=null;for(let a of i)try{let c=await gn(a,t),l=Mv(c);return{provider:"bitcoin-meta",address:n,ok:!0,count:l.length,inscriptions:l,source:a}}catch(c){s=c}return{provider:"bitcoin-meta",address:n,ok:!1,inscriptions:[],error:String(s?.message||s||"all indexer paths failed")}}async function sp(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||Ea,o=await gn(`${r}/r/inscription/${n}`,t);return{provider:"bitcoin-meta",source:"ordinals.com/r",keyless:!0,inscriptionId:n,info:o}}async function ap(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||Ea,o=Number(e.page||0),i=await gn(`${r}/r/children/${n}${o?`/${o}`:""}`,t);return{provider:"bitcoin-meta",source:"ordinals.com/r",keyless:!0,inscriptionId:n,page:o,children:Array.isArray(i?.ids)?i.ids:[],more:!!i?.more}}async function cp(e={},t={}){let n=t.ordinalsBase||Ea,r=e.height??await gn(`${n}/r/blockheight`,t),o=await gn(`${n}/r/blockinfo/${Number(r)}`,t);return{provider:"bitcoin-meta",source:"ordinals.com/r",keyless:!0,height:Number(r),info:o}}function Mv(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}))}K();var Uv=["unsigned","notsigned","tosign","signable"],Dv=new Set(["requiresusersignature","requiressignature","needssignature","signaturerequired","signaturesrequired","signingready","signaturecount","signaturethreshold","requiredsignatures","signatureneeded","hassignature","allowsignatures","requestsignature","multisig","cosig","msig"]),Fv=new Set(["sig","sigs","scriptsig","witness","psbt","finalizedpsbt","completepsbt","finalpsbt","psbtfinalized","serializedtransaction"]);function ka(e){return String(e).toLowerCase().replace(/[^a-z0-9]/g,"")}function qv(e){return Uv.some(t=>e.startsWith(t))||Dv.has(e)}function Hv(e){let t=String(e);if(!/^[\x20-\x7e]+$/.test(t))return!0;let n=ka(t);return qv(n)?!1:Fv.has(n)?!0:n.includes("signed")||n.includes("signature")||n.endsWith("sig")||n.endsWith("sigs")}function jv(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 Aa(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=>Aa(c,t+1,n,r));let o=[];for(let[c,l]of Object.entries(e)){if(Hv(c)){o.push(c);continue}o.push(...Aa(l,t+1,n,r))}let s=Object.keys(e).map(ka).some(c=>c.endsWith("psbt")||c.endsWith("psbtbase64")),a=Object.entries(e).some(([c,l])=>/complete|finalized|isfinal/.test(ka(c))&&l===!0);return s&&a&&o.push("psbt(complete)"),jv(e)&&o.push("v/r/s"),o}function it(e,t){let n=Aa(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 Vv="https://api.satflow.com/v1";function lp(e={}){return Le({provider:"satflow",defaultUrl:Vv,hosts:["api.satflow.com"],url:e.baseUrl||process.env.SATFLOW_API_URL})}function qo(e={}){return lp(e).baseUrl}function _a(e={}){return String(e.apiKey||process.env.SATFLOW_API_KEY||process.env.BTC_SATFLOW_API_KEY||"").trim()}function zv(e={}){return _e({accept:"application/json","content-type":"application/json","user-agent":"oracle-btc-satflow/0.1"},{"x-api-key":_a(e)},lp(e).trusted)}async function ft(e,{method:t="GET",body:n,opts:r={}}={}){if(!_a(r))throw new Error("satflow: SATFLOW_API_KEY not set (request key via Satflow docs form)");let i=`${qo(r)}${e.startsWith("/")?e:`/${e}`}`,a=await(r.fetchImpl||fetch)(i,{method:t,headers:zv(r),body:n!=null?JSON.stringify(n):void 0,signal:AbortSignal.timeout(r.timeoutMs??2e4)}),c=await a.text(),l;try{l=JSON.parse(c)}catch{l=c}if(!a.ok)throw new Error(`satflow ${t} ${e}: HTTP ${a.status} ${String(c).slice(0,200)}`);return l}async function up(e={}){if(!!!_a(e))return{ok:!1,provider:"satflow",baseUrl:qo(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 ft("/collection/stats/floors?type=ordinals",{opts:e}),{ok:!0,provider:"satflow",baseUrl:qo(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:qo(e),apiKeyPresent:!0,error:String(n?.message||n).slice(0,200),magicEdenOrdinals:"deprecated-dead"}}}async function dp(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 ft(`/collection/stats/floors?${r}`,{opts:t});return{provider:"satflow",type:n,floors:o,magicEdenOrdinals:"deprecated-dead"}}async function pp(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 ft(`/collection/stats?${r}`,{opts:t});return{provider:"satflow",collectionId:n,stats:o}}async function mp(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 ft(`/item?${r}`,{opts:t})}}async function Ho(e={},t={}){let n=ot(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 ft(`/address/wallet-contents?${r}`,{opts:t});return{provider:"satflow",address:n,contents:o}}async function fp(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 ft(`/orders/floor?${r}`,{opts:t})}}var Wv=new Set(["body","execute","fetchImpl","opts","apiKey","baseUrl","timeoutMs","maxSats","operator"]);function hp(e={},t=null){let n=e.body&&typeof e.body=="object"?e.body:e,r={};for(let[o,i]of Object.entries(n))Wv.has(o)||t&&!t.has(o)||i!==void 0&&(r[o]=i);return r}var Gv=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"]),Kv=new Set(["inscription_id","inscriptionId","runes_output","runesOutput","ord_address","receive_address","price","tap_key","collection_slug","expires_at"]);function Ia(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 gp(e={},t={}){let n=hp(e,Gv);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 i=Ia(n);if(i!=null&&i>o)throw new Error(`satflow: requested price ${i} sats exceeds maxSats cap ${o}`);let s=await ft("/intent/satflow-purchase",{method:"POST",body:n,opts:t}),a=Ia(s)??Ia(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 it("satflow",s),O({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 jo(e={},t={}){let n=hp(e,Kv);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 ft("/intent/sell",{method:"POST",body:n,opts:t});return it("satflow",r),O({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."})}R();K();var Vo="https://lite-api.jup.ag/swap/v1",wp="So11111111111111111111111111111111111111112",xp="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",Xv=100,yp=2e4;function Sp(e={}){return String(e.baseUrl||process.env.JUPITER_SWAP_API_URL||Vo).replace(/\/$/,"")}function zo(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 vp(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>Xv)throw new Error("jupiter: slippage exceeds hard 100 bps cap");return t}function Pa(e,t){return e==null?t:!!e}function Qv(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 Ta(e={},{quotedAtMs:t=Date.now(),ttlMs:n=yp}={}){let r=X(e.inputMint,"inputMint"),o=X(e.outputMint,"outputMint"),i=zo(e.inAmount,"inAmount"),s=zo(e.outAmount,"outAmount"),a=zo(e.otherAmountThreshold??e.outAmount,"otherAmountThreshold"),c=vp(e.slippageBps??50);return{mode:"solana-jupiter-quote",provider:"jupiter",venue:"jupiter-swap-v1",inputMint:r,outputMint:o,inAmount:i,outAmount:s,otherAmountThreshold:a,slippageBps:c,contextSlot:e.contextSlot??null,quotedAtMs:t,expiresAtMs:t+Math.min(Math.max(Number(n)||yp,1e3),3e4)}}var Jv=new Set(["BPFLoaderUpgradeab1e11111111111111111111111","BPFLoader2111111111111111111111111111111111","BPFLoader1111111111111111111111111111111111"]),Zv="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";function bp(e){if(typeof e!="string"||!e.length)return!1;let t=0n;for(let o of e){let i=Zv.indexOf(o);if(i<0)return!1;t=t*58n+BigInt(i)}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 Ep(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(`${Vo}/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(([p])=>bp(p)),c=[],l=s.filter(([p])=>!bp(p)).map(([p,m])=>({programId:p,label:m,reason:"malformed program id"}));if(e.verify===!1)return{source:`${Vo}/program-id-to-label`,verified:a.map(([p,m])=>({programId:p,label:m})),unresolved:l,verifiedOnChain:!1,totals:{fromRouterMap:s.length,verified:a.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<a.length;p+=90){let m=a.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[y,S]=m[g];h&&h.executable===!0&&Jv.has(h.owner)?c.push({programId:y,label:S,owner:h.owner}):l.push({programId:y,label:S,reason:h?h.executable!==!0?"not executable":`unknown owner ${h.owner}`:"account not found"})}),p+90<a.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:`${Vo}/program-id-to-label`,rpc:n,verifiedOnChain:!0,verifiedAt:new Date().toISOString(),totals:{fromRouterMap:s.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 kp(e={}){try{return{ok:!0,provider:"jupiter",outAmount:(await Wo({inputMint:wp,outputMint:xp,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 Wo(e={},t={}){let n=X(e.inputMint||e.fromMint||wp,"inputMint"),r=X(e.outputMint||e.toMint||xp,"outputMint"),o=zo(e.amount||e.inAmount,"amount"),i=vp(e.slippageBps??e.maxSlippageBps??50),s=new URL(`${Sp(t)}/quote`);s.searchParams.set("inputMint",n),s.searchParams.set("outputMint",r),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 b(s.toString(),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3}),c=Ta({...a,slippageBps:i},t);return{provider:"jupiter",chain:"solana-mainnet-beta",quoteReady:!0,executionReady:!1,inputMint:n,outputMint:r,amount:o,quote:a,solanaGuard:c}}function eE(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}async function Ap(e={},t={}){let n=X(e.userPublicKey||e.owner||e.wallet,"userPublicKey"),r=e.quoteResponse?{quote:e.quoteResponse,solanaGuard:Ta(e.quoteResponse,t)}:await Wo(e,t),o=r.quote,i=r.solanaGuard||Ta(o,t);if(Pa(e.dynamicSlippage,!1)===!0)throw new Error("jupiter: dynamicSlippage would override the enforced slippage ceiling \u2014 pass an explicit slippageBps instead");let s=await b(`${Sp(t)}/swap`,{method:"POST",body:eE({quoteResponse:o,userPublicKey:n,wrapAndUnwrapSol:Pa(e.wrapAndUnwrapSol,!0),dynamicComputeUnitLimit:Pa(e.dynamicComputeUnitLimit,!0),dynamicSlippage:!1,prioritizationFeeLamports:e.prioritizationFeeLamports}),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),a=Qv(s?.swapTransaction);it("jupiter",s);let c=s?.quoteResponse??s?.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 O({provider:"jupiter",chain:"solana-mainnet-beta",prepareReady:!0,executionReady:!1,signingReady:!1,broadcastReady:!1,requiresUserSignature:!0,verifiedAgainstQuote:!!c,userPublicKey:n,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"})}R();var nE="https://coins.llama.fi",rE="https://api.llama.fi",oE="https://yields.llama.fi",iE="https://stablecoins.llama.fi";function sE(e={}){return(e.baseUrl||process.env.DEFILLAMA_COINS_URL||nE).replace(/\/$/,"")}function Ip(e={}){return(e.baseUrl||process.env.DEFILLAMA_API_URL||rE).replace(/\/$/,"")}async function Me(e,t={}){if(!Array.isArray(e)||!e.length)throw new Error("llamaPrices requires coins[]");let n=e.map(encodeURIComponent).join(",");return b(`${sE(t)}/prices/current/${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function _p(e={}){let n=(await Me(["coingecko:ethereum"],e))?.coins?.["coingecko:ethereum"];return{ok:!!n?.price,ethUsd:n?.price??null}}async function Go(e={}){return b(`${Ip(e)}/protocols`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??2e4})}async function Pp(e={},t={}){let n=(t.yieldsBaseUrl||process.env.DEFILLAMA_YIELDS_URL||oE).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(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{...r,data:o.slice(0,i)}}async function Tp(e={},t={}){let n=(t.stablecoinsBaseUrl||process.env.DEFILLAMA_STABLECOINS_URL||iE).replace(/\/$/,""),r=e.includePrices!==!1;return b(`${n}/stablecoins?includePrices=${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??3e4})}async function Cp(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(`${Ip(t)}/overview/dexs/${n}?${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??3e4})}async function Np(e=["ethereum","bitcoin","solana"],t={}){let n=e.map(i=>`coingecko:${String(i).toLowerCase()}`),r=await Me(n,t),o={};for(let i of e){let s=`coingecko:${String(i).toLowerCase()}`;o[i]=r?.coins?.[s]||null}return o}R();ye();Ko();K();import{existsSync as gE,readFileSync as yE}from"node:fs";import{homedir as bE}from"node:os";import{join as Op}from"node:path";import{Contract as cE,JsonRpcProvider as lE}from"ethers";var uE="0x62FCFAf7573AD8B41a0FBF347AfEb85e06599A75",dE=999,pE="https://rpc.hyperliquid.xyz/evm",mE=["function balanceOf(address owner) view returns (uint256)"],fE=/^0x[a-fA-F0-9]{40}$/;function hE(e){return fE.test(String(e||""))}async function Yo(e,{contract:t=uE,rpc:n=pE,chainId:r=dE,balanceOf:o}={}){if(!hE(e))throw new Error("invalid-address");if(o)return BigInt(await o(e));let i=new lE(n,r,{staticNetwork:!0}),s=new cE(t,mE,i);return BigInt(await s.balanceOf(e))}var wE=100,xE=5,Rp=Object.freeze({swap:5,bridge:5,perps:0,nft:0});function SE(e){let t=String(e||"swap").toLowerCase();return Object.prototype.hasOwnProperty.call(Rp,t)?Rp[t]:xE}var vE="ORACLE_INTEGRATOR_FEE_BPS",EE="ORACLE_INTEGRATOR_FEE_RECIPIENT",kE="ORACLE_INTEGRATOR_ID",$p="ORACLE_INTEGRATOR_FEE_RECIPIENT_PIN",AE="oracle";function IE(e=process.env){if(e[$p])return String(e[$p]);let t=e.ORACLE_CONFIG_DIR||Op(bE(),".config","oracle");return Op(t,"fee-recipient")}function Na(e=process.env){try{let t=IE(e);if(!gE(t))return"";let n=yE(t,"utf8").trim().toLowerCase();return/^0x[a-f0-9]{40}$/.test(n)?n:""}catch{return""}}function _E(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),wE)}function PE({env:e=process.env,action:t="swap",admin:n=!1}={}){let r=String(e[EE]||"").trim(),o=String(e[kE]||AE).trim();if(n===!0)return{bps:0,recipient:"",integrator:o,action:t,applies:!1,reason:"admin-oracle"};let i=SE(t),s=_E(e[vE],{fallback:r?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(r))return{bps:0,recipient:"",integrator:o,action:t,applies:!1,reason:"no-recipient"};let c=Na(e);return!c||c!==r.toLowerCase()?{bps:0,recipient:"",integrator:o,action:t,applies:!1,reason:"recipient-not-pinned"}:{bps:a,recipient:r,integrator:o,action:t,applies:!0,reason:"configured"}}async function Xo({wallet:e,env:t=process.env,action:n="swap",holderCheck:r={},admin:o=!1}={}){let i=PE({env:t,action:n,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 Yo(s,r))>0n?{...i,bps:0,applies:!1,reason:"locals-only-holder",holderVerificationStatus:"holder"}:{...i,holderVerificationStatus:"non-holder"}}catch{return{...i,holderVerificationStatus:"unavailable"}}}function Lp(e){return e?.applies?`Oracle routing fee ${e.bps} bps (${(e.bps/100).toFixed(2)}%) to ${e.recipient}.`:e?.reason==="admin-oracle"?"No Oracle fee (admin Oracle).":e?.reason==="locals-only-holder"?"No Oracle fee (Locals Only holder).":"No Oracle fee."}function Mp(e){return e?.applies?{integrator:e.integrator,fee:String(e.bps/1e4)}:{}}function Bp(e){return e?.applies?{partner:e.integrator,partnerFeeBps:String(e.bps),partnerAddress:e.recipient}:{}}var TE="https://li.quest/v1";function Ra(e={}){return(e.baseUrl||process.env.LIFI_API_URL||TE).replace(/\/$/,"")}var Oa="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",CE="0x0000000000000000000000000000000000000000";function NE(e){let t=String(e||Oa).toLowerCase();return t===Oa.toLowerCase()||t===CE}function Up(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 Dp(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 gt(e={},t={}){let{fromChain:n,toChain:r=n,fromToken:o=Oa,toToken:i,fromAmount:s,fromAddress:a=ht}=e;if(n==null||!i||!s)throw new Error("lifiQuote requires fromChain, toToken, fromAmount");let c=new URLSearchParams({fromChain:String(n),toChain:String(r),fromToken:o,toToken:i,fromAmount:String(s),fromAddress:a}),l=ge({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 Xo({wallet:e.fromAddress,env:t.env,action:e.feeAction||"swap",holderCheck:t.holderCheck});for(let[g,y]of Object.entries(Mp(u)))c.set(g,y);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=W(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 Fp(e={},t={}){let n=await gt(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 i=null;if(!NE(e.fromToken)){let s=n?.estimate?.approvalAddress||n?.approvalAddress;if(!s)throw new Error("lifi: ERC20 route missing approvalAddress");let a=n?.action?.fromToken?.address||n?.estimate?.fromToken?.address||e.fromToken;i={token:Up(a,"approval token"),spender:Up(s,"approval spender"),amount:String(e.fromAmount)}}return O({provider:"lifi",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:o,quote:n,autoSlippage:n.autoSlippage,requiresApproval:i,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:ee(n.autoSlippage,{chainId:o,venue:r.to,data:r.data})}},{provider:"lifi",kind:"lifi-tx"})}async function qp(e={}){return b(`${Ra(e)}/chains`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??12e3})}re();ye();K();import{Interface as Vp,getAddress as kr,isAddress as RE}from"ethers";var yt={8453:{name:"base",quoter:"0x254cF9E1E6e233aa1AC962CB9B05b2cfeAaE15b0",router:"0xBE6D8f0d05cC4be24d5167a3eF062215bE6D18a5",factory:"0x5e7BB104d84c7CB9B682AaC2F3d509f5F406809A",weth:"0x4200000000000000000000000000000000000006",usdc:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}},$E=[1,50,100,200,2e3],Hp=new Vp(["function quoteExactInputSingle((address tokenIn, address tokenOut, uint256 amountIn, int24 tickSpacing, uint160 sqrtPriceLimitX96) params) returns (uint256 amountOut, uint160 sqrtPriceX96After, uint32 initializedTicksCrossed, uint256 gasEstimate)"]),LE=new Vp(["function exactInputSingle((address tokenIn, address tokenOut, int24 tickSpacing, address recipient, uint256 deadline, uint256 amountIn, uint256 amountOutMinimum, uint160 sqrtPriceLimitX96) params) payable returns (uint256 amountOut)"]),zp="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",Wp="0x0000000000000000000000000000000000000000";function Gp(e){let t=Number(e),n=yt[t];if(!n)throw new Error(`aerodrome: unsupported chainId ${e} (supported: ${Object.keys(yt).join(", ")})`);return{chainId:t,...n}}function jp(e,t){let n=yt[Number(t)];if(!e||e===zp||e===Wp||/^eth$/i.test(String(e)))return kr(n.weth);let r=String(e);if(/^weth$/i.test(r))return kr(n.weth);if(/^usdc$/i.test(r))return kr(n.usdc);if(!RE(r))throw new Error(`invalid token address: ${e}`);return kr(r)}async function Qo(e={},t={}){let{chainId:n,quoter:r,router:o}=Gp(e.chainId??8453),i=jp(e.tokenIn||"WETH",n),s=jp(e.tokenOut||yt[n].usdc,n),a=BigInt(e.amountIn??0);if(a<=0n)throw new Error("amountIn required (raw base units)");let c=e.tickSpacing!=null?[Number(e.tickSpacing)]:e.tryTickSpacings===!1?[100]:[...$E],l=[],u=null;for(let d of c){let p=Hp.encodeFunctionData("quoteExactInputSingle",[{tokenIn:i,tokenOut:s,amountIn:a,tickSpacing:d,sqrtPriceLimitX96:0n}]);try{let m=await M(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=Hp.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 W({venue:"aerodrome",chainId:n,chain:yt[n].name,quoter:r,router:o,tokenIn:i,tokenOut:s,amountIn:a.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 Kp(e={},t={}){let n=Number(e.chainId??8453),r=Gp(n),o=kr(e.recipient||e.from||e.userAddress),i=String(e.tokenIn||"WETH"),s=!e.tokenIn||i===zp||i===Wp||/^eth$/i.test(i),a=await Qo(e,t),c=Math.min(600,Math.max(30,Number(e.deadlineSeconds??300))),u=Number(t.nowSeconds??Math.floor(Date.now()/1e3))+c,d=LE.encodeFunctionData("exactInputSingle",[{tokenIn:a.tokenIn,tokenOut:a.tokenOut,tickSpacing:a.tickSpacing,recipient:o,deadline:u,amountIn:BigInt(a.amountIn),amountOutMinimum:BigInt(a.amountOutMinimum),sqrtPriceLimitX96:0n}]);return O({provider:"aerodrome",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:n,deadline:u,quote:a,autoSlippage:a.autoSlippage,requiresApproval:s?null:{token:a.tokenIn,spender:r.router,amount:a.amountIn},transaction:{chainId:n,from:o,to:r.router,data:d,value:s?a.amountIn:"0",slippageGuard:ee(a.autoSlippage,{chainId:n,venue:r.router,data:d})}},{provider:"aerodrome",kind:"aerodrome-exact-in"})}async function Yp(e={}){let t=Number(e.chainId??8453);try{let n=await Qo({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:yt[t]?.router,quoter:yt[t]?.quoter}}catch(n){return{ok:!1,chainId:t,error:String(n.message||n).slice(0,200)}}}async function Xp(){return Object.entries(yt).map(([e,t])=>({chainId:Number(e),name:t.name,quoter:t.quoter,router:t.router,factory:t.factory,weth:t.weth,usdc:t.usdc}))}R();ye();K();var BE="https://api.0x.org";function Qp(e={}){return Le({provider:"zerox",defaultUrl:BE,hosts:["api.0x.org"],url:e.baseUrl||process.env.ZEROX_API_URL})}function Jp(e={}){return Qp(e).baseUrl}function Jo(e={}){return e.apiKey||process.env.ZEROX_API_KEY||process.env.OX_API_KEY||process.env["0X_API_KEY"]||""}function Zp(e={}){return _e({"0x-version":"v2",accept:"application/json"},{"0x-api-key":Jo(e)},Qp(e).trusted)}async function em(e={}){if(!Jo(e))return{ok:!1,configured:!1,error:"ZEROX_API_KEY not set"};try{let t=await $a({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 $a(e={},t={}){if(!Jo(t))throw new Error("ZEROX_API_KEY required for 0x");let{chainId:n=8453,sellToken:r,buyToken:o,sellAmount:i,taker:s}=e;if(!r||!o||!i)throw new Error("zeroxPrice requires sellToken, buyToken, sellAmount");let a=new URLSearchParams({chainId:String(n),sellToken:r,buyToken:o,sellAmount:String(i)});return s&&a.set("taker",s),b(`${Jp(t)}/swap/allowance-holder/price?${a}`,{headers:Zp(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function jt(e={},t={}){if(!Jo(t))throw new Error("ZEROX_API_KEY required for 0x");let{chainId:n=8453,sellToken:r,buyToken:o,sellAmount:i,taker:s}=e;if(!r||!o||!i)throw new Error("zeroxQuote requires sellToken, buyToken, sellAmount");let a=ge({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 c=new URLSearchParams({chainId:String(n),sellToken:r,buyToken:o,sellAmount:String(i),slippageBps:String(a.selectedBps)});s&&c.set("taker",s);let l=await b(`${Jp(t)}/swap/allowance-holder/quote?${c}`,{headers:Zp(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),u=l?.buyAmount||l?.grossBuyAmount;return u?W(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:a}}async function tm(e={},t={}){if(!e.taker)throw new Error("0x: taker required for executable prepare");let n=await jt(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),i=n?.issues?.allowance?.spender||n?.allowanceTarget;return O({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:i,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:ee(n.autoSlippage,{chainId:o,venue:r.to,data:r.data})}},{provider:"zerox",kind:"zerox-tx"})}ni();R();ye();import{TypedDataEncoder as zE,getAddress as Ir,isAddress as WE}from"ethers";var eL=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"}),FE=new Set(["evm:execute","btc:execute","solana:execute","nft:buy","nft:mint","cow:submit"]),qE=new Set(["evm:prepare"]),HE="public package is prepare-only; the user wallet or private operator must sign and submit";function bn(e=process.env){return String(e.ORACLE_AUTONOMOUS_TRADING??"").trim()==="1"}function im(e=process.env){return String(e.ORACLE_AUTONOMOUS_MINT??process.env.ORACLE_AUTONOMOUS_MINT??"").trim()==="1"}function sm(e,{env:t=process.env,userInitiated:n=!1,autonomous:r=!1}={}){return FE.has(e)?{capability:e,armed:!1,allowed:!1,reason:HE}:qE.has(e)?String(t.ORACLE_EVM_ADDRESS??"").trim()?!n&&!r?{capability:e,armed:!1,allowed:!1,reason:"preparation requires an explicit request or enabled unattended preparation"}:r&&!bn(t)?{capability:e,armed:!1,allowed:!1,reason:"unattended preparation is off"}:{capability:e,armed:!1,allowed:!0,reason:null}:{capability:e,armed:!1,allowed:!1,reason:"a public address is required to prepare this action"}:{capability:e,armed:!1,allowed:!1,reason:`unknown capability: ${e}`}}function jE(e,t={}){let n=sm(e,t);if(!n.allowed){let r=new Error(`oracle: ${e} not permitted: ${n.reason}`);throw r.status=n,r}return n}function VE(e=process.env){return{model:"public prepare-only; execution is unavailable",armed:[],autonomousTrading:"off",autonomousPreparation:bn(e)?"ENABLED":"off",note:"Oracle prepares unsigned actions. The user wallet or private operator signs and submits."}}Ko();K();var cm={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"},GE=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),KE=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"}),Fa={1:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",8453:"0x4200000000000000000000000000000000000006",42161:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1"},lm={1:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",8453:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",42161:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831"},am=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"}]}),lL=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]});function qa(e,t={}){if(t.baseUrl)return t.baseUrl.replace(/\/$/,"");let n=cm[Number(e)];if(!n)throw new Error(`cowswap: unsupported chainId ${e}`);return n}function ri(e,t){let n=String(e||"").trim();if(!WE(n))throw new Error(`cowswap: ${t} must be an address`);return Ir(n).toLowerCase()}function Da(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 YE(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 XE(e){let t=GE[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:Ir(t)}}function QE(e={},t,n){let r=ri(e.sellToken,"sellToken"),o=ri(e.buyToken,"buyToken"),i=ri(e.receiver||n,"receiver"),s=Number(e.validTo);if(!Number.isInteger(s)||s<=0)throw new Error("cowswap: quote.validTo required");let a=YE(e.appData||e.appDataHash||`0x${"0".repeat(64)}`,"appData");return{sellToken:r,buyToken:o,receiver:i,sellAmount:Da(e.sellAmount,"sellAmount"),buyAmount:Da(e.buyAmount,"buyAmount"),validTo:s,appData:a,feeAmount:Da(e.feeAmount??"0","feeAmount"),kind:String(e.kind||"sell"),partiallyFillable:!!e.partiallyFillable,sellTokenBalance:String(e.sellTokenBalance||"erc20"),buyTokenBalance:String(e.buyTokenBalance||"erc20")}}async function um(e={}){try{let t=await bt({chainId:1,sellToken:Fa[1],buyToken:lm[1],sellAmountBeforeFee:"1000000000000000",from:ht},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 bt(e={},t={}){let n=Number(e.chainId??1),r=Ca(e.from||e.owner),o=e.sellToken||Fa[n],i=e.buyToken||lm[n],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=Fa[n],!o))throw new Error("no WETH mapping for chain");let a={sellToken:o,buyToken:i,from:r,receiver:e.receiver||r,sellAmountBeforeFee:s,kind:e.kind||"sell",signingScheme:e.signingScheme||"eip1271"},c=await b(`${qa(n,t)}/quote`,{method:"POST",body:a,fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),l=c?.quote?.buyAmount||c?.buyAmount;return l?W(c,{chainId:n,venue:"cowswap-order",amountOut:l,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps}):c}async function dm(e={},t={}){let n=Number(e.chainId??1),r=ri(Ca(e.from||e.owner||e.signer),"owner"),o=await bt({...e,chainId:n,from:r,signingScheme:e.signingScheme||"eip712"},t),i=QE(o?.quote||o,n,r),s=XE(n),a={domain:s,types:am,primaryType:"Order",message:i},c=zE.hash(s,am,i),l=KE[n];if(!l)throw new Error(`cowswap: vault relayer not registered for chain ${n}`);return O({provider:"cowswap",orderReady:!0,executionReady:!1,chainId:n,owner:r,signingScheme:"eip712",settlement:s.verifyingContract.toLowerCase(),vaultRelayer:Ir(l).toLowerCase(),quote:o,quoteId:o?.id??e.quoteId??null,typedData:a,cowGuard:{mode:"cow-order",version:1,provider:"cowswap",chainId:n,owner:r,settlement:s.verifyingContract.toLowerCase(),vaultRelayer:Ir(l).toLowerCase(),sellToken:i.sellToken,buyToken:i.buyToken,sellAmount:i.sellAmount,buyAmount:i.buyAmount,validTo:i.validTo,quoteId:o?.id??e.quoteId??null,typedDataHash:c,issuedAtMs:Date.now(),expiresAtMs:Math.min(i.validTo*1e3,Date.now()+2e4)},requiresApproval:{token:i.sellToken,spender:Ir(l).toLowerCase(),amount:i.sellAmount}},{provider:"cowswap",kind:"cow-order"})}async function pm(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(`${qa(n,t)}/orders/${encodeURIComponent(r)}/status`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function mm(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(`${qa(n,t)}/orders/${encodeURIComponent(r)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}function fm(){return Object.keys(cm).map(Number)}R();ye();K();var ZE="https://api.1inch.dev/swap/v6.0";function hm(e={}){return Le({provider:"oneinch",defaultUrl:ZE,hosts:["api.1inch.dev"],url:e.baseUrl||process.env.ONEINCH_API_URL})}function Ha(e={}){return hm(e).baseUrl}function _r(e={}){return e.apiKey||process.env.ONEINCH_API_KEY||process.env.ONE_INCH_API_KEY||""}function ja(e={}){let t=_r(e);return _e({accept:"application/json"},{Authorization:t?`Bearer ${t}`:""},hm(e).trusted)}async function gm(e={}){if(!_r(e))return{ok:!1,configured:!1,error:"ONEINCH_API_KEY not set"};try{return{ok:!0,configured:!0,dstAmount:(await Pr({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 Pr(e={},t={}){if(!_r(t))throw new Error("ONEINCH_API_KEY required for 1inch");let n=Number(e.chainId??1),{src:r,dst:o,amount:i}=e;if(!r||!o||!i)throw new Error("oneinchQuote requires src, dst, amount");let s=new URLSearchParams({src:r,dst:o,amount:String(i)}),a=await b(`${Ha(t)}/${n}/quote?${s}`,{headers:ja(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3});return a?.dstAmount?W(a,{chainId:n,venue:"1inch-quote",amountOut:a.dstAmount,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps}):a}function ek(e){return/^(eth|native|0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee)$/i.test(String(e||""))}async function Va(e={},t={}){if(!_r(t))throw new Error("ONEINCH_API_KEY required for 1inch");let n=Number(e.chainId??1);return b(`${Ha(t)}/${n}/approve/spender`,{headers:ja(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function ym(e={},t={}){if(!_r(t))throw new Error("ONEINCH_API_KEY required for 1inch");let n=Number(e.chainId??1),{src:r,dst:o,amount:i}=e,s=e.from||e.fromAddress||e.userAddress||e.taker;if(!r||!o||!i||!s)throw new Error("oneinchPrepare requires src, dst, amount, from");let a=ge({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 c=new URLSearchParams({src:r,dst:o,amount:String(i),from:s,slippage:String(a.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(`${Ha(t)}/${n}/swap?${c}`,{headers:ja(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(s).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=W(l,{chainId:n,venue:u.to,amountOut:d,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps}),m=null;if(!ek(r)){let f=l?.spender||l?.approvalAddress||(await Va({chainId:n},t))?.address;if(!f)throw new Error("1inch: ERC-20 route missing approval spender");m={token:r,spender:f,amount:String(i)}}return O({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||s,to:u.to,data:u.data,value:u.value??"0x0",...u.gas!=null?{gasLimit:u.gas}:{},slippageGuard:ee(p.autoSlippage,{chainId:n,venue:u.to,data:u.data})}},{provider:"oneinch",kind:"oneinch-tx"})}var nk=process.env.HL_WS_URL||"wss://api.hyperliquid.xyz/ws";async function Tr(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 i=t.url||nk,s=Date.now();return new Promise((a,c)=>{let l=!1,u=[],d=0,p=new o(i),m=setTimeout(()=>{f(),l||(l=!0,u.length?a({ok:!0,partial:!0,ms:Date.now()-s,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,a({ok:!0,ms:Date.now()-s,subscription:e,messages:u,last:u[u.length-1]})))}),p.addEventListener("error",()=>{f(),l||(l=!0,c(new Error("hl ws error")))})})}async function bm(e={}){try{let t=await Tr({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 wm(e={}){let t=await Tr({type:"allMids"},e),n=t.last||{};return{ms:t.ms,mids:n.data?.mids||n.data||{},channel:n.channel}}async function xm(e,t={}){if(!e)throw new Error("coin required");let n=await Tr({type:"l2Book",coin:String(e)},t);return{ms:n.ms,book:n.last?.data||n.last,channel:n.last?.channel}}var ok=process.env.POLY_WS_URL||"wss://ws-subscriptions-clob.polymarket.com/ws/market";async function oi(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,i=t.WebSocket||globalThis.WebSocket;if(!i)throw new Error("WebSocket not available");let s=t.url||ok,a=Date.now();return new Promise((c,l)=>{let u=!1,d=[],p=0,m=new i(s),f=setTimeout(()=>{h(),u||(u=!0,d.length?c({ok:!0,partial:!0,ms:Date.now()-a,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 y;try{y=JSON.parse(typeof g.data=="string"?g.data:String(g.data))}catch{y={raw:String(g.data).slice(0,300)}}d.push(y),p+=1,p>=o&&(h(),u||(u=!0,c({ok:!0,ms:Date.now()-a,assetIds:n,messages:d,last:d[d.length-1]})))}),m.addEventListener("error",()=>{h(),u||(u=!0,l(new Error("poly ws error")))})})}async function Sm(e={}){let t=e.assetId||"98022490269692409998126496127597032490334070080325855126491859374983463996227";try{let n=await oi([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 vm(e,t={}){if(!e)throw new Error("assetId required");let n=await oi([e],t);return{ms:n.ms,assetId:String(e),data:n.last,messages:n.messages}}R();import{readFileSync as lk,existsSync as uk}from"node:fs";import{getAddress as dk,Interface as ai,TypedDataEncoder as Pm,parseUnits as pk}from"ethers";K();var sk=/^(0|[1-9][0-9]*)$/,ii=class extends Error{constructor(t){super(`nft gas-war limit: ${t.reason}`),this.name="NftGasWarLimitError",this.verdict=t}};function Vt(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 i=e.trim();if(i.startsWith("0x")||i.startsWith("0X"))o=BigInt(i);else{if(!sk.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||!r&&o===0n)throw new Error(`${t} must be ${r?"non-negative":"positive"}`);return o}function ak(e){let t=Number(e);if(!Number.isSafeInteger(t)||t<=0)throw new Error("chainId must be a positive integer");return t}function ck(e={}){return e.maxFeePerGas!=null?Vt(e.maxFeePerGas,"maxFeePerGas"):e.gasPrice!=null?Vt(e.gasPrice,"gasPrice"):null}function si(e={}){try{let t=ak(e.chainId??e.tx?.chainId),n=e.tx||e,r=e.policy||e,o=r.grant?.maxGasWei??e.grant?.maxGasWei,i=Vt(r.maxTotalGasWei??r.maxGasWei??o,"maxTotalGasWei"),s=Vt(n.gasLimit??n.gas,"gasLimit"),a=ck(n);if(a==null)throw new Error("maxFeePerGas or gasPrice required");let c=Vt(r.maxFeePerGasWei,"maxFeePerGasWei",{required:!1}),l=Vt(r.maxPriorityFeePerGasWei,"maxPriorityFeePerGasWei",{required:!1}),u=n.maxPriorityFeePerGas==null?null:Vt(n.maxPriorityFeePerGas,"maxPriorityFeePerGas"),d=s*a;return d>i?{ok:!1,status:"BLOCK",reason:`total gas ${d} exceeds cap ${i}`,chainId:t,totalGasWei:d.toString(),maxTotalGasWei:i.toString()}:c!=null&&a>c?{ok:!1,status:"BLOCK",reason:`unit fee ${a} exceeds cap ${c}`,chainId:t,unitFeeWei:a.toString(),maxFeePerGasWei:c.toString(),totalGasWei:d.toString(),maxTotalGasWei:i.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:i.toString()}:{ok:!0,status:"PASS",reason:"gas envelope within NFT mint gas-war caps",chainId:t,totalGasWei:d.toString(),maxTotalGasWei:i.toString(),unitFeeWei:a.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 za(e={}){let t=si(e);if(!t.ok)throw new ii(t);return t}var mk="https://api.opensea.io/api/v2",fk="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)",hk=new ai([`function ${fk}`]),Em=new ai(["function mintPublic(address nftContract,address feeRecipient,address minterIfNotPayer,uint256 quantity) payable"]),gk=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"]),yk=new Set(gk),Tm=new Set(["solana","flow"]),Wa="0x0000000000000000000000000000000000000000";function bk(){let e=process.env.OPENSEA_ENV_FILE||`${process.env.HOME||""}/.config/locals-only/opensea.env`;if(!uk(e))return"";try{for(let t of lk(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 Ye(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||bk()}function Cm(e={}){return Le({provider:"opensea",defaultUrl:mk,hosts:["api.opensea.io","testnets-api.opensea.io"],url:e.baseUrl||process.env.OPENSEA_API_URL})}function wt(e={}){return Cm(e).baseUrl}function xt(e={}){return _e({accept:"application/json"},{"x-api-key":Ye(e)},Cm(e).trusted)}function Nm(e){let t=String(e||"ethereum").trim().toLowerCase();if(!yk.has(t))throw new Error(`opensea: unsupported account chain ${t}`);return t}function H(e,t="address"){try{return dk(String(e||"").trim().toLowerCase())}catch{throw new Error(`opensea: invalid ${t}`)}}function Om(e,t=null){let n=String(e||"").trim();if(!n)throw new Error("opensea: account address required");if(t&&!Tm.has(t)||!t&&/^0x[0-9a-fA-F]{40}$/.test(n))return H(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 wk(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 xk(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 km(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 Sk(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 Rm(e={}){if(!Ye(e))return{ok:!1,configured:!1,error:"OPENSEA_API_KEY not set"};try{let t=await Cr("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 Cr(e,t={}){if(!e)throw new Error("collection slug required");if(!Ye(t))throw new Error("OPENSEA_API_KEY required");return b(`${wt(t)}/collections/${encodeURIComponent(e)}`,{headers:xt(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function $m(e,t={}){let n=await Cr(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 Nr(e={},t={}){if(!Ye(t))throw new Error("OPENSEA_API_KEY required");let n=Nm(e.chain),r=Om(e.address||e.owner,n),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,c=0;do{let l=new URL(`${wt(t)}/chain/${encodeURIComponent(n)}/account/${encodeURIComponent(r)}/nfts`);l.searchParams.set("limit",String(o)),e.collection&&l.searchParams.set("collection",String(e.collection)),a&&l.searchParams.set("next",a);let u=await b(l.toString(),{headers:xt(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4});for(let d of Array.isArray(u?.nfts)?u.nfts:[])s.push(Sk(d,n,r));a=u?.next?String(u.next):null,c+=1}while(a&&c<i);return{provider:"opensea-nft",source:"opensea-account-inventory",chain:n,owner:r,count:s.length,pages:c,complete:!a,next:a,nfts:s,exec:!1,readOnly:!0}}async function ci(e={},t={}){if(!Ye(t))throw new Error("OPENSEA_API_KEY required");let n=Om(e.address||e.owner),r=await b(`${wt(t)}/account/${encodeURIComponent(n)}/pnl`,{headers:xt(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 Ga=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 Sn(e){let t=String(e||"").trim().toLowerCase(),n=Ga[t];if(!n)throw new Error(`opensea: unsupported EVM chain ${t||"(missing)"}`);return{chain:t,chainId:n}}function be(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 vk(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 xn(e){let t=String(e??"").trim();if(!/^\d+$/.test(t))throw new Error("opensea: tokenId must be an unsigned integer string");return t}function li(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 Lm(e,t,n="listing expiry"){let r=e==null?"":String(e).trim(),o;if(/^\d+$/.test(r)){let i=Number(r);o=r.length<=10?i*1e3:i}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 Ek(e,t){return Lm(e.expiration_time??e.expirationTime??e.protocol_data?.parameters?.endTime,t)}function kk(e){let t=e.protocol_data?.parameters?.offer?.[0]||{},n=be(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 Ak(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(Ga[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 i=e.protocol_data?.parameters?.offer?.[0]||{},s=H(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=xn(e.asset?.identifier??i.identifierOrCriteria),c=be(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:H(e.protocol_address,"listing protocol address"),contract:s,tokenId:a,quantity:kk(e),priceWei:c.toString(),currency:String(e.price?.current?.currency||"").trim()||null,decimals:Number(e.price?.current?.decimals??18),expiry:Ek(e,n),counter:be(e.protocol_data?.parameters?.counter,"listing counter").toString()}}async function Or(e={},t={}){if(!Ye(t))throw new Error("OPENSEA_API_KEY required");let n=Sn(e.chain);n.contract=e.contract?H(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 i=new URL(`${wt(t)}/listings/collection/${encodeURIComponent(r)}/best`);i.searchParams.set("limit",String(o)),e.next&&i.searchParams.set("next",String(e.next));let s=await b(i.toString(),{headers:xt(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 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:a.map(l=>Ak(l,n,c)),next:s?.next?String(s.next):null,exec:!1,readOnly:!0}}function Ka(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 Mm(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"&&Mm(n))}function Bm(e){return!e||typeof e!="object"?!1:Object.keys(e).some(t=>/^(?:signed.*|rawtransaction|serializedtransaction|txsigned|r|s|v)$/i.test(t))}function Um(e){return!e||typeof e!="object"?!1:Bm(e)?!0:Object.values(e).some(t=>t&&typeof t=="object"&&Um(t))}function Dm(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"&&Dm(o,t,n);return t}function Am(e){return e&&typeof e=="object"&&typeof e.value=="string"?e.value:e}function Fm(e,{buyer:t,chainId:n,targets:r}){if(!e||typeof e!="object")throw new Error("opensea: transaction object required");if(Bm(e))throw new Error("opensea: signed transaction material refused");if((e.from?H(Am(e.from),"transaction buyer"):t)!==t)throw new Error("opensea: OpenSea returned a transaction for the wrong buyer");let i=H(Am(e.to??e.target),"transaction target");if(!r.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=hk.encodeFunctionData("fulfillAdvancedOrder",[a.advancedOrder,a.criteriaResolvers,a.fulfillerConduitKey,a.recipient])}let c=String(s??"").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=vk(e.value_hex??e.valueHex??e.value??0);return{from:t,to:i,data:c,value:d.hex,chainId:n,valueWei:d.amount}}function vn(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 Rr(e,t,n){let r=n.provider,o=!!n.rpcUrl;if(!r&&!o)return{simulated:!1,gasEstimates:[]};let i=[];for(let c of e){let{chainId:l,...u}=vn(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);i.push(BigInt(d).toString())}else{let{rpcCall:d}=await Promise.resolve().then(()=>(re(),xo)),p={...n,fetchImpl:n.rpcFetchImpl||n.fetchImpl};await d(t,"eth_call",[u,"pending"],p);let m=await d(t,"eth_estimateGas",[u],p);i.push(BigInt(m).toString())}}let s=null,a=null;if(r&&typeof r.getFeeData=="function"){let c=await r.getFeeData();a=c?.maxPriorityFeePerGas==null?0n:BigInt(c.maxPriorityFeePerGas),s=c?.maxFeePerGas==null?c?.gasPrice==null?null:BigInt(c.gasPrice):BigInt(c.maxFeePerGas)}else if(o){let{rpcCall:c}=await Promise.resolve().then(()=>(re(),xo)),l={...n,fetchImpl:n.rpcFetchImpl||n.fetchImpl},u=BigInt(await c(t,"eth_gasPrice",[],l));try{a=BigInt(await c(t,"eth_maxPriorityFeePerGas",[],l))}catch{a=0n}let d=await c(t,"eth_getBlockByNumber",["pending",!1],l),m=(d?.baseFeePerGas==null?0n:BigInt(d.baseFeePerGas))*2n+a;s=u>m?u:m}return s!=null&&a!=null&&e.forEach((c,l)=>{let d=(BigInt(i[l])*120n+99n)/100n;c.gasLimit=d.toString(),c.maxPriorityFeePerGas=a.toString(),c.maxFeePerGas=s.toString(),c.worstCaseFeeWei=(d*s).toString()}),{simulated:!0,gasEstimates:i}}function Ya(e,t){if(Mm(e))throw new Error("opensea: approval steps are not permitted in NFT buy, sweep, or mint preparation");if(Um(e))throw new Error("opensea: signed transaction material refused");let n=Dm(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=>Fm(r,t))}function Xa(e,t){return O({...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 qm(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 Qa(e={},t={}){if(!Ye(t))throw new Error("OPENSEA_API_KEY required");Ka(e);let{chain:n,chainId:r}=Sn(e.chain),o=H(e.buyer||e.address,"buyer"),i=H(e.contract,"NFT contract"),s=xn(e.tokenId),a=li(e.quantity),c=be(e.maxPriceWei,"maxPriceWei",{positive:!0}),l=await Or({chain:n,slug:e.slug,contract:i,limit:e.limit??50},t),u=qm(l.listings,s,a),d=BigInt(u.priceWei);if(d>c)throw new Error("opensea: listing exceeds max price cap");let p=await b(`${wt(t)}/listings/fulfillment_data`,{method:"POST",headers:xt(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=Ya(p,{buyer:o,chainId:r,targets:new Set([u.protocolAddress])}),f=m.reduce((g,y)=>g+y.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 Rr(m,r,{...t,provider:e.provider||t.provider});return Xa({action:"buy",chain:n,chainId:r,slug:l.slug,buyer:o,contract:i,tokenId:s,tokenIds:[s],quantity:a,priceWei:d.toString(),totalWei:f.toString(),maxPriceWei:c.toString(),expiry:u.expiry,orderHashes:[u.orderHash],items:[{orderHash:u.orderHash,counter:u.counter,contract:i,tokenId:s,priceWei:d.toString()}],transactions:m.map(vn),...h},"nft-buy")}async function Ja(e={},t={}){if(!Ye(t))throw new Error("OPENSEA_API_KEY required");Ka(e);let{chain:n,chainId:r}=Sn(e.chain),o=H(e.buyer||e.address,"buyer"),i=H(e.contract,"NFT contract"),s=li(e.quantity??e.maxItems),a=Array.isArray(e.tokenIds)?e.tokenIds.map(xn):[];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 c=be(e.maxPriceWei,"maxPriceWei",{positive:!0}),l=be(e.maxTotalWei,"maxTotalWei",{positive:!0});if(l>c*BigInt(s))throw new Error("opensea: maxTotalWei cannot exceed per-item cap times quantity");let u=Number(e.limit||(a.length?s:50)),d=Math.min(50,Math.max(s,u)),p=new Map,m=null,f=null;for(let I=0;I<5;I+=1){let A=await Or({chain:n,slug:e.slug,contract:i,limit:d,next:f},t);m||(m=A);for(let V of A.listings)p.set(V.orderHash,V);let v=[...p.values()],L=a.length?a.every(V=>v.some(ae=>ae.tokenId===V)):new Set(v.filter(V=>V.quantity===1).map(V=>V.tokenId)).size>=s+Math.min(s,5);if(f=A.next,L||!f)break}m={...m,listings:[...p.values()],next:f};let h;if(a.length)h=a.map(I=>qm(m.listings,I,1));else{let I=new Set;if(h=[...m.listings].sort((A,v)=>{let L=BigInt(A.priceWei),V=BigInt(v.priceWei);return L<V?-1:L>V?1:0}).filter(A=>A.quantity!==1||I.has(A.tokenId)?!1:(I.add(A.tokenId),!0)),h.length<s)throw new Error(`opensea: only ${h.length} unique active floor listings available; requested ${s}`)}if(a.length){let I=h.find(A=>BigInt(A.priceWei)>c);if(I)throw new Error(`opensea: listing ${I.tokenId} exceeds max price cap`)}let g=new Set(h.map(I=>I.protocolAddress)),y=[],S=[];for(let I of h){if(y.length>=s)break;if(BigInt(I.priceWei)>c)continue;let A;try{A=await b(`${wt(t)}/listings/fulfillment_data`,{method:"POST",headers:xt(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(L){let V=Array.isArray(L?.body?.errors)?L.body.errors.join(" "):String(L?.body?.error||L?.message||"");if(!a.length&&L?.status===400&&/order\s+not\s+valid/i.test(V))continue;throw L}let v=Ya(A,{buyer:o,chainId:r,targets:g});if(v.length!==1)throw new Error("opensea: each NFT fulfillment must contain exactly one transaction");y.push(I),S.push(v[0])}if(y.length!==s)throw new Error(`opensea: only ${y.length} valid floor fulfillments available; requested ${s}`);let w=y.map(I=>I.tokenId),x=y.reduce((I,A)=>I+BigInt(A.priceWei),0n);if(x>l)throw new Error("opensea: selected listing total exceeds total cap");let k=S.reduce((I,A)=>I+A.valueWei,0n);if(k>l)throw new Error("opensea: sweep total exceeds total cap");if(k!==x)throw new Error("opensea: sweep total does not match exact selected listing total");let C=await Rr(S,r,{...t,provider:e.provider||t.provider}),P=y.map(I=>I.expiry).sort()[0];return Xa({action:"sweep",chain:n,chainId:r,slug:m.slug,buyer:o,contract:i,tokenIds:w,quantity:s,pricesWei:y.map(I=>I.priceWei),priceWei:null,totalWei:k.toString(),maxPriceWei:c.toString(),maxTotalWei:l.toString(),expiry:P,orderHashes:y.map(I=>I.orderHash),items:y.map(I=>({orderHash:I.orderHash,counter:I.counter,contract:i,tokenId:I.tokenId,priceWei:I.priceWei})),transactions:S.map(vn),...C},"nft-buy")}function Ik(e,t,n){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=H(o.address,"collection NFT contract");if(i!==n)throw new Error("opensea: OpenSea returned the wrong collection contract");return i}async function Za(e={},t={}){if(!Ye(t))throw new Error("OPENSEA_API_KEY required");Ka(e);let{chain:n,chainId:r}=Sn(e.chain),o=H(e.buyer||e.minter||e.address,"buyer"),i=H(e.contract,"NFT contract"),s=li(e.quantity),a=be(e.priceWei,"priceWei"),c=be(e.maxTotalWei,"maxTotalWei"),l=Number.isFinite(Number(t.nowMs))?Number(t.nowMs):Date.now(),u=Lm(e.expiry,l,"mint expiry"),d=String(e.slug||"").trim();if(!d)throw new Error("opensea: collection slug required");let p=await Cr(d,t),m=Ik(p,n,i),f=a*BigInt(s);if(f>c)throw new Error("opensea: mint total exceeds total cap");let h=await b(`${wt(t)}/drops/${encodeURIComponent(d)}/mint`,{method:"POST",headers:xt(t),body:{minter:o,quantity:s},fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3,retries:0,dedupe:!1}),g=t.allowedMintTargets?.[n]??t.allowedMintTargets?.[r]??e.mintTarget,y=Array.isArray(g)?g:g?[g]:[];if(!y.length)throw new Error("opensea: reviewed SeaDrop mintTarget required");let S=new Set(y.map(ae=>H(ae,"SeaDrop mint target"))),w=Ya(h,{buyer:o,chainId:r,targets:S});if(w.length!==1)throw new Error("opensea: mint must contain exactly one SeaDrop transaction");let x;try{x=Em.decodeFunctionData("mintPublic",w[0].data)}catch{throw new Error("opensea: mint transaction must call SeaDrop mintPublic")}let k=H(x[0],"mint NFT contract"),C=H(x[1],"mint fee recipient"),P=H(x[2],"mint recipient");if(k!==m)throw new Error("opensea: mint calldata collection mismatch");if(P!==o)throw new Error("opensea: mint calldata recipient mismatch");if(BigInt(x[3])!==BigInt(s))throw new Error("opensea: mint calldata quantity mismatch");if(Em.encodeFunctionData("mintPublic",[m,C,o,s]).toLowerCase()!==w[0].data.toLowerCase())throw new Error("opensea: mint calldata must be canonical with no suffix");let A=w.reduce((ae,Ut)=>ae+Ut.valueWei,0n);if(A!==f)throw new Error("opensea: mint transaction total does not match exact approved price and quantity");if(A>c)throw new Error("opensea: mint total exceeds total cap");let v=await Rr(w,r,{...t,provider:e.provider||t.provider});if(v.simulated!==!0)throw new Error("opensea: mint RPC simulation required");let L=e.gasPolicy||t.gasPolicy||{maxTotalGasWei:e.maxGasWei,maxFeePerGasWei:e.maxFeePerGasWei,maxPriorityFeePerGasWei:e.maxPriorityFeePerGasWei},V=za({chainId:r,tx:w[0],policy:L});return Xa({action:"mint",chain:n,chainId:r,slug:d,buyer:o,contract:m,tokenId:e.tokenId==null?null:xn(e.tokenId),quantity:s,priceWei:a.toString(),totalWei:A.toString(),maxTotalWei:c.toString(),mintTarget:w[0].to,feeRecipient:C,expiry:u,transactions:w.map(vn),gasWar:V,...v},"nft-mint")}function _k(e={}){let t=Nm(e.chain);if(Tm.has(t))throw new Error("opensea: listing actions currently require an EVM NFT chain");let n=e.startTime||e.start_time?km(e.startTime||e.start_time,"startTime"):{text:new Date().toISOString(),ms:Date.now()},r=km(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:H(e.contract,"NFT contract"),token_id:o,quantity:xk(e.quantity??1,"quantity"),price:{amount:wk(e.price?.amount??e.amount??e.priceAmount,"price amount"),currency:H(e.price?.currency??e.currency??Wa,"price currency")},start_time:n.text,end_time:r.text}}var wn={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"}]},Im=new ai(["function setApprovalForAll(address operator,bool approved)"]),Pk=new ai(["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 _m(e,t){return e?.[t]||(e?.action===t?e:null)}function Tk(e,{seller:t,item:n,chainId:r}){let o=Array.isArray(e?.steps)?e.steps:[],i=o.map(w=>_m(w,"createListingsAction")).find(Boolean)||o.find(w=>/createListings/i.test(String(w?.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 c=a.domain;if(c.name!=="Seaport"||c.version!=="1.6"||Number(c.chainId)!==r)throw new Error("opensea: listing domain mismatch");let l=H(c.verifyingContract,"listing protocol"),u=a.message;if(H(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(H(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 w of u.consideration){if(Number(w.itemType)!==0||H(w.token,"listing payment token")!==Wa)throw new Error("opensea: executable listings currently require native fixed-price consideration");let x=BigInt(w.startAmount),k=BigInt(w.endAmount);if(x<=0n||x!==k)throw new Error("opensea: listing consideration must be fixed and positive");H(w.recipient,"listing consideration recipient"),p+=x}let m=pk(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=Pm.hashStruct("OrderComponents",wn,u),y=o.map(w=>_m(w,"itemApprovalAction")).find(Boolean)||o.find(w=>/setApprovalForAll/i.test(String(w?.action||""))),S=null;if(y){let w=y.transaction||y.itemApprovalAction?.transaction,x=Fm(w,{buyer:t,chainId:r,targets:new Set([n.contract])}),k;try{k=Im.decodeFunctionData("setApprovalForAll",x.data)}catch{throw new Error("opensea: listing approval must be setApprovalForAll")}let C=H(k[0],"listing approval operator");if(k[1]!==!0||x.valueWei!==0n)throw new Error("opensea: listing approval must grant one exact operator with zero value");if(Im.encodeFunctionData("setApprovalForAll",[C,!0]).toLowerCase()!==x.data.toLowerCase())throw new Error("opensea: listing approval calldata must be canonical");S={...x,operator:C}}return{protocolAddress:l,typedData:{domain:c,types:wn,primaryType:"OrderComponents",message:u},orderHash:g,priceWei:p,approval:S}}async function $r(e={},t={}){if(!Ye(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=H(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(_k);if(new Set(o.map(m=>m.chain)).size!==1)throw new Error("opensea: all prepared listing items must be on one chain");let s=e.useCreatorFee!==!1,a={address:n,items:o,use_creator_fee:s};e.taker&&(a.taker=H(e.taker,"taker"));let c=await b(`${wt(t)}/listings/actions`,{method:"POST",headers:xt(t),body:a,fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3,retries:0,dedupe:!1}),{chainId:l}=Sn(o[0].chain),u=Tk(c,{seller:n,item:o[0],chainId:l}),d=u.approval?[u.approval]:[],p=d.length?await Rr(d,l,{...t,provider:e.provider||t.provider}):{simulated:!0};return O({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(vn),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.",...p})}async function ec(e={},t={}){if(e.userConfirmed!==!0)throw new Error("opensea: userConfirmed=true required for listing cancellation");let{chain:n,chainId:r}=Sn(e.chain),o=H(e.seller||e.address||e.owner,"seller"),i=H(e.protocolAddress,"reviewed Seaport protocol address"),s=H(e.contract,"NFT contract"),a=xn(e.tokenId),c=li(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,A]of Object.entries(wn)){let v=l.types?.[I];if(!Array.isArray(v)||v.length!==A.length||v.some((L,V)=>L?.name!==A[V].name||L?.type!==A[V].type))throw new Error("opensea: cancellation requires canonical Seaport types")}if(Object.keys(l.types||{}).filter(I=>I!=="EIP712Domain").sort().join(",")!==Object.keys(wn).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=H(d.verifyingContract,"Seaport cancellation target");if(p!==i)throw new Error("opensea: cancellation target mismatch");let m=l.message;if(H(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(H(f.token,"cancellation NFT contract")!==s)throw new Error("opensea: cancellation NFT contract mismatch");if(xn(f.identifierOrCriteria)!==a)throw new Error("opensea: cancellation tokenId mismatch");let h=be(f.startAmount,"cancellation offer startAmount",{positive:!0}),g=be(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||H(I.token,"cancellation payment token")!==Wa)throw new Error("opensea: cancellation requires native fixed-price consideration");let A=be(I.startAmount,"cancellation consideration startAmount",{positive:!0}),v=be(I.endAmount,"cancellation consideration endAmount",{positive:!0});if(A!==v)throw new Error("opensea: cancellation consideration must be fixed and positive");H(I.recipient,"cancellation consideration recipient")}let y=be(m.startTime,"cancellation startTime");if(be(m.endTime,"cancellation endTime",{positive:!0})<=y)throw new Error("opensea: cancellation listing time bounds invalid");let w=Pm.hashStruct("OrderComponents",wn,m),x=String(e.orderHash||"").trim().toLowerCase();if(!/^0x[0-9a-f]{64}$/.test(x)||x!==w.toLowerCase())throw new Error("opensea: cancellation order hash mismatch");let k=Pk.encodeFunctionData("cancel",[[m]]),C=[{from:o,to:p,data:k,value:"0x0",valueWei:0n,chainId:r}],P=await Rr(C,r,{...t,provider:e.provider||t.provider});if(P.simulated!==!0)throw new Error("opensea: cancellation RPC simulation required");return O({provider:"opensea-nft",marketplace:"opensea",kind:"nft-cancel",action:"cancel-listing",prepareReady:!0,chain:n,chainId:r,seller:o,contract:s,tokenId:a,quantity:c,protocolAddress:p,orderHash:w,typedData:{domain:d,types:wn,primaryType:"OrderComponents",message:m},transactions:C.map(vn),...P,requiresUserSignature:!0},{provider:"opensea-nft",kind:"nft-cancel"})}re();var Hm=999;async function jm(e={}){let t={chainId:Hm,rpc:null,dex:null};try{t.rpc=await un(Hm,e)}catch(n){t.rpc={ok:!1,error:String(n.message||n).slice(0,120)}}try{let n=await pr("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 Vm(e="HYPE",t={}){let r=(await pr(e,t)).pairs||[],o=r.filter(i=>/hyper|hl|hyperevm/i.test(String(i.chainId||"")));return{query:e,hyperPairs:o,allPairs:r.slice(0,20),count:o.length||r.length}}async function zm(e,t={}){return qt(e,t)}R();K();var Ok="https://api-mainnet.magiceden.dev/v2",Lr=1e9;function Wm(e={}){return Le({provider:"magiceden",defaultUrl:Ok,hosts:["api-mainnet.magiceden.dev","api-devnet.magiceden.dev"],url:e.baseUrl||process.env.MAGICEDEN_API_URL})}function kn(e={}){return Wm(e).baseUrl}function zt(e={}){return e.apiKey||process.env.MAGICEDEN_API_KEY||""}function An(e={}){let t=zt(e);return _e({accept:"application/json"},{Authorization:t?`Bearer ${t}`:""},Wm(e).trusted)}function tc(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 En(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 Rk(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 $k(e){return Math.round(En(e,"priceSol")*Lr)}function Lk(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 Mk({tokenMint:e,priceSol:t,expiry:n}){return`list ${e} on magiceden-sol for ${t} SOL until ${n}`}function Bk(e,t){if(e.userConfirmed!==!0)throw new Error("magiceden: listing requires userConfirmed=true after reviewing tokenMint, priceSol, and expiry");let n=Mk(t);if(String(e.confirmation||e.confirmationPhrase||"").trim()!==n)throw new Error(`magiceden: confirmation must equal ${JSON.stringify(n)}`);return n}async function Gm(e={}){try{let t=await nc({symbol:"mad_lads"},e);return{ok:!0,provider:"magiceden-sol",keyed:!!zt(e),readTier:"keyless",prepareTier:zt(e)?"keyed":"requires MAGICEDEN_API_KEY",floorPriceSol:t.floorPriceSol,exec:!1}}catch(t){return{ok:!1,provider:"magiceden-sol",keyed:!!zt(e),error:String(t?.message||t).slice(0,160),exec:!1}}}async function nc(e={},t={}){let n=tc(e.symbol||e.collection),r=await b(`${kn(t)}/collections/${encodeURIComponent(n)}/stats`,{headers:An(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/Lr:null,listedCount:r?.listedCount??null,volume24hrSol:r?.volume24hr!=null?Number(r.volume24hr)/Lr:null,avgPrice24hrSol:r?.avgPrice24hr!=null?Number(r.avgPrice24hr)/Lr:null,exec:!1,raw:r}}function Km(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*Lr):null,tokenSize:e.tokenSize??1}}async function Ym(e={},t={}){let n=tc(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),i=new URL(`${kn(t)}/collections/${encodeURIComponent(n)}/listings`);i.searchParams.set("offset",String(o)),i.searchParams.set("limit",String(r)),e.sort&&i.searchParams.set("sort",String(e.sort));let s=await b(i.toString(),{headers:An(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3}),a=(Array.isArray(s)?s:[]).map(Km);return{provider:"magiceden-sol",chain:"solana-mainnet-beta",symbol:n,count:a.length,listings:a,exec:!1}}async function Xm(e={},t={}){let n=X(e.tokenMint||e.mint,"tokenMint"),r=await b(`${kn(t)}/tokens/${encodeURIComponent(n)}/listings`,{headers:An(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3}),o=(Array.isArray(r)?r:[]).map(Km);return{provider:"magiceden-sol",chain:"solana-mainnet-beta",tokenMint:n,listings:o,exec:!1}}async function Qm(e={},t={}){if(!zt(t))throw new Error("magiceden: MAGICEDEN_API_KEY required to build a buy instruction");let n=X(e.buyer||e.userPublicKey,"buyer"),r=X(e.seller,"seller"),o=X(e.tokenMint,"tokenMint"),i=X(e.tokenATA||e.tokenAddress,"tokenATA"),s=X(e.auctionHouse,"auctionHouse"),a=En(e.priceSol??e.price,"priceSol"),c=e.maxPriceSol==null?a:En(e.maxPriceSol,"maxPriceSol");if(a>c)throw new Error(`magiceden: listing price ${a} SOL exceeds maxPriceSol cap ${c} SOL`);let l=new URL(`${kn(t)}/instructions/buy_now`);l.searchParams.set("buyer",n),l.searchParams.set("seller",r),l.searchParams.set("auctionHouseAddress",s),l.searchParams.set("tokenMint",o),l.searchParams.set("tokenATA",i),l.searchParams.set("price",String(a)),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:An(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3});it("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 O({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:a,maxPriceSol:c,lamports:$k(a),transaction:p,transactionEncoding:"base64",raw:u})}async function ui(e={},t={}){if(!zt(t))throw new Error("magiceden: MAGICEDEN_API_KEY required to build a list instruction");let n=X(e.seller||e.userPublicKey,"seller"),r=X(e.tokenMint,"tokenMint"),o=X(e.tokenATA||e.tokenAddress,"tokenATA"),i=X(e.auctionHouse,"auctionHouse"),s=En(e.priceSol??e.price,"priceSol"),a=Lk(e.expiry),c=Bk(e,{tokenMint:r,priceSol:s,expiry:a}),l=new URL(`${kn(t)}/instructions/sell`);l.searchParams.set("seller",n),l.searchParams.set("auctionHouseAddress",i),l.searchParams.set("tokenMint",r),l.searchParams.set("tokenAccount",o),l.searchParams.set("price",String(s)),e.sellerReferral&&l.searchParams.set("sellerReferral",X(e.sellerReferral,"sellerReferral")),a!=null&&l.searchParams.set("expiry",String(a));let u=await b(l.toString(),{headers:An(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3});it("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 O({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:s,expiry:a,confirmation:c,transaction:p,transactionEncoding:"base64",raw:u})}async function Jm(e={},t={}){if(!zt(t))throw new Error("magiceden: MAGICEDEN_API_KEY required to build a mint instruction");let n=X(e.buyer||e.userPublicKey,"buyer"),r=tc(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=En(e.maxPriceSol,"maxPriceSol"),i=e.nftAmount==null?1:En(e.nftAmount,"nftAmount");if(!Number.isInteger(i))throw new Error("magiceden: nftAmount must be a whole number");let s=new URL(`${kn(t)}/instructions/mint`);s.searchParams.set("symbol",r),s.searchParams.set("wallet",n),s.searchParams.set("nftAmount",String(i));let a=await b(s.toString(),{headers:An(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),c=Rk(a);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*i;if(l>o)throw new Error(`magiceden: mint cost ${l} SOL exceeds maxPriceSol cap ${o} SOL`);it("magiceden",a);let u=a?.v0?.tx?.data??a?.tx?.data??null;if(!Array.isArray(u))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 d=Buffer.from(u).toString("base64");return O({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:i,priceSol:c,totalSol:l,maxPriceSol:o,transaction:d,transactionEncoding:"base64",raw:a})}K();R();var In=8,rc=10n**BigInt(In),Dk="0xa4b1",Zm=7,oc=1,Fk=2n**64n-1n;function qk(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 Br(e={}){return e.testnet||process.env.HL_TESTNET==="1"?"Testnet":"Mainnet"}function Pn(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 Mr(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>In)throw new Error(`hl-staking: ${t} has more than ${In} decimals`);let i=BigInt(r)*rc+BigInt((o+"0".repeat(In)).slice(0,In)||"0");if(i<=0n)throw new Error(`hl-staking: ${t} must be greater than zero`);if(i>Fk)throw new Error(`hl-staking: ${t} exceeds the uint64 range the signed action encodes`);return i.toString()}function _n(e){let t=BigInt(e);return t<=BigInt(Number.MAX_SAFE_INTEGER)?Number(t):e}function st(e){let t=BigInt(String(e||"0")),n=t/rc,r=(t%rc).toString().padStart(In,"0").replace(/0+$/,"");return r?`${n}.${r}`:String(n)}async function ef(e={}){try{let t=await ic(e);return{ok:t.count>0,provider:"hl-staking",chain:Br(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 ic(e={}){let t=await Y({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 sc(e={},t={}){let n=Pn(e.user||e.address,"user"),r=await Y({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 ac(e={},t={}){let n=Pn(e.user||e.address,"user"),r=await Y({type:"delegations",user:n},t),o=Array.isArray(r)?r:[];return{provider:"hl-staking",user:n,count:o.length,delegations:o.map(i=>({validator:i.validator??null,amount:i.amount??null,lockedUntilTimestamp:i.lockedUntilTimestamp??null})),exec:!1,raw:r}}async function tf(e={},t={}){let n=Pn(e.user||e.address,"user"),r=await Y({type:"delegatorRewards",user:n},t);return{provider:"hl-staking",user:n,rewards:Array.isArray(r)?r:[],exec:!1}}async function nf(e={},t={}){let n=Pn(e.user||e.address,"user"),r=await Y({type:"delegatorHistory",user:n},t);return{provider:"hl-staking",user:n,history:Array.isArray(r)?r:[],exec:!1}}function cc(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 di(e={}){return String(e.signatureChainId||process.env.HL_SIGNATURE_CHAIN_ID||Dk)}function Hk(e={}){return{name:"HyperliquidSignTransaction",version:"1",chainId:Number(BigInt(di(e))),verifyingContract:"0x0000000000000000000000000000000000000000"}}function lc({kind:e,action:t,types:n,primaryType:r,message:o,opts:i,notes:s,caps:a}){return O({provider:"hl-staking",venue:"hypercore",chain:Br(i),kind:e,prepareReady:!0,executionReady:!1,signingReady:!1,broadcastReady:!1,requiresUserSignature:!0,signWith:"user wallet (EIP-712 typed data)",submitTo:qk(i),submitShape:{action:t,nonce:t.nonce,signature:"<user 65-byte signature>"},action:t,typedData:{domain:Hk(i),types:n,primaryType:r,message:o},caps:a||null,notes:s,exec:!1},{provider:"hl-staking",kind:e})}function rf(e={},t={}){let n=Mr(e.amountHype??e.amount,"amountHype"),r=e.maxHype==null?null:Mr(e.maxHype,"maxHype");if(r&&BigInt(n)>BigInt(r))throw new Error(`hl-staking: amount ${st(n)} HYPE exceeds maxHype cap ${st(r)} HYPE`);let o=cc(e),i=Br(t),s={type:"cDeposit",hyperliquidChain:i,signatureChainId:di(t),wei:_n(n),nonce:o};return lc({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:_n(n),nonce:o},opts:t,caps:{amountHype:st(n),maxHype:r?st(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 of(e={},t={}){let n=Mr(e.amountHype??e.amount,"amountHype"),r=cc(e),o=Br(t),i={type:"cWithdraw",hyperliquidChain:o,signatureChainId:di(t),wei:_n(n),nonce:r};return lc({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:_n(n),nonce:r},opts:t,caps:{amountHype:st(n)},notes:[`Starts the ${Zm} 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 sf(e={},t={}){let n=Pn(e.validator,"validator"),r=Mr(e.amountHype??e.amount,"amountHype"),o=!!(e.isUndelegate??e.undelegate??!1),i=e.maxHype==null?null:Mr(e.maxHype,"maxHype");if(!o&&i&&BigInt(r)>BigInt(i))throw new Error(`hl-staking: delegate amount ${st(r)} HYPE exceeds maxHype cap ${st(i)} HYPE`);let s=cc(e),a=Br(t),c={type:"tokenDelegate",hyperliquidChain:a,signatureChainId:di(t),validator:n,wei:_n(r),isUndelegate:o,nonce:s};return lc({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:a,validator:n,wei:_n(r),isUndelegate:o,nonce:s},opts:t,caps:{amountHype:st(r),maxHype:i?st(i):null,validator:n},notes:o?["Returns stake from the validator to your staking balance.",`Delegations carry a ${oc} 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 ${oc} day.`,"Check the validator's commission and jail status before delegating.","Oracle prepared this. Your wallet signs it. Nothing was submitted."]})}async function af(e={},t={}){let n=Pn(e.user||e.address,"user"),r=await sc({user:n},t),o=await ac({user:n},t);return{provider:"hl-staking",user:n,stakingBalanceUndelegated:r.undelegatedWei,stakingBalanceDelegated:r.delegatedWei,pendingWithdrawals:r.nPendingWithdrawals,delegations:o.delegations,unstakingQueueDays:Zm,validatorLockupDays:oc,exec:!1}}async function uc(e={}){let t=Date.now();try{let n=await rt(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 Vk=24*365,zk=8;function ue(e){if(e==null)return null;let t=Number(e);return Number.isFinite(t)?t:null}function Wk(e,t){return e==null||t==null||t===0?null:(e-t)/t*100}async function pi(e={},t={}){let[n,r]=await Promise.all([mn(t),rt(t).catch(()=>({}))]),o=n?.[0]?.universe??n?.universe??[],i=Array.isArray(n?.[1])?n[1]:[],a=o.map((c,l)=>{let u=i[l]||{},d=ue(u.markPx),p=ue(u.prevDayPx),m=ue(u.openInterest),f=ue(u.funding);return{coin:c.name,index:l,markPx:d,oraclePx:ue(u.oraclePx),midPx:ue(u.midPx)??ue(r?.[c.name]),prevDayPx:p,change24hPct:Wk(d,p),dayNtlVolumeUsd:ue(u.dayNtlVlm),premium:ue(u.premium),fundingRate:f,fundingRateAprPct:f==null?null:f*(Vk/zk)*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:a.length,markets:a,totals:{openInterestUsd:a.reduce((c,l)=>c+(l.openInterestUsd||0),0),dayNtlVolumeUsd:a.reduce((c,l)=>c+(l.dayNtlVolumeUsd||0),0)}}}async function cf(e={},t={}){let n=Math.max(1,Math.min(Number(e.limit)||10,50)),{markets:r,asOfMs:o,totals:i}=await pi(e,t),s=(a,c=-1)=>r.filter(l=>l[a]!=null).sort((l,u)=>(l[a]-u[a])*c).slice(0,n);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 lf(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,i=Date.now(),s=i-o,[a,c,l]=await Promise.all([pi({},t),fn({coin:n,interval:r,startTime:s,endTime:i},t).catch(()=>[]),Co(n,t).catch(()=>null)]),u=a.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:ue(h.o),high:ue(h.h),low:ue(h.l),close:ue(h.c),volume:ue(h.v)})),p=l?.levels??[],m=ue(p?.[0]?.[0]?.px),f=ue(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 uf(e={},t={}){let n=await $o(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(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}))}}K();var ff=1e8,Kk=1e5,Ur={at:0,dexs:null},df=new Map;async function pf(e={}){let t=Date.now();if(Ur.dexs&&t-Ur.at<6e4&&!e.fetchImpl)return Ur.dexs;let n=await Y({type:"perpDexs"},e);return Ur={at:t,dexs:Array.isArray(n)?n:[]},Ur.dexs}async function mf(e="",t={}){let n=e||"",r=Date.now(),o=df.get(n);if(o&&r-o.at<3e4&&!t.fetchImpl)return o;let i=e?await Y({type:"metaAndAssetCtxs",dex:e},t):await mn(t),s=i?.[0]?.universe??i?.universe??[],a=Array.isArray(i?.[1])?i[1]:[],c={at:r,universe:s,ctxs:a};return df.set(n,c),c}function Yk(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:ff+n}}function mi(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:ff+o}}async function dc(e={},t={}){if(e.outcome!=null||e.coin&&String(e.coin).startsWith("#")){let l=e.outcome!=null?mi(e.outcome,e.side??e.outcomeSide??0):Yk(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 pf(t)).findIndex(x=>x&&x.name===l);if(m<1)throw new Error(`hl-assets: unknown builder dex "${l}"`);let{universe:f,ctxs:h}=await mf(l,t),g=f.findIndex(x=>x.name===n||x.name===`${l}:${d}`||x.name.endsWith(`:${d}`));if(g<0)throw new Error(`hl-assets: ${n} not in dex ${l} meta`);let y=f[g];if(y.isDelisted)throw new Error(`hl-assets: ${n} is delisted`);let S=Kk+m*1e4+g,w=h[g]||{};return{kind:"hip3",coin:y.name||n,assetId:S,szDecimals:y.szDecimals??0,maxLeverage:y.maxLeverage??null,dex:l,dexIndex:m,indexInMeta:g,markPx:w.markPx??null}}let{universe:r,ctxs:o}=await mf("",t),i=n.toUpperCase(),s=r.findIndex(l=>l.name===i);if(s<0){if(t.allowBareBuilderLeaf===!0)try{let l=await pf(t);for(let u=1;u<l.length;u++){let d=l[u];if(!d?.name)continue;let p=`${d.name}:${i}`;try{return await dc({coin:p},t)}catch{}}}catch{}throw new Error(`hl-perps: ${i} is not a listed perp`)}let a=r[s];if(a.isDelisted)throw new Error(`hl-assets: ${i} is delisted`);let c=o[s]||{};return{kind:"main",coin:a.name,assetId:s,szDecimals:a.szDecimals??0,maxLeverage:a.maxLeverage??null,dex:"",markPx:c.markPx??null}}function hf(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("-"),i=o?r.slice(1):r,[s="0",a=""]=i.split(".");if(a.length>t)throw new Error(`${n} has more than ${t} decimal places, which would lose precision`);let c=BigInt((s||"0")+a.padEnd(t,"0"));return o?-c:c}K();var Xk=5,Qk=6,bf="0x66eee";var gf=10,pc="ORACLE_HL_BUILDER_ADDRESS",yf="ORACLE_HL_BUILDER_FEE_BPS",fi=Object.freeze({perp:2,spot:1,hip3:1,hip4:1}),ve=Object.freeze({LIMIT:"limit",MARKET:"market",STOP_MARKET:"stopMarket",STOP_LIMIT:"stopLimit",TAKE_PROFIT_MARKET:"takeProfitMarket",TAKE_PROFIT_LIMIT:"takeProfitLimit"}),gi=Object.freeze({GTC:"Gtc",IOC:"Ioc",ALO:"Alo"}),hi=Object.freeze({CROSS:"cross",ISOLATED:"isolated"});function Jk(e="perp"){if(e==="perp"||e==="main")return fi.perp;if(e==="spot")return fi.spot;if(e==="hip3")return fi.hip3;if(e==="outcome"||e==="hip4")return fi.hip4;throw new Error(`hl-perps: unknown builder fee kind ${e}`)}function wf({env:e=process.env,isHolder:t=!1,kind:n="perp"}={}){if(t)return null;let r=String(e?.[pc]||"").trim().toLowerCase();if(!r)return null;if(!/^0x[a-f0-9]{40}$/.test(r))throw new Error(`hl-perps: ${pc} must be an EVM address`);let o=Na(e);if(!o||o!==r)return null;let i=e?.[yf],s=Jk(n),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: ${yf} must be a positive number in 0.1 bps increments`);if(a>gf)throw new Error(`hl-perps: builder fee ${a} bps exceeds the ${gf} bps cap`);if(a>s)throw new Error(`hl-perps: builder fee ${a} bps exceeds the ${s} bps product tier for ${n}`);let c=Math.round(a*10),l=(c/1e3).toFixed(3).replace(/0+$/,"").replace(/\.$/,"");return{wire:{b:r,f:c},disclosure:{address:r,bps:a,percent:`${l}%`}}}async function Zk(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 Y({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 eA(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||Yo;return BigInt(await o(r))>0n?{exempt:!0,status:"holder"}:{exempt:!1,status:"non-holder"}}catch{return{exempt:!1,status:"unavailable"}}}function fc(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("-"),[i,s=""]=r.replace(/^-/,"").split(".");if(s.length<=t){let f=s.replace(/0+$/,"");return(o?"-":"")+(f?`${i}.${f}`:i)}let a=s.slice(0,t),c=Number(s[t]),l=BigInt(i+a),u=s.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 tA(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 i=Math.floor(Math.log10(Math.abs(o))),s=Math.max(0,t-1-i);return fc(r,s,n)}function St(e,t,n={}){let r=Qk-Number(t??0);if(r<0)throw new Error("hl-perps: szDecimals out of range");return fc(tA(e,Xk,n),r,n)}function nA(e,t){let n=fc(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 Wt(e={},t={}){let n=await dc(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 mc(e,{tif:t=gi.GTC,triggerPx:n,isMarket:r,szDecimals:o}={}){switch(e){case ve.LIMIT:return{limit:{tif:t}};case ve.MARKET:return{limit:{tif:gi.IOC}};case ve.STOP_MARKET:case ve.TAKE_PROFIT_MARKET:return{trigger:{isMarket:!0,triggerPx:St(n,o),tpsl:e===ve.STOP_MARKET?"sl":"tp"}};case ve.STOP_LIMIT:case ve.TAKE_PROFIT_LIMIT:return{trigger:{isMarket:!1,triggerPx:St(n,o),tpsl:e===ve.STOP_LIMIT?"sl":"tp"}};default:throw new Error(`hl-perps: unknown order type ${e}`)}}function Tn(e,t){return{action:e,nonce:t,signatureChainId:bf,submitTo:"https://api.hyperliquid.xyz/exchange",note:"Sign locally via @oracle-agent/operator or a wallet. Oracle does not submit."}}function Cn(e){return O(e,{provider:e.provider||"hl-perps",kind:e.kind})}function xf(e={},t={}){let n=wf({env:t.env});if(!n)throw new Error(`hl-perps: ${pc} 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:bf,maxFeeRate:n.disclosure.percent,builder:n.disclosure.address,nonce:r};return Cn({provider:"hl-perps",venue:"hyperliquid",kind:"builder-fee-approval",builderFee:n.disclosure,...Tn(o,r)})}async function Dr(e={},t={}){let n=await Wt(e,t),r=String(e.type||ve.LIMIT),o=e.side?String(e.side).toLowerCase()==="buy":!!e.isBuy,i=!!e.reduceOnly,s=nA(e.size??e.sz,n.szDecimals),a;if(r===ve.MARKET){let S=Number(n.markPx);if(!Number.isFinite(S)){let C=await rt(t);S=Number(C?.[n.coin]??C?.[String(n.assetId)]??NaN)}if(!Number.isFinite(S))throw new Error("hl-perps: no mark price available for a market order");let w=Number(e.maxSlippageBps??50);if(!Number.isInteger(w)||w<0)throw new Error("hl-perps: maxSlippageBps must be a non-negative integer");if(w>100)throw new Error(`hl-perps: maxSlippageBps ${w} exceeds the hard 100 bps cap`);let x=o?S*(1+w/1e4):S*(1-w/1e4);a=St(x,n.szDecimals,{roundDown:o});let k=Math.abs(Number(a)/S-1)*1e4;if(k>w+1e-9)throw new Error(`hl-perps: tick rounding makes the limit ${k.toFixed(2)} bps from mark, above the ${w} bps cap`)}else{if(e.price==null&&e.limitPx==null)throw new Error("hl-perps: a limit order requires an explicit price");a=St(e.price??e.limitPx,n.szDecimals)}let c=mc(r,{tif:e.tif??(r===ve.MARKET?gi.IOC:gi.GTC),triggerPx:e.triggerPx,szDecimals:n.szDecimals}),l={a:n.assetId,b:o,p:a,s,r:i,t:c};e.clientOrderId&&(l.c=String(e.clientOrderId));let u={type:"order",orders:[l],grouping:e.grouping||"na"},d=wf({env:t.env,kind:n.kind}),p=await eA(d,e,t),m=p.exempt?null:d,f=await Zk(m,e,t),h=f.approved?m:null;h&&(u.builder=h.wire);let g=Number(e.nonce??Date.now()),y=Number(a)*Number(s);return Cn({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:a,size:s,reduceOnly:i,notionalUsd:Number.isFinite(y)?y:null,maxLeverage:n.maxLeverage,markPx:n.markPx,builderFee:h?.disclosure??null,holderExempt:p.exempt,holderVerificationStatus:p.status,builderApprovalRequired:m&&!h?{...d.disclosure,...f}:null,...Tn(u,g)})}async function yi(e={},t={}){let n=await Wt(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 Cn({provider:"hl-perps",venue:"hyperliquid",kind:"perp-cancel",coin:n.coin,orderId:Number(r),...Tn(o,Number(e.nonce??Date.now()))})}async function Sf(e={},t={}){let n=await Wt(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||hi.CROSS).toLowerCase();if(o!==hi.CROSS&&o!==hi.ISOLATED)throw new Error('hl-perps: marginMode must be "cross" or "isolated"');let i={type:"updateLeverage",asset:n.assetId,isCross:o===hi.CROSS,leverage:r};return Cn({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,...Tn(i,Number(e.nonce??Date.now()))})}async function vf(e={},t={}){let n=await Wt(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 i=hf(o,6,"hl-perps: usd"),s={type:"updateIsolatedMargin",asset:n.assetId,isBuy:!0,ntli:i<=BigInt(Number.MAX_SAFE_INTEGER)?Number(i):i.toString()};return Cn({provider:"hl-perps",venue:"hyperliquid",kind:"perp-isolated-margin",coin:n.coin,usd:o,...Tn(s,Number(e.nonce??Date.now()))})}async function Ef(e={},t={}){let n=await Dr(e,t),r=await Wt(e,t),o=n.side==="buy",i=[n.action.orders[0]];if(e.takeProfitPx!=null&&i.push({a:r.assetId,b:!o,p:St(e.takeProfitPx,r.szDecimals),s:n.size,r:!0,t:mc(ve.TAKE_PROFIT_MARKET,{triggerPx:e.takeProfitPx,szDecimals:r.szDecimals})}),e.stopLossPx!=null&&i.push({a:r.assetId,b:!o,p:St(e.stopLossPx,r.szDecimals),s:n.size,r:!0,t:mc(ve.STOP_MARKET,{triggerPx:e.stopLossPx,szDecimals:r.szDecimals})}),i.length===1)throw new Error("hl-perps: a bracket needs takeProfitPx and/or stopLossPx");let s={type:"order",orders:i,grouping:"normalTpsl",...n.action.builder?{builder:n.action.builder}:{}};return Cn({provider:"hl-perps",venue:"hyperliquid",kind:"perp-bracket",coin:r.coin,legs:i.length,entry:{side:n.side,price:n.price,size:n.size},takeProfitPx:e.takeProfitPx==null?null:St(e.takeProfitPx,r.szDecimals),stopLossPx:e.stopLossPx==null?null:St(e.stopLossPx,r.szDecimals),builderFee:n.builderFee,...Tn(s,Number(e.nonce??Date.now()))})}async function kf(e={}){let t=await xr(e);return{provider:"hl-outcome",kind:"outcome-meta",outcomes:t?.outcomes||[],questions:t?.questions||[]}}async function Af(e={},t={}){let n=e.coin,r=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&&r!=null){let a=((await xr(t))?.outcomes||[]).find(c=>Number(c.outcome)===Number(r));if(a?.sideSpecs){let c=a.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=mi(r,o).coin}let i=await Dr({...e,coin:n},t);return O({...i,kind:"hip4-order",provider:"hl-perps"},{provider:"hl-perps",kind:"hip4-order"})}async function If(e={},t={}){let n=e.coin;if(!n&&e.outcome!=null){let r=e.side??0;n=mi(e.outcome,r).coin}return yi({...e,coin:n},t)}K();import{createHmac as XL,randomInt as iA}from"node:crypto";import{keccak256 as JL,concat as ZL,zeroPadValue as eM,getCreate2Address as tM,AbiCoder as nM}from"ethers";var Nf=137;var sA="0xE111180000d2663C0091e4f400237545B87B996B",aA="0xe2222d279d744050d28e00520010520000310F59",_f="0x0000000000000000000000000000000000000000000000000000000000000000",hc=6;var cA={name:"Polymarket CTF Exchange",version:"2",chainId:Nf},lA={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"}]},Pf={"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 bi(e){let t=String(e);return t.includes(".")?t.split(".")[1].replace(/0+$/,"").length:0}function wi(e,t){let n=10**t;return Math.floor(e*n+1e-12)/n}function Tf(e,t){let n=10**t;return Math.ceil(e*n-1e-12)/n}function uA(e,t){let n=10**t;return Math.round(e*n+Number.EPSILON)/n}function dA(e,t,n,r){let o=uA(Number(n),r.price);if(e==="BUY"){let c=wi(Number(t),r.size),l=c*o;return bi(l)>r.amount&&(l=Tf(l,r.amount+4),bi(l)>r.amount&&(l=wi(l,r.amount))),{rawMakerAmt:l,rawTakerAmt:c}}let s=wi(Number(t),r.size),a=s*o;return bi(a)>r.amount&&(a=Tf(a,r.amount+4),bi(a)>r.amount&&(a=wi(a,r.amount))),{rawMakerAmt:s,rawTakerAmt:a}}function Cf(e){let t=Number(e).toFixed(hc),[n,r=""]=t.split(".");return(n+r.padEnd(hc,"0").slice(0,hc)).replace(/^0+/,"")||"0"}function pA(e={}){let{tokenId:t,side:n,price:r,size:o,maker:i,signer:s,negRisk:a=!1,tickSize:c="0.01",orderType:l="GTC",signatureType:u=0,metadata:d=_f,builder:p=_f}=e;if(!t)throw new Error("tokenId required");if(n!=="BUY"&&n!=="SELL")throw new Error("side must be BUY or SELL");if(!i||!s)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=Pf[String(c)]||Pf["0.01"],{rawMakerAmt:g,rawTakerAmt:y}=dA(n,f,m,h),S=Cf(g),w=Cf(y),x=String(iA(1,2**31-1)),k=Date.now().toString(),C=n==="BUY"?0:1,P=a?aA:sA,I={salt:x,maker:i,signer:s,tokenId:String(t),makerAmount:S,takerAmount:w,side:C,signatureType:Number(u),timestamp:k,metadata:d,builder:p};return{domain:{...cA,verifyingContract:P},types:lA,value:I,orderType:l,side:n,notionalUsdc:n==="BUY"?g:y,exchange:P}}function Of(e={}){let t=pA(e);return O({provider:"poly-clob",kind:"poly-order",chainId:Nf,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 UA,keccak256 as Xf}from"ethers";import{createHash as fA}from"node:crypto";import{wordlists as hA}from"ethers";var Lf=1,gA=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),yA=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],bA=new Set([12,15,18,21,24]);function wA(e){let t=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return bA.has(t.length)&&t.every(n=>hA.en.getWordIndex(n)>=0)}var xA=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,SA=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,vA=new Set(["calldata","data","publickey","pubkey","message","payload","input","extradata"]);function EA(e){let t=Mf(e);return vA.has(t)||SA.test(t)}var Rn=class extends Error{constructor(t){super(`action receipt refused: secret-bearing field at ${t}`),this.name="ActionReceiptSecretError",this.code="ACTION_RECEIPT_SECRET"}};function Mf(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function kA(e){let t=Mf(e);return[...gA].some(n=>t.includes(n))}function AA(e,t,n){if(typeof t=="string"){if(yA.some(r=>r.test(t))||wA(t))throw new Rn(n);if(xA.test(t)&&!EA(e))throw new Rn(n)}}function $n(e,t="$",n=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return AA(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,i)=>$n(o,`${t}[${i}]`,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 i=`${t}.${o}`;if(kA(o))throw new Rn(i);e[o]!==void 0&&(r[o]=$n(e[o],i,o))}return r}function Be(e){return $n(e)}function gc(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(gc).join(",")}]`:`{${Object.keys(e).map(t=>`${JSON.stringify(t)}:${gc(e[t])}`).join(",")}}`}function Bf(e){return gc($n(e))}function Uf(e){if(!e||typeof e!="object"||Array.isArray(e))throw new TypeError("action receipt: object required");let{receiptId:t,summary:n,...r}=e;return fA("sha256").update(Bf(r)).digest("hex")}function On(e,...t){for(let n of t)if(e[n]!==void 0)return e[n]}function Nn(e,t,n){let r=On(e,...t);if(r==null)throw new TypeError(`action receipt: ${n} required`);return r}function IA(e){let t=On(e,"balances","balanceChanges"),n=On(e,"beforeBalances","balancesBefore","before"),r=On(e,"afterBalances","balancesAfter","after");return t!==void 0?{balances:t}:n===void 0&&r===void 0?{}:{balances:{...n===void 0?{}:{before:n},...r===void 0?{}:{after:r}}}}function Df(e={}){if(!e||typeof e!="object"||Array.isArray(e))throw new TypeError("action receipt: input object required");$n(e);let t=On(e,"txHash","transactionHash"),n=On(e,"phase","stage","resultType")??(t==null?"prepare":"execute");if(n!=="prepare"&&n!=="execute")throw new TypeError('action receipt: phase must be "prepare" or "execute"');let r={receiptVersion:Lf,phase:n,intent:Nn(e,["intent"],"intent"),route:Nn(e,["route"],"route"),decodedAction:Nn(e,["decodedAction","action"],"decodedAction"),policyChecks:Nn(e,["policyChecks","checks"],"policyChecks"),allowlistHits:Nn(e,["allowlistHits","allowlistMatches"],"allowlistHits"),prepareHash:Nn(e,["prepareHash"],"prepareHash"),...t==null?{}:{txHash:t},...IA(e)},o=$n(r);return Object.freeze({...o,receiptId:Uf(o)})}var _A=Df;function Rf(e,t=[]){if(typeof e=="string"||typeof e=="number")return String(e);for(let n of t)if(e?.[n]!=null)return String(e[n]);return"recorded"}function $f(e){if(typeof e=="boolean")return e;if(e&&typeof e=="object"){if(typeof e.ok=="boolean")return e.ok;if(typeof e.allowed=="boolean")return e.allowed;if(typeof e.passed=="boolean")return e.passed}return null}function Ff(e){if(!e||typeof e!="object")throw new TypeError("action receipt: object required");let t=Rf(e.decodedAction,["type","action","method","name"]),n=Rf(e.route,["name","provider","venue","id"]),r=Array.isArray(e.policyChecks)?e.policyChecks:Object.values(e.policyChecks||{}),o=r.filter(l=>$f(l)===!0).length,i=r.filter(l=>$f(l)===!1).length,s=Array.isArray(e.allowlistHits)?e.allowlistHits.length:Object.keys(e.allowlistHits||{}).length,a=e.txHash==null?"no transaction hash":`tx ${e.txHash}`,c=e.balances==null?"balances not provided":"before/after balances recorded";return`${e.phase} ${t} via ${n}; policy ${o} passed, ${i} failed; ${s} allowlist hit${s===1?"":"s"}; ${a}; ${c}; receipt ${e.receiptId}`}var PA=Ff;K();import{spawnSync as wc}from"node:child_process";import{existsSync as Gt,readFileSync as vi,readdirSync as Wf,statSync as Gf}from"node:fs";import{join as Xe}from"node:path";import{createHash as LA}from"node:crypto";import{existsSync as Hf,readFileSync as TA}from"node:fs";import{dirname as qf,join as yc}from"node:path";import{fileURLToPath as CA}from"node:url";function NA(e){let t=qf(CA(e));for(let n=0;n<8;n+=1){let r=yc(t,"package.json");if(Hf(r))try{let i=JSON.parse(TA(r,"utf8"));if(i&&typeof i.version=="string")return t}catch{}let o=qf(t);if(o===t)break;t=o}throw new Error(`oracle: could not resolve package root from ${e}`)}function xi(e,t){let n=NA(t),r=yc(n,e);return Hf(r)?r:yc(n,"dist","assets",e)}import{isAddress as OA}from"ethers";var jf="5.0.2",RA={"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 $A(e,t){return Object.freeze({id:e,contractName:t.contractName,source:t.source,dependency:Object.freeze({name:"OpenZeppelin Contracts",version:jf,tag:`v${jf}`}),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 bc=Object.freeze(Object.fromEntries(Object.entries(RA).map(([e,t])=>[e,$A(e,t)])));function Si(e){let t=bc[String(e||"")];if(!t)throw new Error(`protocol-templates: unknown template "${e}"`);return t}function Fr(e,t){try{if(BigInt(e)<=0n)throw new Error}catch{throw new Error(`${t} must be > 0`)}}function qr(e,t){let n=String(e||"");if(!OA(n)||/^0x0{40}$/i.test(n))throw new Error(`${t} must be nonzero address`)}function Vf(e,t){let n=Si(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,i,s,a]=t;if(!String(r||"").trim()||!String(o||"").trim())throw new Error("safe-erc20: name/symbol required");Fr(i,"safe-erc20: supply"),qr(s,"safe-erc20: initialHolder"),qr(a,"safe-erc20: initialOwner")}else if(e==="safe-erc721-drop"){let[r,o,i,s,a,c,l]=t;if(!String(r||"").trim()||!String(o||"").trim())throw new Error("safe-erc721-drop: name/symbol required");if(Fr(i,"safe-erc721-drop: cap"),qr(s,"safe-erc721-drop: treasury"),Fr(a,"safe-erc721-drop: mintPrice"),Fr(c,"safe-erc721-drop: perWalletCap"),BigInt(c)>BigInt(i))throw new Error("safe-erc721-drop: perWalletCap exceeds cap");qr(l,"safe-erc721-drop: initialOwner")}else if(e==="safe-vesting"){let[r,o,i]=t;qr(r,"safe-vesting: beneficiary");for(let[s,a]of[[o,"startTimestamp"],[i,"durationSeconds"]])try{let c=BigInt(s);if(c<0n||c>18446744073709551615n)throw new Error}catch{throw new Error(`safe-vesting: ${a} must be uint64`)}Fr(i,"safe-vesting: durationSeconds")}return n}function zf(e){return{authorities:[...e.authority],proxy:!1,upgradeable:!1,arbitraryDelegatecall:!1}}var Hr=xi("protocols/templates",import.meta.url),Ei="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 ki(){return Gt(Hr)?Wf(Hr).filter(e=>bc[e]&&Gf(Xe(Hr,e)).isDirectory()).map(e=>{let t=Xe(Hr,e),n=Xe(t,"SECURITY.md");return{id:e,path:t,metadata:Si(e),securityNotice:Gt(n)?vi(n,"utf8").slice(0,500):null,disclaimer:Ei}}):[]}function Kf(){if(process.env.FORGE_BIN)return process.env.FORGE_BIN;let e=process.env.HOME||"",t=["forge",Xe(e,".foundry/bin/forge")];for(let n of t)if(wc(n,["--version"],{encoding:"utf8"}).status===0)return n;return null}function MA(){return process.env.SLITHER_BIN?process.env.SLITHER_BIN:wc("slither",["--version"],{encoding:"utf8"}).status===0?"slither":null}function Ln(e,t,n){let r=wc(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 BA(e){let t=LA("sha256");function n(r){let o=Gf(r);if(o.isDirectory()){if(["lib","out","cache",".git"].includes(r.split("/").pop()))return;for(let i of Wf(r).sort())n(Xe(r,i))}else o.isFile()&&(r.endsWith(".sol")||r.endsWith(".toml")||r.endsWith(".md")||r.endsWith(".txt"))&&(t.update(r.slice(e.length)),t.update(vi(r)))}return n(e),t.digest("hex")}function xc(e,t={}){let n=Si(e),r=t.allowSkipStatic!==!1,o=Xe(Hr,e);if(!Gt(o))throw new Error(`protocol-templates: unknown template "${e}"`);let i=Kf();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(!Gt(Xe(o,"lib","forge-std"))){let m=Ln(i,["install","foundry-rs/forge-std","--no-git"],o);if(!m.ok)throw new Error(`protocol-templates: forge install forge-std failed
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
${
|
|
9
|
-
${l.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
${i.stderr}`.slice(0,1500));let s=n.metadata.contractName;if(t.contractName&&t.contractName!==s)throw new Error(`protocol-templates: fixed contract name is ${s}`);let a=Xe(o,"out",`${s}.sol`,`${s}.json`);if(!Gt(a))throw new Error(`protocol-templates: artifact missing at ${a}`);let c=JSON.parse(vi(a,"utf8"));return{gate:n,metadata:n.metadata,contractName:s,abi:c.abi,bytecode:c.bytecode?.object||c.bytecode,deployedBytecode:c.deployedBytecode?.object||c.deployedBytecode,artifactPath:a}}var DA=new Set(["status","chainId","forkBlockNumber","gasUsed","transactionHash","contractAddress","revertReason"]);function FA(e,t){if(typeof e!="object"||e===null||Array.isArray(e))throw new Error("prepareTemplateDeploy: localForkSimulationReceipt must be an object");let n=Be(e);for(let o of Object.keys(n))if(!DA.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 Qf(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??[],i=Vf(n,o),s=Yf(n,{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}`,u=(await new UA(s.abi,a).getDeployTransaction(...o)).data,d=t.localForkSimulationReceipt??e.localForkSimulationReceipt??null,p=d===null?{status:"not-run",injected:!1,trusted:!1,gateDecision:!1,networkSideEffects:!1}:{...FA(d,r),kind:"local-fork",injected:!0,trusted:!1,gateDecision:!1,networkSideEffects:!1},m={chainId:r,to:null,data:u,value:"0x0"};return O({provider:"protocol-templates",kind:"template-deploy",templateId:n,contractName:s.contractName,template:i,chainId:r,transaction:m,unsignedDeployEnvelope:{transaction:m,signed:!1,broadcast:!1},abi:s.abi,sourceHash:s.gate.sourceHash,bytecodeHash:Xf(a),authorityReport:zf(i),simulationReceipt:p,verificationManifest:{contractName:s.contractName,source:i.source,compiler:"0.8.24",optimizer:{enabled:!0,runs:200},openZeppelin:i.dependency,sourceHash:s.gate.sourceHash,creationBytecodeHash:Xf(a),constructorData:`0x${u.slice(a.length)}`},addressBookRecord:{status:"pending-deployment",address:null,chainId:r,label:`${n}:${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:Ei},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"})}K();import{createHash as Sc}from"node:crypto";import{secp256k1 as jr}from"@noble/curves/secp256k1.js";import{bech32m as Jf}from"@scure/base";var Ec="Reviewed scaffold and source checks only; NOT a paid security audit. Testnet simulation and independent review are required before mainnet use.",Zf="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",Ii=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 Pe(e,t){throw new Error(`${e}: ${t}`)}function rh(e){let t=String(e||"").trim();return/^[a-z][a-z0-9_]{1,47}$/.test(t)||Pe("native protocol","projectName must be 2-48 lowercase snake_case characters"),t}function vc(e,t,{min:n=0n,max:r=18446744073709551615n}={}){try{let o=BigInt(e);if(o<n||o>r)throw new Error;return o}catch{Pe(t,`must be an integer from ${n} to ${r}`)}}function HA(e){let t=String(e||"");if(!t||[...t].some(o=>!Zf.includes(o)))return null;let n=0n;for(let o of t)n=n*58n+BigInt(Zf.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 eh(e,t){let n=String(e||"").trim(),r=HA(n);return(!r||r.length!==32)&&Pe(t,"must be a 32-byte base58 Solana public key"),n}function th(e,t){let n=String(e||"").trim().toLowerCase();/^(02|03)[0-9a-f]{64}$/.test(n)||Pe(t,"must be a compressed secp256k1 public key");try{jr.Point.fromHex(n)}catch{Pe(t,"must encode a valid secp256k1 curve point")}return n}function jA(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}Pe("bitcoin-tapscript-vault","script too large")}function kc(e,t){let n=Sc("sha256").update(e).digest();return Sc("sha256").update(n).update(n).update(t).digest()}function nh(e){return kc("TapLeaf",Buffer.concat([Buffer.from([192]),jA(e.length),e]))}function VA(e,t){let[n,r]=Buffer.compare(e,t)<=0?[e,t]:[t,e];return kc("TapBranch",Buffer.concat([n,r]))}function Ai(e){return jr.Point.fromHex(e).x.toString(16).padStart(64,"0")}function oh(e){return Buffer.concat([Buffer.from([32]),Buffer.from(e,"hex")])}function zA(e,t){let n=[];return e.forEach((r,o)=>n.push(oh(Ai(r)),Buffer.from([o===0?172:186]))),n.push(Buffer.from([80+t,156])),Buffer.concat(n)}function WA(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 GA(e,t){return Buffer.concat([WA(t),Buffer.from([178,117]),oh(Ai(e)),Buffer.from([172])])}function KA(e,t,n){let r=jr.Point.fromHex(e),o=r.y&1n?r.negate():r,i=Buffer.from(o.x.toString(16).padStart(64,"0"),"hex"),s=BigInt(`0x${kc("TapTweak",Buffer.concat([i,t])).toString("hex")}`)%jr.Point.Fn.ORDER,a=o.add(jr.Point.BASE.multiply(s)),c=Buffer.from(a.x.toString(16).padStart(64,"0"),"hex"),l=n==="mainnet"?"bc":n==="regtest"?"bcrt":"tb";return{address:Jf.encode(l,[1,...Jf.toWords(c)],90),scriptPubKey:`5120${c.toString("hex")}`,outputKey:c.toString("hex"),internalKey:i.toString("hex")}}function Ue(e,t){return Object.freeze({path:e,content:t.endsWith(`
|
|
1
|
+
var P2=Object.create;var df=Object.defineProperty;var O2=Object.getOwnPropertyDescriptor;var q2=Object.getOwnPropertyNames;var H2=Object.getPrototypeOf,G2=Object.prototype.hasOwnProperty;var x=(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 Br=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(n){throw r=[n],n}};var v=(e,t)=>()=>{try{return t||e((t={exports:{}}).exports,t),t.exports}catch(r){throw t=0,r}},eB=(e,t)=>{for(var r in t)df(e,r,{get:t[r],enumerable:!0})},Y2=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of q2(t))!G2.call(e,o)&&o!==r&&df(e,o,{get:()=>t[o],enumerable:!(n=O2(t,o))||n.enumerable});return e};var V2=(e,t,r)=>(r=e!=null?P2(H2(e)):{},Y2(t||!e||!e.__esModule?df(r,"default",{value:e,enumerable:!0}):r,e));import{createHash as $2,createHmac as J2,timingSafeEqual as W2}from"node:crypto";function rB(e){let t=e==null||e===""?Ps:Number(e);return!Number.isFinite(t)||t<0?Ps:Math.min(t,hf)}function ff(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(ff).join(",")}]`:`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${ff(e[r])}`).join(",")}}`}function tB(e){let t=String(e?.ORACLE_STAMP_HMAC_SECRET||"").trim();return t.length>=16?t:""}function gf(e=process.env){return tB(process.env)||tB(e)}function z2(e=process.env){return String(process.env.ORACLE_STAMP_REQUIRE_MAC||"").trim()==="1"||String(e?.ORACLE_STAMP_REQUIRE_MAC||"").trim()==="1"}function j2(e){let{oraclePrepared:t,prepareHash:r,prepareMac:n,note:o,...i}=e||{};return i}function mf(e){let t=j2(e);return $2("sha256").update(ff(t)).digest("hex")}function Ef(e,t=gf()){return t?J2("sha256",t).update(String(e)).digest("hex"):""}function K2(e,t){try{let r=Buffer.from(String(e),"hex"),n=Buffer.from(String(t),"hex");return r.length===0||r.length!==n.length?!1:W2(r,n)}catch{return!1}}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+Ps,A={...o,preparedAt:i,expiresAt:s,prepareVersion:pf},c=mf(A),l=gf(n),u=l?Ef(c,l):void 0,d={...A,oraclePrepared:!0,prepareHash:c};return u&&(d.prepareMac=u),d}function X2(e,{maxAgeMs:t=Ps,nowMs:r=Date.now(),providers:n=null,kinds:o=null,label:i="operator",env:s=process.env}={}){if(!e||typeof e!="object")throw new Error(`${i}: prepared envelope object required`);if(e.oraclePrepared!==!0)throw new Error(`${i}: prepared integrity envelope missing \u2014 use an @oracle-agent/oracle prepare result`);if(Number(e.prepareVersion)!==pf)throw new Error(`${i}: unsupported prepareVersion ${e.prepareVersion}`);let a=mf(e);if(String(e.prepareHash||"")!==a)throw new Error(`${i}: prepareHash mismatch \u2014 payload was altered after prepare`);let A=gf(s),c=String(e.prepareMac||"");if(z2(s)||c||A){if(!A)throw new Error(`${i}: prepareMac present or ORACLE_STAMP_REQUIRE_MAC=1 but ORACLE_STAMP_HMAC_SECRET missing in signer`);let h=Ef(a,A);if(!c||!K2(c,h))throw new Error(`${i}: prepareMac mismatch \u2014 stamp not from trusted preparer`)}let l=Number(e.preparedAt),u=Number(e.expiresAt),d=rB(t),f=r-l,p=u-l;if(!Number.isFinite(f)||!Number.isFinite(u)||!Number.isFinite(p)||f<0||p<=0||p>hf||f>d||r>u)throw new Error(`${i}: prepare envelope expired or clock-skewed (ageMs=${f}, max=${d})`);if(n&&!new Set(n).has(e.provider))throw new Error(`${i}: provider ${e.provider} not allowed here`);if(o&&!new Set(o).has(e.kind))throw new Error(`${i}: kind ${e.kind} not allowed here`);return!0}var pf,Ps,hf,he=Br(()=>{pf=2,Ps=300*1e3,hf=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});var ke=v((Boe,nB)=>{nB.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 ae=v((yoe,xB)=>{"use strict";var oB=Symbol.for("undici.error.UND_ERR"),Se=class extends Error{constructor(t){super(t),this.name="UndiciError",this.code="UND_ERR"}static[Symbol.hasInstance](t){return t&&t[oB]===!0}[oB]=!0},iB=Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT"),If=class extends Se{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[iB]===!0}[iB]=!0},sB=Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT"),Cf=class extends Se{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[sB]===!0}[sB]=!0},aB=Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW"),Bf=class extends Se{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[aB]===!0}[aB]=!0},AB=Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT"),yf=class extends Se{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[AB]===!0}[AB]=!0},cB=Symbol.for("undici.error.UND_ERR_RESPONSE_STATUS_CODE"),Qf=class extends Se{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[cB]===!0}[cB]=!0},lB=Symbol.for("undici.error.UND_ERR_INVALID_ARG"),wf=class extends Se{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[lB]===!0}[lB]=!0},uB=Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE"),bf=class extends Se{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[uB]===!0}[uB]=!0},dB=Symbol.for("undici.error.UND_ERR_ABORT"),KA=class extends Se{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[dB]===!0}[dB]=!0},fB=Symbol.for("undici.error.UND_ERR_ABORTED"),kf=class extends KA{constructor(t){super(t),this.name="AbortError",this.message=t||"Request aborted",this.code="UND_ERR_ABORTED"}static[Symbol.hasInstance](t){return t&&t[fB]===!0}[fB]=!0},pB=Symbol.for("undici.error.UND_ERR_INFO"),Sf=class extends Se{constructor(t){super(t),this.name="InformationalError",this.message=t||"Request information",this.code="UND_ERR_INFO"}static[Symbol.hasInstance](t){return t&&t[pB]===!0}[pB]=!0},hB=Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"),xf=class extends Se{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[hB]===!0}[hB]=!0},gB=Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH"),vf=class extends Se{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[gB]===!0}[gB]=!0},mB=Symbol.for("undici.error.UND_ERR_DESTROYED"),Nf=class extends Se{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[mB]===!0}[mB]=!0},EB=Symbol.for("undici.error.UND_ERR_CLOSED"),Rf=class extends Se{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[EB]===!0}[EB]=!0},IB=Symbol.for("undici.error.UND_ERR_SOCKET"),Df=class extends Se{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[IB]===!0}[IB]=!0},CB=Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED"),Ff=class extends Se{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[CB]===!0}[CB]=!0},BB=Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM"),Mf=class extends Se{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[BB]===!0}[BB]=!0},yB=Symbol.for("undici.error.UND_ERR_HTTP_PARSER"),Tf=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[yB]===!0}[yB]=!0},QB=Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE"),Uf=class extends Se{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[QB]===!0}[QB]=!0},wB=Symbol.for("undici.error.UND_ERR_REQ_RETRY"),Lf=class extends Se{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[wB]===!0}[wB]=!0},bB=Symbol.for("undici.error.UND_ERR_RESPONSE"),_f=class extends Se{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[bB]===!0}[bB]=!0},kB=Symbol.for("undici.error.UND_ERR_PRX_TLS"),Pf=class extends Se{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[kB]===!0}[kB]=!0},SB=Symbol.for("undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"),Of=class extends Se{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[SB]===!0}get[SB](){return!0}};xB.exports={AbortError:KA,HTTPParserError:Tf,UndiciError:Se,HeadersTimeoutError:Cf,HeadersOverflowError:Bf,BodyTimeoutError:yf,RequestContentLengthMismatchError:xf,ConnectTimeoutError:If,ResponseStatusCodeError:Qf,InvalidArgumentError:wf,InvalidReturnValueError:bf,RequestAbortedError:kf,ClientDestroyedError:Nf,ClientClosedError:Rf,InformationalError:Sf,SocketError:Df,NotSupportedError:Ff,ResponseContentLengthMismatchError:vf,BalancedPoolMissingUpstreamError:Mf,ResponseExceededMaxSizeError:Uf,RequestRetryError:Lf,ResponseError:_f,SecureProxyConnectionError:Pf,MessageSizeExceededError:Of}});var ZA=v((Qoe,vB)=>{"use strict";var XA={},qf=["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<qf.length;++e){let t=qf[e],r=t.toLowerCase();XA[t]=XA[r]=r}Object.setPrototypeOf(XA,null);vB.exports={wellknownHeaderNames:qf,headerNameLowerCasedRecord:XA}});var FB=v((woe,DB)=>{"use strict";var{wellknownHeaderNames:NB,headerNameLowerCasedRecord:Z2}=ZA(),Hf=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}},ec=class{node=null;insert(t,r){this.node===null?this.node=new Hf(t,r,0):this.node.add(t,r)}lookup(t){return this.node?.search(t)?.value??null}},RB=new ec;for(let e=0;e<NB.length;++e){let t=Z2[NB[e]];RB.insert(t,t)}DB.exports={TernarySearchTree:ec,tree:RB}});var ee=v((boe,zB)=>{"use strict";var Os=x("node:assert"),{kDestroyed:TB,kBodyUsed:Jo,kListeners:Gf,kBody:MB}=ke(),{IncomingMessage:e_}=x("node:http"),nc=x("node:stream"),t_=x("node:net"),{Blob:r_}=x("node:buffer"),n_=x("node:util"),{stringify:o_}=x("node:querystring"),{EventEmitter:i_}=x("node:events"),{InvalidArgumentError:He}=ae(),{headerNameLowerCasedRecord:s_}=ZA(),{tree:UB}=FB(),[a_,A_]=process.versions.node.split(".").map(e=>Number(e)),rc=class{constructor(t){this[MB]=t,this[Jo]=!1}async*[Symbol.asyncIterator](){Os(!this[Jo],"disturbed"),this[Jo]=!0,yield*this[MB]}};function c_(e){return oc(e)?(qB(e)===0&&e.on("data",function(){Os(!1)}),typeof e.readableDidRead!="boolean"&&(e[Jo]=!1,i_.prototype.on.call(e,"data",function(){this[Jo]=!0})),e):e&&typeof e.pipeTo=="function"?new rc(e):e&&typeof e!="string"&&!ArrayBuffer.isView(e)&&OB(e)?new rc(e):e}function l_(){}function oc(e){return e&&typeof e=="object"&&typeof e.pipe=="function"&&typeof e.on=="function"}function LB(e){if(e===null)return!1;if(e instanceof r_)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 u_(e,t){if(e.includes("?")||e.includes("#"))throw new Error('Query params cannot be passed when url already contains "?" or "#".');let r=o_(t);return r&&(e+="?"+r),e}function _B(e){let t=parseInt(e,10);return t===Number(e)&&t>=0&&t<=65535}function tc(e){return e!=null&&e[0]==="h"&&e[1]==="t"&&e[2]==="t"&&e[3]==="p"&&(e[4]===":"||e[4]==="s"&&e[5]===":")}function PB(e){if(typeof e=="string"){if(e=new URL(e),!tc(e.origin||e.protocol))throw new He("Invalid URL protocol: the URL must start with `http:` or `https:`.");return e}if(!e||typeof e!="object")throw new He("Invalid URL: The URL argument must be a non-null object.");if(!(e instanceof URL)){if(e.port!=null&&e.port!==""&&_B(e.port)===!1)throw new He("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 He("Invalid URL path: the path must be a string or null/undefined.");if(e.pathname!=null&&typeof e.pathname!="string")throw new He("Invalid URL pathname: the pathname must be a string or null/undefined.");if(e.hostname!=null&&typeof e.hostname!="string")throw new He("Invalid URL hostname: the hostname must be a string or null/undefined.");if(e.origin!=null&&typeof e.origin!="string")throw new He("Invalid URL origin: the origin must be a string or null/undefined.");if(!tc(e.origin||e.protocol))throw new He("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(!tc(e.origin||e.protocol))throw new He("Invalid URL protocol: the URL must start with `http:` or `https:`.");return e}function d_(e){if(e=PB(e),e.pathname!=="/"||e.search||e.hash)throw new He("invalid url");return e}function f_(e){if(e[0]==="["){let r=e.indexOf("]");return Os(r!==-1),e.substring(1,r)}let t=e.indexOf(":");return t===-1?e:e.substring(0,t)}function p_(e){if(!e)return null;Os(typeof e=="string");let t=f_(e);return t_.isIP(t)?"":t}function h_(e){return JSON.parse(JSON.stringify(e))}function g_(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}function OB(e){return e!=null&&(typeof e[Symbol.iterator]=="function"||typeof e[Symbol.asyncIterator]=="function")}function qB(e){if(e==null)return 0;if(oc(e)){let t=e._readableState;return t&&t.objectMode===!1&&t.ended===!0&&Number.isFinite(t.length)?t.length:null}else{if(LB(e))return e.size!=null?e.size:null;if(YB(e))return e.byteLength}return null}function HB(e){return e&&!!(e.destroyed||e[TB]||nc.isDestroyed?.(e))}function m_(e,t){e==null||!oc(e)||HB(e)||(typeof e.destroy=="function"?(Object.getPrototypeOf(e).constructor===e_&&(e.socket=null),e.destroy(t)):t&&queueMicrotask(()=>{e.emit("error",t)}),e.destroyed!==!0&&(e[TB]=!0))}var E_=/timeout=(\d+)/;function I_(e){let t=e.toString().match(E_);return t?parseInt(t[1],10)*1e3:null}function GB(e){return typeof e=="string"?s_[e]??e.toLowerCase():UB.lookup(e)??e.toString("latin1").toLowerCase()}function C_(e){return UB.lookup(e)??e.toString("latin1").toLowerCase()}function B_(e,t){t===void 0&&(t={});for(let r=0;r<e.length;r+=2){let n=GB(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 y_(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 YB(e){return e instanceof Uint8Array||Buffer.isBuffer(e)}function Q_(e,t,r){if(!e||typeof e!="object")throw new He("handler must be an object");if(typeof e.onConnect!="function")throw new He("invalid onConnect method");if(typeof e.onError!="function")throw new He("invalid onError method");if(typeof e.onBodySent!="function"&&e.onBodySent!==void 0)throw new He("invalid onBodySent method");if(r||t==="CONNECT"){if(typeof e.onUpgrade!="function")throw new He("invalid onUpgrade method")}else{if(typeof e.onHeaders!="function")throw new He("invalid onHeaders method");if(typeof e.onData!="function")throw new He("invalid onData method");if(typeof e.onComplete!="function")throw new He("invalid onComplete method")}}function w_(e){return!!(e&&(nc.isDisturbed(e)||e[Jo]))}function b_(e){return!!(e&&nc.isErrored(e))}function k_(e){return!!(e&&nc.isReadable(e))}function S_(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 x_(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 v_(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 N_(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 R_=typeof String.prototype.toWellFormed=="function",D_=typeof String.prototype.isWellFormed=="function";function VB(e){return R_?`${e}`.toWellFormed():n_.toUSVString(e)}function F_(e){return D_?`${e}`.isWellFormed():VB(e)===`${e}`}function $B(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 M_(e){if(e.length===0)return!1;for(let t=0;t<e.length;++t)if(!$B(e.charCodeAt(t)))return!1;return!0}var T_=/[^\t\x20-\x7e\x80-\xff]/;function U_(e){return!T_.test(e)}function L_(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 __(e,t,r){return(e[Gf]??=[]).push([t,r]),e.on(t,r),e}function P_(e){for(let[t,r]of e[Gf]??[])e.removeListener(t,r);e[Gf]=null}function O_(e,t,r){try{t.onError(r),Os(t.aborted)}catch(n){e.emit("error",n)}}var JB=Object.create(null);JB.enumerable=!0;var Yf={delete:"DELETE",DELETE:"DELETE",get:"GET",GET:"GET",head:"HEAD",HEAD:"HEAD",options:"OPTIONS",OPTIONS:"OPTIONS",post:"POST",POST:"POST",put:"PUT",PUT:"PUT"},WB={...Yf,patch:"patch",PATCH:"PATCH"};Object.setPrototypeOf(Yf,null);Object.setPrototypeOf(WB,null);zB.exports={kEnumerableProperty:JB,nop:l_,isDisturbed:w_,isErrored:b_,isReadable:k_,toUSVString:VB,isUSVString:F_,isBlobLike:LB,parseOrigin:d_,parseURL:PB,getServerName:p_,isStream:oc,isIterable:OB,isAsyncIterable:g_,isDestroyed:HB,headerNameToString:GB,bufferToLowerCasedHeaderName:C_,addListener:__,removeAllListeners:P_,errorRequest:O_,parseRawHeaders:y_,parseHeaders:B_,parseKeepAliveTimeout:I_,destroy:m_,bodyLength:qB,deepClone:h_,ReadableStreamFrom:x_,isBuffer:YB,validateHandler:Q_,getSocketInfo:S_,isFormDataLike:v_,buildURL:u_,addAbortListener:N_,isValidHTTPToken:M_,isValidHeaderValue:U_,isTokenCharCode:$B,parseRangeHeader:L_,normalizedMethodRecordsBase:Yf,normalizedMethodRecords:WB,isValidPort:_B,isHttpOrHttpsPrefixed:tc,nodeMajor:a_,nodeMinor:A_,safeHTTPMethods:["GET","HEAD","OPTIONS","TRACE"],wrapRequestBody:c_}});var Wo=v((koe,KB)=>{"use strict";var de=x("node:diagnostics_channel"),$f=x("node:util"),ic=$f.debuglog("undici"),Vf=$f.debuglog("fetch"),Zn=$f.debuglog("websocket"),jB=!1,q_={beforeConnect:de.channel("undici:client:beforeConnect"),connected:de.channel("undici:client:connected"),connectError:de.channel("undici:client:connectError"),sendHeaders:de.channel("undici:client:sendHeaders"),create:de.channel("undici:request:create"),bodySent:de.channel("undici:request:bodySent"),headers:de.channel("undici:request:headers"),trailers:de.channel("undici:request:trailers"),error:de.channel("undici:request:error"),open:de.channel("undici:websocket:open"),close:de.channel("undici:websocket:close"),socketError:de.channel("undici:websocket:socket_error"),ping:de.channel("undici:websocket:ping"),pong:de.channel("undici:websocket:pong")};if(ic.enabled||Vf.enabled){let e=Vf.enabled?Vf:ic;de.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)}),de.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)}),de.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)}),de.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)}),de.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)}),de.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)}),de.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)}),jB=!0}if(Zn.enabled){if(!jB){let e=ic.enabled?ic:Zn;de.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)}),de.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)}),de.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)}),de.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)})}de.channel("undici:websocket:open").subscribe(e=>{let{address:{address:t,port:r}}=e;Zn("connection opened %s%s",t,r?`:${r}`:"")}),de.channel("undici:websocket:close").subscribe(e=>{let{websocket:t,code:r,reason:n}=e;Zn("closed connection to %s - %s %s",t.url,r,n)}),de.channel("undici:websocket:socket_error").subscribe(e=>{Zn("connection errored - %s",e.message)}),de.channel("undici:websocket:ping").subscribe(e=>{Zn("ping received")}),de.channel("undici:websocket:pong").subscribe(e=>{Zn("pong received")})}KB.exports={channels:q_}});var t0=v((Soe,e0)=>{"use strict";var{InvalidArgumentError:me,NotSupportedError:H_}=ae(),Hr=x("node:assert"),{isValidHTTPToken:ZB,isValidHeaderValue:qs,isStream:G_,destroy:Y_,isBuffer:V_,isFormDataLike:$_,isIterable:J_,isBlobLike:W_,buildURL:z_,validateHandler:j_,getServerName:K_,normalizedMethodRecords:X_}=ee(),{channels:yr}=Wo(),{headerNameLowerCasedRecord:XB}=ZA(),Z_=/[^\u0021-\u00ff]/,Lt=Symbol("handler"),Jf=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:f,expectContinue:p,servername:h},g){if(typeof r!="string")throw new me("path must be a string");if(r[0]!=="/"&&!(r.startsWith("http://")||r.startsWith("https://"))&&n!=="CONNECT")throw new me("path must be an absolute URL or start with a slash");if(Z_.test(r))throw new me("invalid request path");if(typeof n!="string")throw new me("method must be a string");if(X_[n]===void 0&&!ZB(n))throw new me("invalid request method");if(c&&typeof c!="string")throw new me("upgrade must be a string");if(c&&!qs(c))throw new me("invalid upgrade header");if(l!=null&&(!Number.isFinite(l)||l<0))throw new me("invalid headersTimeout");if(u!=null&&(!Number.isFinite(u)||u<0))throw new me("invalid bodyTimeout");if(d!=null&&typeof d!="boolean")throw new me("invalid reset");if(p!=null&&typeof p!="boolean")throw new me("invalid expectContinue");if(this.headersTimeout=l,this.bodyTimeout=u,this.throwOnError=f===!0,this.method=n,this.abort=null,o==null)this.body=null;else if(G_(o)){this.body=o;let m=this.body._readableState;(!m||!m.autoDestroy)&&(this.endHandler=function(){Y_(this)},this.body.on("end",this.endHandler)),this.errorHandler=C=>{this.abort?this.abort(C):this.error=C},this.body.on("error",this.errorHandler)}else if(V_(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($_(o)||J_(o)||W_(o))this.body=o;else throw new me("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?z_(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=p??!1,Array.isArray(i)){if(i.length%2!==0)throw new me("headers array must be even");for(let m=0;m<i.length;m+=2)sc(this,i[m],i[m+1])}else if(i&&typeof i=="object")if(i[Symbol.iterator])for(let m of i){if(!Array.isArray(m)||m.length!==2)throw new me("headers must be in key-value pair format");sc(this,m[0],m[1])}else{let m=Object.keys(i);for(let C=0;C<m.length;++C)sc(this,m[C],i[m[C]])}else if(i!=null)throw new me("headers must be an object or an array");j_(g,n,c),this.servername=h||K_(this.host),this[Lt]=g,yr.create.hasSubscribers&&yr.create.publish({request:this})}onBodySent(t){if(this[Lt].onBodySent)try{return this[Lt].onBodySent(t)}catch(r){this.abort(r)}}onRequestSent(){if(yr.bodySent.hasSubscribers&&yr.bodySent.publish({request:this}),this[Lt].onRequestSent)try{return this[Lt].onRequestSent()}catch(t){this.abort(t)}}onConnect(t){if(Hr(!this.aborted),Hr(!this.completed),this.error)t(this.error);else return this.abort=t,this[Lt].onConnect(t)}onResponseStarted(){return this[Lt].onResponseStarted?.()}onHeaders(t,r,n,o){Hr(!this.aborted),Hr(!this.completed),yr.headers.hasSubscribers&&yr.headers.publish({request:this,response:{statusCode:t,headers:r,statusText:o}});try{return this[Lt].onHeaders(t,r,n,o)}catch(i){this.abort(i)}}onData(t){Hr(!this.aborted),Hr(!this.completed);try{return this[Lt].onData(t)}catch(r){return this.abort(r),!1}}onUpgrade(t,r,n){return Hr(!this.aborted),Hr(!this.completed),this[Lt].onUpgrade(t,r,n)}onComplete(t){this.onFinally(),Hr(!this.aborted),this.completed=!0,yr.trailers.hasSubscribers&&yr.trailers.publish({request:this,trailers:t});try{return this[Lt].onComplete(t)}catch(r){this.onError(r)}}onError(t){if(this.onFinally(),yr.error.hasSubscribers&&yr.error.publish({request:this,error:t}),!this.aborted)return this.aborted=!0,this[Lt].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 sc(this,t,r),this}};function sc(e,t,r){if(r&&typeof r=="object"&&!Array.isArray(r))throw new me(`invalid ${t} header`);if(r===void 0)return;let n=XB[t];if(n===void 0&&(n=t.toLowerCase(),XB[n]===void 0&&!ZB(n)))throw new me("invalid header key");if(Array.isArray(r)){let o=[];for(let i=0;i<r.length;i++)if(typeof r[i]=="string"){if(!qs(r[i]))throw new me(`invalid ${t} header`);o.push(r[i])}else if(r[i]===null)o.push("");else{if(typeof r[i]=="object")throw new me(`invalid ${t} header`);{let s=`${r[i]}`;if(!qs(s))throw new me(`invalid ${t} header`);o.push(s)}}r=o}else if(typeof r=="string"){if(!qs(r))throw new me(`invalid ${t} header`)}else if(r===null)r="";else if(r=`${r}`,!qs(r))throw new me(`invalid ${t} header`);if(n==="host"){if(e.host!==null)throw new me("duplicate host header");if(typeof r!="string")throw new me("invalid host header");e.host=r}else if(n==="content-length"){if(e.contentLength!==null)throw new me("duplicate content-length header");if(e.contentLength=parseInt(r,10),!Number.isFinite(e.contentLength))throw new me("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 me(`invalid ${n} header`);if(n==="connection"){let o=typeof r=="string"?r.toLowerCase():null;if(o!=="close"&&o!=="keep-alive")throw new me("invalid connection header");o==="close"&&(e.reset=!0)}else{if(n==="expect")throw new H_("expect header not supported");e.headers.push(t,r)}}}e0.exports=Jf});var Hs=v((xoe,r0)=>{"use strict";var eP=x("node:events"),ac=class extends eP{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 Wf(this,n)}},Wf=class extends ac{#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)}};r0.exports=ac});var Xo=v((voe,n0)=>{"use strict";var tP=Hs(),{ClientDestroyedError:zf,ClientClosedError:rP,InvalidArgumentError:zo}=ae(),{kDestroy:nP,kClose:oP,kClosed:Gs,kDestroyed:jo,kDispatch:jf,kInterceptors:eo}=ke(),Gr=Symbol("onDestroyed"),Ko=Symbol("onClosed"),Ac=Symbol("Intercepted Dispatch"),Kf=Symbol("webSocketOptions"),Xf=class extends tP{constructor(t){super(),this[jo]=!1,this[Gr]=null,this[Gs]=!1,this[Ko]=[],this[Kf]=t?.webSocket??{}}get webSocketOptions(){return{maxFragments:this[Kf].maxFragments??131072,maxPayloadSize:this[Kf].maxPayloadSize??128*1024*1024}}get destroyed(){return this[jo]}get closed(){return this[Gs]}get interceptors(){return this[eo]}set interceptors(t){if(t){for(let r=t.length-1;r>=0;r--)if(typeof this[eo][r]!="function")throw new zo("interceptor must be an function")}this[eo]=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 zo("invalid callback");if(this[jo]){queueMicrotask(()=>t(new zf,null));return}if(this[Gs]){this[Ko]?this[Ko].push(t):queueMicrotask(()=>t(null,null));return}this[Gs]=!0,this[Ko].push(t);let r=()=>{let n=this[Ko];this[Ko]=null;for(let o=0;o<n.length;o++)n[o](null,null)};this[oP]().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 zo("invalid callback");if(this[jo]){this[Gr]?this[Gr].push(r):queueMicrotask(()=>r(null,null));return}t||(t=new zf),this[jo]=!0,this[Gr]=this[Gr]||[],this[Gr].push(r);let n=()=>{let o=this[Gr];this[Gr]=null;for(let i=0;i<o.length;i++)o[i](null,null)};this[nP](t).then(()=>{queueMicrotask(n)})}[Ac](t,r){if(!this[eo]||this[eo].length===0)return this[Ac]=this[jf],this[jf](t,r);let n=this[jf].bind(this);for(let o=this[eo].length-1;o>=0;o--)n=this[eo][o](n);return this[Ac]=n,n(t,r)}dispatch(t,r){if(!r||typeof r!="object")throw new zo("handler must be an object");try{if(!t||typeof t!="object")throw new zo("opts must be an object.");if(this[jo]||this[Gr])throw new zf;if(this[Gs])throw new rP;return this[Ac](t,r)}catch(n){if(typeof r.onError!="function")throw new zo("invalid onError method");return r.onError(n),!1}}};n0.exports=Xf});var ip=v((Noe,a0)=>{"use strict";var Zo=0,Zf=1e3,ep=(Zf>>1)-1,Yr,tp=Symbol("kFastTimer"),Vr=[],rp=-2,np=-1,i0=0,o0=1;function op(){Zo+=ep;let e=0,t=Vr.length;for(;e<t;){let r=Vr[e];r._state===i0?(r._idleStart=Zo-ep,r._state=o0):r._state===o0&&Zo>=r._idleStart+r._idleTimeout&&(r._state=np,r._idleStart=-1,r._onTimeout(r._timerArg)),r._state===np?(r._state=rp,--t!==0&&(Vr[e]=Vr[t])):++e}Vr.length=t,Vr.length!==0&&s0()}function s0(){Yr?Yr.refresh():(clearTimeout(Yr),Yr=setTimeout(op,ep),Yr.unref&&Yr.unref())}var cc=class{[tp]=!0;_state=rp;_idleTimeout=-1;_idleStart=-1;_onTimeout;_timerArg;constructor(t,r,n){this._onTimeout=t,this._idleTimeout=r,this._timerArg=n,this.refresh()}refresh(){this._state===rp&&Vr.push(this),(!Yr||Vr.length===1)&&s0(),this._state=i0}clear(){this._state=np,this._idleStart=-1}};a0.exports={setTimeout(e,t,r){return t<=Zf?setTimeout(e,t,r):new cc(e,t,r)},clearTimeout(e){e[tp]?e.clear():clearTimeout(e)},setFastTimeout(e,t,r){return new cc(e,t,r)},clearFastTimeout(e){e.clear()},now(){return Zo},tick(e=0){Zo+=e-Zf+1,op(),op()},reset(){Zo=0,Vr.length=0,clearTimeout(Yr),Yr=null},kFastTimer:tp}});var Ys=v((Foe,d0)=>{"use strict";var iP=x("node:net"),A0=x("node:assert"),u0=ee(),{InvalidArgumentError:sP,ConnectTimeoutError:aP}=ae(),lc=ip();function c0(){}var sp,ap;global.FinalizationRegistry&&!(process.env.NODE_V8_COVERAGE||process.env.UNDICI_NO_FG)?ap=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))}}:ap=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 AP({allowH2:e,maxCachedSessions:t,socketPath:r,timeout:n,session:o,...i}){if(t!=null&&(!Number.isInteger(t)||t<0))throw new sP("maxCachedSessions must be a positive integer or zero");let s={path:r,...i},a=new ap(t??100);return n=n??1e4,e=e??!1,function({hostname:c,host:l,protocol:u,port:d,servername:f,localAddress:p,httpSocket:h},g){let m;if(u==="https:"){sp||(sp=x("node:tls")),f=f||s.servername||u0.getServerName(l)||null;let E=f||c;A0(E);let I=o||a.get(E)||null;d=d||443,m=sp.connect({highWaterMark:16384,...s,servername:f,session:I,localAddress:p,ALPNProtocols:e?["http/1.1","h2"]:["http/1.1"],socket:h,port:d,host:c}),m.on("session",function(Q){a.set(E,Q)})}else A0(!h,"httpSocket can only be sent on TLS update"),d=d||80,m=iP.connect({highWaterMark:64*1024,...s,localAddress:p,port:d,host:c});if(s.keepAlive==null||s.keepAlive){let E=s.keepAliveInitialDelay===void 0?6e4:s.keepAliveInitialDelay;m.setKeepAlive(!0,E)}let C=cP(new WeakRef(m),{timeout:n,hostname:c,port:d});return m.setNoDelay(!0).once(u==="https:"?"secureConnect":"connect",function(){if(queueMicrotask(C),g){let E=g;g=null,E(null,this)}}).on("error",function(E){if(queueMicrotask(C),g){let I=g;g=null,I(E)}}),m}}var cP=process.platform==="win32"?(e,t)=>{if(!t.timeout)return c0;let r=null,n=null,o=lc.setFastTimeout(()=>{r=setImmediate(()=>{n=setImmediate(()=>l0(e.deref(),t))})},t.timeout);return()=>{lc.clearFastTimeout(o),clearImmediate(r),clearImmediate(n)}}:(e,t)=>{if(!t.timeout)return c0;let r=null,n=lc.setFastTimeout(()=>{r=setImmediate(()=>{l0(e.deref(),t)})},t.timeout);return()=>{lc.clearFastTimeout(n),clearImmediate(r)}};function l0(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)`,u0.destroy(e,new aP(r))}d0.exports=AP});var f0=v(uc=>{"use strict";Object.defineProperty(uc,"__esModule",{value:!0});uc.enumToMap=void 0;function lP(e){let t={};return Object.keys(e).forEach(r=>{let n=e[r];typeof n=="number"&&(t[r]=n)}),t}uc.enumToMap=lP});var p0=v(F=>{"use strict";Object.defineProperty(F,"__esModule",{value:!0});F.SPECIAL_HEADERS=F.HEADER_STATE=F.MINOR=F.MAJOR=F.CONNECTION_TOKEN_CHARS=F.HEADER_CHARS=F.TOKEN=F.STRICT_TOKEN=F.HEX=F.URL_CHAR=F.STRICT_URL_CHAR=F.USERINFO_CHARS=F.MARK=F.ALPHANUM=F.NUM=F.HEX_MAP=F.NUM_MAP=F.ALPHA=F.FINISH=F.H_METHOD_MAP=F.METHOD_MAP=F.METHODS_RTSP=F.METHODS_ICE=F.METHODS_HTTP=F.METHODS=F.LENIENT_FLAGS=F.FLAGS=F.TYPE=F.ERROR=void 0;var uP=f0(),dP;(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"})(dP=F.ERROR||(F.ERROR={}));var fP;(function(e){e[e.BOTH=0]="BOTH",e[e.REQUEST=1]="REQUEST",e[e.RESPONSE=2]="RESPONSE"})(fP=F.TYPE||(F.TYPE={}));var pP;(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"})(pP=F.FLAGS||(F.FLAGS={}));var hP;(function(e){e[e.HEADERS=1]="HEADERS",e[e.CHUNKED_LENGTH=2]="CHUNKED_LENGTH",e[e.KEEP_ALIVE=4]="KEEP_ALIVE"})(hP=F.LENIENT_FLAGS||(F.LENIENT_FLAGS={}));var Y;(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"})(Y=F.METHODS||(F.METHODS={}));F.METHODS_HTTP=[Y.DELETE,Y.GET,Y.HEAD,Y.POST,Y.PUT,Y.CONNECT,Y.OPTIONS,Y.TRACE,Y.COPY,Y.LOCK,Y.MKCOL,Y.MOVE,Y.PROPFIND,Y.PROPPATCH,Y.SEARCH,Y.UNLOCK,Y.BIND,Y.REBIND,Y.UNBIND,Y.ACL,Y.REPORT,Y.MKACTIVITY,Y.CHECKOUT,Y.MERGE,Y["M-SEARCH"],Y.NOTIFY,Y.SUBSCRIBE,Y.UNSUBSCRIBE,Y.PATCH,Y.PURGE,Y.MKCALENDAR,Y.LINK,Y.UNLINK,Y.PRI,Y.SOURCE];F.METHODS_ICE=[Y.SOURCE];F.METHODS_RTSP=[Y.OPTIONS,Y.DESCRIBE,Y.ANNOUNCE,Y.SETUP,Y.PLAY,Y.PAUSE,Y.TEARDOWN,Y.GET_PARAMETER,Y.SET_PARAMETER,Y.REDIRECT,Y.RECORD,Y.FLUSH,Y.GET,Y.POST];F.METHOD_MAP=uP.enumToMap(Y);F.H_METHOD_MAP={};Object.keys(F.METHOD_MAP).forEach(e=>{/^H/.test(e)&&(F.H_METHOD_MAP[e]=F.METHOD_MAP[e])});var gP;(function(e){e[e.SAFE=0]="SAFE",e[e.SAFE_WITH_CB=1]="SAFE_WITH_CB",e[e.UNSAFE=2]="UNSAFE"})(gP=F.FINISH||(F.FINISH={}));F.ALPHA=[];for(let e=65;e<=90;e++)F.ALPHA.push(String.fromCharCode(e)),F.ALPHA.push(String.fromCharCode(e+32));F.NUM_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9};F.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};F.NUM=["0","1","2","3","4","5","6","7","8","9"];F.ALPHANUM=F.ALPHA.concat(F.NUM);F.MARK=["-","_",".","!","~","*","'","(",")"];F.USERINFO_CHARS=F.ALPHANUM.concat(F.MARK).concat(["%",";",":","&","=","+","$",","]);F.STRICT_URL_CHAR=["!",'"',"$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","@","[","\\","]","^","_","`","{","|","}","~"].concat(F.ALPHANUM);F.URL_CHAR=F.STRICT_URL_CHAR.concat([" ","\f"]);for(let e=128;e<=255;e++)F.URL_CHAR.push(e);F.HEX=F.NUM.concat(["a","b","c","d","e","f","A","B","C","D","E","F"]);F.STRICT_TOKEN=["!","#","$","%","&","'","*","+","-",".","^","_","`","|","~"].concat(F.ALPHANUM);F.TOKEN=F.STRICT_TOKEN.concat([" "]);F.HEADER_CHARS=[" "];for(let e=32;e<=255;e++)e!==127&&F.HEADER_CHARS.push(e);F.CONNECTION_TOKEN_CHARS=F.HEADER_CHARS.filter(e=>e!==44);F.MAJOR=F.NUM_MAP;F.MINOR=F.MAJOR;var ei;(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"})(ei=F.HEADER_STATE||(F.HEADER_STATE={}));F.SPECIAL_HEADERS={connection:ei.CONNECTION,"content-length":ei.CONTENT_LENGTH,"proxy-connection":ei.CONNECTION,"transfer-encoding":ei.TRANSFER_ENCODING,upgrade:ei.UPGRADE}});var Ap=v((Uoe,h0)=>{"use strict";var{Buffer:mP}=x("node:buffer");h0.exports=mP.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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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxBACEDDKIBCyACQeQANgIcIAIgATYCFCACQeMXNgIQIAJBFTYCDEEAIQMMoQELIAJBADYCACAGQQFqIQEgAi0AKSIAQSNrQQtJDQQCQCAAQQZLDQBBASAAdEHKAHFFDQAMBQtBACEDIAJBADYCHCACIAE2AhQgAkH3CTYCECACQQg2AgwMoAELIAJBADYCACAGQQFqIQEgAi0AKUEhRg0DIAJBADYCHCACIAE2AhQgAkGbCjYCECACQQg2AgxBACEDDJ8BCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJBkDM2AhAgAkEINgIMDJ0BCyACQQA2AgAgBkEBaiEBIAItAClBI0kNACACQQA2AhwgAiABNgIUIAJB0wk2AhAgAkEINgIMQQAhAwycAQtB0QAhAwyCAQsgAS0AAEEwayIAQf8BcUEKSQRAIAIgADoAKiABQQFqIQFBzwAhAwyCAQsgAigCBCEAIAJBADYCBCACIAAgARAoIgBFDYYBIAJB3gA2AhwgAiABNgIUIAIgADYCDEEAIQMMmgELIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ2GASACQdwANgIcIAIgATYCFCACIAA2AgxBACEDDJkBCyACKAIEIQAgAkEANgIEIAIgACAFECgiAEUEQCAFIQEMhwELIAJB2gA2AhwgAiAFNgIUIAIgADYCDAyYAQtBACEBQQEhAwsgAiADOgArIAVBAWohAwJAAkACQCACLQAtQRBxDQACQAJAAkAgAi0AKg4DAQACBAsgBkUNAwwCCyAADQEMAgsgAUUNAQsgAigCBCEAIAJBADYCBCACIAAgAxAoIgBFBEAgAyEBDAILIAJB2AA2AhwgAiADNgIUIAIgADYCDEEAIQMMmAELIAIoAgQhACACQQA2AgQgAiAAIAMQKCIARQRAIAMhAQyHAQsgAkHZADYCHCACIAM2AhQgAiAANgIMQQAhAwyXAQtBzAAhAwx9CyAAQRVHBEAgAkEANgIcIAIgATYCFCACQZQNNgIQIAJBITYCDEEAIQMMlgELIAJB1wA2AhwgAiABNgIUIAJByRc2AhAgAkEVNgIMQQAhAwyVAQtBACEDIAJBADYCHCACIAE2AhQgAkGAETYCECACQQk2AgwMlAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0AIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMkwELQckAIQMMeQsgAkEANgIcIAIgATYCFCACQcEoNgIQIAJBBzYCDCACQQA2AgBBACEDDJEBCyACKAIEIQBBACEDIAJBADYCBCACIAAgARAlIgBFDQAgAkHSADYCHCACIAE2AhQgAiAANgIMDJABC0HIACEDDHYLIAJBADYCACAFIQELIAJBgBI7ASogAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANAQtBxwAhAwxzCyAAQRVGBEAgAkHRADYCHCACIAE2AhQgAkHjFzYCECACQRU2AgxBACEDDIwBC0EAIQMgAkEANgIcIAIgATYCFCACQbkNNgIQIAJBGjYCDAyLAQtBACEDIAJBADYCHCACIAE2AhQgAkGgGTYCECACQR42AgwMigELIAEtAABBOkYEQCACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgBFDQEgAkHDADYCHCACIAA2AgwgAiABQQFqNgIUDIoBC0EAIQMgAkEANgIcIAIgATYCFCACQbERNgIQIAJBCjYCDAyJAQsgAUEBaiEBQTshAwxvCyACQcMANgIcIAIgADYCDCACIAFBAWo2AhQMhwELQQAhAyACQQA2AhwgAiABNgIUIAJB8A42AhAgAkEcNgIMDIYBCyACIAIvATBBEHI7ATAMZgsCQCACLwEwIgBBCHFFDQAgAi0AKEEBRw0AIAItAC1BCHFFDQMLIAIgAEH3+wNxQYAEcjsBMAwECyABIARHBEACQANAIAEtAABBMGsiAEH/AXFBCk8EQEE1IQMMbgsgAikDICIKQpmz5syZs+bMGVYNASACIApCCn4iCjcDICAKIACtQv8BgyILQn+FVg0BIAIgCiALfDcDICAEIAFBAWoiAUcNAAtBOSEDDIUBCyACKAIEIQBBACEDIAJBADYCBCACIAAgAUEBaiIBECoiAA0MDHcLQTkhAwyDAQsgAi0AMEEgcQ0GQcUBIQMMaQtBACEDIAJBADYCBCACIAEgARAqIgBFDQQgAkE6NgIcIAIgADYCDCACIAFBAWo2AhQMgQELIAItAChBAUcNACACLQAtQQhxRQ0BC0E3IQMMZgsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIABEAgAkE7NgIcIAIgADYCDCACIAFBAWo2AhQMfwsgAUEBaiEBDG4LIAJBCDoALAwECyABQQFqIQEMbQtBACEDIAJBADYCHCACIAE2AhQgAkHkEjYCECACQQQ2AgwMewsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIARQ1sIAJBNzYCHCACIAE2AhQgAiAANgIMDHoLIAIgAi8BMEEgcjsBMAtBMCEDDF8LIAJBNjYCHCACIAE2AhQgAiAANgIMDHcLIABBLEcNASABQQFqIQBBASEBAkACQAJAAkACQCACLQAsQQVrDgQDAQIEAAsgACEBDAQLQQIhAQwBC0EEIQELIAJBAToALCACIAIvATAgAXI7ATAgACEBDAELIAIgAi8BMEEIcjsBMCAAIQELQTkhAwxcCyACQQA6ACwLQTQhAwxaCyABIARGBEBBLSEDDHMLAkACQANAAkAgAS0AAEEKaw4EAgAAAwALIAQgAUEBaiIBRw0AC0EtIQMMdAsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIARQ0CIAJBLDYCHCACIAE2AhQgAiAANgIMDHMLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABECoiAEUEQCABQQFqIQEMAgsgAkEsNgIcIAIgADYCDCACIAFBAWo2AhQMcgsgAS0AAEENRgRAIAIoAgQhAEEAIQMgAkEANgIEIAIgACABECoiAEUEQCABQQFqIQEMAgsgAkEsNgIcIAIgADYCDCACIAFBAWo2AhQMcgsgAi0ALUEBcQRAQcQBIQMMWQsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIADQEMZQtBLyEDDFcLIAJBLjYCHCACIAE2AhQgAiAANgIMDG8LQQAhAyACQQA2AhwgAiABNgIUIAJB8BQ2AhAgAkEDNgIMDG4LQQEhAwJAAkACQAJAIAItACxBBWsOBAMBAgAECyACIAIvATBBCHI7ATAMAwtBAiEDDAELQQQhAwsgAkEBOgAsIAIgAi8BMCADcjsBMAtBKiEDDFMLQQAhAyACQQA2AhwgAiABNgIUIAJB4Q82AhAgAkEKNgIMDGsLQQEhAwJAAkACQAJAAkACQCACLQAsQQJrDgcFBAQDAQIABAsgAiACLwEwQQhyOwEwDAMLQQIhAwwBC0EEIQMLIAJBAToALCACIAIvATAgA3I7ATALQSshAwxSC0EAIQMgAkEANgIcIAIgATYCFCACQasSNgIQIAJBCzYCDAxqC0EAIQMgAkEANgIcIAIgATYCFCACQf0NNgIQIAJBHTYCDAxpCyABIARHBEADQCABLQAAQSBHDUggBCABQQFqIgFHDQALQSUhAwxpC0ElIQMMaAsgAi0ALUEBcQRAQcMBIQMMTwsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKSIABEAgAkEmNgIcIAIgADYCDCACIAFBAWo2AhQMaAsgAUEBaiEBDFwLIAFBAWohASACLwEwIgBBgAFxBEBBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAEUNBiAAQRVHDR8gAkEFNgIcIAIgATYCFCACQfkXNgIQIAJBFTYCDEEAIQMMZwsCQCAAQaAEcUGgBEcNACACLQAtQQJxDQBBACEDIAJBADYCHCACIAE2AhQgAkGWEzYCECACQQQ2AgwMZwsgAgJ/IAIvATBBFHFBFEYEQEEBIAItAChBAUYNARogAi8BMkHlAEYMAQsgAi0AKUEFRgs6AC5BACEAAkAgAigCOCIDRQ0AIAMoAiQiA0UNACACIAMRAAAhAAsCQAJAAkACQAJAIAAOFgIBAAQEBAQEBAQEBAQEBAQEBAQEBAMECyACQQE6AC4LIAIgAi8BMEHAAHI7ATALQSchAwxPCyACQSM2AhwgAiABNgIUIAJBpRY2AhAgAkEVNgIMQQAhAwxnC0EAIQMgAkEANgIcIAIgATYCFCACQdULNgIQIAJBETYCDAxmC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAADQELQQ4hAwxLCyAAQRVGBEAgAkECNgIcIAIgATYCFCACQbAYNgIQIAJBFTYCDEEAIQMMZAtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMYwtBACEDIAJBADYCHCACIAE2AhQgAkGqHDYCECACQQ82AgwMYgsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEgCqdqIgEQKyIARQ0AIAJBBTYCHCACIAE2AhQgAiAANgIMDGELQQ8hAwxHC0EAIQMgAkEANgIcIAIgATYCFCACQc0TNgIQIAJBDDYCDAxfC0IBIQoLIAFBAWohAQJAIAIpAyAiC0L//////////w9YBEAgAiALQgSGIAqENwMgDAELQQAhAyACQQA2AhwgAiABNgIUIAJBrQk2AhAgAkEMNgIMDF4LQSQhAwxEC0EAIQMgAkEANgIcIAIgATYCFCACQc0TNgIQIAJBDDYCDAxcCyACKAIEIQBBACEDIAJBADYCBCACIAAgARAsIgBFBEAgAUEBaiEBDFILIAJBFzYCHCACIAA2AgwgAiABQQFqNgIUDFsLIAIoAgQhAEEAIQMgAkEANgIEAkAgAiAAIAEQLCIARQRAIAFBAWohAQwBCyACQRY2AhwgAiAANgIMIAIgAUEBajYCFAxbC0EfIQMMQQtBACEDIAJBADYCHCACIAE2AhQgAkGaDzYCECACQSI2AgwMWQsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQLSIARQRAIAFBAWohAQxQCyACQRQ2AhwgAiAANgIMIAIgAUEBajYCFAxYCyACKAIEIQBBACEDIAJBADYCBAJAIAIgACABEC0iAEUEQCABQQFqIQEMAQsgAkETNgIcIAIgADYCDCACIAFBAWo2AhQMWAtBHiEDDD4LQQAhAyACQQA2AhwgAiABNgIUIAJBxgw2AhAgAkEjNgIMDFYLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABEC0iAEUEQCABQQFqIQEMTgsgAkERNgIcIAIgADYCDCACIAFBAWo2AhQMVQsgAkEQNgIcIAIgATYCFCACIAA2AgwMVAtBACEDIAJBADYCHCACIAE2AhQgAkHGDDYCECACQSM2AgwMUwtBACEDIAJBADYCHCACIAE2AhQgAkHAFTYCECACQQI2AgwMUgsgAigCBCEAQQAhAyACQQA2AgQCQCACIAAgARAtIgBFBEAgAUEBaiEBDAELIAJBDjYCHCACIAA2AgwgAiABQQFqNgIUDFILQRshAww4C0EAIQMgAkEANgIcIAIgATYCFCACQcYMNgIQIAJBIzYCDAxQCyACKAIEIQBBACEDIAJBADYCBAJAIAIgACABECwiAEUEQCABQQFqIQEMAQsgAkENNgIcIAIgADYCDCACIAFBAWo2AhQMUAtBGiEDDDYLQQAhAyACQQA2AhwgAiABNgIUIAJBmg82AhAgAkEiNgIMDE4LIAIoAgQhAEEAIQMgAkEANgIEAkAgAiAAIAEQLCIARQRAIAFBAWohAQwBCyACQQw2AhwgAiAANgIMIAIgAUEBajYCFAxOC0EZIQMMNAtBACEDIAJBADYCHCACIAE2AhQgAkGaDzYCECACQSI2AgwMTAsgAEEVRwRAQQAhAyACQQA2AhwgAiABNgIUIAJBgww2AhAgAkETNgIMDEwLIAJBCjYCHCACIAE2AhQgAkHkFjYCECACQRU2AgxBACEDDEsLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABIAqnaiIBECsiAARAIAJBBzYCHCACIAE2AhQgAiAANgIMDEsLQRMhAwwxCyAAQRVHBEBBACEDIAJBADYCHCACIAE2AhQgAkHaDTYCECACQRQ2AgwMSgsgAkEeNgIcIAIgATYCFCACQfkXNgIQIAJBFTYCDEEAIQMMSQtBACEAAkAgAigCOCIDRQ0AIAMoAiwiA0UNACACIAMRAAAhAAsgAEUNQSAAQRVGBEAgAkEDNgIcIAIgATYCFCACQbAYNgIQIAJBFTYCDEEAIQMMSQtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMSAtBACEDIAJBADYCHCACIAE2AhQgAkHaDTYCECACQRQ2AgwMRwtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMRgsgAkEAOgAvIAItAC1BBHFFDT8LIAJBADoALyACQQE6ADRBACEDDCsLQQAhAyACQQA2AhwgAkHkETYCECACQQc2AgwgAiABQQFqNgIUDEMLAkADQAJAIAEtAABBCmsOBAACAgACCyAEIAFBAWoiAUcNAAtB3QEhAwxDCwJAAkAgAi0ANEEBRw0AQQAhAAJAIAIoAjgiA0UNACADKAJYIgNFDQAgAiADEQAAIQALIABFDQAgAEEVRw0BIAJB3AE2AhwgAiABNgIUIAJB1RY2AhAgAkEVNgIMQQAhAwxEC0HBASEDDCoLIAJBADYCHCACIAE2AhQgAkHpCzYCECACQR82AgxBACEDDEILAkACQCACLQAoQQFrDgIEAQALQcABIQMMKQtBuQEhAwwoCyACQQI6AC9BACEAAkAgAigCOCIDRQ0AIAMoAgAiA0UNACACIAMRAAAhAAsgAEUEQEHCASEDDCgLIABBFUcEQCACQQA2AhwgAiABNgIUIAJBpAw2AhAgAkEQNgIMQQAhAwxBCyACQdsBNgIcIAIgATYCFCACQfoWNgIQIAJBFTYCDEEAIQMMQAsgASAERgRAQdoBIQMMQAsgAS0AAEHIAEYNASACQQE6ACgLQawBIQMMJQtBvwEhAwwkCyABIARHBEAgAkEQNgIIIAIgATYCBEG+ASEDDCQLQdkBIQMMPAsgASAERgRAQdgBIQMMPAsgAS0AAEHIAEcNBCABQQFqIQFBvQEhAwwiCyABIARGBEBB1wEhAww7CwJAAkAgAS0AAEHFAGsOEAAFBQUFBQUFBQUFBQUFBQEFCyABQQFqIQFBuwEhAwwiCyABQQFqIQFBvAEhAwwhC0HWASEDIAEgBEYNOSACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGD0ABqLQAARw0DIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAw6CyACKAIEIQAgAkIANwMAIAIgACAGQQFqIgEQJyIARQRAQcYBIQMMIQsgAkHVATYCHCACIAE2AhQgAiAANgIMQQAhAww5C0HUASEDIAEgBEYNOCACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGB0ABqLQAARw0CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAw5CyACQYEEOwEoIAIoAgQhACACQgA3AwAgAiAAIAZBAWoiARAnIgANAwwCCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJB2Bs2AhAgAkEINgIMDDYLQboBIQMMHAsgAkHTATYCHCACIAE2AhQgAiAANgIMQQAhAww0C0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAARQ0AIABBFUYNASACQQA2AhwgAiABNgIUIAJBzA42AhAgAkEgNgIMQQAhAwwzC0HkACEDDBkLIAJB+AA2AhwgAiABNgIUIAJByhg2AhAgAkEVNgIMQQAhAwwxC0HSASEDIAQgASIARg0wIAQgAWsgAigCACIBaiEFIAAgAWtBBGohBgJAA0AgAC0AACABQfzPAGotAABHDQEgAUEERg0DIAFBAWohASAEIABBAWoiAEcNAAsgAiAFNgIADDELIAJBADYCHCACIAA2AhQgAkGQMzYCECACQQg2AgwgAkEANgIAQQAhAwwwCyABIARHBEAgAkEONgIIIAIgATYCBEG3ASEDDBcLQdEBIQMMLwsgAkEANgIAIAZBAWohAQtBuAEhAwwUCyABIARGBEBB0AEhAwwtCyABLQAAQTBrIgBB/wFxQQpJBEAgAiAAOgAqIAFBAWohAUG2ASEDDBQLIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ0UIAJBzwE2AhwgAiABNgIUIAIgADYCDEEAIQMMLAsgASAERgRAQc4BIQMMLAsCQCABLQAAQS5GBEAgAUEBaiEBDAELIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ0VIAJBzQE2AhwgAiABNgIUIAIgADYCDEEAIQMMLAtBtQEhAwwSCyAEIAEiBUYEQEHMASEDDCsLQQAhAEEBIQFBASEGQQAhAwJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAUtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyEDQQAhAUEAIQYMAgtBCSEDQQEhAEEAIQFBACEGDAELQQAhAUEBIQMLIAIgAzoAKyAFQQFqIQMCQAJAIAItAC1BEHENAAJAAkACQCACLQAqDgMBAAIECyAGRQ0DDAILIAANAQwCCyABRQ0BCyACKAIEIQAgAkEANgIEIAIgACADECgiAEUEQCADIQEMAwsgAkHJATYCHCACIAM2AhQgAiAANgIMQQAhAwwtCyACKAIEIQAgAkEANgIEIAIgACADECgiAEUEQCADIQEMGAsgAkHKATYCHCACIAM2AhQgAiAANgIMQQAhAwwsCyACKAIEIQAgAkEANgIEIAIgACAFECgiAEUEQCAFIQEMFgsgAkHLATYCHCACIAU2AhQgAiAANgIMDCsLQbQBIQMMEQtBACEAAkAgAigCOCIDRQ0AIAMoAjwiA0UNACACIAMRAAAhAAsCQCAABEAgAEEVRg0BIAJBADYCHCACIAE2AhQgAkGUDTYCECACQSE2AgxBACEDDCsLQbIBIQMMEQsgAkHIATYCHCACIAE2AhQgAkHJFzYCECACQRU2AgxBACEDDCkLIAJBADYCACAGQQFqIQFB9QAhAwwPCyACLQApQQVGBEBB4wAhAwwPC0HiACEDDA4LIAAhASACQQA2AgALIAJBADoALEEJIQMMDAsgAkEANgIAIAdBAWohAUHAACEDDAsLQQELOgAsIAJBADYCACAGQQFqIQELQSkhAwwIC0E4IQMMBwsCQCABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRw0DIAFBAWohAQwFCyAEIAFBAWoiAUcNAAtBPiEDDCELQT4hAwwgCwsgAkEAOgAsDAELQQshAwwEC0E6IQMMAwsgAUEBaiEBQS0hAwwCCyACIAE6ACwgAkEANgIAIAZBAWohAUEMIQMMAQsgAkEANgIAIAZBAWohAUEKIQMMAAsAC0EAIQMgAkEANgIcIAIgATYCFCACQc0QNgIQIAJBCTYCDAwXC0EAIQMgAkEANgIcIAIgATYCFCACQekKNgIQIAJBCTYCDAwWC0EAIQMgAkEANgIcIAIgATYCFCACQbcQNgIQIAJBCTYCDAwVC0EAIQMgAkEANgIcIAIgATYCFCACQZwRNgIQIAJBCTYCDAwUC0EAIQMgAkEANgIcIAIgATYCFCACQc0QNgIQIAJBCTYCDAwTC0EAIQMgAkEANgIcIAIgATYCFCACQekKNgIQIAJBCTYCDAwSC0EAIQMgAkEANgIcIAIgATYCFCACQbcQNgIQIAJBCTYCDAwRC0EAIQMgAkEANgIcIAIgATYCFCACQZwRNgIQIAJBCTYCDAwQC0EAIQMgAkEANgIcIAIgATYCFCACQZcVNgIQIAJBDzYCDAwPC0EAIQMgAkEANgIcIAIgATYCFCACQZcVNgIQIAJBDzYCDAwOC0EAIQMgAkEANgIcIAIgATYCFCACQcASNgIQIAJBCzYCDAwNC0EAIQMgAkEANgIcIAIgATYCFCACQZUJNgIQIAJBCzYCDAwMC0EAIQMgAkEANgIcIAIgATYCFCACQeEPNgIQIAJBCjYCDAwLC0EAIQMgAkEANgIcIAIgATYCFCACQfsPNgIQIAJBCjYCDAwKC0EAIQMgAkEANgIcIAIgATYCFCACQfEZNgIQIAJBAjYCDAwJC0EAIQMgAkEANgIcIAIgATYCFCACQcQUNgIQIAJBAjYCDAwIC0EAIQMgAkEANgIcIAIgATYCFCACQfIVNgIQIAJBAjYCDAwHCyACQQI2AhwgAiABNgIUIAJBnBo2AhAgAkEWNgIMQQAhAwwGC0EBIQMMBQtB1AAhAyABIARGDQQgCEEIaiEJIAIoAgAhBQJAAkAgASAERwRAIAVB2MIAaiEHIAQgBWogAWshACAFQX9zQQpqIgUgAWohBgNAIAEtAAAgBy0AAEcEQEECIQcMAwsgBUUEQEEAIQcgBiEBDAMLIAVBAWshBSAHQQFqIQcgBCABQQFqIgFHDQALIAAhBSAEIQELIAlBATYCACACIAU2AgAMAQsgAkEANgIAIAkgBzYCAAsgCSABNgIEIAgoAgwhACAIKAIIDgMBBAIACwALIAJBADYCHCACQbUaNgIQIAJBFzYCDCACIABBAWo2AhRBACEDDAILIAJBADYCHCACIAA2AhQgAkHKGjYCECACQQk2AgxBACEDDAELIAEgBEYEQEEiIQMMAQsgAkEJNgIIIAIgATYCBEEhIQMLIAhBEGokACADRQRAIAIoAgwhAAwBCyACIAM2AhxBACEAIAIoAgQiAUUNACACIAEgBCACKAIIEQEAIgFFDQAgAiAENgIUIAIgATYCDCABIQALIAALvgIBAn8gAEEAOgAAIABB3ABqIgFBAWtBADoAACAAQQA6AAIgAEEAOgABIAFBA2tBADoAACABQQJrQQA6AAAgAEEAOgADIAFBBGtBADoAAEEAIABrQQNxIgEgAGoiAEEANgIAQdwAIAFrQXxxIgIgAGoiAUEEa0EANgIAAkAgAkEJSQ0AIABBADYCCCAAQQA2AgQgAUEIa0EANgIAIAFBDGtBADYCACACQRlJDQAgAEEANgIYIABBADYCFCAAQQA2AhAgAEEANgIMIAFBEGtBADYCACABQRRrQQA2AgAgAUEYa0EANgIAIAFBHGtBADYCACACIABBBHFBGHIiAmsiAUEgSQ0AIAAgAmohAANAIABCADcDGCAAQgA3AxAgAEIANwMIIABCADcDACAAQSBqIQAgAUEgayIBQR9LDQALCwtWAQF/AkAgACgCDA0AAkACQAJAAkAgAC0ALw4DAQADAgsgACgCOCIBRQ0AIAEoAiwiAUUNACAAIAERAAAiAQ0DC0EADwsACyAAQcMWNgIQQQ4hAQsgAQsaACAAKAIMRQRAIABB0Rs2AhAgAEEVNgIMCwsUACAAKAIMQRVGBEAgAEEANgIMCwsUACAAKAIMQRZGBEAgAEEANgIMCwsHACAAKAIMCwcAIAAoAhALCQAgACABNgIQCwcAIAAoAhQLFwAgAEEkTwRAAAsgAEECdEGgM2ooAgALFwAgAEEuTwRAAAsgAEECdEGwNGooAgALvwkBAX9B6yghAQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv","base64")});var m0=v((Loe,g0)=>{"use strict";var{Buffer:EP}=x("node:buffer");g0.exports=EP.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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AAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==","base64")});var Vs=v((_oe,b0)=>{"use strict";var E0=["GET","HEAD","POST"],IP=new Set(E0),CP=[101,204,205,304],I0=[301,302,303,307,308],BP=new Set(I0),C0=["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"],yP=new Set(C0),B0=["","no-referrer","no-referrer-when-downgrade","same-origin","origin","strict-origin","origin-when-cross-origin","strict-origin-when-cross-origin","unsafe-url"],QP=new Set(B0),wP=["follow","manual","error"],y0=["GET","HEAD","OPTIONS","TRACE"],bP=new Set(y0),kP=["navigate","same-origin","no-cors","cors"],SP=["omit","same-origin","include"],xP=["default","no-store","reload","no-cache","force-cache","only-if-cached"],vP=["content-encoding","content-language","content-location","content-type","content-length"],NP=["half"],Q0=["CONNECT","TRACE","TRACK"],RP=new Set(Q0),w0=["audio","audioworklet","font","image","manifest","paintworklet","script","style","track","video","xslt",""],DP=new Set(w0);b0.exports={subresource:w0,forbiddenMethods:Q0,requestBodyHeader:vP,referrerPolicy:B0,requestRedirect:wP,requestMode:kP,requestCredentials:SP,requestCache:xP,redirectStatus:I0,corsSafeListedMethods:E0,nullBodyStatus:CP,safeMethods:y0,badPorts:C0,requestDuplex:NP,subresourceSet:DP,badPortsSet:yP,redirectStatusSet:BP,corsSafeListedMethodsSet:IP,safeMethodsSet:bP,forbiddenMethodsSet:RP,referrerPolicySet:QP}});var lp=v((Poe,k0)=>{"use strict";var cp=Symbol.for("undici.globalOrigin.1");function FP(){return globalThis[cp]}function MP(e){if(e===void 0){Object.defineProperty(globalThis,cp,{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,cp,{value:t,writable:!0,enumerable:!1,configurable:!1})}k0.exports={getGlobalOrigin:FP,setGlobalOrigin:MP}});var at=v((Ooe,F0)=>{"use strict";var fc=x("node:assert"),TP=new TextEncoder,$s=/^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/,UP=/[\u000A\u000D\u0009\u0020]/,LP=/[\u0009\u000A\u000C\u000D\u0020]/g,_P=/^[\u0009\u0020-\u007E\u0080-\u00FF]+$/;function PP(e){fc(e.protocol==="data:");let t=v0(e,!0);t=t.slice(5);let r={position:0},n=ti(",",t,r),o=n.length;if(n=VP(n,!0,!0),r.position>=t.length)return"failure";r.position++;let i=t.slice(o+1),s=N0(i);if(/;(\u0020){0,}base64$/i.test(n)){let A=D0(s);if(s=qP(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=up(n);return a==="failure"&&(a=up("text/plain;charset=US-ASCII")),{mimeType:a,body:s}}function v0(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 pc(e,t,r){let n="";for(;r.position<t.length&&e(t[r.position]);)n+=t[r.position],r.position++;return n}function ti(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 N0(e){let t=TP.encode(e);return OP(t)}function S0(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function x0(e){return e>=48&&e<=57?e-48:(e&223)-55}function OP(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&&!(S0(e[o+1])&&S0(e[o+2]))?r[n++]=37:(r[n++]=x0(e[o+1])<<4|x0(e[o+2]),o+=2)}return t===n?r:r.subarray(0,n)}function up(e){e=dc(e,!0,!0);let t={position:0},r=ti("/",e,t);if(r.length===0||!$s.test(r)||t.position>e.length)return"failure";t.position++;let n=ti(";",e,t);if(n=dc(n,!1,!0),n.length===0||!$s.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++,pc(c=>UP.test(c),e,t);let a=pc(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=R0(e,t,!0),ti(";",e,t);else if(A=ti(";",e,t),A=dc(A,!1,!0),A.length===0)continue;a.length!==0&&$s.test(a)&&(A.length===0||_P.test(A))&&!s.parameters.has(a)&&s.parameters.set(a,A)}return s}function qP(e){e=e.replace(LP,"");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 R0(e,t,r){let n=t.position,o="";for(fc(e[t.position]==='"'),t.position++;o+=pc(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{fc(i==='"');break}}return r?o:e.slice(n,t.position)}function HP(e){fc(e!=="failure");let{parameters:t,essence:r}=e,n=r;for(let[o,i]of t.entries())n+=";",n+=o,n+="=",$s.test(i)||(i=i.replace(/(\\|")/g,"\\$1"),i='"'+i,i+='"'),n+=i;return n}function GP(e){return e===13||e===10||e===9||e===32}function dc(e,t=!0,r=!0){return dp(e,t,r,GP)}function YP(e){return e===13||e===10||e===9||e===12||e===32}function VP(e,t=!0,r=!0){return dp(e,t,r,YP)}function dp(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 D0(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 $P(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":""}F0.exports={dataURLProcessor:PP,URLSerializer:v0,collectASequenceOfCodePoints:pc,collectASequenceOfCodePointsFast:ti,stringPercentDecode:N0,parseMIMEType:up,collectAnHTTPQuotedString:R0,serializeAMimeType:HP,removeChars:dp,removeHTTPWhitespace:dc,minimizeSupportedMimeType:$P,HTTP_TOKEN_CODEPOINTS:$s,isomorphicDecode:D0}});var $e=v((qoe,M0)=>{"use strict";var{types:Qr,inspect:JP}=x("node:util"),{markAsUncloneable:WP}=x("node:worker_threads"),{toUSVString:zP}=ee(),R={};R.converters={};R.util={};R.errors={};R.errors.exception=function(e){return new TypeError(`${e.header}: ${e.message}`)};R.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 R.errors.exception({header:e.prefix,message:r})};R.errors.invalidArgument=function(e){return R.errors.exception({header:e.prefix,message:`"${e.value}" is an invalid ${e.type}.`})};R.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}};R.argumentLengthCheck=function({length:e},t,r){if(e<t)throw R.errors.exception({message:`${t} argument${t!==1?"s":""} required, but${e?" only":""} ${e} found.`,header:r})};R.illegalConstructor=function(){throw R.errors.exception({header:"TypeError",message:"Illegal constructor"})};R.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"}};R.util.markAsUncloneable=WP||(()=>{});R.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 R.errors.exception({header:"Integer conversion",message:`Could not convert ${R.util.Stringify(e)} to an integer.`});if(s=R.util.IntegerPart(s),s<i||s>o)throw R.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=R.util.IntegerPart(s),s=s%Math.pow(2,t),r==="signed"&&s>=Math.pow(2,t)-1?s-Math.pow(2,t):s)};R.util.IntegerPart=function(e){let t=Math.floor(Math.abs(e));return e<0?-1*t:t};R.util.Stringify=function(e){switch(R.util.Type(e)){case"Symbol":return`Symbol(${e.description})`;case"Object":return JP(e);case"String":return`"${e}"`;default:return`${e}`}};R.sequenceConverter=function(e){return(t,r,n,o)=>{if(R.util.Type(t)!=="Object")throw R.errors.exception({header:r,message:`${n} (${R.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 R.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}};R.recordConverter=function(e,t){return(r,n,o)=>{if(R.util.Type(r)!=="Object")throw R.errors.exception({header:n,message:`${o} ("${R.util.Type(r)}") is not an Object.`});let i={};if(!Qr.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}};R.interfaceConverter=function(e){return(t,r,n,o)=>{if(o?.strict!==!1&&!(t instanceof e))throw R.errors.exception({header:r,message:`Expected ${n} ("${R.util.Stringify(t)}") to be an instance of ${e.name}.`});return t}};R.dictionaryConverter=function(e){return(t,r,n)=>{let o=R.util.Type(t),i={};if(o==="Null"||o==="Undefined")return i;if(o!=="Object")throw R.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 R.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 R.errors.exception({header:r,message:`${u} is not an accepted type. Expected one of ${s.allowedValues.join(", ")}.`});i[a]=u}}return i}};R.nullableConverter=function(e){return(t,r,n)=>t===null?t:e(t,r,n)};R.converters.DOMString=function(e,t,r,n){if(e===null&&n?.legacyNullToEmptyString)return"";if(typeof e=="symbol")throw R.errors.exception({header:t,message:`${r} is a symbol, which cannot be converted to a DOMString.`});return String(e)};R.converters.ByteString=function(e,t,r){let n=R.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};R.converters.USVString=zP;R.converters.boolean=function(e){return!!e};R.converters.any=function(e){return e};R.converters["long long"]=function(e,t,r){return R.util.ConvertToInt(e,64,"signed",void 0,t,r)};R.converters["unsigned long long"]=function(e,t,r){return R.util.ConvertToInt(e,64,"unsigned",void 0,t,r)};R.converters["unsigned long"]=function(e,t,r){return R.util.ConvertToInt(e,32,"unsigned",void 0,t,r)};R.converters["unsigned short"]=function(e,t,r,n){return R.util.ConvertToInt(e,16,"unsigned",n,t,r)};R.converters.ArrayBuffer=function(e,t,r,n){if(R.util.Type(e)!=="Object"||!Qr.isAnyArrayBuffer(e))throw R.errors.conversionFailed({prefix:t,argument:`${r} ("${R.util.Stringify(e)}")`,types:["ArrayBuffer"]});if(n?.allowShared===!1&&Qr.isSharedArrayBuffer(e))throw R.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(e.resizable||e.growable)throw R.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return e};R.converters.TypedArray=function(e,t,r,n,o){if(R.util.Type(e)!=="Object"||!Qr.isTypedArray(e)||e.constructor.name!==t.name)throw R.errors.conversionFailed({prefix:r,argument:`${n} ("${R.util.Stringify(e)}")`,types:[t.name]});if(o?.allowShared===!1&&Qr.isSharedArrayBuffer(e.buffer))throw R.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(e.buffer.resizable||e.buffer.growable)throw R.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return e};R.converters.DataView=function(e,t,r,n){if(R.util.Type(e)!=="Object"||!Qr.isDataView(e))throw R.errors.exception({header:t,message:`${r} is not a DataView.`});if(n?.allowShared===!1&&Qr.isSharedArrayBuffer(e.buffer))throw R.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."});if(e.buffer.resizable||e.buffer.growable)throw R.errors.exception({header:"ArrayBuffer",message:"Received a resizable ArrayBuffer."});return e};R.converters.BufferSource=function(e,t,r,n){if(Qr.isAnyArrayBuffer(e))return R.converters.ArrayBuffer(e,t,r,{...n,allowShared:!1});if(Qr.isTypedArray(e))return R.converters.TypedArray(e,e.constructor,t,r,{...n,allowShared:!1});if(Qr.isDataView(e))return R.converters.DataView(e,t,r,{...n,allowShared:!1});throw R.errors.conversionFailed({prefix:t,argument:`${r} ("${R.util.Stringify(e)}")`,types:["BufferSource"]})};R.converters["sequence<ByteString>"]=R.sequenceConverter(R.converters.ByteString);R.converters["sequence<sequence<ByteString>>"]=R.sequenceConverter(R.converters["sequence<ByteString>"]);R.converters["record<ByteString, ByteString>"]=R.recordConverter(R.converters.ByteString,R.converters.ByteString);M0.exports={webidl:R}});var Bt=v((Hoe,W0)=>{"use strict";var{Transform:jP}=x("node:stream"),T0=x("node:zlib"),{redirectStatusSet:KP,referrerPolicySet:XP,badPortsSet:ZP}=Vs(),{getGlobalOrigin:U0}=lp(),{collectASequenceOfCodePoints:to,collectAnHTTPQuotedString:eO,removeChars:tO,parseMIMEType:rO}=at(),{performance:nO}=x("node:perf_hooks"),{isBlobLike:oO,ReadableStreamFrom:iO,isValidHTTPToken:L0,normalizedMethodRecordsBase:sO}=ee(),ro=x("node:assert"),{isUint8Array:aO}=x("node:util/types"),{webidl:Js}=$e(),_0=[],gc;try{gc=x("node:crypto");let e=["sha256","sha384","sha512"];_0=gc.getHashes().filter(t=>e.includes(t))}catch{}function P0(e){let t=e.urlList,r=t.length;return r===0?null:t[r-1].toString()}function AO(e,t){if(!KP.has(e.status))return null;let r=e.headersList.get("location",!0);return r!==null&&q0(r)&&(O0(r)||(r=cO(r)),r=new URL(r,P0(e))),r&&!r.hash&&(r.hash=t),r}function O0(e){for(let t=0;t<e.length;++t){let r=e.charCodeAt(t);if(r>126||r<32)return!1}return!0}function cO(e){return Buffer.from(e,"binary").toString("utf8")}function zs(e){return e.urlList[e.urlList.length-1]}function lO(e){let t=zs(e);return $0(t)&&ZP.has(t.port)?"blocked":"allowed"}function uO(e){return e instanceof Error||e?.constructor?.name==="Error"||e?.constructor?.name==="DOMException"}function dO(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 fO=L0;function q0(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 pO(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(XP.has(s)){o=s;break}}o!==""&&(e.referrerPolicy=o)}function hO(){return"allowed"}function gO(){return"success"}function mO(){return"success"}function EO(e){let t=null;t=e.mode,e.headersList.set("sec-fetch-mode",t,!0)}function IO(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&&pp(e.origin)&&!pp(zs(e))&&(t=null);break;case"same-origin":mc(e,zs(e))||(t=null);break;default:}e.headersList.append("origin",t,!0)}}}function ri(e,t){return e}function CO(e,t,r){return!e?.startTime||e.startTime<t?{domainLookupStartTime:t,domainLookupEndTime:t,connectionStartTime:t,connectionEndTime:t,secureConnectionStartTime:t,ALPNNegotiatedProtocol:e?.ALPNNegotiatedProtocol}:{domainLookupStartTime:ri(e.domainLookupStartTime,r),domainLookupEndTime:ri(e.domainLookupEndTime,r),connectionStartTime:ri(e.connectionStartTime,r),connectionEndTime:ri(e.connectionEndTime,r),secureConnectionStartTime:ri(e.secureConnectionStartTime,r),ALPNNegotiatedProtocol:e.ALPNNegotiatedProtocol}}function BO(e){return ri(nO.now(),e)}function yO(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 H0(){return{referrerPolicy:"strict-origin-when-cross-origin"}}function QO(e){return{referrerPolicy:e.referrerPolicy}}function wO(e){let t=e.referrerPolicy;ro(t);let r=null;if(e.referrer==="client"){let a=U0();if(!a||a.origin==="null")return"no-referrer";r=new URL(a)}else e.referrer instanceof URL&&(r=e.referrer);let n=fp(r),o=fp(r,!0);n.toString().length>4096&&(n=o);let i=mc(e,n),s=Ws(n)&&!Ws(e.url);switch(t){case"origin":return o??fp(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=zs(e);return mc(n,a)?n:Ws(n)&&!Ws(a)?"no-referrer":o}default:return s?"no-referrer":o}}function fp(e,t){return ro(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 Ws(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 bO(e,t){if(gc===void 0)return!0;let r=G0(t);if(r==="no metadata"||r.length===0)return!0;let n=SO(r),o=xO(r,n);for(let i of o){let s=i.algo,a=i.hash,A=gc.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)),vO(A,a))return!0}return!1}var kO=/(?<algo>sha256|sha384|sha512)-((?<hash>[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i;function G0(e){let t=[],r=!0;for(let n of e.split(" ")){r=!1;let o=kO.exec(n);if(o===null||o.groups===void 0||o.groups.algo===void 0)continue;let i=o.groups.algo.toLowerCase();_0.includes(i)&&t.push(o.groups)}return r===!0?"no metadata":t}function SO(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 xO(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 vO(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 NO(e){}function mc(e,t){return e.origin===t.origin&&e.origin==="null"||e.protocol===t.protocol&&e.hostname===t.hostname&&e.port===t.port}function RO(){let e,t;return{promise:new Promise((n,o)=>{e=n,t=o}),resolve:e,reject:t}}function DO(e){return e.controller.state==="aborted"}function FO(e){return e.controller.state==="aborted"||e.controller.state==="terminated"}function MO(e){return sO[e.toLowerCase()]??e}function TO(e){let t=JSON.stringify(e);if(t===void 0)throw new TypeError("Value is not JSON serializable");return ro(typeof t=="string"),t}var UO=Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));function Y0(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,UO),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 LO(e,t,r,n=0,o=1){let i=Y0(e,r,n,o),s={keys:{writable:!0,enumerable:!0,configurable:!0,value:function(){return Js.brandCheck(this,t),i(this,"key")}},values:{writable:!0,enumerable:!0,configurable:!0,value:function(){return Js.brandCheck(this,t),i(this,"value")}},entries:{writable:!0,enumerable:!0,configurable:!0,value:function(){return Js.brandCheck(this,t),i(this,"key+value")}},forEach:{writable:!0,enumerable:!0,configurable:!0,value:function(A,c=globalThis){if(Js.brandCheck(this,t),Js.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 _O(e,t,r){let n=t,o=r,i;try{i=e.stream.getReader()}catch(s){o(s);return}try{n(await V0(i))}catch(s){o(s)}}function PO(e){return e instanceof ReadableStream||e[Symbol.toStringTag]==="ReadableStream"&&typeof e.tee=="function"}function OO(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 qO=/[^\x00-\xFF]/;function hc(e){return ro(!qO.test(e)),e}async function V0(e){let t=[],r=0;for(;;){let{done:n,value:o}=await e.read();if(n)return Buffer.concat(t,r);if(!aO(o))throw new TypeError("Received non-Uint8Array chunk");t.push(o),r+=o.length}}function HO(e){ro("protocol"in e);let t=e.protocol;return t==="about:"||t==="blob:"||t==="data:"}function pp(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 $0(e){ro("protocol"in e);let t=e.protocol;return t==="http:"||t==="https:"}function GO(e,t){let r=e;if(!r.startsWith("bytes"))return"failure";let n={position:5};if(t&&to(A=>A===" "||A===" ",r,n),r.charCodeAt(n.position)!==61)return"failure";n.position++,t&&to(A=>A===" "||A===" ",r,n);let o=to(A=>{let c=A.charCodeAt(0);return c>=48&&c<=57},r,n),i=o.length?Number(o):null;if(t&&to(A=>A===" "||A===" ",r,n),r.charCodeAt(n.position)!==45)return"failure";n.position++,t&&to(A=>A===" "||A===" ",r,n);let s=to(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 YO(e,t,r){let n="bytes ";return n+=hc(`${e}`),n+="-",n+=hc(`${t}`),n+="/",n+=hc(`${r}`),n}var hp=class extends jP{#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?T0.createInflate(this.#e):T0.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 VO(e){return new hp(e)}function $O(e){let t=null,r=null,n=null,o=J0("content-type",e);if(o===null)return"failure";for(let i of o){let s=rO(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 JO(e){let t=e,r={position:0},n=[],o="";for(;r.position<t.length;){if(o+=to(i=>i!=='"'&&i!==",",t,r),r.position<t.length)if(t.charCodeAt(r.position)===34){if(o+=eO(t,r),r.position<t.length)continue}else ro(t.charCodeAt(r.position)===44),r.position++;o=tO(o,!0,!0,i=>i===9||i===32),n.push(o),o=""}return n}function J0(e,t){let r=t.get(e,!0);return r===null?null:JO(r)}var WO=new TextDecoder;function zO(e){return e.length===0?"":(e[0]===239&&e[1]===187&&e[2]===191&&(e=e.subarray(3)),WO.decode(e))}var gp=class{get baseUrl(){return U0()}get origin(){return this.baseUrl?.origin}policyContainer=H0()},mp=class{settingsObject=new gp},jO=new mp;W0.exports={isAborted:DO,isCancelled:FO,isValidEncodedURL:O0,createDeferredPromise:RO,ReadableStreamFrom:iO,tryUpgradeRequestToAPotentiallyTrustworthyURL:NO,clampAndCoarsenConnectionTimingInfo:CO,coarsenedSharedCurrentTime:BO,determineRequestsReferrer:wO,makePolicyContainer:H0,clonePolicyContainer:QO,appendFetchMetadata:EO,appendRequestOriginHeader:IO,TAOCheck:mO,corsCheck:gO,crossOriginResourcePolicyCheck:hO,createOpaqueTimingInfo:yO,setRequestReferrerPolicyOnRedirect:pO,isValidHTTPToken:L0,requestBadPort:lO,requestCurrentURL:zs,responseURL:P0,responseLocationURL:AO,isBlobLike:oO,isURLPotentiallyTrustworthy:Ws,isValidReasonPhrase:dO,sameOrigin:mc,normalizeMethod:MO,serializeJavascriptValueToJSONString:TO,iteratorMixin:LO,createIterator:Y0,isValidHeaderName:fO,isValidHeaderValue:q0,isErrorLike:uO,fullyReadBody:_O,bytesMatch:bO,isReadableStreamLike:PO,readableStreamClose:OO,isomorphicEncode:hc,urlIsLocal:HO,urlHasHttpsScheme:pp,urlIsHttpHttpsScheme:$0,readAllBytes:V0,simpleRangeHeaderValue:GO,buildContentRange:YO,parseMetadata:G0,createInflate:VO,extractMimeType:$O,getDecodeSplit:J0,utf8DecodeBytes:zO,environmentSettingsObject:jO}});var cn=v((Goe,z0)=>{"use strict";z0.exports={kUrl:Symbol("url"),kHeaders:Symbol("headers"),kSignal:Symbol("signal"),kState:Symbol("state"),kDispatcher:Symbol("dispatcher")}});var Ip=v((Yoe,j0)=>{"use strict";var{Blob:KO,File:XO}=x("node:buffer"),{kState:$r}=cn(),{webidl:wr}=$e(),Ep=class e{constructor(t,r,n={}){let o=r,i=n.type,s=n.lastModified??Date.now();this[$r]={blobLike:t,name:o,type:i,lastModified:s}}stream(...t){return wr.brandCheck(this,e),this[$r].blobLike.stream(...t)}arrayBuffer(...t){return wr.brandCheck(this,e),this[$r].blobLike.arrayBuffer(...t)}slice(...t){return wr.brandCheck(this,e),this[$r].blobLike.slice(...t)}text(...t){return wr.brandCheck(this,e),this[$r].blobLike.text(...t)}get size(){return wr.brandCheck(this,e),this[$r].blobLike.size}get type(){return wr.brandCheck(this,e),this[$r].blobLike.type}get name(){return wr.brandCheck(this,e),this[$r].name}get lastModified(){return wr.brandCheck(this,e),this[$r].lastModified}get[Symbol.toStringTag](){return"File"}};wr.converters.Blob=wr.interfaceConverter(KO);function ZO(e){return e instanceof XO||e&&(typeof e.stream=="function"||typeof e.arrayBuffer=="function")&&e[Symbol.toStringTag]==="File"}j0.exports={FileLike:Ep,isFileLike:ZO}});var Ks=v((Voe,ty)=>{"use strict";var{isBlobLike:Ec,iteratorMixin:eq}=Bt(),{kState:tt}=cn(),{kEnumerableProperty:ni}=ee(),{FileLike:K0,isFileLike:tq}=Ip(),{webidl:Ce}=$e(),{File:ey}=x("node:buffer"),X0=x("node:util"),Z0=globalThis.File??ey,js=class e{constructor(t){if(Ce.util.markAsUncloneable(this),t!==void 0)throw Ce.errors.conversionFailed({prefix:"FormData constructor",argument:"Argument 1",types:["undefined"]});this[tt]=[]}append(t,r,n=void 0){Ce.brandCheck(this,e);let o="FormData.append";if(Ce.argumentLengthCheck(arguments,2,o),arguments.length===3&&!Ec(r))throw new TypeError("Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'");t=Ce.converters.USVString(t,o,"name"),r=Ec(r)?Ce.converters.Blob(r,o,"value",{strict:!1}):Ce.converters.USVString(r,o,"value"),n=arguments.length===3?Ce.converters.USVString(n,o,"filename"):void 0;let i=Cp(t,r,n);this[tt].push(i)}delete(t){Ce.brandCheck(this,e);let r="FormData.delete";Ce.argumentLengthCheck(arguments,1,r),t=Ce.converters.USVString(t,r,"name"),this[tt]=this[tt].filter(n=>n.name!==t)}get(t){Ce.brandCheck(this,e);let r="FormData.get";Ce.argumentLengthCheck(arguments,1,r),t=Ce.converters.USVString(t,r,"name");let n=this[tt].findIndex(o=>o.name===t);return n===-1?null:this[tt][n].value}getAll(t){Ce.brandCheck(this,e);let r="FormData.getAll";return Ce.argumentLengthCheck(arguments,1,r),t=Ce.converters.USVString(t,r,"name"),this[tt].filter(n=>n.name===t).map(n=>n.value)}has(t){Ce.brandCheck(this,e);let r="FormData.has";return Ce.argumentLengthCheck(arguments,1,r),t=Ce.converters.USVString(t,r,"name"),this[tt].findIndex(n=>n.name===t)!==-1}set(t,r,n=void 0){Ce.brandCheck(this,e);let o="FormData.set";if(Ce.argumentLengthCheck(arguments,2,o),arguments.length===3&&!Ec(r))throw new TypeError("Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'");t=Ce.converters.USVString(t,o,"name"),r=Ec(r)?Ce.converters.Blob(r,o,"name",{strict:!1}):Ce.converters.USVString(r,o,"name"),n=arguments.length===3?Ce.converters.USVString(n,o,"name"):void 0;let i=Cp(t,r,n),s=this[tt].findIndex(a=>a.name===t);s!==-1?this[tt]=[...this[tt].slice(0,s),i,...this[tt].slice(s+1).filter(a=>a.name!==t)]:this[tt].push(i)}[X0.inspect.custom](t,r){let n=this[tt].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=X0.formatWithOptions(r,n);return`FormData ${o.slice(o.indexOf("]")+2)}`}};eq("FormData",js,tt,"name","value");Object.defineProperties(js.prototype,{append:ni,delete:ni,get:ni,getAll:ni,has:ni,set:ni,[Symbol.toStringTag]:{value:"FormData",configurable:!0}});function Cp(e,t,r){if(typeof t!="string"){if(tq(t)||(t=t instanceof Blob?new Z0([t],"blob",{type:t.type}):new K0(t,"blob",{type:t.type})),r!==void 0){let n={type:t.type,lastModified:t.lastModified};t=t instanceof ey?new Z0([t],r,n):new K0(t,r,n)}}return{name:e,value:t}}ty.exports={FormData:js,makeEntry:Cp}});var ay=v(($oe,sy)=>{"use strict";var{isUSVString:ry,bufferToLowerCasedHeaderName:rq}=ee(),{utf8DecodeBytes:nq}=Bt(),{HTTP_TOKEN_CODEPOINTS:oq,isomorphicDecode:ny}=at(),{isFileLike:iq}=Ip(),{makeEntry:sq}=Ks(),Ic=x("node:assert"),{File:aq}=x("node:buffer"),Aq=globalThis.File??aq,cq=Buffer.from('form-data; name="'),oy=Buffer.from("; filename"),lq=Buffer.from("--"),uq=Buffer.from(`--\r
|
|
3
|
+
`);function dq(e){for(let t=0;t<e.length;++t)if((e.charCodeAt(t)&-128)!==0)return!1;return!0}function fq(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 pq(e,t){Ic(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&&Cc(e,lq,i)||i.position===e.length-4&&Cc(e,uq,i))return o;if(e[i.position]!==13||e[i.position+1]!==10)return"failure";i.position+=2;let a=hq(e,i);if(a==="failure")return"failure";let{name:A,filename:c,contentType:l,encoding:u}=a;i.position+=2;let d;{let p=e.indexOf(n.subarray(2),i.position);if(p===-1)return"failure";d=e.subarray(i.position,p-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 f;c!==null?(l??="text/plain",dq(l)||(l=""),f=new Aq([d],c,{type:l})):f=nq(Buffer.from(d)),Ic(ry(A)),Ic(typeof f=="string"&&ry(f)||iq(f)),o.push(sq(A,f,c))}}function hq(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=oi(a=>a!==10&&a!==13&&a!==58,e,t);if(s=Bp(s,!0,!0,a=>a===9||a===32),!oq.test(s.toString())||e[t.position]!==58)return"failure";switch(t.position++,oi(a=>a===32||a===9,e,t),rq(s)){case"content-disposition":{if(r=n=null,!Cc(e,cq,t)||(t.position+=17,r=iy(e,t),r===null))return"failure";if(Cc(e,oy,t)){let a=t.position+oy.length;if(e[a]===42&&(t.position+=1,a+=1),e[a]!==61||e[a+1]!==34||(t.position+=12,n=iy(e,t),n===null))return"failure"}break}case"content-type":{let a=oi(A=>A!==10&&A!==13,e,t);a=Bp(a,!1,!0,A=>A===9||A===32),o=ny(a);break}case"content-transfer-encoding":{let a=oi(A=>A!==10&&A!==13,e,t);a=Bp(a,!1,!0,A=>A===9||A===32),i=ny(a);break}default:oi(a=>a!==10&&a!==13,e,t)}if(e[t.position]!==13&&e[t.position+1]!==10)return"failure";t.position+=2}}function iy(e,t){Ic(e[t.position-1]===34);let r=oi(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 oi(e,t,r){let n=r.position;for(;n<t.length&&e(t[n]);)++n;return t.subarray(r.position,r.position=n)}function Bp(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 Cc(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}sy.exports={multipartFormDataParser:pq,validateBoundary:fq}});var ai=v((Joe,my)=>{"use strict";var Xs=ee(),{ReadableStreamFrom:gq,isBlobLike:Ay,isReadableStreamLike:mq,readableStreamClose:Eq,createDeferredPromise:Iq,fullyReadBody:Cq,extractMimeType:Bq,utf8DecodeBytes:uy}=Bt(),{FormData:cy}=Ks(),{kState:si}=cn(),{webidl:yq}=$e(),{Blob:Qq}=x("node:buffer"),yp=x("node:assert"),{isErrored:dy,isDisturbed:wq}=x("node:stream"),{isArrayBuffer:bq}=x("node:util/types"),{serializeAMimeType:kq}=at(),{multipartFormDataParser:Sq}=ay(),Qp;try{let e=x("node:crypto");Qp=t=>e.randomInt(0,t)}catch{Qp=e=>Math.floor(Math.random(e))}var Bc=new TextEncoder;function xq(){}var fy=globalThis.FinalizationRegistry&&process.version.indexOf("v18")!==0,py;fy&&(py=new FinalizationRegistry(e=>{let t=e.deref();t&&!t.locked&&!wq(t)&&!dy(t)&&t.cancel("Response object has been garbage collected").catch(xq)}));function hy(e,t=!1){let r=null;e instanceof ReadableStream?r=e:Ay(e)?r=e.stream():r=new ReadableStream({async pull(A){let c=typeof o=="string"?Bc.encode(o):o;c.byteLength&&A.enqueue(c),queueMicrotask(()=>Eq(A))},start(){},type:"bytes"}),yp(mq(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(bq(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(Xs.isFormDataLike(e)){let A=`----formdata-undici-0${`${Qp(1e11)}`.padStart(11,"0")}`,c=`--${A}\r
|
|
5
|
+
Content-Disposition: form-data`;let l=g=>g.replace(/\n/g,"%0A").replace(/\r/g,"%0D").replace(/"/g,"%22"),u=g=>g.replace(/\r?\n|\r/g,`\r
|
|
6
|
+
`),d=[],f=new Uint8Array([13,10]);i=0;let p=!1;for(let[g,m]of e)if(typeof m=="string"){let C=Bc.encode(c+`; name="${l(u(g))}"\r
|
|
7
|
+
\r
|
|
8
|
+
${u(m)}\r
|
|
9
|
+
`);d.push(C),i+=C.byteLength}else{let C=Bc.encode(`${c}; name="${l(u(g))}"`+(m.name?`; filename="${l(m.name)}"`:"")+`\r
|
|
10
|
+
Content-Type: ${m.type||"application/octet-stream"}\r
|
|
11
|
+
\r
|
|
12
|
+
`);d.push(C,m,f),typeof m.size=="number"?i+=C.byteLength+m.size+f.byteLength:p=!0}let h=Bc.encode(`--${A}--\r
|
|
13
|
+
`);d.push(h),i+=h.byteLength,p&&(i=null),o=e,n=async function*(){for(let g of d)g.stream?yield*g.stream():yield g},s=`multipart/form-data; boundary=${A}`}else if(Ay(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(Xs.isDisturbed(e)||e.locked)throw new TypeError("Response body object should not be disturbed or locked");r=e instanceof ReadableStream?e:gq(e)}if((typeof o=="string"||Xs.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(!dy(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 vq(e,t=!1){return e instanceof ReadableStream&&(yp(!Xs.isDisturbed(e),"The body has already been consumed."),yp(!e.locked,"The stream is locked.")),hy(e,t)}function Nq(e,t){let[r,n]=t.stream.tee();return t.stream=r,{stream:n,length:t.length,source:t.source}}function Rq(e){if(e.aborted)throw new DOMException("The operation was aborted.","AbortError")}function Dq(e){return{blob(){return ii(this,r=>{let n=ly(this);return n===null?n="":n&&(n=kq(n)),new Qq([r],{type:n})},e)},arrayBuffer(){return ii(this,r=>new Uint8Array(r).buffer,e)},text(){return ii(this,uy,e)},json(){return ii(this,Mq,e)},formData(){return ii(this,r=>{let n=ly(this);if(n!==null)switch(n.essence){case"multipart/form-data":{let o=Sq(r,n);if(o==="failure")throw new TypeError("Failed to parse body as FormData.");let i=new cy;return i[si]=o,i}case"application/x-www-form-urlencoded":{let o=new URLSearchParams(r.toString()),i=new cy;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 ii(this,r=>new Uint8Array(r),e)}}}function Fq(e){Object.assign(e.prototype,Dq(e))}async function ii(e,t,r){if(yq.brandCheck(e,r),gy(e))throw new TypeError("Body is unusable: Body has already been read");Rq(e[si]);let n=Iq(),o=s=>n.reject(s),i=s=>{try{n.resolve(t(s))}catch(a){o(a)}};return e[si].body==null?(i(Buffer.allocUnsafe(0)),n.promise):(await Cq(e[si].body,i,o),n.promise)}function gy(e){let t=e[si].body;return t!=null&&(t.stream.locked||Xs.isDisturbed(t.stream))}function Mq(e){return JSON.parse(uy(e))}function ly(e){let t=e[si].headersList,r=Bq(t);return r==="failure"?null:r}my.exports={extractBody:hy,safelyExtractBody:vq,cloneBody:Nq,mixinBody:Fq,streamRegistry:py,hasFinalizationRegistry:fy,bodyUnusable:gy}});var Fy=v((Woe,Dy)=>{"use strict";var G=x("node:assert"),V=ee(),{channels:Ey}=Wo(),wp=ip(),{RequestContentLengthMismatchError:no,ResponseContentLengthMismatchError:Iy,RequestAbortedError:Sy,InvalidArgumentError:Tq,HeadersTimeoutError:Uq,HeadersOverflowError:Lq,SocketError:Ai,InformationalError:ci,BodyTimeoutError:_q,HTTPParserError:Pq,ResponseExceededMaxSizeError:Oq}=ae(),{kUrl:xy,kReset:At,kClient:bc,kParser:Be,kBlocking:ta,kRunning:_e,kPending:vy,kSize:Cy,kWriting:ln,kQueue:Kt,kNoRef:Zs,kKeepAliveDefaultTimeout:qq,kHostHeader:Hq,kPendingIdx:Gq,kRunningIdx:_t,kError:rt,kPipelining:kc,kSocket:io,kKeepAliveTimeoutValue:xc,kMaxHeadersSize:bp,kKeepAliveMaxTimeout:Yq,kKeepAliveTimeoutThreshold:Vq,kHeadersTimeout:$q,kBodyTimeout:Jq,kStrictContentLength:xp,kMaxRequests:By,kCounter:Wq,kMaxResponseSize:zq,kOnError:yy,kResume:Jr,kHTTPContext:Ny}=ke(),yt=p0(),Qy=Buffer.alloc(0),yc=Buffer[Symbol.species],Qc=V.addListener,jq=V.removeAllListeners,so=Symbol("kIdleSocketValidation"),oo=Symbol("kIdleSocketValidationTimeout"),Dp=Symbol("kSocketUsed"),kp;async function Kq(){let e=process.env.JEST_WORKER_ID?Ap():void 0,t;try{t=await WebAssembly.compile(m0())}catch{t=await WebAssembly.compile(e||Ap())}return await WebAssembly.instantiate(t,{env:{wasm_on_url:(r,n,o)=>0,wasm_on_status:(r,n,o)=>{G(Re.ptr===r);let i=n-kr+br.byteOffset;return Re.onStatus(new yc(br.buffer,i,o))||0},wasm_on_message_begin:r=>(G(Re.ptr===r),Re.onMessageBegin()||0),wasm_on_header_field:(r,n,o)=>{G(Re.ptr===r);let i=n-kr+br.byteOffset;return Re.onHeaderField(new yc(br.buffer,i,o))||0},wasm_on_header_value:(r,n,o)=>{G(Re.ptr===r);let i=n-kr+br.byteOffset;return Re.onHeaderValue(new yc(br.buffer,i,o))||0},wasm_on_headers_complete:(r,n,o,i)=>(G(Re.ptr===r),Re.onHeadersComplete(n,!!o,!!i)||0),wasm_on_body:(r,n,o)=>{G(Re.ptr===r);let i=n-kr+br.byteOffset;return Re.onBody(new yc(br.buffer,i,o))||0},wasm_on_message_complete:r=>(G(Re.ptr===r),Re.onMessageComplete()||0)}})}var Sp=null,vp=Kq();vp.catch();var Re=null,br=null,wc=0,kr=null,Xq=0,ea=1,li=2|ea,Sc=4|ea,Np=8|Xq,Rp=class{constructor(t,r,{exports:n}){G(Number.isFinite(t[bp])&&t[bp]>0),this.llhttp=n,this.ptr=this.llhttp.llhttp_alloc(yt.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[bp],this.shouldKeepAlive=!1,this.paused=!1,this.resume=this.resume.bind(this),this.bytesRead=0,this.keepAlive="",this.contentLength="",this.connection="",this.maxResponseSize=t[zq]}setTimeout(t,r){t!==this.timeoutValue||r&ea^this.timeoutType&ea?(this.timeout&&(wp.clearTimeout(this.timeout),this.timeout=null),t&&(r&ea?this.timeout=wp.setFastTimeout(wy,t,new WeakRef(this)):(this.timeout=setTimeout(wy,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||(G(this.ptr!=null),G(Re==null),this.llhttp.llhttp_resume(this.ptr),G(this.timeoutType===Sc),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.paused=!1,this.execute(this.socket.read()||Qy),this.readMore())}readMore(){for(;!this.paused&&this.ptr;){let t=this.socket.read();if(t===null)break;this.execute(t)}}execute(t){G(this.ptr!=null),G(Re==null),G(!this.paused);let{socket:r,llhttp:n}=this;t.length>wc&&(kr&&n.free(kr),wc=Math.ceil(t.length/4096)*4096,kr=n.malloc(wc)),new Uint8Array(n.memory.buffer,kr,wc).set(t);try{let o;try{br=t,Re=this,o=n.llhttp_execute(this.ptr,kr,t.length)}catch(s){throw s}finally{Re=null,br=null}let i=n.llhttp_get_error_pos(this.ptr)-kr;if(o!==yt.ERROR.OK){let s=t.subarray(i);if(o===yt.ERROR.PAUSED_UPGRADE)this.onUpgrade(s);else if(o===yt.ERROR.PAUSED)this.paused=!0,r.unshift(s);else throw this.createError(o,s)}}catch(o){V.destroy(r,o)}}finish(){G(Re===null),G(this.ptr!=null),G(!this.paused);let{llhttp:t}=this,r;try{Re=this,r=t.llhttp_finish(this.ptr)}finally{Re=null}return r===yt.ERROR.OK?null:r===yt.ERROR.PAUSED||r===yt.ERROR.PAUSED_UPGRADE?(this.paused=!0,null):this.createError(r,Qy)}createError(t,r){let{llhttp:n,contentLength:o,bytesRead:i}=this;if(o&&i!==parseInt(o,10))return new Iy;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 Pq(a,yt.ERROR[t],r)}destroy(){G(this.ptr!=null),G(Re==null),this.llhttp.llhttp_free(this.ptr),this.ptr=null,this.timeout&&wp.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[_e]===0)return V.destroy(t,new Ai("bad response",V.getSocketInfo(t))),-1;let n=r[Kt][r[_t]];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=V.bufferToLowerCasedHeaderName(n);o==="keep-alive"?this.keepAlive+=t.toString():o==="connection"&&(this.connection+=t.toString())}else n.length===14&&V.bufferToLowerCasedHeaderName(n)==="content-length"&&(this.contentLength+=t.toString());this.trackHeader(t.length)}trackHeader(t){this.headersSize+=t,this.headersSize>=this.headersMaxSize&&V.destroy(this.socket,new Lq)}onUpgrade(t){let{upgrade:r,client:n,socket:o,headers:i,statusCode:s}=this;G(r),G(n[io]===o),G(!o.destroyed),G(!this.paused),G((i.length&1)===0);let a=n[Kt][n[_t]];G(a),G(a.upgrade||a.method==="CONNECT"),this.statusCode=null,this.statusText="",this.shouldKeepAlive=null,this.headers=[],this.headersSize=0,o.unshift(t),o[Be].destroy(),o[Be]=null,o[bc]=null,o[rt]=null,jq(o),n[io]=null,n[Ny]=null,n[Kt][n[_t]++]=null,n.emit("disconnect",n[xy],[n],new ci("upgrade"));try{a.onUpgrade(s,i,o)}catch(A){V.destroy(o,A)}n[Jr]()}onHeadersComplete(t,r,n){let{client:o,socket:i,headers:s,statusText:a}=this;if(i.destroyed)return-1;if(o[_e]===0)return V.destroy(i,new Ai("bad response",V.getSocketInfo(i))),-1;let A=o[Kt][o[_t]];if(!A)return-1;if(G(!this.upgrade),G(this.statusCode<200),t===100)return V.destroy(i,new Ai("bad response",V.getSocketInfo(i))),-1;if(r&&!A.upgrade)return V.destroy(i,new Ai("bad upgrade",V.getSocketInfo(i))),-1;if(G(this.timeoutType===li),this.statusCode=t,this.shouldKeepAlive=n||A.method==="HEAD"&&!i[At]&&this.connection.toLowerCase()==="keep-alive",this.statusCode>=200){let l=A.bodyTimeout!=null?A.bodyTimeout:o[Jq];this.setTimeout(l,Sc)}else this.timeout&&this.timeout.refresh&&this.timeout.refresh();if(A.method==="CONNECT")return G(o[_e]===1),this.upgrade=!0,2;if(r)return G(o[_e]===1),this.upgrade=!0,2;if(G((this.headers.length&1)===0),this.headers=[],this.headersSize=0,this.shouldKeepAlive&&o[kc]){let l=this.keepAlive?V.parseKeepAliveTimeout(this.keepAlive):null;if(l!=null){let u=Math.min(l-o[Vq],o[Yq]);u<=0?i[At]=!0:o[xc]=u}else o[xc]=o[qq]}else i[At]=!0;let c=A.onHeaders(t,s,this.resume,a)===!1;return A.aborted?-1:A.method==="HEAD"||t<200?1:(i[ta]&&(i[ta]=!1,o[Jr]()),c?yt.ERROR.PAUSED:0)}onBody(t){let{client:r,socket:n,statusCode:o,maxResponseSize:i}=this;if(n.destroyed)return-1;let s=r[Kt][r[_t]];if(G(s),G(this.timeoutType===Sc),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),G(o>=200),i>-1&&this.bytesRead+t.length>i)return V.destroy(n,new Oq),-1;if(this.bytesRead+=t.length,s.onData(t)===!1)return yt.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;G(n>=100),G((this.headers.length&1)===0);let c=t[Kt][t[_t]];if(G(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 V.destroy(r,new Iy),-1;if(c.onComplete(i),t[Kt][t[_t]++]=null,r[Dp]=!0,r[ln])return G(t[_e]===0),V.destroy(r,new ci("reset")),yt.ERROR.PAUSED;if(A){if(r[At]&&t[_e]===0)return V.destroy(r,new ci("reset")),yt.ERROR.PAUSED;t[kc]==null||t[kc]===1?setImmediate(()=>t[Jr]()):t[Jr]()}else return V.destroy(r,new ci("reset")),yt.ERROR.PAUSED}}};function wy(e){let{socket:t,timeoutType:r,client:n,paused:o}=e.deref();r===li?(!t[ln]||t.writableNeedDrain||n[_e]>1)&&(G(!o,"cannot be paused while waiting for headers"),V.destroy(t,new Uq)):r===Sc?o||V.destroy(t,new _q):r===Np&&(G(n[_e]===0&&n[xc]),V.destroy(t,new ci("socket idle timeout")))}async function Zq(e,t){e[io]=t,Sp||(Sp=await vp,vp=null),t[Zs]=!1,t[ln]=!1,t[At]=!1,t[ta]=!1,t[so]=0,t[oo]=null,t[Dp]=!1,t[Be]=new Rp(e,t,Sp),Qc(t,"error",function(n){G(n.code!=="ERR_TLS_CERT_ALTNAME_INVALID");let o=this[Be];if(n.code==="ECONNRESET"&&o.statusCode&&!o.shouldKeepAlive){let i=o.finish();i&&(this[rt]=i,this[bc][yy](i));return}this[rt]=n,this[bc][yy](n)}),Qc(t,"readable",function(){let n=this[Be];n&&n.readMore()}),Qc(t,"end",function(){let n=this[Be];if(n.statusCode&&!n.shouldKeepAlive){let o=n.finish();o&&V.destroy(this,o);return}V.destroy(this,new Ai("other side closed",V.getSocketInfo(this)))}),Qc(t,"close",function(){let n=this[bc],o=this[Be];Ry(this),o&&(!this[rt]&&o.statusCode&&!o.shouldKeepAlive&&(this[rt]=o.finish()||this[rt]),this[Be].destroy(),this[Be]=null);let i=this[rt]||new Ai("closed",V.getSocketInfo(this));if(n[io]=null,n[Ny]=null,n.destroyed){G(n[vy]===0);let s=n[Kt].splice(n[_t]);for(let a=0;a<s.length;a++){let A=s[a];V.errorRequest(n,A,i)}}else if(n[_e]>0&&i.code!=="UND_ERR_INFO"){let s=n[Kt][n[_t]];n[Kt][n[_t]++]=null,V.errorRequest(n,s,i)}n[Gq]=n[_t],G(n[_e]===0),n.emit("disconnect",n[xy],[n],i),n[Jr]()});let r=!1;return t.on("close",()=>{r=!0}),{version:"h1",defaultPipelining:1,write(...n){return nH(e,...n)},resume(){tH(e)},destroy(n,o){r?queueMicrotask(o):t.destroy(n).on("close",o)},get destroyed(){return t.destroyed},busy(n){return!!(t[ln]||t[At]||t[ta]||t[so]===1||n&&(e[_e]>0&&!n.idempotent||e[_e]>0&&(n.upgrade||n.method==="CONNECT")||e[_e]>0&&V.bodyLength(n.body)!==0&&(V.isStream(n.body)||V.isAsyncIterable(n.body)||V.isFormDataLike(n.body))))}}}function Ry(e){e[oo]&&(clearTimeout(e[oo]),e[oo]=null),e[so]=0}function eH(e,t){t[so]=1,t[oo]=setTimeout(()=>{t[oo]=null,t[so]=2,e[io]===t&&!t.destroyed&&e[Jr]()},0),t[oo].unref?.()}function tH(e){let t=e[io];if(t&&!t.destroyed){if(e[Cy]===0?!t[Zs]&&t.unref&&(t.unref(),t[Zs]=!0):t[Zs]&&t.ref&&(t.ref(),t[Zs]=!1),e[_e]===0&&e[vy]>0&&t[Dp]){if(t[so]===0)return eH(e,t),t[Be].readMore(),t.destroyed,void 0;if(t[so]===1)return t[Be].readMore(),t.destroyed,void 0}if(e[_e]===0&&(t[Be].readMore(),t.destroyed))return;if(e[Cy]===0)t[Be].timeoutType!==Np&&t[Be].setTimeout(e[xc],Np);else if(e[_e]>0&&t[Be].statusCode<200&&t[Be].timeoutType!==li){let r=e[Kt][e[_t]],n=r.headersTimeout!=null?r.headersTimeout:e[$q];t[Be].setTimeout(n,li)}}}function rH(e){return e!=="GET"&&e!=="HEAD"&&e!=="OPTIONS"&&e!=="TRACE"&&e!=="CONNECT"}function nH(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(V.isFormDataLike(A)){kp||(kp=ai().extractBody);let[g,m]=kp(A);t.contentType==null&&c.push("content-type",m),A=g.stream,l=g.length}else if(V.isBlobLike(A)&&t.contentType==null){let g=A.type;if(g){let m=`${g}`;if(!V.isValidHeaderValue(m))return V.errorRequest(e,t,new Tq("invalid content-type header")),!1;c.push("content-type",m)}}A&&typeof A.read=="function"&&A.read(0);let d=V.bodyLength(A);if(l=d??l,l===null&&(l=t.contentLength),l===0&&!u&&(l=null),rH(r)&&l>0&&t.contentLength!==null&&t.contentLength!==l){if(e[xp])return V.errorRequest(e,t,new no),!1;process.emitWarning(new no)}let f=e[io];Ry(f);let p=g=>{t.aborted||t.completed||(V.errorRequest(e,t,g||new Sy),V.destroy(A),V.destroy(f,new ci("aborted")))};try{t.onConnect(p)}catch(g){V.errorRequest(e,t,g)}if(t.aborted)return!1;r==="HEAD"&&(f[At]=!0),(i||r==="CONNECT")&&(f[At]=!0),a!=null&&(f[At]=a),e[By]&&f[Wq]++>=e[By]&&(f[At]=!0),s&&(f[ta]=!0);let h=`${r} ${n} HTTP/1.1\r
|
|
14
|
+
`;if(typeof o=="string"?h+=`host: ${o}\r
|
|
15
|
+
`:h+=e[Hq],i?h+=`connection: upgrade\r
|
|
16
|
+
upgrade: ${i}\r
|
|
17
|
+
`:e[kc]&&!f[At]?h+=`connection: keep-alive\r
|
|
18
|
+
`:h+=`connection: close\r
|
|
19
|
+
`,Array.isArray(c))for(let g=0;g<c.length;g+=2){let m=c[g+0],C=c[g+1];if(Array.isArray(C))for(let E=0;E<C.length;E++)h+=`${m}: ${C[E]}\r
|
|
20
|
+
`;else h+=`${m}: ${C}\r
|
|
21
|
+
`}return Ey.sendHeaders.hasSubscribers&&Ey.sendHeaders.publish({request:t,headers:h,socket:f}),!A||d===0?by(p,null,e,t,f,l,h,u):V.isBuffer(A)?by(p,A,e,t,f,l,h,u):V.isBlobLike(A)?typeof A.stream=="function"?ky(p,A.stream(),e,t,f,l,h,u):iH(p,A,e,t,f,l,h,u):V.isStream(A)?oH(p,A,e,t,f,l,h,u):V.isIterable(A)?ky(p,A,e,t,f,l,h,u):G(!1),!0}function oH(e,t,r,n,o,i,s,a){G(i!==0||r[_e]===0,"stream body cannot be pipelined");let A=!1,c=new vc({abort:e,socket:o,request:n,contentLength:i,client:r,expectsPayload:a,header:s}),l=function(p){if(!A)try{!c.write(p)&&this.pause&&this.pause()}catch(h){V.destroy(this,h)}},u=function(){A||t.resume&&t.resume()},d=function(){if(queueMicrotask(()=>{t.removeListener("error",f)}),!A){let p=new Sy;queueMicrotask(()=>f(p))}},f=function(p){if(!A){if(A=!0,G(o.destroyed||o[ln]&&r[_e]<=1),o.off("drain",u).off("error",f),t.removeListener("data",l).removeListener("end",f).removeListener("close",d),!p)try{c.end()}catch(h){p=h}c.destroy(p),p&&(p.code!=="UND_ERR_INFO"||p.message!=="reset")?V.destroy(t,p):V.destroy(t)}};t.on("data",l).on("end",f).on("error",f).on("close",d),t.resume&&t.resume(),o.on("drain",u).on("error",f),t.errorEmitted??t.errored?setImmediate(()=>f(t.errored)):(t.endEmitted??t.readableEnded)&&setImmediate(()=>f(null)),(t.closeEmitted??t.closed)&&setImmediate(d)}function by(e,t,r,n,o,i,s,a){try{t?V.isBuffer(t)&&(G(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[At]=!0)):i===0?o.write(`${s}content-length: 0\r
|
|
24
|
+
\r
|
|
25
|
+
`,"latin1"):(G(i===null,"no body must not have content length"),o.write(`${s}\r
|
|
26
|
+
`,"latin1")),n.onRequestSent(),r[Jr]()}catch(A){e(A)}}async function iH(e,t,r,n,o,i,s,a){G(i===t.size,"blob body must have content length");try{if(i!=null&&i!==t.size)throw new no;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[At]=!0),r[Jr]()}catch(A){e(A)}}async function ky(e,t,r,n,o,i,s,a){G(i!==0||r[_e]===0,"iterator body cannot be pipelined");let A=null;function c(){if(A){let d=A;A=null,d()}}let l=()=>new Promise((d,f)=>{G(A===null),o[rt]?f(o[rt]):A=d});o.on("close",c).on("drain",c);let u=new vc({abort:e,socket:o,request:n,contentLength:i,client:r,expectsPayload:a,header:s});try{for await(let d of t){if(o[rt])throw o[rt];u.write(d)||await l()}u.end()}catch(d){u.destroy(d)}finally{o.off("close",c).off("drain",c)}}var vc=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[ln]=!0}write(t){let{socket:r,request:n,contentLength:o,client:i,bytesWritten:s,expectsPayload:a,header:A}=this;if(r[rt])throw r[rt];if(r.destroyed)return!1;let c=Buffer.byteLength(t);if(!c)return!0;if(o!==null&&s+c>o){if(i[xp])throw new no;process.emitWarning(new no)}r.cork(),s===0&&(!a&&n.reset!==!1&&(r[At]=!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[Be].timeout&&r[Be].timeoutType===li&&r[Be].timeout.refresh&&r[Be].timeout.refresh(),l}end(){let{socket:t,contentLength:r,client:n,bytesWritten:o,expectsPayload:i,header:s,request:a}=this;if(a.onRequestSent(),t[ln]=!1,t[rt])throw t[rt];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[xp])throw new no;process.emitWarning(new no)}t[Be].timeout&&t[Be].timeoutType===li&&t[Be].timeout.refresh&&t[Be].timeout.refresh(),n[Jr]()}}destroy(t){let{socket:r,client:n,abort:o}=this;r[ln]=!1,t&&(G(n[_e]<=1,"pipeline should only contain this request"),o(t))}};Dy.exports=Zq});var qy=v((zoe,Oy)=>{"use strict";var Pt=x("node:assert"),{pipeline:sH}=x("node:stream"),ne=ee(),{RequestContentLengthMismatchError:Fp,RequestAbortedError:My,SocketError:ra,InformationalError:Mp}=ae(),{kUrl:Nc,kReset:Dc,kClient:ui,kRunning:Fc,kPending:aH,kQueue:un,kPendingIdx:Tp,kRunningIdx:Xt,kError:er,kSocket:Ge,kStrictContentLength:AH,kOnError:Up,kMaxConcurrentStreams:Py,kHTTP2Session:Zt,kResume:dn,kSize:cH,kHTTPContext:lH}=ke(),Wr=Symbol("open streams"),Ty,Uy=!1,Rc;try{Rc=x("node:http2")}catch{Rc={constants:{}}}var{constants:{HTTP2_HEADER_AUTHORITY:uH,HTTP2_HEADER_METHOD:dH,HTTP2_HEADER_PATH:fH,HTTP2_HEADER_SCHEME:pH,HTTP2_HEADER_CONTENT_LENGTH:hH,HTTP2_HEADER_EXPECT:gH,HTTP2_HEADER_STATUS:mH}}=Rc;function EH(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 IH(e,t){e[Ge]=t,Uy||(Uy=!0,process.emitWarning("H2 support is experimental, expect them to change at any time.",{code:"UNDICI-H2"}));let r=Rc.connect(e[Nc],{createConnection:()=>t,peerMaxConcurrentStreams:e[Py]});r[Wr]=0,r[ui]=e,r[Ge]=t,ne.addListener(r,"error",BH),ne.addListener(r,"frameError",yH),ne.addListener(r,"end",QH),ne.addListener(r,"goaway",wH),ne.addListener(r,"close",function(){let{[ui]:o}=this,{[Ge]:i}=o,s=this[Ge][er]||this[er]||new ra("closed",ne.getSocketInfo(i));if(o[Zt]=null,o.destroyed){Pt(o[aH]===0);let a=o[un].splice(o[Xt]);for(let A=0;A<a.length;A++){let c=a[A];ne.errorRequest(o,c,s)}}}),r.unref(),e[Zt]=r,t[Zt]=r,ne.addListener(t,"error",function(o){Pt(o.code!=="ERR_TLS_CERT_ALTNAME_INVALID"),this[er]=o,this[ui][Up](o)}),ne.addListener(t,"end",function(){ne.destroy(this,new ra("other side closed",ne.getSocketInfo(this)))}),ne.addListener(t,"close",function(){let o=this[er]||new ra("closed",ne.getSocketInfo(this));e[Ge]=null,this[Zt]!=null&&this[Zt].destroy(o),e[Tp]=e[Xt],Pt(e[Fc]===0),e.emit("disconnect",e[Nc],[e],o),e[dn]()});let n=!1;return t.on("close",()=>{n=!0}),{version:"h2",defaultPipelining:1/0,write(...o){return kH(e,...o)},resume(){CH(e)},destroy(o,i){n?queueMicrotask(i):t.destroy(o).on("close",i)},get destroyed(){return t.destroyed},busy(){return!1}}}function CH(e){let t=e[Ge];t?.destroyed===!1&&(e[cH]===0&&e[Py]===0?(t.unref(),e[Zt].unref()):(t.ref(),e[Zt].ref()))}function BH(e){Pt(e.code!=="ERR_TLS_CERT_ALTNAME_INVALID"),this[Ge][er]=e,this[ui][Up](e)}function yH(e,t,r){if(r===0){let n=new Mp(`HTTP/2: "frameError" received - type ${e}, code ${t}`);this[Ge][er]=n,this[ui][Up](n)}}function QH(){let e=new ra("other side closed",ne.getSocketInfo(this[Ge]));this.destroy(e),ne.destroy(this[Ge],e)}function wH(e){let t=this[er]||new ra(`HTTP/2: "GOAWAY" frame received with code ${e}`,ne.getSocketInfo(this)),r=this[ui];if(r[Ge]=null,r[lH]=null,this[Zt]!=null&&(this[Zt].destroy(t),this[Zt]=null),ne.destroy(this[Ge],t),r[Xt]<r[un].length){let n=r[un][r[Xt]];r[un][r[Xt]++]=null,ne.errorRequest(r,n,t),r[Tp]=r[Xt]}Pt(r[Fc]===0),r.emit("disconnect",r[Nc],[r],t),r[dn]()}function bH(e){return e!=="GET"&&e!=="HEAD"&&e!=="OPTIONS"&&e!=="TRACE"&&e!=="CONNECT"}function kH(e,t){let r=e[Zt],{method:n,path:o,host:i,upgrade:s,expectContinue:a,signal:A,headers:c}=t,{body:l}=t;if(s)return ne.errorRequest(e,t,new Error("Upgrade not supported for H2")),!1;let u={};for(let I=0;I<c.length;I+=2){let Q=c[I+0],N=c[I+1];if(Array.isArray(N))for(let S=0;S<N.length;S++)u[Q]?u[Q]+=`,${N[S]}`:u[Q]=N[S];else u[Q]=N}let d,{hostname:f,port:p}=e[Nc];u[uH]=i||`${f}${p?`:${p}`:""}`,u[dH]=n;let h=I=>{t.aborted||t.completed||(I=I||new My,ne.errorRequest(e,t,I),d!=null&&ne.destroy(d,I),ne.destroy(l,I),e[un][e[Xt]++]=null,e[dn]())};try{t.onConnect(h)}catch(I){ne.errorRequest(e,t,I)}if(t.aborted)return!1;if(n==="CONNECT")return r.ref(),d=r.request(u,{endStream:!1,signal:A}),d.id&&!d.pending?(t.onUpgrade(null,null,d),++r[Wr],e[un][e[Xt]++]=null):d.once("ready",()=>{t.onUpgrade(null,null,d),++r[Wr],e[un][e[Xt]++]=null}),d.once("close",()=>{r[Wr]-=1,r[Wr]===0&&r.unref()}),!0;u[fH]=o,u[pH]="https";let g=n==="PUT"||n==="POST"||n==="PATCH";l&&typeof l.read=="function"&&l.read(0);let m=ne.bodyLength(l);if(ne.isFormDataLike(l)){Ty??=ai().extractBody;let[I,Q]=Ty(l);u["content-type"]=Q,l=I.stream,m=I.length}if(m==null&&(m=t.contentLength),(m===0||!g)&&(m=null),bH(n)&&m>0&&t.contentLength!=null&&t.contentLength!==m){if(e[AH])return ne.errorRequest(e,t,new Fp),!1;process.emitWarning(new Fp)}m!=null&&(Pt(l,"no body must not have content length"),u[hH]=`${m}`),r.ref();let C=n==="GET"||n==="HEAD"||l===null;return a?(u[gH]="100-continue",d=r.request(u,{endStream:C,signal:A}),d.once("continue",E)):(d=r.request(u,{endStream:C,signal:A}),E()),++r[Wr],d.once("response",I=>{let{[mH]:Q,...N}=I;if(t.onResponseStarted(),t.aborted){let S=new My;ne.errorRequest(e,t,S),ne.destroy(d,S);return}t.onHeaders(Number(Q),EH(N),d.resume.bind(d),"")===!1&&d.pause(),d.on("data",S=>{t.onData(S)===!1&&d.pause()})}),d.once("end",()=>{(d.state?.state==null||d.state.state<6)&&t.onComplete([]),r[Wr]===0&&r.unref(),h(new Mp("HTTP/2: stream half-closed (remote)")),e[un][e[Xt]++]=null,e[Tp]=e[Xt],e[dn]()}),d.once("close",()=>{r[Wr]-=1,r[Wr]===0&&r.unref()}),d.once("error",function(I){h(I)}),d.once("frameError",(I,Q)=>{h(new Mp(`HTTP/2: "frameError" received - type ${I}, code ${Q}`))}),!0;function E(){!l||m===0?Ly(h,d,null,e,t,e[Ge],m,g):ne.isBuffer(l)?Ly(h,d,l,e,t,e[Ge],m,g):ne.isBlobLike(l)?typeof l.stream=="function"?_y(h,d,l.stream(),e,t,e[Ge],m,g):xH(h,d,l,e,t,e[Ge],m,g):ne.isStream(l)?SH(h,e[Ge],g,d,l,e,t,m):ne.isIterable(l)?_y(h,d,l,e,t,e[Ge],m,g):Pt(!1)}}function Ly(e,t,r,n,o,i,s,a){try{r!=null&&ne.isBuffer(r)&&(Pt(s===r.byteLength,"buffer body must have content length"),t.cork(),t.write(r),t.uncork(),t.end(),o.onBodySent(r)),a||(i[Dc]=!0),o.onRequestSent(),n[dn]()}catch(A){e(A)}}function SH(e,t,r,n,o,i,s,a){Pt(a!==0||i[Fc]===0,"stream body cannot be pipelined");let A=sH(o,n,l=>{l?(ne.destroy(A,l),e(l)):(ne.removeAllListeners(A),s.onRequestSent(),r||(t[Dc]=!0),i[dn]())});ne.addListener(A,"data",c);function c(l){s.onBodySent(l)}}async function xH(e,t,r,n,o,i,s,a){Pt(s===r.size,"blob body must have content length");try{if(s!=null&&s!==r.size)throw new Fp;let A=Buffer.from(await r.arrayBuffer());t.cork(),t.write(A),t.uncork(),t.end(),o.onBodySent(A),o.onRequestSent(),a||(i[Dc]=!0),n[dn]()}catch(A){e(A)}}async function _y(e,t,r,n,o,i,s,a){Pt(s!==0||n[Fc]===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)=>{Pt(A===null),i[er]?d(i[er]):A=u});t.on("close",c).on("drain",c);try{for await(let u of r){if(i[er])throw i[er];let d=t.write(u);o.onBodySent(u),d||await l()}t.end(),o.onRequestSent(),a||(i[Dc]=!0),n[dn]()}catch(u){e(u)}finally{t.off("close",c).off("drain",c)}}Oy.exports=IH});var Tc=v((joe,Yy)=>{"use strict";var Sr=ee(),{kBodyUsed:na}=ke(),_p=x("node:assert"),{InvalidArgumentError:vH}=ae(),NH=x("node:events"),RH=[300,301,302,303,307,308],Hy=Symbol("body"),Mc=class{constructor(t){this[Hy]=t,this[na]=!1}async*[Symbol.asyncIterator](){_p(!this[na],"disturbed"),this[na]=!0,yield*this[Hy]}},Lp=class{constructor(t,r,n,o){if(r!=null&&(!Number.isInteger(r)||r<0))throw new vH("maxRedirections must be a positive number");Sr.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,Sr.isStream(this.opts.body)?(Sr.bodyLength(this.opts.body)===0&&this.opts.body.on("data",function(){_p(!1)}),typeof this.opts.body.readableDidRead!="boolean"&&(this.opts.body[na]=!1,NH.prototype.on.call(this.opts.body,"data",function(){this[na]=!0}))):this.opts.body&&typeof this.opts.body.pipeTo=="function"?this.opts.body=new Mc(this.opts.body):this.opts.body&&typeof this.opts.body!="string"&&!ArrayBuffer.isView(this.opts.body)&&Sr.isIterable(this.opts.body)&&(this.opts.body=new Mc(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||Sr.isDisturbed(this.opts.body)?null:DH(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}=Sr.parseURL(new URL(this.location,this.opts.origin&&new URL(this.opts.path,this.opts.origin))),A=a?`${s}${a}`:s;this.opts.headers=FH(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 DH(e,t){if(RH.indexOf(e)===-1)return null;for(let r=0;r<t.length;r+=2)if(t[r].length===8&&Sr.headerNameToString(t[r])==="location")return t[r+1]}function Gy(e,t,r){if(e.length===4)return Sr.headerNameToString(e)==="host";if(t&&Sr.headerNameToString(e).startsWith("content-"))return!0;if(r&&(e.length===13||e.length===6||e.length===19)){let n=Sr.headerNameToString(e);return n==="authorization"||n==="cookie"||n==="proxy-authorization"}return!1}function FH(e,t,r){let n=[];if(Array.isArray(e))for(let o=0;o<e.length;o+=2)Gy(e[o],t,r)||n.push(e[o],e[o+1]);else if(e&&typeof e=="object")for(let o of Object.keys(e))Gy(o,t,r)||n.push(o,e[o]);else _p(e==null,"headers must be an object or an array");return n}Yy.exports=Lp});var Uc=v((Koe,Vy)=>{"use strict";var MH=Tc();function TH({maxRedirections:e}){return t=>function(n,o){let{maxRedirections:i=e}=n;if(!i)return t(n,o);let s=new MH(t,i,n,o);return n={...n,maxRedirections:0},t(n,s)}}Vy.exports=TH});var pi=v((Xoe,tQ)=>{"use strict";var zr=x("node:assert"),Ky=x("node:net"),UH=x("node:http"),ao=ee(),{channels:di}=Wo(),LH=t0(),_H=Xo(),{InvalidArgumentError:Te,InformationalError:PH,ClientDestroyedError:OH}=ae(),qH=Ys(),{kUrl:xr,kServerName:fn,kClient:HH,kBusy:Pp,kConnect:GH,kResuming:Ao,kRunning:Aa,kPending:ca,kSize:aa,kQueue:tr,kConnected:YH,kConnecting:fi,kNeedDrain:hn,kKeepAliveDefaultTimeout:$y,kHostHeader:VH,kPendingIdx:rr,kRunningIdx:jr,kError:$H,kPipelining:Lc,kKeepAliveTimeoutValue:JH,kMaxHeadersSize:WH,kKeepAliveMaxTimeout:zH,kKeepAliveTimeoutThreshold:jH,kHeadersTimeout:KH,kBodyTimeout:XH,kStrictContentLength:ZH,kConnector:oa,kMaxRedirections:eG,kMaxRequests:Op,kCounter:tG,kClose:rG,kDestroy:nG,kDispatch:oG,kInterceptors:Jy,kLocalAddress:ia,kMaxResponseSize:iG,kOnError:sG,kHTTPContext:Ue,kMaxConcurrentStreams:aG,kResume:sa}=ke(),AG=Fy(),cG=qy(),Wy=!1,pn=Symbol("kClosedResolve"),zy=()=>{};function Xy(e){return e[Lc]??e[Ue]?.defaultPipelining??1}var qp=class extends _H{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:f,keepAliveTimeoutThreshold:p,socketPath:h,pipelining:g,tls:m,strictContentLength:C,maxCachedSessions:E,maxRedirections:I,connect:Q,maxRequestsPerClient:N,localAddress:S,maxResponseSize:y,autoSelectFamily:w,autoSelectFamilyAttemptTimeout:b,maxConcurrentStreams:U,allowH2:q,webSocket:ue}={}){if(super({webSocket:ue}),l!==void 0)throw new Te("unsupported keepAlive, use pipelining=0 instead");if(i!==void 0)throw new Te("unsupported socketTimeout, use headersTimeout & bodyTimeout instead");if(s!==void 0)throw new Te("unsupported requestTimeout, use headersTimeout & bodyTimeout instead");if(c!==void 0)throw new Te("unsupported idleTimeout, use keepAliveTimeout instead");if(d!==void 0)throw new Te("unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead");if(n!=null&&!Number.isFinite(n))throw new Te("invalid maxHeaderSize");if(h!=null&&typeof h!="string")throw new Te("invalid socketPath");if(a!=null&&(!Number.isFinite(a)||a<0))throw new Te("invalid connectTimeout");if(u!=null&&(!Number.isFinite(u)||u<=0))throw new Te("invalid keepAliveTimeout");if(f!=null&&(!Number.isFinite(f)||f<=0))throw new Te("invalid keepAliveMaxTimeout");if(p!=null&&!Number.isFinite(p))throw new Te("invalid keepAliveTimeoutThreshold");if(o!=null&&(!Number.isInteger(o)||o<0))throw new Te("headersTimeout must be a positive integer or zero");if(A!=null&&(!Number.isInteger(A)||A<0))throw new Te("bodyTimeout must be a positive integer or zero");if(Q!=null&&typeof Q!="function"&&typeof Q!="object")throw new Te("connect must be a function or an object");if(I!=null&&(!Number.isInteger(I)||I<0))throw new Te("maxRedirections must be a positive number");if(N!=null&&(!Number.isInteger(N)||N<0))throw new Te("maxRequestsPerClient must be a positive number");if(S!=null&&(typeof S!="string"||Ky.isIP(S)===0))throw new Te("localAddress must be valid string IP address");if(y!=null&&(!Number.isInteger(y)||y<-1))throw new Te("maxResponseSize must be a positive number");if(b!=null&&(!Number.isInteger(b)||b<-1))throw new Te("autoSelectFamilyAttemptTimeout must be a positive number");if(q!=null&&typeof q!="boolean")throw new Te("allowH2 must be a valid boolean value");if(U!=null&&(typeof U!="number"||U<1))throw new Te("maxConcurrentStreams must be a positive integer, greater than 0");typeof Q!="function"&&(Q=qH({...m,maxCachedSessions:E,allowH2:q,socketPath:h,timeout:a,...w?{autoSelectFamily:w,autoSelectFamilyAttemptTimeout:b}:void 0,...Q})),r?.Client&&Array.isArray(r.Client)?(this[Jy]=r.Client,Wy||(Wy=!0,process.emitWarning("Client.Options#interceptor is deprecated. Use Dispatcher#compose instead.",{code:"UNDICI-CLIENT-INTERCEPTOR-DEPRECATED"}))):this[Jy]=[lG({maxRedirections:I})],this[xr]=ao.parseOrigin(t),this[oa]=Q,this[Lc]=g??1,this[WH]=n||UH.maxHeaderSize,this[$y]=u??4e3,this[zH]=f??6e5,this[jH]=p??2e3,this[JH]=this[$y],this[fn]=null,this[ia]=S??null,this[Ao]=0,this[hn]=0,this[VH]=`host: ${this[xr].hostname}${this[xr].port?`:${this[xr].port}`:""}\r
|
|
40
|
+
`,this[XH]=A??3e5,this[KH]=o??3e5,this[ZH]=C??!0,this[eG]=I,this[Op]=N,this[pn]=null,this[iG]=y>-1?y:-1,this[aG]=U??100,this[Ue]=null,this[tr]=[],this[jr]=0,this[rr]=0,this[sa]=Ve=>Hp(this,Ve),this[sG]=Ve=>Zy(this,Ve)}get pipelining(){return this[Lc]}set pipelining(t){this[Lc]=t,this[sa](!0)}get[ca](){return this[tr].length-this[rr]}get[Aa](){return this[rr]-this[jr]}get[aa](){return this[tr].length-this[jr]}get[YH](){return!!this[Ue]&&!this[fi]&&!this[Ue].destroyed}get[Pp](){return!!(this[Ue]?.busy(null)||this[aa]>=(Xy(this)||1)||this[ca]>0)}[GH](t){eQ(this),this.once("connect",t)}[oG](t,r){let n=t.origin||this[xr].origin,o=new LH(n,t,r);return this[tr].push(o),this[Ao]||(ao.bodyLength(o.body)==null&&ao.isIterable(o.body)?(this[Ao]=1,queueMicrotask(()=>Hp(this))):this[sa](!0)),this[Ao]&&this[hn]!==2&&this[Pp]&&(this[hn]=2),this[hn]<2}async[rG](){return new Promise(t=>{this[aa]?this[pn]=t:t(null)})}async[nG](t){return new Promise(r=>{let n=this[tr].splice(this[rr]);for(let i=0;i<n.length;i++){let s=n[i];ao.errorRequest(this,s,t)}let o=()=>{this[pn]&&(this[pn](),this[pn]=null),r(null)};this[Ue]?(this[Ue].destroy(t,o),this[Ue]=null):queueMicrotask(o),this[sa]()})}},lG=Uc();function Zy(e,t){if(e[Aa]===0&&t.code!=="UND_ERR_INFO"&&t.code!=="UND_ERR_SOCKET"){zr(e[rr]===e[jr]);let r=e[tr].splice(e[jr]);for(let n=0;n<r.length;n++){let o=r[n];ao.errorRequest(e,o,t)}zr(e[aa]===0)}}async function eQ(e){zr(!e[fi]),zr(!e[Ue]);let{host:t,hostname:r,protocol:n,port:o}=e[xr];if(r[0]==="["){let i=r.indexOf("]");zr(i!==-1);let s=r.substring(1,i);zr(Ky.isIP(s)),r=s}e[fi]=!0,di.beforeConnect.hasSubscribers&&di.beforeConnect.publish({connectParams:{host:t,hostname:r,protocol:n,port:o,version:e[Ue]?.version,servername:e[fn],localAddress:e[ia]},connector:e[oa]});try{let i=await new Promise((s,a)=>{e[oa]({host:t,hostname:r,protocol:n,port:o,servername:e[fn],localAddress:e[ia]},(A,c)=>{A?a(A):s(c)})});if(e.destroyed){ao.destroy(i.on("error",zy),new OH);return}zr(i);try{e[Ue]=i.alpnProtocol==="h2"?await cG(e,i):await AG(e,i)}catch(s){throw i.destroy().on("error",zy),s}e[fi]=!1,i[tG]=0,i[Op]=e[Op],i[HH]=e,i[$H]=null,di.connected.hasSubscribers&&di.connected.publish({connectParams:{host:t,hostname:r,protocol:n,port:o,version:e[Ue]?.version,servername:e[fn],localAddress:e[ia]},connector:e[oa],socket:i}),e.emit("connect",e[xr],[e])}catch(i){if(e.destroyed)return;if(e[fi]=!1,di.connectError.hasSubscribers&&di.connectError.publish({connectParams:{host:t,hostname:r,protocol:n,port:o,version:e[Ue]?.version,servername:e[fn],localAddress:e[ia]},connector:e[oa],error:i}),i.code==="ERR_TLS_CERT_ALTNAME_INVALID")for(zr(e[Aa]===0);e[ca]>0&&e[tr][e[rr]].servername===e[fn];){let s=e[tr][e[rr]++];ao.errorRequest(e,s,i)}else Zy(e,i);e.emit("connectionError",e[xr],[e],i)}e[sa]()}function jy(e){e[hn]=0,e.emit("drain",e[xr],[e])}function Hp(e,t){e[Ao]!==2&&(e[Ao]=2,uG(e,t),e[Ao]=0,e[jr]>256&&(e[tr].splice(0,e[jr]),e[rr]-=e[jr],e[jr]=0))}function uG(e,t){for(;;){if(e.destroyed){zr(e[ca]===0);return}if(e[pn]&&!e[aa]){e[pn](),e[pn]=null;return}if(e[Ue]&&e[Ue].resume(),e[Pp])e[hn]=2;else if(e[hn]===2){t?(e[hn]=1,queueMicrotask(()=>jy(e))):jy(e);continue}if(e[ca]===0||e[Aa]>=(Xy(e)||1))return;let r=e[tr][e[rr]];if(e[xr].protocol==="https:"&&e[fn]!==r.servername){if(e[Aa]>0)return;e[fn]=r.servername,e[Ue]?.destroy(new PH("servername changed"),()=>{e[Ue]=null,Hp(e)})}if(e[fi])return;if(!e[Ue]){eQ(e);return}if(e[Ue].destroyed||e[Ue].busy(r))return;!r.aborted&&e[Ue].write(r)?e[rr]++:e[tr].splice(e[rr],1)}}tQ.exports=qp});var Gp=v((eie,rQ)=>{"use strict";var _c=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)}};rQ.exports=class{constructor(){this.head=this.tail=new _c}isEmpty(){return this.head.isEmpty()}push(t){this.head.isFull()&&(this.head=this.head.next=new _c),this.head.push(t)}shift(){let t=this.tail,r=t.shift();return t.isEmpty()&&t.next!==null&&(this.tail=t.next),r}}});var oQ=v((tie,nQ)=>{var{kFree:dG,kConnected:fG,kPending:pG,kQueued:hG,kRunning:gG,kSize:mG}=ke(),co=Symbol("pool"),Yp=class{constructor(t){this[co]=t}get connected(){return this[co][fG]}get free(){return this[co][dG]}get pending(){return this[co][pG]}get queued(){return this[co][hG]}get running(){return this[co][gG]}get size(){return this[co][mG]}};nQ.exports=Yp});var jp=v((rie,pQ)=>{"use strict";var EG=Xo(),IG=Gp(),{kConnected:Vp,kSize:iQ,kRunning:sQ,kPending:aQ,kQueued:la,kBusy:CG,kFree:BG,kUrl:yG,kClose:QG,kDestroy:wG,kDispatch:bG}=ke(),kG=oQ(),ct=Symbol("clients"),nt=Symbol("needDrain"),ua=Symbol("queue"),$p=Symbol("closed resolve"),Jp=Symbol("onDrain"),AQ=Symbol("onConnect"),cQ=Symbol("onDisconnect"),lQ=Symbol("onConnectionError"),Wp=Symbol("get dispatcher"),dQ=Symbol("add client"),fQ=Symbol("remove client"),uQ=Symbol("stats"),zp=class extends EG{constructor(t){super(t),this[ua]=new IG,this[ct]=[],this[la]=0;let r=this;this[Jp]=function(o,i){let s=r[ua],a=!1;for(;!a;){let A=s.shift();if(!A)break;r[la]--,a=!this.dispatch(A.opts,A.handler)}this[nt]=a,!this[nt]&&r[nt]&&(r[nt]=!1,r.emit("drain",o,[r,...i])),r[$p]&&s.isEmpty()&&Promise.all(r[ct].map(A=>A.close())).then(r[$p])},this[AQ]=(n,o)=>{r.emit("connect",n,[r,...o])},this[cQ]=(n,o,i)=>{r.emit("disconnect",n,[r,...o],i)},this[lQ]=(n,o,i)=>{r.emit("connectionError",n,[r,...o],i)},this[uQ]=new kG(this)}get[CG](){return this[nt]}get[Vp](){return this[ct].filter(t=>t[Vp]).length}get[BG](){return this[ct].filter(t=>t[Vp]&&!t[nt]).length}get[aQ](){let t=this[la];for(let{[aQ]:r}of this[ct])t+=r;return t}get[sQ](){let t=0;for(let{[sQ]:r}of this[ct])t+=r;return t}get[iQ](){let t=this[la];for(let{[iQ]:r}of this[ct])t+=r;return t}get stats(){return this[uQ]}async[QG](){this[ua].isEmpty()?await Promise.all(this[ct].map(t=>t.close())):await new Promise(t=>{this[$p]=t})}async[wG](t){for(;;){let r=this[ua].shift();if(!r)break;r.handler.onError(t)}await Promise.all(this[ct].map(r=>r.destroy(t)))}[bG](t,r){let n=this[Wp]();return n?n.dispatch(t,r)||(n[nt]=!0,this[nt]=!this[Wp]()):(this[nt]=!0,this[ua].push({opts:t,handler:r}),this[la]++),!this[nt]}[dQ](t){return t.on("drain",this[Jp]).on("connect",this[AQ]).on("disconnect",this[cQ]).on("connectionError",this[lQ]),this[ct].push(t),this[nt]&&queueMicrotask(()=>{this[nt]&&this[Jp](t[yG],[this,t])}),this}[fQ](t){t.close(()=>{let r=this[ct].indexOf(t);r!==-1&&this[ct].splice(r,1)}),this[nt]=this[ct].some(r=>!r[nt]&&r.closed!==!0&&r.destroyed!==!0)}};pQ.exports={PoolBase:zp,kClients:ct,kNeedDrain:nt,kAddClient:dQ,kRemoveClient:fQ,kGetDispatcher:Wp}});var hi=v((nie,EQ)=>{"use strict";var{PoolBase:SG,kClients:Pc,kNeedDrain:xG,kAddClient:vG,kGetDispatcher:NG}=jp(),RG=pi(),{InvalidArgumentError:Kp}=ae(),hQ=ee(),{kUrl:gQ,kInterceptors:DG}=ke(),FG=Ys(),Xp=Symbol("options"),Zp=Symbol("connections"),mQ=Symbol("factory");function MG(e,t){return new RG(e,t)}var eh=class extends SG{constructor(t,{connections:r,factory:n=MG,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 Kp("invalid connections");if(typeof n!="function")throw new Kp("factory must be a function.");if(o!=null&&typeof o!="function"&&typeof o!="object")throw new Kp("connect must be a function or an object");typeof o!="function"&&(o=FG({...s,maxCachedSessions:a,allowH2:u,socketPath:A,timeout:i,...c?{autoSelectFamily:c,autoSelectFamilyAttemptTimeout:l}:void 0,...o})),super(d),this[DG]=d.interceptors?.Pool&&Array.isArray(d.interceptors.Pool)?d.interceptors.Pool:[],this[Zp]=r||null,this[gQ]=hQ.parseOrigin(t),this[Xp]={...hQ.deepClone(d),connect:o,allowH2:u},this[Xp].interceptors=d.interceptors?{...d.interceptors}:void 0,this[mQ]=n,this.on("connectionError",(f,p,h)=>{for(let g of p){let m=this[Pc].indexOf(g);m!==-1&&this[Pc].splice(m,1)}})}[NG](){for(let t of this[Pc])if(!t[xG])return t;if(!this[Zp]||this[Pc].length<this[Zp]){let t=this[mQ](this[gQ],this[Xp]);return this[vG](t),t}}};EQ.exports=eh});var QQ=v((oie,yQ)=>{"use strict";var{BalancedPoolMissingUpstreamError:TG,InvalidArgumentError:UG}=ae(),{PoolBase:LG,kClients:je,kNeedDrain:da,kAddClient:_G,kRemoveClient:PG,kGetDispatcher:OG}=jp(),qG=hi(),{kUrl:th,kInterceptors:HG}=ke(),{parseOrigin:IQ}=ee(),CQ=Symbol("factory"),Oc=Symbol("options"),BQ=Symbol("kGreatestCommonDivisor"),lo=Symbol("kCurrentWeight"),uo=Symbol("kIndex"),Ot=Symbol("kWeight"),qc=Symbol("kMaxWeightPerServer"),Hc=Symbol("kErrorPenalty");function GG(e,t){if(e===0)return t;for(;t!==0;){let r=t;t=e%t,e=r}return e}function YG(e,t){return new qG(e,t)}var rh=class extends LG{constructor(t=[],{factory:r=YG,...n}={}){if(super(),this[Oc]=n,this[uo]=-1,this[lo]=0,this[qc]=this[Oc].maxWeightPerServer||100,this[Hc]=this[Oc].errorPenalty||15,Array.isArray(t)||(t=[t]),typeof r!="function")throw new UG("factory must be a function.");this[HG]=n.interceptors?.BalancedPool&&Array.isArray(n.interceptors.BalancedPool)?n.interceptors.BalancedPool:[],this[CQ]=r;for(let o of t)this.addUpstream(o);this._updateBalancedPoolStats()}addUpstream(t){let r=IQ(t).origin;if(this[je].find(o=>o[th].origin===r&&o.closed!==!0&&o.destroyed!==!0))return this;let n=this[CQ](r,Object.assign({},this[Oc]));this[_G](n),n.on("connect",()=>{n[Ot]=Math.min(this[qc],n[Ot]+this[Hc])}),n.on("connectionError",()=>{n[Ot]=Math.max(1,n[Ot]-this[Hc]),this._updateBalancedPoolStats()}),n.on("disconnect",(...o)=>{let i=o[2];i&&i.code==="UND_ERR_SOCKET"&&(n[Ot]=Math.max(1,n[Ot]-this[Hc]),this._updateBalancedPoolStats())});for(let o of this[je])o[Ot]=this[qc];return this._updateBalancedPoolStats(),this}_updateBalancedPoolStats(){let t=0;for(let r=0;r<this[je].length;r++)t=GG(this[je][r][Ot],t);this[BQ]=t}removeUpstream(t){let r=IQ(t).origin,n=this[je].find(o=>o[th].origin===r&&o.closed!==!0&&o.destroyed!==!0);return n&&this[PG](n),this}get upstreams(){return this[je].filter(t=>t.closed!==!0&&t.destroyed!==!0).map(t=>t[th].origin)}[OG](){if(this[je].length===0)throw new TG;if(!this[je].find(i=>!i[da]&&i.closed!==!0&&i.destroyed!==!0)||this[je].map(i=>i[da]).reduce((i,s)=>i&&s,!0))return;let n=0,o=this[je].findIndex(i=>!i[da]);for(;n++<this[je].length;){this[uo]=(this[uo]+1)%this[je].length;let i=this[je][this[uo]];if(i[Ot]>this[je][o][Ot]&&!i[da]&&(o=this[uo]),this[uo]===0&&(this[lo]=this[lo]-this[BQ],this[lo]<=0&&(this[lo]=this[qc])),i[Ot]>=this[lo]&&!i[da])return i}return this[lo]=this[je][o][Ot],this[uo]=o,this[je][o]}};yQ.exports=rh});var gi=v((iie,NQ)=>{"use strict";var{InvalidArgumentError:Gc}=ae(),{kClients:gn,kRunning:wQ,kClose:VG,kDestroy:$G,kDispatch:JG,kInterceptors:WG}=ke(),zG=Xo(),jG=hi(),KG=pi(),XG=ee(),ZG=Uc(),bQ=Symbol("onConnect"),kQ=Symbol("onDisconnect"),SQ=Symbol("onConnectionError"),eY=Symbol("maxRedirections"),xQ=Symbol("onDrain"),vQ=Symbol("factory"),nh=Symbol("options");function tY(e,t){return t&&t.connections===1?new KG(e,t):new jG(e,t)}var oh=class extends zG{constructor({factory:t=tY,maxRedirections:r=0,connect:n,...o}={}){if(typeof t!="function")throw new Gc("factory must be a function.");if(n!=null&&typeof n!="function"&&typeof n!="object")throw new Gc("connect must be a function or an object");if(!Number.isInteger(r)||r<0)throw new Gc("maxRedirections must be a positive number");super(o),n&&typeof n!="function"&&(n={...n}),this[WG]=o.interceptors?.Agent&&Array.isArray(o.interceptors.Agent)?o.interceptors.Agent:[ZG({maxRedirections:r})],this[nh]={...XG.deepClone(o),connect:n},this[nh].interceptors=o.interceptors?{...o.interceptors}:void 0,this[eY]=r,this[vQ]=t,this[gn]=new Map,this[xQ]=(i,s)=>{this.emit("drain",i,[this,...s])},this[bQ]=(i,s)=>{this.emit("connect",i,[this,...s])},this[kQ]=(i,s,a)=>{this.emit("disconnect",i,[this,...s],a)},this[SQ]=(i,s,a)=>{this.emit("connectionError",i,[this,...s],a)}}get[wQ](){let t=0;for(let r of this[gn].values())t+=r[wQ];return t}[JG](t,r){let n;if(t.origin&&(typeof t.origin=="string"||t.origin instanceof URL))n=String(t.origin);else throw new Gc("opts.origin must be a non-empty string or URL.");let o=this[gn].get(n);return o||(o=this[vQ](t.origin,this[nh]).on("drain",this[xQ]).on("connect",this[bQ]).on("disconnect",this[kQ]).on("connectionError",this[SQ]),this[gn].set(n,o)),o.dispatch(t,r)}async[VG](){let t=[];for(let r of this[gn].values())t.push(r.close());this[gn].clear(),await Promise.all(t)}async[$G](t){let r=[];for(let n of this[gn].values())r.push(n.destroy(t));this[gn].clear(),await Promise.all(r)}};NQ.exports=oh});var ch=v((sie,qQ)=>{"use strict";var{kProxy:ih,kClose:UQ,kDestroy:LQ,kDispatch:RQ,kInterceptors:rY}=ke(),{URL:fo}=x("node:url"),nY=gi(),_Q=hi(),PQ=Xo(),{InvalidArgumentError:mi,RequestAbortedError:oY,SecureProxyConnectionError:iY}=ae(),DQ=Ys(),OQ=pi(),Yc=Symbol("proxy agent"),Vc=Symbol("proxy client"),mn=Symbol("proxy headers"),sh=Symbol("request tls settings"),FQ=Symbol("proxy tls settings"),MQ=Symbol("connect endpoint function"),TQ=Symbol("tunnel proxy");function sY(e){return e==="https:"?443:80}function aY(e,t){return new _Q(e,t)}var AY=()=>{};function cY(e,t){return t.connections===1?new OQ(e,t):new _Q(e,t)}var ah=class extends PQ{#e;constructor(t,{headers:r={},connect:n,factory:o}){if(super(),!t)throw new mi("Proxy URL is mandatory");this[mn]=r,o?this.#e=o(t,{connect:n}):this.#e=new OQ(t,{connect:n})}[RQ](t,r){let n=r.onHeaders;r.onHeaders=function(a,A,c){if(a===407){typeof r.onError=="function"&&r.onError(new mi("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 fo(o);s.host=a}return t.headers={...this[mn],...s},this.#e[RQ](t,r)}async[UQ](){return this.#e.close()}async[LQ](t){return this.#e.destroy(t)}},Ah=class extends PQ{constructor(t){if(super(),!t||typeof t=="object"&&!(t instanceof fo)&&!t.uri)throw new mi("Proxy uri is mandatory");let{clientFactory:r=aY}=t;if(typeof r!="function")throw new mi("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[ih]={uri:i,protocol:A},this[rY]=t.interceptors?.ProxyAgent&&Array.isArray(t.interceptors.ProxyAgent)?t.interceptors.ProxyAgent:[],this[sh]=t.requestTls,this[FQ]=t.proxyTls,this[mn]=t.headers||{},this[TQ]=n,t.auth&&t.token)throw new mi("opts.auth cannot be used in combination with opts.token");t.auth?this[mn]["proxy-authorization"]=`Basic ${t.auth}`:t.token?this[mn]["proxy-authorization"]=t.token:c&&l&&(this[mn]["proxy-authorization"]=`Basic ${Buffer.from(`${decodeURIComponent(c)}:${decodeURIComponent(l)}`).toString("base64")}`);let d=DQ({...t.proxyTls});this[MQ]=DQ({...t.requestTls});let f=t.factory||cY,p=(h,g)=>{let{protocol:m}=new fo(h);return!this[TQ]&&m==="http:"&&this[ih].protocol==="http:"?new ah(this[ih].uri,{headers:this[mn],connect:d,factory:f}):f(h,g)};this[Vc]=r(o,{connect:d}),this[Yc]=new nY({...t,factory:p,connect:async(h,g)=>{let m=h.host;h.port||(m+=`:${sY(h.protocol)}`);try{let{socket:C,statusCode:E}=await this[Vc].connect({origin:s,port:a,path:m,signal:h.signal,headers:{...this[mn],host:h.host},servername:this[FQ]?.servername||u});if(E!==200&&(C.on("error",AY).destroy(),g(new oY(`Proxy response (${E}) !== 200 when HTTP Tunneling`))),h.protocol!=="https:"){g(null,C);return}let I;this[sh]?I=this[sh].servername:I=h.servername,this[MQ]({...h,servername:I,httpSocket:C},g)}catch(C){C.code==="ERR_TLS_CERT_ALTNAME_INVALID"?g(new iY(C)):g(C)}}})}dispatch(t,r){let n=lY(t.headers);if(uY(n),n&&!("host"in n)&&!("Host"in n)){let{host:o}=new fo(t.origin);n.host=o}return this[Yc].dispatch({...t,headers:n},r)}#e(t){return typeof t=="string"?new fo(t):t instanceof fo?t:new fo(t.uri)}async[UQ](){await this[Yc].close(),await this[Vc].close()}async[LQ](){await this[Yc].destroy(),await this[Vc].destroy()}};function lY(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 uY(e){if(e&&Object.keys(e).find(r=>r.toLowerCase()==="proxy-authorization"))throw new mi("Proxy-Authorization should be sent in ProxyAgent constructor")}qQ.exports=Ah});var JQ=v((aie,$Q)=>{"use strict";var dY=Xo(),{kClose:fY,kDestroy:pY,kClosed:HQ,kDestroyed:GQ,kDispatch:hY,kNoProxyAgent:fa,kHttpProxyAgent:En,kHttpsProxyAgent:po}=ke(),YQ=ch(),gY=gi(),mY={"http:":80,"https:":443},VQ=!1,lh=class extends dY{#e=null;#t=null;#r=null;constructor(t={}){super(),this.#r=t,VQ||(VQ=!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[fa]=new gY(i);let s=r??process.env.http_proxy??process.env.HTTP_PROXY;s?this[En]=new YQ({...i,uri:s}):this[En]=this[fa];let a=n??process.env.https_proxy??process.env.HTTPS_PROXY;a?this[po]=new YQ({...i,uri:a}):this[po]=this[En],this.#n()}[hY](t,r){let n=new URL(t.origin);return this.#i(n).dispatch(t,r)}async[fY](){await this[fa].close(),this[En][HQ]||await this[En].close(),this[po][HQ]||await this[po].close()}async[pY](t){await this[fa].destroy(t),this[En][GQ]||await this[En].destroy(t),this[po][GQ]||await this[po].destroy(t)}#i(t){let{protocol:r,host:n,port:o}=t;return n=n.replace(/:\d*$/,"").toLowerCase(),o=Number.parseInt(o,10)||mY[r]||0,this.#o(n,o)?r==="https:"?this[po]:this[En]:this[fa]}#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??""}};$Q.exports=lh});var $c=v((Aie,XQ)=>{"use strict";var Ei=x("node:assert"),{kRetryHandlerDefaultRetry:WQ}=ke(),{RequestRetryError:Ii}=ae(),{isDisturbed:zQ,parseHeaders:EY,parseRangeHeader:jQ,wrapRequestBody:IY}=ee();function CY(e){let t=Date.now();return new Date(e).getTime()-t}function KQ(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 Ii("Content-Length mismatch",r,{headers:e,data:{count:n}}):null}var uh=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:f}=n??{};this.dispatch=r.dispatch,this.handler=r.handler,this.opts={...o,body:IY(t.body)},this.abort=null,this.aborted=!1,this.retryOpts={retry:i??e[WQ],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:f??[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(p=>{this.aborted=!0,this.abort?this.abort(p):this.reason=p})}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[WQ](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:f,statusCodes:p,errorCodes:h,methods:g}=c,{counter:m}=r;if(s&&s!=="UND_ERR_REQ_RETRY"&&!h.includes(s)){o(t);return}if(Array.isArray(g)&&!g.includes(A)){o(t);return}if(i!=null&&Array.isArray(p)&&!p.includes(i)){o(t);return}if(m>l){o(t);return}let C=a?.["retry-after"];C&&(C=Number(C),C=Number.isNaN(C)?CY(C):C*1e3);let E=C>0?Math.min(C,d):Math.min(u*f**(m-1),d);setTimeout(()=>o(null),E)}onHeaders(t,r,n,o){let i=EY(r);if(this.retryCount+=1,t>=300)return this.retryOpts.statusCodes.includes(t)===!1?this.handler.onHeaders(t,r,n,o):(this.abort(new Ii("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 Ii("server does not support the range header and the payload was partially consumed",t,{headers:i,data:{count:this.retryCount}})),!1;let a=jQ(i["content-range"]);if(!a)return this.abort(new Ii("Content-Range mismatch",t,{headers:i,data:{count:this.retryCount}})),!1;if(this.etag!=null&&this.etag!==i.etag)return this.abort(new Ii("ETag mismatch",t,{headers:i,data:{count:this.retryCount}})),!1;let A=KQ(i,a,t,this.retryCount);if(A!=null)return this.abort(A),!1;let{start:c,size:l,end:u=l-1}=a;return Ei(this.start===c,"content-range mismatch"),Ei(this.end==null||this.end===u,"content-range mismatch"),this.resume=n,!0}if(this.end==null){if(t===206){let a=jQ(i["content-range"]);if(a==null)return this.handler.onHeaders(t,r,n,o);let A=KQ(i,a,t,this.retryCount);if(A!=null)return this.abort(A),!1;let{start:c,size:l,end:u=l-1}=a;Ei(c!=null&&Number.isFinite(c),"content-range mismatch"),Ei(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 Ei(Number.isFinite(this.start)),Ei(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 Ii("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||zQ(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||zQ(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)}}}};XQ.exports=uh});var ew=v((cie,ZQ)=>{"use strict";var BY=Hs(),yY=$c(),dh=class extends BY{#e=null;#t=null;constructor(t,r={}){super(r),this.#e=t,this.#t=r}dispatch(t,r){let n=new yY({...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()}};ZQ.exports=dh});var Eh=v((lie,cw)=>{"use strict";var iw=x("node:assert"),{Readable:QY}=x("node:stream"),{RequestAbortedError:sw,NotSupportedError:wY,InvalidArgumentError:bY,AbortError:fh}=ae(),aw=ee(),{ReadableStreamFrom:kY}=ee(),Qt=Symbol("kConsume"),pa=Symbol("kReading"),In=Symbol("kBody"),tw=Symbol("kAbort"),Aw=Symbol("kContentType"),rw=Symbol("kContentLength"),SY=()=>{},ph=class extends QY{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[tw]=r,this[Qt]=null,this[In]=null,this[Aw]=n,this[rw]=o,this[pa]=!1}destroy(t){return!t&&!this._readableState.endEmitted&&(t=new sw),t&&this[tw](),super.destroy(t)}_destroy(t,r){this[pa]?r(t):setImmediate(()=>{r(t)})}on(t,...r){return(t==="data"||t==="readable")&&(this[pa]=!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[pa]=this.listenerCount("data")>0||this.listenerCount("readable")>0),n}removeListener(t,...r){return this.off(t,...r)}push(t){return this[Qt]&&t!==null?(gh(this[Qt],t),this[pa]?super.push(t):!0):super.push(t)}async text(){return ha(this,"text")}async json(){return ha(this,"json")}async blob(){return ha(this,"blob")}async bytes(){return ha(this,"bytes")}async arrayBuffer(){return ha(this,"arrayBuffer")}async formData(){throw new wY}get bodyUsed(){return aw.isDisturbed(this)}get body(){return this[In]||(this[In]=kY(this),this[Qt]&&(this[In].getReader(),iw(this[In].locked))),this[In]}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 bY("signal must be an AbortSignal");return n?.throwIfAborted(),this._readableState.closeEmitted?null:await new Promise((o,i)=>{this[rw]>r&&this.destroy(new fh);let s=()=>{this.destroy(n.reason??new fh)};n?.addEventListener("abort",s),this.on("close",function(){n?.removeEventListener("abort",s),n?.aborted?i(n.reason??new fh):o(null)}).on("error",SY).on("data",function(a){r-=a.length,r<=0&&this.destroy()}).resume()})}};function xY(e){return e[In]&&e[In].locked===!0||e[Qt]}function vY(e){return aw.isDisturbed(e)||xY(e)}async function ha(e,t){return iw(!e[Qt]),new Promise((r,n)=>{if(vY(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[Qt]={type:t,stream:e,resolve:r,reject:n,length:0,body:[]},e.on("error",function(o){mh(this[Qt],o)}).on("close",function(){this[Qt].body!==null&&mh(this[Qt],new sw)}),NY(e[Qt])})})}function NY(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++)gh(e,t.buffer[o])}else for(let r of t.buffer)gh(e,r);for(t.endEmitted?ow(this[Qt]):e.stream.on("end",function(){ow(this[Qt])}),e.stream.resume();e.stream.read()!=null;);}function hh(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 nw(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 ow(e){let{type:t,body:r,resolve:n,stream:o,length:i}=e;try{t==="text"?n(hh(r,i)):t==="json"?n(JSON.parse(hh(r,i))):t==="arrayBuffer"?n(nw(r,i).buffer):t==="blob"?n(new Blob(r,{type:o[Aw]})):t==="bytes"&&n(nw(r,i)),mh(e)}catch(s){o.destroy(s)}}function gh(e,t){e.length+=t.length,e.body.push(t)}function mh(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)}cw.exports={Readable:ph,chunksDecode:hh}});var Ih=v((uie,pw)=>{var RY=x("node:assert"),{ResponseStatusCodeError:lw}=ae(),{chunksDecode:uw}=Eh(),DY=128*1024;async function FY({callback:e,body:t,contentType:r,statusCode:n,statusMessage:o,headers:i}){RY(t);let s=[],a=0;try{for await(let u of t)if(s.push(u),a+=u.length,a>DY){s=[],a=0;break}}catch{s=[],a=0}let A=`Response status code ${n}${o?`: ${o}`:""}`;if(n===204||!r||!a){queueMicrotask(()=>e(new lw(A,n,i)));return}let c=Error.stackTraceLimit;Error.stackTraceLimit=0;let l;try{dw(r)?l=JSON.parse(uw(s,a)):fw(r)&&(l=uw(s,a))}catch{}finally{Error.stackTraceLimit=c}queueMicrotask(()=>e(new lw(A,n,i,l)))}var dw=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",fw=e=>e.length>4&&e[4]==="/"&&e[0]==="t"&&e[1]==="e"&&e[2]==="x"&&e[3]==="t";pw.exports={getResolveErrorBodyCallback:FY,isContentTypeApplicationJson:dw,isContentTypeText:fw}});var mw=v((die,Ch)=>{"use strict";var MY=x("node:assert"),{Readable:TY}=Eh(),{InvalidArgumentError:Ci,RequestAbortedError:hw}=ae(),wt=ee(),{getResolveErrorBodyCallback:UY}=Ih(),{AsyncResource:LY}=x("node:async_hooks"),Jc=class extends LY{constructor(t,r){if(!t||typeof t!="object")throw new Ci("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 Ci("invalid callback");if(l&&(typeof l!="number"||l<0))throw new Ci("invalid highWaterMark");if(n&&typeof n.on!="function"&&typeof n.addEventListener!="function")throw new Ci("signal must be an EventEmitter or EventTarget");if(o==="CONNECT")throw new Ci("invalid method");if(a&&typeof a!="function")throw new Ci("invalid onInfo callback");super("UNDICI_REQUEST")}catch(u){throw wt.isStream(s)&&wt.destroy(s.on("error",wt.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,wt.isStream(s)&&s.on("error",u=>{this.onError(u)}),this.signal&&(this.signal.aborted?this.reason=this.signal.reason??new hw:this.removeAbortListener=wt.addAbortListener(this.signal,()=>{this.reason=this.signal.reason??new hw,this.res?wt.destroy(this.res.on("error",wt.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}MY(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"?wt.parseRawHeaders(r):wt.parseHeaders(r);if(t<200){this.onInfo&&this.onInfo({statusCode:t,headers:u});return}let d=c==="raw"?wt.parseHeaders(r):u,f=d["content-type"],p=d["content-length"],h=new TY({resume:n,abort:a,contentType:f,contentLength:this.method!=="HEAD"&&p?Number(p):null,highWaterMark:l});this.removeAbortListener&&h.on("close",this.removeAbortListener),this.callback=null,this.res=h,i!==null&&(this.throwOnError&&t>=400?this.runInAsyncScope(UY,null,{callback:i,body:h,contentType:f,statusCode:t,statusMessage:o,headers:u}):this.runInAsyncScope(i,null,null,{statusCode:t,headers:u,trailers:this.trailers,opaque:s,body:h,context:A}))}onData(t){return this.res.push(t)}onComplete(t){wt.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(()=>{wt.destroy(r,t)})),o&&(this.body=null,wt.destroy(o,t)),this.removeAbortListener&&(r?.off("close",this.removeAbortListener),this.removeAbortListener(),this.removeAbortListener=null)}};function gw(e,t){if(t===void 0)return new Promise((r,n)=>{gw.call(this,e,(o,i)=>o?n(o):r(i))});try{this.dispatch(e,new Jc(e,t))}catch(r){if(typeof t!="function")throw r;let n=e?.opaque;queueMicrotask(()=>t(r,{opaque:n}))}}Ch.exports=gw;Ch.exports.RequestHandler=Jc});var ga=v((fie,Cw)=>{var{addAbortListener:_Y}=ee(),{RequestAbortedError:PY}=ae(),Bi=Symbol("kListener"),vr=Symbol("kSignal");function Ew(e){e.abort?e.abort(e[vr]?.reason):e.reason=e[vr]?.reason??new PY,Iw(e)}function OY(e,t){if(e.reason=null,e[vr]=null,e[Bi]=null,!!t){if(t.aborted){Ew(e);return}e[vr]=t,e[Bi]=()=>{Ew(e)},_Y(e[vr],e[Bi])}}function Iw(e){e[vr]&&("removeEventListener"in e[vr]?e[vr].removeEventListener("abort",e[Bi]):e[vr].removeListener("abort",e[Bi]),e[vr]=null,e[Bi]=null)}Cw.exports={addSignal:OY,removeSignal:Iw}});var ww=v((pie,Qw)=>{"use strict";var qY=x("node:assert"),{finished:HY,PassThrough:GY}=x("node:stream"),{InvalidArgumentError:yi,InvalidReturnValueError:YY}=ae(),nr=ee(),{getResolveErrorBodyCallback:VY}=Ih(),{AsyncResource:$Y}=x("node:async_hooks"),{addSignal:JY,removeSignal:Bw}=ga(),Bh=class extends $Y{constructor(t,r,n){if(!t||typeof t!="object")throw new yi("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 yi("invalid callback");if(typeof r!="function")throw new yi("invalid factory");if(o&&typeof o.on!="function"&&typeof o.addEventListener!="function")throw new yi("signal must be an EventEmitter or EventTarget");if(i==="CONNECT")throw new yi("invalid method");if(A&&typeof A!="function")throw new yi("invalid onInfo callback");super("UNDICI_STREAM")}catch(u){throw nr.isStream(a)&&nr.destroy(a.on("error",nr.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,nr.isStream(a)&&a.on("error",u=>{this.onError(u)}),JY(this,o)}onConnect(t,r){if(this.reason){t(this.reason);return}qY(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"?nr.parseRawHeaders(r):nr.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 p=(c==="raw"?nr.parseHeaders(r):l)["content-type"];u=new GY,this.callback=null,this.runInAsyncScope(VY,null,{callback:A,body:u,contentType:p,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 YY("expected Writable");HY(u,{readable:!1},f=>{let{callback:p,res:h,opaque:g,trailers:m,abort:C}=this;this.res=null,(f||!h.readable)&&nr.destroy(h,f),this.callback=null,this.runInAsyncScope(p,null,f||null,{opaque:g,trailers:m}),f&&C()})}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;Bw(this),r&&(this.trailers=nr.parseHeaders(t),r.end())}onError(t){let{res:r,callback:n,opaque:o,body:i}=this;Bw(this),this.factory=null,r?(this.res=null,nr.destroy(r,t)):n&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(n,null,t,{opaque:o})})),i&&(this.body=null,nr.destroy(i,t))}};function yw(e,t,r){if(r===void 0)return new Promise((n,o)=>{yw.call(this,e,t,(i,s)=>i?o(i):n(s))});try{this.dispatch(e,new Bh(e,t,r))}catch(n){if(typeof r!="function")throw n;let o=e?.opaque;queueMicrotask(()=>r(n,{opaque:o}))}}Qw.exports=yw});var xw=v((hie,Sw)=>{"use strict";var{Readable:kw,Duplex:WY,PassThrough:zY}=x("node:stream"),{InvalidArgumentError:ma,InvalidReturnValueError:jY,RequestAbortedError:yh}=ae(),qt=ee(),{AsyncResource:KY}=x("node:async_hooks"),{addSignal:XY,removeSignal:ZY}=ga(),bw=x("node:assert"),Qi=Symbol("resume"),Qh=class extends kw{constructor(){super({autoDestroy:!0}),this[Qi]=null}_read(){let{[Qi]:t}=this;t&&(this[Qi]=null,t())}_destroy(t,r){this._read(),r(t)}},wh=class extends kw{constructor(t){super({autoDestroy:!0}),this[Qi]=t}_read(){this[Qi]()}_destroy(t,r){!t&&!this._readableState.endEmitted&&(t=new yh),r(t)}},bh=class extends KY{constructor(t,r){if(!t||typeof t!="object")throw new ma("invalid opts");if(typeof r!="function")throw new ma("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 ma("signal must be an EventEmitter or EventTarget");if(o==="CONNECT")throw new ma("invalid method");if(s&&typeof s!="function")throw new ma("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 Qh().on("error",qt.nop),this.ret=new WY({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[Qi]=l},destroy:(A,c)=>{let{body:l,req:u,res:d,ret:f,abort:p}=this;!A&&!f._readableState.endEmitted&&(A=new yh),p&&A&&p(),qt.destroy(l,A),qt.destroy(u,A),qt.destroy(d,A),ZY(this),c(A)}}).on("prefinish",()=>{let{req:A}=this;A.push(null)}),this.res=null,XY(this,n)}onConnect(t,r){let{ret:n,res:o}=this;if(this.reason){t(this.reason);return}bw(!o,"pipeline cannot be retried"),bw(!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"?qt.parseRawHeaders(r):qt.parseHeaders(r);this.onInfo({statusCode:t,headers:A})}return}this.res=new wh(n);let a;try{this.handler=null;let A=this.responseHeaders==="raw"?qt.parseRawHeaders(r):qt.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",qt.nop),A}if(!a||typeof a.on!="function")throw new jY("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;qt.destroy(c,A)}).on("end",()=>{let{ret:A}=this;A.push(null)}).on("close",()=>{let{ret:A}=this;A._readableState.ended||qt.destroy(A,new yh)}),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,qt.destroy(r,t)}};function eV(e,t){try{let r=new bh(e,t);return this.dispatch({...e,body:r.req},r),r.ret}catch(r){return new zY().destroy(r)}}Sw.exports=eV});var Mw=v((gie,Fw)=>{"use strict";var{InvalidArgumentError:kh,SocketError:tV}=ae(),{AsyncResource:rV}=x("node:async_hooks"),vw=ee(),{addSignal:nV,removeSignal:Nw}=ga(),Rw=x("node:assert"),Sh=class extends rV{constructor(t,r){if(!t||typeof t!="object")throw new kh("invalid opts");if(typeof r!="function")throw new kh("invalid callback");let{signal:n,opaque:o,responseHeaders:i}=t;if(n&&typeof n.on!="function"&&typeof n.addEventListener!="function")throw new kh("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,nV(this,n)}onConnect(t,r){if(this.reason){t(this.reason);return}Rw(this.callback),this.abort=t,this.context=null}onHeaders(){throw new tV("bad upgrade",null)}onUpgrade(t,r,n){Rw(t===101);let{callback:o,opaque:i,context:s}=this;Nw(this),this.callback=null;let a=this.responseHeaders==="raw"?vw.parseRawHeaders(r):vw.parseHeaders(r);this.runInAsyncScope(o,null,null,{headers:a,socket:n,opaque:i,context:s})}onError(t){let{callback:r,opaque:n}=this;Nw(this),r&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(r,null,t,{opaque:n})}))}};function Dw(e,t){if(t===void 0)return new Promise((r,n)=>{Dw.call(this,e,(o,i)=>o?n(o):r(i))});try{let r=new Sh(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}))}}Fw.exports=Dw});var Pw=v((mie,_w)=>{"use strict";var oV=x("node:assert"),{AsyncResource:iV}=x("node:async_hooks"),{InvalidArgumentError:xh,SocketError:sV}=ae(),Tw=ee(),{addSignal:aV,removeSignal:Uw}=ga(),vh=class extends iV{constructor(t,r){if(!t||typeof t!="object")throw new xh("invalid opts");if(typeof r!="function")throw new xh("invalid callback");let{signal:n,opaque:o,responseHeaders:i}=t;if(n&&typeof n.on!="function"&&typeof n.addEventListener!="function")throw new xh("signal must be an EventEmitter or EventTarget");super("UNDICI_CONNECT"),this.opaque=o||null,this.responseHeaders=i||null,this.callback=r,this.abort=null,aV(this,n)}onConnect(t,r){if(this.reason){t(this.reason);return}oV(this.callback),this.abort=t,this.context=r}onHeaders(){throw new sV("bad connect",null)}onUpgrade(t,r,n){let{callback:o,opaque:i,context:s}=this;Uw(this),this.callback=null;let a=r;a!=null&&(a=this.responseHeaders==="raw"?Tw.parseRawHeaders(r):Tw.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;Uw(this),r&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(r,null,t,{opaque:n})}))}};function Lw(e,t){if(t===void 0)return new Promise((r,n)=>{Lw.call(this,e,(o,i)=>o?n(o):r(i))});try{let r=new vh(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}))}}_w.exports=Lw});var Ow=v((Eie,wi)=>{"use strict";wi.exports.request=mw();wi.exports.stream=ww();wi.exports.pipeline=xw();wi.exports.upgrade=Mw();wi.exports.connect=Pw()});var Rh=v((Iie,Hw)=>{"use strict";var{UndiciError:AV}=ae(),qw=Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED"),Nh=class e extends AV{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[qw]===!0}[qw]=!0};Hw.exports={MockNotMatchedError:Nh}});var bi=v((Cie,Gw)=>{"use strict";Gw.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 Ea=v((Bie,eb)=>{"use strict";var{MockNotMatchedError:ho}=Rh(),{kDispatches:Wc,kMockAgent:cV,kOriginalDispatch:lV,kOrigin:uV,kGetNetConnect:dV}=bi(),{buildURL:fV}=ee(),{STATUS_CODES:pV}=x("node:http"),{types:{isPromise:hV}}=x("node:util");function Kr(e,t){return typeof e=="string"?e===t:e instanceof RegExp?e.test(t):typeof e=="function"?e(t)===!0:!1}function Vw(e){return Object.fromEntries(Object.entries(e).map(([t,r])=>[t.toLocaleLowerCase(),r]))}function $w(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):Vw(e)[t.toLocaleLowerCase()]}function Mh(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 Jw(e,t){if(typeof e.headers=="function")return Array.isArray(t)&&(t=Mh(t)),e.headers(t?Vw(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=$w(t,r);if(!Kr(n,o))return!1}return!0}function Yw(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 gV(e,{path:t,method:r,body:n,headers:o}){let i=Kr(e.path,t),s=Kr(e.method,r),a=typeof e.body<"u"?Kr(e.body,n):!0,A=Jw(e,o);return i&&s&&a&&A}function Ww(e){return Buffer.isBuffer(e)||e instanceof Uint8Array||e instanceof ArrayBuffer?e:typeof e=="object"?JSON.stringify(e):e.toString()}function zw(e,t){let r=t.query?fV(t.path,t.query):t.path,n=typeof r=="string"?Yw(r):r,o=e.filter(({consumed:i})=>!i).filter(({path:i})=>Kr(Yw(i),n));if(o.length===0)throw new ho(`Mock dispatch not matched for path '${n}'`);if(o=o.filter(({method:i})=>Kr(i,t.method)),o.length===0)throw new ho(`Mock dispatch not matched for method '${t.method}' on path '${n}'`);if(o=o.filter(({body:i})=>typeof i<"u"?Kr(i,t.body):!0),o.length===0)throw new ho(`Mock dispatch not matched for body '${t.body}' on path '${n}'`);if(o=o.filter(i=>Jw(i,t.headers)),o.length===0){let i=typeof t.headers=="object"?JSON.stringify(t.headers):t.headers;throw new ho(`Mock dispatch not matched for headers '${i}' on path '${n}'`)}return o[0]}function mV(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 Dh(e,t){let r=e.findIndex(n=>n.consumed?gV(n,t):!1);r!==-1&&e.splice(r,1)}function jw(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 Fh(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 Kw(e){return pV[e]||"unknown"}async function EV(e){let t=[];for await(let r of e)t.push(r);return Buffer.concat(t).toString("utf8")}function Xw(e,t){let r=jw(e),n=zw(this[Wc],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 Dh(this[Wc],r),t.onError(A),!0;typeof c=="number"&&c>0?setTimeout(()=>{f(this[Wc])},c):f(this[Wc]);function f(h,g=i){let m=Array.isArray(e.headers)?Mh(e.headers):e.headers,C=typeof g=="function"?g({...e,headers:m}):g;if(hV(C)){C.then(N=>f(h,N));return}let E=Ww(C),I=Fh(s),Q=Fh(a);t.onConnect?.(N=>t.onError(N),null),t.onHeaders?.(o,I,p,Kw(o)),t.onData?.(Buffer.from(E)),t.onComplete?.(Q),Dh(h,r)}function p(){}return!0}function IV(){let e=this[cV],t=this[uV],r=this[lV];return function(o,i){if(e.isMockActive)try{Xw.call(this,o,i)}catch(s){if(s instanceof ho){let a=e[dV]();if(a===!1)throw new ho(`${s.message}: subsequent request to origin ${t} was not allowed (net.connect disabled)`);if(Zw(a,t))r.call(this,o,i);else throw new ho(`${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 Zw(e,t){let r=new URL(t);return e===!0?!0:!!(Array.isArray(e)&&e.some(n=>Kr(n,r.host)))}function CV(e){if(e){let{agent:t,...r}=e;return r}}eb.exports={getResponseData:Ww,getMockDispatch:zw,addMockDispatch:mV,deleteMockDispatch:Dh,buildKey:jw,generateKeyValues:Fh,matchValue:Kr,getResponse:EV,getStatusText:Kw,mockDispatch:Xw,buildMockDispatch:IV,checkNetConnect:Zw,buildMockOptions:CV,getHeaderByName:$w,buildHeadersFromArray:Mh}});var qh=v((yie,Oh)=>{"use strict";var{getResponseData:BV,buildKey:yV,addMockDispatch:Th}=Ea(),{kDispatches:zc,kDispatchKey:jc,kDefaultHeaders:Uh,kDefaultTrailers:Lh,kContentLength:_h,kMockDispatch:Kc}=bi(),{InvalidArgumentError:Nr}=ae(),{buildURL:QV}=ee(),ki=class{constructor(t){this[Kc]=t}delay(t){if(typeof t!="number"||!Number.isInteger(t)||t<=0)throw new Nr("waitInMs must be a valid integer > 0");return this[Kc].delay=t,this}persist(){return this[Kc].persist=!0,this}times(t){if(typeof t!="number"||!Number.isInteger(t)||t<=0)throw new Nr("repeatTimes must be a valid integer > 0");return this[Kc].times=t,this}},Ph=class{constructor(t,r){if(typeof t!="object")throw new Nr("opts must be an object");if(typeof t.path>"u")throw new Nr("opts.path must be defined");if(typeof t.method>"u"&&(t.method="GET"),typeof t.path=="string")if(t.query)t.path=QV(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[jc]=yV(t),this[zc]=r,this[Uh]={},this[Lh]={},this[_h]=!1}createMockScopeDispatchData({statusCode:t,data:r,responseOptions:n}){let o=BV(r),i=this[_h]?{"content-length":o.length}:{},s={...this[Uh],...i,...n.headers},a={...this[Lh],...n.trailers};return{statusCode:t,data:r,headers:s,trailers:a}}validateReplyParameters(t){if(typeof t.statusCode>"u")throw new Nr("statusCode must be defined");if(typeof t.responseOptions!="object"||t.responseOptions===null)throw new Nr("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 Nr("reply options callback must return an object");let c={data:"",responseOptions:{},...A};return this.validateReplyParameters(c),{...this.createMockScopeDispatchData(c)}},s=Th(this[zc],this[jc],i);return new ki(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=Th(this[zc],this[jc],n);return new ki(o)}replyWithError(t){if(typeof t>"u")throw new Nr("error must be defined");let r=Th(this[zc],this[jc],{error:t});return new ki(r)}defaultReplyHeaders(t){if(typeof t>"u")throw new Nr("headers must be defined");return this[Uh]=t,this}defaultReplyTrailers(t){if(typeof t>"u")throw new Nr("trailers must be defined");return this[Lh]=t,this}replyContentLength(){return this[_h]=!0,this}};Oh.exports.MockInterceptor=Ph;Oh.exports.MockScope=ki});var Yh=v((Qie,ab)=>{"use strict";var{promisify:wV}=x("node:util"),bV=pi(),{buildMockDispatch:kV}=Ea(),{kDispatches:tb,kMockAgent:rb,kClose:nb,kOriginalClose:ob,kOrigin:ib,kOriginalDispatch:SV,kConnected:Hh}=bi(),{MockInterceptor:xV}=qh(),sb=ke(),{InvalidArgumentError:vV}=ae(),Gh=class extends bV{constructor(t,r){if(super(t,r),!r||!r.agent||typeof r.agent.dispatch!="function")throw new vV("Argument opts.agent must implement Agent");this[rb]=r.agent,this[ib]=t,this[tb]=[],this[Hh]=1,this[SV]=this.dispatch,this[ob]=this.close.bind(this),this.dispatch=kV.call(this),this.close=this[nb]}get[sb.kConnected](){return this[Hh]}intercept(t){return new xV(t,this[tb])}async[nb](){await wV(this[ob])(),this[Hh]=0,this[rb][sb.kClients].delete(this[ib])}};ab.exports=Gh});var Jh=v((wie,pb)=>{"use strict";var{promisify:NV}=x("node:util"),RV=hi(),{buildMockDispatch:DV}=Ea(),{kDispatches:Ab,kMockAgent:cb,kClose:lb,kOriginalClose:ub,kOrigin:db,kOriginalDispatch:FV,kConnected:Vh}=bi(),{MockInterceptor:MV}=qh(),fb=ke(),{InvalidArgumentError:TV}=ae(),$h=class extends RV{constructor(t,r){if(super(t,r),!r||!r.agent||typeof r.agent.dispatch!="function")throw new TV("Argument opts.agent must implement Agent");this[cb]=r.agent,this[db]=t,this[Ab]=[],this[Vh]=1,this[FV]=this.dispatch,this[ub]=this.close.bind(this),this.dispatch=DV.call(this),this.close=this[lb]}get[fb.kConnected](){return this[Vh]}intercept(t){return new MV(t,this[Ab])}async[lb](){await NV(this[ub])(),this[Vh]=0,this[cb][fb.kClients].delete(this[db])}};pb.exports=$h});var gb=v((kie,hb)=>{"use strict";var UV={pronoun:"it",is:"is",was:"was",this:"this"},LV={pronoun:"they",is:"are",was:"were",this:"these"};hb.exports=class{constructor(t,r){this.singular=t,this.plural=r}pluralize(t){let r=t===1,n=r?UV:LV,o=r?this.singular:this.plural;return{...n,count:t,noun:o}}}});var Eb=v((xie,mb)=>{"use strict";var{Transform:_V}=x("node:stream"),{Console:PV}=x("node:console"),OV=process.versions.icu?"\u2705":"Y ",qV=process.versions.icu?"\u274C":"N ";mb.exports=class{constructor({disableColors:t}={}){this.transform=new _V({transform(r,n,o){o(null,r)}}),this.logger=new PV({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?OV:qV,Invocations:A,Remaining:s?1/0:a-A}));return this.logger.table(r),this.transform.read().toString()}}});var yb=v((vie,Bb)=>{"use strict";var{kClients:go}=ke(),HV=gi(),{kAgent:Wh,kMockAgentSet:Xc,kMockAgentGet:Ib,kDispatches:zh,kIsMockActive:Zc,kNetConnect:mo,kGetNetConnect:GV,kOptions:el,kFactory:tl}=bi(),YV=Yh(),VV=Jh(),{matchValue:$V,buildMockOptions:JV}=Ea(),{InvalidArgumentError:Cb,UndiciError:WV}=ae(),zV=Hs(),jV=gb(),KV=Eb(),jh=class extends zV{constructor(t){if(super(t),this[mo]=!0,this[Zc]=!0,t?.agent&&typeof t.agent.dispatch!="function")throw new Cb("Argument opts.agent must implement Agent");let r=t?.agent?t.agent:new HV(t);this[Wh]=r,this[go]=r[go],this[el]=JV(t)}get(t){let r=this[Ib](t);return r||(r=this[tl](t),this[Xc](t,r)),r}dispatch(t,r){return this.get(t.origin),this[Wh].dispatch(t,r)}async close(){await this[Wh].close(),this[go].clear()}deactivate(){this[Zc]=!1}activate(){this[Zc]=!0}enableNetConnect(t){if(typeof t=="string"||typeof t=="function"||t instanceof RegExp)Array.isArray(this[mo])?this[mo].push(t):this[mo]=[t];else if(typeof t>"u")this[mo]=!0;else throw new Cb("Unsupported matcher. Must be one of String|Function|RegExp.")}disableNetConnect(){this[mo]=!1}get isMockActive(){return this[Zc]}[Xc](t,r){this[go].set(t,r)}[tl](t){let r=Object.assign({agent:this},this[el]);return this[el]&&this[el].connections===1?new YV(t,r):new VV(t,r)}[Ib](t){let r=this[go].get(t);if(r)return r;if(typeof t!="string"){let n=this[tl]("http://localhost:9999");return this[Xc](t,n),n}for(let[n,o]of Array.from(this[go]))if(o&&typeof n!="string"&&$V(n,t)){let i=this[tl](t);return this[Xc](t,i),i[zh]=o[zh],i}}[GV](){return this[mo]}pendingInterceptors(){let t=this[go];return Array.from(t.entries()).flatMap(([r,n])=>n[zh].map(o=>({...o,origin:r}))).filter(({pending:r})=>r)}assertNoPendingInterceptors({pendingInterceptorsFormatter:t=new KV}={}){let r=this.pendingInterceptors();if(r.length===0)return;let n=new jV("interceptor","interceptors").pluralize(r.length);throw new WV(`
|
|
41
|
+
${n.count} ${n.noun} ${n.is} pending:
|
|
42
|
+
|
|
43
|
+
${t.format(r)}
|
|
44
|
+
`.trim())}};Bb.exports=jh});var rl=v((Nie,kb)=>{"use strict";var Qb=Symbol.for("undici.globalDispatcher.1"),{InvalidArgumentError:XV}=ae(),ZV=gi();bb()===void 0&&wb(new ZV);function wb(e){if(!e||typeof e.dispatch!="function")throw new XV("Argument agent must implement Agent");Object.defineProperty(globalThis,Qb,{value:e,writable:!0,enumerable:!1,configurable:!1})}function bb(){return globalThis[Qb]}kb.exports={setGlobalDispatcher:wb,getGlobalDispatcher:bb}});var nl=v((Die,Sb)=>{"use strict";Sb.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 vb=v((Fie,xb)=>{"use strict";var e$=Tc();xb.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 e$(r,s,o,i);return r(a,A)}}});var Rb=v((Mie,Nb)=>{"use strict";var t$=$c();Nb.exports=e=>t=>function(n,o){return t(n,new t$({...n,retryOptions:{...e,...n.retryOptions}},{handler:o,dispatch:t}))}});var Fb=v((Tie,Db)=>{"use strict";var r$=ee(),{InvalidArgumentError:n$,RequestAbortedError:o$}=ae(),i$=nl(),Kh=class extends i${#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 n$("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=r$.parseHeaders(r)["content-length"];if(s!=null&&s>this.#e)throw new o$(`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 s$({maxSize:e}={maxSize:1024*1024}){return t=>function(n,o){let{dumpMaxSize:i=e}=n,s=new Kh({maxSize:i},o);return t(n,s)}}Db.exports=s$});var Ub=v((Uie,Tb)=>{"use strict";var{isIP:a$}=x("node:net"),{lookup:A$}=x("node:dns"),c$=nl(),{InvalidArgumentError:Si,InformationalError:l$}=ae(),Mb=Math.pow(2,31)-1,Xh=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 l$("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){A$(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===Mb?(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===Mb?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 Zh(this,t,r)}},Zh=class extends c${#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}}};Tb.exports=e=>{if(e?.maxTTL!=null&&(typeof e?.maxTTL!="number"||e?.maxTTL<0))throw new Si("Invalid maxTTL. Must be a positive number");if(e?.maxItems!=null&&(typeof e?.maxItems!="number"||e?.maxItems<1))throw new Si("Invalid maxItems. Must be a positive number and greater than zero");if(e?.affinity!=null&&e?.affinity!==4&&e?.affinity!==6)throw new Si("Invalid affinity. Must be either 4 or 6");if(e?.dualStack!=null&&typeof e?.dualStack!="boolean")throw new Si("Invalid dualStack. Must be a boolean");if(e?.lookup!=null&&typeof e?.lookup!="function")throw new Si("Invalid lookup. Must be a function");if(e?.pick!=null&&typeof e?.pick!="function")throw new Si("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 Xh(n);return i=>function(a,A){let c=a.origin.constructor===URL?a.origin:new URL(a.origin);return a$(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 Eo=v((Lie,Gb)=>{"use strict";var{kConstruct:u$}=ke(),{kEnumerableProperty:xi}=ee(),{iteratorMixin:d$,isValidHeaderName:Ia,isValidHeaderValue:_b}=Bt(),{webidl:se}=$e(),eg=x("node:assert"),ol=x("node:util"),Pe=Symbol("headers map"),bt=Symbol("headers map sorted");function Lb(e){return e===10||e===13||e===9||e===32}function Pb(e){let t=0,r=e.length;for(;r>t&&Lb(e.charCodeAt(r-1));)--r;for(;r>t&&Lb(e.charCodeAt(t));)++t;return t===0&&r===e.length?e:e.substring(t,r)}function Ob(e,t){if(Array.isArray(t))for(let r=0;r<t.length;++r){let n=t[r];if(n.length!==2)throw se.errors.exception({header:"Headers constructor",message:`expected name/value pair to be length 2, found ${n.length}.`});tg(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)tg(e,r[n],t[r[n]])}else throw se.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence<sequence<ByteString>>","record<ByteString, ByteString>"]})}function tg(e,t,r){if(r=Pb(r),Ia(t)){if(!_b(r))throw se.errors.invalidArgument({prefix:"Headers.append",value:r,type:"header value"})}else throw se.errors.invalidArgument({prefix:"Headers.append",value:t,type:"header name"});if(Hb(e)==="immutable")throw new TypeError("immutable");return rg(e).append(t,r,!1)}function qb(e,t){return e[0]<t[0]?-1:1}var il=class e{cookies=null;constructor(t){t instanceof e?(this[Pe]=new Map(t[Pe]),this[bt]=t[bt],this.cookies=t.cookies===null?null:[...t.cookies]):(this[Pe]=new Map(t),this[bt]=null)}contains(t,r){return this[Pe].has(r?t:t.toLowerCase())}clear(){this[Pe].clear(),this[bt]=null,this.cookies=null}append(t,r,n){this[bt]=null;let o=n?t:t.toLowerCase(),i=this[Pe].get(o);if(i){let s=o==="cookie"?"; ":", ";this[Pe].set(o,{name:i.name,value:`${i.value}${s}${r}`})}else this[Pe].set(o,{name:t,value:r});o==="set-cookie"&&(this.cookies??=[]).push(r)}set(t,r,n){this[bt]=null;let o=n?t:t.toLowerCase();o==="set-cookie"&&(this.cookies=[r]),this[Pe].set(o,{name:t,value:r})}delete(t,r){this[bt]=null,r||(t=t.toLowerCase()),t==="set-cookie"&&(this.cookies=null),this[Pe].delete(t)}get(t,r){return this[Pe].get(r?t:t.toLowerCase())?.value??null}*[Symbol.iterator](){for(let{0:t,1:{value:r}}of this[Pe])yield[t,r]}get entries(){let t={};if(this[Pe].size!==0)for(let{name:r,value:n}of this[Pe].values())t[r]=n;return t}rawValues(){return this[Pe].values()}get entriesList(){let t=[];if(this[Pe].size!==0)for(let{0:r,1:{name:n,value:o}}of this[Pe])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[Pe].size,r=new Array(t);if(t<=32){if(t===0)return r;let n=this[Pe][Symbol.iterator](),o=n.next().value;r[0]=[o[0],o[1].value],eg(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],eg(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[Pe])r[n++]=[o,i],eg(i!==null);return r.sort(qb)}}},or=class e{#e;#t;constructor(t=void 0){se.util.markAsUncloneable(this),t!==u$&&(this.#t=new il,this.#e="none",t!==void 0&&(t=se.converters.HeadersInit(t,"Headers contructor","init"),Ob(this,t)))}append(t,r){se.brandCheck(this,e),se.argumentLengthCheck(arguments,2,"Headers.append");let n="Headers.append";return t=se.converters.ByteString(t,n,"name"),r=se.converters.ByteString(r,n,"value"),tg(this,t,r)}delete(t){if(se.brandCheck(this,e),se.argumentLengthCheck(arguments,1,"Headers.delete"),t=se.converters.ByteString(t,"Headers.delete","name"),!Ia(t))throw se.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){se.brandCheck(this,e),se.argumentLengthCheck(arguments,1,"Headers.get");let r="Headers.get";if(t=se.converters.ByteString(t,r,"name"),!Ia(t))throw se.errors.invalidArgument({prefix:r,value:t,type:"header name"});return this.#t.get(t,!1)}has(t){se.brandCheck(this,e),se.argumentLengthCheck(arguments,1,"Headers.has");let r="Headers.has";if(t=se.converters.ByteString(t,r,"name"),!Ia(t))throw se.errors.invalidArgument({prefix:r,value:t,type:"header name"});return this.#t.contains(t,!1)}set(t,r){se.brandCheck(this,e),se.argumentLengthCheck(arguments,2,"Headers.set");let n="Headers.set";if(t=se.converters.ByteString(t,n,"name"),r=se.converters.ByteString(r,n,"value"),r=Pb(r),Ia(t)){if(!_b(r))throw se.errors.invalidArgument({prefix:n,value:r,type:"header value"})}else throw se.errors.invalidArgument({prefix:n,value:t,type:"header name"});if(this.#e==="immutable")throw new TypeError("immutable");this.#t.set(t,r,!1)}getSetCookie(){se.brandCheck(this,e);let t=this.#t.cookies;return t?[...t]:[]}get[bt](){if(this.#t[bt])return this.#t[bt];let t=[],r=this.#t.toSortedArray(),n=this.#t.cookies;if(n===null||n.length===1)return this.#t[bt]=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[bt]=t}[ol.inspect.custom](t,r){return r.depth??=t,`Headers ${ol.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:Hb,setHeadersGuard:f$,getHeadersList:rg,setHeadersList:p$}=or;Reflect.deleteProperty(or,"getHeadersGuard");Reflect.deleteProperty(or,"setHeadersGuard");Reflect.deleteProperty(or,"getHeadersList");Reflect.deleteProperty(or,"setHeadersList");d$("Headers",or,bt,0,1);Object.defineProperties(or.prototype,{append:xi,delete:xi,get:xi,has:xi,set:xi,getSetCookie:xi,[Symbol.toStringTag]:{value:"Headers",configurable:!0},[ol.inspect.custom]:{enumerable:!1}});se.converters.HeadersInit=function(e,t,r){if(se.util.Type(e)==="Object"){let n=Reflect.get(e,Symbol.iterator);if(!ol.types.isProxy(e)&&n===or.prototype.entries)try{return rg(e).entriesList}catch{}return typeof n=="function"?se.converters["sequence<sequence<ByteString>>"](e,t,r,n.bind(e)):se.converters["record<ByteString, ByteString>"](e,t,r)}throw se.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence<sequence<ByteString>>","record<ByteString, ByteString>"]})};Gb.exports={fill:Ob,compareHeaderName:qb,Headers:or,HeadersList:il,getHeadersGuard:Hb,setHeadersGuard:f$,setHeadersList:p$,getHeadersList:rg}});var Ba=v((_ie,tk)=>{"use strict";var{Headers:zb,HeadersList:Yb,fill:h$,getHeadersGuard:g$,setHeadersGuard:jb,setHeadersList:Kb}=Eo(),{extractBody:Vb,cloneBody:m$,mixinBody:E$,hasFinalizationRegistry:Xb,streamRegistry:Zb,bodyUnusable:I$}=ai(),ng=ee(),$b=x("node:util"),{kEnumerableProperty:kt}=ng,{isValidReasonPhrase:C$,isCancelled:B$,isAborted:y$,isBlobLike:Q$,serializeJavascriptValueToJSONString:w$,isErrorLike:b$,isomorphicEncode:k$,environmentSettingsObject:S$}=Bt(),{redirectStatusSet:x$,nullBodyStatus:v$}=Vs(),{kState:xe,kHeaders:Xr}=cn(),{webidl:X}=$e(),{FormData:N$}=Ks(),{URLSerializer:Jb}=at(),{kConstruct:al}=ke(),og=x("node:assert"),{types:R$}=x("node:util"),D$=new TextEncoder("utf-8"),Io=class e{static error(){return Ca(Al(),"immutable")}static json(t,r={}){X.argumentLengthCheck(arguments,1,"Response.json"),r!==null&&(r=X.converters.ResponseInit(r));let n=D$.encode(w$(t)),o=Vb(n),i=Ca(vi({}),"response");return Wb(i,r,{body:o[0],type:"application/json"}),i}static redirect(t,r=302){X.argumentLengthCheck(arguments,1,"Response.redirect"),t=X.converters.USVString(t),r=X.converters["unsigned short"](r);let n;try{n=new URL(t,S$.settingsObject.baseUrl)}catch(s){throw new TypeError(`Failed to parse URL from ${t}`,{cause:s})}if(!x$.has(r))throw new RangeError(`Invalid status code ${r}`);let o=Ca(vi({}),"immutable");o[xe].status=r;let i=k$(Jb(n));return o[xe].headersList.append("location",i,!0),o}constructor(t=null,r={}){if(X.util.markAsUncloneable(this),t===al)return;t!==null&&(t=X.converters.BodyInit(t)),r=X.converters.ResponseInit(r),this[xe]=vi({}),this[Xr]=new zb(al),jb(this[Xr],"response"),Kb(this[Xr],this[xe].headersList);let n=null;if(t!=null){let[o,i]=Vb(t);n={body:o,type:i}}Wb(this,r,n)}get type(){return X.brandCheck(this,e),this[xe].type}get url(){X.brandCheck(this,e);let t=this[xe].urlList,r=t[t.length-1]??null;return r===null?"":Jb(r,!0)}get redirected(){return X.brandCheck(this,e),this[xe].urlList.length>1}get status(){return X.brandCheck(this,e),this[xe].status}get ok(){return X.brandCheck(this,e),this[xe].status>=200&&this[xe].status<=299}get statusText(){return X.brandCheck(this,e),this[xe].statusText}get headers(){return X.brandCheck(this,e),this[Xr]}get body(){return X.brandCheck(this,e),this[xe].body?this[xe].body.stream:null}get bodyUsed(){return X.brandCheck(this,e),!!this[xe].body&&ng.isDisturbed(this[xe].body.stream)}clone(){if(X.brandCheck(this,e),I$(this))throw X.errors.exception({header:"Response.clone",message:"Body has already been consumed."});let t=ig(this[xe]);return Xb&&this[xe].body?.stream&&Zb.register(this,new WeakRef(this[xe].body.stream)),Ca(t,g$(this[Xr]))}[$b.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 ${$b.formatWithOptions(r,n)}`}};E$(Io);Object.defineProperties(Io.prototype,{type:kt,url:kt,status:kt,ok:kt,redirected:kt,statusText:kt,headers:kt,clone:kt,body:kt,bodyUsed:kt,[Symbol.toStringTag]:{value:"Response",configurable:!0}});Object.defineProperties(Io,{json:kt,redirect:kt,error:kt});function ig(e){if(e.internalResponse)return ek(ig(e.internalResponse),e.type);let t=vi({...e,body:null});return e.body!=null&&(t.body=m$(t,e.body)),t}function vi(e){return{aborted:!1,rangeRequested:!1,timingAllowPassed:!1,requestIncludesCredentials:!1,type:"default",status:200,timingInfo:null,cacheState:"",statusText:"",...e,headersList:e?.headersList?new Yb(e?.headersList):new Yb,urlList:e?.urlList?[...e.urlList]:[]}}function Al(e){let t=b$(e);return vi({type:"error",status:0,error:t?e:new Error(e&&String(e)),aborted:e&&e.name==="AbortError"})}function F$(e){return e.type==="error"&&e.status===0}function sl(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 og(!(n in t)),r[n]=o,!0}})}function ek(e,t){if(t==="basic")return sl(e,{type:"basic",headersList:e.headersList});if(t==="cors")return sl(e,{type:"cors",headersList:e.headersList});if(t==="opaque")return sl(e,{type:"opaque",urlList:Object.freeze([]),status:0,statusText:"",body:null});if(t==="opaqueredirect")return sl(e,{type:"opaqueredirect",status:0,statusText:"",headersList:[],body:null});og(!1)}function M$(e,t=null){return og(B$(e)),y$(e)?Al(Object.assign(new DOMException("The operation was aborted.","AbortError"),{cause:t})):Al(Object.assign(new DOMException("Request was cancelled."),{cause:t}))}function Wb(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&&!C$(String(t.statusText)))throw new TypeError("Invalid statusText");if("status"in t&&t.status!=null&&(e[xe].status=t.status),"statusText"in t&&t.statusText!=null&&(e[xe].statusText=t.statusText),"headers"in t&&t.headers!=null&&h$(e[Xr],t.headers),r){if(v$.includes(e.status))throw X.errors.exception({header:"Response constructor",message:`Invalid response status code ${e.status}`});e[xe].body=r.body,r.type!=null&&!e[xe].headersList.contains("content-type",!0)&&e[xe].headersList.append("content-type",r.type,!0)}}function Ca(e,t){let r=new Io(al);return r[xe]=e,r[Xr]=new zb(al),Kb(r[Xr],e.headersList),jb(r[Xr],t),Xb&&e.body?.stream&&Zb.register(r,new WeakRef(e.body.stream)),r}X.converters.ReadableStream=X.interfaceConverter(ReadableStream);X.converters.FormData=X.interfaceConverter(N$);X.converters.URLSearchParams=X.interfaceConverter(URLSearchParams);X.converters.XMLHttpRequestBodyInit=function(e,t,r){return typeof e=="string"?X.converters.USVString(e,t,r):Q$(e)?X.converters.Blob(e,t,r,{strict:!1}):ArrayBuffer.isView(e)||R$.isArrayBuffer(e)?X.converters.BufferSource(e,t,r):ng.isFormDataLike(e)?X.converters.FormData(e,t,r,{strict:!1}):e instanceof URLSearchParams?X.converters.URLSearchParams(e,t,r):X.converters.DOMString(e,t,r)};X.converters.BodyInit=function(e,t,r){return e instanceof ReadableStream?X.converters.ReadableStream(e,t,r):e?.[Symbol.asyncIterator]?e:X.converters.XMLHttpRequestBodyInit(e,t,r)};X.converters.ResponseInit=X.dictionaryConverter([{key:"status",converter:X.converters["unsigned short"],defaultValue:()=>200},{key:"statusText",converter:X.converters.ByteString,defaultValue:()=>""},{key:"headers",converter:X.converters.HeadersInit}]);tk.exports={isNetworkError:F$,makeNetworkError:Al,makeResponse:vi,makeAppropriateNetworkError:M$,filterResponse:ek,Response:Io,cloneResponse:ig,fromInnerResponse:Ca}});var ik=v((Pie,ok)=>{"use strict";var{kConnected:rk,kSize:nk}=ke(),sg=class{constructor(t){this.value=t}deref(){return this.value[rk]===0&&this.value[nk]===0?void 0:this.value}},ag=class{constructor(t){this.finalizer=t}register(t,r){t.on&&t.on("disconnect",()=>{t[rk]===0&&t[nk]===0&&this.finalizer(r)})}unregister(t){}};ok.exports=function(){return process.env.NODE_V8_COVERAGE&&process.version.startsWith("v18")?(process._rawDebug("Using compatibility WeakRef and FinalizationRegistry"),{WeakRef:sg,FinalizationRegistry:ag}):{WeakRef,FinalizationRegistry}}});var Ni=v((Oie,Ck)=>{"use strict";var{extractBody:T$,mixinBody:U$,cloneBody:L$,bodyUnusable:sk}=ai(),{Headers:hk,fill:_$,HeadersList:dl,setHeadersGuard:cg,getHeadersGuard:P$,setHeadersList:gk,getHeadersList:ak}=Eo(),{FinalizationRegistry:O$}=ik()(),ll=ee(),Ak=x("node:util"),{isValidHTTPToken:q$,sameOrigin:ck,environmentSettingsObject:cl}=Bt(),{forbiddenMethodsSet:H$,corsSafeListedMethodsSet:G$,referrerPolicy:Y$,requestRedirect:V$,requestMode:$$,requestCredentials:J$,requestCache:W$,requestDuplex:z$}=Vs(),{kEnumerableProperty:Oe,normalizedMethodRecordsBase:j$,normalizedMethodRecords:K$}=ll,{kHeaders:St,kSignal:ul,kState:ye,kDispatcher:Ag}=cn(),{webidl:$}=$e(),{URLSerializer:X$}=at(),{kConstruct:fl}=ke(),Z$=x("node:assert"),{getMaxListeners:lk,setMaxListeners:uk,getEventListeners:eJ,defaultMaxListeners:dk}=x("node:events"),tJ=Symbol("abortController"),mk=new O$(({signal:e,abort:t})=>{e.removeEventListener("abort",t)}),pl=new WeakMap;function fk(e){return t;function t(){let r=e.deref();if(r!==void 0){mk.unregister(t),this.removeEventListener("abort",t),r.abort(this.reason);let n=pl.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()}pl.delete(r.signal)}}}}var pk=!1,Cn=class e{constructor(t,r={}){if($.util.markAsUncloneable(this),t===fl)return;let n="Request constructor";$.argumentLengthCheck(arguments,1,n),t=$.converters.RequestInfo(t,n,"input"),r=$.converters.RequestInit(r,n,"init");let o=null,i=null,s=cl.settingsObject.baseUrl,a=null;if(typeof t=="string"){this[Ag]=r.dispatcher;let m;try{m=new URL(t,s)}catch(C){throw new TypeError("Failed to parse URL from "+t,{cause:C})}if(m.username||m.password)throw new TypeError("Request cannot be constructed from a URL that includes credentials: "+t);o=hl({urlList:[m]}),i="cors"}else this[Ag]=r.dispatcher||t[Ag],Z$(t instanceof e),o=t[ye],a=t[ul];let A=cl.settingsObject.origin,c="client";if(o.window?.constructor?.name==="EnvironmentSettingsObject"&&ck(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=hl({method:o.method,headersList:o.headersList,unsafeRequest:o.unsafeRequest,client:cl.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 m=r.referrer;if(m==="")o.referrer="no-referrer";else{let C;try{C=new URL(m,s)}catch(E){throw new TypeError(`Referrer "${m}" is not a valid URL.`,{cause:E})}C.protocol==="about:"&&C.hostname==="client"||A&&!ck(C,cl.settingsObject.baseUrl)?o.referrer="client":o.referrer=C}}r.referrerPolicy!==void 0&&(o.referrerPolicy=r.referrerPolicy);let u;if(r.mode!==void 0?u=r.mode:u=i,u==="navigate")throw $.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 m=r.method,C=K$[m];if(C!==void 0)o.method=C;else{if(!q$(m))throw new TypeError(`'${m}' is not a valid HTTP method.`);let E=m.toUpperCase();if(H$.has(E))throw new TypeError(`'${m}' HTTP method is unsupported.`);m=j$[E]??m,o.method=m}!pk&&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"}),pk=!0)}r.signal!==void 0&&(a=r.signal),this[ye]=o;let d=new AbortController;if(this[ul]=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[tJ]=d;let m=new WeakRef(d),C=fk(m);try{(typeof lk=="function"&&lk(a)===dk||eJ(a,"abort").length>=dk)&&uk(1500,a)}catch{}ll.addAbortListener(a,C),mk.register(d,{signal:a,abort:C},C)}}if(this[St]=new hk(fl),gk(this[St],o.headersList),cg(this[St],"request"),u==="no-cors"){if(!G$.has(o.method))throw new TypeError(`'${o.method} is unsupported in no-cors mode.`);cg(this[St],"request-no-cors")}if(l){let m=ak(this[St]),C=r.headers!==void 0?r.headers:new dl(m);if(m.clear(),C instanceof dl){for(let{name:E,value:I}of C.rawValues())m.append(E,I,!1);m.cookies=C.cookies}else _$(this[St],C)}let f=t instanceof e?t[ye].body:null;if((r.body!=null||f!=null)&&(o.method==="GET"||o.method==="HEAD"))throw new TypeError("Request with GET/HEAD method cannot have body.");let p=null;if(r.body!=null){let[m,C]=T$(r.body,o.keepalive);p=m,C&&!ak(this[St]).contains("content-type",!0)&&this[St].append("content-type",C)}let h=p??f;if(h!=null&&h.source==null){if(p!=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 g=h;if(p==null&&f!=null){if(sk(t))throw new TypeError("Cannot construct a Request with a Request object that has already been used.");let m=new TransformStream;f.stream.pipeThrough(m),g={source:f.source,length:f.length,stream:m.readable}}this[ye].body=g}get method(){return $.brandCheck(this,e),this[ye].method}get url(){return $.brandCheck(this,e),X$(this[ye].url)}get headers(){return $.brandCheck(this,e),this[St]}get destination(){return $.brandCheck(this,e),this[ye].destination}get referrer(){return $.brandCheck(this,e),this[ye].referrer==="no-referrer"?"":this[ye].referrer==="client"?"about:client":this[ye].referrer.toString()}get referrerPolicy(){return $.brandCheck(this,e),this[ye].referrerPolicy}get mode(){return $.brandCheck(this,e),this[ye].mode}get credentials(){return this[ye].credentials}get cache(){return $.brandCheck(this,e),this[ye].cache}get redirect(){return $.brandCheck(this,e),this[ye].redirect}get integrity(){return $.brandCheck(this,e),this[ye].integrity}get keepalive(){return $.brandCheck(this,e),this[ye].keepalive}get isReloadNavigation(){return $.brandCheck(this,e),this[ye].reloadNavigation}get isHistoryNavigation(){return $.brandCheck(this,e),this[ye].historyNavigation}get signal(){return $.brandCheck(this,e),this[ul]}get body(){return $.brandCheck(this,e),this[ye].body?this[ye].body.stream:null}get bodyUsed(){return $.brandCheck(this,e),!!this[ye].body&&ll.isDisturbed(this[ye].body.stream)}get duplex(){return $.brandCheck(this,e),"half"}clone(){if($.brandCheck(this,e),sk(this))throw new TypeError("unusable");let t=Ek(this[ye]),r=new AbortController;if(this.signal.aborted)r.abort(this.signal.reason);else{let n=pl.get(this.signal);n===void 0&&(n=new Set,pl.set(this.signal,n));let o=new WeakRef(r);n.add(o),ll.addAbortListener(r.signal,fk(o))}return Ik(t,r.signal,P$(this[St]))}[Ak.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 ${Ak.formatWithOptions(r,n)}`}};U$(Cn);function hl(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 dl(e.headersList):new dl}}function Ek(e){let t=hl({...e,body:null});return e.body!=null&&(t.body=L$(t,e.body)),t}function Ik(e,t,r){let n=new Cn(fl);return n[ye]=e,n[ul]=t,n[St]=new hk(fl),gk(n[St],e.headersList),cg(n[St],r),n}Object.defineProperties(Cn.prototype,{method:Oe,url:Oe,headers:Oe,redirect:Oe,clone:Oe,signal:Oe,duplex:Oe,destination:Oe,body:Oe,bodyUsed:Oe,isHistoryNavigation:Oe,isReloadNavigation:Oe,keepalive:Oe,integrity:Oe,cache:Oe,credentials:Oe,attribute:Oe,referrerPolicy:Oe,referrer:Oe,mode:Oe,[Symbol.toStringTag]:{value:"Request",configurable:!0}});$.converters.Request=$.interfaceConverter(Cn);$.converters.RequestInfo=function(e,t,r){return typeof e=="string"?$.converters.USVString(e,t,r):e instanceof Cn?$.converters.Request(e,t,r):$.converters.USVString(e,t,r)};$.converters.AbortSignal=$.interfaceConverter(AbortSignal);$.converters.RequestInit=$.dictionaryConverter([{key:"method",converter:$.converters.ByteString},{key:"headers",converter:$.converters.HeadersInit},{key:"body",converter:$.nullableConverter($.converters.BodyInit)},{key:"referrer",converter:$.converters.USVString},{key:"referrerPolicy",converter:$.converters.DOMString,allowedValues:Y$},{key:"mode",converter:$.converters.DOMString,allowedValues:$$},{key:"credentials",converter:$.converters.DOMString,allowedValues:J$},{key:"cache",converter:$.converters.DOMString,allowedValues:W$},{key:"redirect",converter:$.converters.DOMString,allowedValues:V$},{key:"integrity",converter:$.converters.DOMString},{key:"keepalive",converter:$.converters.boolean},{key:"signal",converter:$.nullableConverter(e=>$.converters.AbortSignal(e,"RequestInit","signal",{strict:!1}))},{key:"window",converter:$.converters.any},{key:"duplex",converter:$.converters.DOMString,allowedValues:z$},{key:"dispatcher",converter:$.converters.any}]);Ck.exports={Request:Cn,makeRequest:hl,fromInnerRequest:Ik,cloneRequest:Ek}});var Qa=v((qie,Tk)=>{"use strict";var{makeNetworkError:ge,makeAppropriateNetworkError:gl,filterResponse:lg,makeResponse:ml,fromInnerResponse:rJ}=Ba(),{HeadersList:Bk}=Eo(),{Request:nJ,cloneRequest:oJ}=Ni(),Bn=x("node:zlib"),{bytesMatch:iJ,makePolicyContainer:sJ,clonePolicyContainer:aJ,requestBadPort:AJ,TAOCheck:cJ,appendRequestOriginHeader:lJ,responseLocationURL:uJ,requestCurrentURL:Rr,setRequestReferrerPolicyOnRedirect:dJ,tryUpgradeRequestToAPotentiallyTrustworthyURL:fJ,createOpaqueTimingInfo:hg,appendFetchMetadata:pJ,corsCheck:hJ,crossOriginResourcePolicyCheck:gJ,determineRequestsReferrer:mJ,coarsenedSharedCurrentTime:ya,createDeferredPromise:EJ,isBlobLike:IJ,sameOrigin:pg,isCancelled:Co,isAborted:yk,isErrorLike:CJ,fullyReadBody:BJ,readableStreamClose:yJ,isomorphicEncode:El,urlIsLocal:QJ,urlIsHttpHttpsScheme:gg,urlHasHttpsScheme:wJ,clampAndCoarsenConnectionTimingInfo:bJ,simpleRangeHeaderValue:kJ,buildContentRange:SJ,createInflate:xJ,extractMimeType:vJ}=Bt(),{kState:kk,kDispatcher:NJ}=cn(),Bo=x("node:assert"),{safelyExtractBody:mg,extractBody:Qk}=ai(),{redirectStatusSet:Sk,nullBodyStatus:xk,safeMethodsSet:RJ,requestBodyHeader:DJ,subresourceSet:FJ}=Vs(),MJ=x("node:events"),{Readable:TJ,pipeline:UJ,finished:LJ}=x("node:stream"),{addAbortListener:_J,isErrored:PJ,isReadable:Il,bufferToLowerCasedHeaderName:wk}=ee(),{dataURLProcessor:OJ,serializeAMimeType:qJ,minimizeSupportedMimeType:HJ}=at(),{getGlobalDispatcher:GJ}=rl(),{webidl:YJ}=$e(),{STATUS_CODES:VJ}=x("node:http"),$J=["GET","HEAD"],JJ=typeof __UNDICI_IS_NODE__<"u"||typeof esbuildDetection<"u"?"node":"undici",ug,Cl=class extends MJ{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 WJ(e){vk(e,"fetch")}function zJ(e,t=void 0){YJ.argumentLengthCheck(arguments,1,"globalThis.fetch");let r=EJ(),n;try{n=new nJ(e,t)}catch(l){return r.reject(l),r.promise}let o=n[kk];if(n.signal.aborted)return dg(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 _J(n.signal,()=>{a=!0,Bo(A!=null),A.abort(n.signal.reason);let l=s?.deref();dg(r,o,l,n.signal.reason)}),A=Rk({request:o,processResponseEndOfBody:WJ,processResponse:l=>{if(!a){if(l.aborted){dg(r,o,s,A.serializedAbortReason);return}if(l.type==="error"){r.reject(new TypeError("fetch failed",{cause:l.error}));return}s=new WeakRef(rJ(l,"immutable")),r.resolve(s.deref()),r=null}},dispatcher:n[NJ]}),r.promise}function vk(e,t="other"){if(e.type==="error"&&e.aborted||!e.urlList?.length)return;let r=e.urlList[0],n=e.timingInfo,o=e.cacheState;gg(r)&&n!==null&&(e.timingAllowPassed||(n=hg({startTime:n.startTime}),o=""),n.endTime=ya(),e.timingInfo=n,Nk(n,r.href,t,globalThis,o))}var Nk=performance.markResourceTiming;function dg(e,t,r,n){if(e&&e.reject(n),t.body!=null&&Il(t.body?.stream)&&t.body.stream.cancel(n).catch(i=>{if(i.code!=="ERR_INVALID_STATE")throw i}),r==null)return;let o=r[kk];o.body!=null&&Il(o.body?.stream)&&o.body.stream.cancel(n).catch(i=>{if(i.code!=="ERR_INVALID_STATE")throw i})}function Rk({request:e,processRequestBodyChunkLength:t,processRequestEndOfBody:r,processResponse:n,processResponseEndOfBody:o,processResponseConsumeBody:i,useParallelQueue:s=!1,dispatcher:a=GJ()}){Bo(a);let A=null,c=!1;e.client!=null&&(A=e.client.globalObject,c=e.client.crossOriginIsolatedCapability);let l=ya(c),u=hg({startTime:l}),d={controller:new Cl(a),request:e,timingInfo:u,processRequestBodyChunkLength:t,processRequestEndOfBody:r,processResponse:n,processResponseConsumeBody:i,processResponseEndOfBody:o,taskDestination:A,crossOriginIsolatedCapability:c};return Bo(!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=aJ(e.client.policyContainer):e.policyContainer=sJ()),e.headersList.contains("accept",!0)||e.headersList.append("accept","*/*",!0),e.headersList.contains("accept-language",!0)||e.headersList.append("accept-language","*",!0),e.priority,FJ.has(e.destination),Dk(d).catch(f=>{d.controller.terminate(f)}),d.controller}async function Dk(e,t=!1){let r=e.request,n=null;if(r.localURLsOnly&&!QJ(Rr(r))&&(n=ge("local URLs only")),fJ(r),AJ(r)==="blocked"&&(n=ge("bad port")),r.referrerPolicy===""&&(r.referrerPolicy=r.policyContainer.referrerPolicy),r.referrer!=="no-referrer"&&(r.referrer=mJ(r)),n===null&&(n=await(async()=>{let i=Rr(r);return pg(i,r.url)&&r.responseTainting==="basic"||i.protocol==="data:"||r.mode==="navigate"||r.mode==="websocket"?(r.responseTainting="basic",await bk(e)):r.mode==="same-origin"?ge('request mode cannot be "same-origin"'):r.mode==="no-cors"?r.redirect!=="follow"?ge('redirect mode cannot be "follow" for "no-cors" request'):(r.responseTainting="opaque",await bk(e)):gg(Rr(r))?(r.responseTainting="cors",await Fk(e)):ge("URL scheme must be a HTTP(S) scheme")})()),t)return n;n.status!==0&&!n.internalResponse&&(r.responseTainting,r.responseTainting==="basic"?n=lg(n,"basic"):r.responseTainting==="cors"?n=lg(n,"cors"):r.responseTainting==="opaque"?n=lg(n,"opaque"):Bo(!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=ge()),n.status!==0&&(r.method==="HEAD"||r.method==="CONNECT"||xk.includes(o.status))&&(o.body=null,e.controller.dump=!0),r.integrity){let i=a=>fg(e,ge(a));if(r.responseTainting==="opaque"||n.body==null){i(n.error);return}let s=a=>{if(!iJ(a,r.integrity)){i("integrity mismatch");return}n.body=mg(a)[0],fg(e,n)};await BJ(n.body,s,i)}else fg(e,n)}function bk(e){if(Co(e)&&e.request.redirectCount===0)return Promise.resolve(gl(e));let{request:t}=e,{protocol:r}=Rr(t);switch(r){case"about:":return Promise.resolve(ge("about scheme is not supported"));case"blob:":{ug||(ug=x("node:buffer").resolveObjectURL);let n=Rr(t);if(n.search.length!==0)return Promise.resolve(ge("NetworkError when attempting to fetch resource."));let o=ug(n.toString());if(t.method!=="GET"||!IJ(o))return Promise.resolve(ge("invalid method"));let i=ml(),s=o.size,a=El(`${s}`),A=o.type;if(t.headersList.contains("range",!0)){i.rangeRequested=!0;let c=t.headersList.get("range",!0),l=kJ(c,!0);if(l==="failure")return Promise.resolve(ge("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(ge("Range start is greater than the blob's size."));(d===null||d>=s)&&(d=s-1)}let f=o.slice(u,d,A),p=Qk(f);i.body=p[0];let h=El(`${f.size}`),g=SJ(u,d,s);i.status=206,i.statusText="Partial Content",i.headersList.set("content-length",h,!0),i.headersList.set("content-type",A,!0),i.headersList.set("content-range",g,!0)}else{let c=Qk(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=Rr(t),o=OJ(n);if(o==="failure")return Promise.resolve(ge("failed to fetch the data URL"));let i=qJ(o.mimeType);return Promise.resolve(ml({statusText:"OK",headersList:[["content-type",{name:"Content-Type",value:i}]],body:mg(o.body)[0]}))}case"file:":return Promise.resolve(ge("not implemented... yet..."));case"http:":case"https:":return Fk(e).catch(n=>ge(n));default:return Promise.resolve(ge("unknown scheme"))}}function jJ(e,t){e.request.done=!0,e.processResponseDone!=null&&queueMicrotask(()=>e.processResponseDone(t))}function fg(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=hg(r),a="");let c=0;if(e.request.mode!=="navigator"||!t.hasCrossOriginRedirects){c=t.status;let l=vJ(t.headersList);l!=="failure"&&(A.contentType=HJ(l))}e.request.initiatorType!=null&&Nk(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():LJ(o.body.stream,()=>{n()})}async function Fk(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 Mk(e),t.responseTainting==="cors"&&hJ(t,r)==="failure")return ge("cors failure");cJ(t,r)==="failure"&&(t.timingAllowFailed=!0)}return(t.responseTainting==="opaque"||r.type==="opaque")&&gJ(t.origin,t.client,t.destination,n)==="blocked"?ge("blocked"):(Sk.has(n.status)&&(t.redirect!=="manual"&&e.controller.connection.destroy(void 0,!1),t.redirect==="error"?r=ge("unexpected redirect"):t.redirect==="manual"?r=n:t.redirect==="follow"?r=await KJ(e,r):Bo(!1)),r.timingInfo=o,r)}function KJ(e,t){let r=e.request,n=t.internalResponse?t.internalResponse:t,o;try{if(o=uJ(n,Rr(r).hash),o==null)return t}catch(s){return Promise.resolve(ge(s))}if(!gg(o))return Promise.resolve(ge("URL scheme must be a HTTP(S) scheme"));if(r.redirectCount===20)return Promise.resolve(ge("redirect count exceeded"));if(r.redirectCount+=1,r.mode==="cors"&&(o.username||o.password)&&!pg(r,o))return Promise.resolve(ge('cross origin not allowed for request mode "cors"'));if(r.responseTainting==="cors"&&(o.username||o.password))return Promise.resolve(ge('URL cannot contain credentials for request mode "cors"'));if(n.status!==303&&r.body!=null&&r.body.source==null)return Promise.resolve(ge());if([301,302].includes(n.status)&&r.method==="POST"||n.status===303&&!$J.includes(r.method)){r.method="GET",r.body=null;for(let s of DJ)r.headersList.delete(s)}pg(Rr(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&&(Bo(r.body.source!=null),r.body=mg(r.body.source)[0]);let i=e.timingInfo;return i.redirectEndTime=i.postRedirectStartTime=ya(e.crossOriginIsolatedCapability),i.redirectStartTime===0&&(i.redirectStartTime=i.startTime),r.urlList.push(o),dJ(r,n),Dk(e,!0)}async function Mk(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=oJ(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=El(`${l}`)),u!=null&&i.headersList.append("content-length",u,!0),l!=null&&i.keepalive,i.referrer instanceof URL&&i.headersList.append("referer",El(i.referrer.href),!0),lJ(i),pJ(i),i.headersList.contains("user-agent",!0)||i.headersList.append("user-agent",JJ),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)||(wJ(Rr(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 ge("only if cached");let d=await XJ(o,c,r);!RJ.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"?ge():Co(e)?gl(e):ge("proxy authentication required");if(s.status===421&&!r&&(n.body==null||n.body.source!=null)){if(Co(e))return gl(e);e.controller.connection.destroy(),s=await Mk(e,t,!0)}return s}async function XJ(e,t=!1,r=!1){Bo(!e.controller.connection||e.controller.connection.destroyed),e.controller.connection={abort:null,destroyed:!1,destroy(p,h=!0){this.destroyed||(this.destroyed=!0,h&&this.abort?.(p??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 p=async function*(m){Co(e)||(yield m,e.processRequestBodyChunkLength?.(m.byteLength))},h=()=>{Co(e)||e.processRequestEndOfBody&&e.processRequestEndOfBody()},g=m=>{Co(e)||(m.name==="AbortError"?e.controller.abort():e.controller.terminate(m))};A=(async function*(){try{for await(let m of n.body.stream)yield*p(m);h()}catch(m){g(m)}})()}try{let{body:p,status:h,statusText:g,headersList:m,socket:C}=await f({body:A});if(C)o=ml({status:h,statusText:g,headersList:m,socket:C});else{let E=p[Symbol.asyncIterator]();e.controller.next=()=>E.next(),o=ml({status:h,statusText:g,headersList:m})}}catch(p){return p.name==="AbortError"?(e.controller.connection.destroy(),gl(e,p)):ge(p)}let c=async()=>{await e.controller.resume()},l=p=>{Co(e)||e.controller.abort(p)},u=new ReadableStream({async start(p){e.controller.controller=p},async pull(p){await c(p)},async cancel(p){await l(p)},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 p,h;try{let{done:m,value:C}=await e.controller.next();if(yk(e))break;p=m?void 0:C}catch(m){e.controller.ended&&!i.encodedBodySize?p=void 0:(p=m,h=!0)}if(p===void 0){yJ(e.controller.controller),jJ(e,o);return}if(i.decodedBodySize+=p?.byteLength??0,h){e.controller.terminate(p);return}let g=new Uint8Array(p);if(g.byteLength&&e.controller.controller.enqueue(g),PJ(u)){e.controller.terminate();return}if(e.controller.controller.desiredSize<=0)return}};function d(p){yk(e)?(o.aborted=!0,Il(u)&&e.controller.controller.error(e.controller.serializedAbortReason)):Il(u)&&e.controller.controller.error(new TypeError("terminated",{cause:CJ(p)?p:void 0})),e.controller.connection.destroy()}return o;function f({body:p}){let h=Rr(n),g=e.controller.dispatcher;return new Promise((m,C)=>g.dispatch({path:h.pathname+h.search,origin:h.origin,method:n.method,body:g.isMockActive?n.body&&(n.body.source||n.body.stream):p,headers:n.headersList.entries,maxRedirections:0,upgrade:n.mode==="websocket"?"websocket":void 0},{body:null,abort:null,onConnect(E){let{connection:I}=e.controller;i.finalConnectionTimingInfo=bJ(void 0,i.postRedirectStartTime,e.crossOriginIsolatedCapability),I.destroyed?E(new DOMException("The operation was aborted.","AbortError")):(e.controller.on("terminated",E),this.abort=I.abort=E),i.finalNetworkRequestStartTime=ya(e.crossOriginIsolatedCapability)},onResponseStarted(){i.finalNetworkResponseStartTime=ya(e.crossOriginIsolatedCapability)},onHeaders(E,I,Q,N){if(E<200)return;let S="",y=new Bk;for(let q=0;q<I.length;q+=2)y.append(wk(I[q]),I[q+1].toString("latin1"),!0);S=y.get("location",!0),this.body=new TJ({read:Q});let w=[],b=S&&n.redirect==="follow"&&Sk.has(E);if(n.method!=="HEAD"&&n.method!=="CONNECT"&&!xk.includes(E)&&!b){let q=y.get("content-encoding",!0),ue=q?q.toLowerCase().split(","):[],Ve=5;if(ue.length>Ve)return C(new Error(`too many content-encodings in response: ${ue.length}, maximum allowed is ${Ve}`)),!0;for(let mt=ue.length-1;mt>=0;--mt){let Tt=ue[mt].trim();if(Tt==="x-gzip"||Tt==="gzip")w.push(Bn.createGunzip({flush:Bn.constants.Z_SYNC_FLUSH,finishFlush:Bn.constants.Z_SYNC_FLUSH}));else if(Tt==="deflate")w.push(xJ({flush:Bn.constants.Z_SYNC_FLUSH,finishFlush:Bn.constants.Z_SYNC_FLUSH}));else if(Tt==="br")w.push(Bn.createBrotliDecompress({flush:Bn.constants.BROTLI_OPERATION_FLUSH,finishFlush:Bn.constants.BROTLI_OPERATION_FLUSH}));else{w.length=0;break}}}let U=this.onError.bind(this);return m({status:E,statusText:N,headersList:y,body:w.length?UJ(this.body,...w,q=>{q&&this.onError(q)}).on("error",U):this.body.on("error",U)}),!0},onData(E){if(e.controller.dump)return;let I=E;return i.encodedBodySize+=I.byteLength,this.body.push(I)},onComplete(){this.abort&&e.controller.off("terminated",this.abort),e.controller.onAborted&&e.controller.off("terminated",e.controller.onAborted),e.controller.ended=!0,this.body.push(null)},onError(E){this.abort&&e.controller.off("terminated",this.abort),this.body?.destroy(E),e.controller.terminate(E),C(E)},onUpgrade(E,I,Q){if(E!==101)return;let N=new Bk;for(let S=0;S<I.length;S+=2)N.append(wk(I[S]),I[S+1].toString("latin1"),!0);return m({status:E,statusText:VJ[E],headersList:N,socket:Q}),!0}}))}}Tk.exports={fetch:zJ,Fetch:Cl,fetching:Rk,finalizeAndReportTiming:vk}});var Eg=v((Hie,Uk)=>{"use strict";Uk.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 _k=v((Gie,Lk)=>{"use strict";var{webidl:xt}=$e(),Bl=Symbol("ProgressEvent state"),Ig=class e extends Event{constructor(t,r={}){t=xt.converters.DOMString(t,"ProgressEvent constructor","type"),r=xt.converters.ProgressEventInit(r??{}),super(t,r),this[Bl]={lengthComputable:r.lengthComputable,loaded:r.loaded,total:r.total}}get lengthComputable(){return xt.brandCheck(this,e),this[Bl].lengthComputable}get loaded(){return xt.brandCheck(this,e),this[Bl].loaded}get total(){return xt.brandCheck(this,e),this[Bl].total}};xt.converters.ProgressEventInit=xt.dictionaryConverter([{key:"lengthComputable",converter:xt.converters.boolean,defaultValue:()=>!1},{key:"loaded",converter:xt.converters["unsigned long long"],defaultValue:()=>0},{key:"total",converter:xt.converters["unsigned long long"],defaultValue:()=>0},{key:"bubbles",converter:xt.converters.boolean,defaultValue:()=>!1},{key:"cancelable",converter:xt.converters.boolean,defaultValue:()=>!1},{key:"composed",converter:xt.converters.boolean,defaultValue:()=>!1}]);Lk.exports={ProgressEvent:Ig}});var Ok=v((Yie,Pk)=>{"use strict";function ZJ(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"}}Pk.exports={getEncoding:ZJ}});var Wk=v((Vie,Jk)=>{"use strict";var{kState:Ri,kError:Cg,kResult:qk,kAborted:wa,kLastProgressEventFired:Bg}=Eg(),{ProgressEvent:e5}=_k(),{getEncoding:Hk}=Ok(),{serializeAMimeType:t5,parseMIMEType:Gk}=at(),{types:r5}=x("node:util"),{StringDecoder:Yk}=x("string_decoder"),{btoa:Vk}=x("node:buffer"),n5={enumerable:!0,writable:!1,configurable:!1};function o5(e,t,r,n){if(e[Ri]==="loading")throw new DOMException("Invalid state","InvalidStateError");e[Ri]="loading",e[qk]=null,e[Cg]=null;let i=t.stream().getReader(),s=[],a=i.read(),A=!0;(async()=>{for(;!e[wa];)try{let{done:c,value:l}=await a;if(A&&!e[wa]&&queueMicrotask(()=>{yn("loadstart",e)}),A=!1,!c&&r5.isUint8Array(l))s.push(l),(e[Bg]===void 0||Date.now()-e[Bg]>=50)&&!e[wa]&&(e[Bg]=Date.now(),queueMicrotask(()=>{yn("progress",e)})),a=i.read();else if(c){queueMicrotask(()=>{e[Ri]="done";try{let u=i5(s,r,t.type,n);if(e[wa])return;e[qk]=u,yn("load",e)}catch(u){e[Cg]=u,yn("error",e)}e[Ri]!=="loading"&&yn("loadend",e)});break}}catch(c){if(e[wa])return;queueMicrotask(()=>{e[Ri]="done",e[Cg]=c,yn("error",e),e[Ri]!=="loading"&&yn("loadend",e)});break}})()}function yn(e,t){let r=new e5(e,{bubbles:!1,cancelable:!1});t.dispatchEvent(r)}function i5(e,t,r,n){switch(t){case"DataURL":{let o="data:",i=Gk(r||"application/octet-stream");i!=="failure"&&(o+=t5(i)),o+=";base64,";let s=new Yk("latin1");for(let a of e)o+=Vk(s.write(a));return o+=Vk(s.end()),o}case"Text":{let o="failure";if(n&&(o=Hk(n)),o==="failure"&&r){let i=Gk(r);i!=="failure"&&(o=Hk(i.parameters.get("charset")))}return o==="failure"&&(o="UTF-8"),s5(e,o)}case"ArrayBuffer":return $k(e).buffer;case"BinaryString":{let o="",i=new Yk("latin1");for(let s of e)o+=i.write(s);return o+=i.end(),o}}}function s5(e,t){let r=$k(e),n=a5(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 a5(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 $k(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))}Jk.exports={staticPropertyDescriptors:n5,readOperation:o5,fireAProgressEvent:yn}});var Xk=v(($ie,Kk)=>{"use strict";var{staticPropertyDescriptors:Di,readOperation:yl,fireAProgressEvent:zk}=Wk(),{kState:yo,kError:jk,kResult:Ql,kEvents:le,kAborted:A5}=Eg(),{webidl:Ee}=$e(),{kEnumerableProperty:lt}=ee(),ir=class e extends EventTarget{constructor(){super(),this[yo]="empty",this[Ql]=null,this[jk]=null,this[le]={loadend:null,error:null,abort:null,load:null,progress:null,loadstart:null}}readAsArrayBuffer(t){Ee.brandCheck(this,e),Ee.argumentLengthCheck(arguments,1,"FileReader.readAsArrayBuffer"),t=Ee.converters.Blob(t,{strict:!1}),yl(this,t,"ArrayBuffer")}readAsBinaryString(t){Ee.brandCheck(this,e),Ee.argumentLengthCheck(arguments,1,"FileReader.readAsBinaryString"),t=Ee.converters.Blob(t,{strict:!1}),yl(this,t,"BinaryString")}readAsText(t,r=void 0){Ee.brandCheck(this,e),Ee.argumentLengthCheck(arguments,1,"FileReader.readAsText"),t=Ee.converters.Blob(t,{strict:!1}),r!==void 0&&(r=Ee.converters.DOMString(r,"FileReader.readAsText","encoding")),yl(this,t,"Text",r)}readAsDataURL(t){Ee.brandCheck(this,e),Ee.argumentLengthCheck(arguments,1,"FileReader.readAsDataURL"),t=Ee.converters.Blob(t,{strict:!1}),yl(this,t,"DataURL")}abort(){if(this[yo]==="empty"||this[yo]==="done"){this[Ql]=null;return}this[yo]==="loading"&&(this[yo]="done",this[Ql]=null),this[A5]=!0,zk("abort",this),this[yo]!=="loading"&&zk("loadend",this)}get readyState(){switch(Ee.brandCheck(this,e),this[yo]){case"empty":return this.EMPTY;case"loading":return this.LOADING;case"done":return this.DONE}}get result(){return Ee.brandCheck(this,e),this[Ql]}get error(){return Ee.brandCheck(this,e),this[jk]}get onloadend(){return Ee.brandCheck(this,e),this[le].loadend}set onloadend(t){Ee.brandCheck(this,e),this[le].loadend&&this.removeEventListener("loadend",this[le].loadend),typeof t=="function"?(this[le].loadend=t,this.addEventListener("loadend",t)):this[le].loadend=null}get onerror(){return Ee.brandCheck(this,e),this[le].error}set onerror(t){Ee.brandCheck(this,e),this[le].error&&this.removeEventListener("error",this[le].error),typeof t=="function"?(this[le].error=t,this.addEventListener("error",t)):this[le].error=null}get onloadstart(){return Ee.brandCheck(this,e),this[le].loadstart}set onloadstart(t){Ee.brandCheck(this,e),this[le].loadstart&&this.removeEventListener("loadstart",this[le].loadstart),typeof t=="function"?(this[le].loadstart=t,this.addEventListener("loadstart",t)):this[le].loadstart=null}get onprogress(){return Ee.brandCheck(this,e),this[le].progress}set onprogress(t){Ee.brandCheck(this,e),this[le].progress&&this.removeEventListener("progress",this[le].progress),typeof t=="function"?(this[le].progress=t,this.addEventListener("progress",t)):this[le].progress=null}get onload(){return Ee.brandCheck(this,e),this[le].load}set onload(t){Ee.brandCheck(this,e),this[le].load&&this.removeEventListener("load",this[le].load),typeof t=="function"?(this[le].load=t,this.addEventListener("load",t)):this[le].load=null}get onabort(){return Ee.brandCheck(this,e),this[le].abort}set onabort(t){Ee.brandCheck(this,e),this[le].abort&&this.removeEventListener("abort",this[le].abort),typeof t=="function"?(this[le].abort=t,this.addEventListener("abort",t)):this[le].abort=null}};ir.EMPTY=ir.prototype.EMPTY=0;ir.LOADING=ir.prototype.LOADING=1;ir.DONE=ir.prototype.DONE=2;Object.defineProperties(ir.prototype,{EMPTY:Di,LOADING:Di,DONE:Di,readAsArrayBuffer:lt,readAsBinaryString:lt,readAsText:lt,readAsDataURL:lt,abort:lt,readyState:lt,result:lt,error:lt,onloadstart:lt,onprogress:lt,onload:lt,onabort:lt,onerror:lt,onloadend:lt,[Symbol.toStringTag]:{value:"FileReader",writable:!1,enumerable:!1,configurable:!0}});Object.defineProperties(ir,{EMPTY:Di,LOADING:Di,DONE:Di});Kk.exports={FileReader:ir}});var wl=v((Jie,Zk)=>{"use strict";Zk.exports={kConstruct:ke().kConstruct}});var rS=v((Wie,tS)=>{"use strict";var c5=x("node:assert"),{URLSerializer:eS}=at(),{isValidHeaderName:l5}=Bt();function u5(e,t,r=!1){let n=eS(e,r),o=eS(t,r);return n===o}function d5(e){c5(e!==null);let t=[];for(let r of e.split(","))r=r.trim(),l5(r)&&t.push(r);return t}tS.exports={urlEquals:u5,getFieldValues:d5}});var iS=v((zie,oS)=>{"use strict";var{kConstruct:f5}=wl(),{urlEquals:p5,getFieldValues:yg}=rS(),{kEnumerableProperty:Qo,isDisturbed:h5}=ee(),{webidl:O}=$e(),{Response:g5,cloneResponse:m5,fromInnerResponse:E5}=Ba(),{Request:Zr,fromInnerRequest:I5}=Ni(),{kState:sr}=cn(),{fetching:C5}=Qa(),{urlIsHttpHttpsScheme:bl,createDeferredPromise:Fi,readAllBytes:B5}=Bt(),Qg=x("node:assert"),kl=class e{#e;constructor(){arguments[0]!==f5&&O.illegalConstructor(),O.util.markAsUncloneable(this),this.#e=arguments[1]}async match(t,r={}){O.brandCheck(this,e);let n="Cache.match";O.argumentLengthCheck(arguments,1,n),t=O.converters.RequestInfo(t,n,"request"),r=O.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={}){O.brandCheck(this,e);let n="Cache.matchAll";return t!==void 0&&(t=O.converters.RequestInfo(t,n,"request")),r=O.converters.CacheQueryOptions(r,n,"options"),this.#o(t,r)}async add(t){O.brandCheck(this,e);let r="Cache.add";O.argumentLengthCheck(arguments,1,r),t=O.converters.RequestInfo(t,r,"request");let n=[t];return await this.addAll(n)}async addAll(t){O.brandCheck(this,e);let r="Cache.addAll";O.argumentLengthCheck(arguments,1,r);let n=[],o=[];for(let d of t){if(d===void 0)throw O.errors.conversionFailed({prefix:r,argument:"Argument 1",types:["undefined is not allowed"]});if(d=O.converters.RequestInfo(d),typeof d=="string")continue;let f=d[sr];if(!bl(f.url)||f.method!=="GET")throw O.errors.exception({header:r,message:"Expected http/s scheme when method is not GET."})}let i=[];for(let d of t){let f=new Zr(d)[sr];if(!bl(f.url))throw O.errors.exception({header:r,message:"Expected http/s scheme."});f.initiator="fetch",f.destination="subresource",o.push(f);let p=Fi();i.push(C5({request:f,processResponse(h){if(h.type==="error"||h.status===206||h.status<200||h.status>299)p.reject(O.errors.exception({header:"Cache.addAll",message:"Received an invalid status code or the request failed."}));else if(h.headersList.contains("vary")){let g=yg(h.headersList.get("vary"));for(let m of g)if(m==="*"){p.reject(O.errors.exception({header:"Cache.addAll",message:"invalid vary field value"}));for(let C of i)C.abort();return}}},processResponseEndOfBody(h){if(h.aborted){p.reject(new DOMException("aborted","AbortError"));return}p.resolve(h)}})),n.push(p.promise)}let a=await Promise.all(n),A=[],c=0;for(let d of a){let f={type:"put",request:o[c],response:d};A.push(f),c++}let l=Fi(),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){O.brandCheck(this,e);let n="Cache.put";O.argumentLengthCheck(arguments,2,n),t=O.converters.RequestInfo(t,n,"request"),r=O.converters.Response(r,n,"response");let o=null;if(t instanceof Zr?o=t[sr]:o=new Zr(t)[sr],!bl(o.url)||o.method!=="GET")throw O.errors.exception({header:n,message:"Expected an http/s scheme when method is not GET"});let i=r[sr];if(i.status===206)throw O.errors.exception({header:n,message:"Got 206 status"});if(i.headersList.contains("vary")){let f=yg(i.headersList.get("vary"));for(let p of f)if(p==="*")throw O.errors.exception({header:n,message:"Got * vary field value"})}if(i.body&&(h5(i.body.stream)||i.body.stream.locked))throw O.errors.exception({header:n,message:"Response body is locked or disturbed"});let s=m5(i),a=Fi();if(i.body!=null){let p=i.body.stream.getReader();B5(p).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=Fi(),d=null;try{this.#t(A)}catch(f){d=f}return queueMicrotask(()=>{d===null?u.resolve():u.reject(d)}),u.promise}async delete(t,r={}){O.brandCheck(this,e);let n="Cache.delete";O.argumentLengthCheck(arguments,1,n),t=O.converters.RequestInfo(t,n,"request"),r=O.converters.CacheQueryOptions(r,n,"options");let o=null;if(t instanceof Zr){if(o=t[sr],o.method!=="GET"&&!r.ignoreMethod)return!1}else Qg(typeof t=="string"),o=new Zr(t)[sr];let i=[],s={type:"delete",request:o,options:r};i.push(s);let a=Fi(),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={}){O.brandCheck(this,e);let n="Cache.keys";t!==void 0&&(t=O.converters.RequestInfo(t,n,"request")),r=O.converters.CacheQueryOptions(r,n,"options");let o=null;if(t!==void 0)if(t instanceof Zr){if(o=t[sr],o.method!=="GET"&&!r.ignoreMethod)return[]}else typeof t=="string"&&(o=new Zr(t)[sr]);let i=Fi(),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=I5(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 O.errors.exception({header:"Cache.#batchCacheOperations",message:'operation type does not match "delete" or "put"'});if(s.type==="delete"&&s.response!=null)throw O.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);Qg(c!==-1),r.splice(c,1)}}else if(s.type==="put"){if(s.response==null)throw O.errors.exception({header:"Cache.#batchCacheOperations",message:"put operation should have an associated response"});let A=s.request;if(!bl(A.url))throw O.errors.exception({header:"Cache.#batchCacheOperations",message:"expected http or https scheme"});if(A.method!=="GET")throw O.errors.exception({header:"Cache.#batchCacheOperations",message:"not get method"});if(s.options!=null)throw O.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);Qg(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=""),!p5(i,s,!0))return!1;if(n==null||o?.ignoreVary||!n.headersList.contains("vary"))return!0;let a=yg(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 Zr){if(o=t[sr],o.method!=="GET"&&!r.ignoreMethod)return[]}else typeof t=="string"&&(o=new Zr(t)[sr]);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=E5(a,"immutable");if(s.push(A.clone()),s.length>=n)break}return Object.freeze(s)}};Object.defineProperties(kl.prototype,{[Symbol.toStringTag]:{value:"Cache",configurable:!0},match:Qo,matchAll:Qo,add:Qo,addAll:Qo,put:Qo,delete:Qo,keys:Qo});var nS=[{key:"ignoreSearch",converter:O.converters.boolean,defaultValue:()=>!1},{key:"ignoreMethod",converter:O.converters.boolean,defaultValue:()=>!1},{key:"ignoreVary",converter:O.converters.boolean,defaultValue:()=>!1}];O.converters.CacheQueryOptions=O.dictionaryConverter(nS);O.converters.MultiCacheQueryOptions=O.dictionaryConverter([...nS,{key:"cacheName",converter:O.converters.DOMString}]);O.converters.Response=O.interfaceConverter(g5);O.converters["sequence<RequestInfo>"]=O.sequenceConverter(O.converters.RequestInfo);oS.exports={Cache:kl}});var aS=v((jie,sS)=>{"use strict";var{kConstruct:ba}=wl(),{Cache:Sl}=iS(),{webidl:Ke}=$e(),{kEnumerableProperty:ka}=ee(),xl=class e{#e=new Map;constructor(){arguments[0]!==ba&&Ke.illegalConstructor(),Ke.util.markAsUncloneable(this)}async match(t,r={}){if(Ke.brandCheck(this,e),Ke.argumentLengthCheck(arguments,1,"CacheStorage.match"),t=Ke.converters.RequestInfo(t),r=Ke.converters.MultiCacheQueryOptions(r),r.cacheName!=null){if(this.#e.has(r.cacheName)){let n=this.#e.get(r.cacheName);return await new Sl(ba,n).match(t,r)}}else for(let n of this.#e.values()){let i=await new Sl(ba,n).match(t,r);if(i!==void 0)return i}}async has(t){Ke.brandCheck(this,e);let r="CacheStorage.has";return Ke.argumentLengthCheck(arguments,1,r),t=Ke.converters.DOMString(t,r,"cacheName"),this.#e.has(t)}async open(t){Ke.brandCheck(this,e);let r="CacheStorage.open";if(Ke.argumentLengthCheck(arguments,1,r),t=Ke.converters.DOMString(t,r,"cacheName"),this.#e.has(t)){let o=this.#e.get(t);return new Sl(ba,o)}let n=[];return this.#e.set(t,n),new Sl(ba,n)}async delete(t){Ke.brandCheck(this,e);let r="CacheStorage.delete";return Ke.argumentLengthCheck(arguments,1,r),t=Ke.converters.DOMString(t,r,"cacheName"),this.#e.delete(t)}async keys(){return Ke.brandCheck(this,e),[...this.#e.keys()]}};Object.defineProperties(xl.prototype,{[Symbol.toStringTag]:{value:"CacheStorage",configurable:!0},match:ka,has:ka,open:ka,delete:ka,keys:ka});sS.exports={CacheStorage:xl}});var cS=v((Kie,AS)=>{"use strict";AS.exports={maxAttributeValueSize:1024,maxNameValuePairSize:4096}});var kg=v((Xie,fS)=>{"use strict";function y5(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 wg(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 bg(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 uS(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 lS(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122}function Q5(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&&!lS(n))throw new Error("Invalid cookie domain");if(!lS(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 w5=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],b5=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],vl=Array(61).fill(0).map((e,t)=>t.toString().padStart(2,"0"));function dS(e){return typeof e=="number"&&(e=new Date(e)),`${w5[e.getUTCDay()]}, ${vl[e.getUTCDate()]} ${b5[e.getUTCMonth()]} ${e.getUTCFullYear()} ${vl[e.getUTCHours()]}:${vl[e.getUTCMinutes()]}:${vl[e.getUTCSeconds()]} GMT`}function k5(e){if(e<0)throw new Error("Invalid cookie max-age")}function S5(e){if(e.name.length===0)return null;wg(e.name),bg(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"&&(k5(e.maxAge),t.push(`Max-Age=${e.maxAge}`)),e.domain&&(Q5(e.domain),t.push(`Domain=${e.domain}`)),e.path&&(uS(e.path),t.push(`Path=${e.path}`)),e.expires&&e.expires.toString()!=="Invalid Date"&&t.push(`Expires=${dS(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("=");wg(i),bg(s),t.push(`${i}=${s}`)}return t.join("; ")}fS.exports={isCTLExcludingHtab:y5,validateCookieName:wg,validateCookiePath:uS,validateCookieValue:bg,toIMFDate:dS,stringify:S5}});var hS=v((Zie,pS)=>{"use strict";var{maxNameValuePairSize:x5,maxAttributeValueSize:v5}=cS(),{isCTLExcludingHtab:N5}=kg(),{collectASequenceOfCodePointsFast:Nl}=at(),R5=x("node:assert");function D5(e){if(N5(e))return null;let t="",r="",n="",o="";if(e.includes(";")){let i={position:0};t=Nl(";",e,i),r=e.slice(i.position)}else t=e;if(!t.includes("="))o=t;else{let i={position:0};n=Nl("=",t,i),o=t.slice(i.position+1)}return n=n.trim(),o=o.trim(),n.length+o.length>x5?null:{name:n,value:o,...Mi(r)}}function Mi(e,t={}){if(e.length===0)return t;R5(e[0]===";"),e=e.slice(1);let r="";e.includes(";")?(r=Nl(";",e,{position:0}),e=e.slice(r.length)):(r=e,e="");let n="",o="";if(r.includes("=")){let s={position:0};n=Nl("=",r,s),o=r.slice(s.position+1)}else n=r;if(n=n.trim(),o=o.trim(),o.length>v5)return Mi(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 Mi(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 Mi(e,t)}pS.exports={parseSetCookie:D5,parseUnparsedAttributes:Mi}});var ES=v((ese,mS)=>{"use strict";var{parseSetCookie:F5}=hS(),{stringify:M5}=kg(),{webidl:oe}=$e(),{Headers:Rl}=Eo();function T5(e){oe.argumentLengthCheck(arguments,1,"getCookies"),oe.brandCheck(e,Rl,{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 U5(e,t,r){oe.brandCheck(e,Rl,{strict:!1});let n="deleteCookie";oe.argumentLengthCheck(arguments,2,n),t=oe.converters.DOMString(t,n,"name"),r=oe.converters.DeleteCookieAttributes(r),gS(e,{name:t,value:"",expires:new Date(0),...r})}function L5(e){oe.argumentLengthCheck(arguments,1,"getSetCookies"),oe.brandCheck(e,Rl,{strict:!1});let t=e.getSetCookie();return t?t.map(r=>F5(r)):[]}function gS(e,t){oe.argumentLengthCheck(arguments,2,"setCookie"),oe.brandCheck(e,Rl,{strict:!1}),t=oe.converters.Cookie(t);let r=M5(t);r&&e.append("Set-Cookie",r)}oe.converters.DeleteCookieAttributes=oe.dictionaryConverter([{converter:oe.nullableConverter(oe.converters.DOMString),key:"path",defaultValue:()=>null},{converter:oe.nullableConverter(oe.converters.DOMString),key:"domain",defaultValue:()=>null}]);oe.converters.Cookie=oe.dictionaryConverter([{converter:oe.converters.DOMString,key:"name"},{converter:oe.converters.DOMString,key:"value"},{converter:oe.nullableConverter(e=>typeof e=="number"?oe.converters["unsigned long long"](e):new Date(e)),key:"expires",defaultValue:()=>null},{converter:oe.nullableConverter(oe.converters["long long"]),key:"maxAge",defaultValue:()=>null},{converter:oe.nullableConverter(oe.converters.DOMString),key:"domain",defaultValue:()=>null},{converter:oe.nullableConverter(oe.converters.DOMString),key:"path",defaultValue:()=>null},{converter:oe.nullableConverter(oe.converters.boolean),key:"secure",defaultValue:()=>null},{converter:oe.nullableConverter(oe.converters.boolean),key:"httpOnly",defaultValue:()=>null},{converter:oe.converters.USVString,key:"sameSite",allowedValues:["Strict","Lax","None"]},{converter:oe.sequenceConverter(oe.converters.DOMString),key:"unparsed",defaultValue:()=>new Array(0)}]);mS.exports={getCookies:T5,deleteCookie:U5,getSetCookies:L5,setCookie:gS}});var Ui=v((tse,CS)=>{"use strict";var{webidl:P}=$e(),{kEnumerableProperty:ut}=ee(),{kConstruct:IS}=ke(),{MessagePort:_5}=x("node:worker_threads"),Ti=class e extends Event{#e;constructor(t,r={}){if(t===IS){super(arguments[1],arguments[2]),P.util.markAsUncloneable(this);return}let n="MessageEvent constructor";P.argumentLengthCheck(arguments,1,n),t=P.converters.DOMString(t,n,"type"),r=P.converters.MessageEventInit(r,n,"eventInitDict"),super(t,r),this.#e=r,P.util.markAsUncloneable(this)}get data(){return P.brandCheck(this,e),this.#e.data}get origin(){return P.brandCheck(this,e),this.#e.origin}get lastEventId(){return P.brandCheck(this,e),this.#e.lastEventId}get source(){return P.brandCheck(this,e),this.#e.source}get ports(){return P.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 P.brandCheck(this,e),P.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(IS,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:P5}=Ti;delete Ti.createFastMessageEvent;var Dl=class e extends Event{#e;constructor(t,r={}){let n="CloseEvent constructor";P.argumentLengthCheck(arguments,1,n),t=P.converters.DOMString(t,n,"type"),r=P.converters.CloseEventInit(r),super(t,r),this.#e=r,P.util.markAsUncloneable(this)}get wasClean(){return P.brandCheck(this,e),this.#e.wasClean}get code(){return P.brandCheck(this,e),this.#e.code}get reason(){return P.brandCheck(this,e),this.#e.reason}},Fl=class e extends Event{#e;constructor(t,r){let n="ErrorEvent constructor";P.argumentLengthCheck(arguments,1,n),super(t,r),P.util.markAsUncloneable(this),t=P.converters.DOMString(t,n,"type"),r=P.converters.ErrorEventInit(r??{}),this.#e=r}get message(){return P.brandCheck(this,e),this.#e.message}get filename(){return P.brandCheck(this,e),this.#e.filename}get lineno(){return P.brandCheck(this,e),this.#e.lineno}get colno(){return P.brandCheck(this,e),this.#e.colno}get error(){return P.brandCheck(this,e),this.#e.error}};Object.defineProperties(Ti.prototype,{[Symbol.toStringTag]:{value:"MessageEvent",configurable:!0},data:ut,origin:ut,lastEventId:ut,source:ut,ports:ut,initMessageEvent:ut});Object.defineProperties(Dl.prototype,{[Symbol.toStringTag]:{value:"CloseEvent",configurable:!0},reason:ut,code:ut,wasClean:ut});Object.defineProperties(Fl.prototype,{[Symbol.toStringTag]:{value:"ErrorEvent",configurable:!0},message:ut,filename:ut,lineno:ut,colno:ut,error:ut});P.converters.MessagePort=P.interfaceConverter(_5);P.converters["sequence<MessagePort>"]=P.sequenceConverter(P.converters.MessagePort);var Sg=[{key:"bubbles",converter:P.converters.boolean,defaultValue:()=>!1},{key:"cancelable",converter:P.converters.boolean,defaultValue:()=>!1},{key:"composed",converter:P.converters.boolean,defaultValue:()=>!1}];P.converters.MessageEventInit=P.dictionaryConverter([...Sg,{key:"data",converter:P.converters.any,defaultValue:()=>null},{key:"origin",converter:P.converters.USVString,defaultValue:()=>""},{key:"lastEventId",converter:P.converters.DOMString,defaultValue:()=>""},{key:"source",converter:P.nullableConverter(P.converters.MessagePort),defaultValue:()=>null},{key:"ports",converter:P.converters["sequence<MessagePort>"],defaultValue:()=>new Array(0)}]);P.converters.CloseEventInit=P.dictionaryConverter([...Sg,{key:"wasClean",converter:P.converters.boolean,defaultValue:()=>!1},{key:"code",converter:P.converters["unsigned short"],defaultValue:()=>0},{key:"reason",converter:P.converters.USVString,defaultValue:()=>""}]);P.converters.ErrorEventInit=P.dictionaryConverter([...Sg,{key:"message",converter:P.converters.DOMString,defaultValue:()=>""},{key:"filename",converter:P.converters.USVString,defaultValue:()=>""},{key:"lineno",converter:P.converters["unsigned long"],defaultValue:()=>0},{key:"colno",converter:P.converters["unsigned long"],defaultValue:()=>0},{key:"error",converter:P.converters.any}]);CS.exports={MessageEvent:Ti,CloseEvent:Dl,ErrorEvent:Fl,createFastMessageEvent:P5}});var wo=v((rse,BS)=>{"use strict";var O5="258EAFA5-E914-47DA-95CA-C5AB0DC85B11",q5={enumerable:!0,writable:!1,configurable:!1},H5={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},G5={NOT_SENT:0,PROCESSING:1,SENT:2},Y5={CONTINUATION:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10},V5=2**16-1,$5={INFO:0,PAYLOADLENGTH_16:2,PAYLOADLENGTH_64:3,READ_DATA:4},J5=Buffer.allocUnsafe(0),W5={string:1,typedArray:2,arrayBuffer:3,blob:4};BS.exports={uid:O5,sentCloseFrameState:G5,staticPropertyDescriptors:q5,states:H5,opcodes:Y5,maxUnsigned16Bit:V5,parserStates:$5,emptyBuffer:J5,sendHints:W5}});var Sa=v((nse,yS)=>{"use strict";yS.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 Na=v((ose,RS)=>{"use strict";var{kReadyState:xa,kController:z5,kResponse:j5,kBinaryType:K5,kWebSocketURL:X5}=Sa(),{states:va,opcodes:Qn}=wo(),{ErrorEvent:Z5,createFastMessageEvent:e3}=Ui(),{isUtf8:t3}=x("node:buffer"),{collectASequenceOfCodePointsFast:r3,removeHTTPWhitespace:QS}=at();function n3(e){return e[xa]===va.CONNECTING}function o3(e){return e[xa]===va.OPEN}function i3(e){return e[xa]===va.CLOSING}function s3(e){return e[xa]===va.CLOSED}function xg(e,t,r=(o,i)=>new Event(o,i),n={}){let o=r(e,n);t.dispatchEvent(o)}function a3(e,t,r){if(e[xa]!==va.OPEN)return;let n;if(t===Qn.TEXT)try{n=NS(r)}catch{bS(e,"Received invalid UTF-8 in text frame.");return}else t===Qn.BINARY&&(e[K5]==="blob"?n=new Blob([r]):n=A3(r));xg("message",e,e3,{origin:e[X5].origin,data:n})}function A3(e){return e.byteLength===e.buffer.byteLength?e.buffer:e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}function c3(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 l3(e){return e>=1e3&&e<1015?e!==1004&&e!==1005&&e!==1006:e>=3e3&&e<=4999}function bS(e,t){let{[z5]:r,[j5]:n}=e;r.abort(),n?.socket&&!n.socket.destroyed&&n.socket.destroy(),t&&xg("error",e,(o,i)=>new Z5(o,i),{error:new Error(t),message:t})}function kS(e){return e===Qn.CLOSE||e===Qn.PING||e===Qn.PONG}function SS(e){return e===Qn.CONTINUATION}function xS(e){return e===Qn.TEXT||e===Qn.BINARY}function u3(e){return xS(e)||SS(e)||kS(e)}function d3(e){let t={position:0},r=new Map;for(;t.position<e.length;){let n=r3(";",e,t),[o,i=""]=n.split("=");r.set(QS(o,!0,!1),QS(i,!1,!0)),t.position++}return r}function f3(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 vS=typeof process.versions.icu=="string",wS=vS?new TextDecoder("utf-8",{fatal:!0}):void 0,NS=vS?wS.decode.bind(wS):function(e){if(t3(e))return e.toString("utf-8");throw new TypeError("Invalid utf-8 received.")};RS.exports={isConnecting:n3,isEstablished:o3,isClosing:i3,isClosed:s3,fireEvent:xg,isValidSubprotocol:c3,isValidStatusCode:l3,failWebsocketConnection:bS,websocketMessageReceived:a3,utf8Decode:NS,isControlFrame:kS,isContinuationFrame:SS,isTextBinaryFrame:xS,isValidOpcode:u3,parseExtensions:d3,isValidClientWindowBits:f3}});var Tl=v((ise,DS)=>{"use strict";var{maxUnsigned16Bit:p3}=wo(),Ml=16386,vg,Ra=null,Li=Ml;try{vg=x("node:crypto")}catch{vg={randomFillSync:function(t,r,n){for(let o=0;o<t.length;++o)t[o]=Math.random()*255|0;return t}}}function h3(){return Li===Ml&&(Li=0,vg.randomFillSync(Ra??=Buffer.allocUnsafe(Ml),0,Ml)),[Ra[Li++],Ra[Li++],Ra[Li++],Ra[Li++]]}var Ng=class{constructor(t){this.frameData=t}createFrame(t){let r=this.frameData,n=h3(),o=r?.byteLength??0,i=o,s=6;o>p3?(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}};DS.exports={WebsocketFrameSend:Ng}});var Dg=v((sse,PS)=>{"use strict";var{uid:g3,states:Da,sentCloseFrameState:Ul,emptyBuffer:m3,opcodes:E3}=wo(),{kReadyState:Fa,kSentClose:Ll,kByteParser:MS,kReceivedClose:FS,kResponse:TS}=Sa(),{fireEvent:I3,failWebsocketConnection:wn,isClosing:C3,isClosed:B3,isEstablished:y3,parseExtensions:Q3}=Na(),{channels:_i}=Wo(),{CloseEvent:w3}=Ui(),{makeRequest:b3}=Ni(),{fetching:k3}=Qa(),{Headers:S3,getHeadersList:x3}=Eo(),{getDecodeSplit:v3}=Bt(),{WebsocketFrameSend:N3}=Tl(),Rg;try{Rg=x("node:crypto")}catch{}function R3(e,t,r,n,o,i){let s=e;s.protocol=e.protocol==="ws:"?"http:":"https:";let a=b3({urlList:[s],client:r,serviceWorkers:"none",referrer:"no-referrer",mode:"websocket",credentials:"include",cache:"no-store",redirect:"error"});if(i.headers){let u=x3(new S3(i.headers));a.headersList=u}let A=Rg.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"),k3({request:a,useParallelQueue:!0,dispatcher:i.dispatcher,processResponse(u){if(u.type==="error"||u.status!==101){wn(n,"Received network error or non-101 status code.");return}if(t.length!==0&&!u.headersList.get("Sec-WebSocket-Protocol")){wn(n,"Server did not respond with sent protocols.");return}if(u.headersList.get("Upgrade")?.toLowerCase()!=="websocket"){wn(n,'Server did not set Upgrade header to "websocket".');return}if(u.headersList.get("Connection")?.toLowerCase()!=="upgrade"){wn(n,'Server did not set Connection header to "upgrade".');return}let d=u.headersList.get("Sec-WebSocket-Accept"),f=Rg.createHash("sha1").update(A+g3).digest("base64");if(d!==f){wn(n,"Incorrect hash received in Sec-WebSocket-Accept header.");return}let p=u.headersList.get("Sec-WebSocket-Extensions"),h;if(p!==null&&(h=Q3(p),!h.has("permessage-deflate"))){wn(n,"Sec-WebSocket-Extensions header does not match.");return}let g=u.headersList.get("Sec-WebSocket-Protocol");if(g!==null&&!v3("sec-websocket-protocol",a.headersList).includes(g)){wn(n,"Protocol was not set in the opening handshake.");return}u.socket.on("data",US),u.socket.on("close",LS),u.socket.on("error",_S),_i.open.hasSubscribers&&_i.open.publish({address:u.socket.address(),protocol:g,extensions:p}),o(u,h)}})}function D3(e,t,r,n){if(!(C3(e)||B3(e)))if(!y3(e))wn(e,"Connection was closed before it was established."),e[Fa]=Da.CLOSING;else if(e[Ll]===Ul.NOT_SENT){e[Ll]=Ul.PROCESSING;let o=new N3;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=m3,e[TS].socket.write(o.createFrame(E3.CLOSE)),e[Ll]=Ul.SENT,e[Fa]=Da.CLOSING}else e[Fa]=Da.CLOSING}function US(e){this.ws[MS].write(e)||this.pause()}function LS(){let{ws:e}=this,{[TS]:t}=e;t.socket.off("data",US),t.socket.off("close",LS),t.socket.off("error",_S);let r=e[Ll]===Ul.SENT&&e[FS],n=1005,o="",i=e[MS].closingInfo;i&&!i.error?(n=i.code??1005,o=i.reason):e[FS]||(n=1006),e[Fa]=Da.CLOSED,I3("close",e,(s,a)=>new w3(s,a),{wasClean:r,code:n,reason:o}),_i.close.hasSubscribers&&_i.close.publish({websocket:e,code:n,reason:o})}function _S(e){let{ws:t}=this;t[Fa]=Da.CLOSING,_i.socketError.hasSubscribers&&_i.socketError.publish(e),this.destroy()}PS.exports={establishWebSocketConnection:R3,closeWebSocketConnection:D3}});var qS=v((ase,OS)=>{"use strict";var{createInflateRaw:F3,Z_DEFAULT_WINDOWBITS:M3}=x("node:zlib"),{isValidClientWindowBits:T3}=Na(),{MessageSizeExceededError:U3}=ae(),L3=Buffer.from([0,0,255,255]),_l=Symbol("kBuffer"),Ma=Symbol("kLength"),Fg=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=M3;if(this.#t.serverMaxWindowBits){if(!T3(this.#t.serverMaxWindowBits)){n(new Error("Invalid server_max_window_bits"));return}o=Number.parseInt(this.#t.serverMaxWindowBits)}try{this.#e=F3({windowBits:o})}catch(i){n(i);return}this.#e[_l]=[],this.#e[Ma]=0,this.#e.on("data",i=>{if(this.#e[Ma]+=i.length,this.#r>0&&this.#e[Ma]>this.#r){n(new U3),this.#e.removeAllListeners(),this.#e=null;return}this.#e[_l].push(i)}),this.#e.on("error",i=>{this.#e=null,n(i)})}this.#e.write(t),r&&this.#e.write(L3),this.#e.flush(()=>{if(!this.#e)return;let o=Buffer.concat(this.#e[_l],this.#e[Ma]);this.#e[_l].length=0,this.#e[Ma]=0,n(null,o)})}};OS.exports={PerMessageDeflate:Fg}});var KS=v((Ase,jS)=>{"use strict";var{Writable:_3}=x("node:stream"),P3=x("node:assert"),{parserStates:dt,opcodes:Pi,states:O3,emptyBuffer:HS,sentCloseFrameState:GS}=wo(),{kReadyState:q3,kSentClose:YS,kResponse:VS,kReceivedClose:$S}=Sa(),{channels:Pl}=Wo(),{isValidStatusCode:H3,isValidOpcode:G3,failWebsocketConnection:vt,websocketMessageReceived:JS,utf8Decode:Y3,isControlFrame:Mg,isTextBinaryFrame:Tg,isContinuationFrame:V3}=Na(),{WebsocketFrameSend:WS}=Tl(),{closeWebSocketConnection:zS}=Dg(),{PerMessageDeflate:$3}=qS(),{MessageSizeExceededError:Ug}=ae();function Ta(e,t,r){zS(e,t,r,Buffer.byteLength(r)),vt(e,r)}var Lg=class extends _3{#e=[];#t=0;#r=0;#i=!1;#o=dt.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 $3(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&&!Mg(this.#n.opcode)&&this.#n.payloadLength+this.#t>this.#A?(Ta(this.ws,1009,"Payload size exceeds maximum allowed size"),!1):!0}run(t){for(;this.#i;)if(this.#o===dt.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!==Pi.CONTINUATION,a=r[1]&127,A=r[0]&64,c=r[0]&32,l=r[0]&16;if(!G3(o))return vt(this.ws,"Invalid opcode received"),t();if(i)return vt(this.ws,"Frame cannot be masked"),t();if(A!==0&&!this.#a.has("permessage-deflate")){vt(this.ws,"Expected RSV1 to be clear.");return}if(c!==0||l!==0){vt(this.ws,"RSV1, RSV2, RSV3 must be clear");return}if(s&&!Tg(o)){vt(this.ws,"Invalid frame type was fragmented.");return}if(Tg(o)&&this.#s.length>0){vt(this.ws,"Expected continuation frame");return}if(this.#n.fragmented&&s){vt(this.ws,"Fragmented frame exceeded 125 bytes.");return}if((a>125||s)&&Mg(o)){vt(this.ws,"Control frame either too large or fragmented");return}if(V3(o)&&this.#s.length===0&&!this.#n.compressed){vt(this.ws,"Unexpected continuation frame");return}if(a<=125){if(this.#n.payloadLength=a,this.#o=dt.READ_DATA,!this.#l())return}else a===126?this.#o=dt.PAYLOADLENGTH_16:a===127&&(this.#o=dt.PAYLOADLENGTH_64);Tg(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===dt.PAYLOADLENGTH_16){if(this.#r<2)return t();let r=this.consume(2);if(this.#n.payloadLength=r.readUInt16BE(0),this.#o=dt.READ_DATA,!this.#l())return}else if(this.#o===dt.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){vt(this.ws,"Received payload length > 2^31 bytes.");return}if(this.#n.payloadLength=o,this.#o=dt.READ_DATA,!this.#l())return}else if(this.#o===dt.READ_DATA){if(this.#r<this.#n.payloadLength)return t();let r=this.consume(this.#n.payloadLength);if(Mg(this.#n.opcode))this.#i=this.parseControlFrame(r),this.#o=dt.INFO;else if(this.#n.compressed){this.#a.get("permessage-deflate").decompress(r,this.#n.fin,(n,o)=>{if(n){let i=n instanceof Ug?1009:1007;Ta(this.ws,i,n.message);return}if(this.writeFragments(o)){if(this.#A>0&&this.#t>this.#A){Ta(this.ws,1009,new Ug().message);return}if(!this.#n.fin){this.#o=dt.INFO,this.#i=!0,this.run(t);return}JS(this.ws,this.#n.binaryType,this.consumeFragments()),this.#i=!0,this.#o=dt.INFO,this.run(t)}}),this.#i=!1;break}else{if(!this.writeFragments(r))return;if(this.#A>0&&this.#t>this.#A){Ta(this.ws,1009,new Ug().message);return}!this.#n.fragmented&&this.#n.fin&&JS(this.ws,this.#n.binaryType,this.consumeFragments()),this.#o=dt.INFO}}}consume(t){if(t>this.#r)throw new Error("Called consume() before buffers satiated.");if(t===0)return HS;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?(Ta(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){P3(t.length!==1);let r;if(t.length>=2&&(r=t.readUInt16BE(0)),r!==void 0&&!H3(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=Y3(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===Pi.CLOSE){if(n===1)return vt(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 zS(this.ws,o,i,i.length),vt(this.ws,i),!1}if(this.ws[YS]!==GS.SENT){let o=HS;this.#n.closeInfo.code&&(o=Buffer.allocUnsafe(2),o.writeUInt16BE(this.#n.closeInfo.code,0));let i=new WS(o);this.ws[VS].socket.write(i.createFrame(Pi.CLOSE),s=>{s||(this.ws[YS]=GS.SENT)})}return this.ws[q3]=O3.CLOSING,this.ws[$S]=!0,!1}else if(r===Pi.PING){if(!this.ws[$S]){let o=new WS(t);this.ws[VS].socket.write(o.createFrame(Pi.PONG)),Pl.ping.hasSubscribers&&Pl.ping.publish({payload:t})}}else r===Pi.PONG&&Pl.pong.hasSubscribers&&Pl.pong.publish({payload:t});return!0}get closingInfo(){return this.#n.closeInfo}};jS.exports={ByteParser:Lg}});var rx=v((cse,tx)=>{"use strict";var{WebsocketFrameSend:J3}=Tl(),{opcodes:XS,sendHints:Oi}=wo(),W3=Gp(),ZS=Buffer[Symbol.species],_g=class{#e=new W3;#t=!1;#r;constructor(t){this.#r=t}add(t,r,n){if(n!==Oi.blob){let i=ex(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=ex(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 ex(e,t){return new J3(z3(e,t)).createFrame(t===Oi.string?XS.TEXT:XS.BINARY)}function z3(e,t){switch(t){case Oi.string:return Buffer.from(e);case Oi.arrayBuffer:case Oi.blob:return new ZS(e);case Oi.typedArray:return new ZS(e.buffer,e.byteOffset,e.byteLength)}}tx.exports={SendQueue:_g}});var dx=v((lse,ux)=>{"use strict";var{webidl:W}=$e(),{URLSerializer:j3}=at(),{environmentSettingsObject:nx}=Bt(),{staticPropertyDescriptors:bn,states:Ua,sentCloseFrameState:K3,sendHints:Ol}=wo(),{kWebSocketURL:ox,kReadyState:Pg,kController:ix,kBinaryType:ql,kResponse:sx,kSentClose:X3,kByteParser:Z3}=Sa(),{isConnecting:e4,isEstablished:t4,isClosing:r4,isValidSubprotocol:n4,fireEvent:ax}=Na(),{establishWebSocketConnection:o4,closeWebSocketConnection:Ax}=Dg(),{ByteParser:i4}=KS(),{kEnumerableProperty:Ht,isBlobLike:cx}=ee(),{getGlobalDispatcher:s4}=rl(),{types:lx}=x("node:util"),{ErrorEvent:a4,CloseEvent:A4}=Ui(),{SendQueue:c4}=rx(),Nt=class e extends EventTarget{#e={open:null,error:null,close:null,message:null};#t=0;#r="";#i="";#o;constructor(t,r=[]){super(),W.util.markAsUncloneable(this);let n="WebSocket constructor";W.argumentLengthCheck(arguments,1,n);let o=W.converters["DOMString or sequence<DOMString> or WebSocketInit"](r,n,"options");t=W.converters.USVString(t,n,"url"),r=o.protocols;let i=nx.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=>n4(A)))throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");this[ox]=new URL(s.href);let a=nx.settingsObject;this[ix]=o4(s,r,a,this,(A,c)=>this.#n(A,c),o),this[Pg]=e.CONNECTING,this[X3]=K3.NOT_SENT,this[ql]="blob"}close(t=void 0,r=void 0){W.brandCheck(this,e);let n="WebSocket.close";if(t!==void 0&&(t=W.converters["unsigned short"](t,n,"code",{clamp:!0})),r!==void 0&&(r=W.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");Ax(this,t,r,o)}send(t){W.brandCheck(this,e);let r="WebSocket.send";if(W.argumentLengthCheck(arguments,1,r),t=W.converters.WebSocketSendData(t,r,"data"),e4(this))throw new DOMException("Sent before connected.","InvalidStateError");if(!(!t4(this)||r4(this)))if(typeof t=="string"){let n=Buffer.byteLength(t);this.#t+=n,this.#o.add(t,()=>{this.#t-=n},Ol.string)}else lx.isArrayBuffer(t)?(this.#t+=t.byteLength,this.#o.add(t,()=>{this.#t-=t.byteLength},Ol.arrayBuffer)):ArrayBuffer.isView(t)?(this.#t+=t.byteLength,this.#o.add(t,()=>{this.#t-=t.byteLength},Ol.typedArray)):cx(t)&&(this.#t+=t.size,this.#o.add(t,()=>{this.#t-=t.size},Ol.blob))}get readyState(){return W.brandCheck(this,e),this[Pg]}get bufferedAmount(){return W.brandCheck(this,e),this.#t}get url(){return W.brandCheck(this,e),j3(this[ox])}get extensions(){return W.brandCheck(this,e),this.#i}get protocol(){return W.brandCheck(this,e),this.#r}get onopen(){return W.brandCheck(this,e),this.#e.open}set onopen(t){W.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 W.brandCheck(this,e),this.#e.error}set onerror(t){W.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 W.brandCheck(this,e),this.#e.close}set onclose(t){W.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 W.brandCheck(this,e),this.#e.message}set onmessage(t){W.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 W.brandCheck(this,e),this[ql]}set binaryType(t){W.brandCheck(this,e),t!=="blob"&&t!=="arraybuffer"?this[ql]="blob":this[ql]=t}#n(t,r){this[sx]=t;let n=this[ix]?.dispatcher?.webSocketOptions,o=n?.maxFragments,i=n?.maxPayloadSize,s=new i4(this,r,{maxFragments:o,maxPayloadSize:i});s.on("drain",l4),s.on("error",u4.bind(this)),t.socket.ws=this,this[Z3]=s,this.#o=new c4(t.socket),this[Pg]=Ua.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),ax("open",this)}};Nt.CONNECTING=Nt.prototype.CONNECTING=Ua.CONNECTING;Nt.OPEN=Nt.prototype.OPEN=Ua.OPEN;Nt.CLOSING=Nt.prototype.CLOSING=Ua.CLOSING;Nt.CLOSED=Nt.prototype.CLOSED=Ua.CLOSED;Object.defineProperties(Nt.prototype,{CONNECTING:bn,OPEN:bn,CLOSING:bn,CLOSED:bn,url:Ht,readyState:Ht,bufferedAmount:Ht,onopen:Ht,onerror:Ht,onclose:Ht,close:Ht,onmessage:Ht,binaryType:Ht,send:Ht,extensions:Ht,protocol:Ht,[Symbol.toStringTag]:{value:"WebSocket",writable:!1,enumerable:!1,configurable:!0}});Object.defineProperties(Nt,{CONNECTING:bn,OPEN:bn,CLOSING:bn,CLOSED:bn});W.converters["sequence<DOMString>"]=W.sequenceConverter(W.converters.DOMString);W.converters["DOMString or sequence<DOMString>"]=function(e,t,r){return W.util.Type(e)==="Object"&&Symbol.iterator in e?W.converters["sequence<DOMString>"](e):W.converters.DOMString(e,t,r)};W.converters.WebSocketInit=W.dictionaryConverter([{key:"protocols",converter:W.converters["DOMString or sequence<DOMString>"],defaultValue:()=>new Array(0)},{key:"dispatcher",converter:W.converters.any,defaultValue:()=>s4()},{key:"headers",converter:W.nullableConverter(W.converters.HeadersInit)}]);W.converters["DOMString or sequence<DOMString> or WebSocketInit"]=function(e){return W.util.Type(e)==="Object"&&!(Symbol.iterator in e)?W.converters.WebSocketInit(e):{protocols:W.converters["DOMString or sequence<DOMString>"](e)}};W.converters.WebSocketSendData=function(e){if(W.util.Type(e)==="Object"){if(cx(e))return W.converters.Blob(e,{strict:!1});if(ArrayBuffer.isView(e)||lx.isArrayBuffer(e))return W.converters.BufferSource(e)}return W.converters.USVString(e)};function l4(){this.ws[sx].socket.resume()}function u4(e){let t,r;e instanceof A4?(t=e.reason,r=e.code):t=e.message,ax("error",this,()=>new a4("error",{error:e,message:t})),Ax(this,r)}ux.exports={WebSocket:Nt}});var Og=v((use,fx)=>{"use strict";function d4(e){return e.indexOf("\0")===-1}function f4(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 p4(e){return new Promise(t=>{setTimeout(t,e).unref()})}fx.exports={isValidLastEventId:d4,isASCIINumber:f4,delay:p4}});var mx=v((dse,gx)=>{"use strict";var{Transform:h4}=x("node:stream"),{isASCIINumber:px,isValidLastEventId:hx}=Og(),en=[239,187,191],qg=10,Hl=13,g4=58,m4=32,Hg=class extends h4{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]===en[0]){n();return}this.checkBOM=!1,n();return;case 2:if(this.buffer[0]===en[0]&&this.buffer[1]===en[1]){n();return}this.checkBOM=!1;break;case 3:if(this.buffer[0]===en[0]&&this.buffer[1]===en[1]&&this.buffer[2]===en[2]){this.buffer=Buffer.alloc(0),this.checkBOM=!1,n();return}this.checkBOM=!1;break;default:this.buffer[0]===en[0]&&this.buffer[1]===en[1]&&this.buffer[2]===en[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]===qg){this.buffer=this.buffer.subarray(this.pos+1),this.pos=0,this.crlfCheck=!1;continue}this.crlfCheck=!1}if(this.buffer[this.pos]===qg||this.buffer[this.pos]===Hl){this.buffer[this.pos]===Hl&&(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]===qg||this.buffer[this.pos]===Hl){this.buffer[this.pos]===Hl&&(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(g4);if(n===0)return;let o="",i="";if(n!==-1){o=t.subarray(0,n).toString("utf8");let s=n+1;t[s]===m4&&++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":px(i)&&(r[o]=i);break;case"id":hx(i)&&(r[o]=i);break;case"event":i.length>0&&(r[o]=i);break}}processEvent(t){t.retry&&px(t.retry)&&(this.state.reconnectionTime=parseInt(t.retry,10)),t.id&&hx(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}}};gx.exports={EventSourceStream:Hg}});var bx=v((fse,wx)=>{"use strict";var{pipeline:E4}=x("node:stream"),{fetching:I4}=Qa(),{makeRequest:C4}=Ni(),{webidl:tn}=$e(),{EventSourceStream:B4}=mx(),{parseMIMEType:y4}=at(),{createFastMessageEvent:Q4}=Ui(),{isNetworkError:Ex}=Ba(),{delay:w4}=Og(),{kEnumerableProperty:bo}=ee(),{environmentSettingsObject:Ix}=Bt(),Cx=!1,Bx=3e3,La=0,yx=1,_a=2,b4="anonymous",k4="use-credentials",qi=class e extends EventTarget{#e={open:null,error:null,message:null};#t=null;#r=!1;#i=La;#o=null;#n=null;#s;#a;constructor(t,r={}){super(),tn.util.markAsUncloneable(this);let n="EventSource constructor";tn.argumentLengthCheck(arguments,1,n),Cx||(Cx=!0,process.emitWarning("EventSource is experimental, expect them to change at any time.",{code:"UNDICI-ES"})),t=tn.converters.USVString(t,n,"url"),r=tn.converters.EventSourceInitDict(r,n,"eventSourceInitDict"),this.#s=r.dispatcher,this.#a={lastEventId:"",reconnectionTime:Bx};let o=Ix,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=b4;r.withCredentials&&(s=k4,this.#r=!0);let a={redirect:"follow",keepalive:!0,mode:"cors",credentials:s==="anonymous"?"same-origin":"omit",referrer:"no-referrer"};a.client=Ix.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=C4(a),this.#c()}get readyState(){return this.#i}get url(){return this.#t}get withCredentials(){return this.#r}#c(){if(this.#i===_a)return;this.#i=La;let t={request:this.#o,dispatcher:this.#s},r=n=>{Ex(n)&&(this.dispatchEvent(new Event("error")),this.close()),this.#A()};t.processResponseEndOfBody=r,t.processResponse=n=>{if(Ex(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?y4(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=yx,this.dispatchEvent(new Event("open")),this.#a.origin=n.urlList[n.urlList.length-1].origin;let a=new B4({eventSourceSettings:this.#a,push:A=>{this.dispatchEvent(Q4(A.type,A.options))}});E4(n.body.stream,a,A=>{A?.aborted===!1&&(this.close(),this.dispatchEvent(new Event("error")))})},this.#n=I4(t)}async#A(){this.#i!==_a&&(this.#i=La,this.dispatchEvent(new Event("error")),await w4(this.#a.reconnectionTime),this.#i===La&&(this.#a.lastEventId.length&&this.#o.headersList.set("last-event-id",this.#a.lastEventId,!0),this.#c()))}close(){tn.brandCheck(this,e),this.#i!==_a&&(this.#i=_a,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}},Qx={CONNECTING:{__proto__:null,configurable:!1,enumerable:!0,value:La,writable:!1},OPEN:{__proto__:null,configurable:!1,enumerable:!0,value:yx,writable:!1},CLOSED:{__proto__:null,configurable:!1,enumerable:!0,value:_a,writable:!1}};Object.defineProperties(qi,Qx);Object.defineProperties(qi.prototype,Qx);Object.defineProperties(qi.prototype,{close:bo,onerror:bo,onmessage:bo,onopen:bo,readyState:bo,url:bo,withCredentials:bo});tn.converters.EventSourceInitDict=tn.dictionaryConverter([{key:"withCredentials",converter:tn.converters.boolean,defaultValue:()=>!1},{key:"dispatcher",converter:tn.converters.any}]);wx.exports={EventSource:qi,defaultReconnectionTime:Bx}});var vx=v((pse,J)=>{"use strict";var S4=pi(),kx=Hs(),x4=hi(),v4=QQ(),N4=gi(),R4=ch(),D4=JQ(),F4=ew(),Sx=ae(),Yl=ee(),{InvalidArgumentError:Gl}=Sx,Hi=Ow(),M4=Ys(),T4=Yh(),U4=yb(),L4=Jh(),_4=Rh(),P4=$c(),{getGlobalDispatcher:xx,setGlobalDispatcher:O4}=rl(),q4=nl(),H4=Tc(),G4=Uc();Object.assign(kx.prototype,Hi);J.exports.Dispatcher=kx;J.exports.Client=S4;J.exports.Pool=x4;J.exports.BalancedPool=v4;J.exports.Agent=N4;J.exports.ProxyAgent=R4;J.exports.EnvHttpProxyAgent=D4;J.exports.RetryAgent=F4;J.exports.RetryHandler=P4;J.exports.DecoratorHandler=q4;J.exports.RedirectHandler=H4;J.exports.createRedirectInterceptor=G4;J.exports.interceptors={redirect:vb(),retry:Rb(),dump:Fb(),dns:Ub()};J.exports.buildConnector=M4;J.exports.errors=Sx;J.exports.util={parseHeaders:Yl.parseHeaders,headerNameToString:Yl.headerNameToString};function Pa(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 Gl("invalid url");if(r!=null&&typeof r!="object")throw new Gl("invalid opts");if(r&&r.path!=null){if(typeof r.path!="string")throw new Gl("invalid opts.path");let s=r.path;r.path.startsWith("/")||(s=`/${s}`),t=new URL(Yl.parseOrigin(t).origin+s)}else r||(r=typeof t=="object"?t:{}),t=Yl.parseURL(t);let{agent:o,dispatcher:i=xx()}=r;if(o)throw new Gl("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)}}J.exports.setGlobalDispatcher=O4;J.exports.getGlobalDispatcher=xx;var Y4=Qa().fetch;J.exports.fetch=async function(t,r=void 0){try{return await Y4(t,r)}catch(n){throw n&&typeof n=="object"&&Error.captureStackTrace(n),n}};J.exports.Headers=Eo().Headers;J.exports.Response=Ba().Response;J.exports.Request=Ni().Request;J.exports.FormData=Ks().FormData;J.exports.File=globalThis.File??x("node:buffer").File;J.exports.FileReader=Xk().FileReader;var{setGlobalOrigin:V4,getGlobalOrigin:$4}=lp();J.exports.setGlobalOrigin=V4;J.exports.getGlobalOrigin=$4;var{CacheStorage:J4}=aS(),{kConstruct:W4}=wl();J.exports.caches=new J4(W4);var{deleteCookie:z4,getCookies:j4,getSetCookies:K4,setCookie:X4}=ES();J.exports.deleteCookie=z4;J.exports.getCookies=j4;J.exports.getSetCookies=K4;J.exports.setCookie=X4;var{parseMIMEType:Z4,serializeAMimeType:e9}=at();J.exports.parseMIMEType=Z4;J.exports.serializeAMimeType=e9;var{CloseEvent:t9,ErrorEvent:r9,MessageEvent:n9}=Ui();J.exports.WebSocket=dx().WebSocket;J.exports.CloseEvent=t9;J.exports.ErrorEvent=r9;J.exports.MessageEvent=n9;J.exports.request=Pa(Hi.request);J.exports.stream=Pa(Hi.stream);J.exports.pipeline=Pa(Hi.pipeline);J.exports.connect=Pa(Hi.connect);J.exports.upgrade=Pa(Hi.upgrade);J.exports.MockClient=T4;J.exports.MockPool=L4;J.exports.MockAgent=U4;J.exports.mockErrors=_4;var{EventSource:o9}=bx();J.exports.EventSource=o9});import Gi from"node:net";import i9 from"node:dns";function Vl(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 f=d.split(".").map(Number);if(f.length!==4||f.some(p=>!Number.isInteger(p)||p<0||p>255))return null;u.splice(u.length-1,1,(f[0]<<8|f[1]).toString(16),(f[2]<<8|f[3]).toString(16))}return u.some(f=>!/^[0-9a-f]{1,4}$/.test(f))?null:u.map(f=>Number.parseInt(f,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 Gg(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 Yg(e){if(Gi.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(Gi.isIPv6(e)){let t=Vl(e);if(!t)return!1;let r=Vl("::ffff:0:0");return Gg(t,r,96)?Yg([...t.slice(12)].join(".")):Gg(t,Vl("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([o,i])=>Gg(t,Vl(o),i)):!1}return!1}function a9(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(s9.has(r)||r.endsWith(".localhost")||r.endsWith(".internal"))return{ok:!1,error:`refused internal host ${r}`};let n=Gi.isIP(r);return n!==0&&!Yg(r)?{ok:!1,error:`refused private address ${r}`}:{ok:!0,url:t,host:r,isLiteralIp:n!==0}}async function Nx(e,{lookupFn:t=i9.promises.lookup}={}){let r=a9(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=>!Yg(o.address))?{ok:!1,error:`refused: ${r.host} resolves to a non-public address`}:{ok:!0,url:r.url,addresses:n}}async function Rx(){let e,t;try{let a=await Promise.resolve().then(()=>V2(vx(),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||(Gi.isIPv6(A.address)?6:4)})),i=a=>{let A=r(a);if(Gi.isIP(A))return[{address:A,family:Gi.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 s9,Dx=Br(()=>{s9=new Set(["localhost","metadata.google.internal","metadata.goog"])});import{createHash as A9}from"node:crypto";function d9(e){let t=String(e||"").toLowerCase();return Ux.includes(t)||/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(t)}function f9(e){let t={};for(let[r,n]of Object.entries(e||{}))d9(r)||(t[r]=n);return t}function p9(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 h9(e,t){return new URL(String(e)).origin===new URL(String(t)).origin}function g9(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([...Ux,...o])].sort().map(A=>`${A}=${n[A]??""}`).join(`
|
|
46
|
+
`),a=A9("sha256").update(s).digest("hex").slice(0,32);return`${e} ${t} ${a}`}function m9(e,t){let r=Number(t);return Number.isFinite(r)&&r>0?Math.min(r*1e3,Mx):Math.min(250*2**e,Mx)+Math.floor(Math.random()*100)}async function I9(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),f={...n||{}};for(let p=0;p<=Tx;p+=1){let h=await u(d,{method:r,headers:f,body:o,signal:A.signal,redirect:"manual"}),g=await h.text(),m=null;if(g)try{m=JSON.parse(g)}catch{m=null}if(u9.has(h.status)){if(r!=="GET"&&r!=="HEAD"){let I=new Error(`HTTP ${h.status} ${r} ${d} redirected non-idempotent request`);throw I.status=h.status,I.body=m??g.slice(0,300),I}if(p===Tx)throw new Error(`HTTP redirect loop for ${e}`);let C=p9(h.headers?.get?.("location"),d);if(!h9(C,d)){let I=await Nx(C,s?{lookupFn:s}:{});if(!I.ok){let Q=new Error(`HTTP redirect from ${d} ${I.error}`);throw Q.status=h.status,Q}f=f9(f),a&&I.addresses?.length&&(l||(l=await Rx()),l&&(l.pin(new URL(C).hostname,I.addresses[0].address,I.addresses[0].family),u=l.fetch))}d=C;continue}if(!h.ok){let C=new Error(`HTTP ${h.status} ${r} ${d}`);throw C.status=h.status,C.retryAfter=h.headers?.get?.("retry-after")??null,C.body=m??g.slice(0,300),C}return m??g}throw new Error(`HTTP redirect loop for ${e}`)}finally{clearTimeout(c),l&&await l.close()}}async function B(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):l9,A=t.lookupFn,c=!t.fetchImpl,l=async()=>{let h;for(let g=0;g<=a;g++)try{return await I9(e,{fetchImpl:r,method:o,headers:i,body:s,timeoutMs:n,lookupFn:A,realFetch:c})}catch(m){h=m;let C=m?.status,E=m?.name==="AbortError",I=new Set([408,425,429]),Q=C!=null?I.has(C)||c9.has(C)&&Fx.has(o):!E&&Fx.has(o);if(g===a||!Q)throw m;await E9(m9(g,m?.retryAfter))}throw h};if(!(t.dedupe!==!1&&o==="GET"&&s==null))return l();let d=g9(o,e,i),f=Vg.get(d);if(f)return f;let p=l().finally(()=>Vg.delete(d));return Vg.set(d,p),p}async function qe(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 Yi(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 c9,Fx,l9,Mx,Ux,u9,Tx,Vg,E9,_=Br(()=>{Dx();c9=new Set([408,425,429,500,502,503,504]),Fx=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),l9=2,Mx=4e3,Ux=["authorization","x-api-key","x-tensor-api-key","0x-api-key","api-key","cookie","proxy-authorization"],u9=new Set([301,302,303,307,308]),Tx=3;Vg=new Map;E9=e=>new Promise(t=>setTimeout(t,e))});function $l(e){return $g.get(Number(e))||null}function C9({key:e,chainId:t,name:r,rpcEnv:n=[]}){if(!e)throw new Error("registerChain requires a key");if(!Number.isInteger(Number(t)))throw new Error("registerChain requires a numeric chainId");let o={chainId:Number(t),name:r||e,rpcEnv:n,evm:!0};return Oa[e]=o,$g.set(o.chainId,o),o}function Jg(e,t=process.env){let r=$l(e);if(!r)return null;for(let n of r.rpcEnv){let o=(t[n]||"").trim();if(o)return o}return null}function Wg(e){return $g.has(Number(e))}var Oa,$g,zg=Br(()=>{Oa={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}},$g=new Map(Object.values(Oa).map(e=>[e.chainId,e]))});var Wl={};eB(Wl,{PUBLIC_RPC_FALLBACKS:()=>Kg,erc20Allowance:()=>tm,erc20BalanceOf:()=>Ha,resolveRpcUrl:()=>Xg,rpcBlockNumber:()=>qa,rpcCall:()=>z,rpcChainId:()=>Zg,rpcGasPrice:()=>em,rpcGetBalance:()=>ko,rpcHealth:()=>Vi,rpcHealthAll:()=>rm,transactionReceipt:()=>Ga});import{Interface as B9,getAddress as y9}from"ethers";function kn(e,t){try{return y9(e).toLowerCase()}catch{throw new Error(`${t} must be a valid EVM address`)}}function Q9(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 jg(e){return e==null?null:Number.parseInt(String(e),16)}function Xg(e,{rpcUrl:t,env:r=process.env}={}){if(t)return t;let n=Jg(e,r);return n||Kg[Number(e)]||null}function b9(e){let t=String(e||""),r=t.toLowerCase();if(t!==t.trim()||!/^[a-zA-Z0-9_]+$/.test(t)||!w9.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 z(e,t,r=[],n={}){let o=String(t||"");b9(o);let i=Xg(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 B(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 Vi(e,t={}){let r=await z(e,"eth_blockNumber",[],t),n=parseInt(r,16),o=await z(e,"eth_chainId",[],t),i=parseInt(o,16);return{ok:Number.isFinite(n)&&i===Number(e),chainId:Number(e),reportedChainId:i,blockNumber:n,name:$l(e)?.name||null}}async function qa(e,t={}){let r=await z(e,"eth_blockNumber",[],t);return parseInt(r,16)}async function Zg(e,t={}){let r=await z(e,"eth_chainId",[],t);return parseInt(r,16)}async function em(e,t={}){let r=await z(e,"eth_gasPrice",[],t);if(r==null)return null;try{return BigInt(r)}catch{return null}}async function ko(e,t,r={}){if(!t)throw new Error("rpcGetBalance requires address");let n=await z(e,"eth_getBalance",[t,"latest"],r);return{chainId:Number(e),address:t,balanceWei:BigInt(n).toString(),balanceHex:n}}async function tm(e={},t={}){let r=Number(e.chainId??t.chainId??1),n=kn(e.token||e.tokenAddress,"token"),o=kn(e.owner,"owner"),i=kn(e.spender,"spender"),s=Jl.encodeFunctionData("allowance",[o,i]),a=await z(r,"eth_call",[{to:n,data:s},e.blockTag||"latest"],t),A=Jl.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 Ha(e={},t={}){let r=Number(e.chainId??t.chainId??1),n=kn(e.token||e.tokenAddress,"token"),o=kn(e.account||e.owner||e.address,"account"),i=Jl.encodeFunctionData("balanceOf",[o]),s=await z(r,"eth_call",[{to:n,data:i},e.blockTag||"latest"],t),a=Jl.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 Ga(e={},t={}){let r=Number(e.chainId??t.chainId??1),n=Q9(e.txHash||e.hash||e.transactionHash),o=await z(r,"eth_getTransactionReceipt",[n],t);if(!o)return{ok:!1,chainId:r,txHash:n,status:"pending",receipt:null,reason:"receipt pending"};let i=jg(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?kn(e.expectedTo,"expectedTo"):null,l=o.to?kn(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?kn(o.from,"receipt.from"):null,blockNumber:jg(o.blockNumber),transactionIndex:jg(o.transactionIndex),logs:Array.isArray(o.logs)?o.logs:[],receipt:o}}async function rm(e={}){let t=e.chainIds||Object.values(Oa).map(n=>n.chainId),r={};return await Promise.all(t.map(async n=>{if(!Wg(n)&&!Kg[n]&&!Xg(n,e)){r[n]={ok:!1,error:"no rpc configured",chainId:n};return}try{r[n]=await Vi(n,e)}catch(o){r[n]={ok:!1,chainId:n,error:String(o.message||o)}}})),r}var Jl,Kg,w9,De=Br(()=>{_();zg();Jl=new B9(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);Kg={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"};w9=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/});import{readFileSync as D9}from"node:fs";import{homedir as F9}from"node:os";import{join as Kl}from"node:path";function M9(){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=F9();if(process.env.ORACLE_PUBLIC_DESKTOP==="1"){let r=(process.env.ORACLE_CONFIG_DIR||Kl(t,".config","oracle")).trim();return[e,Kl(r,"exec.env")].filter(Boolean)}return[e,Kl(t,".config","oracle","exec.env"),Kl(t,".config","mad-desk","exec.env")].filter(Boolean)}function Px(e,t,r){let n=e??process.env[t]??process.env[r];if(!String(n||"").trim())for(let o of M9())try{let i=D9(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 Ox=Br(()=>{});var qx=Br(()=>{});import{createHash as T9,createHmac as Gx,timingSafeEqual as U9}from"node:crypto";function Zl(e){return Array.isArray(e)?`[${e.map(Zl).join(",")}]`:e&&typeof e=="object"?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${Zl(e[t])}`).join(",")}}`:JSON.stringify(e??null)}function Yx(e,{required:t=!1}={}){try{return Px(e,"ORACLE_ROUTE_ATTESTATION_SECRET","MAD_ROUTE_ATTESTATION_SECRET")}catch(r){if(t)throw r;return null}}function om(e){let{signature:t,...r}=e;return r}function Vx(e,{secret:t}={}){let r=Yx(t);return r?{...e,signature:Gx("sha256",r).update(Zl(om(e))).digest("hex")}:e}function L9(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 T9("sha256").update(Buffer.from(t.slice(2),"hex")).digest("hex")}function ve(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=Yx(o);if(i){let f=Gx("sha256",i).update(Zl(om(e))).digest("hex");if(!_9(e.signature,f))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>Xl||!Number.isInteger(a)||a<0||a>Xl||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=O9(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 Vx({...om(e),calldataHash:L9(n)},{secret:o})}function _9(e,t){let r=Buffer.from(String(e??""),"utf8"),n=Buffer.from(String(t??""),"utf8");return r.length!==n.length||r.length===0?!1:U9(r,n)}function nm(e,t=0){let r=Number(e);return Number.isFinite(r)?r:t}function P9(e){let t=e==null?Xl: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,Xl)}function ft({liquidityUsd:e,priceChange5m:t=0,quoteAgeMs:r=0,crossChain:n=!1,requestedCapBps:o}={}){let i=nm(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(nm(t,0))*2),A=Math.min(40,Math.floor(Math.max(0,nm(r,0))/5e3)*5),c=Math.max(25,Math.ceil(20+s+a+A)),l=P9(o);return{mode:"auto",requiredBps:c,selectedBps:Math.min(c,l),capBps:l,executable:c<=l}}function im({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=Hx,secret:l}={}){let u=BigInt(r??0);if(u<=0n)throw new Error("auto-slippage guard requires positive quoteAmountOut");let d=ft({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 f=Number(A);if(!Number.isFinite(f))throw new Error("auto-slippage: quotedAtMs must be a finite number");let p=Math.min(3e4,Math.max(1e3,Number(c)||Hx)),h=u*BigInt(1e4-d.selectedBps),g=h/10000n;if(h%10000n!==0n&&(g+=1n),g>u&&(g=u),u>0n&&g<=0n)throw new Error(`auto-slippage: quote ${u} is too small to express a ${d.selectedBps} bps floor without rounding to zero`);let m=Number((u-g)*10000n/(u===0n?1n:u));if(m>d.capBps)throw new Error(`auto-slippage: realised floor implies ${m} bps, above cap ${d.capBps} \u2014 refusing to issue a guard weaker than advertised`);return Vx({mode:"auto",chainId:Number(e),venue:String(t||"unknown"),quoteAmountOut:u.toString(),minAmountOut:g.toString(),requiredBps:d.requiredBps,selectedBps:d.selectedBps,capBps:d.capBps,quotedAtMs:f,expiresAtMs:f+p},{secret:l})}function O9(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 fe(e,{chainId:t,venue:r,amountOut:n,liquidityUsd:o,priceChange5m:i,crossChain:s,requestedCapBps:a,quotedAtMs:A=Date.now(),ttlMs:c}={}){let l=im({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}}var Xl,Hx,ot=Br(()=>{Ox();qx();Xl=100,Hx=2e4});function _m(e){let t=String(e||"").trim();return/^0x[0-9a-fA-F]{40}$/.test(t)?t:Nn}var Nn,wu=Br(()=>{Nn="0x000000000000000000000000000000000000dEaD"});var Ru={};eB(Ru,{ACROSS_API:()=>HN,HOP_API:()=>GN,RELAY_API:()=>YN,acrossHealth:()=>Ym,acrossSuggestedFees:()=>vu,hopHealth:()=>Vm,hopQuote:()=>Nu,relayHealth:()=>$m,relayPrepare:()=>Jm,relayQuote:()=>oA});async function Ym(e={}){try{return{ok:!0,estimatedFillTimeSec:(await vu({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 vu(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||HN).replace(/\/$/,"");return B(`${A}/suggested-fees?${a}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function Vm(e={}){try{let t=await Nu({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 Nu(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=ft({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||GN).replace(/\/$/,""),l=await B(`${c}/quote?${A}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),u=l?.estimatedRecieved||l?.estimatedReceived;return u?fe(l,{chainId:Number(e.originChainId||e.chainId||VW[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 $m(e={}){try{let t=await oA({user:Nn,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 oA(e={},t={}){let{user:r=Nn,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=ft({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||YN).replace(/\/$/,""),u=await B(`${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}:fe(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 Jm(e={},t={}){let r=await oA(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:ve(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"})}var HN,GN,YN,VW,Du=Br(()=>{_();ot();wu();he();HN="https://across.to/api",GN="https://api.hop.exchange/v1",YN="https://api.relay.link",VW={ethereum:1,optimism:10,bsc:56,polygon:137,arbitrum:42161,avalanche:43114,base:8453}});he();De();import{Interface as Jx,getAddress as Va,isAddress as q9}from"ethers";_();var k9="https://api.dexscreener.com",S9=Object.freeze({1:"ethereum",10:"optimism",56:"bsc",137:"polygon",8453:"base",42161:"arbitrum",43114:"avalanche",999:"hyperevm",4663:"robinhood"}),ar=e=>String(e??"").toLowerCase(),x9=e=>Array.isArray(e)?e:e==null?[]:[e];function v9(e,t,r){let n=ar(t),o=ar(r),i=ar(e?.baseToken?.address),s=ar(e?.quoteToken?.address);return i===n&&s===o||i===o&&s===n}function N9(e){let t=Number(e?.liquidity?.usd);return Number.isFinite(t)&&t>=0?t:null}function zl(e={}){return(e.baseUrl||process.env.DEXSCREENER_API_URL||k9).replace(/\/$/,"")}async function Lx(e={}){let r=(await B(`${zl(e)}/latest/dex/search?q=USDC`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??12e3}))?.pairs?.length||0;return{ok:r>0,pairSample:r}}async function So(e,t={}){if(!e)throw new Error("tokenAddress required");return B(`${zl(t)}/latest/dex/tokens/${e}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function Ya(e,t={}){if(!e)throw new Error("query required");return B(`${zl(t)}/latest/dex/search?q=${encodeURIComponent(e)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function _x(e,t,r={}){if(!e||!t)throw new Error("chainId and pairAddress required");return B(`${zl(r)}/latest/dex/pairs/${e}/${t}`,{fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3})}async function jl({chainId:e,tokenA:t,tokenB:r,dexIds:n=[]}={},o={}){if(e==null||!t||!r)throw new Error("chainId, tokenA, and tokenB required");let i=ar(S9[Number(e)]||e),s=new Set(x9(n).filter(Boolean).map(ar)),a=[...new Set([t,r].map(d=>String(d)).filter(Boolean))],A=await Promise.allSettled(a.map(d=>So(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 f of d.value?.pairs||d.value?.data?.pairs||[]){let p=`${ar(f?.chainId)}:${ar(f?.dexId)}:${ar(f?.pairAddress)}`;c.has(p)||(c.add(p),l.push(f))}return l.filter(d=>ar(d?.chainId)===i).filter(d=>v9(d,t,r)).filter(d=>!s.size||s.has(ar(d?.dexId))).map(d=>({pairAddress:d.pairAddress??null,dexId:d.dexId??null,chainId:d.chainId??null,liquidityUsd:N9(d),pairCreatedAt:d.pairCreatedAt??null})).filter(d=>d.liquidityUsd!=null).sort((d,f)=>f.liquidityUsd-d.liquidityUsd)[0]??null}ot();he();var it={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"}},H9=[100,500,3e3,1e4],eu=new Jx(["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)"]),$x=new Jx(["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)"]),Wx="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",zx="0x0000000000000000000000000000000000000000",sm=[100,500,2500,1e4],G9={56:{pancakeswap:{name:"pancakeswap",quoter:"0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997",router:"0x13f4EA83D0bd40E75C8222255bc855a974568Dd4",feeTiers:sm}},8453:{pancakeswap:{name:"pancakeswap",quoter:"0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997",router:"0x13f4EA83D0bd40E75C8222255bc855a974568Dd4",feeTiers:sm}},42161:{pancakeswap:{name:"pancakeswap",quoter:"0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997",router:"0x13f4EA83D0bd40E75C8222255bc855a974568Dd4",feeTiers:sm}},999:{hyperswap:{name:"hyperswap",quoter:"0x03A918028f22D9E1473B7959C927AD7425A45C7C",router:"0x4E2960a8cd19B467b82d26D83fAcb0fAE26b094D"}}};function Am(e,t){let r=Number(e),n=it[r];if(!n)throw new Error(`uniswap-v3: unsupported chainId ${e} (supported: ${Object.keys(it).join(", ")})`);let o=G9[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 am(e,t){let r=it[Number(t)];if(!e||e===Wx||e===zx||/^eth$/i.test(String(e)))return Va(r.weth);let n=String(e);if(/^weth$/i.test(n))return Va(r.weth);if(/^usdc$/i.test(n))return Va(r.usdc);if(!q9(n))throw new Error(`invalid token address: ${e}`);return Va(n)}function Y9(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 V9(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 Sn(e={},t={}){let{chainId:r,quoter:n,router:o,feeTiers:i}=Am(e.chainId??8453,e.venue),s=am(e.tokenIn||"WETH",r),a=am(e.tokenOut||it[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:H9,l=e.fee!=null?[Number(e.fee)]:e.tryFees===!1?[c[Math.min(2,c.length-1)]]:[...c],u=[],d=null;for(let h of l){let g=eu.encodeFunctionData("quoteExactInputSingle",[{tokenIn:s,tokenOut:a,amountIn:A,fee:h,sqrtPriceLimitX96:0n}]);try{let m=await z(r,"eth_call",[{to:n,data:g},"latest"],t);if(!m||m==="0x"){u.push({fee:h,ok:!1,error:"empty result"});continue}let C=eu.decodeFunctionResult("quoteExactInputSingle",m),E={fee:h,ok:!0,amountOut:C[0].toString(),sqrtPriceX96After:C[1].toString(),initializedTicksCrossed:Number(C[2]),gasEstimate:C[3].toString()};u.push(E),(!d||BigInt(E.amountOut)>BigInt(d.amountOut))&&(d=E)}catch(m){u.push({fee:h,ok:!1,error:String(m.message||m).slice(0,160)})}}if(!d){let h=u.map(g=>`${g.fee}:${g.error||"fail"}`).join("; ");throw new Error(`uniswap-v3 quote failed chain=${r}: ${h}`)}let f=e.liquidityUsd==null?await jl({chainId:r,tokenA:s,tokenB:a,dexIds:Y9(e.venue)},t).catch(()=>null):null,p=e.liquidityUsd??f?.liquidityUsd??null;return fe({venue:"uniswap-v3",chainId:r,chain:it[r].name,quoter:n,tokenIn:s,tokenOut:a,amountIn:A.toString(),fee:d.fee,amountOut:d.amountOut,gasEstimate:d.gasEstimate,liquidityUsd:p,liquiditySource:f,sqrtPriceX96After:d.sqrtPriceX96After,initializedTicksCrossed:d.initializedTicksCrossed,triedFees:u,best:!0},{chainId:r,venue:o,amountOut:d.amountOut,liquidityUsd:p,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps})}async function jx(e={},t={}){let{chainId:r,quoter:n,router:o}=Am(e.chainId??8453),i=(e.tokens||[]).map(d=>am(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=V9(i,s),c=eu.encodeFunctionData("quoteExactInput",[A,a]),l=await z(r,"eth_call",[{to:n,data:c},"latest"],t),u=eu.decodeFunctionResult("quoteExactInput",l);return fe({venue:"uniswap-v3",chainId:r,chain:it[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 cm(e={},t={}){let r=Number(e.chainId??8453),n=e.amountIn??"1000000000000000",o=await Sn({chainId:r,tokenIn:it[r].weth,tokenOut:it[r].usdc,amountIn:n,fee:e.fee},t),i=Number(o.amountOut)/1e6;return{...o,amountOutUsdc:i,pair:"WETH/USDC"}}async function Kx(e={},t={}){let r=Number(e.chainId??8453),n=Am(r,e.venue),o=Va(e.recipient),i=String(e.tokenIn||"WETH"),s=!e.tokenIn||i===Wx||i===zx||/^eth$/i.test(i),a=await Sn(e,t),A=$x.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=$x.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:ve(a.autoSlippage,{chainId:r,venue:n.router,data:d})}},{provider:"uniswap-v3",kind:"univ3-swap-tx"})}async function Xx(e={}){let t=Number(e.chainId??8453);try{let r=await cm({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 Zx(){return Object.entries(it).map(([e,t])=>({chainId:Number(e),name:t.name,quoter:t.quoter,weth:t.weth,usdc:t.usdc}))}De();import{AbiCoder as J9,Interface as rv,getAddress as Dr,isAddress as tu,keccak256 as W9}from"ethers";ot();he();var z9=J9.defaultAbiCoder(),$i="0x0000000000000000000000000000000000000000",Fr={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"}},j9=[{fee:100,tickSpacing:1},{fee:500,tickSpacing:10},{fee:3e3,tickSpacing:60},{fee:1e4,tickSpacing:200},{fee:25e3,tickSpacing:8}],ev=new rv(["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)"]),$se=new rv(["function execute(bytes commands,bytes[] inputs,uint256 deadline) payable"]);var K9="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE";function nv(e){let t=Number(e),r=Fr[t];if(!r)throw new Error(`uniswap-v4: unsupported chainId ${e} (supported: ${Object.keys(Fr).join(", ")})`);return{chainId:t,...r}}function tv(e,t){let r=Fr[Number(t)];if(!e||e===K9||e===$i||/^eth$/i.test(String(e)))return Dr(r.weth);let n=String(e);if(/^weth$/i.test(n))return Dr(r.weth);if(/^usdc$/i.test(n)||/^usdg$/i.test(n))return Dr(r.usdc);if(!tu(n))throw new Error(`invalid token address: ${e}`);return Dr(n)}function X9({currency0:e,currency1:t,fee:r,tickSpacing:n,hooks:o=$i}){let i=Dr(e),s=Dr(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&&tu(o)?Dr(o):$i;return W9(z9.encode(["address","address","uint24","int24","address"],[a,A,Number(r),Number(n),c]))}function Z9({tokenIn:e,tokenOut:t,fee:r,tickSpacing:n,hooks:o=$i}){let i=Dr(e),s=Dr(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&&tu(o)?Dr(o):$i},zeroForOne:c}}var e8=["uniswap-v4","uniswapv4"];async function ru(e={},t={}){let{chainId:r,quoter:n,poolManager:o,universalRouter:i}=nv(e.chainId??8453),s=tv(e.tokenIn||"WETH",r),a=tv(e.tokenOut||Fr[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}]:[...j9],l=e.hooks||$i,u=[],d=null;for(let h of c){let{poolKey:g,zeroForOne:m}=Z9({tokenIn:s,tokenOut:a,fee:h.fee,tickSpacing:h.tickSpacing,hooks:l}),C=ev.encodeFunctionData("quoteExactInputSingle",[{poolKey:g,zeroForOne:m,exactAmount:A,hookData:"0x"}]);try{let E=await z(r,"eth_call",[{to:n,data:C},"latest"],t);if(!E||E==="0x"){u.push({...h,ok:!1,error:"empty result"});continue}let I=ev.decodeFunctionResult("quoteExactInputSingle",E),Q={fee:h.fee,tickSpacing:h.tickSpacing,ok:!0,amountOut:I[0].toString(),gasEstimate:I[1].toString(),poolKey:g,zeroForOne:m,poolId:X9({...g})};u.push(Q),(!d||BigInt(Q.amountOut)>BigInt(d.amountOut))&&(d=Q)}catch(E){u.push({...h,ok:!1,error:String(E.message||E).slice(0,160)})}}if(!d){let h=u.map(g=>`${g.fee}/${g.tickSpacing}:${g.error||"fail"}`).join("; ");throw new Error(`uniswap-v4 quote failed chain=${r}: ${h}`)}let f=e.liquidityUsd==null?await jl({chainId:r,tokenA:s,tokenB:a,dexIds:e8},t).catch(()=>null):null,p=e.liquidityUsd??f?.liquidityUsd??null;return fe({venue:"uniswap-v4",chainId:r,chain:Fr[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:p,liquiditySource:f,triedTiers:u,best:!0,executionReady:!1,prepareReady:typeof e.recipient=="string"&&tu(e.recipient)&&e.slippageBps!=null},{chainId:r,venue:i||n,amountOut:d.amountOut,liquidityUsd:p,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps})}async function ov(){return Object.entries(Fr).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 iv(e={}){let t=nv(e.chainId??8453),r=await z(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 Ji=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"}),j=Object.freeze({PASS:"PASS",CAUTION:"CAUTION",FAIL:"FAIL",UNKNOWN:"UNKNOWN"}),r8=/^0x[0-9a-fA-F]{40}$/;function sv(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}r8.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))Ji.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 av(e){let{ok:t,errors:r,warnings:n}=sv(e);if(!t)throw new Error(`invalid scanner for ${e?.key??"<unknown>"}:
|
|
47
|
+
- ${r.join(`
|
|
48
|
+
- `)}`);let o=e.capabilities||{},i=Ji.filter(a=>typeof o[a]=="function"),s={key:e.key,chainId:e.chainId,name:e.name,rpcEnv:[...e.rpcEnv],nativeCurrency:e.nativeCurrency?{...e.nativeCurrency}:null,wrappedNative:e.wrappedNative||null,explorer:e.explorer||null,venues:(e.venues||[]).map(a=>({...a})),warnings:n,capabilities(){return{chainId:e.chainId,key:e.key,supported:[...i],unsupported:Ji.filter(a=>!i.includes(a))}},supports(a){return i.includes(a)}};for(let a of Ji)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 $a=new Map;function nu(e){let t=av(e);return $a.set(t.chainId,t),t}function lm(e){return $a.get(Number(e))||null}function um(){return[...$a.values()]}function n8(){let e={};for(let t of $a.values())e[t.chainId]={key:t.key,name:t.name,...t.capabilities(),venueCount:t.venues.length,failClosed:t.venues.length===0};return{generatedAt:new Date().toISOString(),chainCount:$a.size,capabilities:[...Ji],chains:e}}De();var fm={getAmountsOut:"d06ca61f",swapExactTokensForTokens:"38ed1739",swapExactETHForTokens:"7ff36ab5"},Gt=e=>BigInt(e).toString(16).padStart(64,"0"),Ja=e=>e.slice(2).toLowerCase().padStart(64,"0");function o8(e,t){return`0x${fm.getAmountsOut}`+Gt(e)+Gt(64)+Gt(t.length)+t.map(Ja).join("")}function i8(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 dm(e,t="router"){return(e?.venues||[]).find(n=>n.kind===t)?.address??null}var pm=100;function s8(e,t){let r=Number(t);if(!Number.isFinite(r)||r<0)throw new Error("slippageBps must be a non-negative number");if(r>pm)throw new Error(`slippageBps ${r} exceeds the ${pm} 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 Av(e){let{chainId:t,wrappedNative:r}=e;async function n(o,i,s,a){let A=await z(t,"eth_call",[{to:o,data:o8(i,s)},"latest"],a);return i8(A?.result??A)}return{async quote({tokenIn:o,tokenOut:i,amountIn:s,path:a},A={}){let c=dm(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=dm(a.scanner),c=s||r;if(c&&String(o).toLowerCase()===String(c).toLowerCase())return{chainId:t,token:o,verdict:j.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:j.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:j.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:j.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:j.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 f=d[d.length-1],p=Number(f*10000n/BigInt(i)),h=j.PASS,g="round trip completes with expected fee/impact loss";return p<5e3?(h=j.FAIL,g=`round trip returns only ${(p/100).toFixed(2)}% -- punitive tax or no real liquidity`):p<9e3&&(h=j.CAUTION,g=`round trip returns ${(p/100).toFixed(2)}% -- transfer tax or thin liquidity at this size`),{chainId:t,token:o,base:c,router:A,verdict:h,reason:g,amountIn:String(i),bought:u.toString(),returned:f.toString(),retentionBps:p,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,f=dm(d);if(!f)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 p=l||[o,i],h=await this.quote({tokenIn:o,tokenOut:i,amountIn:s,path:p},u);if(h.evidence!==Z.LIVE)throw new Error(`cannot prepare without a live quote (${h.evidence}: ${h.reason??"no reason given"})`);let g=s8(h.amountOut,A);if(g<=0n)throw new Error("computed minOut is zero -- refusing to prepare");let m=BigInt(Math.floor(Date.now()/1e3)+Number(c)),C=r&&p[0].toLowerCase()===r.toLowerCase()&&u.useNative,E=C?`0x${fm.swapExactETHForTokens}`+Gt(g)+Gt(128)+Ja(a)+Gt(m)+Gt(p.length)+p.map(Ja).join(""):`0x${fm.swapExactTokensForTokens}`+Gt(s)+Gt(g)+Gt(160)+Ja(a)+Gt(m)+Gt(p.length)+p.map(Ja).join("");return{unsigned:!0,signedBy:"user-wallet",chainId:t,tx:{to:f,data:E,value:C?`0x${BigInt(s).toString(16)}`:"0x0"},guard:{quotedOut:h.amountOut,minOut:g.toString(),slippageBps:A,maxSlippageBps:pm,deadline:m.toString()},requires:C?[]:[{step:"approve",token:p[0],spender:f,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 a8=[100,500,3e3,1e4],cv={quoteExactInputSingle:"c6a5026a",exactInputSingle:"04e45aaf"},xo=e=>BigInt(e).toString(16).padStart(64,"0"),Wa=e=>e.slice(2).toLowerCase().padStart(64,"0"),lv=/^0x[0-9a-fA-F]{40}$/,gm=100;function A8(e,t){let r=Number(t);if(!Number.isFinite(r)||r<0)throw new Error("slippageBps must be a non-negative number");if(r>gm)throw new Error(`slippageBps ${r} exceeds the ${gm} 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 hm(e,t){return(e?.venues||[]).find(r=>r.kind===t)?.address??null}function uv(e){let{chainId:t,wrappedNative:r}=e;async function n({quoter:i,tokenIn:s,tokenOut:a,amountIn:A,fee:c},l){let u=`0x${cv.quoteExactInputSingle}`+Wa(s)+Wa(a)+xo(A)+xo(c)+xo(0),d=await z(t,"eth_call",[{to:i,data:u},"latest"],l).catch(()=>null),f=d?.result??d;if(!f||f==="0x"||f.length<66)return null;let p=BigInt(`0x${f.slice(2,66)}`);return p>0n?p:null}async function o({quoter:i,tokenIn:s,tokenOut:a,amountIn:A},c){let l=[],u=null;for(let d of a8){let f=await n({quoter:i,tokenIn:s,tokenOut:a,amountIn:A,fee:d},c);l.push({fee:d,amountOut:f?f.toString():null}),f&&(!u||f>u.amountOut)&&(u={fee:d,amountOut:f})}return{best:u,tried:l}}return{async quote({tokenIn:i,tokenOut:s,amountIn:a},A={}){let c=hm(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(!lv.test(d||""))throw new Error("quote requires valid 20-byte addresses");let{best:l,tried:u}=await o({quoter:c,tokenIn:i,tokenOut:s,amountIn:a},A);return l?{chainId:t,venue:"uniswap-v3",quoter:c,tokenIn:i,tokenOut:s,amountIn:String(a),amountOut:l.amountOut.toString(),fee:l.fee,useNative:!!r&&String(i).toLowerCase()===String(r).toLowerCase(),triedFeeTiers:u,evidence:Z.LIVE,note:"exact-input single-hop quote at current tick; not a guaranteed fill"}:{chainId:t,quoter:c,tokenIn:i,tokenOut:s,triedFeeTiers:u,evidence:Z.UNKNOWN,reason:"no fee tier returned a quote -- no V3 pool for this pair, or no liquidity"}},async sellSimulation({token:i,amountIn:s,base:a},A={}){let c=hm(A.scanner,"quoter"),l=a||r;if(l&&String(i).toLowerCase()===String(l).toLowerCase())return{chainId:t,token:i,verdict:j.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:j.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:j.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:j.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 f=d.best.amountOut,p=Number(f*10000n/BigInt(s)),h=j.PASS,g="round trip completes with expected fee/impact loss";return p<5e3?(h=j.FAIL,g=`round trip returns only ${(p/100).toFixed(2)}% -- punitive tax or no real liquidity`):p<9e3&&(h=j.CAUTION,g=`round trip returns ${(p/100).toFixed(2)}% -- transfer tax or thin liquidity at this size`),{chainId:t,venue:"uniswap-v3",token:i,base:l,verdict:h,reason:g,amountIn:String(s),bought:u.best.amountOut.toString(),returned:f.toString(),retentionBps:p,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=hm(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(!lv.test(A||""))throw new Error("prepareUnsignedTx requires a valid recipient address");let f=await this.quote({tokenIn:i,tokenOut:s,amountIn:a},u);if(f.evidence!==Z.LIVE)throw new Error(`cannot prepare without a live quote (${f.evidence}: ${f.reason??"no reason given"})`);let p=l??f.fee,h=A8(f.amountOut,c);if(h<=0n)throw new Error("computed minOut is zero -- refusing to prepare");let g=!!(u.useNative||f.useNative)&&r&&String(i).toLowerCase()===String(r).toLowerCase(),m=`0x${cv.exactInputSingle}`+Wa(i)+Wa(s)+xo(p)+Wa(A)+xo(a)+xo(h)+xo(0);return{unsigned:!0,signedBy:"user-wallet",chainId:t,venue:"uniswap-v3",tx:{to:d,data:m,value:g?String(a):"0x0"},guard:{quotedOut:f.amountOut,minOut:h.toString(),slippageBps:c,maxSlippageBps:gm,fee:p},requires:g?[]:[{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 ou={decimals:"0x313ce567",symbol:"0x95d89b41",name:"0x06fdde03",totalSupply:"0x18160ddd",owner:"0x8da5cb5b"};function dv(e){if(!e||e==="0x")return null;try{return BigInt(e)}catch{return null}}function fv(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 c8(e){let{chainId:t}=e;async function r(n,o,i){return z(t,"eth_call",[{to:n,data:o},"latest"],i)}return{async blockNumber(n={}){let o=await qa(t,n);return{chainId:t,blockNumber:o?.blockNumber??o,evidence:Z.LIVE}},async nativeBalance(n,o={}){let i=await ko(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 Ha({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,ou.decimals,o).catch(()=>null),r(n,ou.symbol,o).catch(()=>null),r(n,ou.name,o).catch(()=>null),r(n,ou.totalSupply,o).catch(()=>null)]),c=dv(i?.result??i),l=c!==null||s?.result||a?.result;return{chainId:t,address:n,decimals:c===null?null:Number(c),symbol:fv(s?.result??s),name:fv(a?.result??a),totalSupply:(dv(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 So(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 f={fromBlock:`0x${u.toString(16)}`,toBlock:`0x${d.toString(16)}`};i&&(f.address=i),s&&(f.topics=s);let p=await z(t,"eth_getLogs",[f],A).catch(h=>({error:String(h?.message||h)}));if(p?.error)return{chainId:t,fromBlock:n,toBlock:o,logs:c,complete:!1,failedAt:[u,d],error:p.error,evidence:Z.UNKNOWN};for(let h of p?.result??p??[])c.push(h)}return{chainId:t,fromBlock:n,toBlock:o,logs:c,complete:!0,chunks:l.length,evidence:Z.LIVE}},async scoreRisk(n,o={}){let i=[],s=j.PASS,a=l=>{let u={[j.PASS]:0,[j.CAUTION]:1,[j.UNKNOWN]:2,[j.FAIL]:3};u[l]>u[s]&&(s=l)},A=await this.resolveToken(n,o);A.evidence!==Z.LIVE?(i.push({check:"erc20-metadata",result:j.UNKNOWN,detail:A.warning}),a(j.UNKNOWN)):i.push({check:"erc20-metadata",result:j.PASS,detail:`${A.symbol} / ${A.decimals}d`});let c=await this.resolvePools(n,o);if(c.evidence===Z.UNAVAILABLE)i.push({check:"liquidity",result:j.UNKNOWN,detail:c.reason}),a(j.UNKNOWN);else if(!c.pools.length)i.push({check:"liquidity",result:j.FAIL,detail:"no pool with liquidity found"}),a(j.FAIL);else{let l=c.pools[0],u=l.liquidityUsd??0;u<5e3?(i.push({check:"liquidity",result:j.CAUTION,detail:`top pool only $${u}`}),a(j.CAUTION)):i.push({check:"liquidity",result:j.PASS,detail:`$${u} on ${l.dex}`}),l.createdAt&&Date.now()-l.createdAt<24*3600*1e3&&(i.push({check:"age",result:j.CAUTION,detail:"pool under 24h old"}),a(j.CAUTION))}if(typeof this.sellSimulation=="function"){let l=await this.sellSimulation({token:n,amountIn:(10n**16n).toString()},o).catch(u=>({verdict:j.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:j.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(j.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 mm(e){let r={...c8(e)},n=new Set((e.venues||[]).map(i=>i.kind));e.venueKind==="uniswap-v3"&&n.has("quoter")&&n.has("router")?Object.assign(r,uv({chainId:e.chainId,wrappedNative:e.wrappedNative})):e.venueKind==="uniswap-v2"&&n.has("router")&&Object.assign(r,Av({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 xn=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 za(){return xn.map(e=>nu(mm(e)))}function pv(e){return nu(mm(e))}var ja=new Map,l8=Object.keys(it).map(Number),u8=Object.keys(Fr).map(Number),d8=xn.map(e=>e.chainId),Em=new Set,hv=!1;function M(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(hv&&Em.has(t))throw new Error(`registerProvider refuses to overwrite built-in provider: ${t}`);return ja.set(t,{chainIds:e.chainIds||[],auth:e.auth||"none",description:e.description||"",baseEnv:e.baseEnv||[],...e,id:t}),ja.get(t)}function iu(e){return ja.get(e)||null}function Ka({venue:e,op:t}={}){let r=[...ja.values()];return e&&(r=r.filter(n=>n.venue===e)),t&&(r=r.filter(n=>n.ops.includes(t))),r}function f8(){Em.clear();for(let e of ja.keys())Em.add(e);hv=!0}M({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"});M({id:"hl-vaults",venue:"hyperliquid-vaults",chainIds:[],auth:"none",ops:["health","summaries","details","userEquities","tracker"],execution:"read-only",baseEnv:["HL_INFO_URL","HL_API_URL"],description:"Read-only Hyperliquid vault summaries, vault details, user vault equities, and HLP tracking."});M({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."});M({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"});M({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."});M({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."});M({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."});M({id:"nft-mint",venue:"onchain-mint",chainIds:[1,10,56,137,988,999,2741,4663,8453,42161,43114],auth:"none",ops:["health","discover","prepare","priceGas","createTrigger","checkOpen"],execution:"prepare",localSignerSurfaces:["evm-nft"],baseEnv:[],description:"EVM NFT mints: discover the collection's mint entrypoint from bytecode, price a competitive EIP-1559 bid from fee-history percentiles, enforce gas-war caps, surface contract risk, and hand execution to the local signer after explicit arming and bounded grant."});M({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."});M({id:"evm-token-sniper",venue:"evm-token-launches",chainIds:d8,auth:"none",ops:["health","scan"],execution:"prepare",localSignerSurfaces:["evm-swap"],baseEnv:xn.flatMap(e=>e.rpcEnv),description:"One generic EVM token-sniping path across every configured EVM chain: live identity, pools, structural risk, sell simulation, quote, guarded transaction preparation, and local-signer execution handoff. Robinhood Chain is the default, not a special implementation."});M({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)"});M({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)"});M({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"});M({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."});M({id:"satflow",venue:"bitcoin-marketplace",chainIds:[],auth:"apiKey",ops:["health","collectionFloors","collectionStats","item","walletContents","floorListings","preparePurchase","prepareList"],execution:"prepare",localSignerSurfaces:["btc"],baseEnv:["SATFLOW_API_KEY","SATFLOW_API_URL"],description:"Satflow ordinals+runes marketplace (api.satflow.com). Primary BTC NFT market after Magic Eden BTC sunset. PSBT intents for buy/list; key via x-api-key."});M({id:"jupiter",venue:"solana-dex",chainIds:[],auth:"none",ops:["health","venues","quote","prepare"],execution:"prepare",localSignerSurfaces:["sol"],baseEnv:["JUPITER_SWAP_API_URL","SOLANA_RPC_URL"],description:"Jupiter Swap API v1 quote + local-signer Solana swap handoff"});M({id:"hl-perps",venue:"hyperliquid",chainIds:[],auth:"none",ops:["health","assetInfo","prepareOrder","prepareCancel","prepareLeverage","prepareIsolatedMargin","prepareBracket","prepareBuilderApproval"],execution:"prepare",notes:"Hyperliquid perp orders/leverage through local-signer action handoff."});M({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."});M({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."});M({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."});M({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"});M({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)"});M({id:"dexscreener",venue:"dex",chainIds:[],auth:"none",ops:["health","token","search","pair"],baseEnv:["DEXSCREENER_API_URL"],description:"DexScreener public token/pair discovery"});M({id:"uniswap-v3",venue:"dex",chainIds:l8,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"});M({id:"uniswap-v4",venue:"dex",chainIds:u8,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."});M({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)"});M({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)"});M({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)"});M({id:"hop",venue:"bridge",chainIds:[1,10,137,42161],auth:"none",ops:["health","quote"],baseEnv:["HOP_API_URL"],description:"Hop Protocol bridge quotes (public)"});M({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)"});M({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)"});M({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)"});M({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)"});M({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"});M({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"});M({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"});M({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"});M({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"});M({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"});M({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"});M({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)"});M({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"});M({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)"});M({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"});M({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"});M({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."});M({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."});f8();M({id:"polygon-staking",venue:"polygon-staking",chainIds:[137],auth:"none",ops:["health","validators","validatorDetail"],baseEnv:["POLYGON_STAKING_API_URL"],description:"Polygon POS staking validators"});M({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."});M({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."});M({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."});M({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."});M({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)."});M({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."});M({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."});M({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."});M({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."});M({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."});M({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"});M({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)"});M({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)"});M({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)"});M({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)"});M({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)"});M({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)"});M({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)"});M({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)"});M({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)"});M({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."});M({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)"});M({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)"});M({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)"});M({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)"});M({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)"});M({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 p8="https://api.hyperliquid.xyz/info",h8="https://api.hyperliquid-testnet.xyz/info";function g8({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"?h8:p8}async function Ie(e,t={}){if(!e||!e.type)throw new Error("hlInfo requires body.type");let r=g8(t);return B(r,{method:"POST",body:e,fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function gv(e={}){let t=await Ie({type:"allMids"},e),r=t&&typeof t=="object"?Object.keys(t).length:0;return{ok:r>0,midCount:r}}async function rn(e={}){return Ie({type:"allMids"},e)}async function su(e,t={}){if(!e)throw new Error("hlL2Book requires coin");return Ie({type:"l2Book",coin:String(e)},t)}async function Xa(e={}){return Ie({type:"outcomeMeta"},e)}async function au(e,t={}){if(!e)throw new Error("hlClearinghouse requires user address");return Ie({type:"spotClearinghouseState",user:e},t)}async function mv(e,t={}){if(!e)throw new Error("hlUserFills requires user address");return Ie({type:"userFills",user:e},t)}async function Au(e={}){return Ie({type:"meta"},e)}async function Wi(e={}){let t={type:"metaAndAssetCtxs"};return e.dex&&(t.dex=e.dex),Ie(t,e)}async function zi({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 Ie(i,o)}async function Ev({coin:e,startTime:t,endTime:r},n={}){if(!e)throw new Error("hlFundingHistory requires coin");return Ie({type:"fundingHistory",coin:String(e),startTime:t??Date.now()-24*3600*1e3,endTime:r??Date.now()},n)}async function Iv(e,t={}){if(!e)throw new Error("hlOpenOrders requires user");return Ie({type:"openOrders",user:e},t)}async function Cv(e,t={}){if(!e)throw new Error("hlFrontendOpenOrders requires user");return Ie({type:"frontendOpenOrders",user:e},t)}async function cu(e,t={}){if(!e)throw new Error("hlUserState requires user");return Ie({type:"clearinghouseState",user:e},t)}async function lu(e={}){return Ie({type:"spotMeta"},e)}var E8=/^0x[0-9a-fA-F]{40}$/,yv="0xdfc24b077bc1425ad1dea75bcb6f8158e10df303";function Im(e,t){let r=String(e||"").trim();if(!E8.test(r))throw new Error(`hl-vaults: ${t} must be a 0x EVM address`);return r.toLowerCase()}function Bv(e){if(e==null||e==="")return null;let t=Number(e);return Number.isFinite(t)?t:null}function Qv(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 I8(e){return[...e].sort((t,r)=>(Bv(r.tvl)??-1)-(Bv(t.tvl)??-1))}function Cm(e){return e.hlInfo||Ie}function Bm(e){return{...e,exec:!1,execution:"read-only",armed:!1}}async function ym(e={},t={}){let r=await Cm(t)({type:"vaultSummaries"},t),n=I8((Array.isArray(r)?r:[]).map(Qv));return Bm({provider:"hl-vaults",count:n.length,vaults:n,raw:r})}async function uu(e={},t={}){let n={type:"vaultDetails",vaultAddress:Im(e.vaultAddress||e.address,"vaultAddress")};e.user&&(n.user=Im(e.user,"user"));let o=await Cm(t)(n,t);return Bm({provider:"hl-vaults",vault:Qv(o||{}),raw:o})}async function Qm(e={},t={}){let r=Im(e.user||e.address,"user"),n=await Cm(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 Bm({provider:"hl-vaults",user:r,count:o.length,positions:o,raw:n})}async function wm(e={},t={}){let r=String(e.mode||"hlp").toLowerCase();if(r==="hlp")return uu({...e,vaultAddress:yv},t);if(r==="summaries")return ym(e,t);if(r==="details")return uu(e,t);if(r==="mine")return Qm(e,t);throw new Error("hl-vaults: mode must be hlp, summaries, details, or mine")}async function wv(e={}){try{let t=await wm({mode:"hlp"},e);return{ok:t.vault.vaultAddress===yv&&!!t.vault.name,provider:"hl-vaults",hlp:{name:t.vault.name,vaultAddress:t.vault.vaultAddress,tvl:t.vault.tvl,apr:t.vault.apr,allowDeposits:t.vault.allowDeposits},exec:!1,execution:"read-only",armed:!1}}catch(t){return{ok:!1,provider:"hl-vaults",error:String(t?.message||t).slice(0,160),exec:!1,execution:"read-only",armed:!1}}}_();var B8="https://clob.polymarket.com",y8="https://gamma-api.polymarket.com";function Za(e={}){return(e.clobUrl||process.env.POLY_CLOB_URL||B8).replace(/\/$/,"")}function bv(e={}){return(e.gammaUrl||process.env.POLY_GAMMA_URL||y8).replace(/\/$/,"")}async function bm(e={}){return B(`${Za(e)}/time`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs})}async function kv(e={}){let t=await bm(e);return{ok:t!=null&&t!=="",time:t}}async function Sv({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 B(`${bv(n)}/markets?${o}`,{fetchImpl:n.fetchImpl,timeoutMs:n.timeoutMs})}async function xv(e,t={}){if(!e)throw new Error("polyBook requires tokenId");let r=new URLSearchParams({token_id:String(e)});return B(`${Za(t)}/book?${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function vv(e,t={}){if(!e)throw new Error("polyMidpoint requires tokenId");let r=new URLSearchParams({token_id:String(e)});return B(`${Za(t)}/midpoint?${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function Nv(e,t={}){if(!e)throw new Error("polySpread requires tokenId");let r=new URLSearchParams({token_id:String(e)});return B(`${Za(t)}/spread?${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function Rv(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 B(`${Za(r)}/price?${n}`,{fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs})}async function Dv({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 B(`${bv(n)}/events?${o}`,{fetchImpl:n.fetchImpl,timeoutMs:n.timeoutMs})}De();_();import{createHash as Fv}from"node:crypto";var ji="mainnet-beta",w8="https://api.mainnet-beta.solana.com",km="TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";function b8(e={}){return String(e.rpcUrl||process.env.SOLANA_RPC_URL||w8).trim()}function Qe(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 k8(e,t){return t?[...e,{commitment:t}]:e}async function eA(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 B(b8(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 Sm(e={},t={}){let r=e.commitment?[{commitment:e.commitment}]:[],n=await eA("getLatestBlockhash",r,t);return{provider:"solana-rpc",cluster:ji,blockhash:n?.value?.blockhash||null,lastValidBlockHeight:n?.value?.lastValidBlockHeight??null,slot:n?.context?.slot??null,raw:n}}async function Mv(e={}){try{let[t,r]=await Promise.all([eA("getHealth",[],e),Sm({},e)]);return{ok:t==="ok",provider:"solana-rpc",cluster:ji,health:t,latestBlockhash:r,exec:!1}}catch(t){return{ok:!1,provider:"solana-rpc",cluster:ji,error:String(t?.message||t),exec:!1}}}async function du(e={},t={}){let r=Qe(e.address||e.owner,"address"),n=await eA("getBalance",k8([r],e.commitment),t);return{provider:"solana-rpc",cluster:ji,address:r,lamports:String(n?.value??0),slot:n?.context?.slot??null,raw:n}}function S8(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 tA(e={},t={}){let r=Qe(e.owner||e.address,"owner"),n=e.mint?{mint:Qe(e.mint,"mint")}:{programId:Qe(e.programId||km,"token program")},o={encoding:"jsonParsed"};e.commitment&&(o.commitment=e.commitment);let i=await eA("getTokenAccountsByOwner",[r,n,o],t),s=Array.isArray(i?.value)?i.value.map(S8):[];return{provider:"solana-rpc",cluster:ji,owner:r,filter:n,slot:i?.context?.slot??null,accounts:s,raw:i}}function x8(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 v8(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 N8(e){let t=Buffer.from(e,"base64");try{let r=v8(t,0),n=r.offset+r.value*64;if(n>=t.length)throw new Error("missing message");return Fv("sha256").update(t.subarray(n)).digest("hex")}catch{return Fv("sha256").update(t).digest("hex")}}async function Tv(e={},t={}){let r=x8(e.transaction||e.swapTransaction),n={encoding:"base64",sigVerify:!!e.sigVerify,replaceRecentBlockhash:e.replaceRecentBlockhash!==!1};e.commitment&&(n.commitment=e.commitment);let o=await eA("simulateTransaction",[r,n],t),i=o?.value||{};return{provider:"solana-rpc",cluster:ji,ok:i.err==null,transactionHash:N8(r),err:i.err??null,logs:i.logs||[],unitsConsumed:i.unitsConsumed??null,replacementBlockhash:i.replacementBlockhash||null,slot:o?.context?.slot??null,raw:o}}_();var D8="mainnet",F8="https://mempool.space/api",M8="https://mempool.space/testnet/api";function Mr(e={}){return String(e.network||process.env.BTC_NETWORK||D8).trim().toLowerCase()==="testnet"?"testnet":"mainnet"}function vm(e={}){return e.baseUrl?String(e.baseUrl).replace(/\/$/,""):process.env.BTC_ESPLORA_URL?String(process.env.BTC_ESPLORA_URL).replace(/\/$/,""):Mr(e)==="testnet"?M8:F8}function xm(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 Ar(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 T8(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 Nm(e,t={}){let r=`${vm(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 fu(e,t={}){let r=await Nm(e,t);try{return JSON.parse(r)}catch{return r}}async function Uv(e={}){try{let t=await Nm("/blocks/tip/height",e),r=Number(t);return{ok:Number.isFinite(r)&&r>0,provider:"bitcoin-esplora",network:Mr(e),baseUrl:xm(vm(e)),tipHeight:r,exec:!1,signing:"user-wallet"}}catch(t){return{ok:!1,provider:"bitcoin-esplora",network:Mr(e),baseUrl:xm(vm(e)),error:xm(t?.message||t),exec:!1}}}async function Lv(e={}){let t=await Nm("/blocks/tip/height",e);return{provider:"bitcoin-esplora",network:Mr(e),tipHeight:Number(t)}}async function _v(e={}){try{let t=await fu("/v1/fees/recommended",e);return{provider:"bitcoin-esplora",network:Mr(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:Mr(e),fastestFee:null,halfHourFee:null,hourFee:null,note:"fee endpoint unavailable on this Esplora host"}}}async function pu(e={},t={}){let r=Ar(e.address||e.addr,"address"),n=await fu(`/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:Mr(t),address:r,balanceSats:String(s-a),chainStats:o,mempoolStats:i,raw:n}}async function Pv(e={},t={}){let r=Ar(e.address||e.addr,"address"),n=await fu(`/address/${r}/utxo`,t),o=Array.isArray(n)?n:[];return{provider:"bitcoin-esplora",network:Mr(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 Ov(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 fu(`/tx/${r}`,t);return{provider:"bitcoin-esplora",network:Mr(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 qv(e={},t={}){let r=T8(e.txHex||e.hex||e.transaction,"txHex");return{provider:"bitcoin-esplora",network:Mr(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 Hv="ORACLE_ALLOW_CUSTOM_PROVIDER_URL";function cr({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:Gv(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([Gv(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[Hv]||"")==="1")return{baseUrl:s,trusted:!1,host:A};if(o)throw new Error(`${e}: refusing to call non-allowlisted host ${A} (set ${Hv}=1 to permit it)`);return{baseUrl:s,trusted:!1,host:A}}function Gv(e){let t=new URL(String(e));if(t.protocol!=="http:"&&t.protocol!=="https:")throw new Error("unsupported protocol");return t.host}function Yt(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 Rm="https://ordinals.com";function hu(e={}){return String(e.baseUrl||process.env.BTC_META_API_URL||process.env.UNISAT_API_URL||"").trim().replace(/\/$/,"")}var L8=["open-api.unisat.io","open-api-testnet.unisat.io","api.bestinslot.xyz","api.hiro.so"];function Yv(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=hu(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=L8.includes(o)&&(i==="https:"||s)}}catch{r=!1}return Yt({accept:"application/json","user-agent":"oracle-btc-meta/0.1"},{authorization:t?`Bearer ${t}`:"","x-api-key":t},r)}async function Ki(e,t={}){let n=await(t.fetchImpl||fetch)(e,{method:"GET",headers:Yv(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 Vv(e={}){let t=hu(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:Yv(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 gu(e={},t={}){let r=Ar(e.address||e.addr,"address"),n=hu(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 Ki(s,t),A=_8(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 _8(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 Xi(e={},t={}){let r=Ar(e.address||e.addr,"address"),n=hu(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 Ki(a,t),c=P8(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 $v(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||Rm,o=await Ki(`${n}/r/inscription/${r}`,t);return{provider:"bitcoin-meta",source:"ordinals.com/r",keyless:!0,inscriptionId:r,info:o}}async function Jv(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||Rm,o=Number(e.page||0),i=await Ki(`${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 Wv(e={},t={}){let r=t.ordinalsBase||Rm,n=e.height??await Ki(`${r}/r/blockheight`,t),o=await Ki(`${r}/r/blockinfo/${Number(n)}`,t);return{provider:"bitcoin-meta",source:"ordinals.com/r",keyless:!0,height:Number(n),info:o}}function P8(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}))}he();var q8=["unsigned","notsigned","tosign","signable"],H8=new Set(["requiresusersignature","requiressignature","needssignature","signaturerequired","signaturesrequired","signingready","signaturecount","signaturethreshold","requiredsignatures","signatureneeded","hassignature","allowsignatures","requestsignature","multisig","cosig","msig"]),G8=new Set(["sig","sigs","scriptsig","witness","psbt","finalizedpsbt","completepsbt","finalpsbt","psbtfinalized","serializedtransaction"]);function Dm(e){return String(e).toLowerCase().replace(/[^a-z0-9]/g,"")}function Y8(e){return q8.some(t=>e.startsWith(t))||H8.has(e)}function V8(e){let t=String(e);if(!/^[\x20-\x7e]+$/.test(t))return!0;let r=Dm(t);return Y8(r)?!1:G8.has(r)?!0:r.includes("signed")||r.includes("signature")||r.endsWith("sig")||r.endsWith("sigs")}function $8(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 Fm(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=>Fm(A,t+1,r,n));let o=[];for(let[A,c]of Object.entries(e)){if(V8(A)){o.push(A);continue}o.push(...Fm(c,t+1,r,n))}let s=Object.keys(e).map(Dm).some(A=>A.endsWith("psbt")||A.endsWith("psbtbase64")),a=Object.entries(e).some(([A,c])=>/complete|finalized|isfinal/.test(Dm(A))&&c===!0);return s&&a&&o.push("psbt(complete)"),$8(e)&&o.push("v/r/s"),o}function nn(e,t){let r=Fm(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 J8="https://api.satflow.com/v1";function zv(e={}){return cr({provider:"satflow",defaultUrl:J8,hosts:["api.satflow.com"],url:e.baseUrl||process.env.SATFLOW_API_URL})}function mu(e={}){return zv(e).baseUrl}function Tm(e={}){return String(e.apiKey||process.env.SATFLOW_API_KEY||process.env.BTC_SATFLOW_API_KEY||"").trim()}function W8(e={}){return Yt({accept:"application/json","content-type":"application/json","user-agent":"oracle-btc-satflow/0.1"},{"x-api-key":Tm(e)},zv(e).trusted)}async function vn(e,{method:t="GET",body:r,opts:n={}}={}){if(!Tm(n))throw new Error("satflow: SATFLOW_API_KEY not set (request key via Satflow docs form)");let i=`${mu(n)}${e.startsWith("/")?e:`/${e}`}`,a=await(n.fetchImpl||fetch)(i,{method:t,headers:W8(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 jv(e={}){if(!!!Tm(e))return{ok:!1,provider:"satflow",baseUrl:mu(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 vn("/collection/stats/floors?type=ordinals",{opts:e}),{ok:!0,provider:"satflow",baseUrl:mu(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:mu(e),apiKeyPresent:!0,error:String(r?.message||r).slice(0,200),magicEdenOrdinals:"deprecated-dead"}}}async function Kv(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 vn(`/collection/stats/floors?${n}`,{opts:t});return{provider:"satflow",type:r,floors:o,magicEdenOrdinals:"deprecated-dead"}}async function Xv(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 vn(`/collection/stats?${n}`,{opts:t});return{provider:"satflow",collectionId:r,stats:o}}async function Zv(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 vn(`/item?${n}`,{opts:t})}}async function Eu(e={},t={}){let r=Ar(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 vn(`/address/wallet-contents?${n}`,{opts:t});return{provider:"satflow",address:r,contents:o}}async function eN(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 vn(`/orders/floor?${n}`,{opts:t})}}var z8=new Set(["body","execute","fetchImpl","opts","apiKey","baseUrl","timeoutMs","maxSats","operator"]);function tN(e={},t=null){let r=e.body&&typeof e.body=="object"?e.body:e,n={};for(let[o,i]of Object.entries(r))z8.has(o)||t&&!t.has(o)||i!==void 0&&(n[o]=i);return n}var j8=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"]),K8=new Set(["inscription_id","inscriptionId","runes_output","runesOutput","ord_address","receive_address","price","tap_key","collection_slug","expires_at"]);function Mm(e){if(!e||typeof e!="object")return null;let t=[e.price,e.priceSats,e.price_sats,e.totalSats,e.total_sats,e.amount,e.satoshis];for(let r of t){if(r==null)continue;let n=String(r).trim();if(/^\d+$/.test(n))return BigInt(n)}return null}function X8(e={},{psbt:t,priceSats:r,nowMs:n=Date.now()}={}){if(!t)throw new Error("satflow: local signer envelope requires unsigned PSBT");let o=Ar(e.owner||e.buyer_address||e.buyerAddress||e.payment_address||e.pay_address,"owner"),i=Ar(e.destination||e.seller_address||e.sellerAddress||e.payment_destination,"destination"),s=String(e.network||"bitcoin").toLowerCase();if(!["bitcoin","mainnet","testnet","signet","regtest"].includes(s))throw new Error("satflow: unsupported Bitcoin network");return{version:1,surface:"btc",action:"transfer",owner:o,destination:i,tradeId:e.tradeId||`satflow-${e.listing_id||e.listingId||e.inscription_id||e.inscriptionId||"purchase"}`,slippageBps:0,expiresAtMs:Number(n)+Math.min(Math.max(Number(e.ttlMs??e.expiresInMs??3e4)||3e4,1e3),6e4),fee:{oracleFeeBps:0},artifact:{network:s,psbt:t},meta:{provider:"satflow",kind:"purchase-intent",priceSats:String(r)}}}async function rN(e={},t={}){let r=tN(e,j8);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=Mm(r);if(i!=null&&i>o)throw new Error(`satflow: requested price ${i} sats exceeds maxSats cap ${o}`);let s=await vn("/intent/satflow-purchase",{method:"POST",body:r,opts:t}),a=Mm(s)??Mm(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`);nn("satflow",s);let A=s?.unsignedPSBTBase64||s?.unsignedPsbtBase64||s?.unsigned_psbt||null,c=null,l=null;try{c=X8(e,{psbt:A,priceSats:a,nowMs:t.nowMs})}catch(u){l=String(u?.message||u).slice(0,200)}return L({provider:"satflow",kind:"purchase-intent",executionReady:!1,signingReady:!1,broadcastReady:!1,requiresUserSignature:!0,marketplace:"satflow",magicEdenOrdinals:"deprecated-dead",priceSats:a.toString(),maxSats:o.toString(),intent:s,unsignedPsbt:A,localSignerEnvelope:c,localSignerBlockedReason:l,note:"Sign PSBT in a Bitcoin wallet. Broadcast only through the user's wallet or an explicitly armed Bitcoin execution plane."})}async function Iu(e={},t={}){let r=tN(e,K8);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 vn("/intent/sell",{method:"POST",body:r,opts:t});return nn("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."})}_();he();var Bu="https://lite-api.jup.ag/swap/v1",Lm="So11111111111111111111111111111111111111112",iN="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",eW=100,nN=2e4;function sN(e={}){return String(e.baseUrl||process.env.JUPITER_SWAP_API_URL||Bu).replace(/\/$/,"")}function rA(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 aN(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>eW)throw new Error("jupiter: slippage exceeds hard 100 bps cap");return t}function Cu(e,t){return e==null?t:!!e}function tW(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 rW(e,t=0){let r=0,n=0,o=t;for(;o<e.length&&o-t<3;){let i=e[o++];if(r|=(i&127)<<n,(i&128)===0)return{value:r,offset:o};n+=7}return null}function AN(e){let t=Buffer.from(e,"base64"),r=rW(t,0);if(!r||r.value!==1)throw new Error("jupiter: unsigned swapTransaction must declare exactly one signature slot");let n=r.offset+r.value*64;if(n>=t.length)throw new Error("jupiter: Solana transaction missing message bytes");if(t.subarray(r.offset,n).some(i=>i!==0))throw new Error("jupiter: swapTransaction already contains signature material");return t.subarray(n).toString("base64")}function Um(e={},{quotedAtMs:t=Date.now(),ttlMs:r=nN}={}){let n=Qe(e.inputMint,"inputMint"),o=Qe(e.outputMint,"outputMint"),i=rA(e.inAmount,"inAmount"),s=rA(e.outAmount,"outAmount"),a=rA(e.otherAmountThreshold??e.outAmount,"otherAmountThreshold"),A=aN(e.slippageBps??50),c=(BigInt(s)-BigInt(s)*BigInt(A)/10000n).toString();if(a!==c)throw new Error("jupiter: otherAmountThreshold does not match serialized min-out");return{mode:"solana-jupiter-quote",provider:"jupiter",venue:"jupiter-swap-v1",inputMint:n,outputMint:o,inAmount:i,outAmount:s,otherAmountThreshold:a,slippageBps:A,contextSlot:e.contextSlot??null,quotedAtMs:t,expiresAtMs:t+Math.min(Math.max(Number(r)||nN,1e3),3e4)}}function nW({userPublicKey:e,guard:t,swapTransaction:r,args:n={},response:o={}}){if(t.inputMint!==Lm)throw new Error("jupiter: local signer supports native SOL input only");if(BigInt(o?.prioritizationFeeLamports??0)!==0n)throw new Error("jupiter: local signer requires zero priority fee until exact fee accounting is supplied");let i=AN(r),s=rA(n.exactFeeLamports??o.exactFeeLamports??"5000","exactFeeLamports");return{version:1,surface:"sol",action:"swap",owner:e,destination:t.outputMint,tradeId:n.tradeId||`jupiter-${t.inputMint.slice(0,6)}-${t.outputMint.slice(0,6)}-${t.inAmount}`,slippageBps:t.slippageBps,expiresAtMs:t.expiresAtMs,fee:{oracleFeeBps:5},artifact:{cluster:n.cluster||"mainnet",provider:"jupiter",inputMint:t.inputMint,outputMint:t.outputMint,inAmount:t.inAmount,outAmount:t.outAmount,otherAmountThreshold:t.otherAmountThreshold,slippageBps:t.slippageBps,jupiterProgram:n.jupiterProgram||o.jupiterProgram||"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4",messageBase64:i,exactFeeLamports:s}}}var oW=new Set(["BPFLoaderUpgradeab1e11111111111111111111111","BPFLoader2111111111111111111111111111111111","BPFLoader1111111111111111111111111111111111"]),iW="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";function oN(e){if(typeof e!="string"||!e.length)return!1;let t=0n;for(let o of e){let i=iW.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 cN(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(`${Bu}/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])=>oN(d)),A=[],c=s.filter(([d])=>!oN(d)).map(([d,f])=>({programId:d,label:f,reason:"malformed program id"}));if(e.verify===!1)return{source:`${Bu}/program-id-to-label`,verified:a.map(([d,f])=>({programId:d,label:f})),unresolved:c,verifiedOnChain:!1,totals:{fromRouterMap:s.length,verified:a.length}};let l=async d=>{let p=await(await n(r,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(d),signal:AbortSignal.timeout(Number(t.timeoutMs)||2e4)})).json();if(p.error)throw new Error(p.error.message);return p.result};for(let d=0;d<a.length;d+=90){let f=a.slice(d,d+90),p=null;for(let h=0;h<3&&!p;h++)try{p=await l({jsonrpc:"2.0",id:1,method:"getMultipleAccounts",params:[f.map(([g])=>g),{encoding:"base64",dataSlice:{offset:0,length:0}}]})}catch{await new Promise(g=>setTimeout(g,2e3*(h+1)))}if(!p){for(let[h,g]of f)c.push({programId:h,label:g,reason:"rpc batch failed after 3 attempts"});continue}p.value.forEach((h,g)=>{let[m,C]=f[g];h&&h.executable===!0&&oW.has(h.owner)?A.push({programId:m,label:C,owner:h.owner}):c.push({programId:m,label:C,reason:h?h.executable!==!0?"not executable":`unknown owner ${h.owner}`:"account not found"})}),d+90<a.length&&await new Promise(h=>setTimeout(h,700))}let u=new Set(A.map(d=>d.label.replace(/\s+(CLMM|CP|V\d+|Launchlab|DLMM|Pools?)$/i,"").trim()));return{source:`${Bu}/program-id-to-label`,verifiedOnChain:!0,verifiedAt:new Date().toISOString(),totals:{fromRouterMap:s.length,verified:A.length,unresolved:c.length,distinctLabels:new Set(A.map(d=>d.label)).size,distinctBrands:u.size},verified:A.sort((d,f)=>d.label.localeCompare(f.label)),unresolved:c}}async function lN(e={}){try{return{ok:!0,provider:"jupiter",outAmount:(await yu({inputMint:Lm,outputMint:iN,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 yu(e={},t={}){let r=Qe(e.inputMint||e.fromMint||Lm,"inputMint"),n=Qe(e.outputMint||e.toMint||iN,"outputMint"),o=rA(e.amount||e.inAmount,"amount"),i=aN(e.slippageBps??e.maxSlippageBps??50),s=new URL(`${sN(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 B(s.toString(),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3}),A=Um({...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 sW(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}async function uN(e={},t={}){let r=Qe(e.userPublicKey||e.owner||e.wallet,"userPublicKey"),n=e.quoteResponse?{quote:e.quoteResponse,solanaGuard:Um(e.quoteResponse,t)}:await yu(e,t),o=n.quote,i=n.solanaGuard||Um(o,t);if(Cu(e.dynamicSlippage,!1)===!0)throw new Error("jupiter: dynamicSlippage would override the enforced slippage ceiling \u2014 pass an explicit slippageBps instead");let s=await B(`${sN(t)}/swap`,{method:"POST",body:sW({quoteResponse:o,userPublicKey:r,wrapAndUnwrapSol:Cu(e.wrapAndUnwrapSol,!0),dynamicComputeUnitLimit:Cu(e.dynamicComputeUnitLimit,!0),dynamicSlippage:!1,asLegacyTransaction:Cu(e.asLegacyTransaction,!0),prioritizationFeeLamports:e.prioritizationFeeLamports??0}),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),a=tW(s?.swapTransaction);AN(a),nn("jupiter",s);let A=s?.quoteResponse??s?.quote??null,c=["inAmount","outAmount","otherAmountThreshold","inputMint","outputMint"],l=!1;if(A&&typeof A=="object"){for(let f of c){let p=o?.[f],h=A?.[f];if(p==null||h==null)throw new Error(`jupiter: echoed quote is incomplete \u2014 missing ${f}`);if(String(p)!==String(h))throw new Error(`jupiter: swap response ${f} (${h}) does not match the quoted ${f} (${p}) \u2014 refusing to prepare`)}l=!0}let u=null,d=null;try{u=nW({userPublicKey:r,guard:i,swapTransaction:a,args:e,response:s})}catch(f){d=String(f?.message||f).slice(0,200)}return L({provider:"jupiter",chain:"solana-mainnet-beta",prepareReady:!0,executionReady:!1,signingReady:!1,broadcastReady:!1,requiresUserSignature:!0,verifiedAgainstQuote:l,userPublicKey:r,quote:o,solanaGuard:i,swapTransaction:a,localSignerEnvelope:u,localSignerBlockedReason:d,swapTransactionEncoding:"base64",lastValidBlockHeight:s?.lastValidBlockHeight??null,prioritizationFeeLamports:s?.prioritizationFeeLamports??null,computeUnitLimit:s?.computeUnitLimit??null,raw:s},{provider:"jupiter",kind:"jupiter-swap"})}_();var AW="https://coins.llama.fi",cW="https://api.llama.fi",lW="https://yields.llama.fi",uW="https://stablecoins.llama.fi";function dW(e={}){return(e.baseUrl||process.env.DEFILLAMA_COINS_URL||AW).replace(/\/$/,"")}function dN(e={}){return(e.baseUrl||process.env.DEFILLAMA_API_URL||cW).replace(/\/$/,"")}async function lr(e,t={}){if(!Array.isArray(e)||!e.length)throw new Error("llamaPrices requires coins[]");let r=e.map(encodeURIComponent).join(",");return B(`${dW(t)}/prices/current/${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function fN(e={}){let r=(await lr(["coingecko:ethereum"],e))?.coins?.["coingecko:ethereum"];return{ok:!!r?.price,ethUsd:r?.price??null}}async function Qu(e={}){return B(`${dN(e)}/protocols`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??2e4})}async function pN(e={},t={}){let r=(t.yieldsBaseUrl||process.env.DEFILLAMA_YIELDS_URL||lW).replace(/\/$/,""),n=await B(`${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 hN(e={},t={}){let r=(t.stablecoinsBaseUrl||process.env.DEFILLAMA_STABLECOINS_URL||uW).replace(/\/$/,""),n=e.includePrices!==!1;return B(`${r}/stablecoins?includePrices=${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??3e4})}async function gN(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 B(`${dN(t)}/overview/dexs/${r}?${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??3e4})}async function mN(e=["ethereum","bitcoin","solana"],t={}){let r=e.map(i=>`coingecko:${String(i).toLowerCase()}`),n=await lr(r,t),o={};for(let i of e){let s=`coingecko:${String(i).toLowerCase()}`;o[i]=n?.coins?.[s]||null}return o}_();ot();wu();he();import{existsSync as yW,readFileSync as QW,lstatSync as wW}from"node:fs";import{homedir as EN}from"node:os";import{join as Pm}from"node:path";import{Contract as pW,JsonRpcProvider as hW}from"ethers";var gW="0x62FCFAf7573AD8B41a0FBF347AfEb85e06599A75",mW=999,EW="https://rpc.hyperliquid.xyz/evm",IW=["function balanceOf(address owner) view returns (uint256)"],CW=/^0x[a-fA-F0-9]{40}$/;function BW(e){return CW.test(String(e||""))}async function bu(e,{contract:t=gW,rpc:r=EW,chainId:n=mW,balanceOf:o}={}){if(!BW(e))throw new Error("invalid-address");if(o)return BigInt(await o(e));let i=new hW(r,n,{staticNetwork:!0}),s=new pW(t,IW,i);return BigInt(await s.balanceOf(e))}var bW=100,kW=5,IN=Object.freeze({swap:5,bridge:5,perps:0,nft:0});function SW(e){let t=String(e||"swap").toLowerCase();return Object.prototype.hasOwnProperty.call(IN,t)?IN[t]:kW}var xW="ORACLE_INTEGRATOR_FEE_BPS",vW="ORACLE_INTEGRATOR_FEE_RECIPIENT",NW="ORACLE_INTEGRATOR_ID",CN="ORACLE_INTEGRATOR_FEE_RECIPIENT_PIN",RW="oracle";function DW(e=process.env){if(process.env.ORACLE_TEST_ISOLATE_SECRETS==="1"){if(e[CN])return String(e[CN]);let t=e.ORACLE_CONFIG_DIR||Pm(EN(),".config","oracle");return Pm(t,"fee-recipient")}return Pm(EN(),".config","oracle","fee-recipient")}function Om(e=process.env){try{let t=DW(e);if(!yW(t)||wW(t).isSymbolicLink())return"";let r=QW(t,"utf8").trim().toLowerCase();return/^0x[a-f0-9]{40}$/.test(r)?r:""}catch{return""}}function FW(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),bW)}function MW({env:e=process.env,action:t="swap",admin:r=!1}={}){let n=String(e[vW]||"").trim(),o=String(e[NW]||RW).trim();if(r===!0)return{bps:0,recipient:"",integrator:o,action:t,applies:!1,reason:"admin-oracle"};let i=SW(t),s=FW(e[xW],{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=Om(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 ku({wallet:e,env:t=process.env,action:r="swap",holderCheck:n={},admin:o=!1}={}){let i=MW({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 bu(s,n))>0n?{...i,bps:0,applies:!1,reason:"locals-only-holder",holderVerificationStatus:"holder"}:{...i,holderVerificationStatus:"non-holder"}}catch{return{...i,holderVerificationStatus:"unavailable"}}}function BN(e){return e?.applies?`Oracle routing fee ${e.bps} bps (${(e.bps/100).toFixed(2)}%) to ${e.recipient}.`:e?.reason==="admin-oracle"?"No Oracle fee (admin Oracle).":e?.reason==="locals-only-holder"?"No Oracle fee (Locals Only holder).":"No Oracle fee."}function yN(e){return e?.applies?{integrator:e.integrator,fee:String(e.bps/1e4)}:{}}function QN(e){return e?.applies?{partner:e.integrator,partnerFeeBps:String(e.bps),partnerAddress:e.recipient}:{}}var TW="https://li.quest/v1";function Hm(e={}){return(e.baseUrl||process.env.LIFI_API_URL||TW).replace(/\/$/,"")}var qm="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",UW="0x0000000000000000000000000000000000000000";function LW(e){let t=String(e||qm).toLowerCase();return t===qm.toLowerCase()||t===UW}function wN(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 bN(e={}){let t=await B(`${Hm(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 Rn(e={},t={}){let{fromChain:r,toChain:n=r,fromToken:o=qm,toToken:i,fromAmount:s,fromAddress:a=Nn}=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=ft({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 ku({wallet:e.fromAddress,env:t.env,action:e.feeAction||"swap",holderCheck:t.holderCheck});for(let[g,m]of Object.entries(yN(l)))A.set(g,m);let u=await B(`${Hm(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 f=u?.transactionRequest?.to||u?.estimate?.approvalAddress||"lifi",p=fe(u,{chainId:Number(r),venue:f,amountOut:d,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,crossChain:Number(n)!==Number(r),requestedCapBps:e.maxSlippageBps??e.slippageBps}),h=u?.estimate?.toAmountMin||u?.toAmountMin;if(h!=null&&BigInt(h)<BigInt(p.amountOutMinimum))throw new Error("lifi: provider transaction is under-protected versus bounded auto-slippage floor");return{...p,oracleFee:l}}async function kN(e={},t={}){let r=await Rn(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(!LW(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:wN(a,"approval token"),spender:wN(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:ve(r.autoSlippage,{chainId:o,venue:n.to,data:n.data})}},{provider:"lifi",kind:"lifi-tx"})}async function SN(e={}){return B(`${Hm(e)}/chains`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??12e3})}De();ot();he();import{Interface as NN,getAddress as nA,isAddress as PW}from"ethers";var Dn={8453:{name:"base",quoter:"0x254cF9E1E6e233aa1AC962CB9B05b2cfeAaE15b0",router:"0xBE6D8f0d05cC4be24d5167a3eF062215bE6D18a5",factory:"0x5e7BB104d84c7CB9B682AaC2F3d509f5F406809A",weth:"0x4200000000000000000000000000000000000006",usdc:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}},OW=[1,50,100,200,2e3],xN=new NN(["function quoteExactInputSingle((address tokenIn, address tokenOut, uint256 amountIn, int24 tickSpacing, uint160 sqrtPriceLimitX96) params) returns (uint256 amountOut, uint160 sqrtPriceX96After, uint32 initializedTicksCrossed, uint256 gasEstimate)"]),qW=new NN(["function exactInputSingle((address tokenIn, address tokenOut, int24 tickSpacing, address recipient, uint256 deadline, uint256 amountIn, uint256 amountOutMinimum, uint160 sqrtPriceLimitX96) params) payable returns (uint256 amountOut)"]),RN="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",DN="0x0000000000000000000000000000000000000000";function FN(e){let t=Number(e),r=Dn[t];if(!r)throw new Error(`aerodrome: unsupported chainId ${e} (supported: ${Object.keys(Dn).join(", ")})`);return{chainId:t,...r}}function vN(e,t){let r=Dn[Number(t)];if(!e||e===RN||e===DN||/^eth$/i.test(String(e)))return nA(r.weth);let n=String(e);if(/^weth$/i.test(n))return nA(r.weth);if(/^usdc$/i.test(n))return nA(r.usdc);if(!PW(n))throw new Error(`invalid token address: ${e}`);return nA(n)}async function Su(e={},t={}){let{chainId:r,quoter:n,router:o}=FN(e.chainId??8453),i=vN(e.tokenIn||"WETH",r),s=vN(e.tokenOut||Dn[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]:[...OW],c=[],l=null;for(let u of A){let d=xN.encodeFunctionData("quoteExactInputSingle",[{tokenIn:i,tokenOut:s,amountIn:a,tickSpacing:u,sqrtPriceLimitX96:0n}]);try{let f=await z(r,"eth_call",[{to:n,data:d},"latest"],t);if(!f||f==="0x"){c.push({tickSpacing:u,ok:!1,error:"empty result"});continue}let p=xN.decodeFunctionResult("quoteExactInputSingle",f),h={tickSpacing:u,ok:!0,amountOut:p[0].toString(),sqrtPriceX96After:p[1].toString(),initializedTicksCrossed:Number(p[2]),gasEstimate:p[3].toString()};c.push(h),(!l||BigInt(h.amountOut)>BigInt(l.amountOut))&&(l=h)}catch(f){c.push({tickSpacing:u,ok:!1,error:String(f.message||f).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 fe({venue:"aerodrome",chainId:r,chain:Dn[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 MN(e={},t={}){let r=Number(e.chainId??8453),n=FN(r),o=nA(e.recipient||e.from||e.userAddress),i=String(e.tokenIn||"WETH"),s=!e.tokenIn||i===RN||i===DN||/^eth$/i.test(i),a=await Su(e,t),A=Math.min(600,Math.max(30,Number(e.deadlineSeconds??300))),l=Number(t.nowSeconds??Math.floor(Date.now()/1e3))+A,u=qW.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:ve(a.autoSlippage,{chainId:r,venue:n.router,data:u})}},{provider:"aerodrome",kind:"aerodrome-exact-in"})}async function TN(e={}){let t=Number(e.chainId??8453);try{let r=await Su({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:Dn[t]?.router,quoter:Dn[t]?.quoter}}catch(r){return{ok:!1,chainId:t,error:String(r.message||r).slice(0,200)}}}async function UN(){return Object.entries(Dn).map(([e,t])=>({chainId:Number(e),name:t.name,quoter:t.quoter,router:t.router,factory:t.factory,weth:t.weth,usdc:t.usdc}))}_();ot();he();var GW="https://api.0x.org";function LN(e={}){return cr({provider:"zerox",defaultUrl:GW,hosts:["api.0x.org"],url:e.baseUrl||process.env.ZEROX_API_URL})}function _N(e={}){return LN(e).baseUrl}function xu(e={}){return e.apiKey||process.env.ZEROX_API_KEY||process.env.OX_API_KEY||process.env["0X_API_KEY"]||""}function PN(e={}){return Yt({"0x-version":"v2",accept:"application/json"},{"0x-api-key":xu(e)},LN(e).trusted)}async function ON(e={}){if(!xu(e))return{ok:!1,configured:!1,error:"ZEROX_API_KEY not set"};try{let t=await Gm({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 Gm(e={},t={}){if(!xu(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),B(`${_N(t)}/swap/allowance-holder/price?${a}`,{headers:PN(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function vo(e={},t={}){if(!xu(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=ft({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 B(`${_N(t)}/swap/allowance-holder/quote?${A}`,{headers:PN(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),l=c?.buyAmount||c?.grossBuyAmount;return l?fe(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 qN(e={},t={}){if(!e.taker)throw new Error("0x: taker required for executable prepare");let r=await vo(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:ve(r.autoSlippage,{chainId:o,venue:n.to,data:n.data})}},{provider:"zerox",kind:"zerox-tx"})}Du();_();ot();import{TypedDataEncoder as KW,getAddress as iA,isAddress as XW}from"ethers";var iAe=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"}),$W=new Set(["evm:execute","btc:execute","solana:execute","nft:buy","nft:mint","cow:submit"]),JW=new Set(["evm:prepare"]),WW="this capability plane prepares only; sign with the user wallet or oracle signer";function Zi(e=process.env){return String(e.ORACLE_AUTONOMOUS_TRADING??"").trim()==="1"}function VN(e=process.env){return String(e.ORACLE_AUTONOMOUS_MINT??process.env.ORACLE_AUTONOMOUS_MINT??"").trim()==="1"}function $N(e,{env:t=process.env,userInitiated:r=!1,autonomous:n=!1}={}){return $W.has(e)?{capability:e,armed:!1,allowed:!1,reason:WW}:JW.has(e)?String(t.ORACLE_EVM_ADDRESS??"").trim()?!r&&!n?{capability:e,armed:!1,allowed:!1,reason:"preparation requires an explicit request or enabled unattended preparation"}:n&&!Zi(t)?{capability:e,armed:!1,allowed:!1,reason:"unattended preparation is off"}:{capability:e,armed:!1,allowed:!0,reason:null}:{capability:e,armed:!1,allowed:!1,reason:"a public address is required to prepare this action"}:{capability:e,armed:!1,allowed:!1,reason:`unknown capability: ${e}`}}function zW(e,t={}){let r=$N(e,t);if(!r.allowed){let n=new Error(`oracle: ${e} not permitted: ${r.reason}`);throw n.status=r,n}return r}function jW(e=process.env){return{model:"read/prepare plane; sign and broadcast through wallet or oracle signer",armed:[],autonomousTrading:"off",autonomousPreparation:Zi(e)?"ENABLED":"off",note:"Oracle prepares actions. The user wallet or oracle signer signs and submits after confirmation."}}wu();he();var WN={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"},ZW=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),e6=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"}),zm={1:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",8453:"0x4200000000000000000000000000000000000006",42161:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1"},zN={1:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",8453:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",42161:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831"},JN=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"}]}),pAe=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]});function jm(e,t={}){if(t.baseUrl)return t.baseUrl.replace(/\/$/,"");let r=WN[Number(e)];if(!r)throw new Error(`cowswap: unsupported chainId ${e}`);return r}function Fu(e,t){let r=String(e||"").trim();if(!XW(r))throw new Error(`cowswap: ${t} must be an address`);return iA(r).toLowerCase()}function Wm(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 t6(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 r6(e){let t=ZW[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:iA(t)}}function n6(e={},t,r){let n=Fu(e.sellToken,"sellToken"),o=Fu(e.buyToken,"buyToken"),i=Fu(e.receiver||r,"receiver"),s=Number(e.validTo);if(!Number.isInteger(s)||s<=0)throw new Error("cowswap: quote.validTo required");let a=t6(e.appData||e.appDataHash||`0x${"0".repeat(64)}`,"appData");return{sellToken:n,buyToken:o,receiver:i,sellAmount:Wm(e.sellAmount,"sellAmount"),buyAmount:Wm(e.buyAmount,"buyAmount"),validTo:s,appData:a,feeAmount:Wm(e.feeAmount??"0","feeAmount"),kind:String(e.kind||"sell"),partiallyFillable:!!e.partiallyFillable,sellTokenBalance:String(e.sellTokenBalance||"erc20"),buyTokenBalance:String(e.buyTokenBalance||"erc20")}}async function jN(e={}){try{let t=await Fn({chainId:1,sellToken:zm[1],buyToken:zN[1],sellAmountBeforeFee:"1000000000000000",from:Nn},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 Fn(e={},t={}){let r=Number(e.chainId??1),n=_m(e.from||e.owner),o=e.sellToken||zm[r],i=e.buyToken||zN[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=zm[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 B(`${jm(r,t)}/quote`,{method:"POST",body:a,fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),c=A?.quote?.buyAmount||A?.buyAmount;return c?fe(A,{chainId:r,venue:"cowswap-order",amountOut:c,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps}):A}async function KN(e={},t={}){let r=Number(e.chainId??1),n=Fu(_m(e.from||e.owner||e.signer),"owner"),o=await Fn({...e,chainId:r,from:n,signingScheme:e.signingScheme||"eip712"},t),i=n6(o?.quote||o,r,n),s=r6(r),a={domain:s,types:JN,primaryType:"Order",message:i},A=KW.hash(s,JN,i),c=e6[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:iA(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:iA(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:iA(c).toLowerCase(),amount:i.sellAmount}},{provider:"cowswap",kind:"cow-order"})}async function XN(e={},t={}){let r=Number(e.chainId??1),n=String(e.uid||e.orderUid||"").trim();if(!n)throw new Error("cowOrderStatus requires uid");return B(`${jm(r,t)}/orders/${encodeURIComponent(n)}/status`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function ZN(e={},t={}){let r=Number(e.chainId??1),n=String(e.uid||e.orderUid||"").trim();if(!n)throw new Error("cowOrder requires uid");return B(`${jm(r,t)}/orders/${encodeURIComponent(n)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}function eR(){return Object.keys(WN).map(Number)}_();ot();he();var i6="https://api.1inch.dev/swap/v6.0";function tR(e={}){return cr({provider:"oneinch",defaultUrl:i6,hosts:["api.1inch.dev"],url:e.baseUrl||process.env.ONEINCH_API_URL})}function Km(e={}){return tR(e).baseUrl}function sA(e={}){return e.apiKey||process.env.ONEINCH_API_KEY||process.env.ONE_INCH_API_KEY||""}function Xm(e={}){let t=sA(e);return Yt({accept:"application/json"},{Authorization:t?`Bearer ${t}`:""},tR(e).trusted)}async function rR(e={}){if(!sA(e))return{ok:!1,configured:!1,error:"ONEINCH_API_KEY not set"};try{return{ok:!0,configured:!0,dstAmount:(await aA({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 aA(e={},t={}){if(!sA(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 B(`${Km(t)}/${r}/quote?${s}`,{headers:Xm(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3});return a?.dstAmount?fe(a,{chainId:r,venue:"1inch-quote",amountOut:a.dstAmount,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps}):a}function s6(e){return/^(eth|native|0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee)$/i.test(String(e||""))}async function Zm(e={},t={}){if(!sA(t))throw new Error("ONEINCH_API_KEY required for 1inch");let r=Number(e.chainId??1);return B(`${Km(t)}/${r}/approve/spender`,{headers:Xm(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function nR(e={},t={}){if(!sA(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=ft({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 B(`${Km(t)}/${r}/swap?${A}`,{headers:Xm(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=fe(c,{chainId:r,venue:l.to,amountOut:u,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps}),f=null;if(!s6(n)){let p=c?.spender||c?.approvalAddress||(await Zm({chainId:r},t))?.address;if(!p)throw new Error("1inch: ERC-20 route missing approval spender");f={token:n,spender:p,amount:String(i)}}return L({provider:"oneinch",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:r,quote:d,autoSlippage:d.autoSlippage,requiresApproval:f,transaction:{chainId:r,from:l.from||s,to:l.to,data:l.data,value:l.value??"0x0",...l.gas!=null?{gasLimit:l.gas}:{},slippageGuard:ve(d.autoSlippage,{chainId:r,venue:l.to,data:l.data})}},{provider:"oneinch",kind:"oneinch-tx"})}var A6=process.env.HL_WS_URL||"wss://api.hyperliquid.xyz/ws";async function AA(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||A6,s=Date.now();return new Promise((a,A)=>{let c=!1,l=[],u=0,d=new o(i),f=setTimeout(()=>{p(),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 p(){clearTimeout(f);try{d.close()}catch{}}d.addEventListener("open",()=>{d.send(JSON.stringify({method:"subscribe",subscription:e}))}),d.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)}}l.push(g),g.channel&&g.channel!=="subscriptionResponse"?u+=1:g.data&&g.channel==="subscriptionResponse"||g.channel||(u+=1),u>=n&&(p(),c||(c=!0,a({ok:!0,ms:Date.now()-s,subscription:e,messages:l,last:l[l.length-1]})))}),d.addEventListener("error",()=>{p(),c||(c=!0,A(new Error("hl ws error")))})})}async function oR(e={}){try{let t=await AA({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 iR(e={}){let t=await AA({type:"allMids"},e),r=t.last||{};return{ms:t.ms,mids:r.data?.mids||r.data||{},channel:r.channel}}async function sR(e,t={}){if(!e)throw new Error("coin required");let r=await AA({type:"l2Book",coin:String(e)},t);return{ms:r.ms,book:r.last?.data||r.last,channel:r.last?.channel}}var l6=process.env.POLY_WS_URL||"wss://ws-subscriptions-clob.polymarket.com/ws/market";async function Mu(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||l6,a=Date.now();return new Promise((A,c)=>{let l=!1,u=[],d=0,f=new i(s),p=setTimeout(()=>{h(),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 h(){clearTimeout(p);try{f.close()}catch{}}f.addEventListener("open",()=>{f.send(JSON.stringify({assets_ids:r,type:"market"}))}),f.addEventListener("message",g=>{let m;try{m=JSON.parse(typeof g.data=="string"?g.data:String(g.data))}catch{m={raw:String(g.data).slice(0,300)}}u.push(m),d+=1,d>=o&&(h(),l||(l=!0,A({ok:!0,ms:Date.now()-a,assetIds:r,messages:u,last:u[u.length-1]})))}),f.addEventListener("error",()=>{h(),l||(l=!0,c(new Error("poly ws error")))})})}async function aR(e={}){let t=e.assetId||"98022490269692409998126496127597032490334070080325855126491859374983463996227";try{let r=await Mu([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 AR(e,t={}){if(!e)throw new Error("assetId required");let r=await Mu([e],t);return{ms:r.ms,assetId:String(e),data:r.last,messages:r.messages}}_();import{readFileSync as h6,existsSync as g6}from"node:fs";import{getAddress as m6,Interface as Lu,TypedDataEncoder as pR,parseUnits as E6}from"ethers";he();var d6=/^(0|[1-9][0-9]*)$/,Tu=class extends Error{constructor(t){super(`nft gas-war limit: ${t.reason}`),this.name="NftGasWarLimitError",this.verdict=t}};function No(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(!d6.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 f6(e){let t=Number(e);if(!Number.isSafeInteger(t)||t<=0)throw new Error("chainId must be a positive integer");return t}function p6(e={}){return e.maxFeePerGas!=null?No(e.maxFeePerGas,"maxFeePerGas"):e.gasPrice!=null?No(e.gasPrice,"gasPrice"):null}function Uu(e={}){try{let t=f6(e.chainId??e.tx?.chainId),r=e.tx||e,n=e.policy||e,o=n.grant?.maxGasWei??e.grant?.maxGasWei,i=No(n.maxTotalGasWei??n.maxGasWei??o,"maxTotalGasWei"),s=No(r.gasLimit??r.gas,"gasLimit"),a=p6(r);if(a==null)throw new Error("maxFeePerGas or gasPrice required");let A=No(n.maxFeePerGasWei,"maxFeePerGasWei",{required:!1}),c=No(n.maxPriorityFeePerGasWei,"maxPriorityFeePerGasWei",{required:!1}),l=r.maxPriorityFeePerGas==null?null:No(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 eE(e={}){let t=Uu(e);if(!t.ok)throw new Tu(t);return t}var I6="https://api.opensea.io/api/v2",C6="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)",B6=new Lu([`function ${C6}`]),cR=new Lu(["function mintPublic(address nftContract,address feeRecipient,address minterIfNotPayer,uint256 quantity) payable"]),y6=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"]),Q6=new Set(y6),hR=new Set(["solana","flow"]),tE="0x0000000000000000000000000000000000000000";function w6(){let e=process.env.OPENSEA_ENV_FILE||`${process.env.HOME||""}/.config/locals-only/opensea.env`;if(!g6(e))return"";try{for(let t of h6(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 Tr(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||w6()}function gR(e={}){return cr({provider:"opensea",defaultUrl:I6,hosts:["api.opensea.io","testnets-api.opensea.io"],url:e.baseUrl||process.env.OPENSEA_API_URL})}function Mn(e={}){return gR(e).baseUrl}function Tn(e={}){return Yt({accept:"application/json"},{"x-api-key":Tr(e)},gR(e).trusted)}function mR(e){let t=String(e||"ethereum").trim().toLowerCase();if(!Q6.has(t))throw new Error(`opensea: unsupported account chain ${t}`);return t}function ie(e,t="address"){try{return m6(String(e||"").trim().toLowerCase())}catch{throw new Error(`opensea: invalid ${t}`)}}function ER(e,t=null){let r=String(e||"").trim();if(!r)throw new Error("opensea: account address required");if(t&&!hR.has(t)||!t&&/^0x[0-9a-fA-F]{40}$/.test(r))return ie(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 b6(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 k6(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 lR(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 S6(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 IR(e={}){if(!Tr(e))return{ok:!1,configured:!1,error:"OPENSEA_API_KEY not set"};try{let t=await cA("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 cA(e,t={}){if(!e)throw new Error("collection slug required");if(!Tr(t))throw new Error("OPENSEA_API_KEY required");return B(`${Mn(t)}/collections/${encodeURIComponent(e)}`,{headers:Tn(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function CR(e,t={}){let r=await cA(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 lA(e={},t={}){if(!Tr(t))throw new Error("OPENSEA_API_KEY required");let r=mR(e.chain),n=ER(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(`${Mn(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 B(c.toString(),{headers:Tn(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4});for(let u of Array.isArray(l?.nfts)?l.nfts:[])s.push(S6(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 _u(e={},t={}){if(!Tr(t))throw new Error("OPENSEA_API_KEY required");let r=ER(e.address||e.owner),n=await B(`${Mn(t)}/account/${encodeURIComponent(r)}/pnl`,{headers:Tn(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 rE=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 rs(e){let t=String(e||"").trim().toLowerCase(),r=rE[t];if(!r)throw new Error(`opensea: unsupported EVM chain ${t||"(missing)"}`);return{chain:t,chainId:r}}function pt(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 x6(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 ts(e){let t=String(e??"").trim();if(!/^\d+$/.test(t))throw new Error("opensea: tokenId must be an unsigned integer string");return t}function Pu(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 BR(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 v6(e,t){return BR(e.expiration_time??e.expirationTime??e.protocol_data?.parameters?.endTime,t)}function N6(e){let t=e.protocol_data?.parameters?.offer?.[0]||{},r=pt(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 R6(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(rE[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=ie(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=ts(e.asset?.identifier??i.identifierOrCriteria),A=pt(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:ie(e.protocol_address,"listing protocol address"),contract:s,tokenId:a,quantity:N6(e),priceWei:A.toString(),currency:String(e.price?.current?.currency||"").trim()||null,decimals:Number(e.price?.current?.decimals??18),expiry:v6(e,r),counter:pt(e.protocol_data?.parameters?.counter,"listing counter").toString()}}async function uA(e={},t={}){if(!Tr(t))throw new Error("OPENSEA_API_KEY required");let r=rs(e.chain);r.contract=e.contract?ie(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(`${Mn(t)}/listings/collection/${encodeURIComponent(n)}/best`);i.searchParams.set("limit",String(o)),e.next&&i.searchParams.set("next",String(e.next));let s=await B(i.toString(),{headers:Tn(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=>R6(c,r,A)),next:s?.next?String(s.next):null,exec:!1,readOnly:!0}}function nE(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 yR(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"&&yR(r))}function QR(e){return!e||typeof e!="object"?!1:Object.keys(e).some(t=>/^(?:signed.*|rawtransaction|serializedtransaction|txsigned|r|s|v)$/i.test(t))}function wR(e){return!e||typeof e!="object"?!1:QR(e)?!0:Object.values(e).some(t=>t&&typeof t=="object"&&wR(t))}function bR(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"&&bR(o,t,r);return t}function uR(e){return e&&typeof e=="object"&&typeof e.value=="string"?e.value:e}function kR(e,{buyer:t,chainId:r,targets:n}){if(!e||typeof e!="object")throw new Error("opensea: transaction object required");if(QR(e))throw new Error("opensea: signed transaction material refused");if((e.from?ie(uR(e.from),"transaction buyer"):t)!==t)throw new Error("opensea: OpenSea returned a transaction for the wrong buyer");let i=ie(uR(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=B6.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=x6(e.value_hex??e.valueHex??e.value??0);return{from:t,to:i,data:A,value:u.hex,chainId:r,valueWei:u.amount}}function ns(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 dA(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}=ns(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(),Wl)),d={...r,fetchImpl:r.rpcFetchImpl||r.fetchImpl};await u(t,"eth_call",[l,"pending"],d);let f=await u(t,"eth_estimateGas",[l],d);i.push(BigInt(f).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(),Wl)),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),f=(u?.baseFeePerGas==null?0n:BigInt(u.baseFeePerGas))*2n+a;s=l>f?l:f}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 oE(e,t){if(yR(e))throw new Error("opensea: approval steps are not permitted in NFT buy, sweep, or mint preparation");if(wR(e))throw new Error("opensea: signed transaction material refused");let r=bR(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=>kR(n,t))}function iE(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 SR(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 sE(e={},t={}){if(!Tr(t))throw new Error("OPENSEA_API_KEY required");nE(e);let{chain:r,chainId:n}=rs(e.chain),o=ie(e.buyer||e.address,"buyer"),i=ie(e.contract,"NFT contract"),s=ts(e.tokenId),a=Pu(e.quantity),A=pt(e.maxPriceWei,"maxPriceWei",{positive:!0}),c=await uA({chain:r,slug:e.slug,contract:i,limit:e.limit??50},t),l=SR(c.listings,s,a),u=BigInt(l.priceWei);if(u>A)throw new Error("opensea: listing exceeds max price cap");let d=await B(`${Mn(t)}/listings/fulfillment_data`,{method:"POST",headers:Tn(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}),f=oE(d,{buyer:o,chainId:n,targets:new Set([l.protocolAddress])}),p=f.reduce((g,m)=>g+m.valueWei,0n);if(p!==u)throw new Error("opensea: fulfillment total does not match exact listing price");if(p>A)throw new Error("opensea: fulfillment total exceeds max price cap");let h=await dA(f,n,{...t,provider:e.provider||t.provider});return iE({action:"buy",chain:r,chainId:n,slug:c.slug,buyer:o,contract:i,tokenId:s,tokenIds:[s],quantity:a,priceWei:u.toString(),totalWei:p.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:f.map(ns),...h},"nft-buy")}async function aE(e={},t={}){if(!Tr(t))throw new Error("OPENSEA_API_KEY required");nE(e);let{chain:r,chainId:n}=rs(e.chain),o=ie(e.buyer||e.address,"buyer"),i=ie(e.contract,"NFT contract"),s=Pu(e.quantity??e.maxItems),a=Array.isArray(e.tokenIds)?e.tokenIds.map(ts):[];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=pt(e.maxPriceWei,"maxPriceWei",{positive:!0}),c=pt(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,f=null,p=null;for(let y=0;y<5;y+=1){let w=await uA({chain:r,slug:e.slug,contract:i,limit:u,next:p},t);f||(f=w);for(let q of w.listings)d.set(q.orderHash,q);let b=[...d.values()],U=a.length?a.every(q=>b.some(ue=>ue.tokenId===q)):new Set(b.filter(q=>q.quantity===1).map(q=>q.tokenId)).size>=s+Math.min(s,5);if(p=w.next,U||!p)break}f={...f,listings:[...d.values()],next:p};let h;if(a.length)h=a.map(y=>SR(f.listings,y,1));else{let y=new Set;if(h=[...f.listings].sort((w,b)=>{let U=BigInt(w.priceWei),q=BigInt(b.priceWei);return U<q?-1:U>q?1:0}).filter(w=>w.quantity!==1||y.has(w.tokenId)?!1:(y.add(w.tokenId),!0)),h.length<s)throw new Error(`opensea: only ${h.length} unique active floor listings available; requested ${s}`)}if(a.length){let y=h.find(w=>BigInt(w.priceWei)>A);if(y)throw new Error(`opensea: listing ${y.tokenId} exceeds max price cap`)}let g=new Set(h.map(y=>y.protocolAddress)),m=[],C=[];for(let y of h){if(m.length>=s)break;if(BigInt(y.priceWei)>A)continue;let w;try{w=await B(`${Mn(t)}/listings/fulfillment_data`,{method:"POST",headers:Tn(t),body:{listing:{hash:y.orderHash,chain:r,protocol_address:y.protocolAddress},fulfiller:{address:o}},fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3,retries:0,dedupe:!1})}catch(U){let q=Array.isArray(U?.body?.errors)?U.body.errors.join(" "):String(U?.body?.error||U?.message||"");if(!a.length&&U?.status===400&&/order\s+not\s+valid/i.test(q))continue;throw U}let b=oE(w,{buyer:o,chainId:n,targets:g});if(b.length!==1)throw new Error("opensea: each NFT fulfillment must contain exactly one transaction");m.push(y),C.push(b[0])}if(m.length!==s)throw new Error(`opensea: only ${m.length} valid floor fulfillments available; requested ${s}`);let E=m.map(y=>y.tokenId),I=m.reduce((y,w)=>y+BigInt(w.priceWei),0n);if(I>c)throw new Error("opensea: selected listing total exceeds total cap");let Q=C.reduce((y,w)=>y+w.valueWei,0n);if(Q>c)throw new Error("opensea: sweep total exceeds total cap");if(Q!==I)throw new Error("opensea: sweep total does not match exact selected listing total");let N=await dA(C,n,{...t,provider:e.provider||t.provider}),S=m.map(y=>y.expiry).sort()[0];return iE({action:"sweep",chain:r,chainId:n,slug:f.slug,buyer:o,contract:i,tokenIds:E,quantity:s,pricesWei:m.map(y=>y.priceWei),priceWei:null,totalWei:Q.toString(),maxPriceWei:A.toString(),maxTotalWei:c.toString(),expiry:S,orderHashes:m.map(y=>y.orderHash),items:m.map(y=>({orderHash:y.orderHash,counter:y.counter,contract:i,tokenId:y.tokenId,priceWei:y.priceWei})),transactions:C.map(ns),...N},"nft-buy")}function D6(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=ie(o.address,"collection NFT contract");if(i!==r)throw new Error("opensea: OpenSea returned the wrong collection contract");return i}async function AE(e={},t={}){if(!Tr(t))throw new Error("OPENSEA_API_KEY required");nE(e);let{chain:r,chainId:n}=rs(e.chain),o=ie(e.buyer||e.minter||e.address,"buyer"),i=ie(e.contract,"NFT contract"),s=Pu(e.quantity),a=pt(e.priceWei,"priceWei"),A=pt(e.maxTotalWei,"maxTotalWei"),c=Number.isFinite(Number(t.nowMs))?Number(t.nowMs):Date.now(),l=BR(e.expiry,c,"mint expiry"),u=String(e.slug||"").trim();if(!u)throw new Error("opensea: collection slug required");let d=await cA(u,t),f=D6(d,r,i),p=a*BigInt(s);if(p>A)throw new Error("opensea: mint total exceeds total cap");let h=await B(`${Mn(t)}/drops/${encodeURIComponent(u)}/mint`,{method:"POST",headers:Tn(t),body:{minter:o,quantity:s},fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3,retries:0,dedupe:!1}),g=t.allowedMintTargets?.[r]??t.allowedMintTargets?.[n]??e.mintTarget,m=Array.isArray(g)?g:g?[g]:[];if(!m.length)throw new Error("opensea: reviewed SeaDrop mintTarget required");let C=new Set(m.map(ue=>ie(ue,"SeaDrop mint target"))),E=oE(h,{buyer:o,chainId:n,targets:C});if(E.length!==1)throw new Error("opensea: mint must contain exactly one SeaDrop transaction");let I;try{I=cR.decodeFunctionData("mintPublic",E[0].data)}catch{throw new Error("opensea: mint transaction must call SeaDrop mintPublic")}let Q=ie(I[0],"mint NFT contract"),N=ie(I[1],"mint fee recipient"),S=ie(I[2],"mint recipient");if(Q!==f)throw new Error("opensea: mint calldata collection mismatch");if(S!==o)throw new Error("opensea: mint calldata recipient mismatch");if(BigInt(I[3])!==BigInt(s))throw new Error("opensea: mint calldata quantity mismatch");if(cR.encodeFunctionData("mintPublic",[f,N,o,s]).toLowerCase()!==E[0].data.toLowerCase())throw new Error("opensea: mint calldata must be canonical with no suffix");let w=E.reduce((ue,Ve)=>ue+Ve.valueWei,0n);if(w!==p)throw new Error("opensea: mint transaction total does not match exact approved price and quantity");if(w>A)throw new Error("opensea: mint total exceeds total cap");let b=await dA(E,n,{...t,provider:e.provider||t.provider});if(b.simulated!==!0)throw new Error("opensea: mint RPC simulation required");let U=e.gasPolicy||t.gasPolicy||{maxTotalGasWei:e.maxGasWei,maxFeePerGasWei:e.maxFeePerGasWei,maxPriorityFeePerGasWei:e.maxPriorityFeePerGasWei},q=eE({chainId:n,tx:E[0],policy:U});return iE({action:"mint",chain:r,chainId:n,slug:u,buyer:o,contract:f,tokenId:e.tokenId==null?null:ts(e.tokenId),quantity:s,priceWei:a.toString(),totalWei:w.toString(),maxTotalWei:A.toString(),mintTarget:E[0].to,feeRecipient:N,expiry:l,transactions:E.map(ns),gasWar:q,...b},"nft-mint")}function F6(e={}){let t=mR(e.chain);if(hR.has(t))throw new Error("opensea: listing actions currently require an EVM NFT chain");let r=e.startTime||e.start_time?lR(e.startTime||e.start_time,"startTime"):{text:new Date().toISOString(),ms:Date.now()},n=lR(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:ie(e.contract,"NFT contract"),token_id:o,quantity:k6(e.quantity??1,"quantity"),price:{amount:b6(e.price?.amount??e.amount??e.priceAmount,"price amount"),currency:ie(e.price?.currency??e.currency??tE,"price currency")},start_time:r.text,end_time:n.text}}var es={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"}]},dR=new Lu(["function setApprovalForAll(address operator,bool approved)"]),M6=new Lu(["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 fR(e,t){return e?.[t]||(e?.action===t?e:null)}function T6(e,{seller:t,item:r,chainId:n}){let o=Array.isArray(e?.steps)?e.steps:[],i=o.map(E=>fR(E,"createListingsAction")).find(Boolean)||o.find(E=>/createListings/i.test(String(E?.action||""))),s=i?.signatureRequest?.message??i?.typedData,a;try{a=typeof s=="string"?JSON.parse(s):s}catch{throw new Error("opensea: invalid listing typed-data JSON")}if(!a||a.primaryType!=="OrderComponents"||!a.domain||!a.message)throw new Error("opensea: exact Seaport OrderComponents action required");let A=a.domain;if(A.name!=="Seaport"||A.version!=="1.6"||Number(A.chainId)!==n)throw new Error("opensea: listing domain mismatch");let c=ie(A.verifyingContract,"listing protocol"),l=a.message;if(ie(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(ie(u.token,"listing collection")!==r.contract||String(u.identifierOrCriteria)!==r.token_id)throw new Error("opensea: listing NFT mismatch");if(String(u.startAmount)!==String(r.quantity)||String(u.endAmount)!==String(r.quantity))throw new Error("opensea: listing quantity mismatch");if(Number(l.orderType)!==2)throw new Error("opensea: only FULL_RESTRICTED listings are executable");if(!Array.isArray(l.consideration)||!l.consideration.length)throw new Error("opensea: listing consideration required");let d=0n;for(let E of l.consideration){if(Number(E.itemType)!==0||ie(E.token,"listing payment token")!==tE)throw new Error("opensea: executable listings currently require native fixed-price consideration");let I=BigInt(E.startAmount),Q=BigInt(E.endAmount);if(I<=0n||I!==Q)throw new Error("opensea: listing consideration must be fixed and positive");ie(E.recipient,"listing consideration recipient"),d+=I}let f=E6(r.price.amount,18);if(d!==f)throw new Error("opensea: listing price mismatch");let p=BigInt(Math.floor(Date.parse(r.start_time)/1e3)),h=BigInt(Math.floor(Date.parse(r.end_time)/1e3));if(BigInt(l.startTime)!==p||BigInt(l.endTime)!==h)throw new Error("opensea: listing time bounds mismatch");let g=pR.hashStruct("OrderComponents",es,l),m=o.map(E=>fR(E,"itemApprovalAction")).find(Boolean)||o.find(E=>/setApprovalForAll/i.test(String(E?.action||""))),C=null;if(m){let E=m.transaction||m.itemApprovalAction?.transaction,I=kR(E,{buyer:t,chainId:n,targets:new Set([r.contract])}),Q;try{Q=dR.decodeFunctionData("setApprovalForAll",I.data)}catch{throw new Error("opensea: listing approval must be setApprovalForAll")}let N=ie(Q[0],"listing approval operator");if(Q[1]!==!0||I.valueWei!==0n)throw new Error("opensea: listing approval must grant one exact operator with zero value");if(dR.encodeFunctionData("setApprovalForAll",[N,!0]).toLowerCase()!==I.data.toLowerCase())throw new Error("opensea: listing approval calldata must be canonical");C={...I,operator:N}}return{protocolAddress:c,typedData:{domain:A,types:es,primaryType:"OrderComponents",message:l},orderHash:g,priceWei:d,approval:C}}async function fA(e={},t={}){if(!Tr(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=ie(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(F6);if(new Set(o.map(f=>f.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=ie(e.taker,"taker"));let A=await B(`${Mn(t)}/listings/actions`,{method:"POST",headers:Tn(t),body:a,fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3,retries:0,dedupe:!1}),{chainId:c}=rs(o[0].chain),l=T6(A,{seller:r,item:o[0],chainId:c}),u=l.approval?[l.approval]:[],d=u.length?await dA(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(ns),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 cE(e={},t={}){if(e.userConfirmed!==!0)throw new Error("opensea: userConfirmed=true required for listing cancellation");let{chain:r,chainId:n}=rs(e.chain),o=ie(e.seller||e.address||e.owner,"seller"),i=ie(e.protocolAddress,"reviewed Seaport protocol address"),s=ie(e.contract,"NFT contract"),a=ts(e.tokenId),A=Pu(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[y,w]of Object.entries(es)){let b=c.types?.[y];if(!Array.isArray(b)||b.length!==w.length||b.some((U,q)=>U?.name!==w[q].name||U?.type!==w[q].type))throw new Error("opensea: cancellation requires canonical Seaport types")}if(Object.keys(c.types||{}).filter(y=>y!=="EIP712Domain").sort().join(",")!==Object.keys(es).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=ie(u.verifyingContract,"Seaport cancellation target");if(d!==i)throw new Error("opensea: cancellation target mismatch");let f=c.message;if(ie(f.offerer,"listing seller")!==o)throw new Error("opensea: cancellation seller mismatch");if(!Array.isArray(f.offer)||f.offer.length!==1||!Array.isArray(f.consideration)||!f.consideration.length)throw new Error("opensea: cancellation requires one exact previously prepared listing order");if(Number(f.orderType)!==2)throw new Error("opensea: cancellation requires a FULL_RESTRICTED listing order");let p=f.offer[0];if(![2,3].includes(Number(p.itemType)))throw new Error("opensea: cancellation offer must be ERC721 or ERC1155");if(ie(p.token,"cancellation NFT contract")!==s)throw new Error("opensea: cancellation NFT contract mismatch");if(ts(p.identifierOrCriteria)!==a)throw new Error("opensea: cancellation tokenId mismatch");let h=pt(p.startAmount,"cancellation offer startAmount",{positive:!0}),g=pt(p.endAmount,"cancellation offer endAmount",{positive:!0});if(h!==BigInt(A)||g!==BigInt(A))throw new Error("opensea: cancellation quantity mismatch");for(let y of f.consideration){if(Number(y.itemType)!==0||ie(y.token,"cancellation payment token")!==tE)throw new Error("opensea: cancellation requires native fixed-price consideration");let w=pt(y.startAmount,"cancellation consideration startAmount",{positive:!0}),b=pt(y.endAmount,"cancellation consideration endAmount",{positive:!0});if(w!==b)throw new Error("opensea: cancellation consideration must be fixed and positive");ie(y.recipient,"cancellation consideration recipient")}let m=pt(f.startTime,"cancellation startTime");if(pt(f.endTime,"cancellation endTime",{positive:!0})<=m)throw new Error("opensea: cancellation listing time bounds invalid");let E=pR.hashStruct("OrderComponents",es,f),I=String(e.orderHash||"").trim().toLowerCase();if(!/^0x[0-9a-f]{64}$/.test(I)||I!==E.toLowerCase())throw new Error("opensea: cancellation order hash mismatch");let Q=M6.encodeFunctionData("cancel",[[f]]),N=[{from:o,to:d,data:Q,value:"0x0",valueWei:0n,chainId:n}],S=await dA(N,n,{...t,provider:e.provider||t.provider});if(S.simulated!==!0)throw new Error("opensea: cancellation RPC simulation required");return L({provider:"opensea-nft",marketplace:"opensea",kind:"nft-cancel",action:"cancel-listing",prepareReady:!0,chain:r,chainId:n,seller:o,contract:s,tokenId:a,quantity:A,protocolAddress:d,orderHash:E,typedData:{domain:u,types:es,primaryType:"OrderComponents",message:f},transactions:N.map(ns),...S,requiresUserSignature:!0},{provider:"opensea-nft",kind:"nft-cancel"})}De();var xR=999;async function vR(e={}){let t={chainId:xR,rpc:null,dex:null};try{t.rpc=await Vi(xR,e)}catch(r){t.rpc={ok:!1,error:String(r.message||r).slice(0,120)}}try{let r=await Ya("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 NR(e="HYPE",t={}){let n=(await Ya(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 RR(e,t={}){return So(e,t)}_();he();var _6="https://api-mainnet.magiceden.dev/v2",pA=1e9;function DR(e={}){return cr({provider:"magiceden",defaultUrl:_6,hosts:["api-mainnet.magiceden.dev","api-devnet.magiceden.dev"],url:e.baseUrl||process.env.MAGICEDEN_API_URL})}function is(e={}){return DR(e).baseUrl}function Ro(e={}){return e.apiKey||process.env.MAGICEDEN_API_KEY||""}function ss(e={}){let t=Ro(e);return Yt({accept:"application/json"},{Authorization:t?`Bearer ${t}`:""},DR(e).trusted)}function lE(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 os(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 P6(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 O6(e){return Math.round(os(e,"priceSol")*pA)}function q6(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 H6({tokenMint:e,priceSol:t,expiry:r}){return`list ${e} on magiceden-sol for ${t} SOL until ${r}`}function G6(e,t){if(e.userConfirmed!==!0)throw new Error("magiceden: listing requires userConfirmed=true after reviewing tokenMint, priceSol, and expiry");let r=H6(t);if(String(e.confirmation||e.confirmationPhrase||"").trim()!==r)throw new Error(`magiceden: confirmation must equal ${JSON.stringify(r)}`);return r}async function FR(e={}){try{let t=await uE({symbol:"mad_lads"},e);return{ok:!0,provider:"magiceden-sol",keyed:!!Ro(e),readTier:"keyless",prepareTier:Ro(e)?"keyed":"requires MAGICEDEN_API_KEY",floorPriceSol:t.floorPriceSol,exec:!1}}catch(t){return{ok:!1,provider:"magiceden-sol",keyed:!!Ro(e),error:String(t?.message||t).slice(0,160),exec:!1}}}async function uE(e={},t={}){let r=lE(e.symbol||e.collection),n=await B(`${is(t)}/collections/${encodeURIComponent(r)}/stats`,{headers:ss(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/pA:null,listedCount:n?.listedCount??null,volume24hrSol:n?.volume24hr!=null?Number(n.volume24hr)/pA:null,avgPrice24hrSol:n?.avgPrice24hr!=null?Number(n.avgPrice24hr)/pA:null,exec:!1,raw:n}}function MR(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*pA):null,tokenSize:e.tokenSize??1}}async function TR(e={},t={}){let r=lE(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(`${is(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 B(i.toString(),{headers:ss(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3}),a=(Array.isArray(s)?s:[]).map(MR);return{provider:"magiceden-sol",chain:"solana-mainnet-beta",symbol:r,count:a.length,listings:a,exec:!1}}async function UR(e={},t={}){let r=Qe(e.tokenMint||e.mint,"tokenMint"),n=await B(`${is(t)}/tokens/${encodeURIComponent(r)}/listings`,{headers:ss(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3}),o=(Array.isArray(n)?n:[]).map(MR);return{provider:"magiceden-sol",chain:"solana-mainnet-beta",tokenMint:r,listings:o,exec:!1}}async function LR(e={},t={}){if(!Ro(t))throw new Error("magiceden: MAGICEDEN_API_KEY required to build a buy instruction");let r=Qe(e.buyer||e.userPublicKey,"buyer"),n=Qe(e.seller,"seller"),o=Qe(e.tokenMint,"tokenMint"),i=Qe(e.tokenATA||e.tokenAddress,"tokenATA"),s=Qe(e.auctionHouse,"auctionHouse"),a=os(e.priceSol??e.price,"priceSol"),A=e.maxPriceSol==null?a:os(e.maxPriceSol,"maxPriceSol");if(a>A)throw new Error(`magiceden: listing price ${a} SOL exceeds maxPriceSol cap ${A} SOL`);let c=new URL(`${is(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 B(c.toString(),{headers:ss(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3});nn("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:O6(a),transaction:d,transactionEncoding:"base64",raw:l})}async function Ou(e={},t={}){if(!Ro(t))throw new Error("magiceden: MAGICEDEN_API_KEY required to build a list instruction");let r=Qe(e.seller||e.userPublicKey,"seller"),n=Qe(e.tokenMint,"tokenMint"),o=Qe(e.tokenATA||e.tokenAddress,"tokenATA"),i=Qe(e.auctionHouse,"auctionHouse"),s=os(e.priceSol??e.price,"priceSol"),a=q6(e.expiry),A=G6(e,{tokenMint:n,priceSol:s,expiry:a}),c=new URL(`${is(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",Qe(e.sellerReferral,"sellerReferral")),a!=null&&c.searchParams.set("expiry",String(a));let l=await B(c.toString(),{headers:ss(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3});nn("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 _R(e={},t={}){if(!Ro(t))throw new Error("magiceden: MAGICEDEN_API_KEY required to build a mint instruction");let r=Qe(e.buyer||e.userPublicKey,"buyer"),n=lE(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=os(e.maxPriceSol,"maxPriceSol"),i=e.nftAmount==null?1:os(e.nftAmount,"nftAmount");if(!Number.isInteger(i))throw new Error("magiceden: nftAmount must be a whole number");let s=new URL(`${is(t)}/instructions/mint`);s.searchParams.set("symbol",n),s.searchParams.set("wallet",r),s.searchParams.set("nftAmount",String(i));let a=await B(s.toString(),{headers:ss(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),A=P6(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`);nn("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})}he();_();var as=8,dE=10n**BigInt(as),V6="0xa4b1",PR=7,fE=1,$6=2n**64n-1n;function J6(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 gA(e={}){return e.testnet||process.env.HL_TESTNET==="1"?"Testnet":"Mainnet"}function cs(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 hA(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>as)throw new Error(`hl-staking: ${t} has more than ${as} decimals`);let i=BigInt(n)*dE+BigInt((o+"0".repeat(as)).slice(0,as)||"0");if(i<=0n)throw new Error(`hl-staking: ${t} must be greater than zero`);if(i>$6)throw new Error(`hl-staking: ${t} exceeds the uint64 range the signed action encodes`);return i.toString()}function As(e){let t=BigInt(e);return t<=BigInt(Number.MAX_SAFE_INTEGER)?Number(t):e}function on(e){let t=BigInt(String(e||"0")),r=t/dE,n=(t%dE).toString().padStart(as,"0").replace(/0+$/,"");return n?`${r}.${n}`:String(r)}async function OR(e={}){try{let t=await pE(e);return{ok:t.count>0,provider:"hl-staking",chain:gA(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 pE(e={}){let t=await Ie({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 hE(e={},t={}){let r=cs(e.user||e.address,"user"),n=await Ie({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 gE(e={},t={}){let r=cs(e.user||e.address,"user"),n=await Ie({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 qR(e={},t={}){let r=cs(e.user||e.address,"user"),n=await Ie({type:"delegatorRewards",user:r},t);return{provider:"hl-staking",user:r,rewards:Array.isArray(n)?n:[],exec:!1}}async function HR(e={},t={}){let r=cs(e.user||e.address,"user"),n=await Ie({type:"delegatorHistory",user:r},t);return{provider:"hl-staking",user:r,history:Array.isArray(n)?n:[],exec:!1}}function mE(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 qu(e={}){return String(e.signatureChainId||process.env.HL_SIGNATURE_CHAIN_ID||V6)}function W6(e={}){return{name:"HyperliquidSignTransaction",version:"1",chainId:Number(BigInt(qu(e))),verifyingContract:"0x0000000000000000000000000000000000000000"}}function EE({kind:e,action:t,types:r,primaryType:n,message:o,opts:i,notes:s,caps:a}){return L({provider:"hl-staking",venue:"hypercore",chain:gA(i),kind:e,prepareReady:!0,executionReady:!1,signingReady:!1,broadcastReady:!1,requiresUserSignature:!0,signWith:"user wallet (EIP-712 typed data)",submitTo:J6(i),submitShape:{action:t,nonce:t.nonce,signature:"<user 65-byte signature>"},action:t,typedData:{domain:W6(i),types:r,primaryType:n,message:o},caps:a||null,notes:s,exec:!1},{provider:"hl-staking",kind:e})}function GR(e={},t={}){let r=hA(e.amountHype??e.amount,"amountHype"),n=e.maxHype==null?null:hA(e.maxHype,"maxHype");if(n&&BigInt(r)>BigInt(n))throw new Error(`hl-staking: amount ${on(r)} HYPE exceeds maxHype cap ${on(n)} HYPE`);let o=mE(e),i=gA(t),s={type:"cDeposit",hyperliquidChain:i,signatureChainId:qu(t),wei:As(r),nonce:o};return EE({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:As(r),nonce:o},opts:t,caps:{amountHype:on(r),maxHype:n?on(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 YR(e={},t={}){let r=hA(e.amountHype??e.amount,"amountHype"),n=mE(e),o=gA(t),i={type:"cWithdraw",hyperliquidChain:o,signatureChainId:qu(t),wei:As(r),nonce:n};return EE({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:As(r),nonce:n},opts:t,caps:{amountHype:on(r)},notes:[`Starts the ${PR} 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 VR(e={},t={}){let r=cs(e.validator,"validator"),n=hA(e.amountHype??e.amount,"amountHype"),o=!!(e.isUndelegate??e.undelegate??!1),i=e.maxHype==null?null:hA(e.maxHype,"maxHype");if(!o&&i&&BigInt(n)>BigInt(i))throw new Error(`hl-staking: delegate amount ${on(n)} HYPE exceeds maxHype cap ${on(i)} HYPE`);let s=mE(e),a=gA(t),A={type:"tokenDelegate",hyperliquidChain:a,signatureChainId:qu(t),validator:r,wei:As(n),isUndelegate:o,nonce:s};return EE({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:As(n),isUndelegate:o,nonce:s},opts:t,caps:{amountHype:on(n),maxHype:i?on(i):null,validator:r},notes:o?["Returns stake from the validator to your staking balance.",`Delegations carry a ${fE} 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 ${fE} day.`,"Check the validator's commission and jail status before delegating.","Oracle prepared this. Your wallet signs it. Nothing was submitted."]})}async function $R(e={},t={}){let r=cs(e.user||e.address,"user"),n=await hE({user:r},t),o=await gE({user:r},t);return{provider:"hl-staking",user:r,stakingBalanceUndelegated:n.undelegatedWei,stakingBalanceDelegated:n.delegatedWei,pendingWithdrawals:n.nPendingWithdrawals,delegations:o.delegations,unstakingQueueDays:PR,validatorLockupDays:fE,exec:!1}}async function IE(e={}){let t=Date.now();try{let r=await rn(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 j6=24*365,K6=8;function Xe(e){if(e==null)return null;let t=Number(e);return Number.isFinite(t)?t:null}function X6(e,t){return e==null||t==null||t===0?null:(e-t)/t*100}async function Hu(e={},t={}){let[r,n]=await Promise.all([Wi(t),rn(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=Xe(l.markPx),d=Xe(l.prevDayPx),f=Xe(l.openInterest),p=Xe(l.funding);return{coin:A.name,index:c,markPx:u,oraclePx:Xe(l.oraclePx),midPx:Xe(l.midPx)??Xe(n?.[A.name]),prevDayPx:d,change24hPct:X6(u,d),dayNtlVolumeUsd:Xe(l.dayNtlVlm),premium:Xe(l.premium),fundingRate:p,fundingRateAprPct:p==null?null:p*(j6/K6)*100,openInterestCoin:f,openInterestUsd:f==null||u==null?null:f*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 JR(e={},t={}){let r=Math.max(1,Math.min(Number(e.limit)||10,50)),{markets:n,asOfMs:o,totals:i}=await Hu(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 WR(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([Hu({},t),zi({coin:r,interval:n,startTime:s,endTime:i},t).catch(()=>[]),su(r,t).catch(()=>null)]),l=a.markets.find(h=>h.coin===r)||null;if(!l)throw new Error(`hl-markets: ${r} is not a listed perp`);let u=(Array.isArray(A)?A:[]).map(h=>({t:Number(h.t),open:Xe(h.o),high:Xe(h.h),low:Xe(h.l),close:Xe(h.c),volume:Xe(h.v)})),d=c?.levels??[],f=Xe(d?.[0]?.[0]?.px),p=Xe(d?.[1]?.[0]?.px);return{provider:"hl-info",venue:"hyperliquid",kind:"coin-datapoints",asOfMs:Date.now(),coin:r,market:l,book:{bestBid:f,bestAsk:p,spread:f==null||p==null?null:p-f,spreadBps:f==null||p==null||p===0?null:(p-f)/p*1e4},candles:{interval:n,count:u.length,series:u}}}async function zR(e={},t={}){let r=await lu(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}))}}he();var ZR=1e8,ez=1e5,mA={at:0,dexs:null},jR=new Map;async function KR(e={}){let t=Date.now();if(mA.dexs&&t-mA.at<6e4&&!e.fetchImpl)return mA.dexs;let r=await Ie({type:"perpDexs"},e);return mA={at:t,dexs:Array.isArray(r)?r:[]},mA.dexs}async function XR(e="",t={}){let r=e||"",n=Date.now(),o=jR.get(r);if(o&&n-o.at<3e4&&!t.fetchImpl)return o;let i=e?await Ie({type:"metaAndAssetCtxs",dex:e},t):await Wi(t),s=i?.[0]?.universe??i?.universe??[],a=Array.isArray(i?.[1])?i[1]:[],A={at:n,universe:s,ctxs:a};return jR.set(r,A),A}function tz(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:ZR+r}}function Gu(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:ZR+o}}async function CE(e={},t={}){if(e.outcome!=null||e.coin&&String(e.coin).startsWith("#")){let c=e.outcome!=null?Gu(e.outcome,e.side??e.outcomeSide??0):tz(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 f=(await KR(t)).findIndex(I=>I&&I.name===c);if(f<1)throw new Error(`hl-assets: unknown builder dex "${c}"`);let{universe:p,ctxs:h}=await XR(c,t),g=p.findIndex(I=>I.name===r||I.name===`${c}:${u}`||I.name.endsWith(`:${u}`));if(g<0)throw new Error(`hl-assets: ${r} not in dex ${c} meta`);let m=p[g];if(m.isDelisted)throw new Error(`hl-assets: ${r} is delisted`);let C=ez+f*1e4+g,E=h[g]||{};return{kind:"hip3",coin:m.name||r,assetId:C,szDecimals:m.szDecimals??0,maxLeverage:m.maxLeverage??null,dex:c,dexIndex:f,indexInMeta:g,markPx:E.markPx??null}}let{universe:n,ctxs:o}=await XR("",t),i=r.toUpperCase(),s=n.findIndex(c=>c.name===i);if(s<0){if(t.allowBareBuilderLeaf===!0)try{let c=await KR(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 CE({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 eD(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}he();var rz=5,nz=6,nD="0x66eee";var tD=10,BE="ORACLE_HL_BUILDER_ADDRESS",rD="ORACLE_HL_BUILDER_FEE_BPS",Yu=Object.freeze({perp:2,spot:1,hip3:1,hip4:1}),Rt=Object.freeze({LIMIT:"limit",MARKET:"market",STOP_MARKET:"stopMarket",STOP_LIMIT:"stopLimit",TAKE_PROFIT_MARKET:"takeProfitMarket",TAKE_PROFIT_LIMIT:"takeProfitLimit"}),$u=Object.freeze({GTC:"Gtc",IOC:"Ioc",ALO:"Alo"}),Vu=Object.freeze({CROSS:"cross",ISOLATED:"isolated"});function oz(e="perp"){if(e==="perp"||e==="main")return Yu.perp;if(e==="spot")return Yu.spot;if(e==="hip3")return Yu.hip3;if(e==="outcome"||e==="hip4")return Yu.hip4;throw new Error(`hl-perps: unknown builder fee kind ${e}`)}function oD({env:e=process.env,isHolder:t=!1,kind:r="perp"}={}){if(t)return null;let n=String(e?.[BE]||"").trim().toLowerCase();if(!n)return null;if(!/^0x[a-f0-9]{40}$/.test(n))throw new Error(`hl-perps: ${BE} must be an EVM address`);let o=Om(e);if(!o||o!==n)return null;let i=e?.[rD],s=oz(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: ${rD} must be a positive number in 0.1 bps increments`);if(a>tD)throw new Error(`hl-perps: builder fee ${a} bps exceeds the ${tD} 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 iz(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 Ie({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 sz(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||bu;return BigInt(await o(n))>0n?{exempt:!0,status:"holder"}:{exempt:!1,status:"non-holder"}}catch{return{exempt:!1,status:"unavailable"}}}function QE(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 p=s.replace(/0+$/,"");return(o?"-":"")+(p?`${i}.${p}`: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"),f=(t===0?u:`${u.slice(0,-t)}.${u.slice(-t)}`).replace(/(\.\d*?)0+$/,"$1").replace(/\.$/,"");return(o?"-":"")+f}function az(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 QE(n,s,r)}function Un(e,t,r={}){let n=nz-Number(t??0);if(n<0)throw new Error("hl-perps: szDecimals out of range");return QE(az(e,rz,r),n,r)}function Az(e,t){let r=QE(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 Do(e={},t={}){let r=await CE(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 yE(e,{tif:t=$u.GTC,triggerPx:r,isMarket:n,szDecimals:o}={}){switch(e){case Rt.LIMIT:return{limit:{tif:t}};case Rt.MARKET:return{limit:{tif:$u.IOC}};case Rt.STOP_MARKET:case Rt.TAKE_PROFIT_MARKET:return{trigger:{isMarket:!0,triggerPx:Un(r,o),tpsl:e===Rt.STOP_MARKET?"sl":"tp"}};case Rt.STOP_LIMIT:case Rt.TAKE_PROFIT_LIMIT:return{trigger:{isMarket:!1,triggerPx:Un(r,o),tpsl:e===Rt.STOP_LIMIT?"sl":"tp"}};default:throw new Error(`hl-perps: unknown order type ${e}`)}}function ls(e,t){return{action:e,nonce:t,signatureChainId:nD,submitTo:"https://api.hyperliquid.xyz/exchange",note:"Sign locally via @oracle-agent/operator or a wallet. Oracle does not submit."}}function us(e){return L(e,{provider:e.provider||"hl-perps",kind:e.kind})}function iD(e={},t={}){let r=oD({env:t.env});if(!r)throw new Error(`hl-perps: ${BE} 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:nD,maxFeeRate:r.disclosure.percent,builder:r.disclosure.address,nonce:n};return us({provider:"hl-perps",venue:"hyperliquid",kind:"builder-fee-approval",builderFee:r.disclosure,...ls(o,n)})}async function EA(e={},t={}){let r=await Do(e,t),n=String(e.type||Rt.LIMIT),o=e.side?String(e.side).toLowerCase()==="buy":!!e.isBuy,i=!!e.reduceOnly,s=Az(e.size??e.sz,r.szDecimals),a;if(n===Rt.MARKET){let C=Number(r.markPx);if(!Number.isFinite(C)){let N=await rn(t);C=Number(N?.[r.coin]??N?.[String(r.assetId)]??NaN)}if(!Number.isFinite(C))throw new Error("hl-perps: no mark price available for a market order");let E=Number(e.maxSlippageBps??50);if(!Number.isInteger(E)||E<0)throw new Error("hl-perps: maxSlippageBps must be a non-negative integer");if(E>100)throw new Error(`hl-perps: maxSlippageBps ${E} exceeds the hard 100 bps cap`);let I=o?C*(1+E/1e4):C*(1-E/1e4);a=Un(I,r.szDecimals,{roundDown:o});let Q=Math.abs(Number(a)/C-1)*1e4;if(Q>E+1e-9)throw new Error(`hl-perps: tick rounding makes the limit ${Q.toFixed(2)} bps from mark, above the ${E} bps cap`)}else{if(e.price==null&&e.limitPx==null)throw new Error("hl-perps: a limit order requires an explicit price");a=Un(e.price??e.limitPx,r.szDecimals)}let A=yE(n,{tif:e.tif??(n===Rt.MARKET?$u.IOC:$u.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=oD({env:t.env,kind:r.kind}),d=await sz(u,e,t),f=d.exempt?null:u,p=await iz(f,e,t),h=p.approved?f:null;h&&(l.builder=h.wire);let g=Number(e.nonce??Date.now()),m=Number(a)*Number(s);return us({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(m)?m:null,maxLeverage:r.maxLeverage,markPx:r.markPx,builderFee:h?.disclosure??null,holderExempt:d.exempt,holderVerificationStatus:d.status,builderApprovalRequired:f&&!h?{...u.disclosure,...p}:null,...ls(l,g)})}async function Ju(e={},t={}){let r=await Do(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 us({provider:"hl-perps",venue:"hyperliquid",kind:"perp-cancel",coin:r.coin,orderId:Number(n),...ls(o,Number(e.nonce??Date.now()))})}async function sD(e={},t={}){let r=await Do(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||Vu.CROSS).toLowerCase();if(o!==Vu.CROSS&&o!==Vu.ISOLATED)throw new Error('hl-perps: marginMode must be "cross" or "isolated"');let i={type:"updateLeverage",asset:r.assetId,isCross:o===Vu.CROSS,leverage:n};return us({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,...ls(i,Number(e.nonce??Date.now()))})}async function aD(e={},t={}){let r=await Do(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=eD(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 us({provider:"hl-perps",venue:"hyperliquid",kind:"perp-isolated-margin",coin:r.coin,usd:o,...ls(s,Number(e.nonce??Date.now()))})}async function AD(e={},t={}){let r=await EA(e,t),n=await Do(e,t),o=r.side==="buy",i=[r.action.orders[0]];if(e.takeProfitPx!=null&&i.push({a:n.assetId,b:!o,p:Un(e.takeProfitPx,n.szDecimals),s:r.size,r:!0,t:yE(Rt.TAKE_PROFIT_MARKET,{triggerPx:e.takeProfitPx,szDecimals:n.szDecimals})}),e.stopLossPx!=null&&i.push({a:n.assetId,b:!o,p:Un(e.stopLossPx,n.szDecimals),s:r.size,r:!0,t:yE(Rt.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 us({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:Un(e.takeProfitPx,n.szDecimals),stopLossPx:e.stopLossPx==null?null:Un(e.stopLossPx,n.szDecimals),builderFee:r.builderFee,...ls(s,Number(e.nonce??Date.now()))})}async function cD(e={}){let t=await Xa(e);return{provider:"hl-outcome",kind:"outcome-meta",outcomes:t?.outcomes||[],questions:t?.questions||[]}}async function lD(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 Xa(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=Gu(n,o).coin}let i=await EA({...e,coin:r},t);return L({...i,kind:"hip4-order",provider:"hl-perps"},{provider:"hl-perps",kind:"hip4-order"})}async function uD(e={},t={}){let r=e.coin;if(!r&&e.outcome!=null){let n=e.side??0;r=Gu(e.outcome,n).coin}return Ju({...e,coin:r},t)}he();import{createHmac as tce,randomInt as uz}from"node:crypto";import{keccak256 as nce,concat as oce,zeroPadValue as ice,getCreate2Address as sce,AbiCoder as ace}from"ethers";var gD=137;var dz="0xE111180000d2663C0091e4f400237545B87B996B",fz="0xe2222d279d744050d28e00520010520000310F59",dD="0x0000000000000000000000000000000000000000000000000000000000000000",wE=6;var pz={name:"Polymarket CTF Exchange",version:"2",chainId:gD},hz={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"}]},fD={"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 Wu(e){let t=String(e);return t.includes(".")?t.split(".")[1].replace(/0+$/,"").length:0}function zu(e,t){let r=10**t;return Math.floor(e*r+1e-12)/r}function pD(e,t){let r=10**t;return Math.ceil(e*r-1e-12)/r}function gz(e,t){let r=10**t;return Math.round(e*r+Number.EPSILON)/r}function mz(e,t,r,n){let o=gz(Number(r),n.price);if(e==="BUY"){let A=zu(Number(t),n.size),c=A*o;return Wu(c)>n.amount&&(c=pD(c,n.amount+4),Wu(c)>n.amount&&(c=zu(c,n.amount))),{rawMakerAmt:c,rawTakerAmt:A}}let s=zu(Number(t),n.size),a=s*o;return Wu(a)>n.amount&&(a=pD(a,n.amount+4),Wu(a)>n.amount&&(a=zu(a,n.amount))),{rawMakerAmt:s,rawTakerAmt:a}}function hD(e){let t=Number(e).toFixed(wE),[r,n=""]=t.split(".");return(r+n.padEnd(wE,"0").slice(0,wE)).replace(/^0+/,"")||"0"}function Ez(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=dD,builder:d=dD}=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 f=Number(n),p=Number(o);if(!(f>0&&f<1))throw new Error(`price out of (0,1): ${n}`);if(!(p>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 h=fD[String(A)]||fD["0.01"],{rawMakerAmt:g,rawTakerAmt:m}=mz(r,p,f,h),C=hD(g),E=hD(m),I=String(uz(1,2**31-1)),Q=Date.now().toString(),N=r==="BUY"?0:1,S=a?fz:dz,y={salt:I,maker:i,signer:s,tokenId:String(t),makerAmount:C,takerAmount:E,side:N,signatureType:Number(l),timestamp:Q,metadata:u,builder:d};return{domain:{...pz,verifyingContract:S},types:hz,value:y,orderType:c,side:r,notionalUsdc:r==="BUY"?g:m,exchange:S}}function mD(e={}){let t=Ez(e);return L({provider:"poly-clob",kind:"poly-order",chainId:gD,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 Yz,keccak256 as TD}from"ethers";import{createHash as Cz}from"node:crypto";import{wordlists as Bz}from"ethers";var CD=1,yz=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),Qz=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],wz=new Set([12,15,18,21,24]);function bz(e){let t=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return wz.has(t.length)&&t.every(r=>Bz.en.getWordIndex(r)>=0)}var kz=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,Sz=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,xz=new Set(["calldata","data","publickey","pubkey","message","payload","input","extradata"]);function vz(e){let t=BD(e);return xz.has(t)||Sz.test(t)}var ps=class extends Error{constructor(t){super(`action receipt refused: secret-bearing field at ${t}`),this.name="ActionReceiptSecretError",this.code="ACTION_RECEIPT_SECRET"}};function BD(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function Nz(e){let t=BD(e);return[...yz].some(r=>t.includes(r))}function Rz(e,t,r){if(typeof t=="string"){if(Qz.some(n=>n.test(t))||bz(t))throw new ps(r);if(kz.test(t)&&!vz(e))throw new ps(r)}}function hs(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return Rz(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)=>hs(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(Nz(o))throw new ps(i);e[o]!==void 0&&(n[o]=hs(e[o],i,o))}return n}function ur(e){return hs(e)}function bE(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(bE).join(",")}]`:`{${Object.keys(e).map(t=>`${JSON.stringify(t)}:${bE(e[t])}`).join(",")}}`}function yD(e){return bE(hs(e))}function QD(e){if(!e||typeof e!="object"||Array.isArray(e))throw new TypeError("action receipt: object required");let{receiptId:t,summary:r,...n}=e;return Cz("sha256").update(yD(n)).digest("hex")}function fs(e,...t){for(let r of t)if(e[r]!==void 0)return e[r]}function ds(e,t,r){let n=fs(e,...t);if(n==null)throw new TypeError(`action receipt: ${r} required`);return n}function Dz(e){let t=fs(e,"balances","balanceChanges"),r=fs(e,"beforeBalances","balancesBefore","before"),n=fs(e,"afterBalances","balancesAfter","after");return t!==void 0?{balances:t}:r===void 0&&n===void 0?{}:{balances:{...r===void 0?{}:{before:r},...n===void 0?{}:{after:n}}}}function wD(e={}){if(!e||typeof e!="object"||Array.isArray(e))throw new TypeError("action receipt: input object required");hs(e);let t=fs(e,"txHash","transactionHash"),r=fs(e,"phase","stage","resultType")??(t==null?"prepare":"execute");if(r!=="prepare"&&r!=="execute")throw new TypeError('action receipt: phase must be "prepare" or "execute"');let n={receiptVersion:CD,phase:r,intent:ds(e,["intent"],"intent"),route:ds(e,["route"],"route"),decodedAction:ds(e,["decodedAction","action"],"decodedAction"),policyChecks:ds(e,["policyChecks","checks"],"policyChecks"),allowlistHits:ds(e,["allowlistHits","allowlistMatches"],"allowlistHits"),prepareHash:ds(e,["prepareHash"],"prepareHash"),...t==null?{}:{txHash:t},...Dz(e)},o=hs(n);return Object.freeze({...o,receiptId:QD(o)})}var Fz=wD;function ED(e,t=[]){if(typeof e=="string"||typeof e=="number")return String(e);for(let r of t)if(e?.[r]!=null)return String(e[r]);return"recorded"}function ID(e){if(typeof e=="boolean")return e;if(e&&typeof e=="object"){if(typeof e.ok=="boolean")return e.ok;if(typeof e.allowed=="boolean")return e.allowed;if(typeof e.passed=="boolean")return e.passed}return null}function bD(e){if(!e||typeof e!="object")throw new TypeError("action receipt: object required");let t=ED(e.decodedAction,["type","action","method","name"]),r=ED(e.route,["name","provider","venue","id"]),n=Array.isArray(e.policyChecks)?e.policyChecks:Object.values(e.policyChecks||{}),o=n.filter(c=>ID(c)===!0).length,i=n.filter(c=>ID(c)===!1).length,s=Array.isArray(e.allowlistHits)?e.allowlistHits.length:Object.keys(e.allowlistHits||{}).length,a=e.txHash==null?"no transaction hash":`tx ${e.txHash}`,A=e.balances==null?"balances not provided":"before/after balances recorded";return`${e.phase} ${t} via ${r}; policy ${o} passed, ${i} failed; ${s} allowlist hit${s===1?"":"s"}; ${a}; ${A}; receipt ${e.receiptId}`}var Mz=bD;he();import{spawnSync as xE}from"node:child_process";import{existsSync as Fo,readFileSync as Xu,readdirSync as RD,statSync as DD}from"node:fs";import{join as Ur}from"node:path";import{createHash as qz}from"node:crypto";import{existsSync as SD,readFileSync as Tz}from"node:fs";import{dirname as kD,join as kE}from"node:path";import{fileURLToPath as Uz}from"node:url";function Lz(e){let t=kD(Uz(e));for(let r=0;r<8;r+=1){let n=kE(t,"package.json");if(SD(n))try{let i=JSON.parse(Tz(n,"utf8"));if(i&&typeof i.version=="string")return t}catch{}let o=kD(t);if(o===t)break;t=o}throw new Error(`oracle: could not resolve package root from ${e}`)}function ju(e,t){let r=Lz(t),n=kE(r,e);return SD(n)?n:kE(r,"dist","assets",e)}import{isAddress as _z}from"ethers";var xD="5.0.2",Pz={"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 Oz(e,t){return Object.freeze({id:e,contractName:t.contractName,source:t.source,dependency:Object.freeze({name:"OpenZeppelin Contracts",version:xD,tag:`v${xD}`}),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 SE=Object.freeze(Object.fromEntries(Object.entries(Pz).map(([e,t])=>[e,Oz(e,t)])));function Ku(e){let t=SE[String(e||"")];if(!t)throw new Error(`protocol-templates: unknown template "${e}"`);return t}function IA(e,t){try{if(BigInt(e)<=0n)throw new Error}catch{throw new Error(`${t} must be > 0`)}}function CA(e,t){let r=String(e||"");if(!_z(r)||/^0x0{40}$/i.test(r))throw new Error(`${t} must be nonzero address`)}function vD(e,t){let r=Ku(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");IA(i,"safe-erc20: supply"),CA(s,"safe-erc20: initialHolder"),CA(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(IA(i,"safe-erc721-drop: cap"),CA(s,"safe-erc721-drop: treasury"),IA(a,"safe-erc721-drop: mintPrice"),IA(A,"safe-erc721-drop: perWalletCap"),BigInt(A)>BigInt(i))throw new Error("safe-erc721-drop: perWalletCap exceeds cap");CA(c,"safe-erc721-drop: initialOwner")}else if(e==="safe-vesting"){let[n,o,i]=t;CA(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`)}IA(i,"safe-vesting: durationSeconds")}return r}function ND(e){return{authorities:[...e.authority],proxy:!1,upgradeable:!1,arbitraryDelegatecall:!1}}var BA=ju("protocols/templates",import.meta.url),Zu="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 ed(){return Fo(BA)?RD(BA).filter(e=>SE[e]&&DD(Ur(BA,e)).isDirectory()).map(e=>{let t=Ur(BA,e),r=Ur(t,"SECURITY.md");return{id:e,path:t,metadata:Ku(e),securityNotice:Fo(r)?Xu(r,"utf8").slice(0,500):null,disclaimer:Zu}}):[]}function FD(){if(process.env.FORGE_BIN)return process.env.FORGE_BIN;let e=process.env.HOME||"",t=["forge",Ur(e,".foundry/bin/forge")];for(let r of t)if(xE(r,["--version"],{encoding:"utf8"}).status===0)return r;return null}function Hz(){return process.env.SLITHER_BIN?process.env.SLITHER_BIN:xE("slither",["--version"],{encoding:"utf8"}).status===0?"slither":null}function gs(e,t,r){let n=xE(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 Gz(e){let t=qz("sha256");function r(n){let o=DD(n);if(o.isDirectory()){if(["lib","out","cache",".git"].includes(n.split("/").pop()))return;for(let i of RD(n).sort())r(Ur(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(Xu(n)))}return r(e),t.digest("hex")}function vE(e,t={}){let r=Ku(e),n=t.allowSkipStatic!==!1,o=Ur(BA,e);if(!Fo(o))throw new Error(`protocol-templates: unknown template "${e}"`);let i=FD();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(!Fo(Ur(o,"lib","forge-std"))){let f=gs(i,["install","foundry-rs/forge-std","--no-git"],o);if(!f.ok)throw new Error(`protocol-templates: forge install forge-std failed
|
|
50
|
+
${f.stderr}`)}if(!Fo(Ur(o,"lib","openzeppelin-contracts"))){let f=gs(i,["install","OpenZeppelin/openzeppelin-contracts@v5.0.2","--no-git"],o);if(!f.ok)throw new Error(`protocol-templates: forge install openzeppelin failed
|
|
51
|
+
${f.stderr}`)}let s=Ur(o,"lib","openzeppelin-contracts","package.json"),a=Fo(s)?JSON.parse(Xu(s,"utf8")).version:null;if(a!==r.dependency.version)throw new Error(`protocol-templates: OpenZeppelin ${r.dependency.version} required, found ${a||"unknown"}`);let A=gs(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=gs(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=Hz();if(u){let f=gs(u,[".","--filter-paths","lib","--exclude-dependencies"],o);if(l={tool:"slither",ok:f.ok,skipped:!1,stdout:(f.stdout||"").slice(0,1500),stderr:(f.stderr||"").slice(0,500)},!f.ok&&!t.allowStaticFail)throw new Error(`protocol-templates: slither FAILED for ${e}
|
|
55
|
+
${f.stdout}
|
|
56
|
+
${f.stderr}`.slice(0,2e3))}else if(!n)throw new Error("protocol-templates: slither required (allowSkipStatic=false) but not installed");let d=Gz(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:Zu,firmAudit:!1}}function MD(e,t={}){let r=vE(e,t),n=FD(),o=r.path,i=gs(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=Ur(o,"out",`${s}.sol`,`${s}.json`);if(!Fo(a))throw new Error(`protocol-templates: artifact missing at ${a}`);let A=JSON.parse(Xu(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 Vz=new Set(["status","chainId","forkBlockNumber","gasUsed","transactionHash","contractAddress","revertReason"]);function $z(e,t){if(typeof e!="object"||e===null||Array.isArray(e))throw new Error("prepareTemplateDeploy: localForkSimulationReceipt must be an object");let r=ur(e);for(let o of Object.keys(r))if(!Vz.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 UD(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=vD(r,o),s=MD(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 Yz(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}:{...$z(u,n),kind:"local-fork",injected:!0,trusted:!1,gateDecision:!1,networkSideEffects:!1},f={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:f,unsignedDeployEnvelope:{transaction:f,signed:!1,broadcast:!1},abi:s.abi,sourceHash:s.gate.sourceHash,bytecodeHash:TD(a),authorityReport:ND(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:TD(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:Zu},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"})}he();import{createHash as NE}from"node:crypto";import{secp256k1 as yA}from"@noble/curves/secp256k1.js";import{bech32m as LD}from"@scure/base";var DE="Reviewed scaffold and source checks only; NOT a paid security audit. Testnet simulation and independent review are required before mainnet use.",_D="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",rd=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 Vt(e,t){throw new Error(`${e}: ${t}`)}function HD(e){let t=String(e||"").trim();return/^[a-z][a-z0-9_]{1,47}$/.test(t)||Vt("native protocol","projectName must be 2-48 lowercase snake_case characters"),t}function RE(e,t,{min:r=0n,max:n=18446744073709551615n}={}){try{let o=BigInt(e);if(o<r||o>n)throw new Error;return o}catch{Vt(t,`must be an integer from ${r} to ${n}`)}}function Wz(e){let t=String(e||"");if(!t||[...t].some(o=>!_D.includes(o)))return null;let r=0n;for(let o of t)r=r*58n+BigInt(_D.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 PD(e,t){let r=String(e||"").trim(),n=Wz(r);return(!n||n.length!==32)&&Vt(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)||Vt(t,"must be a compressed secp256k1 public key");try{yA.Point.fromHex(r)}catch{Vt(t,"must encode a valid secp256k1 curve point")}return r}function zz(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}Vt("bitcoin-tapscript-vault","script too large")}function FE(e,t){let r=NE("sha256").update(e).digest();return NE("sha256").update(r).update(r).update(t).digest()}function qD(e){return FE("TapLeaf",Buffer.concat([Buffer.from([192]),zz(e.length),e]))}function jz(e,t){let[r,n]=Buffer.compare(e,t)<=0?[e,t]:[t,e];return FE("TapBranch",Buffer.concat([r,n]))}function td(e){return yA.Point.fromHex(e).x.toString(16).padStart(64,"0")}function GD(e){return Buffer.concat([Buffer.from([32]),Buffer.from(e,"hex")])}function Kz(e,t){let r=[];return e.forEach((n,o)=>r.push(GD(td(n)),Buffer.from([o===0?172:186]))),r.push(Buffer.from([80+t,156])),Buffer.concat(r)}function Xz(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 Zz(e,t){return Buffer.concat([Xz(t),Buffer.from([178,117]),GD(td(e)),Buffer.from([172])])}function ej(e,t,r){let n=yA.Point.fromHex(e),o=n.y&1n?n.negate():n,i=Buffer.from(o.x.toString(16).padStart(64,"0"),"hex"),s=BigInt(`0x${FE("TapTweak",Buffer.concat([i,t])).toString("hex")}`)%yA.Point.Fn.ORDER,a=o.add(yA.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:LD.encode(c,[1,...LD.toWords(A)],90),scriptPubKey:`5120${A.toString("hex")}`,outputKey:A.toString("hex"),internalKey:i.toString("hex")}}function dr(e,t){return Object.freeze({path:e,content:t.endsWith(`
|
|
14
58
|
`)?t:`${t}
|
|
15
|
-
`})}function
|
|
59
|
+
`})}function tj(e){let t=NE("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 rj(e){let t=HD(e.projectName),r=PD(e.authority,"solana-safe-vault authority"),n=RE(e.unlockDelaySlots,"solana-safe-vault unlockDelaySlots",{min:1n}),o=String(e.network||"devnet");["localnet","devnet","testnet","mainnet-beta"].includes(o)||Vt("solana-safe-vault network","must be localnet, devnet, testnet, or mainnet-beta");let i=PD(e.programId,"solana-safe-vault programId");i==="11111111111111111111111111111111"&&Vt("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
62
|
declare_id!("${i}");
|
|
@@ -59,7 +103,7 @@ pub mod ${t} {
|
|
|
59
103
|
|
|
60
104
|
#[derive(Accounts)]
|
|
61
105
|
pub struct Initialize<'info> {
|
|
62
|
-
#[account(mut, address = pubkey!("${
|
|
106
|
+
#[account(mut, address = pubkey!("${r}"))]
|
|
63
107
|
pub authority: Signer<'info>,
|
|
64
108
|
#[account(init, payer = authority, space = 8 + Vault::INIT_SPACE, seeds = [b"vault", authority.key().as_ref()], bump)]
|
|
65
109
|
pub vault: Account<'info, Vault>,
|
|
@@ -100,16 +144,16 @@ pub enum VaultError {
|
|
|
100
144
|
#[msg("Vault has insufficient funds")] InsufficientFunds,
|
|
101
145
|
#[msg("Arithmetic overflow")] ArithmeticOverflow,
|
|
102
146
|
}
|
|
103
|
-
`,a=[
|
|
147
|
+
`,a=[dr("Anchor.toml",`[provider]
|
|
104
148
|
cluster = "${o}"
|
|
105
149
|
wallet = "~/.config/solana/id.json"
|
|
106
150
|
|
|
107
151
|
[programs.${o}]
|
|
108
152
|
${t} = "${i}"
|
|
109
|
-
`),
|
|
153
|
+
`),dr("Cargo.toml",`[workspace]
|
|
110
154
|
members = ["programs/${t}"]
|
|
111
155
|
resolver = "2"
|
|
112
|
-
`),
|
|
156
|
+
`),dr(`programs/${t}/Cargo.toml`,`[package]
|
|
113
157
|
name = "${t}"
|
|
114
158
|
version = "0.1.0"
|
|
115
159
|
edition = "2021"
|
|
@@ -125,24 +169,24 @@ default = []
|
|
|
125
169
|
|
|
126
170
|
[dependencies]
|
|
127
171
|
anchor-lang = "0.31.1"
|
|
128
|
-
`),
|
|
129
|
-
// 1. initialize with ${
|
|
172
|
+
`),dr(`programs/${t}/src/lib.rs`,s),dr(`tests/${t}.ts`,`// Generated lifecycle test plan. Run with Anchor on ${o}.
|
|
173
|
+
// 1. initialize with ${n} slots; 2. deposit; 3. reject early withdrawal;
|
|
130
174
|
// 4. advance slots; 5. withdraw as authority; 6. reject non-authority.
|
|
131
|
-
`),
|
|
175
|
+
`),dr("SECURITY.md",`# Security model
|
|
132
176
|
|
|
133
|
-
- Initial and permanent withdrawal authority: \`${
|
|
134
|
-
- Unlock delay: ${
|
|
177
|
+
- Initial and permanent withdrawal authority: \`${r}\`
|
|
178
|
+
- Unlock delay: ${n} slots after the most recent deposit
|
|
135
179
|
- No upgrade authority is created by this source; deployment authority handling is external
|
|
136
180
|
- Run \`anchor build\`, \`anchor test\`, program simulation, and independent review before deployment
|
|
137
|
-
`)];return{family:"solana",network:o,projectName:t,protocolModel:
|
|
181
|
+
`)];return{family:"solana",network:o,projectName:t,protocolModel:rd["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:DE},deploymentPrepared:!1}}function nj(e){let t=HD(e.projectName),r=String(e.network||"testnet");["regtest","signet","testnet","mainnet"].includes(r)||Vt("bitcoin-tapscript-vault network","must be regtest, signet, testnet, or mainnet");let n=Array.isArray(e.signerPubkeys)?e.signerPubkeys.map((m,C)=>OD(m,`signerPubkeys[${C}]`)):[];(n.length<2||n.length>15||new Set(n).size!==n.length)&&Vt("bitcoin-tapscript-vault signerPubkeys","must contain 2-15 unique compressed public keys");let o=Number(RE(e.threshold,"bitcoin-tapscript-vault threshold",{min:1n,max:BigInt(n.length)})),i=OD(e.recoveryPubkey,"bitcoin-tapscript-vault recoveryPubkey");n.includes(i)&&Vt("bitcoin-tapscript-vault recoveryPubkey","must be distinct from signer keys");let s=RE(e.recoveryDelayBlocks,"bitcoin-tapscript-vault recoveryDelayBlocks",{min:1n,max:65535n}),a=`multi_a(${o},${n.map(td).join(",")})`,A=`and_v(v:older(${s}),pk(${td(i)}))`,c=`taproot_tree(${a},${A})`,l=Kz(n,o),u=Zz(i,Number(s)),d=jz(qD(l),qD(u)),f=ej(n[0],d,r),p=`tr(${f.internalKey},{${a},${A}})`,h={version:1,name:t,network:r,descriptorType:"tr",threshold:o,signerPubkeys:n,recoveryPubkey:i,recoveryDelayBlocks:Number(s),miniscript:c,cooperativeMiniscript:a,recoveryMiniscript:A,descriptor:p,address:f.address,scriptPubKey:f.scriptPubKey},g=[dr("policy/miniscript.txt",c),dr("policy/descriptor.txt",p),dr("policy/manifest.json",JSON.stringify(h,null,2)),dr("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)),dr("SECURITY.md",`# Security model
|
|
138
182
|
|
|
139
|
-
- Cooperative path: ${o}-of-${
|
|
183
|
+
- Cooperative path: ${o}-of-${n.length}
|
|
140
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:Ii["bitcoin-tapscript-vault"].protocolModel,policy:{descriptorType:"tr",miniscript:l,cooperativeMiniscript:a,recoveryMiniscript:c,descriptor:f,address:m.address,scriptPubKey:m.scriptPubKey,threshold:o,signerCount:r.length,recoveryDelayBlocks:s.toString()},authorityReport:{cooperativeSigners:r,threshold:o,recoveryPubkey:i,recoveryDelayBlocks:s.toString()},files:g,gate:{sourceChecks:{ok:o<=r.length&&s>0n&&new Set([...r,i]).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:Ec},psbtPrepared:!1,fundingPrepared:!1}}function Ac(){return Object.values(Ii).map(e=>({...e,disclaimer:Ec}))}async function ih(e={}){let t=String(e.templateId||"").trim(),n=Ii[t];n||Pe("protocol-templates",`unknown native template "${t}"`);let r=t==="solana-safe-vault"?XA(e):QA(e),o=YA(r.files);return O({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"})}R();var JA="https://api.geckoterminal.com/api/v2",_i=(e={})=>(e.baseUrl||process.env.GECKOTERMINAL_API_URL||JA).replace(/\/$/,""),Mn=e=>encodeURIComponent(String(e));async function Ic(e={},t={}){let n=Math.max(1,Number(e.page||1));return b(`${_i(t)}/networks?page=${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function sh(e={},t={}){if(!e.network||!e.poolAddress)throw new Error("network and poolAddress required");return b(`${_i(t)}/networks/${Mn(e.network)}/pools/${Mn(e.poolAddress)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function ah(e={},t={}){if(!e.network||!(e.address||e.tokenAddress))throw new Error("network and token address required");return b(`${_i(t)}/networks/${Mn(e.network)}/tokens/${Mn(e.address||e.tokenAddress)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function ch(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(`${_i(t)}/networks/${Mn(e.network)}/pools/${Mn(e.poolAddress)}/ohlcv/${n}?${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function lh(e={}){let t=await Ic({page:1},e);return{ok:Array.isArray(t?.data)&&t.data.length>0,networkSample:t?.data?.length||0}}R();re();ye();K();import{Interface as mh,getAddress as fh,isAddress as eI}from"ethers";var tI="https://api.curve.finance/v1",hh=(e={})=>(e.baseUrl||process.env.CURVE_API_URL||tI).replace(/\/$/,""),nI=Object.freeze({1:"0x45312ea0eFf7E09C83CBE249fa1d7598c4C8cd4e",10:"0x0DCDED3545D565bA3B19E683431381007245d983",56:"0xA72C85C258A81761433B4e8da60505Fe3Dd551CC",137:"0x0DCDED3545D565bA3B19E683431381007245d983",988:"0xFF5Cb29241F002fFeD2eAa224e3e996D24A6E8d1",999:"0xd2002373543Ce3527023C75e7518C274A51ce712",4663:"0xFF5Cb29241F002fFeD2eAa224e3e996D24A6E8d1",8453:"0x4f37A9d177470499A2dD084621020b023fcffc1F",42161:"0x2191718CD32d02B8E60BAdFFeA33E4B5DD9A0A0D",43114:"0x0DCDED3545D565bA3B19E683431381007245d983"}),gh="0x0000000000000000000000000000000000000000",_c=new mh(["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)"]),uh=new mh(["function coins(uint256) view returns (address)"]);function yh(e){let t=nI[Number(e)];if(!t)throw new Error(`curve-router-ng: unsupported chainId ${e}`);return t}function Vr(e,t){if(!eI(e))throw new Error(`${t} must be a valid EVM address`);return fh(e)}function rI(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 dh(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 bh(e,t,n){return[e,t,n,...Array(8).fill(gh)]}function wh(e,t,n,r){return[[BigInt(e),BigInt(t),1n,BigInt(n),BigInt(r)],...Array.from({length:4},()=>[0n,0n,0n,0n,0n])]}function xh(e){return[e,...Array(4).fill(gh)]}async function oI({chainId:e,pool:t,nCoins:n,rpcCall:r,opts:o}){let i=[];for(let s=0;s<n;s++){let a=uh.encodeFunctionData("coins",[s]),c=await r(e,"eth_call",[{to:t,data:a},o.blockTag||"latest"],o),l=uh.decodeFunctionResult("coins",c);i.push(fh(l[0]))}return i}function ph(e,t,n){let r=t.toLowerCase(),o=e.findIndex(i=>i.toLowerCase()===r);if(o<0)throw new Error(`Curve pool does not contain ${n}`);return o}async function Sh(e={}){return b(`${hh(e)}/openapi.json`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs})}async function Pc(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(`${hh(t)}/getPools/${n}/${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function vh(e={}){let t=await Pc({chain:"ethereum",registry:"main"},e),n=t?.data?.poolData?.length||0;return{ok:t?.success===!0&&n>0,poolSample:n}}async function Tc(e={},t={}){let n=Number(e.chainId??8453),r=yh(n),o=Vr(e.pool,"curve pool"),i=Vr(e.tokenIn,"curve tokenIn"),s=Vr(e.tokenOut,"curve tokenOut"),a=rI(e.amountIn,"curve amountIn"),c=dh(e.nCoins??2,"curve nCoins",2,8),l=dh(e.poolType,"curve poolType",1,4),u=t.rpcCall||M,d=await oI({chainId:n,pool:o,nCoins:c,rpcCall:u,opts:t}),p=ph(d,i,"tokenIn"),m=ph(d,s,"tokenOut");if(p===m)throw new Error("Curve token indexes must differ");let f=bh(i,o,s),h=wh(p,m,l,c),g=xh(o),y=_c.encodeFunctionData("get_dy",[f,h,a,g]),S=await u(n,"eth_call",[{to:r,data:y},e.blockTag||"latest"],t),w=_c.decodeFunctionResult("get_dy",S),x=BigInt(w[0]);if(x<=0n)throw new Error("curve quote returned zero output");return W({venue:"curve",router:r,chainId:n,pool:o,tokenIn:i,tokenOut:s,amountIn:a.toString(),amountOut:x.toString(),nCoins:c,poolType:l,swapType:1,i:p,j:m,route:f,swapParams:h.map(k=>k.map(C=>C.toString())),pools:g},{chainId:n,venue:r,amountOut:x.toString(),liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps})}async function Eh(e={},t={}){let n=Number(e.chainId??8453),r=yh(n),o=Vr(e.sender||e.from||e.fromAddress||e.receiver,"curve sender"),i=Vr(e.receiver||e.recipient||o,"curve receiver"),s=await Tc({...e,sender:o},t),a=bh(s.tokenIn,s.pool,s.tokenOut),c=wh(s.i,s.j,s.poolType,s.nCoins),l=xh(s.pool),u=_c.encodeFunctionData("exchange",[a,c,BigInt(s.amountIn),BigInt(s.amountOutMinimum),l,i]);return O({provider:"curve",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:n,quote:s,autoSlippage:s.autoSlippage,requiresApproval:{token:s.tokenIn,spender:r,amount:s.amountIn},transaction:{chainId:n,from:o,to:r,data:u,value:"0",slippageGuard:ee(s.autoSlippage,{chainId:n,venue:r,data:u})}},{provider:"curve",kind:"curve-tx"})}R();re();K();import{Interface as Cc,getAddress as Ch,isAddress as sI}from"ethers";var kh=Object.freeze({42161:"https://arbitrum-api.gmxinfra.io",43114:"https://avalanche-api.gmxinfra.io"}),Ah=Object.freeze({42161:{name:"arbitrum",api:kh[42161],exchangeRouter:"0x1C3fa76e6E1088bCE750f23a5BFcffa1efEF6A41",router:"0x7452c558d45f8afC8c83dAe62C3f8A5BE19c71f6",orderVault:"0x31eF83a530Fde1B38EE9A18093A333D8Bbbc40D5",dataStore:"0xFD70de6b91282D8017aA4E741e9Ae325CAb992d8",reader:"0x470fbC46bcC0f16532691Df360A07d8Bf5ee0789",eventEmitter:"0xC8ee91A54287DB53897056e12D9819156D3822Fb",wnt:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",usdc:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831"},43114:{name:"avalanche",api:kh[43114],exchangeRouter:"0x8f550E53DFe96C055D5Bdb267c21F268fCAF63B2",router:"0x820F5FfC5b525cD4d88Cd91aCf2c28F16530Cc68",orderVault:"0xD3D60D22d415aD43b7e64b510D86A30f19B1B12C",dataStore:"0x2F0b22339414ADeD7D5F06f9D604c7fF5b2fe3f6",reader:"0x62Cb8740E6986B29dC671B2EB596676f60590A5B",eventEmitter:"0xDb17B211c34240B014ab6d61d4A31FA0C0e20c26",wnt:"0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7",usdc:"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"}}),Ih="0x0000000000000000000000000000000000000000",aI=`0x${"0".repeat(64)}`,_h=Object.freeze({marketSwap:0,limitSwap:1,marketIncrease:2,limitIncrease:3,marketDecrease:4,limitDecrease:5,stopLossDecrease:6,stopIncrease:8}),Ph=Object.freeze({noSwap:0,swapPnlTokenToCollateralToken:1,swapCollateralTokenToPnlToken:2}),Pi=new Cc(["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"]),Nh=new Cc(["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)"]),cI=new Cc(["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)"]),lI=Object.freeze({OrderCreated:"created",OrderUpdated:"updated",OrderExecuted:"executed",OrderCancelled:"cancelled",OrderFrozen:"frozen"});function Un(e){let t=Number(e??42161),n=Ah[t];if(!n)throw new Error(`gmx: unsupported chainId ${e} (supported: ${Object.keys(Ah).join(", ")})`);return{chainId:t,...n}}function Ti(e,t={}){let n=Un(e);return(t.baseUrl||n.api).replace(/\/$/,"")}function Te(e,t){if(!sI(e))throw new Error(`${t} must be a valid EVM address`);return Ch(e)}function j(e){return Ch(e).toLowerCase()}function Bn(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 Kt(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 uI(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 dI(e){let t=String(e||"marketIncrease").trim();if(!(t in _h))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:_h[t]}}function pI(e){let t=String(e||"noSwap").trim();if(!(t in Ph))throw new Error(`gmx unsupported decreasePositionSwapType ${t}`);return{key:t,code:Ph[t]}}function mI(e,t){return Array.isArray(e)?e:Array.isArray(e?.[t])?e[t]:[]}function fI(e,t){let n=j(t);return e.find(r=>j(r.marketToken||r.market||r.address)===n)||null}function hI(e,t){let n=j(t);return e.find(r=>j(r.tokenAddress||r.address)===n)||null}function gI({ticker:e,isLong:t,typeKey:n,maxSlippageBps:r}){let o=Bn(e?.minPrice,"gmx minPrice"),i=Bn(e?.maxPrice,"gmx maxPrice"),s=BigInt(r),a=10000n;return n==="marketIncrease"?(t?i*(a+s)/a:o*(a-s)/a).toString():(t?o*(a-s)/a:i*(a+s)/a).toString()}function yI(e,t){let n=t?e.availableLiquidityLong:e.availableLiquidityShort;try{return BigInt(String(n??"0"))}catch{return 0n}}function bI(e){let t=String(e||"").toLowerCase();return/^0x[0-9a-f]{64}$/.test(t)?`0x${t.slice(-40)}`:null}function Qe(e,t,n=r=>r){let o=Array.from(e?.items||e?.[0]||[]).find(i=>String(i?.key??i?.[0]??"")===t);return o?n(o.value??o[1]):null}function wI(e={}){let t=e.addressItems||e[0],n=e.uintItems||e[1],r=e.boolItems||e[3],o=e.bytes32Items||e[4],i=e.stringItems||e[6];return{account:Qe(t,"account",s=>j(s)),market:Qe(t,"market",s=>j(s)),initialCollateralToken:Qe(t,"initialCollateralToken",s=>j(s)),key:Qe(o,"key",s=>String(s).toLowerCase()),reason:Qe(i,"reason",s=>String(s)),sizeDeltaUsd:Qe(n,"sizeDeltaUsd",s=>BigInt(s).toString()),initialCollateralDeltaAmount:Qe(n,"initialCollateralDeltaAmount",s=>BigInt(s).toString()),executionFee:Qe(n,"executionFee",s=>BigInt(s).toString()),acceptablePrice:Qe(n,"acceptablePrice",s=>BigInt(s).toString()),isLong:Qe(r,"isLong",s=>!!s)}}function xI(e={},t){if(j(e.address)!==j(t.eventEmitter))return null;let n;try{n=cI.parseLog({topics:e.topics,data:e.data})}catch{return null}let r=String(n?.args?.eventName||""),o=lI[r];if(!o)return null;let i=wI(n.args.eventData||{}),s=(i.key||String(n.args.topic1||"")).toLowerCase(),a=i.account||bI(n.args.topic2);return{eventName:r,status:o,orderKey:s,account:a?j(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 Th(e){return{executed:5,cancelled:4,frozen:3,created:2,updated:1}[e]||0}function SI(e=[],{chainId:t}={}){let n=Un(t);return(Array.isArray(e)?e:[]).map(r=>xI(r,n)).filter(Boolean).sort((r,o)=>(r.logIndex??0)-(o.logIndex??0))}async function Oh(e={},t={}){return b(`${Ti(e.chainId??42161,t)}/markets`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function Nc(e={},t={}){return b(`${Ti(e.chainId??42161,t)}/markets/info`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function Rh(e={},t={}){return b(`${Ti(e.chainId??42161,t)}/tokens`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function Ci(e={},t={}){return b(`${Ti(e.chainId??42161,t)}/prices/tickers`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function $h(e={}){let t=await Ci({chainId:42161},e);return{ok:Array.isArray(t)&&t.length>0,tickerSample:Array.isArray(t)?t.length:0}}async function Lh(e={},t={}){let n=Un(e.chainId??42161),r=Te(e.account||e.owner||e.user,"gmx account"),o=Kt(e.start??0,"gmx start"),i=Kt(e.end??e.limit??20,"gmx end"),s=Nh.encodeFunctionData("getAccountPositions",[n.dataStore,r,o,i]),c=await(t.rpcCall||M)(n.chainId,"eth_call",[{to:n.reader,data:s},e.blockTag||"latest"],t);return{provider:"gmx",chainId:n.chainId,reader:j(n.reader),dataStore:j(n.dataStore),account:j(r),raw:c}}async function Mh(e={},t={}){let n=Un(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=Nh.encodeFunctionData("getOrder",[n.dataStore,r]),s=await(t.rpcCall||M)(n.chainId,"eth_call",[{to:n.reader,data:o},e.blockTag||"latest"],t);return{provider:"gmx",chainId:n.chainId,reader:j(n.reader),dataStore:j(n.dataStore),key:r,raw:s}}async function Bh(e={},t={}){let n=Un(e.chainId??42161),r=t.receipt||await dr({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 i=SI(r.logs||[],{chainId:n.chainId}),s=e.expectedOrderKey||e.orderKey?String(e.expectedOrderKey||e.orderKey).toLowerCase():null,a=s?i.filter(u=>u.orderKey===s):i;if(a.length===0)return{ok:!1,provider:"gmx",chainId:n.chainId,txHash:o,status:"unknown",reason:s?"order key not found in GMX EventEmitter logs":"no GMX order lifecycle event found",events:i,receipt:r};let c=a.reduce((u,d)=>Th(d.status)>=Th(u.status)?d:u,a[0]),l=e.expectedAccount||e.account?j(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:i,receipt:r}:{ok:!0,provider:"gmx",chainId:n.chainId,txHash:o,status:c.status,orderKey:c.orderKey,account:c.account,market:c.market,eventEmitter:j(n.eventEmitter),events:a,receipt:r}}async function Uh(e={},t={}){let n=Un(e.chainId??42161),r=dI(e.orderType||e.type),o=pI(e.decreasePositionSwapType),i=Te(e.account||e.owner||e.from||e.sender||e.receiver,"gmx account"),s=Te(e.receiver||i,"gmx receiver"),a=Te(e.cancellationReceiver||s,"gmx cancellationReceiver"),c=e.callbackContract?Te(e.callbackContract,"gmx callbackContract"):Ih,l=e.uiFeeReceiver?Te(e.uiFeeReceiver,"gmx uiFeeReceiver"):Ih,u=Te(e.market||e.marketToken,"gmx market"),d=Te(e.initialCollateralToken||e.collateralToken||n.usdc,"gmx initialCollateralToken"),p=r.key==="marketIncrease"?Bn(e.initialCollateralDeltaAmount??e.collateralAmount??e.amountIn,"gmx initialCollateralDeltaAmount"):Kt(e.initialCollateralDeltaAmount??e.collateralAmount??"0","gmx initialCollateralDeltaAmount"),m=Bn(e.sizeDeltaUsd,"gmx sizeDeltaUsd"),f=Bn(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 y=uI(e.maxSlippageBps??e.slippageBps,50),S=e.isLong==null?!0:!!e.isLong,[w,x]=await Promise.all([Nc({chainId:n.chainId},t),Ci({chainId:n.chainId},t)]),k=fI(mI(w,"markets"),u);if(!k)throw new Error("gmx market not found in public registry");if(k.isListed===!1)throw new Error("gmx market is not listed");let C=Te(k.indexToken,"gmx market indexToken"),P=Te(k.longToken,"gmx market longToken"),I=Te(k.shortToken,"gmx market shortToken"),A=j(d);if(![j(P),j(I)].includes(A))throw new Error("gmx collateral token must match market longToken or shortToken for this guarded slice");let v=yI(k,S);if(v>0n&&m>v)throw new Error("gmx sizeDeltaUsd exceeds available market liquidity");let L=hI(x,C);if(!L)throw new Error("gmx index ticker not found");let V=e.acceptablePrice?Bn(e.acceptablePrice,"gmx acceptablePrice").toString():gI({ticker:L,isLong:S,typeKey:r.key,maxSlippageBps:y}),ae=(e.swapPath||[]).map(J=>Te(J,"gmx swapPath market"));if(ae.length>3)throw new Error("gmx swapPath too long for guarded slice");let Ut=Kt(e.triggerPrice??"0","gmx triggerPrice"),an=Kt(e.callbackGasLimit??"0","gmx callbackGasLimit"),nr=Kt(e.minOutputAmount??"0","gmx minOutputAmount"),lt=Kt(e.validFromTime??"0","gmx validFromTime"),ut=!!e.shouldUnwrapNativeToken,rr=e.autoCancel==null?!0:!!e.autoCancel,or=String(e.referralCode||aI);if(!/^0x[0-9a-fA-F]{64}$/.test(or))throw new Error("gmx referralCode must be bytes32 hex");let cn=Array.isArray(e.dataList)?e.dataList:[];for(let J of cn)if(!/^0x[0-9a-fA-F]{64}$/.test(String(J)))throw new Error("gmx dataList entries must be bytes32 hex");let Rs={addresses:{receiver:s,cancellationReceiver:a,callbackContract:c,uiFeeReceiver:l,market:u,initialCollateralToken:d,swapPath:ae},numbers:{sizeDeltaUsd:m,initialCollateralDeltaAmount:p,triggerPrice:Ut,acceptablePrice:BigInt(V),executionFee:f,callbackGasLimit:an,minOutputAmount:nr,validFromTime:lt},orderType:r.code,decreasePositionSwapType:o.code,isLong:S,shouldUnwrapNativeToken:ut,autoCancel:rr,referralCode:or,dataList:cn},N=[];r.key==="marketIncrease"&&p>0n&&N.push(Pi.encodeFunctionData("sendTokens",[d,n.orderVault,p])),N.push(Pi.encodeFunctionData("sendWnt",[n.orderVault,f])),N.push(Pi.encodeFunctionData("createOrder",[Rs]));let $=Pi.encodeFunctionData("multicall",[N]),q={mode:"gmx-order",provider:"gmx",chainId:n.chainId,chain:n.name,orderType:r.key,orderTypeCode:r.code,decreasePositionSwapType:o.key,account:j(i),receiver:j(s),exchangeRouter:j(n.exchangeRouter),router:j(n.router),orderVault:j(n.orderVault),market:j(u),indexToken:j(C),initialCollateralToken:j(d),initialCollateralDeltaAmount:p.toString(),sizeDeltaUsd:m.toString(),executionFee:f.toString(),acceptablePrice:V,maxSlippageBps:y,isLong:S,asyncExecution:!0,issuedAtMs:Number(t.nowMs??Date.now())};return O({provider:"gmx",chainId:n.chainId,chain:n.name,orderReady:!0,executionReady:!1,asyncExecution:!0,orderType:r.key,market:j(u),requiresApproval:r.key==="marketIncrease"&&p>0n?{token:j(d),spender:j(n.router),amount:p.toString()}:null,gmxGuard:q,transaction:{chainId:n.chainId,from:j(i),to:j(n.exchangeRouter),data:$,value:f.toString(),gmxGuard:q}},{provider:"gmx",kind:"gmx-order"})}R();re();K();import{Interface as EI,getAddress as kI,isAddress as AI,keccak256 as Dh,toUtf8Bytes as Fh}from"ethers";var II="https://api.morpho.org/graphql",Ni=new EI(["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)"]),_I=(e={})=>e.baseUrl||process.env.MORPHO_API_URL||II;async function Rc(e,t,n={}){return b(_I(n),{method:"POST",body:{query:e,variables:t},fetchImpl:n.fetchImpl,timeoutMs:n.timeoutMs??2e4})}var PI="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 } } } }",TI="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 zr(e,t){let n=String(e||"").trim();if(!AI(n))throw new Error(`morpho: ${t} must be an address`);return kI(n).toLowerCase()}function CI(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 Oc(e){return Array.isArray(e)?`[${e.map(Oc).join(",")}]`:e&&typeof e=="object"?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${Oc(e[t])}`).join(",")}}`:JSON.stringify(e)}async function Wr(e,t,n,r,o={}){let i=Ni.encodeFunctionData(n,r),a=await(o.rpcCall||M)(Number(e),"eth_call",[{to:t,data:i},"latest"],o);return Ni.decodeFunctionResult(n,a)}function NI(e,t){let n=t.toLowerCase();return(e||[]).find(r=>String(r?.address||"").toLowerCase()===n)||null}async function qh(e={},t={}){let n=Math.min(100,Math.max(1,Number(e.first||20))),r=(e.chainIds||[e.chainId||1]).map(Number);return Rc(PI,{first:n,chainIds:r,where:{chainId_in:r}},t)}async function $c(e={},t={}){let n=Math.min(100,Math.max(1,Number(e.first||20))),r=(e.chainIds||[e.chainId||1]).map(Number);return Rc(TI,{first:n,chainIds:r,where:{chainId_in:r}},t)}async function Hh(e={}){return{ok:(await Rc("query { __typename }",{},e))?.data?.__typename==="Query"}}async function jh(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=zr(e.vault||e.vaultAddress,"vault"),i=zr(e.owner||e.from||e.sender,"owner"),s=zr(e.receiver||i,"receiver"),a=CI(e.amount||e.assets,"amount"),c=Number(e.minTotalAssetsUsd??1e5),l=await $c({chainId:n,first:100},t),u=NI(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 Wr(n,o,"asset",[],t),m=zr(p,"vault asset");if((u?.asset?.address?zr(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[S]=await Wr(n,o,"maxDeposit",[i],t);if(BigInt(a)>BigInt(S.toString()))throw new Error("morpho: amount exceeds maxDeposit");let[w]=await Wr(n,o,"previewDeposit",[a],t);if(BigInt(w.toString())<=0n)throw new Error("morpho: previewDeposit returned zero shares");g={minSharesOut:w.toString()},h=Ni.encodeFunctionData("deposit",[a,s])}else{let[S]=await Wr(n,o,"maxWithdraw",[i],t);if(BigInt(a)>BigInt(S.toString()))throw new Error("morpho: amount exceeds maxWithdraw");let[w]=await Wr(n,o,"previewWithdraw",[a],t);if(BigInt(w.toString())<=0n)throw new Error("morpho: previewWithdraw returned zero shares");g={maxSharesIn:w.toString()},h=Ni.encodeFunctionData("withdraw",[a,s,i])}let y={mode:"erc4626-vault",version:1,provider:"morpho",chainId:n,action:r,vault:o,asset:m,owner:i,receiver:s,amount:a,totalAssetsUsd:d,...g,calldataHash:Dh(Fh(h)),issuedAtMs:Date.now(),expiresAtMs:Date.now()+2e4};return y.guardHash=Dh(Fh(Oc(y))),O({provider:"morpho",protocol:"erc4626-vault",vaultReady:!0,executionReady:!1,signingReady:!1,broadcastReady:!1,requiresUserSignature:!0,chainId:n,action:r,vault:o,asset:m,owner:i,receiver:s,amount:a,vaultInfo:u,vaultGuard:y,requiresApproval:r==="deposit"?{token:m,spender:o,amount:a}:null,transaction:{chainId:n,from:i,to:o,data:h,value:"0x0",madVault:y}},{provider:"morpho",kind:"erc4626-vault"})}R();re();ye();K();import{Interface as RI,getAddress as Lc,isAddress as $I}from"ethers";var LI="https://api-v3.balancer.fi/",MI=(e={})=>e.baseUrl||process.env.BALANCER_API_URL||LI;async function Wh(e,t,n={}){return b(MI(n),{method:"POST",body:{query:e,variables:t},fetchImpl:n.fetchImpl,timeoutMs:n.timeoutMs??2e4})}var BI="query Pools($first: Int, $where: GqlPoolFilter) { poolGetPools(first: $first, where: $where) { id address chain type protocolVersion dynamicData { totalLiquidity volume24h fees24h } } }",Vh=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"}}),UI="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",DI="0x0000000000000000000000000000000000000000",Mc=new RI(["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 Gh(e){let t=Number(e??8453),n=Vh[t];if(!n)throw new Error(`balancer-v3: unsupported chainId ${e} (supported: ${Object.keys(Vh).join(", ")})`);return{chainId:t,...n}}function Kh(e){let t=String(e||"").toLowerCase();return!t||t==="eth"||t==="native"||t===DI||t===UI.toLowerCase()}function Oi(e,t){if(!$I(e))throw new Error(`${t} must be a valid EVM address`);return Lc(e)}function zh(e,t,n){let r=String(e||"");return Kh(r)||/^weth$/i.test(r)?Lc(t.weth):/^usdc$/i.test(r)?Lc(t.usdc):Oi(r,n)}function FI(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 Yh(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 Xh(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 Wh(BI,{first:n,chains:r,where:{chainIn:r}},t)}async function Qh(e={}){return{ok:(await Wh("query { __typename }",{},e))?.data?.__typename==="Query"}}async function Bc(e={},t={}){let n=Gh(e.chainId),r=Oi(e.pool,"balancer pool"),o=e.tokenIn||"WETH",i=zh(o,n,"balancer tokenIn"),s=zh(e.tokenOut||"USDC",n,"balancer tokenOut"),a=FI(e.amountIn,"balancer amountIn"),c=Oi(e.sender||e.from||e.fromAddress||e.recipient,"balancer sender"),l=Mc.encodeFunctionData("querySwapSingleTokenExactIn",[r,i,s,a,c,Yh(e.userData)]),d=await(t.rpcCall||M)(n.chainId,"eth_call",[{to:n.router,data:l},e.blockTag||"latest"],t),p=Mc.decodeFunctionResult("querySwapSingleTokenExactIn",d),m=BigInt(p[0]);if(m<=0n)throw new Error("balancer quote returned zero output");return W({venue:"balancer",protocolVersion:3,chainId:n.chainId,chain:n.name,router:n.router,pool:r,tokenIn:i,tokenOut:s,amountIn:a.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 Jh(e={},t={}){let n=Gh(e.chainId),r=Oi(e.sender||e.from||e.fromAddress||e.recipient,"balancer sender"),o=e.tokenIn||"WETH",i=Kh(o),s=await Bc({...e,sender:r},t),a=Math.min(600,Math.max(30,Number(e.deadlineSeconds??300))),c=Number(t.nowSeconds??Math.floor(Date.now()/1e3)),l=BigInt(c+a),u=e.wethIsEth!=null?!!e.wethIsEth:i,d=Mc.encodeFunctionData("swapSingleTokenExactIn",[s.pool,s.tokenIn,s.tokenOut,BigInt(s.amountIn),BigInt(s.amountOutMinimum),l,u,Yh(e.userData)]);return O({provider:"balancer",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:n.chainId,deadline:l.toString(),quote:s,autoSlippage:s.autoSlippage,requiresApproval:i?null:{token:s.tokenIn,spender:n.router,amount:s.amountIn},transaction:{chainId:n.chainId,from:r,to:n.router,data:d,value:i?s.amountIn:"0",slippageGuard:ee(s.autoSlippage,{chainId:n.chainId,venue:n.router,data:d})}},{provider:"balancer",kind:"balancer-tx"})}R();ye();K();import{getAddress as HI}from"ethers";var jI="https://api-v2.pendle.finance/core",VI=Object.freeze({42161:"0x888888888889758F76e7103c6CbF23ABbF58F946",8453:"0x888888888889758F76e7103c6CbF23ABbF58F946"}),zI="0x0000000000000000000000000000000000000000",WI="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",Zh=(e={})=>(e.baseUrl||process.env.PENDLE_API_URL||jI).replace(/\/$/,"");function Ri(e,t){try{return HI(e)}catch{throw new Error(`${t} must be a valid EVM address`)}}function Dn(e,t){return Ri(e,t).toLowerCase()}function GI(e){let t=String(e||"").toLowerCase();return t==="native"||t==="eth"||t===WI||t===zI}function Uc(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 KI(e){if(!Array.isArray(e)||e.length===0)throw new Error("pendle convert requires inputs[]");return e.map((t,n)=>({token:Ri(t.token,`pendle input ${n} token`),amount:Uc(t.amount,`pendle input ${n} amount`)}))}function YI(e){if(!Array.isArray(e)||e.length===0)throw new Error("pendle convert requires outputs[]");return e.map((t,n)=>Ri(t,`pendle output ${n} token`))}function XI(e){let t=VI[Number(e)];if(!t)throw new Error(`Pendle prepare not enabled for chainId ${e}`);return t}function QI(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 Uc(t,"pendle output amount")}function JI(e,t){let n=(Array.isArray(e)?e:[]).filter(r=>r?.token&&r?.amount&&!GI(r.token)).map(r=>({token:Dn(r.token,"pendle approval token"),spender:Dn(t,"pendle approval spender"),amount:Uc(r.amount,"pendle approval amount")}));return n.length?n.length===1?n[0]:n:null}async function Dc(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(`${Zh(t)}/v1/${n}/markets?${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function e0(e={}){let t=await Dc({chainId:42161,limit:1},e);return{ok:Array.isArray(t?.results),marketSample:t?.results?.length||0}}async function Fc(e={},t={}){let n=Number(e.chainId??42161),r=XI(n),o=e.from||e.fromAddress||e.userAddress||e.taker||e.receiver;if(!o)throw new Error("pendlePrepare requires from/receiver");let i=Ri(e.receiver||o,"pendle receiver"),s=KI(e.inputs),a=YI(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=ge({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:i,slippage:c.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)}:{}},u=await b(`${Zh(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(Dn(p.to,"pendle tx target")!==Dn(r,"pendle router"))throw new Error("Pendle convert returned unexpected router target");if(p.from&&Dn(p.from,"pendle tx sender")!==Dn(o,"pendle sender"))throw new Error("Pendle convert transaction sender mismatch");let m=QI(u),f=W(u,{chainId:n,venue:p.to,amountOut:m,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps});return O({provider:"pendle",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:n,action:u.action||null,quote:f,autoSlippage:f.autoSlippage,requiresApproval:JI(u.requiredApprovals,p.to),transaction:{chainId:n,from:p.from||o,to:p.to,data:p.data,value:p.value??"0x0",slippageGuard:ee(f.autoSlippage,{chainId:n,venue:p.to,data:p.data})}},{provider:"pendle",kind:"pendle-swap"})}async function t0(e={},t={}){let n=await Fc(e,t),{transaction:r,...o}=n;return o}R();ye();K();import{isAddress as e_}from"ethers";var t_="https://api.odos.xyz",qc=(e={})=>(e.baseUrl||process.env.ODOS_API_URL||t_).replace(/\/$/,"");async function Hc(e={}){return b(`${qc(e)}/info/chains`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs})}function n_(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(!e_(String(e.userAddr||"")))throw new Error("odos: valid userAddr required");return t}async function n0(e={},t={}){let n=n_(e),r=ge({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},i=await b(`${qc(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:n,selected:r,quote:i,amountOut:s}}async function r0(e={},t={}){let{chainId:n,quote:r,amountOut:o}=await n0(e,t);return{...W(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 o0(e={},t={}){let{chainId:n,quote:r,amountOut:o}=await n0(e,t),i=await b(`${qc(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}),s=i?.transaction;if(!s?.to||!s?.data)throw new Error("odos: assemble returned no executable transaction");if(Number(s.chainId??n)!==n)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=W(r,{chainId:n,venue:s.to,amountOut:o,liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps}),c=i?.simulation?.amountsOut?.[0];if(c!=null&&BigInt(c)<BigInt(a.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:s.to,amount:String(p.amount)}));return O({provider:"odos",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:n,quote:a,simulation:i.simulation,requiresApproval:d,autoSlippage:a.autoSlippage,transaction:{chainId:n,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:ee(a.autoSlippage,{chainId:n,venue:s.to,data:s.data})}},{provider:"odos",kind:"odos-tx"})}async function i0(e={}){let t=await Hc(e);return{ok:Array.isArray(t?.chains)&&t.chains.length>0,chainCount:t?.chains?.length||0}}R();var s0=/[\u200B-\u200F\u202A-\u202E\u2060-\u2064\uFEFF]/g,o_=/[<>&`*_~[\]()|\\]/g,i_=/[\u0000-\u001F\u007F]/g;function jc(e,{max:t=32,fallback:n=""}={}){return e==null?n:String(e).normalize("NFKC").replace(s0,"").replace(i_,"").replace(o_,"").replace(/\s+/g," ").trim().slice(0,t).trim()||n}function Vc(e){if(e==null)return!1;let t=String(e);return s0.test(t)?!0:/[\u0400-\u04FF\u0370-\u03FF]/.test(t)&&/[A-Za-z]/.test(t)}var a0=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 $i(e,t={}){let n=Number(e),r=t.baseUrl||a0[n];if(!r)throw new Error(`Blockscout not configured for chainId ${n}`);return r.replace(/\/$/,"")}function c0(e){return!!a0[Number(e)]}async function zc(e={},t={}){return b(`${$i(e.chainId||1,t)}/api/v2/stats`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function l0(e={},t={}){if(!e.address)throw new Error("address required");return b(`${$i(e.chainId||1,t)}/api/v2/addresses/${encodeURIComponent(e.address)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function u0(e={},t={}){if(!e.address&&!e.tokenAddress)throw new Error("token address required");return b(`${$i(e.chainId||1,t)}/api/v2/tokens/${encodeURIComponent(e.address||e.tokenAddress)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function d0(e={},t={}){if(!e.address)throw new Error("address required");let n=Number(e.chainId||1),r=`${$i(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 p0(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:{},i=String(o.type||r.token_type||"").toUpperCase();if(t&&i&&!i.includes("ERC-20")&&i!=="ERC20")continue;let s=o.address_hash||o.address||r.token_address||r.tokenAddress||null;if(!s||typeof s!="string")continue;let a=String(r.value??r.balance??"0").replace(/^0x/i,"");if(!/^\d+$/.test(a)||a==="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=jc(o.symbol||o.name,{max:32,fallback:"TOKEN"}),u=jc(o.name,{max:80,fallback:""})||null;n.push({address:s.toLowerCase().startsWith("0x")?s:`0x${s}`,symbol:l,name:u,decimals:c,amountRaw:a,tokenType:i||"ERC-20",source:"blockscout",verification:"indexer-reported",displaySuspicious:Vc(o.symbol)||Vc(o.name)||void 0})}return n}async function m0(e={}){let t=await zc({chainId:8453},e);return{ok:t?.total_blocks!=null||t?.total_transactions!=null,chainId:8453}}import{getAddress as a_}from"ethers";R();re();var c_="TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",h0=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 vt(e={},t){return{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs,env:e.env,...e[t]||{}}}function Li(e,...t){for(let n of t){let r=String(e?.[n]||"").trim();if(r)return r}return null}function f0(e){if(!e)return null;try{return a_(String(e).trim().toLowerCase())}catch{throw new Error("portfolio: EVM address must be a valid 20-byte address")}}function Yt(e={},t=process.env){let n=e.addresses||{},r=f0(n.evm||e.evmAddress||Li(t,"ORACLE_EVM_ADDRESS","ORACLE_DEFAULT_ADDRESS","MAD_OPERATOR_ADDRESS")),o=n.solana||e.solanaAddress||Li(t,"ORACLE_SOLANA_ADDRESS"),i=n.bitcoin||e.bitcoinAddress||Li(t,"ORACLE_BITCOIN_ADDRESS"),s=f0(n.hyperliquid||e.hyperliquidAddress||Li(t,"ORACLE_HYPERLIQUID_ADDRESS")||r);return{evm:r,solana:o?X(o,"portfolio Solana address"):null,bitcoin:i?ot(i,"portfolio Bitcoin address"):null,hyperliquid:s}}function Gr(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,i=o?-n:n,s=10n**BigInt(r),a=i/s,c=String(i%s).padStart(r,"0").replace(/0+$/,"");return`${o?"-":""}${a}${c?`.${c}`:""}`}function Fn(e){let t=Number(e);return Number.isFinite(t)?t:null}function Mi(e){return Number.isFinite(e)?Number(e.toFixed(2)):null}function Et(e){let t=Number(e);return Number.isFinite(t)&&t!==0}function g0(e,t){let n=h0[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 l_(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 i=`${r.mint}:${r.decimals??"unknown"}`,s=t.get(i)||{mint:r.mint,amountRaw:0n,decimals:r.decimals??null,programs:new Set,accounts:0};s.amountRaw+=o,s.accounts+=1,n.program&&s.programs.add(n.program),t.set(i,s)}return[...t.values()].map(n=>{let r=n.amountRaw.toString(),o=n.decimals==null?null:Gr(r,n.decimals),i=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:i?"collectible-candidate":"fungible-or-unclassified",priceUsd:null,usdValue:null}})}function Wc(e,t){return{family:e,status:"unsupported",reason:t}}function Gc(e,t){if(!e||e.status!=="ok")return e;let n=g0(t,e.symbol),r=Fn(e.amount),o=r!=null&&n.priceUsd!=null?Mi(r*n.priceUsd):null;return{...e,price:n,usdValue:o}}async function y0(e={}){let t=Yt({},e.env||process.env);return{ok:!0,provider:"portfolio",readOnly:!0,configuredFamilies:Object.entries(t).filter(([,n])=>!!n).map(([n])=>n)}}async function Bi(e={},t={}){let n=new Date().toISOString(),r=Yt(e,t.env||process.env),o=e.includePrices!==!1,i=e.includeTokens!==!1,s=e.includeCollectibles!==!1,a=new Map(mt.map(N=>[N.chainId,N])),c=Array.isArray(e.evmChainIds)&&e.evmChainIds.length?[...new Set(e.evmChainIds.map(Number))]:[...a.keys()],l=[...new Set(Object.values(h0))],u=o?ie(()=>Me(l,vt(t,"prices"))):Promise.resolve({ok:!1,ms:0,error:"price lookup disabled"}),d=ln(c,e.concurrency||5,async N=>{let $=a.get(N);if(!$)return{family:"evm",chainId:N,name:null,address:r.evm,status:"unsupported",error:"chainId is not in Oracle's configured EVM registry"};if(!r.evm)return{family:"evm",chainId:N,name:$.name,address:null,status:"not-configured",error:"set ORACLE_EVM_ADDRESS or pass addresses.evm"};let q={...vt(t,"evm"),rpcUrl:e.rpcUrls?.[N]||t.evm?.rpcUrls?.[N]},J=await ie(()=>Ft(N,r.evm,q));if(!J.ok)return{family:"evm",chainId:N,name:$.name,address:r.evm,status:"unavailable",latencyMs:J.ms,error:J.error};let le=$.nativeCurrency?.decimals??18,Se=$.nativeCurrency?.symbol||"NATIVE",U=J.data.balanceWei,ne={status:i?"unavailable":"not-requested",assets:[],reason:i?"EVM JSON-RPC cannot enumerate wallet tokens without an address indexer":"token discovery disabled"};if(i&&c0(N)){let Dt=await ie(()=>d0({chainId:N,address:r.evm},{...vt(t,"blockscout"),timeoutMs:t.timeoutMs??18e3}));Dt.ok?ne={status:"ok",assets:p0(Dt.data,{fungibleOnly:!0}).map(ir=>{let sr=Gr(ir.amountRaw,ir.decimals);return{...ir,amount:sr,priceUsd:null,usdValue:null}}),reason:null,source:"blockscout",latencyMs:Dt.ms}:ne={status:"unavailable",assets:[],reason:Dt.error||"blockscout token-balances failed",source:"blockscout",latencyMs:Dt.ms}}return{family:"evm",chainId:N,name:$.name,address:r.evm,status:"ok",latencyMs:J.ms,native:{status:"ok",symbol:Se,amountRaw:U,decimals:le,amount:Gr(U,le)},fungibleTokens:ne,collectibles:{status:s?"unavailable":"not-requested",assets:[],reason:s?"EVM JSON-RPC cannot enumerate wallet NFTs without an address indexer":"collectible discovery disabled"},source:ne.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 N=vt(t,"solana"),$=await ie(()=>Mo({address:r.solana},N)),q=i||s?await Promise.all([ie(()=>Er({owner:r.solana,programId:ba},N)).then(ne=>({...ne,program:"spl-token"})),ie(()=>Er({owner:r.solana,programId:c_},N)).then(ne=>({...ne,program:"token-2022"}))]):[],J=l_(q),le=J.filter(ne=>ne.classification==="collectible-candidate"),Se=J.filter(ne=>ne.classification!=="collectible-candidate"),U=q.filter(ne=>!ne.ok).map(ne=>ne.error);return{family:"solana",name:"Solana Mainnet",address:r.solana,status:$.ok||q.some(ne=>ne.ok)?"ok":"unavailable",native:$.ok?{status:"ok",symbol:"SOL",amountRaw:$.data.lamports,decimals:9,amount:Gr($.data.lamports,9),slot:$.data.slot}:{status:"unavailable",symbol:"SOL",error:$.error},fungibleTokens:{status:i?U.length===q.length?"unavailable":U.length?"partial":"ok":"not-requested",assets:i?Se:[],errors:U,note:"SPL accounts are unverified until a metadata/indexer source confirms symbol and spam status"},collectibles:{status:s?U.length===q.length?"unavailable":"partial":"not-requested",assets:s?le:[],errors:U,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 N=vt(t,"bitcoin"),$=vt(t,"bitcoinMeta"),[q,J,le]=await Promise.all([ie(()=>Uo({address:r.bitcoin},N)),i?ie(()=>Fo({address:r.bitcoin},$)):Promise.resolve({ok:!1,ms:0,error:"token discovery disabled"}),s?ie(()=>yn({address:r.bitcoin},$)):Promise.resolve({ok:!1,ms:0,error:"collectible discovery disabled"})]),Se=J.ok?J.data:null,U=le.ok?le.data:null;return{family:"bitcoin",name:"Bitcoin Mainnet",address:r.bitcoin,status:q.ok||Se?.ok||U?.ok?"ok":"unavailable",native:q.ok?{status:"ok",symbol:"BTC",amountRaw:q.data.balanceSats,decimals:8,amount:Gr(q.data.balanceSats,8)}:{status:"unavailable",symbol:"BTC",error:q.error},fungibleTokens:{status:i?Se?.ok?"ok":"unavailable":"not-requested",assets:Se?.balances||[],error:Se?.ok?null:Se?.error||J.error,verification:"indexer-reported"},collectibles:{status:s?U?.ok?"ok":"unavailable":"not-requested",assets:U?.inscriptions||[],error:U?.ok?null:U?.error||le.error,unknownNotEmpty:!!U?.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 N=vt(t,"hyperliquid"),[$,q,J]=await Promise.all([ie(()=>No(r.hyperliquid,N)),ie(()=>Ro(r.hyperliquid,N)),ie(()=>rt(N))]),le=($.ok&&Array.isArray($.data?.balances)?$.data.balances:[]).filter(U=>Et(U.total)||Et(U.hold)).map(U=>({coin:U.coin||null,total:String(U.total??"0"),hold:String(U.hold??"0"),priceUsd:null,usdValue:null})),Se=(q.ok&&Array.isArray(q.data?.assetPositions)?q.data.assetPositions:[]).map(U=>U.position||U).filter(U=>Et(U.szi)).map(U=>({coin:U.coin||null,size:String(U.szi??"0"),entryPrice:U.entryPx??null,positionValueUsd:U.positionValue??null,unrealizedPnlUsd:U.unrealizedPnl??null,liquidationPrice:U.liquidationPx??null}));return{family:"hyperliquid",name:"Hyperliquid HyperCore",address:r.hyperliquid,status:$.ok||q.ok?"ok":"unavailable",spot:{status:$.ok?"ok":"unavailable",balances:le,error:$.ok?null:$.error},perps:{status:q.ok?"ok":"unavailable",accountValueUsd:q.data?.marginSummary?.accountValue??null,withdrawableUsd:q.data?.withdrawable??null,positions:Se,error:q.ok?null:q.error},mids:J.ok?J.data:{},source:"hyperliquid-info"}})(),[h,g,y,S,w]=await Promise.all([d,p,m,f,u]),x=w.ok?w.data:null,k=Object.freeze({1:"ethereum",10:"optimism",56:"bsc",137:"polygon",8453:"base",42161:"arbitrum",43114:"avax",81457:"blast",534352:"scroll",59144:"linea",324:"era"}),C=[];for(let N of h){if(N.family!=="evm"||N.fungibleTokens?.status!=="ok")continue;let $=k[N.chainId];if($)for(let q of N.fungibleTokens.assets||[])q.address&&C.push(`${$}:${String(q.address).toLowerCase()}`)}let P=null;if(o&&C.length){let N=[...new Set(C)],$=await ie(()=>Me(N,vt(t,"prices")));$.ok&&(P=$.data)}let I=h.map(N=>{let $=N.native?{...N,native:Gc(N.native,x)}:N;if($.fungibleTokens?.status==="ok"&&Array.isArray($.fungibleTokens.assets)){let q=k[$.chainId],J=$.fungibleTokens.assets.map(le=>{let Se=String(le.symbol||"").toUpperCase(),U=null;if(["USDC","USDT","USDT0","DAI","USDBC","USDE","USDCE"].includes(Se)&&(U=1),U==null&&q&&le.address&&P?.coins){let ju=`${q}:${String(le.address).toLowerCase()}`,ir=P.coins[ju],sr=Number(ir?.price);Number.isFinite(sr)&&sr>0&&(U=sr)}let ne=Fn(le.amount),Dt=ne!=null&&U!=null?Mi(ne*U):null;return{...le,priceUsd:U,usdValue:Dt}});$={...$,fungibleTokens:{...$.fungibleTokens,assets:J}}}return $});g.native&&(g.native=Gc(g.native,x)),y.native&&(y.native=Gc(y.native,x));let A=0,v=0,L=0;for(let N of[...I,g,y]){N.native?.status==="ok"&&Et(N.native.amount)&&(N.native.usdValue!=null?(A+=N.native.usdValue,v+=1):L+=1);for(let $ of N.fungibleTokens?.assets||[])!Et($.amount)&&!Et($.amountRaw)||($.usdValue!=null?(A+=$.usdValue,v+=1):L+=1)}let V=g0(x,"HYPE");for(let N of S.spot?.balances||[]){let $=String(N.coin||"").toUpperCase(),q=$==="USDC"||$==="USDT"||$==="USDT0"?1:$==="HYPE"?V.priceUsd||Fn(S.mids?.HYPE):Fn(S.mids?.[N.coin]),J=Fn(N.total);N.priceUsd=q,N.usdValue=J!=null&&q!=null?Mi(J*q):null,Et(N.total)&&(N.usdValue!=null?(A+=N.usdValue,v+=1):L+=1)}let ae=Fn(S.perps?.accountValueUsd);ae!=null&&ae!==0&&(A+=ae,v+=1);let Ut=[...g.fungibleTokens?.assets||[],...g.collectibles?.assets||[]].filter(N=>Et(N.amount)).length,an=(y.fungibleTokens?.assets||[]).length+(y.collectibles?.assets||[]).length;L+=Ut+an;let nr=[...I,g,y,S],lt=N=>nr.filter($=>$.status===N).length,ut=[],rr=I.filter(N=>N.fungibleTokens?.status==="unavailable"),or=I.filter(N=>N.fungibleTokens?.status==="ok");rr.length&&!or.length?ut.push("EVM token discovery is unavailable without a working address indexer; native balances are still live."):rr.length&&ut.push(`EVM token discovery partial: Blockscout covered ${or.length} chain(s); ${rr.length} chain(s) still native-only.`),(g.fungibleTokens?.assets?.length||g.collectibles?.assets?.length)&&ut.push("Solana token accounts are unverified and may include spam; collectible candidates are not confirmed NFTs."),y.collectibles?.unknownNotEmpty&&ut.push("Bitcoin inscription holdings are unknown, not zero, because no address indexer is configured."),w.ok||ut.push(`Price provider unavailable: ${w.error}`);let cn=[Wc("cosmos","requires a chain-specific bech32 address and LCD/RPC adapter"),Wc("sui","Sui balance adapter is not installed"),Wc("aptos","Aptos balance adapter is not installed")],Rs=nr.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:n,addresses:r,coverage:{requestedSurfaces:nr.length,ok:lt("ok"),unavailable:lt("unavailable"),notConfigured:lt("not-configured"),unsupported:lt("unsupported")+cn.length,evmChainsRequested:c.length,evmChainsOk:I.filter(N=>N.status==="ok").length},valuation:{knownUsd:Mi(A),label:"known priced value, not a complete portfolio total",pricedItems:v,unpricedNonzeroItems:L,complete:L===0&&!Rs&<("unavailable")===0&<("not-configured")===0&&cn.length===0,priceSource:o?"DefiLlama":null,priceStatus:w.ok?"ok":"unavailable",priceQueriedAt:n},chains:[...I,g,y,S],unsupportedFamilies:cn,warnings:ut}}import{constants as Di}from"node:fs";import{chmod as $_,mkdir as L_,open as M_,readFile as B_}from"node:fs/promises";import{createHash as U_,randomUUID as D_}from"node:crypto";import F_ from"node:os";import Hn from"node:path";R();R();var d_=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"]),p_=new Set(["image/jpeg","image/png","image/webp"]);function m_(e){let t=String(e||"").toLowerCase();return d_.some(n=>t===n||t.endsWith(`.${n}`))}function f_(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 b0(e){let t=f_(e),n;try{n=new URL(t)}catch{return null}return n.protocol!=="https:"||n.username||n.password||!m_(n.hostname)?null:n}async function h_(e,t={}){let n=t.fetchImpl||globalThis.fetch;if(typeof n!="function")throw new Error("gallery fetch unavailable");let r=b0(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 i=0;i<=3;i+=1){let s=await ie(()=>n(r.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 d=a.headers?.get?.("location");if(!d)throw new Error("image redirect missing location");let p=b0(new URL(d,r).toString());if(!p)throw new Error("image redirect left the host allowlist");r=p;continue}if(!a.ok)throw new Error(`image HTTP ${a.status}`);let c=String(a.headers?.get?.("content-type")||"").split(";",1)[0].toLowerCase();if(!p_.has(c))throw new Error(`unsafe or unsupported image type ${c||"unknown"}`);if(Number(a.headers?.get?.("content-length")||0)>o)throw new Error("image exceeds gallery byte cap");let u=Buffer.from(await a.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 Kc(e){return String(e??"").replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function g_(e,t){return e.name||e.collection||e.tokenId||`NFT ${t+1}`}async function w0(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),i=Math.max(Math.ceil(n.length/r),1);if(o>i)throw new Error(`nft gallery page ${o} exceeds ${i}`);let s=n.slice((o-1)*r,o*r),a=[],c=0,l=Math.min(Math.max(Number(e.maxTotalBytes??8e6),25e4),12e6);for(let w of s){if(c>=l){a.push({item:w,image:null,error:"gallery page byte cap reached"});continue}try{let x=await h_(w.imageUrl||w.originalImageUrl,{...t,maxImageBytes:Math.min(Number(e.maxImageBytes??15e5),l-c)});c+=x.bytes,a.push({item:w,image:x,error:null})}catch(x){a.push({item:w,image:null,error:String(x?.message||x).slice(0,180)})}}let u=3,d=340,p=400,m=76,f=Math.ceil(s.length/u),h=u*d,g=m+f*p,y=a.map(({item:w,image:x,error:k},C)=>{let P=C%u,I=Math.floor(C/u),A=P*d,v=m+I*p,L=x?`<image x="${A+14}" y="${v+14}" width="312" height="312" preserveAspectRatio="xMidYMid slice" href="data:${x.mimeType};base64,${x.data}"/>`:`<rect x="${A+14}" y="${v+14}" width="312" height="312" rx="14" fill="#151820"/><text x="${A+170}" y="${v+165}" text-anchor="middle" fill="#76808f" font-size="16">image unavailable</text>`,V=Kc(g_(w,C).slice(0,34)),ae=Kc(w.chain||"unknown chain");return`${L}<text x="${A+16}" y="${v+350}" fill="#f3f5f7" font-size="17" font-weight="600">${V}</text><text x="${A+16}" y="${v+376}" fill="#8d98a8" font-size="13">${ae}${k?" \xB7 placeholder":""}</text>`}).join(""),S=`<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 ${i} \xB7 ${n.length} assets \xB7 generated ${Kc(new Date().toISOString())}</text>${y}</svg>`;return{provider:"nft-portfolio",operation:"gallery",mimeType:"image/svg+xml",dataBase64:Buffer.from(S).toString("base64"),page:o,pageSize:r,totalPages:i,totalItems:n.length,renderedItems:a.filter(w=>w.image).length,placeholders:a.filter(w=>!w.image).map(w=>({assetKey:w.item.assetKey||null,name:w.item.name||null,sourceUrl:w.item.imageUrl||null,error:w.error})),rasterOnly:!0,externalScripts:!1}}var y_=[/\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],b_=/(https?:\/\/|www\.|[a-z0-9-]+\.(?:com|net|io|xyz|org|app|finance|gift|claims?|site|link|live|vip|top|cc))/i,w_=/(\$\s?\d|\d[\d,.]*\s*(?:usd|usdc|usdt|eth|weth|btc|sol)\b)/i;function x_(e={}){let t=[],n=String(e.name||""),r=String(e.description||""),o=`${n} ${r}`;b_.test(n)&&t.push("url-in-name");let i=y_.filter(l=>l.test(o)).length;i>0&&t.push(`lure-language:${i}`),w_.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 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 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 x0(e={}){let t=x_(e);return{...e,spam:e.spam===!0||t.spam,riskLevel:t.risk,riskReasons:t.reasons.length?t.reasons:void 0}}K();var S_=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"}]),v_=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 Xt(e={},t){return{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs,env:e.env,allowDiskCredentials:e.allowDiskCredentials,allowAmbientCredentials:e.allowAmbientCredentials,...e[t]||{}}}async function Kr(e,t){let n=await ie(t);return n.ok?{ok:!0,data:n.data}:{ok:!1,error:`${e}: ${n.error}`.slice(0,300)}}function E_(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 k_(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 A_(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 E0(e={}){return[e.chain||"unknown",e.contract||"native",e.tokenId||"unknown"].join(":").toLowerCase()}function I_(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 __(e,t){let n=E0(e),r=t.get(n),o=e.estimatedValueUsd==null?null:Number(e.estimatedValueUsd);if(!r)return{...e,assetKey:n};let i=Number(r.costUsd),s=Number(r.feesUsd??0);if(!Number.isFinite(i)||i<0||!Number.isFinite(s)||s<0)return{...e,assetKey:n,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:n,acquisitionCost:{costUsd:i,feesUsd:s,totalCostUsd:a,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-a)*100)/100,currentValueUsd:o,totalCostUsd:a,realizedUsd:null}}:{...e,assetKey:n,acquisitionCost:{costUsd:i,feesUsd:s,totalCostUsd:a,acquiredAt:r.acquiredAt||null,source:r.source||"user-supplied"},itemPnl:{status:"unavailable",reason:"current NFT valuation is unavailable"}}}function P_(e){let t=new Map;for(let n of e){let r=E0(n);t.has(r)||t.set(r,n)}return[...t.values()]}function T_(e,t){let n=e.filter(i=>i.itemPnl?.status==="estimated"),r=e.length-n.length,o=Math.round(n.reduce((i,s)=>i+Number(s.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 k0(){return{ok:!0,provider:"nft-portfolio",readOnly:!0,marketplaces:["opensea","magiceden-sol","satflow"],listingExecution:"prepare-only"}}async function qn(e={},t={}){let n=new Date().toISOString(),r=Yt(e,t.env||process.env),o=Array.isArray(e.chains)&&e.chains.length?new Set(e.chains.map(x=>String(x).toLowerCase())):null,i=S_.filter(x=>!o||o.has(x.chain)),s=[],a=[],c=Xt(t,"opensea"),l=r.evm?i.filter(x=>x.family!=="solana"):[],u=await ln(l,4,async x=>({row:x,result:await Kr(`opensea-${x.chain}`,()=>Nr({chain:x.chain,address:r.evm,pageSize:e.pageSize,maxPages:e.maxPages},c),t.timeoutMs??35e3)}));for(let{row:x,result:k}of u)if(k.ok){let C=k.data.nfts.map(P=>({...P,family:x.family,chainId:x.chainId,listingAdapter:"opensea",source:"opensea-account-inventory"}));a.push(...C),s.push({family:x.family,chain:x.chain,chainId:x.chainId,status:k.data.complete?"ok":"partial",count:C.length,complete:k.data.complete,next:k.data.next,source:"opensea"})}else s.push({family:x.family,chain:x.chain,chainId:x.chainId,status:"unavailable",error:k.error,source:"opensea"});if(!r.evm)for(let x of i.filter(k=>k.family!=="solana"))s.push({family:x.family,chain:x.chain,chainId:x.chainId,status:"not-configured",reason:"EVM address missing"});if(r.solana&&(!o||o.has("solana"))){let x=await Kr("opensea-solana",()=>Nr({chain:"solana",address:r.solana,pageSize:e.pageSize,maxPages:e.maxPages},c),t.timeoutMs??35e3);if(x.ok){let k=x.data.nfts.map(C=>({...C,family:"solana",chainId:null,listingAdapter:null,source:"opensea-account-inventory"}));a.push(...k),s.push({family:"solana",chain:"solana",status:x.data.complete?"ok":"partial",count:k.length,complete:x.data.complete,next:x.data.next,source:"opensea"})}else s.push({family:"solana",chain:"solana",status:"unavailable",error:x.error,source:"opensea"})}else(!o||o.has("solana"))&&s.push({family:"solana",chain:"solana",status:"not-configured",reason:"Solana address missing"});if(r.bitcoin&&(!o||o.has("bitcoin"))){let x=await Kr("satflow-wallet-contents",()=>Ho({address:r.bitcoin,type:"ordinals",limit:e.bitcoinLimit??100,offset:0},Xt(t,"satflow")),t.timeoutMs??35e3);if(x.ok){let k=E_(x.data.contents).map(P=>k_(P,r.bitcoin));a.push(...k);let C=k.length<Number(e.bitcoinLimit??100);s.push({family:"bitcoin",chain:"bitcoin",status:C?"ok":"partial",count:k.length,complete:C,source:"satflow"})}else{let k=await Kr("bitcoin-meta-inscriptions",()=>yn({address:r.bitcoin},Xt(t,"bitcoinMeta")),t.timeoutMs??35e3),C=k.ok&&k.data?.ok&&Array.isArray(k.data.inscriptions)?k.data.inscriptions:[];a.push(...C.map(P=>A_(P,r.bitcoin))),s.push({family:"bitcoin",chain:"bitcoin",status:C.length?"partial":"unavailable",count:C.length,complete:!1,source:C.length?"bitcoin-meta":"satflow",error:C.length?"Satflow unavailable; fallback has IDs only":x.error})}}else(!o||o.has("bitcoin"))&&s.push({family:"bitcoin",chain:"bitcoin",status:"not-configured",reason:"Bitcoin address missing"});let d=[];if(e.includePnl!==!1)for(let x of[...new Set([r.evm,r.solana].filter(Boolean))]){let k=await Kr(`opensea-pnl-${x}`,()=>ci({address:x},c),t.timeoutMs??35e3);d.push(k.ok?{status:"ok",...k.data}:{status:"unavailable",address:x,source:"opensea-indexed-account-pnl",error:k.error})}let p=I_(e.costBasis),m=P_(a).map(x=>__(x,p)).map(x=>x0(x)),f=m.filter(x=>!x.spam),h=m.filter(x=>x.spam),g=f.filter(x=>x.estimatedValueUsd!=null&&Number.isFinite(Number(x.estimatedValueUsd))),y=Math.round(g.reduce((x,k)=>x+Number(k.estimatedValueUsd),0)*100)/100,S=f.length-g.length,w=s.filter(x=>x.status!=="ok"||x.complete===!1);return{provider:"nft-portfolio",operation:"inventory",readOnly:!0,generatedAt:n,addresses:r,coverage:s,unsupported:v_,inventory:{count:m.length,visibleCount:f.length,flaggedCount:h.length,items:m,visibleItems:f,flaggedItems:h},valuation:{estimatedCurrentValueUsd:y,valuedItems:g.length,unvaluedItems:S,complete:S===0&&w.length===0,methodology:"Sum of provider estimated_value_usd for non-flagged items. It is not an executable bid."},pnl:T_(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 S0(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 C_(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 A0(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 $r(e,Xt(t,"opensea"));if(n==="magiceden"||n==="magiceden-sol"){let r=S0(e.expiry??e.endTime,"Solana NFT listing expiry");return ui({...e,expiry:r},Xt(t,"magiceden"))}if(n==="satflow"){let r=S0(e.expiry??e.endTime??e.expiresAt,"Bitcoin NFT listing expiry");return jo({inscription_id:e.inscriptionId||e.tokenId,runes_output:e.runesOutput,ord_address:e.ordAddress||e.seller,receive_address:e.receiveAddress,price:C_(e.priceSats??e.price),tap_key:e.tapKey,collection_slug:e.collectionSlug||e.collection,expires_at:r},Xt(t,"satflow"))}throw new Error(`unsupported NFT marketplace: ${n||"<missing>"}`)}function Yc(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 Xc(e){if(e==null||e==="")return null;let t=Number(e);return Number.isFinite(t)&&t>0?t:null}function Ui(e){return String(e??"").trim().toLowerCase()}function N_(e={},t,n){let r=Array.isArray(e.traits)?e.traits:[],o=Ui(t),i=Ui(n);return!o||!i?!1:r.some(s=>Ui(s.trait_type??s.traitType??s.type)===o&&Ui(s.value??s.trait_value??s.traitValue)===i)}function O_(e={},t){if(!t)return!0;let n=String(e.contract||e.tokenContract||e.assetContract||"").toLowerCase();return!n||n===String(t).toLowerCase()}function v0(e={},t=["timestamp","listedAt","createdAt"]){for(let n of t){let r=e[n]??e[n.replace(/[A-Z]/g,i=>`_${i.toLowerCase()}`)];if(r==null)continue;let o=typeof r=="number"?r:Date.parse(String(r));if(Number.isFinite(o))return o}return null}function Qc(e){return Math.round(Number(e)*1e6)/1e6}function kt(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 I0(e={},t={}){let n=String(e.marketplace||"").trim().toLowerCase();if(n!=="opensea")return kt(e,`unsupported NFT marketplace: ${n||"<missing>"}`);let o=["traitType","traitValue","maxPriceEth","minDiscountBps","minTraitSales","minTraitVolumeEth","traitFloorEth"].filter(P=>e[P]==null||e[P]==="");if(o.length)return kt(e,`trait-risk-params-required: ${o.join(",")}`);let i=Number.isFinite(Number(e.nowMs))?Number(e.nowMs):Date.now(),s=Yc(e.maxPriceEth,"maxPriceEth"),a=Number(e.minDiscountBps),c=Number(e.minTraitSales),l=Yc(e.minTraitVolumeEth,"minTraitVolumeEth"),u=Yc(e.traitFloorEth,"traitFloorEth"),d=Xc(e.collectionFloorEth),p=Xc(e.maxListingAgeMs),m=Xc(e.maxSaleAgeMs??e.salesWindowMs);if(!Number.isFinite(a)||a<0)return kt(e,"invalid-min-discount-bps");if(!Number.isFinite(c)||c<1)return kt(e,"invalid-min-trait-sales");if(u<=0)return kt(e,"trait-floor-unavailable");let f=P=>N_(P,e.traitType,e.traitValue)&&O_(P,e.contract),h=(Array.isArray(e.sales)?e.sales:[]).filter(f).filter(P=>{if(!m)return!0;let I=v0(P,["timestamp","soldAt","createdAt"]);return I!=null&&i-I<=m}),g=Qc(h.reduce((P,I)=>P+Number(I.priceEth??I.price??0),0)),y={count:h.length,volumeEth:g,minSales:c,minVolumeEth:l};if(h.length<c||g<l)return kt(e,"trait-liquidity-insufficient",{traitSales:y});let S=(Array.isArray(e.listings)?e.listings:[]).filter(f).filter(P=>{let I=Number(P.priceEth??P.price);if(!Number.isFinite(I)||I<=0||I>s)return!1;if(!p)return!0;let A=v0(P,["listedAt","createdAt","timestamp"]);return A!=null&&i-A<=p}).map(P=>{let I=Number(P.priceEth??P.price),A=Math.round((u-I)/u*1e4);return{...P,priceEth:I,discountBps:A}}).filter(P=>P.discountBps>=a).sort((P,I)=>P.priceEth-I.priceEth||I.discountBps-P.discountBps),w={traitSales:y,collectionFloorEth:d,traitFloorEth:u,listingDepth:{count:S.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."},x=e.minTraitListings==null?1:Number(e.minTraitListings);if(!Number.isFinite(x)||x<1)return kt(e,"invalid-min-trait-listings",w);if(S.length<x)return kt(e,"trait-listing-depth-insufficient",w);let k=S[0],C=O({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:k.tokenId==null?null:String(k.tokenId),listingId:k.listingId||null,orderHash:k.orderHash||null,priceEth:Qc(k.priceEth),maxPriceEth:s,traitType:e.traitType,traitValue:e.traitValue,evidence:w,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:k.tokenId==null?null:String(k.tokenId),listingId:k.listingId||null,orderHash:k.orderHash||null,priceEth:Qc(k.priceEth),discountBps:k.discountBps},evidence:w,prepareIntent:C}}async function _0(e={},t={}){let n=await qn({...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 P0(e={},t={}){let n=Array.isArray(e.items)?e.items:null,r=null;return n||(r=await qn({...e,includePnl:!1},t),n=r.inventory.visibleItems),{...await w0({...e,items:n},Xt(t,"gallery")),inventorySummary:r?{visibleCount:r.inventory.visibleCount,flaggedCount:r.inventory.flaggedCount,coverage:r.coverage}:null}}var T0=10*1024*1024,O0=1e3;function At(e){if(e==null||e==="")return null;let t=Number(e);return Number.isFinite(t)?t:null}function jn(e){return Number.isFinite(e)?Number(e.toFixed(2)):null}function C0(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 R0(e,t,n,r,o){if(e==null||e==="")return t;let i=Number(e);if(!Number.isInteger(i)||i<n||i>r)throw new Error(`${o} must be an integer from ${n} to ${r}`);return i}function q_(e={}){return["evm","solana","bitcoin","hyperliquid"].map(t=>`${t}:${String(e[t]||"").trim().toLowerCase()}`).join("|")}function $0(e={}){return`portfolio_${U_("sha256").update(q_(e)).digest("hex").slice(0,20)}`}function L0(e={}){if(e.historyFile)return Hn.resolve(String(e.historyFile));let t=e.env||process.env;if(t.ORACLE_PORTFOLIO_HISTORY_FILE)return Hn.resolve(String(t.ORACLE_PORTFOLIO_HISTORY_FILE));let n=String(t.HERMES_HOME||"").trim()||Hn.join(F_.homedir(),".hermes");return Hn.join(Hn.resolve(n),"state","oracle","portfolio-history.jsonl")}function H_(e){let t=At(e?.valuation?.knownUsd);return t==null?null:Number(e?.valuation?.pricedItems||0)>0||e?.valuation?.complete===!0?jn(t):null}function j_(e){if(!e||e.status==="unavailable"||e.status==="not-requested")return null;let t=At(e?.valuation?.estimatedCurrentValueUsd);return t==null?null:Number(e?.valuation?.valuedItems||0)>0||e?.valuation?.complete===!0?jn(t):null}function V_(e){let t=[];for(let n of e?.chains||[]){if(n.family==="hyperliquid"){let o=(n.spot?.balances||[]).reduce((a,c)=>{let l=At(c.usdValue);return l==null?a:a+l},0),i=At(n.perps?.accountValueUsd),s=jn(o+(i??0));(s!==0||i!=null||(n.spot?.balances||[]).some(a=>At(a.usdValue)!=null))&&t.push({family:"hyperliquid",chainId:null,name:n.name||"Hyperliquid",knownUsd:s});continue}let r=At(n.native?.usdValue);r!=null&&t.push({family:n.family||"evm",chainId:n.chainId??null,name:n.name||n.native?.symbol||"Unknown",knownUsd:jn(r)})}return t}function z_(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 W_(e,t){let n=L0(t),r=`${JSON.stringify(e)}
|
|
144
|
-
`;if(Buffer.byteLength(
|
|
145
|
-
`))if(i.trim())try{let s=JSON.parse(i);s?.schemaVersion===1&&s?.portfolioId&&s?.recordedAt?r.push(s):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 K_(e,t){if(e.allPortfolios===!0)return null;if(e.portfolioId)return String(e.portfolioId);let n=Yt(e,t.env||process.env);return Object.values(n).some(Boolean)?$0(n):null}async function Jc(e={},t={}){let n=R0(e.limit,100,1,O0,"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=C0(e.since,"portfolio history since"),i=C0(e.until,"portfolio history until"),s=K_(e,t),a=await G_(t),c=a.snapshots.filter(d=>!(s&&d.portfolioId!==s||o&&d.recordedAt<o||i&&d.recordedAt>i));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=>At(d?.valuation?.knownUsd)!=null);return{provider:"portfolio",operation:"history",readOnly:!0,historyFile:a.file,portfolioId:s,order:r,totalStored:a.snapshots.length,totalMatching:l,corruptLines:a.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 N0(e){return`$${Number(e).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}`}function Fi(e){return String(e).replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function Y_(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 X_(e,t){let c=e.map(w=>w.value),l=Math.min(...c),u=Math.max(...c);if(l===u){let w=Math.max(1,Math.abs(l)*.05);l-=w,u+=w}else{let w=(u-l)*.1;l=Math.max(0,l-w),u+=w}let d=w=>e.length===1?1240/2:100+1040*w/(e.length-1),p=w=>570-(w-l)/(u-l)*470,m=e.map((w,x)=>`${x?"L":"M"}${d(x).toFixed(2)},${p(w.value).toFixed(2)}`).join(" "),f=Array.from({length:5},(w,x)=>{let k=x/4,C=100+k*470,P=u-k*(u-l);return`<line x1="100" y1="${C}" x2="1140" y2="${C}" stroke="#26313c" stroke-width="1"/><text x="86" y="${C+5}" text-anchor="end" fill="#8795a5" font-size="15">${N0(P)}</text>`}).join(""),h=e.map((w,x)=>`<circle cx="${d(x)}" cy="${p(w.value)}" r="5" fill="#b8f0ff"><title>${Fi(w.recordedAt)}: ${N0(w.value)}</title></circle>`).join(""),g=Fi(e[0].recordedAt.slice(0,10)),y=Fi(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 ${Fi(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">${y}</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 B0(e={},t={}){if(e.allPortfolios===!0)throw new Error("portfolio value graph requires one portfolioId or configured public-address portfolio");let n=R0(e.maxPoints,200,2,500,"portfolio graph maxPoints"),r=await Jc({...e,order:"asc",limit:e.limit??O0},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:At(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 i=Y_(o,n),s=i[0].value,a=i.at(-1).value,c=jn(a-s),l=s===0?null:Number(((a-s)/s*100).toFixed(2)),u=X_(i,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:i.length,omittedUnavailablePoints:r.snapshots.length-o.length,startRecordedAt:i[0].recordedAt,endRecordedAt:i.at(-1).recordedAt,startKnownUsd:s,endKnownUsd:a,changeUsd:c,changePct:l,completeSnapshots:i.filter(d=>d.complete).length,label:"known priced value history; incomplete snapshots are not complete portfolio totals"}}}re();var J_=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"}}),Z_=Object.freeze([{label:"eip1967",slot:"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"},{label:"zeppelinos",slot:"0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3"},{label:"eip1822",slot:"0xc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7"}]),e1=`0x${"0".repeat(64)}`;function t1(e){return!e||e==="0x"||e===e1}async function Qt(e={},t={}){let n=t.rpcCall||M,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 i;try{i=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(!i||i==="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 s=[],a=[],c=i.slice(2).toLowerCase();for(let[f,h]of Object.entries(J_))c.includes(f)&&a.push({selector:`0x${f}`,...h});let l=!1,u=null,d=null;for(let{label:f,slot:h}of Z_)try{let g=await n(o,"eth_getStorageAt",[r,h,"latest"],t);if(!t1(g)){l=!0,u=f,d=`0x${String(g).slice(-40)}`;break}}catch{s.push(`proxy slot (${f}) unreadable; proxy status uncertain`)}l&&(a.push({selector:u,name:"proxy",weight:"high",note:"implementation is upgradeable \u2014 current behaviour is not a guarantee"}),s.push(`bytecode scan covers the proxy (${u}), not the implementation ${d} it delegates to`));let m=a.filter(f=>f.weight==="high").length>0?"high":a.length>0?"elevated":"unknown-risk";return m==="unknown-risk"&&s.push("no owner-power selectors found; this is weak evidence, not a safety guarantee"),{address:r,chainId:o,status:"ok",risk:m,findings:a,isProxy:l,proxyStandard:u,implementation:d,codeSize:Math.floor(c.length/2),notes:s}}async function U0(e={}){let t=Date.now();try{let n=await Qt({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 r1=/^0x[0-9a-fA-F]{40}$/,D0=4663;function Zc(e,t){let n=String(e||"").trim();if(!r1.test(n))throw new Error(`evm-token-sniper: ${t} must be a 0x EVM address`);return n}function o1(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 i1(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}yr();let n=ra(e);if(!n)throw new Error(`evm-token-sniper: unsupported EVM chainId ${e}`);return n}function s1({token:e,pools:t,structuralRisk:n,scannerRisk:r,sellability:o,quote:i,args:s,scanner:a}){let c=[];return e?.evidence!==D.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"}`),a.supports?.("sellSimulation")?o?.verdict!==B.PASS&&c.push(`sellability verdict is ${o?.verdict||"UNKNOWN"}`):c.push("sell simulation is unavailable on this chain"),a.supports?.("quote")?i?.evidence!==D.LIVE&&c.push("no live quote was returned"):c.push("live quoting is unavailable on this chain"),a.supports?.("prepareUnsignedTx")||c.push("unsigned transaction preparation is unavailable on this chain"),s.tokenIn||c.push("tokenIn is required to prepare"),s.amountIn||c.push("amountIn is required to prepare"),s.recipient||c.push("recipient is required to prepare"),c}async function F0(e={},t={}){let n=Number(e.chainId??D0);if(!Number.isInteger(n)||n<=0)throw new Error("evm-token-sniper: chainId must be a positive integer");let r=Zc(e.tokenAddress||e.address||e.token,"tokenAddress"),o=e.tokenIn?Zc(e.tokenIn,"tokenIn"):null,i=e.recipient?Zc(e.recipient,"recipient"):null,s=e.amountIn==null?null:o1(e.amountIn,"amountIn"),a=i1(n,t.scanner),c=t.scanContractRisk||Qt,[l,u,d]=await Promise.all([a.resolveToken(r),a.resolvePools(r),c({address:r,chainId:n},t.contractRiskOpts||t)]),p=await a.scoreRisk(r),m=null;a.supports?.("sellSimulation")&&s?m=await a.sellSimulation({token:r,amountIn:s,base:o||void 0}):a.supports?.("sellSimulation")&&(m=await a.sellSimulation({token:r,amountIn:"10000000000000000"}));let f=null;a.supports?.("quote")&&o&&s&&(f=await a.quote({tokenIn:o,tokenOut:r,amountIn:s}));let h={...e,tokenIn:o,amountIn:s,recipient:i},g=s1({token:l,pools:u,structuralRisk:d,scannerRisk:p,sellability:m,quote:f,args:h,scanner:a}),y=null;return e.prepare===!0&&g.length===0&&(y=await a.prepareUnsignedTx({tokenIn:o,tokenOut:r,amountIn:s,recipient:i,slippageBps:e.slippageBps??50,fee:f?.fee})),{provider:"evm-token-sniper",execution:"prepare-only",chainId:n,chain:{key:a.key,name:a.name,nativeCurrency:a.nativeCurrency},token:l,pools:u,topPool:u?.pools?.[0]||null,structuralRisk:d,scannerRisk:p,sellability:m,quote:f,blockedReasons:g,prepared:!!y,unsignedTx:y,signed:!1,broadcast:!1}}async function q0(){yr();let e=oa();return{ok:e.length>0,provider:"evm-token-sniper",defaultChainId:D0,chainIds:e.map(t=>t.chainId),execution:"prepare-only",signed:!1,broadcast:!1}}re();re();var c1=5,el=[50,75,90],H0=Object.freeze({normal:{percentile:0,baseFeeMultiplier:2n,label:"normal"},fast:{percentile:1,baseFeeMultiplier:3n,label:"fast"},war:{percentile:2,baseFeeMultiplier:4n,label:"war"}});function Jt(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 l1(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 qi(e={},t={}){let n=t.rpcCall||M,r=Number(e.chainId);if(!Number.isInteger(r))return{status:"error",error:"chainId is required",viable:!1};let o=H0[e.urgency||"fast"];if(!o)return{status:"error",viable:!1,error:`urgency must be one of: ${Object.keys(H0).join(", ")}`};let i,s,a,c;try{i=Jt(e.maxFeePerGasWei,"maxFeePerGasWei"),s=Jt(e.maxPriorityFeePerGasWei,"maxPriorityFeePerGasWei"),a=Jt(e.gasLimit,"gasLimit"),c=Jt(e.maxTotalGasWei,"maxTotalGasWei")}catch(P){return{status:"error",viable:!1,error:P.message}}let l,u;try{[l,u]=await Promise.all([n(r,"eth_feeHistory",[`0x${c1.toString(16)}`,"pending",el],t),n(r,"eth_getBlockByNumber",["pending",!1],t)])}catch(P){return{status:"unavailable",viable:!1,error:P?.message||"fee history unavailable",notes:["could not read live fee data; refusing to guess a competitive bid"]}}let d=Jt(u?.baseFeePerGas,"baseFeePerGas")??Jt(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(P=>{try{return Jt(P?.[o.percentile],"reward")}catch{return null}}).filter(P=>P!=null&&P>0n),f=l1(m),h=[];f==null&&h.push("no non-zero tips observed in recent blocks; using a 1 gwei floor");let g=f??1000000000n,y=d*o.baseFeeMultiplier+g,S=[];s!=null&&g>s&&(S.push({field:"maxPriorityFeePerGas",wanted:g.toString(),capped:s.toString()}),g=s,y=d*o.baseFeeMultiplier+g),i!=null&&y>i&&(S.push({field:"maxFeePerGas",wanted:y.toString(),capped:i.toString()}),y=i,g>y&&(g=y));let w=a!=null?a*y:null;c!=null&&w!=null&&w>c&&S.push({field:"totalGas",wanted:w.toString(),capped:c.toString()});let x=f==null||g>=f,k=c==null||w==null||w<=c,C=x&&k;return x||h.push(`tip cap ${g} is below the observed ${el[o.percentile]}th-percentile tip ${f}; this bid is unlikely to land`),k||h.push(`worst-case gas ${w} exceeds the ${c} total cap`),h.push("maxFeePerGas is a ceiling \u2014 unused headroom above basefee+tip is refunded, not spent"),{status:"ok",viable:C,chainId:r,urgency:o.label,baseFeePerGas:d.toString(),observedTip:f==null?null:f.toString(),percentile:el[o.percentile],maxFeePerGas:y.toString(),maxPriorityFeePerGas:g.toString(),worstCaseGasWei:w==null?null:w.toString(),clamps:S,notes:h}}re();var d1="08c379a0",p1="4e487b71",m1=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 f1(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===d1)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===p1){let r=parseInt(t.slice(8,72),16);return{kind:"panic",code:r,reason:m1[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 h1(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 g1(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 y1(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 Yr(e={},t={}){let n=t.rpcCall||M,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 i=y1(o),s=[],a=null,c=!1,l=null;try{a=await n(r,"eth_call",[i,"pending"],t)}catch(f){let h=h1(f);if(!g1(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=f1(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",[i,"pending"],t);u=BigInt(f);let h=BigInt(Math.max(0,Math.floor(e.gasBufferPercent??20)));d=u+u*h/100n,s.push(`gasLimit includes a ${h}% buffer over the ${u} estimate`)}catch(f){s.push(`gas estimation failed: ${f?.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 p=`0x${"0".repeat(64)}`,m=a===p;return m&&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:m,chainId:r,returnData:a,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:s}}async function j0(e={}){let t=Date.now();try{let n=await Yr({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 w1=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 x1(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 S1(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 V0(e,{minter:t,quantity:n}){let r=`0x${e.selector}`;for(let o of e.args)if(o==="to")r+=S1(t);else if(o==="quantity")r+=x1(n);else throw new Error(`unsupported mint argument: ${o}`);return r}async function Hi(e={},t={}){let n=t.rpcCall||M,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 i;try{i=await n(o,"eth_getCode",[r,"latest"],t)}catch(c){return{status:"unavailable",error:c?.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=w1.filter(c=>s.includes(c.selector));return{status:"ok",address:r,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 z0(e={}){let t=Date.now();try{let n=await Hi({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 tl(e={},t={}){let n=String(e.contract||e.address||"").trim().toLowerCase(),r=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(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(i)||i<1)return{status:"error",error:"quantity must be a positive integer"};if(!Number.isInteger(r))return{status:"error",error:"chainId is required"};let s=await Hi({address:n,chainId:r},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(y=>y.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(y=>y.signature)};let c=s.found.length>1&&!e.signature,l=await Qt({address:n,chainId:r},t),u=null;if(e.simulate!==!1&&(u=await Yr({chainId:r,tx:{from:o,to:n,data:V0(a,{minter:o,quantity:i}),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: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 d=e.gasLimit??(u?.gasLimit?Number(u.gasLimit):null),p=await qi({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=V0(a,{minter:o,quantity:i})}catch(y){return{status:"error",error:y.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=si({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 ${s.found.length} mint entrypoints (${s.found.map(y=>y.signature).join(", ")}); defaulted to ${a.signature} \u2014 pass signature to choose`),l.risk==="high"&&g.push(`contract risk HIGH: ${l.findings.map(y=>y.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:a.signature,alternatives:s.found.map(y=>y.signature),quantity:i,gas:p,simulation:u,contractRisk:{risk:l.risk,findings:l.findings,isProxy:l.isProxy},capCheck:h,warnings:g}}re();var E1=1440*60*1e3;function k1(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>E1&&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 W0(e={},t={}){let r=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(r!=="alert_only"&&r!=="execute")return{status:"ok",actionMode:"alert_only",requestedMode:r,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(r)} \u2014 defaulted to alert_only; only the exact string "execute" arms a trigger`]};let a=r;if(r==="execute")if(!bn(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 c=k1(e.grant,{nowMs:t.nowMs});c.ok?(c.contract!==o||c.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: ${c.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:r,downgraded:a!==r,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 G0(e={},t={}){let n=t.rpcCall||M,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 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 n(o,"eth_call",[{to:r,data:s.selector},"latest"],t);if(a&&a!=="0x"){let c=BigInt(a)===1n;return{status:"ok",open:s.openWhen?c:!c,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 I1=1440*60*1e3;function _1(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>I1&&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 K0="0x797a2e030B7e49107C8F07bF0300Ea9caE88cA57",P1=4663,T1="0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",Y0="a22cb465",C1="a0712d68";function nl(e){return String(e||"").trim().toLowerCase()}function Vn(e){return String(e||"").toLowerCase().replace(/^0x/,"")}function N1(e){let t=Vn(e);if(!/^[a-f0-9]{40}$/.test(t))throw new Error("revoke operator must be an address");return`0x${Y0}${t.padStart(64,"0")}${"0".repeat(64)}`}function O1(e){return Vn(e).includes(Vn(K0))}function R1(e={}){return(Array.isArray(e.calls)?e.calls:[]).some(n=>Vn(n?.data).startsWith(Y0))}function $1(e={},t){let n=Vn(t).padStart(64,"0");return(Array.isArray(e.logs)?e.logs:[]).some(o=>{let i=o?.topics||[];return nl(i[0])!==T1?!1:Vn(i[2])===n})}function L1(e=1){return`0x${C1}${BigInt(e).toString(16).padStart(64,"0")}`}function X0(e={},t={}){let n=nl(e.contract),r=nl(e.minter),o=Number(e.chainId),i=e.valueWei==null?"0":String(e.valueWei),s=[];/^0x[a-f0-9]{40}$/.test(n)||s.push("contract must be a 0x address"),/^0x[a-f0-9]{40}$/.test(r)||s.push("minter must be a 0x address"),o!==P1&&s.push("only Robinhood chain 4663"),i!=="0"&&s.push("value must be 0 \u2014 paid mints are skipped"),O1(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"),R1(a)&&s.push("simulation sets approval / setApprovalForAll"),$1(a,r)||s.push("simulation has no ERC721 Transfer to minter");let c=s.length===0,l={chainId:o,from:r,to:n,data:L1(e.quantity??1),value:"0"},u={chainId:o,from:r,to:n,data:N1(n),value:"0"},d=!1;if(c&&e.actionMode==="execute")if(!im(t.env||process.env))s.push("DOWNGRADED: ORACLE_AUTONOMOUS_MINT=1 required to fire");else{let p=_1(e.grant,{nowMs:t.nowMs});p.ok?p.contract!==n||p.chainId!==o?s.push("DOWNGRADED: grant does not match this contract/chain"):d=!0:s.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:K0.toLowerCase(),reasons:s,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"]}}R();ye();K();var B1="https://api.paraswap.io",rl=(e={})=>(e.baseUrl||process.env.PARASWAP_API_URL||B1).replace(/\/$/,"");function zn(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 ol(e={},t={}){let n=Number(e.chainId||1);return b(`${rl(t)}/tokens/${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function It(e={},t={}){let n=Number(e.chainId||e.network||1);if(e.amount==null)throw new Error("amount required");let r=new URLSearchParams({srcToken:zn(e.srcToken,"srcToken"),destToken:zn(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 Xo({wallet:e.userAddress||e.fromAddress,env:t.env,action:e.feeAction||"swap",holderCheck:t.holderCheck});for(let[a,c]of Object.entries(Bp(o)))r.set(a,c);let i=await b(`${rl(t)}/prices?${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4}),s=i?.priceRoute?.destAmount;return s?{...W(i,{chainId:n,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 Q0(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=zn(e.userAddress,"userAddress"),o=await It(e,t),i=o?.priceRoute,s=String(i?.contractAddress||"").toLowerCase();if(!s)throw new Error("paraswap: price route missing contractAddress");let a={srcToken:zn(e.srcToken,"srcToken"),destToken:zn(e.destToken,"destToken"),srcAmount:String(i.srcAmount||e.amount),destAmount:String(o.amountOutMinimum),priceRoute:i,userAddress:r,ignoreChecks:!1,ignoreGasEstimate:!1};e.receiver&&(a.receiver=zn(e.receiver,"receiver"));let c=await b(`${rl(t)}/transactions/${n}`,{method:"POST",body:a,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()!==s)throw new Error("paraswap: transaction target mismatch");if(c.from&&String(c.from).toLowerCase()!==r)throw new Error("paraswap: transaction sender mismatch");return O({provider:"paraswap",calldataReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,chainId:n,quote:o,autoSlippage:o.autoSlippage,requiresApproval:a.srcToken!=="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"?{token:a.srcToken,spender:i.tokenTransferProxy||s,amount:a.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:ee(o.autoSlippage,{chainId:n,venue:c.to,data:c.data})}},{provider:"paraswap",kind:"paraswap-tx"})}async function J0(e={}){let t=await ol({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 D1}from"node:crypto";import{getAddress as og,isAddress as il}from"ethers";var Z0="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",F1=Object.freeze(["lifi","paraswap","0x","cow","uniswap-v3"]),q1=Object.freeze(["lifi"]),eg=/^0x[0-9a-fA-F]{64}$/,H1=/^\d+$/;function Z(e,t="invalid"){throw new Error(`rfq: ${e} ${t}`)}function tg(e,t){let n=Number(e);return(!Number.isSafeInteger(n)||n<=0)&&Z(t,"must be a positive chainId"),n}function ji(e,t){let n=String(e??"").trim();return(!H1.test(n)||BigInt(n)<=0n)&&Z(t,"must be a positive integer string"),n}function j1(e,t){return e==null||e===""?null:ji(e,t)}function ng(e,t){let n=String(e??"").trim();return n.toLowerCase()===Z0.toLowerCase()?Z0:(il(n)||Z(t,"must be an EVM address or native token sentinel"),og(n))}function ig(e,t){let n=String(e??"").trim();return il(n)||Z(t,"must be an EVM address"),og(n)}function V1(e,t){return e==null||e===""?null:ig(e,t)}function rg(e,t,n){return e===void 0?[...n]:(Array.isArray(e)||Z(t,"must be an array"),e.map(r=>String(r).trim()).filter(Boolean))}function z1(e,{nowMs:t,maxDeadlineMs:n},r){let o=Number(e);return Number.isFinite(o)||Z(r,"must be a finite millisecond timestamp"),o<=t&&Z(r,"expired"),o>t+n&&Z(r,"exceeds maxDeadlineMs"),Math.floor(o)}function Wn(e){if(Array.isArray(e))return e.map(Wn);if(e&&typeof e=="object"){let t={};for(let n of Object.keys(e).sort())e[n]!==void 0&&(t[n]=Wn(e[n]));return t}return e}function W1(e){return JSON.stringify(Wn(e))}function Vi(e){return`0x${D1("sha256").update(W1(e)).digest("hex")}`}function sg(e,t){let n={...e};for(let r of t)delete n[r];return n}function ag(e){return Vi(sg(e,["intentHash"]))}function cg(e){return Vi(sg(e,["firmQuoteHash"]))}function zi(e={},t={}){let n=Number(t.nowMs??Date.now()),r=Number(t.maxDeadlineMs??1800*1e3);(!Number.isFinite(n)||!Number.isFinite(r)||r<=0)&&Z("time","is invalid");let o=tg(e.fromChainId??e.fromChain,"fromChainId"),i=tg(e.toChainId??e.toChain,"toChainId"),a=o===i?F1:q1,c={kind:"rfq-intent",version:1,fromChainId:o,toChainId:i,sellToken:ng(e.sellToken??e.tokenIn??e.fromToken,"sellToken"),buyToken:ng(e.buyToken??e.tokenOut??e.toToken,"buyToken"),sellAmount:ji(e.sellAmount??e.amountIn??e.fromAmount,"sellAmount"),receiver:ig(e.receiver??e.recipient??e.to,"receiver"),deadlineMs:z1(e.deadlineMs??e.deadline??e.expiresAtMs,{nowMs:n,maxDeadlineMs:r},"deadline"),minBuyAmount:j1(e.minBuyAmount??e.minOut??e.amountOutMin,"minBuyAmount"),allowedSources:rg(e.allowedSources,"allowedSources",a),allowedRouters:rg(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)?Wn(e.metadata):{}};return c.slippageBps!=null&&(!Number.isInteger(c.slippageBps)||c.slippageBps<0||c.slippageBps>1e4)&&Z("slippageBps","must be 0 to 10000"),c.intentId=e.intentId?String(e.intentId):Vi({seed:"rfq-intent",intent:c}).slice(0,34),c.intentHash=ag(c),Object.freeze(c)}function G1(e){return(!e||typeof e!="object"||Array.isArray(e))&&Z("artifact","required"),e.typedDataHash!=null&&!eg.test(String(e.typedDataHash))&&Z("artifact.typedDataHash","must be bytes32"),e.calldataHash!=null&&!eg.test(String(e.calldataHash))&&Z("artifact.calldataHash","must be bytes32"),e.to!=null&&!il(String(e.to))&&Z("artifact.to","must be an address"),e.data!=null&&!/^0x(?:[0-9a-fA-F]{2})*$/.test(String(e.data))&&Z("artifact.data","must be hex"),Wn(e)}function sl(e,t={},n={}){(!e||e.kind!=="rfq-intent")&&Z("intent","required");let r=Number(n.nowMs??Date.now()),o=Number(t.expiryMs??t.expiresAtMs??t.validUntilMs);Number.isFinite(o)||Z("quote expiry","required"),o<=r&&Z("quote","expired"),o>e.deadlineMs&&Z("quote expiry","exceeds intent deadline");let i=String(t.source??t.provider??"").trim();i||Z("source","required"),e.allowedSources.includes(i)||Z("source","not allowed by intent");let s=ji(t.amountOut??t.buyAmount,"amountOut"),a=ji(t.minBuyAmount??t.minOut??s,"minBuyAmount");BigInt(a)>BigInt(s)&&Z("minBuyAmount","exceeds amountOut");let c=G1(t.artifact??t.executableArtifact??t.transaction??t.typedData),l=Number(t.quotedAtMs??t.timestampMs??n.nowMs??Date.now());Number.isFinite(l)||Z("quotedAtMs","must be finite");let u=V1(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:i,intentHash:e.intentHash,fromChainId:e.fromChainId,toChainId:e.toChainId,sellToken:e.sellToken,buyToken:e.buyToken,sellAmount:e.sellAmount,receiver:e.receiver,router:u,amountOut:s,minBuyAmount:a,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)?Wn(t.metadata):{}};return d.quoteId||(d.quoteId=Vi({seed:"rfq-quote",out:d}).slice(0,34)),d.firmQuoteHash=cg(d),Object.freeze(d)}function Xr(e,t){return Array.isArray(e?.allowedSources)&&e.allowedSources.includes(t)}function lg(e,t){return String(e?.[t]??"").trim()}function Qr(e,t){return Object.freeze({source:e,run:t})}function ug(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??pe,i=Number(e.fromChainId)===Number(e.toChainId),s=[];return Xr(e,"lifi")&&s.push(Qr("lifi",async()=>{let c=await(r.lifiQuote??gt)({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 K1(t,c.transactionRequest.data):void 0,route:c},metadata:{tool:c?.tool??c?.toolDetails?.name??null}}})),i&&(Xr(e,"paraswap")&&s.push(Qr("paraswap",async()=>{let c=await(r.paraswapPrice??It)({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}}})),Xr(e,"0x")&&(lg(n,"ZEROX_API_KEY")||lg(n,"0X_API_KEY")||r.zeroxQuote)&&s.push(Qr("0x",async()=>{let c=await(r.zeroxQuote??jt)({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}}})),Xr(e,"cow")&&s.push(Qr("cow",async()=>{let c=await(r.cowQuote??bt)({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}}})),Xr(e,"uniswap-v3")&&o[Number(e.fromChainId)]&&s.push(Qr("uniswap-v3",async()=>{let c=await(r.uniV3QuoteExactIn??pt)({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}}}))),s}async function K1(e,t){return`0x${(await import("node:crypto")).createHash("sha256").update(String(t)).digest("hex")}`}async function Y1(e,t){return Promise.race([Promise.resolve().then(e.run),new Promise((n,r)=>setTimeout(()=>r(new Error(`${e.source}: timeout`)),t))])}async function dg(e,t,n={}){let r=Number(n.timeoutMs??12e3),o=await Promise.allSettled(t.map(a=>Y1(a,r))),i=[],s=[];for(let a=0;a<o.length;a++){let c=t[a],l=o[a];if(l.status==="rejected"){s.push({source:c.source,error:String(l.reason?.message||l.reason)});continue}try{i.push(sl(e,{...l.value,source:c.source},n))}catch(u){s.push({source:c.source,error:String(u?.message||u)})}}return{quotes:i,failed:s}}function pg(e=[],t={}){let n=Number(t.nowMs??Date.now()),r=e.filter(s=>Number(s.expiryMs??0)>n);r.sort((s,a)=>{let c=BigInt(a.minBuyAmount??0)-BigInt(s.minBuyAmount??0);if(c!==0n)return c>0n?1:-1;let l=BigInt(a.amountOut??0)-BigInt(s.amountOut??0);return l>0n?1:l<0n?-1:0});let o=r.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 al(e,t={}){let n=ug(e,t),{quotes:r,failed:o}=await dg(e,n,t),i=pg(r,t);return{kind:"rfq-result",intent:e,best:i.best,quotes:i.quotes,failed:o,warnings:[...i.warnings],sourcesTried:n.length,sourcesAnswered:r.length}}function mg(e={},t={}){return zi(e,t)}async function fg(e={},t={}){let n=e.intent?.kind==="rfq-intent"?e.intent:zi(e,t);return al(n,t)}async function hg(){return{ok:!0,provider:"rfq",mode:"intent-rfq",execution:"prepare"}}R();var Q1="https://app.across.to";function cl(e={}){return(e.baseUrl||process.env.ACROSS_API_URL||Q1).replace(/\/$/,"")}async function gg(e={}){try{let t=await b(`${cl(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 yg(e={},t={}){let n=String(e.l1Token||"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2");return b(`${cl(t)}/api/pools?token=${encodeURIComponent(n)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function bg(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(`${cl(t)}/api/suggested-fees?${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}R();var Z1="https://api.beefy.finance";function ll(e={}){return(e.baseUrl||process.env.BEEFY_API_URL||Z1).replace(/\/$/,"")}async function wg(e={}){try{let t=await b(`${ll(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 xg(e={},t={}){let n=await b(`${ll(t)}/apy`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4});if(e.chain){let r=String(e.chain).toLowerCase(),o={};for(let[i,s]of Object.entries(n))String(i).toLowerCase().startsWith(r)&&(o[i]=s);return o}return n}async function Sg(e={}){return b(`${ll(e)}/apy/breakdown`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??25e3})}R();var tP="https://public-api.birdeye.so";function vg(e={}){return(e.baseUrl||process.env.BIRDEYE_API_URL||tP).replace(/\/$/,"")}async function Eg(e={}){try{let t=await b(`${vg(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 kg(e={},t={}){let n=String(e.sortBy||"v24hUSD"),r=String(e.sortType||"desc"),o=Math.max(0,Number(e.offset||0)),i=Math.min(50,Math.max(1,Number(e.limit||20)));return b(`${vg(t)}/public/tokenlist?sort_by=${encodeURIComponent(n)}&sort_type=${encodeURIComponent(r)}&offset=${o}&limit=${i}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}R();var rP="https://api.celenium.io";function ul(e={}){return(e.baseUrl||process.env.CELENIUM_API_URL||rP).replace(/\/$/,"")}async function Ag(e={}){try{let t=await b(`${ul(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 Ig(e={}){return b(`${ul(e)}/v1/stats`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??15e3})}async function _g(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(`${ul(t)}${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}R();var iP="https://api.mainnet-beta.solana.com";function sP(e={}){return(e.rpcUrl||process.env.SOLANA_RPC_URL||iP).replace(/\/$/,"")}async function Wi(e,t,n={}){let r=sP(n),o=JSON.stringify({jsonrpc:"2.0",id:1,method:e,params:t}),a=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(a.error)throw new Error(`das-assets ${e}: ${a.error.message||JSON.stringify(a.error)}`);return a.result}async function Pg(e={}){try{let t=await Wi("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 Tg(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 Wi("getAssetsByOwner",{ownerAddress:n,page:r,limit:o,...e.sortBy?{sortBy:{sortBy:e.sortBy,sortDirection:e.sortDirection||"asc"}}:{}},t)}async function Cg(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)),Wi("searchAssets",o,t)}async function Ng(e={},t={}){let n=String(e.assetId||"").trim();if(!n)throw new Error("das-assets: assetId is required");return Wi("getAssetProof",{id:n},t)}R();var cP="https://api.l2beat.com";function dl(e={}){return(e.baseUrl||process.env.L2BEAT_API_URL||cP).replace(/\/$/,"")}async function Og(e={}){try{let t=await b(`${dl(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 Rg(e={},t={}){let n=await b(`${dl(t)}/api/scaling/tvl`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4});if(e.project){let r=String(e.project).toLowerCase(),o=n?.projects||{},i=Object.entries(o).find(([s])=>String(s).toLowerCase()===r);return i?{[i[0]]:i[1]}:{}}return n}async function $g(e={},t={}){return b(`${dl(t)}/api/scaling/activity`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}R();var uP="https://api.spark.fi";function pl(e={}){return(e.baseUrl||process.env.SPARK_API_URL||uP).replace(/\/$/,"")}async function Lg(e={}){try{return{ok:(await b(`${pl(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 Mg(e={},t={}){let n=String(e.protocol||"spark"),r=String(e.chain||"mainnet"),o=e.token?String(e.token).toLowerCase():null;return o?b(`${pl(t)}/v1/savings/${encodeURIComponent(n)}/${encodeURIComponent(r)}/${encodeURIComponent(o)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}):b(`${pl(t)}/v1/savings/${encodeURIComponent(n)}/${encodeURIComponent(r)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}R();var pP="https://api.symbiotic.fi";function ml(e={}){return(e.baseUrl||process.env.SYMBIOTIC_API_URL||pP).replace(/\/$/,"")}async function Bg(e={}){try{let t=await b(`${ml(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 Ug(e={},t={}){let n=Math.min(200,Math.max(1,Number(e.limit||50))),r=await b(`${ml(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 Dg(e={},t={}){let n=String(e.address||"").trim();if(!n)throw new Error("symbiotic-restaking: address is required");return b(`${ml(t)}/v1/vaults/${encodeURIComponent(n)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}R();var fP="https://staking-api.polygon.technology/api/v2",hP=18,gP=200,yP=50,bP=new Set(["id","totalStaked","selfStake","delegatedStake","commissionPercent","uptimePercent","performanceIndex"]);function hl(e={}){return String(e.baseUrl||process.env.POLYGON_STAKING_API_URL||fP).replace(/\/$/,"")}function wP(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 xP(e,t=yP){let n=Number(e??t);return Number.isFinite(n)?Math.min(gP,Math.max(1,Math.trunc(n))):t}function fl(e){let t=Number(e);return Number.isFinite(t)?t/10**hP:null}async function gl(e,t={}){let n=await b(`${hl(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 Fg(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:fl(e.totalStaked),selfStakePolApprox:fl(e.selfStake),delegatedStakePolApprox:fl(e.delegatedStake),stakePrecision:"approximate \u2014 upstream serves wei-scale as float64"}}async function qg(e={},t={}){let n=await gl("/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 i=bP.has(String(e.sortBy))?String(e.sortBy):"id",s=String(e.direction||"").toUpperCase()==="DESC";r=[...r].sort((d,p)=>{let m=Number(d?.[i]??0),f=Number(p?.[i]??0),h=Number.isFinite(m)&&Number.isFinite(f)?m-f:0;return s?-h:h});let a=r.length,c=Math.max(0,Math.trunc(Number(e.offset||0))||0),l=xP(e.limit),u=r.slice(c,c+l);return{provider:"polygon-staking",chainId:137,count:u.length,matched:a,total:o,limit:l,offset:c,sortBy:i,direction:s?"DESC":"ASC",paginatedBy:"client \u2014 upstream /validators ignores limit/offset",validators:e.raw?u:u.map(Fg)}}async function Hg(e={},t={}){let n=wP(e.id??e.validatorId,"id"),o=(await gl(`/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:{...Fg(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 jg(e={}){try{let t=await gl("/validators",{...e,timeoutMs:e.timeoutMs??1e4}),n=Array.isArray(t?.result)?t.result:[];return{ok:n.length>0,provider:"polygon-staking",chainId:137,baseUrl:hl(e),validatorTotal:t?.summary?.total??n.length,exec:!1}}catch(t){return{ok:!1,provider:"polygon-staking",chainId:137,baseUrl:hl(e),error:String(t?.message||t),exec:!1}}}R();var vP="https://api.v3.aave.com/graphql",vU=Object.freeze([1,10,56,100,137,146,232,324,1088,1868,5e3,42161,42220,43114,57073,59144,534352]),EP=(e={})=>e.baseUrl||process.env.AAVE_V3_API_URL||vP;async function Gi(e,t,n={}){let r=await b(EP(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 kP=`query Markets($request: MarketsRequest!) {
|
|
187
|
+
`)];return{family:"bitcoin",network:r,projectName:t,protocolModel:rd["bitcoin-tapscript-vault"].protocolModel,policy:{descriptorType:"tr",miniscript:c,cooperativeMiniscript:a,recoveryMiniscript:A,descriptor:p,address:f.address,scriptPubKey:f.scriptPubKey,threshold:o,signerCount:n.length,recoveryDelayBlocks:s.toString()},authorityReport:{cooperativeSigners:n,threshold:o,recoveryPubkey:i,recoveryDelayBlocks:s.toString()},files:g,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:DE},psbtPrepared:!1,fundingPrepared:!1}}function ME(){return Object.values(rd).map(e=>({...e,disclaimer:DE}))}async function YD(e={}){let t=String(e.templateId||"").trim(),r=rd[t];r||Vt("protocol-templates",`unknown native template "${t}"`);let n=t==="solana-safe-vault"?rj(e):nj(e),o=tj(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"})}_();var oj="https://api.geckoterminal.com/api/v2",nd=(e={})=>(e.baseUrl||process.env.GECKOTERMINAL_API_URL||oj).replace(/\/$/,""),ms=e=>encodeURIComponent(String(e));async function TE(e={},t={}){let r=Math.max(1,Number(e.page||1));return B(`${nd(t)}/networks?page=${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function VD(e={},t={}){if(!e.network||!e.poolAddress)throw new Error("network and poolAddress required");return B(`${nd(t)}/networks/${ms(e.network)}/pools/${ms(e.poolAddress)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function $D(e={},t={}){if(!e.network||!(e.address||e.tokenAddress))throw new Error("network and token address required");return B(`${nd(t)}/networks/${ms(e.network)}/tokens/${ms(e.address||e.tokenAddress)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function JD(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)),B(`${nd(t)}/networks/${ms(e.network)}/pools/${ms(e.poolAddress)}/ohlcv/${r}?${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function WD(e={}){let t=await TE({page:1},e);return{ok:Array.isArray(t?.data)&&t.data.length>0,networkSample:t?.data?.length||0}}_();De();ot();he();import{Interface as XD,getAddress as ZD,isAddress as sj}from"ethers";var aj="https://api.curve.finance/v1",eF=(e={})=>(e.baseUrl||process.env.CURVE_API_URL||aj).replace(/\/$/,""),Aj=Object.freeze({1:"0x45312ea0eFf7E09C83CBE249fa1d7598c4C8cd4e",10:"0x0DCDED3545D565bA3B19E683431381007245d983",56:"0xA72C85C258A81761433B4e8da60505Fe3Dd551CC",137:"0x0DCDED3545D565bA3B19E683431381007245d983",988:"0xFF5Cb29241F002fFeD2eAa224e3e996D24A6E8d1",999:"0xd2002373543Ce3527023C75e7518C274A51ce712",4663:"0xFF5Cb29241F002fFeD2eAa224e3e996D24A6E8d1",8453:"0x4f37A9d177470499A2dD084621020b023fcffc1F",42161:"0x2191718CD32d02B8E60BAdFFeA33E4B5DD9A0A0D",43114:"0x0DCDED3545D565bA3B19E683431381007245d983"}),tF="0x0000000000000000000000000000000000000000",UE=new XD(["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)"]),zD=new XD(["function coins(uint256) view returns (address)"]);function rF(e){let t=Aj[Number(e)];if(!t)throw new Error(`curve-router-ng: unsupported chainId ${e}`);return t}function QA(e,t){if(!sj(e))throw new Error(`${t} must be a valid EVM address`);return ZD(e)}function cj(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 jD(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 nF(e,t,r){return[e,t,r,...Array(8).fill(tF)]}function oF(e,t,r,n){return[[BigInt(e),BigInt(t),1n,BigInt(r),BigInt(n)],...Array.from({length:4},()=>[0n,0n,0n,0n,0n])]}function iF(e){return[e,...Array(4).fill(tF)]}async function lj({chainId:e,pool:t,nCoins:r,rpcCall:n,opts:o}){let i=[];for(let s=0;s<r;s++){let a=zD.encodeFunctionData("coins",[s]),A=await n(e,"eth_call",[{to:t,data:a},o.blockTag||"latest"],o),c=zD.decodeFunctionResult("coins",A);i.push(ZD(c[0]))}return i}function KD(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 sF(e={}){return B(`${eF(e)}/openapi.json`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs})}async function LE(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 B(`${eF(t)}/getPools/${r}/${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function aF(e={}){let t=await LE({chain:"ethereum",registry:"main"},e),r=t?.data?.poolData?.length||0;return{ok:t?.success===!0&&r>0,poolSample:r}}async function _E(e={},t={}){let r=Number(e.chainId??8453),n=rF(r),o=QA(e.pool,"curve pool"),i=QA(e.tokenIn,"curve tokenIn"),s=QA(e.tokenOut,"curve tokenOut"),a=cj(e.amountIn,"curve amountIn"),A=jD(e.nCoins??2,"curve nCoins",2,8),c=jD(e.poolType,"curve poolType",1,4),l=t.rpcCall||z,u=await lj({chainId:r,pool:o,nCoins:A,rpcCall:l,opts:t}),d=KD(u,i,"tokenIn"),f=KD(u,s,"tokenOut");if(d===f)throw new Error("Curve token indexes must differ");let p=nF(i,o,s),h=oF(d,f,c,A),g=iF(o),m=UE.encodeFunctionData("get_dy",[p,h,a,g]),C=await l(r,"eth_call",[{to:n,data:m},e.blockTag||"latest"],t),E=UE.decodeFunctionResult("get_dy",C),I=BigInt(E[0]);if(I<=0n)throw new Error("curve quote returned zero output");return fe({venue:"curve",router:n,chainId:r,pool:o,tokenIn:i,tokenOut:s,amountIn:a.toString(),amountOut:I.toString(),nCoins:A,poolType:c,swapType:1,i:d,j:f,route:p,swapParams:h.map(Q=>Q.map(N=>N.toString())),pools:g},{chainId:r,venue:n,amountOut:I.toString(),liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps})}async function AF(e={},t={}){let r=Number(e.chainId??8453),n=rF(r),o=QA(e.sender||e.from||e.fromAddress||e.receiver,"curve sender"),i=QA(e.receiver||e.recipient||o,"curve receiver"),s=await _E({...e,sender:o},t),a=nF(s.tokenIn,s.pool,s.tokenOut),A=oF(s.i,s.j,s.poolType,s.nCoins),c=iF(s.pool),l=UE.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:ve(s.autoSlippage,{chainId:r,venue:n,data:l})}},{provider:"curve",kind:"curve-tx"})}_();De();he();import{Interface as PE,getAddress as hF,isAddress as dj}from"ethers";var cF=Object.freeze({42161:"https://arbitrum-api.gmxinfra.io",43114:"https://avalanche-api.gmxinfra.io"}),lF=Object.freeze({42161:{name:"arbitrum",api:cF[42161],exchangeRouter:"0x1C3fa76e6E1088bCE750f23a5BFcffa1efEF6A41",router:"0x7452c558d45f8afC8c83dAe62C3f8A5BE19c71f6",orderVault:"0x31eF83a530Fde1B38EE9A18093A333D8Bbbc40D5",dataStore:"0xFD70de6b91282D8017aA4E741e9Ae325CAb992d8",reader:"0x470fbC46bcC0f16532691Df360A07d8Bf5ee0789",eventEmitter:"0xC8ee91A54287DB53897056e12D9819156D3822Fb",wnt:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",usdc:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831"},43114:{name:"avalanche",api:cF[43114],exchangeRouter:"0x8f550E53DFe96C055D5Bdb267c21F268fCAF63B2",router:"0x820F5FfC5b525cD4d88Cd91aCf2c28F16530Cc68",orderVault:"0xD3D60D22d415aD43b7e64b510D86A30f19B1B12C",dataStore:"0x2F0b22339414ADeD7D5F06f9D604c7fF5b2fe3f6",reader:"0x62Cb8740E6986B29dC671B2EB596676f60590A5B",eventEmitter:"0xDb17B211c34240B014ab6d61d4A31FA0C0e20c26",wnt:"0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7",usdc:"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"}}),uF="0x0000000000000000000000000000000000000000",fj=`0x${"0".repeat(64)}`,dF=Object.freeze({marketSwap:0,limitSwap:1,marketIncrease:2,limitIncrease:3,marketDecrease:4,limitDecrease:5,stopLossDecrease:6,stopIncrease:8}),fF=Object.freeze({noSwap:0,swapPnlTokenToCollateralToken:1,swapCollateralTokenToPnlToken:2}),od=new PE(["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"]),gF=new PE(["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)"]),pj=new PE(["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)"]),hj=Object.freeze({OrderCreated:"created",OrderUpdated:"updated",OrderExecuted:"executed",OrderCancelled:"cancelled",OrderFrozen:"frozen"});function Is(e){let t=Number(e??42161),r=lF[t];if(!r)throw new Error(`gmx: unsupported chainId ${e} (supported: ${Object.keys(lF).join(", ")})`);return{chainId:t,...r}}function id(e,t={}){let r=Is(e);return(t.baseUrl||r.api).replace(/\/$/,"")}function $t(e,t){if(!dj(e))throw new Error(`${t} must be a valid EVM address`);return hF(e)}function Ae(e){return hF(e).toLowerCase()}function Es(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 Mo(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 gj(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 mj(e){let t=String(e||"marketIncrease").trim();if(!(t in dF))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:dF[t]}}function Ej(e){let t=String(e||"noSwap").trim();if(!(t in fF))throw new Error(`gmx unsupported decreasePositionSwapType ${t}`);return{key:t,code:fF[t]}}function Ij(e,t){return Array.isArray(e)?e:Array.isArray(e?.[t])?e[t]:[]}function Cj(e,t){let r=Ae(t);return e.find(n=>Ae(n.marketToken||n.market||n.address)===r)||null}function Bj(e,t){let r=Ae(t);return e.find(n=>Ae(n.tokenAddress||n.address)===r)||null}function yj({ticker:e,isLong:t,typeKey:r,maxSlippageBps:n}){let o=Es(e?.minPrice,"gmx minPrice"),i=Es(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 Qj(e,t){let r=t?e.availableLiquidityLong:e.availableLiquidityShort;try{return BigInt(String(r??"0"))}catch{return 0n}}function wj(e){let t=String(e||"").toLowerCase();return/^0x[0-9a-f]{64}$/.test(t)?`0x${t.slice(-40)}`:null}function Lr(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 bj(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:Lr(t,"account",s=>Ae(s)),market:Lr(t,"market",s=>Ae(s)),initialCollateralToken:Lr(t,"initialCollateralToken",s=>Ae(s)),key:Lr(o,"key",s=>String(s).toLowerCase()),reason:Lr(i,"reason",s=>String(s)),sizeDeltaUsd:Lr(r,"sizeDeltaUsd",s=>BigInt(s).toString()),initialCollateralDeltaAmount:Lr(r,"initialCollateralDeltaAmount",s=>BigInt(s).toString()),executionFee:Lr(r,"executionFee",s=>BigInt(s).toString()),acceptablePrice:Lr(r,"acceptablePrice",s=>BigInt(s).toString()),isLong:Lr(n,"isLong",s=>!!s)}}function kj(e={},t){if(Ae(e.address)!==Ae(t.eventEmitter))return null;let r;try{r=pj.parseLog({topics:e.topics,data:e.data})}catch{return null}let n=String(r?.args?.eventName||""),o=hj[n];if(!o)return null;let i=bj(r.args.eventData||{}),s=(i.key||String(r.args.topic1||"")).toLowerCase(),a=i.account||wj(r.args.topic2);return{eventName:n,status:o,orderKey:s,account:a?Ae(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 pF(e){return{executed:5,cancelled:4,frozen:3,created:2,updated:1}[e]||0}function Sj(e=[],{chainId:t}={}){let r=Is(t);return(Array.isArray(e)?e:[]).map(n=>kj(n,r)).filter(Boolean).sort((n,o)=>(n.logIndex??0)-(o.logIndex??0))}async function mF(e={},t={}){return B(`${id(e.chainId??42161,t)}/markets`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function OE(e={},t={}){return B(`${id(e.chainId??42161,t)}/markets/info`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function EF(e={},t={}){return B(`${id(e.chainId??42161,t)}/tokens`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function sd(e={},t={}){return B(`${id(e.chainId??42161,t)}/prices/tickers`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function IF(e={}){let t=await sd({chainId:42161},e);return{ok:Array.isArray(t)&&t.length>0,tickerSample:Array.isArray(t)?t.length:0}}async function CF(e={},t={}){let r=Is(e.chainId??42161),n=$t(e.account||e.owner||e.user,"gmx account"),o=Mo(e.start??0,"gmx start"),i=Mo(e.end??e.limit??20,"gmx end"),s=gF.encodeFunctionData("getAccountPositions",[r.dataStore,n,o,i]),A=await(t.rpcCall||z)(r.chainId,"eth_call",[{to:r.reader,data:s},e.blockTag||"latest"],t);return{provider:"gmx",chainId:r.chainId,reader:Ae(r.reader),dataStore:Ae(r.dataStore),account:Ae(n),raw:A}}async function BF(e={},t={}){let r=Is(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=gF.encodeFunctionData("getOrder",[r.dataStore,n]),s=await(t.rpcCall||z)(r.chainId,"eth_call",[{to:r.reader,data:o},e.blockTag||"latest"],t);return{provider:"gmx",chainId:r.chainId,reader:Ae(r.reader),dataStore:Ae(r.dataStore),key:n,raw:s}}async function yF(e={},t={}){let r=Is(e.chainId??42161),n=t.receipt||await Ga({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=Sj(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)=>pF(u.status)>=pF(l.status)?u:l,a[0]),c=e.expectedAccount||e.account?Ae(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:Ae(r.eventEmitter),events:a,receipt:n}}async function QF(e={},t={}){let r=Is(e.chainId??42161),n=mj(e.orderType||e.type),o=Ej(e.decreasePositionSwapType),i=$t(e.account||e.owner||e.from||e.sender||e.receiver,"gmx account"),s=$t(e.receiver||i,"gmx receiver"),a=$t(e.cancellationReceiver||s,"gmx cancellationReceiver"),A=e.callbackContract?$t(e.callbackContract,"gmx callbackContract"):uF,c=e.uiFeeReceiver?$t(e.uiFeeReceiver,"gmx uiFeeReceiver"):uF,l=$t(e.market||e.marketToken,"gmx market"),u=$t(e.initialCollateralToken||e.collateralToken||r.usdc,"gmx initialCollateralToken"),d=n.key==="marketIncrease"?Es(e.initialCollateralDeltaAmount??e.collateralAmount??e.amountIn,"gmx initialCollateralDeltaAmount"):Mo(e.initialCollateralDeltaAmount??e.collateralAmount??"0","gmx initialCollateralDeltaAmount"),f=Es(e.sizeDeltaUsd,"gmx sizeDeltaUsd"),p=Es(e.executionFee,"gmx executionFee"),h=BigInt(String(e.maxExecutionFeeWei??"10000000000000000"));if(p>h)throw new Error("gmx executionFee exceeds maxExecutionFeeWei");let g=BigInt(String(e.maxSizeDeltaUsd??"50000000000000000000000000000000000"));if(f>g)throw new Error("gmx sizeDeltaUsd exceeds maxSizeDeltaUsd");let m=gj(e.maxSlippageBps??e.slippageBps,50),C=e.isLong==null?!0:!!e.isLong,[E,I]=await Promise.all([OE({chainId:r.chainId},t),sd({chainId:r.chainId},t)]),Q=Cj(Ij(E,"markets"),l);if(!Q)throw new Error("gmx market not found in public registry");if(Q.isListed===!1)throw new Error("gmx market is not listed");let N=$t(Q.indexToken,"gmx market indexToken"),S=$t(Q.longToken,"gmx market longToken"),y=$t(Q.shortToken,"gmx market shortToken"),w=Ae(u);if(![Ae(S),Ae(y)].includes(w))throw new Error("gmx collateral token must match market longToken or shortToken for this guarded slice");let b=Qj(Q,C);if(b>0n&&f>b)throw new Error("gmx sizeDeltaUsd exceeds available market liquidity");let U=Bj(I,N);if(!U)throw new Error("gmx index ticker not found");let q=e.acceptablePrice?Es(e.acceptablePrice,"gmx acceptablePrice").toString():yj({ticker:U,isLong:C,typeKey:n.key,maxSlippageBps:m}),ue=(e.swapPath||[]).map(be=>$t(be,"gmx swapPath market"));if(ue.length>3)throw new Error("gmx swapPath too long for guarded slice");let Ve=Mo(e.triggerPrice??"0","gmx triggerPrice"),mt=Mo(e.callbackGasLimit??"0","gmx callbackGasLimit"),Tt=Mo(e.minOutputAmount??"0","gmx minOutputAmount"),Et=Mo(e.validFromTime??"0","gmx validFromTime"),Ut=!!e.shouldUnwrapNativeToken,An=e.autoCancel==null?!0:!!e.autoCancel,It=String(e.referralCode||fj);if(!/^0x[0-9a-fA-F]{64}$/.test(It))throw new Error("gmx referralCode must be bytes32 hex");let $o=Array.isArray(e.dataList)?e.dataList:[];for(let be of $o)if(!/^0x[0-9a-fA-F]{64}$/.test(String(be)))throw new Error("gmx dataList entries must be bytes32 hex");let uf={addresses:{receiver:s,cancellationReceiver:a,callbackContract:A,uiFeeReceiver:c,market:l,initialCollateralToken:u,swapPath:ue},numbers:{sizeDeltaUsd:f,initialCollateralDeltaAmount:d,triggerPrice:Ve,acceptablePrice:BigInt(q),executionFee:p,callbackGasLimit:mt,minOutputAmount:Tt,validFromTime:Et},orderType:n.code,decreasePositionSwapType:o.code,isLong:C,shouldUnwrapNativeToken:Ut,autoCancel:An,referralCode:It,dataList:$o},T=[];n.key==="marketIncrease"&&d>0n&&T.push(od.encodeFunctionData("sendTokens",[u,r.orderVault,d])),T.push(od.encodeFunctionData("sendWnt",[r.orderVault,p])),T.push(od.encodeFunctionData("createOrder",[uf]));let H=od.encodeFunctionData("multicall",[T]),re={mode:"gmx-order",provider:"gmx",chainId:r.chainId,chain:r.name,orderType:n.key,orderTypeCode:n.code,decreasePositionSwapType:o.key,account:Ae(i),receiver:Ae(s),exchangeRouter:Ae(r.exchangeRouter),router:Ae(r.router),orderVault:Ae(r.orderVault),market:Ae(l),indexToken:Ae(N),initialCollateralToken:Ae(u),initialCollateralDeltaAmount:d.toString(),sizeDeltaUsd:f.toString(),executionFee:p.toString(),acceptablePrice:q,maxSlippageBps:m,isLong:C,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:Ae(l),requiresApproval:n.key==="marketIncrease"&&d>0n?{token:Ae(u),spender:Ae(r.router),amount:d.toString()}:null,gmxGuard:re,transaction:{chainId:r.chainId,from:Ae(i),to:Ae(r.exchangeRouter),data:H,value:p.toString(),gmxGuard:re}},{provider:"gmx",kind:"gmx-order"})}_();De();he();import{Interface as vj,getAddress as Nj,isAddress as Rj,keccak256 as wF,toUtf8Bytes as bF}from"ethers";var Dj="https://api.morpho.org/graphql",ad=new vj(["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)"]),Fj=(e={})=>e.baseUrl||process.env.MORPHO_API_URL||Dj;async function HE(e,t,r={}){return B(Fj(r),{method:"POST",body:{query:e,variables:t},fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??2e4})}var Mj="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 } } } }",Tj="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 wA(e,t){let r=String(e||"").trim();if(!Rj(r))throw new Error(`morpho: ${t} must be an address`);return Nj(r).toLowerCase()}function Uj(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 qE(e){return Array.isArray(e)?`[${e.map(qE).join(",")}]`:e&&typeof e=="object"?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${qE(e[t])}`).join(",")}}`:JSON.stringify(e)}async function bA(e,t,r,n,o={}){let i=ad.encodeFunctionData(r,n),a=await(o.rpcCall||z)(Number(e),"eth_call",[{to:t,data:i},"latest"],o);return ad.decodeFunctionResult(r,a)}function Lj(e,t){let r=t.toLowerCase();return(e||[]).find(n=>String(n?.address||"").toLowerCase()===r)||null}async function kF(e={},t={}){let r=Math.min(100,Math.max(1,Number(e.first||20))),n=(e.chainIds||[e.chainId||1]).map(Number);return HE(Mj,{first:r,chainIds:n,where:{chainId_in:n}},t)}async function GE(e={},t={}){let r=Math.min(100,Math.max(1,Number(e.first||20))),n=(e.chainIds||[e.chainId||1]).map(Number);return HE(Tj,{first:r,chainIds:n,where:{chainId_in:n}},t)}async function SF(e={}){return{ok:(await HE("query { __typename }",{},e))?.data?.__typename==="Query"}}async function xF(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=wA(e.vault||e.vaultAddress,"vault"),i=wA(e.owner||e.from||e.sender,"owner"),s=wA(e.receiver||i,"receiver"),a=Uj(e.amount||e.assets,"amount"),A=Number(e.minTotalAssetsUsd??1e5),c=await GE({chainId:r,first:100},t),l=Lj(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 bA(r,o,"asset",[],t),f=wA(d,"vault asset");if((l?.asset?.address?wA(l.asset.address,"api vault asset"):f)!==f)throw new Error("morpho: API asset and on-chain asset mismatch");let h,g;if(n==="deposit"){let[C]=await bA(r,o,"maxDeposit",[i],t);if(BigInt(a)>BigInt(C.toString()))throw new Error("morpho: amount exceeds maxDeposit");let[E]=await bA(r,o,"previewDeposit",[a],t);if(BigInt(E.toString())<=0n)throw new Error("morpho: previewDeposit returned zero shares");g={minSharesOut:E.toString()},h=ad.encodeFunctionData("deposit",[a,s])}else{let[C]=await bA(r,o,"maxWithdraw",[i],t);if(BigInt(a)>BigInt(C.toString()))throw new Error("morpho: amount exceeds maxWithdraw");let[E]=await bA(r,o,"previewWithdraw",[a],t);if(BigInt(E.toString())<=0n)throw new Error("morpho: previewWithdraw returned zero shares");g={maxSharesIn:E.toString()},h=ad.encodeFunctionData("withdraw",[a,s,i])}let m={mode:"erc4626-vault",version:1,provider:"morpho",chainId:r,action:n,vault:o,asset:f,owner:i,receiver:s,amount:a,totalAssetsUsd:u,...g,calldataHash:wF(bF(h)),issuedAtMs:Date.now(),expiresAtMs:Date.now()+2e4};return m.guardHash=wF(bF(qE(m))),L({provider:"morpho",protocol:"erc4626-vault",vaultReady:!0,executionReady:!1,signingReady:!1,broadcastReady:!1,requiresUserSignature:!0,chainId:r,action:n,vault:o,asset:f,owner:i,receiver:s,amount:a,vaultInfo:l,vaultGuard:m,requiresApproval:n==="deposit"?{token:f,spender:o,amount:a}:null,transaction:{chainId:r,from:i,to:o,data:h,value:"0x0",madVault:m}},{provider:"morpho",kind:"erc4626-vault"})}_();De();ot();he();import{Interface as Pj,getAddress as YE,isAddress as Oj}from"ethers";var qj="https://api-v3.balancer.fi/",Hj=(e={})=>e.baseUrl||process.env.BALANCER_API_URL||qj;async function RF(e,t,r={}){return B(Hj(r),{method:"POST",body:{query:e,variables:t},fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??2e4})}var Gj="query Pools($first: Int, $where: GqlPoolFilter) { poolGetPools(first: $first, where: $where) { id address chain type protocolVersion dynamicData { totalLiquidity volume24h fees24h } } }",vF=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"}}),Yj="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",Vj="0x0000000000000000000000000000000000000000",VE=new Pj(["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 DF(e){let t=Number(e??8453),r=vF[t];if(!r)throw new Error(`balancer-v3: unsupported chainId ${e} (supported: ${Object.keys(vF).join(", ")})`);return{chainId:t,...r}}function FF(e){let t=String(e||"").toLowerCase();return!t||t==="eth"||t==="native"||t===Vj||t===Yj.toLowerCase()}function Ad(e,t){if(!Oj(e))throw new Error(`${t} must be a valid EVM address`);return YE(e)}function NF(e,t,r){let n=String(e||"");return FF(n)||/^weth$/i.test(n)?YE(t.weth):/^usdc$/i.test(n)?YE(t.usdc):Ad(n,r)}function $j(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 MF(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 TF(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 RF(Gj,{first:r,chains:n,where:{chainIn:n}},t)}async function UF(e={}){return{ok:(await RF("query { __typename }",{},e))?.data?.__typename==="Query"}}async function $E(e={},t={}){let r=DF(e.chainId),n=Ad(e.pool,"balancer pool"),o=e.tokenIn||"WETH",i=NF(o,r,"balancer tokenIn"),s=NF(e.tokenOut||"USDC",r,"balancer tokenOut"),a=$j(e.amountIn,"balancer amountIn"),A=Ad(e.sender||e.from||e.fromAddress||e.recipient,"balancer sender"),c=VE.encodeFunctionData("querySwapSingleTokenExactIn",[n,i,s,a,A,MF(e.userData)]),u=await(t.rpcCall||z)(r.chainId,"eth_call",[{to:r.router,data:c},e.blockTag||"latest"],t),d=VE.decodeFunctionResult("querySwapSingleTokenExactIn",u),f=BigInt(d[0]);if(f<=0n)throw new Error("balancer quote returned zero output");return fe({venue:"balancer",protocolVersion:3,chainId:r.chainId,chain:r.name,router:r.router,pool:n,tokenIn:i,tokenOut:s,amountIn:a.toString(),amountOut:f.toString()},{chainId:r.chainId,venue:r.router,amountOut:f.toString(),liquidityUsd:e.liquidityUsd,priceChange5m:e.priceChange5m,requestedCapBps:e.maxSlippageBps??e.slippageBps})}async function LF(e={},t={}){let r=DF(e.chainId),n=Ad(e.sender||e.from||e.fromAddress||e.recipient,"balancer sender"),o=e.tokenIn||"WETH",i=FF(o),s=await $E({...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=VE.encodeFunctionData("swapSingleTokenExactIn",[s.pool,s.tokenIn,s.tokenOut,BigInt(s.amountIn),BigInt(s.amountOutMinimum),c,l,MF(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:ve(s.autoSlippage,{chainId:r.chainId,venue:r.router,data:u})}},{provider:"balancer",kind:"balancer-tx"})}_();ot();he();import{getAddress as Wj}from"ethers";var zj="https://api-v2.pendle.finance/core",jj=Object.freeze({42161:"0x888888888889758F76e7103c6CbF23ABbF58F946",8453:"0x888888888889758F76e7103c6CbF23ABbF58F946"}),Kj="0x0000000000000000000000000000000000000000",Xj="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",_F=(e={})=>(e.baseUrl||process.env.PENDLE_API_URL||zj).replace(/\/$/,"");function cd(e,t){try{return Wj(e)}catch{throw new Error(`${t} must be a valid EVM address`)}}function Cs(e,t){return cd(e,t).toLowerCase()}function Zj(e){let t=String(e||"").toLowerCase();return t==="native"||t==="eth"||t===Xj||t===Kj}function JE(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 eK(e){if(!Array.isArray(e)||e.length===0)throw new Error("pendle convert requires inputs[]");return e.map((t,r)=>({token:cd(t.token,`pendle input ${r} token`),amount:JE(t.amount,`pendle input ${r} amount`)}))}function tK(e){if(!Array.isArray(e)||e.length===0)throw new Error("pendle convert requires outputs[]");return e.map((t,r)=>cd(t,`pendle output ${r} token`))}function rK(e){let t=jj[Number(e)];if(!t)throw new Error(`Pendle prepare not enabled for chainId ${e}`);return t}function nK(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 JE(t,"pendle output amount")}function oK(e,t){let r=(Array.isArray(e)?e:[]).filter(n=>n?.token&&n?.amount&&!Zj(n.token)).map(n=>({token:Cs(n.token,"pendle approval token"),spender:Cs(t,"pendle approval spender"),amount:JE(n.amount,"pendle approval amount")}));return r.length?r.length===1?r[0]:r:null}async function WE(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)),B(`${_F(t)}/v1/${r}/markets?${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function PF(e={}){let t=await WE({chainId:42161,limit:1},e);return{ok:Array.isArray(t?.results),marketSample:t?.results?.length||0}}async function zE(e={},t={}){let r=Number(e.chainId??42161),n=rK(r),o=e.from||e.fromAddress||e.userAddress||e.taker||e.receiver;if(!o)throw new Error("pendlePrepare requires from/receiver");let i=cd(e.receiver||o,"pendle receiver"),s=eK(e.inputs),a=tK(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=ft({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 B(`${_F(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(Cs(d.to,"pendle tx target")!==Cs(n,"pendle router"))throw new Error("Pendle convert returned unexpected router target");if(d.from&&Cs(d.from,"pendle tx sender")!==Cs(o,"pendle sender"))throw new Error("Pendle convert transaction sender mismatch");let f=nK(l),p=fe(l,{chainId:r,venue:d.to,amountOut:f,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:p,autoSlippage:p.autoSlippage,requiresApproval:oK(l.requiredApprovals,d.to),transaction:{chainId:r,from:d.from||o,to:d.to,data:d.data,value:d.value??"0x0",slippageGuard:ve(p.autoSlippage,{chainId:r,venue:d.to,data:d.data})}},{provider:"pendle",kind:"pendle-swap"})}async function OF(e={},t={}){let r=await zE(e,t),{transaction:n,...o}=r;return o}_();ot();he();import{isAddress as sK}from"ethers";var aK="https://api.odos.xyz",jE=(e={})=>(e.baseUrl||process.env.ODOS_API_URL||aK).replace(/\/$/,"");async function KE(e={}){return B(`${jE(e)}/info/chains`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs})}function AK(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(!sK(String(e.userAddr||"")))throw new Error("odos: valid userAddr required");return t}async function qF(e={},t={}){let r=AK(e),n=ft({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 B(`${jE(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 HF(e={},t={}){let{chainId:r,quote:n,amountOut:o}=await qF(e,t);return{...fe(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 GF(e={},t={}){let{chainId:r,quote:n,amountOut:o}=await qF(e,t),i=await B(`${jE(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=fe(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:ve(a.autoSlippage,{chainId:r,venue:s.to,data:s.data})}},{provider:"odos",kind:"odos-tx"})}async function YF(e={}){let t=await KE(e);return{ok:Array.isArray(t?.chains)&&t.chains.length>0,chainCount:t?.chains?.length||0}}_();var VF=/[\u200B-\u200F\u202A-\u202E\u2060-\u2064\uFEFF]/g,lK=/[<>&`*_~[\]()|\\]/g,uK=/[\u0000-\u001F\u007F]/g;function XE(e,{max:t=32,fallback:r=""}={}){return e==null?r:String(e).normalize("NFKC").replace(VF,"").replace(uK,"").replace(lK,"").replace(/\s+/g," ").trim().slice(0,t).trim()||r}function ZE(e){if(e==null)return!1;let t=String(e);return VF.test(t)?!0:/[\u0400-\u04FF\u0370-\u03FF]/.test(t)&&/[A-Za-z]/.test(t)}var $F=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 ld(e,t={}){let r=Number(e),n=t.baseUrl||$F[r];if(!n)throw new Error(`Blockscout not configured for chainId ${r}`);return n.replace(/\/$/,"")}function JF(e){return!!$F[Number(e)]}async function eI(e={},t={}){return B(`${ld(e.chainId||1,t)}/api/v2/stats`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function WF(e={},t={}){if(!e.address)throw new Error("address required");return B(`${ld(e.chainId||1,t)}/api/v2/addresses/${encodeURIComponent(e.address)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function zF(e={},t={}){if(!e.address&&!e.tokenAddress)throw new Error("token address required");return B(`${ld(e.chainId||1,t)}/api/v2/tokens/${encodeURIComponent(e.address||e.tokenAddress)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function jF(e={},t={}){if(!e.address)throw new Error("address required");let r=Number(e.chainId||1),n=`${ld(r,t)}/api/v2/addresses/${encodeURIComponent(e.address)}/token-balances`,o=await B(n,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??18e3,headers:{accept:"application/json","user-agent":"OraclePortfolio/1.0"}});return Array.isArray(o)?o:[]}function KF(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=XE(o.symbol||o.name,{max:32,fallback:"TOKEN"}),l=XE(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:ZE(o.symbol)||ZE(o.name)||void 0})}return r}async function XF(e={}){let t=await eI({chainId:8453},e);return{ok:t?.total_blocks!=null||t?.total_transactions!=null,chainId:8453}}import{getAddress as fK}from"ethers";_();De();var pK="TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",eM=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 Ln(e={},t){return{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs,env:e.env,...e[t]||{}}}function ud(e,...t){for(let r of t){let n=String(e?.[r]||"").trim();if(n)return n}return null}function ZF(e){if(!e)return null;try{return fK(String(e).trim().toLowerCase())}catch{throw new Error("portfolio: EVM address must be a valid 20-byte address")}}function To(e={},t=process.env){let r=e.addresses||{},n=ZF(r.evm||e.evmAddress||ud(t,"ORACLE_EVM_ADDRESS","ORACLE_DEFAULT_ADDRESS","MAD_OPERATOR_ADDRESS")),o=r.solana||e.solanaAddress||ud(t,"ORACLE_SOLANA_ADDRESS"),i=r.bitcoin||e.bitcoinAddress||ud(t,"ORACLE_BITCOIN_ADDRESS"),s=ZF(r.hyperliquid||e.hyperliquidAddress||ud(t,"ORACLE_HYPERLIQUID_ADDRESS")||n);return{evm:n,solana:o?Qe(o,"portfolio Solana address"):null,bitcoin:i?Ar(i,"portfolio Bitcoin address"):null,hyperliquid:s}}function kA(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 Bs(e){let t=Number(e);return Number.isFinite(t)?t:null}function dd(e){return Number.isFinite(e)?Number(e.toFixed(2)):null}function _n(e){let t=Number(e);return Number.isFinite(t)&&t!==0}function tM(e,t){let r=eM[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 hK(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:kA(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 tI(e,t){return{family:e,status:"unsupported",reason:t}}function rI(e,t){if(!e||e.status!=="ok")return e;let r=tM(t,e.symbol),n=Bs(e.amount),o=n!=null&&r.priceUsd!=null?dd(n*r.priceUsd):null;return{...e,price:r,usdValue:o}}async function rM(e={}){let t=To({},e.env||process.env);return{ok:!0,provider:"portfolio",readOnly:!0,configuredFamilies:Object.entries(t).filter(([,r])=>!!r).map(([r])=>r)}}async function fd(e={},t={}){let r=new Date().toISOString(),n=To(e,t.env||process.env),o=e.includePrices!==!1,i=e.includeTokens!==!1,s=e.includeCollectibles!==!1,a=new Map(xn.map(T=>[T.chainId,T])),A=Array.isArray(e.evmChainIds)&&e.evmChainIds.length?[...new Set(e.evmChainIds.map(Number))]:[...a.keys()],c=[...new Set(Object.values(eM))],l=o?qe(()=>lr(c,Ln(t,"prices"))):Promise.resolve({ok:!1,ms:0,error:"price lookup disabled"}),u=Yi(A,e.concurrency||5,async T=>{let H=a.get(T);if(!H)return{family:"evm",chainId:T,name:null,address:n.evm,status:"unsupported",error:"chainId is not in Oracle's configured EVM registry"};if(!n.evm)return{family:"evm",chainId:T,name:H.name,address:null,status:"not-configured",error:"set ORACLE_EVM_ADDRESS or pass addresses.evm"};let re={...Ln(t,"evm"),rpcUrl:e.rpcUrls?.[T]||t.evm?.rpcUrls?.[T]},be=await qe(()=>ko(T,n.evm,re));if(!be.ok)return{family:"evm",chainId:T,name:H.name,address:n.evm,status:"unavailable",latencyMs:be.ms,error:be.error};let ze=H.nativeCurrency?.decimals??18,Ct=H.nativeCurrency?.symbol||"NATIVE",K=be.data.balanceWei,Me={status:i?"unavailable":"not-requested",assets:[],reason:i?"EVM JSON-RPC cannot enumerate wallet tokens without an address indexer":"token discovery disabled"};if(i&&JF(T)){let Xn=await qe(()=>jF({chainId:T,address:n.evm},{...Ln(t,"blockscout"),timeoutMs:t.timeoutMs??18e3}));Xn.ok?Me={status:"ok",assets:KF(Xn.data,{fungibleOnly:!0}).map(Ls=>{let _s=kA(Ls.amountRaw,Ls.decimals);return{...Ls,amount:_s,priceUsd:null,usdValue:null}}),reason:null,source:"blockscout",latencyMs:Xn.ms}:Me={status:"unavailable",assets:[],reason:Xn.error||"blockscout token-balances failed",source:"blockscout",latencyMs:Xn.ms}}return{family:"evm",chainId:T,name:H.name,address:n.evm,status:"ok",latencyMs:be.ms,native:{status:"ok",symbol:Ct,amountRaw:K,decimals:ze,amount:kA(K,ze)},fungibleTokens:Me,collectibles:{status:s?"unavailable":"not-requested",assets:[],reason:s?"EVM JSON-RPC cannot enumerate wallet NFTs without an address indexer":"collectible discovery disabled"},source:Me.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 T=Ln(t,"solana"),H=await qe(()=>du({address:n.solana},T)),re=i||s?await Promise.all([qe(()=>tA({owner:n.solana,programId:km},T)).then(Me=>({...Me,program:"spl-token"})),qe(()=>tA({owner:n.solana,programId:pK},T)).then(Me=>({...Me,program:"token-2022"}))]):[],be=hK(re),ze=be.filter(Me=>Me.classification==="collectible-candidate"),Ct=be.filter(Me=>Me.classification!=="collectible-candidate"),K=re.filter(Me=>!Me.ok).map(Me=>Me.error);return{family:"solana",name:"Solana Mainnet",address:n.solana,status:H.ok||re.some(Me=>Me.ok)?"ok":"unavailable",native:H.ok?{status:"ok",symbol:"SOL",amountRaw:H.data.lamports,decimals:9,amount:kA(H.data.lamports,9),slot:H.data.slot}:{status:"unavailable",symbol:"SOL",error:H.error},fungibleTokens:{status:i?K.length===re.length?"unavailable":K.length?"partial":"ok":"not-requested",assets:i?Ct:[],errors:K,note:"SPL accounts are unverified until a metadata/indexer source confirms symbol and spam status"},collectibles:{status:s?K.length===re.length?"unavailable":"partial":"not-requested",assets:s?ze:[],errors:K,note:"decimals=0 and amount=1 is only a collectible candidate, not verified NFT metadata"},source:"solana-rpc"}})(),f=(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 T=Ln(t,"bitcoin"),H=Ln(t,"bitcoinMeta"),[re,be,ze]=await Promise.all([qe(()=>pu({address:n.bitcoin},T)),i?qe(()=>gu({address:n.bitcoin},H)):Promise.resolve({ok:!1,ms:0,error:"token discovery disabled"}),s?qe(()=>Xi({address:n.bitcoin},H)):Promise.resolve({ok:!1,ms:0,error:"collectible discovery disabled"})]),Ct=be.ok?be.data:null,K=ze.ok?ze.data:null;return{family:"bitcoin",name:"Bitcoin Mainnet",address:n.bitcoin,status:re.ok||Ct?.ok||K?.ok?"ok":"unavailable",native:re.ok?{status:"ok",symbol:"BTC",amountRaw:re.data.balanceSats,decimals:8,amount:kA(re.data.balanceSats,8)}:{status:"unavailable",symbol:"BTC",error:re.error},fungibleTokens:{status:i?Ct?.ok?"ok":"unavailable":"not-requested",assets:Ct?.balances||[],error:Ct?.ok?null:Ct?.error||be.error,verification:"indexer-reported"},collectibles:{status:s?K?.ok?"ok":"unavailable":"not-requested",assets:K?.inscriptions||[],error:K?.ok?null:K?.error||ze.error,unknownNotEmpty:!!K?.unknownNotEmpty,verification:"indexer-reported"},source:"bitcoin-esplora+bitcoin-meta"}})(),p=(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 T=Ln(t,"hyperliquid"),[H,re,be]=await Promise.all([qe(()=>au(n.hyperliquid,T)),qe(()=>cu(n.hyperliquid,T)),qe(()=>rn(T))]),ze=(H.ok&&Array.isArray(H.data?.balances)?H.data.balances:[]).filter(K=>_n(K.total)||_n(K.hold)).map(K=>({coin:K.coin||null,total:String(K.total??"0"),hold:String(K.hold??"0"),priceUsd:null,usdValue:null})),Ct=(re.ok&&Array.isArray(re.data?.assetPositions)?re.data.assetPositions:[]).map(K=>K.position||K).filter(K=>_n(K.szi)).map(K=>({coin:K.coin||null,size:String(K.szi??"0"),entryPrice:K.entryPx??null,positionValueUsd:K.positionValue??null,unrealizedPnlUsd:K.unrealizedPnl??null,liquidationPrice:K.liquidationPx??null}));return{family:"hyperliquid",name:"Hyperliquid HyperCore",address:n.hyperliquid,status:H.ok||re.ok?"ok":"unavailable",spot:{status:H.ok?"ok":"unavailable",balances:ze,error:H.ok?null:H.error},perps:{status:re.ok?"ok":"unavailable",accountValueUsd:re.data?.marginSummary?.accountValue??null,withdrawableUsd:re.data?.withdrawable??null,positions:Ct,error:re.ok?null:re.error},mids:be.ok?be.data:{},source:"hyperliquid-info"}})(),[h,g,m,C,E]=await Promise.all([u,d,f,p,l]),I=E.ok?E.data:null,Q=Object.freeze({1:"ethereum",10:"optimism",56:"bsc",137:"polygon",8453:"base",42161:"arbitrum",43114:"avax",81457:"blast",534352:"scroll",59144:"linea",324:"era"}),N=[];for(let T of h){if(T.family!=="evm"||T.fungibleTokens?.status!=="ok")continue;let H=Q[T.chainId];if(H)for(let re of T.fungibleTokens.assets||[])re.address&&N.push(`${H}:${String(re.address).toLowerCase()}`)}let S=null;if(o&&N.length){let T=[...new Set(N)],H=await qe(()=>lr(T,Ln(t,"prices")));H.ok&&(S=H.data)}let y=h.map(T=>{let H=T.native?{...T,native:rI(T.native,I)}:T;if(H.fungibleTokens?.status==="ok"&&Array.isArray(H.fungibleTokens.assets)){let re=Q[H.chainId],be=H.fungibleTokens.assets.map(ze=>{let Ct=String(ze.symbol||"").toUpperCase(),K=null;if(["USDC","USDT","USDT0","DAI","USDBC","USDE","USDCE"].includes(Ct)&&(K=1),K==null&&re&&ze.address&&S?.coins){let ZC=`${re}:${String(ze.address).toLowerCase()}`,Ls=S.coins[ZC],_s=Number(Ls?.price);Number.isFinite(_s)&&_s>0&&(K=_s)}let Me=Bs(ze.amount),Xn=Me!=null&&K!=null?dd(Me*K):null;return{...ze,priceUsd:K,usdValue:Xn}});H={...H,fungibleTokens:{...H.fungibleTokens,assets:be}}}return H});g.native&&(g.native=rI(g.native,I)),m.native&&(m.native=rI(m.native,I));let w=0,b=0,U=0;for(let T of[...y,g,m]){T.native?.status==="ok"&&_n(T.native.amount)&&(T.native.usdValue!=null?(w+=T.native.usdValue,b+=1):U+=1);for(let H of T.fungibleTokens?.assets||[])!_n(H.amount)&&!_n(H.amountRaw)||(H.usdValue!=null?(w+=H.usdValue,b+=1):U+=1)}let q=tM(I,"HYPE");for(let T of C.spot?.balances||[]){let H=String(T.coin||"").toUpperCase(),re=H==="USDC"||H==="USDT"||H==="USDT0"?1:H==="HYPE"?q.priceUsd||Bs(C.mids?.HYPE):Bs(C.mids?.[T.coin]),be=Bs(T.total);T.priceUsd=re,T.usdValue=be!=null&&re!=null?dd(be*re):null,_n(T.total)&&(T.usdValue!=null?(w+=T.usdValue,b+=1):U+=1)}let ue=Bs(C.perps?.accountValueUsd);ue!=null&&ue!==0&&(w+=ue,b+=1);let Ve=[...g.fungibleTokens?.assets||[],...g.collectibles?.assets||[]].filter(T=>_n(T.amount)).length,mt=(m.fungibleTokens?.assets||[]).length+(m.collectibles?.assets||[]).length;U+=Ve+mt;let Tt=[...y,g,m,C],Et=T=>Tt.filter(H=>H.status===T).length,Ut=[],An=y.filter(T=>T.fungibleTokens?.status==="unavailable"),It=y.filter(T=>T.fungibleTokens?.status==="ok");An.length&&!It.length?Ut.push("EVM token discovery is unavailable without a working address indexer; native balances are still live."):An.length&&Ut.push(`EVM token discovery partial: Blockscout covered ${It.length} chain(s); ${An.length} chain(s) still native-only.`),(g.fungibleTokens?.assets?.length||g.collectibles?.assets?.length)&&Ut.push("Solana token accounts are unverified and may include spam; collectible candidates are not confirmed NFTs."),m.collectibles?.unknownNotEmpty&&Ut.push("Bitcoin inscription holdings are unknown, not zero, because no address indexer is configured."),E.ok||Ut.push(`Price provider unavailable: ${E.error}`);let $o=[tI("cosmos","requires a chain-specific bech32 address and LCD/RPC adapter"),tI("sui","Sui balance adapter is not installed"),tI("aptos","Aptos balance adapter is not installed")],uf=Tt.some(T=>["unavailable","partial","not-configured"].includes(T.fungibleTokens?.status)||["unavailable","partial","not-configured"].includes(T.collectibles?.status));return{provider:"portfolio",operation:"balances",readOnly:!0,queriedAt:r,addresses:n,coverage:{requestedSurfaces:Tt.length,ok:Et("ok"),unavailable:Et("unavailable"),notConfigured:Et("not-configured"),unsupported:Et("unsupported")+$o.length,evmChainsRequested:A.length,evmChainsOk:y.filter(T=>T.status==="ok").length},valuation:{knownUsd:dd(w),label:"known priced value, not a complete portfolio total",pricedItems:b,unpricedNonzeroItems:U,complete:U===0&&!uf&&Et("unavailable")===0&&Et("not-configured")===0&&$o.length===0,priceSource:o?"DefiLlama":null,priceStatus:E.ok?"ok":"unavailable",priceQueriedAt:r},chains:[...y,g,m,C],unsupportedFamilies:$o,warnings:Ut}}import{constants as hd}from"node:fs";import{chmod as OK,mkdir as qK,open as HK,readFile as GK}from"node:fs/promises";import{createHash as YK,randomUUID as VK}from"node:crypto";import $K from"node:os";import Qs from"node:path";_();_();var mK=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"]),EK=new Set(["image/jpeg","image/png","image/webp"]);function IK(e){let t=String(e||"").toLowerCase();return mK.some(r=>t===r||t.endsWith(`.${r}`))}function CK(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 nM(e){let t=CK(e),r;try{r=new URL(t)}catch{return null}return r.protocol!=="https:"||r.username||r.password||!IK(r.hostname)?null:r}async function BK(e,t={}){let r=t.fetchImpl||globalThis.fetch;if(typeof r!="function")throw new Error("gallery fetch unavailable");let n=nM(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 qe(()=>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=nM(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(!EK.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 nI(e){return String(e??"").replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function yK(e,t){return e.name||e.collection||e.tokenId||`NFT ${t+1}`}async function oM(e={},t={}){let r=Array.isArray(e.items)?e.items:[];if(!r.length)throw new Error("nft gallery requires inventory items");let n=Math.min(Math.max(Number(e.pageSize??12)||12,1),12),o=Math.max(Number(e.page??1)||1,1),i=Math.max(Math.ceil(r.length/n),1);if(o>i)throw new Error(`nft gallery page ${o} exceeds ${i}`);let s=r.slice((o-1)*n,o*n),a=[],A=0,c=Math.min(Math.max(Number(e.maxTotalBytes??8e6),25e4),12e6);for(let E of s){if(A>=c){a.push({item:E,image:null,error:"gallery page byte cap reached"});continue}try{let I=await BK(E.imageUrl||E.originalImageUrl,{...t,maxImageBytes:Math.min(Number(e.maxImageBytes??15e5),c-A)});A+=I.bytes,a.push({item:E,image:I,error:null})}catch(I){a.push({item:E,image:null,error:String(I?.message||I).slice(0,180)})}}let l=3,u=340,d=400,f=76,p=Math.ceil(s.length/l),h=l*u,g=f+p*d,m=a.map(({item:E,image:I,error:Q},N)=>{let S=N%l,y=Math.floor(N/l),w=S*u,b=f+y*d,U=I?`<image x="${w+14}" y="${b+14}" width="312" height="312" preserveAspectRatio="xMidYMid slice" href="data:${I.mimeType};base64,${I.data}"/>`:`<rect x="${w+14}" y="${b+14}" width="312" height="312" rx="14" fill="#151820"/><text x="${w+170}" y="${b+165}" text-anchor="middle" fill="#76808f" font-size="16">image unavailable</text>`,q=nI(yK(E,N).slice(0,34)),ue=nI(E.chain||"unknown chain");return`${U}<text x="${w+16}" y="${b+350}" fill="#f3f5f7" font-size="17" font-weight="600">${q}</text><text x="${w+16}" y="${b+376}" fill="#8d98a8" font-size="13">${ue}${Q?" \xB7 placeholder":""}</text>`}).join(""),C=`<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 ${i} \xB7 ${r.length} assets \xB7 generated ${nI(new Date().toISOString())}</text>${m}</svg>`;return{provider:"nft-portfolio",operation:"gallery",mimeType:"image/svg+xml",dataBase64:Buffer.from(C).toString("base64"),page:o,pageSize:n,totalPages:i,totalItems:r.length,renderedItems:a.filter(E=>E.image).length,placeholders:a.filter(E=>!E.image).map(E=>({assetKey:E.item.assetKey||null,name:E.item.name||null,sourceUrl:E.item.imageUrl||null,error:E.error})),rasterOnly:!0,externalScripts:!1}}var QK=[/\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],wK=/(https?:\/\/|www\.|[a-z0-9-]+\.(?:com|net|io|xyz|org|app|finance|gift|claims?|site|link|live|vip|top|cc))/i,bK=/(\$\s?\d|\d[\d,.]*\s*(?:usd|usdc|usdt|eth|weth|btc|sol)\b)/i;function kK(e={}){let t=[],r=String(e.name||""),n=String(e.description||""),o=`${r} ${n}`;wK.test(r)&&t.push("url-in-name");let i=QK.filter(c=>c.test(o)).length;i>0&&t.push(`lure-language:${i}`),bK.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 iM(e={}){let t=kK(e);return{...e,spam:e.spam===!0||t.spam,riskLevel:t.risk,riskReasons:t.reasons.length?t.reasons:void 0}}he();var SK=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"}]),xK=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 Uo(e={},t){return{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs,env:e.env,allowDiskCredentials:e.allowDiskCredentials,allowAmbientCredentials:e.allowAmbientCredentials,...e[t]||{}}}async function SA(e,t){let r=await qe(t);return r.ok?{ok:!0,data:r.data}:{ok:!1,error:`${e}: ${r.error}`.slice(0,300)}}function vK(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 NK(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 RK(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 AM(e={}){return[e.chain||"unknown",e.contract||"native",e.tokenId||"unknown"].join(":").toLowerCase()}function DK(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 FK(e,t){let r=AM(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 MK(e){let t=new Map;for(let r of e){let n=AM(r);t.has(n)||t.set(n,r)}return[...t.values()]}function TK(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 cM(){return{ok:!0,provider:"nft-portfolio",readOnly:!0,marketplaces:["opensea","magiceden-sol","satflow"],listingExecution:"prepare-only"}}async function ys(e={},t={}){let r=new Date().toISOString(),n=To(e,t.env||process.env),o=Array.isArray(e.chains)&&e.chains.length?new Set(e.chains.map(I=>String(I).toLowerCase())):null,i=SK.filter(I=>!o||o.has(I.chain)),s=[],a=[],A=Uo(t,"opensea"),c=n.evm?i.filter(I=>I.family!=="solana"):[],l=await Yi(c,4,async I=>({row:I,result:await SA(`opensea-${I.chain}`,()=>lA({chain:I.chain,address:n.evm,pageSize:e.pageSize,maxPages:e.maxPages},A),t.timeoutMs??35e3)}));for(let{row:I,result:Q}of l)if(Q.ok){let N=Q.data.nfts.map(S=>({...S,family:I.family,chainId:I.chainId,listingAdapter:"opensea",source:"opensea-account-inventory"}));a.push(...N),s.push({family:I.family,chain:I.chain,chainId:I.chainId,status:Q.data.complete?"ok":"partial",count:N.length,complete:Q.data.complete,next:Q.data.next,source:"opensea"})}else s.push({family:I.family,chain:I.chain,chainId:I.chainId,status:"unavailable",error:Q.error,source:"opensea"});if(!n.evm)for(let I of i.filter(Q=>Q.family!=="solana"))s.push({family:I.family,chain:I.chain,chainId:I.chainId,status:"not-configured",reason:"EVM address missing"});if(n.solana&&(!o||o.has("solana"))){let I=await SA("opensea-solana",()=>lA({chain:"solana",address:n.solana,pageSize:e.pageSize,maxPages:e.maxPages},A),t.timeoutMs??35e3);if(I.ok){let Q=I.data.nfts.map(N=>({...N,family:"solana",chainId:null,listingAdapter:null,source:"opensea-account-inventory"}));a.push(...Q),s.push({family:"solana",chain:"solana",status:I.data.complete?"ok":"partial",count:Q.length,complete:I.data.complete,next:I.data.next,source:"opensea"})}else s.push({family:"solana",chain:"solana",status:"unavailable",error:I.error,source:"opensea"})}else(!o||o.has("solana"))&&s.push({family:"solana",chain:"solana",status:"not-configured",reason:"Solana address missing"});if(n.bitcoin&&(!o||o.has("bitcoin"))){let I=await SA("satflow-wallet-contents",()=>Eu({address:n.bitcoin,type:"ordinals",limit:e.bitcoinLimit??100,offset:0},Uo(t,"satflow")),t.timeoutMs??35e3);if(I.ok){let Q=vK(I.data.contents).map(S=>NK(S,n.bitcoin));a.push(...Q);let N=Q.length<Number(e.bitcoinLimit??100);s.push({family:"bitcoin",chain:"bitcoin",status:N?"ok":"partial",count:Q.length,complete:N,source:"satflow"})}else{let Q=await SA("bitcoin-meta-inscriptions",()=>Xi({address:n.bitcoin},Uo(t,"bitcoinMeta")),t.timeoutMs??35e3),N=Q.ok&&Q.data?.ok&&Array.isArray(Q.data.inscriptions)?Q.data.inscriptions:[];a.push(...N.map(S=>RK(S,n.bitcoin))),s.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":I.error})}}else(!o||o.has("bitcoin"))&&s.push({family:"bitcoin",chain:"bitcoin",status:"not-configured",reason:"Bitcoin address missing"});let u=[];if(e.includePnl!==!1)for(let I of[...new Set([n.evm,n.solana].filter(Boolean))]){let Q=await SA(`opensea-pnl-${I}`,()=>_u({address:I},A),t.timeoutMs??35e3);u.push(Q.ok?{status:"ok",...Q.data}:{status:"unavailable",address:I,source:"opensea-indexed-account-pnl",error:Q.error})}let d=DK(e.costBasis),f=MK(a).map(I=>FK(I,d)).map(I=>iM(I)),p=f.filter(I=>!I.spam),h=f.filter(I=>I.spam),g=p.filter(I=>I.estimatedValueUsd!=null&&Number.isFinite(Number(I.estimatedValueUsd))),m=Math.round(g.reduce((I,Q)=>I+Number(Q.estimatedValueUsd),0)*100)/100,C=p.length-g.length,E=s.filter(I=>I.status!=="ok"||I.complete===!1);return{provider:"nft-portfolio",operation:"inventory",readOnly:!0,generatedAt:r,addresses:n,coverage:s,unsupported:xK,inventory:{count:f.length,visibleCount:p.length,flaggedCount:h.length,items:f,visibleItems:p,flaggedItems:h},valuation:{estimatedCurrentValueUsd:m,valuedItems:g.length,unvaluedItems:C,complete:C===0&&E.length===0,methodology:"Sum of provider estimated_value_usd for non-flagged items. It is not an executable bid."},pnl:TK(p,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 sM(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 UK(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 lM(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 fA(e,Uo(t,"opensea"));if(r==="magiceden"||r==="magiceden-sol"){let n=sM(e.expiry??e.endTime,"Solana NFT listing expiry");return Ou({...e,expiry:n},Uo(t,"magiceden"))}if(r==="satflow"){let n=sM(e.expiry??e.endTime??e.expiresAt,"Bitcoin NFT listing expiry");return Iu({inscription_id:e.inscriptionId||e.tokenId,runes_output:e.runesOutput,ord_address:e.ordAddress||e.seller,receive_address:e.receiveAddress,price:UK(e.priceSats??e.price),tap_key:e.tapKey,collection_slug:e.collectionSlug||e.collection,expires_at:n},Uo(t,"satflow"))}throw new Error(`unsupported NFT marketplace: ${r||"<missing>"}`)}function oI(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 iI(e){if(e==null||e==="")return null;let t=Number(e);return Number.isFinite(t)&&t>0?t:null}function pd(e){return String(e??"").trim().toLowerCase()}function LK(e={},t,r){let n=Array.isArray(e.traits)?e.traits:[],o=pd(t),i=pd(r);return!o||!i?!1:n.some(s=>pd(s.trait_type??s.traitType??s.type)===o&&pd(s.value??s.trait_value??s.traitValue)===i)}function _K(e={},t){if(!t)return!0;let r=String(e.contract||e.tokenContract||e.assetContract||"").toLowerCase();return!r||r===String(t).toLowerCase()}function aM(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 sI(e){return Math.round(Number(e)*1e6)/1e6}function Pn(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 uM(e={},t={}){let r=String(e.marketplace||"").trim().toLowerCase();if(r!=="opensea")return Pn(e,`unsupported NFT marketplace: ${r||"<missing>"}`);let o=["traitType","traitValue","maxPriceEth","minDiscountBps","minTraitSales","minTraitVolumeEth","traitFloorEth"].filter(S=>e[S]==null||e[S]==="");if(o.length)return Pn(e,`trait-risk-params-required: ${o.join(",")}`);let i=Number.isFinite(Number(e.nowMs))?Number(e.nowMs):Date.now(),s=oI(e.maxPriceEth,"maxPriceEth"),a=Number(e.minDiscountBps),A=Number(e.minTraitSales),c=oI(e.minTraitVolumeEth,"minTraitVolumeEth"),l=oI(e.traitFloorEth,"traitFloorEth"),u=iI(e.collectionFloorEth),d=iI(e.maxListingAgeMs),f=iI(e.maxSaleAgeMs??e.salesWindowMs);if(!Number.isFinite(a)||a<0)return Pn(e,"invalid-min-discount-bps");if(!Number.isFinite(A)||A<1)return Pn(e,"invalid-min-trait-sales");if(l<=0)return Pn(e,"trait-floor-unavailable");let p=S=>LK(S,e.traitType,e.traitValue)&&_K(S,e.contract),h=(Array.isArray(e.sales)?e.sales:[]).filter(p).filter(S=>{if(!f)return!0;let y=aM(S,["timestamp","soldAt","createdAt"]);return y!=null&&i-y<=f}),g=sI(h.reduce((S,y)=>S+Number(y.priceEth??y.price??0),0)),m={count:h.length,volumeEth:g,minSales:A,minVolumeEth:c};if(h.length<A||g<c)return Pn(e,"trait-liquidity-insufficient",{traitSales:m});let C=(Array.isArray(e.listings)?e.listings:[]).filter(p).filter(S=>{let y=Number(S.priceEth??S.price);if(!Number.isFinite(y)||y<=0||y>s)return!1;if(!d)return!0;let w=aM(S,["listedAt","createdAt","timestamp"]);return w!=null&&i-w<=d}).map(S=>{let y=Number(S.priceEth??S.price),w=Math.round((l-y)/l*1e4);return{...S,priceEth:y,discountBps:w}}).filter(S=>S.discountBps>=a).sort((S,y)=>S.priceEth-y.priceEth||y.discountBps-S.discountBps),E={traitSales:m,collectionFloorEth:u,traitFloorEth:l,listingDepth:{count:C.length,minFreshListings:e.minTraitListings==null?null:Number(e.minTraitListings)},methodology:"Trait buy intent requires caller-supplied fresh listings, real trait sales, volume, max price, and min discount gates. Rarity metadata alone is ignored."},I=e.minTraitListings==null?1:Number(e.minTraitListings);if(!Number.isFinite(I)||I<1)return Pn(e,"invalid-min-trait-listings",E);if(C.length<I)return Pn(e,"trait-listing-depth-insufficient",E);let Q=C[0],N=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:sI(Q.priceEth),maxPriceEth:s,traitType:e.traitType,traitValue:e.traitValue,evidence:E,localOnly:!0,requiresLocalVault:!0},{provider:"nft-portfolio",kind:"nft-trait-buy-intent",env:t.env||process.env});return{provider:"nft-portfolio",operation:"traitSnipe",marketplace:r,collectionSlug:e.collectionSlug||e.collection||null,contract:e.contract||null,decision:"BUY",reason:"trait-mispricing-evidence-met",executionReady:!1,signingReady:!1,broadcastReady:!1,requiresLocalVault:!0,best:{tokenId:Q.tokenId==null?null:String(Q.tokenId),listingId:Q.listingId||null,orderHash:Q.orderHash||null,priceEth:sI(Q.priceEth),discountBps:Q.discountBps},evidence:E,prepareIntent:N}}async function dM(e={},t={}){let r=await ys({...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 fM(e={},t={}){let r=Array.isArray(e.items)?e.items:null,n=null;return r||(n=await ys({...e,includePnl:!1},t),r=n.inventory.visibleItems),{...await oM({...e,items:r},Uo(t,"gallery")),inventorySummary:n?{visibleCount:n.inventory.visibleCount,flaggedCount:n.inventory.flaggedCount,coverage:n.coverage}:null}}var pM=10*1024*1024,mM=1e3;function On(e){if(e==null||e==="")return null;let t=Number(e);return Number.isFinite(t)?t:null}function ws(e){return Number.isFinite(e)?Number(e.toFixed(2)):null}function hM(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 EM(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 JK(e={}){return["evm","solana","bitcoin","hyperliquid"].map(t=>`${t}:${String(e[t]||"").trim().toLowerCase()}`).join("|")}function IM(e={}){return`portfolio_${YK("sha256").update(JK(e)).digest("hex").slice(0,20)}`}function CM(e={}){if(e.historyFile)return Qs.resolve(String(e.historyFile));let t=e.env||process.env;if(t.ORACLE_PORTFOLIO_HISTORY_FILE)return Qs.resolve(String(t.ORACLE_PORTFOLIO_HISTORY_FILE));let r=String(t.HERMES_HOME||"").trim()||Qs.join($K.homedir(),".hermes");return Qs.join(Qs.resolve(r),"state","oracle","portfolio-history.jsonl")}function WK(e){let t=On(e?.valuation?.knownUsd);return t==null?null:Number(e?.valuation?.pricedItems||0)>0||e?.valuation?.complete===!0?ws(t):null}function zK(e){if(!e||e.status==="unavailable"||e.status==="not-requested")return null;let t=On(e?.valuation?.estimatedCurrentValueUsd);return t==null?null:Number(e?.valuation?.valuedItems||0)>0||e?.valuation?.complete===!0?ws(t):null}function jK(e){let t=[];for(let r of e?.chains||[]){if(r.family==="hyperliquid"){let o=(r.spot?.balances||[]).reduce((a,A)=>{let c=On(A.usdValue);return c==null?a:a+c},0),i=On(r.perps?.accountValueUsd),s=ws(o+(i??0));(s!==0||i!=null||(r.spot?.balances||[]).some(a=>On(a.usdValue)!=null))&&t.push({family:"hyperliquid",chainId:null,name:r.name||"Hyperliquid",knownUsd:s});continue}let n=On(r.native?.usdValue);n!=null&&t.push({family:r.family||"evm",chainId:r.chainId??null,name:r.name||r.native?.symbol||"Unknown",knownUsd:ws(n)})}return t}function KK(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 XK(e,t){let r=CM(t),n=`${JSON.stringify(e)}
|
|
188
|
+
`;if(Buffer.byteLength(n)>32*1024)throw new Error("portfolio history snapshot exceeds 32 KiB");await qK(Qs.dirname(r),{recursive:!0,mode:448});let o=hd.O_APPEND|hd.O_CREAT|hd.O_WRONLY|(hd.O_NOFOLLOW||0),i=await HK(r,o,384);try{await i.writeFile(n,"utf8")}finally{await i.close()}return await OK(r,384),r}async function BM(e={},t={}){let r=e.includeNfts!==!1,n=t.portfolioBalanceImpl||fd,o=t.nftInventoryImpl||ys,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=WK(a),l=zK(A),u=[c,l].filter(Q=>Q!=null),d=u.length?ws(u.reduce((Q,N)=>Q+N,0)):null,f=!!(a?.valuation?.complete&&(!r||A?.valuation?.complete===!0)),p=typeof t.now=="function"?t.now():new Date,h=new Date(p).toISOString(),g=a?.addresses||To(e,t.env||process.env),m=IM(g),C=[...a?.warnings||[]];r&&A?.status==="unavailable"&&C.push(`NFT inventory unavailable: ${A.error}`),r&&A?.valuation&&A.valuation.complete!==!0&&C.push("NFT estimated value is incomplete and is not an executable bid.");let E={schemaVersion:1,id:`snapshot_${VK()}`,portfolioId:m,recordedAt:h,sourceQueriedAt:{balances:a?.queriedAt||null,nfts:A?.generatedAt||null},configuredFamilies:Object.fromEntries(["evm","solana","bitcoin","hyperliquid"].map(Q=>[Q,!!g?.[Q]])),valuation:{knownUsd:d,liquidKnownUsd:c,nftEstimatedValueUsd:l,complete:f,label:f?"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:jK(a),nfts:{knownUsd:l,visibleItems:Number(A?.inventory?.visibleCount||0),flaggedItems:Number(A?.inventory?.flaggedCount||0)}},coverage:KK(a,A,r),warnings:[...new Set(C)].slice(0,50)};return{provider:"portfolio",operation:"snapshot",readOnly:!0,localObservationRecorded:!0,historyFile:await XK(E,t),snapshot:E,balance:a,nfts:A}}async function ZK(e){let t=CM(e);try{let r=await GK(t);if(r.byteLength>pM)throw new Error(`portfolio history exceeds ${pM} 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 e7(e,t){if(e.allPortfolios===!0)return null;if(e.portfolioId)return String(e.portfolioId);let r=To(e,t.env||process.env);return Object.values(r).some(Boolean)?IM(r):null}async function aI(e={},t={}){let r=EM(e.limit,100,1,mM,"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=hM(e.since,"portfolio history since"),i=hM(e.until,"portfolio history until"),s=e7(e,t),a=await ZK(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=>On(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 gM(e){return`$${Number(e).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}`}function gd(e){return String(e).replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function t7(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 r7(e,t){let A=e.map(E=>E.value),c=Math.min(...A),l=Math.max(...A);if(c===l){let E=Math.max(1,Math.abs(c)*.05);c-=E,l+=E}else{let E=(l-c)*.1;c=Math.max(0,c-E),l+=E}let u=E=>e.length===1?1240/2:100+1040*E/(e.length-1),d=E=>570-(E-c)/(l-c)*470,f=e.map((E,I)=>`${I?"L":"M"}${u(I).toFixed(2)},${d(E.value).toFixed(2)}`).join(" "),p=Array.from({length:5},(E,I)=>{let Q=I/4,N=100+Q*470,S=l-Q*(l-c);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">${gM(S)}</text>`}).join(""),h=e.map((E,I)=>`<circle cx="${u(I)}" cy="${d(E.value)}" r="5" fill="#b8f0ff"><title>${gd(E.recordedAt)}: ${gM(E.value)}</title></circle>`).join(""),g=gd(e[0].recordedAt.slice(0,10)),m=gd(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 ${gd(t||"configured portfolio")}</text>${p}<line x1="100" y1="570" x2="1140" y2="570" stroke="#526171" stroke-width="1"/><path d="${f}" 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">${m}</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 yM(e={},t={}){if(e.allPortfolios===!0)throw new Error("portfolio value graph requires one portfolioId or configured public-address portfolio");let r=EM(e.maxPoints,200,2,500,"portfolio graph maxPoints"),n=await aI({...e,order:"asc",limit:e.limit??mM},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:On(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=t7(o,r),s=i[0].value,a=i.at(-1).value,A=ws(a-s),c=s===0?null:Number(((a-s)/s*100).toFixed(2)),l=r7(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 o7=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"}}),i7=Object.freeze([{label:"eip1967",slot:"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"},{label:"zeppelinos",slot:"0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3"},{label:"eip1822",slot:"0xc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7"}]),s7=`0x${"0".repeat(64)}`;function a7(e){return!e||e==="0x"||e===s7}async function Lo(e={},t={}){let r=t.rpcCall||z,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(p){return{address:n,chainId:o,status:"unavailable",error:p?.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[p,h]of Object.entries(o7))A.includes(p)&&a.push({selector:`0x${p}`,...h});let c=!1,l=null,u=null;for(let{label:p,slot:h}of i7)try{let g=await r(o,"eth_getStorageAt",[n,h,"latest"],t);if(!a7(g)){c=!0,l=p,u=`0x${String(g).slice(-40)}`;break}}catch{s.push(`proxy slot (${p}) 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 f=a.filter(p=>p.weight==="high").length>0?"high":a.length>0?"elevated":"unknown-risk";return f==="unknown-risk"&&s.push("no owner-power selectors found; this is weak evidence, not a safety guarantee"),{address:n,chainId:o,status:"ok",risk:f,findings:a,isProxy:c,proxyStandard:l,implementation:u,codeSize:Math.floor(A.length/2),notes:s}}async function QM(e={}){let t=Date.now();try{let r=await Lo({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"}}}ot();var c7=/^0x[0-9a-fA-F]{40}$/,wM=4663;function md(e,t){let r=String(e||"").trim();if(!c7.test(r))throw new Error(`evm-token-sniper: ${t} must be a 0x EVM address`);return r}function AI(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 xA(e,t){return e==null||e===""?null:AI(e,t)}function l7({chainId:e,tokenAddress:t,tokenIn:r,amountIn:n,recipient:o,quote:i,topPool:s,unsignedTx:a,args:A,opts:c}){let l=a?.tx;if(!l||typeof l!="object")throw new Error("local-signer envelope requires unsigned tx object");let u=md(l.to,"prepared destination"),d=String(l.data||"").toLowerCase();if(!/^0x[0-9a-f]+$/.test(d))throw new Error("local-signer envelope requires hex calldata");let f=AI(l.value??n,"prepared native value");if(BigInt(f)!==BigInt(n))throw new Error("local-signer envelope requires native value equal amountIn");let p=xA(l.gasLimit??A.gasLimit,"gasLimit"),h=xA(l.maxFeePerGas??A.maxFeePerGas,"maxFeePerGas");if(!p||!h)throw new Error("local-signer envelope requires explicit gasLimit and maxFeePerGas caps");let g=Number(c.nowMs??Date.now()),m=Math.min(6e4,Math.max(1e3,Number(A.ttlMs??A.expiresInMs??3e4)||3e4)),C=im({chainId:e,venue:"uniswap-v3",quoteAmountOut:i?.amountOut,liquidityUsd:s?.liquidityUsd,requestedCapBps:A.slippageBps??50,quotedAtMs:g,ttlMs:m,secret:c.routeAttestationSecret}),E=ve(C,{chainId:e,venue:"uniswap-v3",data:d,secret:c.routeAttestationSecret}),I={chainId:e,from:o,to:u,data:d,value:f,gasLimit:p,maxFeePerGas:h,slippageBps:E.selectedBps,expiresAtMs:g+m},Q=xA(l.maxPriorityFeePerGas??A.maxPriorityFeePerGas,"maxPriorityFeePerGas");return Q&&(I.maxPriorityFeePerGas=Q),A.nonce!==void 0&&(I.nonce=Number(A.nonce)),(A.txType!==void 0||Q)&&(I.type=Number(A.txType??2)),A.l1FeeWei!==void 0&&(I.l1FeeWei=xA(A.l1FeeWei,"l1FeeWei")??"0"),A.operatorFeeWei!==void 0&&(I.operatorFeeWei=xA(A.operatorFeeWei,"operatorFeeWei")??"0"),{version:1,surface:"evm-swap",action:"swap",provider:"uniswap-v3",owner:o,destination:u,tradeId:A.tradeId||`evm-token-sniper-${e}-${t.toLowerCase()}`,slippageBps:E.selectedBps,expiresAtMs:g+m,fee:{oracleFeeBps:5},autoSlippage:E,artifact:{chainId:e,owner:o,transactions:[I]},meta:{source:"evm-token-sniper",tokenIn:r,tokenOut:t}}}function u7(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}za();let r=lm(e);if(!r)throw new Error(`evm-token-sniper: unsupported EVM chainId ${e}`);return r}function d7({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!==j.PASS&&A.push(`scanner risk verdict is ${n?.verdict||"UNKNOWN"}`),a.supports?.("sellSimulation")?o?.verdict!==j.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 bM(e={},t={}){let r=Number(e.chainId??wM);if(!Number.isInteger(r)||r<=0)throw new Error("evm-token-sniper: chainId must be a positive integer");let n=md(e.tokenAddress||e.address||e.token,"tokenAddress"),o=e.tokenIn?md(e.tokenIn,"tokenIn"):null,i=e.recipient?md(e.recipient,"recipient"):null,s=e.amountIn==null?null:AI(e.amountIn,"amountIn"),a=u7(r,t.scanner),A=t.scanContractRisk||Lo,[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),f=null;a.supports?.("sellSimulation")&&s?f=await a.sellSimulation({token:n,amountIn:s,base:o||void 0}):a.supports?.("sellSimulation")&&(f=await a.sellSimulation({token:n,amountIn:"10000000000000000"}));let p=null;a.supports?.("quote")&&o&&s&&(p=await a.quote({tokenIn:o,tokenOut:n,amountIn:s}));let h={...e,tokenIn:o,amountIn:s,recipient:i},g=d7({token:c,pools:l,structuralRisk:u,scannerRisk:d,sellability:f,quote:p,args:h,scanner:a}),m=null,C=null,E=null;if(e.prepare===!0&&g.length===0){m=await a.prepareUnsignedTx({tokenIn:o,tokenOut:n,amountIn:s,recipient:i,slippageBps:e.slippageBps??50,fee:p?.fee});try{C=l7({chainId:r,tokenAddress:n,tokenIn:o,amountIn:s,recipient:i,quote:p,topPool:l?.pools?.[0]||null,unsignedTx:m,args:e,opts:t})}catch(I){E=String(I?.message||I).slice(0,200)}}return{provider:"evm-token-sniper",execution:"armed-local",armed:!!C,signing:"local-signer",broadcasting:"local-signer",chainId:r,chain:{key:a.key,name:a.name,nativeCurrency:a.nativeCurrency},token:c,pools:l,topPool:l?.pools?.[0]||null,structuralRisk:u,scannerRisk:d,sellability:f,quote:p,blockedReasons:g,prepared:!!m,unsignedTx:m,localSignerEnvelope:C,localSignerBlockedReason:E,signed:C?"pending-local-signer":!1,broadcast:C?"pending-local-signer":!1}}async function kM(){za();let e=um();return{ok:e.length>0,provider:"evm-token-sniper",defaultChainId:wM,chainIds:e.map(t=>t.chainId),execution:"armed-local",armed:!1,signing:"local-signer",broadcasting:"local-signer",signed:!1,broadcast:!1,note:"capability only; actual arming requires owner-local signer policy and a compatible prepared artifact"}}De();De();var p7=5,cI=[50,75,90],SM=Object.freeze({normal:{percentile:0,baseFeeMultiplier:2n,label:"normal"},fast:{percentile:1,baseFeeMultiplier:3n,label:"fast"},war:{percentile:2,baseFeeMultiplier:4n,label:"war"}});function _o(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 h7(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 Ed(e={},t={}){let r=t.rpcCall||z,n=Number(e.chainId);if(!Number.isInteger(n))return{status:"error",error:"chainId is required",viable:!1};let o=SM[e.urgency||"fast"];if(!o)return{status:"error",viable:!1,error:`urgency must be one of: ${Object.keys(SM).join(", ")}`};let i,s,a,A;try{i=_o(e.maxFeePerGasWei,"maxFeePerGasWei"),s=_o(e.maxPriorityFeePerGasWei,"maxPriorityFeePerGasWei"),a=_o(e.gasLimit,"gasLimit"),A=_o(e.maxTotalGasWei,"maxTotalGasWei")}catch(S){return{status:"error",viable:!1,error:S.message}}let c,l;try{[c,l]=await Promise.all([r(n,"eth_feeHistory",[`0x${p7.toString(16)}`,"pending",cI],t),r(n,"eth_getBlockByNumber",["pending",!1],t)])}catch(S){return{status:"unavailable",viable:!1,error:S?.message||"fee history unavailable",notes:["could not read live fee data; refusing to guess a competitive bid"]}}let u=_o(l?.baseFeePerGas,"baseFeePerGas")??_o(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 f=(Array.isArray(c?.reward)?c.reward:[]).map(S=>{try{return _o(S?.[o.percentile],"reward")}catch{return null}}).filter(S=>S!=null&&S>0n),p=h7(f),h=[];p==null&&h.push("no non-zero tips observed in recent blocks; using a 1 gwei floor");let g=p??1000000000n,m=u*o.baseFeeMultiplier+g,C=[];s!=null&&g>s&&(C.push({field:"maxPriorityFeePerGas",wanted:g.toString(),capped:s.toString()}),g=s,m=u*o.baseFeeMultiplier+g),i!=null&&m>i&&(C.push({field:"maxFeePerGas",wanted:m.toString(),capped:i.toString()}),m=i,g>m&&(g=m));let E=a!=null?a*m:null;A!=null&&E!=null&&E>A&&C.push({field:"totalGas",wanted:E.toString(),capped:A.toString()});let I=p==null||g>=p,Q=A==null||E==null||E<=A,N=I&&Q;return I||h.push(`tip cap ${g} is below the observed ${cI[o.percentile]}th-percentile tip ${p}; this bid is unlikely to land`),Q||h.push(`worst-case gas ${E} exceeds the ${A} total cap`),h.push("maxFeePerGas is a ceiling \u2014 unused headroom above basefee+tip is refunded, not spent"),{status:"ok",viable:N,chainId:n,urgency:o.label,baseFeePerGas:u.toString(),observedTip:p==null?null:p.toString(),percentile:cI[o.percentile],maxFeePerGas:m.toString(),maxPriorityFeePerGas:g.toString(),worstCaseGasWei:E==null?null:E.toString(),clamps:C,notes:h}}De();var m7="08c379a0",E7="4e487b71",I7=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 C7(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===m7)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===E7){let n=parseInt(t.slice(8,72),16);return{kind:"panic",code:n,reason:I7[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 B7(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 y7(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 Q7(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 vA(e={},t={}){let r=t.rpcCall||z,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=Q7(o),s=[],a=null,A=!1,c=null;try{a=await r(n,"eth_call",[i,"pending"],t)}catch(p){let h=B7(p);if(!y7(p,!!h))return{status:"unavailable",willRevert:null,chainId:n,error:p?.message||"simulation unavailable",notes:["could not reach the node; this is NOT evidence the transaction would fail"]};A=!0,c=C7(h),h||(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 p=await r(n,"eth_estimateGas",[i,"pending"],t);l=BigInt(p);let h=BigInt(Math.max(0,Math.floor(e.gasBufferPercent??20)));u=l+l*h/100n,s.push(`gasLimit includes a ${h}% buffer over the ${l} estimate`)}catch(p){s.push(`gas estimation failed: ${p?.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)}`,f=a===d;return f&&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:f,chainId:n,returnData:a,gasEstimate:l==null?null:l.toString(),gasLimit:u==null?null:u.toString(),summary:f?"executes but returns FALSE \u2014 the contract is rejecting this operation":l?`would succeed, ~${l} gas`:"would succeed",notes:s}}async function xM(e={}){let t=Date.now();try{let r=await vA({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 b7=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 k7(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 S7(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 vM(e,{minter:t,quantity:r}){let n=`0x${e.selector}`;for(let o of e.args)if(o==="to")n+=S7(t);else if(o==="quantity")n+=k7(r);else throw new Error(`unsupported mint argument: ${o}`);return n}function x7({address:e,chainId:t,minter:r,quantity:n,tx:o,nowMs:i,ttlMs:s=3e4}){if(!o?.gasLimit||!o?.maxFeePerGas)throw new Error("local-signer envelope requires gasLimit and maxFeePerGas");let a=Number(i??Date.now()),A=String(o.value??"0");return{version:1,surface:"evm-nft",action:"mint",provider:"nft-mint",owner:r,destination:e,contract:e,quantity:String(n),totalWei:A,slippageBps:0,expiresAtMs:a+Math.min(Math.max(Number(s)||3e4,1e3),6e4),fee:{oracleFeeBps:0},artifact:{chainId:t,owner:r,contract:e,quantity:String(n),totalWei:A,transactions:[{chainId:t,from:r,to:e,data:o.data,value:A,gasLimit:String(o.gasLimit),maxFeePerGas:String(o.maxFeePerGas),...o.maxPriorityFeePerGas!=null?{maxPriorityFeePerGas:String(o.maxPriorityFeePerGas),type:2}:{}}]}}}async function Id(e={},t={}){let r=t.rpcCall||z,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=b7.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 NM(e={}){let t=Date.now();try{let r=await Id({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 lI(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 Id({address:r,chainId:n},t);if(s.status!=="ok")return{status:s.status,error:s.error};if(!s.found.length)return{status:"unsupported",error:"no known public mint function found in this contract's bytecode",notes:s.notes};let a=e.signature?s.found.find(E=>E.signature===e.signature):s.found[0];if(!a)return{status:"error",error:`requested signature ${e.signature} not present in this contract`,available:s.found.map(E=>E.signature)};let A=s.found.length>1&&!e.signature,c=await Lo({address:r,chainId:n},t),l=null;if(e.simulate!==!1&&(l=await vA({chainId:n,tx:{from:o,to:r,data:vM(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 Ed({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 f;try{f=vM(a,{minter:o,quantity:i})}catch(E){return{status:"error",error:E.message}}let p={chainId:n,from:o,to:r,data:f,value:e.valueWei==null?"0":String(e.valueWei),gasLimit:u==null?null:String(u),maxFeePerGas:d.maxFeePerGas,maxPriorityFeePerGas:d.maxPriorityFeePerGas},h={ok:!0,skipped:!0,reason:"no gasLimit or cap supplied"};if(u!=null&&(e.maxTotalGasWei!=null||e.grant!=null)&&(h=Uu({chainId:n,tx:{gasLimit:u,maxFeePerGas:d.maxFeePerGas,maxPriorityFeePerGas:d.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:d,capCheck:h};let g=[];A&&g.push(`contract exposes ${s.found.length} mint entrypoints (${s.found.map(E=>E.signature).join(", ")}); defaulted to ${a.signature} \u2014 pass signature to choose`),c.risk==="high"&&g.push(`contract risk HIGH: ${c.findings.map(E=>E.name).join(", ")}`),d.viable||g.push(d.notes[0]),h.skipped&&g.push("gas-war caps NOT enforced: supply gasLimit plus maxTotalGasWei or a grant");let m=null,C=null;try{m=x7({address:r,chainId:n,minter:o,quantity:i,tx:p,nowMs:t.nowMs,ttlMs:e.ttlMs??e.expiresInMs})}catch(E){C=String(E?.message||E).slice(0,200)}return{status:"ok",execution:m?"armed-local":"prepare-only",signed:m?"pending-local-signer":!1,broadcast:m?"pending-local-signer":!1,tx:p,localSignerEnvelope:m,localSignerBlockedReason:C,mintFunction:a.signature,alternatives:s.found.map(E=>E.signature),quantity:i,gas:d,simulation:l,contractRisk:{risk:c.risk,findings:c.findings,isProxy:c.isProxy},capCheck:h,warnings:g}}De();function N7(e={},{nowMs:t=Date.now()}={}){let r=[];if(!e||typeof e!="object")return{ok:!1,problems:["grant is required for execute mode"]};let n=String(e.contract||"").toLowerCase();if(/^0x[a-f0-9]{40}$/.test(n)||r.push("grant.contract must be an exact address"),Number.isInteger(Number(e.chainId))||r.push("grant.chainId is required"),e.maxTotalGasWei==null&&r.push("grant.maxTotalGasWei is required"),e.maxValueWei==null&&r.push("grant.maxValueWei is required (mint price ceiling)"),e.expiresAt!=null){let o=Number(e.expiresAt);Number.isFinite(o)?o<=t&&r.push("grant has expired"):r.push("grant.expiresAt must be a timestamp when supplied")}return{ok:r.length===0,problems:r,contract:n,chainId:Number(e.chainId)}}function RM(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(!Zi(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=N7(e.grant,{nowMs:t.nowMs});A.ok?(A.contract!==o||A.chainId!==i)&&(a="alert_only",s.push("DOWNGRADED to alert_only: grant does not match this contract/chain \u2014 a grant authorizes one exact target")):(a="alert_only",s.push(`DOWNGRADED to alert_only: ${A.problems.join("; ")}`))}return a==="alert_only"?s.push("alert_only: Oracle will notify and prepare an artifact; you sign it"):s.push("ARMED until mint opens: this trigger will submit one prepared, capped mint automatically when the mint opens"),{status:"ok",actionMode:a,requestedMode:n,downgraded:a!==n,contract:o,chainId:i,quantity:e.quantity==null?1:Number(e.quantity),urgency:e.urgency||"war",grant:a==="execute"?e.grant:null,armedUntil:a==="execute"?"mint-opens":null,notes:s}}async function DM(e={},t={}){let r=t.rpcCall||z,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 D7=1440*60*1e3;function F7(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>D7&&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 FM="0x797a2e030B7e49107C8F07bF0300Ea9caE88cA57",M7=4663,T7="0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",MM="a22cb465",U7="a0712d68";function uI(e){return String(e||"").trim().toLowerCase()}function bs(e){return String(e||"").toLowerCase().replace(/^0x/,"")}function L7(e){let t=bs(e);if(!/^[a-f0-9]{40}$/.test(t))throw new Error("revoke operator must be an address");return`0x${MM}${t.padStart(64,"0")}${"0".repeat(64)}`}function _7(e){return bs(e).includes(bs(FM))}function P7(e={}){return(Array.isArray(e.calls)?e.calls:[]).some(r=>bs(r?.data).startsWith(MM))}function O7(e={},t){let r=bs(t).padStart(64,"0");return(Array.isArray(e.logs)?e.logs:[]).some(o=>{let i=o?.topics||[];return uI(i[0])!==T7?!1:bs(i[2])===r})}function q7(e=1){return`0x${U7}${BigInt(e).toString(16).padStart(64,"0")}`}function TM(e={},t={}){let r=uI(e.contract),n=uI(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!==M7&&s.push("only Robinhood chain 4663"),i!=="0"&&s.push("value must be 0 \u2014 paid mints are skipped"),_7(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"),P7(a)&&s.push("simulation sets approval / setApprovalForAll"),O7(a,n)||s.push("simulation has no ERC721 Transfer to minter");let A=s.length===0,c={chainId:o,from:n,to:r,data:q7(e.quantity??1),value:"0"},l={chainId:o,from:n,to:r,data:L7(r),value:"0"},u=!1;if(A&&e.actionMode==="execute")if(!VN(t.env||process.env))s.push("DOWNGRADED: ORACLE_AUTONOMOUS_MINT=1 required to fire");else{let d=F7(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:FM.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"]}}_();ot();he();var G7="https://api.paraswap.io",dI=(e={})=>(e.baseUrl||process.env.PARASWAP_API_URL||G7).replace(/\/$/,"");function ks(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 fI(e={},t={}){let r=Number(e.chainId||1);return B(`${dI(t)}/tokens/${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs})}async function qn(e={},t={}){let r=Number(e.chainId||e.network||1);if(e.amount==null)throw new Error("amount required");let n=new URLSearchParams({srcToken:ks(e.srcToken,"srcToken"),destToken:ks(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 ku({wallet:e.userAddress||e.fromAddress,env:t.env,action:e.feeAction||"swap",holderCheck:t.holderCheck});for(let[a,A]of Object.entries(QN(o)))n.set(a,A);let i=await B(`${dI(t)}/prices?${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4}),s=i?.priceRoute?.destAmount;return s?{...fe(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 UM(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=ks(e.userAddress,"userAddress"),o=await qn(e,t),i=o?.priceRoute,s=String(i?.contractAddress||"").toLowerCase();if(!s)throw new Error("paraswap: price route missing contractAddress");let a={srcToken:ks(e.srcToken,"srcToken"),destToken:ks(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=ks(e.receiver,"receiver"));let A=await B(`${dI(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:ve(o.autoSlippage,{chainId:r,venue:A.to,data:A.data})}},{provider:"paraswap",kind:"paraswap-tx"})}async function LM(e={}){let t=await fI({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 V7}from"node:crypto";import{getAddress as GM,isAddress as pI}from"ethers";var _M="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",$7=Object.freeze(["lifi","paraswap","0x","cow","uniswap-v3"]),J7=Object.freeze(["lifi"]),PM=/^0x[0-9a-fA-F]{64}$/,W7=/^\d+$/;function Ne(e,t="invalid"){throw new Error(`rfq: ${e} ${t}`)}function OM(e,t){let r=Number(e);return(!Number.isSafeInteger(r)||r<=0)&&Ne(t,"must be a positive chainId"),r}function Cd(e,t){let r=String(e??"").trim();return(!W7.test(r)||BigInt(r)<=0n)&&Ne(t,"must be a positive integer string"),r}function z7(e,t){return e==null||e===""?null:Cd(e,t)}function qM(e,t){let r=String(e??"").trim();return r.toLowerCase()===_M.toLowerCase()?_M:(pI(r)||Ne(t,"must be an EVM address or native token sentinel"),GM(r))}function YM(e,t){let r=String(e??"").trim();return pI(r)||Ne(t,"must be an EVM address"),GM(r)}function j7(e,t){return e==null||e===""?null:YM(e,t)}function HM(e,t,r){return e===void 0?[...r]:(Array.isArray(e)||Ne(t,"must be an array"),e.map(n=>String(n).trim()).filter(Boolean))}function K7(e,{nowMs:t,maxDeadlineMs:r},n){let o=Number(e);return Number.isFinite(o)||Ne(n,"must be a finite millisecond timestamp"),o<=t&&Ne(n,"expired"),o>t+r&&Ne(n,"exceeds maxDeadlineMs"),Math.floor(o)}function Ss(e){if(Array.isArray(e))return e.map(Ss);if(e&&typeof e=="object"){let t={};for(let r of Object.keys(e).sort())e[r]!==void 0&&(t[r]=Ss(e[r]));return t}return e}function X7(e){return JSON.stringify(Ss(e))}function Bd(e){return`0x${V7("sha256").update(X7(e)).digest("hex")}`}function VM(e,t){let r={...e};for(let n of t)delete r[n];return r}function $M(e){return Bd(VM(e,["intentHash"]))}function JM(e){return Bd(VM(e,["firmQuoteHash"]))}function yd(e={},t={}){let r=Number(t.nowMs??Date.now()),n=Number(t.maxDeadlineMs??1800*1e3);(!Number.isFinite(r)||!Number.isFinite(n)||n<=0)&&Ne("time","is invalid");let o=OM(e.fromChainId??e.fromChain,"fromChainId"),i=OM(e.toChainId??e.toChain,"toChainId"),a=o===i?$7:J7,A={kind:"rfq-intent",version:1,fromChainId:o,toChainId:i,sellToken:qM(e.sellToken??e.tokenIn??e.fromToken,"sellToken"),buyToken:qM(e.buyToken??e.tokenOut??e.toToken,"buyToken"),sellAmount:Cd(e.sellAmount??e.amountIn??e.fromAmount,"sellAmount"),receiver:YM(e.receiver??e.recipient??e.to,"receiver"),deadlineMs:K7(e.deadlineMs??e.deadline??e.expiresAtMs,{nowMs:r,maxDeadlineMs:n},"deadline"),minBuyAmount:z7(e.minBuyAmount??e.minOut??e.amountOutMin,"minBuyAmount"),allowedSources:HM(e.allowedSources,"allowedSources",a),allowedRouters:HM(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)?Ss(e.metadata):{}};return A.slippageBps!=null&&(!Number.isInteger(A.slippageBps)||A.slippageBps<0||A.slippageBps>1e4)&&Ne("slippageBps","must be 0 to 10000"),A.intentId=e.intentId?String(e.intentId):Bd({seed:"rfq-intent",intent:A}).slice(0,34),A.intentHash=$M(A),Object.freeze(A)}function Z7(e){return(!e||typeof e!="object"||Array.isArray(e))&&Ne("artifact","required"),e.typedDataHash!=null&&!PM.test(String(e.typedDataHash))&&Ne("artifact.typedDataHash","must be bytes32"),e.calldataHash!=null&&!PM.test(String(e.calldataHash))&&Ne("artifact.calldataHash","must be bytes32"),e.to!=null&&!pI(String(e.to))&&Ne("artifact.to","must be an address"),e.data!=null&&!/^0x(?:[0-9a-fA-F]{2})*$/.test(String(e.data))&&Ne("artifact.data","must be hex"),Ss(e)}function hI(e,t={},r={}){(!e||e.kind!=="rfq-intent")&&Ne("intent","required");let n=Number(r.nowMs??Date.now()),o=Number(t.expiryMs??t.expiresAtMs??t.validUntilMs);Number.isFinite(o)||Ne("quote expiry","required"),o<=n&&Ne("quote","expired"),o>e.deadlineMs&&Ne("quote expiry","exceeds intent deadline");let i=String(t.source??t.provider??"").trim();i||Ne("source","required"),e.allowedSources.includes(i)||Ne("source","not allowed by intent");let s=Cd(t.amountOut??t.buyAmount,"amountOut"),a=Cd(t.minBuyAmount??t.minOut??s,"minBuyAmount");BigInt(a)>BigInt(s)&&Ne("minBuyAmount","exceeds amountOut");let A=Z7(t.artifact??t.executableArtifact??t.transaction??t.typedData),c=Number(t.quotedAtMs??t.timestampMs??r.nowMs??Date.now());Number.isFinite(c)||Ne("quotedAtMs","must be finite");let l=j7(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)?Ss(t.metadata):{}};return u.quoteId||(u.quoteId=Bd({seed:"rfq-quote",out:u}).slice(0,34)),u.firmQuoteHash=JM(u),Object.freeze(u)}function NA(e,t){return Array.isArray(e?.allowedSources)&&e.allowedSources.includes(t)}function WM(e,t){return String(e?.[t]??"").trim()}function RA(e,t){return Object.freeze({source:e,run:t})}function zM(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??it,i=Number(e.fromChainId)===Number(e.toChainId),s=[];return NA(e,"lifi")&&s.push(RA("lifi",async()=>{let A=await(n.lifiQuote??Rn)({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 eX(t,A.transactionRequest.data):void 0,route:A},metadata:{tool:A?.tool??A?.toolDetails?.name??null}}})),i&&(NA(e,"paraswap")&&s.push(RA("paraswap",async()=>{let A=await(n.paraswapPrice??qn)({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}}})),NA(e,"0x")&&(WM(r,"ZEROX_API_KEY")||WM(r,"0X_API_KEY")||n.zeroxQuote)&&s.push(RA("0x",async()=>{let A=await(n.zeroxQuote??vo)({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}}})),NA(e,"cow")&&s.push(RA("cow",async()=>{let A=await(n.cowQuote??Fn)({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}}})),NA(e,"uniswap-v3")&&o[Number(e.fromChainId)]&&s.push(RA("uniswap-v3",async()=>{let A=await(n.uniV3QuoteExactIn??Sn)({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 eX(e,t){return`0x${(await import("node:crypto")).createHash("sha256").update(String(t)).digest("hex")}`}async function tX(e,t){return Promise.race([Promise.resolve().then(e.run),new Promise((r,n)=>setTimeout(()=>n(new Error(`${e.source}: timeout`)),t))])}async function jM(e,t,r={}){let n=Number(r.timeoutMs??12e3),o=await Promise.allSettled(t.map(a=>tX(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(hI(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 KM(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 gI(e,t={}){let r=zM(e,t),{quotes:n,failed:o}=await jM(e,r,t),i=KM(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 XM(e={},t={}){return yd(e,t)}async function ZM(e={},t={}){let r=e.intent?.kind==="rfq-intent"?e.intent:yd(e,t);return gI(r,t)}async function eT(){return{ok:!0,provider:"rfq",mode:"intent-rfq",execution:"prepare"}}_();var nX="https://app.across.to";function mI(e={}){return(e.baseUrl||process.env.ACROSS_API_URL||nX).replace(/\/$/,"")}async function tT(e={}){try{let t=await B(`${mI(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 rT(e={},t={}){let r=String(e.l1Token||"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2");return B(`${mI(t)}/api/pools?token=${encodeURIComponent(r)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function nT(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)),B(`${mI(t)}/api/suggested-fees?${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}_();var iX="https://api.beefy.finance";function EI(e={}){return(e.baseUrl||process.env.BEEFY_API_URL||iX).replace(/\/$/,"")}async function oT(e={}){try{let t=await B(`${EI(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 iT(e={},t={}){let r=await B(`${EI(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 sT(e={}){return B(`${EI(e)}/apy/breakdown`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??25e3})}_();var aX="https://public-api.birdeye.so";function aT(e={}){return(e.baseUrl||process.env.BIRDEYE_API_URL||aX).replace(/\/$/,"")}async function AT(e={}){try{let t=await B(`${aT(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 cT(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 B(`${aT(t)}/public/tokenlist?sort_by=${encodeURIComponent(r)}&sort_type=${encodeURIComponent(n)}&offset=${o}&limit=${i}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}_();var cX="https://api.celenium.io";function II(e={}){return(e.baseUrl||process.env.CELENIUM_API_URL||cX).replace(/\/$/,"")}async function lT(e={}){try{let t=await B(`${II(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 uT(e={}){return B(`${II(e)}/v1/stats`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??15e3})}async function dT(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 B(`${II(t)}${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}_();var uX="https://api.mainnet-beta.solana.com";function dX(e={}){return(e.rpcUrl||process.env.SOLANA_RPC_URL||uX).replace(/\/$/,"")}async function Qd(e,t,r={}){let n=dX(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 fT(e={}){try{let t=await Qd("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 pT(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 Qd("getAssetsByOwner",{ownerAddress:r,page:n,limit:o,...e.sortBy?{sortBy:{sortBy:e.sortBy,sortDirection:e.sortDirection||"asc"}}:{}},t)}async function hT(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)),Qd("searchAssets",o,t)}async function gT(e={},t={}){let r=String(e.assetId||"").trim();if(!r)throw new Error("das-assets: assetId is required");return Qd("getAssetProof",{id:r},t)}_();var pX="https://api.l2beat.com";function CI(e={}){return(e.baseUrl||process.env.L2BEAT_API_URL||pX).replace(/\/$/,"")}async function mT(e={}){try{let t=await B(`${CI(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 ET(e={},t={}){let r=await B(`${CI(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 IT(e={},t={}){return B(`${CI(t)}/api/scaling/activity`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}_();var gX="https://api.spark.fi";function BI(e={}){return(e.baseUrl||process.env.SPARK_API_URL||gX).replace(/\/$/,"")}async function CT(e={}){try{return{ok:(await B(`${BI(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 BT(e={},t={}){let r=String(e.protocol||"spark"),n=String(e.chain||"mainnet"),o=e.token?String(e.token).toLowerCase():null;return o?B(`${BI(t)}/v1/savings/${encodeURIComponent(r)}/${encodeURIComponent(n)}/${encodeURIComponent(o)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}):B(`${BI(t)}/v1/savings/${encodeURIComponent(r)}/${encodeURIComponent(n)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}_();var EX="https://api.symbiotic.fi";function yI(e={}){return(e.baseUrl||process.env.SYMBIOTIC_API_URL||EX).replace(/\/$/,"")}async function yT(e={}){try{let t=await B(`${yI(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 QT(e={},t={}){let r=Math.min(200,Math.max(1,Number(e.limit||50))),n=await B(`${yI(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 wT(e={},t={}){let r=String(e.address||"").trim();if(!r)throw new Error("symbiotic-restaking: address is required");return B(`${yI(t)}/v1/vaults/${encodeURIComponent(r)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}_();var CX="https://staking-api.polygon.technology/api/v2",BX=18,yX=200,QX=50,wX=new Set(["id","totalStaked","selfStake","delegatedStake","commissionPercent","uptimePercent","performanceIndex"]);function wI(e={}){return String(e.baseUrl||process.env.POLYGON_STAKING_API_URL||CX).replace(/\/$/,"")}function bX(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 kX(e,t=QX){let r=Number(e??t);return Number.isFinite(r)?Math.min(yX,Math.max(1,Math.trunc(r))):t}function QI(e){let t=Number(e);return Number.isFinite(t)?t/10**BX:null}async function bI(e,t={}){let r=await B(`${wI(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 bT(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:QI(e.totalStaked),selfStakePolApprox:QI(e.selfStake),delegatedStakePolApprox:QI(e.delegatedStake),stakePrecision:"approximate \u2014 upstream serves wei-scale as float64"}}async function kT(e={},t={}){let r=await bI("/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=wX.has(String(e.sortBy))?String(e.sortBy):"id",s=String(e.direction||"").toUpperCase()==="DESC";n=[...n].sort((u,d)=>{let f=Number(u?.[i]??0),p=Number(d?.[i]??0),h=Number.isFinite(f)&&Number.isFinite(p)?f-p:0;return s?-h:h});let a=n.length,A=Math.max(0,Math.trunc(Number(e.offset||0))||0),c=kX(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(bT)}}async function ST(e={},t={}){let r=bX(e.id??e.validatorId,"id"),o=(await bI(`/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:{...bT(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 xT(e={}){try{let t=await bI("/validators",{...e,timeoutMs:e.timeoutMs??1e4}),r=Array.isArray(t?.result)?t.result:[];return{ok:r.length>0,provider:"polygon-staking",chainId:137,baseUrl:wI(e),validatorTotal:t?.summary?.total??r.length,exec:!1}}catch(t){return{ok:!1,provider:"polygon-staking",chainId:137,baseUrl:wI(e),error:String(t?.message||t),exec:!1}}}_();var xX="https://api.v3.aave.com/graphql",xue=Object.freeze([1,10,56,100,137,146,232,324,1088,1868,5e3,42161,42220,43114,57073,59144,534352]),vX=(e={})=>e.baseUrl||process.env.AAVE_V3_API_URL||xX;async function wd(e,t,r={}){let n=await B(vX(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 NX=`query Markets($request: MarketsRequest!) {
|
|
146
190
|
markets(request: $request) {
|
|
147
191
|
name
|
|
148
192
|
address
|
|
@@ -150,7 +194,7 @@ anchor-lang = "0.31.1"
|
|
|
150
194
|
totalMarketSize
|
|
151
195
|
totalAvailableLiquidity
|
|
152
196
|
}
|
|
153
|
-
}`,
|
|
197
|
+
}`,RX=`query Market($request: MarketRequest!) {
|
|
154
198
|
market(request: $request) {
|
|
155
199
|
name
|
|
156
200
|
address
|
|
@@ -183,13 +227,13 @@ anchor-lang = "0.31.1"
|
|
|
183
227
|
}
|
|
184
228
|
}
|
|
185
229
|
}
|
|
186
|
-
}`,
|
|
230
|
+
}`,DX=`query Chains($filter: ChainsFilter!) {
|
|
187
231
|
chains(filter: $filter) { chainId name isTestnet explorerUrl }
|
|
188
|
-
}`;function _P(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 Vg(e={},t={}){let n={chainIds:_P(e)};return e.user&&(n.user=String(e.user)),{markets:(await Gi(kP,{request:n},t))?.data?.markets??[]}}async function zg(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 s=(await Gi(AP,{request:o},t))?.data?.market??null;if(!s)throw new Error(`aave-v3: no market at ${n} on chain ${r}`);return{market:s}}async function Wg(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 Gi(IP,{filter:r},t))?.data?.chains??[]}}async function Gg(e={}){return{ok:(await Gi("query { health }",{},e))?.data?.health===!0,provider:"aave-v3"}}R();var TP="https://staking-api.babylonlabs.io";function yl(e={}){return String(e.baseUrl||process.env.BABYLON_STAKING_API_URL||TP).replace(/\/$/,"")}function Ki(e,t={}){return b(`${yl(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:{Accept:"application/json"}})}function Kg(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 Yg(e={}){try{let n=(await Ki("/v2/stats",e))?.data||{},r=Number(n.active_tvl??0);return{ok:Number.isFinite(r)&&r>0,provider:"babylon-staking",baseUrl:yl(e),activeTvlSats:String(n.active_tvl??""),activeFinalityProviders:n.active_finality_providers??null,exec:!1}}catch(t){return{ok:!1,provider:"babylon-staking",baseUrl:yl(e),error:String(t?.message||t),exec:!1}}}async function Xg(e={},t={}){let r=(await Ki("/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 Qg(e={},t={}){let n=await Ki("/v2/finality-providers",t),r=Array.isArray(n?.data)?n.data:[];if(e.state){let i=String(e.state).trim().toUpperCase();r=r.filter(s=>String(s.state||"").toUpperCase().includes(i))}if(e.btcPk){let i=Kg(e.btcPk,"btcPk");r=r.filter(s=>String(s.btc_pk||"").toLowerCase()===i)}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(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 Jg(e={},t={}){let n=Kg(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 Ki(`/v2/delegations?${r}`,t),i=Array.isArray(o?.data)?o.data:[],s=i.reduce((a,c)=>a+Number(c.delegation_staking?.staking_amount??c.staking_amount??0),0);return{provider:"babylon-staking",stakerPkHex:n,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}}R();var NP="https://markets.bisq.network";function bl(e={}){return String(e.baseUrl||process.env.BISQ_MARKETS_URL||NP).replace(/\/$/,"")}function Zg(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 Yi(e,t={}){return b(`${bl(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function ey(e={}){try{let t=await Yi("/api/markets",e),n=t&&typeof t=="object"?Object.keys(t).length:0;return{ok:n>0,provider:"bisq-markets",baseUrl:bl(e),marketCount:n,exec:!1}}catch(t){return{ok:!1,provider:"bisq-markets",baseUrl:bl(e),error:String(t?.message||t),exec:!1}}}async function ty(e={},t={}){let n=await Yi("/api/markets",t),r=Object.values(n&&typeof n=="object"?n:{});if(e.base){let o=String(e.base).trim().toLowerCase();r=r.filter(i=>String(i.lsymbol||"").toLowerCase()===o)}if(e.quote){let o=String(e.quote).trim().toLowerCase();r=r.filter(i=>String(i.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 ny(e={},t={}){let n=Zg(e.market||e.pair||"btc_usd","market"),r=await Yi(`/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 ry(e={},t={}){let n=Zg(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 i=await Yi(`/api/trades?${o}`,t),s=Array.isArray(i)?i:[],a=s.length?Number(s[0].trade_date||0):null,c=s.reduce((l,u)=>l+Number(u.amount||0),0);return{provider:"bisq-markets",market:n,count:s.length,latestTradeAt:a?new Date(a).toISOString():null,latestTradeAgeHours:a?Math.round((Date.now()-a)/36e5*10)/10:null,volumeBase:c,trades:s.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}))}}R();var at=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"}}),RP=new Map([["bob",60808],["rootstock",30],["rsk",30]]),$P=60808;function Jr(e){if(e==null||e==="")return $P;let t=RP.get(String(e).trim().toLowerCase());if(t)return t;let n=Number(e);if(!at[n])throw new Error(`bob-rootstock: unsupported chain ${e} (supported: ${Object.keys(at).join(", ")} / bob, rootstock)`);return n}function wl(e,t={}){if(t.baseUrl)return String(t.baseUrl).replace(/\/$/,"");let n=Jr(e),r=n===30?process.env.ROOTSTOCK_EXPLORER_URL:process.env.BOB_EXPLORER_URL;return String(r||at[n].url).replace(/\/$/,"")}function oy(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 Xi(e,t,n={}){return b(`${wl(e,n)}${t.startsWith("/")?t:`/${t}`}`,{fetchImpl:n.fetchImpl,timeoutMs:n.timeoutMs??15e3})}async function iy(e={},t={}){let n;try{n=Jr(t.chainId??t.chain??e.chainId)}catch(o){return{ok:!1,provider:"bob-rootstock",error:String(o?.message||o),exec:!1}}let r=at[n];try{let o=await Xi(n,"/api/v2/stats",e);return{ok:o?.total_blocks!=null||o?.total_transactions!=null,provider:"bob-rootstock",chainId:n,chain:r.name,baseUrl:wl(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:wl(n,e),error:String(o?.message||o),exec:!1}}}async function xl(e={},t={}){let n=e.chainId??e.chain;if(String(n).trim().toLowerCase()==="all"){let s=Object.keys(at).map(Number);return{provider:"bob-rootstock",chains:await Promise.all(s.map(async c=>{try{return await xl({chainId:c},t)}catch(l){return{provider:"bob-rootstock",chainId:c,chain:at[c].name,error:String(l?.message||l)}}}))}}let r=Jr(n),o=at[r],i=await Xi(r,"/api/v2/stats",t);return{provider:"bob-rootstock",chainId:r,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 sy(e={},t={}){let n=Jr(e.chainId??e.chain),r=oy(e.address||e.addr,"address"),o=at[n],i=await Xi(n,`/api/v2/addresses/${encodeURIComponent(r)}`,t);return{provider:"bob-rootstock",chainId:n,chain:o.name,address:r,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 ay(e={},t={}){let n=Jr(e.chainId??e.chain),r=oy(e.address||e.addr,"address"),o=await Xi(n,`/api/v2/addresses/${encodeURIComponent(r)}/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:n,chain:at[n].name,address:r,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}))}}R();var MP="https://insights.braiins.com/api/v1.0";function Sl(e={}){return String(e.baseUrl||process.env.BRAIINS_INSIGHTS_URL||MP).replace(/\/$/,"")}function vl(e,t={}){return b(`${Sl(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:{Accept:"application/json"}})}async function cy(e={}){try{let t=await vl("/price-stats",e),n=Number(t?.price??0);return{ok:Number.isFinite(n)&&n>0,provider:"braiins-insights",baseUrl:Sl(e),btcUsd:Number.isFinite(n)?n:null,timestamp:t?.timestamp??null,exec:!1}}catch(t){return{ok:!1,provider:"braiins-insights",baseUrl:Sl(e),error:String(t?.message||t),exec:!1}}}async function ly(e={},t={}){let n=await vl("/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 uy(e={},t={}){let n=await vl("/pool-stats",t),r=Array.isArray(n)?n:Array.isArray(n?.pools)?n.pools:[],o=String(e.window||"1w").trim().toLowerCase(),i=l=>l?.blocks_mined?.[o]||null,s=[...r].sort((l,u)=>Number(i(u)?.absolute||0)-Number(i(l)?.absolute||0)),a=Math.min(200,Math.max(1,Number(e.limit||s.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:s.length,pools:s.slice(0,a).map(l=>({name:l.pool_name??l.name??null,blocksMined:i(l)?.absolute??null,sharePct:i(l)?.relative_pct??null,blockValueAvg:l.block_value_avg??null,hashrate:l.hashrate??null,luck:l.luck??null,blocksMinedAllWindows:l.blocks_mined??null})),raw:s.slice(0,a)}}R();var UP="https://api.cow.fi",dy=Object.freeze({1:"mainnet",100:"xdai",42161:"arbitrum_one",8453:"base",11155111:"sepolia"});function py(e={}){return(e.baseUrl||process.env.COW_API_URL||UP).replace(/\/$/,"")}function DP(e={}){if(e.network)return String(e.network);let t=Number(e.chainId??1),n=dy[t];if(!n)throw new Error(`cow-protocol: unsupported chainId ${t} (have: ${Object.keys(dy).join(", ")})`);return n}function El(e,t,n){return`${py(n)}/${DP(e)}/api/v1${t}`}function my(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 fy(e,t=10){return Math.min(1e3,Math.max(1,Number(e.limit??t)))}async function hy(e={},t={}){return b(El(e,"/auction",t),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function gy(e={},t={}){let n=my(e.owner||e.address||e.user,"owner"),r=new URLSearchParams({limit:String(fy(e))});e.offset!=null&&r.set("offset",String(Math.max(0,Number(e.offset))));let o=await b(`${El(e,`/account/${n}/orders`,t)}?${r}`,{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:n,count:s.length,total:i.length,orders:s}}async function yy(e={},t={}){let n=new URLSearchParams;e.orderUid?n.set("orderUid",String(e.orderUid)):n.set("owner",my(e.owner||e.address||e.user,"owner"));let r=await b(`${El(e,"/trades",t)}?${n}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4}),o=Array.isArray(r)?r:[];return{count:o.length,trades:o.slice(0,fy(e))}}async function by(e={}){let t=await b(`${py(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}}R();var qP="https://api.hiro.so",HP=20;function kl(e={}){return String(e.baseUrl||process.env.HIRO_API_URL||qP).replace(/\/$/,"")}function jP(e={}){let t={Accept:"application/json"},n=e.apiKey||process.env.HIRO_API_KEY;return n&&(t["x-api-key"]=String(n)),t}function Zr(e,t={}){return b(`${kl(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:jP(t)})}async function wy(e={}){try{let t=await Zr("/v2/info",e),n=Number(t?.burn_block_height??0);return{ok:Number.isFinite(n)&&n>0,provider:"hiro-stacks",baseUrl:kl(e),burnBlockHeight:t?.burn_block_height??null,stacksTipHeight:t?.stacks_tip_height??null,serverVersion:t?.server_version??null,rateLimitRps:HP,keyed:!!(e.apiKey||process.env.HIRO_API_KEY),exec:!1}}catch(t){return{ok:!1,provider:"hiro-stacks",baseUrl:kl(e),error:String(t?.message||t),exec:!1}}}async function xy(e={},t={}){let n=await Zr("/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 Sy(e={},t={}){let n=await Zr("/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 vy(e={},t={}){let n=Math.min(60,Math.max(1,Number(e.limit||20))),r=Math.max(0,Number(e.offset||0)),o=await Zr(`/extended/v2/pox/cycles?limit=${n}&offset=${r}`,t),i=Array.isArray(o?.results)?o.results:[];return{provider:"hiro-stacks",total:o?.total??null,limit:n,offset:r,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 Ey(e={},t={}){let n=Math.min(30,Math.max(1,Number(e.limit||1))),r=await Zr(`/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(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}))}}R();var zP="https://bundles.jito.wtf",Ay=1e9;function Al(e={}){return String(e.baseUrl||process.env.JITO_BUNDLES_URL||zP).replace(/\/$/,"")}function WP(e,t,n){let r=Number(e);return Number.isFinite(r)?Math.max(1,Math.min(Math.floor(r),n)):t}function ky(e){let t=Number(e);return Number.isFinite(t)?Math.round(t*Ay):null}function GP(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/Ay:null,raw:e}}async function Iy(e={}){try{let t=await b(`${Al(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 _y(e={},t={}){let n=WP(e.limit,5,100),r=new URL(`${Al(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}),s=(Array.isArray(o)?o:Array.isArray(o?.bundles)?o.bundles:[]).map(GP),a=s.map(c=>c.landedTipLamports).filter(c=>Number.isFinite(c));return{provider:"jito-mev",chain:"solana-mainnet-beta",count:s.length,totalTipLamports:a.reduce((c,l)=>c+l,0),maxTipLamports:a.length?Math.max(...a):null,bundles:s}}async function Py(e={}){let t=await b(`${Al(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,i])=>[o,ky(i)])),suggestedTipLamports:ky(r.p75||r.p50),raw:n}}R();var YP="https://api.kamino.finance";function XP(e={}){return String(e.baseUrl||process.env.KAMINO_API_URL||YP).replace(/\/$/,"")}function Ee(e){let t=Number(e);return Number.isFinite(t)?t:null}function Ty(e={}){let t=Ee(e.totalValueLocked)??0,n=Ee(e.apy?.totalApy)??0,r=Ee(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:Ee(e.sharePrice),sharesIssued:Ee(e.sharesIssued),profitAndLoss:Ee(e.profitAndLoss),feeApy:n,feeApyPct:n*100,rewardApy:r,rewardApyPct:r*100,totalApy:n+r,totalApyPct:(n+r)*100,apr24h:Ee(e.apy?.vault?.totalApr),apy24h:Ee(e.kaminoApy?.vault?.apy24h),apy7d:Ee(e.kaminoApy?.vault?.apy7d),apy30d:Ee(e.kaminoApy?.vault?.apy30d),poolPrice:Ee(e.apy?.vault?.poolPrice),priceLower:Ee(e.apy?.vault?.priceLower),priceUpper:Ee(e.apy?.vault?.priceUpper),outOfRange:!!e.apy?.vault?.strategyOutOfRange,rewardMints:e.rewardMints||[],balances:e.vaultBalances||null,lastCalculated:e.kaminoApy?.vault?.lastCalculated||null}}async function Il(e={},t={}){let n=new URL(`${XP(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 Cy(e={}){try{let t=await Il({},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 Ny(e={},t={}){let r=(await Il(e,t)).map(Ty),o=r.length,i=Number.isFinite(Number(e.minTvlUsd))?Number(e.minTvlUsd):1e4;if(r=r.filter(l=>l.tvlUsd>=i),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 s=String(e.sortBy||"apy");r.sort((l,u)=>s==="tvl"?u.tvlUsd-l.tvlUsd:u.totalApy-l.totalApy);let a=Number.isFinite(Number(e.limit))&&Number(e.limit)>0?Number(e.limit):25,c=r.slice(0,a);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:i,tvlUsdMatched:r.reduce((l,u)=>l+u.tvlUsd,0),strategies:c}}async function Oy(e={},t={}){let n=String(e.strategy||e.address||"").trim();if(!n)throw new Error("kamino-strategies: strategy address required");let o=(await Il({...e,status:e.status||"ALL"},t)).find(i=>i.strategy===n);if(!o)throw new Error(`kamino-strategies: strategy ${n} not found`);return{provider:"kamino-strategies",chain:"solana-mainnet-beta",...Ty(o),raw:o}}R();var JP="https://blockstream.info/liquid/api",Ry="6f0279e9ed041c3d710a9f57d0c02928416460c4b722ae3457a11eec381c526d";function Qi(e={}){return String(e.baseUrl||process.env.LIQUID_ESPLORA_URL||JP).replace(/\/$/,"")}function ZP(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 eT(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 $y(e,t={}){let n=`${Qi(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)}),i=await o.text();if(!o.ok)throw new Error(`liquid-esplora GET ${e}: HTTP ${o.status} ${i.slice(0,160)}`);return i}function Ly(e,t={}){return b(`${Qi(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function My(e={}){try{let t=await $y("/blocks/tip/height",e),n=Number(t);return{ok:Number.isFinite(n)&&n>0,provider:"liquid-esplora",baseUrl:Qi(e),tipHeight:n,exec:!1,signing:"user-wallet"}}catch(t){return{ok:!1,provider:"liquid-esplora",baseUrl:Qi(e),error:String(t?.message||t),exec:!1}}}async function By(e={},t={}){let n=await $y("/blocks/tip/height",t);return{provider:"liquid-esplora",tipHeight:Number(n)}}async function Uy(e={},t={}){let n=ZP(e.address||e.addr,"address"),r=await Ly(`/address/${n}`,t),o=r.chain_stats||{},i=r.mempool_stats||{},s=o.funded_txo_sum!=null,a=Number(o.funded_txo_sum||0)+Number(i.funded_txo_sum||0),c=Number(o.spent_txo_sum||0)+Number(i.spent_txo_sum||0);return{provider:"liquid-esplora",address:n,txCount:Number(o.tx_count||0)+Number(i.tx_count||0),balanceSats:s?String(a-c):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:r}}async function Dy(e={},t={}){let n=eT(e.assetId||e.asset||Ry,"assetId"),r=await Ly(`/asset/${n}`,t),o=r.chain_stats||{};return{provider:"liquid-esplora",assetId:n,isPolicyAsset:n===Ry,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}}R();var nT="https://api-mainnet.magiceden.dev/v2/ord/btc",rT=600;function _l(e={}){return String(e.baseUrl||process.env.MAGICEDEN_ORD_API_URL||nT).replace(/\/$/,"")}function oT(e={}){let t={Accept:"application/json"},n=e.apiKey||process.env.MAGICEDEN_API_KEY;return n&&(t.Authorization=`Bearer ${n}`),t}function Fy(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 qy(e,t={}){return b(`${_l(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:oT(t),retries:t.retries??1})}async function Hy(e={}){let t=Fy(e.probeCollection||process.env.MAGICEDEN_PROBE_COLLECTION||"nodemonkes");try{let n=await qy(`/stat?collectionSymbol=${encodeURIComponent(t)}`,e);return{ok:n!=null&&typeof n=="object",provider:"magiceden-ordinals",baseUrl:_l(e),probeCollection:t,rateLimitRpm:rT,exec:!1}}catch(n){let r=n?.status??null;return{ok:!1,provider:"magiceden-ordinals",baseUrl:_l(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 jy(e={},t={}){let n=Fy(e.collectionSymbol||e.symbol||e.collection,"collectionSymbol");try{let r=await qy(`/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."}}}R();var sT="https://mempool.space/api",aT=7;function Pl(e={}){return String(e.baseUrl||process.env.MEMPOOL_API_URL||sT).replace(/\/$/,"")}function Ji(e,t={}){return b(`${Pl(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}function Vy(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>aT}}async function zy(e={}){try{let n=(await Ji("/v1/lightning/statistics/latest",e))?.latest||{},{ageDays:r,stale:o}=Vy(n.added);return{ok:Number(n.node_count||0)>0,provider:"mempool-lightning",baseUrl:Pl(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:Pl(e),error:String(t?.message||t),exec:!1}}}async function Wy(e={},t={}){let r=(await Ji("/v1/lightning/statistics/latest",t))?.latest||{},{ageDays:o,stale:i}=Vy(r.added);return{provider:"mempool-lightning",snapshotAt:r.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: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 Gy(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 Ji(`/v1/lightning/nodes/rankings/${n}`,t),i=Array.isArray(o)?o:[],s=Math.min(100,Math.max(1,Number(e.limit||i.length||1)));return{provider:"mempool-lightning",metric:n,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 Ky(e={},t={}){let n=await Ji("/v1/lightning/nodes/countries",t),r=Array.isArray(n)?n:[],o=Math.min(250,Math.max(1,Number(e.limit||r.length||1))),i=r.reduce((s,a)=>s+Number(a.count||0),0);return{provider:"mempool-lightning",countryCount:r.length,totalNodes:i,topCountrySharePct:r[0]?.share??null,countries:r.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)}))}}R();var lT="https://mempool.space/api",Yy=new Set(["24h","3d","1w","1m","3m","6m","1y","2y","3y","all"]);function Tl(e={}){return String(e.baseUrl||process.env.MEMPOOL_API_URL||lT).replace(/\/$/,"")}function Xy(e,t){let n=String(e||t).trim().toLowerCase();if(!Yy.has(n))throw new Error(`mempool-mining: window must be one of ${[...Yy].join(", ")}`);return n}function eo(e,t={}){return b(`${Tl(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function Qy(e={}){try{let t=await eo("/v1/difficulty-adjustment",e);return{ok:Number.isFinite(Number(t?.nextRetargetHeight))&&Number(t.nextRetargetHeight)>0,provider:"mempool-mining",baseUrl:Tl(e),nextRetargetHeight:t?.nextRetargetHeight??null,exec:!1}}catch(t){return{ok:!1,provider:"mempool-mining",baseUrl:Tl(e),error:String(t?.message||t),exec:!1}}}async function Jy(e={},t={}){let n=await eo("/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 Zy(e={},t={}){let n=Xy(e.window||e.timeframe,"1w"),r=await eo(`/v1/mining/pools/${n}`,t),o=Array.isArray(r?.pools)?r.pools:[],i=o.reduce((l,u)=>l+Number(u.blockCount||0),0),s=l=>i>0?Number(l.blockCount||0)/i*100:null,a=[...o].sort((l,u)=>Number(u.blockCount||0)-Number(l.blockCount||0)),c=Math.min(200,Math.max(1,Number(e.limit||a.length||1)));return{provider:"mempool-mining",window:n,totalBlocks:i,blockCount:r?.blockCount??null,lastEstimatedHashrate:r?.lastEstimatedHashrate??null,topPoolSharePct:a[0]?s(a[0]):null,top3SharePct:a.slice(0,3).reduce((l,u)=>l+(s(u)||0),0)||null,pools:a.slice(0,c).map(l=>({name:l.name??null,slug:l.slug??null,blockCount:l.blockCount??null,rank:l.rank??null,sharePct:s(l),emptyBlocks:l.emptyBlocks??null,avgMatchRate:l.avgMatchRate??null}))}}async function eb(e={},t={}){let n=Xy(e.window||e.timeframe,"3d"),r=await eo(`/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 tb(e={},t={}){let n=Math.min(1e4,Math.max(1,Number(e.blockCount||e.blocks||144))),r=await eo(`/v1/mining/reward-stats/${n}`,t),o=Number(r.totalReward||0),i=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-i),feeSharePct:o>0?i/o*100:null,totalTx:r.totalTx??null,raw:r}}R();var dT="https://amm-v2.meteora.ag",nb=new Set(["tvl","volume","fee_tvl_ratio","l_m"]),rb=new Set(["dynamic","multitoken","lst","farms"]),pT=/^[1-9A-HJ-NP-Za-km-z]{32,44}$/;function mT(e={}){return String(e.baseUrl||process.env.METEORA_API_URL||dT).replace(/\/$/,"")}function me(e){let t=Number(e);return Number.isFinite(t)?t:null}function fT(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:me(e.pool_lp_price_in_usd),tvlUsd:me(e.pool_tvl),farmTvlUsd:me(e.farm_tvl),volume24hUsd:me(e.trading_volume),volume7dUsd:me(e.weekly_trading_volume),fee24hUsd:me(e.fee_volume),fee7dUsd:me(e.weekly_fee_volume),tradeApyPct:me(e.trade_apy),weeklyTradeApyPct:me(e.weekly_trade_apy),baseApyPct:me(e.daily_base_apy),farmingApyPct:me(e.farming_apy),totalApyPct:(me(e.trade_apy)??0)+(me(e.farming_apy)??0),aprPct:me(e.apr),feePct:me(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 hT(e={},t={}){let n=new URL(`${mT(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 a=String(e.sortKey);if(!nb.has(a))throw new Error(`meteora-dlmm: sortKey must be one of ${[...nb].join(", ")}`);n.searchParams.set("sort_key",a),n.searchParams.set("order_by",e.orderBy==="asc"?"asc":"desc")}if(e.poolType!=null){let a=String(e.poolType);if(!rb.has(a))throw new Error(`meteora-dlmm: poolType must be one of ${[...rb].join(", ")}`);n.searchParams.set("pool_type",a)}let i=e.filter??e.query??e.search;i!=null&&String(i).trim()&&n.searchParams.set("filter",String(i).trim());let s=e.mints||e.includeTokenMints;if(s){let a=(Array.isArray(s)?s:[s]).map(c=>String(c).trim());for(let c of a)if(!pT.test(c))throw new Error(`meteora-dlmm: mint ${c} is not a base58 public key`);n.searchParams.set("include_token_mints",a.join(","))}return{url:n,page:r,size:o}}async function Cl(e={},t={}){let{url:n,page:r,size:o}=hT(e,t),i=await b(n.toString(),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4});return{pools:(Array.isArray(i?.data)?i.data:[]).map(fT),totalCount:i?.total_count??null,page:r,size:o}}async function ob(e={}){try{let{pools:t,totalCount:n}=await Cl({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 ib(e={},t={}){let n=await Cl({sortKey:e.sortKey||"tvl",orderBy:e.orderBy||"desc",...e},t),r=n.pools,o=Number(e.minTvlUsd);return Number.isFinite(o)&&(r=r.filter(i=>(i.tvlUsd??0)>=o)),e.excludeUnknown===!0&&(r=r.filter(i=>!i.unknownTokens)),{provider:"meteora-dlmm",chain:"solana-mainnet-beta",page:n.page,size:n.size,totalCount:n.totalCount,count:r.length,tvlUsd:r.reduce((i,s)=>i+(s.tvlUsd??0),0),pools:r}}async function sb(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 Cl({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}}R();var yT="https://ordinals.com";function Zi(e={}){return String(e.baseUrl||e.ordinalsBase||process.env.ORDINALS_BASE_URL||yT).replace(/\/$/,"")}function bT(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 ab(e,t={}){let n=`${Zi(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)}),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 Nl(e,t={}){return b(`${Zi(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:{Accept:"application/json"}})}async function cb(e={}){try{let t=await ab("/r/blockheight",e),n=Number(t);return{ok:Number.isFinite(n)&&n>0,provider:"ordinals-runes",baseUrl:Zi(e),blockHeight:n,exec:!1}}catch(t){return{ok:!1,provider:"ordinals-runes",baseUrl:Zi(e),error:String(t?.message||t),exec:!1}}}async function lb(e={},t={}){let n=await ab("/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 ub(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 i=Number(n);if(!Number.isInteger(i)||i<0)throw new Error("ordinals-runes: height must be a non-negative integer or a 64-hex block hash");r=String(i)}let o=await Nl(`/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 db(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)),i=o>0?`/r/sat/${r}/${o}`:`/r/sat/${r}`,s=await Nl(i,t),a=Array.isArray(s?.ids)?s.ids:[];return{provider:"ordinals-runes",sat:r,page:o,inscriptionCount:a.length,inscriptionIds:a,more:!!s?.more,raw:s}}async function pb(e={},t={}){let n=bT(e.name||e.rune||e.runeName,"name"),r=await Nl(`/rune/${n}`,t),o=r?.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: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: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:r?.mintable??null,amountPerMint:i.amount==null?null:String(i.amount),turbo:o.turbo??null,parent:r?.parent??null,raw:r}}R();var xT="https://hermes.pyth.network",Rl={"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"},ST=/^[0-9a-fA-F]{64}$/;function mb(e={}){return String(e.baseUrl||process.env.PYTH_HERMES_URL||xT).replace(/\/$/,"")}function fb(e,t="feedId"){let n=String(e??"").trim();if(!n)throw new Error(`pyth-price-feeds: ${t} required`);let r=Rl[n.toUpperCase()]||Rl[`${n.toUpperCase()}/USD`];if(r)return r;let o=n.startsWith("0x")||n.startsWith("0X")?n.slice(2):n;if(!ST.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 Ol(e={}){let t=Number(e.price),n=Number(e.expo);return!Number.isFinite(t)||!Number.isFinite(n)?null:t*10**n}function $l(e={}){let t=Ol({price:Number(e.price?.conf),expo:e.price?.expo}),n=Ol(e.price);return{id:e.id||null,price:n,confidence:t,confidenceBps:n&&t!=null?Math.round(t/Math.abs(n)*1e4):null,emaPrice:Ol(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 Ll(e,t={}){let n=new URL(`${mb(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 hb(e={}){try{let t=await Ll([Rl["SOL/USD"]],e),r=(Array.isArray(t?.parsed)?t.parsed.map($l):[])[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 gb(e={},t={}){let n=fb(e.feedId||e.id||e.symbol,"feedId"),r=await Ll([n],t),o=Array.isArray(r?.parsed)?r.parsed.map($l):[],i=o.find(s=>String(s.id).toLowerCase()===n)||o[0]||null;if(!i)throw new Error(`pyth-price-feeds: no price returned for feed ${n}`);return{provider:"pyth-price-feeds",chain:"solana-mainnet-beta",feedId:n,...i,binaryUpdate:r?.binary?.data?.[0]||null,binaryEncoding:r?.binary?.encoding||null}}async function yb(e={},t={}){let n=Array.isArray(e)?e:e.feedIds||e.ids||e.symbols||[],r=[...new Set(n.map(l=>fb(l,"feedIds[]")))];if(!r.length)throw new Error("pyth-price-feeds: feedIds[] required");let o=40,i=[];for(let l=0;l<r.length;l+=o)i.push(r.slice(l,l+o));let s=[];for(let l of i)s.push(await Ll(l,t));let a=s.flatMap(l=>Array.isArray(l?.parsed)?l.parsed.map($l):[]),c=Object.fromEntries(a.map(l=>[String(l.id).toLowerCase(),l]));return{provider:"pyth-price-feeds",chain:"solana-mainnet-beta",requested:r.length,returned:a.length,missing:r.filter(l=>!c[l]),prices:a,byId:c}}async function bb(e={},t={}){let n=new URL(`${mb(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(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}))}}R();var ET="https://relayscan.io",wb=new Set(["1h","12h","24h","7d"]);function Ml(e={}){return(e.baseUrl||process.env.RELAYSCAN_API_URL||ET).replace(/\/$/,"")}function xb(e={}){let t=String(e.timespan||e.t||"24h").toLowerCase();if(!wb.has(t))throw new Error(`relayscan-mev: timespan must be one of ${[...wb].join(", ")}`);return t}function kT(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 Bl(e={},t={}){return b(`${Ml(t)}/overview/json?t=${xb(e)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function Sb(e={},t={}){return b(`${Ml(t)}/builder-profit/json?t=${xb(e)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function vb(e={},t={}){let n=kT(e);return b(`${Ml(t)}/stats/day/${n}/json`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3})}async function Eb(e={}){let t=await Bl({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}}R();var IT="https://extra-api.sanctum.so",_T=30,PT=["jitoSOL","mSOL","bSOL","INF","hSOL","bonkSOL","jupSOL","dSOL"];function Ul(e={}){return String(e.baseUrl||process.env.SANCTUM_API_URL||IT).replace(/\/$/,"")}function kb(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 TT(e,t){let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}async function Zt(e,t,n={}){let r={},o={};for(let i of TT(t,_T)){let s=new URL(`${Ul(n)}/v1/${e}`);for(let l of i)s.searchParams.append("lst",l);let a=await b(s.toString(),{fetchImpl:n.fetchImpl,timeoutMs:n.timeoutMs??2e4}),c=a?.apys||a?.tvls||a?.solValues||{};Object.assign(r,c),Object.assign(o,a?.errs||{})}return{values:r,errs:o}}async function Ab(e={}){try{let[t,n]=await Promise.all([b(`${Ul(e)}/v1/lsts`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??15e3}),Zt("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 Dl(e={},t={}){let n=await b(`${Ul(t)}/v1/lsts`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4}),r=(Array.isArray(n?.lsts)?n.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();r=r.filter(s=>String(s.symbol||"").toLowerCase()===i||s.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 Ib(e={},t={}){let n=e.lsts||e.symbols||null;e.all===!0&&(n=(await Dl({},t)).lsts.map(c=>c.symbol).filter(Boolean)),(!Array.isArray(n)||!n.length)&&(n=PT);let r=[...new Set(n.map(a=>kb(a,"lsts[]")))],[o,i]=await Promise.all([Zt("apy/latest",r,t),Zt("apy/inception",r,t)]),s=r.map(a=>{let c=Number(o.values[a]),l=Number(i.values[a]);return{lst:a,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[a]||i.errs[a]||null}});return s.sort((a,c)=>(c.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 _b(e={},t={}){let n=kb(e.lst||e.mint||e.symbol,"lst"),[r,o,i,s]=await Promise.all([Zt("apy/latest",[n],t),Zt("apy/inception",[n],t),Zt("tvl/current",[n],t).catch(()=>({values:{},errs:{}})),Zt("sol-value/current",[n],t).catch(()=>({values:{},errs:{}}))]),a=Number(r.values[n]),c=Number(o.values[n]),l=r.errs[n]||o.errs[n]||null;if(!Number.isFinite(a)&&!Number.isFinite(c))throw new Error(`sanctum-lst: no APY for ${n}${l?` (${JSON.stringify(l)})`:""}`);let u=s.values[n];return{provider:"sanctum-lst",chain:"solana-mainnet-beta",lst:n,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,tvlLamports:i.values[n]??null,tvlSol:i.values[n]!=null?Number(i.values[n])/1e9:null,solValueLamports:u??null,solPerToken:u!=null?Number(u)/1e9:null,error:l}}R();var NT="https://api.save.finance",OT="4UpD2fh7xH3VP9QQaXtsS1YY3bxzWhtfpks7FatyKvdY",Pb="CCpirWrgNuBVLdkP2haxLTbD6XqEgaYuVXixbbpxUB6",RT=/^[1-9A-HJ-NP-Za-km-z]{32,44}$/;function Fl(e={}){return String(e.baseUrl||process.env.SAVE_API_URL||process.env.SOLEND_API_URL||NT).replace(/\/$/,"")}function Tb(e,t="address"){let n=String(e??"").trim();if(!RT.test(n))throw new Error(`solend-lending: ${t} must be a base58 public key`);return n}function Cb(e){let t=Number(e);return Number.isFinite(t)?t:null}function $T(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 LT(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:Cb(e.rates?.supplyInterest),borrowApyPct:Cb(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 Nb(e={}){try{let t=await b(`${Fl(e)}/v1/reserves?ids=${Pb}`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??15e3}),n=Array.isArray(t?.results)?t.results:[];return{ok:n.length>0,provider:"solend-lending",probeReserve:Pb,reserves:n.length,exec:!1}}catch(t){return{ok:!1,provider:"solend-lending",error:String(t?.message||t),exec:!1}}}async function ql(e={},t={}){let n=new URL(`${Fl(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($T);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 Ob(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(a=>Tb(String(a).trim(),"reserve"));else{let s=Tb(e.market||e.marketAddress||OT,"market"),c=(await ql({scope:"all",includeHidden:!0},t)).markets.find(l=>l.address===s);if(!c)throw new Error(`solend-lending: market ${s} 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(`${Fl(t)}/v1/reserves?ids=${n.join(",")}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3}),i=(Array.isArray(o?.results)?o.results:[]).map((s,a)=>({...LT(s),address:s.address||s.reserve?.address||n[a]||null}));return{provider:"solend-lending",chain:"solana-mainnet-beta",requested:n.length,count:i.length,reserves:i}}function Hl(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 en(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 to(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:Hl(e.amount,"amount")}}function jl(e,t){let n=t.map(s=>BigInt(s)),r=n.reduce((s,a)=>s+a,0n);if(r<=0n)throw new Error("weights must total above zero");let o=n.map(s=>e*s/r),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 no(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 Vl(e,t,n=Date.now()){let r=Math.floor(t/e.length);return e.map((o,i)=>({index:i+1,amount:String(o),offsetSec:i*r,executeAfter:new Date(n+i*r*1e3).toISOString()}))}function BT(e={},t={}){let n=to(e),r=en(e.slices??10,"slices",2,100),o=en(e.durationSec??3600,"durationSec",r,604800),i=jl(n.total,Array(r).fill(1));return no(n,"TWAP",Vl(i,o,t.nowMs),{durationSec:o})}function UT(e={},t={}){let n=to(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=en(e.durationSec??3600,"durationSec",r.length,604800),i=jl(n.total,r),s=r.reduce((c,l)=>c+l,0n),a=Vl(i,o,t.nowMs).map((c,l)=>({...c,volumeWeightBps:Number(r[l]*10000n/s)}));return no(n,"VWAP",a,{durationSec:o,requiresLiveVolumeValidation:!0})}function DT(e={}){let t=to(e),n=en(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[i,s]of e.observedMarketVolumes.entries()){let a=Hl(s,"observedMarketVolumes"),c=a*BigInt(n)/10000n,l=c>r?r:c;if(l>0n&&o.push({index:i+1,amount:String(l),observedMarketVolume:String(a)}),r-=l,r===0n)break}return no(t,"POV",o,{participationBps:n,residualAmount:String(r),requiresLiveVolumeValidation:!0})}function FT(e={}){let t=to(e),n=Hl(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 i=o>n?n:o;r.push({index:r.length+1,amount:String(i),displayAmount:String(n)}),o-=i}return no(t,"ICEBERG",r,{displayAmount:String(n),refillCount:r.length-1})}function qT(e={},t={}){let n=to(e),r=en(e.slices??10,"slices",2,100),o=en(e.durationSec??3600,"durationSec",r,604800),i=en(e.urgencyBps??5e3,"urgencyBps",1,1e4),s=Array.from({length:r},(c,l)=>{let u=Math.floor(i*l/Math.max(1,r-1));return BigInt(Math.max(1,1e4-u))}),a=jl(n.total,s);return no(n,"IS",Vl(a,o,t.nowMs),{durationSec:o,urgencyBps:i})}function Rb(e={},t={}){let n=String(e.strategy||"").trim().toUpperCase();if(n==="TWAP")return BT(e,t);if(n==="VWAP")return UT(e,t);if(n==="POV")return DT(e,t);if(n==="ICEBERG")return FT(e,t);if(n==="IS"||n==="IMPLEMENTATION SHORTFALL")return qT(e,t);throw new Error("strategy must be TWAP, VWAP, POV, ICEBERG, or IS")}function $b(){return{ok:!0,provider:"execution-strategies",strategies:["TWAP","VWAP","POV","ICEBERG","IS"],execution:"plan-only",externalProtocol:!1}}var jT={"hl-info":{health:e=>Cd(e),allMids:e=>rt(e),l2Book:(e,t={})=>Co(t.coin,e),outcomeMeta:e=>xr(e),clearinghouse:(e,t={})=>No(t.user,e),userFills:(e,t={})=>Nd(t.user,e),meta:e=>Oo(e),metaAndAssetCtxs:e=>mn(e),candleSnapshot:(e,t={})=>fn(t,e),openOrders:(e,t={})=>Rd(t.user,e),frontendOpenOrders:(e,t={})=>$d(t.user,e),userState:(e,t={})=>Ro(t.user,e),spotMeta:e=>$o(e)},"hl-vaults":{health:e=>Ud(e),summaries:(e,t={})=>fa(t,e),details:(e,t={})=>Lo(t,e),userEquities:(e,t={})=>ha(t,e),tracker:(e,t={})=>ga(t,e)},"poly-public":{health:e=>Fd(e),time:e=>ya(e),markets:(e,t={})=>qd(t,e),book:(e,t={})=>Hd(t.tokenId,e),midpoint:(e,t={})=>jd(t.tokenId,e),spread:(e,t={})=>Vd(t.tokenId,e),price:(e,t={})=>zd(t.tokenId,{side:t.side},e),events:(e,t={})=>Wd(t,e)},"evm-rpc":{health:(e,t={})=>un(t.chainId??1,e),healthAll:(e,t={})=>Xs({...e,chainIds:t.chainIds}),blockNumber:(e,t={})=>lr(t.chainId??1,e),chainId:(e,t={})=>Ks(t.chainId??1,e),getBalance:(e,t={})=>Ft(t.chainId??1,t.address,e),call:(e,t={})=>M(t.chainId??1,t.method,t.params||[],e),erc20Allowance:(e,t={})=>Ys(t,e),erc20Balance:(e,t={})=>ur(t,e),transactionReceipt:(e,t={})=>dr(t,e)},portfolio:{health:e=>y0(e),balances:(e,t={})=>Bi(t,e),snapshot:(e,t={})=>M0(t,e),history:(e,t={})=>Jc(t,e),valueGraph:(e,t={})=>B0(t,e)},"nft-portfolio":{health:e=>k0(e),inventory:(e,t={})=>qn(t,e),gallery:(e,t={})=>P0(t,e),pnl:(e,t={})=>_0(t,e),prepareList:(e,t={})=>A0(t,e),traitSnipe:(e,t={})=>I0(t,e)},"contract-risk":{health:e=>U0(e),scan:(e,t={})=>Qt(t,e)},"evm-token-sniper":{health:e=>q0(e),scan:(e,t={})=>F0(t,e)},"evm-simulate":{health:e=>j0(e),simulate:(e,t={})=>Yr(t,e)},"nft-mint":{health:e=>z0(e),discover:(e,t={})=>Hi(t,e),prepare:(e,t={})=>tl(t,e),priceGas:(e,t={})=>qi(t,e),createTrigger:(e,t={})=>W0(t,e),checkOpen:(e,t={})=>G0(t,e),evaluateMancerOs:(e,t={})=>X0(t,e)},"solana-rpc":{health:e=>Kd(e),latestBlockhash:(e,t={})=>wa(t,e),getBalance:(e,t={})=>Mo(t,e),tokenAccounts:(e,t={})=>Er(t,e),simulate:(e,t={})=>Yd(t,e)},"bitcoin-esplora":{health:e=>Xd(e),tipHeight:e=>Qd(e),fees:e=>Jd(e),address:(e,t={})=>Uo(t,e),utxos:(e,t={})=>Zd(t,e),tx:(e,t={})=>ep(t,e),decode:(e,t={})=>tp(t,e)},"bitcoin-meta":{health:e=>ip(e),runeBalances:(e,t={})=>Fo(t,e),inscriptions:(e,t={})=>yn(t,e),inscriptionInfo:(e,t={})=>sp(t,e),inscriptionChildren:(e,t={})=>ap(t,e),ordBlockInfo:(e,t={})=>cp(t,e)},satflow:{health:e=>up(e),collectionFloors:(e,t={})=>dp(t,e),collectionStats:(e,t={})=>pp(t,e),item:(e,t={})=>mp(t,e),walletContents:(e,t={})=>Ho(t,e),floorListings:(e,t={})=>fp(t,e),preparePurchase:(e,t={})=>gp(t,e),prepareList:(e,t={})=>jo(t,e)},jupiter:{health:e=>kp(e),venues:(e,t={})=>Ep(t,e),quote:(e,t={})=>Wo(t,e),prepare:(e,t={})=>Ap(t,e)},defillama:{health:e=>_p(e),prices:(e,t={})=>Me(t.coins||[],e),pricesBySymbol:(e,t={})=>Np(t.symbols,e),protocols:e=>Go(e),yields:(e,t={})=>Pp(t,e),stablecoins:(e,t={})=>Tp(t,e),dexVolumes:(e,t={})=>Cp(t,e)},lifi:{health:e=>Dp(e),quote:(e,t={})=>gt(t,e),prepare:(e,t={})=>Fp(t,e),chains:e=>qp(e)},dexscreener:{health:e=>Qu(e),token:(e,t={})=>qt(t.address||t.tokenAddress,e),search:(e,t={})=>pr(t.q||t.query,e),pair:(e,t={})=>Ju(t.chainId,t.pairAddress,e)},"uniswap-v3":{health:(e,t={})=>pd({...e,chainId:t.chainId??8453}),quote:(e,t={})=>pt(t,e),prepare:(e,t={})=>dd(t,e),quotePath:(e,t={})=>ud(t,e),ethUsdc:(e,t={})=>na(t,e),chains:()=>md()},"uniswap-v4":{health:(e,t={})=>wd({...e,chainId:t.chainId??8453}),quote:(e,t={})=>Io(t,e),chains:()=>bd()},aerodrome:{health:(e,t={})=>Yp({...e,chainId:t.chainId??8453}),quote:(e,t={})=>Qo(t,e),prepare:(e,t={})=>Kp(t,e),chains:()=>Xp()},zerox:{health:e=>em(e),price:(e,t={})=>$a(t,e),quote:(e,t={})=>jt(t,e),prepare:(e,t={})=>tm(t,e)},across:{health:e=>La(e),suggestedFees:(e,t={})=>Zo(t,e)},hop:{health:e=>Ma(e),quote:(e,t={})=>ei(t,e)},relay:{health:e=>Ba(e),quote:(e,t={})=>Ar(t,e),prepare:(e,t={})=>Ua(t,e)},cowswap:{health:e=>um(e),quote:(e,t={})=>bt(t,e),prepareOrder:(e,t={})=>dm(t,e),order:(e,t={})=>mm(t,e),status:(e,t={})=>pm(t,e),chains:()=>fm()},oneinch:{health:e=>gm(e),quote:(e,t={})=>Pr(t,e),prepare:(e,t={})=>ym(t,e),approveSpender:(e,t={})=>Va(t,e)},"hl-ws":{health:e=>bm(e),allMids:e=>wm(e),l2Book:(e,t={})=>xm(t.coin,e),snapshot:(e,t={})=>Tr(t.subscription||t,e)},"poly-ws":{health:(e,t={})=>Sm({...e,assetId:t.assetId}),book:(e,t={})=>vm(t.assetId||t.tokenId,e),snapshot:(e,t={})=>oi(t.assetIds||t.assets_ids||[t.assetId],e)},"opensea-nft":{health:e=>Rm(e),collection:(e,t={})=>Cr(t.slug,e),floor:(e,t={})=>$m(t.slug,e),bestListings:(e,t={})=>Or(t,e),accountNfts:(e,t={})=>Nr(t,e),accountPnl:(e,t={})=>ci(t,e),prepareBuy:(e,t={})=>Qa(t,e),prepareSweep:(e,t={})=>Ja(t,e),prepareMint:(e,t={})=>Za(t,e),prepareList:(e,t={})=>$r(t,e),prepareCancel:(e,t={})=>ec(t,e)},"hl-outcome":{list:e=>kf(e),prepareOrder:(e,t={})=>Af(t,e),prepareCancel:(e,t={})=>If(t,e)},"protocol-templates":{health:()=>({ok:!0,templates:ki().map(e=>e.id),nativeTemplates:Ac().map(e=>e.id),families:["evm","solana","bitcoin"],firmAudit:!1}),list:()=>ki(),listNative:()=>Ac(),gate:(e,t={})=>xc(t.templateId||t.id,e),prepareDeploy:(e,t={})=>Qf(t,e),buildNative:(e,t={})=>ih(t)},"poly-clob":{prepareOrder:(e,t={})=>Of(t||{})},"hl-perps":{health:e=>uc(e),assetInfo:(e,t={})=>Wt(t,e),prepareOrder:(e,t={})=>Dr(t,e),prepareCancel:(e,t={})=>yi(t,e),prepareLeverage:(e,t={})=>Sf(t,e),prepareIsolatedMargin:(e,t={})=>vf(t,e),prepareBracket:(e,t={})=>Ef(t,e),prepareBuilderApproval:(e,t={})=>xf(t,e)},"hl-markets":{health:e=>uc(e),markets:(e,t={})=>pi(t,e),leaderboards:(e,t={})=>cf(t,e),coin:(e,t={})=>lf(t,e),spot:(e,t={})=>uf(t,e)},"magiceden-sol":{health:e=>Gm(e),stats:(e,t={})=>nc(t,e),listings:(e,t={})=>Ym(t,e),tokenListings:(e,t={})=>Xm(t,e),prepareBuy:(e,t={})=>Qm(t,e),prepareList:(e,t={})=>ui(t,e),prepareMint:(e,t={})=>Jm(t,e)},"hl-staking":{health:e=>ef(e),validators:e=>ic(e),delegatorSummary:(e,t={})=>sc(t,e),delegations:(e,t={})=>ac(t,e),rewards:(e,t={})=>tf(t,e),history:(e,t={})=>nf(t,e),preflight:(e,t={})=>af(t,e),prepareStakeDeposit:(e,t={})=>rf(t,e),prepareStakeWithdraw:(e,t={})=>of(t,e),prepareDelegate:(e,t={})=>sf(t,e)},"hyperevm-dex":{health:e=>jm(e),search:(e,t={})=>Vm(t.q||t.query||"HYPE",e),token:(e,t={})=>zm(t.address||t.tokenAddress,e)},geckoterminal:{health:e=>lh(e),networks:(e,t={})=>Ic(t,e),pool:(e,t={})=>sh(t,e),token:(e,t={})=>ah(t,e),ohlcv:(e,t={})=>ch(t,e)},curve:{health:e=>vh(e),openapi:e=>Sh(e),pools:(e,t={})=>Pc(t,e),quote:(e,t={})=>Tc(t,e),prepare:(e,t={})=>Eh(t,e)},gmx:{health:e=>$h(e),tickers:(e,t={})=>Ci(t,e),markets:(e,t={})=>Oh(t,e),marketsInfo:(e,t={})=>Nc(t,e),tokens:(e,t={})=>Rh(t,e),prepareOrder:(e,t={})=>Uh(t,e),positions:(e,t={})=>Lh(t,e),orderStatus:(e,t={})=>Mh(t,e),verifyOrder:(e,t={})=>Bh(t,e)},morpho:{health:e=>Hh(e),markets:(e,t={})=>qh(t,e),vaults:(e,t={})=>$c(t,e),prepareVault:(e,t={})=>jh(t,e)},balancer:{health:e=>Qh(e),pools:(e,t={})=>Xh(t,e),quote:(e,t={})=>Bc(t,e),prepare:(e,t={})=>Jh(t,e)},pendle:{health:e=>e0(e),markets:(e,t={})=>Dc(t,e),quote:(e,t={})=>t0(t,e),prepare:(e,t={})=>Fc(t,e)},odos:{health:e=>i0(e),chains:e=>Hc(e),quote:(e,t={})=>r0(t,e),prepare:(e,t={})=>o0(t,e)},blockscout:{health:e=>m0(e),stats:(e,t={})=>zc(t,e),address:(e,t={})=>l0(t,e),token:(e,t={})=>u0(t,e)},paraswap:{health:e=>J0(e),tokens:(e,t={})=>ol(t,e),price:(e,t={})=>It(t,e),quote:(e,t={})=>It(t,e),prepare:(e,t={})=>Q0(t,e)},rfq:{health:e=>hg(e),intent:(e,t={})=>mg(t,e),quote:(e,t={})=>fg(t,e)},"polygon-staking":{health:e=>jg(e),validators:(e,t={})=>qg(t,e),validatorDetail:(e,t={})=>Hg(t,e)},"aave-v3":{health:e=>Gg(e),markets:(e,t={})=>Vg(t,e),marketReserves:(e,t={})=>zg(t,e),chains:e=>Wg(e)},"babylon-staking":{health:e=>Yg(e),stats:e=>Xg(e),finalityProviders:e=>Qg(e),delegations:(e,t={})=>Jg(t,e)},"bisq-markets":{health:e=>ey(e),markets:e=>ty(e),ticker:(e,t={})=>ny(t,e),trades:(e,t={})=>ry(t,e)},"bob-rootstock":{health:(e,t={})=>iy(t.chainId,e),stats:(e,t={})=>xl(t,e),addressInfo:(e,t={})=>sy(t,e),tokenBalances:(e,t={})=>ay(t,e)},"braiins-insights":{health:e=>cy(e),priceStats:e=>ly(e),poolStats:e=>uy(e)},"cow-protocol":{health:e=>by(e),auction:e=>hy(e),openOrders:(e,t={})=>gy(t,e),recentTrades:(e,t={})=>yy(t,e)},"hiro-stacks":{health:e=>wy(e),networkInfo:e=>xy(e),stackingInfo:e=>Sy(e),poxCycles:e=>vy(e),blocks:(e,t={})=>Ey(t,e)},"jito-mev":{health:e=>Iy(e),recentBundles:(e,t={})=>_y(t,e),tipFloor:e=>Py(e)},"kamino-strategies":{health:e=>Cy(e),strategies:(e,t={})=>Ny(t,e),strategyMetrics:(e,t={})=>Oy(t,e)},"liquid-esplora":{health:e=>My(e),tipHeight:e=>By(e),addressInfo:(e,t={})=>Uy(t,e),assetInfo:(e,t={})=>Dy(t,e)},"magiceden-ordinals":{health:e=>Hy(e),collectionStat:(e,t={})=>jy(t,e)},"mempool-lightning":{health:e=>zy(e),statistics:e=>Wy(e),nodeRankings:(e,t={})=>Gy(t,e),nodeCountries:e=>Ky(e)},"mempool-mining":{health:e=>Qy(e),difficulty:e=>Jy(e),poolShare:(e,t={})=>Zy(t,e),hashrate:(e,t={})=>eb(t,e),rewardStats:(e,t={})=>tb(t,e)},"meteora-dlmm":{health:e=>ob(e),pools:(e,t={})=>ib(t,e),poolSearch:(e,t={})=>sb(t,e)},"ordinals-runes":{health:e=>cb(e),blockHeight:e=>lb(e),blockInfo:(e,t={})=>ub(t,e),satInfo:(e,t={})=>db(t,e),runeInfo:(e,t={})=>pb(t,e)},"pyth-price-feeds":{health:e=>hb(e),latestPrice:(e,t={})=>gb(t,e),latestPrices:(e,t={})=>yb(t,e),feedDirectory:e=>bb(e)},"relayscan-mev":{health:e=>Eb(e),overview:(e,t={})=>Bl(t,e),builderProfit:(e,t={})=>Sb(t,e),dailyStats:(e,t={})=>vb(t,e)},"sanctum-lst":{health:e=>Ab(e),lstList:e=>Dl(e),apyAll:e=>Ib(e),apyIndividual:(e,t={})=>_b(t,e)},"solend-lending":{health:e=>Nb(e),markets:e=>ql(e),reserves:(e,t={})=>Ob(t,e)},"execution-strategies":{health:()=>$b(),plan:(e,t={})=>Rb(t)},"across-bridge":{health:e=>gg(e),pools:(e,t={})=>yg(t,e),suggestedFees:(e,t={})=>bg(t,e)},"beefy-yields":{health:e=>wg(e),apy:(e,t={})=>xg(t,e),apyBreakdown:e=>Sg(e)},"birdeye-tokens":{health:e=>Eg(e),tokenList:(e,t={})=>kg(t,e)},"celestia-da":{health:e=>Ag(e),stats:e=>Ig(e),blockStats:(e,t={})=>_g(t,e)},"das-assets":{health:e=>Pg(e),assetsByOwner:(e,t={})=>Tg(t,e),searchAssets:(e,t={})=>Cg(t,e),assetProof:(e,t={})=>Ng(t,e)},"l2beat-tvl":{health:e=>Og(e),tvl:(e,t={})=>Rg(t,e),activity:(e,t={})=>$g(t,e)},"spark-lend":{health:e=>Lg(e),markets:(e,t={})=>Mg(t,e)},"symbiotic-restaking":{health:e=>Bg(e),vaults:(e,t={})=>Ug(t,e),vaultDetail:(e,t={})=>Dg(t,e)}},Lb=new Set(["prepareBuilderApproval","prepareBracket","prepareIsolatedMargin","prepareLeverage","prepareCancel","prepareOrder","preparePurchase","prepareList","prepareSell","prepareBuy","prepareMint","prepare","prepareStakeDeposit","prepareStakeWithdraw","prepareDelegate","prepareSwap","prepareTransfer","createOrder","cancelOrder"]),Mb=new Set(["hl-exec"]);function VT(e){return Mb.has(String(e||""))}function zT(e,t,n={}){let r=String(t||""),o=`${e}.${r}`;if(Mb.has(e))throw new Error(`data plane forbidden execution provider: ${e}`);let i=wr().find(s=>s.id===e);if(/sign|execute|broadcast|submit|send|write|place/i.test(r)&&!Lb.has(r))throw new Error(`data plane forbidden op: ${o}`);if(i&&Array.isArray(i.ops)&&i.ops.length>0&&!i.ops.includes(r))throw new Error(`data plane: provider ${e} does not support op ${r}`);if(Lb.has(r)&&n&&typeof n=="object"&&Object.defineProperty(n,"__oracleStateCreating",{value:!0,enumerable:!1,configurable:!0}),e==="evm-rpc"&&r==="call"){let s=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(s))throw new Error(`data plane allows only read-only JSON-RPC methods through evm-rpc.call: ${s||"<missing>"}`)}}async function E(e,t,n={},r={}){if(VT(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.`);zT(e,t,n);let o=To(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=jT[e];if(!i||typeof i[t]!="function")throw new Error(`No client implementation for ${e}.${t}`);return i[t](r,n)}async function Bb({providers:e,fetchImpl:t,timeoutMs:n,includeRpc:r,includeWs:o,concurrency:i,healthCall:s}={}){let a=e||wr().map(d=>d.id);!o&&!e&&(a=a.filter(d=>d!=="hl-ws"&&d!=="poly-ws"));let c={fetchImpl:t,timeoutMs:n??8e3},l=typeof s=="function"?s:(d,p,m)=>E(d,"health",p,m),u={};return await ln(a,i??8,async d=>{if(!To(d)){u[d]={ok:!1,ms:0,reason:"transport",error:"unknown provider"};return}let p=d==="evm-rpc"?{chainId:1}:{},m=await ie(()=>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 Ub(){return wr().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 WT={catalog:Ub,health:Bb,call:E,hl:{health:e=>E("hl-info","health",{},e),allMids:e=>E("hl-info","allMids",{},e),l2Book:(e,t)=>E("hl-info","l2Book",{coin:e},t),outcomeMeta:e=>E("hl-info","outcomeMeta",{},e),clearinghouse:(e,t)=>E("hl-info","clearinghouse",{user:e},t),userFills:(e,t)=>E("hl-info","userFills",{user:e},t),meta:e=>E("hl-info","meta",{},e),metaAndAssetCtxs:e=>E("hl-info","metaAndAssetCtxs",{},e),candleSnapshot:(e,t)=>E("hl-info","candleSnapshot",e||{},t),openOrders:(e,t)=>E("hl-info","openOrders",{user:e},t),userState:(e,t)=>E("hl-info","userState",{user:e},t),spotMeta:e=>E("hl-info","spotMeta",{},e),vaults:{health:e=>E("hl-vaults","health",{},e),summaries:(e,t)=>E("hl-vaults","summaries",e||{},t),details:(e,t)=>E("hl-vaults","details",e||{},t),mine:(e,t)=>E("hl-vaults","userEquities",{user:e},t),track:(e,t)=>E("hl-vaults","tracker",e||{},t)},staking:{health:e=>E("hl-staking","health",{},e),validators:e=>E("hl-staking","validators",{},e),summary:(e,t)=>E("hl-staking","delegatorSummary",{user:e},t),delegations:(e,t)=>E("hl-staking","delegations",{user:e},t),rewards:(e,t)=>E("hl-staking","rewards",{user:e},t),history:(e,t)=>E("hl-staking","history",{user:e},t),preflight:(e,t)=>E("hl-staking","preflight",{user:e},t),prepareStake:(e,t)=>E("hl-staking","prepareStakeDeposit",e||{},t),prepareUnstake:(e,t)=>E("hl-staking","prepareStakeWithdraw",e||{},t),prepareDelegate:(e,t)=>E("hl-staking","prepareDelegate",e||{},t)}},poly:{health:e=>E("poly-public","health",{},e),time:e=>E("poly-public","time",{},e),markets:(e,t)=>E("poly-public","markets",e||{},t),book:(e,t)=>E("poly-public","book",{tokenId:e},t),midpoint:(e,t)=>E("poly-public","midpoint",{tokenId:e},t),spread:(e,t)=>E("poly-public","spread",{tokenId:e},t),price:(e,t,n)=>E("poly-public","price",{tokenId:e,side:t},n),events:(e,t)=>E("poly-public","events",e||{},t)},polyClob:{prepareOrder:(e,t)=>E("poly-clob","prepareOrder",e||{},t)},rpc:{health:(e,t)=>E("evm-rpc","health",{chainId:e},t),healthAll:(e,t)=>E("evm-rpc","healthAll",e||{},t),blockNumber:(e,t)=>E("evm-rpc","blockNumber",{chainId:e},t),getBalance:(e,t,n)=>E("evm-rpc","getBalance",{chainId:e,address:t},n),call:(e,t,n,r)=>E("evm-rpc","call",{chainId:e,method:t,params:n},r)},evmSniper:{health:e=>E("evm-token-sniper","health",{},e),scan:(e,t)=>E("evm-token-sniper","scan",e||{},t)},portfolio:{balance:(e,t)=>E("portfolio","balances",e||{},t),snapshot:(e,t)=>E("portfolio","snapshot",e||{},t),history:(e,t)=>E("portfolio","history",e||{},t),valueGraph:(e,t)=>E("portfolio","valueGraph",e||{},t)},nft:{inventory:(e,t)=>E("nft-portfolio","inventory",e||{},t),gallery:(e,t)=>E("nft-portfolio","gallery",e||{},t),pnl:(e,t)=>E("nft-portfolio","pnl",e||{},t),prepareList:(e,t)=>E("nft-portfolio","prepareList",e||{},t),traitSnipe:(e,t)=>E("nft-portfolio","traitSnipe",e||{},t),floor:(e,t)=>E("opensea-nft","floor",{slug:e},t),collection:(e,t)=>E("opensea-nft","collection",{slug:e},t),bestListings:(e,t)=>E("opensea-nft","bestListings",e||{},t),prepareBuy:(e,t)=>E("opensea-nft","prepareBuy",e||{},t),prepareSweep:(e,t)=>E("opensea-nft","prepareSweep",e||{},t),prepareMint:(e,t)=>E("opensea-nft","prepareMint",e||{},t),prepareCancel:(e,t)=>E("opensea-nft","prepareCancel",e||{},t)},solana:{health:e=>E("solana-rpc","health",{},e),latestBlockhash:(e,t)=>E("solana-rpc","latestBlockhash",e||{},t),balance:(e,t)=>E("solana-rpc","getBalance",{address:e},t),tokenAccounts:(e,t)=>E("solana-rpc","tokenAccounts",e||{},t),simulate:(e,t)=>E("solana-rpc","simulate",e||{},t),jupiterQuote:(e,t)=>E("jupiter","quote",e||{},t),jupiterPrepare:(e,t)=>E("jupiter","prepare",e||{},t),nftStats:(e,t)=>E("magiceden-sol","stats",e||{},t),nftListings:(e,t)=>E("magiceden-sol","listings",e||{},t),nftTokenListings:(e,t)=>E("magiceden-sol","tokenListings",e||{},t),nftPrepareBuy:(e,t)=>E("magiceden-sol","prepareBuy",e||{},t),nftPrepareList:(e,t)=>E("magiceden-sol","prepareList",e||{},t),nftPrepareMint:(e,t)=>E("magiceden-sol","prepareMint",e||{},t)},bitcoin:{health:e=>E("bitcoin-esplora","health",{},e),tipHeight:e=>E("bitcoin-esplora","tipHeight",{},e),fees:e=>E("bitcoin-esplora","fees",{},e),address:(e,t)=>E("bitcoin-esplora","address",{address:e},t),utxos:(e,t)=>E("bitcoin-esplora","utxos",{address:e},t),tx:(e,t)=>E("bitcoin-esplora","tx",{txid:e},t),decode:(e,t)=>E("bitcoin-esplora","decode",e||{},t),metaHealth:e=>E("bitcoin-meta","health",{},e),runeBalances:(e,t)=>E("bitcoin-meta","runeBalances",{address:e},t),inscriptions:(e,t)=>E("bitcoin-meta","inscriptions",{address:e},t),satflowHealth:e=>E("satflow","health",{},e),satflowFloors:(e,t)=>E("satflow","collectionFloors",e||{},t),satflowWallet:(e,t)=>E("satflow","walletContents",{address:e},t)},prices:{health:e=>E("defillama","health",{},e),current:(e,t)=>E("defillama","prices",{coins:e},t),bySymbol:(e,t)=>E("defillama","pricesBySymbol",{symbols:e},t),protocols:e=>E("defillama","protocols",{},e)},lifi:{health:e=>E("lifi","health",{},e),quote:(e,t)=>E("lifi","quote",e||{},t),chains:e=>E("lifi","chains",{},e)},dex:{health:e=>E("dexscreener","health",{},e),token:(e,t)=>E("dexscreener","token",{address:e},t),search:(e,t)=>E("dexscreener","search",{q:e},t),pair:(e,t,n)=>E("dexscreener","pair",{chainId:e,pairAddress:t},n)},uni:{health:(e,t)=>E("uniswap-v3","health",e||{},t),quote:(e,t)=>E("uniswap-v3","quote",e||{},t),quotePath:(e,t)=>E("uniswap-v3","quotePath",e||{},t),ethUsdc:(e,t)=>E("uniswap-v3","ethUsdc",e||{},t),chains:e=>E("uniswap-v3","chains",{},e)},univ4:{health:(e,t)=>E("uniswap-v4","health",e||{},t),quote:(e,t)=>E("uniswap-v4","quote",e||{},t),chains:e=>E("uniswap-v4","chains",{},e)},bridges:{across:(e,t)=>E("across","suggestedFees",e||{},t),hop:(e,t)=>E("hop","quote",e||{},t),relay:(e,t)=>E("relay","quote",e||{},t)},cow:{quote:(e,t)=>E("cowswap","quote",e||{},t)},hlWs:{allMids:e=>E("hl-ws","allMids",{},e),l2Book:(e,t)=>E("hl-ws","l2Book",{coin:e},t)},polyWs:{book:(e,t)=>E("poly-ws","book",{assetId:e},t)}};Vs();var De=Object.freeze({FULL:"FULL",NO_GAS:"NO_GAS",FAILED:"FAILED"}),Fb={1:"coingecko:ethereum",10:"coingecko:ethereum",56:"coingecko:binancecoin",137:"coingecko:matic-network",8453:"coingecko:ethereum",42161:"coingecko:ethereum",43114:"coingecko:avalanche-2",999:"coingecko:ethereum"},ro=e=>{try{return e==null||e===""?null:BigInt(String(e).split(".")[0])}catch{return null}};function Db(e){let{source:t,amountOut:n,minOut:r=null,gasUsd:o=null,feeUsd:i=null,oracleFeeBps:s=0,estimatedGas:a=null,liquidityUsd:c=null,error:l=null,executionReady:u=!1,meta:d={}}=e||{};if(l||n==null)return{source:t,quality:De.FAILED,amountOut:null,error:l||"no amountOut returned"};let p=ro(n);if(p==null||p<=0n)return{source:t,quality:De.FAILED,amountOut:null,error:"non-positive amountOut"};let m=Number(s);return{source:t,quality:o==null?De.NO_GAS:De.FULL,amountOut:p.toString(),minOut:ro(r)?.toString()??null,gasUsd:o,feeUsd:i,oracleFeeBps:Number.isFinite(m)&&m>0?Math.floor(m):0,estimatedGas:a==null?null:String(a),liquidityUsd:c==null?null:Number(c),executionReady:u,meta:d}}async function qb(e,t,{divisor:n=1000n}={}){let r=ro(t);if(r==null||r<=0n)return null;let o=r/n>0n?r/n:1n;if(o>=r)return null;let i,s;try{[i,s]=await Promise.all([e(o),e(r)])}catch{return null}let a=ro(i),c=ro(s);if(a==null||c==null||a<=0n)return null;let l=Number(a)/Number(o),u=Number(c)/Number(r);return!Number.isFinite(l)||!Number.isFinite(u)||l<=0?null:{impactPct:(1-u/l)*100,probeAmountIn:o.toString(),probeAmountOut:a.toString(),fullAmountOut:c.toString()}}function Hb(e,t,{maxImpactPct:n=25}={}){let r=[],o=[],i=(e.routes??[]).filter(a=>{let c=t?.[a.source];return c?c.impactPct>n?(r.push({source:a.source,impactPct:Number(c.impactPct.toFixed(2)),reason:`price impact ${c.impactPct.toFixed(1)}% exceeds ${n}% ceiling -- the venue cannot absorb this size near the quoted price`}),!1):!0:(o.push(a.source),!0)}),s=[...e.warnings??[]];return r.length&&s.push(`dropped ${r.length} route(s) on price impact: `+r.map(a=>`${a.source} (${a.impactPct}%)`).join(", ")),o.length&&s.push(`price impact NOT measured for: ${o.join(", ")}. These are unproven against thin liquidity, not proven safe.`),{...e,routes:i,best:i[0]??null,impactRejected:r,impactUnmeasured:o,warnings:s}}function zl(e,{destPriceUsd:t=null,destDecimals:n=null,liquidityFirst:r=!0,liquidityBandBps:o=50}={}){let i=e.filter(y=>y.quality!==De.FAILED),s=e.filter(y=>y.quality===De.FAILED),a=t!=null&&t>0&&n!=null&&n>=0,c=i.map(y=>{let S=BigInt(y.amountOut),w=0n,x=!1,k=BigInt(y.oracleFeeBps??0),C=k>0n?S*k/10000n:0n;if(a){let A=(y.gasUsd??0)+(y.feeUsd??0);if(A>0){let v=A/t*10**n;Number.isFinite(v)&&v>=0&&(w=BigInt(Math.floor(v)),x=!0)}else y.gasUsd===0&&(x=!0)}let P=w+C,I=S>P?S-P:0n;return{...y,grossOut:S.toString(),netOut:I.toString(),costInDest:w.toString(),oracleFeeInDest:C.toString(),costAccounted:x}}),l=Number(o)>0?Number(o):0,u=c.reduce((y,S)=>BigInt(S.netOut)>y?BigInt(S.netOut):y,0n),d=y=>u>0n?Number((u-BigInt(y))*10000n/u):0,p=[],m=c.slice().sort((y,S)=>BigInt(S.netOut)>BigInt(y.netOut)?1:-1)[0]??null;c.sort((y,S)=>{let w=d(y.netOut)<=l?0:1,x=d(S.netOut)<=l?0:1;if(r&&l>0&&w!==x)return w-x;if(r&&l>0){let k=y.liquidityUsd??-1,C=S.liquidityUsd??-1;if(k!==C)return C-k}return BigInt(S.netOut)>BigInt(y.netOut)?1:-1}),r&&l>0&&m&&c[0]&&c[0].source!==m.source&&p.push(`liquidity-first: chose ${c[0].source} (liquidity $${c[0].liquidityUsd??"unknown"}) over best-price ${m.source} within ${l} bps`);let f=c.filter(y=>!y.costAccounted).map(y=>y.source);a?f.length&&p.push(`gas not reported by: ${f.join(", ")}. These are ranked on gross output and may be overstated relative to gas-measured routes.`):p.push("destination price/decimals unavailable: ranked on GROSS output. Gas is not included, so a cheap-looking route may cost more to execute.");let h=null,g=null;if(c.length>=2&&c[0].costAccounted&&c[1].costAccounted){let y=BigInt(c[0].netOut),S=BigInt(c[1].netOut);S>0n&&(h=Number((y-S)*10000n/S),g=`${c[0].source} vs ${c[1].source}`)}return{best:c[0]??null,routes:c,failed:s,improvementBps:h,spreadBasis:g,rankedOn:a?"net-of-cost":"gross",warnings:p}}async function es(e,{timeoutMs:t=12e3}={}){let n=(o,i)=>Promise.race([o,new Promise((s,a)=>setTimeout(()=>a(new Error(`${i}: timeout`)),t))]);return(await Promise.allSettled(e.map(o=>n(Promise.resolve().then(o.run),o.source)))).map((o,i)=>{let s=e[i].source;return o.status==="rejected"?Db({source:s,error:String(o.reason?.message||o.reason)}):Db({source:s,...o.value})})}var Je=e=>{let t=Number(e);return Number.isFinite(t)?t:null};function ts(e){if(!Array.isArray(e))return null;let t=0,n=!1;for(let r of e){let o=Je(r?.amountUSD);o!=null&&(t+=o,n=!0)}return n?t:null}async function Vb(e,t={}){let n=Fb[Number(e)];if(!n)return null;try{let r=await Me([n],t);return Je(r?.coins?.[n]?.price)}catch{return null}}var _t=e=>String(e??"").toLowerCase().replace(/[^a-z0-9]/g,""),jb=Object.freeze({across:["across"],relay:["relaychain","relay"],lifi:["jumper-(li.fi-powered)","lifi"],stargate:["stargate-v2","stargate-v1","stargate"],hop:["hop-protocol","hop"],debridge:["debridge"],synapse:["synapse"],connext:["connext"],cbridge:["celer-bridge","celer-cbridge","cbridge"],celer:["celer-bridge","celer-cbridge","cbridge"],squid:["squid"],symbiosis:["symbiosis"],wormhole:["wormhole"],mayan:["mayan"],allbridge:["allbridge"],thorchain:["thorchain"]});async function GT(e={}){try{let t=await Go({...e,baseUrl:e.defillamaApiBaseUrl,timeoutMs:e.defillamaTimeoutMs??Math.min(Number(e.timeoutMs??5e3),5e3)});return Array.isArray(t)?t:[]}catch{return[]}}function KT(e,t={}){let n=_t(t.tool||t.provider||t.bridge||t.protocol),r=[];return e==="lifi"&&n&&n!=="lifi"&&r.push(...jb[n]||[n]),r.push(...jb[_t(e)]||[e]),r}function YT(e,t,n={}){let r=Array.isArray(e)?e:[],o=KT(t,n).map(_t).filter(Boolean);for(let i of o){let s=r.find(c=>_t(c?.slug)===i||_t(c?.name)===i),a=Je(s?.tvl);if(a!=null)return{liquidityUsd:a,protocol:s?.name??s?.slug??i}}for(let i of o){let s=r.find(c=>{let l=_t(c?.category);return!l.includes("bridge")&&!l.includes("crosschain")?!1:_t(c?.slug).includes(i)||_t(c?.name).includes(i)}),a=Je(s?.tvl);if(a!=null)return{liquidityUsd:a,protocol:s?.name??s?.slug??i}}return null}function Wl({chainId:e,tokenIn:t,tokenOut:n,amountIn:r,taker:o,slippageBps:i,decimalsIn:s,decimalsOut:a,nativePriceUsd:c=null,destDecimalsPromise:l=null,opts:u={}}){let d=[];return d.push({source:"lifi",run:async()=>{let p=await gt({fromChain:e,toChain:e,fromToken:t,toToken:n,fromAmount:r},u),m=p?.estimate??p?.[0]?.estimate;return{amountOut:m?.toAmount,minOut:m?.toAmountMin,gasUsd:ts(m?.gasCosts),feeUsd:ts(m?.feeCosts),oracleFeeBps:p?.oracleFee?.applies?p.oracleFee.bps:0,meta:{tool:p?.tool??p?.toolDetails?.name,oracleFee:p?.oracleFee??null}}}}),s!=null&&d.push({source:"paraswap",run:async()=>{let p=a??(await Promise.resolve(l))?.decimals;if(p==null)throw new Error("paraswap needs destination decimals; none supplied or resolvable");let m=await It({chainId:e,srcToken:t,destToken:n,amount:r,srcDecimals:s,destDecimals:p},u),f=m?.priceRoute;return{amountOut:f?.destAmount,gasUsd:Je(f?.gasCostUSD),oracleFeeBps:m?.oracleFee?.applies?m.oracleFee.bps:0,meta:{bestRoute:f?.bestRoute?.[0]?.swaps?.[0]?.swapExchanges?.[0]?.exchange,oracleFee:m?.oracleFee??null}}}}),process.env.ZEROX_API_KEY&&d.push({source:"0x",run:async()=>{let p=await jt({chainId:e,sellToken:t,buyToken:n,sellAmount:r,taker:o},u),m=null,f=p?.totalNetworkFee,h=await Promise.resolve(c);return f!=null&&h&&(m=Number(f)/1e18*h),{amountOut:p?.buyAmount,minOut:p?.minBuyAmount,gasUsd:m,meta:{source:p?.route?.fills?.[0]?.source}}}}),process.env.ONEINCH_API_KEY&&d.push({source:"1inch",run:async()=>{let p=await Pr({chainId:e,src:t,dst:n,amount:r},u),m=null;return p?.gas!=null&&c&&(m=null),{amountOut:p?.dstAmount,gasUsd:m,meta:{gasUnits:p?.gas}}}}),d.push({source:"cow",run:async()=>{let p=await bt({chainId:e,sellToken:t,buyToken:n,sellAmountBeforeFee:String(r),from:o},u),m=p?.quote??p,f=m?.feeAmount;return{amountOut:m?.buyAmount,gasUsd:0,meta:{intent:!0,feeAmountInSellToken:f,settlement:"solver-executed"}}}}),pe[Number(e)]&&d.push({source:"uniswap-v3",run:async()=>{let p=await pt({chainId:e,tokenIn:t,tokenOut:n,amountIn:r},u);return{amountOut:p?.amountOut,minOut:p?.minOut??p?.amountOutMinimum??null,gasUsd:null,liquidityUsd:p?.liquidityUsd??null,meta:{onchain:!0,fee:p?.fee,gasUnits:p?.gasEstimate,quoter:p?.quoter}}}}),Ge[Number(e)]&&d.push({source:"uniswap-v4",run:async()=>{let p=await Io({chainId:e,tokenIn:t,tokenOut:n,amountIn:r,recipient:o,slippageBps:i},u);return{amountOut:p?.amountOut,minOut:p?.minOut??p?.amountOutMinimum??null,gasUsd:null,liquidityUsd:p?.liquidityUsd??null,meta:{onchain:!0,venue:"uniswap-v4",fee:p?.fee,tickSpacing:p?.tickSpacing,poolId:p?.poolId,hooks:p?.hooks,gasUnits:p?.gasEstimate,quoter:p?.quoter,poolManager:p?.poolManager,prepareReady:p?.prepareReady===!0,executionReady:!1}}}}),d}function zb({fromChainId:e,toChainId:t,tokenIn:n,tokenOut:r,amountIn:o,taker:i,opts:s={}}){let a=[],c=null,l=async(u,d={})=>(c||=GT(s),YT(await c,u,d));return a.push({source:"lifi",run:async()=>{let u=await gt({fromChain:e,toChain:t,fromToken:n,toToken:r,fromAmount:o},s),d=u?.estimate??u?.[0]?.estimate,p={tool:u?.tool??u?.toolDetails?.name,durationSeconds:Je(d?.executionDuration)},m=await l("lifi",p);return{amountOut:d?.toAmount,minOut:d?.toAmountMin,gasUsd:ts(d?.gasCosts),feeUsd:ts(d?.feeCosts),oracleFeeBps:u?.oracleFee?.applies?u.oracleFee.bps:0,liquidityUsd:m?.liquidityUsd??null,meta:{...p,liquidityProtocol:m?.protocol,oracleFee:u?.oracleFee??null}}}}),a.push({source:"relay",run:async()=>{let{relayQuote:u}=await Promise.resolve().then(()=>(ni(),ti)),p=(await u({user:i,originChainId:e,destinationChainId:t,originCurrency:n,destinationCurrency:r,amount:String(o)},s))?.details,m={durationSeconds:Je(p?.timeEstimate),rate:p?.rate},f=await l("relay",m);return{amountOut:p?.currencyOut?.amount,minOut:p?.currencyOut?.minimumAmount,gasUsd:Je(p?.totalImpact?.usd)!=null?Math.abs(Je(p.totalImpact.usd)):null,liquidityUsd:f?.liquidityUsd??null,meta:{...m,liquidityProtocol:f?.protocol}}}}),a.push({source:"across",run:async()=>{let{acrossSuggestedFees:u}=await Promise.resolve().then(()=>(ni(),ti)),d=await u({token:n,destinationToken:r,originChainId:e,destinationChainId:t,amount:String(o)},s),p=d?.totalRelayFee?.total,m=null;if(p!=null)try{let h=BigInt(String(o))-BigInt(String(p));h>0n&&(m=h.toString())}catch{}let f=await l("across");return{amountOut:m,gasUsd:null,liquidityUsd:f?.liquidityUsd??null,meta:{derivedFromFees:!0,durationSeconds:Je(d?.estimatedFillTimeSec),limits:d?.limits?{min:d.limits.minDeposit,max:d.limits.maxDeposit}:void 0,liquidityProtocol:f?.protocol}}}}),a}var XT={1:"ethereum",10:"optimism",56:"bsc",137:"polygon",8453:"base",42161:"arbitrum",43114:"avax"};async function Wb(e,t,n){let r=XT[Number(e)];if(!r)return{priceUsd:null,decimals:null};let o=`${r}:${t}`;try{let s=(await Me([o],n))?.coins?.[o],a=Number(s?.price),c=Number(s?.decimals);return{priceUsd:Number.isFinite(a)?a:null,decimals:Number.isFinite(c)?c:null}}catch{return{priceUsd:null,decimals:null}}}async function QT(e,t={}){let{chainId:n,tokenIn:r,tokenOut:o,amountIn:i}=e;if(n==null||!r||!o||i==null)throw new Error("bestSwapRoute requires chainId, tokenIn, tokenOut, amountIn");let s=Vb(n,t),a=Wb(n,o,t),c=Wl({...e,nativePriceUsd:s,decimalsOut:e.decimalsOut,destDecimalsPromise:a,opts:t}),[l,u]=await Promise.all([es(c,{timeoutMs:t.timeoutMs??12e3}),a]);s.catch(()=>{});let d=zl(l,{destPriceUsd:u.priceUsd,destDecimals:e.decimalsOut??u.decimals,liquidityBandBps:t.liquidityBandBps??50}),p=t.maxImpactPct===void 0?25:t.maxImpactPct;if(p!=null&&d.best){let m=d.best.source,h=await qb(async g=>{let y=Wl({...e,amountIn:g.toString(),nativePriceUsd:s,decimalsOut:e.decimalsOut,destDecimalsPromise:a,opts:t}).filter(w=>w.source===m);return y.length?(await es(y,{timeoutMs:t.timeoutMs??12e3}))?.[0]?.amountOut??null:null},i);if(h){let g=Hb(d,{[m]:h},{maxImpactPct:p});return{kind:"swap",chainId:n,tokenIn:r,tokenOut:o,amountIn:String(i),...g,sourcesTried:c.length,sourcesAnswered:l.filter(y=>y.quality!==De.FAILED).length,note:Gl(g,c.length),priceImpact:{[m]:Number(h.impactPct.toFixed(2))}}}}return{kind:"swap",chainId:n,tokenIn:r,tokenOut:o,amountIn:String(i),...d,sourcesTried:c.length,sourcesAnswered:l.filter(m=>m.quality!==De.FAILED).length,note:Gl(d,c.length)}}async function JT(e,t={}){let{fromChainId:n,toChainId:r,tokenIn:o,tokenOut:i,amountIn:s}=e;if(n==null||r==null||!o||!i||s==null)throw new Error("bestBridgeRoute requires fromChainId, toChainId, tokenIn, tokenOut, amountIn");if(Number(n)===Number(r))throw new Error("bestBridgeRoute is for cross-chain; use bestSwapRoute for same-chain");let a=Wb(r,i,t),c=zb({...e,opts:t}),[l,u]=await Promise.all([es(c,{timeoutMs:t.timeoutMs??15e3}),a]),d=zl(l,{destPriceUsd:u.priceUsd,destDecimals:e.decimalsOut??u.decimals,liquidityBandBps:t.liquidityBandBps??50}),p=d.routes.map(m=>({source:m.source,seconds:m.meta?.durationSeconds??null})).filter(m=>m.seconds!=null);return{kind:"bridge",fromChainId:n,toChainId:r,tokenIn:o,tokenOut:i,amountIn:String(s),...d,durations:p,sourcesTried:c.length,sourcesAnswered:l.filter(m=>m.quality!==De.FAILED).length,note:Gl(d,c.length)}}function ZT(e){let t=e?.meta?.oracleFee;return t?.applies?` \xB7 ${Lp(t)}`:""}function Gl(e,t){if(!e.best)return"no source returned a usable route";let n=e.routes.length,r=ZT(e.best);if(n===1)return`only 1 of ${t} sources answered, so this is the ONLY route, not a proven best one. Treat it as unbenchmarked.`+r;if(e.improvementBps!=null){let o=e.improvementBps,i=o/100;if(o<.01)return`best of ${n} routes, ranked on ${e.rankedOn}: effectively tied with the runner-up (${e.spreadBasis}), inside quote noise. Re-quote before you size up.`+r;let s=i>=.01?`${i.toFixed(2)}%`:`${o.toFixed(2)}bps`;return`best of ${n} routes, ranked on ${e.rankedOn}: ${s} better than the runner-up (${e.spreadBasis})`+r}return`best of ${n} routes, ranked on ${e.rankedOn}. No spread quoted: the top routes report cost differently, so the margin is not comparable.`+r}var m5=Object.freeze({mantissa:10000n,scale:0});function tn(e){if(!Number.isSafeInteger(e)||e<0||e>1e3)throw new RangeError("scale must be a safe integer from 0 through 1000")}function Ze(e,t){if(typeof e!="bigint")throw new TypeError("mantissa must be a bigint");return tn(t),Object.freeze({mantissa:e,scale:t})}function Pt(e,t="value"){if(e===null||typeof e!="object")throw new TypeError(`${t} must be a fixed point value`);if(typeof e.mantissa!="bigint")throw new TypeError(`${t}.mantissa must be a bigint`);tn(e.scale)}function ns(e){return tn(e),10n**BigInt(e)}function F(e){if(typeof e!="string"||!/^[+-]?\d+(?:\.\d+)?$/.test(e))throw new TypeError("value must be a plain decimal string");let t=e.startsWith("-"),n=e[0]==="-"||e[0]==="+"?e.slice(1):e,[r,o=""]=n.split("."),i=`${r}${o}`,s=BigInt(i)*(t?-1n:1n);return Ze(s,o.length)}function we(e,t){if(tn(t),typeof e=="bigint")return Ze(e,t);if(typeof e!="string"||!/^[+-]?\d+$/.test(e))throw new TypeError("value must be an integer string or bigint");return Ze(BigInt(e),t)}function Fe(e){Pt(e);let t=e.mantissa<0n,n=(t?-e.mantissa:e.mantissa).toString();if(e.scale===0)return`${t?"-":""}${n}`;let r=n.padStart(e.scale+1,"0"),o=r.length-e.scale;return`${t?"-":""}${r.slice(0,o)}.${r.slice(o)}`}function oo(e,t){return Pt(e),tn(t),t===e.scale?Ze(e.mantissa,e.scale):t>e.scale?Ze(e.mantissa*ns(t-e.scale),t):Ze(e.mantissa/ns(e.scale-t),t)}function Kl(e,t){Pt(e,"left"),Pt(t,"right");let n=Math.max(e.scale,t.scale);return[oo(e,n),oo(t,n),n]}function Tt(e,t){let[n,r,o]=Kl(e,t);return Ze(n.mantissa+r.mantissa,o)}function io(e,t){let[n,r,o]=Kl(e,t);return Ze(n.mantissa-r.mantissa,o)}function ke(e,t){Pt(e,"left"),Pt(t,"right");let n=e.scale+t.scale;return tn(n),Ze(e.mantissa*t.mantissa,n)}function qe(e,t,n=Math.max(e?.scale??0,t?.scale??0)){if(Pt(e,"left"),Pt(t,"right"),tn(n),t.mantissa===0n)throw new RangeError("division by zero");let r=e.mantissa*ns(t.scale+n),o=t.mantissa*ns(e.scale);return Ze(r/o,n)}function Ct(e,t){let[n,r]=Kl(e,t);return n.mantissa<r.mantissa?-1:n.mantissa>r.mantissa?1:0}import{readFileSync as eC,existsSync as tC}from"node:fs";import{fileURLToPath as nC}from"node:url";import{dirname as rC,join as Kb}from"node:path";var oC=Kb(rC(nC(import.meta.url)),"fixtures");function iC(){try{let e=xi("equities-fixtures",import.meta.url);if(e&&tC(e))return e}catch{}return oC}var sC=iC();var Yb=Object.freeze({venues:"venues.json",universe:"universe.json",oracles:"oracles.json",nyseHolidays:"nyse_holidays.json",dstTransitions:"dst_transitions.json",equityDexPools:"equity_dex_pools.json",rhPoolState:"rh_pool_state.json",solanaXstocks:"solana_xstocks.json",tonXstocks:"ton_xstocks.json",hip3L2Books:"hip3_l2books.json"});function aC(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function z(e,t){throw new TypeError(`Fixture fixtures/${e}: ${t}`)}function oe(e,t,n){aC(e)||z(t,`${n} must be an object`)}function G(e,t,n){(typeof e!="string"||e.length===0)&&z(t,`${n} must be a nonempty string`)}function et(e,t,n){Number.isSafeInteger(e)||z(t,`${n} must be a safe integer`)}function Nt(e,t,n){oe(e,t,n);for(let[r,o]of Object.entries(e))G(r,t,`${n} key`),oe(o,t,`${n}.${r}`)}function cC(e,t){oe(e,t,"root"),et(e.capturedAt,t,"capturedAt"),oe(e.venues,t,"venues");let n=[["hyperliquid_hip3","dexs"],["arcus","markets"],["arcus_spot","pairs"],["rh_uniswap","pools"],["rh_chainlink_oracles","assets"]];for(let[r,o]of n){let i=e.venues[r];oe(i,t,`venues.${r}`),G(i.type,t,`venues.${r}.type`),G(i.chain,t,`venues.${r}.chain`),G(i.tier,t,`venues.${r}.tier`),Nt(i[o],t,`venues.${r}.${o}`)}for(let[r,o]of Object.entries(e.venues.hyperliquid_hip3.dexs))Nt(o,t,`venues.hyperliquid_hip3.dexs.${r}`)}function lC(e,t){Nt(e,t,"root"),Object.keys(e).length===0&&z(t,"root must not be empty");for(let[n,r]of Object.entries(e))Array.isArray(r.venues)||z(t,`${n}.venues must be an array`),r.venues.forEach((o,i)=>G(o,t,`${n}.venues[${i}]`))}function uC(e,t){oe(e,t,"root");for(let n of["chainId","block","oracleScaleExp","usdgDecimals","equityDecimals"])et(e[n],t,n);G(e.usdg,t,"usdg"),Nt(e.assets,t,"assets");for(let[n,r]of Object.entries(e.assets))G(r.oracle,t,`assets.${n}.oracle`),G(r.token,t,`assets.${n}.token`),(typeof r.rawPrice!="string"||!/^\d+$/.test(r.rawPrice))&&z(t,`assets.${n}.rawPrice must be an integer string`),(typeof r.usd!="number"||!Number.isFinite(r.usd)||r.usd<0)&&z(t,`assets.${n}.usd must be a nonnegative finite source number`)}function dC(e,t){oe(e,t,"root");for(let r of["holidayDayIndex","names","dates"])Array.isArray(e[r])||z(t,`${r} must be an array`);let n=e.holidayDayIndex.length;(e.names.length!==n||e.dates.length!==n)&&z(t,"holidayDayIndex, names, and dates must have equal lengths"),e.holidayDayIndex.forEach((r,o)=>et(r,t,`holidayDayIndex[${o}]`)),e.names.forEach((r,o)=>G(r,t,`names[${o}]`)),e.dates.forEach((r,o)=>{(typeof r!="string"||!/^\d{4}-\d{2}-\d{2}$/.test(r))&&z(t,`dates[${o}] must use YYYY-MM-DD`)})}function pC(e,t){oe(e,t,"root"),(!Array.isArray(e.dstTransitions)||e.dstTransitions.length===0)&&z(t,"dstTransitions must be a nonempty array");let n=new Set;e.dstTransitions.forEach((r,o)=>{oe(r,t,`dstTransitions[${o}]`);for(let i of["year","startUtc","endUtc"])et(r[i],t,`dstTransitions[${o}].${i}`);r.startUtc>=r.endUtc&&z(t,`dstTransitions[${o}] startUtc must be before endUtc`),n.has(r.year)&&z(t,`dstTransitions contains duplicate year ${r.year}`),n.add(r.year)})}function mC(e,t){Nt(e,t,"root"),Object.keys(e).length===0&&z(t,"root must not be empty");for(let[n,r]of Object.entries(e)){for(let o of["addr","quote","quoteAddr","dex","pair"])G(r[o],t,`${n}.${o}`);(typeof r.liq!="number"||!Number.isFinite(r.liq)||r.liq<0)&&z(t,`${n}.liq must be a nonnegative finite source number`)}}function fC(e,t){oe(e,t,"root"),et(e.capturedAt,t,"capturedAt"),et(e.block,t,"block"),et(e.chainId,t,"chainId"),G(e.gasPriceWei,t,"gasPriceWei"),G(e.stateView,t,"stateView"),Nt(e.pools,t,"pools"),Object.keys(e.pools).length===0&&z(t,"pools must not be empty");for(let[n,r]of Object.entries(e.pools)){for(let o of["pair","version","quote","token","sqrtPriceX96"])G(r[o],t,`pools.${n}.${o}`);r.version!=="v3"&&r.version!=="v4"&&z(t,`pools.${n}.version must be v3 or v4`),typeof r.quoteIsToken0!="boolean"&&z(t,`pools.${n}.quoteIsToken0 must be a boolean`),(!/^[0-9]+$/.test(r.sqrtPriceX96)||BigInt(r.sqrtPriceX96)<=0n)&&z(t,`pools.${n}.sqrtPriceX96 must be a positive integer string`)}}function hC(e,t){oe(e,t,"root"),et(e.capturedAt,t,"capturedAt"),G(e.source,t,"source"),oe(e.books,t,"books"),Object.keys(e.books).length===0&&z(t,"books must not be empty");for(let[n,r]of Object.entries(e.books)){oe(r,t,`books.${n}`),(!Array.isArray(r.bids)||!Array.isArray(r.asks))&&z(t,`books.${n} must have bids and asks arrays`);for(let[o,i]of r.bids.entries())oe(i,t,`books.${n}.bids[${o}]`),G(i.px,t,`books.${n}.bids[${o}].px`),G(i.sz,t,`books.${n}.bids[${o}].sz`);for(let[o,i]of r.asks.entries())oe(i,t,`books.${n}.asks[${o}]`),G(i.px,t,`books.${n}.asks[${o}].px`),G(i.sz,t,`books.${n}.asks[${o}].sz`)}}function gC(e,t){oe(e,t,"root"),et(e.capturedAt,t,"capturedAt"),G(e.source,t,"source"),G(e.chain,t,"chain"),Nt(e.tokens,t,"tokens"),oe(e.pairs,t,"pairs"),Object.keys(e.tokens).length===0&&z(t,"tokens must not be empty");for(let[n,r]of Object.entries(e.tokens)){G(r.symbolRaw,t,`tokens.${n}.symbolRaw`),G(r.mint,t,`tokens.${n}.mint`),Object.hasOwn(e.pairs,n)||z(t,`pairs.${n} is required for token ${n}`),(!Array.isArray(e.pairs[n])||e.pairs[n].length===0)&&z(t,`pairs.${n} must be a nonempty array`);for(let[o,i]of e.pairs[n].entries())oe(i,t,`pairs.${n}[${o}]`),G(i.pairAddress,t,`pairs.${n}[${o}].pairAddress`),G(i.dexId,t,`pairs.${n}[${o}].dexId`),(typeof i.priceUsd!="number"||!Number.isFinite(i.priceUsd)||i.priceUsd<=0)&&z(t,`pairs.${n}[${o}].priceUsd must be a positive finite number`),(typeof i.liquidityUsd!="number"||!Number.isFinite(i.liquidityUsd)||i.liquidityUsd<0)&&z(t,`pairs.${n}[${o}].liquidityUsd must be a nonnegative finite number`)}}function yC(e,t){oe(e,t,"root"),et(e.capturedAt,t,"capturedAt"),G(e.source,t,"source"),G(e.chain,t,"chain"),e.chain!=="ton"&&z(t,'chain must be "ton"'),Nt(e.tokens,t,"tokens"),oe(e.pairs,t,"pairs"),Object.keys(e.tokens).length===0&&z(t,"tokens must not be empty");for(let[n,r]of Object.entries(e.tokens)){G(r.symbolRaw,t,`tokens.${n}.symbolRaw`),G(r.mint,t,`tokens.${n}.mint`),Object.hasOwn(e.pairs,n)||z(t,`pairs.${n} is required for token ${n}`),(!Array.isArray(e.pairs[n])||e.pairs[n].length===0)&&z(t,`pairs.${n} must be a nonempty array`);for(let[o,i]of e.pairs[n].entries())oe(i,t,`pairs.${n}[${o}]`),G(i.pairAddress,t,`pairs.${n}[${o}].pairAddress`),G(i.dexId,t,`pairs.${n}[${o}].dexId`),(typeof i.priceUsd!="number"||!Number.isFinite(i.priceUsd)||i.priceUsd<=0)&&z(t,`pairs.${n}[${o}].priceUsd must be a positive finite number`),(typeof i.liquidityUsd!="number"||!Number.isFinite(i.liquidityUsd)||i.liquidityUsd<0)&&z(t,`pairs.${n}[${o}].liquidityUsd must be a nonnegative finite number`)}}var bC=Object.freeze({venues:cC,universe:lC,oracles:uC,nyseHolidays:dC,dstTransitions:pC,equityDexPools:mC,rhPoolState:fC,solanaXstocks:gC,tonXstocks:yC,hip3L2Books:hC});function wC(e,t){let n=Yb[t],r=Kb(e,n),o;try{o=eC(r,"utf8")}catch(s){throw s?.code==="ENOENT"?new Error(`Fixture fixtures/${n} is missing at ${r}`):new Error(`Fixture fixtures/${n} could not be read: ${s.message}`)}let i;try{i=JSON.parse(o)}catch(s){throw new SyntaxError(`Fixture fixtures/${n} contains invalid JSON: ${s.message}`)}return bC[t](i,n),i}function Xb(e){if(e!==null&&typeof e=="object"&&!Object.isFrozen(e)){Object.freeze(e);for(let t of Object.values(e))Xb(t)}return e}function Qb({fixtureDir:e=sC}={}){if(typeof e!="string"||e.length===0)throw new TypeError("fixtureDir must be a nonempty path string");let t={};for(let n of Object.keys(Yb))t[n]=wC(e,n);return Xb(t)}var Gb;function Ot(){return Gb??=Qb(),Gb}function Ce(){return Ot().venues}function Jb(){return Ot().oracles}function Zb(){return Ot().nyseHolidays}function ew(){return Ot().dstTransitions}function rs(){return Ot().rhPoolState}function tw(){return Ot().solanaXstocks}function nw(){return Ot().tonXstocks}function rw(){return Ot().hip3L2Books}var Xl=1e3,sw=60*Xl,Ql=60*sw,ow=24*Ql,xC=-5*Ql,SC=-4*Ql,aw=240,cw=570,lw=960,uw=1200,S5=Object.freeze([aw,cw,lw,uw]),v5=Object.freeze(["core","extended","dark"]),iw,Yl;function vC(){let e=ew().dstTransitions.map(r=>({year:r.year,startMs:r.startUtc*Xl,endMs:r.endUtc*Xl}));e.sort((r,o)=>r.startMs-o.startMs);let t=e[0].year,n=e[e.length-1].year;return Object.freeze({rows:Object.freeze(e),firstYear:t,lastYear:n,coverageStartMs:Date.UTC(t,0,1),coverageEndMs:Date.UTC(n+1,0,1)})}function dw(){return iw??=vC(),iw}function EC(){return Yl===void 0&&(Yl=new Set(Zb().holidayDayIndex)),Yl}function pw(e,t){if(!Number.isSafeInteger(e))throw new TypeError(`${t}: epochMs must be a safe integer number of milliseconds`)}function kC(e,t){let{coverageStartMs:n,coverageEndMs:r,firstYear:o,lastYear:i}=dw();if(e<n||e>=r)throw new RangeError(`${t}: ${new Date(e).toISOString()} is outside DST fixture coverage (${o} through ${i}). Refusing to assume a UTC offset.`)}function AC(e){for(let t of dw().rows)if(e>=t.startMs&&e<t.endMs)return!0;return!1}function IC(e){return AC(e)?SC:xC}function _C(e){let t=e+IC(e),n=Math.floor(t/ow),r=t-n*ow,o=new Date(t);return{dayIndex:n,minuteOfDay:Math.floor(r/sw),msIntoDay:r,weekday:o.getUTCDay()}}function PC({dayIndex:e,weekday:t}){return t===0||t===6?!1:!EC().has(e)}function TC(e){return e<aw?"dark":e<cw?"extended":e<lw?"core":e<uw?"extended":"dark"}function so(e){pw(e,"sessionState"),kC(e,"sessionState");let t=_C(e);return PC(t)?TC(t.minuteOfDay):"dark"}function Jl(e){return pw(e,"isDark"),so(e)==="dark"}var os=Object.freeze({DORMANT_VENUE:"dormant-venue",CROSSED_BOOK:"crossed-book",STALE_QUOTE:"stale-quote",STALE_ORACLE:"stale-oracle"}),CC=12e4,NC=6e5;function is(e,t){e.push(Object.freeze({venue:t.venue,symbol:t.symbol??null,reason:t.reason,evidence:t.evidence??null}))}function OC(e){let t=e.raw?.vol24h;return!!(t===0||t===0||typeof t=="number"&&Number.isFinite(t)&&t<=0)}function RC(e){return!e.bid||!e.ask?!1:Ct(e.bid,e.ask)>0}function mw(e,t,n){return Number.isSafeInteger(e.capturedAt)?t-e.capturedAt>n:!1}function ss(e,t={}){if(!Array.isArray(e))throw new TypeError("quotes must be an array");let n=t.nowMs??Date.now(),r=t.quoteFreshnessMs??CC,o=t.oracleFreshnessMs??NC,i=t.includeDormant===!0,s=[],a=[];for(let c of e){if(OC(c)){i?s.push(Object.freeze({...c,staleData:!0})):is(a,{venue:c.venue,symbol:c.symbolRaw??c.symbol,reason:os.DORMANT_VENUE,evidence:{vol24h:c.raw?.vol24h??null}});continue}if(RC(c)){is(a,{venue:c.venue,symbol:c.symbolRaw??c.symbol,reason:os.CROSSED_BOOK,evidence:{bid:c.bid?String(c.bid.mantissa)+"e-"+c.bid.scale:null,ask:c.ask?String(c.ask.mantissa)+"e-"+c.ask.scale:null}});continue}if(mw(c,n,r)){is(a,{venue:c.venue,symbol:c.symbolRaw??c.symbol,reason:os.STALE_QUOTE,evidence:{capturedAt:c.capturedAt,nowMs:n,ageMs:n-c.capturedAt,freshnessMs:r}});continue}if(c.tier==="read-only"&&c.raw?.oracleRaw!==void 0){let l=so(n),u=l==="core"?o:o*2;if(mw(c,n,u)){is(a,{venue:c.venue,symbol:c.symbolRaw??c.symbol,reason:os.STALE_ORACLE,evidence:{capturedAt:c.capturedAt,nowMs:n,session:l}});continue}}s.push(c)}return{survivors:s,excluded:a}}function $C(e){if(typeof e!="number"||!Number.isFinite(e))throw new TypeError("value must be a finite number");let t=String(e);if(!t.includes("e")&&!t.includes("E"))return t;let[n,r]=t.split(/[eE]/),o=Number(r),i=n.startsWith("-"),s=i?n.slice(1):n,[a,c=""]=s.split("."),l=`${a}${c}`,u=a.length+o,d;return u<=0?d=`0.${"0".repeat(-u)}${l}`:u>=l.length?d=`${l}${"0".repeat(u-l.length)}`:d=`${l.slice(0,u)}.${l.slice(u)}`,`${i?"-":""}${d}`}function ce(e){return e==null?null:typeof e=="string"?F(e):typeof e!="number"||!Number.isFinite(e)?null:F($C(e))}function He(e,t){let n=ce(e);if(n===null)throw new TypeError(`${t} must be a finite source number`);return n}var LC=new Set(["spot","perp"]),MC=new Set(["read-only","quote-only","prepare","intent"]),BC=new Set(["buy","sell"]),UC=new Set(["net-of-cost","gross"]),DC=new Set(["homogeneous","heterogeneous"]),FC=["bid","ask","mid","mark"],fw=["fees","gasEstimate","priceImpact","fundingHourly"],qC=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;function Q(e,t){throw new TypeError(`${e} ${t}`)}function gw(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function nn(e,t){gw(e)||Q(t,"must be an object")}function yw(e,t,n){Object.hasOwn(e,t)||Q(`${n}.${t}`,"is required")}function Gn(e,t){(typeof e!="string"||e.length===0)&&Q(t,"must be a nonempty string")}function ao(e,t,n){t.has(e)||Q(n,`must be one of ${[...t].join(", ")}`)}function eu(e,t){(!Number.isSafeInteger(e)||e<0)&&Q(t,"must be a nonnegative safe integer")}function Zl(e,t,n=!1){e===null&&n||(gw(e)||Q(t,"must be a fixed point value"),typeof e.mantissa!="bigint"&&Q(`${t}.mantissa`,"must be a bigint"),(!Number.isSafeInteger(e.scale)||e.scale<0)&&Q(`${t}.scale`,"must be a nonnegative safe integer"))}function as(e,t,n=!1){e===null&&n||nn(e,t)}function hw(e,t){nn(e,t),Gn(e.venue,`${t}.venue`),Gn(e.reason,`${t}.reason`),qC.test(e.reason)||Q(`${t}.reason`,"must be a machine readable lower case code"),Object.hasOwn(e,"symbol")&&e.symbol!==null&&Gn(e.symbol,`${t}.symbol`)}function Ae(e){nn(e,"quote");for(let n of["venue","chain","instrument","tier","symbolRaw","symbol","side","requestedSize",...fw,"costAccounted","capturedAt","blockOrSeq","raw"])yw(e,n,"quote");Gn(e.venue,"quote.venue"),!(typeof e.chain=="string"&&e.chain.length>0)&&!(Number.isSafeInteger(e.chain)&&e.chain>=0)&&Q("quote.chain","must be a nonempty string or nonnegative chain id"),ao(e.instrument,LC,"quote.instrument"),ao(e.tier,MC,"quote.tier"),Gn(e.symbolRaw,"quote.symbolRaw"),Gn(e.symbol,"quote.symbol"),ao(e.side,BC,"quote.side"),Zl(e.requestedSize,"quote.requestedSize"),e.requestedSize.mantissa<0n&&Q("quote.requestedSize","must not be negative");let t=0;for(let n of FC)Object.hasOwn(e,n)&&(Zl(e[n],`quote.${n}`),t+=1);t===0&&Q("quote","must contain at least one of bid, ask, mid, mark");for(let n of fw)Zl(e[n],`quote.${n}`,!0);if(typeof e.costAccounted!="boolean"&&Q("quote.costAccounted","must be a boolean"),e.costAccounted){for(let n of["fees","gasEstimate","priceImpact"])e[n]===null&&Q(`quote.${n}`,"cannot be unknown when costAccounted is true");e.instrument==="perp"&&e.fundingHourly===null&&Q("quote.fundingHourly","cannot be unknown when costAccounted is true for a perp")}return e.instrument==="spot"&&e.fundingHourly!==null&&Q("quote.fundingHourly","must be null for a spot quote"),eu(e.capturedAt,"quote.capturedAt"),e.blockOrSeq!==null&&!(typeof e.blockOrSeq=="string"&&e.blockOrSeq.length>0)&&!(Number.isSafeInteger(e.blockOrSeq)&&e.blockOrSeq>=0)&&Q("quote.blockOrSeq","must be null, a nonempty string, or a nonnegative safe integer"),nn(e.raw,"quote.raw"),e}function tu(e){nn(e,"rankResult");for(let t of["rankedOn","ranked","winner","runnersUp","improvementBps","sourcesAnswered","sourcesTried","failed","excluded","darkWindow","instrumentMix","bestPreparable"])yw(e,t,"rankResult");return ao(e.rankedOn,UC,"rankResult.rankedOn"),Array.isArray(e.ranked)||Q("rankResult.ranked","must be an array"),e.ranked.forEach((t,n)=>as(t,`rankResult.ranked[${n}]`)),as(e.winner,"rankResult.winner",!0),e.ranked.length===0&&e.winner!==null&&Q("rankResult.winner","must be null when ranked is empty"),e.ranked.length>0&&e.winner===null&&Q("rankResult.winner","must be present when ranked is not empty"),Array.isArray(e.runnersUp)||Q("rankResult.runnersUp","must be an array"),e.runnersUp.forEach((t,n)=>as(t,`rankResult.runnersUp[${n}]`)),e.improvementBps!==null&&!(typeof e.improvementBps=="number"&&Number.isFinite(e.improvementBps))&&Q("rankResult.improvementBps","must be a finite number or null"),eu(e.sourcesAnswered,"rankResult.sourcesAnswered"),eu(e.sourcesTried,"rankResult.sourcesTried"),e.sourcesAnswered>e.sourcesTried&&Q("rankResult.sourcesAnswered","must not exceed sourcesTried"),Array.isArray(e.failed)||Q("rankResult.failed","must be an array"),e.failed.forEach((t,n)=>hw(t,`failed[${n}]`)),Array.isArray(e.excluded)||Q("rankResult.excluded","must be an array"),e.excluded.forEach((t,n)=>hw(t,`excluded[${n}]`)),e.darkWindow!==null&&nn(e.darkWindow,"rankResult.darkWindow"),ao(e.instrumentMix,DC,"rankResult.instrumentMix"),as(e.bestPreparable,"rankResult.bestPreparable",!0),Object.hasOwn(e,"carry")&&e.carry!==null&&nn(e.carry,"rankResult.carry"),e}var HC="arcus_perp",jC="robinhood-4663",VC="quote-only",cs="0.00000480324074074";function bw(){return Ce().venues.arcus}function zC(){return Object.keys(bw().markets).sort()}function WC({symbol:e,side:t="buy",sizeUsd:n=null}={}){if(typeof e!="string"||e.length===0)return null;let r=e.endsWith("-USD")?e.slice(0,-4):e,o=bw().markets[r];if(!o)return null;let i=He(o.mark,`${r}.mark`),s=ce(o.oracle),a=ce(o.fundingHourly),c=n===null?F("0"):n,l={venue:HC,chain:jC,instrument:"perp",tier:VC,symbolRaw:e,symbol:r,side:t,requestedSize:c,mark:i,fees:null,gasEstimate:null,priceImpact:null,fundingHourly:a,costAccounted:!1,capturedAt:Ce().capturedAt*1e3,blockOrSeq:null,raw:{fixture:"fixtures/venues.json#venues.arcus",oraclePrice:o.oracle,vol24h:o.vol24h,oi:o.oi,fundingAnnPct:o.fundingAnnPct,category:o.category,isOutsideRth:o.isOutsideRth===!0,rth:o.rth,darkWindowFundingHourly:cs,initialMarginFraction:o.initialMarginFraction??null,offHoursInitialMarginFraction:o.offHoursInitialMarginFraction??null,reasonCostUnknown:"fees, gas, and impact at size not captured for Arcus perps"}};return s!==null&&(l.raw.oracleFixed=s),Ae(l)}function ls({side:e="buy",sizeUsd:t=null}={}){return zC().map(n=>WC({symbol:n,side:e,sizeUsd:t})).filter(n=>n!==null)}var ww=36e5,D5=24*365;function nu(e,t,n=8){if(e==null)throw new TypeError("hourlyFundingRate is required");if(!Number.isFinite(t)||t<0)throw new RangeError("horizonHours must be a nonnegative finite number");if(t===0)return F("0");let r=F(String(t)),o=we(10000n,0);return ke(ke(e,r),o)}function xw(e,t,n={}){if(e.instrument!=="perp")return{model:"current-funding-held-constant",horizonHours:t,carryBps:F("0"),carryBpsDisplay:"0",confidence:"estimate",note:"spot has no funding carry"};let r=n.nowMs??Date.now(),o=n.applyDarkWindowLock===!0,i=e.fundingHourly;if(o&&i!==null){let a=GC(r,t),c=t-a,l=F(cs),u=nu(i,c),d=nu(l,a),p=Math.max(u.scale,d.scale),m={mantissa:u.mantissa*10n**BigInt(p-u.scale)+d.mantissa*10n**BigInt(p-d.scale),scale:p};return{model:"current-funding-held-constant",horizonHours:t,carryBps:m,carryBpsDisplay:Fe(m),confidence:"estimate",darkHours:a,litHours:c,darkWindowRate:cs,compounding:"ignored",compoundingErrorBoundNote:"simple sum; at 30d and 1e-5/h the ignored compound is under 0.5bp"}}if(i===null)return{model:"current-funding-held-constant",horizonHours:t,carryBps:null,carryBpsDisplay:null,confidence:"estimate",note:"funding rate unknown"};let s=nu(i,t);return{model:"current-funding-held-constant",horizonHours:t,carryBps:s,carryBpsDisplay:Fe(s),confidence:"estimate",compounding:"ignored",compoundingErrorBoundNote:"simple sum; at 30d and 1e-5/h the ignored compound is under 0.5bp"}}function GC(e,t){if(t<=0)return 0;let n=0,r=Math.floor(t);for(let o=0;o<r;o+=1)Jl(e+o*ww)&&(n+=1);return t>r&&Jl(e+r*ww)&&(n+=t-r),n}function KC(e){return e.mid??e.mark??e.ask??e.bid??null}function YC(e){let t=KC(e);if(t===null)return null;let n=e.costAccounted===!0,r=F("0");e.fees!==null?r=Tt(r,e.fees):n=!1,e.priceImpact!==null?r=Tt(r,e.priceImpact):e.requestedSize&&e.requestedSize.mantissa>0n&&(n=!1),e.gasEstimate===null?n=!1:r=Tt(r,e.gasEstimate);let o;if(e.fees!==null&&Ct(e.fees,F("1"))<0&&Ct(e.fees,F("0"))>=0){let i=Tt(F("1"),e.fees);o=ke(t,i),e.priceImpact!==null&&(o=Tt(o,ke(t,e.priceImpact)))}else o=Tt(t,r);return{net:o,costAccounted:n,px:t}}function XC(e,t,n=null){return{venue:e.venue,chain:e.chain,instrument:e.instrument,tier:e.tier,symbol:e.symbol,symbolRaw:e.symbolRaw,side:e.side,price:t.px,net:t.net,costAccounted:t.costAccounted,fundingHourly:e.fundingHourly,carry:n,quote:e}}function QC(e,t){if(!e||!t||!e.costAccounted||!t.costAccounted||e.instrument!==t.instrument||e.net.mantissa===0n)return null;let n=io(t.net,e.net);return qe(ke(n,we(10000n,0)),t.net,4)}function ru(e,t={}){if(!Array.isArray(e))throw new TypeError("quotes must be an array");let n=t.nowMs??e[0]?.capturedAt??Date.now(),r=e.length,o=e,i=[];if(!t.skipLiveness){let P=ss(e,{nowMs:n});o=P.survivors,i=P.excluded}let s=e.length,a=[],c=t.horizonHours,l=Number.isFinite(c)&&c>0,u=[];for(let P of o){let I=YC(P);if(I===null)continue;let A=null;if(l&&P.instrument==="perp"&&(A=xw(P,c,{nowMs:n}),A.carryBps!==null)){let v=Tt(F("1"),qe(A.carryBps,we(10000n,0),12));I.net=ke(I.net,v),I.costAccounted=!1}u.push(XC(P,I,A))}let d=u,p="homogeneous";if(l)p="heterogeneous",d=u;else{let P=u.filter(A=>A.instrument==="spot"),I=u.filter(A=>A.instrument==="perp");P.length>0&&I.length>0?(d=P.length>=I.length?P:I,p="homogeneous"):(d=u,p="homogeneous")}d.sort((P,I)=>{let A=Ct(P.net,I.net);return A!==0?A:P.venue<I.venue?-1:P.venue>I.venue?1:0});let m=d[0]??null,f=d.slice(1),h=d,g="gross";m&&m.costAccounted&&(f.length===0||f[0].costAccounted)&&(g="net-of-cost");let y=f.length===0?null:QC(m,f[0]),S=u.find(P=>P.tier==="prepare")??null,w=so(n),x=w==="core"?null:{session:w,warning:w==="dark"?"market is dark; marks are not real price discovery":"extended session; thinner books and higher staleness risk"},k=null;l&&(k=JC(u));let C={rankedOn:g,ranked:h,winner:m,runnersUp:f,improvementBps:y===null?null:Number(Fe(y)),sourcesAnswered:s,sourcesTried:r,failed:a,excluded:i,darkWindow:x,instrumentMix:p,bestPreparable:S,carry:m?.carry??null,breakEvenHorizonHours:k};return tu(C)}function JC(e){let t=e.filter(i=>i.instrument==="spot").sort((i,s)=>Ct(i.net,s.net))[0],n=e.filter(i=>i.instrument==="perp").sort((i,s)=>Ct(i.net,s.net))[0];if(!t||!n||n.fundingHourly===null)return null;let r=io(t.net,n.net);if(r.mantissa===0n)return 0;let o=ke(n.fundingHourly,n.price);if(o.mantissa===0n)return null;try{let i=qe(r,o,4),s=Number(Fe(i));return!Number.isFinite(s)||s<0?null:s}catch{return null}}var ZC="rh_uniswap",eN=4663,tN="prepare",nN=1n<<192n,Kn=18,rN=Object.freeze({v3:180000n,v4:240000n});function ou(){return rs()}function oN(e){return{mantissa:e*e*10n**BigInt(Kn)/nN,scale:Kn}}function iN(e){let t=oN(BigInt(e.sqrtPriceX96)),n=e.quote==="USDG"?6:18,r=18;if(e.quoteIsToken0){let o=qe(ke(t,we(10n**BigInt(n),0)),we(10n**BigInt(r),0),Kn);return o.mantissa===0n?null:qe(F("1"),o,Kn)}return qe(ke(t,we(10n**BigInt(r),0)),we(10n**BigInt(n),0),Kn)}function sN(e){let t=Jb(),n=t.assets[e];return n?we(n.rawPrice,t.oracleScaleExp):null}function aN(e,t){if(e===null||t===null||e.mantissa<=0n||t.mantissa<=0n)return null;let n={...e};return qe(t,cN(n,t),Kn)}function cN(e,t){let n=Math.max(e.scale,t.scale);return{mantissa:oo(e,n).mantissa+oo(t,n).mantissa,scale:n}}function lN(e){let t=ou(),n=rN[e];return n?{wei:BigInt(t.gasPriceWei)*n,units:n,native:"ETH"}:null}function iu(){return Object.keys(ou().pools).sort()}function Yn({symbol:e,side:t="buy",sizeUsd:n=null}={}){if(typeof e!="string"||e.length===0)throw new TypeError("symbol must be a nonempty string");let r=ou(),o=r.pools[e];if(!o)return null;let i=iN(o);if(i===null)return null;let s=ce(o.liqUsd),a=n===null?F("0"):n,c=o.feePpm===null||o.feePpm===void 0?null:qe(we(BigInt(o.feePpm),0),we(1000000n,0),8),l=a.mantissa===0n?F("0"):aN(s,a),u=lN(o.version),m={venue:ZC,chain:eN,instrument:"spot",tier:tN,symbolRaw:e,symbol:e,side:t,requestedSize:a,mid:i,fees:c,gasEstimate:null,priceImpact:l,fundingHourly:null,costAccounted:!1,capturedAt:r.capturedAt*1e3,blockOrSeq:r.block,raw:{fixture:"fixtures/rh_pool_state.json",pair:o.pair,version:o.version,sqrtPriceX96:o.sqrtPriceX96,quote:o.quote,quoteIsToken0:o.quoteIsToken0,liqUsd:o.liqUsd,gasNativeWei:u===null?null:u.wei.toString(),gasUnits:u===null?null:u.units.toString(),impactModel:"constant-product-estimate",notes:["price read live from chain 4663",o.version==="v4"?"v4 fee may be dynamic via hook and was not captured":"v3 fee tier is the pool static fee","gas known in native wei only, no ETH price captured to denominate it"]}},f=sN(e);return f!==null&&(m.referencePrice=f,m.referenceBasisBps=Fe(qe(ke(io(i,f),we(10000n,0)),f,4))),Ae(m)}function Sw({side:e="buy",sizeUsd:t=null}={}){return iu().map(n=>Yn({symbol:n,side:e,sizeUsd:t})).filter(n=>n!==null)}var vw=12e4,uN="0x0000000000000000000000000000000000000000",dN="0x84b75b19A3cdf8E2F56d0507d22D442847B2053C";function su(e={}){let{symbol:t,side:n="buy",sizeUsd:r=null,recipient:o,nowMs:i=Date.now()}=e;if(typeof t!="string"||!t)throw new TypeError("symbol is required");if(typeof o!="string"||!/^0x[0-9a-fA-F]{40}$/.test(o))throw new TypeError("recipient must be a 0x-prefixed 20 byte address");let s=Yn({symbol:t,side:n,sizeUsd:r});if(s===null)throw new Error(`no RH Uniswap pool for ${t}`);if(s.tier!=="prepare")throw new Error(`route tier is ${s.tier}, only prepare tier can be prepared`);let a=i-s.capturedAt;if(a>vw)throw new Error(`quote is stale (${a}ms old, bound ${vw}ms); re-quote before preparing`);let l=rs().pools[t],u=l.version==="v4"?dN:uN,d=u,p=n==="buy"?l.quoteAddr:l.token;return Object.freeze({artifactKind:"unsigned-tx",chainId:4663,to:u,data:"0x",value:"0",requiresApproval:{spender:d,token:p,amount:null},requiresWalletSignature:!0,backendSigner:!1,unsigned:!0,houseSigned:!1,quoteRef:{venue:s.venue,symbol:s.symbol,symbolRaw:s.symbolRaw,capturedAt:s.capturedAt,blockOrSeq:s.blockOrSeq,mid:s.mid,version:l.version,pair:l.pair},quoteAgeMs:a,recipient:o,side:n,notes:["prepare-only: user wallet must sign","calldata encoding is deferred; this artifact is the bound intent",l.version==="v4"?"V4 route via PoolManager":"V3 route via SwapRouter (address not yet pinned)"]})}var pN="hyperliquid_hip3",mN="hyperliquid",fN="quote-only";function co(){return Ce().venues.hyperliquid_hip3}function Ew(){return Object.keys(co().dexs).sort()}function hN(){let e=[];for(let[t,n]of Object.entries(co().dexs))for(let r of Object.keys(n))e.push(`${t}:${r}`);return e.sort()}function gN(e){if(typeof e!="string"||e.length===0)return[];let t=e.indexOf(":");if(t>0){let r=e.slice(0,t),o=e.slice(t+1),i=co().dexs[r]?.[o];return i?[{dex:r,ticker:o,market:i}]:[]}let n=[];for(let[r,o]of Object.entries(co().dexs))Object.hasOwn(o,e)&&n.push({dex:r,ticker:e,market:o[e]});return n}function yN(e,t){try{return rw().books[`${e}:${t}`]??null}catch{return null}}function bN(e,t,n){if(!e||n===null||n.mantissa<=0n)return null;let r=t==="buy"?e.asks:e.bids;if(!r||r.length===0)return null;let o=Number(Fe(n));if(!Number.isFinite(o)||o<=0)return null;let i=0,s=0,a=0;for(let c of r){let l=Number(c.px),u=Number(c.sz);if(!(l>0)||!(u>0))continue;let d=l*u,p=Math.min(o,d),m=p/l;if(i+=p,s+=m,o-=p,a+=1,o<=1e-9)break}return s<=0?null:{vwap:i/s,filledUsd:i,unfilledUsd:Math.max(0,o),levelsUsed:a}}function wN(e,t,n,r){let o=bN(e,t,n);if(!o)return{impact:null,depth:null};let i=Number(Fe(r));if(!(i>0))return{impact:null,depth:o};let s=t==="buy"?(o.vwap-i)/i:(i-o.vwap)/i,a=Math.max(0,s);return{impact:ce(Number(a.toPrecision(12))),depth:{...o,impactFraction:a,fullyFilled:o.unfilledUsd<=1e-6}}}function kw({dex:e,ticker:t,market:n,side:r,size:o}){let i=He(n.mark,`${e}:${t}.mark`),s=ce(n.fundingHourly),a=ce(n.vol24h),c=ce(n.oi),l=o===null?F("0"):o,u=yN(e,t),d=null,p=null,m="fees and gas not captured";if(l.mantissa>0n)if(u){let g=wN(u,r,l,i);d=g.impact,p=g.depth,p?.fullyFilled?m="impact measured from l2Book; fees and gas still not captured":m="book walked but size exceeds visible depth; fees and gas not captured"}else m="no order book depth wired for this coin; fees and gas not captured";else u?m="zero size; fees and gas not captured":m="no order book depth wired for this coin; fees and gas not captured";let h={venue:pN,chain:mN,instrument:"perp",tier:fN,symbolRaw:`${e}:${t}`,symbol:t,side:r,requestedSize:l,mark:i,fees:null,gasEstimate:null,priceImpact:d,fundingHourly:s,costAccounted:!1,capturedAt:Ce().capturedAt*1e3,blockOrSeq:null,raw:{fixture:"fixtures/venues.json#venues.hyperliquid_hip3",dex:e,ticker:t,vol24h:n.vol24h,oi:n.oi,fundingAnnPct:n.fundingAnnPct,maxLev:n.maxLev,reasonCostUnknown:m,hasL2Book:u!==null,l2BookFixture:u?"fixtures/hip3_l2books.json":null,depth:p}};return a!==null&&(h.raw.vol24hFixed=a),c!==null&&(h.raw.oiFixed=c),u?.bids?.[0]&&u?.asks?.[0]&&(h.bid=F(String(u.bids[0].px)),h.ask=F(String(u.asks[0].px))),Ae(h)}function Aw({symbol:e,side:t="buy",sizeUsd:n=null}={}){let r=gN(e);return r.length===0||r.length>1?null:kw({...r[0],side:t,size:n})}function us({side:e="buy",sizeUsd:t=null,ticker:n=null}={}){let r=[];for(let o of hN()){let[i,s]=o.split(":");if(n!==null&&s!==n)continue;let a=co().dexs[i][s];r.push(kw({dex:i,ticker:s,market:a,side:e,size:t}))}return r}var xN="arcus_spot",SN="robinhood-4663",vN="quote-only";function Iw(){return Ce().venues.arcus_spot}function EN(){return Object.keys(Iw().pairs).sort()}function kN({symbol:e,side:t="buy",sizeUsd:n=null}={}){if(typeof e!="string"||e.length===0)return null;let r=Iw().pairs[e];if(!r)return null;let o=r.bid===void 0||r.bid===null?null:He(r.bid,`${e}.bid`),i=r.ask===void 0||r.ask===null?null:He(r.ask,`${e}.ask`),s=ce(r.last),a=null;if(o!==null&&i!==null){a={mantissa:o.mantissa+i.mantissa,scale:o.scale===i.scale?o.scale+1:Math.max(o.scale,i.scale)+1};let d=Math.max(o.scale,i.scale),p=o.scale===d?o.mantissa:o.mantissa*10n**BigInt(d-o.scale),m=i.scale===d?i.mantissa:i.mantissa*10n**BigInt(d-i.scale);a={mantissa:p+m,scale:d+1},a={mantissa:(p+m)/2n,scale:d}}else s!==null&&(a=s);if(o===null&&i===null&&a===null)return null;let c=n===null?F("0"):n,l=F("0"),u={venue:xN,chain:SN,instrument:"spot",tier:vN,symbolRaw:e,symbol:e,side:t,requestedSize:c,fees:l,gasEstimate:null,priceImpact:null,fundingHourly:null,costAccounted:!1,capturedAt:Ce().capturedAt*1e3,blockOrSeq:null,raw:{fixture:"fixtures/venues.json#venues.arcus_spot",last:r.last,bid:r.bid,ask:r.ask,vol24h:r.vol24h,feeKnownZero:!0,reasonCostUnknown:"gas and impact at size not captured; fee is a known zero"}};return o!==null&&(u.bid=o),i!==null&&(u.ask=i),a!==null&&(u.mid=a),Ae(u)}function ds({side:e="buy",sizeUsd:t=null}={}){return EN().map(n=>kN({symbol:n,side:e,sizeUsd:t})).filter(n=>n!==null)}var AN="solana_xstocks",IN="solana",_N="quote-only",_w=25e3;function ps(){return tw()}function au(){return Object.keys(ps().tokens).sort()}function PN(e){let t=ps().pairs[e];return!t||t.length===0?null:[...t].sort((n,r)=>(r.liquidityUsd??0)-(n.liquidityUsd??0))[0]}function TN(e,t){if(e===null||t===null)return null;if(e.mantissa<=0n||t.mantissa<=0n)return F("0");let n=Math.max(e.scale,t.scale),r=e.scale===n?e.mantissa:e.mantissa*10n**BigInt(n-e.scale),o=t.scale===n?t.mantissa:t.mantissa*10n**BigInt(n-t.scale),i=o*10n**6n,s=r+o;return{mantissa:i/s,scale:6}}function cu({symbol:e,side:t="buy",sizeUsd:n=null}={}){if(typeof e!="string"||e.length===0)return null;let r=e,o=e,i=ps().tokens;if(Object.hasOwn(i,e))r=e,o=i[e].symbolRaw;else if(e.endsWith("x")||e.endsWith("X")){let f=e.slice(0,-1).toUpperCase();if(Object.hasOwn(i,f))r=f,o=i[f].symbolRaw;else return null}else return null;let s=i[r],a=PN(r);if(!s||!a)return null;let c=He(a.priceUsd,`${r}.priceUsd`),l=ce(a.liquidityUsd),u=n===null?F("0"):n,d=u.mantissa===0n?F("0"):TN(l,u),p=!1;u.mantissa===0n&&(a.liquidityUsd??0)>=_w&&(p=!1);let m={venue:AN,chain:IN,instrument:"spot",tier:_N,symbolRaw:o,symbol:r,side:t,requestedSize:u,mid:c,fees:null,gasEstimate:null,priceImpact:d,fundingHourly:null,costAccounted:p,capturedAt:ps().capturedAt*1e3,blockOrSeq:null,raw:{fixture:"fixtures/solana_xstocks.json",mint:s.mint,pairAddress:a.pairAddress,dexId:a.dexId,quote:a.quote,liquidityUsd:a.liquidityUsd,volume24h:a.volume24h,priceUsd:a.priceUsd,source:"dexscreener",approximate:!0,reasonCostUnknown:"DexScreener liquidity.usd is a third-party float; fees and SOL gas not captured; impact is modeled",thin:(a.liquidityUsd??0)<_w}};return Ae(m)}function Pw({side:e="buy",sizeUsd:t=null}={}){return au().map(n=>cu({symbol:n,side:e,sizeUsd:t})).filter(n=>n!==null)}var CN="ton_stonfi",NN="ton",ON="quote-only",RN=25e3,$N=.01;function ms(){return nw()}function lu(){return Object.keys(ms().tokens).sort()}function LN(e){let t=ms().pairs[e];return!t||t.length===0?null:[...t].sort((n,r)=>(r.liquidityUsd??0)-(n.liquidityUsd??0))[0]}function MN(e,t){if(e===null||t===null)return null;if(e.mantissa<=0n||t.mantissa<=0n)return F("0");let n=Math.max(e.scale,t.scale),r=e.scale===n?e.mantissa:e.mantissa*10n**BigInt(n-e.scale),o=t.scale===n?t.mantissa:t.mantissa*10n**BigInt(n-t.scale),i=o*10n**6n,s=r+o;return{mantissa:i/s,scale:6}}function uu({symbol:e,side:t="buy",sizeUsd:n=null}={}){if(typeof e!="string"||e.length===0)return null;let r=e,o=e,i=ms().tokens;if(Object.hasOwn(i,e))r=e,o=i[e].symbolRaw;else if(e.endsWith("x")||e.endsWith("X")){let f=e.slice(0,-1).toUpperCase();if(Object.hasOwn(i,f))r=f,o=i[f].symbolRaw;else return null}else{let f=e.toUpperCase();if(Object.hasOwn(i,f))r=f,o=i[f].symbolRaw;else return null}let s=i[r],a=LN(r);if(!s||!a)return null;let c=He(a.priceUsd,`${r}.priceUsd`),l=ce(a.liquidityUsd),u=n===null?F("0"):n,d=u.mantissa===0n?F("0"):MN(l,u),m={venue:CN,chain:NN,instrument:"spot",tier:ON,symbolRaw:o,symbol:r,side:t,requestedSize:u,mid:c,fees:null,gasEstimate:null,priceImpact:d,fundingHourly:null,costAccounted:!1,capturedAt:ms().capturedAt*1e3,blockOrSeq:null,raw:{fixture:"fixtures/ton_xstocks.json",mint:s.mint,pairAddress:a.pairAddress,dexId:a.dexId,quote:a.quote,liquidityUsd:a.liquidityUsd,volume24h:a.volume24h,priceUsd:a.priceUsd,source:"dexscreener",approximate:!0,reasonCostUnknown:"DexScreener liquidity.usd is a third-party float; fees and TON gas not captured; impact is modeled; TON books are thin",thin:(a.liquidityUsd??0)<RN,impactSizeFractionHint:$N}};return Ae(m)}function Tw({side:e="buy",sizeUsd:t=null}={}){return lu().map(n=>uu({symbol:n,side:e,sizeUsd:t})).filter(n=>n!==null)}var Cw=3600*1e3;function du(e){return e==null||e===""?null:typeof e=="object"&&e&&typeof e.mantissa=="bigint"?e:F(String(e))}function Nw(e,{sizeUsd:t=null}={}){if(typeof e!="string"||!e.trim())throw new TypeError("ticker is required");let n=e.trim().toUpperCase(),r=du(t),o=[],i=Aw({symbol:`xyz:${n}`,sizeUsd:r});if(i)o.push(i);else for(let l of us({ticker:n,sizeUsd:r}))o.push(l);for(let l of ls({sizeUsd:r}))l.symbol===n&&o.push(l);for(let l of ds({sizeUsd:r}))l.symbol===n&&o.push(l);let s=Yn({symbol:n,sizeUsd:r});s&&o.push(s);let a=cu({symbol:n,sizeUsd:r});a&&o.push(a);let c=uu({symbol:n,sizeUsd:r});return c&&o.push(c),o}function BN(e={}){let t=String(e.ticker||e.symbol||"").trim().toUpperCase();if(!t)throw new Error("bestEquityRoute requires ticker");let n=du(e.sizeUsd??e.size??null),r=Nw(t,{sizeUsd:n});if(r.length===0)return{ticker:t,rankedOn:"gross",ranked:[],winner:null,runnersUp:[],improvementBps:null,sourcesAnswered:0,sourcesTried:0,failed:[],excluded:[],bestPreparable:null,instrumentMix:"homogeneous",note:"no venue answered for this ticker in the pinned fixture capture"};let o=r[0].capturedAt,i=String(o).length<=10?o*1e3:o,s=e.nowMs==null,a=e.nowMs??o+1e3,c=Math.max(0,Date.now()-i),l=ru(r,{nowMs:a,horizonHours:e.horizonHours!=null?Number(e.horizonHours):void 0,skipLiveness:e.skipLiveness===!0});return{ticker:t,...l,dataSource:s?"fixture":"caller-clock",capturedAt:i,ageMs:c,stale:c>Cw}}function UN(){let e=[{venue:"hyperliquid_hip3",tier:"quote-only",chain:"hyperliquid",n:us().length},{venue:"arcus_perp",tier:"quote-only",chain:"robinhood-4663",n:ls().length},{venue:"arcus_spot",tier:"quote-only",chain:"robinhood-4663",n:ds().length},{venue:"rh_uniswap",tier:"prepare",chain:4663,n:iu().length},{venue:"solana_xstocks",tier:"quote-only",chain:"solana",n:au().length},{venue:"ton_stonfi",tier:"quote-only",chain:"ton",n:lu().length}],t=[...us(),...ls(),...ds(),...Sw(),...Pw(),...Tw()],n=(t[0]?.capturedAt??Date.now())+1e3,{survivors:r,excluded:o}=ss(t,{nowMs:n});return{inventory:e,hip3Dexs:Ew(),liveness:{survivors:r.length,excluded:o.length,byReason:o.reduce((i,s)=>(i[s.reason]=(i[s.reason]??0)+1,i),{})},capturedAt:Ce().capturedAt,custody:"prepare-only",note:"quote-only venues are ranked for discovery; only rh_uniswap is preparable in v1"}}function DN(e={}){let t=String(e.ticker||e.symbol||"").trim().toUpperCase(),n=e.recipient||e.taker;if(!t)throw new Error("prepareEquityRoute requires ticker");if(!n)throw new Error("prepareEquityRoute requires recipient (signing wallet)");let r=du(e.sizeUsd??e.size??null),o=Yn({symbol:t,sizeUsd:r});if(!o)return{ok:!1,failureKind:"no-prepare-path",ticker:t,note:"no RH Uniswap prepare-tier route for this ticker in fixtures"};try{let i=String(o.capturedAt).length<=10?o.capturedAt*1e3:o.capturedAt,s=e.nowMs!=null,a=s?Number(e.nowMs):Date.now(),c=Math.max(0,Date.now()-i),l=su({symbol:t,sizeUsd:r,recipient:n,nowMs:a});return{ok:!0,ticker:t,artifact:l,bestPreparableVenue:"rh_uniswap",dataSource:s?"caller-clock":"live-clock",capturedAt:i,ageMs:c,stale:c>Cw}}catch(i){return{ok:!1,failureKind:"prepare-refused",ticker:t,error:String(i.message||i)}}}function FN(e){return JSON.parse(JSON.stringify(e,(t,n)=>typeof n=="bigint"?n.toString():n))}var fe=Object.freeze({SAFE:"SAFE",CAUTION:"CAUTION",HONEYPOT:"HONEYPOT",UNKNOWN:"UNKNOWN"}),qN=5e3,HN=1500;function jN(e,t){return t===0n?null:Number((t-e)*10000n/t)}function VN(e,t){if(e==null||e==="")throw new Error(`sell-sim: ${t} required`);if(typeof e=="bigint")return e;let n=String(e).trim();if(!/^\d+$/.test(n))throw new Error(`sell-sim: ${t} must be an integer base-unit amount`);return BigInt(n)}async function $w(e={},t={}){let{token:n,base:r,chainId:o=null}=e;if(!n)throw new Error("sell-sim: token required");if(!r)throw new Error("sell-sim: base asset required");if(typeof t.quote!="function")throw new Error("sell-sim: opts.quote function required");let i=VN(e.amountIn,"amountIn"),s;try{s=await t.quote({chainId:o,inputMint:r,outputMint:n,amount:i.toString(),side:"buy"})}catch(p){return Rt(fe.UNKNOWN,`buy leg could not be quoted: ${Rw(p)}`,{chainId:o,token:n,base:r})}let a=Ow(s?.outAmount);if(a==null||a===0n)return Rt(fe.UNKNOWN,"buy leg returned no output \u2014 no route or no liquidity",{chainId:o,token:n,base:r});let c;try{c=await t.quote({chainId:o,inputMint:n,outputMint:r,amount:a.toString(),side:"sell"})}catch(p){return Rt(fe.HONEYPOT,`buy routes but the SELL leg fails to quote (${Rw(p)}) \u2014 you would not be able to exit`,{chainId:o,token:n,base:r,tokensOut:a.toString()})}let l=Ow(c?.outAmount);if(l==null||l===0n)return Rt(fe.HONEYPOT,"sell leg returns zero \u2014 the position cannot be exited for value",{chainId:o,token:n,base:r,tokensOut:a.toString()});let u=jN(l,i),d={chainId:o,token:n,base:r,amountIn:i.toString(),tokensOut:a.toString(),roundTripOut:l.toString(),roundTripLossBps:u};return u==null?Rt(fe.UNKNOWN,"could not compute round-trip loss",d):u>=qN?Rt(fe.HONEYPOT,`round trip loses ${(u/100).toFixed(1)}% \u2014 a sell tax or rigged curve, not normal slippage`,d):u>=HN?Rt(fe.CAUTION,`round trip loses ${(u/100).toFixed(1)}% \u2014 high tax or thin liquidity`,d):Rt(fe.SAFE,`round trip loses ${(u/100).toFixed(1)}% \u2014 exit path looks normal`,d)}function Rt(e,t,n){return{status:e,safe:e===fe.SAFE,tradable:e===fe.SAFE||e===fe.CAUTION,reason:t,...n}}function Ow(e){if(e==null)return null;try{let t=String(e).trim();return/^\d+$/.test(t)?BigInt(t):null}catch{return null}}function Rw(e){return String(e?.message||e).slice(0,120)}async function zN(e={},t={}){let n=await $w(e,t);if(!(n.status===fe.SAFE||n.status===fe.CAUTION&&t.allowCaution!==!1||n.status===fe.UNKNOWN&&t.allowUnknown===!0)){let o=new Error(`sell-sim ${n.status}: ${n.reason}`);throw o.sellSim=n,o}return n}var $t=Object.freeze({ALERT_ONLY:"alert_only",EXECUTE:"execute"}),WN=new Set(["watch","watch this","ping","ping me","alert","notify"]),GN=new Set(["watching","armed"]);function Lw(e){if(typeof e!="string"||!e.trim())throw new TypeError("explicit action verb required");let t=e.trim().toLowerCase().replace(/\s+/g," ");if(WN.has(t))return $t.ALERT_ONLY;if(t==="arm")return $t.EXECUTE;throw new TypeError(`unsupported action verb: ${t}`)}function KN(e={}){let{verb:t,...n}=e;return{...n,active:!0,actionMode:Lw(t)}}function YN(e){if(!e||typeof e!="object"||typeof e.active!="boolean")throw new TypeError("active must be boolean");if(!Object.values($t).includes(e.actionMode))throw new TypeError("actionMode must be alert_only or execute");return e}function XN(e){return e?.active===!0&&e?.actionMode===$t.ALERT_ONLY}function QN(e){return e?.active===!0&&e?.actionMode===$t.EXECUTE}function JN(e={}){if(e.actionMode!==void 0&&e.actionMode!==$t.ALERT_ONLY)throw new TypeError("non-alert record cannot enter alert-only watch migration");let t=typeof e.active=="boolean"?e.active:GN.has(String(e.status||"").toLowerCase());return{...e,active:t,actionMode:$t.ALERT_ONLY}}import{createHash as ZN}from"node:crypto";var pu=1,Mw=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),eO=Object.freeze(["read","simulate"]),Bw=1e4,Uw=1440*60,Dw=128,Fw=256,qw=64,Hw=256,jw=/^0x[0-9a-fA-F]{40}$/,tO=/^[a-z][a-z0-9_-]*:[a-z0-9._-]+$/,nO=/^[a-z][a-z0-9_-]*:\*$/,rO=/^[A-Za-z0-9._:-]+$/,oO=/^[A-Za-z0-9._:-]+$/,Vw=/^(0|[1-9][0-9]*)$/,lo=class extends Error{constructor(t){let n=t.map(r=>`${r.field}: ${r.message}`);super(`invalid grant (${t.length} error${t.length===1?"":"s"}): ${n.join("; ")}`),this.name="GrantValidationError",this.errors=t}};function iO(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function sO(e){if(typeof e=="bigint")return e>=0n?e.toString(10):null;if(typeof e=="number")return!Number.isSafeInteger(e)||e<0?null:String(e);if(typeof e=="string"){let t=e.trim();return Vw.test(t)?t:null}return null}function Xn(e){if(typeof e=="bigint")return e<0n||e>BigInt(Number.MAX_SAFE_INTEGER)?null:Number(e);if(typeof e=="number")return!Number.isSafeInteger(e)||e<0?null:e;if(typeof e=="string"){let t=e.trim();if(!Vw.test(t))return null;let n=Number(t);return Number.isSafeInteger(n)?n:null}return null}function zw(e){let t=String(e).split(":")[0];return eO.includes(t)}function Ww(e,t={}){let n=[],r=(d,p)=>n.push({field:d,message:p});if(!iO(e))return r("grant","grant must be a plain object"),{ok:!1,errors:n,grant:null};for(let d of Object.keys(e))Mw.includes(d)||r(d,"unknown field is not allowed");for(let d of Mw)(!(d in e)||e[d]==null)&&r(d,"required field is missing");if(n.length)return{ok:!1,errors:n,grant:null};let o={},i=Xn(e.chainId);i==null||i<=0?r("chainId","must be a positive integer chain id"):o.chainId=i;for(let d of["agentAddress","accountAddress"]){let p=e[d];typeof p!="string"||!jw.test(p.trim())?r(d,"must be a 0x-prefixed 20-byte hex address"):o[d]=p.trim().toLowerCase()}if(!Array.isArray(e.actions)||e.actions.length===0)r("actions","must be a non-empty array of action scopes");else if(e.actions.length>qw)r("actions",`too many actions (max ${qw})`);else{let d=[];for(let p of e.actions){let m=typeof p=="string"?p.trim():null;if(!m){r("actions","action entries must be non-empty strings");continue}if(m.includes("*")){t.allowWildcardActions===!0&&nO.test(m)?d.push(m):r("actions",`broad wildcard action "${m}" is rejected (fail closed)`);continue}if(!tO.test(m)){r("actions",`malformed action "${m}" (expected verb:resource)`);continue}d.push(m)}o.actions=[...new Set(d)].sort()}if(!Array.isArray(e.targets))r("targets","must be an array of contract addresses");else if(e.targets.length>Hw)r("targets",`too many targets (max ${Hw})`);else{let d=[];for(let p of e.targets){let m=typeof p=="string"?p.trim():null;if(!m||!jw.test(m)){r("targets",`target "${p}" must be a 0x-prefixed 20-byte hex address (wildcards not allowed)`);continue}d.push(m.toLowerCase())}if(o.targets=[...new Set(d)].sort(),o.targets.length===0&&Array.isArray(o.actions)){let p=o.actions.filter(m=>!zw(m));(p.length>0||o.actions.length===0)&&r("targets",`empty targets are only allowed for read/simulate scopes (blocked by: ${p.join(", ")||"no valid actions"})`)}}for(let d of["maxValueWei","maxGasWei"]){let p=sO(e[d]);p==null?r(d,"must be a non-negative integer wei amount"):o[d]=p}let s=Xn(e.maxSlippageBps);s==null||s>Bw?r("maxSlippageBps",`must be an integer between 0 and ${Bw}`):o.maxSlippageBps=s;let a=864e10,c=Xn(e.expiresAt);if(c==null||c<=0)r("expiresAt","must be a positive unix-seconds timestamp");else if(c>a)r("expiresAt","exceeds the max unix-seconds timestamp (pass seconds, not milliseconds)");else if(o.expiresAt=c,t.now!=null){let d=Xn(t.now);d==null?r("expiresAt","opts.now must be a unix-seconds integer"):c<=d?r("expiresAt",`grant is expired (expiresAt ${c} <= now ${d})`):c-d>Uw&&r("expiresAt",`grant exceeds the hard 24-hour TTL (${Uw} seconds)`)}let l=typeof e.nonce=="string"?e.nonce.trim():Xn(e.nonce)!=null?String(Xn(e.nonce)):null;!l||l.length>Dw||!rO.test(l)?r("nonce",`must be a non-empty string (max ${Dw} chars, [A-Za-z0-9._:-])`):o.nonce=l;let u=typeof e.revocationKey=="string"?e.revocationKey.trim():null;return!u||u.length>Fw||!oO.test(u)?r("revocationKey",`must be a non-empty public identifier (max ${Fw} chars, [A-Za-z0-9._:-])`):o.revocationKey=u,n.length?{ok:!1,errors:n,grant:null}:{ok:!0,errors:[],grant:o}}function mu(e,t={}){let{ok:n,errors:r,grant:o}=Ww(e,t);if(!n)throw new lo(r);return o}function fu(e,t={}){let n=mu(e,t),o=Object.keys(n).sort().map(i=>`${JSON.stringify(i)}:${JSON.stringify(n[i])}`);return`{"version":${pu},${o.join(",")}}`}function Gw(e,t={}){return ZN("sha256").update(fu(e,t),"utf8").digest("hex")}var Kw=new Set(["read:markets","read:nfts","read:positions","watch:contracts","prepare:trade","prepare:mint","prepare:build","build:factory","agent:shadow","agent:execute"]),aO="agent:execute",cO="build:factory",Yw=["read:markets","read:nfts","read:positions","watch:contracts","prepare:trade","prepare:mint","prepare:build","agent:shadow"];function lO(e){let t=Array.isArray(e)&&e.length?e:Yw,n=[...new Set(t.map(o=>String(o).trim()).filter(Boolean))],r=n.filter(o=>!Kw.has(o));if(r.length)throw new Error(`Invalid scope: ${r.join(", ")}`);return n}var Xw=Object.freeze([{id:"oracle",label:"Oracle Native",kind:"oracle",bins:["oracle"],website:!0,detect:!0},{id:"hermes",label:"Hermes Agent",kind:"mcp",bins:["hermes"],mcpTarget:"generic",configKey:"hermes",website:!0,detect:!0},{id:"claude",label:"Claude Code",kind:"mcp",bins:["claude"],mcpTarget:"claude-code",configKey:"claudeCode",website:!0,detect:!0},{id:"claude-desktop",label:"Claude Desktop",kind:"mcp",bins:[],mcpTarget:"claude-desktop",configKey:"claudeDesktop",website:!0,detect:!1},{id:"chatgpt",label:"ChatGPT",kind:"mcp",bins:[],mcpTarget:"chatgpt",configKey:"chatgpt",website:!0,detect:!1},{id:"codex",label:"OpenAI Codex",kind:"mcp",bins:["codex"],mcpTarget:"codex",configKey:"codex",website:!0,detect:!0},{id:"cursor",label:"Cursor",kind:"mcp",bins:["cursor","cursor-agent"],mcpTarget:"cursor",configKey:"cursor",website:!0,detect:!0},{id:"windsurf",label:"Windsurf",kind:"mcp",bins:["windsurf"],mcpTarget:"vscode",configKey:"windsurf",website:!0,detect:!0},{id:"vscode",label:"VS Code / Copilot",kind:"mcp",bins:["code","code-insiders"],mcpTarget:"vscode",configKey:"vscode",website:!0,detect:!0},{id:"openclaw",label:"OpenClaw",kind:"mcp",bins:["openclaw","claw"],mcpTarget:"generic",configKey:"openclaw",website:!0,detect:!0},{id:"perplexity",label:"Perplexity",kind:"mcp",bins:["perplexity","pplx"],mcpTarget:"generic",configKey:"perplexity",website:!0,detect:!0},{id:"manus",label:"Manus",kind:"mcp",bins:["manus"],mcpTarget:"generic",configKey:"manus",website:!0,detect:!0},{id:"prime",label:"Prime Intellect Agent",kind:"mcp",bins:["prime-agent","prime"],mcpTarget:"generic",configKey:"prime",website:!1,detect:!0},{id:"opencode",label:"OpenCode",kind:"mcp",bins:["opencode"],mcpTarget:"generic",configKey:"opencode",website:!1,detect:!0},{id:"aider",label:"Aider",kind:"mcp",bins:["aider"],mcpTarget:"generic",configKey:"aider",website:!1,detect:!0},{id:"continue",label:"Continue",kind:"mcp",bins:["continue"],mcpTarget:"vscode",configKey:"continue",website:!1,detect:!0},{id:"goose",label:"Goose",kind:"mcp",bins:["goose"],mcpTarget:"generic",configKey:"goose",website:!1,detect:!0},{id:"amp",label:"Amp",kind:"mcp",bins:["amp"],mcpTarget:"generic",configKey:"amp",website:!1,detect:!0},{id:"generic",label:"Generic MCP",kind:"mcp",bins:[],mcpTarget:"generic",configKey:"genericMcp",website:!0,detect:!1}]);function Qw(){return Xw.filter(e=>e.website)}var uO="@oracle-agent/oracle",dO="npx",pO=["-y","--package",uO,"oracle-data-mcp"],Zw=/(?:^|_)(?:PRIVATE_KEY|SECRET|TOKEN|PASSWORD|PASSPHRASE|MNEMONIC|SEED)(?:_|$)/i;function gu(e,t){if(typeof e!="string"||!e.trim())throw new TypeError(`${t} must be a non-empty string`);if(/\r|\n|\0/.test(e))throw new TypeError(`${t} must be a single-line string`);return e.trim()}function mO(e){let t=gu(e,"url"),n;try{n=new URL(t)}catch{throw new TypeError("url must be a valid http(s) URL")}if(!/^https?:$/.test(n.protocol)||n.username||n.password)throw new TypeError("url must be a credential-free http(s) URL");for(let r of n.searchParams.keys())if(Zw.test(r)||/^(?:key|api[_-]?key|auth)$/i.test(r))throw new TypeError(`url must not contain secret-shaped query parameter: ${r}`);return n.href}function fO(e){let t=gu(e,"key");if(/^[A-Z][A-Z0-9_]*\s*=/.test(t)||/-----BEGIN [A-Z ]*PRIVATE KEY-----/.test(t))throw new TypeError("key must be an Oracle agent key, not an environment assignment or private key");if(/^(?:0x)?[0-9a-f]{64}$/i.test(t)||t.trim().split(/\s+/).length>=12)throw new TypeError("key looks like private signing material");return t}function hO(e){let t=gu(e,"label");if(!/^[a-z0-9][a-z0-9_-]{0,62}$/i.test(t))throw new TypeError("label must contain only letters, digits, underscores, and hyphens");if(Zw.test(t))throw new TypeError("label must not be a secret-shaped environment name");return t}function Ne(e){return`${JSON.stringify(e,null,2)}
|
|
189
|
-
`}function
|
|
190
|
-
`)}function
|
|
191
|
-
`)}function
|
|
192
|
-
`)}function ex({url:e,key:t,label:n="oracle-data"}={}){let r=mO(e),o=fO(t),i=hO(n),s={command:dO,args:[...pO],env:{ORACLE_DATA_URL:r,ORACLE_AGENT_KEY:o}},a={mcpServers:{[i]:s}},c={hermes:Jw(i,s),claudeCode:Ne(a),codex:gO(i,s),cursor:Ne(a),genericMcp:Ne(a),oracleNative:yO(),chatgpt:Ne(a),claudeDesktop:Ne(a),windsurf:Ne(a),vscode:Ne(a),openclaw:Ne(a),perplexity:Ne(a),manus:Ne(a),prime:Jw(i,s),opencode:Ne(a)};for(let l of Qw()){if(l.kind==="oracle")continue;let u=l.configKey||l.id;c[u]||(c[u]=Ne(a))}return c}var bO=ex;var tx=Object.freeze({assetHighPct:50,assetMediumPct:25,chainHighPct:75,venueHighPct:60,stablecoinHighPct:70}),wO=new Set(["USDC","USDT","USDT0","DAI","FRAX","LUSD","TUSD","USDP","GUSD","PYUSD","USDE"]);function nx(e){if(e===null||e===""||e===void 0)return null;let t=Number(e);return Number.isFinite(t)&&t>=0?t:null}function po(e){return Math.round((e+Number.EPSILON)*1e8)/1e8}function bu(e,t){return t>0?po(e/t*100):null}function wu(e){return e.address||e.owner||e.walletAddress||e.wallet?.address||null}function xO(e){let t=Array.isArray(e)?e:Array.isArray(e?.entries)?e.entries:[],n=new Map;for(let r of t){if(!r?.address)continue;let o=String(r.address).toLowerCase();n.has(o)||n.set(o,r)}return n}function rn(e,t,n={}){if(!t||typeof t!="object")return;let r=String(t.symbol??t.coin??t.name??t.collection??t.tokenId??"unknown"),o=nx(t.usdValue??t.valueUsd??t.knownUsd??t.estimatedValueUsd??t.floorValueUsd),i=t.kind==="nft"||t.type==="nft"||t.collection||t.tokenId!=null?"nft":"fungible";e.push({symbol:r,usdValue:o,chain:String(t.chain??t.chainName??n.chain??"unknown"),venue:String(t.venue??t.protocol??t.platform??n.venue??"wallet"),address:t.address??n.address??null,kind:i,stablecoin:t.stablecoin===!0||wO.has(r.toUpperCase())})}function SO(e){let t=[],n=wu(e);for(let r of e.assets||e.holdings||[])rn(t,r,{address:n,chain:e.chain,venue:e.venue});for(let r of e.chains||[]){let o=r.chain??r.name??r.slug??(r.chainId!=null?String(r.chainId):r.family)??"unknown",i={address:r.address??n,chain:o,venue:r.venue};r.native&&(r.native.amount==null||Number(r.native.amount)!==0)&&rn(t,{...r.native,symbol:r.native.symbol??r.symbol??o},i);for(let a of r.assets||r.fungibleTokens?.assets||[])rn(t,a,i);for(let a of r.collectibles?.assets||r.nfts||[])rn(t,{...a,kind:"nft"},i);for(let a of r.spot?.balances||[])rn(t,a,{...i,venue:"Hyperliquid spot"});let s=nx(r.perps?.accountValueUsd);s!=null&&rn(t,{symbol:"perps account",usdValue:s},{...i,venue:"Hyperliquid perps"})}for(let r of e.inventory?.items||e.nfts?.items||[])rn(t,{...r,kind:"nft"},{address:n,chain:r.chain??e.chain,venue:r.marketplace??e.venue});return t}function vO(e,t){let n=wu(e),r=e.chain??e.chainId??e.family??"*";return n?`${String(n).toLowerCase()}|${String(r).toLowerCase()}`:`snapshot:${t}`}function yu(e,t,n){let r=new Map;for(let o of e){if(o.usdValue==null)continue;let i=o[t];r.set(i,(r.get(i)||0)+o.usdValue)}return[...r].map(([o,i])=>({name:o,knownUsd:po(i),percentOfKnown:bu(i,n)})).sort((o,i)=>i.knownUsd-o.knownUsd||o.name.localeCompare(i.name))}function fs(e={},t={}){let n=Array.isArray(e)?e:Array.isArray(e.snapshots)?e.snapshots:e.snapshot?[e.snapshot]:[],r=xO(t.labels??t.addressBook??e.labels??e.addressBook),o={...tx,...e.thresholds||{},...t.thresholds||{}},i=[],s=new Set,a=0;n.forEach((v,L)=>{if(!v||typeof v!="object")return;let V=vO(v,L);s.has(V)?a+=1:(s.add(V),i.push(v))});let c=i.flatMap(SO),l=c.filter(v=>v.usdValue!=null),u=c.filter(v=>v.usdValue==null),d=i.reduce((v,L)=>v+Number(L.valuation?.unpricedNonzeroItems||L.unpricedNonzeroItems||0),0),p=po(l.reduce((v,L)=>v+L.usdValue,0)),m=u.length+d,f=yu(l,"chain",p),h=yu(l,"venue",p),g=yu(l,"symbol",p);for(let v of f)v.chain=v.name;for(let v of h)v.venue=v.name;for(let v of g)v.asset=v.name,v.symbol=v.name;let y=po(l.filter(v=>v.stablecoin).reduce((v,L)=>v+L.usdValue,0)),S=c.filter(v=>v.kind==="nft"),w=i.reduce((v,L)=>v+Number(L.valuation?.nftUnvaluedItems||0),0),x=S.filter(v=>v.usdValue==null).length+w,k=S.filter(v=>v.usdValue!=null).length,C=g[0]||null,P=C?C.percentOfKnown>=o.assetHighPct?"high":C.percentOfKnown>=o.assetMediumPct?"medium":"low":"unknown",I=[];m&&I.push(`${m} nonzero holding(s) have unknown USD value; they are excluded from totals and percentages.`),x&&I.push("NFT valuation coverage is partial; estimates are not executable bids and unvalued NFTs are not treated as zero."),a&&I.push(`${a} duplicate address/chain snapshot(s) were ignored.`),C&&P!=="low"&&I.push(`Asset concentration is ${P}: ${C.name} is ${C.percentOfKnown}% of known value.`),f[0]?.percentOfKnown>=o.chainHighPct&&I.push(`Chain concentration is high: ${f[0].name} is ${f[0].percentOfKnown}% of known value.`),h[0]?.percentOfKnown>=o.venueHighPct&&I.push(`Venue concentration is high: ${h[0].name} is ${h[0].percentOfKnown}% of known value.`);let A=i.map(wu).filter(Boolean).map(v=>{let L=r.get(String(v).toLowerCase());return{address:v,label:L?.label??null,who:L?.who??null,role:L?.role??null}});return{totalKnownUsd:p,coverage:{complete:i.length>0&&m===0&&i.every(v=>v.valuation?.complete!==!1&&v.coverage?.complete!==!1),label:m===0&&i.length&&i.every(v=>v.valuation?.complete!==!1&&v.coverage?.complete!==!1)?"complete for the supplied snapshots":"known priced value only; portfolio coverage is partial or unverified",unknownUsd:m?null:0,pricedItemCount:l.length,unknownItemCount:m,snapshotCount:i.length,duplicatesIgnored:a},chainExposures:f,venueExposures:h,topAssets:g.slice(0,Math.max(1,Number(t.topAssets??e.topAssets??10))),concentrationRisk:{level:P,topAsset:C?.name??null,topAssetPercent:C?.percentOfKnown??null,thresholds:{mediumPct:o.assetMediumPct,highPct:o.assetHighPct}},stablecoinExposure:{knownUsd:y,percentOfKnown:bu(y,p),high:p>0&&bu(y,p)>=o.stablecoinHighPct},nftCoverage:{status:S.length||w?x?"partial":"valued":"not-observed",valuedItems:k,unvaluedItems:x,knownUsd:po(S.filter(v=>v.usdValue!=null).reduce((v,L)=>v+L.usdValue,0))},addresses:A,warnings:[...new Set(I)]}}var EO=fs;var he=(e,t=0)=>Number.isFinite(Number(e))?Number(e):t,je=e=>Math.round((e+Number.EPSILON)*1e8)/1e8,se=(e,t="unknown")=>String(e??t).trim().toLowerCase(),tt=e=>e.asset??e.symbol??e.coin,ox=e=>e.address??e.owner??e.account,gs=e=>[se(e.chain??e.chainId),se(ox(e)),se(tt(e)),se(e.source)].join("|");function rx(e){return he(e.asOf??e.updatedAt??e.timestamp,0)}function kO(e){let t=e.fillId??e.tradeId??e.orderId??e.txHash??e.transactionHash??e.timestamp??e.asOf;return[gs(e),se(t),se(e.side),he(e.quantity??e.amount??e.size),he(e.price??e.priceUsd)].join("|")}function hs(e,t){let n=new Map,r=0;for(let o of e||[]){if(!o||typeof o!="object"||!tt(o))continue;let i=t==="fill"?kO(o):gs(o);n.has(i)?(r+=1,t!=="fill"&&rx(o)>rx(n.get(i))&&n.set(i,{...o,identity:i})):n.set(i,{...o,identity:i})}return{rows:[...n.values()].sort((o,i)=>o.identity.localeCompare(i.identity)),duplicatesIgnored:r}}function AO(e){let t=new Map;for(let n of e){let r=[gs(n),`${se(n.chain??n.chainId)}|${se(tt(n))}`,`*|${se(tt(n))}`];for(let o of r)t.has(o)||t.set(o,n)}return t}function IO(e,t){return t.get(gs(e))??t.get(`${se(e.chain??e.chainId)}|${se(tt(e))}`)??t.get(`*|${se(tt(e))}`)??null}function _O(e){let t=new Map,n=0;for(let r of e){let o=[se(r.chain??r.chainId),se(ox(r)),se(tt(r))].join("|"),i=t.get(o)??{quantity:0,cost:0},s=Math.abs(he(r.quantity??r.amount??r.size)),a=he(r.price??r.priceUsd),c=he(r.feeUsd);if(se(r.side)==="sell"){let l=Math.min(s,i.quantity),u=i.quantity?i.cost/i.quantity:he(r.costBasisUsd)/(s||1);n+=l*(a-u)-c,i.quantity-=l,i.cost-=l*u}else i.quantity+=s,i.cost+=s*a+c;t.set(o,i)}return{realizedPnlUsd:je(n),lots:t}}function xu(e={},t={}){let n=he(t.asOf??e.asOf,0),r=Math.max(0,he(t.priceTtlMs??e.priceTtlMs,6e4)),o=hs(e.balances||[],"balance"),i=hs(e.positions||[],"position"),s=hs(e.fills||[],"fill"),a=hs(e.prices||[],"price"),c=AO(a.rows),l=[],u=0,d=0;for(let A of[...o.rows,...i.rows]){let v=IO(A,c),L=he(A.quantity??A.amount??A.size),V=v?he(v.priceUsd??v.price,NaN):he(A.priceUsd,NaN);if(!Number.isFinite(V)){d+=1;continue}let ae=L*V,Ut=he(v?.asOf??A.priceAsOf,0),an=n-Ut>r;an&&(u+=Math.abs(ae)),l.push({...A,quantity:L,priceUsd:V,valueUsd:ae,stale:an,kind:i.rows.includes(A)?"position":"balance"})}let p=l.filter(A=>A.kind==="balance").reduce((A,v)=>A+v.valueUsd,0),m=l.filter(A=>A.kind==="position"),f=m.reduce((A,v)=>A+v.valueUsd,0),h=m.reduce((A,v)=>A+Math.abs(v.valueUsd),0),g=p+f,y=he(e.equityUsd,g),S=_O(s.rows).realizedPnlUsd,w=m.reduce((A,v)=>{let L=he(v.entryPriceUsd??v.averageEntryPrice??v.costBasisPrice,v.priceUsd);return A+v.quantity*(v.priceUsd-L)},0),x=new Map;for(let A of l)x.set(se(tt(A)),(x.get(se(tt(A)))||0)+Math.abs(A.valueUsd));let k=[...x.values()].reduce((A,v)=>A+v,0),C=[...x].map(([A,v])=>({asset:A,exposureUsd:je(v),percent:k?je(v/k*100):null})).sort((A,v)=>v.exposureUsd-A.exposureUsd||A.asset.localeCompare(v.asset)),P=l.reduce((A,v)=>A+Math.abs(v.valueUsd),0),I=fs({snapshots:[{assets:l.map(A=>({symbol:tt(A),usdValue:Math.abs(A.valueUsd),chain:A.chain,venue:A.source}))}],thresholds:e.thresholds});return Object.freeze({asOf:n,balances:o.rows,positions:i.rows,fills:s.rows,prices:a.rows,duplicatesIgnored:o.duplicatesIgnored+i.duplicatesIgnored+s.duplicatesIgnored+a.duplicatesIgnored,pnl:{realizedUsd:S,unrealizedUsd:je(w),totalUsd:je(S+w)},exposure:{grossUsd:je(h),netUsd:je(g),leverage:y>0?je(h/y):null,equityUsd:je(y)},concentration:C,priceCoverage:{pricedItems:l.length,unpricedItems:d,staleItems:l.filter(A=>A.stale).length,staleValueUsd:je(u),stalePercent:P?je(u/P*100):null,ttlMs:r},risk:I})}var PO=xu,TO=xu;import{createHash as $O}from"node:crypto";var mo=class extends Error{constructor(t,n){super(`secret material must never appear in a public API object (at ${t}, rule: ${n})`),this.name="SecretLeakError",this.path=t,this.rule=n}},CO=/(private[_-]?key|secret|bearer|keystore|mnemonic|seed[_-]?phrase|passphrase|password|api[_-]?key|access[_-]?token|auth[_-]?token|session[_-]?token|signer[_-]?url|signature)/i,NO=Object.freeze(["privkey","wif","xprv","seed"]);function ix(e){let t=String(e),n=t.toLowerCase().replace(/[\s._-]+/g,"");return CO.test(t)||NO.includes(n)}var OO=Object.freeze([{rule:"raw-32-byte-hex-key",re:/^0x[0-9a-fA-F]{64}$/},{rule:"raw-32-byte-hex-bare",re:/^[0-9a-fA-F]{64}$/},{rule:"extended-private-key",re:/\b(?:xprv|tprv|yprv|zprv)[1-9A-HJ-NP-Za-km-z]{107}\b/},{rule:"bitcoin-wif",re:/\b[59KLc][1-9A-HJ-NP-Za-km-z]{50,51}\b/},{rule:"bip39-mnemonic",re:/\b(?:[a-z]{3,8}\s+){11,23}[a-z]{3,8}\b/},{rule:"bearer-token",re:/bearer\s+[A-Za-z0-9._~+/=-]+/i},{rule:"pem-private-key",re:/-----BEGIN[A-Z ]*PRIVATE KEY-----/},{rule:"keystore-path",re:/keystore/i},{rule:"signer-url",re:/https?:\/\/\S*sign/i},{rule:"authorization-header",re:/authorization\s*:/i}]),RO=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"]);function on(e,t="$",n=new Set,r=""){if(e==null)return e;if(typeof e=="string"){let o=RO.includes(String(r).toLowerCase().replace(/[_-]/g,""));for(let{rule:i,re:s}of OO)if(!(o&&i.startsWith("raw-32-byte-hex"))&&s.test(e))throw new mo(t,i);return e}if(typeof e!="object"||n.has(e)||(n.add(e),ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e;if(e instanceof Map){for(let[o,i]of e.entries()){if(typeof o=="string"&&ix(o))throw new mo(`${t}[${JSON.stringify(o)}]`,"forbidden-key-name");on(o,`${t}[key]`,n),on(i,`${t}[${String(o)}]`,n)}return e}if(e instanceof Set){let o=0;for(let i of e.values())on(i,`${t}[${o++}]`,n);return e}if(Array.isArray(e))return e.forEach((o,i)=>on(o,`${t}[${i}]`,n)),e;for(let[o,i]of Object.entries(e)){if(ix(o))throw new mo(`${t}.${o}`,"forbidden-key-name");on(i,`${t}.${o}`,n,o)}return e}var ys=Object.freeze(["intent","quote_comparison","simulation","prepared","approval","signed","broadcast","settlement","balance_delta","position"]),vu=Object.freeze(Object.fromEntries(ys.map((e,t)=>[e,Object.freeze(t+1<ys.length?[ys[t+1]]:[])]))),sx=new Set(["signed","broadcast"]);function Su(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(Su).join(",")}]`:`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${Su(e[t])}`).join(",")}}`}function LO(e){return e===void 0?null:JSON.parse(JSON.stringify(e))}function bs(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){Object.freeze(e);for(let t of Object.values(e))bs(t)}return e}function Eu(e,t="fact"){try{on(e,t)}catch{throw new Error(`${t} contains custody material and is forbidden`)}}function ax(e){return $O("sha256").update(Su(e)).digest("hex")}function cx({tradeId:e,state:t,fact:n,asOf:r,previousHash:o,external:i}){let s={tradeId:e,state:t,asOf:r,previousHash:o??null,external:i===!0,fact:LO(n)};return bs({...s,hash:ax(s)})}function MO({tradeId:e,intent:t,asOf:n=0}={}){if(!e||typeof e!="string")throw new Error("tradeId is required");if(!t||typeof t!="object"||Array.isArray(t))throw new Error("intent fact is required");Eu(t,"intent");let r=cx({tradeId:e,state:"intent",fact:t,asOf:n,previousHash:null,external:!1});return bs({tradeId:e,state:"intent",events:[r],headHash:r.hash,custody:"none",execution:"prepare-only"})}function lx(e,t,n,r={}){if(ku(e),!(vu[e.state]||[]).includes(t))throw new Error(`invalid trade transition ${e.state} -> ${t}`);if(!n||typeof n!="object"||Array.isArray(n))throw new Error(`${t} fact is required`);Eu(n,t);let i=r.external===!0||r.externallySupplied===!0;if(sx.has(t)&&!i)throw new Error(`${t} must be an externally supplied fact; this module never signs or broadcasts`);let s=e.events.at(-1),a=r.asOf??s.asOf;if(!Number.isFinite(Number(a))||Number(a)<Number(s.asOf))throw new Error("asOf must be finite and monotonic");let c=cx({tradeId:e.tradeId,state:t,fact:n,asOf:a,previousHash:s.hash,external:i});return bs({...e,state:t,events:[...e.events,c],headHash:c.hash})}function ku(e){if(!e||!Array.isArray(e.events)||e.events.length===0)throw new Error("invalid trade lifecycle");if(e.custody!=="none")throw new Error("trade lifecycle custody must be none");if(e.execution!=="prepare-only")throw new Error("trade lifecycle execution must be prepare-only");let t=null;for(let n=0;n<e.events.length;n+=1){let r=e.events[n],{hash:o,...i}=r;if(ax(i)!==o)throw new Error(`trade event ${n} hash mismatch`);if(Eu(r.fact,`trade event ${n} fact`),!Number.isFinite(Number(r.asOf))||t&&Number(r.asOf)<Number(t.asOf))throw new Error(`trade event ${n} asOf must be finite and monotonic`);if(r.tradeId!==e.tradeId||r.previousHash!==t?.hash&&n>0)throw new Error(`trade event ${n} chain mismatch`);if(n===0&&(r.state!=="intent"||r.previousHash!==null))throw new Error("trade lifecycle must start with intent");if(t&&!vu[t.state]?.includes(r.state))throw new Error(`invalid recorded transition ${t.state} -> ${r.state}`);if(sx.has(r.state)&&r.external!==!0)throw new Error(`${r.state} is not externally supplied`);t=r}if(e.state!==t.state||e.headHash!==t.hash)throw new Error("trade lifecycle head mismatch");return!0}var BO=lx,UO=ku;function DO(e){return Array.isArray(e)?e.map((t,n)=>typeof t=="function"?{id:t.name||`provider-${n}`,health:t}:t):Object.entries(e||{}).map(([t,n])=>({id:t,health:typeof n=="function"?n:n?.health}))}async function FO(e,t){let n;try{let r=new Promise((i,s)=>{n=setTimeout(()=>s(Object.assign(new Error(`health timeout after ${t}ms`),{code:"TIMEOUT"})),t)});return{detail:await Promise.race([Promise.resolve().then(()=>e.health()),r]),transportOk:!0}}catch(r){return{error:r?.message||String(r),timedOut:r?.code==="TIMEOUT",transportOk:!1}}finally{clearTimeout(n)}}function ws(e,t,n,r,o=!1){let i=Number(e??t);if(!Number.isFinite(i)||i<r||o&&!Number.isInteger(i)){let s=o?"a positive integer":r===Number.NEGATIVE_INFINITY?"finite":r===0?"a nonnegative finite number":"a positive finite number";throw new TypeError(`${n} must be ${s}`)}return i}async function Au(e,t={}){let n=DO(e),r=ws(t.concurrency,4,"concurrency",1,!0),o=ws(t.timeoutMs,5e3,"timeoutMs",Number.EPSILON),i=ws(t.asOf,Date.now(),"asOf",Number.NEGATIVE_INFINITY),s=ws(t.ttlMs,6e4,"ttlMs",0),a=new Array(n.length),c=0;async function l(){for(;c<n.length;){let d=c++,p=n[d];if(!p?.id||typeof p.health!="function"){a[d]={id:p?.id??`provider-${d}`,ok:!1,state:"error",stale:!1,asOf:i,ttlMs:s,error:"health function is required"};continue}let m=await FO(p,o),f=Number(m.detail?.asOf??m.detail?.updatedAt??i),h=m.transportOk&&i-f>s,g=!(m.detail&&typeof m.detail=="object"&&m.detail.ok===!1),y=m.transportOk&&g&&!h;a[d]={id:String(p.id),ok:y,state:m.timedOut?"timeout":!m.transportOk||!g?"error":h?"stale":"fresh",stale:h,asOf:f,checkedAsOf:i,ttlMs:s,...m.detail===void 0?{}:{detail:m.detail},...m.error?{error:m.error}:{}}}}await Promise.all(Array.from({length:Math.min(r,Math.max(1,n.length))},l));let u={fresh:0,stale:0,error:0,timeout:0};for(let d of a)u[d.state]+=1;return{ok:a.every(d=>d.ok),asOf:i,ttlMs:s,timeoutMs:o,counts:u,providers:a}}var qO=Au,HO=Au;import{createHash as jO}from"node:crypto";var Iu=1,wx=/^[a-z0-9][a-z0-9._-]{0,63}$/,xx=/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/,VO=new Set(["open","high","low","close","volume","fundingRate","openInterest"]),zO=new Set(["sma","ema","rsi","macd","bollinger","atr"]),WO=new Set(["gt","gte","lt","lte","eq"]),GO=new Set(["and","or","not"]),KO=new Set(["above","below"]),YO=new Set(["line","signal","histogram"]),XO=new Set(["upper","middle","lower"]),_u=new Set(["compare","logic","cross"]),ux=new Set(["version","id","name","venue","market","parameters","nodes","rules","risk"]),dx=new Set(["value","min","max","step"]),Pu=new Set(["entryLong","entryShort","exitLong","exitShort"]),px=new Set(["maxLeverage","maxNotionalUsd","positionSizePct","stopLossPct","takeProfitPct","cooldownBars","maxDailyLossPct","expiresAt"]),QO=new Set(["id","type"]),mx={input:new Set(["id","type","field"]),constant:new Set(["id","type","value"]),indicator:new Set(["id","type","indicator","input","period","fastPeriod","slowPeriod","signalPeriod","stdDev","output"]),compare:new Set(["id","type","op","left","right"]),logic:new Set(["id","type","op","inputs"]),cross:new Set(["id","type","direction","left","right"])},fx=16,hx=128,gx=100,Qn=class extends Error{constructor(t){let n=t.map(r=>`${r.path}: ${r.message}`);super(`invalid strategy (${t.length} error${t.length===1?"":"s"}): ${n.join("; ")}`),this.name="StrategyValidationError",this.errors=t}};function Oe(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function te(e){return typeof e=="number"&&Number.isFinite(e)}function yx(e){return Number.isInteger(e)&&e>0}function Cu(e){if(e==null||typeof e!="object"||Object.isFrozen(e))return e;if(Array.isArray(e)){for(let t of e)Cu(t);return Object.freeze(e)}for(let t of Object.keys(e))Cu(e[t]);return Object.freeze(e)}function Nu(e){if(Array.isArray(e))return e.map(Nu);if(e!=null&&typeof e=="object"){let t={};for(let n of Object.keys(e).sort())t[n]=Nu(e[n]);return t}return e}function _(e,t,n){e.push({path:t,message:n})}function Lt(e,t,n,r){for(let o of Object.keys(e))t.has(o)||_(r,n?`${n}.${o}`:o,"unknown field is not allowed")}function Sx(e,t,n,r){if(!te(e)||!te(t)||!te(n)||!te(r)||r<=0||e<t||e>n)return!1;let o=(e-t)/r;if(!Number.isFinite(o))return!1;let i=Math.round(o);return Math.abs(o-i)<=1e-9}function Tu(e,t,n,r){if(Oe(e)){if(Lt(e,new Set(["param"]),t,r),typeof e.param!="string"||!e.param)return _(r,`${t}.param`,"must be a parameter name string"),null;if(!Object.prototype.hasOwnProperty.call(n,e.param))return _(r,`${t}.param`,`unknown parameter "${e.param}"`),null;let o=n[e.param];return!Oe(o)||![o.value,o.min,o.max,o.step].every(yx)?(_(r,`${t}.param`,"referenced period parameter value min max and step must be positive integers"),null):{param:e.param}}return yx(e)?e:(_(r,t,"must be a positive integer or {param}"),null)}function bx(e,t,n,r){return Oe(e)?(Lt(e,new Set(["param"]),t,r),typeof e.param!="string"||!e.param?(_(r,`${t}.param`,"must be a parameter name string"),null):Object.prototype.hasOwnProperty.call(n,e.param)?{param:e.param}:(_(r,`${t}.param`,`unknown parameter "${e.param}"`),null)):te(e)?e:(_(r,t,"must be a finite number or {param}"),null)}function xs(e){switch(e.type){case"input":case"constant":return[];case"indicator":return e.input?[e.input]:[];case"compare":case"cross":return[e.left,e.right].filter(Boolean);case"logic":return Array.isArray(e.inputs)?[...e.inputs]:[];default:return[]}}function JO(e){let t=new Map,n=r=>{let o=t.get(r)||0;if(o===1)return!0;if(o===2)return!1;t.set(r,1);let i=e.get(r);if(i){for(let s of xs(i))if(e.has(s)&&n(s))return!0}return t.set(r,2),!1};for(let r of e.keys())if(n(r))return!0;return!1}function ZO(e,t){if(!Oe(e))return _(t,"parameters","must be a plain object"),null;let n=Object.keys(e);if(n.length>fx)return _(t,"parameters",`too many parameters (max ${fx})`),null;let r={};for(let o of n){if(!wx.test(o)){_(t,`parameters.${o}`,"parameter name is malformed");continue}let i=e[o],s=`parameters.${o}`;if(!Oe(i)){_(t,s,"must be a plain object");continue}Lt(i,dx,s,t);for(let d of dx)d in i||_(t,`${s}.${d}`,"required field is missing");let{value:a,min:c,max:l,step:u}=i;te(c)||_(t,`${s}.min`,"must be a finite number"),te(l)||_(t,`${s}.max`,"must be a finite number"),(!te(u)||u<=0)&&_(t,`${s}.step`,"must be a positive finite number"),te(a)||_(t,`${s}.value`,"must be a finite number"),te(c)&&te(l)&&c>l&&_(t,`${s}.min`,"min must be <= max"),te(a)&&te(c)&&te(l)&&te(u)&&u>0&&(Sx(a,c,l,u)||_(t,`${s}.value`,"value must lie on the declared min/max/step grid")),r[o]={value:a,min:c,max:l,step:u}}return r}function eR(e,t,n,r){let o=`nodes.${t}`;if(!Oe(e))return _(r,o,"must be a plain object"),null;if(typeof e.type!="string"||!mx[e.type])return _(r,`${o}.type`,"unknown or missing node type"),Lt(e,QO,o,r),null;switch(Lt(e,mx[e.type],o,r),(typeof e.id!="string"||!xx.test(e.id))&&_(r,`${o}.id`,"must be a 1-64 char id starting with alphanumeric"),e.type){case"input":return(typeof e.field!="string"||!VO.has(e.field))&&_(r,`${o}.field`,"must be one of open|high|low|close|volume|fundingRate|openInterest"),{id:e.id,type:"input",field:e.field};case"constant":{let i=bx(e.value,`${o}.value`,n,r);return{id:e.id,type:"constant",value:i}}case"indicator":{(typeof e.indicator!="string"||!zO.has(e.indicator))&&_(r,`${o}.indicator`,"must be one of sma|ema|rsi|macd|bollinger|atr");let i=e.indicator,s={id:e.id,type:"indicator",indicator:i};if(i==="atr"){"input"in e&&(typeof e.input!="string"||!e.input?_(r,`${o}.input`,"must be a node id string when provided"):s.input=e.input);let a=Tu(e.period,`${o}.period`,n,r);a!=null&&(s.period=a)}else typeof e.input!="string"||!e.input?_(r,`${o}.input`,"must be a node id string"):s.input=e.input;if((i==="sma"||i==="ema"||i==="rsi"||i==="bollinger"||i==="atr")&&("period"in e,i!=="macd"))if(!("period"in e))_(r,`${o}.period`,"required field is missing");else{let a=Tu(e.period,`${o}.period`,n,r);a!=null&&(s.period=a)}if(i==="macd"){for(let a of["fastPeriod","slowPeriod","signalPeriod"])if(!(a in e))_(r,`${o}.${a}`,"required field is missing");else{let c=Tu(e[a],`${o}.${a}`,n,r);c!=null&&(s[a]=c)}"output"in e?YO.has(e.output)?s.output=e.output:_(r,`${o}.output`,"must be line|signal|histogram"):_(r,`${o}.output`,"required field is missing"),"period"in e&&_(r,`${o}.period`,"forbidden for macd"),"stdDev"in e&&_(r,`${o}.stdDev`,"forbidden for macd")}else if(i==="bollinger"){if(!("stdDev"in e))_(r,`${o}.stdDev`,"required field is missing");else{let a=bx(e.stdDev,`${o}.stdDev`,n,r);a!=null&&(typeof a=="number"&&a<=0?_(r,`${o}.stdDev`,"must be > 0"):s.stdDev=a)}"output"in e?XO.has(e.output)?s.output=e.output:_(r,`${o}.output`,"must be upper|middle|lower"):_(r,`${o}.output`,"required field is missing");for(let a of["fastPeriod","slowPeriod","signalPeriod"])a in e&&_(r,`${o}.${a}`,`forbidden for ${i}`)}else{"output"in e&&_(r,`${o}.output`,`forbidden for ${i}`),"stdDev"in e&&i!=="bollinger"&&_(r,`${o}.stdDev`,`forbidden for ${i}`);for(let a of["fastPeriod","slowPeriod","signalPeriod"])a in e&&_(r,`${o}.${a}`,`forbidden for ${i}`)}return s}case"compare":return(typeof e.op!="string"||!WO.has(e.op))&&_(r,`${o}.op`,"must be gt|gte|lt|lte|eq"),(typeof e.left!="string"||!e.left)&&_(r,`${o}.left`,"must be a node id"),(typeof e.right!="string"||!e.right)&&_(r,`${o}.right`,"must be a node id"),{id:e.id,type:"compare",op:e.op,left:e.left,right:e.right};case"logic":{if((typeof e.op!="string"||!GO.has(e.op))&&_(r,`${o}.op`,"must be and|or|not"),!Array.isArray(e.inputs))return _(r,`${o}.inputs`,"must be an array of node ids"),{id:e.id,type:"logic",op:e.op,inputs:[]};let i=[];for(let s=0;s<e.inputs.length;s++){let a=e.inputs[s];typeof a!="string"||!a?_(r,`${o}.inputs.${s}`,"must be a node id"):i.push(a)}return e.op==="not"?i.length!==1&&_(r,`${o}.inputs`,"not requires exactly one input"):(e.op==="and"||e.op==="or")&&i.length<2&&_(r,`${o}.inputs`,`${e.op} requires at least two inputs`),{id:e.id,type:"logic",op:e.op,inputs:i}}case"cross":return(typeof e.direction!="string"||!KO.has(e.direction))&&_(r,`${o}.direction`,"must be above|below"),(typeof e.left!="string"||!e.left)&&_(r,`${o}.left`,"must be a node id"),(typeof e.right!="string"||!e.right)&&_(r,`${o}.right`,"must be a node id"),{id:e.id,type:"cross",direction:e.direction,left:e.left,right:e.right};default:return null}}function tR(e,t,n){if(!Oe(e))return _(t,"risk","must be a plain object"),null;Lt(e,px,"risk",t);for(let p of px)(!(p in e)||e[p]==null)&&_(t,`risk.${p}`,"required field is missing");let r={},o=e.maxLeverage;!te(o)||o<=0||o>50?_(t,"risk.maxLeverage","must be a number > 0 and <= 50"):r.maxLeverage=o;let i=e.maxNotionalUsd;!te(i)||i<=0?_(t,"risk.maxNotionalUsd","must be a number > 0"):r.maxNotionalUsd=i;let s=e.positionSizePct;!te(s)||s<=0||s>100?_(t,"risk.positionSizePct","must be a number > 0 and <= 100"):r.positionSizePct=s;let a=e.stopLossPct;!te(a)||a<=0||a>100?_(t,"risk.stopLossPct","must be a number > 0 and <= 100"):r.stopLossPct=a;let c=e.takeProfitPct;!te(c)||c<=0||c>1e3?_(t,"risk.takeProfitPct","must be a number > 0 and <= 1000"):r.takeProfitPct=c;let l=e.cooldownBars;!Number.isInteger(l)||l<0||l>1e5?_(t,"risk.cooldownBars","must be an integer >= 0 and <= 100000"):r.cooldownBars=l;let u=e.maxDailyLossPct;!te(u)||u<=0||u>100?_(t,"risk.maxDailyLossPct","must be a number > 0 and <= 100"):r.maxDailyLossPct=u;let d=e.expiresAt;return!Number.isInteger(d)||d<=0?_(t,"risk.expiresAt","must be an integer epoch milliseconds > 0"):(n.nowMs!==void 0&&(Number.isInteger(n.nowMs)?d<=n.nowMs&&_(t,"risk.expiresAt","must be strictly greater than nowMs"):_(t,"nowMs","must be an integer epoch milliseconds")),r.expiresAt=d),r}function nR(e,t={}){let n=[];if(!Oe(e))return _(n,"","strategy must be a plain object"),{ok:!1,errors:n,strategy:null};Lt(e,ux,"",n);for(let d of ux)(!(d in e)||e[d]==null)&&_(n,d,"required field is missing");e.version!==Iu&&_(n,"version",`must be ${Iu}`),(typeof e.id!="string"||!wx.test(e.id))&&_(n,"id","must match /^[a-z0-9][a-z0-9._-]{0,63}$/"),(typeof e.name!="string"||e.name.length===0||e.name.length>gx)&&_(n,"name",`must be a non-empty string max ${gx}`);let r=Ss(e.venue);r||_(n,"venue",`unknown strategy venue "${String(e.venue)}"`);let o=null;if(!r)Oe(e.market)||_(n,"market","must be a plain object");else{let d=r.validateMarket(e.market);if(!d||typeof d.ok!="boolean"||!Array.isArray(d.errors))_(n,"market",`venue ${r.id} returned an invalid market validation result`);else if(d.ok)o=d.market;else for(let p of d.errors)_(n,p.path,p.message)}let i=ZO(e.parameters,n),s=null,a=new Map;if(!Array.isArray(e.nodes))_(n,"nodes","must be an array");else if(e.nodes.length>hx)_(n,"nodes",`too many nodes (max ${hx})`);else{s=[];for(let d=0;d<e.nodes.length;d++){let p=eR(e.nodes[d],d,i||{},n);p&&(typeof p.id=="string"&&xx.test(p.id)&&(a.has(p.id)?_(n,`nodes.${d}.id`,`duplicate node id "${p.id}"`):a.set(p.id,p)),s.push(p))}for(let d=0;d<s.length;d++){let p=s[d],m=`nodes.${d}`;for(let f of xs(p))a.has(f)||_(n,m,`unknown node ref "${f}"`);if(p.type==="indicator"||p.type==="compare"||p.type==="cross")for(let f of xs(p)){let h=a.get(f);h&&_u.has(h.type)&&_(n,m,`node ref "${f}" must be numeric`)}if(p.type==="logic")for(let f of xs(p)){let h=a.get(f);h&&!_u.has(h.type)&&_(n,m,`node ref "${f}" must be boolean`)}}JO(a)&&_(n,"nodes","graph contains a cycle")}let c=null;if(!Oe(e.rules))_(n,"rules","must be a plain object");else{Lt(e.rules,Pu,"rules",n);for(let d of Pu)d in e.rules||_(n,`rules.${d}`,"required field is missing");c={};for(let d of Pu){let p=e.rules[d];if(p===null){c[d]=null;continue}if(typeof p!="string"||!p){_(n,`rules.${d}`,"must be a node id or null"),c[d]=p;continue}if(!a.has(p)){_(n,`rules.${d}`,`unknown node ref "${p}"`),c[d]=p;continue}let m=a.get(p);_u.has(m.type)||_(n,`rules.${d}`,`rule must reference a boolean node, not ${m.type}`),c[d]=p}}let l=tR(e.risk,n,t);if(n.length)return{ok:!1,errors:n,strategy:null};let u=Cu({version:Iu,id:e.id,name:e.name,venue:r.id,market:o,parameters:i,nodes:s,rules:c,risk:l});return{ok:!0,errors:[],strategy:u}}function ct(e,t={}){let n=nR(e,t);if(!n.ok)throw new Qn(n.errors);return n.strategy}function rR(e){let t=ct(e);return JSON.stringify(Nu(t))}function Ou(e){let t=rR(e);return jO("sha256").update(t,"utf8").digest("hex")}function vx(e,t){if(!Oe(e))throw new Qn([{path:"",message:"strategy must be a plain object"}]);if(!Oe(t))throw new Qn([{path:"overrides",message:"must be a plain object"}]);let n=ct(e),r={};for(let[i,s]of Object.entries(n.parameters))r[i]={value:s.value,min:s.min,max:s.max,step:s.step};let o=[];for(let[i,s]of Object.entries(t)){if(!Object.prototype.hasOwnProperty.call(r,i)){_(o,i,`unknown parameter "${i}"`);continue}let a=r[i];if(!te(s)){_(o,i,"override must be a finite number");continue}if(!Sx(s,a.min,a.max,a.step)){_(o,i,"override must lie on the declared min/max/step grid");continue}r[i]={...a,value:s}}if(o.length)throw new Qn(o);return ct({version:n.version,id:n.id,name:n.name,venue:n.venue,market:{coin:n.market.coin,interval:n.market.interval},parameters:r,nodes:n.nodes.map(i=>{let s={...i};return Array.isArray(i.inputs)&&(s.inputs=[...i.inputs]),s}),rules:{...n.rules},risk:{...n.risk}})}function fo(e){if(!Array.isArray(e))throw new TypeError("values must be an array");for(let t=0;t<e.length;t++){let n=e[t];if(typeof n!="number"||!Number.isFinite(n))throw new TypeError(`values[${t}] must be a finite number`)}}function Mt(e){if(!Number.isInteger(e)||e<=0)throw new TypeError("period must be a positive integer")}function oR(e){if(!Array.isArray(e))throw new TypeError("bars must be an array");for(let t=0;t<e.length;t++){let n=e[t];if(n==null||typeof n!="object")throw new TypeError(`bars[${t}] must be an object`);for(let r of["o","h","l","c"]){let o=n[r];if(typeof o!="number"||!Number.isFinite(o))throw new TypeError(`bars[${t}].${r} must be a finite number`)}if(n.h<n.l)throw new TypeError(`bars[${t}] high must be >= low`)}}function kx(e,t){fo(e),Mt(t);let n=new Array(e.length).fill(null);if(e.length<t)return n;let r=0;for(let o=0;o<e.length;o++)r+=e[o],o>=t&&(r-=e[o-t]),o>=t-1&&(n[o]=r/t);return n}function vs(e,t){fo(e),Mt(t);let n=new Array(e.length).fill(null);if(e.length<t)return n;let r=0;for(let s=0;s<t;s++)r+=e[s];let o=r/t;n[t-1]=o;let i=2/(t+1);for(let s=t;s<e.length;s++)o=i*e[s]+(1-i)*o,n[s]=o;return n}function Ax(e,t){fo(e),Mt(t);let n=new Array(e.length).fill(null);if(e.length<=t)return n;let r=0,o=0;for(let a=1;a<=t;a++){let c=e[a]-e[a-1];c>=0?r+=c:o-=c}let i=r/t,s=o/t;n[t]=Ex(i,s);for(let a=t+1;a<e.length;a++){let c=e[a]-e[a-1],l=c>0?c:0,u=c<0?-c:0;i=(i*(t-1)+l)/t,s=(s*(t-1)+u)/t,n[a]=Ex(i,s)}return n}function Ex(e,t){return e===0&&t===0?50:t===0?100:e===0?0:100-100/(1+e/t)}function Ix(e,t={}){fo(e);let n=t.fastPeriod,r=t.slowPeriod,o=t.signalPeriod;if(Mt(n),Mt(r),Mt(o),n>=r)throw new TypeError("fastPeriod must be < slowPeriod");let i=vs(e,n),s=vs(e,r),a=new Array(e.length).fill(null);for(let d=0;d<e.length;d++)i[d]!=null&&s[d]!=null&&(a[d]=i[d]-s[d]);let c=new Array(e.length).fill(null),l=new Array(e.length).fill(null),u=[];for(let d=0;d<a.length;d++)a[d]!=null&&u.push(d);if(u.length>=o){let d=0;for(let h=0;h<o;h++)d+=a[u[h]];let p=d/o,m=u[o-1];c[m]=p,l[m]=a[m]-p;let f=2/(o+1);for(let h=o;h<u.length;h++){let g=u[h];p=f*a[g]+(1-f)*p,c[g]=p,l[g]=a[g]-p}}return{line:a,signal:c,histogram:l}}function _x(e,t={}){fo(e);let n=t.period,r=t.stdDev;if(Mt(n),typeof r!="number"||!Number.isFinite(r)||r<=0)throw new TypeError("stdDev must be a finite number > 0");let o=new Array(e.length).fill(null),i=new Array(e.length).fill(null),s=new Array(e.length).fill(null);if(e.length<n)return{upper:i,middle:o,lower:s};let a=0,c=0;for(let l=0;l<e.length;l++){let u=e[l];if(a+=u,c+=u*u,l>=n){let d=e[l-n];a-=d,c-=d*d}if(l>=n-1){let d=a/n,p=c/n-d*d;p<0&&p>-1e-12&&(p=0);let m=Math.sqrt(p);o[l]=d,i[l]=d+r*m,s[l]=d-r*m}}return{upper:i,middle:o,lower:s}}function Px(e,t){oR(e),Mt(t);let n=new Array(e.length).fill(null);if(e.length<t)return n;let r=new Array(e.length);for(let s=0;s<e.length;s++){let a=e[s];if(s===0)r[s]=a.h-a.l;else{let c=e[s-1].c;r[s]=Math.max(a.h-a.l,Math.abs(a.h-c),Math.abs(a.l-c))}}let o=0;for(let s=0;s<t;s++)o+=r[s];let i=o/t;n[t-1]=i;for(let s=t;s<e.length;s++)i=(i*(t-1)+r[s])/t,n[s]=i;return n}import{createHash as iR}from"node:crypto";var Ru=2,sR="93f9c998260e73756c13871dc1a84dd6cdb26ec6113bd1941f023519939db440",aR="68f5b412a9975f04024cf9b9b6209b4bccedd52f176e95f34f786b3f53479c6a",cR="f197a38ff1c0f4ebe13326db8cbb8167ea3dd5d62e6033fe97c2fee8d23d96b5",Tx=iR("sha256").update(JSON.stringify({version:Ru,compilerSourceHash:sR,indicatorsSourceHash:aR,schemaSourceHash:cR})).digest("hex");var Es=Ru,$u=Tx,lR=Object.freeze({open:"o",high:"h",low:"l",close:"c",volume:"v",fundingRate:"fundingRate",openInterest:"openInterest"}),uR=Object.freeze({"1m":6e4,"3m":18e4,"5m":3e5,"15m":9e5,"30m":18e5,"1h":36e5,"2h":72e5,"4h":144e5,"8h":288e5,"12h":432e5,"1d":864e5});function Ve(e){return typeof e=="number"&&Number.isFinite(e)}function dR(e){let t=new Map(e.map(a=>[a.id,a])),n=a=>{switch(a.type){case"indicator":return a.input?[a.input]:[];case"compare":case"cross":return[a.left,a.right];case"logic":return[...a.inputs];default:return[]}},r=new Map,o=new Map;for(let a of e)r.set(a.id,0),o.set(a.id,[]);for(let a of e)for(let c of n(a))t.has(c)&&(o.get(c).push(a.id),r.set(a.id,r.get(a.id)+1));let i=[];for(let[a,c]of r)c===0&&i.push(a);let s=[];for(;i.length;){let a=i.shift();s.push(a);for(let c of o.get(a))r.set(c,r.get(c)-1),r.get(c)===0&&i.push(c)}if(s.length!==e.length)throw new Error("strategy graph is cyclic");return s}function Jn(e,t){return e!=null&&typeof e=="object"&&"param"in e?t[e.param].value:e}function pR(e,t,n){if(!Array.isArray(e)||e.length===0)throw new TypeError("bars must be a non-empty array");if(!Number.isInteger(t)||t<0||t>=e.length)throw new RangeError("index out of range");let r=null;for(let o=0;o<=t;o++){let i=e[o];if(i==null||typeof i!="object"||Array.isArray(i))throw new TypeError(`bars[${o}] must be an object`);let{t:s,o:a,h:c,l,c:u,v:d}=i;if(!Ve(s)&&(typeof s=="number"&&Number.isFinite(s)),!Number.isFinite(s))throw new TypeError(`bars[${o}].t must be finite`);for(let[p,m]of[["o",a],["h",c],["l",l],["c",u],["v",d]])if(!Ve(m))throw new TypeError(`bars[${o}].${p} must be a finite number`);for(let[p,m]of[["o",a],["h",c],["l",l],["c",u]])if(!(m>0))throw new TypeError(`bars[${o}].${p} price must be positive`);if(d<0)throw new TypeError(`bars[${o}].v volume must be non-negative`);if(c<Math.max(a,u,l))throw new TypeError(`bars[${o}] high must be >= max(open, close, low)`);if(l>Math.min(a,u,c))throw new TypeError(`bars[${o}] low must be <= min(open, close, high)`);if(r!=null){if(!(s>r))throw new TypeError("bars t must be strictly increasing");if(s-r!==uR[n])throw new TypeError(`bars t must match ${n} cadence`)}if(r=s,"fundingRate"in i&&i.fundingRate!=null&&!Ve(i.fundingRate))throw new TypeError(`bars[${o}].fundingRate must be finite when present`);if("openInterest"in i&&i.openInterest!=null){if(!Ve(i.openInterest))throw new TypeError(`bars[${o}].openInterest must be finite when present`);if(i.openInterest<0)throw new TypeError(`bars[${o}].openInterest must be non-negative`)}}}function sn(e,t,n,r,o,i){if(i.has(e))return i.get(e);let s=t.get(e),a;switch(s.type){case"input":{let c=lR[s.field];a=new Array(o+1);for(let l=0;l<=o;l++){let u=r[l][c];a[l]=u===void 0?null:u}break}case"constant":{let c=Jn(s.value,n);a=new Array(o+1).fill(c);break}case"indicator":{let c=s.period!=null?Jn(s.period,n):void 0;if(s.indicator==="atr"){let d=[];for(let p=0;p<=o;p++){let m=r[p];d.push({o:m.o,h:m.h,l:m.l,c:m.c})}a=Px(d,c);break}let u=sn(s.input,t,n,r,o,i).map((d,p)=>{if(d==null||!Ve(d))throw new TypeError(`indicator input ${s.input} has non-finite value at ${p}`);return d});if(s.indicator==="sma")a=kx(u,c);else if(s.indicator==="ema")a=vs(u,c);else if(s.indicator==="rsi")a=Ax(u,c);else if(s.indicator==="macd")a=Ix(u,{fastPeriod:Jn(s.fastPeriod,n),slowPeriod:Jn(s.slowPeriod,n),signalPeriod:Jn(s.signalPeriod,n)})[s.output];else if(s.indicator==="bollinger")a=_x(u,{period:c,stdDev:Jn(s.stdDev,n)})[s.output];else throw new Error(`unsupported indicator ${s.indicator}`);break}case"compare":{let c=sn(s.left,t,n,r,o,i),l=sn(s.right,t,n,r,o,i);a=new Array(o+1);for(let u=0;u<=o;u++){let d=c[u],p=l[u];if(d==null||p==null||!Ve(d)||!Ve(p)){a[u]=!1;continue}switch(s.op){case"gt":a[u]=d>p;break;case"gte":a[u]=d>=p;break;case"lt":a[u]=d<p;break;case"lte":a[u]=d<=p;break;case"eq":a[u]=d===p;break;default:a[u]=!1}}break}case"logic":{let c=s.inputs.map(l=>sn(l,t,n,r,o,i));a=new Array(o+1);for(let l=0;l<=o;l++)if(s.op==="not"){let u=c[0][l];a[l]=u===!0?!1:u===!1}else if(s.op==="and"){let u=!0;for(let d of c)if(d[l]!==!0){u=!1;break}a[l]=u}else if(s.op==="or"){let u=!1;for(let d of c)if(d[l]===!0){u=!0;break}a[l]=u}else a[l]=!1;break}case"cross":{let c=sn(s.left,t,n,r,o,i),l=sn(s.right,t,n,r,o,i);a=new Array(o+1),a[0]=!1;for(let u=1;u<=o;u++){let d=c[u-1],p=l[u-1],m=c[u],f=l[u];if(d==null||p==null||m==null||f==null||!Ve(d)||!Ve(p)||!Ve(m)||!Ve(f)){a[u]=!1;continue}s.direction==="above"?a[u]=d<=p&&m>f:a[u]=d>=p&&m<f}break}default:throw new Error(`unknown node type ${s.type}`)}return i.set(e,a),a}function Lu(e,t={}){let n=ct(e);t&&Object.keys(t).length&&(n=vx(n,t));let r=new Map(n.nodes.map(m=>[m.id,m])),o=Object.freeze(dR(n.nodes)),i=n.parameters,s=new Set(n.nodes.filter(m=>m.type==="input").map(m=>m.field));if(n.nodes.some(m=>m.type==="indicator"&&m.indicator==="atr"))for(let m of["open","high","low","close"])s.add(m);let a=Object.freeze([...s].sort()),c=Ou(n);function l(m,f){let h={};for(let y of o){let S=m.get(y);h[y]=S[f]}let g=y=>y!=null&&h[y]===!0;return{values:h,signals:{entryLong:g(n.rules.entryLong),entryShort:g(n.rules.entryShort),exitLong:g(n.rules.exitLong),exitShort:g(n.rules.exitShort)}}}function u(m,f){pR(m,f,n.market.interval);let h=new Map;for(let g of o)sn(g,r,i,m,f,h);return h}function d(m,f){return l(u(m,f),f)}function p(m){if(!Array.isArray(m)||m.length===0)throw new TypeError("bars must be a non-empty array");let f=m.length-1,h=u(m,f);return Object.freeze(m.map((g,y)=>Object.freeze(l(h,y))))}return Object.freeze({strategy:n,strategyHash:c,compilerVersion:Es,compilerHash:$u,requiredSeries:a,nodeOrder:o,evaluate:d,evaluateAll:p})}import{createHash as mR}from"node:crypto";var b6=Object.freeze({initialEquityUsd:1e4,takerFeeBps:3.5,builderFeeBps:2,slippageBps:2,latencyBars:1,maxVolumeParticipationPct:100});var fR=Object.freeze(["fail","pass_paper_only","pass_live_eligible"]);function Bt(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function ho(e){return typeof e=="number"&&Number.isFinite(e)}function Zn(e){if(Array.isArray(e))return e.map(Zn);if(e!=null&&typeof e=="object"){let t={};for(let n of Object.keys(e).sort())t[n]=Zn(e[n]);return t}return e}function Cx(e){if(!Bt(e))throw new TypeError("evidence artifact must be a plain object");if(!fR.includes(e.status))throw new TypeError("evidence artifact status is invalid");for(let t of["strategyHash","compilerHash","barsHash"])if(typeof e[t]!="string"||!/^[0-9a-f]{64}$/.test(e[t]))throw new TypeError(`evidence artifact ${t} must be a sha256 hash`);if(!Bt(e.split))throw new TypeError("evidence artifact split required");if(!Array.isArray(e.flags))throw new TypeError("evidence artifact flags must be an array");if(!Bt(e.walkForward)||!Array.isArray(e.walkForward.windows))throw new TypeError("evidence artifact walkForward windows required");if(e.status==="pass_live_eligible"&&(!Bt(e.train)||!Bt(e.holdout)))throw new TypeError("live-eligible evidence artifact requires train and holdout facts");return Zn({barsHash:e.barsHash,compilerHash:e.compilerHash,flags:e.flags.map(t=>Zn(t)),holdout:e.holdout??null,split:e.split,status:e.status,strategyHash:e.strategyHash,train:e.train??null,walkForward:{passRate:e.walkForward.passRate,windowsRun:e.walkForward.windowsRun??e.walkForward.windows.length,windows:e.walkForward.windows.map(t=>({index:t.index,trainStartIndex:t.trainStartIndex,trainEndIndex:t.trainEndIndex,passed:t.passed,reason:t.reason,evalStartIndex:t.evalStartIndex,evalEndIndex:t.evalEndIndex,metrics:t.metrics}))}})}function hR(e){return mR("sha256").update(JSON.stringify(Cx(e)),"utf8").digest("hex")}function ze(e,t,n=0){if(!Number.isInteger(e)||e<n)throw new Error(`${t} must be an integer >= ${n}`);return e}function Mu(e,t){if(!Bt(e)||!Bt(e.metrics))throw new Error(`${t} metrics required`);let n=ze(e.tradeCount,`${t}.tradeCount`);if(e.metrics.tradeCount!==n)throw new Error(`${t} tradeCount contradicts metrics.tradeCount`);for(let r of["netPnlUsd","profitFactor","maxDrawdownPct"])if(!ho(e.metrics[r]))throw new Error(`${t}.metrics.${r} must be finite`);if(e.metrics.maxDrawdownPct<0)throw new Error(`${t}.metrics.maxDrawdownPct must be >= 0`);return e.metrics}function gR(e,{maxDailyLossPct:t}={}){let n=e.split,r=ze(n.trainStartIndex,"split.trainStartIndex"),o=ze(n.trainEndIndex,"split.trainEndIndex"),i=ze(n.trainBarCount,"split.trainBarCount",1),s=ze(n.holdoutStartIndex,"split.holdoutStartIndex"),a=ze(n.holdoutEndIndex,"split.holdoutEndIndex"),c=ze(n.holdoutBarCount,"split.holdoutBarCount",1);if(r!==0||o-r+1!==i||s!==o+1||a-s+1!==c)throw new Error("evidence split must be contiguous, chronological, and count-consistent");if(!ho(n.trainFraction)||n.trainFraction<=0||n.trainFraction>=1)throw new Error("split.trainFraction must be in (0,1)");Mu(e.train,"train");let l=Mu(e.holdout,"holdout");if(l.tradeCount<1||l.netPnlUsd<=0||l.profitFactor<=1)throw new Error("live-eligible holdout metrics do not pass");if(ho(t)&&l.maxDrawdownPct>t)throw new Error("live-eligible holdout drawdown exceeds strategy risk");if(e.flags.length>0)throw new Error("live-eligible evidence cannot contain failure flags");let u=e.walkForward,d=u.windows;if(d.length<1||u.windowsRun!==d.length)throw new Error("live-eligible walk-forward windowsRun must match nonempty windows");let p=0,m=-1;for(let h=0;h<d.length;h++){let g=d[h];if(!Bt(g)||g.index!==h||typeof g.passed!="boolean")throw new Error("walk-forward windows must be ordered and structurally valid");let y=ze(g.trainStartIndex,`walkForward.windows[${h}].trainStartIndex`),S=ze(g.trainEndIndex,`walkForward.windows[${h}].trainEndIndex`),w=ze(g.evalStartIndex,`walkForward.windows[${h}].evalStartIndex`),x=ze(g.evalEndIndex,`walkForward.windows[${h}].evalEndIndex`);if(y!==0||S>=w||w>x||w<=m)throw new Error("walk-forward windows must be chronological and disjoint");if(m=x,g.passed){if(p+=1,g.reason!=="pass")throw new Error("passed walk-forward window reason must be pass");let k=Mu({metrics:g.metrics,tradeCount:g.metrics?.tradeCount},`walkForward.windows[${h}]`);if(k.tradeCount<1||k.netPnlUsd<=0||k.profitFactor<=1)throw new Error("passed walk-forward window metrics do not pass");if(ho(t)&&k.maxDrawdownPct>t)throw new Error("passed walk-forward drawdown exceeds strategy risk")}else if(g.reason==="pass")throw new Error("failed walk-forward window cannot have pass reason")}let f=p/d.length;if(!ho(u.passRate)||Math.abs(u.passRate-f)>Number.EPSILON||f<.6)throw new Error("walk-forward passRate contradicts concrete windows or is below live threshold")}function Nx(e,t={}){if(typeof e?.id!="string"||!/^[0-9a-f]{64}$/.test(e.id))throw new Error("evidence.id must be a sha256 evidence artifact hash");let n=Cx(e),r=Zn({id:e.id,...n});if(JSON.stringify(Zn(e))!==JSON.stringify(r))throw new Error("evidence artifact contains fields unbound from its deterministic identity");let o=hR(e);if(e.id!==o)throw new Error("evidence.id does not match its deterministic artifact facts digest");return e.status==="pass_live_eligible"&&gR(e,t),e}K();var yR=["privatekey","secretkey","seed","mnemonic","passphrase","password","keystore","keymaterial","apikey","authtoken","accesstoken","refreshtoken","credential","bearer","signature","authorization","xprv","xpriv","wif"];function go(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function bR(e){return String(e).toLowerCase().replace(/[^a-z0-9]/g,"")}function Uu(e,t="value"){if(Array.isArray(e)){e.forEach((n,r)=>Uu(n,`${t}[${r}]`));return}if(go(e))for(let[n,r]of Object.entries(e)){let o=bR(n);if(yR.some(i=>o.includes(i)))throw new Error(`handoff: forbidden secret-like field at ${t}.${n}`);Uu(r,`${t}.${n}`)}}function Bu(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function Ox({strategy:e,evidence:t,shadow:n,caps:r,nowMs:o=Date.now(),env:i=process.env}={}){if(Uu({strategy:e,evidence:t,shadow:n,caps:r},"handoff"),!go(e))throw new Error("handoff: strategy required");if(!go(t))throw new Error("handoff: evidence required");if(!go(n))throw new Error("handoff: shadow required");if(!go(r))throw new Error("handoff: caps required");if(typeof n.id!="string"||!n.id.trim())throw new Error("handoff: shadow.id required");if(typeof n.stateHash!="string"||!/^[0-9a-f]{64}$/.test(n.stateHash))throw new Error("handoff: shadow.stateHash must be a sha256 hash");if(n.status!=="running")throw new Error("handoff: shadow.status must be running");if(!Number.isInteger(n.cursor)||n.cursor<=0)throw new Error("handoff: shadow.cursor must be a positive integer");if(!Number.isInteger(n.updatedAt)||n.updatedAt<=0||n.updatedAt>o)throw new Error("handoff: shadow.updatedAt must be a positive integer <= nowMs");let s=ct(e,{nowMs:o}),a=Lu(s);if(Nx(t,{maxDailyLossPct:s.risk.maxDailyLossPct}),t.status!=="pass_live_eligible")throw new Error("handoff: evidence.status must be pass_live_eligible");if(t.strategyHash!==a.strategyHash)throw new Error("handoff: evidence.strategyHash mismatch");if(t.compilerHash!==a.compilerHash)throw new Error("handoff: evidence.compilerHash mismatch");let c=["perStrategyNotionalUsd","maxLeverage","dailyLossCapUsd","chainAllowlist","assetAllowlist","expiresAt","killSwitchRequired"];for(let p of c)if(!(p in r)||r[p]==null)throw new Error(`handoff: caps.${p} required`);if(!Bu(r.perStrategyNotionalUsd))throw new Error("handoff: caps.perStrategyNotionalUsd must be positive");if(r.perStrategyNotionalUsd>a.strategy.risk.maxNotionalUsd)throw new Error("handoff: caps.perStrategyNotionalUsd exceeds strategy.risk.maxNotionalUsd");if(!Bu(r.maxLeverage))throw new Error("handoff: caps.maxLeverage must be positive");if(r.maxLeverage>a.strategy.risk.maxLeverage)throw new Error("handoff: caps.maxLeverage exceeds strategy.risk.maxLeverage");if(!Bu(r.dailyLossCapUsd))throw new Error("handoff: caps.dailyLossCapUsd must be positive");let l=a.strategy.risk.maxNotionalUsd*(a.strategy.risk.maxDailyLossPct/100);if(r.dailyLossCapUsd>l)throw new Error("handoff: caps.dailyLossCapUsd exceeds strategy daily loss ceiling");if(!Array.isArray(r.chainAllowlist)||r.chainAllowlist.length===0)throw new Error("handoff: caps.chainAllowlist must be a non-empty array");if(!r.chainAllowlist.every(p=>p==="hyperliquid"))throw new Error("handoff: caps.chainAllowlist must include only hyperliquid");if(!r.chainAllowlist.includes("hyperliquid"))throw new Error("handoff: caps.chainAllowlist must include hyperliquid");if(!Array.isArray(r.assetAllowlist)||r.assetAllowlist.length===0)throw new Error("handoff: caps.assetAllowlist must be a non-empty array");if(r.assetAllowlist.length!==1||r.assetAllowlist[0]!==a.strategy.market.coin)throw new Error("handoff: caps.assetAllowlist must contain only the strategy market coin");if(!Number.isInteger(r.expiresAt)||!(r.expiresAt>o))throw new Error("handoff: caps.expiresAt must be an integer > nowMs");if(r.expiresAt>a.strategy.risk.expiresAt)throw new Error("handoff: caps.expiresAt exceeds strategy.risk.expiresAt");if(r.killSwitchRequired!==!0)throw new Error("handoff: caps.killSwitchRequired must be exactly true");let u={perStrategyNotionalUsd:r.perStrategyNotionalUsd,maxLeverage:r.maxLeverage,dailyLossCapUsd:r.dailyLossCapUsd,chainAllowlist:[...r.chainAllowlist],assetAllowlist:[...r.assetAllowlist],expiresAt:r.expiresAt,killSwitchRequired:!0},d={strategyHash:a.strategyHash,compilerHash:a.compilerHash,evidence:JSON.parse(JSON.stringify(t)),shadow:{id:n.id,stateHash:n.stateHash,status:n.status,cursor:n.cursor,updatedAt:n.updatedAt},compiled:{strategyHash:a.strategyHash,compilerHash:a.compilerHash,compilerVersion:Es,venue:"hyperliquid",market:{coin:a.strategy.market.coin,kind:"perp",interval:a.strategy.market.interval},risk:{...a.strategy.risk},strategy:JSON.parse(JSON.stringify(a.strategy))},arming:{liveBroadcast:!1,requiresExplicitUserArm:!0,caps:u},requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,executionReady:!1};return O(d,{provider:"hl-strategy",kind:"strategy-live-handoff",env:i})}var wR=Object.freeze({"1m":6e4,"3m":18e4,"5m":3e5,"15m":9e5,"30m":18e5,"1h":36e5,"2h":72e5,"4h":144e5,"8h":288e5,"12h":432e5,"1d":864e5});function er(e,t){let n=Number(e);if(!Number.isFinite(n))throw new TypeError(`${t} must be finite`);return n}function tr(e,t){if(!Number.isSafeInteger(e)||e<0)throw new TypeError(`${t} must be a non-negative safe integer`);return e}function yo(e){if(Array.isArray(e))for(let t of e)yo(t);else if(e&&typeof e=="object")for(let t of Object.values(e))yo(t);return Object.freeze(e)}function xR(e){let t=wR[e];if(!t)throw new TypeError(`unsupported strategy interval: ${e}`);return t}function SR(e,{endTime:t=Number.MAX_SAFE_INTEGER}={}){if(!Array.isArray(e))throw new TypeError("Hyperliquid candles must be an array");tr(t,"endTime");let n=new Map;for(let r=0;r<e.length;r++){let o=e[r];if(!o||typeof o!="object"||Array.isArray(o))throw new TypeError(`candles[${r}] must be an object`);let i=tr(Number(o.t),`candles[${r}].t`);if(tr(Number(o.T),`candles[${r}].T`)>t)continue;let a={t:i,o:er(o.o,`candles[${r}].o`),h:er(o.h,`candles[${r}].h`),l:er(o.l,`candles[${r}].l`),c:er(o.c,`candles[${r}].c`),v:er(o.v,`candles[${r}].v`)};if(a.h<Math.max(a.o,a.c,a.l))throw new TypeError(`candles[${r}].h is below another price`);if(a.l>Math.min(a.o,a.c,a.h))throw new TypeError(`candles[${r}].l is above another price`);if(a.v<0)throw new TypeError(`candles[${r}].v must be non-negative`);let c=n.get(i);if(c&&JSON.stringify(c)!==JSON.stringify(a))throw new TypeError(`conflicting duplicate candle at timestamp ${i}`);c||n.set(i,a)}return yo([...n.values()].sort((r,o)=>r.t-o.t))}function vR(e,t){if(!Array.isArray(e))throw new TypeError("Hyperliquid funding history must be an array");let n=new Map;for(let r=0;r<e.length;r++){let o=e[r];if(!o||typeof o!="object"||Array.isArray(o))throw new TypeError(`funding[${r}] must be an object`);let i=tr(Number(o.time),`funding[${r}].time`);i>t||n.set(i,{time:i,fundingRate:er(o.fundingRate,`funding[${r}].fundingRate`)})}return[...n.values()].sort((r,o)=>r.time-o.time)}async function ER({coin:e,startTime:t,endTime:n},r){let o=[],i=Math.max(0,t-288e5),s=!1;for(let a=0;a<16&&i<=n;a++){let c=await Od({coin:e,startTime:i,endTime:n},r);if(!Array.isArray(c))throw new TypeError("Hyperliquid funding history must be an array");o.push(...c);let l=i;for(let u of c){let d=Number(u?.time);Number.isSafeInteger(d)&&d>l&&(l=d)}if(c.length<500||l>=n){s=!0;break}if(l<=i)throw new Error("Hyperliquid funding history pagination did not advance");i=l+1}if(!s)throw new Error("strategy history exceeds the bounded funding history limit");return vR(o,n)}function kR(e,t,n){let r=0,o=null;return e.map(i=>{let s=i.t+n,a=0;for(;r<t.length&&t[r].time<s;){let c=t[r];o=c.fundingRate,c.time>=i.t&&(a+=c.fundingRate),r+=1}return o==null?{...i,fundingPaymentRate:a}:{...i,fundingRate:o,fundingPaymentRate:a}})}async function Rx(e,t={}){if(!e||typeof e!="object"||Array.isArray(e))throw new TypeError("strategy history input must be an object");let n=String(e.coin||"").trim().toUpperCase();if(!/^[A-Z0-9][A-Z0-9._-]{0,11}$/.test(n))throw new TypeError("coin must be an uppercase Hyperliquid asset id");let r=String(e.interval||"15m"),o=xR(r);if(e.endTime==null)throw new TypeError("endTime is required for deterministic history");let i=tr(e.endTime,"endTime"),s=e.count==null?1500:e.count;if(!Number.isInteger(s)||s<20||s>5e3)throw new TypeError("count must be an integer from 20 to 5000");let a=e.startTime==null?Math.max(0,i-s*o):tr(e.startTime,"startTime");if(a>=i)throw new TypeError("startTime must be before endTime");let[c,l]=await Promise.all([fn({coin:n,interval:r,startTime:a,endTime:i},t),ER({coin:n,startTime:a,endTime:i},t)]),u=SR(c,{endTime:i}),d=yo(kR(u,l,o));return yo({coin:n,interval:r,range:{startTime:a,endTime:i},bars:d})}var AR=new Set(["1m","3m","5m","15m","30m","1h","2h","4h","8h","12h","1d"]),IR=new Set(["coin","interval"]);function _R(e){let t=[];if(!e||typeof e!="object"||Array.isArray(e))return{ok:!1,errors:[{path:"market",message:"must be a plain object"}],market:null};for(let n of Object.keys(e))IR.has(n)||t.push({path:`market.${n}`,message:"unknown field is not allowed"});return(typeof e.coin!="string"||e.coin.length===0||e.coin.length>32)&&t.push({path:"market.coin",message:"must be a non-empty string max 32"}),(typeof e.interval!="string"||!AR.has(e.interval))&&t.push({path:"market.interval",message:"must be a supported interval"}),t.length?{ok:!1,errors:t,market:null}:{ok:!0,errors:[],market:{coin:e.coin,interval:e.interval}}}async function PR(e={}){let t=await Oo(e);if(!t||!Array.isArray(t.universe))throw new TypeError("Hyperliquid market metadata must contain universe");return Object.freeze(t.universe.map((n,r)=>{if(!n||typeof n.name!="string"||!n.name)throw new TypeError(`Hyperliquid market metadata universe[${r}].name is invalid`);return n.name}))}var $x=Object.freeze({id:"hyperliquid",validateMarket:_R,fetchBars:Rx,listMarkets:PR,prepareIntent(e){return Ox(e)}});var TR=Object.freeze(["id","validateMarket","prepareIntent"]);function CR(e){if(!e||typeof e!="object"||Array.isArray(e))throw new TypeError("strategy venue adapter must be an object");if(typeof e.id!="string"||!/^[a-z0-9][a-z0-9._-]{0,63}$/.test(e.id))throw new TypeError("strategy venue adapter id is malformed");for(let t of TR.slice(1))if(typeof e[t]!="function")throw new TypeError(`strategy venue adapter ${e.id} requires ${t}()`);for(let t of["fetchBars","listMarkets"])if(e[t]!=null&&typeof e[t]!="function")throw new TypeError(`strategy venue adapter ${e.id} ${t} must be a function`);return e}var Lx=[$x].map(CR),NR=new Map(Lx.map(e=>[e.id,e])),OR=Object.freeze([...Lx]);function Ss(e){return typeof e!="string"?null:NR.get(e)??null}function RR(e){let t=Ss(e);if(!t)throw new Error(`unknown strategy venue: ${String(e)}`);return t}var Mx=Object.freeze(["price","wallet","risk","execution","security","nft","governance","system"]),$R=new Set(Mx);function ks(e){if(!$R.has(e))throw new TypeError(`Unknown watch category: ${String(e)}`);return e}function Du(e={}){let t=e.subscribedCategories??[];if(!Array.isArray(t))throw new TypeError("subscribedCategories must be an array");return t}function Bx(){return{subscribedCategories:[]}}function LR(e,t){ks(t);let n=Du(e);return n.includes(t)?{...e,subscribedCategories:[...n]}:{...e,subscribedCategories:[...n,t]}}function MR(e,t){ks(t);let n=Du(e);return{...e,subscribedCategories:n.filter(r=>r!==t)}}function BR({category:e,notify:t=!1,...n}={}){if(ks(e),typeof t!="boolean")throw new TypeError("watch notify must be a boolean");return{...n,category:e,notify:t}}function UR(e,t){return!(!t||t.notify!==!0||t.category!==e.category||e.watchId!==void 0&&t.id!==e.watchId)}function Ux(e,t=Bx(),n){if(!e||typeof e!="object")throw new TypeError("alert must be an object");return ks(e.category),Du(t).includes(e.category)?{deliver:!0,reason:"category-subscribed"}:UR(e,n)?{deliver:!0,reason:"watch-opt-in"}:{deliver:!1,reason:"not-subscribed"}}function DR(e,t,n){return Ux(e,t,n).deliver}var Dx=Object.freeze(["wallet","pool","nft_floor","hl_flow","prediction_market"]),FR=Object.freeze({wallets:"wallet",smart_wallet:"wallet",pools:"pool",new_pool:"pool",nft:"nft_floor",nft_floors:"nft_floor",hyperliquid:"hl_flow",prediction:"prediction_market",prediction_markets:"prediction_market"}),de=(e,t=0,n=1)=>Math.min(n,Math.max(t,e)),xe=e=>Number.isFinite(Number(e))?Number(e):null,As=e=>Math.round(e*1e4)/1e4;function Fx(e){let t=String(e?.type??e?.surface??e?.kind??"").toLowerCase();return FR[t]??t}function qR(e,t){return String(e?.id??e?.signalId??e?.asset??e?.market??e?.pool??e?.collection??`${Fx(e)}:${t}`)}function Re(e,t,n,r=!0){!r||n===null||!Number.isFinite(n)||e.push({feature:t,value:As(n)})}function HR(e,t){let n=xe(e.repeatBuys??e.repeat_buys??e.buyCount),r=xe(e.walletWinRate??e.winRate);Re(t,"repeat_buys",n===null?null:de((n-1)/4)*.38),Re(t,"wallet_win_rate",r===null?null:(de(r)-.5)*.5)}function jR(e,t){let n=xe(e.ageHours??e.poolAgeHours),r=xe(e.liquidityUsd??e.liquidity),o=e.liquidityLocked??e.locked;Re(t,"pool_age",n===null?null:n<24?-.42:de(n/720)*.12),Re(t,"liquidity",r===null?null:(de(Math.log10(Math.max(1,r))/7)-.5)*.28),Re(t,"liquidity_lock",o==null?null:o?.12:-.28)}function VR(e,t){let n=xe(e.floorChange??e.floorChangePct),r=xe(e.sales??e.saleCount);Re(t,"floor_change",n===null?null:de(n,-1,1)*.35),Re(t,"sales_depth",r===null?null:de(r/50)*.18)}function zR(e,t){let n=xe(e.flowImbalance??e.imbalance),r=xe(e.fundingRate??e.funding);Re(t,"flow_imbalance",n===null?null:de(n,-1,1)*.42),Re(t,"funding",r===null?null:-de(r*100,-1,1)*.12)}function WR(e,t){let n=xe(e.marketProbability??e.marketPrice??e.probability),r=xe(e.fairProbability??e.referenceProbability??e.fairValue);Re(t,"probability_mispricing",n===null||r===null?null:de(r-n,-1,1)*.65);let o=xe(e.liquidityUsd??e.liquidity);Re(t,"market_liquidity",o===null?null:de(Math.log10(Math.max(1,o))/6)*.12)}var GR=Object.freeze({wallet:HR,pool:jR,nft_floor:VR,hl_flow:zR,prediction_market:WR});function KR(e,t,n){let r=n.filter(i=>{let s=i?.signalId??i?.eventId??i?.id??i?.asset??i?.market;return s!=null&&String(s)===t});if(r.length===0)return null;let o=r.map(i=>xe(i.return??i.markout??i.pnl??i.value)).filter(i=>i!==null);return o.length===0?null:o.reduce((i,s)=>i+s,0)/o.length}function Fu(e=[],t=[],n={}){if(!Array.isArray(e)||!Array.isArray(t))throw new TypeError("events and markouts must be arrays");let r=de(xe(n.minimumCoverage)??.5);return e.map((o,i)=>{let s=Fx(o),a=qR(o,i),c=GR[s],l=[];c&&c(o,l);let u=s==="wallet"?2:s==="pool"?3:2,d=As(de(l.length/u)),p=l.reduce((w,x)=>w+x.value,0),m=KR(o,a,t),f=m===null?0:de(m,-1,1)*.35;m!==null&&Re(l,"shadow_markout",f);let h=As(de(.5+p+f)),g=m===null?.8:de(.85+m*.3,.35,1),y=As(de(d*g)),S=["COLD_INTELLIGENCE_ONLY","NO_HOT_EXECUTION"];return c||S.push("UNSUPPORTED_SIGNAL_TYPE"),d<r&&S.push("LOW_COVERAGE","NO_TRADE"),y<.5&&S.push("LOW_CONFIDENCE","NO_TRADE"),s==="pool"&&(xe(o.ageHours??o.poolAgeHours)??1/0)<24&&S.push("NEW_POOL_RISK","NO_TRADE"),m!==null&&m<0&&S.push("NEGATIVE_MARKOUT"),{id:a,type:s,score:h,confidence:y,coverage:d,contributions:l,flags:[...new Set(S)],noTrade:S.includes("NO_TRADE"),executionAllowed:!1}}).sort((o,i)=>i.score-o.score||i.confidence-o.confidence||o.id.localeCompare(i.id))}function qx(e={}){return Object.freeze({score(t,n=[],r={}){return Fu(t,n,{...e,...r})}})}import{mkdir as YR,chmod as Is,readFile as XR,rename as QR,writeFile as JR}from"node:fs/promises";import{homedir as ZR}from"node:os";import{dirname as Hx,join as qu}from"node:path";import e$ from"sql.js";var Ts=Object.freeze(["project","entity","source","thesis","strategy","simulation","prepared_action","receipt","position"]),t$=new Set(Ts),n$=new Set(Ts.slice(0,-1).map((e,t)=>`${e}:${Ts[t+1]}`)),Vx=qu(process.env.ORACLE_CONFIG_DIR||qu(ZR(),".config","oracle"),"workspace"),zx=qu(Vx,"artifacts.sqlite");function Cs(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(Cs).join(",")}]`:`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${Cs(e[t])}`).join(",")}}`}function jx(e){if(!t$.has(e))throw new TypeError(`unknown artifact type: ${e}`);return e}function _s(e){let t=[];for(;e.step();)t.push(e.getAsObject());return e.free(),t}function Ps(e){return e?{id:e.id,type:e.type,createdAt:e.created_at,data:JSON.parse(e.data_json)}:null}async function Wx(e={}){let t=e.path||zx;await YR(Hx(t),{recursive:!0,mode:448}),await Is(Hx(t),448);let n;try{n=await XR(t)}catch(l){if(l.code!=="ENOENT")throw l}let r=await e$(e.sqlJs||{}),o=n?new r.Database(n):new r.Database;o.run(`
|
|
232
|
+
}`;function FX(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 vT(e={},t={}){let r={chainIds:FX(e)};return e.user&&(r.user=String(e.user)),{markets:(await wd(NX,{request:r},t))?.data?.markets??[]}}async function NT(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 wd(RX,{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 RT(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 wd(DX,{filter:n},t))?.data?.chains??[]}}async function DT(e={}){return{ok:(await wd("query { health }",{},e))?.data?.health===!0,provider:"aave-v3"}}_();var TX="https://staking-api.babylonlabs.io";function kI(e={}){return String(e.baseUrl||process.env.BABYLON_STAKING_API_URL||TX).replace(/\/$/,"")}function bd(e,t={}){return B(`${kI(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:{Accept:"application/json"}})}function FT(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 MT(e={}){try{let r=(await bd("/v2/stats",e))?.data||{},n=Number(r.active_tvl??0);return{ok:Number.isFinite(n)&&n>0,provider:"babylon-staking",baseUrl:kI(e),activeTvlSats:String(r.active_tvl??""),activeFinalityProviders:r.active_finality_providers??null,exec:!1}}catch(t){return{ok:!1,provider:"babylon-staking",baseUrl:kI(e),error:String(t?.message||t),exec:!1}}}async function TT(e={},t={}){let n=(await bd("/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 UT(e={},t={}){let r=await bd("/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=FT(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 LT(e={},t={}){let r=FT(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 bd(`/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}}_();var LX="https://markets.bisq.network";function SI(e={}){return String(e.baseUrl||process.env.BISQ_MARKETS_URL||LX).replace(/\/$/,"")}function _T(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 kd(e,t={}){return B(`${SI(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function PT(e={}){try{let t=await kd("/api/markets",e),r=t&&typeof t=="object"?Object.keys(t).length:0;return{ok:r>0,provider:"bisq-markets",baseUrl:SI(e),marketCount:r,exec:!1}}catch(t){return{ok:!1,provider:"bisq-markets",baseUrl:SI(e),error:String(t?.message||t),exec:!1}}}async function OT(e={},t={}){let r=await kd("/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 qT(e={},t={}){let r=_T(e.market||e.pair||"btc_usd","market"),n=await kd(`/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 HT(e={},t={}){let r=_T(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 kd(`/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}))}}_();var sn=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"}}),PX=new Map([["bob",60808],["rootstock",30],["rsk",30]]),OX=60808;function DA(e){if(e==null||e==="")return OX;let t=PX.get(String(e).trim().toLowerCase());if(t)return t;let r=Number(e);if(!sn[r])throw new Error(`bob-rootstock: unsupported chain ${e} (supported: ${Object.keys(sn).join(", ")} / bob, rootstock)`);return r}function xI(e,t={}){if(t.baseUrl)return String(t.baseUrl).replace(/\/$/,"");let r=DA(e),n=r===30?process.env.ROOTSTOCK_EXPLORER_URL:process.env.BOB_EXPLORER_URL;return String(n||sn[r].url).replace(/\/$/,"")}function GT(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 Sd(e,t,r={}){return B(`${xI(e,r)}${t.startsWith("/")?t:`/${t}`}`,{fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??15e3})}async function YT(e={},t={}){let r;try{r=DA(t.chainId??t.chain??e.chainId)}catch(o){return{ok:!1,provider:"bob-rootstock",error:String(o?.message||o),exec:!1}}let n=sn[r];try{let o=await Sd(r,"/api/v2/stats",e);return{ok:o?.total_blocks!=null||o?.total_transactions!=null,provider:"bob-rootstock",chainId:r,chain:n.name,baseUrl:xI(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:xI(r,e),error:String(o?.message||o),exec:!1}}}async function vI(e={},t={}){let r=e.chainId??e.chain;if(String(r).trim().toLowerCase()==="all"){let s=Object.keys(sn).map(Number);return{provider:"bob-rootstock",chains:await Promise.all(s.map(async A=>{try{return await vI({chainId:A},t)}catch(c){return{provider:"bob-rootstock",chainId:A,chain:sn[A].name,error:String(c?.message||c)}}}))}}let n=DA(r),o=sn[n],i=await Sd(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 VT(e={},t={}){let r=DA(e.chainId??e.chain),n=GT(e.address||e.addr,"address"),o=sn[r],i=await Sd(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 $T(e={},t={}){let r=DA(e.chainId??e.chain),n=GT(e.address||e.addr,"address"),o=await Sd(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:sn[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}))}}_();var HX="https://insights.braiins.com/api/v1.0";function NI(e={}){return String(e.baseUrl||process.env.BRAIINS_INSIGHTS_URL||HX).replace(/\/$/,"")}function RI(e,t={}){return B(`${NI(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:{Accept:"application/json"}})}async function JT(e={}){try{let t=await RI("/price-stats",e),r=Number(t?.price??0);return{ok:Number.isFinite(r)&&r>0,provider:"braiins-insights",baseUrl:NI(e),btcUsd:Number.isFinite(r)?r:null,timestamp:t?.timestamp??null,exec:!1}}catch(t){return{ok:!1,provider:"braiins-insights",baseUrl:NI(e),error:String(t?.message||t),exec:!1}}}async function WT(e={},t={}){let r=await RI("/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 zT(e={},t={}){let r=await RI("/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)}}_();var YX="https://api.cow.fi",jT=Object.freeze({1:"mainnet",100:"xdai",42161:"arbitrum_one",8453:"base",11155111:"sepolia"});function KT(e={}){return(e.baseUrl||process.env.COW_API_URL||YX).replace(/\/$/,"")}function VX(e={}){if(e.network)return String(e.network);let t=Number(e.chainId??1),r=jT[t];if(!r)throw new Error(`cow-protocol: unsupported chainId ${t} (have: ${Object.keys(jT).join(", ")})`);return r}function DI(e,t,r){return`${KT(r)}/${VX(e)}/api/v1${t}`}function XT(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 ZT(e,t=10){return Math.min(1e3,Math.max(1,Number(e.limit??t)))}async function eU(e={},t={}){return B(DI(e,"/auction",t),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function tU(e={},t={}){let r=XT(e.owner||e.address||e.user,"owner"),n=new URLSearchParams({limit:String(ZT(e))});e.offset!=null&&n.set("offset",String(Math.max(0,Number(e.offset))));let o=await B(`${DI(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 rU(e={},t={}){let r=new URLSearchParams;e.orderUid?r.set("orderUid",String(e.orderUid)):r.set("owner",XT(e.owner||e.address||e.user,"owner"));let n=await B(`${DI(e,"/trades",t)}?${r}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4}),o=Array.isArray(n)?n:[];return{count:o.length,trades:o.slice(0,ZT(e))}}async function nU(e={}){let t=await B(`${KT(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}}_();var JX="https://api.hiro.so",WX=20;function FI(e={}){return String(e.baseUrl||process.env.HIRO_API_URL||JX).replace(/\/$/,"")}function zX(e={}){let t={Accept:"application/json"},r=e.apiKey||process.env.HIRO_API_KEY;return r&&(t["x-api-key"]=String(r)),t}function FA(e,t={}){return B(`${FI(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:zX(t)})}async function oU(e={}){try{let t=await FA("/v2/info",e),r=Number(t?.burn_block_height??0);return{ok:Number.isFinite(r)&&r>0,provider:"hiro-stacks",baseUrl:FI(e),burnBlockHeight:t?.burn_block_height??null,stacksTipHeight:t?.stacks_tip_height??null,serverVersion:t?.server_version??null,rateLimitRps:WX,keyed:!!(e.apiKey||process.env.HIRO_API_KEY),exec:!1}}catch(t){return{ok:!1,provider:"hiro-stacks",baseUrl:FI(e),error:String(t?.message||t),exec:!1}}}async function iU(e={},t={}){let r=await FA("/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 sU(e={},t={}){let r=await FA("/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 aU(e={},t={}){let r=Math.min(60,Math.max(1,Number(e.limit||20))),n=Math.max(0,Number(e.offset||0)),o=await FA(`/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 AU(e={},t={}){let r=Math.min(30,Math.max(1,Number(e.limit||1))),n=await FA(`/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}))}}_();var KX="https://bundles.jito.wtf",lU=1e9;function MI(e={}){return String(e.baseUrl||process.env.JITO_BUNDLES_URL||KX).replace(/\/$/,"")}function XX(e,t,r){let n=Number(e);return Number.isFinite(n)?Math.max(1,Math.min(Math.floor(n),r)):t}function cU(e){let t=Number(e);return Number.isFinite(t)?Math.round(t*lU):null}function ZX(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/lU:null,raw:e}}async function uU(e={}){try{let t=await B(`${MI(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 dU(e={},t={}){let r=XX(e.limit,5,100),n=new URL(`${MI(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 B(n.toString(),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3}),s=(Array.isArray(o)?o:Array.isArray(o?.bundles)?o.bundles:[]).map(ZX),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 fU(e={}){let t=await B(`${MI(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,cU(i)])),suggestedTipLamports:cU(n.p75||n.p50),raw:r}}_();var tZ="https://api.kamino.finance";function rZ(e={}){return String(e.baseUrl||process.env.KAMINO_API_URL||tZ).replace(/\/$/,"")}function Dt(e){let t=Number(e);return Number.isFinite(t)?t:null}function pU(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 TI(e={},t={}){let r=new URL(`${rZ(t)}/strategies/metrics`);r.searchParams.set("env",String(e.env||"mainnet-beta")),r.searchParams.set("status",String(e.status||"LIVE"));let n=await B(r.toString(),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??45e3});return Array.isArray(n)?n:[]}async function hU(e={}){try{let t=await TI({},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 gU(e={},t={}){let n=(await TI(e,t)).map(pU),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 mU(e={},t={}){let r=String(e.strategy||e.address||"").trim();if(!r)throw new Error("kamino-strategies: strategy address required");let o=(await TI({...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",...pU(o),raw:o}}_();var oZ="https://blockstream.info/liquid/api",EU="6f0279e9ed041c3d710a9f57d0c02928416460c4b722ae3457a11eec381c526d";function xd(e={}){return String(e.baseUrl||process.env.LIQUID_ESPLORA_URL||oZ).replace(/\/$/,"")}function iZ(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 sZ(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 IU(e,t={}){let r=`${xd(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 CU(e,t={}){return B(`${xd(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function BU(e={}){try{let t=await IU("/blocks/tip/height",e),r=Number(t);return{ok:Number.isFinite(r)&&r>0,provider:"liquid-esplora",baseUrl:xd(e),tipHeight:r,exec:!1,signing:"user-wallet"}}catch(t){return{ok:!1,provider:"liquid-esplora",baseUrl:xd(e),error:String(t?.message||t),exec:!1}}}async function yU(e={},t={}){let r=await IU("/blocks/tip/height",t);return{provider:"liquid-esplora",tipHeight:Number(r)}}async function QU(e={},t={}){let r=iZ(e.address||e.addr,"address"),n=await CU(`/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 wU(e={},t={}){let r=sZ(e.assetId||e.asset||EU,"assetId"),n=await CU(`/asset/${r}`,t),o=n.chain_stats||{};return{provider:"liquid-esplora",assetId:r,isPolicyAsset:r===EU,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}}_();var AZ="https://api-mainnet.magiceden.dev/v2/ord/btc",cZ=600;function UI(e={}){return String(e.baseUrl||process.env.MAGICEDEN_ORD_API_URL||AZ).replace(/\/$/,"")}function lZ(e={}){let t={Accept:"application/json"},r=e.apiKey||process.env.MAGICEDEN_API_KEY;return r&&(t.Authorization=`Bearer ${r}`),t}function bU(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 kU(e,t={}){return B(`${UI(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:lZ(t),retries:t.retries??1})}async function SU(e={}){let t=bU(e.probeCollection||process.env.MAGICEDEN_PROBE_COLLECTION||"nodemonkes");try{let r=await kU(`/stat?collectionSymbol=${encodeURIComponent(t)}`,e);return{ok:r!=null&&typeof r=="object",provider:"magiceden-ordinals",baseUrl:UI(e),probeCollection:t,rateLimitRpm:cZ,exec:!1}}catch(r){let n=r?.status??null;return{ok:!1,provider:"magiceden-ordinals",baseUrl:UI(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 xU(e={},t={}){let r=bU(e.collectionSymbol||e.symbol||e.collection,"collectionSymbol");try{let n=await kU(`/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."}}}_();var dZ="https://mempool.space/api",fZ=7;function LI(e={}){return String(e.baseUrl||process.env.MEMPOOL_API_URL||dZ).replace(/\/$/,"")}function vd(e,t={}){return B(`${LI(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}function vU(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>fZ}}async function NU(e={}){try{let r=(await vd("/v1/lightning/statistics/latest",e))?.latest||{},{ageDays:n,stale:o}=vU(r.added);return{ok:Number(r.node_count||0)>0,provider:"mempool-lightning",baseUrl:LI(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:LI(e),error:String(t?.message||t),exec:!1}}}async function RU(e={},t={}){let n=(await vd("/v1/lightning/statistics/latest",t))?.latest||{},{ageDays:o,stale:i}=vU(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 DU(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 vd(`/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 FU(e={},t={}){let r=await vd("/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)}))}}_();var hZ="https://mempool.space/api",MU=new Set(["24h","3d","1w","1m","3m","6m","1y","2y","3y","all"]);function _I(e={}){return String(e.baseUrl||process.env.MEMPOOL_API_URL||hZ).replace(/\/$/,"")}function TU(e,t){let r=String(e||t).trim().toLowerCase();if(!MU.has(r))throw new Error(`mempool-mining: window must be one of ${[...MU].join(", ")}`);return r}function MA(e,t={}){return B(`${_I(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}async function UU(e={}){try{let t=await MA("/v1/difficulty-adjustment",e);return{ok:Number.isFinite(Number(t?.nextRetargetHeight))&&Number(t.nextRetargetHeight)>0,provider:"mempool-mining",baseUrl:_I(e),nextRetargetHeight:t?.nextRetargetHeight??null,exec:!1}}catch(t){return{ok:!1,provider:"mempool-mining",baseUrl:_I(e),error:String(t?.message||t),exec:!1}}}async function LU(e={},t={}){let r=await MA("/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 _U(e={},t={}){let r=TU(e.window||e.timeframe,"1w"),n=await MA(`/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 PU(e={},t={}){let r=TU(e.window||e.timeframe,"3d"),n=await MA(`/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 OU(e={},t={}){let r=Math.min(1e4,Math.max(1,Number(e.blockCount||e.blocks||144))),n=await MA(`/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}}_();var mZ="https://amm-v2.meteora.ag",qU=new Set(["tvl","volume","fee_tvl_ratio","l_m"]),HU=new Set(["dynamic","multitoken","lst","farms"]),EZ=/^[1-9A-HJ-NP-Za-km-z]{32,44}$/;function IZ(e={}){return String(e.baseUrl||process.env.METEORA_API_URL||mZ).replace(/\/$/,"")}function st(e){let t=Number(e);return Number.isFinite(t)?t:null}function CZ(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:st(e.pool_lp_price_in_usd),tvlUsd:st(e.pool_tvl),farmTvlUsd:st(e.farm_tvl),volume24hUsd:st(e.trading_volume),volume7dUsd:st(e.weekly_trading_volume),fee24hUsd:st(e.fee_volume),fee7dUsd:st(e.weekly_fee_volume),tradeApyPct:st(e.trade_apy),weeklyTradeApyPct:st(e.weekly_trade_apy),baseApyPct:st(e.daily_base_apy),farmingApyPct:st(e.farming_apy),totalApyPct:(st(e.trade_apy)??0)+(st(e.farming_apy)??0),aprPct:st(e.apr),feePct:st(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 BZ(e={},t={}){let r=new URL(`${IZ(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(!qU.has(a))throw new Error(`meteora-dlmm: sortKey must be one of ${[...qU].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(!HU.has(a))throw new Error(`meteora-dlmm: poolType must be one of ${[...HU].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(!EZ.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 PI(e={},t={}){let{url:r,page:n,size:o}=BZ(e,t),i=await B(r.toString(),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4});return{pools:(Array.isArray(i?.data)?i.data:[]).map(CZ),totalCount:i?.total_count??null,page:n,size:o}}async function GU(e={}){try{let{pools:t,totalCount:r}=await PI({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 YU(e={},t={}){let r=await PI({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 VU(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 PI({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}}_();var QZ="https://ordinals.com";function Nd(e={}){return String(e.baseUrl||e.ordinalsBase||process.env.ORDINALS_BASE_URL||QZ).replace(/\/$/,"")}function wZ(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 $U(e,t={}){let r=`${Nd(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 OI(e,t={}){return B(`${Nd(t)}${e.startsWith("/")?e:`/${e}`}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3,headers:{Accept:"application/json"}})}async function JU(e={}){try{let t=await $U("/r/blockheight",e),r=Number(t);return{ok:Number.isFinite(r)&&r>0,provider:"ordinals-runes",baseUrl:Nd(e),blockHeight:r,exec:!1}}catch(t){return{ok:!1,provider:"ordinals-runes",baseUrl:Nd(e),error:String(t?.message||t),exec:!1}}}async function WU(e={},t={}){let r=await $U("/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 zU(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 OI(`/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 jU(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 OI(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 KU(e={},t={}){let r=wZ(e.name||e.rune||e.runeName,"name"),n=await OI(`/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}}_();var kZ="https://hermes.pyth.network",HI={"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"},SZ=/^[0-9a-fA-F]{64}$/;function XU(e={}){return String(e.baseUrl||process.env.PYTH_HERMES_URL||kZ).replace(/\/$/,"")}function ZU(e,t="feedId"){let r=String(e??"").trim();if(!r)throw new Error(`pyth-price-feeds: ${t} required`);let n=HI[r.toUpperCase()]||HI[`${r.toUpperCase()}/USD`];if(n)return n;let o=r.startsWith("0x")||r.startsWith("0X")?r.slice(2):r;if(!SZ.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 qI(e={}){let t=Number(e.price),r=Number(e.expo);return!Number.isFinite(t)||!Number.isFinite(r)?null:t*10**r}function GI(e={}){let t=qI({price:Number(e.price?.conf),expo:e.price?.expo}),r=qI(e.price);return{id:e.id||null,price:r,confidence:t,confidenceBps:r&&t!=null?Math.round(t/Math.abs(r)*1e4):null,emaPrice:qI(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 YI(e,t={}){let r=new URL(`${XU(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"),B(r.toString(),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??12e3})}async function eL(e={}){try{let t=await YI([HI["SOL/USD"]],e),n=(Array.isArray(t?.parsed)?t.parsed.map(GI):[])[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 tL(e={},t={}){let r=ZU(e.feedId||e.id||e.symbol,"feedId"),n=await YI([r],t),o=Array.isArray(n?.parsed)?n.parsed.map(GI):[],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 rL(e={},t={}){let r=Array.isArray(e)?e:e.feedIds||e.ids||e.symbols||[],n=[...new Set(r.map(c=>ZU(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 YI(c,t));let a=s.flatMap(c=>Array.isArray(c?.parsed)?c.parsed.map(GI):[]),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 nL(e={},t={}){let r=new URL(`${XU(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 B(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}))}}_();var vZ="https://relayscan.io",oL=new Set(["1h","12h","24h","7d"]);function VI(e={}){return(e.baseUrl||process.env.RELAYSCAN_API_URL||vZ).replace(/\/$/,"")}function iL(e={}){let t=String(e.timespan||e.t||"24h").toLowerCase();if(!oL.has(t))throw new Error(`relayscan-mev: timespan must be one of ${[...oL].join(", ")}`);return t}function NZ(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 $I(e={},t={}){return B(`${VI(t)}/overview/json?t=${iL(e)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function sL(e={},t={}){return B(`${VI(t)}/builder-profit/json?t=${iL(e)}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??2e4})}async function aL(e={},t={}){let r=NZ(e);return B(`${VI(t)}/stats/day/${r}/json`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3})}async function AL(e={}){let t=await $I({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 DZ="https://extra-api.sanctum.so",FZ=30,MZ=["jitoSOL","mSOL","bSOL","INF","hSOL","bonkSOL","jupSOL","dSOL"];function JI(e={}){return String(e.baseUrl||process.env.SANCTUM_API_URL||DZ).replace(/\/$/,"")}function cL(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 TZ(e,t){let r=[];for(let n=0;n<e.length;n+=t)r.push(e.slice(n,n+t));return r}async function Po(e,t,r={}){let n={},o={};for(let i of TZ(t,FZ)){let s=new URL(`${JI(r)}/v1/${e}`);for(let c of i)s.searchParams.append("lst",c);let a=await B(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 lL(e={}){try{let[t,r]=await Promise.all([B(`${JI(e)}/v1/lsts`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??15e3}),Po("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 WI(e={},t={}){let r=await B(`${JI(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 uL(e={},t={}){let r=e.lsts||e.symbols||null;e.all===!0&&(r=(await WI({},t)).lsts.map(A=>A.symbol).filter(Boolean)),(!Array.isArray(r)||!r.length)&&(r=MZ);let n=[...new Set(r.map(a=>cL(a,"lsts[]")))],[o,i]=await Promise.all([Po("apy/latest",n,t),Po("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 dL(e={},t={}){let r=cL(e.lst||e.mint||e.symbol,"lst"),[n,o,i,s]=await Promise.all([Po("apy/latest",[r],t),Po("apy/inception",[r],t),Po("tvl/current",[r],t).catch(()=>({values:{},errs:{}})),Po("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}}_();var LZ="https://api.save.finance",_Z="4UpD2fh7xH3VP9QQaXtsS1YY3bxzWhtfpks7FatyKvdY",fL="CCpirWrgNuBVLdkP2haxLTbD6XqEgaYuVXixbbpxUB6",PZ=/^[1-9A-HJ-NP-Za-km-z]{32,44}$/;function zI(e={}){return String(e.baseUrl||process.env.SAVE_API_URL||process.env.SOLEND_API_URL||LZ).replace(/\/$/,"")}function pL(e,t="address"){let r=String(e??"").trim();if(!PZ.test(r))throw new Error(`solend-lending: ${t} must be a base58 public key`);return r}function hL(e){let t=Number(e);return Number.isFinite(t)?t:null}function OZ(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 qZ(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:hL(e.rates?.supplyInterest),borrowApyPct:hL(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 gL(e={}){try{let t=await B(`${zI(e)}/v1/reserves?ids=${fL}`,{fetchImpl:e.fetchImpl,timeoutMs:e.timeoutMs??15e3}),r=Array.isArray(t?.results)?t.results:[];return{ok:r.length>0,provider:"solend-lending",probeReserve:fL,reserves:r.length,exec:!1}}catch(t){return{ok:!1,provider:"solend-lending",error:String(t?.message||t),exec:!1}}}async function jI(e={},t={}){let r=new URL(`${zI(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 B(r.toString(),{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??(e.scope==="all"?45e3:2e4)}),o=(Array.isArray(n)?n:[]).map(OZ);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 mL(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=>pL(String(a).trim(),"reserve"));else{let s=pL(e.market||e.marketAddress||_Z,"market"),A=(await jI({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 B(`${zI(t)}/v1/reserves?ids=${r.join(",")}`,{fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3}),i=(Array.isArray(o?.results)?o.results:[]).map((s,a)=>({...qZ(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 KI(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 Oo(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 TA(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:KI(e.amount,"amount")}}function XI(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 UA(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 ZI(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 GZ(e={},t={}){let r=TA(e),n=Oo(e.slices??10,"slices",2,100),o=Oo(e.durationSec??3600,"durationSec",n,604800),i=XI(r.total,Array(n).fill(1));return UA(r,"TWAP",ZI(i,o,t.nowMs),{durationSec:o})}function YZ(e={},t={}){let r=TA(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=Oo(e.durationSec??3600,"durationSec",n.length,604800),i=XI(r.total,n),s=n.reduce((A,c)=>A+c,0n),a=ZI(i,o,t.nowMs).map((A,c)=>({...A,volumeWeightBps:Number(n[c]*10000n/s)}));return UA(r,"VWAP",a,{durationSec:o,requiresLiveVolumeValidation:!0})}function VZ(e={}){let t=TA(e),r=Oo(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=KI(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 UA(t,"POV",o,{participationBps:r,residualAmount:String(n),requiresLiveVolumeValidation:!0})}function $Z(e={}){let t=TA(e),r=KI(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 UA(t,"ICEBERG",n,{displayAmount:String(r),refillCount:n.length-1})}function JZ(e={},t={}){let r=TA(e),n=Oo(e.slices??10,"slices",2,100),o=Oo(e.durationSec??3600,"durationSec",n,604800),i=Oo(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=XI(r.total,s);return UA(r,"IS",ZI(a,o,t.nowMs),{durationSec:o,urgencyBps:i})}function EL(e={},t={}){let r=String(e.strategy||"").trim().toUpperCase();if(r==="TWAP")return GZ(e,t);if(r==="VWAP")return YZ(e,t);if(r==="POV")return VZ(e,t);if(r==="ICEBERG")return $Z(e,t);if(r==="IS"||r==="IMPLEMENTATION SHORTFALL")return JZ(e,t);throw new Error("strategy must be TWAP, VWAP, POV, ICEBERG, or IS")}function IL(){return{ok:!0,provider:"execution-strategies",strategies:["TWAP","VWAP","POV","ICEBERG","IS"],execution:"plan-only",externalProtocol:!1}}var zZ={"hl-info":{health:e=>gv(e),allMids:e=>rn(e),l2Book:(e,t={})=>su(t.coin,e),outcomeMeta:e=>Xa(e),clearinghouse:(e,t={})=>au(t.user,e),userFills:(e,t={})=>mv(t.user,e),meta:e=>Au(e),metaAndAssetCtxs:e=>Wi(e),candleSnapshot:(e,t={})=>zi(t,e),openOrders:(e,t={})=>Iv(t.user,e),frontendOpenOrders:(e,t={})=>Cv(t.user,e),userState:(e,t={})=>cu(t.user,e),spotMeta:e=>lu(e)},"hl-vaults":{health:e=>wv(e),summaries:(e,t={})=>ym(t,e),details:(e,t={})=>uu(t,e),userEquities:(e,t={})=>Qm(t,e),tracker:(e,t={})=>wm(t,e)},"poly-public":{health:e=>kv(e),time:e=>bm(e),markets:(e,t={})=>Sv(t,e),book:(e,t={})=>xv(t.tokenId,e),midpoint:(e,t={})=>vv(t.tokenId,e),spread:(e,t={})=>Nv(t.tokenId,e),price:(e,t={})=>Rv(t.tokenId,{side:t.side},e),events:(e,t={})=>Dv(t,e)},"evm-rpc":{health:(e,t={})=>Vi(t.chainId??1,e),healthAll:(e,t={})=>rm({...e,chainIds:t.chainIds}),blockNumber:(e,t={})=>qa(t.chainId??1,e),chainId:(e,t={})=>Zg(t.chainId??1,e),getBalance:(e,t={})=>ko(t.chainId??1,t.address,e),call:(e,t={})=>z(t.chainId??1,t.method,t.params||[],e),erc20Allowance:(e,t={})=>tm(t,e),erc20Balance:(e,t={})=>Ha(t,e),transactionReceipt:(e,t={})=>Ga(t,e)},portfolio:{health:e=>rM(e),balances:(e,t={})=>fd(t,e),snapshot:(e,t={})=>BM(t,e),history:(e,t={})=>aI(t,e),valueGraph:(e,t={})=>yM(t,e)},"nft-portfolio":{health:e=>cM(e),inventory:(e,t={})=>ys(t,e),gallery:(e,t={})=>fM(t,e),pnl:(e,t={})=>dM(t,e),prepareList:(e,t={})=>lM(t,e),traitSnipe:(e,t={})=>uM(t,e)},"contract-risk":{health:e=>QM(e),scan:(e,t={})=>Lo(t,e)},"evm-token-sniper":{health:e=>kM(e),scan:(e,t={})=>bM(t,e)},"evm-simulate":{health:e=>xM(e),simulate:(e,t={})=>vA(t,e)},"nft-mint":{health:e=>NM(e),discover:(e,t={})=>Id(t,e),prepare:(e,t={})=>lI(t,e),priceGas:(e,t={})=>Ed(t,e),createTrigger:(e,t={})=>RM(t,e),checkOpen:(e,t={})=>DM(t,e),evaluateMancerOs:(e,t={})=>TM(t,e)},"solana-rpc":{health:e=>Mv(e),latestBlockhash:(e,t={})=>Sm(t,e),getBalance:(e,t={})=>du(t,e),tokenAccounts:(e,t={})=>tA(t,e),simulate:(e,t={})=>Tv(t,e)},"bitcoin-esplora":{health:e=>Uv(e),tipHeight:e=>Lv(e),fees:e=>_v(e),address:(e,t={})=>pu(t,e),utxos:(e,t={})=>Pv(t,e),tx:(e,t={})=>Ov(t,e),decode:(e,t={})=>qv(t,e)},"bitcoin-meta":{health:e=>Vv(e),runeBalances:(e,t={})=>gu(t,e),inscriptions:(e,t={})=>Xi(t,e),inscriptionInfo:(e,t={})=>$v(t,e),inscriptionChildren:(e,t={})=>Jv(t,e),ordBlockInfo:(e,t={})=>Wv(t,e)},satflow:{health:e=>jv(e),collectionFloors:(e,t={})=>Kv(t,e),collectionStats:(e,t={})=>Xv(t,e),item:(e,t={})=>Zv(t,e),walletContents:(e,t={})=>Eu(t,e),floorListings:(e,t={})=>eN(t,e),preparePurchase:(e,t={})=>rN(t,e),prepareList:(e,t={})=>Iu(t,e)},jupiter:{health:e=>lN(e),venues:(e,t={})=>cN(t,e),quote:(e,t={})=>yu(t,e),prepare:(e,t={})=>uN(t,e)},defillama:{health:e=>fN(e),prices:(e,t={})=>lr(t.coins||[],e),pricesBySymbol:(e,t={})=>mN(t.symbols,e),protocols:e=>Qu(e),yields:(e,t={})=>pN(t,e),stablecoins:(e,t={})=>hN(t,e),dexVolumes:(e,t={})=>gN(t,e)},lifi:{health:e=>bN(e),quote:(e,t={})=>Rn(t,e),prepare:(e,t={})=>kN(t,e),chains:e=>SN(e)},dexscreener:{health:e=>Lx(e),token:(e,t={})=>So(t.address||t.tokenAddress,e),search:(e,t={})=>Ya(t.q||t.query,e),pair:(e,t={})=>_x(t.chainId,t.pairAddress,e)},"uniswap-v3":{health:(e,t={})=>Xx({...e,chainId:t.chainId??8453}),quote:(e,t={})=>Sn(t,e),prepare:(e,t={})=>Kx(t,e),quotePath:(e,t={})=>jx(t,e),ethUsdc:(e,t={})=>cm(t,e),chains:()=>Zx()},"uniswap-v4":{health:(e,t={})=>iv({...e,chainId:t.chainId??8453}),quote:(e,t={})=>ru(t,e),chains:()=>ov()},aerodrome:{health:(e,t={})=>TN({...e,chainId:t.chainId??8453}),quote:(e,t={})=>Su(t,e),prepare:(e,t={})=>MN(t,e),chains:()=>UN()},zerox:{health:e=>ON(e),price:(e,t={})=>Gm(t,e),quote:(e,t={})=>vo(t,e),prepare:(e,t={})=>qN(t,e)},across:{health:e=>Ym(e),suggestedFees:(e,t={})=>vu(t,e)},hop:{health:e=>Vm(e),quote:(e,t={})=>Nu(t,e)},relay:{health:e=>$m(e),quote:(e,t={})=>oA(t,e),prepare:(e,t={})=>Jm(t,e)},cowswap:{health:e=>jN(e),quote:(e,t={})=>Fn(t,e),prepareOrder:(e,t={})=>KN(t,e),order:(e,t={})=>ZN(t,e),status:(e,t={})=>XN(t,e),chains:()=>eR()},oneinch:{health:e=>rR(e),quote:(e,t={})=>aA(t,e),prepare:(e,t={})=>nR(t,e),approveSpender:(e,t={})=>Zm(t,e)},"hl-ws":{health:e=>oR(e),allMids:e=>iR(e),l2Book:(e,t={})=>sR(t.coin,e),snapshot:(e,t={})=>AA(t.subscription||t,e)},"poly-ws":{health:(e,t={})=>aR({...e,assetId:t.assetId}),book:(e,t={})=>AR(t.assetId||t.tokenId,e),snapshot:(e,t={})=>Mu(t.assetIds||t.assets_ids||[t.assetId],e)},"opensea-nft":{health:e=>IR(e),collection:(e,t={})=>cA(t.slug,e),floor:(e,t={})=>CR(t.slug,e),bestListings:(e,t={})=>uA(t,e),accountNfts:(e,t={})=>lA(t,e),accountPnl:(e,t={})=>_u(t,e),prepareBuy:(e,t={})=>sE(t,e),prepareSweep:(e,t={})=>aE(t,e),prepareMint:(e,t={})=>AE(t,e),prepareList:(e,t={})=>fA(t,e),prepareCancel:(e,t={})=>cE(t,e)},"hl-outcome":{list:e=>cD(e),prepareOrder:(e,t={})=>lD(t,e),prepareCancel:(e,t={})=>uD(t,e)},"protocol-templates":{health:()=>({ok:!0,templates:ed().map(e=>e.id),nativeTemplates:ME().map(e=>e.id),families:["evm","solana","bitcoin"],firmAudit:!1}),list:()=>ed(),listNative:()=>ME(),gate:(e,t={})=>vE(t.templateId||t.id,e),prepareDeploy:(e,t={})=>UD(t,e),buildNative:(e,t={})=>YD(t)},"poly-clob":{prepareOrder:(e,t={})=>mD(t||{})},"hl-perps":{health:e=>IE(e),assetInfo:(e,t={})=>Do(t,e),prepareOrder:(e,t={})=>EA(t,e),prepareCancel:(e,t={})=>Ju(t,e),prepareLeverage:(e,t={})=>sD(t,e),prepareIsolatedMargin:(e,t={})=>aD(t,e),prepareBracket:(e,t={})=>AD(t,e),prepareBuilderApproval:(e,t={})=>iD(t,e)},"hl-markets":{health:e=>IE(e),markets:(e,t={})=>Hu(t,e),leaderboards:(e,t={})=>JR(t,e),coin:(e,t={})=>WR(t,e),spot:(e,t={})=>zR(t,e)},"magiceden-sol":{health:e=>FR(e),stats:(e,t={})=>uE(t,e),listings:(e,t={})=>TR(t,e),tokenListings:(e,t={})=>UR(t,e),prepareBuy:(e,t={})=>LR(t,e),prepareList:(e,t={})=>Ou(t,e),prepareMint:(e,t={})=>_R(t,e)},"hl-staking":{health:e=>OR(e),validators:e=>pE(e),delegatorSummary:(e,t={})=>hE(t,e),delegations:(e,t={})=>gE(t,e),rewards:(e,t={})=>qR(t,e),history:(e,t={})=>HR(t,e),preflight:(e,t={})=>$R(t,e),prepareStakeDeposit:(e,t={})=>GR(t,e),prepareStakeWithdraw:(e,t={})=>YR(t,e),prepareDelegate:(e,t={})=>VR(t,e)},"hyperevm-dex":{health:e=>vR(e),search:(e,t={})=>NR(t.q||t.query||"HYPE",e),token:(e,t={})=>RR(t.address||t.tokenAddress,e)},geckoterminal:{health:e=>WD(e),networks:(e,t={})=>TE(t,e),pool:(e,t={})=>VD(t,e),token:(e,t={})=>$D(t,e),ohlcv:(e,t={})=>JD(t,e)},curve:{health:e=>aF(e),openapi:e=>sF(e),pools:(e,t={})=>LE(t,e),quote:(e,t={})=>_E(t,e),prepare:(e,t={})=>AF(t,e)},gmx:{health:e=>IF(e),tickers:(e,t={})=>sd(t,e),markets:(e,t={})=>mF(t,e),marketsInfo:(e,t={})=>OE(t,e),tokens:(e,t={})=>EF(t,e),prepareOrder:(e,t={})=>QF(t,e),positions:(e,t={})=>CF(t,e),orderStatus:(e,t={})=>BF(t,e),verifyOrder:(e,t={})=>yF(t,e)},morpho:{health:e=>SF(e),markets:(e,t={})=>kF(t,e),vaults:(e,t={})=>GE(t,e),prepareVault:(e,t={})=>xF(t,e)},balancer:{health:e=>UF(e),pools:(e,t={})=>TF(t,e),quote:(e,t={})=>$E(t,e),prepare:(e,t={})=>LF(t,e)},pendle:{health:e=>PF(e),markets:(e,t={})=>WE(t,e),quote:(e,t={})=>OF(t,e),prepare:(e,t={})=>zE(t,e)},odos:{health:e=>YF(e),chains:e=>KE(e),quote:(e,t={})=>HF(t,e),prepare:(e,t={})=>GF(t,e)},blockscout:{health:e=>XF(e),stats:(e,t={})=>eI(t,e),address:(e,t={})=>WF(t,e),token:(e,t={})=>zF(t,e)},paraswap:{health:e=>LM(e),tokens:(e,t={})=>fI(t,e),price:(e,t={})=>qn(t,e),quote:(e,t={})=>qn(t,e),prepare:(e,t={})=>UM(t,e)},rfq:{health:e=>eT(e),intent:(e,t={})=>XM(t,e),quote:(e,t={})=>ZM(t,e)},"polygon-staking":{health:e=>xT(e),validators:(e,t={})=>kT(t,e),validatorDetail:(e,t={})=>ST(t,e)},"aave-v3":{health:e=>DT(e),markets:(e,t={})=>vT(t,e),marketReserves:(e,t={})=>NT(t,e),chains:e=>RT(e)},"babylon-staking":{health:e=>MT(e),stats:e=>TT(e),finalityProviders:e=>UT(e),delegations:(e,t={})=>LT(t,e)},"bisq-markets":{health:e=>PT(e),markets:e=>OT(e),ticker:(e,t={})=>qT(t,e),trades:(e,t={})=>HT(t,e)},"bob-rootstock":{health:(e,t={})=>YT(t.chainId,e),stats:(e,t={})=>vI(t,e),addressInfo:(e,t={})=>VT(t,e),tokenBalances:(e,t={})=>$T(t,e)},"braiins-insights":{health:e=>JT(e),priceStats:e=>WT(e),poolStats:e=>zT(e)},"cow-protocol":{health:e=>nU(e),auction:e=>eU(e),openOrders:(e,t={})=>tU(t,e),recentTrades:(e,t={})=>rU(t,e)},"hiro-stacks":{health:e=>oU(e),networkInfo:e=>iU(e),stackingInfo:e=>sU(e),poxCycles:e=>aU(e),blocks:(e,t={})=>AU(t,e)},"jito-mev":{health:e=>uU(e),recentBundles:(e,t={})=>dU(t,e),tipFloor:e=>fU(e)},"kamino-strategies":{health:e=>hU(e),strategies:(e,t={})=>gU(t,e),strategyMetrics:(e,t={})=>mU(t,e)},"liquid-esplora":{health:e=>BU(e),tipHeight:e=>yU(e),addressInfo:(e,t={})=>QU(t,e),assetInfo:(e,t={})=>wU(t,e)},"magiceden-ordinals":{health:e=>SU(e),collectionStat:(e,t={})=>xU(t,e)},"mempool-lightning":{health:e=>NU(e),statistics:e=>RU(e),nodeRankings:(e,t={})=>DU(t,e),nodeCountries:e=>FU(e)},"mempool-mining":{health:e=>UU(e),difficulty:e=>LU(e),poolShare:(e,t={})=>_U(t,e),hashrate:(e,t={})=>PU(t,e),rewardStats:(e,t={})=>OU(t,e)},"meteora-dlmm":{health:e=>GU(e),pools:(e,t={})=>YU(t,e),poolSearch:(e,t={})=>VU(t,e)},"ordinals-runes":{health:e=>JU(e),blockHeight:e=>WU(e),blockInfo:(e,t={})=>zU(t,e),satInfo:(e,t={})=>jU(t,e),runeInfo:(e,t={})=>KU(t,e)},"pyth-price-feeds":{health:e=>eL(e),latestPrice:(e,t={})=>tL(t,e),latestPrices:(e,t={})=>rL(t,e),feedDirectory:e=>nL(e)},"relayscan-mev":{health:e=>AL(e),overview:(e,t={})=>$I(t,e),builderProfit:(e,t={})=>sL(t,e),dailyStats:(e,t={})=>aL(t,e)},"sanctum-lst":{health:e=>lL(e),lstList:e=>WI(e),apyAll:e=>uL(e),apyIndividual:(e,t={})=>dL(t,e)},"solend-lending":{health:e=>gL(e),markets:e=>jI(e),reserves:(e,t={})=>mL(t,e)},"execution-strategies":{health:()=>IL(),plan:(e,t={})=>EL(t)},"across-bridge":{health:e=>tT(e),pools:(e,t={})=>rT(t,e),suggestedFees:(e,t={})=>nT(t,e)},"beefy-yields":{health:e=>oT(e),apy:(e,t={})=>iT(t,e),apyBreakdown:e=>sT(e)},"birdeye-tokens":{health:e=>AT(e),tokenList:(e,t={})=>cT(t,e)},"celestia-da":{health:e=>lT(e),stats:e=>uT(e),blockStats:(e,t={})=>dT(t,e)},"das-assets":{health:e=>fT(e),assetsByOwner:(e,t={})=>pT(t,e),searchAssets:(e,t={})=>hT(t,e),assetProof:(e,t={})=>gT(t,e)},"l2beat-tvl":{health:e=>mT(e),tvl:(e,t={})=>ET(t,e),activity:(e,t={})=>IT(t,e)},"spark-lend":{health:e=>CT(e),markets:(e,t={})=>BT(t,e)},"symbiotic-restaking":{health:e=>yT(e),vaults:(e,t={})=>QT(t,e),vaultDetail:(e,t={})=>wT(t,e)}},CL=new Set(["prepareBuilderApproval","prepareBracket","prepareIsolatedMargin","prepareLeverage","prepareCancel","prepareOrder","preparePurchase","prepareList","prepareSell","prepareBuy","prepareMint","prepare","prepareStakeDeposit","prepareStakeWithdraw","prepareDelegate","prepareSwap","prepareTransfer","createOrder","cancelOrder"]),BL=new Set(["hl-exec"]);function jZ(e){return BL.has(String(e||""))}function KZ(e,t,r={}){let n=String(t||""),o=`${e}.${n}`;if(BL.has(e))throw new Error(`data plane forbidden execution provider: ${e}`);let i=Ka().find(s=>s.id===e);if(/sign|execute|broadcast|submit|send|write|place/i.test(n)&&!CL.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(CL.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 k(e,t,r={},n={}){if(jZ(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.`);KZ(e,t,r);let o=iu(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=zZ[e];if(!i||typeof i[t]!="function")throw new Error(`No client implementation for ${e}.${t}`);return i[t](n,r)}async function yL({providers:e,fetchImpl:t,timeoutMs:r,includeRpc:n,includeWs:o,concurrency:i,healthCall:s}={}){let a=e||Ka().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,f)=>k(u,"health",d,f),l={};return await Yi(a,i??8,async u=>{if(!iu(u)){l[u]={ok:!1,ms:0,reason:"transport",error:"unknown provider"};return}let d=u==="evm-rpc"?{chainId:1}:{},f=await qe(()=>c(u,d,A));if(!f.ok){l[u]={ok:!1,ms:f.ms,reason:"transport",error:f.error};return}let p=f.data;if(p&&typeof p=="object"&&p.ok===!1){l[u]={ok:!1,ms:f.ms,reason:"provider",error:p.error||p.message||"provider reported unhealthy",detail:p};return}l[u]={ok:!0,ms:f.ms,detail:p}}),{when:new Date().toISOString(),plane:"data",exec:"local-signer",providers:l}}function QL(e){return Array.isArray(e.localSignerSurfaces)?e.localSignerSurfaces:[]}function XZ(e){return e.execution==="prepare"&&QL(e).length?"armed-local":e.execution||"read-only"}function wL(){return Ka().map(e=>({id:e.id,venue:e.venue,chainIds:e.chainIds,auth:e.auth,ops:e.ops,execution:XZ(e),localSignerSurfaces:QL(e),description:e.description}))}var ZZ={catalog:wL,health:yL,call:k,hl:{health:e=>k("hl-info","health",{},e),allMids:e=>k("hl-info","allMids",{},e),l2Book:(e,t)=>k("hl-info","l2Book",{coin:e},t),outcomeMeta:e=>k("hl-info","outcomeMeta",{},e),clearinghouse:(e,t)=>k("hl-info","clearinghouse",{user:e},t),userFills:(e,t)=>k("hl-info","userFills",{user:e},t),meta:e=>k("hl-info","meta",{},e),metaAndAssetCtxs:e=>k("hl-info","metaAndAssetCtxs",{},e),candleSnapshot:(e,t)=>k("hl-info","candleSnapshot",e||{},t),openOrders:(e,t)=>k("hl-info","openOrders",{user:e},t),userState:(e,t)=>k("hl-info","userState",{user:e},t),spotMeta:e=>k("hl-info","spotMeta",{},e),vaults:{health:e=>k("hl-vaults","health",{},e),summaries:(e,t)=>k("hl-vaults","summaries",e||{},t),details:(e,t)=>k("hl-vaults","details",e||{},t),mine:(e,t)=>k("hl-vaults","userEquities",{user:e},t),track:(e,t)=>k("hl-vaults","tracker",e||{},t)},staking:{health:e=>k("hl-staking","health",{},e),validators:e=>k("hl-staking","validators",{},e),summary:(e,t)=>k("hl-staking","delegatorSummary",{user:e},t),delegations:(e,t)=>k("hl-staking","delegations",{user:e},t),rewards:(e,t)=>k("hl-staking","rewards",{user:e},t),history:(e,t)=>k("hl-staking","history",{user:e},t),preflight:(e,t)=>k("hl-staking","preflight",{user:e},t),prepareStake:(e,t)=>k("hl-staking","prepareStakeDeposit",e||{},t),prepareUnstake:(e,t)=>k("hl-staking","prepareStakeWithdraw",e||{},t),prepareDelegate:(e,t)=>k("hl-staking","prepareDelegate",e||{},t)}},poly:{health:e=>k("poly-public","health",{},e),time:e=>k("poly-public","time",{},e),markets:(e,t)=>k("poly-public","markets",e||{},t),book:(e,t)=>k("poly-public","book",{tokenId:e},t),midpoint:(e,t)=>k("poly-public","midpoint",{tokenId:e},t),spread:(e,t)=>k("poly-public","spread",{tokenId:e},t),price:(e,t,r)=>k("poly-public","price",{tokenId:e,side:t},r),events:(e,t)=>k("poly-public","events",e||{},t)},polyClob:{prepareOrder:(e,t)=>k("poly-clob","prepareOrder",e||{},t)},rpc:{health:(e,t)=>k("evm-rpc","health",{chainId:e},t),healthAll:(e,t)=>k("evm-rpc","healthAll",e||{},t),blockNumber:(e,t)=>k("evm-rpc","blockNumber",{chainId:e},t),getBalance:(e,t,r)=>k("evm-rpc","getBalance",{chainId:e,address:t},r),call:(e,t,r,n)=>k("evm-rpc","call",{chainId:e,method:t,params:r},n)},evmSniper:{health:e=>k("evm-token-sniper","health",{},e),scan:(e,t)=>k("evm-token-sniper","scan",e||{},t)},portfolio:{balance:(e,t)=>k("portfolio","balances",e||{},t),snapshot:(e,t)=>k("portfolio","snapshot",e||{},t),history:(e,t)=>k("portfolio","history",e||{},t),valueGraph:(e,t)=>k("portfolio","valueGraph",e||{},t)},nft:{inventory:(e,t)=>k("nft-portfolio","inventory",e||{},t),gallery:(e,t)=>k("nft-portfolio","gallery",e||{},t),pnl:(e,t)=>k("nft-portfolio","pnl",e||{},t),prepareList:(e,t)=>k("nft-portfolio","prepareList",e||{},t),traitSnipe:(e,t)=>k("nft-portfolio","traitSnipe",e||{},t),floor:(e,t)=>k("opensea-nft","floor",{slug:e},t),collection:(e,t)=>k("opensea-nft","collection",{slug:e},t),bestListings:(e,t)=>k("opensea-nft","bestListings",e||{},t),prepareBuy:(e,t)=>k("opensea-nft","prepareBuy",e||{},t),prepareSweep:(e,t)=>k("opensea-nft","prepareSweep",e||{},t),prepareMint:(e,t)=>k("opensea-nft","prepareMint",e||{},t),prepareCancel:(e,t)=>k("opensea-nft","prepareCancel",e||{},t)},solana:{health:e=>k("solana-rpc","health",{},e),latestBlockhash:(e,t)=>k("solana-rpc","latestBlockhash",e||{},t),balance:(e,t)=>k("solana-rpc","getBalance",{address:e},t),tokenAccounts:(e,t)=>k("solana-rpc","tokenAccounts",e||{},t),simulate:(e,t)=>k("solana-rpc","simulate",e||{},t),jupiterQuote:(e,t)=>k("jupiter","quote",e||{},t),jupiterPrepare:(e,t)=>k("jupiter","prepare",e||{},t),nftStats:(e,t)=>k("magiceden-sol","stats",e||{},t),nftListings:(e,t)=>k("magiceden-sol","listings",e||{},t),nftTokenListings:(e,t)=>k("magiceden-sol","tokenListings",e||{},t),nftPrepareBuy:(e,t)=>k("magiceden-sol","prepareBuy",e||{},t),nftPrepareList:(e,t)=>k("magiceden-sol","prepareList",e||{},t),nftPrepareMint:(e,t)=>k("magiceden-sol","prepareMint",e||{},t)},bitcoin:{health:e=>k("bitcoin-esplora","health",{},e),tipHeight:e=>k("bitcoin-esplora","tipHeight",{},e),fees:e=>k("bitcoin-esplora","fees",{},e),address:(e,t)=>k("bitcoin-esplora","address",{address:e},t),utxos:(e,t)=>k("bitcoin-esplora","utxos",{address:e},t),tx:(e,t)=>k("bitcoin-esplora","tx",{txid:e},t),decode:(e,t)=>k("bitcoin-esplora","decode",e||{},t),metaHealth:e=>k("bitcoin-meta","health",{},e),runeBalances:(e,t)=>k("bitcoin-meta","runeBalances",{address:e},t),inscriptions:(e,t)=>k("bitcoin-meta","inscriptions",{address:e},t),satflowHealth:e=>k("satflow","health",{},e),satflowFloors:(e,t)=>k("satflow","collectionFloors",e||{},t),satflowWallet:(e,t)=>k("satflow","walletContents",{address:e},t)},prices:{health:e=>k("defillama","health",{},e),current:(e,t)=>k("defillama","prices",{coins:e},t),bySymbol:(e,t)=>k("defillama","pricesBySymbol",{symbols:e},t),protocols:e=>k("defillama","protocols",{},e)},lifi:{health:e=>k("lifi","health",{},e),quote:(e,t)=>k("lifi","quote",e||{},t),chains:e=>k("lifi","chains",{},e)},dex:{health:e=>k("dexscreener","health",{},e),token:(e,t)=>k("dexscreener","token",{address:e},t),search:(e,t)=>k("dexscreener","search",{q:e},t),pair:(e,t,r)=>k("dexscreener","pair",{chainId:e,pairAddress:t},r)},uni:{health:(e,t)=>k("uniswap-v3","health",e||{},t),quote:(e,t)=>k("uniswap-v3","quote",e||{},t),quotePath:(e,t)=>k("uniswap-v3","quotePath",e||{},t),ethUsdc:(e,t)=>k("uniswap-v3","ethUsdc",e||{},t),chains:e=>k("uniswap-v3","chains",{},e)},univ4:{health:(e,t)=>k("uniswap-v4","health",e||{},t),quote:(e,t)=>k("uniswap-v4","quote",e||{},t),chains:e=>k("uniswap-v4","chains",{},e)},bridges:{across:(e,t)=>k("across","suggestedFees",e||{},t),hop:(e,t)=>k("hop","quote",e||{},t),relay:(e,t)=>k("relay","quote",e||{},t)},cow:{quote:(e,t)=>k("cowswap","quote",e||{},t)},hlWs:{allMids:e=>k("hl-ws","allMids",{},e),l2Book:(e,t)=>k("hl-ws","l2Book",{coin:e},t)},polyWs:{book:(e,t)=>k("poly-ws","book",{assetId:e},t)}};zg();var fr=Object.freeze({FULL:"FULL",NO_GAS:"NO_GAS",FAILED:"FAILED"}),kL={1:"coingecko:ethereum",10:"coingecko:ethereum",56:"coingecko:binancecoin",137:"coingecko:matic-network",8453:"coingecko:ethereum",42161:"coingecko:ethereum",43114:"coingecko:avalanche-2",999:"coingecko:ethereum"},LA=e=>{try{return e==null||e===""?null:BigInt(String(e).split(".")[0])}catch{return null}};function bL(e){let{source:t,amountOut:r,minOut:n=null,gasUsd:o=null,feeUsd:i=null,oracleFeeBps:s=0,estimatedGas:a=null,liquidityUsd:A=null,error:c=null,executionReady:l=!1,meta:u={}}=e||{};if(c||r==null)return{source:t,quality:fr.FAILED,amountOut:null,error:c||"no amountOut returned"};let d=LA(r);if(d==null||d<=0n)return{source:t,quality:fr.FAILED,amountOut:null,error:"non-positive amountOut"};let f=Number(s);return{source:t,quality:o==null?fr.NO_GAS:fr.FULL,amountOut:d.toString(),minOut:LA(n)?.toString()??null,gasUsd:o,feeUsd:i,oracleFeeBps:Number.isFinite(f)&&f>0?Math.floor(f):0,estimatedGas:a==null?null:String(a),liquidityUsd:A==null?null:Number(A),executionReady:l,meta:u}}async function SL(e,t,{divisor:r=1000n}={}){let n=LA(t);if(n==null||n<=0n)return null;let o=n/r>0n?n/r:1n;if(o>=n)return null;let i,s;try{[i,s]=await Promise.all([e(o),e(n)])}catch{return null}let a=LA(i),A=LA(s);if(a==null||A==null||a<=0n)return null;let c=Number(a)/Number(o),l=Number(A)/Number(n);return!Number.isFinite(c)||!Number.isFinite(l)||c<=0?null:{impactPct:(1-l/c)*100,probeAmountIn:o.toString(),probeAmountOut:a.toString(),fullAmountOut:A.toString()}}function xL(e,t,{maxImpactPct:r=25}={}){let n=[],o=[],i=(e.routes??[]).filter(a=>{let A=t?.[a.source];return A?A.impactPct>r?(n.push({source:a.source,impactPct:Number(A.impactPct.toFixed(2)),reason:`price impact ${A.impactPct.toFixed(1)}% exceeds ${r}% ceiling -- the venue cannot absorb this size near the quoted price`}),!1):!0:(o.push(a.source),!0)}),s=[...e.warnings??[]];return n.length&&s.push(`dropped ${n.length} route(s) on price impact: `+n.map(a=>`${a.source} (${a.impactPct}%)`).join(", ")),o.length&&s.push(`price impact NOT measured for: ${o.join(", ")}. These are unproven against thin liquidity, not proven safe.`),{...e,routes:i,best:i[0]??null,impactRejected:n,impactUnmeasured:o,warnings:s}}function eC(e,{destPriceUsd:t=null,destDecimals:r=null,liquidityFirst:n=!0,liquidityBandBps:o=50,gasPriceWei:i=null,nativePriceUsd:s=null}={}){let a=e.filter(y=>y.quality!==fr.FAILED),A=e.filter(y=>y.quality===fr.FAILED),c=t!=null&&t>0&&r!=null&&r>=0,l=Number(i),u=Number(s),d=Number.isFinite(l)&&l>0&&Number.isFinite(u)&&u>0,f=a.map(y=>{let w=BigInt(y.amountOut),b=0n,U=!1,q=!1,ue=BigInt(y.oracleFeeBps??0),Ve=ue>0n?w*ue/10000n:0n;if(c){let Et=y.gasUsd,Ut=Number(y.meta?.gasUnits??y.estimatedGas);if(Et==null&&d&&Number.isFinite(Ut)&&Ut>0){let It=Ut*l/1e18*u;Number.isFinite(It)&&It>=0&&(Et=It,q=!0)}let An=(Et??0)+(y.feeUsd??0);if(An>0){let It=An/t*10**r;Number.isFinite(It)&&It>=0&&(b=BigInt(Math.floor(It)),U=!0)}else Et===0&&(U=!0)}let mt=b+Ve,Tt=w>mt?w-mt:0n;return{...y,grossOut:w.toString(),netOut:Tt.toString(),costInDest:b.toString(),oracleFeeInDest:Ve.toString(),costAccounted:U,gasEstimated:q}}),p=Number(o)>0?Number(o):0,h=f.reduce((y,w)=>BigInt(w.netOut)>y?BigInt(w.netOut):y,0n),g=y=>h>0n?Number((h-BigInt(y))*10000n/h):0,m=[],C=f.slice().sort((y,w)=>BigInt(w.netOut)>BigInt(y.netOut)?1:-1)[0]??null;f.sort((y,w)=>{let b=g(y.netOut)<=p?0:1,U=g(w.netOut)<=p?0:1;if(n&&p>0&&b!==U)return b-U;if(n&&p>0){let q=y.liquidityUsd??-1,ue=w.liquidityUsd??-1;if(q!==ue)return ue-q}return BigInt(w.netOut)>BigInt(y.netOut)?1:-1}),n&&p>0&&C&&f[0]&&f[0].source!==C.source&&m.push(`liquidity-first: chose ${f[0].source} (liquidity $${f[0].liquidityUsd??"unknown"}) over best-price ${C.source} within ${p} bps`);let E=f.filter(y=>!y.costAccounted).map(y=>y.source);c?E.length&&m.push(`gas not reported by: ${E.join(", ")}. These are ranked on gross output and may be overstated relative to gas-measured routes.`):m.push("destination price/decimals unavailable: ranked on GROSS output. Gas is not included, so a cheap-looking route may cost more to execute.");let I=f[0];if(c&&I&&I.costAccounted===!1){let y=f.find(w=>w.costAccounted&&g(w.netOut)<=p);y&&m.push(`winner ${I.source} has UNMEASURED gas; gas-measured ${y.source} is within ${p} bps and may net more once ${I.source}'s real gas is paid \u2014 prefer it if unsure.`)}let Q=f.filter(y=>y.gasEstimated).map(y=>y.source);Q.length&&m.push(`gas ESTIMATED (from gas units x current gas price, not measured) for: ${Q.join(", ")}. Net includes this estimate so the ranking is gas-inclusive, but the on-chain gas may differ.`);let N=null,S=null;if(f.length>=2&&f[0].costAccounted&&f[1].costAccounted){let y=BigInt(f[0].netOut),w=BigInt(f[1].netOut);w>0n&&(N=Number((y-w)*10000n/w),S=`${f[0].source} vs ${f[1].source}`)}return{best:f[0]??null,routes:f,failed:A,improvementBps:N,spreadBasis:S,rankedOn:c?"net-of-cost":"gross",warnings:m}}async function Rd(e,{timeoutMs:t=12e3}={}){let r=(o,i)=>Promise.race([o,new Promise((s,a)=>setTimeout(()=>a(new Error(`${i}: timeout`)),t))]);return(await Promise.allSettled(e.map(o=>r(Promise.resolve().then(o.run),o.source)))).map((o,i)=>{let s=e[i].source;return o.status==="rejected"?bL({source:s,error:String(o.reason?.message||o.reason)}):bL({source:s,...o.value})})}var _r=e=>{let t=Number(e);return Number.isFinite(t)?t:null};function Dd(e){if(!Array.isArray(e))return null;let t=0,r=!1;for(let n of e){let o=_r(n?.amountUSD);o!=null&&(t+=o,r=!0)}return r?t:null}async function NL(e,t={}){let r=kL[Number(e)];if(!r)return null;try{let n=await lr([r],t);return _r(n?.coins?.[r]?.price)}catch{return null}}var Hn=e=>String(e??"").toLowerCase().replace(/[^a-z0-9]/g,""),vL=Object.freeze({across:["across"],relay:["relaychain","relay"],lifi:["jumper-(li.fi-powered)","lifi"],stargate:["stargate-v2","stargate-v1","stargate"],hop:["hop-protocol","hop"],debridge:["debridge"],synapse:["synapse"],connext:["connext"],cbridge:["celer-bridge","celer-cbridge","cbridge"],celer:["celer-bridge","celer-cbridge","cbridge"],squid:["squid"],symbiosis:["symbiosis"],wormhole:["wormhole"],mayan:["mayan"],allbridge:["allbridge"],thorchain:["thorchain"]});async function eee(e={}){try{let t=await Qu({...e,baseUrl:e.defillamaApiBaseUrl,timeoutMs:e.defillamaTimeoutMs??Math.min(Number(e.timeoutMs??5e3),5e3)});return Array.isArray(t)?t:[]}catch{return[]}}function tee(e,t={}){let r=Hn(t.tool||t.provider||t.bridge||t.protocol),n=[];return e==="lifi"&&r&&r!=="lifi"&&n.push(...vL[r]||[r]),n.push(...vL[Hn(e)]||[e]),n}function ree(e,t,r={}){let n=Array.isArray(e)?e:[],o=tee(t,r).map(Hn).filter(Boolean);for(let i of o){let s=n.find(A=>Hn(A?.slug)===i||Hn(A?.name)===i),a=_r(s?.tvl);if(a!=null)return{liquidityUsd:a,protocol:s?.name??s?.slug??i}}for(let i of o){let s=n.find(A=>{let c=Hn(A?.category);return!c.includes("bridge")&&!c.includes("crosschain")?!1:Hn(A?.slug).includes(i)||Hn(A?.name).includes(i)}),a=_r(s?.tvl);if(a!=null)return{liquidityUsd:a,protocol:s?.name??s?.slug??i}}return null}function tC({chainId:e,tokenIn:t,tokenOut:r,amountIn:n,taker:o,slippageBps:i,decimalsIn:s,decimalsOut:a,nativePriceUsd:A=null,destDecimalsPromise:c=null,opts:l={}}){let u=[];return u.push({source:"lifi",run:async()=>{let d=await Rn({fromChain:e,toChain:e,fromToken:t,toToken:r,fromAmount:n},l),f=d?.estimate??d?.[0]?.estimate;return{amountOut:f?.toAmount,minOut:f?.toAmountMin,gasUsd:Dd(f?.gasCosts),feeUsd:Dd(f?.feeCosts),oracleFeeBps:d?.oracleFee?.applies?d.oracleFee.bps:0,meta:{tool:d?.tool??d?.toolDetails?.name,oracleFee:d?.oracleFee??null}}}}),s!=null&&u.push({source:"paraswap",run:async()=>{let d=a??(await Promise.resolve(c))?.decimals;if(d==null)throw new Error("paraswap needs destination decimals; none supplied or resolvable");let f=await qn({chainId:e,srcToken:t,destToken:r,amount:n,srcDecimals:s,destDecimals:d},l),p=f?.priceRoute;return{amountOut:p?.destAmount,gasUsd:_r(p?.gasCostUSD),oracleFeeBps:f?.oracleFee?.applies?f.oracleFee.bps:0,meta:{bestRoute:p?.bestRoute?.[0]?.swaps?.[0]?.swapExchanges?.[0]?.exchange,oracleFee:f?.oracleFee??null}}}}),process.env.ZEROX_API_KEY&&u.push({source:"0x",run:async()=>{let d=await vo({chainId:e,sellToken:t,buyToken:r,sellAmount:n,taker:o},l),f=null,p=d?.totalNetworkFee,h=await Promise.resolve(A);return p!=null&&h&&(f=Number(p)/1e18*h),{amountOut:d?.buyAmount,minOut:d?.minBuyAmount,gasUsd:f,meta:{source:d?.route?.fills?.[0]?.source}}}}),process.env.ONEINCH_API_KEY&&u.push({source:"1inch",run:async()=>{let d=await aA({chainId:e,src:t,dst:r,amount:n},l),f=null;return d?.gas!=null&&A&&(f=null),{amountOut:d?.dstAmount,gasUsd:f,meta:{gasUnits:d?.gas}}}}),u.push({source:"cow",run:async()=>{let d=await Fn({chainId:e,sellToken:t,buyToken:r,sellAmountBeforeFee:String(n),from:o},l),f=d?.quote??d,p=f?.feeAmount;return{amountOut:f?.buyAmount,gasUsd:0,meta:{intent:!0,feeAmountInSellToken:p,settlement:"solver-executed"}}}}),it[Number(e)]&&u.push({source:"uniswap-v3",run:async()=>{let d=await Sn({chainId:e,tokenIn:t,tokenOut:r,amountIn:n},l);return{amountOut:d?.amountOut,minOut:d?.minOut??d?.amountOutMinimum??null,gasUsd:null,liquidityUsd:d?.liquidityUsd??null,meta:{onchain:!0,fee:d?.fee,gasUnits:d?.gasEstimate,quoter:d?.quoter}}}}),Fr[Number(e)]&&u.push({source:"uniswap-v4",run:async()=>{let d=await ru({chainId:e,tokenIn:t,tokenOut:r,amountIn:n,recipient:o,slippageBps:i},l);return{amountOut:d?.amountOut,minOut:d?.minOut??d?.amountOutMinimum??null,gasUsd:null,liquidityUsd:d?.liquidityUsd??null,meta:{onchain:!0,venue:"uniswap-v4",fee:d?.fee,tickSpacing:d?.tickSpacing,poolId:d?.poolId,hooks:d?.hooks,gasUnits:d?.gasEstimate,quoter:d?.quoter,poolManager:d?.poolManager,prepareReady:d?.prepareReady===!0,executionReady:!1}}}}),u}function RL({fromChainId:e,toChainId:t,tokenIn:r,tokenOut:n,amountIn:o,taker:i,opts:s={}}){let a=[],A=null,c=async(l,u={})=>(A||=eee(s),ree(await A,l,u));return a.push({source:"lifi",run:async()=>{let l=await Rn({fromChain:e,toChain:t,fromToken:r,toToken:n,fromAmount:o},s),u=l?.estimate??l?.[0]?.estimate,d={tool:l?.tool??l?.toolDetails?.name,durationSeconds:_r(u?.executionDuration)},f=await c("lifi",d);return{amountOut:u?.toAmount,minOut:u?.toAmountMin,gasUsd:Dd(u?.gasCosts),feeUsd:Dd(u?.feeCosts),oracleFeeBps:l?.oracleFee?.applies?l.oracleFee.bps:0,liquidityUsd:f?.liquidityUsd??null,meta:{...d,liquidityProtocol:f?.protocol,oracleFee:l?.oracleFee??null}}}}),a.push({source:"relay",run:async()=>{let{relayQuote:l}=await Promise.resolve().then(()=>(Du(),Ru)),d=(await l({user:i,originChainId:e,destinationChainId:t,originCurrency:r,destinationCurrency:n,amount:String(o)},s))?.details,f={durationSeconds:_r(d?.timeEstimate),rate:d?.rate},p=await c("relay",f);return{amountOut:d?.currencyOut?.amount,minOut:d?.currencyOut?.minimumAmount,gasUsd:_r(d?.totalImpact?.usd)!=null?Math.abs(_r(d.totalImpact.usd)):null,liquidityUsd:p?.liquidityUsd??null,meta:{...f,liquidityProtocol:p?.protocol}}}}),a.push({source:"across",run:async()=>{let{acrossSuggestedFees:l}=await Promise.resolve().then(()=>(Du(),Ru)),u=await l({token:r,destinationToken:n,originChainId:e,destinationChainId:t,amount:String(o)},s),d=u?.totalRelayFee?.total,f=null;if(d!=null)try{let h=BigInt(String(o))-BigInt(String(d));h>0n&&(f=h.toString())}catch{}let p=await c("across");return{amountOut:f,gasUsd:null,liquidityUsd:p?.liquidityUsd??null,meta:{derivedFromFees:!0,durationSeconds:_r(u?.estimatedFillTimeSec),limits:u?.limits?{min:u.limits.minDeposit,max:u.limits.maxDeposit}:void 0,liquidityProtocol:p?.protocol}}}}),a}De();var nee={1:"ethereum",10:"optimism",56:"bsc",137:"polygon",8453:"base",42161:"arbitrum",43114:"avax"};async function DL(e,t,r){let n=nee[Number(e)];if(!n)return{priceUsd:null,decimals:null};let o=`${n}:${t}`;try{let s=(await lr([o],r))?.coins?.[o],a=Number(s?.price),A=Number(s?.decimals);return{priceUsd:Number.isFinite(a)?a:null,decimals:Number.isFinite(A)?A:null}}catch{return{priceUsd:null,decimals:null}}}async function oee(e,t={}){let{chainId:r,tokenIn:n,tokenOut:o,amountIn:i}=e;if(r==null||!n||!o||i==null)throw new Error("bestSwapRoute requires chainId, tokenIn, tokenOut, amountIn");let s=NL(r,t),a=DL(r,o,t),A=em(r,t).catch(()=>null),c=tC({...e,nativePriceUsd:s,decimalsOut:e.decimalsOut,destDecimalsPromise:a,opts:t}),[l,u,d]=await Promise.all([Rd(c,{timeoutMs:t.timeoutMs??12e3}),a,A]);s.catch(()=>{});let f=await s.then(g=>g,()=>null),p=eC(l,{destPriceUsd:u.priceUsd,destDecimals:e.decimalsOut??u.decimals,liquidityBandBps:t.liquidityBandBps??50,gasPriceWei:d,nativePriceUsd:f}),h=t.maxImpactPct===void 0?25:t.maxImpactPct;if(h!=null&&p.best){let g=p.best.source,C=await SL(async E=>{let I=tC({...e,amountIn:E.toString(),nativePriceUsd:s,decimalsOut:e.decimalsOut,destDecimalsPromise:a,opts:t}).filter(N=>N.source===g);return I.length?(await Rd(I,{timeoutMs:t.timeoutMs??12e3}))?.[0]?.amountOut??null:null},i);if(C){let E=xL(p,{[g]:C},{maxImpactPct:h});return{kind:"swap",chainId:r,tokenIn:n,tokenOut:o,amountIn:String(i),...E,sourcesTried:c.length,sourcesAnswered:l.filter(I=>I.quality!==fr.FAILED).length,note:rC(E,c.length),priceImpact:{[g]:Number(C.impactPct.toFixed(2))}}}}return{kind:"swap",chainId:r,tokenIn:n,tokenOut:o,amountIn:String(i),...p,sourcesTried:c.length,sourcesAnswered:l.filter(g=>g.quality!==fr.FAILED).length,note:rC(p,c.length)}}async function iee(e,t={}){let{fromChainId:r,toChainId:n,tokenIn:o,tokenOut:i,amountIn:s}=e;if(r==null||n==null||!o||!i||s==null)throw new Error("bestBridgeRoute requires fromChainId, toChainId, tokenIn, tokenOut, amountIn");if(Number(r)===Number(n))throw new Error("bestBridgeRoute is for cross-chain; use bestSwapRoute for same-chain");let a=DL(n,i,t),A=RL({...e,opts:t}),[c,l]=await Promise.all([Rd(A,{timeoutMs:t.timeoutMs??15e3}),a]),u=eC(c,{destPriceUsd:l.priceUsd,destDecimals:e.decimalsOut??l.decimals,liquidityBandBps:t.liquidityBandBps??50}),d=u.routes.map(f=>({source:f.source,seconds:f.meta?.durationSeconds??null})).filter(f=>f.seconds!=null);return{kind:"bridge",fromChainId:r,toChainId:n,tokenIn:o,tokenOut:i,amountIn:String(s),...u,durations:d,sourcesTried:A.length,sourcesAnswered:c.filter(f=>f.quality!==fr.FAILED).length,note:rC(u,A.length)}}function see(e){let t=e?.meta?.oracleFee;return t?.applies?` \xB7 ${BN(t)}`:""}function rC(e,t){if(!e.best)return"no source returned a usable route";let r=e.routes.length,n=see(e.best);if(r===1)return`only 1 of ${t} sources answered, so this is the ONLY route, not a proven best one. Treat it as unbenchmarked.`+n;if(e.improvementBps!=null){let o=e.improvementBps,i=o/100;if(o<.01)return`best of ${r} routes, ranked on ${e.rankedOn}: effectively tied with the runner-up (${e.spreadBasis}), inside quote noise. Re-quote before you size up.`+n;let s=i>=.01?`${i.toFixed(2)}%`:`${o.toFixed(2)}bps`;return`best of ${r} routes, ranked on ${e.rankedOn}: ${s} better than the runner-up (${e.spreadBasis})`+n}return`best of ${r} routes, ranked on ${e.rankedOn}. No spread quoted: the top routes report cost differently, so the margin is not comparable.`+n}var Cde=Object.freeze({mantissa:10000n,scale:0});function qo(e){if(!Number.isSafeInteger(e)||e<0||e>1e3)throw new RangeError("scale must be a safe integer from 0 through 1000")}function Pr(e,t){if(typeof e!="bigint")throw new TypeError("mantissa must be a bigint");return qo(t),Object.freeze({mantissa:e,scale:t})}function Gn(e,t="value"){if(e===null||typeof e!="object")throw new TypeError(`${t} must be a fixed point value`);if(typeof e.mantissa!="bigint")throw new TypeError(`${t}.mantissa must be a bigint`);qo(e.scale)}function Fd(e){return qo(e),10n**BigInt(e)}function te(e){if(typeof e!="string"||!/^[+-]?\d+(?:\.\d+)?$/.test(e))throw new TypeError("value must be a plain decimal string");let t=e.startsWith("-"),r=e[0]==="-"||e[0]==="+"?e.slice(1):e,[n,o=""]=r.split("."),i=`${n}${o}`,s=BigInt(i)*(t?-1n:1n);return Pr(s,o.length)}function ht(e,t){if(qo(t),typeof e=="bigint")return Pr(e,t);if(typeof e!="string"||!/^[+-]?\d+$/.test(e))throw new TypeError("value must be an integer string or bigint");return Pr(BigInt(e),t)}function pr(e){Gn(e);let t=e.mantissa<0n,r=(t?-e.mantissa:e.mantissa).toString();if(e.scale===0)return`${t?"-":""}${r}`;let n=r.padStart(e.scale+1,"0"),o=n.length-e.scale;return`${t?"-":""}${n.slice(0,o)}.${n.slice(o)}`}function _A(e,t){return Gn(e),qo(t),t===e.scale?Pr(e.mantissa,e.scale):t>e.scale?Pr(e.mantissa*Fd(t-e.scale),t):Pr(e.mantissa/Fd(e.scale-t),t)}function nC(e,t){Gn(e,"left"),Gn(t,"right");let r=Math.max(e.scale,t.scale);return[_A(e,r),_A(t,r),r]}function Yn(e,t){let[r,n,o]=nC(e,t);return Pr(r.mantissa+n.mantissa,o)}function PA(e,t){let[r,n,o]=nC(e,t);return Pr(r.mantissa-n.mantissa,o)}function Ft(e,t){Gn(e,"left"),Gn(t,"right");let r=e.scale+t.scale;return qo(r),Pr(e.mantissa*t.mantissa,r)}function hr(e,t,r=Math.max(e?.scale??0,t?.scale??0)){if(Gn(e,"left"),Gn(t,"right"),qo(r),t.mantissa===0n)throw new RangeError("division by zero");let n=e.mantissa*Fd(t.scale+r),o=t.mantissa*Fd(e.scale);return Pr(n/o,r)}function Vn(e,t){let[r,n]=nC(e,t);return r.mantissa<n.mantissa?-1:r.mantissa>n.mantissa?1:0}import{readFileSync as aee,existsSync as Aee}from"node:fs";import{fileURLToPath as cee}from"node:url";import{dirname as lee,join as ML}from"node:path";var uee=ML(lee(cee(import.meta.url)),"fixtures");function dee(){try{let e=ju("equities-fixtures",import.meta.url);if(e&&Aee(e))return e}catch{}return uee}var fee=dee();var TL=Object.freeze({venues:"venues.json",universe:"universe.json",oracles:"oracles.json",nyseHolidays:"nyse_holidays.json",dstTransitions:"dst_transitions.json",equityDexPools:"equity_dex_pools.json",rhPoolState:"rh_pool_state.json",solanaXstocks:"solana_xstocks.json",tonXstocks:"ton_xstocks.json",hip3L2Books:"hip3_l2books.json"});function pee(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function ce(e,t){throw new TypeError(`Fixture fixtures/${e}: ${t}`)}function Le(e,t,r){pee(e)||ce(t,`${r} must be an object`)}function pe(e,t,r){(typeof e!="string"||e.length===0)&&ce(t,`${r} must be a nonempty string`)}function Or(e,t,r){Number.isSafeInteger(e)||ce(t,`${r} must be a safe integer`)}function $n(e,t,r){Le(e,t,r);for(let[n,o]of Object.entries(e))pe(n,t,`${r} key`),Le(o,t,`${r}.${n}`)}function hee(e,t){Le(e,t,"root"),Or(e.capturedAt,t,"capturedAt"),Le(e.venues,t,"venues");let r=[["hyperliquid_hip3","dexs"],["arcus","markets"],["arcus_spot","pairs"],["rh_uniswap","pools"],["rh_chainlink_oracles","assets"]];for(let[n,o]of r){let i=e.venues[n];Le(i,t,`venues.${n}`),pe(i.type,t,`venues.${n}.type`),pe(i.chain,t,`venues.${n}.chain`),pe(i.tier,t,`venues.${n}.tier`),$n(i[o],t,`venues.${n}.${o}`)}for(let[n,o]of Object.entries(e.venues.hyperliquid_hip3.dexs))$n(o,t,`venues.hyperliquid_hip3.dexs.${n}`)}function gee(e,t){$n(e,t,"root"),Object.keys(e).length===0&&ce(t,"root must not be empty");for(let[r,n]of Object.entries(e))Array.isArray(n.venues)||ce(t,`${r}.venues must be an array`),n.venues.forEach((o,i)=>pe(o,t,`${r}.venues[${i}]`))}function mee(e,t){Le(e,t,"root");for(let r of["chainId","block","oracleScaleExp","usdgDecimals","equityDecimals"])Or(e[r],t,r);pe(e.usdg,t,"usdg"),$n(e.assets,t,"assets");for(let[r,n]of Object.entries(e.assets))pe(n.oracle,t,`assets.${r}.oracle`),pe(n.token,t,`assets.${r}.token`),(typeof n.rawPrice!="string"||!/^\d+$/.test(n.rawPrice))&&ce(t,`assets.${r}.rawPrice must be an integer string`),(typeof n.usd!="number"||!Number.isFinite(n.usd)||n.usd<0)&&ce(t,`assets.${r}.usd must be a nonnegative finite source number`)}function Eee(e,t){Le(e,t,"root");for(let n of["holidayDayIndex","names","dates"])Array.isArray(e[n])||ce(t,`${n} must be an array`);let r=e.holidayDayIndex.length;(e.names.length!==r||e.dates.length!==r)&&ce(t,"holidayDayIndex, names, and dates must have equal lengths"),e.holidayDayIndex.forEach((n,o)=>Or(n,t,`holidayDayIndex[${o}]`)),e.names.forEach((n,o)=>pe(n,t,`names[${o}]`)),e.dates.forEach((n,o)=>{(typeof n!="string"||!/^\d{4}-\d{2}-\d{2}$/.test(n))&&ce(t,`dates[${o}] must use YYYY-MM-DD`)})}function Iee(e,t){Le(e,t,"root"),(!Array.isArray(e.dstTransitions)||e.dstTransitions.length===0)&&ce(t,"dstTransitions must be a nonempty array");let r=new Set;e.dstTransitions.forEach((n,o)=>{Le(n,t,`dstTransitions[${o}]`);for(let i of["year","startUtc","endUtc"])Or(n[i],t,`dstTransitions[${o}].${i}`);n.startUtc>=n.endUtc&&ce(t,`dstTransitions[${o}] startUtc must be before endUtc`),r.has(n.year)&&ce(t,`dstTransitions contains duplicate year ${n.year}`),r.add(n.year)})}function Cee(e,t){$n(e,t,"root"),Object.keys(e).length===0&&ce(t,"root must not be empty");for(let[r,n]of Object.entries(e)){for(let o of["addr","quote","quoteAddr","dex","pair"])pe(n[o],t,`${r}.${o}`);(typeof n.liq!="number"||!Number.isFinite(n.liq)||n.liq<0)&&ce(t,`${r}.liq must be a nonnegative finite source number`)}}function Bee(e,t){Le(e,t,"root"),Or(e.capturedAt,t,"capturedAt"),Or(e.block,t,"block"),Or(e.chainId,t,"chainId"),pe(e.gasPriceWei,t,"gasPriceWei"),pe(e.stateView,t,"stateView"),$n(e.pools,t,"pools"),Object.keys(e.pools).length===0&&ce(t,"pools must not be empty");for(let[r,n]of Object.entries(e.pools)){for(let o of["pair","version","quote","token","sqrtPriceX96"])pe(n[o],t,`pools.${r}.${o}`);n.version!=="v3"&&n.version!=="v4"&&ce(t,`pools.${r}.version must be v3 or v4`),typeof n.quoteIsToken0!="boolean"&&ce(t,`pools.${r}.quoteIsToken0 must be a boolean`),(!/^[0-9]+$/.test(n.sqrtPriceX96)||BigInt(n.sqrtPriceX96)<=0n)&&ce(t,`pools.${r}.sqrtPriceX96 must be a positive integer string`)}}function yee(e,t){Le(e,t,"root"),Or(e.capturedAt,t,"capturedAt"),pe(e.source,t,"source"),Le(e.books,t,"books"),Object.keys(e.books).length===0&&ce(t,"books must not be empty");for(let[r,n]of Object.entries(e.books)){Le(n,t,`books.${r}`),(!Array.isArray(n.bids)||!Array.isArray(n.asks))&&ce(t,`books.${r} must have bids and asks arrays`);for(let[o,i]of n.bids.entries())Le(i,t,`books.${r}.bids[${o}]`),pe(i.px,t,`books.${r}.bids[${o}].px`),pe(i.sz,t,`books.${r}.bids[${o}].sz`);for(let[o,i]of n.asks.entries())Le(i,t,`books.${r}.asks[${o}]`),pe(i.px,t,`books.${r}.asks[${o}].px`),pe(i.sz,t,`books.${r}.asks[${o}].sz`)}}function Qee(e,t){Le(e,t,"root"),Or(e.capturedAt,t,"capturedAt"),pe(e.source,t,"source"),pe(e.chain,t,"chain"),$n(e.tokens,t,"tokens"),Le(e.pairs,t,"pairs"),Object.keys(e.tokens).length===0&&ce(t,"tokens must not be empty");for(let[r,n]of Object.entries(e.tokens)){pe(n.symbolRaw,t,`tokens.${r}.symbolRaw`),pe(n.mint,t,`tokens.${r}.mint`),Object.hasOwn(e.pairs,r)||ce(t,`pairs.${r} is required for token ${r}`),(!Array.isArray(e.pairs[r])||e.pairs[r].length===0)&&ce(t,`pairs.${r} must be a nonempty array`);for(let[o,i]of e.pairs[r].entries())Le(i,t,`pairs.${r}[${o}]`),pe(i.pairAddress,t,`pairs.${r}[${o}].pairAddress`),pe(i.dexId,t,`pairs.${r}[${o}].dexId`),(typeof i.priceUsd!="number"||!Number.isFinite(i.priceUsd)||i.priceUsd<=0)&&ce(t,`pairs.${r}[${o}].priceUsd must be a positive finite number`),(typeof i.liquidityUsd!="number"||!Number.isFinite(i.liquidityUsd)||i.liquidityUsd<0)&&ce(t,`pairs.${r}[${o}].liquidityUsd must be a nonnegative finite number`)}}function wee(e,t){Le(e,t,"root"),Or(e.capturedAt,t,"capturedAt"),pe(e.source,t,"source"),pe(e.chain,t,"chain"),e.chain!=="ton"&&ce(t,'chain must be "ton"'),$n(e.tokens,t,"tokens"),Le(e.pairs,t,"pairs"),Object.keys(e.tokens).length===0&&ce(t,"tokens must not be empty");for(let[r,n]of Object.entries(e.tokens)){pe(n.symbolRaw,t,`tokens.${r}.symbolRaw`),pe(n.mint,t,`tokens.${r}.mint`),Object.hasOwn(e.pairs,r)||ce(t,`pairs.${r} is required for token ${r}`),(!Array.isArray(e.pairs[r])||e.pairs[r].length===0)&&ce(t,`pairs.${r} must be a nonempty array`);for(let[o,i]of e.pairs[r].entries())Le(i,t,`pairs.${r}[${o}]`),pe(i.pairAddress,t,`pairs.${r}[${o}].pairAddress`),pe(i.dexId,t,`pairs.${r}[${o}].dexId`),(typeof i.priceUsd!="number"||!Number.isFinite(i.priceUsd)||i.priceUsd<=0)&&ce(t,`pairs.${r}[${o}].priceUsd must be a positive finite number`),(typeof i.liquidityUsd!="number"||!Number.isFinite(i.liquidityUsd)||i.liquidityUsd<0)&&ce(t,`pairs.${r}[${o}].liquidityUsd must be a nonnegative finite number`)}}var bee=Object.freeze({venues:hee,universe:gee,oracles:mee,nyseHolidays:Eee,dstTransitions:Iee,equityDexPools:Cee,rhPoolState:Bee,solanaXstocks:Qee,tonXstocks:wee,hip3L2Books:yee});function kee(e,t){let r=TL[t],n=ML(e,r),o;try{o=aee(n,"utf8")}catch(s){throw s?.code==="ENOENT"?new Error(`Fixture fixtures/${r} is missing at ${n}`):new Error(`Fixture fixtures/${r} could not be read: ${s.message}`)}let i;try{i=JSON.parse(o)}catch(s){throw new SyntaxError(`Fixture fixtures/${r} contains invalid JSON: ${s.message}`)}return bee[t](i,r),i}function UL(e){if(e!==null&&typeof e=="object"&&!Object.isFrozen(e)){Object.freeze(e);for(let t of Object.values(e))UL(t)}return e}function LL({fixtureDir:e=fee}={}){if(typeof e!="string"||e.length===0)throw new TypeError("fixtureDir must be a nonempty path string");let t={};for(let r of Object.keys(TL))t[r]=kee(e,r);return UL(t)}var FL;function Jn(){return FL??=LL(),FL}function Jt(){return Jn().venues}function _L(){return Jn().oracles}function PL(){return Jn().nyseHolidays}function OL(){return Jn().dstTransitions}function Md(){return Jn().rhPoolState}function qL(){return Jn().solanaXstocks}function HL(){return Jn().tonXstocks}function GL(){return Jn().hip3L2Books}var iC=1e3,$L=60*iC,sC=60*$L,YL=24*sC,See=-5*sC,xee=-4*sC,JL=240,WL=570,zL=960,jL=1200,xde=Object.freeze([JL,WL,zL,jL]),vde=Object.freeze(["core","extended","dark"]),VL,oC;function vee(){let e=OL().dstTransitions.map(n=>({year:n.year,startMs:n.startUtc*iC,endMs:n.endUtc*iC}));e.sort((n,o)=>n.startMs-o.startMs);let t=e[0].year,r=e[e.length-1].year;return Object.freeze({rows:Object.freeze(e),firstYear:t,lastYear:r,coverageStartMs:Date.UTC(t,0,1),coverageEndMs:Date.UTC(r+1,0,1)})}function KL(){return VL??=vee(),VL}function Nee(){return oC===void 0&&(oC=new Set(PL().holidayDayIndex)),oC}function XL(e,t){if(!Number.isSafeInteger(e))throw new TypeError(`${t}: epochMs must be a safe integer number of milliseconds`)}function Ree(e,t){let{coverageStartMs:r,coverageEndMs:n,firstYear:o,lastYear:i}=KL();if(e<r||e>=n)throw new RangeError(`${t}: ${new Date(e).toISOString()} is outside DST fixture coverage (${o} through ${i}). Refusing to assume a UTC offset.`)}function Dee(e){for(let t of KL().rows)if(e>=t.startMs&&e<t.endMs)return!0;return!1}function Fee(e){return Dee(e)?xee:See}function Mee(e){let t=e+Fee(e),r=Math.floor(t/YL),n=t-r*YL,o=new Date(t);return{dayIndex:r,minuteOfDay:Math.floor(n/$L),msIntoDay:n,weekday:o.getUTCDay()}}function Tee({dayIndex:e,weekday:t}){return t===0||t===6?!1:!Nee().has(e)}function Uee(e){return e<JL?"dark":e<WL?"extended":e<zL?"core":e<jL?"extended":"dark"}function OA(e){XL(e,"sessionState"),Ree(e,"sessionState");let t=Mee(e);return Tee(t)?Uee(t.minuteOfDay):"dark"}function aC(e){return XL(e,"isDark"),OA(e)==="dark"}var Td=Object.freeze({DORMANT_VENUE:"dormant-venue",CROSSED_BOOK:"crossed-book",STALE_QUOTE:"stale-quote",STALE_ORACLE:"stale-oracle"}),Lee=12e4,_ee=6e5;function Ud(e,t){e.push(Object.freeze({venue:t.venue,symbol:t.symbol??null,reason:t.reason,evidence:t.evidence??null}))}function Pee(e){let t=e.raw?.vol24h;return!!(t===0||t===0||typeof t=="number"&&Number.isFinite(t)&&t<=0)}function Oee(e){return!e.bid||!e.ask?!1:Vn(e.bid,e.ask)>0}function ZL(e,t,r){return Number.isSafeInteger(e.capturedAt)?t-e.capturedAt>r:!1}function Ld(e,t={}){if(!Array.isArray(e))throw new TypeError("quotes must be an array");let r=t.nowMs??Date.now(),n=t.quoteFreshnessMs??Lee,o=t.oracleFreshnessMs??_ee,i=t.includeDormant===!0,s=[],a=[];for(let A of e){if(Pee(A)){i?s.push(Object.freeze({...A,staleData:!0})):Ud(a,{venue:A.venue,symbol:A.symbolRaw??A.symbol,reason:Td.DORMANT_VENUE,evidence:{vol24h:A.raw?.vol24h??null}});continue}if(Oee(A)){Ud(a,{venue:A.venue,symbol:A.symbolRaw??A.symbol,reason:Td.CROSSED_BOOK,evidence:{bid:A.bid?String(A.bid.mantissa)+"e-"+A.bid.scale:null,ask:A.ask?String(A.ask.mantissa)+"e-"+A.ask.scale:null}});continue}if(ZL(A,r,n)){Ud(a,{venue:A.venue,symbol:A.symbolRaw??A.symbol,reason:Td.STALE_QUOTE,evidence:{capturedAt:A.capturedAt,nowMs:r,ageMs:r-A.capturedAt,freshnessMs:n}});continue}if(A.tier==="read-only"&&A.raw?.oracleRaw!==void 0){let c=OA(r),l=c==="core"?o:o*2;if(ZL(A,r,l)){Ud(a,{venue:A.venue,symbol:A.symbolRaw??A.symbol,reason:Td.STALE_ORACLE,evidence:{capturedAt:A.capturedAt,nowMs:r,session:c}});continue}}s.push(A)}return{survivors:s,excluded:a}}function qee(e){if(typeof e!="number"||!Number.isFinite(e))throw new TypeError("value must be a finite number");let t=String(e);if(!t.includes("e")&&!t.includes("E"))return t;let[r,n]=t.split(/[eE]/),o=Number(n),i=r.startsWith("-"),s=i?r.slice(1):r,[a,A=""]=s.split("."),c=`${a}${A}`,l=a.length+o,u;return l<=0?u=`0.${"0".repeat(-l)}${c}`:l>=c.length?u=`${c}${"0".repeat(l-c.length)}`:u=`${c.slice(0,l)}.${c.slice(l)}`,`${i?"-":""}${u}`}function Je(e){return e==null?null:typeof e=="string"?te(e):typeof e!="number"||!Number.isFinite(e)?null:te(qee(e))}function gr(e,t){let r=Je(e);if(r===null)throw new TypeError(`${t} must be a finite source number`);return r}var Hee=new Set(["spot","perp"]),Gee=new Set(["read-only","quote-only","prepare","intent"]),Yee=new Set(["buy","sell"]),Vee=new Set(["net-of-cost","gross"]),$ee=new Set(["homogeneous","heterogeneous"]),Jee=["bid","ask","mid","mark"],e1=["fees","gasEstimate","priceImpact","fundingHourly"],Wee=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;function we(e,t){throw new TypeError(`${e} ${t}`)}function r1(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Ho(e,t){r1(e)||we(t,"must be an object")}function n1(e,t,r){Object.hasOwn(e,t)||we(`${r}.${t}`,"is required")}function xs(e,t){(typeof e!="string"||e.length===0)&&we(t,"must be a nonempty string")}function qA(e,t,r){t.has(e)||we(r,`must be one of ${[...t].join(", ")}`)}function cC(e,t){(!Number.isSafeInteger(e)||e<0)&&we(t,"must be a nonnegative safe integer")}function AC(e,t,r=!1){e===null&&r||(r1(e)||we(t,"must be a fixed point value"),typeof e.mantissa!="bigint"&&we(`${t}.mantissa`,"must be a bigint"),(!Number.isSafeInteger(e.scale)||e.scale<0)&&we(`${t}.scale`,"must be a nonnegative safe integer"))}function _d(e,t,r=!1){e===null&&r||Ho(e,t)}function t1(e,t){Ho(e,t),xs(e.venue,`${t}.venue`),xs(e.reason,`${t}.reason`),Wee.test(e.reason)||we(`${t}.reason`,"must be a machine readable lower case code"),Object.hasOwn(e,"symbol")&&e.symbol!==null&&xs(e.symbol,`${t}.symbol`)}function Mt(e){Ho(e,"quote");for(let r of["venue","chain","instrument","tier","symbolRaw","symbol","side","requestedSize",...e1,"costAccounted","capturedAt","blockOrSeq","raw"])n1(e,r,"quote");xs(e.venue,"quote.venue"),!(typeof e.chain=="string"&&e.chain.length>0)&&!(Number.isSafeInteger(e.chain)&&e.chain>=0)&&we("quote.chain","must be a nonempty string or nonnegative chain id"),qA(e.instrument,Hee,"quote.instrument"),qA(e.tier,Gee,"quote.tier"),xs(e.symbolRaw,"quote.symbolRaw"),xs(e.symbol,"quote.symbol"),qA(e.side,Yee,"quote.side"),AC(e.requestedSize,"quote.requestedSize"),e.requestedSize.mantissa<0n&&we("quote.requestedSize","must not be negative");let t=0;for(let r of Jee)Object.hasOwn(e,r)&&(AC(e[r],`quote.${r}`),t+=1);t===0&&we("quote","must contain at least one of bid, ask, mid, mark");for(let r of e1)AC(e[r],`quote.${r}`,!0);if(typeof e.costAccounted!="boolean"&&we("quote.costAccounted","must be a boolean"),e.costAccounted){for(let r of["fees","gasEstimate","priceImpact"])e[r]===null&&we(`quote.${r}`,"cannot be unknown when costAccounted is true");e.instrument==="perp"&&e.fundingHourly===null&&we("quote.fundingHourly","cannot be unknown when costAccounted is true for a perp")}return e.instrument==="spot"&&e.fundingHourly!==null&&we("quote.fundingHourly","must be null for a spot quote"),cC(e.capturedAt,"quote.capturedAt"),e.blockOrSeq!==null&&!(typeof e.blockOrSeq=="string"&&e.blockOrSeq.length>0)&&!(Number.isSafeInteger(e.blockOrSeq)&&e.blockOrSeq>=0)&&we("quote.blockOrSeq","must be null, a nonempty string, or a nonnegative safe integer"),Ho(e.raw,"quote.raw"),e}function lC(e){Ho(e,"rankResult");for(let t of["rankedOn","ranked","winner","runnersUp","improvementBps","sourcesAnswered","sourcesTried","failed","excluded","darkWindow","instrumentMix","bestPreparable"])n1(e,t,"rankResult");return qA(e.rankedOn,Vee,"rankResult.rankedOn"),Array.isArray(e.ranked)||we("rankResult.ranked","must be an array"),e.ranked.forEach((t,r)=>_d(t,`rankResult.ranked[${r}]`)),_d(e.winner,"rankResult.winner",!0),e.ranked.length===0&&e.winner!==null&&we("rankResult.winner","must be null when ranked is empty"),e.ranked.length>0&&e.winner===null&&we("rankResult.winner","must be present when ranked is not empty"),Array.isArray(e.runnersUp)||we("rankResult.runnersUp","must be an array"),e.runnersUp.forEach((t,r)=>_d(t,`rankResult.runnersUp[${r}]`)),e.improvementBps!==null&&!(typeof e.improvementBps=="number"&&Number.isFinite(e.improvementBps))&&we("rankResult.improvementBps","must be a finite number or null"),cC(e.sourcesAnswered,"rankResult.sourcesAnswered"),cC(e.sourcesTried,"rankResult.sourcesTried"),e.sourcesAnswered>e.sourcesTried&&we("rankResult.sourcesAnswered","must not exceed sourcesTried"),Array.isArray(e.failed)||we("rankResult.failed","must be an array"),e.failed.forEach((t,r)=>t1(t,`failed[${r}]`)),Array.isArray(e.excluded)||we("rankResult.excluded","must be an array"),e.excluded.forEach((t,r)=>t1(t,`excluded[${r}]`)),e.darkWindow!==null&&Ho(e.darkWindow,"rankResult.darkWindow"),qA(e.instrumentMix,$ee,"rankResult.instrumentMix"),_d(e.bestPreparable,"rankResult.bestPreparable",!0),Object.hasOwn(e,"carry")&&e.carry!==null&&Ho(e.carry,"rankResult.carry"),e}var zee="arcus_perp",jee="robinhood-4663",Kee="quote-only",Pd="0.00000480324074074";function o1(){return Jt().venues.arcus}function Xee(){return Object.keys(o1().markets).sort()}function Zee({symbol:e,side:t="buy",sizeUsd:r=null}={}){if(typeof e!="string"||e.length===0)return null;let n=e.endsWith("-USD")?e.slice(0,-4):e,o=o1().markets[n];if(!o)return null;let i=gr(o.mark,`${n}.mark`),s=Je(o.oracle),a=Je(o.fundingHourly),A=r===null?te("0"):r,c={venue:zee,chain:jee,instrument:"perp",tier:Kee,symbolRaw:e,symbol:n,side:t,requestedSize:A,mark:i,fees:null,gasEstimate:null,priceImpact:null,fundingHourly:a,costAccounted:!1,capturedAt:Jt().capturedAt*1e3,blockOrSeq:null,raw:{fixture:"fixtures/venues.json#venues.arcus",oraclePrice:o.oracle,vol24h:o.vol24h,oi:o.oi,fundingAnnPct:o.fundingAnnPct,category:o.category,isOutsideRth:o.isOutsideRth===!0,rth:o.rth,darkWindowFundingHourly:Pd,initialMarginFraction:o.initialMarginFraction??null,offHoursInitialMarginFraction:o.offHoursInitialMarginFraction??null,reasonCostUnknown:"fees, gas, and impact at size not captured for Arcus perps"}};return s!==null&&(c.raw.oracleFixed=s),Mt(c)}function Od({side:e="buy",sizeUsd:t=null}={}){return Xee().map(r=>Zee({symbol:r,side:e,sizeUsd:t})).filter(r=>r!==null)}var i1=36e5,$de=24*365;function uC(e,t,r=8){if(e==null)throw new TypeError("hourlyFundingRate is required");if(!Number.isFinite(t)||t<0)throw new RangeError("horizonHours must be a nonnegative finite number");if(t===0)return te("0");let n=te(String(t)),o=ht(10000n,0);return Ft(Ft(e,n),o)}function s1(e,t,r={}){if(e.instrument!=="perp")return{model:"current-funding-held-constant",horizonHours:t,carryBps:te("0"),carryBpsDisplay:"0",confidence:"estimate",note:"spot has no funding carry"};let n=r.nowMs??Date.now(),o=r.applyDarkWindowLock===!0,i=e.fundingHourly;if(o&&i!==null){let a=ete(n,t),A=t-a,c=te(Pd),l=uC(i,A),u=uC(c,a),d=Math.max(l.scale,u.scale),f={mantissa:l.mantissa*10n**BigInt(d-l.scale)+u.mantissa*10n**BigInt(d-u.scale),scale:d};return{model:"current-funding-held-constant",horizonHours:t,carryBps:f,carryBpsDisplay:pr(f),confidence:"estimate",darkHours:a,litHours:A,darkWindowRate:Pd,compounding:"ignored",compoundingErrorBoundNote:"simple sum; at 30d and 1e-5/h the ignored compound is under 0.5bp"}}if(i===null)return{model:"current-funding-held-constant",horizonHours:t,carryBps:null,carryBpsDisplay:null,confidence:"estimate",note:"funding rate unknown"};let s=uC(i,t);return{model:"current-funding-held-constant",horizonHours:t,carryBps:s,carryBpsDisplay:pr(s),confidence:"estimate",compounding:"ignored",compoundingErrorBoundNote:"simple sum; at 30d and 1e-5/h the ignored compound is under 0.5bp"}}function ete(e,t){if(t<=0)return 0;let r=0,n=Math.floor(t);for(let o=0;o<n;o+=1)aC(e+o*i1)&&(r+=1);return t>n&&aC(e+n*i1)&&(r+=t-n),r}function tte(e){return e.mid??e.mark??e.ask??e.bid??null}function rte(e){let t=tte(e);if(t===null)return null;let r=e.costAccounted===!0,n=te("0");e.fees!==null?n=Yn(n,e.fees):r=!1,e.priceImpact!==null?n=Yn(n,e.priceImpact):e.requestedSize&&e.requestedSize.mantissa>0n&&(r=!1),e.gasEstimate===null?r=!1:n=Yn(n,e.gasEstimate);let o;if(e.fees!==null&&Vn(e.fees,te("1"))<0&&Vn(e.fees,te("0"))>=0){let i=Yn(te("1"),e.fees);o=Ft(t,i),e.priceImpact!==null&&(o=Yn(o,Ft(t,e.priceImpact)))}else o=Yn(t,n);return{net:o,costAccounted:r,px:t}}function nte(e,t,r=null){return{venue:e.venue,chain:e.chain,instrument:e.instrument,tier:e.tier,symbol:e.symbol,symbolRaw:e.symbolRaw,side:e.side,price:t.px,net:t.net,costAccounted:t.costAccounted,fundingHourly:e.fundingHourly,carry:r,quote:e}}function ote(e,t){if(!e||!t||!e.costAccounted||!t.costAccounted||e.instrument!==t.instrument||e.net.mantissa===0n)return null;let r=PA(t.net,e.net);return hr(Ft(r,ht(10000n,0)),t.net,4)}function dC(e,t={}){if(!Array.isArray(e))throw new TypeError("quotes must be an array");let r=t.nowMs??e[0]?.capturedAt??Date.now(),n=e.length,o=e,i=[];if(!t.skipLiveness){let S=Ld(e,{nowMs:r});o=S.survivors,i=S.excluded}let s=e.length,a=[],A=t.horizonHours,c=Number.isFinite(A)&&A>0,l=[];for(let S of o){let y=rte(S);if(y===null)continue;let w=null;if(c&&S.instrument==="perp"&&(w=s1(S,A,{nowMs:r}),w.carryBps!==null)){let b=Yn(te("1"),hr(w.carryBps,ht(10000n,0),12));y.net=Ft(y.net,b),y.costAccounted=!1}l.push(nte(S,y,w))}let u=l,d="homogeneous";if(c)d="heterogeneous",u=l;else{let S=l.filter(w=>w.instrument==="spot"),y=l.filter(w=>w.instrument==="perp");S.length>0&&y.length>0?(u=S.length>=y.length?S:y,d="homogeneous"):(u=l,d="homogeneous")}u.sort((S,y)=>{let w=Vn(S.net,y.net);return w!==0?w:S.venue<y.venue?-1:S.venue>y.venue?1:0});let f=u[0]??null,p=u.slice(1),h=u,g="gross";f&&f.costAccounted&&(p.length===0||p[0].costAccounted)&&(g="net-of-cost");let m=p.length===0?null:ote(f,p[0]),C=l.find(S=>S.tier==="prepare")??null,E=OA(r),I=E==="core"?null:{session:E,warning:E==="dark"?"market is dark; marks are not real price discovery":"extended session; thinner books and higher staleness risk"},Q=null;c&&(Q=ite(l));let N={rankedOn:g,ranked:h,winner:f,runnersUp:p,improvementBps:m===null?null:Number(pr(m)),sourcesAnswered:s,sourcesTried:n,failed:a,excluded:i,darkWindow:I,instrumentMix:d,bestPreparable:C,carry:f?.carry??null,breakEvenHorizonHours:Q};return lC(N)}function ite(e){let t=e.filter(i=>i.instrument==="spot").sort((i,s)=>Vn(i.net,s.net))[0],r=e.filter(i=>i.instrument==="perp").sort((i,s)=>Vn(i.net,s.net))[0];if(!t||!r||r.fundingHourly===null)return null;let n=PA(t.net,r.net);if(n.mantissa===0n)return 0;let o=Ft(r.fundingHourly,r.price);if(o.mantissa===0n)return null;try{let i=hr(n,o,4),s=Number(pr(i));return!Number.isFinite(s)||s<0?null:s}catch{return null}}var ste="rh_uniswap",ate=4663,Ate="prepare",cte=1n<<192n,vs=18,lte=Object.freeze({v3:180000n,v4:240000n});function fC(){return Md()}function ute(e){return{mantissa:e*e*10n**BigInt(vs)/cte,scale:vs}}function dte(e){let t=ute(BigInt(e.sqrtPriceX96)),r=e.quote==="USDG"?6:18,n=18;if(e.quoteIsToken0){let o=hr(Ft(t,ht(10n**BigInt(r),0)),ht(10n**BigInt(n),0),vs);return o.mantissa===0n?null:hr(te("1"),o,vs)}return hr(Ft(t,ht(10n**BigInt(n),0)),ht(10n**BigInt(r),0),vs)}function fte(e){let t=_L(),r=t.assets[e];return r?ht(r.rawPrice,t.oracleScaleExp):null}function pte(e,t){if(e===null||t===null||e.mantissa<=0n||t.mantissa<=0n)return null;let r={...e};return hr(t,hte(r,t),vs)}function hte(e,t){let r=Math.max(e.scale,t.scale);return{mantissa:_A(e,r).mantissa+_A(t,r).mantissa,scale:r}}function gte(e){let t=fC(),r=lte[e];return r?{wei:BigInt(t.gasPriceWei)*r,units:r,native:"ETH"}:null}function pC(){return Object.keys(fC().pools).sort()}function Ns({symbol:e,side:t="buy",sizeUsd:r=null}={}){if(typeof e!="string"||e.length===0)throw new TypeError("symbol must be a nonempty string");let n=fC(),o=n.pools[e];if(!o)return null;let i=dte(o);if(i===null)return null;let s=Je(o.liqUsd),a=r===null?te("0"):r,A=o.feePpm===null||o.feePpm===void 0?null:hr(ht(BigInt(o.feePpm),0),ht(1000000n,0),8),c=a.mantissa===0n?te("0"):pte(s,a),l=gte(o.version),f={venue:ste,chain:ate,instrument:"spot",tier:Ate,symbolRaw:e,symbol:e,side:t,requestedSize:a,mid:i,fees:A,gasEstimate:null,priceImpact:c,fundingHourly:null,costAccounted:!1,capturedAt:n.capturedAt*1e3,blockOrSeq:n.block,raw:{fixture:"fixtures/rh_pool_state.json",pair:o.pair,version:o.version,sqrtPriceX96:o.sqrtPriceX96,quote:o.quote,quoteIsToken0:o.quoteIsToken0,liqUsd:o.liqUsd,gasNativeWei:l===null?null:l.wei.toString(),gasUnits:l===null?null:l.units.toString(),impactModel:"constant-product-estimate",notes:["price read live from chain 4663",o.version==="v4"?"v4 fee may be dynamic via hook and was not captured":"v3 fee tier is the pool static fee","gas known in native wei only, no ETH price captured to denominate it"]}},p=fte(e);return p!==null&&(f.referencePrice=p,f.referenceBasisBps=pr(hr(Ft(PA(i,p),ht(10000n,0)),p,4))),Mt(f)}function a1({side:e="buy",sizeUsd:t=null}={}){return pC().map(r=>Ns({symbol:r,side:e,sizeUsd:t})).filter(r=>r!==null)}var A1=12e4,mte="0x0000000000000000000000000000000000000000",Ete="0x84b75b19A3cdf8E2F56d0507d22D442847B2053C";function hC(e={}){let{symbol:t,side:r="buy",sizeUsd:n=null,recipient:o,nowMs:i=Date.now()}=e;if(typeof t!="string"||!t)throw new TypeError("symbol is required");if(typeof o!="string"||!/^0x[0-9a-fA-F]{40}$/.test(o))throw new TypeError("recipient must be a 0x-prefixed 20 byte address");let s=Ns({symbol:t,side:r,sizeUsd:n});if(s===null)throw new Error(`no RH Uniswap pool for ${t}`);if(s.tier!=="prepare")throw new Error(`route tier is ${s.tier}, only prepare tier can be prepared`);let a=i-s.capturedAt;if(a>A1)throw new Error(`quote is stale (${a}ms old, bound ${A1}ms); re-quote before preparing`);let c=Md().pools[t],l=c.version==="v4"?Ete:mte,u=l,d=r==="buy"?c.quoteAddr:c.token;return Object.freeze({artifactKind:"unsigned-tx",chainId:4663,to:l,data:"0x",value:"0",requiresApproval:{spender:u,token:d,amount:null},requiresWalletSignature:!0,backendSigner:!1,unsigned:!0,houseSigned:!1,quoteRef:{venue:s.venue,symbol:s.symbol,symbolRaw:s.symbolRaw,capturedAt:s.capturedAt,blockOrSeq:s.blockOrSeq,mid:s.mid,version:c.version,pair:c.pair},quoteAgeMs:a,recipient:o,side:r,notes:["prepare-only: user wallet must sign","calldata encoding is deferred; this artifact is the bound intent",c.version==="v4"?"V4 route via PoolManager":"V3 route via SwapRouter (address not yet pinned)"]})}var Ite="hyperliquid_hip3",Cte="hyperliquid",Bte="quote-only";function HA(){return Jt().venues.hyperliquid_hip3}function c1(){return Object.keys(HA().dexs).sort()}function yte(){let e=[];for(let[t,r]of Object.entries(HA().dexs))for(let n of Object.keys(r))e.push(`${t}:${n}`);return e.sort()}function Qte(e){if(typeof e!="string"||e.length===0)return[];let t=e.indexOf(":");if(t>0){let n=e.slice(0,t),o=e.slice(t+1),i=HA().dexs[n]?.[o];return i?[{dex:n,ticker:o,market:i}]:[]}let r=[];for(let[n,o]of Object.entries(HA().dexs))Object.hasOwn(o,e)&&r.push({dex:n,ticker:e,market:o[e]});return r}function wte(e,t){try{return GL().books[`${e}:${t}`]??null}catch{return null}}function bte(e,t,r){if(!e||r===null||r.mantissa<=0n)return null;let n=t==="buy"?e.asks:e.bids;if(!n||n.length===0)return null;let o=Number(pr(r));if(!Number.isFinite(o)||o<=0)return null;let i=0,s=0,a=0;for(let A of n){let c=Number(A.px),l=Number(A.sz);if(!(c>0)||!(l>0))continue;let u=c*l,d=Math.min(o,u),f=d/c;if(i+=d,s+=f,o-=d,a+=1,o<=1e-9)break}return s<=0?null:{vwap:i/s,filledUsd:i,unfilledUsd:Math.max(0,o),levelsUsed:a}}function kte(e,t,r,n){let o=bte(e,t,r);if(!o)return{impact:null,depth:null};let i=Number(pr(n));if(!(i>0))return{impact:null,depth:o};let s=t==="buy"?(o.vwap-i)/i:(i-o.vwap)/i,a=Math.max(0,s);return{impact:Je(Number(a.toPrecision(12))),depth:{...o,impactFraction:a,fullyFilled:o.unfilledUsd<=1e-6}}}function l1({dex:e,ticker:t,market:r,side:n,size:o}){let i=gr(r.mark,`${e}:${t}.mark`),s=Je(r.fundingHourly),a=Je(r.vol24h),A=Je(r.oi),c=o===null?te("0"):o,l=wte(e,t),u=null,d=null,f="fees and gas not captured";if(c.mantissa>0n)if(l){let g=kte(l,n,c,i);u=g.impact,d=g.depth,d?.fullyFilled?f="impact measured from l2Book; fees and gas still not captured":f="book walked but size exceeds visible depth; fees and gas not captured"}else f="no order book depth wired for this coin; fees and gas not captured";else l?f="zero size; fees and gas not captured":f="no order book depth wired for this coin; fees and gas not captured";let h={venue:Ite,chain:Cte,instrument:"perp",tier:Bte,symbolRaw:`${e}:${t}`,symbol:t,side:n,requestedSize:c,mark:i,fees:null,gasEstimate:null,priceImpact:u,fundingHourly:s,costAccounted:!1,capturedAt:Jt().capturedAt*1e3,blockOrSeq:null,raw:{fixture:"fixtures/venues.json#venues.hyperliquid_hip3",dex:e,ticker:t,vol24h:r.vol24h,oi:r.oi,fundingAnnPct:r.fundingAnnPct,maxLev:r.maxLev,reasonCostUnknown:f,hasL2Book:l!==null,l2BookFixture:l?"fixtures/hip3_l2books.json":null,depth:d}};return a!==null&&(h.raw.vol24hFixed=a),A!==null&&(h.raw.oiFixed=A),l?.bids?.[0]&&l?.asks?.[0]&&(h.bid=te(String(l.bids[0].px)),h.ask=te(String(l.asks[0].px))),Mt(h)}function u1({symbol:e,side:t="buy",sizeUsd:r=null}={}){let n=Qte(e);return n.length===0||n.length>1?null:l1({...n[0],side:t,size:r})}function qd({side:e="buy",sizeUsd:t=null,ticker:r=null}={}){let n=[];for(let o of yte()){let[i,s]=o.split(":");if(r!==null&&s!==r)continue;let a=HA().dexs[i][s];n.push(l1({dex:i,ticker:s,market:a,side:e,size:t}))}return n}var Ste="arcus_spot",xte="robinhood-4663",vte="quote-only";function d1(){return Jt().venues.arcus_spot}function Nte(){return Object.keys(d1().pairs).sort()}function Rte({symbol:e,side:t="buy",sizeUsd:r=null}={}){if(typeof e!="string"||e.length===0)return null;let n=d1().pairs[e];if(!n)return null;let o=n.bid===void 0||n.bid===null?null:gr(n.bid,`${e}.bid`),i=n.ask===void 0||n.ask===null?null:gr(n.ask,`${e}.ask`),s=Je(n.last),a=null;if(o!==null&&i!==null){a={mantissa:o.mantissa+i.mantissa,scale:o.scale===i.scale?o.scale+1:Math.max(o.scale,i.scale)+1};let u=Math.max(o.scale,i.scale),d=o.scale===u?o.mantissa:o.mantissa*10n**BigInt(u-o.scale),f=i.scale===u?i.mantissa:i.mantissa*10n**BigInt(u-i.scale);a={mantissa:d+f,scale:u+1},a={mantissa:(d+f)/2n,scale:u}}else s!==null&&(a=s);if(o===null&&i===null&&a===null)return null;let A=r===null?te("0"):r,c=te("0"),l={venue:Ste,chain:xte,instrument:"spot",tier:vte,symbolRaw:e,symbol:e,side:t,requestedSize:A,fees:c,gasEstimate:null,priceImpact:null,fundingHourly:null,costAccounted:!1,capturedAt:Jt().capturedAt*1e3,blockOrSeq:null,raw:{fixture:"fixtures/venues.json#venues.arcus_spot",last:n.last,bid:n.bid,ask:n.ask,vol24h:n.vol24h,feeKnownZero:!0,reasonCostUnknown:"gas and impact at size not captured; fee is a known zero"}};return o!==null&&(l.bid=o),i!==null&&(l.ask=i),a!==null&&(l.mid=a),Mt(l)}function Hd({side:e="buy",sizeUsd:t=null}={}){return Nte().map(r=>Rte({symbol:r,side:e,sizeUsd:t})).filter(r=>r!==null)}var Dte="solana_xstocks",Fte="solana",Mte="quote-only",f1=25e3;function Gd(){return qL()}function gC(){return Object.keys(Gd().tokens).sort()}function Tte(e){let t=Gd().pairs[e];return!t||t.length===0?null:[...t].sort((r,n)=>(n.liquidityUsd??0)-(r.liquidityUsd??0))[0]}function Ute(e,t){if(e===null||t===null)return null;if(e.mantissa<=0n||t.mantissa<=0n)return te("0");let r=Math.max(e.scale,t.scale),n=e.scale===r?e.mantissa:e.mantissa*10n**BigInt(r-e.scale),o=t.scale===r?t.mantissa:t.mantissa*10n**BigInt(r-t.scale),i=o*10n**6n,s=n+o;return{mantissa:i/s,scale:6}}function mC({symbol:e,side:t="buy",sizeUsd:r=null}={}){if(typeof e!="string"||e.length===0)return null;let n=e,o=e,i=Gd().tokens;if(Object.hasOwn(i,e))n=e,o=i[e].symbolRaw;else if(e.endsWith("x")||e.endsWith("X")){let p=e.slice(0,-1).toUpperCase();if(Object.hasOwn(i,p))n=p,o=i[p].symbolRaw;else return null}else return null;let s=i[n],a=Tte(n);if(!s||!a)return null;let A=gr(a.priceUsd,`${n}.priceUsd`),c=Je(a.liquidityUsd),l=r===null?te("0"):r,u=l.mantissa===0n?te("0"):Ute(c,l),d=!1;l.mantissa===0n&&(a.liquidityUsd??0)>=f1&&(d=!1);let f={venue:Dte,chain:Fte,instrument:"spot",tier:Mte,symbolRaw:o,symbol:n,side:t,requestedSize:l,mid:A,fees:null,gasEstimate:null,priceImpact:u,fundingHourly:null,costAccounted:d,capturedAt:Gd().capturedAt*1e3,blockOrSeq:null,raw:{fixture:"fixtures/solana_xstocks.json",mint:s.mint,pairAddress:a.pairAddress,dexId:a.dexId,quote:a.quote,liquidityUsd:a.liquidityUsd,volume24h:a.volume24h,priceUsd:a.priceUsd,source:"dexscreener",approximate:!0,reasonCostUnknown:"DexScreener liquidity.usd is a third-party float; fees and SOL gas not captured; impact is modeled",thin:(a.liquidityUsd??0)<f1}};return Mt(f)}function p1({side:e="buy",sizeUsd:t=null}={}){return gC().map(r=>mC({symbol:r,side:e,sizeUsd:t})).filter(r=>r!==null)}var Lte="ton_stonfi",_te="ton",Pte="quote-only",Ote=25e3,qte=.01;function Yd(){return HL()}function EC(){return Object.keys(Yd().tokens).sort()}function Hte(e){let t=Yd().pairs[e];return!t||t.length===0?null:[...t].sort((r,n)=>(n.liquidityUsd??0)-(r.liquidityUsd??0))[0]}function Gte(e,t){if(e===null||t===null)return null;if(e.mantissa<=0n||t.mantissa<=0n)return te("0");let r=Math.max(e.scale,t.scale),n=e.scale===r?e.mantissa:e.mantissa*10n**BigInt(r-e.scale),o=t.scale===r?t.mantissa:t.mantissa*10n**BigInt(r-t.scale),i=o*10n**6n,s=n+o;return{mantissa:i/s,scale:6}}function IC({symbol:e,side:t="buy",sizeUsd:r=null}={}){if(typeof e!="string"||e.length===0)return null;let n=e,o=e,i=Yd().tokens;if(Object.hasOwn(i,e))n=e,o=i[e].symbolRaw;else if(e.endsWith("x")||e.endsWith("X")){let p=e.slice(0,-1).toUpperCase();if(Object.hasOwn(i,p))n=p,o=i[p].symbolRaw;else return null}else{let p=e.toUpperCase();if(Object.hasOwn(i,p))n=p,o=i[p].symbolRaw;else return null}let s=i[n],a=Hte(n);if(!s||!a)return null;let A=gr(a.priceUsd,`${n}.priceUsd`),c=Je(a.liquidityUsd),l=r===null?te("0"):r,u=l.mantissa===0n?te("0"):Gte(c,l),f={venue:Lte,chain:_te,instrument:"spot",tier:Pte,symbolRaw:o,symbol:n,side:t,requestedSize:l,mid:A,fees:null,gasEstimate:null,priceImpact:u,fundingHourly:null,costAccounted:!1,capturedAt:Yd().capturedAt*1e3,blockOrSeq:null,raw:{fixture:"fixtures/ton_xstocks.json",mint:s.mint,pairAddress:a.pairAddress,dexId:a.dexId,quote:a.quote,liquidityUsd:a.liquidityUsd,volume24h:a.volume24h,priceUsd:a.priceUsd,source:"dexscreener",approximate:!0,reasonCostUnknown:"DexScreener liquidity.usd is a third-party float; fees and TON gas not captured; impact is modeled; TON books are thin",thin:(a.liquidityUsd??0)<Ote,impactSizeFractionHint:qte}};return Mt(f)}function h1({side:e="buy",sizeUsd:t=null}={}){return EC().map(r=>IC({symbol:r,side:e,sizeUsd:t})).filter(r=>r!==null)}var g1=3600*1e3;function CC(e){return e==null||e===""?null:typeof e=="object"&&e&&typeof e.mantissa=="bigint"?e:te(String(e))}function m1(e,{sizeUsd:t=null}={}){if(typeof e!="string"||!e.trim())throw new TypeError("ticker is required");let r=e.trim().toUpperCase(),n=CC(t),o=[],i=u1({symbol:`xyz:${r}`,sizeUsd:n});if(i)o.push(i);else for(let c of qd({ticker:r,sizeUsd:n}))o.push(c);for(let c of Od({sizeUsd:n}))c.symbol===r&&o.push(c);for(let c of Hd({sizeUsd:n}))c.symbol===r&&o.push(c);let s=Ns({symbol:r,sizeUsd:n});s&&o.push(s);let a=mC({symbol:r,sizeUsd:n});a&&o.push(a);let A=IC({symbol:r,sizeUsd:n});return A&&o.push(A),o}function Yte(e={}){let t=String(e.ticker||e.symbol||"").trim().toUpperCase();if(!t)throw new Error("bestEquityRoute requires ticker");let r=CC(e.sizeUsd??e.size??null),n=m1(t,{sizeUsd:r});if(n.length===0)return{ticker:t,rankedOn:"gross",ranked:[],winner:null,runnersUp:[],improvementBps:null,sourcesAnswered:0,sourcesTried:0,failed:[],excluded:[],bestPreparable:null,instrumentMix:"homogeneous",note:"no venue answered for this ticker in the pinned fixture capture"};let o=n[0].capturedAt,i=String(o).length<=10?o*1e3:o,s=e.nowMs==null,a=e.nowMs??o+1e3,A=Math.max(0,Date.now()-i),c=dC(n,{nowMs:a,horizonHours:e.horizonHours!=null?Number(e.horizonHours):void 0,skipLiveness:e.skipLiveness===!0});return{ticker:t,...c,dataSource:s?"fixture":"caller-clock",capturedAt:i,ageMs:A,stale:A>g1}}function Vte(){let e=[{venue:"hyperliquid_hip3",tier:"quote-only",chain:"hyperliquid",n:qd().length},{venue:"arcus_perp",tier:"quote-only",chain:"robinhood-4663",n:Od().length},{venue:"arcus_spot",tier:"quote-only",chain:"robinhood-4663",n:Hd().length},{venue:"rh_uniswap",tier:"prepare",chain:4663,n:pC().length},{venue:"solana_xstocks",tier:"quote-only",chain:"solana",n:gC().length},{venue:"ton_stonfi",tier:"quote-only",chain:"ton",n:EC().length}],t=[...qd(),...Od(),...Hd(),...a1(),...p1(),...h1()],r=(t[0]?.capturedAt??Date.now())+1e3,{survivors:n,excluded:o}=Ld(t,{nowMs:r});return{inventory:e,hip3Dexs:c1(),liveness:{survivors:n.length,excluded:o.length,byReason:o.reduce((i,s)=>(i[s.reason]=(i[s.reason]??0)+1,i),{})},capturedAt:Jt().capturedAt,custody:"prepare-only",note:"quote-only venues are ranked for discovery; only rh_uniswap is preparable in v1"}}function $te(e={}){let t=String(e.ticker||e.symbol||"").trim().toUpperCase(),r=e.recipient||e.taker;if(!t)throw new Error("prepareEquityRoute requires ticker");if(!r)throw new Error("prepareEquityRoute requires recipient (signing wallet)");let n=CC(e.sizeUsd??e.size??null),o=Ns({symbol:t,sizeUsd:n});if(!o)return{ok:!1,failureKind:"no-prepare-path",ticker:t,note:"no RH Uniswap prepare-tier route for this ticker in fixtures"};try{let i=String(o.capturedAt).length<=10?o.capturedAt*1e3:o.capturedAt,s=e.nowMs!=null,a=s?Number(e.nowMs):Date.now(),A=Math.max(0,Date.now()-i),c=hC({symbol:t,sizeUsd:n,recipient:r,nowMs:a});return{ok:!0,ticker:t,artifact:c,bestPreparableVenue:"rh_uniswap",dataSource:s?"caller-clock":"live-clock",capturedAt:i,ageMs:A,stale:A>g1}}catch(i){return{ok:!1,failureKind:"prepare-refused",ticker:t,error:String(i.message||i)}}}function Jte(e){return JSON.parse(JSON.stringify(e,(t,r)=>typeof r=="bigint"?r.toString():r))}var We=Object.freeze({SAFE:"SAFE",CAUTION:"CAUTION",HONEYPOT:"HONEYPOT",UNKNOWN:"UNKNOWN"}),Wte=5e3,zte=1500;function jte(e,t){return t===0n?null:Number((t-e)*10000n/t)}function Kte(e,t){if(e==null||e==="")throw new Error(`sell-sim: ${t} required`);if(typeof e=="bigint")return e;let r=String(e).trim();if(!/^\d+$/.test(r))throw new Error(`sell-sim: ${t} must be an integer base-unit amount`);return BigInt(r)}async function I1(e={},t={}){let{token:r,base:n,chainId:o=null}=e;if(!r)throw new Error("sell-sim: token required");if(!n)throw new Error("sell-sim: base asset required");if(typeof t.quote!="function")throw new Error("sell-sim: opts.quote function required");let i=Kte(e.amountIn,"amountIn"),s;try{s=await t.quote({chainId:o,inputMint:n,outputMint:r,amount:i.toString(),side:"buy"})}catch(f){return qr(We.UNKNOWN,`buy leg could not be quoted: ${BC(f)}`,{chainId:o,token:r,base:n})}let a=E1(s?.outAmount);if(a==null||a===0n)return qr(We.UNKNOWN,"buy leg returned no output \u2014 no route or no liquidity",{chainId:o,token:r,base:n});let A;try{A=await t.quote({chainId:o,inputMint:r,outputMint:n,amount:a.toString(),side:"sell"})}catch(f){return qr(We.HONEYPOT,`buy routes but the SELL leg fails to quote (${BC(f)}) \u2014 you would not be able to exit`,{chainId:o,token:r,base:n,tokensOut:a.toString()})}let c=E1(A?.outAmount);if(c==null||c===0n)return qr(We.HONEYPOT,"sell leg returns zero \u2014 the position cannot be exited for value",{chainId:o,token:r,base:n,tokensOut:a.toString()});let l=jte(c,i),u={chainId:o,token:r,base:n,amountIn:i.toString(),tokensOut:a.toString(),roundTripOut:c.toString(),roundTripLossBps:l,evidence:"quote-only"},d=t.executionProven===!0?!0:null;if(typeof t.executionCheck=="function")try{let f=await t.executionCheck({chainId:o,token:r,base:n,tokensOut:a.toString(),amountIn:i.toString()});if(f?.executable===!1)return qr(We.HONEYPOT,`the sell reverts or returns false at execution (${f?.reason||"transfer-level block"}) even though it quotes cleanly \u2014 a honeypot a pool-math quote cannot see`,{...u,evidence:"execution",executable:!1});d=f?.executable===!0?!0:d}catch(f){u.executionCheckError=BC(f)}return d===!0&&(u.evidence="execution"),l==null?qr(We.UNKNOWN,"could not compute round-trip loss",u):l>=Wte?qr(We.HONEYPOT,`round trip loses ${(l/100).toFixed(1)}% \u2014 a sell tax or rigged curve, not normal slippage`,u):l>=zte?qr(We.CAUTION,`round trip loses ${(l/100).toFixed(1)}% \u2014 high tax or thin liquidity`,u):d===!0?qr(We.SAFE,`round trip loses ${(l/100).toFixed(1)}% and the sell executes \u2014 exit path verified`,u):qr(We.CAUTION,`round trip quotes clean (${(l/100).toFixed(1)}% loss) but is unverified at execution \u2014 a pool-math quote cannot see a transfer-hook blacklist or transfer-only sell tax; run an execution-level sell simulation to clear SAFE`,u)}function qr(e,t,r){return{status:e,safe:e===We.SAFE,tradable:e===We.SAFE||e===We.CAUTION,reason:t,...r}}function E1(e){if(e==null)return null;try{let t=String(e).trim();return/^\d+$/.test(t)?BigInt(t):null}catch{return null}}function BC(e){return String(e?.message||e).slice(0,120)}async function Xte(e={},t={}){let r=await I1(e,t);if(!(r.status===We.SAFE||r.status===We.CAUTION&&t.allowCaution!==!1||r.status===We.UNKNOWN&&t.allowUnknown===!0)){let o=new Error(`sell-sim ${r.status}: ${r.reason}`);throw o.sellSim=r,o}return r}var Wn=Object.freeze({ALERT_ONLY:"alert_only",EXECUTE:"execute"}),Zte=new Set(["watch","watch this","ping","ping me","alert","notify"]),ere=new Set(["watching","armed"]);function C1(e){if(typeof e!="string"||!e.trim())throw new TypeError("explicit action verb required");let t=e.trim().toLowerCase().replace(/\s+/g," ");if(Zte.has(t))return Wn.ALERT_ONLY;if(t==="arm")return Wn.EXECUTE;throw new TypeError(`unsupported action verb: ${t}`)}function tre(e={}){let{verb:t,...r}=e;return{...r,active:!0,actionMode:C1(t)}}function rre(e){if(!e||typeof e!="object"||typeof e.active!="boolean")throw new TypeError("active must be boolean");if(!Object.values(Wn).includes(e.actionMode))throw new TypeError("actionMode must be alert_only or execute");return e}function nre(e){return e?.active===!0&&e?.actionMode===Wn.ALERT_ONLY}function ore(e){return e?.active===!0&&e?.actionMode===Wn.EXECUTE}function ire(e={}){if(e.actionMode!==void 0&&e.actionMode!==Wn.ALERT_ONLY)throw new TypeError("non-alert record cannot enter alert-only watch migration");let t=typeof e.active=="boolean"?e.active:ere.has(String(e.status||"").toLowerCase());return{...e,active:t,actionMode:Wn.ALERT_ONLY}}import{createHash as sre}from"node:crypto";var yC=1,B1=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),are=Object.freeze(["read","simulate"]),y1=1e4,Q1=1440*60,w1=128,b1=256,k1=64,S1=256,x1=/^0x[0-9a-fA-F]{40}$/,Are=/^[a-z][a-z0-9_-]*:[a-z0-9._-]+$/,cre=/^[a-z][a-z0-9_-]*:\*$/,lre=/^[A-Za-z0-9._:-]+$/,ure=/^[A-Za-z0-9._:-]+$/,v1=/^(0|[1-9][0-9]*)$/,GA=class extends Error{constructor(t){let r=t.map(n=>`${n.field}: ${n.message}`);super(`invalid grant (${t.length} error${t.length===1?"":"s"}): ${r.join("; ")}`),this.name="GrantValidationError",this.errors=t}};function dre(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function fre(e){if(typeof e=="bigint")return e>=0n?e.toString(10):null;if(typeof e=="number")return!Number.isSafeInteger(e)||e<0?null:String(e);if(typeof e=="string"){let t=e.trim();return v1.test(t)?t:null}return null}function Rs(e){if(typeof e=="bigint")return e<0n||e>BigInt(Number.MAX_SAFE_INTEGER)?null:Number(e);if(typeof e=="number")return!Number.isSafeInteger(e)||e<0?null:e;if(typeof e=="string"){let t=e.trim();if(!v1.test(t))return null;let r=Number(t);return Number.isSafeInteger(r)?r:null}return null}function N1(e){let t=String(e).split(":")[0];return are.includes(t)}function R1(e,t={}){let r=[],n=(u,d)=>r.push({field:u,message:d});if(!dre(e))return n("grant","grant must be a plain object"),{ok:!1,errors:r,grant:null};for(let u of Object.keys(e))B1.includes(u)||n(u,"unknown field is not allowed");for(let u of B1)(!(u in e)||e[u]==null)&&n(u,"required field is missing");if(r.length)return{ok:!1,errors:r,grant:null};let o={},i=Rs(e.chainId);i==null||i<=0?n("chainId","must be a positive integer chain id"):o.chainId=i;for(let u of["agentAddress","accountAddress"]){let d=e[u];typeof d!="string"||!x1.test(d.trim())?n(u,"must be a 0x-prefixed 20-byte hex address"):o[u]=d.trim().toLowerCase()}if(!Array.isArray(e.actions)||e.actions.length===0)n("actions","must be a non-empty array of action scopes");else if(e.actions.length>k1)n("actions",`too many actions (max ${k1})`);else{let u=[];for(let d of e.actions){let f=typeof d=="string"?d.trim():null;if(!f){n("actions","action entries must be non-empty strings");continue}if(f.includes("*")){t.allowWildcardActions===!0&&cre.test(f)?u.push(f):n("actions",`broad wildcard action "${f}" is rejected (fail closed)`);continue}if(!Are.test(f)){n("actions",`malformed action "${f}" (expected verb:resource)`);continue}u.push(f)}o.actions=[...new Set(u)].sort()}if(!Array.isArray(e.targets))n("targets","must be an array of contract addresses");else if(e.targets.length>S1)n("targets",`too many targets (max ${S1})`);else{let u=[];for(let d of e.targets){let f=typeof d=="string"?d.trim():null;if(!f||!x1.test(f)){n("targets",`target "${d}" must be a 0x-prefixed 20-byte hex address (wildcards not allowed)`);continue}u.push(f.toLowerCase())}if(o.targets=[...new Set(u)].sort(),o.targets.length===0&&Array.isArray(o.actions)){let d=o.actions.filter(f=>!N1(f));(d.length>0||o.actions.length===0)&&n("targets",`empty targets are only allowed for read/simulate scopes (blocked by: ${d.join(", ")||"no valid actions"})`)}}for(let u of["maxValueWei","maxGasWei"]){let d=fre(e[u]);d==null?n(u,"must be a non-negative integer wei amount"):o[u]=d}let s=Rs(e.maxSlippageBps);s==null||s>y1?n("maxSlippageBps",`must be an integer between 0 and ${y1}`):o.maxSlippageBps=s;let a=864e10,A=Rs(e.expiresAt);if(A==null||A<=0)n("expiresAt","must be a positive unix-seconds timestamp");else if(A>a)n("expiresAt","exceeds the max unix-seconds timestamp (pass seconds, not milliseconds)");else if(o.expiresAt=A,t.now!=null){let u=Rs(t.now);u==null?n("expiresAt","opts.now must be a unix-seconds integer"):A<=u?n("expiresAt",`grant is expired (expiresAt ${A} <= now ${u})`):A-u>Q1&&n("expiresAt",`grant exceeds the hard 24-hour TTL (${Q1} seconds)`)}let c=typeof e.nonce=="string"?e.nonce.trim():Rs(e.nonce)!=null?String(Rs(e.nonce)):null;!c||c.length>w1||!lre.test(c)?n("nonce",`must be a non-empty string (max ${w1} chars, [A-Za-z0-9._:-])`):o.nonce=c;let l=typeof e.revocationKey=="string"?e.revocationKey.trim():null;return!l||l.length>b1||!ure.test(l)?n("revocationKey",`must be a non-empty public identifier (max ${b1} chars, [A-Za-z0-9._:-])`):o.revocationKey=l,r.length?{ok:!1,errors:r,grant:null}:{ok:!0,errors:[],grant:o}}function QC(e,t={}){let{ok:r,errors:n,grant:o}=R1(e,t);if(!r)throw new GA(n);return o}function wC(e,t={}){let r=QC(e,t),o=Object.keys(r).sort().map(i=>`${JSON.stringify(i)}:${JSON.stringify(r[i])}`);return`{"version":${yC},${o.join(",")}}`}function D1(e,t={}){return sre("sha256").update(wC(e,t),"utf8").digest("hex")}var F1=new Set(["read:markets","read:nfts","read:positions","watch:contracts","prepare:trade","prepare:mint","prepare:build","build:factory","agent:shadow","agent:execute"]),pre="agent:execute",hre="build:factory",M1=["read:markets","read:nfts","read:positions","watch:contracts","prepare:trade","prepare:mint","prepare:build","agent:shadow"];function gre(e){let t=Array.isArray(e)&&e.length?e:M1,r=[...new Set(t.map(o=>String(o).trim()).filter(Boolean))],n=r.filter(o=>!F1.has(o));if(n.length)throw new Error(`Invalid scope: ${n.join(", ")}`);return r}var T1=Object.freeze([{id:"oracle",label:"Oracle Native",kind:"oracle",bins:["oracle"],website:!0,detect:!0},{id:"hermes",label:"Hermes Agent",kind:"mcp",bins:["hermes"],mcpTarget:"generic",configKey:"hermes",website:!0,detect:!0},{id:"claude",label:"Claude Code",kind:"mcp",bins:["claude"],mcpTarget:"claude-code",configKey:"claudeCode",website:!0,detect:!0},{id:"claude-desktop",label:"Claude Desktop",kind:"mcp",bins:[],mcpTarget:"claude-desktop",configKey:"claudeDesktop",website:!0,detect:!1},{id:"chatgpt",label:"ChatGPT",kind:"mcp",bins:[],mcpTarget:"chatgpt",configKey:"chatgpt",website:!0,detect:!1},{id:"codex",label:"OpenAI Codex",kind:"mcp",bins:["codex"],mcpTarget:"codex",configKey:"codex",website:!0,detect:!0},{id:"cursor",label:"Cursor",kind:"mcp",bins:["cursor","cursor-agent"],mcpTarget:"cursor",configKey:"cursor",website:!0,detect:!0},{id:"windsurf",label:"Windsurf",kind:"mcp",bins:["windsurf"],mcpTarget:"vscode",configKey:"windsurf",website:!0,detect:!0},{id:"vscode",label:"VS Code / Copilot",kind:"mcp",bins:["code","code-insiders"],mcpTarget:"vscode",configKey:"vscode",website:!0,detect:!0},{id:"openclaw",label:"OpenClaw",kind:"mcp",bins:["openclaw","claw"],mcpTarget:"generic",configKey:"openclaw",website:!0,detect:!0},{id:"perplexity",label:"Perplexity",kind:"mcp",bins:["perplexity","pplx"],mcpTarget:"generic",configKey:"perplexity",website:!0,detect:!0},{id:"manus",label:"Manus",kind:"mcp",bins:["manus"],mcpTarget:"generic",configKey:"manus",website:!0,detect:!0},{id:"prime",label:"Prime Intellect Agent",kind:"mcp",bins:["prime-agent","prime"],mcpTarget:"generic",configKey:"prime",website:!1,detect:!0},{id:"opencode",label:"OpenCode",kind:"mcp",bins:["opencode"],mcpTarget:"generic",configKey:"opencode",website:!1,detect:!0},{id:"aider",label:"Aider",kind:"mcp",bins:["aider"],mcpTarget:"generic",configKey:"aider",website:!1,detect:!0},{id:"continue",label:"Continue",kind:"mcp",bins:["continue"],mcpTarget:"vscode",configKey:"continue",website:!1,detect:!0},{id:"goose",label:"Goose",kind:"mcp",bins:["goose"],mcpTarget:"generic",configKey:"goose",website:!1,detect:!0},{id:"amp",label:"Amp",kind:"mcp",bins:["amp"],mcpTarget:"generic",configKey:"amp",website:!1,detect:!0},{id:"generic",label:"Generic MCP",kind:"mcp",bins:[],mcpTarget:"generic",configKey:"genericMcp",website:!0,detect:!1}]);function U1(){return T1.filter(e=>e.website)}var mre="@oracle-agent/oracle",Ere="npx",Ire=["-y","--package",mre,"oracle-data-mcp"],_1=/(?:^|_)(?:PRIVATE_KEY|SECRET|TOKEN|PASSWORD|PASSPHRASE|MNEMONIC|SEED)(?:_|$)/i;function kC(e,t){if(typeof e!="string"||!e.trim())throw new TypeError(`${t} must be a non-empty string`);if(/\r|\n|\0/.test(e))throw new TypeError(`${t} must be a single-line string`);return e.trim()}function Cre(e){let t=kC(e,"url"),r;try{r=new URL(t)}catch{throw new TypeError("url must be a valid http(s) URL")}if(!/^https?:$/.test(r.protocol)||r.username||r.password)throw new TypeError("url must be a credential-free http(s) URL");for(let n of r.searchParams.keys())if(_1.test(n)||/^(?:key|api[_-]?key|auth)$/i.test(n))throw new TypeError(`url must not contain secret-shaped query parameter: ${n}`);return r.href}function Bre(e){let t=kC(e,"key");if(/^[A-Z][A-Z0-9_]*\s*=/.test(t)||/-----BEGIN [A-Z ]*PRIVATE KEY-----/.test(t))throw new TypeError("key must be an Oracle agent key, not an environment assignment or private key");if(/^(?:0x)?[0-9a-f]{64}$/i.test(t)||t.trim().split(/\s+/).length>=12)throw new TypeError("key looks like private signing material");return t}function yre(e){let t=kC(e,"label");if(!/^[a-z0-9][a-z0-9_-]{0,62}$/i.test(t))throw new TypeError("label must contain only letters, digits, underscores, and hyphens");if(_1.test(t))throw new TypeError("label must not be a secret-shaped environment name");return t}function Wt(e){return`${JSON.stringify(e,null,2)}
|
|
233
|
+
`}function bC(e){return JSON.stringify(e)}function YA(e){return JSON.stringify(e)}function L1(e,t){return["mcp_servers:",` ${e}:`,` command: ${bC(t.command)}`," args:",...t.args.map(r=>` - ${bC(r)}`)," env:",...Object.entries(t.env).map(([r,n])=>` ${r}: ${bC(n)}`),""].join(`
|
|
234
|
+
`)}function Qre(e,t){return[`[mcp_servers.${YA(e)}]`,`command = ${YA(t.command)}`,`args = [${t.args.map(YA).join(", ")}]`,"",`[mcp_servers.${YA(e)}.env]`,...Object.entries(t.env).map(([r,n])=>`${r} = ${YA(n)}`),""].join(`
|
|
235
|
+
`)}function wre(){return["# Oracle native harness (default)","npm i -g @oracle-agent/oracle","oracle setup model","oracle chat",""].join(`
|
|
236
|
+
`)}function P1({url:e,key:t,label:r="oracle-data"}={}){let n=Cre(e),o=Bre(t),i=yre(r),s={command:Ere,args:[...Ire],env:{ORACLE_DATA_URL:n,ORACLE_AGENT_KEY:o}},a={mcpServers:{[i]:s}},A={hermes:L1(i,s),claudeCode:Wt(a),codex:Qre(i,s),cursor:Wt(a),genericMcp:Wt(a),oracleNative:wre(),chatgpt:Wt(a),claudeDesktop:Wt(a),windsurf:Wt(a),vscode:Wt(a),openclaw:Wt(a),perplexity:Wt(a),manus:Wt(a),prime:L1(i,s),opencode:Wt(a)};for(let c of U1()){if(c.kind==="oracle")continue;let l=c.configKey||c.id;A[l]||(A[l]=Wt(a))}return A}var bre=P1;var O1=Object.freeze({assetHighPct:50,assetMediumPct:25,chainHighPct:75,venueHighPct:60,stablecoinHighPct:70}),kre=new Set(["USDC","USDT","USDT0","DAI","FRAX","LUSD","TUSD","USDP","GUSD","PYUSD","USDE"]);function q1(e){if(e===null||e===""||e===void 0)return null;let t=Number(e);return Number.isFinite(t)&&t>=0?t:null}function VA(e){return Math.round((e+Number.EPSILON)*1e8)/1e8}function xC(e,t){return t>0?VA(e/t*100):null}function vC(e){return e.address||e.owner||e.walletAddress||e.wallet?.address||null}function Sre(e){let t=Array.isArray(e)?e:Array.isArray(e?.entries)?e.entries:[],r=new Map;for(let n of t){if(!n?.address)continue;let o=String(n.address).toLowerCase();r.has(o)||r.set(o,n)}return r}function Go(e,t,r={}){if(!t||typeof t!="object")return;let n=String(t.symbol??t.coin??t.name??t.collection??t.tokenId??"unknown"),o=q1(t.usdValue??t.valueUsd??t.knownUsd??t.estimatedValueUsd??t.floorValueUsd),i=t.kind==="nft"||t.type==="nft"||t.collection||t.tokenId!=null?"nft":"fungible";e.push({symbol:n,usdValue:o,chain:String(t.chain??t.chainName??r.chain??"unknown"),venue:String(t.venue??t.protocol??t.platform??r.venue??"wallet"),address:t.address??r.address??null,kind:i,stablecoin:t.stablecoin===!0||kre.has(n.toUpperCase())})}function xre(e){let t=[],r=vC(e);for(let n of e.assets||e.holdings||[])Go(t,n,{address:r,chain:e.chain,venue:e.venue});for(let n of e.chains||[]){let o=n.chain??n.name??n.slug??(n.chainId!=null?String(n.chainId):n.family)??"unknown",i={address:n.address??r,chain:o,venue:n.venue};n.native&&(n.native.amount==null||Number(n.native.amount)!==0)&&Go(t,{...n.native,symbol:n.native.symbol??n.symbol??o},i);for(let a of n.assets||n.fungibleTokens?.assets||[])Go(t,a,i);for(let a of n.collectibles?.assets||n.nfts||[])Go(t,{...a,kind:"nft"},i);for(let a of n.spot?.balances||[])Go(t,a,{...i,venue:"Hyperliquid spot"});let s=q1(n.perps?.accountValueUsd);s!=null&&Go(t,{symbol:"perps account",usdValue:s},{...i,venue:"Hyperliquid perps"})}for(let n of e.inventory?.items||e.nfts?.items||[])Go(t,{...n,kind:"nft"},{address:r,chain:n.chain??e.chain,venue:n.marketplace??e.venue});return t}function vre(e,t){let r=vC(e),n=e.chain??e.chainId??e.family??"*";return r?`${String(r).toLowerCase()}|${String(n).toLowerCase()}`:`snapshot:${t}`}function SC(e,t,r){let n=new Map;for(let o of e){if(o.usdValue==null)continue;let i=o[t];n.set(i,(n.get(i)||0)+o.usdValue)}return[...n].map(([o,i])=>({name:o,knownUsd:VA(i),percentOfKnown:xC(i,r)})).sort((o,i)=>i.knownUsd-o.knownUsd||o.name.localeCompare(i.name))}function Vd(e={},t={}){let r=Array.isArray(e)?e:Array.isArray(e.snapshots)?e.snapshots:e.snapshot?[e.snapshot]:[],n=Sre(t.labels??t.addressBook??e.labels??e.addressBook),o={...O1,...e.thresholds||{},...t.thresholds||{}},i=[],s=new Set,a=0;r.forEach((b,U)=>{if(!b||typeof b!="object")return;let q=vre(b,U);s.has(q)?a+=1:(s.add(q),i.push(b))});let A=i.flatMap(xre),c=A.filter(b=>b.usdValue!=null),l=A.filter(b=>b.usdValue==null),u=i.reduce((b,U)=>b+Number(U.valuation?.unpricedNonzeroItems||U.unpricedNonzeroItems||0),0),d=VA(c.reduce((b,U)=>b+U.usdValue,0)),f=l.length+u,p=SC(c,"chain",d),h=SC(c,"venue",d),g=SC(c,"symbol",d);for(let b of p)b.chain=b.name;for(let b of h)b.venue=b.name;for(let b of g)b.asset=b.name,b.symbol=b.name;let m=VA(c.filter(b=>b.stablecoin).reduce((b,U)=>b+U.usdValue,0)),C=A.filter(b=>b.kind==="nft"),E=i.reduce((b,U)=>b+Number(U.valuation?.nftUnvaluedItems||0),0),I=C.filter(b=>b.usdValue==null).length+E,Q=C.filter(b=>b.usdValue!=null).length,N=g[0]||null,S=N?N.percentOfKnown>=o.assetHighPct?"high":N.percentOfKnown>=o.assetMediumPct?"medium":"low":"unknown",y=[];f&&y.push(`${f} nonzero holding(s) have unknown USD value; they are excluded from totals and percentages.`),I&&y.push("NFT valuation coverage is partial; estimates are not executable bids and unvalued NFTs are not treated as zero."),a&&y.push(`${a} duplicate address/chain snapshot(s) were ignored.`),N&&S!=="low"&&y.push(`Asset concentration is ${S}: ${N.name} is ${N.percentOfKnown}% of known value.`),p[0]?.percentOfKnown>=o.chainHighPct&&y.push(`Chain concentration is high: ${p[0].name} is ${p[0].percentOfKnown}% of known value.`),h[0]?.percentOfKnown>=o.venueHighPct&&y.push(`Venue concentration is high: ${h[0].name} is ${h[0].percentOfKnown}% of known value.`);let w=i.map(vC).filter(Boolean).map(b=>{let U=n.get(String(b).toLowerCase());return{address:b,label:U?.label??null,who:U?.who??null,role:U?.role??null}});return{totalKnownUsd:d,coverage:{complete:i.length>0&&f===0&&i.every(b=>b.valuation?.complete!==!1&&b.coverage?.complete!==!1),label:f===0&&i.length&&i.every(b=>b.valuation?.complete!==!1&&b.coverage?.complete!==!1)?"complete for the supplied snapshots":"known priced value only; portfolio coverage is partial or unverified",unknownUsd:f?null:0,pricedItemCount:c.length,unknownItemCount:f,snapshotCount:i.length,duplicatesIgnored:a},chainExposures:p,venueExposures:h,topAssets:g.slice(0,Math.max(1,Number(t.topAssets??e.topAssets??10))),concentrationRisk:{level:S,topAsset:N?.name??null,topAssetPercent:N?.percentOfKnown??null,thresholds:{mediumPct:o.assetMediumPct,highPct:o.assetHighPct}},stablecoinExposure:{knownUsd:m,percentOfKnown:xC(m,d),high:d>0&&xC(m,d)>=o.stablecoinHighPct},nftCoverage:{status:C.length||E?I?"partial":"valued":"not-observed",valuedItems:Q,unvaluedItems:I,knownUsd:VA(C.filter(b=>b.usdValue!=null).reduce((b,U)=>b+U.usdValue,0))},addresses:w,warnings:[...new Set(y)]}}var Nre=Vd;var Ze=(e,t=0)=>Number.isFinite(Number(e))?Number(e):t,mr=e=>Math.round((e+Number.EPSILON)*1e8)/1e8,Ye=(e,t="unknown")=>String(e??t).trim().toLowerCase(),Er=e=>e.asset??e.symbol??e.coin,Y1=e=>e.address??e.owner??e.account,Jd=e=>[Ye(e.chain??e.chainId),Ye(Y1(e)),Ye(Er(e)),Ye(e.source)].join("|");function H1(e){return Ze(e.asOf??e.updatedAt??e.timestamp,0)}function V1(e){return e.filledAt??e.executedAt??e.time??e.timestamp??e.asOf??e.updatedAt??e.createdAt}function Rre(e){return Number.isFinite(Number(V1(e)))}function G1(e){return Ze(V1(e),0)}function Dre(e){let t=new Set,r=[];return(e||[]).forEach((o,i)=>{if(!o||typeof o!="object"||!Er(o))return;let s=$1(o);t.has(s)||(t.add(s),r.push({row:o,seq:i}))}),r.every(({row:o})=>Rre(o))?r.sort((o,i)=>G1(o.row)-G1(i.row)||o.seq-i.seq).map(({row:o})=>o):r.map(({row:o})=>o)}function $1(e){let t=e.fillId??e.tradeId??e.orderId??e.txHash??e.transactionHash??e.timestamp??e.asOf;return[Jd(e),Ye(t),Ye(e.side),Ze(e.quantity??e.amount??e.size),Ze(e.price??e.priceUsd)].join("|")}function $d(e,t){let r=new Map,n=0;for(let o of e||[]){if(!o||typeof o!="object"||!Er(o))continue;let i=t==="fill"?$1(o):Jd(o);r.has(i)?(n+=1,t!=="fill"&&H1(o)>H1(r.get(i))&&r.set(i,{...o,identity:i})):r.set(i,{...o,identity:i})}return{rows:[...r.values()].sort((o,i)=>o.identity.localeCompare(i.identity)),duplicatesIgnored:n}}function Fre(e){let t=new Map;for(let r of e){let n=[Jd(r),`${Ye(r.chain??r.chainId)}|${Ye(Er(r))}`,`*|${Ye(Er(r))}`];for(let o of n)t.has(o)||t.set(o,r)}return t}function Mre(e,t){return t.get(Jd(e))??t.get(`${Ye(e.chain??e.chainId)}|${Ye(Er(e))}`)??t.get(`*|${Ye(Er(e))}`)??null}function Tre(e){let t=new Map,r=0;for(let n of e){let o=[Ye(n.chain??n.chainId),Ye(Y1(n)),Ye(Er(n))].join("|"),i=t.get(o)??{quantity:0,cost:0},s=Math.abs(Ze(n.quantity??n.amount??n.size)),a=Ze(n.price??n.priceUsd),A=Ze(n.feeUsd);if(Ye(n.side)==="sell"){let c=Math.min(s,i.quantity),l=i.quantity?i.cost/i.quantity:Ze(n.costBasisUsd)/(s||1);r+=c*(a-l)-A,i.quantity-=c,i.cost-=c*l}else i.quantity+=s,i.cost+=s*a+A;t.set(o,i)}return{realizedPnlUsd:mr(r),lots:t}}function NC(e={},t={}){let r=Ze(t.asOf??e.asOf,0),n=Math.max(0,Ze(t.priceTtlMs??e.priceTtlMs,6e4)),o=$d(e.balances||[],"balance"),i=$d(e.positions||[],"position"),s=$d(e.fills||[],"fill"),a=$d(e.prices||[],"price"),A=Fre(a.rows),c=[],l=0,u=0;for(let w of[...o.rows,...i.rows]){let b=Mre(w,A),U=Ze(w.quantity??w.amount??w.size),q=b?Ze(b.priceUsd??b.price,NaN):Ze(w.priceUsd,NaN);if(!Number.isFinite(q)){u+=1;continue}let ue=U*q,Ve=Ze(b?.asOf??w.priceAsOf,0),mt=r-Ve>n;mt&&(l+=Math.abs(ue)),c.push({...w,quantity:U,priceUsd:q,valueUsd:ue,stale:mt,kind:i.rows.includes(w)?"position":"balance"})}let d=c.filter(w=>w.kind==="balance").reduce((w,b)=>w+b.valueUsd,0),f=c.filter(w=>w.kind==="position"),p=f.reduce((w,b)=>w+b.valueUsd,0),h=f.reduce((w,b)=>w+Math.abs(b.valueUsd),0),g=d+p,m=Ze(e.equityUsd,g),C=Tre(Dre(e.fills||[])).realizedPnlUsd,E=f.reduce((w,b)=>{let U=Ze(b.entryPriceUsd??b.averageEntryPrice??b.costBasisPrice,b.priceUsd);return w+b.quantity*(b.priceUsd-U)},0),I=new Map;for(let w of c)I.set(Ye(Er(w)),(I.get(Ye(Er(w)))||0)+Math.abs(w.valueUsd));let Q=[...I.values()].reduce((w,b)=>w+b,0),N=[...I].map(([w,b])=>({asset:w,exposureUsd:mr(b),percent:Q?mr(b/Q*100):null})).sort((w,b)=>b.exposureUsd-w.exposureUsd||w.asset.localeCompare(b.asset)),S=c.reduce((w,b)=>w+Math.abs(b.valueUsd),0),y=Vd({snapshots:[{assets:c.map(w=>({symbol:Er(w),usdValue:Math.abs(w.valueUsd),chain:w.chain,venue:w.source}))}],thresholds:e.thresholds});return Object.freeze({asOf:r,balances:o.rows,positions:i.rows,fills:s.rows,prices:a.rows,duplicatesIgnored:o.duplicatesIgnored+i.duplicatesIgnored+s.duplicatesIgnored+a.duplicatesIgnored,pnl:{realizedUsd:C,unrealizedUsd:mr(E),totalUsd:mr(C+E)},exposure:{grossUsd:mr(h),netUsd:mr(g),leverage:m>0?mr(h/m):null,equityUsd:mr(m)},concentration:N,priceCoverage:{pricedItems:c.length,unpricedItems:u,staleItems:c.filter(w=>w.stale).length,staleValueUsd:mr(l),stalePercent:S?mr(l/S*100):null,ttlMs:n},risk:y})}var Ure=NC,Lre=NC;import{createHash as Hre}from"node:crypto";var $A=class extends Error{constructor(t,r){super(`secret material must never appear in a public API object (at ${t}, rule: ${r})`),this.name="SecretLeakError",this.path=t,this.rule=r}},_re=/(private[_-]?key|secret|bearer|keystore|mnemonic|seed[_-]?phrase|passphrase|password|api[_-]?key|access[_-]?token|auth[_-]?token|session[_-]?token|signer[_-]?url|signature)/i,Pre=Object.freeze(["privkey","wif","xprv","seed"]);function J1(e){let t=String(e),r=t.toLowerCase().replace(/[\s._-]+/g,"");return _re.test(t)||Pre.includes(r)}var Ore=Object.freeze([{rule:"raw-32-byte-hex-key",re:/^0x[0-9a-fA-F]{64}$/},{rule:"raw-32-byte-hex-bare",re:/^[0-9a-fA-F]{64}$/},{rule:"extended-private-key",re:/\b(?:xprv|tprv|yprv|zprv)[1-9A-HJ-NP-Za-km-z]{107}\b/},{rule:"bitcoin-wif",re:/\b[59KLc][1-9A-HJ-NP-Za-km-z]{50,51}\b/},{rule:"bip39-mnemonic",re:/\b(?:[a-z]{3,8}\s+){11,23}[a-z]{3,8}\b/},{rule:"bearer-token",re:/bearer\s+[A-Za-z0-9._~+/=-]+/i},{rule:"pem-private-key",re:/-----BEGIN[A-Z ]*PRIVATE KEY-----/},{rule:"keystore-path",re:/keystore/i},{rule:"signer-url",re:/https?:\/\/\S*sign/i},{rule:"authorization-header",re:/authorization\s*:/i}]),qre=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"]);function Yo(e,t="$",r=new Set,n=""){if(e==null)return e;if(typeof e=="string"){let o=qre.includes(String(n).toLowerCase().replace(/[_-]/g,""));for(let{rule:i,re:s}of Ore)if(!(o&&i.startsWith("raw-32-byte-hex"))&&s.test(e))throw new $A(t,i);return e}if(typeof e!="object"||r.has(e)||(r.add(e),ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e;if(e instanceof Map){for(let[o,i]of e.entries()){if(typeof o=="string"&&J1(o))throw new $A(`${t}[${JSON.stringify(o)}]`,"forbidden-key-name");Yo(o,`${t}[key]`,r),Yo(i,`${t}[${String(o)}]`,r)}return e}if(e instanceof Set){let o=0;for(let i of e.values())Yo(i,`${t}[${o++}]`,r);return e}if(Array.isArray(e))return e.forEach((o,i)=>Yo(o,`${t}[${i}]`,r)),e;for(let[o,i]of Object.entries(e)){if(J1(o))throw new $A(`${t}.${o}`,"forbidden-key-name");Yo(i,`${t}.${o}`,r,o)}return e}var Wd=Object.freeze(["intent","quote_comparison","simulation","prepared","approval","signed","broadcast","settlement","balance_delta","position"]),DC=Object.freeze(Object.fromEntries(Wd.map((e,t)=>[e,Object.freeze(t+1<Wd.length?[Wd[t+1]]:[])]))),W1=new Set(["signed","broadcast"]);function RC(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(RC).join(",")}]`:`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${RC(e[t])}`).join(",")}}`}function Gre(e){return e===void 0?null:JSON.parse(JSON.stringify(e))}function zd(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){Object.freeze(e);for(let t of Object.values(e))zd(t)}return e}function FC(e,t="fact"){try{Yo(e,t)}catch{throw new Error(`${t} contains custody material and is forbidden`)}}function z1(e){return Hre("sha256").update(RC(e)).digest("hex")}function j1({tradeId:e,state:t,fact:r,asOf:n,previousHash:o,external:i}){let s={tradeId:e,state:t,asOf:n,previousHash:o??null,external:i===!0,fact:Gre(r)};return zd({...s,hash:z1(s)})}function Yre({tradeId:e,intent:t,asOf:r=0}={}){if(!e||typeof e!="string")throw new Error("tradeId is required");if(!t||typeof t!="object"||Array.isArray(t))throw new Error("intent fact is required");FC(t,"intent");let n=j1({tradeId:e,state:"intent",fact:t,asOf:r,previousHash:null,external:!1});return zd({tradeId:e,state:"intent",events:[n],headHash:n.hash,custody:"none",execution:"prepare-only"})}function K1(e,t,r,n={}){if(MC(e),!(DC[e.state]||[]).includes(t))throw new Error(`invalid trade transition ${e.state} -> ${t}`);if(!r||typeof r!="object"||Array.isArray(r))throw new Error(`${t} fact is required`);FC(r,t);let i=n.external===!0||n.externallySupplied===!0;if(W1.has(t)&&!i)throw new Error(`${t} must be an externally supplied fact; this module never signs or broadcasts`);let s=e.events.at(-1),a=n.asOf??s.asOf;if(!Number.isFinite(Number(a))||Number(a)<Number(s.asOf))throw new Error("asOf must be finite and monotonic");let A=j1({tradeId:e.tradeId,state:t,fact:r,asOf:a,previousHash:s.hash,external:i});return zd({...e,state:t,events:[...e.events,A],headHash:A.hash})}function MC(e){if(!e||!Array.isArray(e.events)||e.events.length===0)throw new Error("invalid trade lifecycle");if(e.custody!=="none")throw new Error("trade lifecycle custody must be none");if(e.execution!=="prepare-only")throw new Error("trade lifecycle execution must be prepare-only");let t=null;for(let r=0;r<e.events.length;r+=1){let n=e.events[r],{hash:o,...i}=n;if(z1(i)!==o)throw new Error(`trade event ${r} hash mismatch`);if(FC(n.fact,`trade event ${r} fact`),!Number.isFinite(Number(n.asOf))||t&&Number(n.asOf)<Number(t.asOf))throw new Error(`trade event ${r} asOf must be finite and monotonic`);if(n.tradeId!==e.tradeId||n.previousHash!==t?.hash&&r>0)throw new Error(`trade event ${r} chain mismatch`);if(r===0&&(n.state!=="intent"||n.previousHash!==null))throw new Error("trade lifecycle must start with intent");if(t&&!DC[t.state]?.includes(n.state))throw new Error(`invalid recorded transition ${t.state} -> ${n.state}`);if(W1.has(n.state)&&n.external!==!0)throw new Error(`${n.state} is not externally supplied`);t=n}if(e.state!==t.state||e.headHash!==t.hash)throw new Error("trade lifecycle head mismatch");return!0}var Vre=K1,$re=MC;function Jre(e){return Array.isArray(e)?e.map((t,r)=>typeof t=="function"?{id:t.name||`provider-${r}`,health:t}:t):Object.entries(e||{}).map(([t,r])=>({id:t,health:typeof r=="function"?r:r?.health}))}async function Wre(e,t){let r;try{let n=new Promise((i,s)=>{r=setTimeout(()=>s(Object.assign(new Error(`health timeout after ${t}ms`),{code:"TIMEOUT"})),t)});return{detail:await Promise.race([Promise.resolve().then(()=>e.health()),n]),transportOk:!0}}catch(n){return{error:n?.message||String(n),timedOut:n?.code==="TIMEOUT",transportOk:!1}}finally{clearTimeout(r)}}function jd(e,t,r,n,o=!1){let i=Number(e??t);if(!Number.isFinite(i)||i<n||o&&!Number.isInteger(i)){let s=o?"a positive integer":n===Number.NEGATIVE_INFINITY?"finite":n===0?"a nonnegative finite number":"a positive finite number";throw new TypeError(`${r} must be ${s}`)}return i}async function TC(e,t={}){let r=Jre(e),n=jd(t.concurrency,4,"concurrency",1,!0),o=jd(t.timeoutMs,5e3,"timeoutMs",Number.EPSILON),i=jd(t.asOf,Date.now(),"asOf",Number.NEGATIVE_INFINITY),s=jd(t.ttlMs,6e4,"ttlMs",0),a=new Array(r.length),A=0;async function c(){for(;A<r.length;){let u=A++,d=r[u];if(!d?.id||typeof d.health!="function"){a[u]={id:d?.id??`provider-${u}`,ok:!1,state:"error",stale:!1,asOf:i,ttlMs:s,error:"health function is required"};continue}let f=await Wre(d,o),p=Number(f.detail?.asOf??f.detail?.updatedAt??i),h=f.transportOk&&i-p>s,g=!(f.detail&&typeof f.detail=="object"&&f.detail.ok===!1),m=f.transportOk&&g&&!h;a[u]={id:String(d.id),ok:m,state:f.timedOut?"timeout":!f.transportOk||!g?"error":h?"stale":"fresh",stale:h,asOf:p,checkedAsOf:i,ttlMs:s,...f.detail===void 0?{}:{detail:f.detail},...f.error?{error:f.error}:{}}}}await Promise.all(Array.from({length:Math.min(n,Math.max(1,r.length))},c));let l={fresh:0,stale:0,error:0,timeout:0};for(let u of a)l[u.state]+=1;return{ok:a.every(u=>u.ok),asOf:i,ttlMs:s,timeoutMs:o,counts:l,providers:a}}var zre=TC,jre=TC;import{createHash as Kre}from"node:crypto";var UC=1,a2=/^[a-z0-9][a-z0-9._-]{0,63}$/,A2=/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/,Xre=new Set(["open","high","low","close","volume","fundingRate","openInterest"]),Zre=new Set(["sma","ema","rsi","macd","bollinger","atr"]),ene=new Set(["gt","gte","lt","lte","eq"]),tne=new Set(["and","or","not"]),rne=new Set(["above","below"]),nne=new Set(["line","signal","histogram"]),one=new Set(["upper","middle","lower"]),LC=new Set(["compare","logic","cross"]),X1=new Set(["version","id","name","venue","market","parameters","nodes","rules","risk"]),Z1=new Set(["value","min","max","step"]),_C=new Set(["entryLong","entryShort","exitLong","exitShort"]),e2=new Set(["maxLeverage","maxNotionalUsd","positionSizePct","stopLossPct","takeProfitPct","cooldownBars","maxDailyLossPct","expiresAt"]),ine=new Set(["id","type"]),t2={input:new Set(["id","type","field"]),constant:new Set(["id","type","value"]),indicator:new Set(["id","type","indicator","input","period","fastPeriod","slowPeriod","signalPeriod","stdDev","output"]),compare:new Set(["id","type","op","left","right"]),logic:new Set(["id","type","op","inputs"]),cross:new Set(["id","type","direction","left","right"])},r2=16,n2=128,o2=100,Ds=class extends Error{constructor(t){let r=t.map(n=>`${n.path}: ${n.message}`);super(`invalid strategy (${t.length} error${t.length===1?"":"s"}): ${r.join("; ")}`),this.name="StrategyValidationError",this.errors=t}};function zt(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function Fe(e){return typeof e=="number"&&Number.isFinite(e)}function i2(e){return Number.isInteger(e)&&e>0}function OC(e){if(e==null||typeof e!="object"||Object.isFrozen(e))return e;if(Array.isArray(e)){for(let t of e)OC(t);return Object.freeze(e)}for(let t of Object.keys(e))OC(e[t]);return Object.freeze(e)}function qC(e){if(Array.isArray(e))return e.map(qC);if(e!=null&&typeof e=="object"){let t={};for(let r of Object.keys(e).sort())t[r]=qC(e[r]);return t}return e}function D(e,t,r){e.push({path:t,message:r})}function zn(e,t,r,n){for(let o of Object.keys(e))t.has(o)||D(n,r?`${r}.${o}`:o,"unknown field is not allowed")}function c2(e,t,r,n){if(!Fe(e)||!Fe(t)||!Fe(r)||!Fe(n)||n<=0||e<t||e>r)return!1;let o=(e-t)/n;if(!Number.isFinite(o))return!1;let i=Math.round(o);return Math.abs(o-i)<=1e-9}function PC(e,t,r,n){if(zt(e)){if(zn(e,new Set(["param"]),t,n),typeof e.param!="string"||!e.param)return D(n,`${t}.param`,"must be a parameter name string"),null;if(!Object.prototype.hasOwnProperty.call(r,e.param))return D(n,`${t}.param`,`unknown parameter "${e.param}"`),null;let o=r[e.param];return!zt(o)||![o.value,o.min,o.max,o.step].every(i2)?(D(n,`${t}.param`,"referenced period parameter value min max and step must be positive integers"),null):{param:e.param}}return i2(e)?e:(D(n,t,"must be a positive integer or {param}"),null)}function s2(e,t,r,n){return zt(e)?(zn(e,new Set(["param"]),t,n),typeof e.param!="string"||!e.param?(D(n,`${t}.param`,"must be a parameter name string"),null):Object.prototype.hasOwnProperty.call(r,e.param)?{param:e.param}:(D(n,`${t}.param`,`unknown parameter "${e.param}"`),null)):Fe(e)?e:(D(n,t,"must be a finite number or {param}"),null)}function Kd(e){switch(e.type){case"input":case"constant":return[];case"indicator":return e.input?[e.input]:[];case"compare":case"cross":return[e.left,e.right].filter(Boolean);case"logic":return Array.isArray(e.inputs)?[...e.inputs]:[];default:return[]}}function sne(e){let t=new Map,r=n=>{let o=t.get(n)||0;if(o===1)return!0;if(o===2)return!1;t.set(n,1);let i=e.get(n);if(i){for(let s of Kd(i))if(e.has(s)&&r(s))return!0}return t.set(n,2),!1};for(let n of e.keys())if(r(n))return!0;return!1}function ane(e,t){if(!zt(e))return D(t,"parameters","must be a plain object"),null;let r=Object.keys(e);if(r.length>r2)return D(t,"parameters",`too many parameters (max ${r2})`),null;let n={};for(let o of r){if(!a2.test(o)){D(t,`parameters.${o}`,"parameter name is malformed");continue}let i=e[o],s=`parameters.${o}`;if(!zt(i)){D(t,s,"must be a plain object");continue}zn(i,Z1,s,t);for(let u of Z1)u in i||D(t,`${s}.${u}`,"required field is missing");let{value:a,min:A,max:c,step:l}=i;Fe(A)||D(t,`${s}.min`,"must be a finite number"),Fe(c)||D(t,`${s}.max`,"must be a finite number"),(!Fe(l)||l<=0)&&D(t,`${s}.step`,"must be a positive finite number"),Fe(a)||D(t,`${s}.value`,"must be a finite number"),Fe(A)&&Fe(c)&&A>c&&D(t,`${s}.min`,"min must be <= max"),Fe(a)&&Fe(A)&&Fe(c)&&Fe(l)&&l>0&&(c2(a,A,c,l)||D(t,`${s}.value`,"value must lie on the declared min/max/step grid")),n[o]={value:a,min:A,max:c,step:l}}return n}function Ane(e,t,r,n){let o=`nodes.${t}`;if(!zt(e))return D(n,o,"must be a plain object"),null;if(typeof e.type!="string"||!t2[e.type])return D(n,`${o}.type`,"unknown or missing node type"),zn(e,ine,o,n),null;switch(zn(e,t2[e.type],o,n),(typeof e.id!="string"||!A2.test(e.id))&&D(n,`${o}.id`,"must be a 1-64 char id starting with alphanumeric"),e.type){case"input":return(typeof e.field!="string"||!Xre.has(e.field))&&D(n,`${o}.field`,"must be one of open|high|low|close|volume|fundingRate|openInterest"),{id:e.id,type:"input",field:e.field};case"constant":{let i=s2(e.value,`${o}.value`,r,n);return{id:e.id,type:"constant",value:i}}case"indicator":{(typeof e.indicator!="string"||!Zre.has(e.indicator))&&D(n,`${o}.indicator`,"must be one of sma|ema|rsi|macd|bollinger|atr");let i=e.indicator,s={id:e.id,type:"indicator",indicator:i};if(i==="atr"){"input"in e&&(typeof e.input!="string"||!e.input?D(n,`${o}.input`,"must be a node id string when provided"):s.input=e.input);let a=PC(e.period,`${o}.period`,r,n);a!=null&&(s.period=a)}else typeof e.input!="string"||!e.input?D(n,`${o}.input`,"must be a node id string"):s.input=e.input;if((i==="sma"||i==="ema"||i==="rsi"||i==="bollinger"||i==="atr")&&("period"in e,i!=="macd"))if(!("period"in e))D(n,`${o}.period`,"required field is missing");else{let a=PC(e.period,`${o}.period`,r,n);a!=null&&(s.period=a)}if(i==="macd"){for(let a of["fastPeriod","slowPeriod","signalPeriod"])if(!(a in e))D(n,`${o}.${a}`,"required field is missing");else{let A=PC(e[a],`${o}.${a}`,r,n);A!=null&&(s[a]=A)}"output"in e?nne.has(e.output)?s.output=e.output:D(n,`${o}.output`,"must be line|signal|histogram"):D(n,`${o}.output`,"required field is missing"),"period"in e&&D(n,`${o}.period`,"forbidden for macd"),"stdDev"in e&&D(n,`${o}.stdDev`,"forbidden for macd")}else if(i==="bollinger"){if(!("stdDev"in e))D(n,`${o}.stdDev`,"required field is missing");else{let a=s2(e.stdDev,`${o}.stdDev`,r,n);a!=null&&(typeof a=="number"&&a<=0?D(n,`${o}.stdDev`,"must be > 0"):s.stdDev=a)}"output"in e?one.has(e.output)?s.output=e.output:D(n,`${o}.output`,"must be upper|middle|lower"):D(n,`${o}.output`,"required field is missing");for(let a of["fastPeriod","slowPeriod","signalPeriod"])a in e&&D(n,`${o}.${a}`,`forbidden for ${i}`)}else{"output"in e&&D(n,`${o}.output`,`forbidden for ${i}`),"stdDev"in e&&i!=="bollinger"&&D(n,`${o}.stdDev`,`forbidden for ${i}`);for(let a of["fastPeriod","slowPeriod","signalPeriod"])a in e&&D(n,`${o}.${a}`,`forbidden for ${i}`)}return s}case"compare":return(typeof e.op!="string"||!ene.has(e.op))&&D(n,`${o}.op`,"must be gt|gte|lt|lte|eq"),(typeof e.left!="string"||!e.left)&&D(n,`${o}.left`,"must be a node id"),(typeof e.right!="string"||!e.right)&&D(n,`${o}.right`,"must be a node id"),{id:e.id,type:"compare",op:e.op,left:e.left,right:e.right};case"logic":{if((typeof e.op!="string"||!tne.has(e.op))&&D(n,`${o}.op`,"must be and|or|not"),!Array.isArray(e.inputs))return D(n,`${o}.inputs`,"must be an array of node ids"),{id:e.id,type:"logic",op:e.op,inputs:[]};let i=[];for(let s=0;s<e.inputs.length;s++){let a=e.inputs[s];typeof a!="string"||!a?D(n,`${o}.inputs.${s}`,"must be a node id"):i.push(a)}return e.op==="not"?i.length!==1&&D(n,`${o}.inputs`,"not requires exactly one input"):(e.op==="and"||e.op==="or")&&i.length<2&&D(n,`${o}.inputs`,`${e.op} requires at least two inputs`),{id:e.id,type:"logic",op:e.op,inputs:i}}case"cross":return(typeof e.direction!="string"||!rne.has(e.direction))&&D(n,`${o}.direction`,"must be above|below"),(typeof e.left!="string"||!e.left)&&D(n,`${o}.left`,"must be a node id"),(typeof e.right!="string"||!e.right)&&D(n,`${o}.right`,"must be a node id"),{id:e.id,type:"cross",direction:e.direction,left:e.left,right:e.right};default:return null}}function cne(e,t,r){if(!zt(e))return D(t,"risk","must be a plain object"),null;zn(e,e2,"risk",t);for(let d of e2)(!(d in e)||e[d]==null)&&D(t,`risk.${d}`,"required field is missing");let n={},o=e.maxLeverage;!Fe(o)||o<=0||o>50?D(t,"risk.maxLeverage","must be a number > 0 and <= 50"):n.maxLeverage=o;let i=e.maxNotionalUsd;!Fe(i)||i<=0?D(t,"risk.maxNotionalUsd","must be a number > 0"):n.maxNotionalUsd=i;let s=e.positionSizePct;!Fe(s)||s<=0||s>100?D(t,"risk.positionSizePct","must be a number > 0 and <= 100"):n.positionSizePct=s;let a=e.stopLossPct;!Fe(a)||a<=0||a>100?D(t,"risk.stopLossPct","must be a number > 0 and <= 100"):n.stopLossPct=a;let A=e.takeProfitPct;!Fe(A)||A<=0||A>1e3?D(t,"risk.takeProfitPct","must be a number > 0 and <= 1000"):n.takeProfitPct=A;let c=e.cooldownBars;!Number.isInteger(c)||c<0||c>1e5?D(t,"risk.cooldownBars","must be an integer >= 0 and <= 100000"):n.cooldownBars=c;let l=e.maxDailyLossPct;!Fe(l)||l<=0||l>100?D(t,"risk.maxDailyLossPct","must be a number > 0 and <= 100"):n.maxDailyLossPct=l;let u=e.expiresAt;return!Number.isInteger(u)||u<=0?D(t,"risk.expiresAt","must be an integer epoch milliseconds > 0"):(r.nowMs!==void 0&&(Number.isInteger(r.nowMs)?u<=r.nowMs&&D(t,"risk.expiresAt","must be strictly greater than nowMs"):D(t,"nowMs","must be an integer epoch milliseconds")),n.expiresAt=u),n}function lne(e,t={}){let r=[];if(!zt(e))return D(r,"","strategy must be a plain object"),{ok:!1,errors:r,strategy:null};zn(e,X1,"",r);for(let u of X1)(!(u in e)||e[u]==null)&&D(r,u,"required field is missing");e.version!==UC&&D(r,"version",`must be ${UC}`),(typeof e.id!="string"||!a2.test(e.id))&&D(r,"id","must match /^[a-z0-9][a-z0-9._-]{0,63}$/"),(typeof e.name!="string"||e.name.length===0||e.name.length>o2)&&D(r,"name",`must be a non-empty string max ${o2}`);let n=Xd(e.venue);n||D(r,"venue",`unknown strategy venue "${String(e.venue)}"`);let o=null;if(!n)zt(e.market)||D(r,"market","must be a plain object");else{let u=n.validateMarket(e.market);if(!u||typeof u.ok!="boolean"||!Array.isArray(u.errors))D(r,"market",`venue ${n.id} returned an invalid market validation result`);else if(u.ok)o=u.market;else for(let d of u.errors)D(r,d.path,d.message)}let i=ane(e.parameters,r),s=null,a=new Map;if(!Array.isArray(e.nodes))D(r,"nodes","must be an array");else if(e.nodes.length>n2)D(r,"nodes",`too many nodes (max ${n2})`);else{s=[];for(let u=0;u<e.nodes.length;u++){let d=Ane(e.nodes[u],u,i||{},r);d&&(typeof d.id=="string"&&A2.test(d.id)&&(a.has(d.id)?D(r,`nodes.${u}.id`,`duplicate node id "${d.id}"`):a.set(d.id,d)),s.push(d))}for(let u=0;u<s.length;u++){let d=s[u],f=`nodes.${u}`;for(let p of Kd(d))a.has(p)||D(r,f,`unknown node ref "${p}"`);if(d.type==="indicator"||d.type==="compare"||d.type==="cross")for(let p of Kd(d)){let h=a.get(p);h&&LC.has(h.type)&&D(r,f,`node ref "${p}" must be numeric`)}if(d.type==="logic")for(let p of Kd(d)){let h=a.get(p);h&&!LC.has(h.type)&&D(r,f,`node ref "${p}" must be boolean`)}}sne(a)&&D(r,"nodes","graph contains a cycle")}let A=null;if(!zt(e.rules))D(r,"rules","must be a plain object");else{zn(e.rules,_C,"rules",r);for(let u of _C)u in e.rules||D(r,`rules.${u}`,"required field is missing");A={};for(let u of _C){let d=e.rules[u];if(d===null){A[u]=null;continue}if(typeof d!="string"||!d){D(r,`rules.${u}`,"must be a node id or null"),A[u]=d;continue}if(!a.has(d)){D(r,`rules.${u}`,`unknown node ref "${d}"`),A[u]=d;continue}let f=a.get(d);LC.has(f.type)||D(r,`rules.${u}`,`rule must reference a boolean node, not ${f.type}`),A[u]=d}}let c=cne(e.risk,r,t);if(r.length)return{ok:!1,errors:r,strategy:null};let l=OC({version:UC,id:e.id,name:e.name,venue:n.id,market:o,parameters:i,nodes:s,rules:A,risk:c});return{ok:!0,errors:[],strategy:l}}function an(e,t={}){let r=lne(e,t);if(!r.ok)throw new Ds(r.errors);return r.strategy}function une(e){let t=an(e);return JSON.stringify(qC(t))}function HC(e){let t=une(e);return Kre("sha256").update(t,"utf8").digest("hex")}function l2(e,t){if(!zt(e))throw new Ds([{path:"",message:"strategy must be a plain object"}]);if(!zt(t))throw new Ds([{path:"overrides",message:"must be a plain object"}]);let r=an(e),n={};for(let[i,s]of Object.entries(r.parameters))n[i]={value:s.value,min:s.min,max:s.max,step:s.step};let o=[];for(let[i,s]of Object.entries(t)){if(!Object.prototype.hasOwnProperty.call(n,i)){D(o,i,`unknown parameter "${i}"`);continue}let a=n[i];if(!Fe(s)){D(o,i,"override must be a finite number");continue}if(!c2(s,a.min,a.max,a.step)){D(o,i,"override must lie on the declared min/max/step grid");continue}n[i]={...a,value:s}}if(o.length)throw new Ds(o);return an({version:r.version,id:r.id,name:r.name,venue:r.venue,market:{coin:r.market.coin,interval:r.market.interval},parameters:n,nodes:r.nodes.map(i=>{let s={...i};return Array.isArray(i.inputs)&&(s.inputs=[...i.inputs]),s}),rules:{...r.rules},risk:{...r.risk}})}function JA(e){if(!Array.isArray(e))throw new TypeError("values must be an array");for(let t=0;t<e.length;t++){let r=e[t];if(typeof r!="number"||!Number.isFinite(r))throw new TypeError(`values[${t}] must be a finite number`)}}function jn(e){if(!Number.isInteger(e)||e<=0)throw new TypeError("period must be a positive integer")}function dne(e){if(!Array.isArray(e))throw new TypeError("bars must be an array");for(let t=0;t<e.length;t++){let r=e[t];if(r==null||typeof r!="object")throw new TypeError(`bars[${t}] must be an object`);for(let n of["o","h","l","c"]){let o=r[n];if(typeof o!="number"||!Number.isFinite(o))throw new TypeError(`bars[${t}].${n} must be a finite number`)}if(r.h<r.l)throw new TypeError(`bars[${t}] high must be >= low`)}}function d2(e,t){JA(e),jn(t);let r=new Array(e.length).fill(null);if(e.length<t)return r;let n=0;for(let o=0;o<e.length;o++)n+=e[o],o>=t&&(n-=e[o-t]),o>=t-1&&(r[o]=n/t);return r}function Zd(e,t){JA(e),jn(t);let r=new Array(e.length).fill(null);if(e.length<t)return r;let n=0;for(let s=0;s<t;s++)n+=e[s];let o=n/t;r[t-1]=o;let i=2/(t+1);for(let s=t;s<e.length;s++)o=i*e[s]+(1-i)*o,r[s]=o;return r}function f2(e,t){JA(e),jn(t);let r=new Array(e.length).fill(null);if(e.length<=t)return r;let n=0,o=0;for(let a=1;a<=t;a++){let A=e[a]-e[a-1];A>=0?n+=A:o-=A}let i=n/t,s=o/t;r[t]=u2(i,s);for(let a=t+1;a<e.length;a++){let A=e[a]-e[a-1],c=A>0?A:0,l=A<0?-A:0;i=(i*(t-1)+c)/t,s=(s*(t-1)+l)/t,r[a]=u2(i,s)}return r}function u2(e,t){return e===0&&t===0?50:t===0?100:e===0?0:100-100/(1+e/t)}function p2(e,t={}){JA(e);let r=t.fastPeriod,n=t.slowPeriod,o=t.signalPeriod;if(jn(r),jn(n),jn(o),r>=n)throw new TypeError("fastPeriod must be < slowPeriod");let i=Zd(e,r),s=Zd(e,n),a=new Array(e.length).fill(null);for(let u=0;u<e.length;u++)i[u]!=null&&s[u]!=null&&(a[u]=i[u]-s[u]);let A=new Array(e.length).fill(null),c=new Array(e.length).fill(null),l=[];for(let u=0;u<a.length;u++)a[u]!=null&&l.push(u);if(l.length>=o){let u=0;for(let h=0;h<o;h++)u+=a[l[h]];let d=u/o,f=l[o-1];A[f]=d,c[f]=a[f]-d;let p=2/(o+1);for(let h=o;h<l.length;h++){let g=l[h];d=p*a[g]+(1-p)*d,A[g]=d,c[g]=a[g]-d}}return{line:a,signal:A,histogram:c}}function h2(e,t={}){JA(e);let r=t.period,n=t.stdDev;if(jn(r),typeof n!="number"||!Number.isFinite(n)||n<=0)throw new TypeError("stdDev must be a finite number > 0");let o=new Array(e.length).fill(null),i=new Array(e.length).fill(null),s=new Array(e.length).fill(null);if(e.length<r)return{upper:i,middle:o,lower:s};let a=0,A=0;for(let c=0;c<e.length;c++){let l=e[c];if(a+=l,A+=l*l,c>=r){let u=e[c-r];a-=u,A-=u*u}if(c>=r-1){let u=a/r,d=A/r-u*u;d<0&&d>-1e-12&&(d=0);let f=Math.sqrt(d);o[c]=u,i[c]=u+n*f,s[c]=u-n*f}}return{upper:i,middle:o,lower:s}}function g2(e,t){dne(e),jn(t);let r=new Array(e.length).fill(null);if(e.length<t)return r;let n=new Array(e.length);for(let s=0;s<e.length;s++){let a=e[s];if(s===0)n[s]=a.h-a.l;else{let A=e[s-1].c;n[s]=Math.max(a.h-a.l,Math.abs(a.h-A),Math.abs(a.l-A))}}let o=0;for(let s=0;s<t;s++)o+=n[s];let i=o/t;r[t-1]=i;for(let s=t;s<e.length;s++)i=(i*(t-1)+n[s])/t,r[s]=i;return r}import{createHash as fne}from"node:crypto";var GC=2,pne="93f9c998260e73756c13871dc1a84dd6cdb26ec6113bd1941f023519939db440",hne="68f5b412a9975f04024cf9b9b6209b4bccedd52f176e95f34f786b3f53479c6a",gne="f197a38ff1c0f4ebe13326db8cbb8167ea3dd5d62e6033fe97c2fee8d23d96b5",m2=fne("sha256").update(JSON.stringify({version:GC,compilerSourceHash:pne,indicatorsSourceHash:hne,schemaSourceHash:gne})).digest("hex");var ef=GC,YC=m2,mne=Object.freeze({open:"o",high:"h",low:"l",close:"c",volume:"v",fundingRate:"fundingRate",openInterest:"openInterest"}),Ene=Object.freeze({"1m":6e4,"3m":18e4,"5m":3e5,"15m":9e5,"30m":18e5,"1h":36e5,"2h":72e5,"4h":144e5,"8h":288e5,"12h":432e5,"1d":864e5});function Ir(e){return typeof e=="number"&&Number.isFinite(e)}function Ine(e){let t=new Map(e.map(a=>[a.id,a])),r=a=>{switch(a.type){case"indicator":return a.input?[a.input]:[];case"compare":case"cross":return[a.left,a.right];case"logic":return[...a.inputs];default:return[]}},n=new Map,o=new Map;for(let a of e)n.set(a.id,0),o.set(a.id,[]);for(let a of e)for(let A of r(a))t.has(A)&&(o.get(A).push(a.id),n.set(a.id,n.get(a.id)+1));let i=[];for(let[a,A]of n)A===0&&i.push(a);let s=[];for(;i.length;){let a=i.shift();s.push(a);for(let A of o.get(a))n.set(A,n.get(A)-1),n.get(A)===0&&i.push(A)}if(s.length!==e.length)throw new Error("strategy graph is cyclic");return s}function Fs(e,t){return e!=null&&typeof e=="object"&&"param"in e?t[e.param].value:e}function Cne(e,t,r){if(!Array.isArray(e)||e.length===0)throw new TypeError("bars must be a non-empty array");if(!Number.isInteger(t)||t<0||t>=e.length)throw new RangeError("index out of range");let n=null;for(let o=0;o<=t;o++){let i=e[o];if(i==null||typeof i!="object"||Array.isArray(i))throw new TypeError(`bars[${o}] must be an object`);let{t:s,o:a,h:A,l:c,c:l,v:u}=i;if(!Ir(s)&&(typeof s=="number"&&Number.isFinite(s)),!Number.isFinite(s))throw new TypeError(`bars[${o}].t must be finite`);for(let[d,f]of[["o",a],["h",A],["l",c],["c",l],["v",u]])if(!Ir(f))throw new TypeError(`bars[${o}].${d} must be a finite number`);for(let[d,f]of[["o",a],["h",A],["l",c],["c",l]])if(!(f>0))throw new TypeError(`bars[${o}].${d} price must be positive`);if(u<0)throw new TypeError(`bars[${o}].v volume must be non-negative`);if(A<Math.max(a,l,c))throw new TypeError(`bars[${o}] high must be >= max(open, close, low)`);if(c>Math.min(a,l,A))throw new TypeError(`bars[${o}] low must be <= min(open, close, high)`);if(n!=null){if(!(s>n))throw new TypeError("bars t must be strictly increasing");if(s-n!==Ene[r])throw new TypeError(`bars t must match ${r} cadence`)}if(n=s,"fundingRate"in i&&i.fundingRate!=null&&!Ir(i.fundingRate))throw new TypeError(`bars[${o}].fundingRate must be finite when present`);if("openInterest"in i&&i.openInterest!=null){if(!Ir(i.openInterest))throw new TypeError(`bars[${o}].openInterest must be finite when present`);if(i.openInterest<0)throw new TypeError(`bars[${o}].openInterest must be non-negative`)}}}function Vo(e,t,r,n,o,i){if(i.has(e))return i.get(e);let s=t.get(e),a;switch(s.type){case"input":{let A=mne[s.field];a=new Array(o+1);for(let c=0;c<=o;c++){let l=n[c][A];a[c]=l===void 0?null:l}break}case"constant":{let A=Fs(s.value,r);a=new Array(o+1).fill(A);break}case"indicator":{let A=s.period!=null?Fs(s.period,r):void 0;if(s.indicator==="atr"){let u=[];for(let d=0;d<=o;d++){let f=n[d];u.push({o:f.o,h:f.h,l:f.l,c:f.c})}a=g2(u,A);break}let l=Vo(s.input,t,r,n,o,i).map((u,d)=>{if(u==null||!Ir(u))throw new TypeError(`indicator input ${s.input} has non-finite value at ${d}`);return u});if(s.indicator==="sma")a=d2(l,A);else if(s.indicator==="ema")a=Zd(l,A);else if(s.indicator==="rsi")a=f2(l,A);else if(s.indicator==="macd")a=p2(l,{fastPeriod:Fs(s.fastPeriod,r),slowPeriod:Fs(s.slowPeriod,r),signalPeriod:Fs(s.signalPeriod,r)})[s.output];else if(s.indicator==="bollinger")a=h2(l,{period:A,stdDev:Fs(s.stdDev,r)})[s.output];else throw new Error(`unsupported indicator ${s.indicator}`);break}case"compare":{let A=Vo(s.left,t,r,n,o,i),c=Vo(s.right,t,r,n,o,i);a=new Array(o+1);for(let l=0;l<=o;l++){let u=A[l],d=c[l];if(u==null||d==null||!Ir(u)||!Ir(d)){a[l]=!1;continue}switch(s.op){case"gt":a[l]=u>d;break;case"gte":a[l]=u>=d;break;case"lt":a[l]=u<d;break;case"lte":a[l]=u<=d;break;case"eq":a[l]=u===d;break;default:a[l]=!1}}break}case"logic":{let A=s.inputs.map(c=>Vo(c,t,r,n,o,i));a=new Array(o+1);for(let c=0;c<=o;c++)if(s.op==="not"){let l=A[0][c];a[c]=l===!0?!1:l===!1}else if(s.op==="and"){let l=!0;for(let u of A)if(u[c]!==!0){l=!1;break}a[c]=l}else if(s.op==="or"){let l=!1;for(let u of A)if(u[c]===!0){l=!0;break}a[c]=l}else a[c]=!1;break}case"cross":{let A=Vo(s.left,t,r,n,o,i),c=Vo(s.right,t,r,n,o,i);a=new Array(o+1),a[0]=!1;for(let l=1;l<=o;l++){let u=A[l-1],d=c[l-1],f=A[l],p=c[l];if(u==null||d==null||f==null||p==null||!Ir(u)||!Ir(d)||!Ir(f)||!Ir(p)){a[l]=!1;continue}s.direction==="above"?a[l]=u<=d&&f>p:a[l]=u>=d&&f<p}break}default:throw new Error(`unknown node type ${s.type}`)}return i.set(e,a),a}function VC(e,t={}){let r=an(e);t&&Object.keys(t).length&&(r=l2(r,t));let n=new Map(r.nodes.map(f=>[f.id,f])),o=Object.freeze(Ine(r.nodes)),i=r.parameters,s=new Set(r.nodes.filter(f=>f.type==="input").map(f=>f.field));if(r.nodes.some(f=>f.type==="indicator"&&f.indicator==="atr"))for(let f of["open","high","low","close"])s.add(f);let a=Object.freeze([...s].sort()),A=HC(r);function c(f,p){let h={};for(let m of o){let C=f.get(m);h[m]=C[p]}let g=m=>m!=null&&h[m]===!0;return{values:h,signals:{entryLong:g(r.rules.entryLong),entryShort:g(r.rules.entryShort),exitLong:g(r.rules.exitLong),exitShort:g(r.rules.exitShort)}}}function l(f,p){Cne(f,p,r.market.interval);let h=new Map;for(let g of o)Vo(g,n,i,f,p,h);return h}function u(f,p){return c(l(f,p),p)}function d(f){if(!Array.isArray(f)||f.length===0)throw new TypeError("bars must be a non-empty array");let p=f.length-1,h=l(f,p);return Object.freeze(f.map((g,m)=>Object.freeze(c(h,m))))}return Object.freeze({strategy:r,strategyHash:A,compilerVersion:ef,compilerHash:YC,requiredSeries:a,nodeOrder:o,evaluate:u,evaluateAll:d})}import{createHash as Bne}from"node:crypto";var bpe=Object.freeze({initialEquityUsd:1e4,takerFeeBps:3.5,builderFeeBps:2,slippageBps:2,latencyBars:1,maxVolumeParticipationPct:100});var yne=Object.freeze(["fail","pass_paper_only","pass_live_eligible"]);function Kn(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function WA(e){return typeof e=="number"&&Number.isFinite(e)}function Ms(e){if(Array.isArray(e))return e.map(Ms);if(e!=null&&typeof e=="object"){let t={};for(let r of Object.keys(e).sort())t[r]=Ms(e[r]);return t}return e}function E2(e){if(!Kn(e))throw new TypeError("evidence artifact must be a plain object");if(!yne.includes(e.status))throw new TypeError("evidence artifact status is invalid");for(let t of["strategyHash","compilerHash","barsHash"])if(typeof e[t]!="string"||!/^[0-9a-f]{64}$/.test(e[t]))throw new TypeError(`evidence artifact ${t} must be a sha256 hash`);if(!Kn(e.split))throw new TypeError("evidence artifact split required");if(!Array.isArray(e.flags))throw new TypeError("evidence artifact flags must be an array");if(!Kn(e.walkForward)||!Array.isArray(e.walkForward.windows))throw new TypeError("evidence artifact walkForward windows required");if(e.status==="pass_live_eligible"&&(!Kn(e.train)||!Kn(e.holdout)))throw new TypeError("live-eligible evidence artifact requires train and holdout facts");return Ms({barsHash:e.barsHash,compilerHash:e.compilerHash,flags:e.flags.map(t=>Ms(t)),holdout:e.holdout??null,split:e.split,status:e.status,strategyHash:e.strategyHash,train:e.train??null,walkForward:{passRate:e.walkForward.passRate,windowsRun:e.walkForward.windowsRun??e.walkForward.windows.length,windows:e.walkForward.windows.map(t=>({index:t.index,trainStartIndex:t.trainStartIndex,trainEndIndex:t.trainEndIndex,passed:t.passed,reason:t.reason,evalStartIndex:t.evalStartIndex,evalEndIndex:t.evalEndIndex,metrics:t.metrics}))}})}function Qne(e){return Bne("sha256").update(JSON.stringify(E2(e)),"utf8").digest("hex")}function Cr(e,t,r=0){if(!Number.isInteger(e)||e<r)throw new Error(`${t} must be an integer >= ${r}`);return e}function $C(e,t){if(!Kn(e)||!Kn(e.metrics))throw new Error(`${t} metrics required`);let r=Cr(e.tradeCount,`${t}.tradeCount`);if(e.metrics.tradeCount!==r)throw new Error(`${t} tradeCount contradicts metrics.tradeCount`);for(let n of["netPnlUsd","profitFactor","maxDrawdownPct"])if(!WA(e.metrics[n]))throw new Error(`${t}.metrics.${n} must be finite`);if(e.metrics.maxDrawdownPct<0)throw new Error(`${t}.metrics.maxDrawdownPct must be >= 0`);return e.metrics}function wne(e,{maxDailyLossPct:t}={}){let r=e.split,n=Cr(r.trainStartIndex,"split.trainStartIndex"),o=Cr(r.trainEndIndex,"split.trainEndIndex"),i=Cr(r.trainBarCount,"split.trainBarCount",1),s=Cr(r.holdoutStartIndex,"split.holdoutStartIndex"),a=Cr(r.holdoutEndIndex,"split.holdoutEndIndex"),A=Cr(r.holdoutBarCount,"split.holdoutBarCount",1);if(n!==0||o-n+1!==i||s!==o+1||a-s+1!==A)throw new Error("evidence split must be contiguous, chronological, and count-consistent");if(!WA(r.trainFraction)||r.trainFraction<=0||r.trainFraction>=1)throw new Error("split.trainFraction must be in (0,1)");$C(e.train,"train");let c=$C(e.holdout,"holdout");if(c.tradeCount<1||c.netPnlUsd<=0||c.profitFactor<=1)throw new Error("live-eligible holdout metrics do not pass");if(WA(t)&&c.maxDrawdownPct>t)throw new Error("live-eligible holdout drawdown exceeds strategy risk");if(e.flags.length>0)throw new Error("live-eligible evidence cannot contain failure flags");let l=e.walkForward,u=l.windows;if(u.length<1||l.windowsRun!==u.length)throw new Error("live-eligible walk-forward windowsRun must match nonempty windows");let d=0,f=-1;for(let h=0;h<u.length;h++){let g=u[h];if(!Kn(g)||g.index!==h||typeof g.passed!="boolean")throw new Error("walk-forward windows must be ordered and structurally valid");let m=Cr(g.trainStartIndex,`walkForward.windows[${h}].trainStartIndex`),C=Cr(g.trainEndIndex,`walkForward.windows[${h}].trainEndIndex`),E=Cr(g.evalStartIndex,`walkForward.windows[${h}].evalStartIndex`),I=Cr(g.evalEndIndex,`walkForward.windows[${h}].evalEndIndex`);if(m!==0||C>=E||E>I||E<=f)throw new Error("walk-forward windows must be chronological and disjoint");if(f=I,g.passed){if(d+=1,g.reason!=="pass")throw new Error("passed walk-forward window reason must be pass");let Q=$C({metrics:g.metrics,tradeCount:g.metrics?.tradeCount},`walkForward.windows[${h}]`);if(Q.tradeCount<1||Q.netPnlUsd<=0||Q.profitFactor<=1)throw new Error("passed walk-forward window metrics do not pass");if(WA(t)&&Q.maxDrawdownPct>t)throw new Error("passed walk-forward drawdown exceeds strategy risk")}else if(g.reason==="pass")throw new Error("failed walk-forward window cannot have pass reason")}let p=d/u.length;if(!WA(l.passRate)||Math.abs(l.passRate-p)>Number.EPSILON||p<.6)throw new Error("walk-forward passRate contradicts concrete windows or is below live threshold")}function I2(e,t={}){if(typeof e?.id!="string"||!/^[0-9a-f]{64}$/.test(e.id))throw new Error("evidence.id must be a sha256 evidence artifact hash");let r=E2(e),n=Ms({id:e.id,...r});if(JSON.stringify(Ms(e))!==JSON.stringify(n))throw new Error("evidence artifact contains fields unbound from its deterministic identity");let o=Qne(e);if(e.id!==o)throw new Error("evidence.id does not match its deterministic artifact facts digest");return e.status==="pass_live_eligible"&&wne(e,t),e}he();var bne=["privatekey","secretkey","seed","mnemonic","passphrase","password","keystore","keymaterial","apikey","authtoken","accesstoken","refreshtoken","credential","bearer","signature","authorization","xprv","xpriv","wif"];function zA(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function kne(e){return String(e).toLowerCase().replace(/[^a-z0-9]/g,"")}function WC(e,t="value"){if(Array.isArray(e)){e.forEach((r,n)=>WC(r,`${t}[${n}]`));return}if(zA(e))for(let[r,n]of Object.entries(e)){let o=kne(r);if(bne.some(i=>o.includes(i)))throw new Error(`handoff: forbidden secret-like field at ${t}.${r}`);WC(n,`${t}.${r}`)}}function JC(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function C2({strategy:e,evidence:t,shadow:r,caps:n,nowMs:o=Date.now(),env:i=process.env}={}){if(WC({strategy:e,evidence:t,shadow:r,caps:n},"handoff"),!zA(e))throw new Error("handoff: strategy required");if(!zA(t))throw new Error("handoff: evidence required");if(!zA(r))throw new Error("handoff: shadow required");if(!zA(n))throw new Error("handoff: caps required");if(typeof r.id!="string"||!r.id.trim())throw new Error("handoff: shadow.id required");if(typeof r.stateHash!="string"||!/^[0-9a-f]{64}$/.test(r.stateHash))throw new Error("handoff: shadow.stateHash must be a sha256 hash");if(r.status!=="running")throw new Error("handoff: shadow.status must be running");if(!Number.isInteger(r.cursor)||r.cursor<=0)throw new Error("handoff: shadow.cursor must be a positive integer");if(!Number.isInteger(r.updatedAt)||r.updatedAt<=0||r.updatedAt>o)throw new Error("handoff: shadow.updatedAt must be a positive integer <= nowMs");let s=an(e,{nowMs:o}),a=VC(s);if(I2(t,{maxDailyLossPct:s.risk.maxDailyLossPct}),t.status!=="pass_live_eligible")throw new Error("handoff: evidence.status must be pass_live_eligible");if(t.strategyHash!==a.strategyHash)throw new Error("handoff: evidence.strategyHash mismatch");if(t.compilerHash!==a.compilerHash)throw new Error("handoff: evidence.compilerHash mismatch");let A=["perStrategyNotionalUsd","maxLeverage","dailyLossCapUsd","chainAllowlist","assetAllowlist","expiresAt","killSwitchRequired"];for(let d of A)if(!(d in n)||n[d]==null)throw new Error(`handoff: caps.${d} required`);if(!JC(n.perStrategyNotionalUsd))throw new Error("handoff: caps.perStrategyNotionalUsd must be positive");if(n.perStrategyNotionalUsd>a.strategy.risk.maxNotionalUsd)throw new Error("handoff: caps.perStrategyNotionalUsd exceeds strategy.risk.maxNotionalUsd");if(!JC(n.maxLeverage))throw new Error("handoff: caps.maxLeverage must be positive");if(n.maxLeverage>a.strategy.risk.maxLeverage)throw new Error("handoff: caps.maxLeverage exceeds strategy.risk.maxLeverage");if(!JC(n.dailyLossCapUsd))throw new Error("handoff: caps.dailyLossCapUsd must be positive");let c=a.strategy.risk.maxNotionalUsd*(a.strategy.risk.maxDailyLossPct/100);if(n.dailyLossCapUsd>c)throw new Error("handoff: caps.dailyLossCapUsd exceeds strategy daily loss ceiling");if(!Array.isArray(n.chainAllowlist)||n.chainAllowlist.length===0)throw new Error("handoff: caps.chainAllowlist must be a non-empty array");if(!n.chainAllowlist.every(d=>d==="hyperliquid"))throw new Error("handoff: caps.chainAllowlist must include only hyperliquid");if(!n.chainAllowlist.includes("hyperliquid"))throw new Error("handoff: caps.chainAllowlist must include hyperliquid");if(!Array.isArray(n.assetAllowlist)||n.assetAllowlist.length===0)throw new Error("handoff: caps.assetAllowlist must be a non-empty array");if(n.assetAllowlist.length!==1||n.assetAllowlist[0]!==a.strategy.market.coin)throw new Error("handoff: caps.assetAllowlist must contain only the strategy market coin");if(!Number.isInteger(n.expiresAt)||!(n.expiresAt>o))throw new Error("handoff: caps.expiresAt must be an integer > nowMs");if(n.expiresAt>a.strategy.risk.expiresAt)throw new Error("handoff: caps.expiresAt exceeds strategy.risk.expiresAt");if(n.killSwitchRequired!==!0)throw new Error("handoff: caps.killSwitchRequired must be exactly true");let l={perStrategyNotionalUsd:n.perStrategyNotionalUsd,maxLeverage:n.maxLeverage,dailyLossCapUsd:n.dailyLossCapUsd,chainAllowlist:[...n.chainAllowlist],assetAllowlist:[...n.assetAllowlist],expiresAt:n.expiresAt,killSwitchRequired:!0},u={strategyHash:a.strategyHash,compilerHash:a.compilerHash,evidence:JSON.parse(JSON.stringify(t)),shadow:{id:r.id,stateHash:r.stateHash,status:r.status,cursor:r.cursor,updatedAt:r.updatedAt},compiled:{strategyHash:a.strategyHash,compilerHash:a.compilerHash,compilerVersion:ef,venue:"hyperliquid",market:{coin:a.strategy.market.coin,kind:"perp",interval:a.strategy.market.interval},risk:{...a.strategy.risk},strategy:JSON.parse(JSON.stringify(a.strategy))},arming:{liveBroadcast:!1,requiresExplicitUserArm:!0,caps:l},requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,executionReady:!1};return L(u,{provider:"hl-strategy",kind:"strategy-live-handoff",env:i})}var Sne=Object.freeze({"1m":6e4,"3m":18e4,"5m":3e5,"15m":9e5,"30m":18e5,"1h":36e5,"2h":72e5,"4h":144e5,"8h":288e5,"12h":432e5,"1d":864e5});function Ts(e,t){let r=Number(e);if(!Number.isFinite(r))throw new TypeError(`${t} must be finite`);return r}function Us(e,t){if(!Number.isSafeInteger(e)||e<0)throw new TypeError(`${t} must be a non-negative safe integer`);return e}function jA(e){if(Array.isArray(e))for(let t of e)jA(t);else if(e&&typeof e=="object")for(let t of Object.values(e))jA(t);return Object.freeze(e)}function xne(e){let t=Sne[e];if(!t)throw new TypeError(`unsupported strategy interval: ${e}`);return t}function vne(e,{endTime:t=Number.MAX_SAFE_INTEGER}={}){if(!Array.isArray(e))throw new TypeError("Hyperliquid candles must be an array");Us(t,"endTime");let r=new Map;for(let n=0;n<e.length;n++){let o=e[n];if(!o||typeof o!="object"||Array.isArray(o))throw new TypeError(`candles[${n}] must be an object`);let i=Us(Number(o.t),`candles[${n}].t`);if(Us(Number(o.T),`candles[${n}].T`)>t)continue;let a={t:i,o:Ts(o.o,`candles[${n}].o`),h:Ts(o.h,`candles[${n}].h`),l:Ts(o.l,`candles[${n}].l`),c:Ts(o.c,`candles[${n}].c`),v:Ts(o.v,`candles[${n}].v`)};if(a.h<Math.max(a.o,a.c,a.l))throw new TypeError(`candles[${n}].h is below another price`);if(a.l>Math.min(a.o,a.c,a.h))throw new TypeError(`candles[${n}].l is above another price`);if(a.v<0)throw new TypeError(`candles[${n}].v must be non-negative`);let A=r.get(i);if(A&&JSON.stringify(A)!==JSON.stringify(a))throw new TypeError(`conflicting duplicate candle at timestamp ${i}`);A||r.set(i,a)}return jA([...r.values()].sort((n,o)=>n.t-o.t))}function Nne(e,t){if(!Array.isArray(e))throw new TypeError("Hyperliquid funding history must be an array");let r=new Map;for(let n=0;n<e.length;n++){let o=e[n];if(!o||typeof o!="object"||Array.isArray(o))throw new TypeError(`funding[${n}] must be an object`);let i=Us(Number(o.time),`funding[${n}].time`);i>t||r.set(i,{time:i,fundingRate:Ts(o.fundingRate,`funding[${n}].fundingRate`)})}return[...r.values()].sort((n,o)=>n.time-o.time)}async function Rne({coin:e,startTime:t,endTime:r},n){let o=[],i=Math.max(0,t-288e5),s=!1;for(let a=0;a<16&&i<=r;a++){let A=await Ev({coin:e,startTime:i,endTime:r},n);if(!Array.isArray(A))throw new TypeError("Hyperliquid funding history must be an array");o.push(...A);let c=i;for(let l of A){let u=Number(l?.time);Number.isSafeInteger(u)&&u>c&&(c=u)}if(A.length<500||c>=r){s=!0;break}if(c<=i)throw new Error("Hyperliquid funding history pagination did not advance");i=c+1}if(!s)throw new Error("strategy history exceeds the bounded funding history limit");return Nne(o,r)}function Dne(e,t,r){let n=0,o=null;return e.map(i=>{let s=i.t+r,a=0;for(;n<t.length&&t[n].time<s;){let A=t[n];o=A.fundingRate,A.time>=i.t&&(a+=A.fundingRate),n+=1}return o==null?{...i,fundingPaymentRate:a}:{...i,fundingRate:o,fundingPaymentRate:a}})}async function B2(e,t={}){if(!e||typeof e!="object"||Array.isArray(e))throw new TypeError("strategy history input must be an object");let r=String(e.coin||"").trim().toUpperCase();if(!/^[A-Z0-9][A-Z0-9._-]{0,11}$/.test(r))throw new TypeError("coin must be an uppercase Hyperliquid asset id");let n=String(e.interval||"15m"),o=xne(n);if(e.endTime==null)throw new TypeError("endTime is required for deterministic history");let i=Us(e.endTime,"endTime"),s=e.count==null?1500:e.count;if(!Number.isInteger(s)||s<20||s>5e3)throw new TypeError("count must be an integer from 20 to 5000");let a=e.startTime==null?Math.max(0,i-s*o):Us(e.startTime,"startTime");if(a>=i)throw new TypeError("startTime must be before endTime");let[A,c]=await Promise.all([zi({coin:r,interval:n,startTime:a,endTime:i},t),Rne({coin:r,startTime:a,endTime:i},t)]),l=vne(A,{endTime:i}),u=jA(Dne(l,c,o));return jA({coin:r,interval:n,range:{startTime:a,endTime:i},bars:u})}var Fne=new Set(["1m","3m","5m","15m","30m","1h","2h","4h","8h","12h","1d"]),Mne=new Set(["coin","interval"]);function Tne(e){let t=[];if(!e||typeof e!="object"||Array.isArray(e))return{ok:!1,errors:[{path:"market",message:"must be a plain object"}],market:null};for(let r of Object.keys(e))Mne.has(r)||t.push({path:`market.${r}`,message:"unknown field is not allowed"});return(typeof e.coin!="string"||e.coin.length===0||e.coin.length>32)&&t.push({path:"market.coin",message:"must be a non-empty string max 32"}),(typeof e.interval!="string"||!Fne.has(e.interval))&&t.push({path:"market.interval",message:"must be a supported interval"}),t.length?{ok:!1,errors:t,market:null}:{ok:!0,errors:[],market:{coin:e.coin,interval:e.interval}}}async function Une(e={}){let t=await Au(e);if(!t||!Array.isArray(t.universe))throw new TypeError("Hyperliquid market metadata must contain universe");return Object.freeze(t.universe.map((r,n)=>{if(!r||typeof r.name!="string"||!r.name)throw new TypeError(`Hyperliquid market metadata universe[${n}].name is invalid`);return r.name}))}var y2=Object.freeze({id:"hyperliquid",validateMarket:Tne,fetchBars:B2,listMarkets:Une,prepareIntent(e){return C2(e)}});var Lne=Object.freeze(["id","validateMarket","prepareIntent"]);function _ne(e){if(!e||typeof e!="object"||Array.isArray(e))throw new TypeError("strategy venue adapter must be an object");if(typeof e.id!="string"||!/^[a-z0-9][a-z0-9._-]{0,63}$/.test(e.id))throw new TypeError("strategy venue adapter id is malformed");for(let t of Lne.slice(1))if(typeof e[t]!="function")throw new TypeError(`strategy venue adapter ${e.id} requires ${t}()`);for(let t of["fetchBars","listMarkets"])if(e[t]!=null&&typeof e[t]!="function")throw new TypeError(`strategy venue adapter ${e.id} ${t} must be a function`);return e}var Q2=[y2].map(_ne),Pne=new Map(Q2.map(e=>[e.id,e])),One=Object.freeze([...Q2]);function Xd(e){return typeof e!="string"?null:Pne.get(e)??null}function qne(e){let t=Xd(e);if(!t)throw new Error(`unknown strategy venue: ${String(e)}`);return t}var w2=Object.freeze(["price","wallet","risk","execution","security","nft","governance","system"]),Hne=new Set(w2);function tf(e){if(!Hne.has(e))throw new TypeError(`Unknown watch category: ${String(e)}`);return e}function zC(e={}){let t=e.subscribedCategories??[];if(!Array.isArray(t))throw new TypeError("subscribedCategories must be an array");return t}function b2(){return{subscribedCategories:[]}}function Gne(e,t){tf(t);let r=zC(e);return r.includes(t)?{...e,subscribedCategories:[...r]}:{...e,subscribedCategories:[...r,t]}}function Yne(e,t){tf(t);let r=zC(e);return{...e,subscribedCategories:r.filter(n=>n!==t)}}function Vne({category:e,notify:t=!1,...r}={}){if(tf(e),typeof t!="boolean")throw new TypeError("watch notify must be a boolean");return{...r,category:e,notify:t}}function $ne(e,t){return!(!t||t.notify!==!0||t.category!==e.category||e.watchId!==void 0&&t.id!==e.watchId)}function k2(e,t=b2(),r){if(!e||typeof e!="object")throw new TypeError("alert must be an object");return tf(e.category),zC(t).includes(e.category)?{deliver:!0,reason:"category-subscribed"}:$ne(e,r)?{deliver:!0,reason:"watch-opt-in"}:{deliver:!1,reason:"not-subscribed"}}function Jne(e,t,r){return k2(e,t,r).deliver}var S2=Object.freeze(["wallet","pool","nft_floor","hl_flow","prediction_market"]),Wne=Object.freeze({wallets:"wallet",smart_wallet:"wallet",pools:"pool",new_pool:"pool",nft:"nft_floor",nft_floors:"nft_floor",hyperliquid:"hl_flow",prediction:"prediction_market",prediction_markets:"prediction_market"}),et=(e,t=0,r=1)=>Math.min(r,Math.max(t,e)),gt=e=>Number.isFinite(Number(e))?Number(e):null,rf=e=>Math.round(e*1e4)/1e4;function x2(e){let t=String(e?.type??e?.surface??e?.kind??"").toLowerCase();return Wne[t]??t}function zne(e,t){return String(e?.id??e?.signalId??e?.asset??e?.market??e?.pool??e?.collection??`${x2(e)}:${t}`)}function jt(e,t,r,n=!0){!n||r===null||!Number.isFinite(r)||e.push({feature:t,value:rf(r)})}function jne(e,t){let r=gt(e.repeatBuys??e.repeat_buys??e.buyCount),n=gt(e.walletWinRate??e.winRate);jt(t,"repeat_buys",r===null?null:et((r-1)/4)*.38),jt(t,"wallet_win_rate",n===null?null:(et(n)-.5)*.5)}function Kne(e,t){let r=gt(e.ageHours??e.poolAgeHours),n=gt(e.liquidityUsd??e.liquidity),o=e.liquidityLocked??e.locked;jt(t,"pool_age",r===null?null:r<24?-.42:et(r/720)*.12),jt(t,"liquidity",n===null?null:(et(Math.log10(Math.max(1,n))/7)-.5)*.28),jt(t,"liquidity_lock",o==null?null:o?.12:-.28)}function Xne(e,t){let r=gt(e.floorChange??e.floorChangePct),n=gt(e.sales??e.saleCount);jt(t,"floor_change",r===null?null:et(r,-1,1)*.35),jt(t,"sales_depth",n===null?null:et(n/50)*.18)}function Zne(e,t){let r=gt(e.flowImbalance??e.imbalance),n=gt(e.fundingRate??e.funding);jt(t,"flow_imbalance",r===null?null:et(r,-1,1)*.42),jt(t,"funding",n===null?null:-et(n*100,-1,1)*.12)}function eoe(e,t){let r=gt(e.marketProbability??e.marketPrice??e.probability),n=gt(e.fairProbability??e.referenceProbability??e.fairValue);jt(t,"probability_mispricing",r===null||n===null?null:et(n-r,-1,1)*.65);let o=gt(e.liquidityUsd??e.liquidity);jt(t,"market_liquidity",o===null?null:et(Math.log10(Math.max(1,o))/6)*.12)}var toe=Object.freeze({wallet:jne,pool:Kne,nft_floor:Xne,hl_flow:Zne,prediction_market:eoe});function roe(e,t,r){let n=r.filter(i=>{let s=i?.signalId??i?.eventId??i?.id??i?.asset??i?.market;return s!=null&&String(s)===t});if(n.length===0)return null;let o=n.map(i=>gt(i.return??i.markout??i.pnl??i.value)).filter(i=>i!==null);return o.length===0?null:o.reduce((i,s)=>i+s,0)/o.length}function jC(e=[],t=[],r={}){if(!Array.isArray(e)||!Array.isArray(t))throw new TypeError("events and markouts must be arrays");let n=et(gt(r.minimumCoverage)??.5);return e.map((o,i)=>{let s=x2(o),a=zne(o,i),A=toe[s],c=[];A&&A(o,c);let l=s==="wallet"?2:s==="pool"?3:2,u=rf(et(c.length/l)),d=c.reduce((E,I)=>E+I.value,0),f=roe(o,a,t),p=f===null?0:et(f,-1,1)*.35;f!==null&&jt(c,"shadow_markout",p);let h=rf(et(.5+d+p)),g=f===null?.8:et(.85+f*.3,.35,1),m=rf(et(u*g)),C=["COLD_INTELLIGENCE_ONLY","NO_HOT_EXECUTION"];return A||C.push("UNSUPPORTED_SIGNAL_TYPE"),u<n&&C.push("LOW_COVERAGE","NO_TRADE"),m<.5&&C.push("LOW_CONFIDENCE","NO_TRADE"),s==="pool"&&(gt(o.ageHours??o.poolAgeHours)??1/0)<24&&C.push("NEW_POOL_RISK","NO_TRADE"),f!==null&&f<0&&C.push("NEGATIVE_MARKOUT"),{id:a,type:s,score:h,confidence:m,coverage:u,contributions:c,flags:[...new Set(C)],noTrade:C.includes("NO_TRADE"),executionAllowed:!1}}).sort((o,i)=>i.score-o.score||i.confidence-o.confidence||o.id.localeCompare(i.id))}function v2(e={}){return Object.freeze({score(t,r=[],n={}){return jC(t,r,{...e,...n})}})}import{mkdir as noe,chmod as nf,readFile as ooe,rename as ioe,writeFile as soe}from"node:fs/promises";import{homedir as aoe}from"node:os";import{dirname as N2,join as KC}from"node:path";import Aoe from"sql.js";var af=Object.freeze(["project","entity","source","thesis","strategy","simulation","prepared_action","receipt","position"]),coe=new Set(af),loe=new Set(af.slice(0,-1).map((e,t)=>`${e}:${af[t+1]}`)),D2=KC(process.env.ORACLE_CONFIG_DIR||KC(aoe(),".config","oracle"),"workspace"),F2=KC(D2,"artifacts.sqlite");function Af(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(Af).join(",")}]`:`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${Af(e[t])}`).join(",")}}`}function R2(e){if(!coe.has(e))throw new TypeError(`unknown artifact type: ${e}`);return e}function of(e){let t=[];for(;e.step();)t.push(e.getAsObject());return e.free(),t}function sf(e){return e?{id:e.id,type:e.type,createdAt:e.created_at,data:JSON.parse(e.data_json)}:null}async function M2(e={}){let t=e.path||F2;await noe(N2(t),{recursive:!0,mode:448}),await nf(N2(t),448);let r;try{r=await ooe(t)}catch(c){if(c.code!=="ENOENT")throw c}let n=await Aoe(e.sqlJs||{}),o=r?new n.Database(r):new n.Database;o.run(`
|
|
193
237
|
PRAGMA foreign_keys=ON;
|
|
194
238
|
CREATE TABLE IF NOT EXISTS artifacts (
|
|
195
239
|
id TEXT PRIMARY KEY, type TEXT NOT NULL, created_at TEXT NOT NULL, data_json TEXT NOT NULL
|
|
@@ -201,4 +245,4 @@ anchor-lang = "0.31.1"
|
|
|
201
245
|
CREATE TABLE IF NOT EXISTS action_receipts (
|
|
202
246
|
artifact_id TEXT PRIMARY KEY REFERENCES artifacts(id), receipt_json TEXT NOT NULL
|
|
203
247
|
);
|
|
204
|
-
`);let i=!1,s=Promise.resolve();function a(){let
|
|
248
|
+
`);let i=!1,s=Promise.resolve();function a(){let c=async()=>{let l=`${t}.tmp-${process.pid}`;await soe(l,Buffer.from(o.export()),{mode:384}),await nf(l,384),await ioe(l,t),await nf(t,384)};return s=s.then(c,c),s}r?await nf(t,384):await a();function A(){if(i)throw new Error("artifact store is closed")}return{path:t,async putArtifact(c){if(A(),!c||typeof c!="object")throw new TypeError("artifact object required");let l=R2(String(c.type)),u=String(c.id||"").trim();if(!u)throw new TypeError("artifact id required");let d=ur(c.data??{}),f=String(c.createdAt||new Date().toISOString());return o.run("INSERT INTO artifacts(id,type,created_at,data_json) VALUES(?,?,?,?)",[u,l,f,Af(d)]),await a(),{id:u,type:l,createdAt:f,data:d}},getArtifact(c){A();let l=o.prepare("SELECT * FROM artifacts WHERE id=?");l.bind([String(c)]);let u=l.step()?sf(l.getAsObject()):null;return l.free(),u},listArtifacts(c){A();let l=c===void 0?o.prepare("SELECT * FROM artifacts ORDER BY created_at,id"):(R2(String(c)),o.prepare("SELECT * FROM artifacts WHERE type=? ORDER BY created_at,id"));return c!==void 0&&l.bind([String(c)]),of(l).map(sf)},async link(c,l){A();let u=o.prepare("SELECT id,type FROM artifacts WHERE id IN (?,?)");u.bind([String(c),String(l)]);let d=of(u),f=d.find(h=>h.id===String(c)),p=d.find(h=>h.id===String(l));if(!f||!p)throw new TypeError("edge endpoints must exist");if(!loe.has(`${f.type}:${p.type}`))throw new TypeError(`invalid artifact edge: ${f.type} -> ${p.type}`);return o.run("INSERT INTO artifact_edges(parent_id,child_id) VALUES(?,?)",[f.id,p.id]),await a(),{parentId:f.id,childId:p.id}},children(c){A();let l=o.prepare("SELECT a.* FROM artifacts a JOIN artifact_edges e ON e.child_id=a.id WHERE e.parent_id=? ORDER BY a.created_at,a.id");return l.bind([String(c)]),of(l).map(sf)},parents(c){A();let l=o.prepare("SELECT a.* FROM artifacts a JOIN artifact_edges e ON e.parent_id=a.id WHERE e.child_id=? ORDER BY a.created_at,a.id");return l.bind([String(c)]),of(l).map(sf)},async putReceipt(c,l){A();let u=this.getArtifact(c);if(!u||u.type!=="receipt")throw new TypeError("receipt boundary requires a receipt artifact");let d=ur(l);return o.run("INSERT INTO action_receipts(artifact_id,receipt_json) VALUES(?,?)",[String(c),Af(d)]),await a(),d},getReceipt(c){A();let l=o.prepare("SELECT receipt_json FROM action_receipts WHERE artifact_id=?");l.bind([String(c)]);let u=l.step()?JSON.parse(l.getAsObject().receipt_json):null;return l.free(),u},async close(){i||(await a(),o.close(),i=!0)}}}var uoe=M2;import{createHash as T2}from"node:crypto";var doe=new Set(["accesstoken","refreshtoken","idtoken","token","apikey","clientsecret","password","auth","jwt","session","secret","key","code","signature","xamzsignature","privatekey","authorization","bearer","credential"]);function foe(e){return doe.has(String(e).replace(/[^a-z0-9]/gi,"").toLowerCase())}function cf(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(cf).join(",")}]`:`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${cf(e[t])}`).join(",")}}`}function U2(e){return T2("sha256").update(String(e)).digest("hex")}function L2(e){let t;try{t=new URL(String(e))}catch{throw new TypeError("research source URL must be valid")}if(!/^https?:$/.test(t.protocol))throw new TypeError("research source URL must be http(s)");if(t.username||t.password)throw new TypeError("research source URL must not contain credentials");for(let r of t.searchParams.keys())if(foe(r))throw new TypeError("research source URL must not contain sensitive query parameters");return t.toString()}function _2(e){if(e==null||e==="")throw new TypeError("research fetchedAt required");let t=new Date(e);if(!Number.isFinite(t.getTime()))throw new TypeError("research fetchedAt must be a valid timestamp");return t.toISOString()}function lf(e={}){let t=L2(e.url??e.sourceUrl),r=_2(e.fetchedAt),n=String(e.contentHash||"").toLowerCase();if(!/^[0-9a-f]{64}$/.test(n))throw new TypeError("research citation contentHash must be 64 lowercase hex characters");return Object.freeze(ur({url:t,fetchedAt:r,contentHash:n}))}function poe(e={}){let t=L2(e.sourceUrl??e.url),r=String(e.snapshot??e.content??"");if(!r)throw new TypeError("research snapshot required");let n=String(e.claim||"").trim();if(!n)throw new TypeError("research claim required");let o=Number(e.confidence);if(!Number.isFinite(o)||o<0||o>1)throw new TypeError("research confidence must be between 0 and 1");let i=_2(e.fetchedAt),s=U2(r);if(!Array.isArray(e.contradictions??[]))throw new TypeError("research contradictions must be an array");let a=(e.citations||[{url:t,fetchedAt:i,contentHash:s}]).map(lf),A=ur({sourceUrl:t,fetchedAt:i,contentHash:s,snapshot:r,claim:n,confidence:o,contradictions:(e.contradictions||[]).map(String),citations:a});return Object.freeze({id:`research:${T2("sha256").update(cf(A)).digest("hex")}`,...A})}var hoe=cf;function XC(e={}){let t=String(e.origin||e.kind||"");if(t!=="agent_recommendation"&&t!=="direct_user")throw new TypeError("prepared action origin must be agent_recommendation or direct_user");let r=Array.isArray(e.citations)?e.citations.map(lf):[];if(t==="agent_recommendation"&&r.length===0)throw new TypeError("agent_recommendation prepared actions require evidence citations");return Object.freeze(ur({...e,origin:t,citations:Object.freeze(r)}))}var goe=XC,moe=XC;export{Wn as ACTION_MODES,CD as ACTION_RECEIPT_VERSION,F1 as ALLOWED_SCOPES,af as ARTIFACT_TYPES,ps as ActionReceiptSecretError,hre as BUILD_SCOPE,Oa as CHAINS,xn as CHAIN_CONFIGS,O1 as DEFAULT_RISK_THRESHOLDS,M1 as DEFAULT_SCOPES,D2 as DEFAULT_WORKSPACE_DIR,F2 as DEFAULT_WORKSPACE_PATH,Z as EVIDENCE,pre as EXECUTE_SCOPE,yC as GRANT_VERSION,GA as GrantValidationError,Tu as NftGasWarLimitError,rE as OPENSEA_EVM_CHAIN_IDS,hf as PREPARE_HARD_MAX_AGE_MS,Ps as PREPARE_MAX_AGE_MS,pf as PREPARE_VERSION,fr as QUALITY,j as RISK,Ji as SCANNER_CAPABILITIES,We as SELL_SIM,S2 as SIGNAL_TYPES,Wd as TRADE_STATES,DC as TRADE_TRANSITIONS,w2 as WATCH_CATEGORIES,C1 as actionModeForVerb,K1 as advanceTradeLifecycle,rre as assertActionRecord,zW as assertCapability,eE as assertNftMintGasWar,ur as assertNoReceiptSecrets,X2 as assertPreparedEnvelope,moe as assertRecommendationEvidence,Xte as assertSellable,MC as assertTradeLifecycle,Zi as autonomousTradingEnabled,iee as bestBridgeRoute,Yte as bestEquityRoute,oee as bestSwapRoute,yD as canonicalReceiptJson,hoe as canonicalResearchJson,wC as canonicalizeGrant,$N as capabilityStatus,$l as chainById,m1 as collectEquityQuotes,mf as computePrepareHash,Ef as computePrepareMac,QD as computeReceiptId,U2 as contentHash,Fz as createActionReceipt,tre as createActionRecord,uoe as createArtifactStore,bre as createHarnessConfigs,Ure as createPortfolioLedger,goe as createPreparedAction,poe as createResearchArtifact,av as createScanner,v2 as createSignalsEngine,Yre as createTradeLifecycle,Vne as createWatch,ZZ as data,k as dataCall,wL as dataCatalog,yL as dataHealth,b2 as defaultPreferences,P1 as emitHarnessConfigs,Jte as equityToJsonSafe,Vte as equityVenues,k2 as evaluateAlert,jM as executeRfqCandidates,Mz as formatActionReceipt,iu as getProvider,lm as getScanner,D1 as grantId,JM as hashFirmQuote,$M as hashRfqIntent,jre as healthRollup,nre as isActiveAlert,ore as isActiveExecution,Wg as isSupportedChain,Ka as listProviders,um as listScanners,ire as migrateLegacyWatchRecord,wD as normalizeActionReceipt,lf as normalizeCitation,hI as normalizeFirmQuote,QC as normalizeGrant,yd as normalizeRfqIntent,gre as normalizeScopes,M2 as openArtifactStore,uA as openseaBestListings,sE as openseaPrepareBuy,cE as openseaPrepareCancel,fA as openseaPrepareList,AE as openseaPrepareMint,aE as openseaPrepareSweep,Lre as portfolioLedger,Nre as portfolioRiskSummary,jW as posture,XC as prepareAction,$te as prepareEquityRoute,zre as providerHealthRollup,KM as rankRfqQuotes,za as registerBuiltinScanners,C9 as registerChain,pv as registerCustomChain,M as registerProvider,nu as registerScanner,gI as requestRfqQuotes,qne as requireStrategyVenue,rB as resolvePrepareMaxAgeMs,Xd as resolveStrategyVenue,TC as rollupProviderHealth,Jg as rpcUrlFor,n8 as scannerCoverage,jC as scoreSignals,Jne as shouldDeliverAlert,I1 as simulateSell,zM as sourceCandidates,L as stampPrepared,One as strategyVenues,Gne as subscribe,bD as summarizeActionReceipt,NC as summarizePortfolioLedger,Vd as summarizePortfolioRisk,Vre as transitionTradeLifecycle,Yne as unsubscribe,R1 as validateGrant,Uu as validateNftMintGasWar,sv as validateScanner,$re as verifyTradeLifecycle};
|