@oracle-agent/oracle 0.25.0 → 0.25.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/assets/graphics/assets/arbitrum-lockup.png +0 -0
  2. package/dist/assets/graphics/assets/avalanche-lockup.png +0 -0
  3. package/dist/assets/graphics/assets/base-lockup.png +0 -0
  4. package/dist/assets/graphics/assets/bitcoin-lockup.png +0 -0
  5. package/dist/assets/graphics/assets/bnb-lockup.png +0 -0
  6. package/dist/assets/graphics/assets/ethereum-lockup.png +0 -0
  7. package/dist/assets/graphics/assets/hyperliquid-lockup.png +0 -0
  8. package/dist/assets/graphics/assets/optimism-lockup.png +0 -0
  9. package/dist/assets/graphics/assets/oracle-globe.png +0 -0
  10. package/dist/assets/graphics/assets/polygon-lockup.png +0 -0
  11. package/dist/assets/graphics/assets/polymarket-lockup.png +0 -0
  12. package/dist/assets/graphics/assets/polymarket.png +0 -0
  13. package/dist/assets/graphics/assets/robinhood-lockup.png +0 -0
  14. package/dist/assets/graphics/assets/solana-lockup.png +0 -0
  15. package/dist/assets/graphics/assets/stable-lockup.png +0 -0
  16. package/dist/assets/graphics/fonts/CormorantGaramond-Bold.ttf +0 -0
  17. package/dist/assets/graphics/fonts/RobotoMono-Bold.ttf +0 -0
  18. package/dist/assets/graphics/fonts/dmmono-Medium.ttf +0 -0
  19. package/dist/assets/graphics/oracle_card.py +1165 -0
  20. package/dist/assets/skills/oracle-desk-product/SKILL.md +1 -1
  21. package/dist/bin/desk-server.mjs +44 -44
  22. package/dist/bin/oracle-data-mcp.mjs +68 -27
  23. package/dist/bin/oracle-public-server.mjs +15 -15
  24. package/dist/bin/oracle-route.mjs +1 -1
  25. package/dist/cli/commands/chat.mjs +94 -94
  26. package/dist/cli/commands/doctor.mjs +3 -3
  27. package/dist/cli/commands/eval.mjs +27 -27
  28. package/dist/cli/commands/farm.mjs +57 -57
  29. package/dist/cli/commands/model.mjs +98 -98
  30. package/dist/cli/commands/receipt.mjs +2 -2
  31. package/dist/cli/commands/sign.mjs +13 -13
  32. package/dist/cli/commands/signer.mjs +13 -13
  33. package/dist/cli/commands/strategy.mjs +1 -1
  34. package/dist/cli/commands/swap.mjs +1 -1
  35. package/dist/cli/commands/venues.mjs +2 -2
  36. package/dist/data/desk-data.mjs +42 -42
  37. package/dist/index.mjs +51 -51
  38. package/dist/local-signer/index.mjs +3 -3
  39. package/dist/nft/index.mjs +1 -1
  40. package/dist/prepare-envelope.mjs +1 -1
  41. package/dist/public-api/agent-grants.mjs +3 -3
  42. package/dist/router/index.mjs +10 -10
  43. package/dist/router/prepare-bridge.mjs +1 -1
  44. package/dist/strategy/index.mjs +1 -1
  45. package/package.json +1 -1
@@ -43,7 +43,7 @@ ${r.count} ${r.noun} ${r.is} pending:
43
43
  ${A.format(t)}
44
44
  `.trim())}};nh.exports=rg});var wi=p((SY,ch)=>{"use strict";var ih=Symbol.for("undici.globalDispatcher.1"),{InvalidArgumentError:zF}=Z(),ZF=fr();ah()===void 0&&oh(new ZF);function oh(e){if(!e||typeof e.dispatch!="function")throw new zF("Argument agent must implement Agent");Object.defineProperty(globalThis,ih,{value:e,writable:!0,enumerable:!1,configurable:!1})}function ah(){return globalThis[ih]}ch.exports={setGlobalDispatcher:oh,getGlobalDispatcher:ah}});var yi=p((MY,gh)=>{"use strict";gh.exports=class{#e;constructor(A){if(typeof A!="object"||A===null)throw new TypeError("handler must be an object");this.#e=A}onConnect(...A){return this.#e.onConnect?.(...A)}onError(...A){return this.#e.onError?.(...A)}onUpgrade(...A){return this.#e.onUpgrade?.(...A)}onResponseStarted(...A){return this.#e.onResponseStarted?.(...A)}onHeaders(...A){return this.#e.onHeaders?.(...A)}onData(...A){return this.#e.onData?.(...A)}onComplete(...A){return this.#e.onComplete?.(...A)}onBodySent(...A){return this.#e.onBodySent?.(...A)}}});var Qh=p((UY,lh)=>{"use strict";var _F=ei();lh.exports=e=>{let A=e?.maxRedirections;return t=>function(n,s){let{maxRedirections:i=A,...o}=n;if(!i)return t(n,s);let a=new _F(t,i,n,s);return t(o,a)}}});var Bh=p((LY,Eh)=>{"use strict";var KF=li();Eh.exports=e=>A=>function(r,n){return A(r,new KF({...r,retryOptions:{...e,...r.retryOptions}},{handler:n,dispatch:A}))}});var Ih=p((TY,uh)=>{"use strict";var XF=v(),{InvalidArgumentError:jF,RequestAbortedError:$F}=Z(),eR=yi(),ng=class extends eR{#e=1024*1024;#A=null;#t=!1;#s=!1;#n=0;#r=null;#i=null;constructor({maxSize:A},t){if(super(t),A!=null&&(!Number.isFinite(A)||A<1))throw new jF("maxSize must be a number greater than 0");this.#e=A??this.#e,this.#i=t}onConnect(A){this.#A=A,this.#i.onConnect(this.#o.bind(this))}#o(A){this.#s=!0,this.#r=A}onHeaders(A,t,r,n){let i=XF.parseHeaders(t)["content-length"];if(i!=null&&i>this.#e)throw new $F(`Response size (${i}) larger than maxSize (${this.#e})`);return this.#s?!0:this.#i.onHeaders(A,t,r,n)}onError(A){this.#t||(A=this.#r??A,this.#i.onError(A))}onData(A){return this.#n=this.#n+A.length,this.#n>=this.#e&&(this.#t=!0,this.#s?this.#i.onError(this.#r):this.#i.onComplete([])),!0}onComplete(A){if(!this.#t){if(this.#s){this.#i.onError(this.reason);return}this.#i.onComplete(A)}}};function AR({maxSize:e}={maxSize:1024*1024}){return A=>function(r,n){let{dumpMaxSize:s=e}=r,i=new ng({maxSize:s},n);return A(r,i)}}uh.exports=AR});var fh=p((xY,Ch)=>{"use strict";var{isIP:tR}=y("node:net"),{lookup:rR}=y("node:dns"),nR=yi(),{InvalidArgumentError:Sr,InformationalError:sR}=Z(),hh=Math.pow(2,31)-1,sg=class{#e=0;#A=0;#t=new Map;dualStack=!0;affinity=null;lookup=null;pick=null;constructor(A){this.#e=A.maxTTL,this.#A=A.maxItems,this.dualStack=A.dualStack,this.affinity=A.affinity,this.lookup=A.lookup??this.#s,this.pick=A.pick??this.#n}get full(){return this.#t.size===this.#A}runLookup(A,t,r){let n=this.#t.get(A.hostname);if(n==null&&this.full){r(null,A.origin);return}let s={affinity:this.affinity,dualStack:this.dualStack,lookup:this.lookup,pick:this.pick,...t.dns,maxTTL:this.#e,maxItems:this.#A};if(n==null)this.lookup(A,s,(i,o)=>{if(i||o==null||o.length===0){r(i??new sR("No DNS entries found"));return}this.setRecords(A,o);let a=this.#t.get(A.hostname),g=this.pick(A,a,s.affinity),l;typeof g.port=="number"?l=`:${g.port}`:A.port!==""?l=`:${A.port}`:l="",r(null,`${A.protocol}//${g.family===6?`[${g.address}]`:g.address}${l}`)});else{let i=this.pick(A,n,s.affinity);if(i==null){this.#t.delete(A.hostname),this.runLookup(A,t,r);return}let o;typeof i.port=="number"?o=`:${i.port}`:A.port!==""?o=`:${A.port}`:o="",r(null,`${A.protocol}//${i.family===6?`[${i.address}]`:i.address}${o}`)}}#s(A,t,r){rR(A.hostname,{all:!0,family:this.dualStack===!1?this.affinity:0,order:"ipv4first"},(n,s)=>{if(n)return r(n);let i=new Map;for(let o of s)i.set(`${o.address}:${o.family}`,o);r(null,i.values())})}#n(A,t,r){let n=null,{records:s,offset:i}=t,o;if(this.dualStack?(r==null&&(i==null||i===hh?(t.offset=0,r=4):(t.offset++,r=(t.offset&1)===1?6:4)),s[r]!=null&&s[r].ips.length>0?o=s[r]:o=s[r===4?6:4]):o=s[r],o==null||o.ips.length===0)return n;o.offset==null||o.offset===hh?o.offset=0:o.offset++;let a=o.offset%o.ips.length;return n=o.ips[a]??null,n==null?n:Date.now()-n.timestamp>n.ttl?(o.ips.splice(a,1),this.pick(A,t,r)):n}setRecords(A,t){let r=Date.now(),n={records:{4:null,6:null}};for(let s of t){s.timestamp=r,typeof s.ttl=="number"?s.ttl=Math.min(s.ttl,this.#e):s.ttl=this.#e;let i=n.records[s.family]??{ips:[]};i.ips.push(s),n.records[s.family]=i}this.#t.set(A.hostname,n)}getHandler(A,t){return new ig(this,A,t)}},ig=class extends nR{#e=null;#A=null;#t=null;#s=null;#n=null;constructor(A,{origin:t,handler:r,dispatch:n},s){super(r),this.#n=t,this.#s=r,this.#A={...s},this.#e=A,this.#t=n}onError(A){switch(A.code){case"ETIMEDOUT":case"ECONNREFUSED":{if(this.#e.dualStack){this.#e.runLookup(this.#n,this.#A,(t,r)=>{if(t)return this.#s.onError(t);let n={...this.#A,origin:r};this.#t(n,this)});return}this.#s.onError(A);return}case"ENOTFOUND":this.#e.deleteRecord(this.#n);default:this.#s.onError(A);break}}};Ch.exports=e=>{if(e?.maxTTL!=null&&(typeof e?.maxTTL!="number"||e?.maxTTL<0))throw new Sr("Invalid maxTTL. Must be a positive number");if(e?.maxItems!=null&&(typeof e?.maxItems!="number"||e?.maxItems<1))throw new Sr("Invalid maxItems. Must be a positive number and greater than zero");if(e?.affinity!=null&&e?.affinity!==4&&e?.affinity!==6)throw new Sr("Invalid affinity. Must be either 4 or 6");if(e?.dualStack!=null&&typeof e?.dualStack!="boolean")throw new Sr("Invalid dualStack. Must be a boolean");if(e?.lookup!=null&&typeof e?.lookup!="function")throw new Sr("Invalid lookup. Must be a function");if(e?.pick!=null&&typeof e?.pick!="function")throw new Sr("Invalid pick. Must be a function");let A=e?.dualStack??!0,t;A?t=e?.affinity??null:t=e?.affinity??4;let r={maxTTL:e?.maxTTL??1e4,lookup:e?.lookup??null,pick:e?.pick??null,dualStack:A,affinity:t,maxItems:e?.maxItems??1/0},n=new sg(r);return s=>function(o,a){let g=o.origin.constructor===URL?o.origin:new URL(o.origin);return tR(g.hostname)!==0?s(o,a):(n.runLookup(g,o,(l,c)=>{if(l)return a.onError(l);let Q=null;Q={...o,servername:g.hostname,origin:c,headers:{host:g.hostname,...o.headers}},s(Q,n.getHandler({origin:g,dispatch:s,handler:a},o))}),!0)}}});var xt=p((YY,kh)=>{"use strict";var{kConstruct:iR}=Qe(),{kEnumerableProperty:Nr}=v(),{iteratorMixin:oR,isValidHeaderName:Yn,isValidHeaderValue:wh}=Oe(),{webidl:z}=Se(),og=y("node:assert"),pi=y("node:util"),ye=Symbol("headers map"),Ke=Symbol("headers map sorted");function dh(e){return e===10||e===13||e===9||e===32}function yh(e){let A=0,t=e.length;for(;t>A&&dh(e.charCodeAt(t-1));)--t;for(;t>A&&dh(e.charCodeAt(A));)++A;return A===0&&t===e.length?e:e.substring(A,t)}function ph(e,A){if(Array.isArray(A))for(let t=0;t<A.length;++t){let r=A[t];if(r.length!==2)throw z.errors.exception({header:"Headers constructor",message:`expected name/value pair to be length 2, found ${r.length}.`});ag(e,r[0],r[1])}else if(typeof A=="object"&&A!==null){let t=Object.keys(A);for(let r=0;r<t.length;++r)ag(e,t[r],A[t[r]])}else throw z.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence<sequence<ByteString>>","record<ByteString, ByteString>"]})}function ag(e,A,t){if(t=yh(t),Yn(A)){if(!wh(t))throw z.errors.invalidArgument({prefix:"Headers.append",value:t,type:"header value"})}else throw z.errors.invalidArgument({prefix:"Headers.append",value:A,type:"header name"});if(Dh(e)==="immutable")throw new TypeError("immutable");return cg(e).append(A,t,!1)}function mh(e,A){return e[0]<A[0]?-1:1}var mi=class e{cookies=null;constructor(A){A instanceof e?(this[ye]=new Map(A[ye]),this[Ke]=A[Ke],this.cookies=A.cookies===null?null:[...A.cookies]):(this[ye]=new Map(A),this[Ke]=null)}contains(A,t){return this[ye].has(t?A:A.toLowerCase())}clear(){this[ye].clear(),this[Ke]=null,this.cookies=null}append(A,t,r){this[Ke]=null;let n=r?A:A.toLowerCase(),s=this[ye].get(n);if(s){let i=n==="cookie"?"; ":", ";this[ye].set(n,{name:s.name,value:`${s.value}${i}${t}`})}else this[ye].set(n,{name:A,value:t});n==="set-cookie"&&(this.cookies??=[]).push(t)}set(A,t,r){this[Ke]=null;let n=r?A:A.toLowerCase();n==="set-cookie"&&(this.cookies=[t]),this[ye].set(n,{name:A,value:t})}delete(A,t){this[Ke]=null,t||(A=A.toLowerCase()),A==="set-cookie"&&(this.cookies=null),this[ye].delete(A)}get(A,t){return this[ye].get(t?A:A.toLowerCase())?.value??null}*[Symbol.iterator](){for(let{0:A,1:{value:t}}of this[ye])yield[A,t]}get entries(){let A={};if(this[ye].size!==0)for(let{name:t,value:r}of this[ye].values())A[t]=r;return A}rawValues(){return this[ye].values()}get entriesList(){let A=[];if(this[ye].size!==0)for(let{0:t,1:{name:r,value:n}}of this[ye])if(t==="set-cookie")for(let s of this.cookies)A.push([r,s]);else A.push([r,n]);return A}toSortedArray(){let A=this[ye].size,t=new Array(A);if(A<=32){if(A===0)return t;let r=this[ye][Symbol.iterator](),n=r.next().value;t[0]=[n[0],n[1].value],og(n[1].value!==null);for(let s=1,i=0,o=0,a=0,g=0,l,c;s<A;++s){for(c=r.next().value,l=t[s]=[c[0],c[1].value],og(l[1]!==null),a=0,o=s;a<o;)g=a+(o-a>>1),t[g][0]<=l[0]?a=g+1:o=g;if(s!==g){for(i=s;i>a;)t[i]=t[--i];t[a]=l}}if(!r.next().done)throw new TypeError("Unreachable");return t}else{let r=0;for(let{0:n,1:{value:s}}of this[ye])t[r++]=[n,s],og(s!==null);return t.sort(mh)}}},IA=class e{#e;#A;constructor(A=void 0){z.util.markAsUncloneable(this),A!==iR&&(this.#A=new mi,this.#e="none",A!==void 0&&(A=z.converters.HeadersInit(A,"Headers contructor","init"),ph(this,A)))}append(A,t){z.brandCheck(this,e),z.argumentLengthCheck(arguments,2,"Headers.append");let r="Headers.append";return A=z.converters.ByteString(A,r,"name"),t=z.converters.ByteString(t,r,"value"),ag(this,A,t)}delete(A){if(z.brandCheck(this,e),z.argumentLengthCheck(arguments,1,"Headers.delete"),A=z.converters.ByteString(A,"Headers.delete","name"),!Yn(A))throw z.errors.invalidArgument({prefix:"Headers.delete",value:A,type:"header name"});if(this.#e==="immutable")throw new TypeError("immutable");this.#A.contains(A,!1)&&this.#A.delete(A,!1)}get(A){z.brandCheck(this,e),z.argumentLengthCheck(arguments,1,"Headers.get");let t="Headers.get";if(A=z.converters.ByteString(A,t,"name"),!Yn(A))throw z.errors.invalidArgument({prefix:t,value:A,type:"header name"});return this.#A.get(A,!1)}has(A){z.brandCheck(this,e),z.argumentLengthCheck(arguments,1,"Headers.has");let t="Headers.has";if(A=z.converters.ByteString(A,t,"name"),!Yn(A))throw z.errors.invalidArgument({prefix:t,value:A,type:"header name"});return this.#A.contains(A,!1)}set(A,t){z.brandCheck(this,e),z.argumentLengthCheck(arguments,2,"Headers.set");let r="Headers.set";if(A=z.converters.ByteString(A,r,"name"),t=z.converters.ByteString(t,r,"value"),t=yh(t),Yn(A)){if(!wh(t))throw z.errors.invalidArgument({prefix:r,value:t,type:"header value"})}else throw z.errors.invalidArgument({prefix:r,value:A,type:"header name"});if(this.#e==="immutable")throw new TypeError("immutable");this.#A.set(A,t,!1)}getSetCookie(){z.brandCheck(this,e);let A=this.#A.cookies;return A?[...A]:[]}get[Ke](){if(this.#A[Ke])return this.#A[Ke];let A=[],t=this.#A.toSortedArray(),r=this.#A.cookies;if(r===null||r.length===1)return this.#A[Ke]=t;for(let n=0;n<t.length;++n){let{0:s,1:i}=t[n];if(s==="set-cookie")for(let o=0;o<r.length;++o)A.push([s,r[o]]);else A.push([s,i])}return this.#A[Ke]=A}[pi.inspect.custom](A,t){return t.depth??=A,`Headers ${pi.formatWithOptions(t,this.#A.entries)}`}static getHeadersGuard(A){return A.#e}static setHeadersGuard(A,t){A.#e=t}static getHeadersList(A){return A.#A}static setHeadersList(A,t){A.#A=t}},{getHeadersGuard:Dh,setHeadersGuard:aR,getHeadersList:cg,setHeadersList:cR}=IA;Reflect.deleteProperty(IA,"getHeadersGuard");Reflect.deleteProperty(IA,"setHeadersGuard");Reflect.deleteProperty(IA,"getHeadersList");Reflect.deleteProperty(IA,"setHeadersList");oR("Headers",IA,Ke,0,1);Object.defineProperties(IA.prototype,{append:Nr,delete:Nr,get:Nr,has:Nr,set:Nr,getSetCookie:Nr,[Symbol.toStringTag]:{value:"Headers",configurable:!0},[pi.inspect.custom]:{enumerable:!1}});z.converters.HeadersInit=function(e,A,t){if(z.util.Type(e)==="Object"){let r=Reflect.get(e,Symbol.iterator);if(!pi.types.isProxy(e)&&r===IA.prototype.entries)try{return cg(e).entriesList}catch{}return typeof r=="function"?z.converters["sequence<sequence<ByteString>>"](e,A,t,r.bind(e)):z.converters["record<ByteString, ByteString>"](e,A,t)}throw z.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence<sequence<ByteString>>","record<ByteString, ByteString>"]})};kh.exports={fill:ph,compareHeaderName:mh,Headers:IA,HeadersList:mi,getHeadersGuard:Dh,setHeadersGuard:aR,setHeadersList:cR,getHeadersList:cg}});var Jn=p((GY,Gh)=>{"use strict";var{Headers:Mh,HeadersList:bh,fill:gR,getHeadersGuard:lR,setHeadersGuard:Uh,setHeadersList:Lh}=xt(),{extractBody:Fh,cloneBody:QR,mixinBody:ER,hasFinalizationRegistry:Th,streamRegistry:xh,bodyUnusable:BR}=gr(),gg=v(),Rh=y("node:util"),{kEnumerableProperty:Xe}=gg,{isValidReasonPhrase:uR,isCancelled:IR,isAborted:hR,isBlobLike:CR,serializeJavascriptValueToJSONString:fR,isErrorLike:dR,isomorphicEncode:wR,environmentSettingsObject:yR}=Oe(),{redirectStatusSet:pR,nullBodyStatus:mR}=cn(),{kState:Be,kHeaders:zA}=jA(),{webidl:V}=Se(),{FormData:DR}=un(),{URLSerializer:Sh}=He(),{kConstruct:ki}=Qe(),lg=y("node:assert"),{types:kR}=y("node:util"),bR=new TextEncoder("utf-8"),Yt=class e{static error(){return Gn(bi(),"immutable")}static json(A,t={}){V.argumentLengthCheck(arguments,1,"Response.json"),t!==null&&(t=V.converters.ResponseInit(t));let r=bR.encode(fR(A)),n=Fh(r),s=Gn(Mr({}),"response");return Nh(s,t,{body:n[0],type:"application/json"}),s}static redirect(A,t=302){V.argumentLengthCheck(arguments,1,"Response.redirect"),A=V.converters.USVString(A),t=V.converters["unsigned short"](t);let r;try{r=new URL(A,yR.settingsObject.baseUrl)}catch(i){throw new TypeError(`Failed to parse URL from ${A}`,{cause:i})}if(!pR.has(t))throw new RangeError(`Invalid status code ${t}`);let n=Gn(Mr({}),"immutable");n[Be].status=t;let s=wR(Sh(r));return n[Be].headersList.append("location",s,!0),n}constructor(A=null,t={}){if(V.util.markAsUncloneable(this),A===ki)return;A!==null&&(A=V.converters.BodyInit(A)),t=V.converters.ResponseInit(t),this[Be]=Mr({}),this[zA]=new Mh(ki),Uh(this[zA],"response"),Lh(this[zA],this[Be].headersList);let r=null;if(A!=null){let[n,s]=Fh(A);r={body:n,type:s}}Nh(this,t,r)}get type(){return V.brandCheck(this,e),this[Be].type}get url(){V.brandCheck(this,e);let A=this[Be].urlList,t=A[A.length-1]??null;return t===null?"":Sh(t,!0)}get redirected(){return V.brandCheck(this,e),this[Be].urlList.length>1}get status(){return V.brandCheck(this,e),this[Be].status}get ok(){return V.brandCheck(this,e),this[Be].status>=200&&this[Be].status<=299}get statusText(){return V.brandCheck(this,e),this[Be].statusText}get headers(){return V.brandCheck(this,e),this[zA]}get body(){return V.brandCheck(this,e),this[Be].body?this[Be].body.stream:null}get bodyUsed(){return V.brandCheck(this,e),!!this[Be].body&&gg.isDisturbed(this[Be].body.stream)}clone(){if(V.brandCheck(this,e),BR(this))throw V.errors.exception({header:"Response.clone",message:"Body has already been consumed."});let A=Qg(this[Be]);return Th&&this[Be].body?.stream&&xh.register(this,new WeakRef(this[Be].body.stream)),Gn(A,lR(this[zA]))}[Rh.inspect.custom](A,t){t.depth===null&&(t.depth=2),t.colors??=!0;let r={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 ${Rh.formatWithOptions(t,r)}`}};ER(Yt);Object.defineProperties(Yt.prototype,{type:Xe,url:Xe,status:Xe,ok:Xe,redirected:Xe,statusText:Xe,headers:Xe,clone:Xe,body:Xe,bodyUsed:Xe,[Symbol.toStringTag]:{value:"Response",configurable:!0}});Object.defineProperties(Yt,{json:Xe,redirect:Xe,error:Xe});function Qg(e){if(e.internalResponse)return Yh(Qg(e.internalResponse),e.type);let A=Mr({...e,body:null});return e.body!=null&&(A.body=QR(A,e.body)),A}function Mr(e){return{aborted:!1,rangeRequested:!1,timingAllowPassed:!1,requestIncludesCredentials:!1,type:"default",status:200,timingInfo:null,cacheState:"",statusText:"",...e,headersList:e?.headersList?new bh(e?.headersList):new bh,urlList:e?.urlList?[...e.urlList]:[]}}function bi(e){let A=dR(e);return Mr({type:"error",status:0,error:A?e:new Error(e&&String(e)),aborted:e&&e.name==="AbortError"})}function FR(e){return e.type==="error"&&e.status===0}function Di(e,A){return A={internalResponse:e,...A},new Proxy(e,{get(t,r){return r in A?A[r]:t[r]},set(t,r,n){return lg(!(r in A)),t[r]=n,!0}})}function Yh(e,A){if(A==="basic")return Di(e,{type:"basic",headersList:e.headersList});if(A==="cors")return Di(e,{type:"cors",headersList:e.headersList});if(A==="opaque")return Di(e,{type:"opaque",urlList:Object.freeze([]),status:0,statusText:"",body:null});if(A==="opaqueredirect")return Di(e,{type:"opaqueredirect",status:0,statusText:"",headersList:[],body:null});lg(!1)}function RR(e,A=null){return lg(IR(e)),hR(e)?bi(Object.assign(new DOMException("The operation was aborted.","AbortError"),{cause:A})):bi(Object.assign(new DOMException("Request was cancelled."),{cause:A}))}function Nh(e,A,t){if(A.status!==null&&(A.status<200||A.status>599))throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.');if("statusText"in A&&A.statusText!=null&&!uR(String(A.statusText)))throw new TypeError("Invalid statusText");if("status"in A&&A.status!=null&&(e[Be].status=A.status),"statusText"in A&&A.statusText!=null&&(e[Be].statusText=A.statusText),"headers"in A&&A.headers!=null&&gR(e[zA],A.headers),t){if(mR.includes(e.status))throw V.errors.exception({header:"Response constructor",message:`Invalid response status code ${e.status}`});e[Be].body=t.body,t.type!=null&&!e[Be].headersList.contains("content-type",!0)&&e[Be].headersList.append("content-type",t.type,!0)}}function Gn(e,A){let t=new Yt(ki);return t[Be]=e,t[zA]=new Mh(ki),Lh(t[zA],e.headersList),Uh(t[zA],A),Th&&e.body?.stream&&xh.register(t,new WeakRef(e.body.stream)),t}V.converters.ReadableStream=V.interfaceConverter(ReadableStream);V.converters.FormData=V.interfaceConverter(DR);V.converters.URLSearchParams=V.interfaceConverter(URLSearchParams);V.converters.XMLHttpRequestBodyInit=function(e,A,t){return typeof e=="string"?V.converters.USVString(e,A,t):CR(e)?V.converters.Blob(e,A,t,{strict:!1}):ArrayBuffer.isView(e)||kR.isArrayBuffer(e)?V.converters.BufferSource(e,A,t):gg.isFormDataLike(e)?V.converters.FormData(e,A,t,{strict:!1}):e instanceof URLSearchParams?V.converters.URLSearchParams(e,A,t):V.converters.DOMString(e,A,t)};V.converters.BodyInit=function(e,A,t){return e instanceof ReadableStream?V.converters.ReadableStream(e,A,t):e?.[Symbol.asyncIterator]?e:V.converters.XMLHttpRequestBodyInit(e,A,t)};V.converters.ResponseInit=V.dictionaryConverter([{key:"status",converter:V.converters["unsigned short"],defaultValue:()=>200},{key:"statusText",converter:V.converters.ByteString,defaultValue:()=>""},{key:"headers",converter:V.converters.HeadersInit}]);Gh.exports={isNetworkError:FR,makeNetworkError:bi,makeResponse:Mr,makeAppropriateNetworkError:RR,filterResponse:Yh,Response:Yt,cloneResponse:Qg,fromInnerResponse:Gn}});var vh=p((JY,Vh)=>{"use strict";var{kConnected:Jh,kSize:Hh}=Qe(),Eg=class{constructor(A){this.value=A}deref(){return this.value[Jh]===0&&this.value[Hh]===0?void 0:this.value}},Bg=class{constructor(A){this.finalizer=A}register(A,t){A.on&&A.on("disconnect",()=>{A[Jh]===0&&A[Hh]===0&&this.finalizer(t)})}unregister(A){}};Vh.exports=function(){return process.env.NODE_V8_COVERAGE&&process.version.startsWith("v18")?(process._rawDebug("Using compatibility WeakRef and FinalizationRegistry"),{WeakRef:Eg,FinalizationRegistry:Bg}):{WeakRef,FinalizationRegistry}}});var Ur=p((HY,rC)=>{"use strict";var{extractBody:SR,mixinBody:NR,cloneBody:MR,bodyUnusable:qh}=gr(),{Headers:jh,fill:UR,HeadersList:Ni,setHeadersGuard:Ig,getHeadersGuard:LR,setHeadersList:$h,getHeadersList:Wh}=xt(),{FinalizationRegistry:TR}=vh()(),Ri=v(),Ph=y("node:util"),{isValidHTTPToken:xR,sameOrigin:Oh,environmentSettingsObject:Fi}=Oe(),{forbiddenMethodsSet:YR,corsSafeListedMethodsSet:GR,referrerPolicy:JR,requestRedirect:HR,requestMode:VR,requestCredentials:vR,requestCache:qR,requestDuplex:WR}=cn(),{kEnumerableProperty:pe,normalizedMethodRecordsBase:PR,normalizedMethodRecords:OR}=Ri,{kHeaders:je,kSignal:Si,kState:ce,kDispatcher:ug}=jA(),{webidl:Y}=Se(),{URLSerializer:zR}=He(),{kConstruct:Mi}=Qe(),ZR=y("node:assert"),{getMaxListeners:zh,setMaxListeners:Zh,getEventListeners:_R,defaultMaxListeners:_h}=y("node:events"),KR=Symbol("abortController"),eC=new TR(({signal:e,abort:A})=>{e.removeEventListener("abort",A)}),Ui=new WeakMap;function Kh(e){return A;function A(){let t=e.deref();if(t!==void 0){eC.unregister(A),this.removeEventListener("abort",A),t.abort(this.reason);let r=Ui.get(t.signal);if(r!==void 0){if(r.size!==0){for(let n of r){let s=n.deref();s!==void 0&&s.abort(this.reason)}r.clear()}Ui.delete(t.signal)}}}}var Xh=!1,ct=class e{constructor(A,t={}){if(Y.util.markAsUncloneable(this),A===Mi)return;let r="Request constructor";Y.argumentLengthCheck(arguments,1,r),A=Y.converters.RequestInfo(A,r,"input"),t=Y.converters.RequestInit(t,r,"init");let n=null,s=null,i=Fi.settingsObject.baseUrl,o=null;if(typeof A=="string"){this[ug]=t.dispatcher;let I;try{I=new URL(A,i)}catch(C){throw new TypeError("Failed to parse URL from "+A,{cause:C})}if(I.username||I.password)throw new TypeError("Request cannot be constructed from a URL that includes credentials: "+A);n=Li({urlList:[I]}),s="cors"}else this[ug]=t.dispatcher||A[ug],ZR(A instanceof e),n=A[ce],o=A[Si];let a=Fi.settingsObject.origin,g="client";if(n.window?.constructor?.name==="EnvironmentSettingsObject"&&Oh(n.window,a)&&(g=n.window),t.window!=null)throw new TypeError(`'window' option '${g}' must be null`);"window"in t&&(g="no-window"),n=Li({method:n.method,headersList:n.headersList,unsafeRequest:n.unsafeRequest,client:Fi.settingsObject,window:g,priority:n.priority,origin:n.origin,referrer:n.referrer,referrerPolicy:n.referrerPolicy,mode:n.mode,credentials:n.credentials,cache:n.cache,redirect:n.redirect,integrity:n.integrity,keepalive:n.keepalive,reloadNavigation:n.reloadNavigation,historyNavigation:n.historyNavigation,urlList:[...n.urlList]});let l=Object.keys(t).length!==0;if(l&&(n.mode==="navigate"&&(n.mode="same-origin"),n.reloadNavigation=!1,n.historyNavigation=!1,n.origin="client",n.referrer="client",n.referrerPolicy="",n.url=n.urlList[n.urlList.length-1],n.urlList=[n.url]),t.referrer!==void 0){let I=t.referrer;if(I==="")n.referrer="no-referrer";else{let C;try{C=new URL(I,i)}catch(D){throw new TypeError(`Referrer "${I}" is not a valid URL.`,{cause:D})}C.protocol==="about:"&&C.hostname==="client"||a&&!Oh(C,Fi.settingsObject.baseUrl)?n.referrer="client":n.referrer=C}}t.referrerPolicy!==void 0&&(n.referrerPolicy=t.referrerPolicy);let c;if(t.mode!==void 0?c=t.mode:c=s,c==="navigate")throw Y.errors.exception({header:"Request constructor",message:"invalid request mode navigate."});if(c!=null&&(n.mode=c),t.credentials!==void 0&&(n.credentials=t.credentials),t.cache!==void 0&&(n.cache=t.cache),n.cache==="only-if-cached"&&n.mode!=="same-origin")throw new TypeError("'only-if-cached' can be set only with 'same-origin' mode");if(t.redirect!==void 0&&(n.redirect=t.redirect),t.integrity!=null&&(n.integrity=String(t.integrity)),t.keepalive!==void 0&&(n.keepalive=!!t.keepalive),t.method!==void 0){let I=t.method,C=OR[I];if(C!==void 0)n.method=C;else{if(!xR(I))throw new TypeError(`'${I}' is not a valid HTTP method.`);let D=I.toUpperCase();if(YR.has(D))throw new TypeError(`'${I}' HTTP method is unsupported.`);I=PR[D]??I,n.method=I}!Xh&&n.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"}),Xh=!0)}t.signal!==void 0&&(o=t.signal),this[ce]=n;let Q=new AbortController;if(this[Si]=Q.signal,o!=null){if(!o||typeof o.aborted!="boolean"||typeof o.addEventListener!="function")throw new TypeError("Failed to construct 'Request': member signal is not of type AbortSignal.");if(o.aborted)Q.abort(o.reason);else{this[KR]=Q;let I=new WeakRef(Q),C=Kh(I);try{(typeof zh=="function"&&zh(o)===_h||_R(o,"abort").length>=_h)&&Zh(1500,o)}catch{}Ri.addAbortListener(o,C),eC.register(Q,{signal:o,abort:C},C)}}if(this[je]=new jh(Mi),$h(this[je],n.headersList),Ig(this[je],"request"),c==="no-cors"){if(!GR.has(n.method))throw new TypeError(`'${n.method} is unsupported in no-cors mode.`);Ig(this[je],"request-no-cors")}if(l){let I=Wh(this[je]),C=t.headers!==void 0?t.headers:new Ni(I);if(I.clear(),C instanceof Ni){for(let{name:D,value:f}of C.rawValues())I.append(D,f,!1);I.cookies=C.cookies}else UR(this[je],C)}let B=A instanceof e?A[ce].body:null;if((t.body!=null||B!=null)&&(n.method==="GET"||n.method==="HEAD"))throw new TypeError("Request with GET/HEAD method cannot have body.");let E=null;if(t.body!=null){let[I,C]=SR(t.body,n.keepalive);E=I,C&&!Wh(this[je]).contains("content-type",!0)&&this[je].append("content-type",C)}let u=E??B;if(u!=null&&u.source==null){if(E!=null&&t.duplex==null)throw new TypeError("RequestInit: duplex option is required when sending a body.");if(n.mode!=="same-origin"&&n.mode!=="cors")throw new TypeError('If request is made from ReadableStream, mode should be "same-origin" or "cors"');n.useCORSPreflightFlag=!0}let h=u;if(E==null&&B!=null){if(qh(A))throw new TypeError("Cannot construct a Request with a Request object that has already been used.");let I=new TransformStream;B.stream.pipeThrough(I),h={source:B.source,length:B.length,stream:I.readable}}this[ce].body=h}get method(){return Y.brandCheck(this,e),this[ce].method}get url(){return Y.brandCheck(this,e),zR(this[ce].url)}get headers(){return Y.brandCheck(this,e),this[je]}get destination(){return Y.brandCheck(this,e),this[ce].destination}get referrer(){return Y.brandCheck(this,e),this[ce].referrer==="no-referrer"?"":this[ce].referrer==="client"?"about:client":this[ce].referrer.toString()}get referrerPolicy(){return Y.brandCheck(this,e),this[ce].referrerPolicy}get mode(){return Y.brandCheck(this,e),this[ce].mode}get credentials(){return this[ce].credentials}get cache(){return Y.brandCheck(this,e),this[ce].cache}get redirect(){return Y.brandCheck(this,e),this[ce].redirect}get integrity(){return Y.brandCheck(this,e),this[ce].integrity}get keepalive(){return Y.brandCheck(this,e),this[ce].keepalive}get isReloadNavigation(){return Y.brandCheck(this,e),this[ce].reloadNavigation}get isHistoryNavigation(){return Y.brandCheck(this,e),this[ce].historyNavigation}get signal(){return Y.brandCheck(this,e),this[Si]}get body(){return Y.brandCheck(this,e),this[ce].body?this[ce].body.stream:null}get bodyUsed(){return Y.brandCheck(this,e),!!this[ce].body&&Ri.isDisturbed(this[ce].body.stream)}get duplex(){return Y.brandCheck(this,e),"half"}clone(){if(Y.brandCheck(this,e),qh(this))throw new TypeError("unusable");let A=AC(this[ce]),t=new AbortController;if(this.signal.aborted)t.abort(this.signal.reason);else{let r=Ui.get(this.signal);r===void 0&&(r=new Set,Ui.set(this.signal,r));let n=new WeakRef(t);r.add(n),Ri.addAbortListener(t.signal,Kh(n))}return tC(A,t.signal,LR(this[je]))}[Ph.inspect.custom](A,t){t.depth===null&&(t.depth=2),t.colors??=!0;let r={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 ${Ph.formatWithOptions(t,r)}`}};NR(ct);function Li(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 Ni(e.headersList):new Ni}}function AC(e){let A=Li({...e,body:null});return e.body!=null&&(A.body=MR(A,e.body)),A}function tC(e,A,t){let r=new ct(Mi);return r[ce]=e,r[Si]=A,r[je]=new jh(Mi),$h(r[je],e.headersList),Ig(r[je],t),r}Object.defineProperties(ct.prototype,{method:pe,url:pe,headers:pe,redirect:pe,clone:pe,signal:pe,duplex:pe,destination:pe,body:pe,bodyUsed:pe,isHistoryNavigation:pe,isReloadNavigation:pe,keepalive:pe,integrity:pe,cache:pe,credentials:pe,attribute:pe,referrerPolicy:pe,referrer:pe,mode:pe,[Symbol.toStringTag]:{value:"Request",configurable:!0}});Y.converters.Request=Y.interfaceConverter(ct);Y.converters.RequestInfo=function(e,A,t){return typeof e=="string"?Y.converters.USVString(e,A,t):e instanceof ct?Y.converters.Request(e,A,t):Y.converters.USVString(e,A,t)};Y.converters.AbortSignal=Y.interfaceConverter(AbortSignal);Y.converters.RequestInit=Y.dictionaryConverter([{key:"method",converter:Y.converters.ByteString},{key:"headers",converter:Y.converters.HeadersInit},{key:"body",converter:Y.nullableConverter(Y.converters.BodyInit)},{key:"referrer",converter:Y.converters.USVString},{key:"referrerPolicy",converter:Y.converters.DOMString,allowedValues:JR},{key:"mode",converter:Y.converters.DOMString,allowedValues:VR},{key:"credentials",converter:Y.converters.DOMString,allowedValues:vR},{key:"cache",converter:Y.converters.DOMString,allowedValues:qR},{key:"redirect",converter:Y.converters.DOMString,allowedValues:HR},{key:"integrity",converter:Y.converters.DOMString},{key:"keepalive",converter:Y.converters.boolean},{key:"signal",converter:Y.nullableConverter(e=>Y.converters.AbortSignal(e,"RequestInit","signal",{strict:!1}))},{key:"window",converter:Y.converters.any},{key:"duplex",converter:Y.converters.DOMString,allowedValues:WR},{key:"dispatcher",converter:Y.converters.any}]);rC.exports={Request:ct,makeRequest:Li,fromInnerRequest:tC,cloneRequest:AC}});var Vn=p((VY,CC)=>{"use strict";var{makeNetworkError:Ae,makeAppropriateNetworkError:Ti,filterResponse:hg,makeResponse:xi,fromInnerResponse:XR}=Jn(),{HeadersList:nC}=xt(),{Request:jR,cloneRequest:$R}=Ur(),gt=y("node:zlib"),{bytesMatch:eS,makePolicyContainer:AS,clonePolicyContainer:tS,requestBadPort:rS,TAOCheck:nS,appendRequestOriginHeader:sS,responseLocationURL:iS,requestCurrentURL:MA,setRequestReferrerPolicyOnRedirect:oS,tryUpgradeRequestToAPotentiallyTrustworthyURL:aS,createOpaqueTimingInfo:yg,appendFetchMetadata:cS,corsCheck:gS,crossOriginResourcePolicyCheck:lS,determineRequestsReferrer:QS,coarsenedSharedCurrentTime:Hn,createDeferredPromise:ES,isBlobLike:BS,sameOrigin:wg,isCancelled:Gt,isAborted:sC,isErrorLike:uS,fullyReadBody:IS,readableStreamClose:hS,isomorphicEncode:Yi,urlIsLocal:CS,urlIsHttpHttpsScheme:pg,urlHasHttpsScheme:fS,clampAndCoarsenConnectionTimingInfo:dS,simpleRangeHeaderValue:wS,buildContentRange:yS,createInflate:pS,extractMimeType:mS}=Oe(),{kState:cC,kDispatcher:DS}=jA(),Jt=y("node:assert"),{safelyExtractBody:mg,extractBody:iC}=gr(),{redirectStatusSet:gC,nullBodyStatus:lC,safeMethodsSet:kS,requestBodyHeader:bS,subresourceSet:FS}=cn(),RS=y("node:events"),{Readable:SS,pipeline:NS,finished:MS}=y("node:stream"),{addAbortListener:US,isErrored:LS,isReadable:Gi,bufferToLowerCasedHeaderName:oC}=v(),{dataURLProcessor:TS,serializeAMimeType:xS,minimizeSupportedMimeType:YS}=He(),{getGlobalDispatcher:GS}=wi(),{webidl:JS}=Se(),{STATUS_CODES:HS}=y("node:http"),VS=["GET","HEAD"],vS=typeof __UNDICI_IS_NODE__<"u"||typeof esbuildDetection<"u"?"node":"undici",Cg,Ji=class extends RS{constructor(A){super(),this.dispatcher=A,this.connection=null,this.dump=!1,this.state="ongoing"}terminate(A){this.state==="ongoing"&&(this.state="terminated",this.connection?.destroy(A),this.emit("terminated",A))}abort(A){this.state==="ongoing"&&(this.state="aborted",A||(A=new DOMException("The operation was aborted.","AbortError")),this.serializedAbortReason=A,this.connection?.destroy(A),this.emit("terminated",A))}};function qS(e){QC(e,"fetch")}function WS(e,A=void 0){JS.argumentLengthCheck(arguments,1,"globalThis.fetch");let t=ES(),r;try{r=new jR(e,A)}catch(l){return t.reject(l),t.promise}let n=r[cC];if(r.signal.aborted)return fg(t,n,null,r.signal.reason),t.promise;n.client.globalObject?.constructor?.name==="ServiceWorkerGlobalScope"&&(n.serviceWorkers="none");let i=null,o=!1,a=null;return US(r.signal,()=>{o=!0,Jt(a!=null),a.abort(r.signal.reason);let l=i?.deref();fg(t,n,l,r.signal.reason)}),a=BC({request:n,processResponseEndOfBody:qS,processResponse:l=>{if(!o){if(l.aborted){fg(t,n,i,a.serializedAbortReason);return}if(l.type==="error"){t.reject(new TypeError("fetch failed",{cause:l.error}));return}i=new WeakRef(XR(l,"immutable")),t.resolve(i.deref()),t=null}},dispatcher:r[DS]}),t.promise}function QC(e,A="other"){if(e.type==="error"&&e.aborted||!e.urlList?.length)return;let t=e.urlList[0],r=e.timingInfo,n=e.cacheState;pg(t)&&r!==null&&(e.timingAllowPassed||(r=yg({startTime:r.startTime}),n=""),r.endTime=Hn(),e.timingInfo=r,EC(r,t.href,A,globalThis,n))}var EC=performance.markResourceTiming;function fg(e,A,t,r){if(e&&e.reject(r),A.body!=null&&Gi(A.body?.stream)&&A.body.stream.cancel(r).catch(s=>{if(s.code!=="ERR_INVALID_STATE")throw s}),t==null)return;let n=t[cC];n.body!=null&&Gi(n.body?.stream)&&n.body.stream.cancel(r).catch(s=>{if(s.code!=="ERR_INVALID_STATE")throw s})}function BC({request:e,processRequestBodyChunkLength:A,processRequestEndOfBody:t,processResponse:r,processResponseEndOfBody:n,processResponseConsumeBody:s,useParallelQueue:i=!1,dispatcher:o=GS()}){Jt(o);let a=null,g=!1;e.client!=null&&(a=e.client.globalObject,g=e.client.crossOriginIsolatedCapability);let l=Hn(g),c=yg({startTime:l}),Q={controller:new Ji(o),request:e,timingInfo:c,processRequestBodyChunkLength:A,processRequestEndOfBody:t,processResponse:r,processResponseConsumeBody:s,processResponseEndOfBody:n,taskDestination:a,crossOriginIsolatedCapability:g};return Jt(!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=tS(e.client.policyContainer):e.policyContainer=AS()),e.headersList.contains("accept",!0)||e.headersList.append("accept","*/*",!0),e.headersList.contains("accept-language",!0)||e.headersList.append("accept-language","*",!0),e.priority,FS.has(e.destination),uC(Q).catch(B=>{Q.controller.terminate(B)}),Q.controller}async function uC(e,A=!1){let t=e.request,r=null;if(t.localURLsOnly&&!CS(MA(t))&&(r=Ae("local URLs only")),aS(t),rS(t)==="blocked"&&(r=Ae("bad port")),t.referrerPolicy===""&&(t.referrerPolicy=t.policyContainer.referrerPolicy),t.referrer!=="no-referrer"&&(t.referrer=QS(t)),r===null&&(r=await(async()=>{let s=MA(t);return wg(s,t.url)&&t.responseTainting==="basic"||s.protocol==="data:"||t.mode==="navigate"||t.mode==="websocket"?(t.responseTainting="basic",await aC(e)):t.mode==="same-origin"?Ae('request mode cannot be "same-origin"'):t.mode==="no-cors"?t.redirect!=="follow"?Ae('redirect mode cannot be "follow" for "no-cors" request'):(t.responseTainting="opaque",await aC(e)):pg(MA(t))?(t.responseTainting="cors",await IC(e)):Ae("URL scheme must be a HTTP(S) scheme")})()),A)return r;r.status!==0&&!r.internalResponse&&(t.responseTainting,t.responseTainting==="basic"?r=hg(r,"basic"):t.responseTainting==="cors"?r=hg(r,"cors"):t.responseTainting==="opaque"?r=hg(r,"opaque"):Jt(!1));let n=r.status===0?r:r.internalResponse;if(n.urlList.length===0&&n.urlList.push(...t.urlList),t.timingAllowFailed||(r.timingAllowPassed=!0),r.type==="opaque"&&n.status===206&&n.rangeRequested&&!t.headers.contains("range",!0)&&(r=n=Ae()),r.status!==0&&(t.method==="HEAD"||t.method==="CONNECT"||lC.includes(n.status))&&(n.body=null,e.controller.dump=!0),t.integrity){let s=o=>dg(e,Ae(o));if(t.responseTainting==="opaque"||r.body==null){s(r.error);return}let i=o=>{if(!eS(o,t.integrity)){s("integrity mismatch");return}r.body=mg(o)[0],dg(e,r)};await IS(r.body,i,s)}else dg(e,r)}function aC(e){if(Gt(e)&&e.request.redirectCount===0)return Promise.resolve(Ti(e));let{request:A}=e,{protocol:t}=MA(A);switch(t){case"about:":return Promise.resolve(Ae("about scheme is not supported"));case"blob:":{Cg||(Cg=y("node:buffer").resolveObjectURL);let r=MA(A);if(r.search.length!==0)return Promise.resolve(Ae("NetworkError when attempting to fetch resource."));let n=Cg(r.toString());if(A.method!=="GET"||!BS(n))return Promise.resolve(Ae("invalid method"));let s=xi(),i=n.size,o=Yi(`${i}`),a=n.type;if(A.headersList.contains("range",!0)){s.rangeRequested=!0;let g=A.headersList.get("range",!0),l=wS(g,!0);if(l==="failure")return Promise.resolve(Ae("failed to fetch the data URL"));let{rangeStartValue:c,rangeEndValue:Q}=l;if(c===null)c=i-Q,Q=c+Q-1;else{if(c>=i)return Promise.resolve(Ae("Range start is greater than the blob's size."));(Q===null||Q>=i)&&(Q=i-1)}let B=n.slice(c,Q,a),E=iC(B);s.body=E[0];let u=Yi(`${B.size}`),h=yS(c,Q,i);s.status=206,s.statusText="Partial Content",s.headersList.set("content-length",u,!0),s.headersList.set("content-type",a,!0),s.headersList.set("content-range",h,!0)}else{let g=iC(n);s.statusText="OK",s.body=g[0],s.headersList.set("content-length",o,!0),s.headersList.set("content-type",a,!0)}return Promise.resolve(s)}case"data:":{let r=MA(A),n=TS(r);if(n==="failure")return Promise.resolve(Ae("failed to fetch the data URL"));let s=xS(n.mimeType);return Promise.resolve(xi({statusText:"OK",headersList:[["content-type",{name:"Content-Type",value:s}]],body:mg(n.body)[0]}))}case"file:":return Promise.resolve(Ae("not implemented... yet..."));case"http:":case"https:":return IC(e).catch(r=>Ae(r));default:return Promise.resolve(Ae("unknown scheme"))}}function PS(e,A){e.request.done=!0,e.processResponseDone!=null&&queueMicrotask(()=>e.processResponseDone(A))}function dg(e,A){let t=e.timingInfo,r=()=>{let s=Date.now();e.request.destination==="document"&&(e.controller.fullTimingInfo=t),e.controller.reportTimingSteps=()=>{if(e.request.url.protocol!=="https:")return;t.endTime=s;let o=A.cacheState,a=A.bodyInfo;A.timingAllowPassed||(t=yg(t),o="");let g=0;if(e.request.mode!=="navigator"||!A.hasCrossOriginRedirects){g=A.status;let l=mS(A.headersList);l!=="failure"&&(a.contentType=YS(l))}e.request.initiatorType!=null&&EC(t,e.request.url.href,e.request.initiatorType,globalThis,o,a,g)};let i=()=>{e.request.done=!0,e.processResponseEndOfBody!=null&&queueMicrotask(()=>e.processResponseEndOfBody(A)),e.request.initiatorType!=null&&e.controller.reportTimingSteps()};queueMicrotask(()=>i())};e.processResponse!=null&&queueMicrotask(()=>{e.processResponse(A),e.processResponse=null});let n=A.type==="error"?A:A.internalResponse??A;n.body==null?r():MS(n.body.stream,()=>{r()})}async function IC(e){let A=e.request,t=null,r=null,n=e.timingInfo;if(A.serviceWorkers,t===null){if(A.redirect==="follow"&&(A.serviceWorkers="none"),r=t=await hC(e),A.responseTainting==="cors"&&gS(A,t)==="failure")return Ae("cors failure");nS(A,t)==="failure"&&(A.timingAllowFailed=!0)}return(A.responseTainting==="opaque"||t.type==="opaque")&&lS(A.origin,A.client,A.destination,r)==="blocked"?Ae("blocked"):(gC.has(r.status)&&(A.redirect!=="manual"&&e.controller.connection.destroy(void 0,!1),A.redirect==="error"?t=Ae("unexpected redirect"):A.redirect==="manual"?t=r:A.redirect==="follow"?t=await OS(e,t):Jt(!1)),t.timingInfo=n,t)}function OS(e,A){let t=e.request,r=A.internalResponse?A.internalResponse:A,n;try{if(n=iS(r,MA(t).hash),n==null)return A}catch(i){return Promise.resolve(Ae(i))}if(!pg(n))return Promise.resolve(Ae("URL scheme must be a HTTP(S) scheme"));if(t.redirectCount===20)return Promise.resolve(Ae("redirect count exceeded"));if(t.redirectCount+=1,t.mode==="cors"&&(n.username||n.password)&&!wg(t,n))return Promise.resolve(Ae('cross origin not allowed for request mode "cors"'));if(t.responseTainting==="cors"&&(n.username||n.password))return Promise.resolve(Ae('URL cannot contain credentials for request mode "cors"'));if(r.status!==303&&t.body!=null&&t.body.source==null)return Promise.resolve(Ae());if([301,302].includes(r.status)&&t.method==="POST"||r.status===303&&!VS.includes(t.method)){t.method="GET",t.body=null;for(let i of bS)t.headersList.delete(i)}wg(MA(t),n)||(t.headersList.delete("authorization",!0),t.headersList.delete("proxy-authorization",!0),t.headersList.delete("cookie",!0),t.headersList.delete("host",!0)),t.body!=null&&(Jt(t.body.source!=null),t.body=mg(t.body.source)[0]);let s=e.timingInfo;return s.redirectEndTime=s.postRedirectStartTime=Hn(e.crossOriginIsolatedCapability),s.redirectStartTime===0&&(s.redirectStartTime=s.startTime),t.urlList.push(n),oS(t,r),uC(e,!0)}async function hC(e,A=!1,t=!1){let r=e.request,n=null,s=null,i=null,o=null,a=!1;r.window==="no-window"&&r.redirect==="error"?(n=e,s=r):(s=$R(r),n={...e},n.request=s);let g=r.credentials==="include"||r.credentials==="same-origin"&&r.responseTainting==="basic",l=s.body?s.body.length:null,c=null;if(s.body==null&&["POST","PUT"].includes(s.method)&&(c="0"),l!=null&&(c=Yi(`${l}`)),c!=null&&s.headersList.append("content-length",c,!0),l!=null&&s.keepalive,s.referrer instanceof URL&&s.headersList.append("referer",Yi(s.referrer.href),!0),sS(s),cS(s),s.headersList.contains("user-agent",!0)||s.headersList.append("user-agent",vS),s.cache==="default"&&(s.headersList.contains("if-modified-since",!0)||s.headersList.contains("if-none-match",!0)||s.headersList.contains("if-unmodified-since",!0)||s.headersList.contains("if-match",!0)||s.headersList.contains("if-range",!0))&&(s.cache="no-store"),s.cache==="no-cache"&&!s.preventNoCacheCacheControlHeaderModification&&!s.headersList.contains("cache-control",!0)&&s.headersList.append("cache-control","max-age=0",!0),(s.cache==="no-store"||s.cache==="reload")&&(s.headersList.contains("pragma",!0)||s.headersList.append("pragma","no-cache",!0),s.headersList.contains("cache-control",!0)||s.headersList.append("cache-control","no-cache",!0)),s.headersList.contains("range",!0)&&s.headersList.append("accept-encoding","identity",!0),s.headersList.contains("accept-encoding",!0)||(fS(MA(s))?s.headersList.append("accept-encoding","br, gzip, deflate",!0):s.headersList.append("accept-encoding","gzip, deflate",!0)),s.headersList.delete("host",!0),o==null&&(s.cache="no-store"),s.cache!=="no-store"&&s.cache,i==null){if(s.cache==="only-if-cached")return Ae("only if cached");let Q=await zS(n,g,t);!kS.has(s.method)&&Q.status>=200&&Q.status<=399,a&&Q.status,i==null&&(i=Q)}if(i.urlList=[...s.urlList],s.headersList.contains("range",!0)&&(i.rangeRequested=!0),i.requestIncludesCredentials=g,i.status===407)return r.window==="no-window"?Ae():Gt(e)?Ti(e):Ae("proxy authentication required");if(i.status===421&&!t&&(r.body==null||r.body.source!=null)){if(Gt(e))return Ti(e);e.controller.connection.destroy(),i=await hC(e,A,!0)}return i}async function zS(e,A=!1,t=!1){Jt(!e.controller.connection||e.controller.connection.destroyed),e.controller.connection={abort:null,destroyed:!1,destroy(E,u=!0){this.destroyed||(this.destroyed=!0,u&&this.abort?.(E??new DOMException("The operation was aborted.","AbortError")))}};let r=e.request,n=null,s=e.timingInfo;null==null&&(r.cache="no-store");let o=t?"yes":"no";r.mode;let a=null;if(r.body==null&&e.processRequestEndOfBody)queueMicrotask(()=>e.processRequestEndOfBody());else if(r.body!=null){let E=async function*(I){Gt(e)||(yield I,e.processRequestBodyChunkLength?.(I.byteLength))},u=()=>{Gt(e)||e.processRequestEndOfBody&&e.processRequestEndOfBody()},h=I=>{Gt(e)||(I.name==="AbortError"?e.controller.abort():e.controller.terminate(I))};a=(async function*(){try{for await(let I of r.body.stream)yield*E(I);u()}catch(I){h(I)}})()}try{let{body:E,status:u,statusText:h,headersList:I,socket:C}=await B({body:a});if(C)n=xi({status:u,statusText:h,headersList:I,socket:C});else{let D=E[Symbol.asyncIterator]();e.controller.next=()=>D.next(),n=xi({status:u,statusText:h,headersList:I})}}catch(E){return E.name==="AbortError"?(e.controller.connection.destroy(),Ti(e,E)):Ae(E)}let g=async()=>{await e.controller.resume()},l=E=>{Gt(e)||e.controller.abort(E)},c=new ReadableStream({async start(E){e.controller.controller=E},async pull(E){await g(E)},async cancel(E){await l(E)},type:"bytes"});n.body={stream:c,source:null,length:null},e.controller.onAborted=Q,e.controller.on("terminated",Q),e.controller.resume=async()=>{for(;;){let E,u;try{let{done:I,value:C}=await e.controller.next();if(sC(e))break;E=I?void 0:C}catch(I){e.controller.ended&&!s.encodedBodySize?E=void 0:(E=I,u=!0)}if(E===void 0){hS(e.controller.controller),PS(e,n);return}if(s.decodedBodySize+=E?.byteLength??0,u){e.controller.terminate(E);return}let h=new Uint8Array(E);if(h.byteLength&&e.controller.controller.enqueue(h),LS(c)){e.controller.terminate();return}if(e.controller.controller.desiredSize<=0)return}};function Q(E){sC(e)?(n.aborted=!0,Gi(c)&&e.controller.controller.error(e.controller.serializedAbortReason)):Gi(c)&&e.controller.controller.error(new TypeError("terminated",{cause:uS(E)?E:void 0})),e.controller.connection.destroy()}return n;function B({body:E}){let u=MA(r),h=e.controller.dispatcher;return new Promise((I,C)=>h.dispatch({path:u.pathname+u.search,origin:u.origin,method:r.method,body:h.isMockActive?r.body&&(r.body.source||r.body.stream):E,headers:r.headersList.entries,maxRedirections:0,upgrade:r.mode==="websocket"?"websocket":void 0},{body:null,abort:null,onConnect(D){let{connection:f}=e.controller;s.finalConnectionTimingInfo=dS(void 0,s.postRedirectStartTime,e.crossOriginIsolatedCapability),f.destroyed?D(new DOMException("The operation was aborted.","AbortError")):(e.controller.on("terminated",D),this.abort=f.abort=D),s.finalNetworkRequestStartTime=Hn(e.crossOriginIsolatedCapability)},onResponseStarted(){s.finalNetworkResponseStartTime=Hn(e.crossOriginIsolatedCapability)},onHeaders(D,f,R,S){if(D<200)return;let d="",se=new nC;for(let w=0;w<f.length;w+=2)se.append(oC(f[w]),f[w+1].toString("latin1"),!0);d=se.get("location",!0),this.body=new SS({read:R});let ke=[],Le=d&&r.redirect==="follow"&&gC.has(D);if(r.method!=="HEAD"&&r.method!=="CONNECT"&&!lC.includes(D)&&!Le){let w=se.get("content-encoding",!0),H=w?w.toLowerCase().split(","):[],q=5;if(H.length>q)return C(new Error(`too many content-encodings in response: ${H.length}, maximum allowed is ${q}`)),!0;for(let ee=H.length-1;ee>=0;--ee){let j=H[ee].trim();if(j==="x-gzip"||j==="gzip")ke.push(gt.createGunzip({flush:gt.constants.Z_SYNC_FLUSH,finishFlush:gt.constants.Z_SYNC_FLUSH}));else if(j==="deflate")ke.push(pS({flush:gt.constants.Z_SYNC_FLUSH,finishFlush:gt.constants.Z_SYNC_FLUSH}));else if(j==="br")ke.push(gt.createBrotliDecompress({flush:gt.constants.BROTLI_OPERATION_FLUSH,finishFlush:gt.constants.BROTLI_OPERATION_FLUSH}));else{ke.length=0;break}}}let me=this.onError.bind(this);return I({status:D,statusText:S,headersList:se,body:ke.length?NS(this.body,...ke,w=>{w&&this.onError(w)}).on("error",me):this.body.on("error",me)}),!0},onData(D){if(e.controller.dump)return;let f=D;return s.encodedBodySize+=f.byteLength,this.body.push(f)},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(D){this.abort&&e.controller.off("terminated",this.abort),this.body?.destroy(D),e.controller.terminate(D),C(D)},onUpgrade(D,f,R){if(D!==101)return;let S=new nC;for(let d=0;d<f.length;d+=2)S.append(oC(f[d]),f[d+1].toString("latin1"),!0);return I({status:D,statusText:HS[D],headersList:S,socket:R}),!0}}))}}CC.exports={fetch:WS,Fetch:Ji,fetching:BC,finalizeAndReportTiming:QC}});var Dg=p((vY,fC)=>{"use strict";fC.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 wC=p((qY,dC)=>{"use strict";var{webidl:$e}=Se(),Hi=Symbol("ProgressEvent state"),kg=class e extends Event{constructor(A,t={}){A=$e.converters.DOMString(A,"ProgressEvent constructor","type"),t=$e.converters.ProgressEventInit(t??{}),super(A,t),this[Hi]={lengthComputable:t.lengthComputable,loaded:t.loaded,total:t.total}}get lengthComputable(){return $e.brandCheck(this,e),this[Hi].lengthComputable}get loaded(){return $e.brandCheck(this,e),this[Hi].loaded}get total(){return $e.brandCheck(this,e),this[Hi].total}};$e.converters.ProgressEventInit=$e.dictionaryConverter([{key:"lengthComputable",converter:$e.converters.boolean,defaultValue:()=>!1},{key:"loaded",converter:$e.converters["unsigned long long"],defaultValue:()=>0},{key:"total",converter:$e.converters["unsigned long long"],defaultValue:()=>0},{key:"bubbles",converter:$e.converters.boolean,defaultValue:()=>!1},{key:"cancelable",converter:$e.converters.boolean,defaultValue:()=>!1},{key:"composed",converter:$e.converters.boolean,defaultValue:()=>!1}]);dC.exports={ProgressEvent:kg}});var pC=p((WY,yC)=>{"use strict";function ZS(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"}}yC.exports={getEncoding:ZS}});var NC=p((PY,SC)=>{"use strict";var{kState:Lr,kError:bg,kResult:mC,kAborted:vn,kLastProgressEventFired:Fg}=Dg(),{ProgressEvent:_S}=wC(),{getEncoding:DC}=pC(),{serializeAMimeType:KS,parseMIMEType:kC}=He(),{types:XS}=y("node:util"),{StringDecoder:bC}=y("string_decoder"),{btoa:FC}=y("node:buffer"),jS={enumerable:!0,writable:!1,configurable:!1};function $S(e,A,t,r){if(e[Lr]==="loading")throw new DOMException("Invalid state","InvalidStateError");e[Lr]="loading",e[mC]=null,e[bg]=null;let s=A.stream().getReader(),i=[],o=s.read(),a=!0;(async()=>{for(;!e[vn];)try{let{done:g,value:l}=await o;if(a&&!e[vn]&&queueMicrotask(()=>{lt("loadstart",e)}),a=!1,!g&&XS.isUint8Array(l))i.push(l),(e[Fg]===void 0||Date.now()-e[Fg]>=50)&&!e[vn]&&(e[Fg]=Date.now(),queueMicrotask(()=>{lt("progress",e)})),o=s.read();else if(g){queueMicrotask(()=>{e[Lr]="done";try{let c=eN(i,t,A.type,r);if(e[vn])return;e[mC]=c,lt("load",e)}catch(c){e[bg]=c,lt("error",e)}e[Lr]!=="loading"&&lt("loadend",e)});break}}catch(g){if(e[vn])return;queueMicrotask(()=>{e[Lr]="done",e[bg]=g,lt("error",e),e[Lr]!=="loading"&&lt("loadend",e)});break}})()}function lt(e,A){let t=new _S(e,{bubbles:!1,cancelable:!1});A.dispatchEvent(t)}function eN(e,A,t,r){switch(A){case"DataURL":{let n="data:",s=kC(t||"application/octet-stream");s!=="failure"&&(n+=KS(s)),n+=";base64,";let i=new bC("latin1");for(let o of e)n+=FC(i.write(o));return n+=FC(i.end()),n}case"Text":{let n="failure";if(r&&(n=DC(r)),n==="failure"&&t){let s=kC(t);s!=="failure"&&(n=DC(s.parameters.get("charset")))}return n==="failure"&&(n="UTF-8"),AN(e,n)}case"ArrayBuffer":return RC(e).buffer;case"BinaryString":{let n="",s=new bC("latin1");for(let i of e)n+=s.write(i);return n+=s.end(),n}}}function AN(e,A){let t=RC(e),r=tN(t),n=0;r!==null&&(A=r,n=r==="UTF-8"?3:2);let s=t.slice(n);return new TextDecoder(A).decode(s)}function tN(e){let[A,t,r]=e;return A===239&&t===187&&r===191?"UTF-8":A===254&&t===255?"UTF-16BE":A===255&&t===254?"UTF-16LE":null}function RC(e){let A=e.reduce((r,n)=>r+n.byteLength,0),t=0;return e.reduce((r,n)=>(r.set(n,t),t+=n.byteLength,r),new Uint8Array(A))}SC.exports={staticPropertyDescriptors:jS,readOperation:$S,fireAProgressEvent:lt}});var TC=p((OY,LC)=>{"use strict";var{staticPropertyDescriptors:Tr,readOperation:Vi,fireAProgressEvent:MC}=NC(),{kState:Ht,kError:UC,kResult:vi,kEvents:X,kAborted:rN}=Dg(),{webidl:ne}=Se(),{kEnumerableProperty:qe}=v(),hA=class e extends EventTarget{constructor(){super(),this[Ht]="empty",this[vi]=null,this[UC]=null,this[X]={loadend:null,error:null,abort:null,load:null,progress:null,loadstart:null}}readAsArrayBuffer(A){ne.brandCheck(this,e),ne.argumentLengthCheck(arguments,1,"FileReader.readAsArrayBuffer"),A=ne.converters.Blob(A,{strict:!1}),Vi(this,A,"ArrayBuffer")}readAsBinaryString(A){ne.brandCheck(this,e),ne.argumentLengthCheck(arguments,1,"FileReader.readAsBinaryString"),A=ne.converters.Blob(A,{strict:!1}),Vi(this,A,"BinaryString")}readAsText(A,t=void 0){ne.brandCheck(this,e),ne.argumentLengthCheck(arguments,1,"FileReader.readAsText"),A=ne.converters.Blob(A,{strict:!1}),t!==void 0&&(t=ne.converters.DOMString(t,"FileReader.readAsText","encoding")),Vi(this,A,"Text",t)}readAsDataURL(A){ne.brandCheck(this,e),ne.argumentLengthCheck(arguments,1,"FileReader.readAsDataURL"),A=ne.converters.Blob(A,{strict:!1}),Vi(this,A,"DataURL")}abort(){if(this[Ht]==="empty"||this[Ht]==="done"){this[vi]=null;return}this[Ht]==="loading"&&(this[Ht]="done",this[vi]=null),this[rN]=!0,MC("abort",this),this[Ht]!=="loading"&&MC("loadend",this)}get readyState(){switch(ne.brandCheck(this,e),this[Ht]){case"empty":return this.EMPTY;case"loading":return this.LOADING;case"done":return this.DONE}}get result(){return ne.brandCheck(this,e),this[vi]}get error(){return ne.brandCheck(this,e),this[UC]}get onloadend(){return ne.brandCheck(this,e),this[X].loadend}set onloadend(A){ne.brandCheck(this,e),this[X].loadend&&this.removeEventListener("loadend",this[X].loadend),typeof A=="function"?(this[X].loadend=A,this.addEventListener("loadend",A)):this[X].loadend=null}get onerror(){return ne.brandCheck(this,e),this[X].error}set onerror(A){ne.brandCheck(this,e),this[X].error&&this.removeEventListener("error",this[X].error),typeof A=="function"?(this[X].error=A,this.addEventListener("error",A)):this[X].error=null}get onloadstart(){return ne.brandCheck(this,e),this[X].loadstart}set onloadstart(A){ne.brandCheck(this,e),this[X].loadstart&&this.removeEventListener("loadstart",this[X].loadstart),typeof A=="function"?(this[X].loadstart=A,this.addEventListener("loadstart",A)):this[X].loadstart=null}get onprogress(){return ne.brandCheck(this,e),this[X].progress}set onprogress(A){ne.brandCheck(this,e),this[X].progress&&this.removeEventListener("progress",this[X].progress),typeof A=="function"?(this[X].progress=A,this.addEventListener("progress",A)):this[X].progress=null}get onload(){return ne.brandCheck(this,e),this[X].load}set onload(A){ne.brandCheck(this,e),this[X].load&&this.removeEventListener("load",this[X].load),typeof A=="function"?(this[X].load=A,this.addEventListener("load",A)):this[X].load=null}get onabort(){return ne.brandCheck(this,e),this[X].abort}set onabort(A){ne.brandCheck(this,e),this[X].abort&&this.removeEventListener("abort",this[X].abort),typeof A=="function"?(this[X].abort=A,this.addEventListener("abort",A)):this[X].abort=null}};hA.EMPTY=hA.prototype.EMPTY=0;hA.LOADING=hA.prototype.LOADING=1;hA.DONE=hA.prototype.DONE=2;Object.defineProperties(hA.prototype,{EMPTY:Tr,LOADING:Tr,DONE:Tr,readAsArrayBuffer:qe,readAsBinaryString:qe,readAsText:qe,readAsDataURL:qe,abort:qe,readyState:qe,result:qe,error:qe,onloadstart:qe,onprogress:qe,onload:qe,onabort:qe,onerror:qe,onloadend:qe,[Symbol.toStringTag]:{value:"FileReader",writable:!1,enumerable:!1,configurable:!0}});Object.defineProperties(hA,{EMPTY:Tr,LOADING:Tr,DONE:Tr});LC.exports={FileReader:hA}});var qi=p((zY,xC)=>{"use strict";xC.exports={kConstruct:Qe().kConstruct}});var JC=p((ZY,GC)=>{"use strict";var nN=y("node:assert"),{URLSerializer:YC}=He(),{isValidHeaderName:sN}=Oe();function iN(e,A,t=!1){let r=YC(e,t),n=YC(A,t);return r===n}function oN(e){nN(e!==null);let A=[];for(let t of e.split(","))t=t.trim(),sN(t)&&A.push(t);return A}GC.exports={urlEquals:iN,getFieldValues:oN}});var vC=p((_Y,VC)=>{"use strict";var{kConstruct:aN}=qi(),{urlEquals:cN,getFieldValues:Rg}=JC(),{kEnumerableProperty:Vt,isDisturbed:gN}=v(),{webidl:M}=Se(),{Response:lN,cloneResponse:QN,fromInnerResponse:EN}=Jn(),{Request:ZA,fromInnerRequest:BN}=Ur(),{kState:CA}=jA(),{fetching:uN}=Vn(),{urlIsHttpHttpsScheme:Wi,createDeferredPromise:xr,readAllBytes:IN}=Oe(),Sg=y("node:assert"),Pi=class e{#e;constructor(){arguments[0]!==aN&&M.illegalConstructor(),M.util.markAsUncloneable(this),this.#e=arguments[1]}async match(A,t={}){M.brandCheck(this,e);let r="Cache.match";M.argumentLengthCheck(arguments,1,r),A=M.converters.RequestInfo(A,r,"request"),t=M.converters.CacheQueryOptions(t,r,"options");let n=this.#n(A,t,1);if(n.length!==0)return n[0]}async matchAll(A=void 0,t={}){M.brandCheck(this,e);let r="Cache.matchAll";return A!==void 0&&(A=M.converters.RequestInfo(A,r,"request")),t=M.converters.CacheQueryOptions(t,r,"options"),this.#n(A,t)}async add(A){M.brandCheck(this,e);let t="Cache.add";M.argumentLengthCheck(arguments,1,t),A=M.converters.RequestInfo(A,t,"request");let r=[A];return await this.addAll(r)}async addAll(A){M.brandCheck(this,e);let t="Cache.addAll";M.argumentLengthCheck(arguments,1,t);let r=[],n=[];for(let Q of A){if(Q===void 0)throw M.errors.conversionFailed({prefix:t,argument:"Argument 1",types:["undefined is not allowed"]});if(Q=M.converters.RequestInfo(Q),typeof Q=="string")continue;let B=Q[CA];if(!Wi(B.url)||B.method!=="GET")throw M.errors.exception({header:t,message:"Expected http/s scheme when method is not GET."})}let s=[];for(let Q of A){let B=new ZA(Q)[CA];if(!Wi(B.url))throw M.errors.exception({header:t,message:"Expected http/s scheme."});B.initiator="fetch",B.destination="subresource",n.push(B);let E=xr();s.push(uN({request:B,processResponse(u){if(u.type==="error"||u.status===206||u.status<200||u.status>299)E.reject(M.errors.exception({header:"Cache.addAll",message:"Received an invalid status code or the request failed."}));else if(u.headersList.contains("vary")){let h=Rg(u.headersList.get("vary"));for(let I of h)if(I==="*"){E.reject(M.errors.exception({header:"Cache.addAll",message:"invalid vary field value"}));for(let C of s)C.abort();return}}},processResponseEndOfBody(u){if(u.aborted){E.reject(new DOMException("aborted","AbortError"));return}E.resolve(u)}})),r.push(E.promise)}let o=await Promise.all(r),a=[],g=0;for(let Q of o){let B={type:"put",request:n[g],response:Q};a.push(B),g++}let l=xr(),c=null;try{this.#A(a)}catch(Q){c=Q}return queueMicrotask(()=>{c===null?l.resolve(void 0):l.reject(c)}),l.promise}async put(A,t){M.brandCheck(this,e);let r="Cache.put";M.argumentLengthCheck(arguments,2,r),A=M.converters.RequestInfo(A,r,"request"),t=M.converters.Response(t,r,"response");let n=null;if(A instanceof ZA?n=A[CA]:n=new ZA(A)[CA],!Wi(n.url)||n.method!=="GET")throw M.errors.exception({header:r,message:"Expected an http/s scheme when method is not GET"});let s=t[CA];if(s.status===206)throw M.errors.exception({header:r,message:"Got 206 status"});if(s.headersList.contains("vary")){let B=Rg(s.headersList.get("vary"));for(let E of B)if(E==="*")throw M.errors.exception({header:r,message:"Got * vary field value"})}if(s.body&&(gN(s.body.stream)||s.body.stream.locked))throw M.errors.exception({header:r,message:"Response body is locked or disturbed"});let i=QN(s),o=xr();if(s.body!=null){let E=s.body.stream.getReader();IN(E).then(o.resolve,o.reject)}else o.resolve(void 0);let a=[],g={type:"put",request:n,response:i};a.push(g);let l=await o.promise;i.body!=null&&(i.body.source=l);let c=xr(),Q=null;try{this.#A(a)}catch(B){Q=B}return queueMicrotask(()=>{Q===null?c.resolve():c.reject(Q)}),c.promise}async delete(A,t={}){M.brandCheck(this,e);let r="Cache.delete";M.argumentLengthCheck(arguments,1,r),A=M.converters.RequestInfo(A,r,"request"),t=M.converters.CacheQueryOptions(t,r,"options");let n=null;if(A instanceof ZA){if(n=A[CA],n.method!=="GET"&&!t.ignoreMethod)return!1}else Sg(typeof A=="string"),n=new ZA(A)[CA];let s=[],i={type:"delete",request:n,options:t};s.push(i);let o=xr(),a=null,g;try{g=this.#A(s)}catch(l){a=l}return queueMicrotask(()=>{a===null?o.resolve(!!g?.length):o.reject(a)}),o.promise}async keys(A=void 0,t={}){M.brandCheck(this,e);let r="Cache.keys";A!==void 0&&(A=M.converters.RequestInfo(A,r,"request")),t=M.converters.CacheQueryOptions(t,r,"options");let n=null;if(A!==void 0)if(A instanceof ZA){if(n=A[CA],n.method!=="GET"&&!t.ignoreMethod)return[]}else typeof A=="string"&&(n=new ZA(A)[CA]);let s=xr(),i=[];if(A===void 0)for(let o of this.#e)i.push(o[0]);else{let o=this.#t(n,t);for(let a of o)i.push(a[0])}return queueMicrotask(()=>{let o=[];for(let a of i){let g=BN(a,new AbortController().signal,"immutable");o.push(g)}s.resolve(Object.freeze(o))}),s.promise}#A(A){let t=this.#e,r=[...t],n=[],s=[];try{for(let i of A){if(i.type!=="delete"&&i.type!=="put")throw M.errors.exception({header:"Cache.#batchCacheOperations",message:'operation type does not match "delete" or "put"'});if(i.type==="delete"&&i.response!=null)throw M.errors.exception({header:"Cache.#batchCacheOperations",message:"delete operation should not have an associated response"});if(this.#t(i.request,i.options,n).length)throw new DOMException("???","InvalidStateError");let o;if(i.type==="delete"){if(o=this.#t(i.request,i.options),o.length===0)return[];for(let a of o){let g=t.indexOf(a);Sg(g!==-1),t.splice(g,1)}}else if(i.type==="put"){if(i.response==null)throw M.errors.exception({header:"Cache.#batchCacheOperations",message:"put operation should have an associated response"});let a=i.request;if(!Wi(a.url))throw M.errors.exception({header:"Cache.#batchCacheOperations",message:"expected http or https scheme"});if(a.method!=="GET")throw M.errors.exception({header:"Cache.#batchCacheOperations",message:"not get method"});if(i.options!=null)throw M.errors.exception({header:"Cache.#batchCacheOperations",message:"options must not be defined"});o=this.#t(i.request);for(let g of o){let l=t.indexOf(g);Sg(l!==-1),t.splice(l,1)}t.push([i.request,i.response]),n.push([i.request,i.response])}s.push([i.request,i.response])}return s}catch(i){throw this.#e.length=0,this.#e=r,i}}#t(A,t,r){let n=[],s=r??this.#e;for(let i of s){let[o,a]=i;this.#s(A,o,a,t)&&n.push(i)}return n}#s(A,t,r=null,n){let s=new URL(A.url),i=new URL(t.url);if(n?.ignoreSearch&&(i.search="",s.search=""),!cN(s,i,!0))return!1;if(r==null||n?.ignoreVary||!r.headersList.contains("vary"))return!0;let o=Rg(r.headersList.get("vary"));for(let a of o){if(a==="*")return!1;let g=t.headersList.get(a),l=A.headersList.get(a);if(g!==l)return!1}return!0}#n(A,t,r=1/0){let n=null;if(A!==void 0)if(A instanceof ZA){if(n=A[CA],n.method!=="GET"&&!t.ignoreMethod)return[]}else typeof A=="string"&&(n=new ZA(A)[CA]);let s=[];if(A===void 0)for(let o of this.#e)s.push(o[1]);else{let o=this.#t(n,t);for(let a of o)s.push(a[1])}let i=[];for(let o of s){let a=EN(o,"immutable");if(i.push(a.clone()),i.length>=r)break}return Object.freeze(i)}};Object.defineProperties(Pi.prototype,{[Symbol.toStringTag]:{value:"Cache",configurable:!0},match:Vt,matchAll:Vt,add:Vt,addAll:Vt,put:Vt,delete:Vt,keys:Vt});var HC=[{key:"ignoreSearch",converter:M.converters.boolean,defaultValue:()=>!1},{key:"ignoreMethod",converter:M.converters.boolean,defaultValue:()=>!1},{key:"ignoreVary",converter:M.converters.boolean,defaultValue:()=>!1}];M.converters.CacheQueryOptions=M.dictionaryConverter(HC);M.converters.MultiCacheQueryOptions=M.dictionaryConverter([...HC,{key:"cacheName",converter:M.converters.DOMString}]);M.converters.Response=M.interfaceConverter(lN);M.converters["sequence<RequestInfo>"]=M.sequenceConverter(M.converters.RequestInfo);VC.exports={Cache:Pi}});var WC=p((KY,qC)=>{"use strict";var{kConstruct:qn}=qi(),{Cache:Oi}=vC(),{webidl:Ue}=Se(),{kEnumerableProperty:Wn}=v(),zi=class e{#e=new Map;constructor(){arguments[0]!==qn&&Ue.illegalConstructor(),Ue.util.markAsUncloneable(this)}async match(A,t={}){if(Ue.brandCheck(this,e),Ue.argumentLengthCheck(arguments,1,"CacheStorage.match"),A=Ue.converters.RequestInfo(A),t=Ue.converters.MultiCacheQueryOptions(t),t.cacheName!=null){if(this.#e.has(t.cacheName)){let r=this.#e.get(t.cacheName);return await new Oi(qn,r).match(A,t)}}else for(let r of this.#e.values()){let s=await new Oi(qn,r).match(A,t);if(s!==void 0)return s}}async has(A){Ue.brandCheck(this,e);let t="CacheStorage.has";return Ue.argumentLengthCheck(arguments,1,t),A=Ue.converters.DOMString(A,t,"cacheName"),this.#e.has(A)}async open(A){Ue.brandCheck(this,e);let t="CacheStorage.open";if(Ue.argumentLengthCheck(arguments,1,t),A=Ue.converters.DOMString(A,t,"cacheName"),this.#e.has(A)){let n=this.#e.get(A);return new Oi(qn,n)}let r=[];return this.#e.set(A,r),new Oi(qn,r)}async delete(A){Ue.brandCheck(this,e);let t="CacheStorage.delete";return Ue.argumentLengthCheck(arguments,1,t),A=Ue.converters.DOMString(A,t,"cacheName"),this.#e.delete(A)}async keys(){return Ue.brandCheck(this,e),[...this.#e.keys()]}};Object.defineProperties(zi.prototype,{[Symbol.toStringTag]:{value:"CacheStorage",configurable:!0},match:Wn,has:Wn,open:Wn,delete:Wn,keys:Wn});qC.exports={CacheStorage:zi}});var OC=p((XY,PC)=>{"use strict";PC.exports={maxAttributeValueSize:1024,maxNameValuePairSize:4096}});var Ug=p((jY,KC)=>{"use strict";function hN(e){for(let A=0;A<e.length;++A){let t=e.charCodeAt(A);if(t>=0&&t<=8||t>=10&&t<=31||t===127)return!0}return!1}function Ng(e){for(let A=0;A<e.length;++A){let t=e.charCodeAt(A);if(t<33||t>126||t===34||t===40||t===41||t===60||t===62||t===64||t===44||t===59||t===58||t===92||t===47||t===91||t===93||t===63||t===61||t===123||t===125)throw new Error("Invalid cookie name")}}function Mg(e){let A=e.length,t=0;if(e[0]==='"'){if(A===1||e[A-1]!=='"')throw new Error("Invalid cookie value");--A,++t}for(;t<A;){let r=e.charCodeAt(t++);if(r<33||r>126||r===34||r===44||r===59||r===92)throw new Error("Invalid cookie value")}}function ZC(e){for(let A=0;A<e.length;++A){let t=e.charCodeAt(A);if(t<32||t>126||t===59)throw new Error("Invalid cookie path")}}function zC(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122}function CN(e){if(e===" ")return;if(e.length>255)throw new Error("Invalid cookie domain");let A=0;for(let t=0;t<e.length;++t){let r=e.charCodeAt(t);if(r===46){if(A===0)throw new Error("Invalid cookie domain");if(e.charCodeAt(t-1)===45)throw new Error("Invalid cookie domain");A=0;continue}if(A===0&&!zC(r))throw new Error("Invalid cookie domain");if(!zC(r)&&r!==45)throw new Error("Invalid cookie domain");if(++A>63)throw new Error("Invalid cookie domain")}if(A===0||e.charCodeAt(e.length-1)===45)throw new Error("Invalid cookie domain")}var fN=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dN=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],Zi=Array(61).fill(0).map((e,A)=>A.toString().padStart(2,"0"));function _C(e){return typeof e=="number"&&(e=new Date(e)),`${fN[e.getUTCDay()]}, ${Zi[e.getUTCDate()]} ${dN[e.getUTCMonth()]} ${e.getUTCFullYear()} ${Zi[e.getUTCHours()]}:${Zi[e.getUTCMinutes()]}:${Zi[e.getUTCSeconds()]} GMT`}function wN(e){if(e<0)throw new Error("Invalid cookie max-age")}function yN(e){if(e.name.length===0)return null;Ng(e.name),Mg(e.value);let A=[`${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&&A.push("Secure"),e.httpOnly&&A.push("HttpOnly"),typeof e.maxAge=="number"&&(wN(e.maxAge),A.push(`Max-Age=${e.maxAge}`)),e.domain&&(CN(e.domain),A.push(`Domain=${e.domain}`)),e.path&&(ZC(e.path),A.push(`Path=${e.path}`)),e.expires&&e.expires.toString()!=="Invalid Date"&&A.push(`Expires=${_C(e.expires)}`),e.sameSite&&A.push(`SameSite=${e.sameSite}`);for(let t of e.unparsed){if(!t.includes("="))throw new Error("Invalid unparsed");let[r,...n]=t.split("="),s=r.trim(),i=n.join("=");Ng(s),Mg(i),A.push(`${s}=${i}`)}return A.join("; ")}KC.exports={isCTLExcludingHtab:hN,validateCookieName:Ng,validateCookiePath:ZC,validateCookieValue:Mg,toIMFDate:_C,stringify:yN}});var jC=p(($Y,XC)=>{"use strict";var{maxNameValuePairSize:pN,maxAttributeValueSize:mN}=OC(),{isCTLExcludingHtab:DN}=Ug(),{collectASequenceOfCodePointsFast:_i}=He(),kN=y("node:assert");function bN(e){if(DN(e))return null;let A="",t="",r="",n="";if(e.includes(";")){let s={position:0};A=_i(";",e,s),t=e.slice(s.position)}else A=e;if(!A.includes("="))n=A;else{let s={position:0};r=_i("=",A,s),n=A.slice(s.position+1)}return r=r.trim(),n=n.trim(),r.length+n.length>pN?null:{name:r,value:n,...Yr(t)}}function Yr(e,A={}){if(e.length===0)return A;kN(e[0]===";"),e=e.slice(1);let t="";e.includes(";")?(t=_i(";",e,{position:0}),e=e.slice(t.length)):(t=e,e="");let r="",n="";if(t.includes("=")){let i={position:0};r=_i("=",t,i),n=t.slice(i.position+1)}else r=t;if(r=r.trim(),n=n.trim(),n.length>mN)return Yr(e,A);let s=r.toLowerCase();if(s==="expires"){let i=new Date(n);A.expires=i}else if(s==="max-age"){let i=n.charCodeAt(0);if((i<48||i>57)&&n[0]!=="-"||!/^\d+$/.test(n))return Yr(e,A);let o=Number(n);A.maxAge=o}else if(s==="domain"){let i=n;i[0]==="."&&(i=i.slice(1)),i=i.toLowerCase(),A.domain=i}else if(s==="path"){let i="";n.length===0||n[0]!=="/"?i="/":i=n,A.path=i}else if(s==="secure")A.secure=!0;else if(s==="httponly")A.httpOnly=!0;else if(s==="samesite"){let i=n.toLowerCase();i==="none"?A.sameSite="None":i==="strict"?A.sameSite="Strict":i==="lax"&&(A.sameSite="Lax")}else A.unparsed??=[],A.unparsed.push(`${r}=${n}`);return Yr(e,A)}XC.exports={parseSetCookie:bN,parseUnparsedAttributes:Yr}});var Af=p((eG,ef)=>{"use strict";var{parseSetCookie:FN}=jC(),{stringify:RN}=Ug(),{webidl:P}=Se(),{Headers:Ki}=xt();function SN(e){P.argumentLengthCheck(arguments,1,"getCookies"),P.brandCheck(e,Ki,{strict:!1});let A=e.get("cookie"),t={};if(!A)return t;for(let r of A.split(";")){let[n,...s]=r.split("=");t[n.trim()]=s.join("=")}return t}function NN(e,A,t){P.brandCheck(e,Ki,{strict:!1});let r="deleteCookie";P.argumentLengthCheck(arguments,2,r),A=P.converters.DOMString(A,r,"name"),t=P.converters.DeleteCookieAttributes(t),$C(e,{name:A,value:"",expires:new Date(0),...t})}function MN(e){P.argumentLengthCheck(arguments,1,"getSetCookies"),P.brandCheck(e,Ki,{strict:!1});let A=e.getSetCookie();return A?A.map(t=>FN(t)):[]}function $C(e,A){P.argumentLengthCheck(arguments,2,"setCookie"),P.brandCheck(e,Ki,{strict:!1}),A=P.converters.Cookie(A);let t=RN(A);t&&e.append("Set-Cookie",t)}P.converters.DeleteCookieAttributes=P.dictionaryConverter([{converter:P.nullableConverter(P.converters.DOMString),key:"path",defaultValue:()=>null},{converter:P.nullableConverter(P.converters.DOMString),key:"domain",defaultValue:()=>null}]);P.converters.Cookie=P.dictionaryConverter([{converter:P.converters.DOMString,key:"name"},{converter:P.converters.DOMString,key:"value"},{converter:P.nullableConverter(e=>typeof e=="number"?P.converters["unsigned long long"](e):new Date(e)),key:"expires",defaultValue:()=>null},{converter:P.nullableConverter(P.converters["long long"]),key:"maxAge",defaultValue:()=>null},{converter:P.nullableConverter(P.converters.DOMString),key:"domain",defaultValue:()=>null},{converter:P.nullableConverter(P.converters.DOMString),key:"path",defaultValue:()=>null},{converter:P.nullableConverter(P.converters.boolean),key:"secure",defaultValue:()=>null},{converter:P.nullableConverter(P.converters.boolean),key:"httpOnly",defaultValue:()=>null},{converter:P.converters.USVString,key:"sameSite",allowedValues:["Strict","Lax","None"]},{converter:P.sequenceConverter(P.converters.DOMString),key:"unparsed",defaultValue:()=>new Array(0)}]);ef.exports={getCookies:SN,deleteCookie:NN,getSetCookies:MN,setCookie:$C}});var Jr=p((AG,rf)=>{"use strict";var{webidl:N}=Se(),{kEnumerableProperty:We}=v(),{kConstruct:tf}=Qe(),{MessagePort:UN}=y("node:worker_threads"),Gr=class e extends Event{#e;constructor(A,t={}){if(A===tf){super(arguments[1],arguments[2]),N.util.markAsUncloneable(this);return}let r="MessageEvent constructor";N.argumentLengthCheck(arguments,1,r),A=N.converters.DOMString(A,r,"type"),t=N.converters.MessageEventInit(t,r,"eventInitDict"),super(A,t),this.#e=t,N.util.markAsUncloneable(this)}get data(){return N.brandCheck(this,e),this.#e.data}get origin(){return N.brandCheck(this,e),this.#e.origin}get lastEventId(){return N.brandCheck(this,e),this.#e.lastEventId}get source(){return N.brandCheck(this,e),this.#e.source}get ports(){return N.brandCheck(this,e),Object.isFrozen(this.#e.ports)||Object.freeze(this.#e.ports),this.#e.ports}initMessageEvent(A,t=!1,r=!1,n=null,s="",i="",o=null,a=[]){return N.brandCheck(this,e),N.argumentLengthCheck(arguments,1,"MessageEvent.initMessageEvent"),new e(A,{bubbles:t,cancelable:r,data:n,origin:s,lastEventId:i,source:o,ports:a})}static createFastMessageEvent(A,t){let r=new e(tf,A,t);return r.#e=t,r.#e.data??=null,r.#e.origin??="",r.#e.lastEventId??="",r.#e.source??=null,r.#e.ports??=[],r}},{createFastMessageEvent:LN}=Gr;delete Gr.createFastMessageEvent;var Xi=class e extends Event{#e;constructor(A,t={}){let r="CloseEvent constructor";N.argumentLengthCheck(arguments,1,r),A=N.converters.DOMString(A,r,"type"),t=N.converters.CloseEventInit(t),super(A,t),this.#e=t,N.util.markAsUncloneable(this)}get wasClean(){return N.brandCheck(this,e),this.#e.wasClean}get code(){return N.brandCheck(this,e),this.#e.code}get reason(){return N.brandCheck(this,e),this.#e.reason}},ji=class e extends Event{#e;constructor(A,t){let r="ErrorEvent constructor";N.argumentLengthCheck(arguments,1,r),super(A,t),N.util.markAsUncloneable(this),A=N.converters.DOMString(A,r,"type"),t=N.converters.ErrorEventInit(t??{}),this.#e=t}get message(){return N.brandCheck(this,e),this.#e.message}get filename(){return N.brandCheck(this,e),this.#e.filename}get lineno(){return N.brandCheck(this,e),this.#e.lineno}get colno(){return N.brandCheck(this,e),this.#e.colno}get error(){return N.brandCheck(this,e),this.#e.error}};Object.defineProperties(Gr.prototype,{[Symbol.toStringTag]:{value:"MessageEvent",configurable:!0},data:We,origin:We,lastEventId:We,source:We,ports:We,initMessageEvent:We});Object.defineProperties(Xi.prototype,{[Symbol.toStringTag]:{value:"CloseEvent",configurable:!0},reason:We,code:We,wasClean:We});Object.defineProperties(ji.prototype,{[Symbol.toStringTag]:{value:"ErrorEvent",configurable:!0},message:We,filename:We,lineno:We,colno:We,error:We});N.converters.MessagePort=N.interfaceConverter(UN);N.converters["sequence<MessagePort>"]=N.sequenceConverter(N.converters.MessagePort);var Lg=[{key:"bubbles",converter:N.converters.boolean,defaultValue:()=>!1},{key:"cancelable",converter:N.converters.boolean,defaultValue:()=>!1},{key:"composed",converter:N.converters.boolean,defaultValue:()=>!1}];N.converters.MessageEventInit=N.dictionaryConverter([...Lg,{key:"data",converter:N.converters.any,defaultValue:()=>null},{key:"origin",converter:N.converters.USVString,defaultValue:()=>""},{key:"lastEventId",converter:N.converters.DOMString,defaultValue:()=>""},{key:"source",converter:N.nullableConverter(N.converters.MessagePort),defaultValue:()=>null},{key:"ports",converter:N.converters["sequence<MessagePort>"],defaultValue:()=>new Array(0)}]);N.converters.CloseEventInit=N.dictionaryConverter([...Lg,{key:"wasClean",converter:N.converters.boolean,defaultValue:()=>!1},{key:"code",converter:N.converters["unsigned short"],defaultValue:()=>0},{key:"reason",converter:N.converters.USVString,defaultValue:()=>""}]);N.converters.ErrorEventInit=N.dictionaryConverter([...Lg,{key:"message",converter:N.converters.DOMString,defaultValue:()=>""},{key:"filename",converter:N.converters.USVString,defaultValue:()=>""},{key:"lineno",converter:N.converters["unsigned long"],defaultValue:()=>0},{key:"colno",converter:N.converters["unsigned long"],defaultValue:()=>0},{key:"error",converter:N.converters.any}]);rf.exports={MessageEvent:Gr,CloseEvent:Xi,ErrorEvent:ji,createFastMessageEvent:LN}});var vt=p((tG,nf)=>{"use strict";var TN="258EAFA5-E914-47DA-95CA-C5AB0DC85B11",xN={enumerable:!0,writable:!1,configurable:!1},YN={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},GN={NOT_SENT:0,PROCESSING:1,SENT:2},JN={CONTINUATION:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10},HN=2**16-1,VN={INFO:0,PAYLOADLENGTH_16:2,PAYLOADLENGTH_64:3,READ_DATA:4},vN=Buffer.allocUnsafe(0),qN={string:1,typedArray:2,arrayBuffer:3,blob:4};nf.exports={uid:TN,sentCloseFrameState:GN,staticPropertyDescriptors:xN,states:YN,opcodes:JN,maxUnsigned16Bit:HN,parserStates:VN,emptyBuffer:vN,sendHints:qN}});var Pn=p((rG,sf)=>{"use strict";sf.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 Zn=p((nG,uf)=>{"use strict";var{kReadyState:On,kController:WN,kResponse:PN,kBinaryType:ON,kWebSocketURL:zN}=Pn(),{states:zn,opcodes:Qt}=vt(),{ErrorEvent:ZN,createFastMessageEvent:_N}=Jr(),{isUtf8:KN}=y("node:buffer"),{collectASequenceOfCodePointsFast:XN,removeHTTPWhitespace:of}=He();function jN(e){return e[On]===zn.CONNECTING}function $N(e){return e[On]===zn.OPEN}function eM(e){return e[On]===zn.CLOSING}function AM(e){return e[On]===zn.CLOSED}function Tg(e,A,t=(n,s)=>new Event(n,s),r={}){let n=t(e,r);A.dispatchEvent(n)}function tM(e,A,t){if(e[On]!==zn.OPEN)return;let r;if(A===Qt.TEXT)try{r=Bf(t)}catch{cf(e,"Received invalid UTF-8 in text frame.");return}else A===Qt.BINARY&&(e[ON]==="blob"?r=new Blob([t]):r=rM(t));Tg("message",e,_N,{origin:e[zN].origin,data:r})}function rM(e){return e.byteLength===e.buffer.byteLength?e.buffer:e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}function nM(e){if(e.length===0)return!1;for(let A=0;A<e.length;++A){let t=e.charCodeAt(A);if(t<33||t>126||t===34||t===40||t===41||t===44||t===47||t===58||t===59||t===60||t===61||t===62||t===63||t===64||t===91||t===92||t===93||t===123||t===125)return!1}return!0}function sM(e){return e>=1e3&&e<1015?e!==1004&&e!==1005&&e!==1006:e>=3e3&&e<=4999}function cf(e,A){let{[WN]:t,[PN]:r}=e;t.abort(),r?.socket&&!r.socket.destroyed&&r.socket.destroy(),A&&Tg("error",e,(n,s)=>new ZN(n,s),{error:new Error(A),message:A})}function gf(e){return e===Qt.CLOSE||e===Qt.PING||e===Qt.PONG}function lf(e){return e===Qt.CONTINUATION}function Qf(e){return e===Qt.TEXT||e===Qt.BINARY}function iM(e){return Qf(e)||lf(e)||gf(e)}function oM(e){let A={position:0},t=new Map;for(;A.position<e.length;){let r=XN(";",e,A),[n,s=""]=r.split("=");t.set(of(n,!0,!1),of(s,!1,!0)),A.position++}return t}function aM(e){if(e.length===0)return!1;for(let t=0;t<e.length;t++){let r=e.charCodeAt(t);if(r<48||r>57)return!1}let A=Number.parseInt(e,10);return A>=8&&A<=15}var Ef=typeof process.versions.icu=="string",af=Ef?new TextDecoder("utf-8",{fatal:!0}):void 0,Bf=Ef?af.decode.bind(af):function(e){if(KN(e))return e.toString("utf-8");throw new TypeError("Invalid utf-8 received.")};uf.exports={isConnecting:jN,isEstablished:$N,isClosing:eM,isClosed:AM,fireEvent:Tg,isValidSubprotocol:nM,isValidStatusCode:sM,failWebsocketConnection:cf,websocketMessageReceived:tM,utf8Decode:Bf,isControlFrame:gf,isContinuationFrame:lf,isTextBinaryFrame:Qf,isValidOpcode:iM,parseExtensions:oM,isValidClientWindowBits:aM}});var eo=p((sG,If)=>{"use strict";var{maxUnsigned16Bit:cM}=vt(),$i=16386,xg,_n=null,Hr=$i;try{xg=y("node:crypto")}catch{xg={randomFillSync:function(A,t,r){for(let n=0;n<A.length;++n)A[n]=Math.random()*255|0;return A}}}function gM(){return Hr===$i&&(Hr=0,xg.randomFillSync(_n??=Buffer.allocUnsafe($i),0,$i)),[_n[Hr++],_n[Hr++],_n[Hr++],_n[Hr++]]}var Yg=class{constructor(A){this.frameData=A}createFrame(A){let t=this.frameData,r=gM(),n=t?.byteLength??0,s=n,i=6;n>cM?(i+=8,s=127):n>125&&(i+=2,s=126);let o=Buffer.allocUnsafe(n+i);o[0]=o[1]=0,o[0]|=128,o[0]=(o[0]&240)+A;o[i-4]=r[0],o[i-3]=r[1],o[i-2]=r[2],o[i-1]=r[3],o[1]=s,s===126?o.writeUInt16BE(n,2):s===127&&(o[2]=o[3]=0,o.writeUIntBE(n,4,6)),o[1]|=128;for(let a=0;a<n;++a)o[i+a]=t[a]^r[a&3];return o}};If.exports={WebsocketFrameSend:Yg}});var Jg=p((iG,pf)=>{"use strict";var{uid:lM,states:Kn,sentCloseFrameState:Ao,emptyBuffer:QM,opcodes:EM}=vt(),{kReadyState:Xn,kSentClose:to,kByteParser:Cf,kReceivedClose:hf,kResponse:ff}=Pn(),{fireEvent:BM,failWebsocketConnection:Et,isClosing:uM,isClosed:IM,isEstablished:hM,parseExtensions:CM}=Zn(),{channels:Vr}=Xt(),{CloseEvent:fM}=Jr(),{makeRequest:dM}=Ur(),{fetching:wM}=Vn(),{Headers:yM,getHeadersList:pM}=xt(),{getDecodeSplit:mM}=Oe(),{WebsocketFrameSend:DM}=eo(),Gg;try{Gg=y("node:crypto")}catch{}function kM(e,A,t,r,n,s){let i=e;i.protocol=e.protocol==="ws:"?"http:":"https:";let o=dM({urlList:[i],client:t,serviceWorkers:"none",referrer:"no-referrer",mode:"websocket",credentials:"include",cache:"no-store",redirect:"error"});if(s.headers){let c=pM(new yM(s.headers));o.headersList=c}let a=Gg.randomBytes(16).toString("base64");o.headersList.append("sec-websocket-key",a),o.headersList.append("sec-websocket-version","13");for(let c of A)o.headersList.append("sec-websocket-protocol",c);return o.headersList.append("sec-websocket-extensions","permessage-deflate; client_max_window_bits"),wM({request:o,useParallelQueue:!0,dispatcher:s.dispatcher,processResponse(c){if(c.type==="error"||c.status!==101){Et(r,"Received network error or non-101 status code.");return}if(A.length!==0&&!c.headersList.get("Sec-WebSocket-Protocol")){Et(r,"Server did not respond with sent protocols.");return}if(c.headersList.get("Upgrade")?.toLowerCase()!=="websocket"){Et(r,'Server did not set Upgrade header to "websocket".');return}if(c.headersList.get("Connection")?.toLowerCase()!=="upgrade"){Et(r,'Server did not set Connection header to "upgrade".');return}let Q=c.headersList.get("Sec-WebSocket-Accept"),B=Gg.createHash("sha1").update(a+lM).digest("base64");if(Q!==B){Et(r,"Incorrect hash received in Sec-WebSocket-Accept header.");return}let E=c.headersList.get("Sec-WebSocket-Extensions"),u;if(E!==null&&(u=CM(E),!u.has("permessage-deflate"))){Et(r,"Sec-WebSocket-Extensions header does not match.");return}let h=c.headersList.get("Sec-WebSocket-Protocol");if(h!==null&&!mM("sec-websocket-protocol",o.headersList).includes(h)){Et(r,"Protocol was not set in the opening handshake.");return}c.socket.on("data",df),c.socket.on("close",wf),c.socket.on("error",yf),Vr.open.hasSubscribers&&Vr.open.publish({address:c.socket.address(),protocol:h,extensions:E}),n(c,u)}})}function bM(e,A,t,r){if(!(uM(e)||IM(e)))if(!hM(e))Et(e,"Connection was closed before it was established."),e[Xn]=Kn.CLOSING;else if(e[to]===Ao.NOT_SENT){e[to]=Ao.PROCESSING;let n=new DM;A!==void 0&&t===void 0?(n.frameData=Buffer.allocUnsafe(2),n.frameData.writeUInt16BE(A,0)):A!==void 0&&t!==void 0?(n.frameData=Buffer.allocUnsafe(2+r),n.frameData.writeUInt16BE(A,0),n.frameData.write(t,2,"utf-8")):n.frameData=QM,e[ff].socket.write(n.createFrame(EM.CLOSE)),e[to]=Ao.SENT,e[Xn]=Kn.CLOSING}else e[Xn]=Kn.CLOSING}function df(e){this.ws[Cf].write(e)||this.pause()}function wf(){let{ws:e}=this,{[ff]:A}=e;A.socket.off("data",df),A.socket.off("close",wf),A.socket.off("error",yf);let t=e[to]===Ao.SENT&&e[hf],r=1005,n="",s=e[Cf].closingInfo;s&&!s.error?(r=s.code??1005,n=s.reason):e[hf]||(r=1006),e[Xn]=Kn.CLOSED,BM("close",e,(i,o)=>new fM(i,o),{wasClean:t,code:r,reason:n}),Vr.close.hasSubscribers&&Vr.close.publish({websocket:e,code:r,reason:n})}function yf(e){let{ws:A}=this;A[Xn]=Kn.CLOSING,Vr.socketError.hasSubscribers&&Vr.socketError.publish(e),this.destroy()}pf.exports={establishWebSocketConnection:kM,closeWebSocketConnection:bM}});var Df=p((oG,mf)=>{"use strict";var{createInflateRaw:FM,Z_DEFAULT_WINDOWBITS:RM}=y("node:zlib"),{isValidClientWindowBits:SM}=Zn(),{MessageSizeExceededError:NM}=Z(),MM=Buffer.from([0,0,255,255]),ro=Symbol("kBuffer"),jn=Symbol("kLength"),Hg=class{#e;#A={};#t=0;constructor(A,t){this.#A.serverNoContextTakeover=A.has("server_no_context_takeover"),this.#A.serverMaxWindowBits=A.get("server_max_window_bits"),this.#t=t.maxPayloadSize}decompress(A,t,r){if(!this.#e){let n=RM;if(this.#A.serverMaxWindowBits){if(!SM(this.#A.serverMaxWindowBits)){r(new Error("Invalid server_max_window_bits"));return}n=Number.parseInt(this.#A.serverMaxWindowBits)}try{this.#e=FM({windowBits:n})}catch(s){r(s);return}this.#e[ro]=[],this.#e[jn]=0,this.#e.on("data",s=>{if(this.#e[jn]+=s.length,this.#t>0&&this.#e[jn]>this.#t){r(new NM),this.#e.removeAllListeners(),this.#e=null;return}this.#e[ro].push(s)}),this.#e.on("error",s=>{this.#e=null,r(s)})}this.#e.write(A),t&&this.#e.write(MM),this.#e.flush(()=>{if(!this.#e)return;let n=Buffer.concat(this.#e[ro],this.#e[jn]);this.#e[ro].length=0,this.#e[jn]=0,r(null,n)})}};mf.exports={PerMessageDeflate:Hg}});var Tf=p((aG,Lf)=>{"use strict";var{Writable:UM}=y("node:stream"),LM=y("node:assert"),{parserStates:Pe,opcodes:vr,states:TM,emptyBuffer:kf,sentCloseFrameState:bf}=vt(),{kReadyState:xM,kSentClose:Ff,kResponse:Rf,kReceivedClose:Sf}=Pn(),{channels:no}=Xt(),{isValidStatusCode:YM,isValidOpcode:GM,failWebsocketConnection:eA,websocketMessageReceived:Nf,utf8Decode:JM,isControlFrame:Vg,isTextBinaryFrame:vg,isContinuationFrame:HM}=Zn(),{WebsocketFrameSend:Mf}=eo(),{closeWebSocketConnection:Uf}=Jg(),{PerMessageDeflate:VM}=Df(),{MessageSizeExceededError:qg}=Z();function $n(e,A,t){Uf(e,A,t,Buffer.byteLength(t)),eA(e,t)}var Wg=class extends UM{#e=[];#A=0;#t=0;#s=!1;#n=Pe.INFO;#r={};#i=[];#o;#c;#a;constructor(A,t,r={}){super(),this.ws=A,this.#o=t??new Map,this.#c=r.maxFragments??0,this.#a=r.maxPayloadSize??0,this.#o.has("permessage-deflate")&&this.#o.set("permessage-deflate",new VM(t,r))}_write(A,t,r){this.#e.push(A),this.#t+=A.length,this.#s=!0,this.run(r)}#g(){return this.#a>0&&!Vg(this.#r.opcode)&&this.#r.payloadLength+this.#A>this.#a?($n(this.ws,1009,"Payload size exceeds maximum allowed size"),!1):!0}run(A){for(;this.#s;)if(this.#n===Pe.INFO){if(this.#t<2)return A();let t=this.consume(2),r=(t[0]&128)!==0,n=t[0]&15,s=(t[1]&128)===128,i=!r&&n!==vr.CONTINUATION,o=t[1]&127,a=t[0]&64,g=t[0]&32,l=t[0]&16;if(!GM(n))return eA(this.ws,"Invalid opcode received"),A();if(s)return eA(this.ws,"Frame cannot be masked"),A();if(a!==0&&!this.#o.has("permessage-deflate")){eA(this.ws,"Expected RSV1 to be clear.");return}if(g!==0||l!==0){eA(this.ws,"RSV1, RSV2, RSV3 must be clear");return}if(i&&!vg(n)){eA(this.ws,"Invalid frame type was fragmented.");return}if(vg(n)&&this.#i.length>0){eA(this.ws,"Expected continuation frame");return}if(this.#r.fragmented&&i){eA(this.ws,"Fragmented frame exceeded 125 bytes.");return}if((o>125||i)&&Vg(n)){eA(this.ws,"Control frame either too large or fragmented");return}if(HM(n)&&this.#i.length===0&&!this.#r.compressed){eA(this.ws,"Unexpected continuation frame");return}if(o<=125){if(this.#r.payloadLength=o,this.#n=Pe.READ_DATA,!this.#g())return}else o===126?this.#n=Pe.PAYLOADLENGTH_16:o===127&&(this.#n=Pe.PAYLOADLENGTH_64);vg(n)&&(this.#r.binaryType=n,this.#r.compressed=a!==0),this.#r.opcode=n,this.#r.masked=s,this.#r.fin=r,this.#r.fragmented=i}else if(this.#n===Pe.PAYLOADLENGTH_16){if(this.#t<2)return A();let t=this.consume(2);if(this.#r.payloadLength=t.readUInt16BE(0),this.#n=Pe.READ_DATA,!this.#g())return}else if(this.#n===Pe.PAYLOADLENGTH_64){if(this.#t<8)return A();let t=this.consume(8),r=t.readUInt32BE(0),n=t.readUInt32BE(4);if(r!==0||n>2**31-1){eA(this.ws,"Received payload length > 2^31 bytes.");return}if(this.#r.payloadLength=n,this.#n=Pe.READ_DATA,!this.#g())return}else if(this.#n===Pe.READ_DATA){if(this.#t<this.#r.payloadLength)return A();let t=this.consume(this.#r.payloadLength);if(Vg(this.#r.opcode))this.#s=this.parseControlFrame(t),this.#n=Pe.INFO;else if(this.#r.compressed){this.#o.get("permessage-deflate").decompress(t,this.#r.fin,(r,n)=>{if(r){let s=r instanceof qg?1009:1007;$n(this.ws,s,r.message);return}if(this.writeFragments(n)){if(this.#a>0&&this.#A>this.#a){$n(this.ws,1009,new qg().message);return}if(!this.#r.fin){this.#n=Pe.INFO,this.#s=!0,this.run(A);return}Nf(this.ws,this.#r.binaryType,this.consumeFragments()),this.#s=!0,this.#n=Pe.INFO,this.run(A)}}),this.#s=!1;break}else{if(!this.writeFragments(t))return;if(this.#a>0&&this.#A>this.#a){$n(this.ws,1009,new qg().message);return}!this.#r.fragmented&&this.#r.fin&&Nf(this.ws,this.#r.binaryType,this.consumeFragments()),this.#n=Pe.INFO}}}consume(A){if(A>this.#t)throw new Error("Called consume() before buffers satiated.");if(A===0)return kf;if(this.#e[0].length===A)return this.#t-=this.#e[0].length,this.#e.shift();let t=Buffer.allocUnsafe(A),r=0;for(;r!==A;){let n=this.#e[0],{length:s}=n;if(s+r===A){t.set(this.#e.shift(),r);break}else if(s+r>A){t.set(n.subarray(0,A-r),r),this.#e[0]=n.subarray(A-r);break}else t.set(this.#e.shift(),r),r+=n.length}return this.#t-=A,t}writeFragments(A){return this.#c>0&&this.#i.length===this.#c?($n(this.ws,1008,"Too many message fragments"),!1):(this.#A+=A.length,this.#i.push(A),!0)}consumeFragments(){let A=this.#i;if(A.length===1)return this.#A=0,A.shift();let t=Buffer.concat(A,this.#A);return this.#i=[],this.#A=0,t}parseCloseBody(A){LM(A.length!==1);let t;if(A.length>=2&&(t=A.readUInt16BE(0)),t!==void 0&&!YM(t))return{code:1002,reason:"Invalid status code",error:!0};let r=A.subarray(2);r[0]===239&&r[1]===187&&r[2]===191&&(r=r.subarray(3));try{r=JM(r)}catch{return{code:1007,reason:"Invalid UTF-8",error:!0}}return{code:t,reason:r,error:!1}}parseControlFrame(A){let{opcode:t,payloadLength:r}=this.#r;if(t===vr.CLOSE){if(r===1)return eA(this.ws,"Received close frame with a 1-byte body."),!1;if(this.#r.closeInfo=this.parseCloseBody(A),this.#r.closeInfo.error){let{code:n,reason:s}=this.#r.closeInfo;return Uf(this.ws,n,s,s.length),eA(this.ws,s),!1}if(this.ws[Ff]!==bf.SENT){let n=kf;this.#r.closeInfo.code&&(n=Buffer.allocUnsafe(2),n.writeUInt16BE(this.#r.closeInfo.code,0));let s=new Mf(n);this.ws[Rf].socket.write(s.createFrame(vr.CLOSE),i=>{i||(this.ws[Ff]=bf.SENT)})}return this.ws[xM]=TM.CLOSING,this.ws[Sf]=!0,!1}else if(t===vr.PING){if(!this.ws[Sf]){let n=new Mf(A);this.ws[Rf].socket.write(n.createFrame(vr.PONG)),no.ping.hasSubscribers&&no.ping.publish({payload:A})}}else t===vr.PONG&&no.pong.hasSubscribers&&no.pong.publish({payload:A});return!0}get closingInfo(){return this.#r.closeInfo}};Lf.exports={ByteParser:Wg}});var Hf=p((cG,Jf)=>{"use strict";var{WebsocketFrameSend:vM}=eo(),{opcodes:xf,sendHints:qr}=vt(),qM=Ka(),Yf=Buffer[Symbol.species],Pg=class{#e=new qM;#A=!1;#t;constructor(A){this.#t=A}add(A,t,r){if(r!==qr.blob){let s=Gf(A,r);if(!this.#A)this.#t.write(s,t);else{let i={promise:null,callback:t,frame:s};this.#e.push(i)}return}let n={promise:A.arrayBuffer().then(s=>{n.promise=null,n.frame=Gf(s,r)}),callback:t,frame:null};this.#e.push(n),this.#A||this.#s()}async#s(){this.#A=!0;let A=this.#e;for(;!A.isEmpty();){let t=A.shift();t.promise!==null&&await t.promise,this.#t.write(t.frame,t.callback),t.callback=t.frame=null}this.#A=!1}};function Gf(e,A){return new vM(WM(e,A)).createFrame(A===qr.string?xf.TEXT:xf.BINARY)}function WM(e,A){switch(A){case qr.string:return Buffer.from(e);case qr.arrayBuffer:case qr.blob:return new Yf(e);case qr.typedArray:return new Yf(e.buffer,e.byteOffset,e.byteLength)}}Jf.exports={SendQueue:Pg}});var Kf=p((gG,_f)=>{"use strict";var{webidl:J}=Se(),{URLSerializer:PM}=He(),{environmentSettingsObject:Vf}=Oe(),{staticPropertyDescriptors:Bt,states:es,sentCloseFrameState:OM,sendHints:so}=vt(),{kWebSocketURL:vf,kReadyState:Og,kController:qf,kBinaryType:io,kResponse:Wf,kSentClose:zM,kByteParser:ZM}=Pn(),{isConnecting:_M,isEstablished:KM,isClosing:XM,isValidSubprotocol:jM,fireEvent:Pf}=Zn(),{establishWebSocketConnection:$M,closeWebSocketConnection:Of}=Jg(),{ByteParser:eU}=Tf(),{kEnumerableProperty:oA,isBlobLike:zf}=v(),{getGlobalDispatcher:AU}=wi(),{types:Zf}=y("node:util"),{ErrorEvent:tU,CloseEvent:rU}=Jr(),{SendQueue:nU}=Hf(),AA=class e extends EventTarget{#e={open:null,error:null,close:null,message:null};#A=0;#t="";#s="";#n;constructor(A,t=[]){super(),J.util.markAsUncloneable(this);let r="WebSocket constructor";J.argumentLengthCheck(arguments,1,r);let n=J.converters["DOMString or sequence<DOMString> or WebSocketInit"](t,r,"options");A=J.converters.USVString(A,r,"url"),t=n.protocols;let s=Vf.settingsObject.baseUrl,i;try{i=new URL(A,s)}catch(a){throw new DOMException(a,"SyntaxError")}if(i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),i.protocol!=="ws:"&&i.protocol!=="wss:")throw new DOMException(`Expected a ws: or wss: protocol, got ${i.protocol}`,"SyntaxError");if(i.hash||i.href.endsWith("#"))throw new DOMException("Got fragment","SyntaxError");if(typeof t=="string"&&(t=[t]),t.length!==new Set(t.map(a=>a.toLowerCase())).size)throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");if(t.length>0&&!t.every(a=>jM(a)))throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");this[vf]=new URL(i.href);let o=Vf.settingsObject;this[qf]=$M(i,t,o,this,(a,g)=>this.#r(a,g),n),this[Og]=e.CONNECTING,this[zM]=OM.NOT_SENT,this[io]="blob"}close(A=void 0,t=void 0){J.brandCheck(this,e);let r="WebSocket.close";if(A!==void 0&&(A=J.converters["unsigned short"](A,r,"code",{clamp:!0})),t!==void 0&&(t=J.converters.USVString(t,r,"reason")),A!==void 0&&A!==1e3&&(A<3e3||A>4999))throw new DOMException("invalid code","InvalidAccessError");let n=0;if(t!==void 0&&(n=Buffer.byteLength(t),n>123))throw new DOMException(`Reason must be less than 123 bytes; received ${n}`,"SyntaxError");Of(this,A,t,n)}send(A){J.brandCheck(this,e);let t="WebSocket.send";if(J.argumentLengthCheck(arguments,1,t),A=J.converters.WebSocketSendData(A,t,"data"),_M(this))throw new DOMException("Sent before connected.","InvalidStateError");if(!(!KM(this)||XM(this)))if(typeof A=="string"){let r=Buffer.byteLength(A);this.#A+=r,this.#n.add(A,()=>{this.#A-=r},so.string)}else Zf.isArrayBuffer(A)?(this.#A+=A.byteLength,this.#n.add(A,()=>{this.#A-=A.byteLength},so.arrayBuffer)):ArrayBuffer.isView(A)?(this.#A+=A.byteLength,this.#n.add(A,()=>{this.#A-=A.byteLength},so.typedArray)):zf(A)&&(this.#A+=A.size,this.#n.add(A,()=>{this.#A-=A.size},so.blob))}get readyState(){return J.brandCheck(this,e),this[Og]}get bufferedAmount(){return J.brandCheck(this,e),this.#A}get url(){return J.brandCheck(this,e),PM(this[vf])}get extensions(){return J.brandCheck(this,e),this.#s}get protocol(){return J.brandCheck(this,e),this.#t}get onopen(){return J.brandCheck(this,e),this.#e.open}set onopen(A){J.brandCheck(this,e),this.#e.open&&this.removeEventListener("open",this.#e.open),typeof A=="function"?(this.#e.open=A,this.addEventListener("open",A)):this.#e.open=null}get onerror(){return J.brandCheck(this,e),this.#e.error}set onerror(A){J.brandCheck(this,e),this.#e.error&&this.removeEventListener("error",this.#e.error),typeof A=="function"?(this.#e.error=A,this.addEventListener("error",A)):this.#e.error=null}get onclose(){return J.brandCheck(this,e),this.#e.close}set onclose(A){J.brandCheck(this,e),this.#e.close&&this.removeEventListener("close",this.#e.close),typeof A=="function"?(this.#e.close=A,this.addEventListener("close",A)):this.#e.close=null}get onmessage(){return J.brandCheck(this,e),this.#e.message}set onmessage(A){J.brandCheck(this,e),this.#e.message&&this.removeEventListener("message",this.#e.message),typeof A=="function"?(this.#e.message=A,this.addEventListener("message",A)):this.#e.message=null}get binaryType(){return J.brandCheck(this,e),this[io]}set binaryType(A){J.brandCheck(this,e),A!=="blob"&&A!=="arraybuffer"?this[io]="blob":this[io]=A}#r(A,t){this[Wf]=A;let r=this[qf]?.dispatcher?.webSocketOptions,n=r?.maxFragments,s=r?.maxPayloadSize,i=new eU(this,t,{maxFragments:n,maxPayloadSize:s});i.on("drain",sU),i.on("error",iU.bind(this)),A.socket.ws=this,this[ZM]=i,this.#n=new nU(A.socket),this[Og]=es.OPEN;let o=A.headersList.get("sec-websocket-extensions");o!==null&&(this.#s=o);let a=A.headersList.get("sec-websocket-protocol");a!==null&&(this.#t=a),Pf("open",this)}};AA.CONNECTING=AA.prototype.CONNECTING=es.CONNECTING;AA.OPEN=AA.prototype.OPEN=es.OPEN;AA.CLOSING=AA.prototype.CLOSING=es.CLOSING;AA.CLOSED=AA.prototype.CLOSED=es.CLOSED;Object.defineProperties(AA.prototype,{CONNECTING:Bt,OPEN:Bt,CLOSING:Bt,CLOSED:Bt,url:oA,readyState:oA,bufferedAmount:oA,onopen:oA,onerror:oA,onclose:oA,close:oA,onmessage:oA,binaryType:oA,send:oA,extensions:oA,protocol:oA,[Symbol.toStringTag]:{value:"WebSocket",writable:!1,enumerable:!1,configurable:!0}});Object.defineProperties(AA,{CONNECTING:Bt,OPEN:Bt,CLOSING:Bt,CLOSED:Bt});J.converters["sequence<DOMString>"]=J.sequenceConverter(J.converters.DOMString);J.converters["DOMString or sequence<DOMString>"]=function(e,A,t){return J.util.Type(e)==="Object"&&Symbol.iterator in e?J.converters["sequence<DOMString>"](e):J.converters.DOMString(e,A,t)};J.converters.WebSocketInit=J.dictionaryConverter([{key:"protocols",converter:J.converters["DOMString or sequence<DOMString>"],defaultValue:()=>new Array(0)},{key:"dispatcher",converter:J.converters.any,defaultValue:()=>AU()},{key:"headers",converter:J.nullableConverter(J.converters.HeadersInit)}]);J.converters["DOMString or sequence<DOMString> or WebSocketInit"]=function(e){return J.util.Type(e)==="Object"&&!(Symbol.iterator in e)?J.converters.WebSocketInit(e):{protocols:J.converters["DOMString or sequence<DOMString>"](e)}};J.converters.WebSocketSendData=function(e){if(J.util.Type(e)==="Object"){if(zf(e))return J.converters.Blob(e,{strict:!1});if(ArrayBuffer.isView(e)||Zf.isArrayBuffer(e))return J.converters.BufferSource(e)}return J.converters.USVString(e)};function sU(){this.ws[Wf].socket.resume()}function iU(e){let A,t;e instanceof rU?(A=e.reason,t=e.code):A=e.message,Pf("error",this,()=>new tU("error",{error:e,message:A})),Of(this,t)}_f.exports={WebSocket:AA}});var zg=p((lG,Xf)=>{"use strict";function oU(e){return e.indexOf("\0")===-1}function aU(e){if(e.length===0)return!1;for(let A=0;A<e.length;A++)if(e.charCodeAt(A)<48||e.charCodeAt(A)>57)return!1;return!0}function cU(e){return new Promise(A=>{setTimeout(A,e).unref()})}Xf.exports={isValidLastEventId:oU,isASCIINumber:aU,delay:cU}});var Ad=p((QG,ed)=>{"use strict";var{Transform:gU}=y("node:stream"),{isASCIINumber:jf,isValidLastEventId:$f}=zg(),_A=[239,187,191],Zg=10,oo=13,lU=58,QU=32,_g=class extends gU{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(A={}){A.readableObjectMode=!0,super(A),this.state=A.eventSourceSettings||{},A.push&&(this.push=A.push)}_transform(A,t,r){if(A.length===0){r();return}if(this.buffer?this.buffer=Buffer.concat([this.buffer,A]):this.buffer=A,this.checkBOM)switch(this.buffer.length){case 1:if(this.buffer[0]===_A[0]){r();return}this.checkBOM=!1,r();return;case 2:if(this.buffer[0]===_A[0]&&this.buffer[1]===_A[1]){r();return}this.checkBOM=!1;break;case 3:if(this.buffer[0]===_A[0]&&this.buffer[1]===_A[1]&&this.buffer[2]===_A[2]){this.buffer=Buffer.alloc(0),this.checkBOM=!1,r();return}this.checkBOM=!1;break;default:this.buffer[0]===_A[0]&&this.buffer[1]===_A[1]&&this.buffer[2]===_A[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]===Zg){this.buffer=this.buffer.subarray(this.pos+1),this.pos=0,this.crlfCheck=!1;continue}this.crlfCheck=!1}if(this.buffer[this.pos]===Zg||this.buffer[this.pos]===oo){this.buffer[this.pos]===oo&&(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]===Zg||this.buffer[this.pos]===oo){this.buffer[this.pos]===oo&&(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++}r()}parseLine(A,t){if(A.length===0)return;let r=A.indexOf(lU);if(r===0)return;let n="",s="";if(r!==-1){n=A.subarray(0,r).toString("utf8");let i=r+1;A[i]===QU&&++i,s=A.subarray(i).toString("utf8")}else n=A.toString("utf8"),s="";switch(n){case"data":t[n]===void 0?t[n]=s:t[n]+=`
45
45
  ${s}`;break;case"retry":jf(s)&&(t[n]=s);break;case"id":$f(s)&&(t[n]=s);break;case"event":s.length>0&&(t[n]=s);break}}processEvent(A){A.retry&&jf(A.retry)&&(this.state.reconnectionTime=parseInt(A.retry,10)),A.id&&$f(A.id)&&(this.state.lastEventId=A.id),A.data!==void 0&&this.push({type:A.event||"message",options:{data:A.data,lastEventId:this.state.lastEventId,origin:this.state.origin}})}clearEvent(){this.event={data:void 0,event:void 0,id:void 0,retry:void 0}}};ed.exports={EventSourceStream:_g}});var cd=p((EG,ad)=>{"use strict";var{pipeline:EU}=y("node:stream"),{fetching:BU}=Vn(),{makeRequest:uU}=Ur(),{webidl:KA}=Se(),{EventSourceStream:IU}=Ad(),{parseMIMEType:hU}=He(),{createFastMessageEvent:CU}=Jr(),{isNetworkError:td}=Jn(),{delay:fU}=zg(),{kEnumerableProperty:qt}=v(),{environmentSettingsObject:rd}=Oe(),nd=!1,sd=3e3,As=0,id=1,ts=2,dU="anonymous",wU="use-credentials",Wr=class e extends EventTarget{#e={open:null,error:null,message:null};#A=null;#t=!1;#s=As;#n=null;#r=null;#i;#o;constructor(A,t={}){super(),KA.util.markAsUncloneable(this);let r="EventSource constructor";KA.argumentLengthCheck(arguments,1,r),nd||(nd=!0,process.emitWarning("EventSource is experimental, expect them to change at any time.",{code:"UNDICI-ES"})),A=KA.converters.USVString(A,r,"url"),t=KA.converters.EventSourceInitDict(t,r,"eventSourceInitDict"),this.#i=t.dispatcher,this.#o={lastEventId:"",reconnectionTime:sd};let n=rd,s;try{s=new URL(A,n.settingsObject.baseUrl),this.#o.origin=s.origin}catch(a){throw new DOMException(a,"SyntaxError")}this.#A=s.href;let i=dU;t.withCredentials&&(i=wU,this.#t=!0);let o={redirect:"follow",keepalive:!0,mode:"cors",credentials:i==="anonymous"?"same-origin":"omit",referrer:"no-referrer"};o.client=rd.settingsObject,o.headersList=[["accept",{name:"accept",value:"text/event-stream"}]],o.cache="no-store",o.initiator="other",o.urlList=[new URL(this.#A)],this.#n=uU(o),this.#c()}get readyState(){return this.#s}get url(){return this.#A}get withCredentials(){return this.#t}#c(){if(this.#s===ts)return;this.#s=As;let A={request:this.#n,dispatcher:this.#i},t=r=>{td(r)&&(this.dispatchEvent(new Event("error")),this.close()),this.#a()};A.processResponseEndOfBody=t,A.processResponse=r=>{if(td(r))if(r.aborted){this.close(),this.dispatchEvent(new Event("error"));return}else{this.#a();return}let n=r.headersList.get("content-type",!0),s=n!==null?hU(n):"failure",i=s!=="failure"&&s.essence==="text/event-stream";if(r.status!==200||i===!1){this.close(),this.dispatchEvent(new Event("error"));return}this.#s=id,this.dispatchEvent(new Event("open")),this.#o.origin=r.urlList[r.urlList.length-1].origin;let o=new IU({eventSourceSettings:this.#o,push:a=>{this.dispatchEvent(CU(a.type,a.options))}});EU(r.body.stream,o,a=>{a?.aborted===!1&&(this.close(),this.dispatchEvent(new Event("error")))})},this.#r=BU(A)}async#a(){this.#s!==ts&&(this.#s=As,this.dispatchEvent(new Event("error")),await fU(this.#o.reconnectionTime),this.#s===As&&(this.#o.lastEventId.length&&this.#n.headersList.set("last-event-id",this.#o.lastEventId,!0),this.#c()))}close(){KA.brandCheck(this,e),this.#s!==ts&&(this.#s=ts,this.#r.abort(),this.#n=null)}get onopen(){return this.#e.open}set onopen(A){this.#e.open&&this.removeEventListener("open",this.#e.open),typeof A=="function"?(this.#e.open=A,this.addEventListener("open",A)):this.#e.open=null}get onmessage(){return this.#e.message}set onmessage(A){this.#e.message&&this.removeEventListener("message",this.#e.message),typeof A=="function"?(this.#e.message=A,this.addEventListener("message",A)):this.#e.message=null}get onerror(){return this.#e.error}set onerror(A){this.#e.error&&this.removeEventListener("error",this.#e.error),typeof A=="function"?(this.#e.error=A,this.addEventListener("error",A)):this.#e.error=null}},od={CONNECTING:{__proto__:null,configurable:!1,enumerable:!0,value:As,writable:!1},OPEN:{__proto__:null,configurable:!1,enumerable:!0,value:id,writable:!1},CLOSED:{__proto__:null,configurable:!1,enumerable:!0,value:ts,writable:!1}};Object.defineProperties(Wr,od);Object.defineProperties(Wr.prototype,od);Object.defineProperties(Wr.prototype,{close:qt,onerror:qt,onmessage:qt,onopen:qt,readyState:qt,url:qt,withCredentials:qt});KA.converters.EventSourceInitDict=KA.dictionaryConverter([{key:"withCredentials",converter:KA.converters.boolean,defaultValue:()=>!1},{key:"dispatcher",converter:KA.converters.any}]);ad.exports={EventSource:Wr,defaultReconnectionTime:sd}});var Ed=p((BG,G)=>{"use strict";var yU=hr(),gd=sn(),pU=Cr(),mU=iu(),DU=fr(),kU=Ic(),bU=Su(),FU=Yu(),ld=Z(),co=v(),{InvalidArgumentError:ao}=ld,Pr=pI(),RU=an(),SU=Xc(),NU=sh(),MU=eg(),UU=Gc(),LU=li(),{getGlobalDispatcher:Qd,setGlobalDispatcher:TU}=wi(),xU=yi(),YU=ei(),GU=Ai();Object.assign(gd.prototype,Pr);G.exports.Dispatcher=gd;G.exports.Client=yU;G.exports.Pool=pU;G.exports.BalancedPool=mU;G.exports.Agent=DU;G.exports.ProxyAgent=kU;G.exports.EnvHttpProxyAgent=bU;G.exports.RetryAgent=FU;G.exports.RetryHandler=LU;G.exports.DecoratorHandler=xU;G.exports.RedirectHandler=YU;G.exports.createRedirectInterceptor=GU;G.exports.interceptors={redirect:Qh(),retry:Bh(),dump:Ih(),dns:fh()};G.exports.buildConnector=RU;G.exports.errors=ld;G.exports.util={parseHeaders:co.parseHeaders,headerNameToString:co.headerNameToString};function rs(e){return(A,t,r)=>{if(typeof t=="function"&&(r=t,t=null),!A||typeof A!="string"&&typeof A!="object"&&!(A instanceof URL))throw new ao("invalid url");if(t!=null&&typeof t!="object")throw new ao("invalid opts");if(t&&t.path!=null){if(typeof t.path!="string")throw new ao("invalid opts.path");let i=t.path;t.path.startsWith("/")||(i=`/${i}`),A=new URL(co.parseOrigin(A).origin+i)}else t||(t=typeof A=="object"?A:{}),A=co.parseURL(A);let{agent:n,dispatcher:s=Qd()}=t;if(n)throw new ao("unsupported opts.agent. Did you mean opts.client?");return e.call(s,{...t,origin:A.origin,path:A.search?`${A.pathname}${A.search}`:A.pathname,method:t.method||(t.body?"PUT":"GET")},r)}}G.exports.setGlobalDispatcher=TU;G.exports.getGlobalDispatcher=Qd;var JU=Vn().fetch;G.exports.fetch=async function(A,t=void 0){try{return await JU(A,t)}catch(r){throw r&&typeof r=="object"&&Error.captureStackTrace(r),r}};G.exports.Headers=xt().Headers;G.exports.Response=Jn().Response;G.exports.Request=Ur().Request;G.exports.FormData=un().FormData;G.exports.File=globalThis.File??y("node:buffer").File;G.exports.FileReader=TC().FileReader;var{setGlobalOrigin:HU,getGlobalOrigin:VU}=ha();G.exports.setGlobalOrigin=HU;G.exports.getGlobalOrigin=VU;var{CacheStorage:vU}=WC(),{kConstruct:qU}=qi();G.exports.caches=new vU(qU);var{deleteCookie:WU,getCookies:PU,getSetCookies:OU,setCookie:zU}=Af();G.exports.deleteCookie=WU;G.exports.getCookies=PU;G.exports.getSetCookies=OU;G.exports.setCookie=zU;var{parseMIMEType:ZU,serializeAMimeType:_U}=He();G.exports.parseMIMEType=ZU;G.exports.serializeAMimeType=_U;var{CloseEvent:KU,ErrorEvent:XU,MessageEvent:jU}=Jr();G.exports.WebSocket=Kf().WebSocket;G.exports.CloseEvent=KU;G.exports.ErrorEvent=XU;G.exports.MessageEvent=jU;G.exports.request=rs(Pr.request);G.exports.stream=rs(Pr.stream);G.exports.pipeline=rs(Pr.pipeline);G.exports.connect=rs(Pr.connect);G.exports.upgrade=rs(Pr.upgrade);G.exports.MockClient=SU;G.exports.MockPool=MU;G.exports.MockAgent=NU;G.exports.mockErrors=UU;var{EventSource:$U}=cd();G.exports.EventSource=$U});import Or from"node:net";import eL from"node:dns";function go(e){let A=String(e).toLowerCase().split("%")[0];if((A.match(/::/g)||[]).length>1)return null;let t=l=>{if(!l)return[];let c=l.split(":"),Q=c.at(-1);if(Q?.includes(".")){let B=Q.split(".").map(Number);if(B.length!==4||B.some(E=>!Number.isInteger(E)||E<0||E>255))return null;c.splice(c.length-1,1,(B[0]<<8|B[1]).toString(16),(B[2]<<8|B[3]).toString(16))}return c.some(B=>!/^[0-9a-f]{1,4}$/.test(B))?null:c.map(B=>Number.parseInt(B,16))},[r,n]=A.split("::"),s=t(r),i=t(n);if(!s||!i)return null;let o=A.includes("::"),a=8-s.length-i.length;if(!o&&a!==0||o&&a<1)return null;let g=[...s,...Array(Math.max(0,a)).fill(0),...i];return g.length!==8?null:Uint8Array.from(g.flatMap(l=>[l>>8,l&255]))}function Kg(e,A,t){let r=Math.floor(t/8),n=t%8;for(let i=0;i<r;i+=1)if(e[i]!==A[i])return!1;if(!n)return!0;let s=255<<8-n;return(e[r]&s)===(A[r]&s)}function Xg(e){if(Or.isIPv4(e)){let A=e.split(".").map(Number);return!(A[0]===0||A[0]===10||A[0]===127||A[0]>=224||A[0]===100&&A[1]>=64&&A[1]<=127||A[0]===169&&A[1]===254||A[0]===172&&A[1]>=16&&A[1]<=31||A[0]===192&&(A[1]===0||A[1]===2||A[1]===168)||A[0]===192&&A[1]===88&&A[2]===99||A[0]===198&&(A[1]===18||A[1]===19||A[1]===51)||A[0]===203&&A[1]===0&&A[2]===113)}if(Or.isIPv6(e)){let A=go(e);if(!A)return!1;let t=go("::ffff:0:0");return Kg(A,t,96)?Xg([...A.slice(12)].join(".")):Kg(A,go("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([n,s])=>Kg(A,go(n),s)):!1}return!1}function tL(e){let A;try{A=new URL(String(e))}catch{return{ok:!1,error:`not a valid URL: ${String(e).slice(0,120)}`}}if(A.protocol!=="http:"&&A.protocol!=="https:")return{ok:!1,error:`refused protocol ${A.protocol} (only http/https)`};let t=A.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,"");if(AL.has(t)||t.endsWith(".localhost")||t.endsWith(".internal"))return{ok:!1,error:`refused internal host ${t}`};let r=Or.isIP(t);return r!==0&&!Xg(t)?{ok:!1,error:`refused private address ${t}`}:{ok:!0,url:A,host:t,isLiteralIp:r!==0}}async function Bd(e,{lookupFn:A=eL.promises.lookup}={}){let t=tL(e);if(!t.ok)return t;if(t.isLiteralIp)return{ok:!0,url:t.url};let r;try{r=await A(t.host,{all:!0,verbatim:!0})}catch{return{ok:!1,error:`refused: ${t.host} did not resolve`}}return!Array.isArray(r)||r.length===0||r.some(n=>!Xg(n.address))?{ok:!1,error:`refused: ${t.host} resolves to a non-public address`}:{ok:!0,url:t.url,addresses:r}}async function ud(){let e,A;try{let o=await Promise.resolve().then(()=>zw(Ed(),1));e=o.Agent,A=o.fetch}catch{return null}if(typeof e!="function"||typeof A!="function")return null;let t=o=>String(o).toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,""),r=new Map,n=o=>(Array.isArray(o)?o:[o]).map(a=>typeof a=="string"?{address:a}:a).filter(a=>a&&a.address).map(a=>({address:a.address,family:a.family||(Or.isIPv6(a.address)?6:4)})),s=o=>{let a=t(o);if(Or.isIP(a))return[{address:a,family:Or.isIPv6(a)?6:4}];let g=r.get(a);if(!g||!g.length)throw new Error(`refused: unpinned host ${o} during pinned fetch`);return g},i=new e({connect:{lookup(o,a,g){let l;try{l=s(o)}catch(c){return g(c)}return a?.all?g(null,l):g(null,l[0].address,l[0].family)}}});return{dispatcher:i,fetch:(o,a={})=>A(o,{...a,dispatcher:i}),pin(o,a,g){r.set(t(o),n(typeof a=="string"?[{address:a,family:g}]:a))},resolve:s,async close(){try{await i.destroy()}catch{}}}}var AL,Id=De(()=>{AL=new Set(["localhost","metadata.google.internal","metadata.goog"])});import{createHash as rL}from"node:crypto";function oL(e){let A=String(e||"").toLowerCase();return dd.includes(A)||/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(A)}function aL(e){let A={};for(let[t,r]of Object.entries(e||{}))oL(t)||(A[t]=r);return A}function cL(e,A){if(!e)throw new Error(`HTTP redirect from ${A} missing Location`);let t=new URL(String(e),String(A));if(t.protocol!=="http:"&&t.protocol!=="https:")throw new Error(`HTTP redirect from ${A} used unsupported protocol ${t.protocol}`);return t.toString()}function gL(e,A){return new URL(String(e)).origin===new URL(String(A)).origin}function lL(e,A,t){let r={};for(let[a,g]of Object.entries(t||{}))r[a.toLowerCase()]=g;let n=Object.keys(r).filter(a=>/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(a)),i=[...new Set([...dd,...n])].sort().map(a=>`${a}=${r[a]??""}`).join(`
46
- `),o=rL("sha256").update(i).digest("hex").slice(0,32);return`${e} ${A} ${o}`}function QL(e,A){let t=Number(A);return Number.isFinite(t)&&t>0?Math.min(t*1e3,Cd):Math.min(250*2**e,Cd)+Math.floor(Math.random()*100)}async function BL(e,{fetchImpl:A,method:t,headers:r,body:n,timeoutMs:s,lookupFn:i,realFetch:o}){let a=new AbortController,g=setTimeout(()=>a.abort(),s),l=null,c=A;try{let Q=String(e),B={...r||{}};for(let E=0;E<=fd;E+=1){let u=await c(Q,{method:t,headers:B,body:n,signal:a.signal,redirect:"manual"}),h=await u.text(),I=null;if(h)try{I=JSON.parse(h)}catch{I=null}if(iL.has(u.status)){if(t!=="GET"&&t!=="HEAD"){let f=new Error(`HTTP ${u.status} ${t} ${Q} redirected non-idempotent request`);throw f.status=u.status,f.body=I??h.slice(0,300),f}if(E===fd)throw new Error(`HTTP redirect loop for ${e}`);let C=cL(u.headers?.get?.("location"),Q);if(!gL(C,Q)){let f=await Bd(C,i?{lookupFn:i}:{});if(!f.ok){let R=new Error(`HTTP redirect from ${Q} ${f.error}`);throw R.status=u.status,R}B=aL(B),o&&f.addresses?.length&&(l||(l=await ud()),l&&(l.pin(new URL(C).hostname,f.addresses[0].address,f.addresses[0].family),c=l.fetch))}Q=C;continue}if(!u.ok){let C=new Error(`HTTP ${u.status} ${t} ${Q}`);throw C.status=u.status,C.retryAfter=u.headers?.get?.("retry-after")??null,C.body=I??h.slice(0,300),C}return I??h}throw new Error(`HTTP redirect loop for ${e}`)}finally{clearTimeout(g),l&&await l.close()}}async function wd(e,A={}){let t=A.fetchImpl||globalThis.fetch;if(typeof t!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let r=A.timeoutMs??12e3,n=(A.method||"GET").toUpperCase(),s={Accept:"application/json",...A.headers||{}},i=A.body;i!=null&&typeof i!="string"&&(s["Content-Type"]=s["Content-Type"]||"application/json",i=JSON.stringify(i));let o=Number.isInteger(A.retries)?Math.max(A.retries,0):sL,a=A.lookupFn,g=!A.fetchImpl,l=async()=>{let u;for(let h=0;h<=o;h++)try{return await BL(e,{fetchImpl:t,method:n,headers:s,body:i,timeoutMs:r,lookupFn:a,realFetch:g})}catch(I){u=I;let C=I?.status,D=I?.name==="AbortError",f=new Set([408,425,429]),R=C!=null?f.has(C)||nL.has(C)&&hd.has(n):!D&&hd.has(n);if(h===o||!R)throw I;await EL(QL(h,I?.retryAfter))}throw u};if(!(A.dedupe!==!1&&n==="GET"&&i==null))return l();let Q=lL(n,e,s),B=jg.get(Q);if(B)return B;let E=l().finally(()=>jg.delete(Q));return jg.set(Q,E),E}var nL,hd,sL,Cd,dd,iL,fd,jg,EL,yd=De(()=>{Id();nL=new Set([408,425,429,500,502,503,504]),hd=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),sL=2,Cd=4e3,dd=["authorization","x-api-key","x-tensor-api-key","0x-api-key","api-key","cookie","proxy-authorization"],iL=new Set([301,302,303,307,308]),fd=3;jg=new Map;EL=e=>new Promise(A=>setTimeout(A,e))});function hL({testnet:e,baseUrl:A}={}){if(A)return A.replace(/\/$/,"").endsWith("/info")?A:`${A.replace(/\/$/,"")}/info`;if(process.env.HL_INFO_URL)return process.env.HL_INFO_URL;if(process.env.HL_API_URL){let t=process.env.HL_API_URL.replace(/\/$/,"");return t.endsWith("/info")?t:`${t}/info`}return e||process.env.HL_TESTNET==="1"?IL:uL}async function $g(e,A={}){if(!e||!e.type)throw new Error("hlInfo requires body.type");let t=hL(A);return wd(t,{method:"POST",body:e,fetchImpl:A.fetchImpl,timeoutMs:A.timeoutMs})}async function pd(e={}){return $g({type:"meta"},e)}async function md({coin:e,interval:A="1h",startTime:t,endTime:r},n={}){if(!e)throw new Error("hlCandleSnapshot requires coin");let s={type:"candleSnapshot",req:{coin:String(e),interval:A,startTime:t??Date.now()-24*3600*1e3,endTime:r??Date.now()}};return $g(s,n)}async function Dd({coin:e,startTime:A,endTime:t},r={}){if(!e)throw new Error("hlFundingHistory requires coin");return $g({type:"fundingHistory",coin:String(e),startTime:A??Date.now()-24*3600*1e3,endTime:t??Date.now()},r)}var uL,IL,el=De(()=>{yd();uL="https://api.hyperliquid.xyz/info",IL="https://api.hyperliquid-testnet.xyz/info"});import{createHash as CL}from"node:crypto";function UA(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function zr(e){return typeof e=="number"&&Number.isFinite(e)}function rl(e){if(e==null||typeof e!="object"||Object.isFrozen(e))return e;if(Array.isArray(e)){for(let A of e)rl(A);return Object.freeze(e)}for(let A of Object.keys(e))rl(e[A]);return Object.freeze(e)}function Wt(e){if(Array.isArray(e))return e.map(Wt);if(e!=null&&typeof e=="object"){let A={};for(let t of Object.keys(e).sort())A[t]=Wt(e[t]);return A}return e}function Al(e){return{netPnlUsd:e.metrics.netPnlUsd,netPnlPct:e.metrics.netPnlPct,maxDrawdownPct:e.metrics.maxDrawdownPct,winRate:e.metrics.winRate,profitFactor:e.metrics.profitFactor,tradeCount:e.metrics.tradeCount,sharpe:e.metrics.sharpe,turnoverUsd:e.metrics.turnoverUsd,exposurePct:e.metrics.exposurePct}}function kd(e){return{feesUsd:e.costs.feesUsd,builderFeesUsd:e.costs.builderFeesUsd,fundingUsd:e.costs.fundingUsd,slippageUsd:e.costs.slippageUsd}}function dL(e){return(e.feesUsd||0)+(e.builderFeesUsd||0)+Math.max(0,e.fundingUsd||0)+(e.slippageUsd||0)}function wL(e){let A=0;for(let t of e.trades)t.grossPnlUsd>0&&(A+=t.grossPnlUsd);return A}function yL(e,A,t){return!(!e||e.tradeCount<Math.max(1,Math.min(t,3))||!(e.netPnlUsd>0)||!(e.profitFactor>1)||!(e.maxDrawdownPct<=A.maxDailyLossPct))}function Fd(e){if(!UA(e))throw new TypeError("evidence artifact must be a plain object");if(!fL.includes(e.status))throw new TypeError("evidence artifact status is invalid");for(let A of["strategyHash","compilerHash","barsHash"])if(typeof e[A]!="string"||!/^[0-9a-f]{64}$/.test(e[A]))throw new TypeError(`evidence artifact ${A} must be a sha256 hash`);if(!UA(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(!UA(e.walkForward)||!Array.isArray(e.walkForward.windows))throw new TypeError("evidence artifact walkForward windows required");if(e.status==="pass_live_eligible"&&(!UA(e.train)||!UA(e.holdout)))throw new TypeError("live-eligible evidence artifact requires train and holdout facts");return Wt({barsHash:e.barsHash,compilerHash:e.compilerHash,flags:e.flags.map(A=>Wt(A)),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(A=>({index:A.index,trainStartIndex:A.trainStartIndex,trainEndIndex:A.trainEndIndex,passed:A.passed,reason:A.reason,evalStartIndex:A.evalStartIndex,evalEndIndex:A.evalEndIndex,metrics:A.metrics}))}})}function Rd(e){return CL("sha256").update(JSON.stringify(Fd(e)),"utf8").digest("hex")}function fA(e,A,t=0){if(!Number.isInteger(e)||e<t)throw new Error(`${A} must be an integer >= ${t}`);return e}function tl(e,A){if(!UA(e)||!UA(e.metrics))throw new Error(`${A} metrics required`);let t=fA(e.tradeCount,`${A}.tradeCount`);if(e.metrics.tradeCount!==t)throw new Error(`${A} tradeCount contradicts metrics.tradeCount`);for(let r of["netPnlUsd","profitFactor","maxDrawdownPct"])if(!zr(e.metrics[r]))throw new Error(`${A}.metrics.${r} must be finite`);if(e.metrics.maxDrawdownPct<0)throw new Error(`${A}.metrics.maxDrawdownPct must be >= 0`);return e.metrics}function pL(e,{maxDailyLossPct:A}={}){let t=e.split,r=fA(t.trainStartIndex,"split.trainStartIndex"),n=fA(t.trainEndIndex,"split.trainEndIndex"),s=fA(t.trainBarCount,"split.trainBarCount",1),i=fA(t.holdoutStartIndex,"split.holdoutStartIndex"),o=fA(t.holdoutEndIndex,"split.holdoutEndIndex"),a=fA(t.holdoutBarCount,"split.holdoutBarCount",1);if(r!==0||n-r+1!==s||i!==n+1||o-i+1!==a)throw new Error("evidence split must be contiguous, chronological, and count-consistent");if(!zr(t.trainFraction)||t.trainFraction<=0||t.trainFraction>=1)throw new Error("split.trainFraction must be in (0,1)");tl(e.train,"train");let g=tl(e.holdout,"holdout");if(g.tradeCount<1||g.netPnlUsd<=0||g.profitFactor<=1)throw new Error("live-eligible holdout metrics do not pass");if(zr(A)&&g.maxDrawdownPct>A)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,c=l.windows;if(c.length<1||l.windowsRun!==c.length)throw new Error("live-eligible walk-forward windowsRun must match nonempty windows");let Q=0,B=-1;for(let u=0;u<c.length;u++){let h=c[u];if(!UA(h)||h.index!==u||typeof h.passed!="boolean")throw new Error("walk-forward windows must be ordered and structurally valid");let I=fA(h.trainStartIndex,`walkForward.windows[${u}].trainStartIndex`),C=fA(h.trainEndIndex,`walkForward.windows[${u}].trainEndIndex`),D=fA(h.evalStartIndex,`walkForward.windows[${u}].evalStartIndex`),f=fA(h.evalEndIndex,`walkForward.windows[${u}].evalEndIndex`);if(I!==0||C>=D||D>f||D<=B)throw new Error("walk-forward windows must be chronological and disjoint");if(B=f,h.passed){if(Q+=1,h.reason!=="pass")throw new Error("passed walk-forward window reason must be pass");let R=tl({metrics:h.metrics,tradeCount:h.metrics?.tradeCount},`walkForward.windows[${u}]`);if(R.tradeCount<1||R.netPnlUsd<=0||R.profitFactor<=1)throw new Error("passed walk-forward window metrics do not pass");if(zr(A)&&R.maxDrawdownPct>A)throw new Error("passed walk-forward drawdown exceeds strategy risk")}else if(h.reason==="pass")throw new Error("failed walk-forward window cannot have pass reason")}let E=Q/c.length;if(!zr(l.passRate)||Math.abs(l.passRate-E)>Number.EPSILON||E<.6)throw new Error("walk-forward passRate contradicts concrete windows or is below live threshold")}function Sd(e,A={}){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 t=Fd(e),r=Wt({id:e.id,...t});if(JSON.stringify(Wt(e))!==JSON.stringify(r))throw new Error("evidence artifact contains fields unbound from its deterministic identity");let n=Rd(e);if(e.id!==n)throw new Error("evidence.id does not match its deterministic artifact facts digest");return e.status==="pass_live_eligible"&&pL(e,A),e}function nl({strategy:e,bars:A,backtestOptions:t={},trainFraction:r=.7,walkForwardWindows:n=3,minTrades:s=10}={}){let i=[];if(!UA(e))throw new TypeError("strategy must be a plain object");if(!Array.isArray(A))throw new TypeError("bars must be an array");if(!UA(t))throw new TypeError("backtestOptions must be a plain object");if(!zr(r)||r<=0||r>=1)throw new TypeError("trainFraction must be in (0,1)");if(!Number.isInteger(n)||n<1)throw new TypeError("walkForwardWindows must be a positive integer");if(!Number.isInteger(s)||s<0)throw new TypeError("minTrades must be an integer >= 0");let o=Ge(e),a=Zr(o),g=ns(A),l=A.length,c=(_=[],te={})=>bd({status:"fail",strategy:o,sHash:a,barsHash:g,split:te.split||{trainStartIndex:0,trainEndIndex:-1,trainBarCount:0,holdoutStartIndex:0,holdoutEndIndex:-1,holdoutBarCount:0,trainFraction:r},train:te.train||null,holdout:te.holdout||null,walkForward:te.walkForward||{windows:[],passRate:0},flags:[...i,..._]});if(l<10)return c([{type:"insufficient_bars",message:"need at least 10 bars for evidence"}]);let Q=Math.floor(l*r),B=Q,E=l-B;if(Q<5||E<3)return c([{type:"invalid_windowing",message:"train/holdout split too small",trainCount:Q,holdoutCount:E}]);let u=A.slice(0,Q),h=A.slice(B),I,C;try{I=ut(o,u,t),C=ut(o,h,t)}catch(_){return c([{type:"backtest_error",message:String(_.message||_)}])}let D={metrics:Al(I),costs:kd(I),tradeCount:I.metrics.tradeCount},f={metrics:Al(C),costs:kd(C),tradeCount:C.metrics.tradeCount},R={trainStartIndex:0,trainEndIndex:Q-1,trainBarCount:Q,holdoutStartIndex:B,holdoutEndIndex:l-1,holdoutBarCount:E,trainFraction:r},S=[],d=Math.floor(l/(n+1));if(d<3)i.push({type:"invalid_windowing",message:"walk-forward window size too small",wfSize:d});else for(let _=0;_<n;_++){let te=d*(_+1),Re=te,fe=Math.min(l,Re+d);if(fe-Re<3||te<3){S.push({index:_,trainStartIndex:0,trainEndIndex:te-1,evalStartIndex:Re,evalEndIndex:fe-1,passed:!1,reason:"window_too_small",metrics:null});continue}let wA=A.slice(Re,fe),Es;try{Es=ut(o,wA,t)}catch{S.push({index:_,trainStartIndex:0,trainEndIndex:te-1,evalStartIndex:Re,evalEndIndex:fe-1,passed:!1,reason:"backtest_error",metrics:null});continue}let Bs=Al(Es),us=yL(Bs,o.risk,s);S.push({index:_,trainStartIndex:0,trainEndIndex:te-1,evalStartIndex:Re,evalEndIndex:fe-1,passed:us,reason:us?"pass":"fail_metrics",metrics:Bs})}let se=S.filter(_=>_.passed).length,ke=S.length===0?0:se/S.length,Le={windows:S,passRate:ke,windowsRun:S.length};f.metrics.tradeCount===0&&D.metrics.tradeCount===0&&i.push({type:"no_trades",message:"no trades in train or holdout"}),f.metrics.tradeCount===0&&i.push({type:"absent_oos_trades",message:"holdout produced no trades"}),f.metrics.netPnlUsd<0&&i.push({type:"holdout_loss",message:"holdout netPnlUsd is negative"}),D.metrics.netPnlUsd>0&&f.metrics.netPnlUsd<0&&D.metrics.netPnlUsd>Math.abs(f.metrics.netPnlUsd)*.25?i.push({type:"overfit",message:"profitable train with losing holdout (OOS collapse)"}):D.metrics.netPnlUsd>0&&f.metrics.netPnlUsd>0&&f.metrics.netPnlUsd<D.metrics.netPnlUsd*.1&&D.metrics.tradeCount>=s&&i.push({type:"severe_oos_collapse",message:"holdout pnl collapsed vs train"});let me=dL(f.costs),w=wL(C);w>0&&me>w&&i.push({type:"costs_exceed_gross",message:"holdout costs exceed gross gains"});let H=i.some(_=>["insufficient_bars","invalid_windowing","absent_oos_trades","holdout_loss","no_trades","severe_oos_collapse","backtest_error"].includes(_.type)),q=i.some(_=>_.type==="overfit"),ee="fail";return f.metrics.tradeCount>=s&&f.metrics.netPnlUsd>0&&f.metrics.profitFactor>1&&f.metrics.maxDrawdownPct<=o.risk.maxDailyLossPct&&ke>=.6&&!(w>0&&me>w)&&!q&&!i.some(_=>_.type==="severe_oos_collapse"||_.type==="invalid_windowing")?ee="pass_live_eligible":!H&&f.metrics.tradeCount>0&&D.metrics.tradeCount>0&&Number.isFinite(f.metrics.netPnlUsd)?(ee="pass_paper_only",f.metrics.tradeCount<s&&i.push({type:"undersampled",message:"holdout trades below minTrades"})):q&&f.metrics.tradeCount>0&&D.metrics.netPnlUsd>0?ee="fail":f.metrics.tradeCount>0&&D.metrics.tradeCount>0&&!H?ee="pass_paper_only":ee="fail",f.metrics.netPnlUsd<0&&(ee=ee==="pass_live_eligible"?"fail":ee==="pass_paper_only"?"pass_paper_only":"fail",ee="fail"),bd({status:ee,strategy:o,sHash:a,barsHash:g,split:R,train:D,holdout:f,walkForward:Le,flags:i})}function bd({status:e,strategy:A,sHash:t,barsHash:r,split:n,train:s,holdout:i,walkForward:o,flags:a}){let g={status:e,strategyHash:t,compilerHash:Ot,barsHash:r,split:n,train:s,holdout:i,walkForward:o,flags:a};return g.id=Rd(g),rl(Wt(JSON.parse(JSON.stringify(g))))}var fL,sl=De(()=>{zt();Pt();lo();fL=Object.freeze(["fail","pass_paper_only","pass_live_eligible"])});import{createHash as mL,createHmac as DL,timingSafeEqual as RG}from"node:crypto";function il(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(il).join(",")}]`:`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${il(e[t])}`).join(",")}}`}function Nd(e){let A=String(e?.ORACLE_STAMP_HMAC_SECRET||"").trim();return A.length>=16?A:""}function Md(e=process.env){return Nd(process.env)||Nd(e)}function FL(e){let{oraclePrepared:A,prepareHash:t,prepareMac:r,note:n,...s}=e||{};return s}function RL(e){let A=FL(e);return mL("sha256").update(il(A)).digest("hex")}function SL(e,A=Md()){return A?DL("sha256",A).update(String(e)).digest("hex"):""}function Ud(e,{provider:A,kind:t,env:r=process.env}={}){if(!e||typeof e!="object")throw new Error("stampPrepared: payload object required");let n={...e,provider:e.provider||A,kind:e.kind||t,requiresUserSignature:e.requiresUserSignature!==!1,signingReady:!1,broadcastReady:!1,executionReady:!1};if(!n.provider)throw new Error("stampPrepared: provider required");if(!n.kind)throw new Error("stampPrepared: kind required");let s=Date.now(),i=s+bL,a={...n,preparedAt:s,expiresAt:i,prepareVersion:kL},g=RL(a),l=Md(r),c=l?SL(g,l):void 0,Q={...a,oraclePrepared:!0,prepareHash:g};return c&&(Q.prepareMac=c),Q}var kL,bL,SG,Ld=De(()=>{kL=2,bL=300*1e3,SG=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});function ss(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function ML(e){return String(e).toLowerCase().replace(/[^a-z0-9]/g,"")}function al(e,A="value"){if(Array.isArray(e)){e.forEach((t,r)=>al(t,`${A}[${r}]`));return}if(ss(e))for(let[t,r]of Object.entries(e)){let n=ML(t);if(NL.some(s=>n.includes(s)))throw new Error(`handoff: forbidden secret-like field at ${A}.${t}`);al(r,`${A}.${t}`)}}function ol(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function Td({strategy:e,evidence:A,shadow:t,caps:r,nowMs:n=Date.now(),env:s=process.env}={}){if(al({strategy:e,evidence:A,shadow:t,caps:r},"handoff"),!ss(e))throw new Error("handoff: strategy required");if(!ss(A))throw new Error("handoff: evidence required");if(!ss(t))throw new Error("handoff: shadow required");if(!ss(r))throw new Error("handoff: caps required");if(typeof t.id!="string"||!t.id.trim())throw new Error("handoff: shadow.id required");if(typeof t.stateHash!="string"||!/^[0-9a-f]{64}$/.test(t.stateHash))throw new Error("handoff: shadow.stateHash must be a sha256 hash");if(t.status!=="running")throw new Error("handoff: shadow.status must be running");if(!Number.isInteger(t.cursor)||t.cursor<=0)throw new Error("handoff: shadow.cursor must be a positive integer");if(!Number.isInteger(t.updatedAt)||t.updatedAt<=0||t.updatedAt>n)throw new Error("handoff: shadow.updatedAt must be a positive integer <= nowMs");let i=Ge(e,{nowMs:n}),o=Je(i);if(Sd(A,{maxDailyLossPct:i.risk.maxDailyLossPct}),A.status!=="pass_live_eligible")throw new Error("handoff: evidence.status must be pass_live_eligible");if(A.strategyHash!==o.strategyHash)throw new Error("handoff: evidence.strategyHash mismatch");if(A.compilerHash!==o.compilerHash)throw new Error("handoff: evidence.compilerHash mismatch");let a=["perStrategyNotionalUsd","maxLeverage","dailyLossCapUsd","chainAllowlist","assetAllowlist","expiresAt","killSwitchRequired"];for(let Q of a)if(!(Q in r)||r[Q]==null)throw new Error(`handoff: caps.${Q} required`);if(!ol(r.perStrategyNotionalUsd))throw new Error("handoff: caps.perStrategyNotionalUsd must be positive");if(r.perStrategyNotionalUsd>o.strategy.risk.maxNotionalUsd)throw new Error("handoff: caps.perStrategyNotionalUsd exceeds strategy.risk.maxNotionalUsd");if(!ol(r.maxLeverage))throw new Error("handoff: caps.maxLeverage must be positive");if(r.maxLeverage>o.strategy.risk.maxLeverage)throw new Error("handoff: caps.maxLeverage exceeds strategy.risk.maxLeverage");if(!ol(r.dailyLossCapUsd))throw new Error("handoff: caps.dailyLossCapUsd must be positive");let g=o.strategy.risk.maxNotionalUsd*(o.strategy.risk.maxDailyLossPct/100);if(r.dailyLossCapUsd>g)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(Q=>Q==="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]!==o.strategy.market.coin)throw new Error("handoff: caps.assetAllowlist must contain only the strategy market coin");if(!Number.isInteger(r.expiresAt)||!(r.expiresAt>n))throw new Error("handoff: caps.expiresAt must be an integer > nowMs");if(r.expiresAt>o.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 l={perStrategyNotionalUsd:r.perStrategyNotionalUsd,maxLeverage:r.maxLeverage,dailyLossCapUsd:r.dailyLossCapUsd,chainAllowlist:[...r.chainAllowlist],assetAllowlist:[...r.assetAllowlist],expiresAt:r.expiresAt,killSwitchRequired:!0},c={strategyHash:o.strategyHash,compilerHash:o.compilerHash,evidence:JSON.parse(JSON.stringify(A)),shadow:{id:t.id,stateHash:t.stateHash,status:t.status,cursor:t.cursor,updatedAt:t.updatedAt},compiled:{strategyHash:o.strategyHash,compilerHash:o.compilerHash,compilerVersion:is,venue:"hyperliquid",market:{coin:o.strategy.market.coin,kind:"perp",interval:o.strategy.market.interval},risk:{...o.strategy.risk},strategy:JSON.parse(JSON.stringify(o.strategy))},arming:{liveBroadcast:!1,requiresExplicitUserArm:!0,caps:l},requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,executionReady:!1};return Ud(c,{provider:"hl-strategy",kind:"strategy-live-handoff",env:s})}var NL,xd=De(()=>{zt();sl();Pt();Ld();NL=["privatekey","secretkey","seed","mnemonic","passphrase","password","keystore","keymaterial","apikey","authtoken","accesstoken","refreshtoken","credential","bearer","signature","authorization","xprv","xpriv","wif"]});function _r(e,A){let t=Number(e);if(!Number.isFinite(t))throw new TypeError(`${A} must be finite`);return t}function Kr(e,A){if(!Number.isSafeInteger(e)||e<0)throw new TypeError(`${A} must be a non-negative safe integer`);return e}function os(e){if(Array.isArray(e))for(let A of e)os(A);else if(e&&typeof e=="object")for(let A of Object.values(e))os(A);return Object.freeze(e)}function LL(e){let A=UL[e];if(!A)throw new TypeError(`unsupported strategy interval: ${e}`);return A}function TL(e,{endTime:A=Number.MAX_SAFE_INTEGER}={}){if(!Array.isArray(e))throw new TypeError("Hyperliquid candles must be an array");Kr(A,"endTime");let t=new Map;for(let r=0;r<e.length;r++){let n=e[r];if(!n||typeof n!="object"||Array.isArray(n))throw new TypeError(`candles[${r}] must be an object`);let s=Kr(Number(n.t),`candles[${r}].t`);if(Kr(Number(n.T),`candles[${r}].T`)>A)continue;let o={t:s,o:_r(n.o,`candles[${r}].o`),h:_r(n.h,`candles[${r}].h`),l:_r(n.l,`candles[${r}].l`),c:_r(n.c,`candles[${r}].c`),v:_r(n.v,`candles[${r}].v`)};if(o.h<Math.max(o.o,o.c,o.l))throw new TypeError(`candles[${r}].h is below another price`);if(o.l>Math.min(o.o,o.c,o.h))throw new TypeError(`candles[${r}].l is above another price`);if(o.v<0)throw new TypeError(`candles[${r}].v must be non-negative`);let a=t.get(s);if(a&&JSON.stringify(a)!==JSON.stringify(o))throw new TypeError(`conflicting duplicate candle at timestamp ${s}`);a||t.set(s,o)}return os([...t.values()].sort((r,n)=>r.t-n.t))}function xL(e,A){if(!Array.isArray(e))throw new TypeError("Hyperliquid funding history must be an array");let t=new Map;for(let r=0;r<e.length;r++){let n=e[r];if(!n||typeof n!="object"||Array.isArray(n))throw new TypeError(`funding[${r}] must be an object`);let s=Kr(Number(n.time),`funding[${r}].time`);s>A||t.set(s,{time:s,fundingRate:_r(n.fundingRate,`funding[${r}].fundingRate`)})}return[...t.values()].sort((r,n)=>r.time-n.time)}async function YL({coin:e,startTime:A,endTime:t},r){let n=[],s=Math.max(0,A-288e5),i=!1;for(let o=0;o<16&&s<=t;o++){let a=await Dd({coin:e,startTime:s,endTime:t},r);if(!Array.isArray(a))throw new TypeError("Hyperliquid funding history must be an array");n.push(...a);let g=s;for(let l of a){let c=Number(l?.time);Number.isSafeInteger(c)&&c>g&&(g=c)}if(a.length<500||g>=t){i=!0;break}if(g<=s)throw new Error("Hyperliquid funding history pagination did not advance");s=g+1}if(!i)throw new Error("strategy history exceeds the bounded funding history limit");return xL(n,t)}function GL(e,A,t){let r=0,n=null;return e.map(s=>{let i=s.t+t,o=0;for(;r<A.length&&A[r].time<i;){let a=A[r];n=a.fundingRate,a.time>=s.t&&(o+=a.fundingRate),r+=1}return n==null?{...s,fundingPaymentRate:o}:{...s,fundingRate:n,fundingPaymentRate:o}})}async function Yd(e,A={}){if(!e||typeof e!="object"||Array.isArray(e))throw new TypeError("strategy history input must be an object");let t=String(e.coin||"").trim().toUpperCase();if(!/^[A-Z0-9][A-Z0-9._-]{0,11}$/.test(t))throw new TypeError("coin must be an uppercase Hyperliquid asset id");let r=String(e.interval||"15m"),n=LL(r);if(e.endTime==null)throw new TypeError("endTime is required for deterministic history");let s=Kr(e.endTime,"endTime"),i=e.count==null?1500:e.count;if(!Number.isInteger(i)||i<20||i>5e3)throw new TypeError("count must be an integer from 20 to 5000");let o=e.startTime==null?Math.max(0,s-i*n):Kr(e.startTime,"startTime");if(o>=s)throw new TypeError("startTime must be before endTime");let[a,g]=await Promise.all([md({coin:t,interval:r,startTime:o,endTime:s},A),YL({coin:t,startTime:o,endTime:s},A)]),l=TL(a,{endTime:s}),c=os(GL(l,g,n));return os({coin:t,interval:r,range:{startTime:o,endTime:s},bars:c})}var UL,Gd=De(()=>{el();UL=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 VL(e){let A=[];if(!e||typeof e!="object"||Array.isArray(e))return{ok:!1,errors:[{path:"market",message:"must be a plain object"}],market:null};for(let t of Object.keys(e))HL.has(t)||A.push({path:`market.${t}`,message:"unknown field is not allowed"});return(typeof e.coin!="string"||e.coin.length===0||e.coin.length>32)&&A.push({path:"market.coin",message:"must be a non-empty string max 32"}),(typeof e.interval!="string"||!JL.has(e.interval))&&A.push({path:"market.interval",message:"must be a supported interval"}),A.length?{ok:!1,errors:A,market:null}:{ok:!0,errors:[],market:{coin:e.coin,interval:e.interval}}}async function vL(e={}){let A=await pd(e);if(!A||!Array.isArray(A.universe))throw new TypeError("Hyperliquid market metadata must contain universe");return Object.freeze(A.universe.map((t,r)=>{if(!t||typeof t.name!="string"||!t.name)throw new TypeError(`Hyperliquid market metadata universe[${r}].name is invalid`);return t.name}))}var JL,HL,Jd,Hd=De(()=>{el();xd();Gd();JL=new Set(["1m","3m","5m","15m","30m","1h","2h","4h","8h","12h","1d"]),HL=new Set(["coin","interval"]);Jd=Object.freeze({id:"hyperliquid",validateMarket:VL,fetchBars:Yd,listMarkets:vL,prepareIntent(e){return Td(e)}})});function WL(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 A of qL.slice(1))if(typeof e[A]!="function")throw new TypeError(`strategy venue adapter ${e.id} requires ${A}()`);for(let A of["fetchBars","listMarkets"])if(e[A]!=null&&typeof e[A]!="function")throw new TypeError(`strategy venue adapter ${e.id} ${A} must be a function`);return e}function cl(e){return typeof e!="string"?null:PL.get(e)??null}function gl(e){let A=cl(e);if(!A)throw new Error(`unknown strategy venue: ${String(e)}`);return A}var qL,Vd,PL,WG,ll=De(()=>{Hd();qL=Object.freeze(["id","validateMarket","prepareIntent"]);Vd=[Jd].map(WL),PL=new Map(Vd.map(e=>[e.id,e])),WG=Object.freeze([...Vd])});import{createHash as OL}from"node:crypto";function aA(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function Ie(e){return typeof e=="number"&&Number.isFinite(e)}function _d(e){return Number.isInteger(e)&&e>0}function Il(e){if(e==null||typeof e!="object"||Object.isFrozen(e))return e;if(Array.isArray(e)){for(let A of e)Il(A);return Object.freeze(e)}for(let A of Object.keys(e))Il(e[A]);return Object.freeze(e)}function hl(e){if(Array.isArray(e))return e.map(hl);if(e!=null&&typeof e=="object"){let A={};for(let t of Object.keys(e).sort())A[t]=hl(e[t]);return A}return e}function k(e,A,t){e.push({path:A,message:t})}function It(e,A,t,r){for(let n of Object.keys(e))A.has(n)||k(r,t?`${t}.${n}`:n,"unknown field is not allowed")}function $d(e,A,t,r){if(!Ie(e)||!Ie(A)||!Ie(t)||!Ie(r)||r<=0||e<A||e>t)return!1;let n=(e-A)/r;if(!Number.isFinite(n))return!1;let s=Math.round(n);return Math.abs(n-s)<=1e-9}function ul(e,A,t,r){if(aA(e)){if(It(e,new Set(["param"]),A,r),typeof e.param!="string"||!e.param)return k(r,`${A}.param`,"must be a parameter name string"),null;if(!Object.prototype.hasOwnProperty.call(t,e.param))return k(r,`${A}.param`,`unknown parameter "${e.param}"`),null;let n=t[e.param];return!aA(n)||![n.value,n.min,n.max,n.step].every(_d)?(k(r,`${A}.param`,"referenced period parameter value min max and step must be positive integers"),null):{param:e.param}}return _d(e)?e:(k(r,A,"must be a positive integer or {param}"),null)}function Kd(e,A,t,r){return aA(e)?(It(e,new Set(["param"]),A,r),typeof e.param!="string"||!e.param?(k(r,`${A}.param`,"must be a parameter name string"),null):Object.prototype.hasOwnProperty.call(t,e.param)?{param:e.param}:(k(r,`${A}.param`,`unknown parameter "${e.param}"`),null)):Ie(e)?e:(k(r,A,"must be a finite number or {param}"),null)}function Qo(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 AT(e){let A=new Map,t=r=>{let n=A.get(r)||0;if(n===1)return!0;if(n===2)return!1;A.set(r,1);let s=e.get(r);if(s){for(let i of Qo(s))if(e.has(i)&&t(i))return!0}return A.set(r,2),!1};for(let r of e.keys())if(t(r))return!0;return!1}function tT(e,A){if(!aA(e))return k(A,"parameters","must be a plain object"),null;let t=Object.keys(e);if(t.length>Od)return k(A,"parameters",`too many parameters (max ${Od})`),null;let r={};for(let n of t){if(!Xd.test(n)){k(A,`parameters.${n}`,"parameter name is malformed");continue}let s=e[n],i=`parameters.${n}`;if(!aA(s)){k(A,i,"must be a plain object");continue}It(s,qd,i,A);for(let c of qd)c in s||k(A,`${i}.${c}`,"required field is missing");let{value:o,min:a,max:g,step:l}=s;Ie(a)||k(A,`${i}.min`,"must be a finite number"),Ie(g)||k(A,`${i}.max`,"must be a finite number"),(!Ie(l)||l<=0)&&k(A,`${i}.step`,"must be a positive finite number"),Ie(o)||k(A,`${i}.value`,"must be a finite number"),Ie(a)&&Ie(g)&&a>g&&k(A,`${i}.min`,"min must be <= max"),Ie(o)&&Ie(a)&&Ie(g)&&Ie(l)&&l>0&&($d(o,a,g,l)||k(A,`${i}.value`,"value must lie on the declared min/max/step grid")),r[n]={value:o,min:a,max:g,step:l}}return r}function rT(e,A,t,r){let n=`nodes.${A}`;if(!aA(e))return k(r,n,"must be a plain object"),null;if(typeof e.type!="string"||!Pd[e.type])return k(r,`${n}.type`,"unknown or missing node type"),It(e,eT,n,r),null;switch(It(e,Pd[e.type],n,r),(typeof e.id!="string"||!jd.test(e.id))&&k(r,`${n}.id`,"must be a 1-64 char id starting with alphanumeric"),e.type){case"input":return(typeof e.field!="string"||!zL.has(e.field))&&k(r,`${n}.field`,"must be one of open|high|low|close|volume|fundingRate|openInterest"),{id:e.id,type:"input",field:e.field};case"constant":{let s=Kd(e.value,`${n}.value`,t,r);return{id:e.id,type:"constant",value:s}}case"indicator":{(typeof e.indicator!="string"||!ZL.has(e.indicator))&&k(r,`${n}.indicator`,"must be one of sma|ema|rsi|macd|bollinger|atr");let s=e.indicator,i={id:e.id,type:"indicator",indicator:s};if(s==="atr"){"input"in e&&(typeof e.input!="string"||!e.input?k(r,`${n}.input`,"must be a node id string when provided"):i.input=e.input);let o=ul(e.period,`${n}.period`,t,r);o!=null&&(i.period=o)}else typeof e.input!="string"||!e.input?k(r,`${n}.input`,"must be a node id string"):i.input=e.input;if((s==="sma"||s==="ema"||s==="rsi"||s==="bollinger"||s==="atr")&&("period"in e,s!=="macd"))if(!("period"in e))k(r,`${n}.period`,"required field is missing");else{let o=ul(e.period,`${n}.period`,t,r);o!=null&&(i.period=o)}if(s==="macd"){for(let o of["fastPeriod","slowPeriod","signalPeriod"])if(!(o in e))k(r,`${n}.${o}`,"required field is missing");else{let a=ul(e[o],`${n}.${o}`,t,r);a!=null&&(i[o]=a)}"output"in e?jL.has(e.output)?i.output=e.output:k(r,`${n}.output`,"must be line|signal|histogram"):k(r,`${n}.output`,"required field is missing"),"period"in e&&k(r,`${n}.period`,"forbidden for macd"),"stdDev"in e&&k(r,`${n}.stdDev`,"forbidden for macd")}else if(s==="bollinger"){if(!("stdDev"in e))k(r,`${n}.stdDev`,"required field is missing");else{let o=Kd(e.stdDev,`${n}.stdDev`,t,r);o!=null&&(typeof o=="number"&&o<=0?k(r,`${n}.stdDev`,"must be > 0"):i.stdDev=o)}"output"in e?$L.has(e.output)?i.output=e.output:k(r,`${n}.output`,"must be upper|middle|lower"):k(r,`${n}.output`,"required field is missing");for(let o of["fastPeriod","slowPeriod","signalPeriod"])o in e&&k(r,`${n}.${o}`,`forbidden for ${s}`)}else{"output"in e&&k(r,`${n}.output`,`forbidden for ${s}`),"stdDev"in e&&s!=="bollinger"&&k(r,`${n}.stdDev`,`forbidden for ${s}`);for(let o of["fastPeriod","slowPeriod","signalPeriod"])o in e&&k(r,`${n}.${o}`,`forbidden for ${s}`)}return i}case"compare":return(typeof e.op!="string"||!_L.has(e.op))&&k(r,`${n}.op`,"must be gt|gte|lt|lte|eq"),(typeof e.left!="string"||!e.left)&&k(r,`${n}.left`,"must be a node id"),(typeof e.right!="string"||!e.right)&&k(r,`${n}.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"||!KL.has(e.op))&&k(r,`${n}.op`,"must be and|or|not"),!Array.isArray(e.inputs))return k(r,`${n}.inputs`,"must be an array of node ids"),{id:e.id,type:"logic",op:e.op,inputs:[]};let s=[];for(let i=0;i<e.inputs.length;i++){let o=e.inputs[i];typeof o!="string"||!o?k(r,`${n}.inputs.${i}`,"must be a node id"):s.push(o)}return e.op==="not"?s.length!==1&&k(r,`${n}.inputs`,"not requires exactly one input"):(e.op==="and"||e.op==="or")&&s.length<2&&k(r,`${n}.inputs`,`${e.op} requires at least two inputs`),{id:e.id,type:"logic",op:e.op,inputs:s}}case"cross":return(typeof e.direction!="string"||!XL.has(e.direction))&&k(r,`${n}.direction`,"must be above|below"),(typeof e.left!="string"||!e.left)&&k(r,`${n}.left`,"must be a node id"),(typeof e.right!="string"||!e.right)&&k(r,`${n}.right`,"must be a node id"),{id:e.id,type:"cross",direction:e.direction,left:e.left,right:e.right};default:return null}}function nT(e,A,t){if(!aA(e))return k(A,"risk","must be a plain object"),null;It(e,Wd,"risk",A);for(let Q of Wd)(!(Q in e)||e[Q]==null)&&k(A,`risk.${Q}`,"required field is missing");let r={},n=e.maxLeverage;!Ie(n)||n<=0||n>50?k(A,"risk.maxLeverage","must be a number > 0 and <= 50"):r.maxLeverage=n;let s=e.maxNotionalUsd;!Ie(s)||s<=0?k(A,"risk.maxNotionalUsd","must be a number > 0"):r.maxNotionalUsd=s;let i=e.positionSizePct;!Ie(i)||i<=0||i>100?k(A,"risk.positionSizePct","must be a number > 0 and <= 100"):r.positionSizePct=i;let o=e.stopLossPct;!Ie(o)||o<=0||o>100?k(A,"risk.stopLossPct","must be a number > 0 and <= 100"):r.stopLossPct=o;let a=e.takeProfitPct;!Ie(a)||a<=0||a>1e3?k(A,"risk.takeProfitPct","must be a number > 0 and <= 1000"):r.takeProfitPct=a;let g=e.cooldownBars;!Number.isInteger(g)||g<0||g>1e5?k(A,"risk.cooldownBars","must be an integer >= 0 and <= 100000"):r.cooldownBars=g;let l=e.maxDailyLossPct;!Ie(l)||l<=0||l>100?k(A,"risk.maxDailyLossPct","must be a number > 0 and <= 100"):r.maxDailyLossPct=l;let c=e.expiresAt;return!Number.isInteger(c)||c<=0?k(A,"risk.expiresAt","must be an integer epoch milliseconds > 0"):(t.nowMs!==void 0&&(Number.isInteger(t.nowMs)?c<=t.nowMs&&k(A,"risk.expiresAt","must be strictly greater than nowMs"):k(A,"nowMs","must be an integer epoch milliseconds")),r.expiresAt=c),r}function Cl(e,A={}){let t=[];if(!aA(e))return k(t,"","strategy must be a plain object"),{ok:!1,errors:t,strategy:null};It(e,vd,"",t);for(let c of vd)(!(c in e)||e[c]==null)&&k(t,c,"required field is missing");e.version!==Ql&&k(t,"version",`must be ${Ql}`),(typeof e.id!="string"||!Xd.test(e.id))&&k(t,"id","must match /^[a-z0-9][a-z0-9._-]{0,63}$/"),(typeof e.name!="string"||e.name.length===0||e.name.length>Zd)&&k(t,"name",`must be a non-empty string max ${Zd}`);let r=cl(e.venue);r||k(t,"venue",`unknown strategy venue "${String(e.venue)}"`);let n=null;if(!r)aA(e.market)||k(t,"market","must be a plain object");else{let c=r.validateMarket(e.market);if(!c||typeof c.ok!="boolean"||!Array.isArray(c.errors))k(t,"market",`venue ${r.id} returned an invalid market validation result`);else if(c.ok)n=c.market;else for(let Q of c.errors)k(t,Q.path,Q.message)}let s=tT(e.parameters,t),i=null,o=new Map;if(!Array.isArray(e.nodes))k(t,"nodes","must be an array");else if(e.nodes.length>zd)k(t,"nodes",`too many nodes (max ${zd})`);else{i=[];for(let c=0;c<e.nodes.length;c++){let Q=rT(e.nodes[c],c,s||{},t);Q&&(typeof Q.id=="string"&&jd.test(Q.id)&&(o.has(Q.id)?k(t,`nodes.${c}.id`,`duplicate node id "${Q.id}"`):o.set(Q.id,Q)),i.push(Q))}for(let c=0;c<i.length;c++){let Q=i[c],B=`nodes.${c}`;for(let E of Qo(Q))o.has(E)||k(t,B,`unknown node ref "${E}"`);if(Q.type==="indicator"||Q.type==="compare"||Q.type==="cross")for(let E of Qo(Q)){let u=o.get(E);u&&El.has(u.type)&&k(t,B,`node ref "${E}" must be numeric`)}if(Q.type==="logic")for(let E of Qo(Q)){let u=o.get(E);u&&!El.has(u.type)&&k(t,B,`node ref "${E}" must be boolean`)}}AT(o)&&k(t,"nodes","graph contains a cycle")}let a=null;if(!aA(e.rules))k(t,"rules","must be a plain object");else{It(e.rules,Bl,"rules",t);for(let c of Bl)c in e.rules||k(t,`rules.${c}`,"required field is missing");a={};for(let c of Bl){let Q=e.rules[c];if(Q===null){a[c]=null;continue}if(typeof Q!="string"||!Q){k(t,`rules.${c}`,"must be a node id or null"),a[c]=Q;continue}if(!o.has(Q)){k(t,`rules.${c}`,`unknown node ref "${Q}"`),a[c]=Q;continue}let B=o.get(Q);El.has(B.type)||k(t,`rules.${c}`,`rule must reference a boolean node, not ${B.type}`),a[c]=Q}}let g=nT(e.risk,t,A);if(t.length)return{ok:!1,errors:t,strategy:null};let l=Il({version:Ql,id:e.id,name:e.name,venue:r.id,market:n,parameters:s,nodes:i,rules:a,risk:g});return{ok:!0,errors:[],strategy:l}}function Ge(e,A={}){let t=Cl(e,A);if(!t.ok)throw new Xr(t.errors);return t.strategy}function sT(e){let A=Ge(e);return JSON.stringify(hl(A))}function Zr(e){let A=sT(e);return OL("sha256").update(A,"utf8").digest("hex")}function as(e,A){if(!aA(e))throw new Xr([{path:"",message:"strategy must be a plain object"}]);if(!aA(A))throw new Xr([{path:"overrides",message:"must be a plain object"}]);let t=Ge(e),r={};for(let[s,i]of Object.entries(t.parameters))r[s]={value:i.value,min:i.min,max:i.max,step:i.step};let n=[];for(let[s,i]of Object.entries(A)){if(!Object.prototype.hasOwnProperty.call(r,s)){k(n,s,`unknown parameter "${s}"`);continue}let o=r[s];if(!Ie(i)){k(n,s,"override must be a finite number");continue}if(!$d(i,o.min,o.max,o.step)){k(n,s,"override must lie on the declared min/max/step grid");continue}r[s]={...o,value:i}}if(n.length)throw new Xr(n);return Ge({version:t.version,id:t.id,name:t.name,venue:t.venue,market:{coin:t.market.coin,interval:t.market.interval},parameters:r,nodes:t.nodes.map(s=>{let i={...s};return Array.isArray(s.inputs)&&(i.inputs=[...s.inputs]),i}),rules:{...t.rules},risk:{...t.risk}})}var Ql,Xd,jd,zL,ZL,_L,KL,XL,jL,$L,El,vd,qd,Bl,Wd,eT,Pd,Od,zd,Zd,Xr,Pt=De(()=>{ll();Ql=1,Xd=/^[a-z0-9][a-z0-9._-]{0,63}$/,jd=/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/,zL=new Set(["open","high","low","close","volume","fundingRate","openInterest"]),ZL=new Set(["sma","ema","rsi","macd","bollinger","atr"]),_L=new Set(["gt","gte","lt","lte","eq"]),KL=new Set(["and","or","not"]),XL=new Set(["above","below"]),jL=new Set(["line","signal","histogram"]),$L=new Set(["upper","middle","lower"]),El=new Set(["compare","logic","cross"]),vd=new Set(["version","id","name","venue","market","parameters","nodes","rules","risk"]),qd=new Set(["value","min","max","step"]),Bl=new Set(["entryLong","entryShort","exitLong","exitShort"]),Wd=new Set(["maxLeverage","maxNotionalUsd","positionSizePct","stopLossPct","takeProfitPct","cooldownBars","maxDailyLossPct","expiresAt"]),eT=new Set(["id","type"]),Pd={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"])},Od=16,zd=128,Zd=100,Xr=class extends Error{constructor(A){let t=A.map(r=>`${r.path}: ${r.message}`);super(`invalid strategy (${A.length} error${A.length===1?"":"s"}): ${t.join("; ")}`),this.name="StrategyValidationError",this.errors=A}}});function cs(e){if(!Array.isArray(e))throw new TypeError("values must be an array");for(let A=0;A<e.length;A++){let t=e[A];if(typeof t!="number"||!Number.isFinite(t))throw new TypeError(`values[${A}] must be a finite number`)}}function ht(e){if(!Number.isInteger(e)||e<=0)throw new TypeError("period must be a positive integer")}function iT(e){if(!Array.isArray(e))throw new TypeError("bars must be an array");for(let A=0;A<e.length;A++){let t=e[A];if(t==null||typeof t!="object")throw new TypeError(`bars[${A}] must be an object`);for(let r of["o","h","l","c"]){let n=t[r];if(typeof n!="number"||!Number.isFinite(n))throw new TypeError(`bars[${A}].${r} must be a finite number`)}if(t.h<t.l)throw new TypeError(`bars[${A}] high must be >= low`)}}function Aw(e,A){cs(e),ht(A);let t=new Array(e.length).fill(null);if(e.length<A)return t;let r=0;for(let n=0;n<e.length;n++)r+=e[n],n>=A&&(r-=e[n-A]),n>=A-1&&(t[n]=r/A);return t}function Eo(e,A){cs(e),ht(A);let t=new Array(e.length).fill(null);if(e.length<A)return t;let r=0;for(let i=0;i<A;i++)r+=e[i];let n=r/A;t[A-1]=n;let s=2/(A+1);for(let i=A;i<e.length;i++)n=s*e[i]+(1-s)*n,t[i]=n;return t}function tw(e,A){cs(e),ht(A);let t=new Array(e.length).fill(null);if(e.length<=A)return t;let r=0,n=0;for(let o=1;o<=A;o++){let a=e[o]-e[o-1];a>=0?r+=a:n-=a}let s=r/A,i=n/A;t[A]=ew(s,i);for(let o=A+1;o<e.length;o++){let a=e[o]-e[o-1],g=a>0?a:0,l=a<0?-a:0;s=(s*(A-1)+g)/A,i=(i*(A-1)+l)/A,t[o]=ew(s,i)}return t}function ew(e,A){return e===0&&A===0?50:A===0?100:e===0?0:100-100/(1+e/A)}function rw(e,A={}){cs(e);let t=A.fastPeriod,r=A.slowPeriod,n=A.signalPeriod;if(ht(t),ht(r),ht(n),t>=r)throw new TypeError("fastPeriod must be < slowPeriod");let s=Eo(e,t),i=Eo(e,r),o=new Array(e.length).fill(null);for(let c=0;c<e.length;c++)s[c]!=null&&i[c]!=null&&(o[c]=s[c]-i[c]);let a=new Array(e.length).fill(null),g=new Array(e.length).fill(null),l=[];for(let c=0;c<o.length;c++)o[c]!=null&&l.push(c);if(l.length>=n){let c=0;for(let u=0;u<n;u++)c+=o[l[u]];let Q=c/n,B=l[n-1];a[B]=Q,g[B]=o[B]-Q;let E=2/(n+1);for(let u=n;u<l.length;u++){let h=l[u];Q=E*o[h]+(1-E)*Q,a[h]=Q,g[h]=o[h]-Q}}return{line:o,signal:a,histogram:g}}function nw(e,A={}){cs(e);let t=A.period,r=A.stdDev;if(ht(t),typeof r!="number"||!Number.isFinite(r)||r<=0)throw new TypeError("stdDev must be a finite number > 0");let n=new Array(e.length).fill(null),s=new Array(e.length).fill(null),i=new Array(e.length).fill(null);if(e.length<t)return{upper:s,middle:n,lower:i};let o=0,a=0;for(let g=0;g<e.length;g++){let l=e[g];if(o+=l,a+=l*l,g>=t){let c=e[g-t];o-=c,a-=c*c}if(g>=t-1){let c=o/t,Q=a/t-c*c;Q<0&&Q>-1e-12&&(Q=0);let B=Math.sqrt(Q);n[g]=c,s[g]=c+r*B,i[g]=c-r*B}}return{upper:s,middle:n,lower:i}}function sw(e,A){iT(e),ht(A);let t=new Array(e.length).fill(null);if(e.length<A)return t;let r=new Array(e.length);for(let i=0;i<e.length;i++){let o=e[i];if(i===0)r[i]=o.h-o.l;else{let a=e[i-1].c;r[i]=Math.max(o.h-o.l,Math.abs(o.h-a),Math.abs(o.l-a))}}let n=0;for(let i=0;i<A;i++)n+=r[i];let s=n/A;t[A-1]=s;for(let i=A;i<e.length;i++)s=(s*(A-1)+r[i])/A,t[i]=s;return t}var iw=De(()=>{});import{createHash as oT}from"node:crypto";var fl,aT,cT,gT,ow,aw=De(()=>{fl=2,aT="93f9c998260e73756c13871dc1a84dd6cdb26ec6113bd1941f023519939db440",cT="68f5b412a9975f04024cf9b9b6209b4bccedd52f176e95f34f786b3f53479c6a",gT="f197a38ff1c0f4ebe13326db8cbb8167ea3dd5d62e6033fe97c2fee8d23d96b5",ow=oT("sha256").update(JSON.stringify({version:fl,compilerSourceHash:aT,indicatorsSourceHash:cT,schemaSourceHash:gT})).digest("hex")});function dA(e){return typeof e=="number"&&Number.isFinite(e)}function ET(e){let A=new Map(e.map(o=>[o.id,o])),t=o=>{switch(o.type){case"indicator":return o.input?[o.input]:[];case"compare":case"cross":return[o.left,o.right];case"logic":return[...o.inputs];default:return[]}},r=new Map,n=new Map;for(let o of e)r.set(o.id,0),n.set(o.id,[]);for(let o of e)for(let a of t(o))A.has(a)&&(n.get(a).push(o.id),r.set(o.id,r.get(o.id)+1));let s=[];for(let[o,a]of r)a===0&&s.push(o);let i=[];for(;s.length;){let o=s.shift();i.push(o);for(let a of n.get(o))r.set(a,r.get(a)-1),r.get(a)===0&&s.push(a)}if(i.length!==e.length)throw new Error("strategy graph is cyclic");return i}function jr(e,A){return e!=null&&typeof e=="object"&&"param"in e?A[e.param].value:e}function BT(e,A,t){if(!Array.isArray(e)||e.length===0)throw new TypeError("bars must be a non-empty array");if(!Number.isInteger(A)||A<0||A>=e.length)throw new RangeError("index out of range");let r=null;for(let n=0;n<=A;n++){let s=e[n];if(s==null||typeof s!="object"||Array.isArray(s))throw new TypeError(`bars[${n}] must be an object`);let{t:i,o,h:a,l:g,c:l,v:c}=s;if(!dA(i)&&(typeof i=="number"&&Number.isFinite(i)),!Number.isFinite(i))throw new TypeError(`bars[${n}].t must be finite`);for(let[Q,B]of[["o",o],["h",a],["l",g],["c",l],["v",c]])if(!dA(B))throw new TypeError(`bars[${n}].${Q} must be a finite number`);for(let[Q,B]of[["o",o],["h",a],["l",g],["c",l]])if(!(B>0))throw new TypeError(`bars[${n}].${Q} price must be positive`);if(c<0)throw new TypeError(`bars[${n}].v volume must be non-negative`);if(a<Math.max(o,l,g))throw new TypeError(`bars[${n}] high must be >= max(open, close, low)`);if(g>Math.min(o,l,a))throw new TypeError(`bars[${n}] low must be <= min(open, close, high)`);if(r!=null){if(!(i>r))throw new TypeError("bars t must be strictly increasing");if(i-r!==QT[t])throw new TypeError(`bars t must match ${t} cadence`)}if(r=i,"fundingRate"in s&&s.fundingRate!=null&&!dA(s.fundingRate))throw new TypeError(`bars[${n}].fundingRate must be finite when present`);if("openInterest"in s&&s.openInterest!=null){if(!dA(s.openInterest))throw new TypeError(`bars[${n}].openInterest must be finite when present`);if(s.openInterest<0)throw new TypeError(`bars[${n}].openInterest must be non-negative`)}}}function Zt(e,A,t,r,n,s){if(s.has(e))return s.get(e);let i=A.get(e),o;switch(i.type){case"input":{let a=lT[i.field];o=new Array(n+1);for(let g=0;g<=n;g++){let l=r[g][a];o[g]=l===void 0?null:l}break}case"constant":{let a=jr(i.value,t);o=new Array(n+1).fill(a);break}case"indicator":{let a=i.period!=null?jr(i.period,t):void 0;if(i.indicator==="atr"){let c=[];for(let Q=0;Q<=n;Q++){let B=r[Q];c.push({o:B.o,h:B.h,l:B.l,c:B.c})}o=sw(c,a);break}let l=Zt(i.input,A,t,r,n,s).map((c,Q)=>{if(c==null||!dA(c))throw new TypeError(`indicator input ${i.input} has non-finite value at ${Q}`);return c});if(i.indicator==="sma")o=Aw(l,a);else if(i.indicator==="ema")o=Eo(l,a);else if(i.indicator==="rsi")o=tw(l,a);else if(i.indicator==="macd")o=rw(l,{fastPeriod:jr(i.fastPeriod,t),slowPeriod:jr(i.slowPeriod,t),signalPeriod:jr(i.signalPeriod,t)})[i.output];else if(i.indicator==="bollinger")o=nw(l,{period:a,stdDev:jr(i.stdDev,t)})[i.output];else throw new Error(`unsupported indicator ${i.indicator}`);break}case"compare":{let a=Zt(i.left,A,t,r,n,s),g=Zt(i.right,A,t,r,n,s);o=new Array(n+1);for(let l=0;l<=n;l++){let c=a[l],Q=g[l];if(c==null||Q==null||!dA(c)||!dA(Q)){o[l]=!1;continue}switch(i.op){case"gt":o[l]=c>Q;break;case"gte":o[l]=c>=Q;break;case"lt":o[l]=c<Q;break;case"lte":o[l]=c<=Q;break;case"eq":o[l]=c===Q;break;default:o[l]=!1}}break}case"logic":{let a=i.inputs.map(g=>Zt(g,A,t,r,n,s));o=new Array(n+1);for(let g=0;g<=n;g++)if(i.op==="not"){let l=a[0][g];o[g]=l===!0?!1:l===!1}else if(i.op==="and"){let l=!0;for(let c of a)if(c[g]!==!0){l=!1;break}o[g]=l}else if(i.op==="or"){let l=!1;for(let c of a)if(c[g]===!0){l=!0;break}o[g]=l}else o[g]=!1;break}case"cross":{let a=Zt(i.left,A,t,r,n,s),g=Zt(i.right,A,t,r,n,s);o=new Array(n+1),o[0]=!1;for(let l=1;l<=n;l++){let c=a[l-1],Q=g[l-1],B=a[l],E=g[l];if(c==null||Q==null||B==null||E==null||!dA(c)||!dA(Q)||!dA(B)||!dA(E)){o[l]=!1;continue}i.direction==="above"?o[l]=c<=Q&&B>E:o[l]=c>=Q&&B<E}break}default:throw new Error(`unknown node type ${i.type}`)}return s.set(e,o),o}function Je(e,A={}){let t=Ge(e);A&&Object.keys(A).length&&(t=as(t,A));let r=new Map(t.nodes.map(B=>[B.id,B])),n=Object.freeze(ET(t.nodes)),s=t.parameters,i=new Set(t.nodes.filter(B=>B.type==="input").map(B=>B.field));if(t.nodes.some(B=>B.type==="indicator"&&B.indicator==="atr"))for(let B of["open","high","low","close"])i.add(B);let o=Object.freeze([...i].sort()),a=Zr(t);function g(B,E){let u={};for(let I of n){let C=B.get(I);u[I]=C[E]}let h=I=>I!=null&&u[I]===!0;return{values:u,signals:{entryLong:h(t.rules.entryLong),entryShort:h(t.rules.entryShort),exitLong:h(t.rules.exitLong),exitShort:h(t.rules.exitShort)}}}function l(B,E){BT(B,E,t.market.interval);let u=new Map;for(let h of n)Zt(h,r,s,B,E,u);return u}function c(B,E){return g(l(B,E),E)}function Q(B){if(!Array.isArray(B)||B.length===0)throw new TypeError("bars must be a non-empty array");let E=B.length-1,u=l(B,E);return Object.freeze(B.map((h,I)=>Object.freeze(g(u,I))))}return Object.freeze({strategy:t,strategyHash:a,compilerVersion:is,compilerHash:Ot,requiredSeries:o,nodeOrder:n,evaluate:c,evaluateAll:Q})}var is,Ot,lT,QT,zt=De(()=>{Pt();iw();aw();is=fl,Ot=ow,lT=Object.freeze({open:"o",high:"h",low:"l",close:"c",volume:"v",fundingRate:"fundingRate",openInterest:"openInterest"}),QT=Object.freeze({"1m":6e4,"3m":18e4,"5m":3e5,"15m":9e5,"30m":18e5,"1h":36e5,"2h":72e5,"4h":144e5,"8h":288e5,"12h":432e5,"1d":864e5})});import{createHash as uT}from"node:crypto";function hT(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function LA(e){return typeof e=="number"&&Number.isFinite(e)}function dl(e){if(e==null||typeof e!="object"||Object.isFrozen(e))return e;if(Array.isArray(e)){for(let A of e)dl(A);return Object.freeze(e)}for(let A of Object.keys(e))dl(e[A]);return Object.freeze(e)}function Bo(e){if(Array.isArray(e))return e.map(Bo);if(e!=null&&typeof e=="object"){let A={};for(let t of Object.keys(e).sort())A[t]=Bo(e[t]);return A}return e}function wl(e,A="result"){if(typeof e=="number"){if(!Number.isFinite(e))throw new Error(`non-finite backtest result at ${A}`);return}if(!(e==null||typeof e!="object")){if(Array.isArray(e)){e.forEach((t,r)=>wl(t,`${A}[${r}]`));return}for(let[t,r]of Object.entries(e))wl(r,`${A}.${t}`)}}function gw(e){if(!Array.isArray(e)||e.length===0)throw new TypeError("bars must be a non-empty array");let A=null;for(let t=0;t<e.length;t++){let r=e[t];if(r==null||typeof r!="object"||Array.isArray(r))throw new TypeError(`bars[${t}] must be an object`);let{t:n,o:s,h:i,l:o,c:a,v:g}=r;if(!LA(n))throw new TypeError(`bars[${t}].t must be finite`);for(let[l,c]of[["o",s],["h",i],["l",o],["c",a],["v",g]])if(!LA(c))throw new TypeError(`bars[${t}].${l} must be a finite number`);for(let[l,c]of[["o",s],["h",i],["l",o],["c",a]])if(!(c>0))throw new TypeError(`bars[${t}].${l} price must be positive`);if(g<0)throw new TypeError(`bars[${t}].v volume must be non-negative`);if(i<Math.max(s,a,o))throw new TypeError(`bars[${t}] high must be >= max(open, close, low)`);if(o>Math.min(s,a,i))throw new TypeError(`bars[${t}] low must be <= min(open, close, high)`);if(A!=null&&!(n>A))throw new TypeError("bars t must be strictly increasing");if(A=n,"fundingRate"in r&&r.fundingRate!=null&&!LA(r.fundingRate))throw new TypeError(`bars[${t}].fundingRate must be finite when present`);if("fundingPaymentRate"in r&&r.fundingPaymentRate!=null&&!LA(r.fundingPaymentRate))throw new TypeError(`bars[${t}].fundingPaymentRate must be finite when present`);if("openInterest"in r&&r.openInterest!=null&&!LA(r.openInterest))throw new TypeError(`bars[${t}].openInterest must be finite when present`)}}function ns(e){if(!Array.isArray(e))throw new TypeError("bars must be an array");return e.length>0&&gw(e),uT("sha256").update(JSON.stringify(Bo(e)),"utf8").digest("hex")}function CT(e){if(e==null&&(e={}),!hT(e))throw new TypeError("options must be a plain object");let A={...IT},t=new Set(["initialEquityUsd","takerFeeBps","builderFeeBps","slippageBps","latencyBars","maxVolumeParticipationPct","nowMs"]);for(let r of Object.keys(e))if(!t.has(r))throw new TypeError(`unknown option "${r}"`);if("initialEquityUsd"in e){if(!LA(e.initialEquityUsd)||e.initialEquityUsd<=0)throw new TypeError("initialEquityUsd must be a positive finite number");A.initialEquityUsd=e.initialEquityUsd}for(let r of["takerFeeBps","builderFeeBps","slippageBps"])if(r in e){let n=e[r];if(!LA(n)||n<0)throw new TypeError(`${r} must be a finite number >= 0`);if(r==="slippageBps"?n>=1e4:n>1e4)throw new TypeError(`${r} exceeds its safe basis-point bound`);A[r]=n}if("latencyBars"in e){let r=e.latencyBars;if(!Number.isInteger(r)||r<1)throw new TypeError("latencyBars must be an integer >= 1");A.latencyBars=r}if("maxVolumeParticipationPct"in e){let r=e.maxVolumeParticipationPct;if(!LA(r)||r<=0||r>100)throw new TypeError("maxVolumeParticipationPct must be in (0,100]");A.maxVolumeParticipationPct=r}if("nowMs"in e){if(!Number.isInteger(e.nowMs))throw new TypeError("nowMs must be an integer epoch milliseconds");A.nowMs=e.nowMs}return A}function uo(e){return e/1e4}function fT(e,A,t){let r=uo(t);return A==="long"?e*(1+r):e*(1-r)}function dT(e,A,t){let r=uo(t);return A==="long"?e*(1-r):e*(1+r)}function cw(e,A,t){let r=Math.abs(e)*uo(A),n=Math.abs(e)*uo(t);return{taker:r,builder:n,total:r+n}}function wT(e,A){let t=e*(A.positionSizePct/100)*A.maxLeverage;return Math.min(t,A.maxNotionalUsd)}function yT(e,A,t){let r=t/100;return A==="long"?e*(1-r):e*(1+r)}function pT(e,A,t){let r=t/100;return A==="long"?e*(1+r):e*(1-r)}function mT(e,A,t,r){if(!(t>0))return A==="long"?0:Number.POSITIVE_INFINITY;let n=Math.min(.99,1/(2*t)+r/1e4);return A==="long"?e*(1-1/t)/(1-n):e*(1+1/t)/(1+n)}function DT(e,A,t){return A==="long"?e.l<=t:e.h>=t}function kT(e,A,t){return A==="long"?e.h>=t:e.l<=t}function bT(e,A,t){return A==="long"?e.l<=t:e.h>=t}function gs(e,A){for(let t of e.requiredSeries)if(["fundingRate","openInterest"].includes(t)&&!A.every(r=>LA(r?.[t])))throw new Error(`strategy required series is absent: ${t}`)}function FT(e){if(e.length<3)return 0;let A=[];for(let i=1;i<e.length;i++){let o=e[i-1].equity,a=e[i].equity;o>0&&A.push((a-o)/o)}if(A.length<2)return 0;let t=0;for(let i of A)t+=i;let r=t/A.length,n=0;for(let i of A)n+=(i-r)**2;let s=Math.sqrt(n/(A.length-1));return s>0?r/s:0}function RT(e){let A=-1/0,t=0;for(let r of e){let n=r.equity;if(n>A&&(A=n),A>0){let s=(A-n)/A*100;s>t&&(t=s)}}return t}function ut(e,A,t={}){let r=CT(t);gw(A);let n=ns(A);r.nowMs!==void 0&&Ge(e,{nowMs:r.nowMs});let s=Je(e);if(gs(s,A),r.nowMs!==void 0&&s.strategy.risk.expiresAt<=r.nowMs)throw new Error("strategy is expired: risk.expiresAt must be strictly greater than nowMs");let i=s.strategy.risk,o=s.evaluateAll(A),a=r.latencyBars,g=r.slippageBps,l=r.takerFeeBps,c=r.builderFeeBps,Q=r.initialEquityUsd,B=0,E=0,u=0,h=0,I=0,C=[],D=[],f=[],R=[],S=[],d=null,se=0,ke=null,Le=Q,me=!1,w=0,H=0,q=[],ee=new Array(A.length).fill(0);function j(F){q.push(F)}function _(F){let O=A[F].v*(r.maxVolumeParticipationPct/100);return Math.max(0,O-ee[F])}function te(F){if(!d)return Q;let O=d.side==="long"?(F-d.entryPrice)*d.qty:(d.entryPrice-F)*d.qty;return Q+O}function Re(F,O,x){let ge=x.o,K=wT(Q,i);if(!(K>0)||!(ge>0))return;let le=fT(ge,O,g),ie=K/le,de=_(F),An=le*de;if(ie>de){f.push({kind:"entry",barIndex:F,time:x.t,side:O,requestedNotionalUsd:K,maxFillNotionalUsd:An,reason:"volume_participation"});return}ee[F]+=ie;let yA=Math.abs(le-ge)*ie,xA=cw(K,l,c);Q-=xA.total,B+=xA.taker,E+=xA.builder,h+=yA,I+=K,d={lifecycleEpoch:++H,side:O,entryBarIndex:F,entryReferencePrice:ge,entryPrice:le,qty:ie,notionalUsd:K,stop:yT(le,O,i.stopLossPct),take:pT(le,O,i.takeProfitPct),liq:mT(le,O,i.maxLeverage,l+c),entryFees:xA.taker,entryBuilderFees:xA.builder,entrySlippageUsd:yA,fundingAccrued:0}}function fe(F,O,x,ge){if(!d)return!1;let K=d.side,le=O,ie=le;x!=="liquidation"&&ge&&(ie=dT(le,K,g));let de=d.qty,An=de*ie;if(x!=="liquidation"){let Jl=_(F),Jw=ie*Jl;if(de>Jl)return f.push({kind:"exit",barIndex:F,time:A[F].t,side:K,requestedNotionalUsd:An,maxFillNotionalUsd:Jw,reason:"volume_participation",triggerReason:x}),!1;ee[F]+=de}let yA=cw(An,l,c),xA=x==="liquidation"?0:Math.abs(ie-le)*de,tn,mo;K==="long"?(tn=(le-d.entryReferencePrice)*de,mo=(ie-d.entryPrice)*de):(tn=(d.entryReferencePrice-le)*de,mo=(d.entryPrice-ie)*de),Q+=mo,Q-=yA.total,B+=yA.taker,E+=yA.builder,h+=xA,I+=An;let Gw={side:K,entryBarIndex:d.entryBarIndex,entryTime:A[d.entryBarIndex].t,entryPrice:d.entryPrice,exitBarIndex:F,exitTime:A[F].t,exitPrice:ie,exitReason:x,qty:de,notionalUsd:d.notionalUsd,grossPnlUsd:tn,feesUsd:d.entryFees+yA.taker,builderFeesUsd:d.entryBuilderFees+yA.builder,fundingUsd:d.fundingAccrued,slippageUsd:d.entrySlippageUsd+xA,netPnlUsd:tn-(d.entryFees+yA.taker+d.entryBuilderFees+yA.builder)-d.fundingAccrued-(d.entrySlippageUsd+xA)};return C.push(Gw),x==="liquidation"&&D.push({barIndex:F,time:A[F].t,side:K,price:ie,tradeIndex:C.length-1}),d=null,H+=1,w=F+1+(i.cooldownBars||0),!0}function wA(F,O,x,ge){let K=F+1;if(K>=A.length)return;q.some(ie=>ie.kind==="exit"&&ie.side===O&&ie.fillBar===K&&ie.epoch===ge)||j({kind:"exit",side:O,signalBar:F,fillBar:K,reason:x,epoch:ge})}function Es(F){let O=q.filter(x=>x.fillBar===F);for(let x=q.length-1;x>=0;x--)q[x].fillBar===F&&q.splice(x,1);O.sort((x,ge)=>{let K=le=>le.kind==="exit"?0:1;return K(x)-K(ge)});for(let x of O)if(x.kind==="exit"){if(!d||d.side!==x.side||d.lifecycleEpoch!==x.epoch)continue;let ge=x.reason||"rule";fe(F,A[F].o,ge,!0)||wA(F,x.side,ge,x.epoch)}else if(x.kind==="entry"){if(d||x.epoch!==H||F<w)continue;Re(F,x.side,A[F])}}function Bs(F){if(!d)return;let O=A[F],x=O.fundingPaymentRate;if(x==null||!LA(x)||x===0)return;let ge=Math.abs(d.qty*O.c),K=x*ge;d.side==="long"?(Q-=K,d.fundingAccrued+=K,u+=K):(Q+=K,d.fundingAccrued-=K,u-=K)}function us(F){if(!d)return;let O=A[F].o;(d.side==="long"?O<=d.liq:O>=d.liq)&&fe(F,O,"liquidation",!1)}function Ll(F){if(!d)return;let O=A[F],x=d.side,ge=bT(O,x,d.liq),K=DT(O,x,d.stop),le=kT(O,x,d.take),ie=de=>x==="long"?Math.min(de,O.o):Math.max(de,O.o);if(ge){fe(F,ie(d.liq),"liquidation",!1);return}if(K&&le){fe(F,ie(d.stop),"stop_loss",!0)||wA(F,x,"stop_loss",d.lifecycleEpoch);return}if(K){fe(F,ie(d.stop),"stop_loss",!0)||wA(F,x,"stop_loss",d.lifecycleEpoch);return}le&&(fe(F,d.take,"take_profit",!0)||wA(F,x,"take_profit",d.lifecycleEpoch))}for(let F=0;F<A.length;F++){let O=Math.floor(A[F].t/864e5);O!==ke&&(ke=O,Le=te(A[F].o),me=!1),us(F),Es(F),Ll(F),Bs(F),!me&&te(A[F].c)<=Le*(1-i.maxDailyLossPct/100)&&(me=!0,R.push({type:"daily_loss_limit",barIndex:F,time:A[F].t,message:"daily loss limit reached; new entries blocked for UTC day"}));let x=o[F].signals,ge=F+a;if(d)(d.side==="long"&&x.exitLong===!0||d.side==="short"&&x.exitShort===!0)&&ge<A.length&&(q.some(de=>de.kind==="exit"&&de.side===d.side&&de.fillBar===ge&&de.epoch===d.lifecycleEpoch)||j({kind:"exit",side:d.side,signalBar:F,fillBar:ge,reason:"rule",epoch:d.lifecycleEpoch}));else{let le=x.entryLong===!0,ie=x.entryShort===!0;le&&ie?R.push({type:"conflicting_entry_signals",barIndex:F,time:A[F].t,message:"conflicting entry signals; no position opened"}):!me&&(le||ie)&&ge<A.length&&F>=w&&j({kind:"entry",side:le?"long":"short",signalBar:F,fillBar:ge,epoch:H})}let K=Q;d&&(se+=1,K=te(A[F].c)),S.push({barIndex:F,time:A[F].t,equity:K,positionSide:d?d.side:null})}let Tl=null;if(d){let F=A.length-1;if(fe(F,A[F].c,"end_of_data",!0))S[F]={barIndex:F,time:A[F].t,equity:Q,positionSide:null};else{let x=te(A[F].c);Tl={side:d.side,entryBarIndex:d.entryBarIndex,entryTime:A[d.entryBarIndex].t,entryPrice:d.entryPrice,qty:d.qty,notionalUsd:d.notionalUsd,markPrice:A[F].c,markedEquityUsd:x},R.push({type:"open_position_at_end",barIndex:F,time:A[F].t,message:"end-of-data exit missed; position remains open and marked"})}}let xl=(d?te(A[A.length-1].c):Q)-r.initialEquityUsd,Lw=xl/r.initialEquityUsd*100,Yl=0,fo=0,wo=0;for(let F of C)F.netPnlUsd>0?(Yl+=1,fo+=F.netPnlUsd):F.netPnlUsd<0&&(wo+=-F.netPnlUsd);let yo=C.length,Tw=yo===0?0:Yl/yo,po=0;wo>0?po=fo/wo:fo>0&&(po=1e12);let xw={netPnlUsd:xl,netPnlPct:Lw,maxDrawdownPct:RT(S),winRate:Tw,profitFactor:po,tradeCount:yo,sharpe:FT(S),turnoverUsd:I,exposurePct:se/A.length*100},Yw={initialEquityUsd:r.initialEquityUsd,takerFeeBps:r.takerFeeBps,builderFeeBps:r.builderFeeBps,slippageBps:r.slippageBps,latencyBars:r.latencyBars,maxVolumeParticipationPct:r.maxVolumeParticipationPct},Gl={barsHash:n,strategyHash:s.strategyHash,compilerHash:Ot,compilerVersion:is,config:Yw,trades:C,equityCurve:S,metrics:xw,costs:{feesUsd:B,builderFeesUsd:E,fundingUsd:u,slippageUsd:h},liquidations:D,missedFills:f,openPositionAtEnd:Tl,flags:R};return wl(Gl),dl(Bo(Gl))}var IT,lo=De(()=>{zt();Pt();IT=Object.freeze({initialEquityUsd:1e4,takerFeeBps:3.5,builderFeeBps:2,slippageBps:2,latencyBars:1,maxVolumeParticipationPct:100})});import{createHash as ST}from"node:crypto";function GT(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function yl(e){if(e==null||typeof e!="object"||Object.isFrozen(e))return e;if(Array.isArray(e)){for(let A of e)yl(A);return Object.freeze(e)}for(let A of Object.keys(e))yl(e[A]);return Object.freeze(e)}function JT(e){return String(e).trim().replace(/\s+/g," ")}function HT(e){let A=e.match(/\b(long|short)\b/i);return A?A[1].toLowerCase():null}function VT(e){for(let t of MT)if(new RegExp(`\\b${t}\\b`,"i").test(e))return t;let A=e.match(/\b([A-Z][A-Z0-9]{1,11})\b/);return A?A[1]:null}function vT(e){let A=e.match(/\bon\s+(1m|3m|5m|15m|30m|1h|2h|4h|8h|12h|1d)\b/i);if(!A)return"15m";let t=A[1].toLowerCase();return NT.has(t)?t:null}function qT(e){let A={...LT},t=e.match(/stop\s*loss\s*(\d+(?:\.\d+)?)\s*%?/i);t&&(A.stopLossPct=Number(t[1]));let r=e.match(/take\s*profit\s*(\d+(?:\.\d+)?)\s*%?/i);r&&(A.takeProfitPct=Number(r[1]));let n=e.match(/leverage\s*(\d+(?:\.\d+)?)/i);n&&(A.maxLeverage=Number(n[1]));let s=e.match(/position\s*size\s*(\d+(?:\.\d+)?)\s*%?/i);s&&(A.positionSizePct=Number(s[1]));let i=e.match(/max\s*notional\s*(?:usd\s*)?\$?\s*(\d+(?:\.\d+)?)/i);return i&&(A.maxNotionalUsd=Number(i[1])),A}function WT(e){return[/\bon\s+(?:1m|3m|5m|15m|30m|1h|2h|4h|8h|12h|1d)\b/gi,/\bstop\s*loss\s*\d+(?:\.\d+)?\s*%?/gi,/\btake\s*profit\s*\d+(?:\.\d+)?\s*%?/gi,/\bleverage\s*\d+(?:\.\d+)?/gi,/\bposition\s*size\s*\d+(?:\.\d+)?\s*%?/gi,/\bmax\s*notional\s*(?:usd\s*)?\$?\s*\d+(?:\.\d+)?/gi].some(t=>(e.match(t)??[]).length>1)}function PT(e){let A=ST("sha256").update(e,"utf8").digest("hex").slice(0,10),t=e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,40),n=`${t.length?t:"draft"}-${A}`.replace(/[^a-z0-9._-]/g,"").slice(0,64);return/^[a-z0-9]/.test(n)?n:`d${n}`.slice(0,64)}function OT(e){let A=e.match(/\bema\s*(\d+)\s*cross(?:es)?\s*(above|below)\s*ema\s*(\d+)\b/i);if(!A)return null;let t=Number(A[1]),r=A[2].toLowerCase(),n=Number(A[3]);if(!(t>0)||!(n>0)||t===n)return null;let s=/\b(exit\s+on\s+reverse|reverse\s+exit)\b/i.test(e);return{kind:"ema_cross",fast:t,slow:n,direction:r,reverse:s}}function zT(e){let A=e.match(/\brsi\s*(\d+)\s*(above|below)\s*(-?\d+(?:\.\d+)?)/i);if(!A)return null;let t=Number(A[3]);return!Number.isFinite(t)||t<=0||t>=100?null:{kind:"rsi",period:Number(A[1]),op:A[2].toLowerCase(),threshold:t}}function ZT(e){let A=e.match(/\bfunding\s*rate\s*(above|below)\s*(-?\d+(?:\.\d+)?)(%?)(?=\s|,|$)/i);if(!A)return null;let t=Number(A[2]);return A[3]==="%"&&(t=t/100),{kind:"funding",op:A[1].toLowerCase(),threshold:t}}function _T(e,A){let t=e.replace(/^(long|short)\s+[A-Z][A-Z0-9]{1,11}\s+when\s+/i,"");if(t===e)return!1;A.kind==="ema_cross"?t=t.replace(/^ema\s*\d+\s*cross(?:es)?\s*(?:above|below)\s*ema\s*\d+\b/i,""):A.kind==="rsi"?t=t.replace(/^rsi\s*\d+\s*(?:above|below)\s*\d+(?:\.\d+)?\b/i,""):t=t.replace(/^funding\s*rate\s*(?:above|below)\s*-?\d+(?:\.\d+)?%?(?=\s|,|$)/i,"");let r=[/(?:,\s*)?\bon\s+(?:1m|3m|5m|15m|30m|1h|2h|4h|8h|12h|1d)\b/gi,/(?:,\s*)?\bstop\s*loss\s*\d+(?:\.\d+)?\s*%?/gi,/(?:,\s*)?\btake\s*profit\s*\d+(?:\.\d+)?\s*%?/gi,/(?:,\s*)?\bleverage\s*\d+(?:\.\d+)?/gi,/(?:,\s*)?\bposition\s*size\s*\d+(?:\.\d+)?\s*%?/gi,/(?:,\s*)?\bmax\s*notional\s*(?:usd\s*)?\$?\s*\d+(?:\.\d+)?/gi];A.kind==="ema_cross"&&r.push(/(?:,\s*)?\b(?:exit\s+on\s+reverse|reverse\s+exit)\b/gi);for(let n of r)t=t.replace(n,"");return t.replace(/[\s,;]+/g,"")===""}function lw(e){let A=Math.max(2,Math.floor(e/2));return{value:e,min:Math.max(2,e-A),max:Math.min(500,e+A),step:1}}function KT({side:e,coin:A,interval:t,risk:r,expiresAt:n,id:s,name:i,spec:o}){let a=[{id:"c",type:"input",field:"close"},{id:"emaLeft",type:"indicator",indicator:"ema",input:"c",period:{param:"ema_left_period"}},{id:"emaRight",type:"indicator",indicator:"ema",input:"c",period:{param:"ema_right_period"}},{id:"cross",type:"cross",direction:o.direction,left:"emaLeft",right:"emaRight"}],g={entryLong:null,entryShort:null,exitLong:null,exitShort:null};if(e==="long"?g.entryLong="cross":g.entryShort="cross",o.reverse){let l=o.direction==="above"?"below":"above";a.push({id:"crossRev",type:"cross",direction:l,left:"emaLeft",right:"emaRight"}),e==="long"?g.exitLong="crossRev":g.exitShort="crossRev"}return{version:1,id:s,name:i,venue:"hyperliquid",market:{coin:A,interval:t},parameters:{ema_left_period:lw(o.fast),ema_right_period:lw(o.slow)},nodes:a,rules:g,risk:{...r,expiresAt:n}}}function XT({side:e,coin:A,interval:t,risk:r,expiresAt:n,id:s,name:i,spec:o}){let a=[{id:"c",type:"input",field:"close"},{id:"rsi",type:"indicator",indicator:"rsi",input:"c",period:o.period},{id:"thr",type:"constant",value:o.threshold},{id:"sig",type:"compare",op:o.op==="above"?"gt":"lt",left:"rsi",right:"thr"}];return{version:1,id:s,name:i,venue:"hyperliquid",market:{coin:A,interval:t},parameters:{},nodes:a,rules:{entryLong:e==="long"?"sig":null,entryShort:e==="short"?"sig":null,exitLong:null,exitShort:null},risk:{...r,expiresAt:n}}}function jT({side:e,coin:A,interval:t,risk:r,expiresAt:n,id:s,name:i,spec:o}){let a=[{id:"fr",type:"input",field:"fundingRate"},{id:"thr",type:"constant",value:o.threshold},{id:"sig",type:"compare",op:o.op==="above"?"gt":"lt",left:"fr",right:"thr"}];return{version:1,id:s,name:i,venue:"hyperliquid",market:{coin:A,interval:t},parameters:{},nodes:a,rules:{entryLong:e==="long"?"sig":null,entryShort:e==="short"?"sig":null,exitLong:null,exitShort:null},risk:{...r,expiresAt:n}}}function Qw(e,A={}){if(typeof e!="string")throw new Ne("prompt must be a string");if(e.length>1e3)throw new Ne("prompt length must be <= 1000");if(!GT(A))throw new Ne("options must be a plain object");if(!Number.isInteger(A.nowMs))throw new Ne("options.nowMs is required integer epoch ms");let t=A.nowMs,r=YT;if("expiresInMs"in A){if(!Number.isInteger(A.expiresInMs))throw new Ne("expiresInMs must be an integer");if(r=A.expiresInMs,r<TT||r>xT)throw new Ne("expiresInMs must be between 1h and 30d")}if(UT.test(e))throw new Ne(`prompt appears to contain secrets and is rejected. ${$r}`);let n=JT(e);if(!n)throw new Ne(`empty prompt. ${$r}`);if(WT(n))throw new Ne(`duplicate interval or risk clause. ${$r}`);let s=HT(n),i=VT(n),o=vT(n);if(!s||!i||!o)throw new Ne(`could not parse side/coin/interval. ${$r}`);let a=qT(n);if(!(a.maxLeverage>0)||a.maxLeverage>50)throw new Ne("leverage out of range");if(!(a.positionSizePct>0)||a.positionSizePct>100)throw new Ne("position size out of range");let g=t+r,l=PT(n),c=`Draft ${i} ${s}`.slice(0,100),Q=OT(n),B=zT(n),E=ZT(n),u=[Q,B,E].filter(Boolean);if(u.length!==1)throw new Ne(`unsupported or ambiguous prompt. ${$r}`);if(!_T(n,u[0]))throw new Ne(`unsupported or ambiguous prompt. ${$r}`);let h,I=u[0],C={side:s,coin:i,interval:o,risk:a,expiresAt:g,id:l,name:c,spec:I};I.kind==="ema_cross"?h=KT(C):I.kind==="rsi"?h=XT(C):h=jT(C);let D=Cl(h,{nowMs:t});if(!D.ok)throw new Ne(`draft failed validation: ${D.errors.map(f=>f.message).join("; ")}`);return yl(Ge(h,{nowMs:t}))}var Ne,NT,MT,UT,$r,LT,TT,xT,YT,Ew=De(()=>{Pt();Ne=class extends Error{constructor(A){super(A),this.name="StrategyDraftError"}},NT=new Set(["1m","3m","5m","15m","30m","1h","2h","4h","8h","12h","1d"]),MT=new Set(["BTC","ETH","SOL","HYPE"]),UT=/\b(mnemonic|private\s*key|privkey|seed\s*phrase|seed\b|api[_-]?key|secret\s*key|wallet\s*key|passphrase)\b/i,$r="Supported grammar: (1) EMA cross: <long|short> <COIN> when EMA <n> crosses <above|below> EMA <m> [on <interval>] [, exit on reverse] [, risk knobs]; (2) RSI: <long|short> <COIN> when RSI <n> <above|below> <threshold> [on <interval>] [, risk knobs]; (3) funding: <long|short> <COIN> when funding rate <above|below> <decimal|percent%> [on <interval>] [, risk knobs]. Risk knobs: stop loss %, take profit %, leverage, position size %, max notional USD. Coins: BTC ETH SOL HYPE or uppercase token <=12 chars. Intervals: 1m 3m 5m 15m 30m 1h 2h 4h 8h 12h 1d.",LT=Object.freeze({maxLeverage:1,maxNotionalUsd:100,positionSizePct:5,stopLossPct:2,takeProfitPct:4,cooldownBars:1,maxDailyLossPct:3}),TT=36e5,xT=30*864e5,YT=864e5});import{createHash as $T}from"node:crypto";function Iw(e){let A=String(e).toLowerCase();return A==="holdout"||A==="test"||A==="oos"||A.includes("holdout")||A.includes("oos")?!0:A==="testbars"||A.endsWith("testbars")||A.startsWith("test")||A.endsWith("test")?!A.includes("backtest"):!1}function hw(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function ml(e){if(e==null||typeof e!="object"||Object.isFrozen(e))return e;if(Array.isArray(e)){for(let A of e)ml(A);return Object.freeze(e)}for(let A of Object.keys(e))ml(e[A]);return Object.freeze(e)}function ls(e){if(Array.isArray(e))return e.map(ls);if(e!=null&&typeof e=="object"){let A={};for(let t of Object.keys(e).sort())A[t]=ls(e[t]);return A}return e}function Io(e){return JSON.stringify(ls(e))}function ex(e){let{min:A,max:t,step:r}=e;if(!(r>0)||A>t)return[];let n=[],s=Math.floor((t-A)/r+1e-9);for(let o=0;o<=s;o++){let a=A+o*r;if(a>t+1e-9)break;let g=Math.abs(a-Math.round(a))<1e-9?Math.round(a):Number(a.toPrecision(12));g<A-1e-9||g>t+1e-9||n.push(g)}if(n.length===0)return[];let i=n[n.length-1];if(Math.abs(i-t)>1e-9){let o=(t-A)/r;Math.abs(o-Math.round(o))<=1e-9&&n.push(t)}return n}function Ax(e,A){if(e.length===0)return[];let t=[{}];for(let r of e){let n=A[r],s=[];for(let i of t)for(let o of n)s.push({...i,[r]:o});t=s}return t.sort((r,n)=>{let s=Io(r),i=Io(n);return s<i?-1:s>i?1:0}),t}function pl(e,A,t,r,n){let s=0;if(e==="maxDrawdownPct"){if(s=A.maxDrawdownPct-r.maxDrawdownPct,s!==0)return s<0}else if(s=A[e]-r[e],s!==0)return s>0;let i=Io(t),o=Io(n);return i<o}function Cw(e,A,t={}){if(!hw(t))throw new TypeError("options must be a plain object");for(let f of Object.keys(t))if(Iw(f))throw new TypeError(`options must not include holdout/test/oos key "${f}"`);let r=new Set(["maxTrials","objective","backtestOptions"]);for(let f of Object.keys(t))if(!r.has(f))throw new TypeError(`unknown option "${f}"`);let n=64;if("maxTrials"in t){let f=t.maxTrials;if(!Number.isInteger(f)||f<1||f>Bw)throw new TypeError(`maxTrials must be an integer 1..${Bw}`);n=f}let s=t.objective??"netPnlUsd";if(!uw.has(s))throw new TypeError(`objective must be one of ${[...uw].join("|")}`);let i=t.backtestOptions??{};if(!hw(i))throw new TypeError("backtestOptions must be a plain object");for(let f of Object.keys(i))if(Iw(f))throw new TypeError(`backtestOptions must not include holdout/test/oos key "${f}"`);let o=Ge(e),a=Object.keys(o.parameters).sort();if(a.length===0)throw new Error("optimizeStrategy requires at least one declared parameter");let g={},l=1;for(let f of a){let R=ex(o.parameters[f]);if(R.length===0)throw new Error(`parameter "${f}" produces an empty grid`);g[f]=R,l*=R.length}let c=Ax(a,g);if(c.length===0)throw new Error("parameter grid is empty");let Q=c.slice(0,n),B=[],E=null,u=null;for(let f of Q){let R=as(o,f),S=ut(R,A,i);u==null&&(u=S.config);let d={netPnlUsd:S.metrics.netPnlUsd,netPnlPct:S.metrics.netPnlPct,maxDrawdownPct:S.metrics.maxDrawdownPct,winRate:S.metrics.winRate,profitFactor:S.metrics.profitFactor,tradeCount:S.metrics.tradeCount,sharpe:S.metrics.sharpe,turnoverUsd:S.metrics.turnoverUsd},se={parameters:{...f},metrics:d};B.push(se),(!E||pl(s,d,f,E.metrics,E.parameters))&&(E=se)}B.sort((f,R)=>pl(s,f.metrics,f.parameters,R.metrics,R.parameters)?-1:pl(s,R.metrics,R.parameters,f.metrics,f.parameters)?1:0);let h={...E.parameters},I=as(o,h),C={strategyHash:Zr(o),compilerHash:Ot,trainBarsHash:ns(A),backtestConfig:u,objective:s,maxTrials:n,trialsRun:B.length,candidates:B,bestParameters:h,bestStrategy:I},D={id:$T("sha256").update(JSON.stringify(ls(C)),"utf8").digest("hex"),...C};return ml(ls(JSON.parse(JSON.stringify(D))))}var Bw,uw,fw=De(()=>{zt();Pt();lo();Bw=256,uw=new Set(["netPnlUsd","profitFactor","sharpe","maxDrawdownPct"])});import XA from"node:fs";import ho from"node:path";function Co(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function TA(e){return e==null?e:JSON.parse(JSON.stringify(e))}function rx(e){return String(e).toLowerCase().replace(/[^a-z0-9]/g,"")}function en(e,A="record"){if(Array.isArray(e)){e.forEach((t,r)=>en(t,`${A}[${r}]`));return}if(Co(e))for(let[t,r]of Object.entries(e)){let n=rx(t);if(tx.some(s=>n.includes(s)))throw new Error(`shadow-store: forbidden secret-like field at ${A}.${t}`);en(r,`${A}.${t}`)}}function nx(e){if(typeof e!="string"||!e||!ho.isAbsolute(e))throw new Error("shadow-store: path must be an absolute path")}function dw(e){let A;try{A=XA.lstatSync(e)}catch(r){if(r&&r.code==="ENOENT")return;throw r}if(A.isSymbolicLink())throw new Error("shadow-store: store path must not be a symlink");if(!A.isFile())throw new Error("shadow-store: store path must be a regular file");if(A.mode&511&18)throw new Error("shadow-store: store file must not be group or world writable")}function sx(){return{version:kl,runners:[]}}function ww(e,A){let t;try{t=JSON.parse(e)}catch{throw new Error("shadow-store: malformed JSON")}if(!Co(t))throw new Error("shadow-store: malformed JSON root");if(t.version!==kl)throw new Error(`shadow-store: unsupported version ${t.version}`);if(!Array.isArray(t.runners))throw new Error("shadow-store: runners must be an array");return en(t,ho.basename(A)),{version:kl,runners:t.runners.map(r=>TA(r))}}function yw(e,A){en(A,"store");let t=ho.dirname(e);XA.mkdirSync(t,{recursive:!0,mode:448});let r=ho.join(t,`.shadow-store.${process.pid}.${Date.now()}.tmp`),n=`${JSON.stringify(A)}
46
+ `),o=rL("sha256").update(i).digest("hex").slice(0,32);return`${e} ${A} ${o}`}function QL(e,A){let t=Number(A);return Number.isFinite(t)&&t>0?Math.min(t*1e3,Cd):Math.min(250*2**e,Cd)+Math.floor(Math.random()*100)}async function BL(e,{fetchImpl:A,method:t,headers:r,body:n,timeoutMs:s,lookupFn:i,realFetch:o}){let a=new AbortController,g=setTimeout(()=>a.abort(),s),l=null,c=A;try{let Q=String(e),B={...r||{}};for(let E=0;E<=fd;E+=1){let u=await c(Q,{method:t,headers:B,body:n,signal:a.signal,redirect:"manual"}),h=await u.text(),I=null;if(h)try{I=JSON.parse(h)}catch{I=null}if(iL.has(u.status)){if(t!=="GET"&&t!=="HEAD"){let f=new Error(`HTTP ${u.status} ${t} ${Q} redirected non-idempotent request`);throw f.status=u.status,f.body=I??h.slice(0,300),f}if(E===fd)throw new Error(`HTTP redirect loop for ${e}`);let C=cL(u.headers?.get?.("location"),Q);if(!gL(C,Q)){let f=await Bd(C,i?{lookupFn:i}:{});if(!f.ok){let R=new Error(`HTTP redirect from ${Q} ${f.error}`);throw R.status=u.status,R}B=aL(B),o&&f.addresses?.length&&(l||(l=await ud()),l&&(l.pin(new URL(C).hostname,f.addresses[0].address,f.addresses[0].family),c=l.fetch))}Q=C;continue}if(!u.ok){let C=new Error(`HTTP ${u.status} ${t} ${Q}`);throw C.status=u.status,C.retryAfter=u.headers?.get?.("retry-after")??null,C.body=I??h.slice(0,300),C}return I??h}throw new Error(`HTTP redirect loop for ${e}`)}finally{clearTimeout(g),l&&await l.close()}}async function wd(e,A={}){let t=A.fetchImpl||globalThis.fetch;if(typeof t!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let r=A.timeoutMs??12e3,n=(A.method||"GET").toUpperCase(),s={Accept:"application/json",...A.headers||{}},i=A.body;i!=null&&typeof i!="string"&&(s["Content-Type"]=s["Content-Type"]||"application/json",i=JSON.stringify(i));let o=Number.isInteger(A.retries)?Math.max(A.retries,0):sL,a=A.lookupFn,g=!A.fetchImpl,l=async()=>{let u;for(let h=0;h<=o;h++)try{return await BL(e,{fetchImpl:t,method:n,headers:s,body:i,timeoutMs:r,lookupFn:a,realFetch:g})}catch(I){u=I;let C=I?.status,D=I?.name==="AbortError",f=new Set([408,425,429]),R=C!=null?f.has(C)||nL.has(C)&&hd.has(n):!D&&hd.has(n);if(h===o||!R)throw I;await EL(QL(h,I?.retryAfter))}throw u};if(!(A.dedupe!==!1&&n==="GET"&&i==null))return l();let Q=lL(n,e,s),B=jg.get(Q);if(B)return B;let E=l().finally(()=>jg.delete(Q));return jg.set(Q,E),E}var nL,hd,sL,Cd,dd,iL,fd,jg,EL,yd=De(()=>{Id();nL=new Set([408,425,429,500,502,503,504]),hd=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),sL=2,Cd=4e3,dd=["authorization","x-api-key","x-tensor-api-key","0x-api-key","api-key","cookie","proxy-authorization"],iL=new Set([301,302,303,307,308]),fd=3;jg=new Map;EL=e=>new Promise(A=>setTimeout(A,e))});function hL({testnet:e,baseUrl:A}={}){if(A)return A.replace(/\/$/,"").endsWith("/info")?A:`${A.replace(/\/$/,"")}/info`;if(process.env.HL_INFO_URL)return process.env.HL_INFO_URL;if(process.env.HL_API_URL){let t=process.env.HL_API_URL.replace(/\/$/,"");return t.endsWith("/info")?t:`${t}/info`}return e||process.env.HL_TESTNET==="1"?IL:uL}async function $g(e,A={}){if(!e||!e.type)throw new Error("hlInfo requires body.type");let t=hL(A);return wd(t,{method:"POST",body:e,fetchImpl:A.fetchImpl,timeoutMs:A.timeoutMs})}async function pd(e={}){return $g({type:"meta"},e)}async function md({coin:e,interval:A="1h",startTime:t,endTime:r},n={}){if(!e)throw new Error("hlCandleSnapshot requires coin");let s={type:"candleSnapshot",req:{coin:String(e),interval:A,startTime:t??Date.now()-24*3600*1e3,endTime:r??Date.now()}};return $g(s,n)}async function Dd({coin:e,startTime:A,endTime:t},r={}){if(!e)throw new Error("hlFundingHistory requires coin");return $g({type:"fundingHistory",coin:String(e),startTime:A??Date.now()-24*3600*1e3,endTime:t??Date.now()},r)}var uL,IL,el=De(()=>{yd();uL="https://api.hyperliquid.xyz/info",IL="https://api.hyperliquid-testnet.xyz/info"});import{createHash as CL}from"node:crypto";function UA(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function zr(e){return typeof e=="number"&&Number.isFinite(e)}function rl(e){if(e==null||typeof e!="object"||Object.isFrozen(e))return e;if(Array.isArray(e)){for(let A of e)rl(A);return Object.freeze(e)}for(let A of Object.keys(e))rl(e[A]);return Object.freeze(e)}function Wt(e){if(Array.isArray(e))return e.map(Wt);if(e!=null&&typeof e=="object"){let A={};for(let t of Object.keys(e).sort())A[t]=Wt(e[t]);return A}return e}function Al(e){return{netPnlUsd:e.metrics.netPnlUsd,netPnlPct:e.metrics.netPnlPct,maxDrawdownPct:e.metrics.maxDrawdownPct,winRate:e.metrics.winRate,profitFactor:e.metrics.profitFactor,tradeCount:e.metrics.tradeCount,sharpe:e.metrics.sharpe,turnoverUsd:e.metrics.turnoverUsd,exposurePct:e.metrics.exposurePct}}function kd(e){return{feesUsd:e.costs.feesUsd,builderFeesUsd:e.costs.builderFeesUsd,fundingUsd:e.costs.fundingUsd,slippageUsd:e.costs.slippageUsd}}function dL(e){return(e.feesUsd||0)+(e.builderFeesUsd||0)+Math.max(0,e.fundingUsd||0)+(e.slippageUsd||0)}function wL(e){let A=0;for(let t of e.trades)t.grossPnlUsd>0&&(A+=t.grossPnlUsd);return A}function yL(e,A,t){return!(!e||e.tradeCount<Math.max(1,Math.min(t,3))||!(e.netPnlUsd>0)||!(e.profitFactor>1)||!(e.maxDrawdownPct<=A.maxDailyLossPct))}function Fd(e){if(!UA(e))throw new TypeError("evidence artifact must be a plain object");if(!fL.includes(e.status))throw new TypeError("evidence artifact status is invalid");for(let A of["strategyHash","compilerHash","barsHash"])if(typeof e[A]!="string"||!/^[0-9a-f]{64}$/.test(e[A]))throw new TypeError(`evidence artifact ${A} must be a sha256 hash`);if(!UA(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(!UA(e.walkForward)||!Array.isArray(e.walkForward.windows))throw new TypeError("evidence artifact walkForward windows required");if(e.status==="pass_live_eligible"&&(!UA(e.train)||!UA(e.holdout)))throw new TypeError("live-eligible evidence artifact requires train and holdout facts");return Wt({barsHash:e.barsHash,compilerHash:e.compilerHash,flags:e.flags.map(A=>Wt(A)),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(A=>({index:A.index,trainStartIndex:A.trainStartIndex,trainEndIndex:A.trainEndIndex,passed:A.passed,reason:A.reason,evalStartIndex:A.evalStartIndex,evalEndIndex:A.evalEndIndex,metrics:A.metrics}))}})}function Rd(e){return CL("sha256").update(JSON.stringify(Fd(e)),"utf8").digest("hex")}function fA(e,A,t=0){if(!Number.isInteger(e)||e<t)throw new Error(`${A} must be an integer >= ${t}`);return e}function tl(e,A){if(!UA(e)||!UA(e.metrics))throw new Error(`${A} metrics required`);let t=fA(e.tradeCount,`${A}.tradeCount`);if(e.metrics.tradeCount!==t)throw new Error(`${A} tradeCount contradicts metrics.tradeCount`);for(let r of["netPnlUsd","profitFactor","maxDrawdownPct"])if(!zr(e.metrics[r]))throw new Error(`${A}.metrics.${r} must be finite`);if(e.metrics.maxDrawdownPct<0)throw new Error(`${A}.metrics.maxDrawdownPct must be >= 0`);return e.metrics}function pL(e,{maxDailyLossPct:A}={}){let t=e.split,r=fA(t.trainStartIndex,"split.trainStartIndex"),n=fA(t.trainEndIndex,"split.trainEndIndex"),s=fA(t.trainBarCount,"split.trainBarCount",1),i=fA(t.holdoutStartIndex,"split.holdoutStartIndex"),o=fA(t.holdoutEndIndex,"split.holdoutEndIndex"),a=fA(t.holdoutBarCount,"split.holdoutBarCount",1);if(r!==0||n-r+1!==s||i!==n+1||o-i+1!==a)throw new Error("evidence split must be contiguous, chronological, and count-consistent");if(!zr(t.trainFraction)||t.trainFraction<=0||t.trainFraction>=1)throw new Error("split.trainFraction must be in (0,1)");tl(e.train,"train");let g=tl(e.holdout,"holdout");if(g.tradeCount<1||g.netPnlUsd<=0||g.profitFactor<=1)throw new Error("live-eligible holdout metrics do not pass");if(zr(A)&&g.maxDrawdownPct>A)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,c=l.windows;if(c.length<1||l.windowsRun!==c.length)throw new Error("live-eligible walk-forward windowsRun must match nonempty windows");let Q=0,B=-1;for(let u=0;u<c.length;u++){let h=c[u];if(!UA(h)||h.index!==u||typeof h.passed!="boolean")throw new Error("walk-forward windows must be ordered and structurally valid");let I=fA(h.trainStartIndex,`walkForward.windows[${u}].trainStartIndex`),C=fA(h.trainEndIndex,`walkForward.windows[${u}].trainEndIndex`),D=fA(h.evalStartIndex,`walkForward.windows[${u}].evalStartIndex`),f=fA(h.evalEndIndex,`walkForward.windows[${u}].evalEndIndex`);if(I!==0||C>=D||D>f||D<=B)throw new Error("walk-forward windows must be chronological and disjoint");if(B=f,h.passed){if(Q+=1,h.reason!=="pass")throw new Error("passed walk-forward window reason must be pass");let R=tl({metrics:h.metrics,tradeCount:h.metrics?.tradeCount},`walkForward.windows[${u}]`);if(R.tradeCount<1||R.netPnlUsd<=0||R.profitFactor<=1)throw new Error("passed walk-forward window metrics do not pass");if(zr(A)&&R.maxDrawdownPct>A)throw new Error("passed walk-forward drawdown exceeds strategy risk")}else if(h.reason==="pass")throw new Error("failed walk-forward window cannot have pass reason")}let E=Q/c.length;if(!zr(l.passRate)||Math.abs(l.passRate-E)>Number.EPSILON||E<.6)throw new Error("walk-forward passRate contradicts concrete windows or is below live threshold")}function Sd(e,A={}){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 t=Fd(e),r=Wt({id:e.id,...t});if(JSON.stringify(Wt(e))!==JSON.stringify(r))throw new Error("evidence artifact contains fields unbound from its deterministic identity");let n=Rd(e);if(e.id!==n)throw new Error("evidence.id does not match its deterministic artifact facts digest");return e.status==="pass_live_eligible"&&pL(e,A),e}function nl({strategy:e,bars:A,backtestOptions:t={},trainFraction:r=.7,walkForwardWindows:n=3,minTrades:s=10}={}){let i=[];if(!UA(e))throw new TypeError("strategy must be a plain object");if(!Array.isArray(A))throw new TypeError("bars must be an array");if(!UA(t))throw new TypeError("backtestOptions must be a plain object");if(!zr(r)||r<=0||r>=1)throw new TypeError("trainFraction must be in (0,1)");if(!Number.isInteger(n)||n<1)throw new TypeError("walkForwardWindows must be a positive integer");if(!Number.isInteger(s)||s<0)throw new TypeError("minTrades must be an integer >= 0");let o=Ge(e),a=Zr(o),g=ns(A),l=A.length,c=(_=[],te={})=>bd({status:"fail",strategy:o,sHash:a,barsHash:g,split:te.split||{trainStartIndex:0,trainEndIndex:-1,trainBarCount:0,holdoutStartIndex:0,holdoutEndIndex:-1,holdoutBarCount:0,trainFraction:r},train:te.train||null,holdout:te.holdout||null,walkForward:te.walkForward||{windows:[],passRate:0},flags:[...i,..._]});if(l<10)return c([{type:"insufficient_bars",message:"need at least 10 bars for evidence"}]);let Q=Math.floor(l*r),B=Q,E=l-B;if(Q<5||E<3)return c([{type:"invalid_windowing",message:"train/holdout split too small",trainCount:Q,holdoutCount:E}]);let u=A.slice(0,Q),h=A.slice(B),I,C;try{I=ut(o,u,t),C=ut(o,h,t)}catch(_){return c([{type:"backtest_error",message:String(_.message||_)}])}let D={metrics:Al(I),costs:kd(I),tradeCount:I.metrics.tradeCount},f={metrics:Al(C),costs:kd(C),tradeCount:C.metrics.tradeCount},R={trainStartIndex:0,trainEndIndex:Q-1,trainBarCount:Q,holdoutStartIndex:B,holdoutEndIndex:l-1,holdoutBarCount:E,trainFraction:r},S=[],d=Math.floor(l/(n+1));if(d<3)i.push({type:"invalid_windowing",message:"walk-forward window size too small",wfSize:d});else for(let _=0;_<n;_++){let te=d*(_+1),Re=te,fe=Math.min(l,Re+d);if(fe-Re<3||te<3){S.push({index:_,trainStartIndex:0,trainEndIndex:te-1,evalStartIndex:Re,evalEndIndex:fe-1,passed:!1,reason:"window_too_small",metrics:null});continue}let wA=A.slice(Re,fe),Es;try{Es=ut(o,wA,t)}catch{S.push({index:_,trainStartIndex:0,trainEndIndex:te-1,evalStartIndex:Re,evalEndIndex:fe-1,passed:!1,reason:"backtest_error",metrics:null});continue}let Bs=Al(Es),us=yL(Bs,o.risk,s);S.push({index:_,trainStartIndex:0,trainEndIndex:te-1,evalStartIndex:Re,evalEndIndex:fe-1,passed:us,reason:us?"pass":"fail_metrics",metrics:Bs})}let se=S.filter(_=>_.passed).length,ke=S.length===0?0:se/S.length,Le={windows:S,passRate:ke,windowsRun:S.length};f.metrics.tradeCount===0&&D.metrics.tradeCount===0&&i.push({type:"no_trades",message:"no trades in train or holdout"}),f.metrics.tradeCount===0&&i.push({type:"absent_oos_trades",message:"holdout produced no trades"}),f.metrics.netPnlUsd<0&&i.push({type:"holdout_loss",message:"holdout netPnlUsd is negative"}),D.metrics.netPnlUsd>0&&f.metrics.netPnlUsd<0&&D.metrics.netPnlUsd>Math.abs(f.metrics.netPnlUsd)*.25?i.push({type:"overfit",message:"profitable train with losing holdout (OOS collapse)"}):D.metrics.netPnlUsd>0&&f.metrics.netPnlUsd>0&&f.metrics.netPnlUsd<D.metrics.netPnlUsd*.1&&D.metrics.tradeCount>=s&&i.push({type:"severe_oos_collapse",message:"holdout pnl collapsed vs train"});let me=dL(f.costs),w=wL(C);w>0&&me>w&&i.push({type:"costs_exceed_gross",message:"holdout costs exceed gross gains"});let H=i.some(_=>["insufficient_bars","invalid_windowing","absent_oos_trades","holdout_loss","no_trades","severe_oos_collapse","backtest_error"].includes(_.type)),q=i.some(_=>_.type==="overfit"),ee="fail";return f.metrics.tradeCount>=s&&f.metrics.netPnlUsd>0&&f.metrics.profitFactor>1&&f.metrics.maxDrawdownPct<=o.risk.maxDailyLossPct&&ke>=.6&&!(w>0&&me>w)&&!q&&!i.some(_=>_.type==="severe_oos_collapse"||_.type==="invalid_windowing")?ee="pass_live_eligible":!H&&f.metrics.tradeCount>0&&D.metrics.tradeCount>0&&Number.isFinite(f.metrics.netPnlUsd)?(ee="pass_paper_only",f.metrics.tradeCount<s&&i.push({type:"undersampled",message:"holdout trades below minTrades"})):q&&f.metrics.tradeCount>0&&D.metrics.netPnlUsd>0?ee="fail":f.metrics.tradeCount>0&&D.metrics.tradeCount>0&&!H?ee="pass_paper_only":ee="fail",f.metrics.netPnlUsd<0&&(ee=ee==="pass_live_eligible"?"fail":ee==="pass_paper_only"?"pass_paper_only":"fail",ee="fail"),bd({status:ee,strategy:o,sHash:a,barsHash:g,split:R,train:D,holdout:f,walkForward:Le,flags:i})}function bd({status:e,strategy:A,sHash:t,barsHash:r,split:n,train:s,holdout:i,walkForward:o,flags:a}){let g={status:e,strategyHash:t,compilerHash:Ot,barsHash:r,split:n,train:s,holdout:i,walkForward:o,flags:a};return g.id=Rd(g),rl(Wt(JSON.parse(JSON.stringify(g))))}var fL,sl=De(()=>{zt();Pt();lo();fL=Object.freeze(["fail","pass_paper_only","pass_live_eligible"])});import{createHash as mL,createHmac as DL,timingSafeEqual as RG}from"node:crypto";function il(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(il).join(",")}]`:`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${il(e[t])}`).join(",")}}`}function Nd(e){let A=String(e?.ORACLE_STAMP_HMAC_SECRET||"").trim();return A.length>=16?A:""}function Md(e=process.env){return Nd(process.env)||Nd(e)}function FL(e){let{prepareHash:A,prepareMac:t,note:r,...n}=e||{};return n}function RL(e){let A=FL(e);return mL("sha256").update(il(A)).digest("hex")}function SL(e,A=Md()){return A?DL("sha256",A).update(String(e)).digest("hex"):""}function Ud(e,{provider:A,kind:t,env:r=process.env}={}){if(!e||typeof e!="object")throw new Error("stampPrepared: payload object required");let n=Object.prototype.hasOwnProperty.call(e,"oraclePrepared");if(n&&typeof e.oraclePrepared!="boolean")throw new Error("stampPrepared: oraclePrepared must be boolean");let s={...e,provider:e.provider||A,kind:e.kind||t,requiresUserSignature:e.requiresUserSignature!==!1,signingReady:!1,broadcastReady:!1,executionReady:!1,oraclePrepared:n?e.oraclePrepared:!0};if(!s.provider)throw new Error("stampPrepared: provider required");if(!s.kind)throw new Error("stampPrepared: kind required");let i=Date.now(),o=i+bL,g={...s,preparedAt:i,expiresAt:o,prepareVersion:kL},l=RL(g),c=Md(r),Q=c?SL(l,c):void 0,B={...g,prepareHash:l};return Q&&(B.prepareMac=Q),B}var kL,bL,SG,Ld=De(()=>{kL=2,bL=300*1e3,SG=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});function ss(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function ML(e){return String(e).toLowerCase().replace(/[^a-z0-9]/g,"")}function al(e,A="value"){if(Array.isArray(e)){e.forEach((t,r)=>al(t,`${A}[${r}]`));return}if(ss(e))for(let[t,r]of Object.entries(e)){let n=ML(t);if(NL.some(s=>n.includes(s)))throw new Error(`handoff: forbidden secret-like field at ${A}.${t}`);al(r,`${A}.${t}`)}}function ol(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function Td({strategy:e,evidence:A,shadow:t,caps:r,nowMs:n=Date.now(),env:s=process.env}={}){if(al({strategy:e,evidence:A,shadow:t,caps:r},"handoff"),!ss(e))throw new Error("handoff: strategy required");if(!ss(A))throw new Error("handoff: evidence required");if(!ss(t))throw new Error("handoff: shadow required");if(!ss(r))throw new Error("handoff: caps required");if(typeof t.id!="string"||!t.id.trim())throw new Error("handoff: shadow.id required");if(typeof t.stateHash!="string"||!/^[0-9a-f]{64}$/.test(t.stateHash))throw new Error("handoff: shadow.stateHash must be a sha256 hash");if(t.status!=="running")throw new Error("handoff: shadow.status must be running");if(!Number.isInteger(t.cursor)||t.cursor<=0)throw new Error("handoff: shadow.cursor must be a positive integer");if(!Number.isInteger(t.updatedAt)||t.updatedAt<=0||t.updatedAt>n)throw new Error("handoff: shadow.updatedAt must be a positive integer <= nowMs");let i=Ge(e,{nowMs:n}),o=Je(i);if(Sd(A,{maxDailyLossPct:i.risk.maxDailyLossPct}),A.status!=="pass_live_eligible")throw new Error("handoff: evidence.status must be pass_live_eligible");if(A.strategyHash!==o.strategyHash)throw new Error("handoff: evidence.strategyHash mismatch");if(A.compilerHash!==o.compilerHash)throw new Error("handoff: evidence.compilerHash mismatch");let a=["perStrategyNotionalUsd","maxLeverage","dailyLossCapUsd","chainAllowlist","assetAllowlist","expiresAt","killSwitchRequired"];for(let Q of a)if(!(Q in r)||r[Q]==null)throw new Error(`handoff: caps.${Q} required`);if(!ol(r.perStrategyNotionalUsd))throw new Error("handoff: caps.perStrategyNotionalUsd must be positive");if(r.perStrategyNotionalUsd>o.strategy.risk.maxNotionalUsd)throw new Error("handoff: caps.perStrategyNotionalUsd exceeds strategy.risk.maxNotionalUsd");if(!ol(r.maxLeverage))throw new Error("handoff: caps.maxLeverage must be positive");if(r.maxLeverage>o.strategy.risk.maxLeverage)throw new Error("handoff: caps.maxLeverage exceeds strategy.risk.maxLeverage");if(!ol(r.dailyLossCapUsd))throw new Error("handoff: caps.dailyLossCapUsd must be positive");let g=o.strategy.risk.maxNotionalUsd*(o.strategy.risk.maxDailyLossPct/100);if(r.dailyLossCapUsd>g)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(Q=>Q==="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]!==o.strategy.market.coin)throw new Error("handoff: caps.assetAllowlist must contain only the strategy market coin");if(!Number.isInteger(r.expiresAt)||!(r.expiresAt>n))throw new Error("handoff: caps.expiresAt must be an integer > nowMs");if(r.expiresAt>o.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 l={perStrategyNotionalUsd:r.perStrategyNotionalUsd,maxLeverage:r.maxLeverage,dailyLossCapUsd:r.dailyLossCapUsd,chainAllowlist:[...r.chainAllowlist],assetAllowlist:[...r.assetAllowlist],expiresAt:r.expiresAt,killSwitchRequired:!0},c={strategyHash:o.strategyHash,compilerHash:o.compilerHash,evidence:JSON.parse(JSON.stringify(A)),shadow:{id:t.id,stateHash:t.stateHash,status:t.status,cursor:t.cursor,updatedAt:t.updatedAt},compiled:{strategyHash:o.strategyHash,compilerHash:o.compilerHash,compilerVersion:is,venue:"hyperliquid",market:{coin:o.strategy.market.coin,kind:"perp",interval:o.strategy.market.interval},risk:{...o.strategy.risk},strategy:JSON.parse(JSON.stringify(o.strategy))},arming:{liveBroadcast:!1,requiresExplicitUserArm:!0,caps:l},requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,executionReady:!1};return Ud(c,{provider:"hl-strategy",kind:"strategy-live-handoff",env:s})}var NL,xd=De(()=>{zt();sl();Pt();Ld();NL=["privatekey","secretkey","seed","mnemonic","passphrase","password","keystore","keymaterial","apikey","authtoken","accesstoken","refreshtoken","credential","bearer","signature","authorization","xprv","xpriv","wif"]});function _r(e,A){let t=Number(e);if(!Number.isFinite(t))throw new TypeError(`${A} must be finite`);return t}function Kr(e,A){if(!Number.isSafeInteger(e)||e<0)throw new TypeError(`${A} must be a non-negative safe integer`);return e}function os(e){if(Array.isArray(e))for(let A of e)os(A);else if(e&&typeof e=="object")for(let A of Object.values(e))os(A);return Object.freeze(e)}function LL(e){let A=UL[e];if(!A)throw new TypeError(`unsupported strategy interval: ${e}`);return A}function TL(e,{endTime:A=Number.MAX_SAFE_INTEGER}={}){if(!Array.isArray(e))throw new TypeError("Hyperliquid candles must be an array");Kr(A,"endTime");let t=new Map;for(let r=0;r<e.length;r++){let n=e[r];if(!n||typeof n!="object"||Array.isArray(n))throw new TypeError(`candles[${r}] must be an object`);let s=Kr(Number(n.t),`candles[${r}].t`);if(Kr(Number(n.T),`candles[${r}].T`)>A)continue;let o={t:s,o:_r(n.o,`candles[${r}].o`),h:_r(n.h,`candles[${r}].h`),l:_r(n.l,`candles[${r}].l`),c:_r(n.c,`candles[${r}].c`),v:_r(n.v,`candles[${r}].v`)};if(o.h<Math.max(o.o,o.c,o.l))throw new TypeError(`candles[${r}].h is below another price`);if(o.l>Math.min(o.o,o.c,o.h))throw new TypeError(`candles[${r}].l is above another price`);if(o.v<0)throw new TypeError(`candles[${r}].v must be non-negative`);let a=t.get(s);if(a&&JSON.stringify(a)!==JSON.stringify(o))throw new TypeError(`conflicting duplicate candle at timestamp ${s}`);a||t.set(s,o)}return os([...t.values()].sort((r,n)=>r.t-n.t))}function xL(e,A){if(!Array.isArray(e))throw new TypeError("Hyperliquid funding history must be an array");let t=new Map;for(let r=0;r<e.length;r++){let n=e[r];if(!n||typeof n!="object"||Array.isArray(n))throw new TypeError(`funding[${r}] must be an object`);let s=Kr(Number(n.time),`funding[${r}].time`);s>A||t.set(s,{time:s,fundingRate:_r(n.fundingRate,`funding[${r}].fundingRate`)})}return[...t.values()].sort((r,n)=>r.time-n.time)}async function YL({coin:e,startTime:A,endTime:t},r){let n=[],s=Math.max(0,A-288e5),i=!1;for(let o=0;o<16&&s<=t;o++){let a=await Dd({coin:e,startTime:s,endTime:t},r);if(!Array.isArray(a))throw new TypeError("Hyperliquid funding history must be an array");n.push(...a);let g=s;for(let l of a){let c=Number(l?.time);Number.isSafeInteger(c)&&c>g&&(g=c)}if(a.length<500||g>=t){i=!0;break}if(g<=s)throw new Error("Hyperliquid funding history pagination did not advance");s=g+1}if(!i)throw new Error("strategy history exceeds the bounded funding history limit");return xL(n,t)}function GL(e,A,t){let r=0,n=null;return e.map(s=>{let i=s.t+t,o=0;for(;r<A.length&&A[r].time<i;){let a=A[r];n=a.fundingRate,a.time>=s.t&&(o+=a.fundingRate),r+=1}return n==null?{...s,fundingPaymentRate:o}:{...s,fundingRate:n,fundingPaymentRate:o}})}async function Yd(e,A={}){if(!e||typeof e!="object"||Array.isArray(e))throw new TypeError("strategy history input must be an object");let t=String(e.coin||"").trim().toUpperCase();if(!/^[A-Z0-9][A-Z0-9._-]{0,11}$/.test(t))throw new TypeError("coin must be an uppercase Hyperliquid asset id");let r=String(e.interval||"15m"),n=LL(r);if(e.endTime==null)throw new TypeError("endTime is required for deterministic history");let s=Kr(e.endTime,"endTime"),i=e.count==null?1500:e.count;if(!Number.isInteger(i)||i<20||i>5e3)throw new TypeError("count must be an integer from 20 to 5000");let o=e.startTime==null?Math.max(0,s-i*n):Kr(e.startTime,"startTime");if(o>=s)throw new TypeError("startTime must be before endTime");let[a,g]=await Promise.all([md({coin:t,interval:r,startTime:o,endTime:s},A),YL({coin:t,startTime:o,endTime:s},A)]),l=TL(a,{endTime:s}),c=os(GL(l,g,n));return os({coin:t,interval:r,range:{startTime:o,endTime:s},bars:c})}var UL,Gd=De(()=>{el();UL=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 VL(e){let A=[];if(!e||typeof e!="object"||Array.isArray(e))return{ok:!1,errors:[{path:"market",message:"must be a plain object"}],market:null};for(let t of Object.keys(e))HL.has(t)||A.push({path:`market.${t}`,message:"unknown field is not allowed"});return(typeof e.coin!="string"||e.coin.length===0||e.coin.length>32)&&A.push({path:"market.coin",message:"must be a non-empty string max 32"}),(typeof e.interval!="string"||!JL.has(e.interval))&&A.push({path:"market.interval",message:"must be a supported interval"}),A.length?{ok:!1,errors:A,market:null}:{ok:!0,errors:[],market:{coin:e.coin,interval:e.interval}}}async function vL(e={}){let A=await pd(e);if(!A||!Array.isArray(A.universe))throw new TypeError("Hyperliquid market metadata must contain universe");return Object.freeze(A.universe.map((t,r)=>{if(!t||typeof t.name!="string"||!t.name)throw new TypeError(`Hyperliquid market metadata universe[${r}].name is invalid`);return t.name}))}var JL,HL,Jd,Hd=De(()=>{el();xd();Gd();JL=new Set(["1m","3m","5m","15m","30m","1h","2h","4h","8h","12h","1d"]),HL=new Set(["coin","interval"]);Jd=Object.freeze({id:"hyperliquid",validateMarket:VL,fetchBars:Yd,listMarkets:vL,prepareIntent(e){return Td(e)}})});function WL(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 A of qL.slice(1))if(typeof e[A]!="function")throw new TypeError(`strategy venue adapter ${e.id} requires ${A}()`);for(let A of["fetchBars","listMarkets"])if(e[A]!=null&&typeof e[A]!="function")throw new TypeError(`strategy venue adapter ${e.id} ${A} must be a function`);return e}function cl(e){return typeof e!="string"?null:PL.get(e)??null}function gl(e){let A=cl(e);if(!A)throw new Error(`unknown strategy venue: ${String(e)}`);return A}var qL,Vd,PL,WG,ll=De(()=>{Hd();qL=Object.freeze(["id","validateMarket","prepareIntent"]);Vd=[Jd].map(WL),PL=new Map(Vd.map(e=>[e.id,e])),WG=Object.freeze([...Vd])});import{createHash as OL}from"node:crypto";function aA(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function Ie(e){return typeof e=="number"&&Number.isFinite(e)}function _d(e){return Number.isInteger(e)&&e>0}function Il(e){if(e==null||typeof e!="object"||Object.isFrozen(e))return e;if(Array.isArray(e)){for(let A of e)Il(A);return Object.freeze(e)}for(let A of Object.keys(e))Il(e[A]);return Object.freeze(e)}function hl(e){if(Array.isArray(e))return e.map(hl);if(e!=null&&typeof e=="object"){let A={};for(let t of Object.keys(e).sort())A[t]=hl(e[t]);return A}return e}function k(e,A,t){e.push({path:A,message:t})}function It(e,A,t,r){for(let n of Object.keys(e))A.has(n)||k(r,t?`${t}.${n}`:n,"unknown field is not allowed")}function $d(e,A,t,r){if(!Ie(e)||!Ie(A)||!Ie(t)||!Ie(r)||r<=0||e<A||e>t)return!1;let n=(e-A)/r;if(!Number.isFinite(n))return!1;let s=Math.round(n);return Math.abs(n-s)<=1e-9}function ul(e,A,t,r){if(aA(e)){if(It(e,new Set(["param"]),A,r),typeof e.param!="string"||!e.param)return k(r,`${A}.param`,"must be a parameter name string"),null;if(!Object.prototype.hasOwnProperty.call(t,e.param))return k(r,`${A}.param`,`unknown parameter "${e.param}"`),null;let n=t[e.param];return!aA(n)||![n.value,n.min,n.max,n.step].every(_d)?(k(r,`${A}.param`,"referenced period parameter value min max and step must be positive integers"),null):{param:e.param}}return _d(e)?e:(k(r,A,"must be a positive integer or {param}"),null)}function Kd(e,A,t,r){return aA(e)?(It(e,new Set(["param"]),A,r),typeof e.param!="string"||!e.param?(k(r,`${A}.param`,"must be a parameter name string"),null):Object.prototype.hasOwnProperty.call(t,e.param)?{param:e.param}:(k(r,`${A}.param`,`unknown parameter "${e.param}"`),null)):Ie(e)?e:(k(r,A,"must be a finite number or {param}"),null)}function Qo(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 AT(e){let A=new Map,t=r=>{let n=A.get(r)||0;if(n===1)return!0;if(n===2)return!1;A.set(r,1);let s=e.get(r);if(s){for(let i of Qo(s))if(e.has(i)&&t(i))return!0}return A.set(r,2),!1};for(let r of e.keys())if(t(r))return!0;return!1}function tT(e,A){if(!aA(e))return k(A,"parameters","must be a plain object"),null;let t=Object.keys(e);if(t.length>Od)return k(A,"parameters",`too many parameters (max ${Od})`),null;let r={};for(let n of t){if(!Xd.test(n)){k(A,`parameters.${n}`,"parameter name is malformed");continue}let s=e[n],i=`parameters.${n}`;if(!aA(s)){k(A,i,"must be a plain object");continue}It(s,qd,i,A);for(let c of qd)c in s||k(A,`${i}.${c}`,"required field is missing");let{value:o,min:a,max:g,step:l}=s;Ie(a)||k(A,`${i}.min`,"must be a finite number"),Ie(g)||k(A,`${i}.max`,"must be a finite number"),(!Ie(l)||l<=0)&&k(A,`${i}.step`,"must be a positive finite number"),Ie(o)||k(A,`${i}.value`,"must be a finite number"),Ie(a)&&Ie(g)&&a>g&&k(A,`${i}.min`,"min must be <= max"),Ie(o)&&Ie(a)&&Ie(g)&&Ie(l)&&l>0&&($d(o,a,g,l)||k(A,`${i}.value`,"value must lie on the declared min/max/step grid")),r[n]={value:o,min:a,max:g,step:l}}return r}function rT(e,A,t,r){let n=`nodes.${A}`;if(!aA(e))return k(r,n,"must be a plain object"),null;if(typeof e.type!="string"||!Pd[e.type])return k(r,`${n}.type`,"unknown or missing node type"),It(e,eT,n,r),null;switch(It(e,Pd[e.type],n,r),(typeof e.id!="string"||!jd.test(e.id))&&k(r,`${n}.id`,"must be a 1-64 char id starting with alphanumeric"),e.type){case"input":return(typeof e.field!="string"||!zL.has(e.field))&&k(r,`${n}.field`,"must be one of open|high|low|close|volume|fundingRate|openInterest"),{id:e.id,type:"input",field:e.field};case"constant":{let s=Kd(e.value,`${n}.value`,t,r);return{id:e.id,type:"constant",value:s}}case"indicator":{(typeof e.indicator!="string"||!ZL.has(e.indicator))&&k(r,`${n}.indicator`,"must be one of sma|ema|rsi|macd|bollinger|atr");let s=e.indicator,i={id:e.id,type:"indicator",indicator:s};if(s==="atr"){"input"in e&&(typeof e.input!="string"||!e.input?k(r,`${n}.input`,"must be a node id string when provided"):i.input=e.input);let o=ul(e.period,`${n}.period`,t,r);o!=null&&(i.period=o)}else typeof e.input!="string"||!e.input?k(r,`${n}.input`,"must be a node id string"):i.input=e.input;if((s==="sma"||s==="ema"||s==="rsi"||s==="bollinger"||s==="atr")&&("period"in e,s!=="macd"))if(!("period"in e))k(r,`${n}.period`,"required field is missing");else{let o=ul(e.period,`${n}.period`,t,r);o!=null&&(i.period=o)}if(s==="macd"){for(let o of["fastPeriod","slowPeriod","signalPeriod"])if(!(o in e))k(r,`${n}.${o}`,"required field is missing");else{let a=ul(e[o],`${n}.${o}`,t,r);a!=null&&(i[o]=a)}"output"in e?jL.has(e.output)?i.output=e.output:k(r,`${n}.output`,"must be line|signal|histogram"):k(r,`${n}.output`,"required field is missing"),"period"in e&&k(r,`${n}.period`,"forbidden for macd"),"stdDev"in e&&k(r,`${n}.stdDev`,"forbidden for macd")}else if(s==="bollinger"){if(!("stdDev"in e))k(r,`${n}.stdDev`,"required field is missing");else{let o=Kd(e.stdDev,`${n}.stdDev`,t,r);o!=null&&(typeof o=="number"&&o<=0?k(r,`${n}.stdDev`,"must be > 0"):i.stdDev=o)}"output"in e?$L.has(e.output)?i.output=e.output:k(r,`${n}.output`,"must be upper|middle|lower"):k(r,`${n}.output`,"required field is missing");for(let o of["fastPeriod","slowPeriod","signalPeriod"])o in e&&k(r,`${n}.${o}`,`forbidden for ${s}`)}else{"output"in e&&k(r,`${n}.output`,`forbidden for ${s}`),"stdDev"in e&&s!=="bollinger"&&k(r,`${n}.stdDev`,`forbidden for ${s}`);for(let o of["fastPeriod","slowPeriod","signalPeriod"])o in e&&k(r,`${n}.${o}`,`forbidden for ${s}`)}return i}case"compare":return(typeof e.op!="string"||!_L.has(e.op))&&k(r,`${n}.op`,"must be gt|gte|lt|lte|eq"),(typeof e.left!="string"||!e.left)&&k(r,`${n}.left`,"must be a node id"),(typeof e.right!="string"||!e.right)&&k(r,`${n}.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"||!KL.has(e.op))&&k(r,`${n}.op`,"must be and|or|not"),!Array.isArray(e.inputs))return k(r,`${n}.inputs`,"must be an array of node ids"),{id:e.id,type:"logic",op:e.op,inputs:[]};let s=[];for(let i=0;i<e.inputs.length;i++){let o=e.inputs[i];typeof o!="string"||!o?k(r,`${n}.inputs.${i}`,"must be a node id"):s.push(o)}return e.op==="not"?s.length!==1&&k(r,`${n}.inputs`,"not requires exactly one input"):(e.op==="and"||e.op==="or")&&s.length<2&&k(r,`${n}.inputs`,`${e.op} requires at least two inputs`),{id:e.id,type:"logic",op:e.op,inputs:s}}case"cross":return(typeof e.direction!="string"||!XL.has(e.direction))&&k(r,`${n}.direction`,"must be above|below"),(typeof e.left!="string"||!e.left)&&k(r,`${n}.left`,"must be a node id"),(typeof e.right!="string"||!e.right)&&k(r,`${n}.right`,"must be a node id"),{id:e.id,type:"cross",direction:e.direction,left:e.left,right:e.right};default:return null}}function nT(e,A,t){if(!aA(e))return k(A,"risk","must be a plain object"),null;It(e,Wd,"risk",A);for(let Q of Wd)(!(Q in e)||e[Q]==null)&&k(A,`risk.${Q}`,"required field is missing");let r={},n=e.maxLeverage;!Ie(n)||n<=0||n>50?k(A,"risk.maxLeverage","must be a number > 0 and <= 50"):r.maxLeverage=n;let s=e.maxNotionalUsd;!Ie(s)||s<=0?k(A,"risk.maxNotionalUsd","must be a number > 0"):r.maxNotionalUsd=s;let i=e.positionSizePct;!Ie(i)||i<=0||i>100?k(A,"risk.positionSizePct","must be a number > 0 and <= 100"):r.positionSizePct=i;let o=e.stopLossPct;!Ie(o)||o<=0||o>100?k(A,"risk.stopLossPct","must be a number > 0 and <= 100"):r.stopLossPct=o;let a=e.takeProfitPct;!Ie(a)||a<=0||a>1e3?k(A,"risk.takeProfitPct","must be a number > 0 and <= 1000"):r.takeProfitPct=a;let g=e.cooldownBars;!Number.isInteger(g)||g<0||g>1e5?k(A,"risk.cooldownBars","must be an integer >= 0 and <= 100000"):r.cooldownBars=g;let l=e.maxDailyLossPct;!Ie(l)||l<=0||l>100?k(A,"risk.maxDailyLossPct","must be a number > 0 and <= 100"):r.maxDailyLossPct=l;let c=e.expiresAt;return!Number.isInteger(c)||c<=0?k(A,"risk.expiresAt","must be an integer epoch milliseconds > 0"):(t.nowMs!==void 0&&(Number.isInteger(t.nowMs)?c<=t.nowMs&&k(A,"risk.expiresAt","must be strictly greater than nowMs"):k(A,"nowMs","must be an integer epoch milliseconds")),r.expiresAt=c),r}function Cl(e,A={}){let t=[];if(!aA(e))return k(t,"","strategy must be a plain object"),{ok:!1,errors:t,strategy:null};It(e,vd,"",t);for(let c of vd)(!(c in e)||e[c]==null)&&k(t,c,"required field is missing");e.version!==Ql&&k(t,"version",`must be ${Ql}`),(typeof e.id!="string"||!Xd.test(e.id))&&k(t,"id","must match /^[a-z0-9][a-z0-9._-]{0,63}$/"),(typeof e.name!="string"||e.name.length===0||e.name.length>Zd)&&k(t,"name",`must be a non-empty string max ${Zd}`);let r=cl(e.venue);r||k(t,"venue",`unknown strategy venue "${String(e.venue)}"`);let n=null;if(!r)aA(e.market)||k(t,"market","must be a plain object");else{let c=r.validateMarket(e.market);if(!c||typeof c.ok!="boolean"||!Array.isArray(c.errors))k(t,"market",`venue ${r.id} returned an invalid market validation result`);else if(c.ok)n=c.market;else for(let Q of c.errors)k(t,Q.path,Q.message)}let s=tT(e.parameters,t),i=null,o=new Map;if(!Array.isArray(e.nodes))k(t,"nodes","must be an array");else if(e.nodes.length>zd)k(t,"nodes",`too many nodes (max ${zd})`);else{i=[];for(let c=0;c<e.nodes.length;c++){let Q=rT(e.nodes[c],c,s||{},t);Q&&(typeof Q.id=="string"&&jd.test(Q.id)&&(o.has(Q.id)?k(t,`nodes.${c}.id`,`duplicate node id "${Q.id}"`):o.set(Q.id,Q)),i.push(Q))}for(let c=0;c<i.length;c++){let Q=i[c],B=`nodes.${c}`;for(let E of Qo(Q))o.has(E)||k(t,B,`unknown node ref "${E}"`);if(Q.type==="indicator"||Q.type==="compare"||Q.type==="cross")for(let E of Qo(Q)){let u=o.get(E);u&&El.has(u.type)&&k(t,B,`node ref "${E}" must be numeric`)}if(Q.type==="logic")for(let E of Qo(Q)){let u=o.get(E);u&&!El.has(u.type)&&k(t,B,`node ref "${E}" must be boolean`)}}AT(o)&&k(t,"nodes","graph contains a cycle")}let a=null;if(!aA(e.rules))k(t,"rules","must be a plain object");else{It(e.rules,Bl,"rules",t);for(let c of Bl)c in e.rules||k(t,`rules.${c}`,"required field is missing");a={};for(let c of Bl){let Q=e.rules[c];if(Q===null){a[c]=null;continue}if(typeof Q!="string"||!Q){k(t,`rules.${c}`,"must be a node id or null"),a[c]=Q;continue}if(!o.has(Q)){k(t,`rules.${c}`,`unknown node ref "${Q}"`),a[c]=Q;continue}let B=o.get(Q);El.has(B.type)||k(t,`rules.${c}`,`rule must reference a boolean node, not ${B.type}`),a[c]=Q}}let g=nT(e.risk,t,A);if(t.length)return{ok:!1,errors:t,strategy:null};let l=Il({version:Ql,id:e.id,name:e.name,venue:r.id,market:n,parameters:s,nodes:i,rules:a,risk:g});return{ok:!0,errors:[],strategy:l}}function Ge(e,A={}){let t=Cl(e,A);if(!t.ok)throw new Xr(t.errors);return t.strategy}function sT(e){let A=Ge(e);return JSON.stringify(hl(A))}function Zr(e){let A=sT(e);return OL("sha256").update(A,"utf8").digest("hex")}function as(e,A){if(!aA(e))throw new Xr([{path:"",message:"strategy must be a plain object"}]);if(!aA(A))throw new Xr([{path:"overrides",message:"must be a plain object"}]);let t=Ge(e),r={};for(let[s,i]of Object.entries(t.parameters))r[s]={value:i.value,min:i.min,max:i.max,step:i.step};let n=[];for(let[s,i]of Object.entries(A)){if(!Object.prototype.hasOwnProperty.call(r,s)){k(n,s,`unknown parameter "${s}"`);continue}let o=r[s];if(!Ie(i)){k(n,s,"override must be a finite number");continue}if(!$d(i,o.min,o.max,o.step)){k(n,s,"override must lie on the declared min/max/step grid");continue}r[s]={...o,value:i}}if(n.length)throw new Xr(n);return Ge({version:t.version,id:t.id,name:t.name,venue:t.venue,market:{coin:t.market.coin,interval:t.market.interval},parameters:r,nodes:t.nodes.map(s=>{let i={...s};return Array.isArray(s.inputs)&&(i.inputs=[...s.inputs]),i}),rules:{...t.rules},risk:{...t.risk}})}var Ql,Xd,jd,zL,ZL,_L,KL,XL,jL,$L,El,vd,qd,Bl,Wd,eT,Pd,Od,zd,Zd,Xr,Pt=De(()=>{ll();Ql=1,Xd=/^[a-z0-9][a-z0-9._-]{0,63}$/,jd=/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/,zL=new Set(["open","high","low","close","volume","fundingRate","openInterest"]),ZL=new Set(["sma","ema","rsi","macd","bollinger","atr"]),_L=new Set(["gt","gte","lt","lte","eq"]),KL=new Set(["and","or","not"]),XL=new Set(["above","below"]),jL=new Set(["line","signal","histogram"]),$L=new Set(["upper","middle","lower"]),El=new Set(["compare","logic","cross"]),vd=new Set(["version","id","name","venue","market","parameters","nodes","rules","risk"]),qd=new Set(["value","min","max","step"]),Bl=new Set(["entryLong","entryShort","exitLong","exitShort"]),Wd=new Set(["maxLeverage","maxNotionalUsd","positionSizePct","stopLossPct","takeProfitPct","cooldownBars","maxDailyLossPct","expiresAt"]),eT=new Set(["id","type"]),Pd={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"])},Od=16,zd=128,Zd=100,Xr=class extends Error{constructor(A){let t=A.map(r=>`${r.path}: ${r.message}`);super(`invalid strategy (${A.length} error${A.length===1?"":"s"}): ${t.join("; ")}`),this.name="StrategyValidationError",this.errors=A}}});function cs(e){if(!Array.isArray(e))throw new TypeError("values must be an array");for(let A=0;A<e.length;A++){let t=e[A];if(typeof t!="number"||!Number.isFinite(t))throw new TypeError(`values[${A}] must be a finite number`)}}function ht(e){if(!Number.isInteger(e)||e<=0)throw new TypeError("period must be a positive integer")}function iT(e){if(!Array.isArray(e))throw new TypeError("bars must be an array");for(let A=0;A<e.length;A++){let t=e[A];if(t==null||typeof t!="object")throw new TypeError(`bars[${A}] must be an object`);for(let r of["o","h","l","c"]){let n=t[r];if(typeof n!="number"||!Number.isFinite(n))throw new TypeError(`bars[${A}].${r} must be a finite number`)}if(t.h<t.l)throw new TypeError(`bars[${A}] high must be >= low`)}}function Aw(e,A){cs(e),ht(A);let t=new Array(e.length).fill(null);if(e.length<A)return t;let r=0;for(let n=0;n<e.length;n++)r+=e[n],n>=A&&(r-=e[n-A]),n>=A-1&&(t[n]=r/A);return t}function Eo(e,A){cs(e),ht(A);let t=new Array(e.length).fill(null);if(e.length<A)return t;let r=0;for(let i=0;i<A;i++)r+=e[i];let n=r/A;t[A-1]=n;let s=2/(A+1);for(let i=A;i<e.length;i++)n=s*e[i]+(1-s)*n,t[i]=n;return t}function tw(e,A){cs(e),ht(A);let t=new Array(e.length).fill(null);if(e.length<=A)return t;let r=0,n=0;for(let o=1;o<=A;o++){let a=e[o]-e[o-1];a>=0?r+=a:n-=a}let s=r/A,i=n/A;t[A]=ew(s,i);for(let o=A+1;o<e.length;o++){let a=e[o]-e[o-1],g=a>0?a:0,l=a<0?-a:0;s=(s*(A-1)+g)/A,i=(i*(A-1)+l)/A,t[o]=ew(s,i)}return t}function ew(e,A){return e===0&&A===0?50:A===0?100:e===0?0:100-100/(1+e/A)}function rw(e,A={}){cs(e);let t=A.fastPeriod,r=A.slowPeriod,n=A.signalPeriod;if(ht(t),ht(r),ht(n),t>=r)throw new TypeError("fastPeriod must be < slowPeriod");let s=Eo(e,t),i=Eo(e,r),o=new Array(e.length).fill(null);for(let c=0;c<e.length;c++)s[c]!=null&&i[c]!=null&&(o[c]=s[c]-i[c]);let a=new Array(e.length).fill(null),g=new Array(e.length).fill(null),l=[];for(let c=0;c<o.length;c++)o[c]!=null&&l.push(c);if(l.length>=n){let c=0;for(let u=0;u<n;u++)c+=o[l[u]];let Q=c/n,B=l[n-1];a[B]=Q,g[B]=o[B]-Q;let E=2/(n+1);for(let u=n;u<l.length;u++){let h=l[u];Q=E*o[h]+(1-E)*Q,a[h]=Q,g[h]=o[h]-Q}}return{line:o,signal:a,histogram:g}}function nw(e,A={}){cs(e);let t=A.period,r=A.stdDev;if(ht(t),typeof r!="number"||!Number.isFinite(r)||r<=0)throw new TypeError("stdDev must be a finite number > 0");let n=new Array(e.length).fill(null),s=new Array(e.length).fill(null),i=new Array(e.length).fill(null);if(e.length<t)return{upper:s,middle:n,lower:i};let o=0,a=0;for(let g=0;g<e.length;g++){let l=e[g];if(o+=l,a+=l*l,g>=t){let c=e[g-t];o-=c,a-=c*c}if(g>=t-1){let c=o/t,Q=a/t-c*c;Q<0&&Q>-1e-12&&(Q=0);let B=Math.sqrt(Q);n[g]=c,s[g]=c+r*B,i[g]=c-r*B}}return{upper:s,middle:n,lower:i}}function sw(e,A){iT(e),ht(A);let t=new Array(e.length).fill(null);if(e.length<A)return t;let r=new Array(e.length);for(let i=0;i<e.length;i++){let o=e[i];if(i===0)r[i]=o.h-o.l;else{let a=e[i-1].c;r[i]=Math.max(o.h-o.l,Math.abs(o.h-a),Math.abs(o.l-a))}}let n=0;for(let i=0;i<A;i++)n+=r[i];let s=n/A;t[A-1]=s;for(let i=A;i<e.length;i++)s=(s*(A-1)+r[i])/A,t[i]=s;return t}var iw=De(()=>{});import{createHash as oT}from"node:crypto";var fl,aT,cT,gT,ow,aw=De(()=>{fl=2,aT="93f9c998260e73756c13871dc1a84dd6cdb26ec6113bd1941f023519939db440",cT="68f5b412a9975f04024cf9b9b6209b4bccedd52f176e95f34f786b3f53479c6a",gT="f197a38ff1c0f4ebe13326db8cbb8167ea3dd5d62e6033fe97c2fee8d23d96b5",ow=oT("sha256").update(JSON.stringify({version:fl,compilerSourceHash:aT,indicatorsSourceHash:cT,schemaSourceHash:gT})).digest("hex")});function dA(e){return typeof e=="number"&&Number.isFinite(e)}function ET(e){let A=new Map(e.map(o=>[o.id,o])),t=o=>{switch(o.type){case"indicator":return o.input?[o.input]:[];case"compare":case"cross":return[o.left,o.right];case"logic":return[...o.inputs];default:return[]}},r=new Map,n=new Map;for(let o of e)r.set(o.id,0),n.set(o.id,[]);for(let o of e)for(let a of t(o))A.has(a)&&(n.get(a).push(o.id),r.set(o.id,r.get(o.id)+1));let s=[];for(let[o,a]of r)a===0&&s.push(o);let i=[];for(;s.length;){let o=s.shift();i.push(o);for(let a of n.get(o))r.set(a,r.get(a)-1),r.get(a)===0&&s.push(a)}if(i.length!==e.length)throw new Error("strategy graph is cyclic");return i}function jr(e,A){return e!=null&&typeof e=="object"&&"param"in e?A[e.param].value:e}function BT(e,A,t){if(!Array.isArray(e)||e.length===0)throw new TypeError("bars must be a non-empty array");if(!Number.isInteger(A)||A<0||A>=e.length)throw new RangeError("index out of range");let r=null;for(let n=0;n<=A;n++){let s=e[n];if(s==null||typeof s!="object"||Array.isArray(s))throw new TypeError(`bars[${n}] must be an object`);let{t:i,o,h:a,l:g,c:l,v:c}=s;if(!dA(i)&&(typeof i=="number"&&Number.isFinite(i)),!Number.isFinite(i))throw new TypeError(`bars[${n}].t must be finite`);for(let[Q,B]of[["o",o],["h",a],["l",g],["c",l],["v",c]])if(!dA(B))throw new TypeError(`bars[${n}].${Q} must be a finite number`);for(let[Q,B]of[["o",o],["h",a],["l",g],["c",l]])if(!(B>0))throw new TypeError(`bars[${n}].${Q} price must be positive`);if(c<0)throw new TypeError(`bars[${n}].v volume must be non-negative`);if(a<Math.max(o,l,g))throw new TypeError(`bars[${n}] high must be >= max(open, close, low)`);if(g>Math.min(o,l,a))throw new TypeError(`bars[${n}] low must be <= min(open, close, high)`);if(r!=null){if(!(i>r))throw new TypeError("bars t must be strictly increasing");if(i-r!==QT[t])throw new TypeError(`bars t must match ${t} cadence`)}if(r=i,"fundingRate"in s&&s.fundingRate!=null&&!dA(s.fundingRate))throw new TypeError(`bars[${n}].fundingRate must be finite when present`);if("openInterest"in s&&s.openInterest!=null){if(!dA(s.openInterest))throw new TypeError(`bars[${n}].openInterest must be finite when present`);if(s.openInterest<0)throw new TypeError(`bars[${n}].openInterest must be non-negative`)}}}function Zt(e,A,t,r,n,s){if(s.has(e))return s.get(e);let i=A.get(e),o;switch(i.type){case"input":{let a=lT[i.field];o=new Array(n+1);for(let g=0;g<=n;g++){let l=r[g][a];o[g]=l===void 0?null:l}break}case"constant":{let a=jr(i.value,t);o=new Array(n+1).fill(a);break}case"indicator":{let a=i.period!=null?jr(i.period,t):void 0;if(i.indicator==="atr"){let c=[];for(let Q=0;Q<=n;Q++){let B=r[Q];c.push({o:B.o,h:B.h,l:B.l,c:B.c})}o=sw(c,a);break}let l=Zt(i.input,A,t,r,n,s).map((c,Q)=>{if(c==null||!dA(c))throw new TypeError(`indicator input ${i.input} has non-finite value at ${Q}`);return c});if(i.indicator==="sma")o=Aw(l,a);else if(i.indicator==="ema")o=Eo(l,a);else if(i.indicator==="rsi")o=tw(l,a);else if(i.indicator==="macd")o=rw(l,{fastPeriod:jr(i.fastPeriod,t),slowPeriod:jr(i.slowPeriod,t),signalPeriod:jr(i.signalPeriod,t)})[i.output];else if(i.indicator==="bollinger")o=nw(l,{period:a,stdDev:jr(i.stdDev,t)})[i.output];else throw new Error(`unsupported indicator ${i.indicator}`);break}case"compare":{let a=Zt(i.left,A,t,r,n,s),g=Zt(i.right,A,t,r,n,s);o=new Array(n+1);for(let l=0;l<=n;l++){let c=a[l],Q=g[l];if(c==null||Q==null||!dA(c)||!dA(Q)){o[l]=!1;continue}switch(i.op){case"gt":o[l]=c>Q;break;case"gte":o[l]=c>=Q;break;case"lt":o[l]=c<Q;break;case"lte":o[l]=c<=Q;break;case"eq":o[l]=c===Q;break;default:o[l]=!1}}break}case"logic":{let a=i.inputs.map(g=>Zt(g,A,t,r,n,s));o=new Array(n+1);for(let g=0;g<=n;g++)if(i.op==="not"){let l=a[0][g];o[g]=l===!0?!1:l===!1}else if(i.op==="and"){let l=!0;for(let c of a)if(c[g]!==!0){l=!1;break}o[g]=l}else if(i.op==="or"){let l=!1;for(let c of a)if(c[g]===!0){l=!0;break}o[g]=l}else o[g]=!1;break}case"cross":{let a=Zt(i.left,A,t,r,n,s),g=Zt(i.right,A,t,r,n,s);o=new Array(n+1),o[0]=!1;for(let l=1;l<=n;l++){let c=a[l-1],Q=g[l-1],B=a[l],E=g[l];if(c==null||Q==null||B==null||E==null||!dA(c)||!dA(Q)||!dA(B)||!dA(E)){o[l]=!1;continue}i.direction==="above"?o[l]=c<=Q&&B>E:o[l]=c>=Q&&B<E}break}default:throw new Error(`unknown node type ${i.type}`)}return s.set(e,o),o}function Je(e,A={}){let t=Ge(e);A&&Object.keys(A).length&&(t=as(t,A));let r=new Map(t.nodes.map(B=>[B.id,B])),n=Object.freeze(ET(t.nodes)),s=t.parameters,i=new Set(t.nodes.filter(B=>B.type==="input").map(B=>B.field));if(t.nodes.some(B=>B.type==="indicator"&&B.indicator==="atr"))for(let B of["open","high","low","close"])i.add(B);let o=Object.freeze([...i].sort()),a=Zr(t);function g(B,E){let u={};for(let I of n){let C=B.get(I);u[I]=C[E]}let h=I=>I!=null&&u[I]===!0;return{values:u,signals:{entryLong:h(t.rules.entryLong),entryShort:h(t.rules.entryShort),exitLong:h(t.rules.exitLong),exitShort:h(t.rules.exitShort)}}}function l(B,E){BT(B,E,t.market.interval);let u=new Map;for(let h of n)Zt(h,r,s,B,E,u);return u}function c(B,E){return g(l(B,E),E)}function Q(B){if(!Array.isArray(B)||B.length===0)throw new TypeError("bars must be a non-empty array");let E=B.length-1,u=l(B,E);return Object.freeze(B.map((h,I)=>Object.freeze(g(u,I))))}return Object.freeze({strategy:t,strategyHash:a,compilerVersion:is,compilerHash:Ot,requiredSeries:o,nodeOrder:n,evaluate:c,evaluateAll:Q})}var is,Ot,lT,QT,zt=De(()=>{Pt();iw();aw();is=fl,Ot=ow,lT=Object.freeze({open:"o",high:"h",low:"l",close:"c",volume:"v",fundingRate:"fundingRate",openInterest:"openInterest"}),QT=Object.freeze({"1m":6e4,"3m":18e4,"5m":3e5,"15m":9e5,"30m":18e5,"1h":36e5,"2h":72e5,"4h":144e5,"8h":288e5,"12h":432e5,"1d":864e5})});import{createHash as uT}from"node:crypto";function hT(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function LA(e){return typeof e=="number"&&Number.isFinite(e)}function dl(e){if(e==null||typeof e!="object"||Object.isFrozen(e))return e;if(Array.isArray(e)){for(let A of e)dl(A);return Object.freeze(e)}for(let A of Object.keys(e))dl(e[A]);return Object.freeze(e)}function Bo(e){if(Array.isArray(e))return e.map(Bo);if(e!=null&&typeof e=="object"){let A={};for(let t of Object.keys(e).sort())A[t]=Bo(e[t]);return A}return e}function wl(e,A="result"){if(typeof e=="number"){if(!Number.isFinite(e))throw new Error(`non-finite backtest result at ${A}`);return}if(!(e==null||typeof e!="object")){if(Array.isArray(e)){e.forEach((t,r)=>wl(t,`${A}[${r}]`));return}for(let[t,r]of Object.entries(e))wl(r,`${A}.${t}`)}}function gw(e){if(!Array.isArray(e)||e.length===0)throw new TypeError("bars must be a non-empty array");let A=null;for(let t=0;t<e.length;t++){let r=e[t];if(r==null||typeof r!="object"||Array.isArray(r))throw new TypeError(`bars[${t}] must be an object`);let{t:n,o:s,h:i,l:o,c:a,v:g}=r;if(!LA(n))throw new TypeError(`bars[${t}].t must be finite`);for(let[l,c]of[["o",s],["h",i],["l",o],["c",a],["v",g]])if(!LA(c))throw new TypeError(`bars[${t}].${l} must be a finite number`);for(let[l,c]of[["o",s],["h",i],["l",o],["c",a]])if(!(c>0))throw new TypeError(`bars[${t}].${l} price must be positive`);if(g<0)throw new TypeError(`bars[${t}].v volume must be non-negative`);if(i<Math.max(s,a,o))throw new TypeError(`bars[${t}] high must be >= max(open, close, low)`);if(o>Math.min(s,a,i))throw new TypeError(`bars[${t}] low must be <= min(open, close, high)`);if(A!=null&&!(n>A))throw new TypeError("bars t must be strictly increasing");if(A=n,"fundingRate"in r&&r.fundingRate!=null&&!LA(r.fundingRate))throw new TypeError(`bars[${t}].fundingRate must be finite when present`);if("fundingPaymentRate"in r&&r.fundingPaymentRate!=null&&!LA(r.fundingPaymentRate))throw new TypeError(`bars[${t}].fundingPaymentRate must be finite when present`);if("openInterest"in r&&r.openInterest!=null&&!LA(r.openInterest))throw new TypeError(`bars[${t}].openInterest must be finite when present`)}}function ns(e){if(!Array.isArray(e))throw new TypeError("bars must be an array");return e.length>0&&gw(e),uT("sha256").update(JSON.stringify(Bo(e)),"utf8").digest("hex")}function CT(e){if(e==null&&(e={}),!hT(e))throw new TypeError("options must be a plain object");let A={...IT},t=new Set(["initialEquityUsd","takerFeeBps","builderFeeBps","slippageBps","latencyBars","maxVolumeParticipationPct","nowMs"]);for(let r of Object.keys(e))if(!t.has(r))throw new TypeError(`unknown option "${r}"`);if("initialEquityUsd"in e){if(!LA(e.initialEquityUsd)||e.initialEquityUsd<=0)throw new TypeError("initialEquityUsd must be a positive finite number");A.initialEquityUsd=e.initialEquityUsd}for(let r of["takerFeeBps","builderFeeBps","slippageBps"])if(r in e){let n=e[r];if(!LA(n)||n<0)throw new TypeError(`${r} must be a finite number >= 0`);if(r==="slippageBps"?n>=1e4:n>1e4)throw new TypeError(`${r} exceeds its safe basis-point bound`);A[r]=n}if("latencyBars"in e){let r=e.latencyBars;if(!Number.isInteger(r)||r<1)throw new TypeError("latencyBars must be an integer >= 1");A.latencyBars=r}if("maxVolumeParticipationPct"in e){let r=e.maxVolumeParticipationPct;if(!LA(r)||r<=0||r>100)throw new TypeError("maxVolumeParticipationPct must be in (0,100]");A.maxVolumeParticipationPct=r}if("nowMs"in e){if(!Number.isInteger(e.nowMs))throw new TypeError("nowMs must be an integer epoch milliseconds");A.nowMs=e.nowMs}return A}function uo(e){return e/1e4}function fT(e,A,t){let r=uo(t);return A==="long"?e*(1+r):e*(1-r)}function dT(e,A,t){let r=uo(t);return A==="long"?e*(1-r):e*(1+r)}function cw(e,A,t){let r=Math.abs(e)*uo(A),n=Math.abs(e)*uo(t);return{taker:r,builder:n,total:r+n}}function wT(e,A){let t=e*(A.positionSizePct/100)*A.maxLeverage;return Math.min(t,A.maxNotionalUsd)}function yT(e,A,t){let r=t/100;return A==="long"?e*(1-r):e*(1+r)}function pT(e,A,t){let r=t/100;return A==="long"?e*(1+r):e*(1-r)}function mT(e,A,t,r){if(!(t>0))return A==="long"?0:Number.POSITIVE_INFINITY;let n=Math.min(.99,1/(2*t)+r/1e4);return A==="long"?e*(1-1/t)/(1-n):e*(1+1/t)/(1+n)}function DT(e,A,t){return A==="long"?e.l<=t:e.h>=t}function kT(e,A,t){return A==="long"?e.h>=t:e.l<=t}function bT(e,A,t){return A==="long"?e.l<=t:e.h>=t}function gs(e,A){for(let t of e.requiredSeries)if(["fundingRate","openInterest"].includes(t)&&!A.every(r=>LA(r?.[t])))throw new Error(`strategy required series is absent: ${t}`)}function FT(e){if(e.length<3)return 0;let A=[];for(let i=1;i<e.length;i++){let o=e[i-1].equity,a=e[i].equity;o>0&&A.push((a-o)/o)}if(A.length<2)return 0;let t=0;for(let i of A)t+=i;let r=t/A.length,n=0;for(let i of A)n+=(i-r)**2;let s=Math.sqrt(n/(A.length-1));return s>0?r/s:0}function RT(e){let A=-1/0,t=0;for(let r of e){let n=r.equity;if(n>A&&(A=n),A>0){let s=(A-n)/A*100;s>t&&(t=s)}}return t}function ut(e,A,t={}){let r=CT(t);gw(A);let n=ns(A);r.nowMs!==void 0&&Ge(e,{nowMs:r.nowMs});let s=Je(e);if(gs(s,A),r.nowMs!==void 0&&s.strategy.risk.expiresAt<=r.nowMs)throw new Error("strategy is expired: risk.expiresAt must be strictly greater than nowMs");let i=s.strategy.risk,o=s.evaluateAll(A),a=r.latencyBars,g=r.slippageBps,l=r.takerFeeBps,c=r.builderFeeBps,Q=r.initialEquityUsd,B=0,E=0,u=0,h=0,I=0,C=[],D=[],f=[],R=[],S=[],d=null,se=0,ke=null,Le=Q,me=!1,w=0,H=0,q=[],ee=new Array(A.length).fill(0);function j(F){q.push(F)}function _(F){let O=A[F].v*(r.maxVolumeParticipationPct/100);return Math.max(0,O-ee[F])}function te(F){if(!d)return Q;let O=d.side==="long"?(F-d.entryPrice)*d.qty:(d.entryPrice-F)*d.qty;return Q+O}function Re(F,O,x){let ge=x.o,K=wT(Q,i);if(!(K>0)||!(ge>0))return;let le=fT(ge,O,g),ie=K/le,de=_(F),An=le*de;if(ie>de){f.push({kind:"entry",barIndex:F,time:x.t,side:O,requestedNotionalUsd:K,maxFillNotionalUsd:An,reason:"volume_participation"});return}ee[F]+=ie;let yA=Math.abs(le-ge)*ie,xA=cw(K,l,c);Q-=xA.total,B+=xA.taker,E+=xA.builder,h+=yA,I+=K,d={lifecycleEpoch:++H,side:O,entryBarIndex:F,entryReferencePrice:ge,entryPrice:le,qty:ie,notionalUsd:K,stop:yT(le,O,i.stopLossPct),take:pT(le,O,i.takeProfitPct),liq:mT(le,O,i.maxLeverage,l+c),entryFees:xA.taker,entryBuilderFees:xA.builder,entrySlippageUsd:yA,fundingAccrued:0}}function fe(F,O,x,ge){if(!d)return!1;let K=d.side,le=O,ie=le;x!=="liquidation"&&ge&&(ie=dT(le,K,g));let de=d.qty,An=de*ie;if(x!=="liquidation"){let Jl=_(F),Jw=ie*Jl;if(de>Jl)return f.push({kind:"exit",barIndex:F,time:A[F].t,side:K,requestedNotionalUsd:An,maxFillNotionalUsd:Jw,reason:"volume_participation",triggerReason:x}),!1;ee[F]+=de}let yA=cw(An,l,c),xA=x==="liquidation"?0:Math.abs(ie-le)*de,tn,mo;K==="long"?(tn=(le-d.entryReferencePrice)*de,mo=(ie-d.entryPrice)*de):(tn=(d.entryReferencePrice-le)*de,mo=(d.entryPrice-ie)*de),Q+=mo,Q-=yA.total,B+=yA.taker,E+=yA.builder,h+=xA,I+=An;let Gw={side:K,entryBarIndex:d.entryBarIndex,entryTime:A[d.entryBarIndex].t,entryPrice:d.entryPrice,exitBarIndex:F,exitTime:A[F].t,exitPrice:ie,exitReason:x,qty:de,notionalUsd:d.notionalUsd,grossPnlUsd:tn,feesUsd:d.entryFees+yA.taker,builderFeesUsd:d.entryBuilderFees+yA.builder,fundingUsd:d.fundingAccrued,slippageUsd:d.entrySlippageUsd+xA,netPnlUsd:tn-(d.entryFees+yA.taker+d.entryBuilderFees+yA.builder)-d.fundingAccrued-(d.entrySlippageUsd+xA)};return C.push(Gw),x==="liquidation"&&D.push({barIndex:F,time:A[F].t,side:K,price:ie,tradeIndex:C.length-1}),d=null,H+=1,w=F+1+(i.cooldownBars||0),!0}function wA(F,O,x,ge){let K=F+1;if(K>=A.length)return;q.some(ie=>ie.kind==="exit"&&ie.side===O&&ie.fillBar===K&&ie.epoch===ge)||j({kind:"exit",side:O,signalBar:F,fillBar:K,reason:x,epoch:ge})}function Es(F){let O=q.filter(x=>x.fillBar===F);for(let x=q.length-1;x>=0;x--)q[x].fillBar===F&&q.splice(x,1);O.sort((x,ge)=>{let K=le=>le.kind==="exit"?0:1;return K(x)-K(ge)});for(let x of O)if(x.kind==="exit"){if(!d||d.side!==x.side||d.lifecycleEpoch!==x.epoch)continue;let ge=x.reason||"rule";fe(F,A[F].o,ge,!0)||wA(F,x.side,ge,x.epoch)}else if(x.kind==="entry"){if(d||x.epoch!==H||F<w)continue;Re(F,x.side,A[F])}}function Bs(F){if(!d)return;let O=A[F],x=O.fundingPaymentRate;if(x==null||!LA(x)||x===0)return;let ge=Math.abs(d.qty*O.c),K=x*ge;d.side==="long"?(Q-=K,d.fundingAccrued+=K,u+=K):(Q+=K,d.fundingAccrued-=K,u-=K)}function us(F){if(!d)return;let O=A[F].o;(d.side==="long"?O<=d.liq:O>=d.liq)&&fe(F,O,"liquidation",!1)}function Ll(F){if(!d)return;let O=A[F],x=d.side,ge=bT(O,x,d.liq),K=DT(O,x,d.stop),le=kT(O,x,d.take),ie=de=>x==="long"?Math.min(de,O.o):Math.max(de,O.o);if(ge){fe(F,ie(d.liq),"liquidation",!1);return}if(K&&le){fe(F,ie(d.stop),"stop_loss",!0)||wA(F,x,"stop_loss",d.lifecycleEpoch);return}if(K){fe(F,ie(d.stop),"stop_loss",!0)||wA(F,x,"stop_loss",d.lifecycleEpoch);return}le&&(fe(F,d.take,"take_profit",!0)||wA(F,x,"take_profit",d.lifecycleEpoch))}for(let F=0;F<A.length;F++){let O=Math.floor(A[F].t/864e5);O!==ke&&(ke=O,Le=te(A[F].o),me=!1),us(F),Es(F),Ll(F),Bs(F),!me&&te(A[F].c)<=Le*(1-i.maxDailyLossPct/100)&&(me=!0,R.push({type:"daily_loss_limit",barIndex:F,time:A[F].t,message:"daily loss limit reached; new entries blocked for UTC day"}));let x=o[F].signals,ge=F+a;if(d)(d.side==="long"&&x.exitLong===!0||d.side==="short"&&x.exitShort===!0)&&ge<A.length&&(q.some(de=>de.kind==="exit"&&de.side===d.side&&de.fillBar===ge&&de.epoch===d.lifecycleEpoch)||j({kind:"exit",side:d.side,signalBar:F,fillBar:ge,reason:"rule",epoch:d.lifecycleEpoch}));else{let le=x.entryLong===!0,ie=x.entryShort===!0;le&&ie?R.push({type:"conflicting_entry_signals",barIndex:F,time:A[F].t,message:"conflicting entry signals; no position opened"}):!me&&(le||ie)&&ge<A.length&&F>=w&&j({kind:"entry",side:le?"long":"short",signalBar:F,fillBar:ge,epoch:H})}let K=Q;d&&(se+=1,K=te(A[F].c)),S.push({barIndex:F,time:A[F].t,equity:K,positionSide:d?d.side:null})}let Tl=null;if(d){let F=A.length-1;if(fe(F,A[F].c,"end_of_data",!0))S[F]={barIndex:F,time:A[F].t,equity:Q,positionSide:null};else{let x=te(A[F].c);Tl={side:d.side,entryBarIndex:d.entryBarIndex,entryTime:A[d.entryBarIndex].t,entryPrice:d.entryPrice,qty:d.qty,notionalUsd:d.notionalUsd,markPrice:A[F].c,markedEquityUsd:x},R.push({type:"open_position_at_end",barIndex:F,time:A[F].t,message:"end-of-data exit missed; position remains open and marked"})}}let xl=(d?te(A[A.length-1].c):Q)-r.initialEquityUsd,Lw=xl/r.initialEquityUsd*100,Yl=0,fo=0,wo=0;for(let F of C)F.netPnlUsd>0?(Yl+=1,fo+=F.netPnlUsd):F.netPnlUsd<0&&(wo+=-F.netPnlUsd);let yo=C.length,Tw=yo===0?0:Yl/yo,po=0;wo>0?po=fo/wo:fo>0&&(po=1e12);let xw={netPnlUsd:xl,netPnlPct:Lw,maxDrawdownPct:RT(S),winRate:Tw,profitFactor:po,tradeCount:yo,sharpe:FT(S),turnoverUsd:I,exposurePct:se/A.length*100},Yw={initialEquityUsd:r.initialEquityUsd,takerFeeBps:r.takerFeeBps,builderFeeBps:r.builderFeeBps,slippageBps:r.slippageBps,latencyBars:r.latencyBars,maxVolumeParticipationPct:r.maxVolumeParticipationPct},Gl={barsHash:n,strategyHash:s.strategyHash,compilerHash:Ot,compilerVersion:is,config:Yw,trades:C,equityCurve:S,metrics:xw,costs:{feesUsd:B,builderFeesUsd:E,fundingUsd:u,slippageUsd:h},liquidations:D,missedFills:f,openPositionAtEnd:Tl,flags:R};return wl(Gl),dl(Bo(Gl))}var IT,lo=De(()=>{zt();Pt();IT=Object.freeze({initialEquityUsd:1e4,takerFeeBps:3.5,builderFeeBps:2,slippageBps:2,latencyBars:1,maxVolumeParticipationPct:100})});import{createHash as ST}from"node:crypto";function GT(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function yl(e){if(e==null||typeof e!="object"||Object.isFrozen(e))return e;if(Array.isArray(e)){for(let A of e)yl(A);return Object.freeze(e)}for(let A of Object.keys(e))yl(e[A]);return Object.freeze(e)}function JT(e){return String(e).trim().replace(/\s+/g," ")}function HT(e){let A=e.match(/\b(long|short)\b/i);return A?A[1].toLowerCase():null}function VT(e){for(let t of MT)if(new RegExp(`\\b${t}\\b`,"i").test(e))return t;let A=e.match(/\b([A-Z][A-Z0-9]{1,11})\b/);return A?A[1]:null}function vT(e){let A=e.match(/\bon\s+(1m|3m|5m|15m|30m|1h|2h|4h|8h|12h|1d)\b/i);if(!A)return"15m";let t=A[1].toLowerCase();return NT.has(t)?t:null}function qT(e){let A={...LT},t=e.match(/stop\s*loss\s*(\d+(?:\.\d+)?)\s*%?/i);t&&(A.stopLossPct=Number(t[1]));let r=e.match(/take\s*profit\s*(\d+(?:\.\d+)?)\s*%?/i);r&&(A.takeProfitPct=Number(r[1]));let n=e.match(/leverage\s*(\d+(?:\.\d+)?)/i);n&&(A.maxLeverage=Number(n[1]));let s=e.match(/position\s*size\s*(\d+(?:\.\d+)?)\s*%?/i);s&&(A.positionSizePct=Number(s[1]));let i=e.match(/max\s*notional\s*(?:usd\s*)?\$?\s*(\d+(?:\.\d+)?)/i);return i&&(A.maxNotionalUsd=Number(i[1])),A}function WT(e){return[/\bon\s+(?:1m|3m|5m|15m|30m|1h|2h|4h|8h|12h|1d)\b/gi,/\bstop\s*loss\s*\d+(?:\.\d+)?\s*%?/gi,/\btake\s*profit\s*\d+(?:\.\d+)?\s*%?/gi,/\bleverage\s*\d+(?:\.\d+)?/gi,/\bposition\s*size\s*\d+(?:\.\d+)?\s*%?/gi,/\bmax\s*notional\s*(?:usd\s*)?\$?\s*\d+(?:\.\d+)?/gi].some(t=>(e.match(t)??[]).length>1)}function PT(e){let A=ST("sha256").update(e,"utf8").digest("hex").slice(0,10),t=e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,40),n=`${t.length?t:"draft"}-${A}`.replace(/[^a-z0-9._-]/g,"").slice(0,64);return/^[a-z0-9]/.test(n)?n:`d${n}`.slice(0,64)}function OT(e){let A=e.match(/\bema\s*(\d+)\s*cross(?:es)?\s*(above|below)\s*ema\s*(\d+)\b/i);if(!A)return null;let t=Number(A[1]),r=A[2].toLowerCase(),n=Number(A[3]);if(!(t>0)||!(n>0)||t===n)return null;let s=/\b(exit\s+on\s+reverse|reverse\s+exit)\b/i.test(e);return{kind:"ema_cross",fast:t,slow:n,direction:r,reverse:s}}function zT(e){let A=e.match(/\brsi\s*(\d+)\s*(above|below)\s*(-?\d+(?:\.\d+)?)/i);if(!A)return null;let t=Number(A[3]);return!Number.isFinite(t)||t<=0||t>=100?null:{kind:"rsi",period:Number(A[1]),op:A[2].toLowerCase(),threshold:t}}function ZT(e){let A=e.match(/\bfunding\s*rate\s*(above|below)\s*(-?\d+(?:\.\d+)?)(%?)(?=\s|,|$)/i);if(!A)return null;let t=Number(A[2]);return A[3]==="%"&&(t=t/100),{kind:"funding",op:A[1].toLowerCase(),threshold:t}}function _T(e,A){let t=e.replace(/^(long|short)\s+[A-Z][A-Z0-9]{1,11}\s+when\s+/i,"");if(t===e)return!1;A.kind==="ema_cross"?t=t.replace(/^ema\s*\d+\s*cross(?:es)?\s*(?:above|below)\s*ema\s*\d+\b/i,""):A.kind==="rsi"?t=t.replace(/^rsi\s*\d+\s*(?:above|below)\s*\d+(?:\.\d+)?\b/i,""):t=t.replace(/^funding\s*rate\s*(?:above|below)\s*-?\d+(?:\.\d+)?%?(?=\s|,|$)/i,"");let r=[/(?:,\s*)?\bon\s+(?:1m|3m|5m|15m|30m|1h|2h|4h|8h|12h|1d)\b/gi,/(?:,\s*)?\bstop\s*loss\s*\d+(?:\.\d+)?\s*%?/gi,/(?:,\s*)?\btake\s*profit\s*\d+(?:\.\d+)?\s*%?/gi,/(?:,\s*)?\bleverage\s*\d+(?:\.\d+)?/gi,/(?:,\s*)?\bposition\s*size\s*\d+(?:\.\d+)?\s*%?/gi,/(?:,\s*)?\bmax\s*notional\s*(?:usd\s*)?\$?\s*\d+(?:\.\d+)?/gi];A.kind==="ema_cross"&&r.push(/(?:,\s*)?\b(?:exit\s+on\s+reverse|reverse\s+exit)\b/gi);for(let n of r)t=t.replace(n,"");return t.replace(/[\s,;]+/g,"")===""}function lw(e){let A=Math.max(2,Math.floor(e/2));return{value:e,min:Math.max(2,e-A),max:Math.min(500,e+A),step:1}}function KT({side:e,coin:A,interval:t,risk:r,expiresAt:n,id:s,name:i,spec:o}){let a=[{id:"c",type:"input",field:"close"},{id:"emaLeft",type:"indicator",indicator:"ema",input:"c",period:{param:"ema_left_period"}},{id:"emaRight",type:"indicator",indicator:"ema",input:"c",period:{param:"ema_right_period"}},{id:"cross",type:"cross",direction:o.direction,left:"emaLeft",right:"emaRight"}],g={entryLong:null,entryShort:null,exitLong:null,exitShort:null};if(e==="long"?g.entryLong="cross":g.entryShort="cross",o.reverse){let l=o.direction==="above"?"below":"above";a.push({id:"crossRev",type:"cross",direction:l,left:"emaLeft",right:"emaRight"}),e==="long"?g.exitLong="crossRev":g.exitShort="crossRev"}return{version:1,id:s,name:i,venue:"hyperliquid",market:{coin:A,interval:t},parameters:{ema_left_period:lw(o.fast),ema_right_period:lw(o.slow)},nodes:a,rules:g,risk:{...r,expiresAt:n}}}function XT({side:e,coin:A,interval:t,risk:r,expiresAt:n,id:s,name:i,spec:o}){let a=[{id:"c",type:"input",field:"close"},{id:"rsi",type:"indicator",indicator:"rsi",input:"c",period:o.period},{id:"thr",type:"constant",value:o.threshold},{id:"sig",type:"compare",op:o.op==="above"?"gt":"lt",left:"rsi",right:"thr"}];return{version:1,id:s,name:i,venue:"hyperliquid",market:{coin:A,interval:t},parameters:{},nodes:a,rules:{entryLong:e==="long"?"sig":null,entryShort:e==="short"?"sig":null,exitLong:null,exitShort:null},risk:{...r,expiresAt:n}}}function jT({side:e,coin:A,interval:t,risk:r,expiresAt:n,id:s,name:i,spec:o}){let a=[{id:"fr",type:"input",field:"fundingRate"},{id:"thr",type:"constant",value:o.threshold},{id:"sig",type:"compare",op:o.op==="above"?"gt":"lt",left:"fr",right:"thr"}];return{version:1,id:s,name:i,venue:"hyperliquid",market:{coin:A,interval:t},parameters:{},nodes:a,rules:{entryLong:e==="long"?"sig":null,entryShort:e==="short"?"sig":null,exitLong:null,exitShort:null},risk:{...r,expiresAt:n}}}function Qw(e,A={}){if(typeof e!="string")throw new Ne("prompt must be a string");if(e.length>1e3)throw new Ne("prompt length must be <= 1000");if(!GT(A))throw new Ne("options must be a plain object");if(!Number.isInteger(A.nowMs))throw new Ne("options.nowMs is required integer epoch ms");let t=A.nowMs,r=YT;if("expiresInMs"in A){if(!Number.isInteger(A.expiresInMs))throw new Ne("expiresInMs must be an integer");if(r=A.expiresInMs,r<TT||r>xT)throw new Ne("expiresInMs must be between 1h and 30d")}if(UT.test(e))throw new Ne(`prompt appears to contain secrets and is rejected. ${$r}`);let n=JT(e);if(!n)throw new Ne(`empty prompt. ${$r}`);if(WT(n))throw new Ne(`duplicate interval or risk clause. ${$r}`);let s=HT(n),i=VT(n),o=vT(n);if(!s||!i||!o)throw new Ne(`could not parse side/coin/interval. ${$r}`);let a=qT(n);if(!(a.maxLeverage>0)||a.maxLeverage>50)throw new Ne("leverage out of range");if(!(a.positionSizePct>0)||a.positionSizePct>100)throw new Ne("position size out of range");let g=t+r,l=PT(n),c=`Draft ${i} ${s}`.slice(0,100),Q=OT(n),B=zT(n),E=ZT(n),u=[Q,B,E].filter(Boolean);if(u.length!==1)throw new Ne(`unsupported or ambiguous prompt. ${$r}`);if(!_T(n,u[0]))throw new Ne(`unsupported or ambiguous prompt. ${$r}`);let h,I=u[0],C={side:s,coin:i,interval:o,risk:a,expiresAt:g,id:l,name:c,spec:I};I.kind==="ema_cross"?h=KT(C):I.kind==="rsi"?h=XT(C):h=jT(C);let D=Cl(h,{nowMs:t});if(!D.ok)throw new Ne(`draft failed validation: ${D.errors.map(f=>f.message).join("; ")}`);return yl(Ge(h,{nowMs:t}))}var Ne,NT,MT,UT,$r,LT,TT,xT,YT,Ew=De(()=>{Pt();Ne=class extends Error{constructor(A){super(A),this.name="StrategyDraftError"}},NT=new Set(["1m","3m","5m","15m","30m","1h","2h","4h","8h","12h","1d"]),MT=new Set(["BTC","ETH","SOL","HYPE"]),UT=/\b(mnemonic|private\s*key|privkey|seed\s*phrase|seed\b|api[_-]?key|secret\s*key|wallet\s*key|passphrase)\b/i,$r="Supported grammar: (1) EMA cross: <long|short> <COIN> when EMA <n> crosses <above|below> EMA <m> [on <interval>] [, exit on reverse] [, risk knobs]; (2) RSI: <long|short> <COIN> when RSI <n> <above|below> <threshold> [on <interval>] [, risk knobs]; (3) funding: <long|short> <COIN> when funding rate <above|below> <decimal|percent%> [on <interval>] [, risk knobs]. Risk knobs: stop loss %, take profit %, leverage, position size %, max notional USD. Coins: BTC ETH SOL HYPE or uppercase token <=12 chars. Intervals: 1m 3m 5m 15m 30m 1h 2h 4h 8h 12h 1d.",LT=Object.freeze({maxLeverage:1,maxNotionalUsd:100,positionSizePct:5,stopLossPct:2,takeProfitPct:4,cooldownBars:1,maxDailyLossPct:3}),TT=36e5,xT=30*864e5,YT=864e5});import{createHash as $T}from"node:crypto";function Iw(e){let A=String(e).toLowerCase();return A==="holdout"||A==="test"||A==="oos"||A.includes("holdout")||A.includes("oos")?!0:A==="testbars"||A.endsWith("testbars")||A.startsWith("test")||A.endsWith("test")?!A.includes("backtest"):!1}function hw(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function ml(e){if(e==null||typeof e!="object"||Object.isFrozen(e))return e;if(Array.isArray(e)){for(let A of e)ml(A);return Object.freeze(e)}for(let A of Object.keys(e))ml(e[A]);return Object.freeze(e)}function ls(e){if(Array.isArray(e))return e.map(ls);if(e!=null&&typeof e=="object"){let A={};for(let t of Object.keys(e).sort())A[t]=ls(e[t]);return A}return e}function Io(e){return JSON.stringify(ls(e))}function ex(e){let{min:A,max:t,step:r}=e;if(!(r>0)||A>t)return[];let n=[],s=Math.floor((t-A)/r+1e-9);for(let o=0;o<=s;o++){let a=A+o*r;if(a>t+1e-9)break;let g=Math.abs(a-Math.round(a))<1e-9?Math.round(a):Number(a.toPrecision(12));g<A-1e-9||g>t+1e-9||n.push(g)}if(n.length===0)return[];let i=n[n.length-1];if(Math.abs(i-t)>1e-9){let o=(t-A)/r;Math.abs(o-Math.round(o))<=1e-9&&n.push(t)}return n}function Ax(e,A){if(e.length===0)return[];let t=[{}];for(let r of e){let n=A[r],s=[];for(let i of t)for(let o of n)s.push({...i,[r]:o});t=s}return t.sort((r,n)=>{let s=Io(r),i=Io(n);return s<i?-1:s>i?1:0}),t}function pl(e,A,t,r,n){let s=0;if(e==="maxDrawdownPct"){if(s=A.maxDrawdownPct-r.maxDrawdownPct,s!==0)return s<0}else if(s=A[e]-r[e],s!==0)return s>0;let i=Io(t),o=Io(n);return i<o}function Cw(e,A,t={}){if(!hw(t))throw new TypeError("options must be a plain object");for(let f of Object.keys(t))if(Iw(f))throw new TypeError(`options must not include holdout/test/oos key "${f}"`);let r=new Set(["maxTrials","objective","backtestOptions"]);for(let f of Object.keys(t))if(!r.has(f))throw new TypeError(`unknown option "${f}"`);let n=64;if("maxTrials"in t){let f=t.maxTrials;if(!Number.isInteger(f)||f<1||f>Bw)throw new TypeError(`maxTrials must be an integer 1..${Bw}`);n=f}let s=t.objective??"netPnlUsd";if(!uw.has(s))throw new TypeError(`objective must be one of ${[...uw].join("|")}`);let i=t.backtestOptions??{};if(!hw(i))throw new TypeError("backtestOptions must be a plain object");for(let f of Object.keys(i))if(Iw(f))throw new TypeError(`backtestOptions must not include holdout/test/oos key "${f}"`);let o=Ge(e),a=Object.keys(o.parameters).sort();if(a.length===0)throw new Error("optimizeStrategy requires at least one declared parameter");let g={},l=1;for(let f of a){let R=ex(o.parameters[f]);if(R.length===0)throw new Error(`parameter "${f}" produces an empty grid`);g[f]=R,l*=R.length}let c=Ax(a,g);if(c.length===0)throw new Error("parameter grid is empty");let Q=c.slice(0,n),B=[],E=null,u=null;for(let f of Q){let R=as(o,f),S=ut(R,A,i);u==null&&(u=S.config);let d={netPnlUsd:S.metrics.netPnlUsd,netPnlPct:S.metrics.netPnlPct,maxDrawdownPct:S.metrics.maxDrawdownPct,winRate:S.metrics.winRate,profitFactor:S.metrics.profitFactor,tradeCount:S.metrics.tradeCount,sharpe:S.metrics.sharpe,turnoverUsd:S.metrics.turnoverUsd},se={parameters:{...f},metrics:d};B.push(se),(!E||pl(s,d,f,E.metrics,E.parameters))&&(E=se)}B.sort((f,R)=>pl(s,f.metrics,f.parameters,R.metrics,R.parameters)?-1:pl(s,R.metrics,R.parameters,f.metrics,f.parameters)?1:0);let h={...E.parameters},I=as(o,h),C={strategyHash:Zr(o),compilerHash:Ot,trainBarsHash:ns(A),backtestConfig:u,objective:s,maxTrials:n,trialsRun:B.length,candidates:B,bestParameters:h,bestStrategy:I},D={id:$T("sha256").update(JSON.stringify(ls(C)),"utf8").digest("hex"),...C};return ml(ls(JSON.parse(JSON.stringify(D))))}var Bw,uw,fw=De(()=>{zt();Pt();lo();Bw=256,uw=new Set(["netPnlUsd","profitFactor","sharpe","maxDrawdownPct"])});import XA from"node:fs";import ho from"node:path";function Co(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function TA(e){return e==null?e:JSON.parse(JSON.stringify(e))}function rx(e){return String(e).toLowerCase().replace(/[^a-z0-9]/g,"")}function en(e,A="record"){if(Array.isArray(e)){e.forEach((t,r)=>en(t,`${A}[${r}]`));return}if(Co(e))for(let[t,r]of Object.entries(e)){let n=rx(t);if(tx.some(s=>n.includes(s)))throw new Error(`shadow-store: forbidden secret-like field at ${A}.${t}`);en(r,`${A}.${t}`)}}function nx(e){if(typeof e!="string"||!e||!ho.isAbsolute(e))throw new Error("shadow-store: path must be an absolute path")}function dw(e){let A;try{A=XA.lstatSync(e)}catch(r){if(r&&r.code==="ENOENT")return;throw r}if(A.isSymbolicLink())throw new Error("shadow-store: store path must not be a symlink");if(!A.isFile())throw new Error("shadow-store: store path must be a regular file");if(A.mode&511&18)throw new Error("shadow-store: store file must not be group or world writable")}function sx(){return{version:kl,runners:[]}}function ww(e,A){let t;try{t=JSON.parse(e)}catch{throw new Error("shadow-store: malformed JSON")}if(!Co(t))throw new Error("shadow-store: malformed JSON root");if(t.version!==kl)throw new Error(`shadow-store: unsupported version ${t.version}`);if(!Array.isArray(t.runners))throw new Error("shadow-store: runners must be an array");return en(t,ho.basename(A)),{version:kl,runners:t.runners.map(r=>TA(r))}}function yw(e,A){en(A,"store");let t=ho.dirname(e);XA.mkdirSync(t,{recursive:!0,mode:448});let r=ho.join(t,`.shadow-store.${process.pid}.${Date.now()}.tmp`),n=`${JSON.stringify(A)}
47
47
  `;try{XA.writeFileSync(r,n,{mode:384,flag:"wx"}),XA.renameSync(r,e);try{XA.chmodSync(e,384)}catch{}}catch(s){try{XA.unlinkSync(r)}catch{}throw s}}function pw(e={}){let A=e.path;if(nx(A),dw(A),XA.existsSync(A)?ww(XA.readFileSync(A,"utf8"),A):yw(A,sx()),Dl.has(A))return Dl.get(A);let t=!1,r=[];function n(){if(t)return;let E=r.shift();if(E){t=!0;try{let u=E.fn();t=!1,E.resolve(u),n()}catch(u){t=!1,E.reject(u),n()}}}function s(E){if(!t&&r.length===0){t=!0;try{return E()}finally{t=!1,queueMicrotask(n)}}return new Promise((u,h)=>{r.push({fn:E,resolve:u,reject:h}),queueMicrotask(n)})}function i(){return dw(A),ww(XA.readFileSync(A,"utf8"),A)}function o(E){yw(A,E)}function a(E){if(!Co(E)||typeof E.id!="string"||!E.id)throw new Error("shadow-store: create requires record with string id");en(E,"record");let u=i();if(u.runners.some(I=>I.id===E.id))throw new Error(`shadow-store: runner id already exists: ${E.id}`);let h=TA(E);return u.runners.push(h),o(u),TA(h)}function g(E){let u=i().runners.find(h=>h.id===E);return u?TA(u):null}function l(){return i().runners.map(E=>TA(E))}function c(E,u){if(typeof u!="function")throw new Error("shadow-store: updater must be a function");let h=i(),I=h.runners.findIndex(f=>f.id===E);if(I<0)throw new Error(`shadow-store: runner not found: ${E}`);let C=TA(h.runners[I]),D=u(C);if(!Co(D)||D.id!==E)throw new Error("shadow-store: updater must return record with same id");return en(D,"record"),h.runners[I]=TA(D),o(h),TA(h.runners[I])}function Q(E){let u=i(),h=u.runners.findIndex(C=>C.id===E);if(h<0)throw new Error(`shadow-store: runner not found: ${E}`);let I=TA(u.runners[h]);return I.status!=="stopped"&&(I.status="stopped",u.runners[h]=I,o(u)),TA(u.runners[h])}let B={create(E){return s(()=>a(E))},get(E){return g(E)},list(){return l()},update(E,u){return s(()=>c(E,u))},stop(E){return s(()=>Q(E))}};return Dl.set(A,B),B}var kl,tx,Dl,mw=De(()=>{kl=1,tx=["privatekey","secretkey","seed","mnemonic","passphrase","password","keystore","keymaterial","apikey","authtoken","accesstoken","refreshtoken","credential","bearer","signature","authorization","xprv","xpriv","wif"];Dl=new Map});import{createHash as Rl}from"node:crypto";function bl(e){return e==null?e:JSON.parse(JSON.stringify(e))}function Fl(e){return Array.isArray(e)?e.map(Fl):e&&typeof e=="object"?Object.fromEntries(Object.keys(e).sort().map(A=>[A,Fl(e[A])])):e}function kw(e){if(!e||typeof e!="object"||Array.isArray(e))throw new TypeError("shadow-runner: record must be an object");return Rl("sha256").update(JSON.stringify(Fl(e))).digest("hex")}function ix(e,A,t,r,n){return Rl("sha256").update(`${e}|${A}|${t}|${r}|${n}`).digest("hex")}function ox(e,A,t,r){return Rl("sha256").update(`shadow|${e}|${A}|${t}|${r??""}`).digest("hex")}function ax(e){return e==="entryLong"||e==="exitShort"?"buy":e==="entryShort"||e==="exitLong"?"sell":e}function Dw(e){return e==="entryLong"||e==="entryShort"}function Sl({storePath:e,clock:A=Date.now}={}){if(typeof e!="string"||!e)throw new Error("shadow-runner: storePath required");let t=pw({path:e});function r({strategy:a,evidenceId:g=null}={}){let l=Je(a),c=g==null?null:String(g),Q=t.list().filter(I=>I.status==="running"&&I.strategyHash===l.strategyHash&&I.compilerHash===l.compilerHash&&I.evidenceId===c).sort((I,C)=>I.createdAt-C.createdAt||I.id.localeCompare(C.id))[0];if(Q)return bl(Q);let B=A(),E=ox(B,l.strategyHash,l.compilerHash,c),u=t.get(E);if(u)return bl(u);let h={id:E,strategy:bl(l.strategy),strategyHash:l.strategyHash,compilerHash:l.compilerHash,evidenceId:c,status:"running",cursor:null,intendedOrders:[],fills:[],missedFills:[],markouts:[],createdAt:B,updatedAt:B,position:null,cooldownBarsRemaining:0,cooldownStartT:null,lastProcessedBarIndex:-1};return t.create(h)}function n(a){return t.get(a)}function s(){return t.list()}function i(a){return t.stop(a)}function o(a,g,{markoutHorizons:l=[1,4,12]}={}){if(!Array.isArray(g))throw new TypeError("shadow-runner: bars must be an array");return t.update(a,c=>{if(c.status!=="running")throw new Error("shadow-runner: runner is stopped");if(g.length===0)return c;let B=Je(c.strategy).evaluateAll(g),E=new Map;for(let w=0;w<g.length;w++)E.set(g[w].t,w);let u=c.cursor,h=[];for(let w=0;w<g.length;w++){let H=g[w].t;(u==null||H>u)&&h.push(w)}if(h.length===0)return c;let I=new Map(c.intendedOrders.map(w=>[w.id,w])),C=new Set(c.fills.map(w=>w.orderId)),D=new Map(c.missedFills.map(w=>[w.orderId,w])),f=(w,H)=>`${w}|${H}`,R=new Map(c.markouts.map(w=>[f(w.orderId,w.horizon),w])),S=c.position?{...c.position}:null,d=Number.isInteger(c.cooldownBarsRemaining)?Math.max(0,c.cooldownBarsRemaining):0,se=Number.isFinite(c.cooldownStartT)?c.cooldownStartT:null;function ke({action:w,signalBarT:H,signalIndex:q}){let ee=ax(w),j=ix(c.id,c.strategyHash,H,ee,w);if(I.has(j))return I.get(j);let _=q+1,te=_<g.length,Re={id:j,action:w,type:w,side:ee,signalBarT:H,fillBarT:te?g[_].t:null,status:te?"open":"missed"};return I.set(j,Re),c.intendedOrders.push(Re),Re}function Le(w,H,q){if(C.has(w.id))return;let ee={orderId:w.id,action:Dw(w.action)?"entry":"exit",side:w.side,price:H.o,barT:H.t,signalBarT:w.signalBarT,barIndex:q};if(c.fills.push(ee),C.add(w.id),w.status="filled",w.fillBarT=H.t,D.has(w.id)&&(D.delete(w.id),c.missedFills=c.missedFills.filter(j=>j.orderId!==w.id)),Dw(w.action)){S={side:w.action==="entryLong"?"long":"short",entryOrderId:w.id,entryBarT:H.t,entryPrice:H.o,entryBarIndex:q};for(let j of l){let _=f(w.id,j);if(R.has(_))continue;let te={orderId:w.id,horizon:j,entryBarT:H.t,entryPrice:H.o,side:S.side,status:"pending",close:null,barT:null};R.set(_,te),c.markouts.push(te)}}else S=null,d=Number(c.strategy?.risk?.cooldownBars)||0,se=H.t}function me(w){if(C.has(w.id)||D.has(w.id))return;let H={orderId:w.id,action:w.action,side:w.side,signalBarT:w.signalBarT,status:"missed"};D.set(w.id,H),c.missedFills.push(H),w.status="missed"}for(let w of c.intendedOrders){if(w.status==="filled"||C.has(w.id))continue;let H=E.get(w.signalBarT);if(H==null)continue;let q=H+1;q<g.length&&(u==null||g[q].t>u)&&Le(w,g[q],q)}for(let w of h){let H=g[w],q=B[w].signals,ee=S,j=te=>{if(S||d>0&&(se==null||H.t>=se))return;let fe=ke({action:te,signalBarT:H.t,signalIndex:w}),wA=w+1;wA<g.length?Le(fe,g[wA],wA):me(fe)},_=te=>{if(!S||S.side==="long"&&te!=="exitLong"||S.side==="short"&&te!=="exitShort")return;let Re=ke({action:te,signalBarT:H.t,signalIndex:w}),fe=w+1;fe<g.length?Le(Re,g[fe],fe):me(Re)};ee?(q.exitLong&&_("exitLong"),q.exitShort&&_("exitShort")):q.entryLong&&q.entryShort||(q.entryLong&&j("entryLong"),q.entryShort&&j("entryShort")),d>0&&se!=null&&H.t>=se&&(d-=1,d===0&&(se=null)),c.cursor=H.t,c.lastProcessedBarIndex=w}for(let w of c.markouts){if(w.status!=="pending")continue;let H=c.fills.find(j=>j.orderId===w.orderId&&j.action==="entry");if(!H)continue;let q=E.get(H.barT);if(q==null)continue;let ee=q+w.horizon;if(ee<g.length){w.close=g[ee].c,w.barT=g[ee].t,w.status="filled";let j=w.entryPrice;w.markout=w.side==="long"?(w.close-j)/j:(j-w.close)/j}}return c.position=S,c.cooldownBarsRemaining=d,c.cooldownStartT=se,c.updatedAt=A(),c})}return{start:r,step:o,list:s,get:n,stop:i}}var bw=De(()=>{zt();mw()});var Sw={};Pw(Sw,{runStrategyOperation:()=>Ix});import cx from"node:os";import gx from"node:path";function Qs(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function Qx(e){return String(e).toLowerCase().replace(/[^a-z0-9]/g,"")}function Ml(e){if(Array.isArray(e)){for(let A of e)Ml(A);return}if(Qs(e))for(let[A,t]of Object.entries(e)){if(lx.some(r=>Qx(A).includes(r)))throw new Error(`strategy service: secret-like field "${A}" is forbidden`);Ml(t)}}function Ex(e){if(!Qs(e))throw new TypeError("strategy input must be a plain object");return Ml(e),e}function Bx(e,A={}){if(A.nowMs!==void 0){if(!Number.isInteger(A.nowMs))throw new TypeError("nowMs must be an integer epoch milliseconds");return A.nowMs}let t=Date.now();if(e.nowMs===void 0||e.nowMs===null)return t;if(!Number.isInteger(e.nowMs))throw new TypeError("nowMs must be an integer epoch milliseconds");if(Math.abs(e.nowMs-t)>12e4)throw new Error("nowMs outside allowed wall-clock skew (120s); omit nowMs to use server time");return e.nowMs}async function Nl(e,A,t,r){if(Array.isArray(A.bars))return A.bars;let n=gl(e.venue),s=t.fetchBars??n.fetchBars;if(typeof s!="function")throw new Error(`strategy venue ${n.id} does not support history`);let i=await s({coin:e.market.coin,interval:e.market.interval,count:A.count??1500,endTime:A.endTime??r}),o=Array.isArray(i)?i:i?.bars;if(!Array.isArray(o))throw new Error("strategy history provider returned no bars");return o}function Ul(e,A){let t=e.backtestOptions??{};if(!Qs(t))throw new TypeError("backtestOptions must be a plain object");return{...t,nowMs:A}}function Fw(e,A,t,r,n={}){let s=e.evidenceOptions??{};if(!Qs(s))throw new TypeError("evidenceOptions must be a plain object");return{...s,...n,strategy:A,bars:t,backtestOptions:Ul(e,r)}}function Rw(){return gx.join(cx.homedir(),".oracle","strategy-shadow.json")}function ux(e,A){return{perStrategyNotionalUsd:e.risk.maxNotionalUsd,maxLeverage:e.risk.maxLeverage,dailyLossCapUsd:e.risk.maxNotionalUsd*(e.risk.maxDailyLossPct/100),chainAllowlist:[e.venue],assetAllowlist:[e.market.coin],expiresAt:Math.min(e.risk.expiresAt,A+864e5),killSwitchRequired:!0}}async function Ix(e,A={},t={}){let r=Ex(A),n=Bx(r,t);if(e==="draft")return{strategy:Qw(r.prompt,{nowMs:n})};if(e==="validate"){let s=Je(r.strategy);if(s.strategy.risk.expiresAt<=n)throw new Error("strategy is expired");return{valid:!0,strategy:s.strategy,strategyHash:s.strategyHash,compilerHash:s.compilerHash,compilerVersion:s.compilerVersion,requiredSeries:s.requiredSeries}}if(e==="backtest"||e==="evidence"){let s=Je(r.strategy),i=await Nl(s.strategy,r,t,n);gs(s,i);let o=nl(Fw(r,s.strategy,i,n));return e==="evidence"?o:{backtest:ut(s.strategy,i,Ul(r,n)),evidence:o}}if(e==="optimize"){let s=Je(r.strategy),i=await Nl(s.strategy,r,t,n);gs(s,i);let o=r.trainFraction,a=r.evidenceOptions?.trainFraction;if(o!=null&&a!=null&&o!==a)throw new TypeError("conflicting trainFraction controls are forbidden");let g=o??a??.7;if(typeof g!="number"||g<=0||g>=1)throw new TypeError("trainFraction must be in (0,1)");let l=i.slice(0,Math.floor(i.length*g)),c=r.options??{};if(!Qs(c))throw new TypeError("options must be a plain object");let Q=Cw(s.strategy,l,{...c,...r.maxTrials==null?{}:{maxTrials:r.maxTrials},backtestOptions:Ul(r,n)}),B=Q.bestStrategy;return{strategy:B,optimization:Q,evidence:nl(Fw(r,B,i,n,{trainFraction:g}))}}if(e==="shadow"){let s=Sl({storePath:t.storePath??Rw(),clock:()=>n}),i=r.action;if(i==="start")return await s.start({strategy:r.strategy,evidenceId:r.evidenceId??r.evidence?.id??null});if(i==="list")return await s.list();if(i==="get")return await s.get(r.id);if(i==="stop")return await s.stop(r.id);if(i==="step"){let o=await s.get(r.id);if(!o)throw new Error(`shadow runner not found: ${r.id}`);let a=await Nl(o.strategy,r,t,n);return gs(Je(o.strategy),a),await s.step(r.id,a,r.stepOptions??{})}throw new Error(`unknown shadow action: ${i}`)}if(e==="prepare"){let s=Je(r.strategy),i=gl(s.strategy.venue);if(typeof r.shadowId!="string"||!r.shadowId)throw new Error("strategy prepare requires a matching shadow runner id");let a=await Sl({storePath:t.storePath??Rw(),clock:()=>n}).get(r.shadowId);if(!a)throw new Error("strategy prepare shadow runner not found");if(a.status!=="running")throw new Error("strategy prepare requires an active shadow runner");if(!Number.isFinite(a.cursor))throw new Error("strategy prepare requires a stepped shadow runner");if(a.strategyHash!==s.strategyHash||a.compilerHash!==s.compilerHash)throw new Error("strategy prepare shadow runner does not match strategy artifacts");if(a.evidenceId!==r.evidence?.id)throw new Error("strategy prepare shadow runner does not match evidence artifact");let g=r.caps??ux(s.strategy,n);return i.prepareIntent({strategy:s.strategy,evidence:r.evidence,shadow:{id:a.id,stateHash:kw(a),status:a.status,cursor:a.cursor,updatedAt:a.updatedAt},caps:g,nowMs:n,env:t.env??process.env})}throw new Error(`unknown strategy operation: ${e}`)}var lx,Nw=De(()=>{lo();zt();sl();Ew();fw();bw();ll();lx=["privatekey","secretkey","seed","mnemonic","passphrase","password","keystore","keymaterial","apikey","authtoken","accesstoken","refreshtoken","credential","bearer","signature","authorization","xprv","xpriv","wif"]});import Mw from"node:fs";function hx(e){let A={},t=[];for(let r=0;r<e.length;r++){let n=e[r];if(!n.startsWith("--")){t.push(n);continue}let s=n.slice(2),i=e[r+1];i!=null&&!i.startsWith("--")?(A[s]=i,r++):A[s]=!0}return{flags:A,positional:t}}function _t(e,A){if(!e)throw new Error(`${A} path required`);let t=e==="-"?Mw.readFileSync(0,"utf8"):Mw.readFileSync(e,"utf8");try{return JSON.parse(t)}catch{throw new Error(`${A} must contain valid JSON`)}}function Uw(e,A){if(e==null)return;let t=Number(e);if(!Number.isFinite(t))throw new Error(`${A} must be a finite number`);return t}var Cx=`oracle strategy <draft|validate|backtest|optimize|evidence|shadow|prepare> [args]
48
48
 
49
49
  oracle strategy draft "Long BTC when the 20 EMA crosses above the 50 EMA"