@devassure/cli 1.0.13 → 1.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +2 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -46,7 +46,7 @@ ${r.count} ${r.noun} ${r.is} pending:
|
|
|
46
46
|
|
|
47
47
|
${e.format(A)}
|
|
48
48
|
`.trim())}};EQ.exports=Ag;});var $i=S((cY,QQ)=>{var IQ=Symbol.for("undici.globalDispatcher.1"),{InvalidArgumentError:UN}=ne(),TN=qr();dQ()===void 0&&CQ(new TN);function CQ(t){if(!t||typeof t.dispatch!="function")throw new UN("Argument agent must implement Agent");Object.defineProperty(globalThis,IQ,{value:t,writable:true,enumerable:false,configurable:false});}function dQ(){return globalThis[IQ]}QQ.exports={setGlobalDispatcher:CQ,getGlobalDispatcher:dQ};});var eo=S((gY,BQ)=>{BQ.exports=class{#e;constructor(e){if(typeof e!="object"||e===null)throw new TypeError("handler must be an object");this.#e=e;}onConnect(...e){return this.#e.onConnect?.(...e)}onError(...e){return this.#e.onError?.(...e)}onUpgrade(...e){return this.#e.onUpgrade?.(...e)}onResponseStarted(...e){return this.#e.onResponseStarted?.(...e)}onHeaders(...e){return this.#e.onHeaders?.(...e)}onData(...e){return this.#e.onData?.(...e)}onComplete(...e){return this.#e.onComplete?.(...e)}onBodySent(...e){return this.#e.onBodySent?.(...e)}};});var pQ=S((uY,fQ)=>{var vN=Mi();fQ.exports=t=>{let e=t?.maxRedirections;return A=>function(s,n){let{maxRedirections:i=e,...o}=s;if(!i)return A(s,n);let a=new vN(A,i,s,n);return A(o,a)}};});var mQ=S((EY,wQ)=>{var xN=Pi();wQ.exports=t=>e=>function(r,s){return e(r,new xN({...r,retryOptions:{...t,...r.retryOptions}},{handler:s,dispatch:e}))};});var DQ=S((hY,yQ)=>{var GN=j(),{InvalidArgumentError:YN,RequestAbortedError:HN}=ne(),JN=eo(),rg=class extends JN{#e=1024*1024;#t=null;#s=false;#r=false;#A=0;#n=null;#i=null;constructor({maxSize:e},A){if(super(A),e!=null&&(!Number.isFinite(e)||e<1))throw new YN("maxSize must be a number greater than 0");this.#e=e??this.#e,this.#i=A;}onConnect(e){this.#t=e,this.#i.onConnect(this.#o.bind(this));}#o(e){this.#r=true,this.#n=e;}onHeaders(e,A,r,s){let i=GN.parseHeaders(A)["content-length"];if(i!=null&&i>this.#e)throw new HN(`Response size (${i}) larger than maxSize (${this.#e})`);return this.#r?true:this.#i.onHeaders(e,A,r,s)}onError(e){this.#s||(e=this.#n??e,this.#i.onError(e));}onData(e){return this.#A=this.#A+e.length,this.#A>=this.#e&&(this.#s=true,this.#r?this.#i.onError(this.#n):this.#i.onComplete([])),true}onComplete(e){if(!this.#s){if(this.#r){this.#i.onError(this.reason);return}this.#i.onComplete(e);}}};function VN({maxSize:t}={maxSize:1024*1024}){return e=>function(r,s){let{dumpMaxSize:n=t}=r,i=new rg({maxSize:n},s);return e(r,i)}}yQ.exports=VN;});var FQ=S((IY,RQ)=>{var{isIP:PN}=R("net"),{lookup:ON}=R("dns"),WN=eo(),{InvalidArgumentError:As,InformationalError:qN}=ne(),SQ=Math.pow(2,31)-1,sg=class{#e=0;#t=0;#s=new Map;dualStack=true;affinity=null;lookup=null;pick=null;constructor(e){this.#e=e.maxTTL,this.#t=e.maxItems,this.dualStack=e.dualStack,this.affinity=e.affinity,this.lookup=e.lookup??this.#r,this.pick=e.pick??this.#A;}get full(){return this.#s.size===this.#t}runLookup(e,A,r){let s=this.#s.get(e.hostname);if(s==null&&this.full){r(null,e.origin);return}let n={affinity:this.affinity,dualStack:this.dualStack,lookup:this.lookup,pick:this.pick,...A.dns,maxTTL:this.#e,maxItems:this.#t};if(s==null)this.lookup(e,n,(i,o)=>{if(i||o==null||o.length===0){r(i??new qN("No DNS entries found"));return}this.setRecords(e,o);let a=this.#s.get(e.hostname),c=this.pick(e,a,n.affinity),g;typeof c.port=="number"?g=`:${c.port}`:e.port!==""?g=`:${e.port}`:g="",r(null,`${e.protocol}//${c.family===6?`[${c.address}]`:c.address}${g}`);});else {let i=this.pick(e,s,n.affinity);if(i==null){this.#s.delete(e.hostname),this.runLookup(e,A,r);return}let o;typeof i.port=="number"?o=`:${i.port}`:e.port!==""?o=`:${e.port}`:o="",r(null,`${e.protocol}//${i.family===6?`[${i.address}]`:i.address}${o}`);}}#r(e,A,r){ON(e.hostname,{all:true,family:this.dualStack===false?this.affinity:0,order:"ipv4first"},(s,n)=>{if(s)return r(s);let i=new Map;for(let o of n)i.set(`${o.address}:${o.family}`,o);r(null,i.values());});}#A(e,A,r){let s=null,{records:n,offset:i}=A,o;if(this.dualStack?(r==null&&(i==null||i===SQ?(A.offset=0,r=4):(A.offset++,r=(A.offset&1)===1?6:4)),n[r]!=null&&n[r].ips.length>0?o=n[r]:o=n[r===4?6:4]):o=n[r],o==null||o.ips.length===0)return s;o.offset==null||o.offset===SQ?o.offset=0:o.offset++;let a=o.offset%o.ips.length;return s=o.ips[a]??null,s==null?s:Date.now()-s.timestamp>s.ttl?(o.ips.splice(a,1),this.pick(e,A,r)):s}setRecords(e,A){let r=Date.now(),s={records:{4:null,6:null}};for(let n of A){n.timestamp=r,typeof n.ttl=="number"?n.ttl=Math.min(n.ttl,this.#e):n.ttl=this.#e;let i=s.records[n.family]??{ips:[]};i.ips.push(n),s.records[n.family]=i;}this.#s.set(e.hostname,s);}getHandler(e,A){return new ng(this,e,A)}},ng=class extends WN{#e=null;#t=null;#s=null;#r=null;#A=null;constructor(e,{origin:A,handler:r,dispatch:s},n){super(r),this.#A=A,this.#r=r,this.#t={...n},this.#e=e,this.#s=s;}onError(e){switch(e.code){case "ETIMEDOUT":case "ECONNREFUSED":{if(this.#e.dualStack){this.#e.runLookup(this.#A,this.#t,(A,r)=>{if(A)return this.#r.onError(A);let s={...this.#t,origin:r};this.#s(s,this);});return}this.#r.onError(e);return}case "ENOTFOUND":this.#e.deleteRecord(this.#A);default:this.#r.onError(e);break}}};RQ.exports=t=>{if(t?.maxTTL!=null&&(typeof t?.maxTTL!="number"||t?.maxTTL<0))throw new As("Invalid maxTTL. Must be a positive number");if(t?.maxItems!=null&&(typeof t?.maxItems!="number"||t?.maxItems<1))throw new As("Invalid maxItems. Must be a positive number and greater than zero");if(t?.affinity!=null&&t?.affinity!==4&&t?.affinity!==6)throw new As("Invalid affinity. Must be either 4 or 6");if(t?.dualStack!=null&&typeof t?.dualStack!="boolean")throw new As("Invalid dualStack. Must be a boolean");if(t?.lookup!=null&&typeof t?.lookup!="function")throw new As("Invalid lookup. Must be a function");if(t?.pick!=null&&typeof t?.pick!="function")throw new As("Invalid pick. Must be a function");let e=t?.dualStack??true,A;e?A=t?.affinity??null:A=t?.affinity??4;let r={maxTTL:t?.maxTTL??1e4,lookup:t?.lookup??null,pick:t?.pick??null,dualStack:e,affinity:A,maxItems:t?.maxItems??1/0},s=new sg(r);return n=>function(o,a){let c=o.origin.constructor===URL?o.origin:new URL(o.origin);return PN(c.hostname)!==0?n(o,a):(s.runLookup(c,o,(g,E)=>{if(g)return a.onError(g);let B=null;B={...o,servername:c.hostname,origin:E,headers:{host:c.hostname,...o.headers}},n(B,s.getHandler({origin:c,dispatch:n,handler:a},o));}),true)}};});var ir=S((CY,TQ)=>{var{kConstruct:_N}=de(),{kEnumerableProperty:rs}=j(),{iteratorMixin:zN,isValidHeaderName:un,isValidHeaderValue:NQ}=ot(),{webidl:re}=Oe(),ig=R("assert"),to=R("util"),be=Symbol("headers map"),lt=Symbol("headers map sorted");function kQ(t){return t===10||t===13||t===9||t===32}function bQ(t){let e=0,A=t.length;for(;A>e&&kQ(t.charCodeAt(A-1));)--A;for(;A>e&&kQ(t.charCodeAt(e));)++e;return e===0&&A===t.length?t:t.substring(e,A)}function MQ(t,e){if(Array.isArray(e))for(let A=0;A<e.length;++A){let r=e[A];if(r.length!==2)throw re.errors.exception({header:"Headers constructor",message:`expected name/value pair to be length 2, found ${r.length}.`});og(t,r[0],r[1]);}else if(typeof e=="object"&&e!==null){let A=Object.keys(e);for(let r=0;r<A.length;++r)og(t,A[r],e[A[r]]);}else throw re.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence<sequence<ByteString>>","record<ByteString, ByteString>"]})}function og(t,e,A){if(A=bQ(A),un(e)){if(!NQ(A))throw re.errors.invalidArgument({prefix:"Headers.append",value:A,type:"header value"})}else throw re.errors.invalidArgument({prefix:"Headers.append",value:e,type:"header name"});if(UQ(t)==="immutable")throw new TypeError("immutable");return ag(t).append(e,A,false)}function LQ(t,e){return t[0]<e[0]?-1:1}var Ao=class t{cookies=null;constructor(e){e instanceof t?(this[be]=new Map(e[be]),this[lt]=e[lt],this.cookies=e.cookies===null?null:[...e.cookies]):(this[be]=new Map(e),this[lt]=null);}contains(e,A){return this[be].has(A?e:e.toLowerCase())}clear(){this[be].clear(),this[lt]=null,this.cookies=null;}append(e,A,r){this[lt]=null;let s=r?e:e.toLowerCase(),n=this[be].get(s);if(n){let i=s==="cookie"?"; ":", ";this[be].set(s,{name:n.name,value:`${n.value}${i}${A}`});}else this[be].set(s,{name:e,value:A});s==="set-cookie"&&(this.cookies??=[]).push(A);}set(e,A,r){this[lt]=null;let s=r?e:e.toLowerCase();s==="set-cookie"&&(this.cookies=[A]),this[be].set(s,{name:e,value:A});}delete(e,A){this[lt]=null,A||(e=e.toLowerCase()),e==="set-cookie"&&(this.cookies=null),this[be].delete(e);}get(e,A){return this[be].get(A?e:e.toLowerCase())?.value??null}*[Symbol.iterator](){for(let{0:e,1:{value:A}}of this[be])yield [e,A];}get entries(){let e={};if(this[be].size!==0)for(let{name:A,value:r}of this[be].values())e[A]=r;return e}rawValues(){return this[be].values()}get entriesList(){let e=[];if(this[be].size!==0)for(let{0:A,1:{name:r,value:s}}of this[be])if(A==="set-cookie")for(let n of this.cookies)e.push([r,n]);else e.push([r,s]);return e}toSortedArray(){let e=this[be].size,A=new Array(e);if(e<=32){if(e===0)return A;let r=this[be][Symbol.iterator](),s=r.next().value;A[0]=[s[0],s[1].value],ig(s[1].value!==null);for(let n=1,i=0,o=0,a=0,c=0,g,E;n<e;++n){for(E=r.next().value,g=A[n]=[E[0],E[1].value],ig(g[1]!==null),a=0,o=n;a<o;)c=a+(o-a>>1),A[c][0]<=g[0]?a=c+1:o=c;if(n!==c){for(i=n;i>a;)A[i]=A[--i];A[a]=g;}}if(!r.next().done)throw new TypeError("Unreachable");return A}else {let r=0;for(let{0:s,1:{value:n}}of this[be])A[r++]=[s,n],ig(n!==null);return A.sort(LQ)}}},Gt=class t{#e;#t;constructor(e=void 0){re.util.markAsUncloneable(this),e!==_N&&(this.#t=new Ao,this.#e="none",e!==void 0&&(e=re.converters.HeadersInit(e,"Headers contructor","init"),MQ(this,e)));}append(e,A){re.brandCheck(this,t),re.argumentLengthCheck(arguments,2,"Headers.append");let r="Headers.append";return e=re.converters.ByteString(e,r,"name"),A=re.converters.ByteString(A,r,"value"),og(this,e,A)}delete(e){if(re.brandCheck(this,t),re.argumentLengthCheck(arguments,1,"Headers.delete"),e=re.converters.ByteString(e,"Headers.delete","name"),!un(e))throw re.errors.invalidArgument({prefix:"Headers.delete",value:e,type:"header name"});if(this.#e==="immutable")throw new TypeError("immutable");this.#t.contains(e,false)&&this.#t.delete(e,false);}get(e){re.brandCheck(this,t),re.argumentLengthCheck(arguments,1,"Headers.get");let A="Headers.get";if(e=re.converters.ByteString(e,A,"name"),!un(e))throw re.errors.invalidArgument({prefix:A,value:e,type:"header name"});return this.#t.get(e,false)}has(e){re.brandCheck(this,t),re.argumentLengthCheck(arguments,1,"Headers.has");let A="Headers.has";if(e=re.converters.ByteString(e,A,"name"),!un(e))throw re.errors.invalidArgument({prefix:A,value:e,type:"header name"});return this.#t.contains(e,false)}set(e,A){re.brandCheck(this,t),re.argumentLengthCheck(arguments,2,"Headers.set");let r="Headers.set";if(e=re.converters.ByteString(e,r,"name"),A=re.converters.ByteString(A,r,"value"),A=bQ(A),un(e)){if(!NQ(A))throw re.errors.invalidArgument({prefix:r,value:A,type:"header value"})}else throw re.errors.invalidArgument({prefix:r,value:e,type:"header name"});if(this.#e==="immutable")throw new TypeError("immutable");this.#t.set(e,A,false);}getSetCookie(){re.brandCheck(this,t);let e=this.#t.cookies;return e?[...e]:[]}get[lt](){if(this.#t[lt])return this.#t[lt];let e=[],A=this.#t.toSortedArray(),r=this.#t.cookies;if(r===null||r.length===1)return this.#t[lt]=A;for(let s=0;s<A.length;++s){let{0:n,1:i}=A[s];if(n==="set-cookie")for(let o=0;o<r.length;++o)e.push([n,r[o]]);else e.push([n,i]);}return this.#t[lt]=e}[to.inspect.custom](e,A){return A.depth??=e,`Headers ${to.formatWithOptions(A,this.#t.entries)}`}static getHeadersGuard(e){return e.#e}static setHeadersGuard(e,A){e.#e=A;}static getHeadersList(e){return e.#t}static setHeadersList(e,A){e.#t=A;}},{getHeadersGuard:UQ,setHeadersGuard:ZN,getHeadersList:ag,setHeadersList:KN}=Gt;Reflect.deleteProperty(Gt,"getHeadersGuard");Reflect.deleteProperty(Gt,"setHeadersGuard");Reflect.deleteProperty(Gt,"getHeadersList");Reflect.deleteProperty(Gt,"setHeadersList");zN("Headers",Gt,lt,0,1);Object.defineProperties(Gt.prototype,{append:rs,delete:rs,get:rs,has:rs,set:rs,getSetCookie:rs,[Symbol.toStringTag]:{value:"Headers",configurable:true},[to.inspect.custom]:{enumerable:false}});re.converters.HeadersInit=function(t,e,A){if(re.util.Type(t)==="Object"){let r=Reflect.get(t,Symbol.iterator);if(!to.types.isProxy(t)&&r===Gt.prototype.entries)try{return ag(t).entriesList}catch{}return typeof r=="function"?re.converters["sequence<sequence<ByteString>>"](t,e,A,r.bind(t)):re.converters["record<ByteString, ByteString>"](t,e,A)}throw re.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence<sequence<ByteString>>","record<ByteString, ByteString>"]})};TQ.exports={fill:MQ,compareHeaderName:LQ,Headers:Gt,HeadersList:Ao,getHeadersGuard:UQ,setHeadersGuard:ZN,setHeadersList:KN,getHeadersList:ag};});var hn=S((dY,_Q)=>{var{Headers:JQ,HeadersList:vQ,fill:XN,getHeadersGuard:jN,setHeadersGuard:VQ,setHeadersList:PQ}=ir(),{extractBody:xQ,cloneBody:$N,mixinBody:eb,hasFinalizationRegistry:OQ,streamRegistry:WQ,bodyUnusable:tb}=xr(),cg=j(),GQ=R("util"),{kEnumerableProperty:gt}=cg,{isValidReasonPhrase:Ab,isCancelled:rb,isAborted:sb,isBlobLike:nb,serializeJavascriptValueToJSONString:ib,isErrorLike:ob,isomorphicEncode:ab,environmentSettingsObject:cb}=ot(),{redirectStatusSet:lb,nullBodyStatus:gb}=vs(),{kState:Qe,kHeaders:hA}=pA(),{webidl:Z}=Oe(),{FormData:ub}=Vs(),{URLSerializer:YQ}=je(),{kConstruct:so}=de(),lg=R("assert"),{types:Eb}=R("util"),hb=new TextEncoder("utf-8"),or=class t{static error(){return En(no(),"immutable")}static json(e,A={}){Z.argumentLengthCheck(arguments,1,"Response.json"),A!==null&&(A=Z.converters.ResponseInit(A));let r=hb.encode(ib(e)),s=xQ(r),n=En(ss({}),"response");return HQ(n,A,{body:s[0],type:"application/json"}),n}static redirect(e,A=302){Z.argumentLengthCheck(arguments,1,"Response.redirect"),e=Z.converters.USVString(e),A=Z.converters["unsigned short"](A);let r;try{r=new URL(e,cb.settingsObject.baseUrl);}catch(i){throw new TypeError(`Failed to parse URL from ${e}`,{cause:i})}if(!lb.has(A))throw new RangeError(`Invalid status code ${A}`);let s=En(ss({}),"immutable");s[Qe].status=A;let n=ab(YQ(r));return s[Qe].headersList.append("location",n,true),s}constructor(e=null,A={}){if(Z.util.markAsUncloneable(this),e===so)return;e!==null&&(e=Z.converters.BodyInit(e)),A=Z.converters.ResponseInit(A),this[Qe]=ss({}),this[hA]=new JQ(so),VQ(this[hA],"response"),PQ(this[hA],this[Qe].headersList);let r=null;if(e!=null){let[s,n]=xQ(e);r={body:s,type:n};}HQ(this,A,r);}get type(){return Z.brandCheck(this,t),this[Qe].type}get url(){Z.brandCheck(this,t);let e=this[Qe].urlList,A=e[e.length-1]??null;return A===null?"":YQ(A,true)}get redirected(){return Z.brandCheck(this,t),this[Qe].urlList.length>1}get status(){return Z.brandCheck(this,t),this[Qe].status}get ok(){return Z.brandCheck(this,t),this[Qe].status>=200&&this[Qe].status<=299}get statusText(){return Z.brandCheck(this,t),this[Qe].statusText}get headers(){return Z.brandCheck(this,t),this[hA]}get body(){return Z.brandCheck(this,t),this[Qe].body?this[Qe].body.stream:null}get bodyUsed(){return Z.brandCheck(this,t),!!this[Qe].body&&cg.isDisturbed(this[Qe].body.stream)}clone(){if(Z.brandCheck(this,t),tb(this))throw Z.errors.exception({header:"Response.clone",message:"Body has already been consumed."});let e=gg(this[Qe]);return OQ&&this[Qe].body?.stream&&WQ.register(this,new WeakRef(this[Qe].body.stream)),En(e,jN(this[hA]))}[GQ.inspect.custom](e,A){A.depth===null&&(A.depth=2),A.colors??=true;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 ${GQ.formatWithOptions(A,r)}`}};eb(or);Object.defineProperties(or.prototype,{type:gt,url:gt,status:gt,ok:gt,redirected:gt,statusText:gt,headers:gt,clone:gt,body:gt,bodyUsed:gt,[Symbol.toStringTag]:{value:"Response",configurable:true}});Object.defineProperties(or,{json:gt,redirect:gt,error:gt});function gg(t){if(t.internalResponse)return qQ(gg(t.internalResponse),t.type);let e=ss({...t,body:null});return t.body!=null&&(e.body=$N(e,t.body)),e}function ss(t){return {aborted:false,rangeRequested:false,timingAllowPassed:false,requestIncludesCredentials:false,type:"default",status:200,timingInfo:null,cacheState:"",statusText:"",...t,headersList:t?.headersList?new vQ(t?.headersList):new vQ,urlList:t?.urlList?[...t.urlList]:[]}}function no(t){let e=ob(t);return ss({type:"error",status:0,error:e?t:new Error(t&&String(t)),aborted:t&&t.name==="AbortError"})}function Ib(t){return t.type==="error"&&t.status===0}function ro(t,e){return e={internalResponse:t,...e},new Proxy(t,{get(A,r){return r in e?e[r]:A[r]},set(A,r,s){return lg(!(r in e)),A[r]=s,true}})}function qQ(t,e){if(e==="basic")return ro(t,{type:"basic",headersList:t.headersList});if(e==="cors")return ro(t,{type:"cors",headersList:t.headersList});if(e==="opaque")return ro(t,{type:"opaque",urlList:Object.freeze([]),status:0,statusText:"",body:null});if(e==="opaqueredirect")return ro(t,{type:"opaqueredirect",status:0,statusText:"",headersList:[],body:null});lg(false);}function Cb(t,e=null){return lg(rb(t)),sb(t)?no(Object.assign(new DOMException("The operation was aborted.","AbortError"),{cause:e})):no(Object.assign(new DOMException("Request was cancelled."),{cause:e}))}function HQ(t,e,A){if(e.status!==null&&(e.status<200||e.status>599))throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.');if("statusText"in e&&e.statusText!=null&&!Ab(String(e.statusText)))throw new TypeError("Invalid statusText");if("status"in e&&e.status!=null&&(t[Qe].status=e.status),"statusText"in e&&e.statusText!=null&&(t[Qe].statusText=e.statusText),"headers"in e&&e.headers!=null&&XN(t[hA],e.headers),A){if(gb.includes(t.status))throw Z.errors.exception({header:"Response constructor",message:`Invalid response status code ${t.status}`});t[Qe].body=A.body,A.type!=null&&!t[Qe].headersList.contains("content-type",true)&&t[Qe].headersList.append("content-type",A.type,true);}}function En(t,e){let A=new or(so);return A[Qe]=t,A[hA]=new JQ(so),PQ(A[hA],t.headersList),VQ(A[hA],e),OQ&&t.body?.stream&&WQ.register(A,new WeakRef(t.body.stream)),A}Z.converters.ReadableStream=Z.interfaceConverter(ReadableStream);Z.converters.FormData=Z.interfaceConverter(ub);Z.converters.URLSearchParams=Z.interfaceConverter(URLSearchParams);Z.converters.XMLHttpRequestBodyInit=function(t,e,A){return typeof t=="string"?Z.converters.USVString(t,e,A):nb(t)?Z.converters.Blob(t,e,A,{strict:false}):ArrayBuffer.isView(t)||Eb.isArrayBuffer(t)?Z.converters.BufferSource(t,e,A):cg.isFormDataLike(t)?Z.converters.FormData(t,e,A,{strict:false}):t instanceof URLSearchParams?Z.converters.URLSearchParams(t,e,A):Z.converters.DOMString(t,e,A)};Z.converters.BodyInit=function(t,e,A){return t instanceof ReadableStream?Z.converters.ReadableStream(t,e,A):t?.[Symbol.asyncIterator]?t:Z.converters.XMLHttpRequestBodyInit(t,e,A)};Z.converters.ResponseInit=Z.dictionaryConverter([{key:"status",converter:Z.converters["unsigned short"],defaultValue:()=>200},{key:"statusText",converter:Z.converters.ByteString,defaultValue:()=>""},{key:"headers",converter:Z.converters.HeadersInit}]);_Q.exports={isNetworkError:Ib,makeNetworkError:no,makeResponse:ss,makeAppropriateNetworkError:Cb,filterResponse:qQ,Response:or,cloneResponse:gg,fromInnerResponse:En};});var XQ=S((QY,KQ)=>{var{kConnected:zQ,kSize:ZQ}=de(),ug=class{constructor(e){this.value=e;}deref(){return this.value[zQ]===0&&this.value[ZQ]===0?void 0:this.value}},Eg=class{constructor(e){this.finalizer=e;}register(e,A){e.on&&e.on("disconnect",()=>{e[zQ]===0&&e[ZQ]===0&&this.finalizer(A);});}unregister(e){}};KQ.exports=function(){return process.env.NODE_V8_COVERAGE&&process.version.startsWith("v18")?(process._rawDebug("Using compatibility WeakRef and FinalizationRegistry"),{WeakRef:ug,FinalizationRegistry:Eg}):{WeakRef,FinalizationRegistry}};});var ns=S((BY,uB)=>{var{extractBody:db,mixinBody:Qb,cloneBody:Bb,bodyUnusable:jQ}=xr(),{Headers:oB,fill:fb,HeadersList:co,setHeadersGuard:Ig,getHeadersGuard:pb,setHeadersList:aB,getHeadersList:$Q}=ir(),{FinalizationRegistry:wb}=XQ()(),oo=j(),eB=R("util"),{isValidHTTPToken:mb,sameOrigin:tB,environmentSettingsObject:io}=ot(),{forbiddenMethodsSet:yb,corsSafeListedMethodsSet:Db,referrerPolicy:Sb,requestRedirect:Rb,requestMode:Fb,requestCredentials:kb,requestCache:Nb,requestDuplex:bb}=vs(),{kEnumerableProperty:Me,normalizedMethodRecordsBase:Mb,normalizedMethodRecords:Lb}=oo,{kHeaders:ut,kSignal:ao,kState:Ie,kDispatcher:hg}=pA(),{webidl:V}=Oe(),{URLSerializer:Ub}=je(),{kConstruct:lo}=de(),Tb=R("assert"),{getMaxListeners:AB,setMaxListeners:rB,getEventListeners:vb,defaultMaxListeners:sB}=R("events"),xb=Symbol("abortController"),cB=new wb(({signal:t,abort:e})=>{t.removeEventListener("abort",e);}),go=new WeakMap;function nB(t){return e;function e(){let A=t.deref();if(A!==void 0){cB.unregister(e),this.removeEventListener("abort",e),A.abort(this.reason);let r=go.get(A.signal);if(r!==void 0){if(r.size!==0){for(let s of r){let n=s.deref();n!==void 0&&n.abort(this.reason);}r.clear();}go.delete(A.signal);}}}}var iB=false,LA=class t{constructor(e,A={}){if(V.util.markAsUncloneable(this),e===lo)return;let r="Request constructor";V.argumentLengthCheck(arguments,1,r),e=V.converters.RequestInfo(e,r,"input"),A=V.converters.RequestInit(A,r,"init");let s=null,n=null,i=io.settingsObject.baseUrl,o=null;if(typeof e=="string"){this[hg]=A.dispatcher;let I;try{I=new URL(e,i);}catch(Q){throw new TypeError("Failed to parse URL from "+e,{cause:Q})}if(I.username||I.password)throw new TypeError("Request cannot be constructed from a URL that includes credentials: "+e);s=uo({urlList:[I]}),n="cors";}else this[hg]=A.dispatcher||e[hg],Tb(e instanceof t),s=e[Ie],o=e[ao];let a=io.settingsObject.origin,c="client";if(s.window?.constructor?.name==="EnvironmentSettingsObject"&&tB(s.window,a)&&(c=s.window),A.window!=null)throw new TypeError(`'window' option '${c}' must be null`);"window"in A&&(c="no-window"),s=uo({method:s.method,headersList:s.headersList,unsafeRequest:s.unsafeRequest,client:io.settingsObject,window:c,priority:s.priority,origin:s.origin,referrer:s.referrer,referrerPolicy:s.referrerPolicy,mode:s.mode,credentials:s.credentials,cache:s.cache,redirect:s.redirect,integrity:s.integrity,keepalive:s.keepalive,reloadNavigation:s.reloadNavigation,historyNavigation:s.historyNavigation,urlList:[...s.urlList]});let g=Object.keys(A).length!==0;if(g&&(s.mode==="navigate"&&(s.mode="same-origin"),s.reloadNavigation=false,s.historyNavigation=false,s.origin="client",s.referrer="client",s.referrerPolicy="",s.url=s.urlList[s.urlList.length-1],s.urlList=[s.url]),A.referrer!==void 0){let I=A.referrer;if(I==="")s.referrer="no-referrer";else {let Q;try{Q=new URL(I,i);}catch(u){throw new TypeError(`Referrer "${I}" is not a valid URL.`,{cause:u})}Q.protocol==="about:"&&Q.hostname==="client"||a&&!tB(Q,io.settingsObject.baseUrl)?s.referrer="client":s.referrer=Q;}}A.referrerPolicy!==void 0&&(s.referrerPolicy=A.referrerPolicy);let E;if(A.mode!==void 0?E=A.mode:E=n,E==="navigate")throw V.errors.exception({header:"Request constructor",message:"invalid request mode navigate."});if(E!=null&&(s.mode=E),A.credentials!==void 0&&(s.credentials=A.credentials),A.cache!==void 0&&(s.cache=A.cache),s.cache==="only-if-cached"&&s.mode!=="same-origin")throw new TypeError("'only-if-cached' can be set only with 'same-origin' mode");if(A.redirect!==void 0&&(s.redirect=A.redirect),A.integrity!=null&&(s.integrity=String(A.integrity)),A.keepalive!==void 0&&(s.keepalive=!!A.keepalive),A.method!==void 0){let I=A.method,Q=Lb[I];if(Q!==void 0)s.method=Q;else {if(!mb(I))throw new TypeError(`'${I}' is not a valid HTTP method.`);let u=I.toUpperCase();if(yb.has(u))throw new TypeError(`'${I}' HTTP method is unsupported.`);I=Mb[u]??I,s.method=I;}!iB&&s.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"}),iB=true);}A.signal!==void 0&&(o=A.signal),this[Ie]=s;let B=new AbortController;if(this[ao]=B.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)B.abort(o.reason);else {this[xb]=B;let I=new WeakRef(B),Q=nB(I);try{(typeof AB=="function"&&AB(o)===sB||vb(o,"abort").length>=sB)&&rB(1500,o);}catch{}oo.addAbortListener(o,Q),cB.register(B,{signal:o,abort:Q},Q);}}if(this[ut]=new oB(lo),aB(this[ut],s.headersList),Ig(this[ut],"request"),E==="no-cors"){if(!Db.has(s.method))throw new TypeError(`'${s.method} is unsupported in no-cors mode.`);Ig(this[ut],"request-no-cors");}if(g){let I=$Q(this[ut]),Q=A.headers!==void 0?A.headers:new co(I);if(I.clear(),Q instanceof co){for(let{name:u,value:p}of Q.rawValues())I.append(u,p,false);I.cookies=Q.cookies;}else fb(this[ut],Q);}let l=e instanceof t?e[Ie].body:null;if((A.body!=null||l!=null)&&(s.method==="GET"||s.method==="HEAD"))throw new TypeError("Request with GET/HEAD method cannot have body.");let h=null;if(A.body!=null){let[I,Q]=db(A.body,s.keepalive);h=I,Q&&!$Q(this[ut]).contains("content-type",true)&&this[ut].append("content-type",Q);}let d=h??l;if(d!=null&&d.source==null){if(h!=null&&A.duplex==null)throw new TypeError("RequestInit: duplex option is required when sending a body.");if(s.mode!=="same-origin"&&s.mode!=="cors")throw new TypeError('If request is made from ReadableStream, mode should be "same-origin" or "cors"');s.useCORSPreflightFlag=true;}let C=d;if(h==null&&l!=null){if(jQ(e))throw new TypeError("Cannot construct a Request with a Request object that has already been used.");let I=new TransformStream;l.stream.pipeThrough(I),C={source:l.source,length:l.length,stream:I.readable};}this[Ie].body=C;}get method(){return V.brandCheck(this,t),this[Ie].method}get url(){return V.brandCheck(this,t),Ub(this[Ie].url)}get headers(){return V.brandCheck(this,t),this[ut]}get destination(){return V.brandCheck(this,t),this[Ie].destination}get referrer(){return V.brandCheck(this,t),this[Ie].referrer==="no-referrer"?"":this[Ie].referrer==="client"?"about:client":this[Ie].referrer.toString()}get referrerPolicy(){return V.brandCheck(this,t),this[Ie].referrerPolicy}get mode(){return V.brandCheck(this,t),this[Ie].mode}get credentials(){return this[Ie].credentials}get cache(){return V.brandCheck(this,t),this[Ie].cache}get redirect(){return V.brandCheck(this,t),this[Ie].redirect}get integrity(){return V.brandCheck(this,t),this[Ie].integrity}get keepalive(){return V.brandCheck(this,t),this[Ie].keepalive}get isReloadNavigation(){return V.brandCheck(this,t),this[Ie].reloadNavigation}get isHistoryNavigation(){return V.brandCheck(this,t),this[Ie].historyNavigation}get signal(){return V.brandCheck(this,t),this[ao]}get body(){return V.brandCheck(this,t),this[Ie].body?this[Ie].body.stream:null}get bodyUsed(){return V.brandCheck(this,t),!!this[Ie].body&&oo.isDisturbed(this[Ie].body.stream)}get duplex(){return V.brandCheck(this,t),"half"}clone(){if(V.brandCheck(this,t),jQ(this))throw new TypeError("unusable");let e=lB(this[Ie]),A=new AbortController;if(this.signal.aborted)A.abort(this.signal.reason);else {let r=go.get(this.signal);r===void 0&&(r=new Set,go.set(this.signal,r));let s=new WeakRef(A);r.add(s),oo.addAbortListener(A.signal,nB(s));}return gB(e,A.signal,pb(this[ut]))}[eB.inspect.custom](e,A){A.depth===null&&(A.depth=2),A.colors??=true;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 ${eB.formatWithOptions(A,r)}`}};Qb(LA);function uo(t){return {method:t.method??"GET",localURLsOnly:t.localURLsOnly??false,unsafeRequest:t.unsafeRequest??false,body:t.body??null,client:t.client??null,reservedClient:t.reservedClient??null,replacesClientId:t.replacesClientId??"",window:t.window??"client",keepalive:t.keepalive??false,serviceWorkers:t.serviceWorkers??"all",initiator:t.initiator??"",destination:t.destination??"",priority:t.priority??null,origin:t.origin??"client",policyContainer:t.policyContainer??"client",referrer:t.referrer??"client",referrerPolicy:t.referrerPolicy??"",mode:t.mode??"no-cors",useCORSPreflightFlag:t.useCORSPreflightFlag??false,credentials:t.credentials??"same-origin",useCredentials:t.useCredentials??false,cache:t.cache??"default",redirect:t.redirect??"follow",integrity:t.integrity??"",cryptoGraphicsNonceMetadata:t.cryptoGraphicsNonceMetadata??"",parserMetadata:t.parserMetadata??"",reloadNavigation:t.reloadNavigation??false,historyNavigation:t.historyNavigation??false,userActivation:t.userActivation??false,taintedOrigin:t.taintedOrigin??false,redirectCount:t.redirectCount??0,responseTainting:t.responseTainting??"basic",preventNoCacheCacheControlHeaderModification:t.preventNoCacheCacheControlHeaderModification??false,done:t.done??false,timingAllowFailed:t.timingAllowFailed??false,urlList:t.urlList,url:t.urlList[0],headersList:t.headersList?new co(t.headersList):new co}}function lB(t){let e=uo({...t,body:null});return t.body!=null&&(e.body=Bb(e,t.body)),e}function gB(t,e,A){let r=new LA(lo);return r[Ie]=t,r[ao]=e,r[ut]=new oB(lo),aB(r[ut],t.headersList),Ig(r[ut],A),r}Object.defineProperties(LA.prototype,{method:Me,url:Me,headers:Me,redirect:Me,clone:Me,signal:Me,duplex:Me,destination:Me,body:Me,bodyUsed:Me,isHistoryNavigation:Me,isReloadNavigation:Me,keepalive:Me,integrity:Me,cache:Me,credentials:Me,attribute:Me,referrerPolicy:Me,referrer:Me,mode:Me,[Symbol.toStringTag]:{value:"Request",configurable:true}});V.converters.Request=V.interfaceConverter(LA);V.converters.RequestInfo=function(t,e,A){return typeof t=="string"?V.converters.USVString(t,e,A):t instanceof LA?V.converters.Request(t,e,A):V.converters.USVString(t,e,A)};V.converters.AbortSignal=V.interfaceConverter(AbortSignal);V.converters.RequestInit=V.dictionaryConverter([{key:"method",converter:V.converters.ByteString},{key:"headers",converter:V.converters.HeadersInit},{key:"body",converter:V.nullableConverter(V.converters.BodyInit)},{key:"referrer",converter:V.converters.USVString},{key:"referrerPolicy",converter:V.converters.DOMString,allowedValues:Sb},{key:"mode",converter:V.converters.DOMString,allowedValues:Fb},{key:"credentials",converter:V.converters.DOMString,allowedValues:kb},{key:"cache",converter:V.converters.DOMString,allowedValues:Nb},{key:"redirect",converter:V.converters.DOMString,allowedValues:Rb},{key:"integrity",converter:V.converters.DOMString},{key:"keepalive",converter:V.converters.boolean},{key:"signal",converter:V.nullableConverter(t=>V.converters.AbortSignal(t,"RequestInit","signal",{strict:false}))},{key:"window",converter:V.converters.any},{key:"duplex",converter:V.converters.DOMString,allowedValues:bb},{key:"dispatcher",converter:V.converters.any}]);uB.exports={Request:LA,makeRequest:uo,fromInnerRequest:gB,cloneRequest:lB};});var Cn=S((fY,RB)=>{var{makeNetworkError:ce,makeAppropriateNetworkError:Eo,filterResponse:Cg,makeResponse:ho,fromInnerResponse:Gb}=hn(),{HeadersList:EB}=ir(),{Request:Yb,cloneRequest:Hb}=ns(),UA=R("zlib"),{bytesMatch:Jb,makePolicyContainer:Vb,clonePolicyContainer:Pb,requestBadPort:Ob,TAOCheck:Wb,appendRequestOriginHeader:qb,responseLocationURL:_b,requestCurrentURL:eA,setRequestReferrerPolicyOnRedirect:zb,tryUpgradeRequestToAPotentiallyTrustworthyURL:Zb,createOpaqueTimingInfo:pg,appendFetchMetadata:Kb,corsCheck:Xb,crossOriginResourcePolicyCheck:jb,determineRequestsReferrer:$b,coarsenedSharedCurrentTime:In,createDeferredPromise:eM,isBlobLike:tM,sameOrigin:fg,isCancelled:ar,isAborted:hB,isErrorLike:AM,fullyReadBody:rM,readableStreamClose:sM,isomorphicEncode:Io,urlIsLocal:nM,urlIsHttpHttpsScheme:wg,urlHasHttpsScheme:iM,clampAndCoarsenConnectionTimingInfo:oM,simpleRangeHeaderValue:aM,buildContentRange:cM,createInflate:lM,extractMimeType:gM}=ot(),{kState:QB,kDispatcher:uM}=pA(),cr=R("assert"),{safelyExtractBody:mg,extractBody:IB}=xr(),{redirectStatusSet:BB,nullBodyStatus:fB,safeMethodsSet:EM,requestBodyHeader:hM,subresourceSet:IM}=vs(),CM=R("events"),{Readable:dM,pipeline:QM,finished:BM}=R("stream"),{addAbortListener:fM,isErrored:pM,isReadable:Co,bufferToLowerCasedHeaderName:CB}=j(),{dataURLProcessor:wM,serializeAMimeType:mM,minimizeSupportedMimeType:yM}=je(),{getGlobalDispatcher:DM}=$i(),{webidl:SM}=Oe(),{STATUS_CODES:RM}=R("http"),FM=["GET","HEAD"],kM=typeof __UNDICI_IS_NODE__<"u"||typeof esbuildDetection<"u"?"node":"undici",dg,Qo=class extends CM{constructor(e){super(),this.dispatcher=e,this.connection=null,this.dump=false,this.state="ongoing";}terminate(e){this.state==="ongoing"&&(this.state="terminated",this.connection?.destroy(e),this.emit("terminated",e));}abort(e){this.state==="ongoing"&&(this.state="aborted",e||(e=new DOMException("The operation was aborted.","AbortError")),this.serializedAbortReason=e,this.connection?.destroy(e),this.emit("terminated",e));}};function NM(t){pB(t,"fetch");}function bM(t,e=void 0){SM.argumentLengthCheck(arguments,1,"globalThis.fetch");let A=eM(),r;try{r=new Yb(t,e);}catch(g){return A.reject(g),A.promise}let s=r[QB];if(r.signal.aborted)return Qg(A,s,null,r.signal.reason),A.promise;s.client.globalObject?.constructor?.name==="ServiceWorkerGlobalScope"&&(s.serviceWorkers="none");let i=null,o=false,a=null;return fM(r.signal,()=>{o=true,cr(a!=null),a.abort(r.signal.reason);let g=i?.deref();Qg(A,s,g,r.signal.reason);}),a=mB({request:s,processResponseEndOfBody:NM,processResponse:g=>{if(!o){if(g.aborted){Qg(A,s,i,a.serializedAbortReason);return}if(g.type==="error"){A.reject(new TypeError("fetch failed",{cause:g.error}));return}i=new WeakRef(Gb(g,"immutable")),A.resolve(i.deref()),A=null;}},dispatcher:r[uM]}),A.promise}function pB(t,e="other"){if(t.type==="error"&&t.aborted||!t.urlList?.length)return;let A=t.urlList[0],r=t.timingInfo,s=t.cacheState;wg(A)&&r!==null&&(t.timingAllowPassed||(r=pg({startTime:r.startTime}),s=""),r.endTime=In(),t.timingInfo=r,wB(r,A.href,e,globalThis,s));}var wB=performance.markResourceTiming;function Qg(t,e,A,r){if(t&&t.reject(r),e.body!=null&&Co(e.body?.stream)&&e.body.stream.cancel(r).catch(n=>{if(n.code!=="ERR_INVALID_STATE")throw n}),A==null)return;let s=A[QB];s.body!=null&&Co(s.body?.stream)&&s.body.stream.cancel(r).catch(n=>{if(n.code!=="ERR_INVALID_STATE")throw n});}function mB({request:t,processRequestBodyChunkLength:e,processRequestEndOfBody:A,processResponse:r,processResponseEndOfBody:s,processResponseConsumeBody:n,useParallelQueue:i=false,dispatcher:o=DM()}){cr(o);let a=null,c=false;t.client!=null&&(a=t.client.globalObject,c=t.client.crossOriginIsolatedCapability);let g=In(c),E=pg({startTime:g}),B={controller:new Qo(o),request:t,timingInfo:E,processRequestBodyChunkLength:e,processRequestEndOfBody:A,processResponse:r,processResponseConsumeBody:n,processResponseEndOfBody:s,taskDestination:a,crossOriginIsolatedCapability:c};return cr(!t.body||t.body.stream),t.window==="client"&&(t.window=t.client?.globalObject?.constructor?.name==="Window"?t.client:"no-window"),t.origin==="client"&&(t.origin=t.client.origin),t.policyContainer==="client"&&(t.client!=null?t.policyContainer=Pb(t.client.policyContainer):t.policyContainer=Vb()),t.headersList.contains("accept",true)||t.headersList.append("accept","*/*",true),t.headersList.contains("accept-language",true)||t.headersList.append("accept-language","*",true),t.priority,IM.has(t.destination),yB(B).catch(l=>{B.controller.terminate(l);}),B.controller}async function yB(t,e=false){let A=t.request,r=null;if(A.localURLsOnly&&!nM(eA(A))&&(r=ce("local URLs only")),Zb(A),Ob(A)==="blocked"&&(r=ce("bad port")),A.referrerPolicy===""&&(A.referrerPolicy=A.policyContainer.referrerPolicy),A.referrer!=="no-referrer"&&(A.referrer=$b(A)),r===null&&(r=await(async()=>{let n=eA(A);return fg(n,A.url)&&A.responseTainting==="basic"||n.protocol==="data:"||A.mode==="navigate"||A.mode==="websocket"?(A.responseTainting="basic",await dB(t)):A.mode==="same-origin"?ce('request mode cannot be "same-origin"'):A.mode==="no-cors"?A.redirect!=="follow"?ce('redirect mode cannot be "follow" for "no-cors" request'):(A.responseTainting="opaque",await dB(t)):wg(eA(A))?(A.responseTainting="cors",await DB(t)):ce("URL scheme must be a HTTP(S) scheme")})()),e)return r;r.status!==0&&!r.internalResponse&&(A.responseTainting,A.responseTainting==="basic"?r=Cg(r,"basic"):A.responseTainting==="cors"?r=Cg(r,"cors"):A.responseTainting==="opaque"?r=Cg(r,"opaque"):cr(false));let s=r.status===0?r:r.internalResponse;if(s.urlList.length===0&&s.urlList.push(...A.urlList),A.timingAllowFailed||(r.timingAllowPassed=true),r.type==="opaque"&&s.status===206&&s.rangeRequested&&!A.headers.contains("range",true)&&(r=s=ce()),r.status!==0&&(A.method==="HEAD"||A.method==="CONNECT"||fB.includes(s.status))&&(s.body=null,t.controller.dump=true),A.integrity){let n=o=>Bg(t,ce(o));if(A.responseTainting==="opaque"||r.body==null){n(r.error);return}let i=o=>{if(!Jb(o,A.integrity)){n("integrity mismatch");return}r.body=mg(o)[0],Bg(t,r);};await rM(r.body,i,n);}else Bg(t,r);}function dB(t){if(ar(t)&&t.request.redirectCount===0)return Promise.resolve(Eo(t));let{request:e}=t,{protocol:A}=eA(e);switch(A){case "about:":return Promise.resolve(ce("about scheme is not supported"));case "blob:":{dg||(dg=R("buffer").resolveObjectURL);let r=eA(e);if(r.search.length!==0)return Promise.resolve(ce("NetworkError when attempting to fetch resource."));let s=dg(r.toString());if(e.method!=="GET"||!tM(s))return Promise.resolve(ce("invalid method"));let n=ho(),i=s.size,o=Io(`${i}`),a=s.type;if(e.headersList.contains("range",true)){n.rangeRequested=true;let c=e.headersList.get("range",true),g=aM(c,true);if(g==="failure")return Promise.resolve(ce("failed to fetch the data URL"));let{rangeStartValue:E,rangeEndValue:B}=g;if(E===null)E=i-B,B=E+B-1;else {if(E>=i)return Promise.resolve(ce("Range start is greater than the blob's size."));(B===null||B>=i)&&(B=i-1);}let l=s.slice(E,B,a),h=IB(l);n.body=h[0];let d=Io(`${l.size}`),C=cM(E,B,i);n.status=206,n.statusText="Partial Content",n.headersList.set("content-length",d,true),n.headersList.set("content-type",a,true),n.headersList.set("content-range",C,true);}else {let c=IB(s);n.statusText="OK",n.body=c[0],n.headersList.set("content-length",o,true),n.headersList.set("content-type",a,true);}return Promise.resolve(n)}case "data:":{let r=eA(e),s=wM(r);if(s==="failure")return Promise.resolve(ce("failed to fetch the data URL"));let n=mM(s.mimeType);return Promise.resolve(ho({statusText:"OK",headersList:[["content-type",{name:"Content-Type",value:n}]],body:mg(s.body)[0]}))}case "file:":return Promise.resolve(ce("not implemented... yet..."));case "http:":case "https:":return DB(t).catch(r=>ce(r));default:return Promise.resolve(ce("unknown scheme"))}}function MM(t,e){t.request.done=true,t.processResponseDone!=null&&queueMicrotask(()=>t.processResponseDone(e));}function Bg(t,e){let A=t.timingInfo,r=()=>{let n=Date.now();t.request.destination==="document"&&(t.controller.fullTimingInfo=A),t.controller.reportTimingSteps=()=>{if(t.request.url.protocol!=="https:")return;A.endTime=n;let o=e.cacheState,a=e.bodyInfo;e.timingAllowPassed||(A=pg(A),o="");let c=0;if(t.request.mode!=="navigator"||!e.hasCrossOriginRedirects){c=e.status;let g=gM(e.headersList);g!=="failure"&&(a.contentType=yM(g));}t.request.initiatorType!=null&&wB(A,t.request.url.href,t.request.initiatorType,globalThis,o,a,c);};let i=()=>{t.request.done=true,t.processResponseEndOfBody!=null&&queueMicrotask(()=>t.processResponseEndOfBody(e)),t.request.initiatorType!=null&&t.controller.reportTimingSteps();};queueMicrotask(()=>i());};t.processResponse!=null&&queueMicrotask(()=>{t.processResponse(e),t.processResponse=null;});let s=e.type==="error"?e:e.internalResponse??e;s.body==null?r():BM(s.body.stream,()=>{r();});}async function DB(t){let e=t.request,A=null,r=null,s=t.timingInfo;if(e.serviceWorkers,A===null){if(e.redirect==="follow"&&(e.serviceWorkers="none"),r=A=await SB(t),e.responseTainting==="cors"&&Xb(e,A)==="failure")return ce("cors failure");Wb(e,A)==="failure"&&(e.timingAllowFailed=true);}return (e.responseTainting==="opaque"||A.type==="opaque")&&jb(e.origin,e.client,e.destination,r)==="blocked"?ce("blocked"):(BB.has(r.status)&&(e.redirect!=="manual"&&t.controller.connection.destroy(void 0,false),e.redirect==="error"?A=ce("unexpected redirect"):e.redirect==="manual"?A=r:e.redirect==="follow"?A=await LM(t,A):cr(false)),A.timingInfo=s,A)}function LM(t,e){let A=t.request,r=e.internalResponse?e.internalResponse:e,s;try{if(s=_b(r,eA(A).hash),s==null)return e}catch(i){return Promise.resolve(ce(i))}if(!wg(s))return Promise.resolve(ce("URL scheme must be a HTTP(S) scheme"));if(A.redirectCount===20)return Promise.resolve(ce("redirect count exceeded"));if(A.redirectCount+=1,A.mode==="cors"&&(s.username||s.password)&&!fg(A,s))return Promise.resolve(ce('cross origin not allowed for request mode "cors"'));if(A.responseTainting==="cors"&&(s.username||s.password))return Promise.resolve(ce('URL cannot contain credentials for request mode "cors"'));if(r.status!==303&&A.body!=null&&A.body.source==null)return Promise.resolve(ce());if([301,302].includes(r.status)&&A.method==="POST"||r.status===303&&!FM.includes(A.method)){A.method="GET",A.body=null;for(let i of hM)A.headersList.delete(i);}fg(eA(A),s)||(A.headersList.delete("authorization",true),A.headersList.delete("proxy-authorization",true),A.headersList.delete("cookie",true),A.headersList.delete("host",true)),A.body!=null&&(cr(A.body.source!=null),A.body=mg(A.body.source)[0]);let n=t.timingInfo;return n.redirectEndTime=n.postRedirectStartTime=In(t.crossOriginIsolatedCapability),n.redirectStartTime===0&&(n.redirectStartTime=n.startTime),A.urlList.push(s),zb(A,r),yB(t,true)}async function SB(t,e=false,A=false){let r=t.request,s=null,n=null,i=null;r.window==="no-window"&&r.redirect==="error"?(s=t,n=r):(n=Hb(r),s={...t},s.request=n);let c=r.credentials==="include"||r.credentials==="same-origin"&&r.responseTainting==="basic",g=n.body?n.body.length:null,E=null;if(n.body==null&&["POST","PUT"].includes(n.method)&&(E="0"),g!=null&&(E=Io(`${g}`)),E!=null&&n.headersList.append("content-length",E,true),g!=null&&n.keepalive,n.referrer instanceof URL&&n.headersList.append("referer",Io(n.referrer.href),true),qb(n),Kb(n),n.headersList.contains("user-agent",true)||n.headersList.append("user-agent",kM),n.cache==="default"&&(n.headersList.contains("if-modified-since",true)||n.headersList.contains("if-none-match",true)||n.headersList.contains("if-unmodified-since",true)||n.headersList.contains("if-match",true)||n.headersList.contains("if-range",true))&&(n.cache="no-store"),n.cache==="no-cache"&&!n.preventNoCacheCacheControlHeaderModification&&!n.headersList.contains("cache-control",true)&&n.headersList.append("cache-control","max-age=0",true),(n.cache==="no-store"||n.cache==="reload")&&(n.headersList.contains("pragma",true)||n.headersList.append("pragma","no-cache",true),n.headersList.contains("cache-control",true)||n.headersList.append("cache-control","no-cache",true)),n.headersList.contains("range",true)&&n.headersList.append("accept-encoding","identity",true),n.headersList.contains("accept-encoding",true)||(iM(eA(n))?n.headersList.append("accept-encoding","br, gzip, deflate",true):n.headersList.append("accept-encoding","gzip, deflate",true)),n.headersList.delete("host",true),(n.cache="no-store"),n.cache!=="no-store"&&n.cache,i==null){if(n.cache==="only-if-cached")return ce("only if cached");let B=await UM(s,c,A);!EM.has(n.method)&&B.status>=200&&B.status<=399,i==null&&(i=B);}if(i.urlList=[...n.urlList],n.headersList.contains("range",true)&&(i.rangeRequested=true),i.requestIncludesCredentials=c,i.status===407)return r.window==="no-window"?ce():ar(t)?Eo(t):ce("proxy authentication required");if(i.status===421&&!A&&(r.body==null||r.body.source!=null)){if(ar(t))return Eo(t);t.controller.connection.destroy(),i=await SB(t,e,true);}return i}async function UM(t,e=false,A=false){cr(!t.controller.connection||t.controller.connection.destroyed),t.controller.connection={abort:null,destroyed:false,destroy(h,d=true){this.destroyed||(this.destroyed=true,d&&this.abort?.(h??new DOMException("The operation was aborted.","AbortError")));}};let r=t.request,s=null,n=t.timingInfo;(r.cache="no-store");r.mode;let a=null;if(r.body==null&&t.processRequestEndOfBody)queueMicrotask(()=>t.processRequestEndOfBody());else if(r.body!=null){let h=async function*(I){ar(t)||(yield I,t.processRequestBodyChunkLength?.(I.byteLength));},d=()=>{ar(t)||t.processRequestEndOfBody&&t.processRequestEndOfBody();},C=I=>{ar(t)||(I.name==="AbortError"?t.controller.abort():t.controller.terminate(I));};a=(async function*(){try{for await(let I of r.body.stream)yield*h(I);d();}catch(I){C(I);}})();}try{let{body:h,status:d,statusText:C,headersList:I,socket:Q}=await l({body:a});if(Q)s=ho({status:d,statusText:C,headersList:I,socket:Q});else {let u=h[Symbol.asyncIterator]();t.controller.next=()=>u.next(),s=ho({status:d,statusText:C,headersList:I});}}catch(h){return h.name==="AbortError"?(t.controller.connection.destroy(),Eo(t,h)):ce(h)}let c=async()=>{await t.controller.resume();},g=h=>{ar(t)||t.controller.abort(h);},E=new ReadableStream({async start(h){t.controller.controller=h;},async pull(h){await c();},async cancel(h){await g(h);},type:"bytes"});s.body={stream:E,source:null,length:null},t.controller.onAborted=B,t.controller.on("terminated",B),t.controller.resume=async()=>{for(;;){let h,d;try{let{done:I,value:Q}=await t.controller.next();if(hB(t))break;h=I?void 0:Q;}catch(I){t.controller.ended&&!n.encodedBodySize?h=void 0:(h=I,d=true);}if(h===void 0){sM(t.controller.controller),MM(t,s);return}if(n.decodedBodySize+=h?.byteLength??0,d){t.controller.terminate(h);return}let C=new Uint8Array(h);if(C.byteLength&&t.controller.controller.enqueue(C),pM(E)){t.controller.terminate();return}if(t.controller.controller.desiredSize<=0)return}};function B(h){hB(t)?(s.aborted=true,Co(E)&&t.controller.controller.error(t.controller.serializedAbortReason)):Co(E)&&t.controller.controller.error(new TypeError("terminated",{cause:AM(h)?h:void 0})),t.controller.connection.destroy();}return s;function l({body:h}){let d=eA(r),C=t.controller.dispatcher;return new Promise((I,Q)=>C.dispatch({path:d.pathname+d.search,origin:d.origin,method:r.method,body:C.isMockActive?r.body&&(r.body.source||r.body.stream):h,headers:r.headersList.entries,maxRedirections:0,upgrade:r.mode==="websocket"?"websocket":void 0},{body:null,abort:null,onConnect(u){let{connection:p}=t.controller;n.finalConnectionTimingInfo=oM(void 0,n.postRedirectStartTime,t.crossOriginIsolatedCapability),p.destroyed?u(new DOMException("The operation was aborted.","AbortError")):(t.controller.on("terminated",u),this.abort=p.abort=u),n.finalNetworkRequestStartTime=In(t.crossOriginIsolatedCapability);},onResponseStarted(){n.finalNetworkResponseStartTime=In(t.crossOriginIsolatedCapability);},onHeaders(u,p,f,D){if(u<200)return;let y="",U=new EB;for(let _=0;_<p.length;_+=2)U.append(CB(p[_]),p[_+1].toString("latin1"),true);y=U.get("location",true),this.body=new dM({read:f});let Y=[],v=y&&r.redirect==="follow"&&BB.has(u);if(r.method!=="HEAD"&&r.method!=="CONNECT"&&!fB.includes(u)&&!v){let _=U.get("content-encoding",true),z=_?_.toLowerCase().split(","):[],Nt=5;if(z.length>Nt)return Q(new Error(`too many content-encodings in response: ${z.length}, maximum allowed is ${Nt}`)),true;for(let he=z.length-1;he>=0;--he){let sA=z[he].trim();if(sA==="x-gzip"||sA==="gzip")Y.push(UA.createGunzip({flush:UA.constants.Z_SYNC_FLUSH,finishFlush:UA.constants.Z_SYNC_FLUSH}));else if(sA==="deflate")Y.push(lM({flush:UA.constants.Z_SYNC_FLUSH,finishFlush:UA.constants.Z_SYNC_FLUSH}));else if(sA==="br")Y.push(UA.createBrotliDecompress({flush:UA.constants.BROTLI_OPERATION_FLUSH,finishFlush:UA.constants.BROTLI_OPERATION_FLUSH}));else {Y.length=0;break}}}let O=this.onError.bind(this);return I({status:u,statusText:D,headersList:U,body:Y.length?QM(this.body,...Y,_=>{_&&this.onError(_);}).on("error",O):this.body.on("error",O)}),true},onData(u){if(t.controller.dump)return;let p=u;return n.encodedBodySize+=p.byteLength,this.body.push(p)},onComplete(){this.abort&&t.controller.off("terminated",this.abort),t.controller.onAborted&&t.controller.off("terminated",t.controller.onAborted),t.controller.ended=true,this.body.push(null);},onError(u){this.abort&&t.controller.off("terminated",this.abort),this.body?.destroy(u),t.controller.terminate(u),Q(u);},onUpgrade(u,p,f){if(u!==101)return;let D=new EB;for(let y=0;y<p.length;y+=2)D.append(CB(p[y]),p[y+1].toString("latin1"),true);return I({status:u,statusText:RM[u],headersList:D,socket:f}),true}}))}}RB.exports={fetch:bM,Fetch:Qo,fetching:mB,finalizeAndReportTiming:pB};});var yg=S((pY,FB)=>{FB.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 NB=S((wY,kB)=>{var{webidl:Et}=Oe(),Bo=Symbol("ProgressEvent state"),Dg=class t extends Event{constructor(e,A={}){e=Et.converters.DOMString(e,"ProgressEvent constructor","type"),A=Et.converters.ProgressEventInit(A??{}),super(e,A),this[Bo]={lengthComputable:A.lengthComputable,loaded:A.loaded,total:A.total};}get lengthComputable(){return Et.brandCheck(this,t),this[Bo].lengthComputable}get loaded(){return Et.brandCheck(this,t),this[Bo].loaded}get total(){return Et.brandCheck(this,t),this[Bo].total}};Et.converters.ProgressEventInit=Et.dictionaryConverter([{key:"lengthComputable",converter:Et.converters.boolean,defaultValue:()=>false},{key:"loaded",converter:Et.converters["unsigned long long"],defaultValue:()=>0},{key:"total",converter:Et.converters["unsigned long long"],defaultValue:()=>0},{key:"bubbles",converter:Et.converters.boolean,defaultValue:()=>false},{key:"cancelable",converter:Et.converters.boolean,defaultValue:()=>false},{key:"composed",converter:Et.converters.boolean,defaultValue:()=>false}]);kB.exports={ProgressEvent:Dg};});var MB=S((mY,bB)=>{function TM(t){if(!t)return "failure";switch(t.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"}}bB.exports={getEncoding:TM};});var HB=S((yY,YB)=>{var{kState:is,kError:Sg,kResult:LB,kAborted:dn,kLastProgressEventFired:Rg}=yg(),{ProgressEvent:vM}=NB(),{getEncoding:UB}=MB(),{serializeAMimeType:xM,parseMIMEType:TB}=je(),{types:GM}=R("util"),{StringDecoder:vB}=R("string_decoder"),{btoa:xB}=R("buffer"),YM={enumerable:true,writable:false,configurable:false};function HM(t,e,A,r){if(t[is]==="loading")throw new DOMException("Invalid state","InvalidStateError");t[is]="loading",t[LB]=null,t[Sg]=null;let n=e.stream().getReader(),i=[],o=n.read(),a=true;(async()=>{for(;!t[dn];)try{let{done:c,value:g}=await o;if(a&&!t[dn]&&queueMicrotask(()=>{TA("loadstart",t);}),a=!1,!c&&GM.isUint8Array(g))i.push(g),(t[Rg]===void 0||Date.now()-t[Rg]>=50)&&!t[dn]&&(t[Rg]=Date.now(),queueMicrotask(()=>{TA("progress",t);})),o=n.read();else if(c){queueMicrotask(()=>{t[is]="done";try{let E=JM(i,A,e.type,r);if(t[dn])return;t[LB]=E,TA("load",t);}catch(E){t[Sg]=E,TA("error",t);}t[is]!=="loading"&&TA("loadend",t);});break}}catch(c){if(t[dn])return;queueMicrotask(()=>{t[is]="done",t[Sg]=c,TA("error",t),t[is]!=="loading"&&TA("loadend",t);});break}})();}function TA(t,e){let A=new vM(t,{bubbles:false,cancelable:false});e.dispatchEvent(A);}function JM(t,e,A,r){switch(e){case "DataURL":{let s="data:",n=TB(A||"application/octet-stream");n!=="failure"&&(s+=xM(n)),s+=";base64,";let i=new vB("latin1");for(let o of t)s+=xB(i.write(o));return s+=xB(i.end()),s}case "Text":{let s="failure";if(r&&(s=UB(r)),s==="failure"&&A){let n=TB(A);n!=="failure"&&(s=UB(n.parameters.get("charset")));}return s==="failure"&&(s="UTF-8"),VM(t,s)}case "ArrayBuffer":return GB(t).buffer;case "BinaryString":{let s="",n=new vB("latin1");for(let i of t)s+=n.write(i);return s+=n.end(),s}}}function VM(t,e){let A=GB(t),r=PM(A),s=0;r!==null&&(e=r,s=r==="UTF-8"?3:2);let n=A.slice(s);return new TextDecoder(e).decode(n)}function PM(t){let[e,A,r]=t;return e===239&&A===187&&r===191?"UTF-8":e===254&&A===255?"UTF-16BE":e===255&&A===254?"UTF-16LE":null}function GB(t){let e=t.reduce((r,s)=>r+s.byteLength,0),A=0;return t.reduce((r,s)=>(r.set(s,A),A+=s.byteLength,r),new Uint8Array(e))}YB.exports={staticPropertyDescriptors:YM,readOperation:HM,fireAProgressEvent:TA};});var OB=S((DY,PB)=>{var{staticPropertyDescriptors:os,readOperation:fo,fireAProgressEvent:JB}=HB(),{kState:lr,kError:VB,kResult:po,kEvents:ie,kAborted:OM}=yg(),{webidl:le}=Oe(),{kEnumerableProperty:tt}=j(),Yt=class t extends EventTarget{constructor(){super(),this[lr]="empty",this[po]=null,this[VB]=null,this[ie]={loadend:null,error:null,abort:null,load:null,progress:null,loadstart:null};}readAsArrayBuffer(e){le.brandCheck(this,t),le.argumentLengthCheck(arguments,1,"FileReader.readAsArrayBuffer"),e=le.converters.Blob(e,{strict:false}),fo(this,e,"ArrayBuffer");}readAsBinaryString(e){le.brandCheck(this,t),le.argumentLengthCheck(arguments,1,"FileReader.readAsBinaryString"),e=le.converters.Blob(e,{strict:false}),fo(this,e,"BinaryString");}readAsText(e,A=void 0){le.brandCheck(this,t),le.argumentLengthCheck(arguments,1,"FileReader.readAsText"),e=le.converters.Blob(e,{strict:false}),A!==void 0&&(A=le.converters.DOMString(A,"FileReader.readAsText","encoding")),fo(this,e,"Text",A);}readAsDataURL(e){le.brandCheck(this,t),le.argumentLengthCheck(arguments,1,"FileReader.readAsDataURL"),e=le.converters.Blob(e,{strict:false}),fo(this,e,"DataURL");}abort(){if(this[lr]==="empty"||this[lr]==="done"){this[po]=null;return}this[lr]==="loading"&&(this[lr]="done",this[po]=null),this[OM]=true,JB("abort",this),this[lr]!=="loading"&&JB("loadend",this);}get readyState(){switch(le.brandCheck(this,t),this[lr]){case "empty":return this.EMPTY;case "loading":return this.LOADING;case "done":return this.DONE}}get result(){return le.brandCheck(this,t),this[po]}get error(){return le.brandCheck(this,t),this[VB]}get onloadend(){return le.brandCheck(this,t),this[ie].loadend}set onloadend(e){le.brandCheck(this,t),this[ie].loadend&&this.removeEventListener("loadend",this[ie].loadend),typeof e=="function"?(this[ie].loadend=e,this.addEventListener("loadend",e)):this[ie].loadend=null;}get onerror(){return le.brandCheck(this,t),this[ie].error}set onerror(e){le.brandCheck(this,t),this[ie].error&&this.removeEventListener("error",this[ie].error),typeof e=="function"?(this[ie].error=e,this.addEventListener("error",e)):this[ie].error=null;}get onloadstart(){return le.brandCheck(this,t),this[ie].loadstart}set onloadstart(e){le.brandCheck(this,t),this[ie].loadstart&&this.removeEventListener("loadstart",this[ie].loadstart),typeof e=="function"?(this[ie].loadstart=e,this.addEventListener("loadstart",e)):this[ie].loadstart=null;}get onprogress(){return le.brandCheck(this,t),this[ie].progress}set onprogress(e){le.brandCheck(this,t),this[ie].progress&&this.removeEventListener("progress",this[ie].progress),typeof e=="function"?(this[ie].progress=e,this.addEventListener("progress",e)):this[ie].progress=null;}get onload(){return le.brandCheck(this,t),this[ie].load}set onload(e){le.brandCheck(this,t),this[ie].load&&this.removeEventListener("load",this[ie].load),typeof e=="function"?(this[ie].load=e,this.addEventListener("load",e)):this[ie].load=null;}get onabort(){return le.brandCheck(this,t),this[ie].abort}set onabort(e){le.brandCheck(this,t),this[ie].abort&&this.removeEventListener("abort",this[ie].abort),typeof e=="function"?(this[ie].abort=e,this.addEventListener("abort",e)):this[ie].abort=null;}};Yt.EMPTY=Yt.prototype.EMPTY=0;Yt.LOADING=Yt.prototype.LOADING=1;Yt.DONE=Yt.prototype.DONE=2;Object.defineProperties(Yt.prototype,{EMPTY:os,LOADING:os,DONE:os,readAsArrayBuffer:tt,readAsBinaryString:tt,readAsText:tt,readAsDataURL:tt,abort:tt,readyState:tt,result:tt,error:tt,onloadstart:tt,onprogress:tt,onload:tt,onabort:tt,onerror:tt,onloadend:tt,[Symbol.toStringTag]:{value:"FileReader",writable:false,enumerable:false,configurable:true}});Object.defineProperties(Yt,{EMPTY:os,LOADING:os,DONE:os});PB.exports={FileReader:Yt};});var wo=S((SY,WB)=>{WB.exports={kConstruct:de().kConstruct};});var zB=S((RY,_B)=>{var WM=R("assert"),{URLSerializer:qB}=je(),{isValidHeaderName:qM}=ot();function _M(t,e,A=false){let r=qB(t,A),s=qB(e,A);return r===s}function zM(t){WM(t!==null);let e=[];for(let A of t.split(","))A=A.trim(),qM(A)&&e.push(A);return e}_B.exports={urlEquals:_M,getFieldValues:zM};});var XB=S((FY,KB)=>{var{kConstruct:ZM}=wo(),{urlEquals:KM,getFieldValues:Fg}=zB(),{kEnumerableProperty:gr,isDisturbed:XM}=j(),{webidl:G}=Oe(),{Response:jM,cloneResponse:$M,fromInnerResponse:eL}=hn(),{Request:IA,fromInnerRequest:tL}=ns(),{kState:Ht}=pA(),{fetching:AL}=Cn(),{urlIsHttpHttpsScheme:mo,createDeferredPromise:as,readAllBytes:rL}=ot(),kg=R("assert"),yo=class t{#e;constructor(){arguments[0]!==ZM&&G.illegalConstructor(),G.util.markAsUncloneable(this),this.#e=arguments[1];}async match(e,A={}){G.brandCheck(this,t);let r="Cache.match";G.argumentLengthCheck(arguments,1,r),e=G.converters.RequestInfo(e,r,"request"),A=G.converters.CacheQueryOptions(A,r,"options");let s=this.#A(e,A,1);if(s.length!==0)return s[0]}async matchAll(e=void 0,A={}){G.brandCheck(this,t);let r="Cache.matchAll";return e!==void 0&&(e=G.converters.RequestInfo(e,r,"request")),A=G.converters.CacheQueryOptions(A,r,"options"),this.#A(e,A)}async add(e){G.brandCheck(this,t);let A="Cache.add";G.argumentLengthCheck(arguments,1,A),e=G.converters.RequestInfo(e,A,"request");let r=[e];return await this.addAll(r)}async addAll(e){G.brandCheck(this,t);let A="Cache.addAll";G.argumentLengthCheck(arguments,1,A);let r=[],s=[];for(let B of e){if(B===void 0)throw G.errors.conversionFailed({prefix:A,argument:"Argument 1",types:["undefined is not allowed"]});if(B=G.converters.RequestInfo(B),typeof B=="string")continue;let l=B[Ht];if(!mo(l.url)||l.method!=="GET")throw G.errors.exception({header:A,message:"Expected http/s scheme when method is not GET."})}let n=[];for(let B of e){let l=new IA(B)[Ht];if(!mo(l.url))throw G.errors.exception({header:A,message:"Expected http/s scheme."});l.initiator="fetch",l.destination="subresource",s.push(l);let h=as();n.push(AL({request:l,processResponse(d){if(d.type==="error"||d.status===206||d.status<200||d.status>299)h.reject(G.errors.exception({header:"Cache.addAll",message:"Received an invalid status code or the request failed."}));else if(d.headersList.contains("vary")){let C=Fg(d.headersList.get("vary"));for(let I of C)if(I==="*"){h.reject(G.errors.exception({header:"Cache.addAll",message:"invalid vary field value"}));for(let Q of n)Q.abort();return}}},processResponseEndOfBody(d){if(d.aborted){h.reject(new DOMException("aborted","AbortError"));return}h.resolve(d);}})),r.push(h.promise);}let o=await Promise.all(r),a=[],c=0;for(let B of o){let l={type:"put",request:s[c],response:B};a.push(l),c++;}let g=as(),E=null;try{this.#t(a);}catch(B){E=B;}return queueMicrotask(()=>{E===null?g.resolve(void 0):g.reject(E);}),g.promise}async put(e,A){G.brandCheck(this,t);let r="Cache.put";G.argumentLengthCheck(arguments,2,r),e=G.converters.RequestInfo(e,r,"request"),A=G.converters.Response(A,r,"response");let s=null;if(e instanceof IA?s=e[Ht]:s=new IA(e)[Ht],!mo(s.url)||s.method!=="GET")throw G.errors.exception({header:r,message:"Expected an http/s scheme when method is not GET"});let n=A[Ht];if(n.status===206)throw G.errors.exception({header:r,message:"Got 206 status"});if(n.headersList.contains("vary")){let l=Fg(n.headersList.get("vary"));for(let h of l)if(h==="*")throw G.errors.exception({header:r,message:"Got * vary field value"})}if(n.body&&(XM(n.body.stream)||n.body.stream.locked))throw G.errors.exception({header:r,message:"Response body is locked or disturbed"});let i=$M(n),o=as();if(n.body!=null){let h=n.body.stream.getReader();rL(h).then(o.resolve,o.reject);}else o.resolve(void 0);let a=[],c={type:"put",request:s,response:i};a.push(c);let g=await o.promise;i.body!=null&&(i.body.source=g);let E=as(),B=null;try{this.#t(a);}catch(l){B=l;}return queueMicrotask(()=>{B===null?E.resolve():E.reject(B);}),E.promise}async delete(e,A={}){G.brandCheck(this,t);let r="Cache.delete";G.argumentLengthCheck(arguments,1,r),e=G.converters.RequestInfo(e,r,"request"),A=G.converters.CacheQueryOptions(A,r,"options");let s=null;if(e instanceof IA){if(s=e[Ht],s.method!=="GET"&&!A.ignoreMethod)return false}else kg(typeof e=="string"),s=new IA(e)[Ht];let n=[],i={type:"delete",request:s,options:A};n.push(i);let o=as(),a=null,c;try{c=this.#t(n);}catch(g){a=g;}return queueMicrotask(()=>{a===null?o.resolve(!!c?.length):o.reject(a);}),o.promise}async keys(e=void 0,A={}){G.brandCheck(this,t);let r="Cache.keys";e!==void 0&&(e=G.converters.RequestInfo(e,r,"request")),A=G.converters.CacheQueryOptions(A,r,"options");let s=null;if(e!==void 0)if(e instanceof IA){if(s=e[Ht],s.method!=="GET"&&!A.ignoreMethod)return []}else typeof e=="string"&&(s=new IA(e)[Ht]);let n=as(),i=[];if(e===void 0)for(let o of this.#e)i.push(o[0]);else {let o=this.#s(s,A);for(let a of o)i.push(a[0]);}return queueMicrotask(()=>{let o=[];for(let a of i){let c=tL(a,new AbortController().signal,"immutable");o.push(c);}n.resolve(Object.freeze(o));}),n.promise}#t(e){let A=this.#e,r=[...A],s=[],n=[];try{for(let i of e){if(i.type!=="delete"&&i.type!=="put")throw G.errors.exception({header:"Cache.#batchCacheOperations",message:'operation type does not match "delete" or "put"'});if(i.type==="delete"&&i.response!=null)throw G.errors.exception({header:"Cache.#batchCacheOperations",message:"delete operation should not have an associated response"});if(this.#s(i.request,i.options,s).length)throw new DOMException("???","InvalidStateError");let o;if(i.type==="delete"){if(o=this.#s(i.request,i.options),o.length===0)return [];for(let a of o){let c=A.indexOf(a);kg(c!==-1),A.splice(c,1);}}else if(i.type==="put"){if(i.response==null)throw G.errors.exception({header:"Cache.#batchCacheOperations",message:"put operation should have an associated response"});let a=i.request;if(!mo(a.url))throw G.errors.exception({header:"Cache.#batchCacheOperations",message:"expected http or https scheme"});if(a.method!=="GET")throw G.errors.exception({header:"Cache.#batchCacheOperations",message:"not get method"});if(i.options!=null)throw G.errors.exception({header:"Cache.#batchCacheOperations",message:"options must not be defined"});o=this.#s(i.request);for(let c of o){let g=A.indexOf(c);kg(g!==-1),A.splice(g,1);}A.push([i.request,i.response]),s.push([i.request,i.response]);}n.push([i.request,i.response]);}return n}catch(i){throw this.#e.length=0,this.#e=r,i}}#s(e,A,r){let s=[],n=r??this.#e;for(let i of n){let[o,a]=i;this.#r(e,o,a,A)&&s.push(i);}return s}#r(e,A,r=null,s){let n=new URL(e.url),i=new URL(A.url);if(s?.ignoreSearch&&(i.search="",n.search=""),!KM(n,i,true))return false;if(r==null||s?.ignoreVary||!r.headersList.contains("vary"))return true;let o=Fg(r.headersList.get("vary"));for(let a of o){if(a==="*")return false;let c=A.headersList.get(a),g=e.headersList.get(a);if(c!==g)return false}return true}#A(e,A,r=1/0){let s=null;if(e!==void 0)if(e instanceof IA){if(s=e[Ht],s.method!=="GET"&&!A.ignoreMethod)return []}else typeof e=="string"&&(s=new IA(e)[Ht]);let n=[];if(e===void 0)for(let o of this.#e)n.push(o[1]);else {let o=this.#s(s,A);for(let a of o)n.push(a[1]);}let i=[];for(let o of n){let a=eL(o,"immutable");if(i.push(a.clone()),i.length>=r)break}return Object.freeze(i)}};Object.defineProperties(yo.prototype,{[Symbol.toStringTag]:{value:"Cache",configurable:true},match:gr,matchAll:gr,add:gr,addAll:gr,put:gr,delete:gr,keys:gr});var ZB=[{key:"ignoreSearch",converter:G.converters.boolean,defaultValue:()=>false},{key:"ignoreMethod",converter:G.converters.boolean,defaultValue:()=>false},{key:"ignoreVary",converter:G.converters.boolean,defaultValue:()=>false}];G.converters.CacheQueryOptions=G.dictionaryConverter(ZB);G.converters.MultiCacheQueryOptions=G.dictionaryConverter([...ZB,{key:"cacheName",converter:G.converters.DOMString}]);G.converters.Response=G.interfaceConverter(jM);G.converters["sequence<RequestInfo>"]=G.sequenceConverter(G.converters.RequestInfo);KB.exports={Cache:yo};});var $B=S((kY,jB)=>{var{kConstruct:Qn}=wo(),{Cache:Do}=XB(),{webidl:_e}=Oe(),{kEnumerableProperty:Bn}=j(),So=class t{#e=new Map;constructor(){arguments[0]!==Qn&&_e.illegalConstructor(),_e.util.markAsUncloneable(this);}async match(e,A={}){if(_e.brandCheck(this,t),_e.argumentLengthCheck(arguments,1,"CacheStorage.match"),e=_e.converters.RequestInfo(e),A=_e.converters.MultiCacheQueryOptions(A),A.cacheName!=null){if(this.#e.has(A.cacheName)){let r=this.#e.get(A.cacheName);return await new Do(Qn,r).match(e,A)}}else for(let r of this.#e.values()){let n=await new Do(Qn,r).match(e,A);if(n!==void 0)return n}}async has(e){_e.brandCheck(this,t);let A="CacheStorage.has";return _e.argumentLengthCheck(arguments,1,A),e=_e.converters.DOMString(e,A,"cacheName"),this.#e.has(e)}async open(e){_e.brandCheck(this,t);let A="CacheStorage.open";if(_e.argumentLengthCheck(arguments,1,A),e=_e.converters.DOMString(e,A,"cacheName"),this.#e.has(e)){let s=this.#e.get(e);return new Do(Qn,s)}let r=[];return this.#e.set(e,r),new Do(Qn,r)}async delete(e){_e.brandCheck(this,t);let A="CacheStorage.delete";return _e.argumentLengthCheck(arguments,1,A),e=_e.converters.DOMString(e,A,"cacheName"),this.#e.delete(e)}async keys(){return _e.brandCheck(this,t),[...this.#e.keys()]}};Object.defineProperties(So.prototype,{[Symbol.toStringTag]:{value:"CacheStorage",configurable:true},match:Bn,has:Bn,open:Bn,delete:Bn,keys:Bn});jB.exports={CacheStorage:So};});var tf=S((NY,ef)=>{ef.exports={maxAttributeValueSize:1024,maxNameValuePairSize:4096};});var Ng=S((bY,of)=>{function sL(t){for(let e=0;e<t.length;++e){let A=t.charCodeAt(e);if(A>=0&&A<=8||A>=10&&A<=31||A===127)return true}return false}function Af(t){for(let e=0;e<t.length;++e){let A=t.charCodeAt(e);if(A<33||A>126||A===34||A===40||A===41||A===60||A===62||A===64||A===44||A===59||A===58||A===92||A===47||A===91||A===93||A===63||A===61||A===123||A===125)throw new Error("Invalid cookie name")}}function rf(t){let e=t.length,A=0;if(t[0]==='"'){if(e===1||t[e-1]!=='"')throw new Error("Invalid cookie value");--e,++A;}for(;A<e;){let r=t.charCodeAt(A++);if(r<33||r>126||r===34||r===44||r===59||r===92)throw new Error("Invalid cookie value")}}function sf(t){for(let e=0;e<t.length;++e){let A=t.charCodeAt(e);if(A<32||A===127||A===59)throw new Error("Invalid cookie path")}}function nL(t){if(t.startsWith("-")||t.endsWith(".")||t.endsWith("-"))throw new Error("Invalid cookie domain")}var iL=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],oL=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],Ro=Array(61).fill(0).map((t,e)=>e.toString().padStart(2,"0"));function nf(t){return typeof t=="number"&&(t=new Date(t)),`${iL[t.getUTCDay()]}, ${Ro[t.getUTCDate()]} ${oL[t.getUTCMonth()]} ${t.getUTCFullYear()} ${Ro[t.getUTCHours()]}:${Ro[t.getUTCMinutes()]}:${Ro[t.getUTCSeconds()]} GMT`}function aL(t){if(t<0)throw new Error("Invalid cookie max-age")}function cL(t){if(t.name.length===0)return null;Af(t.name),rf(t.value);let e=[`${t.name}=${t.value}`];t.name.startsWith("__Secure-")&&(t.secure=true),t.name.startsWith("__Host-")&&(t.secure=true,t.domain=null,t.path="/"),t.secure&&e.push("Secure"),t.httpOnly&&e.push("HttpOnly"),typeof t.maxAge=="number"&&(aL(t.maxAge),e.push(`Max-Age=${t.maxAge}`)),t.domain&&(nL(t.domain),e.push(`Domain=${t.domain}`)),t.path&&(sf(t.path),e.push(`Path=${t.path}`)),t.expires&&t.expires.toString()!=="Invalid Date"&&e.push(`Expires=${nf(t.expires)}`),t.sameSite&&e.push(`SameSite=${t.sameSite}`);for(let A of t.unparsed){if(!A.includes("="))throw new Error("Invalid unparsed");let[r,...s]=A.split("=");e.push(`${r.trim()}=${s.join("=")}`);}return e.join("; ")}of.exports={isCTLExcludingHtab:sL,validateCookieName:Af,validateCookiePath:sf,validateCookieValue:rf,toIMFDate:nf,stringify:cL};});var cf=S((MY,af)=>{var{maxNameValuePairSize:lL,maxAttributeValueSize:gL}=tf(),{isCTLExcludingHtab:uL}=Ng(),{collectASequenceOfCodePointsFast:Fo}=je(),EL=R("assert");function hL(t){if(uL(t))return null;let e="",A="",r="",s="";if(t.includes(";")){let n={position:0};e=Fo(";",t,n),A=t.slice(n.position);}else e=t;if(!e.includes("="))s=e;else {let n={position:0};r=Fo("=",e,n),s=e.slice(n.position+1);}return r=r.trim(),s=s.trim(),r.length+s.length>lL?null:{name:r,value:s,...cs(A)}}function cs(t,e={}){if(t.length===0)return e;EL(t[0]===";"),t=t.slice(1);let A="";t.includes(";")?(A=Fo(";",t,{position:0}),t=t.slice(A.length)):(A=t,t="");let r="",s="";if(A.includes("=")){let i={position:0};r=Fo("=",A,i),s=A.slice(i.position+1);}else r=A;if(r=r.trim(),s=s.trim(),s.length>gL)return cs(t,e);let n=r.toLowerCase();if(n==="expires"){let i=new Date(s);e.expires=i;}else if(n==="max-age"){let i=s.charCodeAt(0);if((i<48||i>57)&&s[0]!=="-"||!/^\d+$/.test(s))return cs(t,e);let o=Number(s);e.maxAge=o;}else if(n==="domain"){let i=s;i[0]==="."&&(i=i.slice(1)),i=i.toLowerCase(),e.domain=i;}else if(n==="path"){let i="";s.length===0||s[0]!=="/"?i="/":i=s,e.path=i;}else if(n==="secure")e.secure=true;else if(n==="httponly")e.httpOnly=true;else if(n==="samesite"){let i="Default",o=s.toLowerCase();o.includes("none")&&(i="None"),o.includes("strict")&&(i="Strict"),o.includes("lax")&&(i="Lax"),e.sameSite=i;}else e.unparsed??=[],e.unparsed.push(`${r}=${s}`);return cs(t,e)}af.exports={parseSetCookie:hL,parseUnparsedAttributes:cs};});var uf=S((LY,gf)=>{var{parseSetCookie:IL}=cf(),{stringify:CL}=Ng(),{webidl:te}=Oe(),{Headers:ko}=ir();function dL(t){te.argumentLengthCheck(arguments,1,"getCookies"),te.brandCheck(t,ko,{strict:false});let e=t.get("cookie"),A={};if(!e)return A;for(let r of e.split(";")){let[s,...n]=r.split("=");A[s.trim()]=n.join("=");}return A}function QL(t,e,A){te.brandCheck(t,ko,{strict:false});let r="deleteCookie";te.argumentLengthCheck(arguments,2,r),e=te.converters.DOMString(e,r,"name"),A=te.converters.DeleteCookieAttributes(A),lf(t,{name:e,value:"",expires:new Date(0),...A});}function BL(t){te.argumentLengthCheck(arguments,1,"getSetCookies"),te.brandCheck(t,ko,{strict:false});let e=t.getSetCookie();return e?e.map(A=>IL(A)):[]}function lf(t,e){te.argumentLengthCheck(arguments,2,"setCookie"),te.brandCheck(t,ko,{strict:false}),e=te.converters.Cookie(e);let A=CL(e);A&&t.append("Set-Cookie",A);}te.converters.DeleteCookieAttributes=te.dictionaryConverter([{converter:te.nullableConverter(te.converters.DOMString),key:"path",defaultValue:()=>null},{converter:te.nullableConverter(te.converters.DOMString),key:"domain",defaultValue:()=>null}]);te.converters.Cookie=te.dictionaryConverter([{converter:te.converters.DOMString,key:"name"},{converter:te.converters.DOMString,key:"value"},{converter:te.nullableConverter(t=>typeof t=="number"?te.converters["unsigned long long"](t):new Date(t)),key:"expires",defaultValue:()=>null},{converter:te.nullableConverter(te.converters["long long"]),key:"maxAge",defaultValue:()=>null},{converter:te.nullableConverter(te.converters.DOMString),key:"domain",defaultValue:()=>null},{converter:te.nullableConverter(te.converters.DOMString),key:"path",defaultValue:()=>null},{converter:te.nullableConverter(te.converters.boolean),key:"secure",defaultValue:()=>null},{converter:te.nullableConverter(te.converters.boolean),key:"httpOnly",defaultValue:()=>null},{converter:te.converters.USVString,key:"sameSite",allowedValues:["Strict","Lax","None"]},{converter:te.sequenceConverter(te.converters.DOMString),key:"unparsed",defaultValue:()=>new Array(0)}]);gf.exports={getCookies:dL,deleteCookie:QL,getSetCookies:BL,setCookie:lf};});var gs=S((UY,hf)=>{var{webidl:x}=Oe(),{kEnumerableProperty:At}=j(),{kConstruct:Ef}=de(),{MessagePort:fL}=R("worker_threads"),ls=class t extends Event{#e;constructor(e,A={}){if(e===Ef){super(arguments[1],arguments[2]),x.util.markAsUncloneable(this);return}let r="MessageEvent constructor";x.argumentLengthCheck(arguments,1,r),e=x.converters.DOMString(e,r,"type"),A=x.converters.MessageEventInit(A,r,"eventInitDict"),super(e,A),this.#e=A,x.util.markAsUncloneable(this);}get data(){return x.brandCheck(this,t),this.#e.data}get origin(){return x.brandCheck(this,t),this.#e.origin}get lastEventId(){return x.brandCheck(this,t),this.#e.lastEventId}get source(){return x.brandCheck(this,t),this.#e.source}get ports(){return x.brandCheck(this,t),Object.isFrozen(this.#e.ports)||Object.freeze(this.#e.ports),this.#e.ports}initMessageEvent(e,A=false,r=false,s=null,n="",i="",o=null,a=[]){return x.brandCheck(this,t),x.argumentLengthCheck(arguments,1,"MessageEvent.initMessageEvent"),new t(e,{bubbles:A,cancelable:r,data:s,origin:n,lastEventId:i,source:o,ports:a})}static createFastMessageEvent(e,A){let r=new t(Ef,e,A);return r.#e=A,r.#e.data??=null,r.#e.origin??="",r.#e.lastEventId??="",r.#e.source??=null,r.#e.ports??=[],r}},{createFastMessageEvent:pL}=ls;delete ls.createFastMessageEvent;var No=class t extends Event{#e;constructor(e,A={}){let r="CloseEvent constructor";x.argumentLengthCheck(arguments,1,r),e=x.converters.DOMString(e,r,"type"),A=x.converters.CloseEventInit(A),super(e,A),this.#e=A,x.util.markAsUncloneable(this);}get wasClean(){return x.brandCheck(this,t),this.#e.wasClean}get code(){return x.brandCheck(this,t),this.#e.code}get reason(){return x.brandCheck(this,t),this.#e.reason}},bo=class t extends Event{#e;constructor(e,A){let r="ErrorEvent constructor";x.argumentLengthCheck(arguments,1,r),super(e,A),x.util.markAsUncloneable(this),e=x.converters.DOMString(e,r,"type"),A=x.converters.ErrorEventInit(A??{}),this.#e=A;}get message(){return x.brandCheck(this,t),this.#e.message}get filename(){return x.brandCheck(this,t),this.#e.filename}get lineno(){return x.brandCheck(this,t),this.#e.lineno}get colno(){return x.brandCheck(this,t),this.#e.colno}get error(){return x.brandCheck(this,t),this.#e.error}};Object.defineProperties(ls.prototype,{[Symbol.toStringTag]:{value:"MessageEvent",configurable:true},data:At,origin:At,lastEventId:At,source:At,ports:At,initMessageEvent:At});Object.defineProperties(No.prototype,{[Symbol.toStringTag]:{value:"CloseEvent",configurable:true},reason:At,code:At,wasClean:At});Object.defineProperties(bo.prototype,{[Symbol.toStringTag]:{value:"ErrorEvent",configurable:true},message:At,filename:At,lineno:At,colno:At,error:At});x.converters.MessagePort=x.interfaceConverter(fL);x.converters["sequence<MessagePort>"]=x.sequenceConverter(x.converters.MessagePort);var bg=[{key:"bubbles",converter:x.converters.boolean,defaultValue:()=>false},{key:"cancelable",converter:x.converters.boolean,defaultValue:()=>false},{key:"composed",converter:x.converters.boolean,defaultValue:()=>false}];x.converters.MessageEventInit=x.dictionaryConverter([...bg,{key:"data",converter:x.converters.any,defaultValue:()=>null},{key:"origin",converter:x.converters.USVString,defaultValue:()=>""},{key:"lastEventId",converter:x.converters.DOMString,defaultValue:()=>""},{key:"source",converter:x.nullableConverter(x.converters.MessagePort),defaultValue:()=>null},{key:"ports",converter:x.converters["sequence<MessagePort>"],defaultValue:()=>new Array(0)}]);x.converters.CloseEventInit=x.dictionaryConverter([...bg,{key:"wasClean",converter:x.converters.boolean,defaultValue:()=>false},{key:"code",converter:x.converters["unsigned short"],defaultValue:()=>0},{key:"reason",converter:x.converters.USVString,defaultValue:()=>""}]);x.converters.ErrorEventInit=x.dictionaryConverter([...bg,{key:"message",converter:x.converters.DOMString,defaultValue:()=>""},{key:"filename",converter:x.converters.USVString,defaultValue:()=>""},{key:"lineno",converter:x.converters["unsigned long"],defaultValue:()=>0},{key:"colno",converter:x.converters["unsigned long"],defaultValue:()=>0},{key:"error",converter:x.converters.any}]);hf.exports={MessageEvent:ls,CloseEvent:No,ErrorEvent:bo,createFastMessageEvent:pL};});var ur=S((TY,If)=>{var wL="258EAFA5-E914-47DA-95CA-C5AB0DC85B11",mL={enumerable:true,writable:false,configurable:false},yL={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},DL={NOT_SENT:0,PROCESSING:1,SENT:2},SL={CONTINUATION:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10},RL=2**16-1,FL={INFO:0,PAYLOADLENGTH_16:2,PAYLOADLENGTH_64:3,READ_DATA:4},kL=Buffer.allocUnsafe(0),NL={string:1,typedArray:2,arrayBuffer:3,blob:4};If.exports={uid:wL,sentCloseFrameState:DL,staticPropertyDescriptors:mL,states:yL,opcodes:SL,maxUnsigned16Bit:RL,parserStates:FL,emptyBuffer:kL,sendHints:NL};});var fn=S((vY,Cf)=>{Cf.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 mn=S((xY,Df)=>{var{kReadyState:pn,kController:bL,kResponse:ML,kBinaryType:LL,kWebSocketURL:UL}=fn(),{states:wn,opcodes:vA}=ur(),{ErrorEvent:TL,createFastMessageEvent:vL}=gs(),{isUtf8:xL}=R("buffer"),{collectASequenceOfCodePointsFast:GL,removeHTTPWhitespace:df}=je();function YL(t){return t[pn]===wn.CONNECTING}function HL(t){return t[pn]===wn.OPEN}function JL(t){return t[pn]===wn.CLOSING}function VL(t){return t[pn]===wn.CLOSED}function Mg(t,e,A=(s,n)=>new Event(s,n),r={}){let s=A(t,r);e.dispatchEvent(s);}function PL(t,e,A){if(t[pn]!==wn.OPEN)return;let r;if(e===vA.TEXT)try{r=yf(A);}catch{Bf(t,"Received invalid UTF-8 in text frame.");return}else e===vA.BINARY&&(t[LL]==="blob"?r=new Blob([A]):r=OL(A));Mg("message",t,vL,{origin:t[UL].origin,data:r});}function OL(t){return t.byteLength===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength)}function WL(t){if(t.length===0)return false;for(let e=0;e<t.length;++e){let A=t.charCodeAt(e);if(A<33||A>126||A===34||A===40||A===41||A===44||A===47||A===58||A===59||A===60||A===61||A===62||A===63||A===64||A===91||A===92||A===93||A===123||A===125)return false}return true}function qL(t){return t>=1e3&&t<1015?t!==1004&&t!==1005&&t!==1006:t>=3e3&&t<=4999}function Bf(t,e){let{[bL]:A,[ML]:r}=t;A.abort(),r?.socket&&!r.socket.destroyed&&r.socket.destroy(),e&&Mg("error",t,(s,n)=>new TL(s,n),{error:new Error(e),message:e});}function ff(t){return t===vA.CLOSE||t===vA.PING||t===vA.PONG}function pf(t){return t===vA.CONTINUATION}function wf(t){return t===vA.TEXT||t===vA.BINARY}function _L(t){return wf(t)||pf(t)||ff(t)}function zL(t){let e={position:0},A=new Map;for(;e.position<t.length;){let r=GL(";",t,e),[s,n=""]=r.split("=");A.set(df(s,true,false),df(n,false,true)),e.position++;}return A}function ZL(t){for(let e=0;e<t.length;e++){let A=t.charCodeAt(e);if(A<48||A>57)return false}return true}var mf=typeof process.versions.icu=="string",Qf=mf?new TextDecoder("utf-8",{fatal:true}):void 0,yf=mf?Qf.decode.bind(Qf):function(t){if(xL(t))return t.toString("utf-8");throw new TypeError("Invalid utf-8 received.")};Df.exports={isConnecting:YL,isEstablished:HL,isClosing:JL,isClosed:VL,fireEvent:Mg,isValidSubprotocol:WL,isValidStatusCode:qL,failWebsocketConnection:Bf,websocketMessageReceived:PL,utf8Decode:yf,isControlFrame:ff,isContinuationFrame:pf,isTextBinaryFrame:wf,isValidOpcode:_L,parseExtensions:zL,isValidClientWindowBits:ZL};});var Lo=S((GY,Sf)=>{var{maxUnsigned16Bit:KL}=ur(),Mo=16386,Lg,yn=null,us=Mo;try{Lg=R("crypto");}catch{Lg={randomFillSync:function(e,A,r){for(let s=0;s<e.length;++s)e[s]=Math.random()*255|0;return e}};}function XL(){return us===Mo&&(us=0,Lg.randomFillSync(yn??=Buffer.allocUnsafe(Mo),0,Mo)),[yn[us++],yn[us++],yn[us++],yn[us++]]}var Ug=class{constructor(e){this.frameData=e;}createFrame(e){let A=this.frameData,r=XL(),s=A?.byteLength??0,n=s,i=6;s>KL?(i+=8,n=127):s>125&&(i+=2,n=126);let o=Buffer.allocUnsafe(s+i);o[0]=o[1]=0,o[0]|=128,o[0]=(o[0]&240)+e;o[i-4]=r[0],o[i-3]=r[1],o[i-2]=r[2],o[i-1]=r[3],o[1]=n,n===126?o.writeUInt16BE(s,2):n===127&&(o[2]=o[3]=0,o.writeUIntBE(s,4,6)),o[1]|=128;for(let a=0;a<s;++a)o[i+a]=A[a]^r[a&3];return o}};Sf.exports={WebsocketFrameSend:Ug};});var vg=S((YY,Lf)=>{var{uid:jL,states:Dn,sentCloseFrameState:Uo,emptyBuffer:$L,opcodes:eU}=ur(),{kReadyState:Sn,kSentClose:To,kByteParser:Ff,kReceivedClose:Rf,kResponse:kf}=fn(),{fireEvent:tU,failWebsocketConnection:xA,isClosing:AU,isClosed:rU,isEstablished:sU,parseExtensions:nU}=mn(),{channels:Es}=yr(),{CloseEvent:iU}=gs(),{makeRequest:oU}=ns(),{fetching:aU}=Cn(),{Headers:cU,getHeadersList:lU}=ir(),{getDecodeSplit:gU}=ot(),{WebsocketFrameSend:uU}=Lo(),Tg;try{Tg=R("crypto");}catch{}function EU(t,e,A,r,s,n){let i=t;i.protocol=t.protocol==="ws:"?"http:":"https:";let o=oU({urlList:[i],client:A,serviceWorkers:"none",referrer:"no-referrer",mode:"websocket",credentials:"include",cache:"no-store",redirect:"error"});if(n.headers){let E=lU(new cU(n.headers));o.headersList=E;}let a=Tg.randomBytes(16).toString("base64");o.headersList.append("sec-websocket-key",a),o.headersList.append("sec-websocket-version","13");for(let E of e)o.headersList.append("sec-websocket-protocol",E);return o.headersList.append("sec-websocket-extensions","permessage-deflate; client_max_window_bits"),aU({request:o,useParallelQueue:true,dispatcher:n.dispatcher,processResponse(E){if(E.type==="error"||E.status!==101){xA(r,"Received network error or non-101 status code.");return}if(e.length!==0&&!E.headersList.get("Sec-WebSocket-Protocol")){xA(r,"Server did not respond with sent protocols.");return}if(E.headersList.get("Upgrade")?.toLowerCase()!=="websocket"){xA(r,'Server did not set Upgrade header to "websocket".');return}if(E.headersList.get("Connection")?.toLowerCase()!=="upgrade"){xA(r,'Server did not set Connection header to "upgrade".');return}let B=E.headersList.get("Sec-WebSocket-Accept"),l=Tg.createHash("sha1").update(a+jL).digest("base64");if(B!==l){xA(r,"Incorrect hash received in Sec-WebSocket-Accept header.");return}let h=E.headersList.get("Sec-WebSocket-Extensions"),d;if(h!==null&&(d=nU(h),!d.has("permessage-deflate"))){xA(r,"Sec-WebSocket-Extensions header does not match.");return}let C=E.headersList.get("Sec-WebSocket-Protocol");if(C!==null&&!gU("sec-websocket-protocol",o.headersList).includes(C)){xA(r,"Protocol was not set in the opening handshake.");return}E.socket.on("data",Nf),E.socket.on("close",bf),E.socket.on("error",Mf),Es.open.hasSubscribers&&Es.open.publish({address:E.socket.address(),protocol:C,extensions:h}),s(E,d);}})}function hU(t,e,A,r){if(!(AU(t)||rU(t)))if(!sU(t))xA(t,"Connection was closed before it was established."),t[Sn]=Dn.CLOSING;else if(t[To]===Uo.NOT_SENT){t[To]=Uo.PROCESSING;let s=new uU;e!==void 0&&A===void 0?(s.frameData=Buffer.allocUnsafe(2),s.frameData.writeUInt16BE(e,0)):e!==void 0&&A!==void 0?(s.frameData=Buffer.allocUnsafe(2+r),s.frameData.writeUInt16BE(e,0),s.frameData.write(A,2,"utf-8")):s.frameData=$L,t[kf].socket.write(s.createFrame(eU.CLOSE)),t[To]=Uo.SENT,t[Sn]=Dn.CLOSING;}else t[Sn]=Dn.CLOSING;}function Nf(t){this.ws[Ff].write(t)||this.pause();}function bf(){let{ws:t}=this,{[kf]:e}=t;e.socket.off("data",Nf),e.socket.off("close",bf),e.socket.off("error",Mf);let A=t[To]===Uo.SENT&&t[Rf],r=1005,s="",n=t[Ff].closingInfo;n&&!n.error?(r=n.code??1005,s=n.reason):t[Rf]||(r=1006),t[Sn]=Dn.CLOSED,tU("close",t,(i,o)=>new iU(i,o),{wasClean:A,code:r,reason:s}),Es.close.hasSubscribers&&Es.close.publish({websocket:t,code:r,reason:s});}function Mf(t){let{ws:e}=this;e[Sn]=Dn.CLOSING,Es.socketError.hasSubscribers&&Es.socketError.publish(t),this.destroy();}Lf.exports={establishWebSocketConnection:EU,closeWebSocketConnection:hU};});var Tf=S((HY,Uf)=>{var{createInflateRaw:IU,Z_DEFAULT_WINDOWBITS:CU}=R("zlib"),{isValidClientWindowBits:dU}=mn(),QU=Buffer.from([0,0,255,255]),vo=Symbol("kBuffer"),xo=Symbol("kLength"),xg=class{#e;#t={};constructor(e){this.#t.serverNoContextTakeover=e.has("server_no_context_takeover"),this.#t.serverMaxWindowBits=e.get("server_max_window_bits");}decompress(e,A,r){if(!this.#e){let s=CU;if(this.#t.serverMaxWindowBits){if(!dU(this.#t.serverMaxWindowBits)){r(new Error("Invalid server_max_window_bits"));return}s=Number.parseInt(this.#t.serverMaxWindowBits);}this.#e=IU({windowBits:s}),this.#e[vo]=[],this.#e[xo]=0,this.#e.on("data",n=>{this.#e[vo].push(n),this.#e[xo]+=n.length;}),this.#e.on("error",n=>{this.#e=null,r(n);});}this.#e.write(e),A&&this.#e.write(QU),this.#e.flush(()=>{let s=Buffer.concat(this.#e[vo],this.#e[xo]);this.#e[vo].length=0,this.#e[xo]=0,r(null,s);});}};Uf.exports={PerMessageDeflate:xg};});var qf=S((JY,Wf)=>{var{Writable:BU}=R("stream"),fU=R("assert"),{parserStates:rt,opcodes:hs,states:pU,emptyBuffer:vf,sentCloseFrameState:xf}=ur(),{kReadyState:wU,kSentClose:Gf,kResponse:Yf,kReceivedClose:Hf}=fn(),{channels:Go}=yr(),{isValidStatusCode:mU,isValidOpcode:yU,failWebsocketConnection:yt,websocketMessageReceived:Jf,utf8Decode:DU,isControlFrame:Vf,isTextBinaryFrame:Gg,isContinuationFrame:SU}=mn(),{WebsocketFrameSend:Pf}=Lo(),{closeWebSocketConnection:Of}=vg(),{PerMessageDeflate:RU}=Tf(),Yg=class extends BU{#e=[];#t=0;#s=false;#r=rt.INFO;#A={};#n=[];#i;constructor(e,A){super(),this.ws=e,this.#i=A??new Map,this.#i.has("permessage-deflate")&&this.#i.set("permessage-deflate",new RU(A));}_write(e,A,r){this.#e.push(e),this.#t+=e.length,this.#s=true,this.run(r);}run(e){for(;this.#s;)if(this.#r===rt.INFO){if(this.#t<2)return e();let A=this.consume(2),r=(A[0]&128)!==0,s=A[0]&15,n=(A[1]&128)===128,i=!r&&s!==hs.CONTINUATION,o=A[1]&127,a=A[0]&64,c=A[0]&32,g=A[0]&16;if(!yU(s))return yt(this.ws,"Invalid opcode received"),e();if(n)return yt(this.ws,"Frame cannot be masked"),e();if(a!==0&&!this.#i.has("permessage-deflate")){yt(this.ws,"Expected RSV1 to be clear.");return}if(c!==0||g!==0){yt(this.ws,"RSV1, RSV2, RSV3 must be clear");return}if(i&&!Gg(s)){yt(this.ws,"Invalid frame type was fragmented.");return}if(Gg(s)&&this.#n.length>0){yt(this.ws,"Expected continuation frame");return}if(this.#A.fragmented&&i){yt(this.ws,"Fragmented frame exceeded 125 bytes.");return}if((o>125||i)&&Vf(s)){yt(this.ws,"Control frame either too large or fragmented");return}if(SU(s)&&this.#n.length===0&&!this.#A.compressed){yt(this.ws,"Unexpected continuation frame");return}o<=125?(this.#A.payloadLength=o,this.#r=rt.READ_DATA):o===126?this.#r=rt.PAYLOADLENGTH_16:o===127&&(this.#r=rt.PAYLOADLENGTH_64),Gg(s)&&(this.#A.binaryType=s,this.#A.compressed=a!==0),this.#A.opcode=s,this.#A.masked=n,this.#A.fin=r,this.#A.fragmented=i;}else if(this.#r===rt.PAYLOADLENGTH_16){if(this.#t<2)return e();let A=this.consume(2);this.#A.payloadLength=A.readUInt16BE(0),this.#r=rt.READ_DATA;}else if(this.#r===rt.PAYLOADLENGTH_64){if(this.#t<8)return e();let A=this.consume(8),r=A.readUInt32BE(0);if(r>2**31-1){yt(this.ws,"Received payload length > 2^31 bytes.");return}let s=A.readUInt32BE(4);this.#A.payloadLength=(r<<8)+s,this.#r=rt.READ_DATA;}else if(this.#r===rt.READ_DATA){if(this.#t<this.#A.payloadLength)return e();let A=this.consume(this.#A.payloadLength);if(Vf(this.#A.opcode))this.#s=this.parseControlFrame(A),this.#r=rt.INFO;else if(this.#A.compressed){this.#i.get("permessage-deflate").decompress(A,this.#A.fin,(r,s)=>{if(r){Of(this.ws,1007,r.message,r.message.length);return}if(this.#n.push(s),!this.#A.fin){this.#r=rt.INFO,this.#s=true,this.run(e);return}Jf(this.ws,this.#A.binaryType,Buffer.concat(this.#n)),this.#s=true,this.#r=rt.INFO,this.#n.length=0,this.run(e);}),this.#s=false;break}else {if(this.#n.push(A),!this.#A.fragmented&&this.#A.fin){let r=Buffer.concat(this.#n);Jf(this.ws,this.#A.binaryType,r),this.#n.length=0;}this.#r=rt.INFO;}}}consume(e){if(e>this.#t)throw new Error("Called consume() before buffers satiated.");if(e===0)return vf;if(this.#e[0].length===e)return this.#t-=this.#e[0].length,this.#e.shift();let A=Buffer.allocUnsafe(e),r=0;for(;r!==e;){let s=this.#e[0],{length:n}=s;if(n+r===e){A.set(this.#e.shift(),r);break}else if(n+r>e){A.set(s.subarray(0,e-r),r),this.#e[0]=s.subarray(e-r);break}else A.set(this.#e.shift(),r),r+=s.length;}return this.#t-=e,A}parseCloseBody(e){fU(e.length!==1);let A;if(e.length>=2&&(A=e.readUInt16BE(0)),A!==void 0&&!mU(A))return {code:1002,reason:"Invalid status code",error:true};let r=e.subarray(2);r[0]===239&&r[1]===187&&r[2]===191&&(r=r.subarray(3));try{r=DU(r);}catch{return {code:1007,reason:"Invalid UTF-8",error:true}}return {code:A,reason:r,error:false}}parseControlFrame(e){let{opcode:A,payloadLength:r}=this.#A;if(A===hs.CLOSE){if(r===1)return yt(this.ws,"Received close frame with a 1-byte body."),false;if(this.#A.closeInfo=this.parseCloseBody(e),this.#A.closeInfo.error){let{code:s,reason:n}=this.#A.closeInfo;return Of(this.ws,s,n,n.length),yt(this.ws,n),false}if(this.ws[Gf]!==xf.SENT){let s=vf;this.#A.closeInfo.code&&(s=Buffer.allocUnsafe(2),s.writeUInt16BE(this.#A.closeInfo.code,0));let n=new Pf(s);this.ws[Yf].socket.write(n.createFrame(hs.CLOSE),i=>{i||(this.ws[Gf]=xf.SENT);});}return this.ws[wU]=pU.CLOSING,this.ws[Hf]=true,false}else if(A===hs.PING){if(!this.ws[Hf]){let s=new Pf(e);this.ws[Yf].socket.write(s.createFrame(hs.PONG)),Go.ping.hasSubscribers&&Go.ping.publish({payload:e});}}else A===hs.PONG&&Go.pong.hasSubscribers&&Go.pong.publish({payload:e});return true}get closingInfo(){return this.#A.closeInfo}};Wf.exports={ByteParser:Yg};});var Xf=S((VY,Kf)=>{var{WebsocketFrameSend:FU}=Lo(),{opcodes:_f,sendHints:Is}=ur(),kU=Zc(),zf=Buffer[Symbol.species],Hg=class{#e=new kU;#t=false;#s;constructor(e){this.#s=e;}add(e,A,r){if(r!==Is.blob){let n=Zf(e,r);if(!this.#t)this.#s.write(n,A);else {let i={promise:null,callback:A,frame:n};this.#e.push(i);}return}let s={promise:e.arrayBuffer().then(n=>{s.promise=null,s.frame=Zf(n,r);}),callback:A,frame:null};this.#e.push(s),this.#t||this.#r();}async#r(){this.#t=true;let e=this.#e;for(;!e.isEmpty();){let A=e.shift();A.promise!==null&&await A.promise,this.#s.write(A.frame,A.callback),A.callback=A.frame=null;}this.#t=false;}};function Zf(t,e){return new FU(NU(t,e)).createFrame(e===Is.string?_f.TEXT:_f.BINARY)}function NU(t,e){switch(e){case Is.string:return Buffer.from(t);case Is.arrayBuffer:case Is.blob:return new zf(t);case Is.typedArray:return new zf(t.buffer,t.byteOffset,t.byteLength)}}Kf.exports={SendQueue:Hg};});var ip=S((PY,np)=>{var{webidl:W}=Oe(),{URLSerializer:bU}=je(),{environmentSettingsObject:jf}=ot(),{staticPropertyDescriptors:GA,states:Rn,sentCloseFrameState:MU,sendHints:Yo}=ur(),{kWebSocketURL:$f,kReadyState:Jg,kController:LU,kBinaryType:Ho,kResponse:ep,kSentClose:UU,kByteParser:TU}=fn(),{isConnecting:vU,isEstablished:xU,isClosing:GU,isValidSubprotocol:YU,fireEvent:tp}=mn(),{establishWebSocketConnection:HU,closeWebSocketConnection:Ap}=vg(),{ByteParser:JU}=qf(),{kEnumerableProperty:Dt,isBlobLike:rp}=j(),{getGlobalDispatcher:VU}=$i(),{types:sp}=R("util"),{ErrorEvent:PU,CloseEvent:OU}=gs(),{SendQueue:WU}=Xf(),ht=class t extends EventTarget{#e={open:null,error:null,close:null,message:null};#t=0;#s="";#r="";#A;constructor(e,A=[]){super(),W.util.markAsUncloneable(this);let r="WebSocket constructor";W.argumentLengthCheck(arguments,1,r);let s=W.converters["DOMString or sequence<DOMString> or WebSocketInit"](A,r,"options");e=W.converters.USVString(e,r,"url"),A=s.protocols;let n=jf.settingsObject.baseUrl,i;try{i=new URL(e,n);}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 A=="string"&&(A=[A]),A.length!==new Set(A.map(a=>a.toLowerCase())).size)throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");if(A.length>0&&!A.every(a=>YU(a)))throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");this[$f]=new URL(i.href);let o=jf.settingsObject;this[LU]=HU(i,A,o,this,(a,c)=>this.#n(a,c),s),this[Jg]=t.CONNECTING,this[UU]=MU.NOT_SENT,this[Ho]="blob";}close(e=void 0,A=void 0){W.brandCheck(this,t);let r="WebSocket.close";if(e!==void 0&&(e=W.converters["unsigned short"](e,r,"code",{clamp:true})),A!==void 0&&(A=W.converters.USVString(A,r,"reason")),e!==void 0&&e!==1e3&&(e<3e3||e>4999))throw new DOMException("invalid code","InvalidAccessError");let s=0;if(A!==void 0&&(s=Buffer.byteLength(A),s>123))throw new DOMException(`Reason must be less than 123 bytes; received ${s}`,"SyntaxError");Ap(this,e,A,s);}send(e){W.brandCheck(this,t);let A="WebSocket.send";if(W.argumentLengthCheck(arguments,1,A),e=W.converters.WebSocketSendData(e,A,"data"),vU(this))throw new DOMException("Sent before connected.","InvalidStateError");if(!(!xU(this)||GU(this)))if(typeof e=="string"){let r=Buffer.byteLength(e);this.#t+=r,this.#A.add(e,()=>{this.#t-=r;},Yo.string);}else sp.isArrayBuffer(e)?(this.#t+=e.byteLength,this.#A.add(e,()=>{this.#t-=e.byteLength;},Yo.arrayBuffer)):ArrayBuffer.isView(e)?(this.#t+=e.byteLength,this.#A.add(e,()=>{this.#t-=e.byteLength;},Yo.typedArray)):rp(e)&&(this.#t+=e.size,this.#A.add(e,()=>{this.#t-=e.size;},Yo.blob));}get readyState(){return W.brandCheck(this,t),this[Jg]}get bufferedAmount(){return W.brandCheck(this,t),this.#t}get url(){return W.brandCheck(this,t),bU(this[$f])}get extensions(){return W.brandCheck(this,t),this.#r}get protocol(){return W.brandCheck(this,t),this.#s}get onopen(){return W.brandCheck(this,t),this.#e.open}set onopen(e){W.brandCheck(this,t),this.#e.open&&this.removeEventListener("open",this.#e.open),typeof e=="function"?(this.#e.open=e,this.addEventListener("open",e)):this.#e.open=null;}get onerror(){return W.brandCheck(this,t),this.#e.error}set onerror(e){W.brandCheck(this,t),this.#e.error&&this.removeEventListener("error",this.#e.error),typeof e=="function"?(this.#e.error=e,this.addEventListener("error",e)):this.#e.error=null;}get onclose(){return W.brandCheck(this,t),this.#e.close}set onclose(e){W.brandCheck(this,t),this.#e.close&&this.removeEventListener("close",this.#e.close),typeof e=="function"?(this.#e.close=e,this.addEventListener("close",e)):this.#e.close=null;}get onmessage(){return W.brandCheck(this,t),this.#e.message}set onmessage(e){W.brandCheck(this,t),this.#e.message&&this.removeEventListener("message",this.#e.message),typeof e=="function"?(this.#e.message=e,this.addEventListener("message",e)):this.#e.message=null;}get binaryType(){return W.brandCheck(this,t),this[Ho]}set binaryType(e){W.brandCheck(this,t),e!=="blob"&&e!=="arraybuffer"?this[Ho]="blob":this[Ho]=e;}#n(e,A){this[ep]=e;let r=new JU(this,A);r.on("drain",qU),r.on("error",_U.bind(this)),e.socket.ws=this,this[TU]=r,this.#A=new WU(e.socket),this[Jg]=Rn.OPEN;let s=e.headersList.get("sec-websocket-extensions");s!==null&&(this.#r=s);let n=e.headersList.get("sec-websocket-protocol");n!==null&&(this.#s=n),tp("open",this);}};ht.CONNECTING=ht.prototype.CONNECTING=Rn.CONNECTING;ht.OPEN=ht.prototype.OPEN=Rn.OPEN;ht.CLOSING=ht.prototype.CLOSING=Rn.CLOSING;ht.CLOSED=ht.prototype.CLOSED=Rn.CLOSED;Object.defineProperties(ht.prototype,{CONNECTING:GA,OPEN:GA,CLOSING:GA,CLOSED:GA,url:Dt,readyState:Dt,bufferedAmount:Dt,onopen:Dt,onerror:Dt,onclose:Dt,close:Dt,onmessage:Dt,binaryType:Dt,send:Dt,extensions:Dt,protocol:Dt,[Symbol.toStringTag]:{value:"WebSocket",writable:false,enumerable:false,configurable:true}});Object.defineProperties(ht,{CONNECTING:GA,OPEN:GA,CLOSING:GA,CLOSED:GA});W.converters["sequence<DOMString>"]=W.sequenceConverter(W.converters.DOMString);W.converters["DOMString or sequence<DOMString>"]=function(t,e,A){return W.util.Type(t)==="Object"&&Symbol.iterator in t?W.converters["sequence<DOMString>"](t):W.converters.DOMString(t,e,A)};W.converters.WebSocketInit=W.dictionaryConverter([{key:"protocols",converter:W.converters["DOMString or sequence<DOMString>"],defaultValue:()=>new Array(0)},{key:"dispatcher",converter:W.converters.any,defaultValue:()=>VU()},{key:"headers",converter:W.nullableConverter(W.converters.HeadersInit)}]);W.converters["DOMString or sequence<DOMString> or WebSocketInit"]=function(t){return W.util.Type(t)==="Object"&&!(Symbol.iterator in t)?W.converters.WebSocketInit(t):{protocols:W.converters["DOMString or sequence<DOMString>"](t)}};W.converters.WebSocketSendData=function(t){if(W.util.Type(t)==="Object"){if(rp(t))return W.converters.Blob(t,{strict:false});if(ArrayBuffer.isView(t)||sp.isArrayBuffer(t))return W.converters.BufferSource(t)}return W.converters.USVString(t)};function qU(){this.ws[ep].socket.resume();}function _U(t){let e,A;t instanceof OU?(e=t.reason,A=t.code):e=t.message,tp("error",this,()=>new PU("error",{error:t,message:e})),Ap(this,A);}np.exports={WebSocket:ht};});var Vg=S((OY,op)=>{function zU(t){return t.indexOf("\0")===-1}function ZU(t){if(t.length===0)return false;for(let e=0;e<t.length;e++)if(t.charCodeAt(e)<48||t.charCodeAt(e)>57)return false;return true}function KU(t){return new Promise(e=>{setTimeout(e,t).unref();})}op.exports={isValidLastEventId:zU,isASCIINumber:ZU,delay:KU};});var gp=S((WY,lp)=>{var{Transform:XU}=R("stream"),{isASCIINumber:ap,isValidLastEventId:cp}=Vg(),CA=[239,187,191],Pg=10,Jo=13,jU=58,$U=32,Og=class extends XU{state=null;checkBOM=true;crlfCheck=false;eventEndCheck=false;buffer=null;pos=0;event={data:void 0,event:void 0,id:void 0,retry:void 0};constructor(e={}){e.readableObjectMode=true,super(e),this.state=e.eventSourceSettings||{},e.push&&(this.push=e.push);}_transform(e,A,r){if(e.length===0){r();return}if(this.buffer?this.buffer=Buffer.concat([this.buffer,e]):this.buffer=e,this.checkBOM)switch(this.buffer.length){case 1:if(this.buffer[0]===CA[0]){r();return}this.checkBOM=false,r();return;case 2:if(this.buffer[0]===CA[0]&&this.buffer[1]===CA[1]){r();return}this.checkBOM=false;break;case 3:if(this.buffer[0]===CA[0]&&this.buffer[1]===CA[1]&&this.buffer[2]===CA[2]){this.buffer=Buffer.alloc(0),this.checkBOM=false,r();return}this.checkBOM=false;break;default:this.buffer[0]===CA[0]&&this.buffer[1]===CA[1]&&this.buffer[2]===CA[2]&&(this.buffer=this.buffer.subarray(3)),this.checkBOM=false;break}for(;this.pos<this.buffer.length;){if(this.eventEndCheck){if(this.crlfCheck){if(this.buffer[this.pos]===Pg){this.buffer=this.buffer.subarray(this.pos+1),this.pos=0,this.crlfCheck=false;continue}this.crlfCheck=false;}if(this.buffer[this.pos]===Pg||this.buffer[this.pos]===Jo){this.buffer[this.pos]===Jo&&(this.crlfCheck=true),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=false;continue}if(this.buffer[this.pos]===Pg||this.buffer[this.pos]===Jo){this.buffer[this.pos]===Jo&&(this.crlfCheck=true),this.parseLine(this.buffer.subarray(0,this.pos),this.event),this.buffer=this.buffer.subarray(this.pos+1),this.pos=0,this.eventEndCheck=true;continue}this.pos++;}r();}parseLine(e,A){if(e.length===0)return;let r=e.indexOf(jU);if(r===0)return;let s="",n="";if(r!==-1){s=e.subarray(0,r).toString("utf8");let i=r+1;e[i]===$U&&++i,n=e.subarray(i).toString("utf8");}else s=e.toString("utf8"),n="";switch(s){case "data":A[s]===void 0?A[s]=n:A[s]+=`
|
|
49
|
-
${n}`;break;case "retry":ap(n)&&(A[s]=n);break;case "id":cp(n)&&(A[s]=n);break;case "event":n.length>0&&(A[s]=n);break}}processEvent(e){e.retry&&ap(e.retry)&&(this.state.reconnectionTime=parseInt(e.retry,10)),e.id&&cp(e.id)&&(this.state.lastEventId=e.id),e.data!==void 0&&this.push({type:e.event||"message",options:{data:e.data,lastEventId:this.state.lastEventId,origin:this.state.origin}});}clearEvent(){this.event={data:void 0,event:void 0,id:void 0,retry:void 0};}};lp.exports={EventSourceStream:Og};});var Bp=S((qY,Qp)=>{var{pipeline:eT}=R("stream"),{fetching:tT}=Cn(),{makeRequest:AT}=ns(),{webidl:dA}=Oe(),{EventSourceStream:rT}=gp(),{parseMIMEType:sT}=je(),{createFastMessageEvent:nT}=gs(),{isNetworkError:up}=hn(),{delay:iT}=Vg(),{kEnumerableProperty:Er}=j(),{environmentSettingsObject:Ep}=ot(),hp=false,Ip=3e3,Fn=0,Cp=1,kn=2,oT="anonymous",aT="use-credentials",Cs=class t extends EventTarget{#e={open:null,error:null,message:null};#t=null;#s=false;#r=Fn;#A=null;#n=null;#i;#o;constructor(e,A={}){super(),dA.util.markAsUncloneable(this);let r="EventSource constructor";dA.argumentLengthCheck(arguments,1,r),hp||(hp=true,process.emitWarning("EventSource is experimental, expect them to change at any time.",{code:"UNDICI-ES"})),e=dA.converters.USVString(e,r,"url"),A=dA.converters.EventSourceInitDict(A,r,"eventSourceInitDict"),this.#i=A.dispatcher,this.#o={lastEventId:"",reconnectionTime:Ip};let s=Ep,n;try{n=new URL(e,s.settingsObject.baseUrl),this.#o.origin=n.origin;}catch(a){throw new DOMException(a,"SyntaxError")}this.#t=n.href;let i=oT;A.withCredentials&&(i=aT,this.#s=true);let o={redirect:"follow",keepalive:true,mode:"cors",credentials:i==="anonymous"?"same-origin":"omit",referrer:"no-referrer"};o.client=Ep.settingsObject,o.headersList=[["accept",{name:"accept",value:"text/event-stream"}]],o.cache="no-store",o.initiator="other",o.urlList=[new URL(this.#t)],this.#A=AT(o),this.#a();}get readyState(){return this.#r}get url(){return this.#t}get withCredentials(){return this.#s}#a(){if(this.#r===kn)return;this.#r=Fn;let e={request:this.#A,dispatcher:this.#i},A=r=>{up(r)&&(this.dispatchEvent(new Event("error")),this.close()),this.#c();};e.processResponseEndOfBody=A,e.processResponse=r=>{if(up(r))if(r.aborted){this.close(),this.dispatchEvent(new Event("error"));return}else {this.#c();return}let s=r.headersList.get("content-type",true),n=s!==null?sT(s):"failure",i=n!=="failure"&&n.essence==="text/event-stream";if(r.status!==200||i===false){this.close(),this.dispatchEvent(new Event("error"));return}this.#r=Cp,this.dispatchEvent(new Event("open")),this.#o.origin=r.urlList[r.urlList.length-1].origin;let o=new rT({eventSourceSettings:this.#o,push:a=>{this.dispatchEvent(nT(a.type,a.options));}});eT(r.body.stream,o,a=>{a?.aborted===false&&(this.close(),this.dispatchEvent(new Event("error")));});},this.#n=tT(e);}async#c(){this.#r!==kn&&(this.#r=Fn,this.dispatchEvent(new Event("error")),await iT(this.#o.reconnectionTime),this.#r===Fn&&(this.#o.lastEventId.length&&this.#A.headersList.set("last-event-id",this.#o.lastEventId,true),this.#a()));}close(){dA.brandCheck(this,t),this.#r!==kn&&(this.#r=kn,this.#n.abort(),this.#A=null);}get onopen(){return this.#e.open}set onopen(e){this.#e.open&&this.removeEventListener("open",this.#e.open),typeof e=="function"?(this.#e.open=e,this.addEventListener("open",e)):this.#e.open=null;}get onmessage(){return this.#e.message}set onmessage(e){this.#e.message&&this.removeEventListener("message",this.#e.message),typeof e=="function"?(this.#e.message=e,this.addEventListener("message",e)):this.#e.message=null;}get onerror(){return this.#e.error}set onerror(e){this.#e.error&&this.removeEventListener("error",this.#e.error),typeof e=="function"?(this.#e.error=e,this.addEventListener("error",e)):this.#e.error=null;}},dp={CONNECTING:{__proto__:null,configurable:false,enumerable:true,value:Fn,writable:false},OPEN:{__proto__:null,configurable:false,enumerable:true,value:Cp,writable:false},CLOSED:{__proto__:null,configurable:false,enumerable:true,value:kn,writable:false}};Object.defineProperties(Cs,dp);Object.defineProperties(Cs.prototype,dp);Object.defineProperties(Cs.prototype,{close:Er,onerror:Er,onmessage:Er,onopen:Er,readyState:Er,url:Er,withCredentials:Er});dA.converters.EventSourceInitDict=dA.dictionaryConverter([{key:"withCredentials",converter:dA.converters.boolean,defaultValue:()=>false},{key:"dispatcher",converter:dA.converters.any}]);Qp.exports={EventSource:Cs,defaultReconnectionTime:Ip};});var mp=S((_Y,P)=>{var cT=Or(),fp=Ls(),lT=Wr(),gT=CC(),uT=qr(),ET=Il(),hT=HC(),IT=qC(),pp=ne(),Po=j(),{InvalidArgumentError:Vo}=pp,ds=Md(),CT=Ts(),dT=Kl(),QT=hQ(),BT=$l(),fT=xl(),pT=Pi(),{getGlobalDispatcher:wp,setGlobalDispatcher:wT}=$i(),mT=eo(),yT=Mi(),DT=Li();Object.assign(fp.prototype,ds);P.exports.Dispatcher=fp;P.exports.Client=cT;P.exports.Pool=lT;P.exports.BalancedPool=gT;P.exports.Agent=uT;P.exports.ProxyAgent=ET;P.exports.EnvHttpProxyAgent=hT;P.exports.RetryAgent=IT;P.exports.RetryHandler=pT;P.exports.DecoratorHandler=mT;P.exports.RedirectHandler=yT;P.exports.createRedirectInterceptor=DT;P.exports.interceptors={redirect:pQ(),retry:mQ(),dump:DQ(),dns:FQ()};P.exports.buildConnector=CT;P.exports.errors=pp;P.exports.util={parseHeaders:Po.parseHeaders,headerNameToString:Po.headerNameToString};function Nn(t){return (e,A,r)=>{if(typeof A=="function"&&(r=A,A=null),!e||typeof e!="string"&&typeof e!="object"&&!(e instanceof URL))throw new Vo("invalid url");if(A!=null&&typeof A!="object")throw new Vo("invalid opts");if(A&&A.path!=null){if(typeof A.path!="string")throw new Vo("invalid opts.path");let i=A.path;A.path.startsWith("/")||(i=`/${i}`),e=new URL(Po.parseOrigin(e).origin+i);}else A||(A=typeof e=="object"?e:{}),e=Po.parseURL(e);let{agent:s,dispatcher:n=wp()}=A;if(s)throw new Vo("unsupported opts.agent. Did you mean opts.client?");return t.call(n,{...A,origin:e.origin,path:e.search?`${e.pathname}${e.search}`:e.pathname,method:A.method||(A.body?"PUT":"GET")},r)}}P.exports.setGlobalDispatcher=wT;P.exports.getGlobalDispatcher=wp;var ST=Cn().fetch;P.exports.fetch=async function(e,A=void 0){try{return await ST(e,A)}catch(r){throw r&&typeof r=="object"&&Error.captureStackTrace(r),r}};P.exports.Headers=ir().Headers;P.exports.Response=hn().Response;P.exports.Request=ns().Request;P.exports.FormData=Vs().FormData;P.exports.File=globalThis.File??R("buffer").File;P.exports.FileReader=OB().FileReader;var{setGlobalOrigin:RT,getGlobalOrigin:FT}=Cc();P.exports.setGlobalOrigin=RT;P.exports.getGlobalOrigin=FT;var{CacheStorage:kT}=$B(),{kConstruct:NT}=wo();P.exports.caches=new kT(NT);var{deleteCookie:bT,getCookies:MT,getSetCookies:LT,setCookie:UT}=uf();P.exports.deleteCookie=bT;P.exports.getCookies=MT;P.exports.getSetCookies=LT;P.exports.setCookie=UT;var{parseMIMEType:TT,serializeAMimeType:vT}=je();P.exports.parseMIMEType=TT;P.exports.serializeAMimeType=vT;var{CloseEvent:xT,ErrorEvent:GT,MessageEvent:YT}=gs();P.exports.WebSocket=ip().WebSocket;P.exports.CloseEvent=xT;P.exports.ErrorEvent=GT;P.exports.MessageEvent=YT;P.exports.request=Nn(ds.request);P.exports.stream=Nn(ds.stream);P.exports.pipeline=Nn(ds.pipeline);P.exports.connect=Nn(ds.connect);P.exports.upgrade=Nn(ds.upgrade);P.exports.MockClient=dT;P.exports.MockPool=BT;P.exports.MockAgent=QT;P.exports.mockErrors=fT;var{EventSource:HT}=Bp();P.exports.EventSource=HT;});var Em=fileURLToPath(import.meta.url),Bu=Ae.dirname(Em);function pu(){let t=[Ae.join(Bu,"../package.json"),Ae.join(Bu,"../../package.json")];for(let e of t)try{let r=JSON.parse($.readFileSync(e,"utf8")).version;if(typeof r=="string"&&r)return r}catch{continue}return "1.0.0"}function pa(t){console.log(hr.cyan.bold("DevAssure CLI")),console.log(""),console.log(hr.white("Usage: devassure [command] [options]")),console.log(""),console.log(hr.yellow.bold("Commands:")),console.log(" version Print the version of the app"),console.log(" help Show help information"),console.log(" login Login to DevAssure"),console.log(" logout Logout from DevAssure"),console.log(" add-token <token> Add and validate authentication token"),console.log(" init Initialize DevAssure configuration"),console.log(" run-tests Run tests (same as new but uses current directory as test cases directory)"),console.log(" run Run tests (alias for run-tests)"),console.log(" Use --csv <path> to pass test cases as a CSV file (relative or absolute)"),console.log(" stats Show statistics about sessions, scenarios, and storage"),console.log(" summary Print summary for a test session (--session-id or --last, optional --json)"),console.log(" cleanup Clean up execution history to free up space"),console.log(" archive-report Archive report results for a test session (--output-dir, --session-id or --last)"),console.log(" open-report Open report server for a test session (--session-id, --last, or --archive)"),console.log(""),console.log(hr.yellow.bold("Options:")),console.log(" -v, --verbose Print verbose output"),console.log(" -s, --short Print short output"),console.log(" --env <environment> Set environment (dev, prod, staging)"),console.log(" -h, --help Display help for command"),console.log(""),console.log(hr.gray("For more information, visit: https://www.npmjs.com/package/@devassure/cli"));}var vp=Qu(eE()),ta=Qu(mp());var Je=(t=>(t.TEXT="text",t.PASSWORD="password",t.SELECT="select",t.MULTISELECT="multiselect",t.CONFIRM="confirm",t.KEYPRESS="keypress",t.USERKILL="userKill",t))(Je||{}),ms=(t=>(t.TOKEN="token",t.API_KEY="api_key",t.API_KEY_ENV_VAR="api_key_env_var",t.OAUTH="oauth",t))(ms||{}),F=(t=>(t.RUNNING="running",t.SUCCESS="success",t.PASSED="passed",t.FAILED="failed",t.WAITING="waiting",t.FAILING="failing",t.SKIPPED="skipped",t.CANCELLED="cancelled",t.ERROR="error",t))(F||{}),ys=["success","passed","failed","skipped","cancelled","error"],HA=(t=>(t.NUMBER="number",t.PROGRESS_BAR="progressBar",t.THIN_PROGRESS_BAR="thinProgressBar",t.PERCENTAGE="percentage",t.ETA="eta",t.DOTTED="dotted",t))(HA||{}),K=(t=>(t.SPINNER="spinner",t.CHECK="check",t.CROSS="cross",t.ARROW="arrow",t.DOT="dot",t.CIRCLE="circle",t.CIRCLE_FILL="circleFill",t.CIRCLE_SPINNER="circleSpinner",t.BLINKING_CIRCLE="blinkingCircle",t.BLINKING_DIAMOND="blinkingDiamond",t.BLINKING_HEXAGON="blinkingHexagon",t.SQUARE="square",t.HEXAGON="hexagon",t.DIAMOND="diamond",t))(K||{});function k(t,e,A){return {message:t,styles:e,maxCharLength:A}}function X(t){return t.map(e=>k(e))}var Wo="devassure";function tA(){let t=st.homedir(),e;return process.platform==="win32"?e=Ae.join(t,"AppData","Local",Wo,Wo):process.platform==="darwin"?e=Ae.join(t,"Library","Application Support",Wo):e=Ae.join(t,".local","share",Wo),e}function YA(){return Ae.join(tA(),"bin")}function ps(){let t=process.platform==="win32"?"devassure-agent.exe":"devassure-agent";return Ae.join(YA(),t)}function PT(){let t=process.platform==="win32"?"node.exe":"node";return Ae.join(YA(),".devassure-agent-internal","playwright","driver",t)}function $g(){return Ae.join(tA(),"data")}function ws(){return Ae.join(tA(),".secrets")}function xn(){return Ae.join(tA(),".cache")}var OT=createRequire(import.meta.url),WT=OT("sqlite3"),Jt=null,ea=null;function Ln(t,e,A=[]){return new Promise((r,s)=>{t.run(e,A,function(n){n?s(n):r();});})}function qT(t,e,A=[]){return new Promise((r,s)=>{t.get(e,A,(n,i)=>{n?s(n):r(i);});})}function _T(t,e,A=[]){return new Promise((r,s)=>{t.all(e,A,(n,i)=>{n?s(n):r(i);});})}async function jo(){if(Jt)return Jt;let t=$g();return await se.mkdir(t,{recursive:true}),ea=Ae.join(t,"devassure.db"),Jt=await new Promise((e,A)=>{let r=new WT.Database(ea,s=>{s?A(s):e(r);});}),await Ln(Jt,"PRAGMA journal_mode = WAL;"),await Ln(Jt,"PRAGMA busy_timeout = 5000;"),await Ln(Jt,"PRAGMA synchronous = NORMAL;"),await Ln(Jt,"PRAGMA foreign_keys = ON;"),Jt}async function zT(){Jt&&(await new Promise((t,e)=>{Jt.close(A=>A?e(A):t());}),Jt=null,ea=null);}function ZT(){return ea}function Wg(t){let e=t?.code,A=String(t?.message??t);return !!(e==="SQLITE_ERROR"&&A.includes("no such table")||e==="SQLITE_CANTOPEN")}var Ce={run:async(t,e=[])=>{try{await Ln(await jo(),t,e);}catch(A){if(Wg(A))return;throw A}},get:async(t,e=[])=>{try{return await qT(await jo(),t,e)}catch(A){if(Wg(A))return;throw A}},all:async(t,e=[])=>{try{return await _T(await jo(),t,e)}catch(A){if(Wg(A))return [];throw A}}},KT=class{static async getClient(){return await jo()}static async disconnect(){await zT();}static getDbPath(){return ZT()}},yp=KT,BA=class{run(t,e=[]){return Ce.run(t,e)}get(t,e=[]){return Ce.get(t,e)}all(t,e=[]){return Ce.all(t,e)}},qo=z.object({id:z.string(),project_path:z.string(),pid:z.number().nullable(),status:z.string(),title:z.string().nullable(),branch_name:z.string().nullable(),commit_id:z.string().nullable(),current_phase:z.string().nullable(),created_at:z.string().nullable(),end_time:z.string().nullable(),duration:z.number().nullable(),session_type:z.string().nullable(),test_cases_dir:z.string().nullable(),test_case_file:z.string().nullable(),test_cases_csv_path:z.string().nullable(),concurrency:z.number().nullable(),test_environment:z.string().nullable()});async function me(t,e=5){let A=0;for(;;)try{return await t()}catch(r){let s=String(r?.message||r);if(!(s.includes("SQLITE_BUSY")||s.includes("database is locked"))||A>=e)throw r;let i=50*Math.pow(2,A);await new Promise(o=>setTimeout(o,i)),A++;}}var XT=class extends BA{async getById(t){let e=await this.get("SELECT * FROM TestSession WHERE id = ? LIMIT 1",[t]);return e?qo.parse(e):void 0}async getAll(){return (await this.all("SELECT * FROM TestSession",[])).map(e=>qo.parse(e))}async getAllOrderedByCreatedAt(){return (await this.all("SELECT * FROM TestSession ORDER BY created_at DESC",[])).map(e=>qo.parse(e))}async getLastSessionId(){return (await this.get("SELECT id FROM TestSession ORDER BY created_at DESC LIMIT 1",[]))?.id}async getLastSessions(t){return (await this.all("SELECT * FROM TestSession ORDER BY created_at DESC LIMIT ?",[t])).map(A=>qo.parse(A))}async getCount(){return (await this.get("SELECT COUNT(*) as count FROM TestSession",[]))?.count??0}async getExistingSessionIds(t){if(t.length===0)return [];let e=t.map(()=>"?").join(", ");return (await this.all(`SELECT id FROM TestSession WHERE id IN (${e})`,t)).map(r=>r.id)}async deleteByIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM TestSession WHERE id IN (${e})`,t));}async updateStatus(t,e){await me(()=>this.run("UPDATE TestSession SET status = ? WHERE id = ?",[e,t]));}},jT=z.object({id:z.string(),session_id:z.string(),label:z.string(),name:z.string(),status:z.string(),waiting_on:z.string().nullable(),browser_session_id:z.string().nullable(),created_at:z.string().nullable()}),Dp=z.object({id:z.string(),task_id:z.string(),label:z.string(),name:z.string(),type:z.string(),status:z.string(),data:z.string().nullable(),user_input:z.string().nullable(),created_at:z.string().nullable()}),$T=z.object({id:z.string(),content:z.string(),parent_type:z.string().nullable(),parent_id:z.string().nullable(),type:z.string().nullable(),created_at:z.string().nullable()}),ev=class extends BA{async getBySessionId(t){return (await this.all("SELECT * FROM Task WHERE session_id = ?",[t])).map(A=>jT.parse(A))}async getStepsByTaskId(t){return (await this.all("SELECT * FROM TaskStep WHERE task_id = ? ORDER BY created_at ASC",[t])).map(A=>Dp.parse(A))}async updateTaskStepUserInput(t,e){await me(()=>this.run("UPDATE TaskStep SET user_input = ?, status = 'validating' WHERE id = ?",[e,t]));}async getValidatingUserInputTaskStep(t){let e=await this.get("SELECT * FROM TaskStep WHERE task_id = ? AND type = 'userInput' AND status = 'validating' LIMIT 1",[t]);return e?Dp.parse(e):null}async getMessagesByParent(t,e){return (await this.all("SELECT * FROM Message WHERE parent_id = ? AND parent_type = ? ORDER BY created_at ASC",[t,e])).map(r=>$T.parse(r))}},tv=z.object({id:z.string(),test_session_id:z.string(),status:z.string(),title:z.string(),label:z.string().nullable(),browser_session_id:z.string().nullable(),steps:z.string().nullable(),tags:z.string().nullable(),test_type:z.string().nullable(),agent_type:z.string().nullable(),test_data:z.string().nullable(),priority:z.string().nullable(),created_at:z.string().nullable()}),Gp=z.object({id:z.string(),test_session_id:z.string(),scenario_id:z.string().nullable(),agent_type:z.string(),browser:z.string(),resolution_x:z.number().nullable(),resolution_y:z.number().nullable(),headless:z.number(),status:z.string(),cdp_port:z.number().nullable(),worker_id:z.number().nullable(),created_at:z.string().nullable(),start_time:z.string().nullable(),end_time:z.string().nullable()}),Av=z.object({id:z.string(),created_at:z.string().nullable(),browser_session_id:z.string(),step_number:z.number(),start_time:z.string(),end_time:z.string(),url:z.string().nullable(),page_title:z.string().nullable(),evaluation_previous_goal:z.string().nullable(),next_goal:z.string().nullable(),thinking:z.string().nullable(),bu_screenshot_path:z.string().nullable(),screenshot_path:z.string().nullable(),type:z.string()}),rv=z.object({id:z.string(),created_at:z.string().nullable(),agent_step_id:z.string(),action:z.string()}),sv=z.object({id:z.string(),created_at:z.string().nullable(),agent_step_id:z.string(),validation_type:z.string().nullable(),status:z.string(),progress:z.string().nullable(),summary:z.string().nullable(),reasoning:z.string().nullable(),expected_result:z.string().nullable(),actual_result:z.string().nullable(),failure_message:z.string().nullable(),next_step:z.string().nullable()}),nv=z.object({id:z.string(),created_at:z.string().nullable(),scenario_id:z.string(),validation_type:z.string(),description:z.string(),step_number:z.string()}),Un=z.object({id:z.string(),test_session_id:z.string(),parent_id:z.string(),parent_type:z.string(),message:z.string(),error_type:z.string().nullable(),created_at:z.string().nullable()}),Yp=z.object({id:z.string(),created_at:z.string().nullable(),parent_id:z.string(),parent_type:z.string(),issue_type:z.string(),description:z.string(),severity:z.string(),root_cause:z.string().nullable(),next_steps:z.string().nullable(),scenario_ids:z.string().nullable()}),iv=class extends BA{async getBySessionId(t){return (await this.all("SELECT * FROM Scenario WHERE test_session_id = ?",[t])).map(A=>tv.parse(A))}async getBrowserSessionById(t){let e=await this.get("SELECT * FROM BrowserSession WHERE id = ? LIMIT 1",[t]);return e?Gp.parse(e):void 0}async getAgentStepsByBrowserSessionId(t){return (await this.all("SELECT * FROM AgentStep WHERE browser_session_id = ? ORDER BY step_number ASC",[t])).map(A=>Av.parse(A))}async getAgentStepActionsByStepId(t){return (await this.all("SELECT * FROM AgentStepAction WHERE agent_step_id = ?",[t])).map(A=>rv.parse(A))}async getAgentStepValidationsByStepId(t){return (await this.all("SELECT * FROM AgentStepValidation WHERE agent_step_id = ?",[t])).map(A=>sv.parse(A))}async getPassedValidationsByScenarioId(t){return (await this.all("SELECT * FROM PassedValidation WHERE scenario_id = ?",[t])).map(A=>nv.parse(A))}async getPassedValidationCountByTestSessionId(t){return (await this.get("SELECT COUNT(*) as count FROM PassedValidation WHERE scenario_id IN (SELECT id FROM Scenario WHERE test_session_id = ?)",[t]))?.count??0}async getErrorsByScenarioId(t){return (await this.all("SELECT * FROM Error WHERE parent_id = ? AND parent_type = 'scenario' ORDER BY created_at ASC",[t])).map(A=>Un.parse(A))}async getIssuesByParent(t,e){return (await this.all("SELECT * FROM Issue WHERE parent_id = ? AND parent_type = ? ORDER BY created_at ASC",[t,e])).map(r=>Yp.parse(r))}async getCountExcludingStatuses(t){if(t.length===0)return (await this.get("SELECT COUNT(*) as count FROM Scenario",[]))?.count??0;let e=t.map(()=>"status != ?").join(" AND ");return (await this.get(`SELECT COUNT(*) as count FROM Scenario WHERE ${e}`,t))?.count??0}async getCount(){return (await this.get("SELECT COUNT(*) as count FROM Scenario WHERE status != 'new' AND status != 'executing'",[]))?.count??0}async deleteBySessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM Scenario WHERE test_session_id IN (${e})`,t));}async getScenarioIdsBySessionIds(t){if(t.length===0)return [];let e=t.map(()=>"?").join(", ");return (await this.all(`SELECT id FROM Scenario WHERE test_session_id IN (${e})`,t)).map(r=>r.id)}},ov=z.object({id:z.string(),created_at:z.string().nullable(),scenario_id:z.string(),status:z.string(),execution_summary:z.string().nullable(),analysis_summary:z.string().nullable(),score:z.number().nullable(),step_count:z.number().nullable()}),av=z.object({id:z.string(),created_at:z.string().nullable(),test_session_id:z.string(),status:z.string(),session_summary:z.string().nullable(),analysis_summary:z.string().nullable(),score:z.number().nullable(),step_count:z.number().nullable()}),cv=class extends BA{async getLatestScenarioAnalysis(t){let e=await this.get("SELECT * FROM ScenarioAnalysis WHERE scenario_id = ? ORDER BY created_at DESC LIMIT 1",[t]);return e?ov.parse(e):void 0}async getLatestTestSessionAnalysis(t){let e=await this.get("SELECT * FROM TestSessionAnalysis WHERE test_session_id = ? ORDER BY created_at DESC LIMIT 1",[t]);return e?av.parse(e):void 0}async getIssuesByParent(t,e){return (await this.all("SELECT * FROM Issue WHERE parent_id = ? AND parent_type = ? ORDER BY created_at ASC",[t,e])).map(r=>Yp.parse(r))}async getFailedValidationCountByTestSessionId(t){return (await this.get("SELECT COUNT(*) as count FROM Issue WHERE parent_type = 'scenario_analysis' AND parent_id IN (SELECT id FROM ScenarioAnalysis WHERE scenario_id IN (SELECT id FROM Scenario WHERE test_session_id = ?))",[t]))?.count??0}},lv=class extends BA{async getByParent(t,e){let A=await this.get("SELECT * FROM Error WHERE parent_id = ? AND parent_type = ? LIMIT 1",[t,e]);return A?Un.parse(A):void 0}async getBySessionId(t){return (await this.all("SELECT * FROM Error WHERE test_session_id = ? AND parent_type = 'test_session' ORDER BY created_at ASC",[t])).map(A=>Un.parse(A))}async getByScenarioId(t){return (await this.all("SELECT * FROM Error WHERE parent_id = ? AND parent_type = 'scenario' ORDER BY created_at ASC",[t])).map(A=>Un.parse(A))}async getAllByParent(t,e){return (await this.all("SELECT * FROM Error WHERE parent_id = ? AND parent_type = ? ORDER BY created_at ASC",[t,e])).map(r=>Un.parse(r))}async createForSession(t,e){let A=v4(),r=new Date().toISOString();await this.run("INSERT INTO Error (id, test_session_id, parent_id, parent_type, message, error_type, created_at) VALUES (?, ?, ?, 'test_session', ?, NULL, ?)",[A,t,t,e,r]);}},gv=class extends BA{async getTotalScenarioCount(t){return (await this.get("SELECT COUNT(*) as count FROM Scenario WHERE test_session_id = ?",[t]))?.count??0}async getCompletedScenarioCount(t){return (await this.get("SELECT COUNT(*) as count FROM Scenario WHERE test_session_id = ? AND status IN ('passed', 'failed', 'cancelled', 'skipped', 'error')",[t]))?.count??0}},uv=class extends BA{async getCount(){return (await this.get("SELECT COUNT(*) as count FROM BrowserSession",[]))?.count??0}async getBySessionIds(t){if(t.length===0)return [];let e=t.map(()=>"?").join(", ");return (await this.all(`SELECT * FROM BrowserSession WHERE test_session_id IN (${e})`,t)).map(r=>Gp.parse(r))}async getBrowserSessionIdsBySessionIds(t){if(t.length===0)return [];let e=t.map(()=>"?").join(", ");return (await this.all(`SELECT id FROM BrowserSession WHERE test_session_id IN (${e})`,t)).map(r=>r.id)}async deleteBySessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM BrowserSession WHERE test_session_id IN (${e})`,t));}},Ev=class extends BA{async deleteAgentStepActionsByBrowserSessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM AgentStepAction WHERE agent_step_id IN (SELECT id FROM AgentStep WHERE browser_session_id IN (${e}))`,t));}async deleteAgentStepValidationsByBrowserSessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM AgentStepValidation WHERE agent_step_id IN (SELECT id FROM AgentStep WHERE browser_session_id IN (${e}))`,t));}async deleteAgentStepsByBrowserSessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM AgentStep WHERE browser_session_id IN (${e})`,t));}async deletePassedValidationsByScenarioIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM PassedValidation WHERE scenario_id IN (${e})`,t));}async deleteTaskStepsBySessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM TaskStep WHERE task_id IN (SELECT id FROM Task WHERE session_id IN (${e}))`,t));}async deleteTasksBySessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM Task WHERE session_id IN (${e})`,t));}async deleteErrorsBySessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM Error WHERE test_session_id IN (${e})`,t));}async deleteMessagesBySessionIds(t,e,A,r,s){let n=[],i=[];if(t.length>0){let a=t.map(()=>"?").join(", ");n.push(`(parent_type = 'session' AND parent_id IN (${a}))`),i.push(...t);}if(e.length>0){let a=e.map(()=>"?").join(", ");n.push(`(parent_type = 'scenario' AND parent_id IN (${a}))`),i.push(...e);}if(A.length>0){let a=A.map(()=>"?").join(", ");n.push(`(parent_type = 'browser_session' AND parent_id IN (${a}))`),i.push(...A);}if(r.length>0){let a=r.map(()=>"?").join(", ");n.push(`(parent_type = 'task' AND parent_id IN (${a}))`),i.push(...r);}if(s.length>0){let a=s.map(()=>"?").join(", ");n.push(`(parent_type = 'step' AND parent_id IN (${a}))`),i.push(...s);}if(n.length===0)return;let o=n.join(" OR ");await me(()=>this.run(`DELETE FROM Message WHERE ${o}`,i));}async deleteIssuesByAnalysisIds(t,e){let A=[],r=[];if(t.length>0){let n=t.map(()=>"?").join(", ");A.push(`(parent_type = 'scenario_analysis' AND parent_id IN (${n}))`),r.push(...t);}if(e.length>0){let n=e.map(()=>"?").join(", ");A.push(`(parent_type = 'test_session_analysis' AND parent_id IN (${n}))`),r.push(...e);}if(A.length===0)return;let s=A.join(" OR ");await me(()=>this.run(`DELETE FROM Issue WHERE ${s}`,r));}async deleteBrowserSessionsBySessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM BrowserSession WHERE test_session_id IN (${e})`,t));}async deleteScenarioAnalysesByScenarioIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM ScenarioAnalysis WHERE scenario_id IN (${e})`,t));}async deleteScenariosBySessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM Scenario WHERE test_session_id IN (${e})`,t));}async deleteTestSessionAnalysesBySessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM TestSessionAnalysis WHERE test_session_id IN (${e})`,t));}async deleteReportsRendersBySessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM ReportsRender WHERE test_session_id IN (${e})`,t));}async deleteSessionDataBySessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM SessionData WHERE test_session_id IN (${e})`,t));}async deleteTestSessionsByIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM TestSession WHERE id IN (${e})`,t));}},_o=z.object({id:z.string(),created_at:z.string().nullable(),test_session_id:z.string(),status:z.string(),host:z.string().nullable(),port:z.number().nullable(),stopped_at:z.string().nullable(),archive:z.string().nullable()}),hv=class extends BA{async getByTestSessionId(t){return (await this.all("SELECT * FROM ReportsRender WHERE test_session_id = ?",[t])).map(A=>_o.parse(A))}async getByCreatedAtAfter(t){return (await this.all("SELECT * FROM ReportsRender WHERE created_at > ? ORDER BY created_at ASC",[t])).map(A=>_o.parse(A))}async getLatestByTestSessionId(t){let e=await this.get("SELECT * FROM ReportsRender WHERE test_session_id = ? ORDER BY created_at DESC LIMIT 1",[t]);return e?_o.parse(e):void 0}async getLatestByTestSessionIdAfter(t,e){let A=await this.get("SELECT * FROM ReportsRender WHERE test_session_id = ? AND created_at > ? ORDER BY created_at DESC LIMIT 1",[t,e]);return A?_o.parse(A):void 0}},Iv=class{constructor(){this._initialized=false,this._sessionRepository=null,this._taskRepository=null,this._scenarioRepository=null,this._analysisRepository=null,this._errorRepository=null,this._progressRepository=null,this._browserSessionRepository=null,this._cleanupRepository=null,this._reportsRenderRepository=null;}async initialize(){this._initialized||(await yp.getClient(),this._initialized=true);}get sessionRepository(){return this._sessionRepository||(this._sessionRepository=new XT),this._sessionRepository}get taskRepository(){return this._taskRepository||(this._taskRepository=new ev),this._taskRepository}get scenarioRepository(){return this._scenarioRepository||(this._scenarioRepository=new iv),this._scenarioRepository}get analysisRepository(){return this._analysisRepository||(this._analysisRepository=new cv),this._analysisRepository}get errorRepository(){return this._errorRepository||(this._errorRepository=new lv),this._errorRepository}get progressRepository(){return this._progressRepository||(this._progressRepository=new gv),this._progressRepository}get browserSessionRepository(){return this._browserSessionRepository||(this._browserSessionRepository=new uv),this._browserSessionRepository}get cleanupRepository(){return this._cleanupRepository||(this._cleanupRepository=new Ev),this._cleanupRepository}get reportsRenderRepository(){return this._reportsRenderRepository||(this._reportsRenderRepository=new hv),this._reportsRenderRepository}async close(){await yp.disconnect(),this._initialized=false,this._sessionRepository=null,this._taskRepository=null,this._scenarioRepository=null,this._analysisRepository=null,this._errorRepository=null,this._progressRepository=null,this._browserSessionRepository=null,this._cleanupRepository=null,this._reportsRenderRepository=null;}},M=new Iv,St=class Hp{constructor(e){this.taskRepository=e;}async getPendingUserInputTaskStep(e){return (await this.taskRepository.getStepsByTaskId(e)).find(s=>s.type==="userInput"&&s.status==="pending")||null}static isTaskActive(e){return ["pending","running","waiting","validating","failing"].includes(e)}static isTaskCompleted(e){return ["success","error","skipped","cancelled"].includes(e)}static mapTaskStatusToFeedStatus(e){switch(e){case "pending":case "waiting":case "validating":return "waiting";case "running":return "running";case "success":return "success";case "error":return "failed";case "skipped":return "skipped";case "cancelled":return "cancelled";case "failing":return "failing";default:return "running"}}async getTaskMessages(e){let A=await this.taskRepository.getStepsByTaskId(e),r=[];for(let i of A)i.label?r.push(k(i.label)):i.name&&r.push(k(i.name));let s=await this.taskRepository.getMessagesByParent(e,"task");for(let i of s)i.content&&r.push(k(i.content,{icon:"circle",iconColor:"gray",textColor:"gray"}));for(let i of A){let o=await this.taskRepository.getMessagesByParent(i.id,"step");for(let a of o)a.content&&r.push(k(a.content,{icon:"circle",iconColor:"gray",textColor:"gray"}));}return await this.taskRepository.getValidatingUserInputTaskStep(e)&&r.push(k("Validating...")),r}static createFeedItem(e,A){let r=Hp.mapTaskStatusToFeedStatus(e.status),s=A.length>0?[A[A.length-1]]:[],n=A.length>1?A.slice(0,-1):[];return {id:`task-${e.id}`,name:e.name,status:r,objectType:"Task",stateIndicators:[{status:"running",indicator:"spinner",color:"blue"},{status:"success",indicator:"check",color:"green"},{status:"failed",indicator:"cross",color:"red"},{status:"waiting",indicator:"blinkingCircle",color:"yellow"},{status:"failing",indicator:"spinner",color:"red"}],currentMessages:s,allMessages:n}}static getPromptTypeFromTaskStepData(e){if(!e)return null;try{let r=JSON.parse(e).input_type;return r==="string"||r==="number"?"text":r==="boolean"?"confirm":null}catch{return null}}},bn=class Jp{constructor(e){this.scenarioRepository=e;}static isScenarioActive(e){return ["executing","executed","analysing"].includes(e)}static isScenarioCompleted(e){return ["passed","failed","cancelled","skipped","error"].includes(e)}static mapScenarioStatusToFeedStatus(e){switch(e){case "new":return "waiting";case "executing":case "executed":case "analysing":return "running";case "passed":return "success";case "failed":return "failed";case "skipped":return "skipped";case "cancelled":return "cancelled";case "error":return "failed";default:return "running"}}async getScenarioMessages(e){let A=[];if(!e.browser_session_id)return A;let r=await this.scenarioRepository.getBrowserSessionById(e.browser_session_id);if(!r)return A;let s=await this.scenarioRepository.getAgentStepsByBrowserSessionId(r.id),n;if(s.length>0){let a=s[s.length-1];(a.step_number-=0)&&(a.evaluation_previous_goal?.trim()&&a.evaluation_previous_goal.trim()?.toLowerCase()!=="n/a"&&A.push(k(a.evaluation_previous_goal,{icon:"\u{1F916}"},2e3)),a.next_goal?.trim()&&a.next_goal.trim()?.toLowerCase()!=="n/a"&&(n=k(a.next_goal,{icon:"\u{1F5A5}\uFE0F"},2e3)),a.thinking?.trim()&&a.thinking.trim()?.toLowerCase()!=="n/a"&&A.push(k(a.thinking,{icon:"\u{1F9E0}"},2e3)));}for(let a of s){let c=await this.scenarioRepository.getAgentStepActionsByStepId(a.id);for(let g of c)g.action&&A.push(k(g.action,{icon:"circle",iconColor:"gray",textColor:"gray"}));}for(let a of s){let c=await this.scenarioRepository.getAgentStepValidationsByStepId(a.id);for(let g of c){let E=[];if(g.validation_type&&E.push(`Type: ${g.validation_type}`),g.status&&E.push(`Status: ${g.status}`),g.summary&&E.push(`Summary: ${g.summary}`),g.reasoning&&E.push(`Reasoning: ${g.reasoning}`),g.actual_result&&E.push(`Actual: ${g.actual_result}`),g.failure_message&&E.push(`Failure: ${g.failure_message}`),g.next_step&&E.push(`Next: ${g.next_step}`),E.length>0){let B=E.join(" | ");g.status==="pass"?A.push(k(B,{icon:"check",iconColor:"green",textColor:"white"})):g.status==="fail"?A.push(k(B,{icon:"cross",iconColor:"red",textColor:"white"})):A.push(k(B));}}}let i=await this.scenarioRepository.getPassedValidationsByScenarioId(e.id);for(let a of i){let c=[];a.validation_type&&c.push(`Type: ${a.validation_type}`),a.description&&c.push(`Description: ${a.description}`),c.length>0&&A.push(k(c.join(" | "),{icon:"circle",iconColor:"gray",textColor:"gray"}));}let o=await this.scenarioRepository.getErrorsByScenarioId(e.id);for(let a of o)a.message&&A.push(k(a.message,{icon:"cross",iconColor:"red",textColor:"white"}));return n&&A.push(n),A}static createFeedItem(e,A){let r=Jp.mapScenarioStatusToFeedStatus(e.status),s=e.title;return e.label?.trim()&&e.label.trim().length<50&&(s=`${e.label} | ${s}`),{id:`scenario-${e.id}`,name:s,status:r,objectType:"Scenario",stateIndicators:[{status:"running",indicator:"\u{1F9EA}",color:"blue"},{status:"failing",indicator:"\u{1F9EA}",color:"red"}],currentMessages:A,colorTheme:"magenta",typewriterEffect:{enabled:true,charDelay:4,retainDuration:1e3,maxStreamCharLength:2e3,maxDisplayLength:300}}}};z.object({id:z.string(),test_session_id:z.string(),app_description:z.string().nullable(),app_rules:z.string().nullable(),personas:z.string().nullable(),agent_instructions:z.string().nullable(),test_data:z.string().nullable(),global_data:z.string().nullable(),filter:z.string().nullable()});z.object({sessionId:z.string(),title:z.string().nullable(),environment:z.string().nullable(),scenarios:z.number(),score:z.number().nullable(),passedValidations:z.number(),failedValidations:z.number(),failureGroups:z.number(),durationMs:z.number().nullable(),durationString:z.string()});var Cv="__DEVASSURE_BUILD_ENV__",Sp=typeof globalThis<"u"&&globalThis.__DEVASSURE_BUILD_ENV__!==void 0?globalThis.__DEVASSURE_BUILD_ENV__:"prod",dv={environment:"prod",auth:{authorizationUrl:"https://app.devassure.io/oauth/authorize",tokenUrl:"https://app.devassure.io/oauth/token",clientId:"M3oOg9oSnQksy4J2IFwd5zF2GekAEBi-DznaB-K8xKA",clientSecret:"YwFk23pHaQBF8azxt0KR8aMUwUANMl78cbEuQuJaq68",redirectUri:"http://127.0.0.1:3001/callback"},api:{baseUrl:"https://app.devassure.io"},posthog:{apiKey:"phc_GCpM30unLbtcxUSSWx5H2omEifldrXubk4FYM5kuVvA",host:"https://us.i.posthog.com",enabled:true}};function Qv(){if(Sp===Cv){let t=process.env.DEVASSURE_BUILD_ENV;return t==="dev"||t==="staging"||t==="prod"?t:"dev"}return Sp}var zo=null;function Bv(){return Qv()}function Aa(){return zo||(zo=dv,zo)}function Mn(){return Aa().auth}function fv(){return Aa().api}function Vp(){return Aa().posthog}var Pp=class Bs{constructor(){this.client=null,this.context=null,this.initialized=false,this.enabled=true,this.debug=false,this.exceptionListenersSetup=false,this.clientPort=null,this.getUser=null;}initialize(e,A,r,s,n,i){if(!this.initialized){if(this.enabled=r,this.debug=s,this.clientPort=n,this.getUser=i,this.setupExceptionListeners(),!r){this.initialized=true;return}this.client=new PostHog(e,{host:A||"https://app.posthog.com",flushAt:10,flushInterval:5e3,disableGeoip:false}),Bv()!=="dev"&&this.suppressPostHogFlushErrorsInProd(),this.initialized=true;}}suppressPostHogFlushErrorsInProd(){let e=console.error;console.error=(...A)=>{let r=A[0];(typeof r=="string"?r:r instanceof Error?r.message:String(r??"")).includes("Error while flushing PostHog")||e.apply(console,A);};}setupExceptionListeners(){this.exceptionListenersSetup||(process.on("uncaughtException",async e=>{console.error("Uncaught exception:",e);try{await this.captureErrorEvent({error:e,context:{type:"uncaughtException"}}),await this.shutdown();}catch{}process.exit(1);}),process.on("unhandledRejection",async e=>{console.error("Unhandled rejection:",e);try{let A=e instanceof Error?e:new Error(String(e));await this.captureErrorEvent({error:A,context:{type:"unhandledRejection"}}),await this.shutdown();}catch{}process.exit(1);}),this.exceptionListenersSetup=true);}async captureErrorEvent(e){try{let A={message:e.error.message,name:e.error.name,stack:e.error.stack,...e.context};this.capture("exception",A,"exception");}catch{}}setCommandContext(e,A){let r=this.clientPort?.getRuntime()||{source:"cli",version:"1.0.0"};this.context={command:e,commandArgs:A,machineDetails:Bs.getMachineDetails(),terminalType:Bs.getTerminalType(),version:r.version,source:r.source,commandStartTime:Date.now(),commandSessionId:v4()};}setUserContext(e){if(!this.context){let A=this.clientPort?.getRuntime()||{source:"cli",version:"1.0.0"};this.context={command:"unknown",commandArgs:{},machineDetails:Bs.getMachineDetails(),terminalType:Bs.getTerminalType(),version:A.version,source:A.source,commandStartTime:Date.now(),commandSessionId:v4()};}this.context.user={id:e.id,orgId:e.organization?.id,authType:e.authType},this.identify(e),this.groupIdentify(e);}identify(e){let A={distinctId:e.id,properties:{id:e.id,name:e.name,email:e.email,authType:e.authType,orgId:e.organization?.id}};if(!this.enabled){this.debug&&console.log("[PostHog] identify:",A);return}if(this.client)try{this.client.identify(A);}catch{}}groupIdentify(e){let A=e.organization;if(!A)return;let r={groupType:"company",groupKey:A.id,properties:{id:A.id,name:A.name,plan:A.plan_type,status:A.subscription_status},distinctId:e.id};if(!this.enabled){this.debug&&console.log("[PostHog] groupIdentify:",r);return}if(this.client)try{this.client.groupIdentify(r);}catch{}}capture(e,A,r){let s=Date.now(),n=this.context?.commandStartTime||s,i=s-n,a=(this.getUser?.()||null)?.id||this.context?.user?.id||"anonymous",c=this.context?.user?.orgId?{company:this.context.user.orgId}:void 0,E={...{eventType:r||"custom",source:this.context?.source||"cli",command:this.context?.command||"unknown",commandArgs:this.context?.commandArgs||{},authType:this.context?.user?.authType,version:this.context?.version||"0.0",createdAt:new Date().toISOString(),terminalType:this.context?.terminalType||"unknown",machineDetails:this.context?.machineDetails||Bs.getMachineDetails(),commandStartTime:new Date(n).toISOString(),elapsedTime:i,commandSessionId:this.context?.commandSessionId||"unset"},...A||{}};if(!this.enabled){this.debug&&console.log("[PostHog] capture:",{distinctId:a,event:e,properties:E,groups:c});return}if(!(!this.client||!this.context))try{this.client.capture({distinctId:a,event:e,properties:E,groups:c});}catch{}}async shutdown(){if(this.client)try{await this.client.shutdown(),this.client=null,this.initialized=!1,this.context=null;}catch{}}async flush(){if(this.client)try{await this.client.flush();}catch{}}static getMachineDetails(){let e=st.platform(),A=st.release(),r=st.hostname(),s=st.totalmem(),n=st.cpus(),i=e.toString();e==="darwin"?i="macOS":e==="win32"?i="Windows":e==="linux"&&(i="Linux");let o=(s/(1024*1024*1024)).toFixed(2)+"GB",a=n[0]?.model||"Unknown",c=n.length.toString(),g=n[0]?.speed?`${(n[0].speed/1e3).toFixed(2)}GHz`:"Unknown";return {os:i,osVersion:A,machineName:r,ram:o,cpu:a,cpuCount:c,cpuSpeed:g}}static getTerminalType(){let e=process.env.SHELL||"";return e.includes("zsh")?"zsh":e.includes("bash")?"bash":e.includes("powershell")||e.includes("pwsh")?"powershell":e.includes("cmd")?"cmd":e.includes("fish")?"fish":"unknown"}},zg="user.json";async function pv(t){try{let e=ws();await se.mkdir(e,{recursive:!0});let A=Ae.join(e,zg);await se.writeFile(A,JSON.stringify(t,null,2),{mode:384});try{await se.chmod(A,384);}catch{}}catch{}}var wv=class{constructor(){this.user=null;}async setUser(t){this.user=t,await pv(t);}getUser(){return this.user}async clearUser(){this.user=null;try{let t=ws(),e=Ae.join(t,zg);await se.unlink(e);}catch{}}hasUser(){return this.user!==null}async loadUserFromFile(){try{let t=ws(),e=Ae.join(t,zg),A=await se.readFile(e,"utf8"),r=JSON.parse(A);if(r&&r.id)return this.user=r,r}catch{}return null}},ze=new wv,Zo="access_token",Ko="refresh_token",Xo="auth_token",Op=ws(),fs=Ae.join(Op,"tokens.enc"),Wp="aes-256-gcm",Tn=16,Rp=16;function qp(){let t=st.hostname(),e=st.homedir(),A="1f6af1b7-c1bb-45f6-85e9-1fc7d791b1c3";return Rt.pbkdf2Sync(`${t}:${e}:${A}`,A,1e5,32,"sha256")}function _p(t){if(!t)return "";let e=qp(),A=Rt.randomBytes(Tn),r=Rt.createCipheriv(Wp,e,A),s=r.update(t,"utf8");s=Buffer.concat([s,r.final()]);let n=r.getAuthTag();return Buffer.concat([A,n,s]).toString("base64")}function mv(t){if(!t)return "";try{let e=Buffer.from(t,"base64"),A=e.subarray(0,Tn),r=e.subarray(Tn,Tn+Rp),s=e.subarray(Tn+Rp),n=qp(),i=Rt.createDecipheriv(Wp,n,A);i.setAuthTag(r);let o=i.update(s);return o=Buffer.concat([o,i.final()]),o.toString("utf8")}catch{return ""}}async function zp(){await se.mkdir(Op,{recursive:true});try{await se.access(fs);}catch{let e=_p("{}");await se.writeFile(fs,e,{mode:384});}try{await se.chmod(fs,384);}catch{}}async function QA(){await zp();try{let t=await se.readFile(fs,"utf8");if(!t||t.trim()==="")return {};let e=mv(t);if(!e)return {};let A=JSON.parse(e);if(A&&typeof A=="object")return A}catch{}return {}}async function Qs(t){await zp();let e=JSON.stringify(t,null,2),A=_p(e);await se.writeFile(fs,A,{mode:384});try{await se.chmod(fs,384);}catch{}}var Le=class{static async getAccessToken(){let e=(await QA())[Zo];return e&&e.trim()!==""?e:null}static async getRefreshToken(){let e=(await QA())[Ko];return e&&e.trim()!==""?e:null}static async saveAccessToken(t){let e=await QA();e[Zo]=t,await Qs(e);}static async saveRefreshToken(t){let e=await QA();e[Ko]=t,await Qs(e);}static async saveTokens(t,e){let A=await QA();A[Zo]=t,A[Ko]=e,await Qs(A);}static async clearTokens(){let t=await QA();t[Zo]="",t[Ko]="",t[Xo]="",await Qs(t),await ze.clearUser();}static async getAuthToken(){let e=(await QA())[Xo];return e&&e.trim()!==""?e:null}static async saveAuthToken(t){let e=await QA();e[Xo]=t,await Qs(e);}static async clearAuthToken(){let t=await QA();t[Xo]="",await Qs(t);}static async isAuthenticated(){return await this.getAccessToken()!==null}static async hasAuthToken(){return await this.getAuthToken()!==null}},Zp=class{constructor(){this.clientPort=null,this.webAppCall=null,this.eventService=null;}initialize(t,e,A){this.clientPort=t,this.webAppCall=e,this.eventService=A;}async login(){if(!this.clientPort)throw new Error("AuthService not initialized. Call initialize() first.");Mn();let t=await this.clientPort.userPrompt({type:"confirm",message:"Open browser to login?",initialValue:true});if(!t.ok||t.value!==true)throw new Error("Login cancelled by user");let e=this.generateRandomString(32),A=this.generateRandomString(128),r=await this.generateCodeChallenge(A),s=this.clientPort?.getRuntime()?.source==="vscode"?"agent_vsce":this.clientPort?.getRuntime()?.source==="cli"?"agent_cli":"agent",{authCode:n,redirectUri:i}=await this.startCallbackServer(e,A,r,s),o=await this.exchangeCodeForTokens(n,A,i);await Le.clearAuthToken(),await Le.saveTokens(o.access_token,o.refresh_token);try{let a=await this.ping(o.access_token);a.authType="oauth",await ze.setUser(a),this.eventService?.setUserContext(a);}catch{}return o}async refreshToken(){let t=await Le.getRefreshToken();if(!t)throw new Error("No refresh token available. Please login again.");let e=Mn();try{let A=Buffer.from(`${e.clientId}:${e.clientSecret}`).toString("base64"),r=await fetch(e.tokenUrl,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Authorization:`Basic ${A}`},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:t})});if(!r.ok){let n=await r.text();throw new Error(`Token refresh failed: ${r.status} ${n}`)}let s=await r.json();if(!s.access_token||!s.refresh_token)throw new Error("Invalid token response");await Le.clearAuthToken(),await Le.saveTokens(s.access_token,s.refresh_token);try{let n=await this.ping(s.access_token);n.authType="oauth",await ze.setUser(n),this.eventService?.setUserContext(n);}catch{}return s}catch(A){throw await Le.clearTokens(),A}}async ping(t){if(!this.webAppCall||!this.eventService)throw new Error("AuthService not initialized. Call initialize() first.");let e=await this.webAppCall("post","/oauth/ping",{},{},true,{Authorization:`Bearer ${t}`},void 0,this);if(this.eventService.capture("ping",{tokenType:"oauth",success:e.status!==200||!e.data,statusCode:e.status||0,endpoint:"/oauth/ping"}),e.exception)throw new Error(`Authentication ping failed: ${e.exception}`);if(!e.data)throw new Error("Authentication ping failed: No user data returned");if(e.status!==200)throw new Error(`Authentication ping failed: ${e.status} ${e.statusText}`);return e.data?.user}async jobPing(t,e="token"){if(!this.webAppCall||!this.eventService)throw new Error("AuthService not initialized. Call initialize() first.");let A=await this.webAppCall("post","/job_ping",{},{},false,{Authorization:`JWT ${t}`},void 0,this);if(this.eventService.capture("ping",{tokenType:e,success:A.status===200&&!!A.data,statusCode:A.status||0,endpoint:"/job_ping"}),A.exception)throw new Error(`Job ping failed: ${A.exception}`);if(!A.data)throw new Error("Job ping failed: No user data returned");if(A.status!==200)throw new Error(`Job ping failed: ${A.status} ${A.statusText}`);return A.data?.user}async ensureAuthenticated(){let t=await Le.getAccessToken();if(t)try{let e=await this.ping(t);return e.authType="oauth",await ze.setUser(e),this.eventService?.setUserContext(e),t}catch{try{let A=await this.refreshToken(),r=await this.ping(A.access_token);return r.authType="oauth",await ze.setUser(r),this.eventService?.setUserContext(r),A.access_token}catch{throw await ze.clearUser(),new Error("Not authenticated. Please login to authenticate.")}}try{let e=await this.refreshToken(),A=await this.ping(e.access_token);return A.authType="oauth",await ze.setUser(A),this.eventService?.setUserContext(A),e.access_token}catch{throw await ze.clearUser(),new Error("Not authenticated. Please login to authenticate.")}}async startCallbackServer(t,e,A,r){if(!this.clientPort)throw new Error("AuthService not initialized. Call initialize() first.");let s=Mn(),n=new URL(s.redirectUri),i=n.port?parseInt(n.port,10):3e3,o=n.hostname,a=10;for(let c=0;c<a;c++){let g=i+c;try{return await this.tryStartServer(g,t,e,A,o,n.pathname,r)}catch(E){if(E.code==="EADDRINUSE"&&c<a-1)continue;throw c===a-1?new Error(`Could not find an available port after ${a} attempts starting from ${i}.
|
|
49
|
+
${n}`;break;case "retry":ap(n)&&(A[s]=n);break;case "id":cp(n)&&(A[s]=n);break;case "event":n.length>0&&(A[s]=n);break}}processEvent(e){e.retry&&ap(e.retry)&&(this.state.reconnectionTime=parseInt(e.retry,10)),e.id&&cp(e.id)&&(this.state.lastEventId=e.id),e.data!==void 0&&this.push({type:e.event||"message",options:{data:e.data,lastEventId:this.state.lastEventId,origin:this.state.origin}});}clearEvent(){this.event={data:void 0,event:void 0,id:void 0,retry:void 0};}};lp.exports={EventSourceStream:Og};});var Bp=S((qY,Qp)=>{var{pipeline:eT}=R("stream"),{fetching:tT}=Cn(),{makeRequest:AT}=ns(),{webidl:dA}=Oe(),{EventSourceStream:rT}=gp(),{parseMIMEType:sT}=je(),{createFastMessageEvent:nT}=gs(),{isNetworkError:up}=hn(),{delay:iT}=Vg(),{kEnumerableProperty:Er}=j(),{environmentSettingsObject:Ep}=ot(),hp=false,Ip=3e3,Fn=0,Cp=1,kn=2,oT="anonymous",aT="use-credentials",Cs=class t extends EventTarget{#e={open:null,error:null,message:null};#t=null;#s=false;#r=Fn;#A=null;#n=null;#i;#o;constructor(e,A={}){super(),dA.util.markAsUncloneable(this);let r="EventSource constructor";dA.argumentLengthCheck(arguments,1,r),hp||(hp=true,process.emitWarning("EventSource is experimental, expect them to change at any time.",{code:"UNDICI-ES"})),e=dA.converters.USVString(e,r,"url"),A=dA.converters.EventSourceInitDict(A,r,"eventSourceInitDict"),this.#i=A.dispatcher,this.#o={lastEventId:"",reconnectionTime:Ip};let s=Ep,n;try{n=new URL(e,s.settingsObject.baseUrl),this.#o.origin=n.origin;}catch(a){throw new DOMException(a,"SyntaxError")}this.#t=n.href;let i=oT;A.withCredentials&&(i=aT,this.#s=true);let o={redirect:"follow",keepalive:true,mode:"cors",credentials:i==="anonymous"?"same-origin":"omit",referrer:"no-referrer"};o.client=Ep.settingsObject,o.headersList=[["accept",{name:"accept",value:"text/event-stream"}]],o.cache="no-store",o.initiator="other",o.urlList=[new URL(this.#t)],this.#A=AT(o),this.#a();}get readyState(){return this.#r}get url(){return this.#t}get withCredentials(){return this.#s}#a(){if(this.#r===kn)return;this.#r=Fn;let e={request:this.#A,dispatcher:this.#i},A=r=>{up(r)&&(this.dispatchEvent(new Event("error")),this.close()),this.#c();};e.processResponseEndOfBody=A,e.processResponse=r=>{if(up(r))if(r.aborted){this.close(),this.dispatchEvent(new Event("error"));return}else {this.#c();return}let s=r.headersList.get("content-type",true),n=s!==null?sT(s):"failure",i=n!=="failure"&&n.essence==="text/event-stream";if(r.status!==200||i===false){this.close(),this.dispatchEvent(new Event("error"));return}this.#r=Cp,this.dispatchEvent(new Event("open")),this.#o.origin=r.urlList[r.urlList.length-1].origin;let o=new rT({eventSourceSettings:this.#o,push:a=>{this.dispatchEvent(nT(a.type,a.options));}});eT(r.body.stream,o,a=>{a?.aborted===false&&(this.close(),this.dispatchEvent(new Event("error")));});},this.#n=tT(e);}async#c(){this.#r!==kn&&(this.#r=Fn,this.dispatchEvent(new Event("error")),await iT(this.#o.reconnectionTime),this.#r===Fn&&(this.#o.lastEventId.length&&this.#A.headersList.set("last-event-id",this.#o.lastEventId,true),this.#a()));}close(){dA.brandCheck(this,t),this.#r!==kn&&(this.#r=kn,this.#n.abort(),this.#A=null);}get onopen(){return this.#e.open}set onopen(e){this.#e.open&&this.removeEventListener("open",this.#e.open),typeof e=="function"?(this.#e.open=e,this.addEventListener("open",e)):this.#e.open=null;}get onmessage(){return this.#e.message}set onmessage(e){this.#e.message&&this.removeEventListener("message",this.#e.message),typeof e=="function"?(this.#e.message=e,this.addEventListener("message",e)):this.#e.message=null;}get onerror(){return this.#e.error}set onerror(e){this.#e.error&&this.removeEventListener("error",this.#e.error),typeof e=="function"?(this.#e.error=e,this.addEventListener("error",e)):this.#e.error=null;}},dp={CONNECTING:{__proto__:null,configurable:false,enumerable:true,value:Fn,writable:false},OPEN:{__proto__:null,configurable:false,enumerable:true,value:Cp,writable:false},CLOSED:{__proto__:null,configurable:false,enumerable:true,value:kn,writable:false}};Object.defineProperties(Cs,dp);Object.defineProperties(Cs.prototype,dp);Object.defineProperties(Cs.prototype,{close:Er,onerror:Er,onmessage:Er,onopen:Er,readyState:Er,url:Er,withCredentials:Er});dA.converters.EventSourceInitDict=dA.dictionaryConverter([{key:"withCredentials",converter:dA.converters.boolean,defaultValue:()=>false},{key:"dispatcher",converter:dA.converters.any}]);Qp.exports={EventSource:Cs,defaultReconnectionTime:Ip};});var mp=S((_Y,P)=>{var cT=Or(),fp=Ls(),lT=Wr(),gT=CC(),uT=qr(),ET=Il(),hT=HC(),IT=qC(),pp=ne(),Po=j(),{InvalidArgumentError:Vo}=pp,ds=Md(),CT=Ts(),dT=Kl(),QT=hQ(),BT=$l(),fT=xl(),pT=Pi(),{getGlobalDispatcher:wp,setGlobalDispatcher:wT}=$i(),mT=eo(),yT=Mi(),DT=Li();Object.assign(fp.prototype,ds);P.exports.Dispatcher=fp;P.exports.Client=cT;P.exports.Pool=lT;P.exports.BalancedPool=gT;P.exports.Agent=uT;P.exports.ProxyAgent=ET;P.exports.EnvHttpProxyAgent=hT;P.exports.RetryAgent=IT;P.exports.RetryHandler=pT;P.exports.DecoratorHandler=mT;P.exports.RedirectHandler=yT;P.exports.createRedirectInterceptor=DT;P.exports.interceptors={redirect:pQ(),retry:mQ(),dump:DQ(),dns:FQ()};P.exports.buildConnector=CT;P.exports.errors=pp;P.exports.util={parseHeaders:Po.parseHeaders,headerNameToString:Po.headerNameToString};function Nn(t){return (e,A,r)=>{if(typeof A=="function"&&(r=A,A=null),!e||typeof e!="string"&&typeof e!="object"&&!(e instanceof URL))throw new Vo("invalid url");if(A!=null&&typeof A!="object")throw new Vo("invalid opts");if(A&&A.path!=null){if(typeof A.path!="string")throw new Vo("invalid opts.path");let i=A.path;A.path.startsWith("/")||(i=`/${i}`),e=new URL(Po.parseOrigin(e).origin+i);}else A||(A=typeof e=="object"?e:{}),e=Po.parseURL(e);let{agent:s,dispatcher:n=wp()}=A;if(s)throw new Vo("unsupported opts.agent. Did you mean opts.client?");return t.call(n,{...A,origin:e.origin,path:e.search?`${e.pathname}${e.search}`:e.pathname,method:A.method||(A.body?"PUT":"GET")},r)}}P.exports.setGlobalDispatcher=wT;P.exports.getGlobalDispatcher=wp;var ST=Cn().fetch;P.exports.fetch=async function(e,A=void 0){try{return await ST(e,A)}catch(r){throw r&&typeof r=="object"&&Error.captureStackTrace(r),r}};P.exports.Headers=ir().Headers;P.exports.Response=hn().Response;P.exports.Request=ns().Request;P.exports.FormData=Vs().FormData;P.exports.File=globalThis.File??R("buffer").File;P.exports.FileReader=OB().FileReader;var{setGlobalOrigin:RT,getGlobalOrigin:FT}=Cc();P.exports.setGlobalOrigin=RT;P.exports.getGlobalOrigin=FT;var{CacheStorage:kT}=$B(),{kConstruct:NT}=wo();P.exports.caches=new kT(NT);var{deleteCookie:bT,getCookies:MT,getSetCookies:LT,setCookie:UT}=uf();P.exports.deleteCookie=bT;P.exports.getCookies=MT;P.exports.getSetCookies=LT;P.exports.setCookie=UT;var{parseMIMEType:TT,serializeAMimeType:vT}=je();P.exports.parseMIMEType=TT;P.exports.serializeAMimeType=vT;var{CloseEvent:xT,ErrorEvent:GT,MessageEvent:YT}=gs();P.exports.WebSocket=ip().WebSocket;P.exports.CloseEvent=xT;P.exports.ErrorEvent=GT;P.exports.MessageEvent=YT;P.exports.request=Nn(ds.request);P.exports.stream=Nn(ds.stream);P.exports.pipeline=Nn(ds.pipeline);P.exports.connect=Nn(ds.connect);P.exports.upgrade=Nn(ds.upgrade);P.exports.MockClient=dT;P.exports.MockPool=BT;P.exports.MockAgent=QT;P.exports.mockErrors=fT;var{EventSource:HT}=Bp();P.exports.EventSource=HT;});var Em=fileURLToPath(import.meta.url),Bu=Ae.dirname(Em);function pu(){let t=[Ae.join(Bu,"../package.json"),Ae.join(Bu,"../../package.json")];for(let e of t)try{let r=JSON.parse($.readFileSync(e,"utf8")).version;if(typeof r=="string"&&r)return r}catch{continue}return "1.0.0"}function pa(t){console.log(hr.cyan.bold("DevAssure CLI")),console.log(""),console.log(hr.white("Usage: devassure [command] [options]")),console.log(""),console.log(hr.yellow.bold("Commands:")),console.log(" version Print the version of the app"),console.log(" help Show help information"),console.log(" login Login to DevAssure"),console.log(" logout Logout from DevAssure"),console.log(" add-token <token> Add and validate authentication token"),console.log(" init Initialize DevAssure configuration"),console.log(" run-tests Run tests (same as new but uses current directory as test cases directory)"),console.log(" run Run tests (alias for run-tests)"),console.log(" Use --csv <path> to pass test cases as a CSV file (relative or absolute)"),console.log(" stats Show statistics about sessions, scenarios, and storage"),console.log(" summary Print summary for a test session (--session-id or --last, optional --json)"),console.log(" cleanup Clean up execution history to free up space"),console.log(" archive-report Archive report results for a test session (--output-dir, --session-id or --last)"),console.log(" open-report Open report server for a test session (--session-id, --last, or --archive)"),console.log(""),console.log(hr.yellow.bold("Options:")),console.log(" -v, --verbose Print verbose output"),console.log(" -s, --short Print short output"),console.log(" --env <environment> Set environment (dev, prod, staging)"),console.log(" -h, --help Display help for command"),console.log(""),console.log(hr.gray("For more information, visit: https://www.npmjs.com/package/@devassure/cli"));}var vp=Qu(eE()),ta=Qu(mp());var Je=(t=>(t.TEXT="text",t.PASSWORD="password",t.SELECT="select",t.MULTISELECT="multiselect",t.CONFIRM="confirm",t.KEYPRESS="keypress",t.USERKILL="userKill",t))(Je||{}),ms=(t=>(t.TOKEN="token",t.API_KEY="api_key",t.API_KEY_ENV_VAR="api_key_env_var",t.OAUTH="oauth",t))(ms||{}),F=(t=>(t.RUNNING="running",t.SUCCESS="success",t.PASSED="passed",t.FAILED="failed",t.WAITING="waiting",t.FAILING="failing",t.SKIPPED="skipped",t.CANCELLED="cancelled",t.ERROR="error",t))(F||{}),ys=["success","passed","failed","skipped","cancelled","error"],HA=(t=>(t.NUMBER="number",t.PROGRESS_BAR="progressBar",t.THIN_PROGRESS_BAR="thinProgressBar",t.PERCENTAGE="percentage",t.ETA="eta",t.DOTTED="dotted",t))(HA||{}),K=(t=>(t.SPINNER="spinner",t.CHECK="check",t.CROSS="cross",t.ARROW="arrow",t.DOT="dot",t.CIRCLE="circle",t.CIRCLE_FILL="circleFill",t.CIRCLE_SPINNER="circleSpinner",t.BLINKING_CIRCLE="blinkingCircle",t.BLINKING_DIAMOND="blinkingDiamond",t.BLINKING_HEXAGON="blinkingHexagon",t.SQUARE="square",t.HEXAGON="hexagon",t.DIAMOND="diamond",t))(K||{});function k(t,e,A){return {message:t,styles:e,maxCharLength:A}}function X(t){return t.map(e=>k(e))}var Wo="devassure";function tA(){let t=st.homedir(),e;return process.platform==="win32"?e=Ae.join(t,"AppData","Local",Wo,Wo):process.platform==="darwin"?e=Ae.join(t,"Library","Application Support",Wo):e=Ae.join(t,".local","share",Wo),e}function YA(){return Ae.join(tA(),"bin")}function ps(){let t=process.platform==="win32"?"devassure-agent.exe":"devassure-agent";return Ae.join(YA(),t)}function PT(){let t=process.platform==="win32"?"node.exe":"node";return Ae.join(YA(),".devassure-agent-internal","playwright","driver",t)}function $g(){return Ae.join(tA(),"data")}function ws(){return Ae.join(tA(),".secrets")}function xn(){return Ae.join(tA(),".cache")}var OT=createRequire(import.meta.url),WT=OT("sqlite3"),Jt=null,ea=null;function Ln(t,e,A=[]){return new Promise((r,s)=>{t.run(e,A,function(n){n?s(n):r();});})}function qT(t,e,A=[]){return new Promise((r,s)=>{t.get(e,A,(n,i)=>{n?s(n):r(i);});})}function _T(t,e,A=[]){return new Promise((r,s)=>{t.all(e,A,(n,i)=>{n?s(n):r(i);});})}async function jo(){if(Jt)return Jt;let t=$g();return await se.mkdir(t,{recursive:true}),ea=Ae.join(t,"devassure.db"),Jt=await new Promise((e,A)=>{let r=new WT.Database(ea,s=>{s?A(s):e(r);});}),await Ln(Jt,"PRAGMA journal_mode = WAL;"),await Ln(Jt,"PRAGMA busy_timeout = 5000;"),await Ln(Jt,"PRAGMA synchronous = NORMAL;"),await Ln(Jt,"PRAGMA foreign_keys = ON;"),Jt}async function zT(){Jt&&(await new Promise((t,e)=>{Jt.close(A=>A?e(A):t());}),Jt=null,ea=null);}function ZT(){return ea}function Wg(t){let e=t?.code,A=String(t?.message??t);return !!(e==="SQLITE_ERROR"&&A.includes("no such table")||e==="SQLITE_CANTOPEN")}var Ce={run:async(t,e=[])=>{try{await Ln(await jo(),t,e);}catch(A){if(Wg(A))return;throw A}},get:async(t,e=[])=>{try{return await qT(await jo(),t,e)}catch(A){if(Wg(A))return;throw A}},all:async(t,e=[])=>{try{return await _T(await jo(),t,e)}catch(A){if(Wg(A))return [];throw A}}},KT=class{static async getClient(){return await jo()}static async disconnect(){await zT();}static getDbPath(){return ZT()}},yp=KT,BA=class{run(t,e=[]){return Ce.run(t,e)}get(t,e=[]){return Ce.get(t,e)}all(t,e=[]){return Ce.all(t,e)}},qo=z.object({id:z.string(),project_path:z.string(),pid:z.number().nullable(),status:z.string(),title:z.string().nullable(),branch_name:z.string().nullable(),commit_id:z.string().nullable(),current_phase:z.string().nullable(),created_at:z.string().nullable(),end_time:z.string().nullable(),duration:z.number().nullable(),session_type:z.string().nullable(),test_cases_dir:z.string().nullable(),test_case_file:z.string().nullable(),test_cases_csv_path:z.string().nullable(),concurrency:z.number().nullable(),test_environment:z.string().nullable()});async function me(t,e=5){let A=0;for(;;)try{return await t()}catch(r){let s=String(r?.message||r);if(!(s.includes("SQLITE_BUSY")||s.includes("database is locked"))||A>=e)throw r;let i=50*Math.pow(2,A);await new Promise(o=>setTimeout(o,i)),A++;}}var XT=class extends BA{async getById(t){let e=await this.get("SELECT * FROM TestSession WHERE id = ? LIMIT 1",[t]);return e?qo.parse(e):void 0}async getAll(){return (await this.all("SELECT * FROM TestSession",[])).map(e=>qo.parse(e))}async getAllOrderedByCreatedAt(){return (await this.all("SELECT * FROM TestSession ORDER BY created_at DESC",[])).map(e=>qo.parse(e))}async getLastSessionId(){return (await this.get("SELECT id FROM TestSession ORDER BY created_at DESC LIMIT 1",[]))?.id}async getLastSessions(t){return (await this.all("SELECT * FROM TestSession ORDER BY created_at DESC LIMIT ?",[t])).map(A=>qo.parse(A))}async getCount(){return (await this.get("SELECT COUNT(*) as count FROM TestSession",[]))?.count??0}async getExistingSessionIds(t){if(t.length===0)return [];let e=t.map(()=>"?").join(", ");return (await this.all(`SELECT id FROM TestSession WHERE id IN (${e})`,t)).map(r=>r.id)}async deleteByIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM TestSession WHERE id IN (${e})`,t));}async updateStatus(t,e){await me(()=>this.run("UPDATE TestSession SET status = ? WHERE id = ?",[e,t]));}},jT=z.object({id:z.string(),session_id:z.string(),label:z.string(),name:z.string(),status:z.string(),waiting_on:z.string().nullable(),browser_session_id:z.string().nullable(),created_at:z.string().nullable()}),Dp=z.object({id:z.string(),task_id:z.string(),label:z.string(),name:z.string(),type:z.string(),status:z.string(),data:z.string().nullable(),user_input:z.string().nullable(),created_at:z.string().nullable()}),$T=z.object({id:z.string(),content:z.string(),parent_type:z.string().nullable(),parent_id:z.string().nullable(),type:z.string().nullable(),created_at:z.string().nullable()}),ev=class extends BA{async getBySessionId(t){return (await this.all("SELECT * FROM Task WHERE session_id = ?",[t])).map(A=>jT.parse(A))}async getStepsByTaskId(t){return (await this.all("SELECT * FROM TaskStep WHERE task_id = ? ORDER BY created_at ASC",[t])).map(A=>Dp.parse(A))}async updateTaskStepUserInput(t,e){await me(()=>this.run("UPDATE TaskStep SET user_input = ?, status = 'validating' WHERE id = ?",[e,t]));}async getValidatingUserInputTaskStep(t){let e=await this.get("SELECT * FROM TaskStep WHERE task_id = ? AND type = 'userInput' AND status = 'validating' LIMIT 1",[t]);return e?Dp.parse(e):null}async getMessagesByParent(t,e){return (await this.all("SELECT * FROM Message WHERE parent_id = ? AND parent_type = ? ORDER BY created_at ASC",[t,e])).map(r=>$T.parse(r))}},tv=z.object({id:z.string(),test_session_id:z.string(),status:z.string(),title:z.string(),label:z.string().nullable(),browser_session_id:z.string().nullable(),steps:z.string().nullable(),tags:z.string().nullable(),test_type:z.string().nullable(),agent_type:z.string().nullable(),test_data:z.string().nullable(),priority:z.string().nullable(),created_at:z.string().nullable()}),Gp=z.object({id:z.string(),test_session_id:z.string(),scenario_id:z.string().nullable(),agent_type:z.string(),browser:z.string(),resolution_x:z.number().nullable(),resolution_y:z.number().nullable(),headless:z.number(),status:z.string(),cdp_port:z.number().nullable(),worker_id:z.number().nullable(),created_at:z.string().nullable(),start_time:z.string().nullable(),end_time:z.string().nullable()}),Av=z.object({id:z.string(),created_at:z.string().nullable(),browser_session_id:z.string(),step_number:z.number(),start_time:z.string(),end_time:z.string(),url:z.string().nullable(),page_title:z.string().nullable(),evaluation_previous_goal:z.string().nullable(),next_goal:z.string().nullable(),thinking:z.string().nullable(),bu_screenshot_path:z.string().nullable(),screenshot_path:z.string().nullable(),type:z.string()}),rv=z.object({id:z.string(),created_at:z.string().nullable(),agent_step_id:z.string(),action:z.string()}),sv=z.object({id:z.string(),created_at:z.string().nullable(),agent_step_id:z.string(),validation_type:z.string().nullable(),status:z.string(),progress:z.string().nullable(),summary:z.string().nullable(),reasoning:z.string().nullable(),expected_result:z.string().nullable(),actual_result:z.string().nullable(),failure_message:z.string().nullable(),next_step:z.string().nullable()}),nv=z.object({id:z.string(),created_at:z.string().nullable(),scenario_id:z.string(),validation_type:z.string(),description:z.string(),step_number:z.string()}),Un=z.object({id:z.string(),test_session_id:z.string(),parent_id:z.string(),parent_type:z.string(),message:z.string(),error_type:z.string().nullable(),created_at:z.string().nullable()}),Yp=z.object({id:z.string(),created_at:z.string().nullable(),parent_id:z.string(),parent_type:z.string(),issue_type:z.string(),description:z.string(),severity:z.string(),root_cause:z.string().nullable(),next_steps:z.string().nullable(),scenario_ids:z.string().nullable()}),iv=class extends BA{async getBySessionId(t){return (await this.all("SELECT * FROM Scenario WHERE test_session_id = ?",[t])).map(A=>tv.parse(A))}async getBrowserSessionById(t){let e=await this.get("SELECT * FROM BrowserSession WHERE id = ? LIMIT 1",[t]);return e?Gp.parse(e):void 0}async getAgentStepsByBrowserSessionId(t){return (await this.all("SELECT * FROM AgentStep WHERE browser_session_id = ? ORDER BY step_number ASC",[t])).map(A=>Av.parse(A))}async getAgentStepActionsByStepId(t){return (await this.all("SELECT * FROM AgentStepAction WHERE agent_step_id = ?",[t])).map(A=>rv.parse(A))}async getAgentStepValidationsByStepId(t){return (await this.all("SELECT * FROM AgentStepValidation WHERE agent_step_id = ?",[t])).map(A=>sv.parse(A))}async getPassedValidationsByScenarioId(t){return (await this.all("SELECT * FROM PassedValidation WHERE scenario_id = ?",[t])).map(A=>nv.parse(A))}async getPassedValidationCountByTestSessionId(t){return (await this.get("SELECT COUNT(*) as count FROM PassedValidation WHERE scenario_id IN (SELECT id FROM Scenario WHERE test_session_id = ?)",[t]))?.count??0}async getErrorsByScenarioId(t){return (await this.all("SELECT * FROM Error WHERE parent_id = ? AND parent_type = 'scenario' ORDER BY created_at ASC",[t])).map(A=>Un.parse(A))}async getIssuesByParent(t,e){return (await this.all("SELECT * FROM Issue WHERE parent_id = ? AND parent_type = ? ORDER BY created_at ASC",[t,e])).map(r=>Yp.parse(r))}async getCountExcludingStatuses(t){if(t.length===0)return (await this.get("SELECT COUNT(*) as count FROM Scenario",[]))?.count??0;let e=t.map(()=>"status != ?").join(" AND ");return (await this.get(`SELECT COUNT(*) as count FROM Scenario WHERE ${e}`,t))?.count??0}async getCount(){return (await this.get("SELECT COUNT(*) as count FROM Scenario WHERE status != 'new' AND status != 'executing'",[]))?.count??0}async deleteBySessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM Scenario WHERE test_session_id IN (${e})`,t));}async getScenarioIdsBySessionIds(t){if(t.length===0)return [];let e=t.map(()=>"?").join(", ");return (await this.all(`SELECT id FROM Scenario WHERE test_session_id IN (${e})`,t)).map(r=>r.id)}},ov=z.object({id:z.string(),created_at:z.string().nullable(),scenario_id:z.string(),status:z.string(),execution_summary:z.string().nullable(),analysis_summary:z.string().nullable(),score:z.number().nullable(),step_count:z.number().nullable()}),av=z.object({id:z.string(),created_at:z.string().nullable(),test_session_id:z.string(),status:z.string(),session_summary:z.string().nullable(),analysis_summary:z.string().nullable(),score:z.number().nullable(),step_count:z.number().nullable()}),cv=class extends BA{async getLatestScenarioAnalysis(t){let e=await this.get("SELECT * FROM ScenarioAnalysis WHERE scenario_id = ? ORDER BY created_at DESC LIMIT 1",[t]);return e?ov.parse(e):void 0}async getLatestTestSessionAnalysis(t){let e=await this.get("SELECT * FROM TestSessionAnalysis WHERE test_session_id = ? ORDER BY created_at DESC LIMIT 1",[t]);return e?av.parse(e):void 0}async getIssuesByParent(t,e){return (await this.all("SELECT * FROM Issue WHERE parent_id = ? AND parent_type = ? ORDER BY created_at ASC",[t,e])).map(r=>Yp.parse(r))}async getFailedValidationCountByTestSessionId(t){return (await this.get("SELECT COUNT(*) as count FROM Issue WHERE parent_type = 'scenario_analysis' AND parent_id IN (SELECT id FROM ScenarioAnalysis WHERE scenario_id IN (SELECT id FROM Scenario WHERE test_session_id = ?))",[t]))?.count??0}},lv=class extends BA{async getByParent(t,e){let A=await this.get("SELECT * FROM Error WHERE parent_id = ? AND parent_type = ? LIMIT 1",[t,e]);return A?Un.parse(A):void 0}async getBySessionId(t){return (await this.all("SELECT * FROM Error WHERE test_session_id = ? AND parent_type = 'test_session' ORDER BY created_at ASC",[t])).map(A=>Un.parse(A))}async getByScenarioId(t){return (await this.all("SELECT * FROM Error WHERE parent_id = ? AND parent_type = 'scenario' ORDER BY created_at ASC",[t])).map(A=>Un.parse(A))}async getAllByParent(t,e){return (await this.all("SELECT * FROM Error WHERE parent_id = ? AND parent_type = ? ORDER BY created_at ASC",[t,e])).map(r=>Un.parse(r))}async createForSession(t,e){let A=v4(),r=new Date().toISOString();await this.run("INSERT INTO Error (id, test_session_id, parent_id, parent_type, message, error_type, created_at) VALUES (?, ?, ?, 'test_session', ?, NULL, ?)",[A,t,t,e,r]);}},gv=class extends BA{async getTotalScenarioCount(t){return (await this.get("SELECT COUNT(*) as count FROM Scenario WHERE test_session_id = ?",[t]))?.count??0}async getCompletedScenarioCount(t){return (await this.get("SELECT COUNT(*) as count FROM Scenario WHERE test_session_id = ? AND status IN ('passed', 'failed', 'cancelled', 'skipped', 'error')",[t]))?.count??0}},uv=class extends BA{async getCount(){return (await this.get("SELECT COUNT(*) as count FROM BrowserSession",[]))?.count??0}async getBySessionIds(t){if(t.length===0)return [];let e=t.map(()=>"?").join(", ");return (await this.all(`SELECT * FROM BrowserSession WHERE test_session_id IN (${e})`,t)).map(r=>Gp.parse(r))}async getBrowserSessionIdsBySessionIds(t){if(t.length===0)return [];let e=t.map(()=>"?").join(", ");return (await this.all(`SELECT id FROM BrowserSession WHERE test_session_id IN (${e})`,t)).map(r=>r.id)}async deleteBySessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM BrowserSession WHERE test_session_id IN (${e})`,t));}},Ev=class extends BA{async deleteAgentStepActionsByBrowserSessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM AgentStepAction WHERE agent_step_id IN (SELECT id FROM AgentStep WHERE browser_session_id IN (${e}))`,t));}async deleteAgentStepValidationsByBrowserSessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM AgentStepValidation WHERE agent_step_id IN (SELECT id FROM AgentStep WHERE browser_session_id IN (${e}))`,t));}async deleteAgentStepsByBrowserSessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM AgentStep WHERE browser_session_id IN (${e})`,t));}async deletePassedValidationsByScenarioIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM PassedValidation WHERE scenario_id IN (${e})`,t));}async deleteTaskStepsBySessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM TaskStep WHERE task_id IN (SELECT id FROM Task WHERE session_id IN (${e}))`,t));}async deleteTasksBySessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM Task WHERE session_id IN (${e})`,t));}async deleteErrorsBySessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM Error WHERE test_session_id IN (${e})`,t));}async deleteMessagesBySessionIds(t,e,A,r,s){let n=[],i=[];if(t.length>0){let a=t.map(()=>"?").join(", ");n.push(`(parent_type = 'session' AND parent_id IN (${a}))`),i.push(...t);}if(e.length>0){let a=e.map(()=>"?").join(", ");n.push(`(parent_type = 'scenario' AND parent_id IN (${a}))`),i.push(...e);}if(A.length>0){let a=A.map(()=>"?").join(", ");n.push(`(parent_type = 'browser_session' AND parent_id IN (${a}))`),i.push(...A);}if(r.length>0){let a=r.map(()=>"?").join(", ");n.push(`(parent_type = 'task' AND parent_id IN (${a}))`),i.push(...r);}if(s.length>0){let a=s.map(()=>"?").join(", ");n.push(`(parent_type = 'step' AND parent_id IN (${a}))`),i.push(...s);}if(n.length===0)return;let o=n.join(" OR ");await me(()=>this.run(`DELETE FROM Message WHERE ${o}`,i));}async deleteIssuesByAnalysisIds(t,e){let A=[],r=[];if(t.length>0){let n=t.map(()=>"?").join(", ");A.push(`(parent_type = 'scenario_analysis' AND parent_id IN (${n}))`),r.push(...t);}if(e.length>0){let n=e.map(()=>"?").join(", ");A.push(`(parent_type = 'test_session_analysis' AND parent_id IN (${n}))`),r.push(...e);}if(A.length===0)return;let s=A.join(" OR ");await me(()=>this.run(`DELETE FROM Issue WHERE ${s}`,r));}async deleteBrowserSessionsBySessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM BrowserSession WHERE test_session_id IN (${e})`,t));}async deleteScenarioAnalysesByScenarioIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM ScenarioAnalysis WHERE scenario_id IN (${e})`,t));}async deleteScenariosBySessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM Scenario WHERE test_session_id IN (${e})`,t));}async deleteTestSessionAnalysesBySessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM TestSessionAnalysis WHERE test_session_id IN (${e})`,t));}async deleteReportsRendersBySessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM ReportsRender WHERE test_session_id IN (${e})`,t));}async deleteSessionDataBySessionIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM SessionData WHERE test_session_id IN (${e})`,t));}async deleteTestSessionsByIds(t){if(t.length===0)return;let e=t.map(()=>"?").join(", ");await me(()=>this.run(`DELETE FROM TestSession WHERE id IN (${e})`,t));}},_o=z.object({id:z.string(),created_at:z.string().nullable(),test_session_id:z.string(),status:z.string(),host:z.string().nullable(),port:z.number().nullable(),stopped_at:z.string().nullable(),archive:z.string().nullable()}),hv=class extends BA{async getByTestSessionId(t){return (await this.all("SELECT * FROM ReportsRender WHERE test_session_id = ?",[t])).map(A=>_o.parse(A))}async getByCreatedAtAfter(t){return (await this.all("SELECT * FROM ReportsRender WHERE created_at > ? ORDER BY created_at ASC",[t])).map(A=>_o.parse(A))}async getLatestByTestSessionId(t){let e=await this.get("SELECT * FROM ReportsRender WHERE test_session_id = ? ORDER BY created_at DESC LIMIT 1",[t]);return e?_o.parse(e):void 0}async getLatestByTestSessionIdAfter(t,e){let A=await this.get("SELECT * FROM ReportsRender WHERE test_session_id = ? AND created_at > ? ORDER BY created_at DESC LIMIT 1",[t,e]);return A?_o.parse(A):void 0}},Iv=class{constructor(){this._initialized=false,this._sessionRepository=null,this._taskRepository=null,this._scenarioRepository=null,this._analysisRepository=null,this._errorRepository=null,this._progressRepository=null,this._browserSessionRepository=null,this._cleanupRepository=null,this._reportsRenderRepository=null;}async initialize(){this._initialized||(await yp.getClient(),this._initialized=true);}get sessionRepository(){return this._sessionRepository||(this._sessionRepository=new XT),this._sessionRepository}get taskRepository(){return this._taskRepository||(this._taskRepository=new ev),this._taskRepository}get scenarioRepository(){return this._scenarioRepository||(this._scenarioRepository=new iv),this._scenarioRepository}get analysisRepository(){return this._analysisRepository||(this._analysisRepository=new cv),this._analysisRepository}get errorRepository(){return this._errorRepository||(this._errorRepository=new lv),this._errorRepository}get progressRepository(){return this._progressRepository||(this._progressRepository=new gv),this._progressRepository}get browserSessionRepository(){return this._browserSessionRepository||(this._browserSessionRepository=new uv),this._browserSessionRepository}get cleanupRepository(){return this._cleanupRepository||(this._cleanupRepository=new Ev),this._cleanupRepository}get reportsRenderRepository(){return this._reportsRenderRepository||(this._reportsRenderRepository=new hv),this._reportsRenderRepository}async close(){await yp.disconnect(),this._initialized=false,this._sessionRepository=null,this._taskRepository=null,this._scenarioRepository=null,this._analysisRepository=null,this._errorRepository=null,this._progressRepository=null,this._browserSessionRepository=null,this._cleanupRepository=null,this._reportsRenderRepository=null;}},M=new Iv,St=class Hp{constructor(e){this.taskRepository=e;}async getPendingUserInputTaskStep(e){return (await this.taskRepository.getStepsByTaskId(e)).find(s=>s.type==="userInput"&&s.status==="pending")||null}static isTaskActive(e){return ["pending","running","waiting","validating","failing"].includes(e)}static isTaskCompleted(e){return ["success","error","skipped","cancelled"].includes(e)}static mapTaskStatusToFeedStatus(e){switch(e){case "pending":case "waiting":case "validating":return "waiting";case "running":return "running";case "success":return "success";case "error":return "failed";case "skipped":return "skipped";case "cancelled":return "cancelled";case "failing":return "failing";default:return "running"}}async getTaskMessages(e){let A=await this.taskRepository.getStepsByTaskId(e),r=[];for(let i of A)i.label?r.push(k(i.label)):i.name&&r.push(k(i.name));let s=await this.taskRepository.getMessagesByParent(e,"task");for(let i of s)i.content&&r.push(k(i.content,{icon:"circle",iconColor:"gray",textColor:"gray"}));for(let i of A){let o=await this.taskRepository.getMessagesByParent(i.id,"step");for(let a of o)a.content&&r.push(k(a.content,{icon:"circle",iconColor:"gray",textColor:"gray"}));}return await this.taskRepository.getValidatingUserInputTaskStep(e)&&r.push(k("Validating...")),r}static createFeedItem(e,A){let r=Hp.mapTaskStatusToFeedStatus(e.status),s=A.length>0?[A[A.length-1]]:[],n=A.length>1?A.slice(0,-1):[];return {id:`task-${e.id}`,name:e.name,status:r,objectType:"Task",stateIndicators:[{status:"running",indicator:"spinner",color:"blue"},{status:"success",indicator:"check",color:"green"},{status:"failed",indicator:"cross",color:"red"},{status:"waiting",indicator:"blinkingCircle",color:"yellow"},{status:"failing",indicator:"spinner",color:"red"}],currentMessages:s,allMessages:n}}static getPromptTypeFromTaskStepData(e){if(!e)return null;try{let r=JSON.parse(e).input_type;return r==="string"||r==="number"?"text":r==="boolean"?"confirm":null}catch{return null}}},bn=class Jp{constructor(e){this.scenarioRepository=e;}static isScenarioActive(e){return ["executing","executed","analysing"].includes(e)}static isScenarioCompleted(e){return ["passed","failed","cancelled","skipped","error"].includes(e)}static mapScenarioStatusToFeedStatus(e){switch(e){case "new":return "waiting";case "executing":case "executed":case "analysing":return "running";case "passed":return "success";case "failed":return "failed";case "skipped":return "skipped";case "cancelled":return "cancelled";case "error":return "failed";default:return "running"}}async getScenarioMessages(e){let A=[];if(!e.browser_session_id)return A;let r=await this.scenarioRepository.getBrowserSessionById(e.browser_session_id);if(!r)return A;let s=await this.scenarioRepository.getAgentStepsByBrowserSessionId(r.id),n;if(s.length>0){let a=s[s.length-1];(a.step_number-=0)&&(a.evaluation_previous_goal?.trim()&&a.evaluation_previous_goal.trim()?.toLowerCase()!=="n/a"&&A.push(k(a.evaluation_previous_goal,{icon:"\u{1F916}"},2e3)),a.next_goal?.trim()&&a.next_goal.trim()?.toLowerCase()!=="n/a"&&(n=k(a.next_goal,{icon:"\u{1F5A5}\uFE0F"},2e3)),a.thinking?.trim()&&a.thinking.trim()?.toLowerCase()!=="n/a"&&A.push(k(a.thinking,{icon:"\u{1F9E0}"},2e3)));}for(let a of s){let c=await this.scenarioRepository.getAgentStepActionsByStepId(a.id);for(let g of c)g.action&&A.push(k(g.action,{icon:"circle",iconColor:"gray",textColor:"gray"}));}for(let a of s){let c=await this.scenarioRepository.getAgentStepValidationsByStepId(a.id);for(let g of c){let E=[];if(g.validation_type&&E.push(`Type: ${g.validation_type}`),g.status&&E.push(`Status: ${g.status}`),g.summary&&E.push(`Summary: ${g.summary}`),g.reasoning&&E.push(`Reasoning: ${g.reasoning}`),g.actual_result&&E.push(`Actual: ${g.actual_result}`),g.failure_message&&E.push(`Failure: ${g.failure_message}`),g.next_step&&E.push(`Next: ${g.next_step}`),E.length>0){let B=E.join(" | ");g.status==="pass"?A.push(k(B,{icon:"check",iconColor:"green",textColor:"white"})):g.status==="fail"?A.push(k(B,{icon:"cross",iconColor:"red",textColor:"white"})):A.push(k(B));}}}let i=await this.scenarioRepository.getPassedValidationsByScenarioId(e.id);for(let a of i){let c=[];a.validation_type&&c.push(`Type: ${a.validation_type}`),a.description&&c.push(`Description: ${a.description}`),c.length>0&&A.push(k(c.join(" | "),{icon:"circle",iconColor:"gray",textColor:"gray"}));}let o=await this.scenarioRepository.getErrorsByScenarioId(e.id);for(let a of o)a.message&&A.push(k(a.message,{icon:"cross",iconColor:"red",textColor:"white"}));return n&&A.push(n),A}static createFeedItem(e,A){let r=Jp.mapScenarioStatusToFeedStatus(e.status),s=e.title;return e.label?.trim()&&e.label.trim().length<50&&(s=`${e.label} | ${s}`),{id:`scenario-${e.id}`,name:s,status:r,objectType:"Scenario",stateIndicators:[{status:"running",indicator:"\u{1F9EA}",color:"blue"},{status:"failing",indicator:"\u{1F9EA}",color:"red"}],currentMessages:A,colorTheme:"magenta",typewriterEffect:{enabled:true,charDelay:4,retainDuration:1e3,maxStreamCharLength:2e3,maxDisplayLength:300}}}};z.object({id:z.string(),test_session_id:z.string(),app_description:z.string().nullable(),app_rules:z.string().nullable(),personas:z.string().nullable(),agent_instructions:z.string().nullable(),test_data:z.string().nullable(),global_data:z.string().nullable(),filter:z.string().nullable()});z.object({sessionId:z.string(),title:z.string().nullable(),environment:z.string().nullable(),scenarios:z.number(),score:z.number().nullable(),passedValidations:z.number(),failedValidations:z.number(),failureGroups:z.number(),durationMs:z.number().nullable(),durationString:z.string()});var Cv="__DEVASSURE_BUILD_ENV__",Sp=typeof globalThis<"u"&&globalThis.__DEVASSURE_BUILD_ENV__!==void 0?globalThis.__DEVASSURE_BUILD_ENV__:"prod",dv={environment:"prod",auth:{authorizationUrl:"https://app.devassure.io/oauth/authorize",tokenUrl:"https://app.devassure.io/oauth/token",clientId:"M3oOg9oSnQksy4J2IFwd5zF2GekAEBi-DznaB-K8xKA",clientSecret:"YwFk23pHaQBF8azxt0KR8aMUwUANMl78cbEuQuJaq68",redirectUri:"http://127.0.0.1:3001/callback"},api:{baseUrl:"https://app.devassure.io"},posthog:{apiKey:"phc_GCpM30unLbtcxUSSWx5H2omEifldrXubk4FYM5kuVvA",host:"https://us.i.posthog.com",enabled:true}};function Qv(){if(Sp===Cv){let t=process.env.DEVASSURE_BUILD_ENV;return t==="dev"||t==="staging"||t==="prod"?t:"dev"}return Sp}var zo=null;function Bv(){return Qv()}function Aa(){return zo||(zo=dv,zo)}function Mn(){return Aa().auth}function fv(){return Aa().api}function Vp(){return Aa().posthog}var Pp=class Bs{constructor(){this.client=null,this.context=null,this.initialized=false,this.enabled=true,this.debug=false,this.exceptionListenersSetup=false,this.clientPort=null,this.getUser=null;}initialize(e,A,r,s,n,i){if(!this.initialized){if(this.enabled=r,this.debug=s,this.clientPort=n,this.getUser=i,this.setupExceptionListeners(),!r){this.initialized=true;return}this.client=new PostHog(e,{host:A||"https://app.posthog.com",flushAt:10,flushInterval:5e3,disableGeoip:false}),Bv()!=="dev"&&this.suppressPostHogFlushErrorsInProd(),this.initialized=true;}}suppressPostHogFlushErrorsInProd(){let e=console.error;console.error=(...A)=>{let r=A[0];(typeof r=="string"?r:r instanceof Error?r.message:String(r??"")).includes("Error while flushing PostHog")||e.apply(console,A);};}setupExceptionListeners(){this.exceptionListenersSetup||(process.on("uncaughtException",async e=>{console.error("Uncaught exception:",e);try{await this.captureErrorEvent({error:e,context:{type:"uncaughtException"}}),await this.shutdown();}catch{}process.exit(1);}),process.on("unhandledRejection",async e=>{console.error("Unhandled rejection:",e);try{let A=e instanceof Error?e:new Error(String(e));await this.captureErrorEvent({error:A,context:{type:"unhandledRejection"}}),await this.shutdown();}catch{}process.exit(1);}),this.exceptionListenersSetup=true);}async captureErrorEvent(e){try{let A={message:e.error.message,name:e.error.name,stack:e.error.stack,...e.context};this.capture("exception",A,"exception");}catch{}}setCommandContext(e,A){let r=this.clientPort?.getRuntime()||{source:"cli",version:"1.0.0"};this.context={command:e,commandArgs:A,machineDetails:Bs.getMachineDetails(),terminalType:Bs.getTerminalType(),version:r.version,source:r.source,commandStartTime:Date.now(),commandSessionId:v4()};}setUserContext(e){if(!this.context){let A=this.clientPort?.getRuntime()||{source:"cli",version:"1.0.0"};this.context={command:"unknown",commandArgs:{},machineDetails:Bs.getMachineDetails(),terminalType:Bs.getTerminalType(),version:A.version,source:A.source,commandStartTime:Date.now(),commandSessionId:v4()};}this.context.user={id:e.id,orgId:e.organization?.id,authType:e.authType},this.identify(e),this.groupIdentify(e);}identify(e){let A={distinctId:e.id,properties:{id:e.id,name:e.name,email:e.email,authType:e.authType,orgId:e.organization?.id}};if(!this.enabled){this.debug&&console.log("[PostHog] identify:",A);return}if(this.client)try{this.client.identify(A);}catch{}}groupIdentify(e){let A=e.organization;if(!A)return;let r={groupType:"company",groupKey:A.id,properties:{id:A.id,name:A.name,plan:A.plan_type,status:A.subscription_status},distinctId:e.id};if(!this.enabled){this.debug&&console.log("[PostHog] groupIdentify:",r);return}if(this.client)try{this.client.groupIdentify(r);}catch{}}capture(e,A,r){let s=Date.now(),n=this.context?.commandStartTime||s,i=s-n,a=(this.getUser?.()||null)?.id||this.context?.user?.id||"anonymous",c=this.context?.user?.orgId?{company:this.context.user.orgId}:void 0,E={...{eventType:r||"custom",source:this.context?.source||"cli",command:this.context?.command||"unknown",commandArgs:this.context?.commandArgs||{},authType:this.context?.user?.authType,version:this.context?.version||"0.0",createdAt:new Date().toISOString(),terminalType:this.context?.terminalType||"unknown",machineDetails:this.context?.machineDetails||Bs.getMachineDetails(),commandStartTime:new Date(n).toISOString(),elapsedTime:i,commandSessionId:this.context?.commandSessionId||"unset"},...A||{}};if(!this.enabled){this.debug&&console.log("[PostHog] capture:",{distinctId:a,event:e,properties:E,groups:c});return}if(!(!this.client||!this.context))try{this.client.capture({distinctId:a,event:e,properties:E,groups:c});}catch{}}async shutdown(){if(this.client)try{await this.client.shutdown(),this.client=null,this.initialized=!1,this.context=null;}catch{}}async flush(){if(this.client)try{await this.client.flush();}catch{}}static getMachineDetails(){let e=st.platform(),A=st.release(),r=st.hostname(),s=st.totalmem(),n=st.cpus(),i=e.toString();e==="darwin"?i="macOS":e==="win32"?i="Windows":e==="linux"&&(i="Linux");let o=(s/(1024*1024*1024)).toFixed(2)+"GB",a=n[0]?.model||"Unknown",c=n.length.toString(),g=n[0]?.speed?`${(n[0].speed/1e3).toFixed(2)}GHz`:"Unknown";return {os:i,osVersion:A,machineName:r,ram:o,cpu:a,cpuCount:c,cpuSpeed:g}}static getTerminalType(){let e=process.env.SHELL||"";return e.includes("zsh")?"zsh":e.includes("bash")?"bash":e.includes("powershell")||e.includes("pwsh")?"powershell":e.includes("cmd")?"cmd":e.includes("fish")?"fish":"unknown"}},zg="user.json";async function pv(t){try{let e=ws();await se.mkdir(e,{recursive:!0});let A=Ae.join(e,zg);await se.writeFile(A,JSON.stringify(t,null,2),{mode:384});try{await se.chmod(A,384);}catch{}}catch{}}var wv=class{constructor(){this.user=null;}async setUser(t){this.user=t,await pv(t);}getUser(){return this.user}async clearUser(){this.user=null;try{let t=ws(),e=Ae.join(t,zg);await se.unlink(e);}catch{}}hasUser(){return this.user!==null}async loadUserFromFile(){try{let t=ws(),e=Ae.join(t,zg),A=await se.readFile(e,"utf8"),r=JSON.parse(A);if(r&&r.id)return this.user=r,r}catch{}return null}},ze=new wv,Zo="access_token",Ko="refresh_token",Xo="auth_token",Op=ws(),fs=Ae.join(Op,"tokens.enc"),Wp="aes-256-gcm",Tn=16,Rp=16;function qp(){let t=st.hostname(),e=st.homedir(),A="1f6af1b7-c1bb-45f6-85e9-1fc7d791b1c3";return Rt.pbkdf2Sync(`${t}:${e}:${A}`,A,1e5,32,"sha256")}function _p(t){if(!t)return "";let e=qp(),A=Rt.randomBytes(Tn),r=Rt.createCipheriv(Wp,e,A),s=r.update(t,"utf8");s=Buffer.concat([s,r.final()]);let n=r.getAuthTag();return Buffer.concat([A,n,s]).toString("base64")}function mv(t){if(!t)return "";try{let e=Buffer.from(t,"base64"),A=e.subarray(0,Tn),r=e.subarray(Tn,Tn+Rp),s=e.subarray(Tn+Rp),n=qp(),i=Rt.createDecipheriv(Wp,n,A);i.setAuthTag(r);let o=i.update(s);return o=Buffer.concat([o,i.final()]),o.toString("utf8")}catch{return ""}}async function zp(){await se.mkdir(Op,{recursive:true});try{await se.access(fs);}catch{let e=_p("{}");await se.writeFile(fs,e,{mode:384});}try{await se.chmod(fs,384);}catch{}}async function QA(){await zp();try{let t=await se.readFile(fs,"utf8");if(!t||t.trim()==="")return {};let e=mv(t);if(!e)return {};let A=JSON.parse(e);if(A&&typeof A=="object")return A}catch{}return {}}async function Qs(t){await zp();let e=JSON.stringify(t,null,2),A=_p(e);await se.writeFile(fs,A,{mode:384});try{await se.chmod(fs,384);}catch{}}var Le=class{static async getAccessToken(){let e=(await QA())[Zo];return e&&e.trim()!==""?e:null}static async getRefreshToken(){let e=(await QA())[Ko];return e&&e.trim()!==""?e:null}static async saveAccessToken(t){let e=await QA();e[Zo]=t,await Qs(e);}static async saveRefreshToken(t){let e=await QA();e[Ko]=t,await Qs(e);}static async saveTokens(t,e){let A=await QA();A[Zo]=t,A[Ko]=e,await Qs(A);}static async clearTokens(){let t=await QA();t[Zo]="",t[Ko]="",t[Xo]="",await Qs(t),await ze.clearUser();}static async getAuthToken(){let e=(await QA())[Xo];return e&&e.trim()!==""?e:null}static async saveAuthToken(t){let e=await QA();e[Xo]=t,await Qs(e);}static async clearAuthToken(){let t=await QA();t[Xo]="",await Qs(t);}static async isAuthenticated(){return await this.getAccessToken()!==null}static async hasAuthToken(){return await this.getAuthToken()!==null}},Zp=class{constructor(){this.clientPort=null,this.webAppCall=null,this.eventService=null;}initialize(t,e,A){this.clientPort=t,this.webAppCall=e,this.eventService=A;}async login(){if(!this.clientPort)throw new Error("AuthService not initialized. Call initialize() first.");Mn();let t=await this.clientPort.userPrompt({type:"confirm",message:"Open browser to login?",initialValue:true});if(!t.ok||t.value!==true)throw new Error("Login cancelled by user");let e=this.generateRandomString(32),A=this.generateRandomString(128),r=await this.generateCodeChallenge(A),s=this.clientPort?.getRuntime()?.source==="vscode"?"agent_vsce":this.clientPort?.getRuntime()?.source==="cli"?"agent_cli":"agent",{authCode:n,redirectUri:i}=await this.startCallbackServer(e,A,r,s),o=await this.exchangeCodeForTokens(n,A,i);await Le.clearAuthToken(),await Le.saveTokens(o.access_token,o.refresh_token);try{let a=await this.ping(o.access_token);a.authType="oauth",await ze.setUser(a),this.eventService?.setUserContext(a);}catch{}return o}async refreshToken(){let t=await Le.getRefreshToken();if(!t)throw new Error("Not Authenticated! Please login to continue.");let e=Mn();try{let A=Buffer.from(`${e.clientId}:${e.clientSecret}`).toString("base64"),r=await fetch(e.tokenUrl,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Authorization:`Basic ${A}`},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:t})});if(!r.ok){let n=await r.text();throw new Error(`Token refresh failed: ${r.status} ${n}`)}let s=await r.json();if(!s.access_token||!s.refresh_token)throw new Error("Invalid token response");await Le.clearAuthToken(),await Le.saveTokens(s.access_token,s.refresh_token);try{let n=await this.ping(s.access_token);n.authType="oauth",await ze.setUser(n),this.eventService?.setUserContext(n);}catch{}return s}catch(A){throw await Le.clearTokens(),A}}async ping(t){if(!this.webAppCall||!this.eventService)throw new Error("AuthService not initialized. Call initialize() first.");let e=await this.webAppCall("post","/oauth/ping",{},{},true,{Authorization:`Bearer ${t}`},void 0,this);if(this.eventService.capture("ping",{tokenType:"oauth",success:e.status!==200||!e.data,statusCode:e.status||0,endpoint:"/oauth/ping"}),e.exception)throw new Error(`Authentication ping failed: ${e.exception}`);if(!e.data)throw new Error("Authentication ping failed: No user data returned");if(e.status!==200){let A=e.data?.message||`Authentication failed: ${e.status} ${e.statusText}`;throw new Error(A)}return e.data?.user}async jobPing(t,e="token"){if(!this.webAppCall||!this.eventService)throw new Error("AuthService not initialized. Call initialize() first.");let A=await this.webAppCall("post","/job_ping",{},{},false,{Authorization:`JWT ${t}`},void 0,this);if(this.eventService.capture("ping",{tokenType:e,success:A.status===200&&!!A.data,statusCode:A.status||0,endpoint:"/job_ping"}),A.exception)throw new Error(`Job ping failed: ${A.exception}`);if(!A.data)throw new Error("Job ping failed: No user data returned");if(A.status!==200)throw new Error(`Job ping failed: ${A.status} ${A.statusText}`);return A.data?.user}async ensureAuthenticated(){let t=await Le.getAccessToken();if(t)try{let e=await this.ping(t);return e.authType="oauth",await ze.setUser(e),this.eventService?.setUserContext(e),t}catch{try{let A=await this.refreshToken(),r=await this.ping(A.access_token);return r.authType="oauth",await ze.setUser(r),this.eventService?.setUserContext(r),A.access_token}catch(A){throw await ze.clearUser(),A||new Error("Not authenticated!")}}try{let e=await this.refreshToken(),A=await this.ping(e.access_token);return A.authType="oauth",await ze.setUser(A),this.eventService?.setUserContext(A),e.access_token}catch(e){throw await ze.clearUser(),e||new Error("Not authenticated!")}}async startCallbackServer(t,e,A,r){if(!this.clientPort)throw new Error("AuthService not initialized. Call initialize() first.");let s=Mn(),n=new URL(s.redirectUri),i=n.port?parseInt(n.port,10):3e3,o=n.hostname,a=10;for(let c=0;c<a;c++){let g=i+c;try{return await this.tryStartServer(g,t,e,A,o,n.pathname,r)}catch(E){if(E.code==="EADDRINUSE"&&c<a-1)continue;throw c===a-1?new Error(`Could not find an available port after ${a} attempts starting from ${i}.
|
|
50
50
|
Please free up port ${i} or update the OAuth server redirect URI configuration.
|
|
51
51
|
To free the port: lsof -ti:${i} | xargs kill`):E}}throw new Error("Failed to start callback server")}async tryStartServer(t,e,A,r,s,n,i){if(!this.clientPort)throw new Error("AuthService not initialized. Call initialize() first.");let o=`
|
|
52
52
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
@@ -124,7 +124,7 @@ To free the port: lsof -ti:${i} | xargs kill`):E}}throw new Error("Failed to sta
|
|
|
124
124
|
</div>
|
|
125
125
|
</body>
|
|
126
126
|
</html>
|
|
127
|
-
`),B.close(),a({authCode:C.code,redirectUri:E})):(h.writeHead(400),h.end("Invalid callback"));});B.listen(t,async()=>{let l=new URL(g.authorizationUrl);l.searchParams.set("response_type","code"),l.searchParams.set("client_id",g.clientId),l.searchParams.set("redirect_uri",E),l.searchParams.set("state",e),l.searchParams.set("code_challenge",r),l.searchParams.set("code_challenge_method","S256"),l.searchParams.set("scope","offline_access"),l.searchParams.set("utm_source",i||"agent");try{await this.clientPort.openExternal(l.toString());}catch(h){B.close(),c(new Error(`Failed to open browser: ${h instanceof Error?h.message:String(h)}`));}}),B.on("error",l=>{c(l);}),setTimeout(()=>{B.close(),c(new Error("Authentication timeout. Please try again."));},300*1e3);})}async exchangeCodeForTokens(t,e,A){let r=Mn(),s=Buffer.from(`${r.clientId}:${r.clientSecret}`).toString("base64"),n=await fetch(r.tokenUrl,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Authorization:`Basic ${s}`},body:new URLSearchParams({grant_type:"authorization_code",code:t,redirect_uri:A,code_verifier:e})});if(!n.ok){let o=await n.text();throw new Error(`Token exchange failed: ${n.status} ${o}`)}let i=await n.json();if(!i.access_token||!i.refresh_token)throw new Error("Invalid token response");return i}generateRandomString(t){let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~",A="",r=new Uint8Array(t);Rt.getRandomValues(r);for(let s=0;s<t;s++)A+=e[r[s]%e.length];return A}async generateCodeChallenge(t){let A=new TextEncoder().encode(t),r=await Rt.subtle.digest("SHA-256",A);return btoa(String.fromCharCode(...new Uint8Array(r))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}};async function Kp(t){let e=process.env.DEVASSURE_TOKEN;if(e&&e.trim()!=="")try{return await t.jobPing(e,"api_key_env_var"),{success:!0,message:""}}catch{return {success:false,message:"auth token in Environment variable DEVASSURE_TOKEN is invalid, add valid token or remove the variable and run `devassure login` to login."}}let A=await Le.getAuthToken();if(A)try{return await t.jobPing(A,"token"),{success:!0,message:""}}catch{return await Le.clearAuthToken(),{success:false,message:"auth-token added is invalid. Please add new token using `devassure add-token` command or run `devassure login` to login from browser."}}if(await Le.getAccessToken())try{return await t.ensureAuthenticated(),{success:!0,message:""}}catch{return {success:false,message:"Not authenticated. Please login to authenticate. Run `devassure login` to login from browser."}}return {success:false,message:"Not authenticated. Please login to authenticate. Run `devassure login` to login from browser."}}async function yv(t){try{return {Authorization:`Bearer ${await t.ensureAuthenticated()}`}}catch{return null}}function Dv(t){return {Authorization:`Bearer ${t}`}}async function eu(t,e,A={},r,s,n,i,o){let c=fv().baseUrl,g=new URL(e,c);i&&Object.entries(i).forEach(([I,Q])=>{g.searchParams.set(I,Q);});let E=g.toString(),B=n==="no_auth",l=B?void 0:n||await yv(o);if(!B&&!l)return {exception:"unauthorized",status:401,statusText:"Unauthorized",headers:new Headers};let h={method:t.toUpperCase(),headers:{"Content-Type":"application/json",...l,...r?.headers},...r};(t==="post"||t==="put")&&A&&(h.body=JSON.stringify(A));let d;try{d=await fetch(E,h);}catch{return {exception:"connection_error",status:0,statusText:"Connection Error",headers:new Headers}}if(d.status===401&&s&&!B)try{let I=await o.refreshToken();if(I?.access_token){let Q={...r,headers:{"Content-Type":"application/json",...r?.headers}};return await eu(t,e,A,Q,!1,Dv(I.access_token),i,o)}}catch{return await Le.clearTokens(),{exception:"unauthorized",status:401,statusText:"Unauthorized - Session expired",headers:d.headers}}let C;try{let I=d.headers.get("content-type");I&&I.includes("application/json")?C=await d.json():C=await d.text();}catch{}return {data:C,status:d.status,statusText:d.statusText,headers:d.headers}}var Xp=class{constructor(){this.authService=null,this.webAppCallFn=null;}initialize(t,e){this.authService=t,this.webAppCallFn=e;}async request(t,e={}){if(!this.webAppCallFn||!this.authService)throw new Error("ApiService not initialized. Call initialize() first.");let A=e.method?.toLowerCase()||"get",r;if(e.body)if(typeof e.body=="string")try{r=JSON.parse(e.body);}catch{r=e.body;}else r=e.body;let s=await this.webAppCallFn(A,t,r,{...e,refreshTokenOn401:!e.skipAuth,authHeader:e.skipAuth?"no_auth":void 0},!e.skipAuth,e.skipAuth?"no_auth":void 0,void 0);if(s.exception)throw s.exception==="unauthorized"?new Error("Authentication required. Please login to authenticate."):s.exception==="connection_error"?new Error("Connection error. Please check your network connection."):new Error(`API request failed: ${s.exception}`);if(!s.data&&s.status!==204)throw new Error(`API request failed: ${s.status} ${s.statusText}`);return s.data}async get(t,e){return this.request(t,{...e,method:"GET"})}async post(t,e,A){return this.request(t,{...A,method:"POST",body:e?JSON.stringify(e):void 0})}async put(t,e,A){return this.request(t,{...A,method:"PUT",body:e?JSON.stringify(e):void 0})}async delete(t,e){return this.request(t,{...e,method:"DELETE"})}},jp="normal",Zg=null;function Sv(t){Zg=t,$p();}function $p(){Zg&&(jp=Zg.getLogLevel());}function Rv(){return $p(),jp==="debug"}var T={debug:(...t)=>{Rv()&&console.log("[DEBUG]",...t);}},Fv=class{constructor(){this.clientPort=null,this.pollTimer=null,this.pollInterval=500,this.isPolling=false,this.isPaused=false,this.state=null,this.taskFeedItems=new Map,this.scenarioFeedItems=new Map,this.sessionTracking=null,this.completedTasks=new Set,this.completedScenarios=new Set,this.sessionErrorFeedItemCreated=false,this.sessionWaitFeedItemCreated=false,this.sessionWaitFeedItemUpdatedToSuccess=false,this.sessionNotFoundStartTime=null,this.sessionWaitTimeout=120*1e3,this.maxPollTime=3600*1e3,this.startTime=0,this.resolveCallback=null,this.rejectCallback=null,this.terminationRequested=false,this.activePrompts=new Map,this.pollCallCounter=0;}initialize(t){this.clientPort=t,Sv(t);}async start(t){if(!this.clientPort)throw new Error("PollingService not initialized. Call initialize() first.");return T.debug(`PollingService.start() called for session ${t}`),await M.initialize(),this.state={sessionId:t,feedItems:new Map,progress:null,isPolling:false,isCompleted:false},this.startTime=Date.now(),this.isPolling=false,this.isPaused=false,this.terminationRequested=false,this.sessionWaitFeedItemCreated=false,this.sessionWaitFeedItemUpdatedToSuccess=false,this.sessionNotFoundStartTime=null,T.debug(`PollingService: Starting polling for session ${t} with interval ${this.pollInterval}ms`),new Promise((e,A)=>{this.resolveCallback=e,this.rejectCallback=A,this.pollTimer=setInterval(()=>{this.poll().catch(r=>{T.debug(`Error in poll() from interval: ${r instanceof Error?r.message:String(r)}`);});},this.pollInterval),this.poll().catch(r=>{T.debug(`Error in initial poll(): ${r instanceof Error?r.message:String(r)}`);});})}async poll(){if(++this.pollCallCounter,!this.clientPort||!this.state||this.isPaused){T.debug(`poll() - clientPort or state or isPaused is false client port = ${this.clientPort?"true":"false"}, state = ${this.state?"true":"false"}, isPaused = ${this.isPaused?"true":"false"}`);return}if(!this.isPolling){if(this.isPolling=true,this.terminationRequested){this.isPolling=false;return}if(!M){this.isPolling=false;return}try{if(Date.now()-this.startTime>this.maxPollTime){if(T.debug("poll() - max poll time exceeded"),await this.stop(),this.terminationRequested)return;this.rejectCallback?.(new Error("Session execution timed out"));return}let t;try{t=await M.sessionRepository.getById(this.state.sessionId);}catch(o){throw T.debug(`poll() - error getting session from database: ${o instanceof Error?o.message:String(o)}`),o}if(!t){if(!this.sessionWaitFeedItemCreated){let o=`session-wait-${this.state.sessionId}`,a={id:o,name:"Booting up DevAssure Agent",status:"running",stateIndicators:[{status:"running",indicator:"blinkingHexagon",color:"cyan"},{status:"success",indicator:"hexagon",color:"green"}]};this.state.feedItems.set(o,a),this.clientPort.onFeedItem(a),this.sessionWaitFeedItemCreated=!0;}if(this.sessionNotFoundStartTime===null&&(this.sessionNotFoundStartTime=Date.now()),Date.now()-this.sessionNotFoundStartTime>this.sessionWaitTimeout){if(await this.stop(),this.terminationRequested)return;this.rejectCallback?.(new Error("Session not found in database after waiting 2 minutes"));return}this.isPolling=!1;return}this.sessionNotFoundStartTime=null;let e=`session-wait-${this.state.sessionId}`,A=this.state.feedItems.get(e);if(A&&!this.sessionWaitFeedItemUpdatedToSuccess){this.sessionWaitFeedItemUpdatedToSuccess=!0;let o={...A,status:"success",currentMessages:[k("Agent is ready!",{icon:"blinkingHexagon",iconColor:"grey",textColor:"grey"})]};this.state.feedItems.set(e,o),this.clientPort.onFeedItem(o),await new Promise(a=>setTimeout(a,1e3));}this.sessionTracking||(this.sessionTracking=this.initializeSessionTracking(t.status),T.debug(`Session ${this.state.sessionId} tracking initialized with status ${t.status}`));let r=t.status,s=this.isSessionCompleted(r);if(T.debug(`Session ${this.state.sessionId} status check: ${r}, isCompleted: ${s}, wasActive: ${this.sessionTracking.wasActive}, lastStatus: ${this.sessionTracking.lastStatus}`),s&&!this.sessionTracking.wasActive){if(T.debug(`Session ${this.state.sessionId} is already completed (was never active), handling completion immediately`),await this.handleSessionCompletion(this.state.sessionId),this.sessionTracking.wasActive=!1,this.sessionTracking.lastStatus=t.status,T.debug(`Session ${this.state.sessionId} is completed, all data read and emitted, stopping polling`),await this.stop(),this.terminationRequested)return;this.state.isCompleted=!0,this.resolveCallback?.();return}await this.handleTasks(this.state.sessionId),await this.handleScenarios(this.state.sessionId),await this.updateProgress(this.state.sessionId),this.sessionTracking.lastStatus!==t.status&&this.sessionTracking.lastStatus&&T.debug(`Session ${this.state.sessionId} status changed: ${this.sessionTracking.lastStatus} -> ${t.status}`);let i=this.sessionTracking.wasActive&&s;if(await this.handleSessionErrors(this.state.sessionId),i?(T.debug(`Session ${this.state.sessionId} transitioned from active to completed`),await this.handleSessionCompletion(this.state.sessionId),this.sessionTracking.wasActive=!1):s?(T.debug(`Session ${this.state.sessionId} is completed (was not active before)`),await this.handleSessionCompletion(this.state.sessionId),this.sessionTracking.wasActive=!1):(this.sessionTracking.wasActive||T.debug(`Session ${this.state.sessionId} is now active`),this.sessionTracking.wasActive=!0),this.sessionTracking.lastStatus=t.status,!s){let o={sessionId:this.state.sessionId,status:t.status,feedItems:Array.from(this.state.feedItems.values()),progress:this.state.progress||void 0,timestamp:new Date};this.clientPort.onSnapshot(o);}if(s){if(T.debug(`Session ${this.state.sessionId} is completed, all data read and emitted, stopping polling`),await this.stop(),this.terminationRequested)return;this.state.isCompleted=!0,this.resolveCallback?.();return}this.isPolling=!1;}catch(t){if(T.debug(`poll() error: ${t instanceof Error?t.message:String(t)}`),await this.stop(),this.terminationRequested)return;this.rejectCallback?.(t instanceof Error?t:new Error(String(t)));}}}async handleTasks(t){try{let e=await M.taskRepository.getBySessionId(t),A=new St(M.taskRepository);for(let r of e){if(r.name.startsWith("execute_scenario_"))continue;let s=`task-${r.id}`,n=St.isTaskActive(r.status),i=St.isTaskCompleted(r.status);if(i&&this.completedTasks.has(r.id))continue;let o=this.taskFeedItems.get(r.id);o||(o=this.initializeTaskTracking(r.id),this.taskFeedItems.set(r.id,o),T.debug(`Task ${r.id} (${r.name}) tracking initialized`)),o.wasActive&&i&&T.debug(`Task ${r.id} (${r.name}) transitioned from active to completed`);let{taskStepIds:c,messageIds:g}=await this.collectTaskSubItemIds(r.id),E=await A.getPendingUserInputTaskStep(r.id),B=await M.taskRepository.getValidatingUserInputTaskStep(r.id),l=o.lastStatus!==r.status;l&&o.lastStatus&&T.debug(`Task ${r.id} (${r.name}) status changed: ${o.lastStatus} -> ${r.status}`);let h=this.detectSubItemChanges(c,o.lastTaskStepIds);h&&T.debug(`Task ${r.id} (${r.name}) task steps changed: ${c.size} current, ${o.lastTaskStepIds.size} previous`);let d=this.detectSubItemChanges(g,o.lastMessageIds);d&&T.debug(`Task ${r.id} (${r.name}) messages changed: ${g.size} current, ${o.lastMessageIds.size} previous`);let C=E?.id!==o.lastPendingUserInputStepId;C&&T.debug(`Task ${r.id} (${r.name}) pending user input step changed: ${E?.id||"none"} -> ${o.lastPendingUserInputStepId||"none"}`);let I=B?.id!==o.lastValidatingUserInputStepId;if(I&&T.debug(`Task ${r.id} (${r.name}) validating user input step changed: ${B?.id||"none"} -> ${o.lastValidatingUserInputStepId||"none"}`),n){if(o.wasActive=!0,E){let f=`task-${r.id}-step-${E.id}`;if(!this.activePrompts.has(f)&&(C||!o.lastPendingUserInputStepId)){let y=St.getPromptTypeFromTaskStepData(E.data);if(y){this.pause(),T.debug(`Polling paused for user input on task ${r.id} (${r.name}), step ${E.id}`);let U=new AbortController;this.activePrompts.set(f,U);let Y=await A.getTaskMessages(r.id),v=St.mapTaskStatusToFeedStatus(r.status),O=St.createFeedItem(r,Y);O.onInput=!0,O.currentPrompt={message:E.label||"Please provide input:",type:y==="text"?"text":"confirm",placeholder:y==="text"?"Enter value...":void 0},this.state.feedItems.set(s,O),this.clientPort.onFeedItem(O);try{let _=await this.clientPort.userPrompt({type:y==="text"?"text":"confirm",message:E.label||"Please provide input:",placeholder:y==="text"?"Enter value...":void 0},U.signal);if(_.ok&&_.value!==void 0){let z=(typeof _.value=="boolean",String(_.value));await M.taskRepository.updateTaskStepUserInput(E.id,z),T.debug(`User input received for task ${r.id} (${r.name}), step ${E.id}, updated DB with status=validating`);}else T.debug(`User input cancelled for task ${r.id} (${r.name}), step ${E.id}`);}catch(_){T.debug(`User input prompt failed for task ${r.id} (${r.name}), step ${E.id}: ${_ instanceof Error?_.message:String(_)}`);}finally{this.activePrompts.delete(f);let _=this.state.feedItems.get(s);if(_){let z={..._};delete z.currentPrompt,z.onInput=!1,this.state.feedItems.set(s,z),this.clientPort.onFeedItem(z);}this.resume(),T.debug(`Polling resumed after user input for task ${r.id} (${r.name})`);}}}}let Q=await A.getTaskMessages(r.id),u=St.mapTaskStatusToFeedStatus(r.status),p=St.createFeedItem(r,Q);E&&!this.activePrompts.has(`task-${r.id}-step-${E.id}`)&&(p.onInput=!0),(!this.state.feedItems.has(s)||l||h||d||C||I)&&(this.state.feedItems.has(s)?T.debug(`Task ${r.id} (${r.name}) feed item updated`):T.debug(`Task ${r.id} (${r.name}) feed item created`),this.state.feedItems.set(s,p),this.clientPort.onFeedItem(p)),o.lastStatus=r.status,o.lastUpdatedAt=new Date().toISOString(),o.lastPendingUserInputStepId=E?.id,o.lastValidatingUserInputStepId=B?.id,o.lastTaskStepIds=c,o.lastMessageIds=g;}else if(i&&!this.completedTasks.has(r.id)){T.debug(`Task ${r.id} (${r.name}) marked as completed`),this.completedTasks.add(r.id),o.wasActive=!1;let Q=await A.getTaskMessages(r.id),u=St.createFeedItem(r,Q);this.state.feedItems.set(s,u),this.clientPort.onFeedItem(u),this.state.feedItems.delete(s);}else o.wasActive=!1;}}catch(e){T.debug(`Error handling tasks: ${e}`);}}async handleScenarios(t){try{let e=await M.scenarioRepository.getBySessionId(t),A=new bn(M.scenarioRepository);for(let r of e){let s=`scenario-${r.id}`,n=bn.isScenarioActive(r.status),i=bn.isScenarioCompleted(r.status);if(r.status==="new"||i&&this.completedScenarios.has(r.id))continue;let o=this.scenarioFeedItems.get(r.id);o||(o=this.initializeScenarioTracking(r.id),this.scenarioFeedItems.set(r.id,o),T.debug(`Scenario ${r.id} (${r.title}) tracking initialized`));let a=o.wasActive&&i;a&&T.debug(`Scenario ${r.id} (${r.title}) transitioned from active to completed`),a&&await this.handleScenarioCompletion(r.id);let c=await this.collectScenarioSubItemIds(r.id,r.browser_session_id),g=o.lastStatus!==r.status;g&&o.lastStatus&&T.debug(`Scenario ${r.id} (${r.title}) status changed: ${o.lastStatus} -> ${r.status}`);let E=this.detectSubItemChanges(c.agentStepIds,o.lastAgentStepIds);E&&T.debug(`Scenario ${r.id} (${r.title}) agent steps changed: ${c.agentStepIds.size} current, ${o.lastAgentStepIds.size} previous`);let B=!1;for(let[C,I]of c.agentStepActionIds.entries()){let Q=o.lastAgentStepActionIds.get(C)||new Set;if(this.detectSubItemChanges(I,Q)){B=!0,T.debug(`Scenario ${r.id} (${r.title}) agent step actions changed for step ${C}: ${I.size} current, ${Q.size} previous`);break}}let l=!1;for(let[C,I]of c.agentStepValidationIds.entries()){let Q=o.lastAgentStepValidationIds.get(C)||new Set;if(this.detectSubItemChanges(I,Q)){l=!0,T.debug(`Scenario ${r.id} (${r.title}) agent step validations changed for step ${C}: ${I.size} current, ${Q.size} previous`);break}}let h=this.detectSubItemChanges(c.passedValidationIds,o.lastPassedValidationIds);h&&T.debug(`Scenario ${r.id} (${r.title}) passed validations changed: ${c.passedValidationIds.size} current, ${o.lastPassedValidationIds.size} previous`);let d=this.detectSubItemChanges(c.errorIds,o.lastErrorIds);if(d&&T.debug(`Scenario ${r.id} (${r.title}) errors changed: ${c.errorIds.size} current, ${o.lastErrorIds.size} previous`),n){o.wasActive=!0;let C=await A.getScenarioMessages(r),I=bn.createFeedItem(r,C);(!this.state.feedItems.has(s)||g||E||B||l||h||d)&&(this.state.feedItems.has(s)?T.debug(`Scenario ${r.id} (${r.title}) feed item updated`):T.debug(`Scenario ${r.id} (${r.title}) feed item created`),this.state.feedItems.set(s,I),this.clientPort.onFeedItem(I)),o.lastStatus=r.status,o.lastUpdatedAt=new Date().toISOString(),o.lastAgentStepIds=c.agentStepIds,o.lastAgentStepActionIds=c.agentStepActionIds,o.lastAgentStepValidationIds=c.agentStepValidationIds,o.lastPassedValidationIds=c.passedValidationIds,o.lastErrorIds=c.errorIds;}else i&&!this.completedScenarios.has(r.id)?(T.debug(`Scenario ${r.id} (${r.title}) marked as completed`),this.completedScenarios.add(r.id),o.wasActive=!1,this.state.feedItems.delete(s)):o.wasActive=!1;}}catch(e){T.debug(`Error handling scenarios: ${e}`);}}async handleScenarioCompletion(t){try{let A=(await M.scenarioRepository.getBySessionId(this.state.sessionId)).find(c=>c.id===t);if(!A)return;let r=await M.analysisRepository.getLatestScenarioAnalysis(t);if(!r){T.debug(`Scenario ${t} completion: no analysis found`);return}T.debug(`Scenario ${t} (${A.title}) completion: analysis found, score=${r.score}`);let s=`scenario-${A.id}`,n=this.state.feedItems.get(s);if(!n)return;let i=[];i.push({message:`Score: ${r.score==null?"-":r.score} / 100`,styles:{icon:"\u{1F4CA}",textColor:this.getScoreColor(r.score||-1)}}),r.analysis_summary&&i.push({message:`Analysis: ${r.analysis_summary}`,styles:{icon:"\u{1F9E0}",textColor:"white"}}),i.push({message:`Execution Summary: ${r.execution_summary}`,styles:{icon:"hexagon",iconColor:"blueBright",textColor:"white"}});let o=await M.scenarioRepository.getIssuesByParent(r.id,"scenario_analysis");o.length>0&&T.debug(`Scenario ${t} (${A.title}) completion: ${o.length} issues found`);for(let c of o){let g=[];c.issue_type&&g.push(`${c.issue_type}`),c.description&&g.push(`${c.description}`),g.length>0&&i.push({message:g.join(" | "),styles:{icon:"\u{1F41E}",textColor:c.severity==="critical"||c.severity==="high"?"red":"yellow"}});}let a=await M.scenarioRepository.getPassedValidationsByScenarioId(t);a.length>0&&T.debug(`Scenario ${t} (${A.title}) completion: ${a.length} passed validations found`);for(let c of a){let g=[];c.validation_type&&g.push(`${c.validation_type}`),c.description&&g.push(`${c.description}`),g.length>0&&i.push({message:g.join(" | "),styles:{icon:"check",iconColor:"greenBright",textColor:"greenBright"}});}if(i.length>0){let c={...n,completedLogStyle:{icon:"\u{1F9EA}",textColor:"magenta",bold:!0},status:bn.mapScenarioStatusToFeedStatus(A.status),currentMessages:i};this.state.feedItems.set(s,c),this.clientPort.onFeedItem(c);}}catch{}}async handleSessionErrors(t){try{let e=await M.errorRepository.getAllByParent(t,"test_session");if(e.length===0)return;T.debug(`Session ${t}: Found ${e.length} session-level errors`);let A=`session-error-${t}`;if(this.sessionErrorFeedItemCreated||this.state.feedItems.has(A))return;let r=[];for(let n of e)n.message&&r.push(this.createErrorMessage(n.message));let s={id:A,name:"Session Error",status:"failed",currentMessages:r.length>0?[r[r.length-1]]:[],allMessages:r.length>1?r.slice(0,-1):[],objectType:"Error"};this.state.feedItems.set(A,s),this.clientPort.onFeedItem(s),this.sessionErrorFeedItemCreated=!0,T.debug(`Session ${t}: Created error feed item with ${e.length} errors`);}catch(e){T.debug(`Error handling session errors: ${e instanceof Error?e.message:String(e)}`);}}async handleSessionCompletion(t){try{let e=await M.sessionRepository.getById(t);if(!e)return;await new Promise(c=>setTimeout(c,1e3)),await this.handleTasks(t);let A=[],r=await M.analysisRepository.getLatestTestSessionAnalysis(t),s=await M.scenarioRepository.getBySessionId(t);if(r){A.push({message:`Score: ${r.score==null?"-":r.score} / 100`,styles:{icon:"\u{1F4CA}",textColor:this.getScoreColor(r.score||-1)}}),A.push({message:`Scenarios run: ${s.length}`,styles:{icon:"\u{1F9EA}",textColor:"white"}}),r.analysis_summary&&A.push({message:`Analysis: ${r.analysis_summary}`,styles:{icon:"\u{1F9E0}",textColor:"white"}});let c=await M.analysisRepository.getIssuesByParent(r.id,"test_session_analysis");c.length>0&&T.debug(`Session ${t} completion: ${c.length} issues found`);for(let g of c){let E=[];g.issue_type&&E.push(`${g.issue_type}`),g.description&&E.push(`${g.description}`),E.length>0&&A.push({message:E.join(" | "),styles:{icon:"\u{1F41E}",textColor:g.severity==="critical"||g.severity==="high"?"red":"yellow"}});}}let n=e.status,i;switch(n){case "success":i="success";break;case "error":case "failing":i="failed";break;case "skipped":i="skipped";break;case "cancelled":i="cancelled";break;default:i="failed";}if(n==="error"){let c=await M.errorRepository.getAllByParent(t,"test_session");if(c.length>0){T.debug(`Session ${t} completion: ${c.length} errors found`);for(let g=0;g<c.length;g++){let E=c[g];E.message&&A.push(this.createErrorMessage(E.message));}}}let o={id:`session-${t}`,name:e.title?`Session: ${e.title}`:`Session: ${t}`,status:i,objectType:"TestSession",completedLogStyle:{icon:"\u{1F3AF}",textColor:"cyanBright",bold:!0},currentMessages:A};this.state.feedItems.set(o.id,o),this.clientPort.onFeedItem(o);let a={sessionId:t,status:e.status,feedItems:Array.from(this.state.feedItems.values()),progress:this.state.progress||void 0,timestamp:new Date};this.clientPort.onSnapshot(a),await new Promise(c=>setTimeout(c,500));}catch(e){T.debug(`Error in handleSessionCompletion: ${e instanceof Error?e.message:String(e)}`);}}async updateProgress(t){try{let e=await M.progressRepository.getTotalScenarioCount(t),A=await M.progressRepository.getCompletedScenarioCount(t);if(e>0){let r=Math.round(A/e*100);this.state.progress={total:e,current:A,percentage:r,type:"number"};}}catch{}}isSessionCompleted(t){return ["success","error","skipped","cancelled"].includes(t)}pause(){this.isPaused=true;}resume(){this.isPaused=false,!this.isPolling&&this.state&&!this.state.isCompleted&&this.poll();}async stop(){await new Promise(t=>setTimeout(t,200)),this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null),this.isPolling=false,this.isPaused=false;}requestTermination(){this.terminationRequested=true,this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null);}async stopAndResolve(){await this.stop(),this.state&&(this.state.isCompleted=true),this.resolveCallback?.();}setRate(t){this.pollInterval=t,this.pollTimer&&(this.stop().catch(()=>{}),this.pollTimer=setInterval(()=>this.poll(),this.pollInterval));}createInfoMessage(t){return k(t,{icon:"circle",iconColor:"gray",textColor:"gray"})}createErrorMessage(t){return k(t,{icon:"cross",iconColor:"red",textColor:"red"})}getScoreColor(t){return t<0?"gray":t>=90?"greenBright":t>=80||t>=70?"yellowBright":"redBright"}initializeTaskTracking(t){return {lastStatus:"",wasActive:false,lastUpdatedAt:new Date().toISOString(),lastMessageIds:new Set,lastTaskStepIds:new Set}}initializeScenarioTracking(t){return {lastStatus:"",wasActive:false,lastUpdatedAt:new Date().toISOString(),lastAgentStepIds:new Set,lastAgentStepActionIds:new Map,lastAgentStepValidationIds:new Map,lastPassedValidationIds:new Set,lastErrorIds:new Set}}initializeSessionTracking(t){return {lastStatus:t,wasActive:false,lastErrorIds:new Set}}detectSubItemChanges(t,e){if(t.size!==e.size)return true;for(let A of t)if(!e.has(A))return true;return false}async collectTaskSubItemIds(t){let e=await M.taskRepository.getStepsByTaskId(t),A=new Set(e.map(c=>c.id)),r=await M.taskRepository.getMessagesByParent(t,"task"),s=e.map(c=>M.taskRepository.getMessagesByParent(c.id,"step")),i=(await Promise.all(s)).flat(),o=[...r,...i],a=new Set(o.map(c=>c.id));return {taskStepIds:A,messageIds:a}}async collectScenarioSubItemIds(t,e){let A=new Set,r=new Map,s=new Map;if(e){let c=await M.scenarioRepository.getAgentStepsByBrowserSessionId(e);for(let g of c){A.add(g.id);let E=await M.scenarioRepository.getAgentStepActionsByStepId(g.id),B=new Set(E.map(d=>d.id));r.set(g.id,B);let l=await M.scenarioRepository.getAgentStepValidationsByStepId(g.id),h=new Set(l.map(d=>d.id));s.set(g.id,h);}}let n=await M.scenarioRepository.getPassedValidationsByScenarioId(t),i=new Set(n.map(c=>c.id)),o=await M.scenarioRepository.getErrorsByScenarioId(t),a=new Set(o.map(c=>c.id));return {agentStepIds:A,agentStepActionIds:r,agentStepValidationIds:s,passedValidationIds:i,errorIds:a}}getController(){return {pause:()=>this.pause(),resume:()=>this.resume(),stop:()=>this.stop(),setRate:t=>this.setRate(t)}}};function tu(t,e={}){return new Promise((A,r)=>{let s=xp.request(t,e,n=>A(n));s.on("error",r),s.end();})}async function ew(t){let e=await tu(t,{method:"HEAD"});if(e.statusCode&&e.statusCode>=300&&e.statusCode<400&&e.headers.location)return e.resume(),ew(e.headers.location);if(!e.statusCode||e.statusCode<200||e.statusCode>=300)throw e.resume(),new Error(`HEAD failed: HTTP ${e.statusCode}`);let A=Number(e.headers["content-length"]??0)||0,r=String(e.headers["accept-ranges"]??"").toLowerCase().includes("bytes");return e.resume(),{total:A,acceptRanges:r}}async function kv(t,e,A,r,s){let n=await tu(t,{method:"GET",headers:{Range:`bytes=${e}-${A}`}});if(n.statusCode!==206)throw n.resume(),new Error(`Range not supported or ignored (HTTP ${n.statusCode}).`);n.on("data",o=>s?.(o.length));let i=$.createWriteStream(r,{flags:"w"});await pipeline(n,i);}async function Nv(t,e){let A=$.createWriteStream(e,{flags:"w"});for(let r of t){let s=$.createReadStream(r);await pipeline(s,A,{end:false});}await new Promise((r,s)=>{A.end(n=>n?s(n):r());});}async function bv(t,e,A){let r=Math.max(1,A?.parts),s=A?.minPartSizeMB*1024*1024,n=A?.emitEveryMs??250,{total:i,acceptRanges:o}=await ew(t);if(!i)throw new Error("Unknown content-length; cannot parallelize safely.");if(!o||i<s||r===1){let l=await tu(t,{method:"GET"});if(!l.statusCode||l.statusCode<200||l.statusCode>=300)throw l.resume(),new Error(`Download failed: HTTP ${l.statusCode}`);let h=0,d=0;l.on("data",I=>{h+=I.length;let Q=Date.now();A?.onProgress&&Q-d>=n&&(d=Q,A.onProgress({total:i,current:h,percentage:Math.floor(h/i*100)}));});let C=$.createWriteStream(e,{highWaterMark:1024*1024});C.setMaxListeners(50),await pipeline(l,C),A?.onProgress?.({total:i,current:i,percentage:100});return}let a=Math.ceil(i/r),c=[];for(let l=0;l<r;l++){let h=l*a;if(h>=i)break;let d=Math.min(i-1,(l+1)*a-1);c.push({start:h,end:d,partPath:`${e}.part${l}`});}let g=0,E=0,B=l=>{if(g+=l,!A?.onProgress)return;let h=Date.now();h-E>=n&&(E=h,A.onProgress({total:i,current:g,percentage:Math.floor(g/i*100)}));};try{await Promise.all(c.map(l=>kv(t,l.start,l.end,l.partPath,B))),await Nv(c.map(l=>l.partPath),e),A?.onProgress?.({total:i,current:i,percentage:100});}finally{await Promise.allSettled(c.map(l=>se.unlink(l.partPath)));}}var Fp=promisify($.mkdir),Mv=promisify($.writeFile),Lv=promisify($.unlink),kp="1.0.20",Uv="1.0.20",Tv="https://devassures3bucket.s3.us-east-1.amazonaws.com",Np=/devassure-agent,\s*version\s+([\d.]+)/i;function vv(){return process.platform==="win32"?"windows":process.platform==="darwin"?process.arch==="arm64"?"macos":"macos_intel":"linux"}function xv(){return process.platform==="win32"?"devassure-agent.exe":"devassure-agent"}function tw(){return Ae.join(xn(),"last-downloaded-version")}function bp(){try{let t=ps();return $.existsSync(t)&&$.statSync(t).isFile()}catch{return false}}function Aw(){let t=YA(),e=xv(),A=Ae.join(t,e),r=Ae.join(t,".devassure-agent-internal");try{$.existsSync(A)&&$.unlinkSync(A);}catch{}try{$.existsSync(r)&&($.statSync(r).isDirectory()?$.rmSync(r,{recursive:!0}):$.unlinkSync(r));}catch{}}function Gv(){let t=tw();if(!$.existsSync(t))return null;try{return $.readFileSync(t,"utf8").trim()||null}catch{return null}}function rw(){return new Promise((t,e)=>{let A=ps(),r=spawn(A,["version"],{shell:false,stdio:["ignore","pipe","pipe"]}),s="",n="";r.stdout&&r.stdout.on("data",i=>{s+=i.toString();}),r.stderr&&r.stderr.on("data",i=>{n+=i.toString();}),r.on("error",e),r.on("close",i=>{if(i!==0){e(new Error(`devassure-agent version exited ${i}: ${n||s}`));return}let o=s.match(Np)||n.match(Np);o&&o[1]?t(o[1].trim()):e(new Error(`Could not parse version from: ${s||n}`));});})}function vn(t,e){t?.onFeedItem(e);}function Mp(t,e){if(!t)return;let A=e.progress!==void 0&&e.progress!==null?{...e.progress,type:"progressBar",unit:"MB"}:void 0;t.onSnapshot({sessionId:"",status:"setup",feedItems:e.feedItems,progress:A,timestamp:new Date});}async function Yv(t,e,A,r){let n={id:"setup-download",name:"Downloading devassure-agent",status:"running"};vn(A,n);let i=r?.progressEmitIntervalMs??300;try{await bv(t,e,{parts:8,minPartSizeMB:10,emitEveryMs:i,onProgress:({total:o,current:a,percentage:c})=>{Mp(A,{feedItems:[{...n}],progress:{total:+(o/(1024*1024)).toFixed(2),current:+(a/(1024*1024)).toFixed(2),percentage:c}});}}),await new Promise(o=>setTimeout(o,100)),Mp(A,{feedItems:[{...n,status:"success",currentMessages:[k("Download complete.")]}],progress:void 0});}catch(o){try{$.unlinkSync(e);}catch{}throw o}}async function Hv(t,e,A){let s={id:"setup-extract",name:"Extracting\u2026",status:"running",currentMessages:[k("Extracting...")]};vn(A,s),new vp.default(t).extractAllTo(e,true),await Lv(t).catch(()=>{}),Lp(ps()),Lp(PT()),await new Promise(i=>setTimeout(i,100)),vn(A,{...s,status:"success",currentMessages:[k("Extracted.")]});}function Lp(t){try{$.chmodSync(t,493);}catch{}}async function qg(t,e){let A=YA(),r=xn(),s=vv(),n=Uv,i=`${Tv}/${s}/devassure-agent/${n}/DevAssure-Agent.zip`;await Fp(A,{recursive:true}),await Fp(r,{recursive:true}),Aw();let o=Ae.join(r,`DevAssure-Agent-${n}.zip`);await Yv(i,o,t,e),await Hv(o,A,t);let a={id:"setup-version-check",name:"Setting up DevAssure agent",status:"running"};vn(t,a);let c=await rw();await new Promise(g=>setTimeout(g,100)),vn(t,{...a,status:"success"}),await Mv(tw(),c,"utf8"),await new Promise(g=>setTimeout(g,100));}async function Au(t,e){let A=e?.force===true,r=e?.progressEmitIntervalMs,s=Aa().environment==="dev";if(s){if(!bp())throw new Error(`Dev mode: devassure-agent not found. Add devassure-agent and .devassure-agent-internal to ${YA()}`);return}let n=r!==void 0?{progressEmitIntervalMs:r}:void 0;if(A){if(Aw(),s)throw new Error(`Dev mode: agent cannot be downloaded. Add devassure-agent and .devassure-agent-internal to ${YA()}`);await qg(t,n);return}if(!bp()){await qg(t,n);return}let i=Gv();if(!(i&&Pn.valid(i)&&Pn.gte(i,kp))){try{let o=await rw();if(Pn.valid(o)&&Pn.gte(o,kp))return}catch{}await qg(t,n);}}var sw=class{constructor(){this.clientPort=null,this.pollingService=null,this.agentProcessBySessionId=new Map,this.activePrompts=new Map;}initialize(t){this.clientPort=t,this.pollingService=new Fv,this.pollingService.initialize(t);}async close(){await M.close(),await this.pollingService?.stop();}async executeSession(t,e,A,r,s,n,i,o,a,c){if(!this.clientPort||!this.pollingService)throw new Error("SessionService not initialized. Call initialize() first.");await M.initialize(),await Au(this.clientPort??void 0);let g=ps(),E=["start",`--test-session-id=${t}`,`--project-path=${e}`];r?.trim()?E.push(`--test-case-file=${r}`):(s?.trim()?E.push(`--test-cases-csv=${s}`):A?.trim()&&E.push(`--test-cases-dir=${A}`),n&&E.push(`--filter=${n}`)),i&&E.push("--archive",i),o?.trim()&&E.push(`--environment=${o.trim()}`);let B={...process.env};a?.trim()&&(B.HTTP_PROXY=a.trim()),c?.trim()&&(B.HTTPS_PROXY=c.trim());let l=this.clientPort?.getLogLevel()==="debug",h=spawn(g,E,{shell:false,stdio:["ignore",l?"pipe":"ignore",l?"pipe":"ignore"],env:B});this.agentProcessBySessionId.set(t,h);let d=async()=>{await this.pollingService?.stop(),h.kill(),this.agentProcessBySessionId.delete(t);};l&&h.stdout&&(h.stdout.on("data",C=>{console.log(">>> [AGENT]: ",C.toString());}),h.stderr&&h.stderr.on("data",C=>{console.log(">>> [AGENT]: [ERROR] ",C.toString());}));try{this.handleUserInputPrompts(t).catch(()=>{}),await this.pollingService.start(t);}finally{await d();}}async sessionExecutionTermination(t){let e=`session-termination-${t}`;try{if(await M.initialize(),await M.sessionRepository.updateStatus(t,"cancelled"),this.clientPort){let n={id:e,name:"Terminating execution...",status:"failing",stateIndicators:[{status:"failing",indicator:"blinkingCircle",color:"red"}],currentMessages:[],noBorder:!0};this.clientPort.onFeedItem(n);}if(await new Promise(n=>setTimeout(n,2e3)),this.pollingService?.requestTermination(),await this.clientPort?.markActiveFeedItemsCancelled?.([e]),await new Promise(n=>setTimeout(n,6e3)),this.clientPort){let n={id:e,name:"Terminated execution.",status:"failing",stateIndicators:[{status:"failing",indicator:"blinkingCircle",color:"red"}],currentMessages:[],noBorder:!0};this.clientPort.onFeedItem(n);}let A=this.agentProcessBySessionId.get(t);if(A&&(A.kill(),this.agentProcessBySessionId.delete(t)),await new Promise(n=>setTimeout(n,200)),this.clientPort){let n={id:e,name:"Execution terminated!",status:"error",currentMessages:[],noBorder:!0};this.clientPort.onFeedItem(n);}let r=await M.sessionRepository.getById(t);r&&r.status!=="cancelled"&&await M.sessionRepository.updateStatus(t,"cancelled"),(await M.errorRepository.getBySessionId(t)).length===0&&await M.errorRepository.createForSession(t,"Execution cancelled by user!"),await this.pollingService?.stopAndResolve();}catch(A){console.error(`Error during session termination: ${A instanceof Error?A.message:String(A)}`);}}async handleUserInputPrompts(t){if(!this.clientPort||!this.pollingService)return;let e=new St(M.taskRepository),A=true,r=setInterval(async()=>{if(!A){clearInterval(r);return}try{let s=await M.taskRepository.getBySessionId(t);for(let n of s){if(!St.isTaskActive(n.status))continue;let o=await e.getPendingUserInputTaskStep(n.id);if(o){let a=`task-${n.id}-step-${o.id}`;if(this.activePrompts.has(a))continue;let c=St.getPromptTypeFromTaskStepData(o.data);if(!c)continue;let g=new AbortController;this.activePrompts.set(a,g);try{let E=await this.clientPort.userPrompt({type:c==="text"?"text":"confirm",message:o.label||"Please provide input:",placeholder:c==="text"?"Enter value...":void 0},g.signal);if(E.ok&&E.value!==void 0){let B=(typeof E.value=="boolean",String(E.value));await M.taskRepository.updateTaskStepUserInput(o.id,B);}}catch{}finally{this.activePrompts.delete(a);}}}}catch{}},500);return new Promise(s=>{let n=setInterval(()=>{(!this.pollingService||!this.pollingService.state||this.pollingService.state.isCompleted)&&(A=false,clearInterval(r),clearInterval(n),s());},100);})}},ra=class{async getBrowserSessionCount(){return await M.browserSessionRepository.getCount()}async getTestSessionCount(){return await M.sessionRepository.getCount()}async getScenarioCount(){return await M.scenarioRepository.getCount()}async getStorageSize(){let t=tA(),e=Ae.join(t,"data","devassure.db"),A=Ae.join(t,"reports"),r=0;try{r+=await se.stat(e).then(s=>s.size);}catch{}try{r+=await this.calculateDirectorySize(A);}catch{}return r}async calculateDirectorySize(t){let e=0;try{let A=await se.readdir(t,{withFileTypes:!0});for(let r of A){let s=Ae.join(t,r.name);if(r.isDirectory())e+=await this.calculateDirectorySize(s);else if(r.isFile())try{let n=await se.stat(s);e+=n.size;}catch{}}}catch{}return e}formatStorageSize(t){if(t===0)return "0 B";let e=1024,A=["B","KB","MB","GB","TB"],r=Math.floor(Math.log(t)/Math.log(e));return `${(t/Math.pow(e,r)).toFixed(2)} ${A[r]??"B"}`}},nw=class{async getAllSessions(){return await M.sessionRepository.getAllOrderedByCreatedAt()}async getSessionsToDelete(t,e){let A=await this.getAllSessions();if(t!==void 0){let r=new Date;r.setDate(r.getDate()-t);let s=r.toISOString();return A.filter(n=>n.created_at?n.created_at<s:true)}return e!==void 0?e>=A.length?[]:A.slice(e):A}async getCleanupStats(t){let A=(await M.browserSessionRepository.getBySessionIds(t)).length,r=await this.calculateStorageSize(t);return {sessionsToDelete:t.length,browserSessionsToDelete:A,storageToFree:r}}async cleanupSessionsByIds(t){if(t.length===0)return;let e=await M.sessionRepository.getExistingSessionIds(t);await this.deleteSessions(e);}async calculateStorageSize(t){let e=tA(),A=0;for(let r of t){let s=Ae.join(e,"data",r),n=Ae.join(e,"reports",r);try{A+=await this.getDirectorySize(s);}catch{}try{A+=await this.getDirectorySize(n);}catch{}}return A}async getDirectorySize(t){let e=0;try{let A=await se.readdir(t,{withFileTypes:!0});for(let r of A){let s=Ae.join(t,r.name);if(r.isDirectory())e+=await this.getDirectorySize(s);else if(r.isFile())try{let n=await se.stat(s);e+=n.size;}catch{}}}catch{}return e}async deleteAllData(){await me(async()=>{await Ce.run("BEGIN TRANSACTION");try{await Ce.run("DELETE FROM AgentStepAction"),await Ce.run("DELETE FROM AgentStepValidation"),await Ce.run("DELETE FROM AgentStep"),await Ce.run("DELETE FROM PassedValidation"),await Ce.run("DELETE FROM TaskStep"),await Ce.run("DELETE FROM Task"),await Ce.run("DELETE FROM Error"),await Ce.run("DELETE FROM Message"),await Ce.run("DELETE FROM Issue"),await Ce.run("DELETE FROM BrowserSession"),await Ce.run("DELETE FROM ScenarioAnalysis"),await Ce.run("DELETE FROM Scenario"),await Ce.run("DELETE FROM TestSessionAnalysis"),await Ce.run("DELETE FROM ReportsRender"),await Ce.run("DELETE FROM SessionData"),await Ce.run("DELETE FROM TestSession"),await Ce.run("COMMIT");}catch(r){throw await Ce.run("ROLLBACK"),r}});let t=tA(),e=Ae.join(t,"data"),A=Ae.join(t,"reports");try{let r=await se.readdir(e,{withFileTypes:!0});for(let s of r)s.isDirectory()&&await se.rm(Ae.join(e,s.name),{recursive:!0,force:!0});}catch{}try{let r=await se.readdir(A,{withFileTypes:!0});for(let s of r)s.isDirectory()&&await se.rm(Ae.join(A,s.name),{recursive:!0,force:!0});}catch{}}async deleteSessions(t,e){if(t.length===0&&!e)return;if(e){await this.deleteAllData();return}let A=await M.scenarioRepository.getScenarioIdsBySessionIds(t),r=await M.browserSessionRepository.getBrowserSessionIdsBySessionIds(t),s=[];for(let a of t){let c=await M.taskRepository.getBySessionId(a);s.push(...c.map(g=>g.id));}let n=[];for(let a of s){let c=await M.taskRepository.getStepsByTaskId(a);n.push(...c.map(g=>g.id));}let i=[];for(let a of A){let c=await M.analysisRepository.getLatestScenarioAnalysis(a);c&&i.push(c.id);}let o=[];for(let a of t){let c=await M.analysisRepository.getLatestTestSessionAnalysis(a);c&&o.push(c.id);}await me(async()=>{await Ce.run("BEGIN TRANSACTION");try{let a=M.cleanupRepository;await a.deleteAgentStepActionsByBrowserSessionIds(r),await a.deleteAgentStepValidationsByBrowserSessionIds(r),await a.deleteAgentStepsByBrowserSessionIds(r),await a.deletePassedValidationsByScenarioIds(A),await a.deleteTaskStepsBySessionIds(t),await a.deleteTasksBySessionIds(t),await a.deleteErrorsBySessionIds(t),await a.deleteMessagesBySessionIds(t,A,r,s,n),await a.deleteIssuesByAnalysisIds(i,o),await a.deleteBrowserSessionsBySessionIds(t),await a.deleteScenarioAnalysesByScenarioIds(A),await a.deleteScenariosBySessionIds(t),await a.deleteTestSessionAnalysesBySessionIds(t),await a.deleteReportsRendersBySessionIds(t),await a.deleteSessionDataBySessionIds(t),await a.deleteTestSessionsByIds(t),await Ce.run("COMMIT");}catch(a){throw await Ce.run("ROLLBACK"),a}}),await this.deleteSessionFolders(t);}async deleteSessionFolders(t){let e=tA();for(let A of t){let r=Ae.join(e,"data",A),s=Ae.join(e,"reports",A);try{await se.rm(r,{recursive:!0,force:!0});}catch{}try{await se.rm(s,{recursive:!0,force:!0});}catch{}}}};function Jv(){let t=new Date,e=r=>r.toString().padStart(2,"0"),A=t.getMilliseconds().toString().padStart(3,"0").padEnd(6,"0");return `${t.getFullYear()}-${e(t.getMonth()+1)}-${e(t.getDate())}T${e(t.getHours())}:${e(t.getMinutes())}:${e(t.getSeconds())}.${A}`}var sa=class{constructor(){this.clientPort=null;}initialize(t){this.clientPort=t;}async archiveReport(t,e,A,r){let s=ps(),n=["archive-results","--target-path",t,"--test-session-id",e],i={...process.env};A?.trim()&&(i.HTTP_PROXY=A.trim()),r?.trim()&&(i.HTTPS_PROXY=r.trim());let o=this.clientPort?.getLogLevel()==="debug",a=spawn(s,n,{shell:false,stdio:o?["ignore","pipe","pipe"]:"inherit",env:i});return o&&a.stdout&&a.stdout.on("data",c=>{console.log(">>> [AGENT]: ",c.toString());}),o&&a.stderr&&a.stderr.on("data",c=>{console.log(">>> [AGENT]: [ERROR] ",c.toString());}),new Promise(c=>{a.on("exit",(g,E)=>{c(g??(E?1:0));});})}async openReport(t,e,A,r,s,n){await M.initialize();let i=t;if(!r&&e){let h=await M.sessionRepository.getLastSessionId();if(!h)throw new Error("No test sessions found");i=h;}let o=Jv(),a=ps(),c=["open-report"];r?c.push("--archive",r):i&&c.push(`--test-session-id=${i}`);let g={...process.env};s?.trim()&&(g.HTTP_PROXY=s.trim()),n?.trim()&&(g.HTTPS_PROXY=n.trim());let E=spawn(a,c,{shell:false,env:g});this.clientPort?.getLogLevel()==="debug"&&(E.stdout.on("data",h=>{console.log(">>> [AGENT]: ",h.toString());}),E.stderr.on("data",h=>{console.log(">>> [AGENT]: [ERROR] ",h.toString());}));let B=()=>{E.killed||E.kill();},l=()=>{E.killed||E.kill();};process.on("SIGINT",l),process.on("SIGTERM",l);try{let h=await this.pollForReportsRender(o,i);if(!h)throw new Error("Failed to start report server - no ReportsRender entry found");if(!h.host||h.port===null)throw new Error("Report server started but host/port not available");let d=`http://${h.host}:${h.port}`;if(A){let C="report-server",I={id:C,name:`Running report server at ${d}`,status:"running",currentMessages:[k(`Report server running at ${d}`)]};await A.addFeedItem(I),await new Promise(async Q=>{let u=!1,p=async()=>{if(!u){u=!0,B();try{await A.updateFeedItem(C,{status:"success",currentMessages:[k("Report server closed")],currentPrompt:void 0});}catch(D){T.debug(">>> [REPORT SERVICE]: Feed item already removed",{error:D});}Q();}},f={message:"Stop reporting server.",type:"userKill",callbackFunction:async D=>{T.debug(">>> [REPORT SERVICE]: User kill callback",{proceed:D}),D||await p();}};await A.updateFeedItem(C,{currentPrompt:f}),E.on("exit",async()=>{if(!u){u=!0;try{await A.updateFeedItem(C,{status:"success",currentMessages:[k("Report server closed")],currentPrompt:void 0});}catch(D){T.debug(">>> [REPORT SERVICE]: Feed item already removed on exit",{error:D});}Q();}});});}return {url:d,process:E}}catch(h){throw B(),h}finally{process.removeListener("SIGINT",l),process.removeListener("SIGTERM",l);}}async pollForReportsRender(t,e,A=60,r=500){for(let s=0;s<A;s++)try{let n;if(e)n=await M.reportsRenderRepository.getLatestByTestSessionIdAfter(e,t);else {let i=await M.reportsRenderRepository.getByCreatedAtAfter(t);n=i.length>0?i[0]:void 0;}if(n&&n.host&&n.port!==null)return {host:n.host,port:n.port};await new Promise(i=>setTimeout(i,r));}catch{await new Promise(i=>setTimeout(i,r));}return null}},iw="00:00:00";function Vv(t){if(t<0||!Number.isFinite(t))return iw;let e=Math.floor(t/1e3),A=Math.floor(e/3600),r=Math.floor(e%3600/60),s=e%60,n=i=>i.toString().padStart(2,"0");return `${n(A)}:${n(r)}:${n(s)}`}function Up(t){if(t==null||t==="")return null;let e=Date.parse(t);return Number.isNaN(e)?null:e}var ow=class{async getSessionSummary(t){let e=await M.sessionRepository.getById(t);if(!e)throw new Error("Session not found");let r=(await M.scenarioRepository.getBySessionId(t)).length,s=await M.analysisRepository.getLatestTestSessionAnalysis(t),n=null,i=0;s&&(n=s.score??null,i=(await M.analysisRepository.getIssuesByParent(s.id,"test_session_analysis")).length);let o=await M.scenarioRepository.getPassedValidationCountByTestSessionId(t),a=await M.analysisRepository.getFailedValidationCountByTestSessionId(t),c=null,g=Up(e.created_at),E=Up(e.end_time);g!=null&&E!=null&&(c=E-g);let B=c!=null?Vv(c):iw;return {sessionId:t,title:e.title??null,environment:e.test_environment??null,scenarios:r,score:n,passedValidations:o,failedValidations:a,failureGroups:i,durationMs:c,durationString:B}}};function aw(){(0, ta.setGlobalDispatcher)(new ta.EnvHttpProxyAgent);}var Pv=".devassure";function Ds(t){let e=process.cwd();return Ae.join(e,Pv)}function na(t){let e=Ds();$.existsSync(e)||$.mkdirSync(e,{recursive:true});}function Gn(t,e,A,r){na();let s=Ae.join(Ds(),t),n="";A&&(n=A+`
|
|
127
|
+
`),B.close(),a({authCode:C.code,redirectUri:E})):(h.writeHead(400),h.end("Invalid callback"));});B.listen(t,async()=>{let l=new URL(g.authorizationUrl);l.searchParams.set("response_type","code"),l.searchParams.set("client_id",g.clientId),l.searchParams.set("redirect_uri",E),l.searchParams.set("state",e),l.searchParams.set("code_challenge",r),l.searchParams.set("code_challenge_method","S256"),l.searchParams.set("scope","offline_access"),l.searchParams.set("utm_source",i||"agent");try{await this.clientPort.openExternal(l.toString());}catch(h){B.close(),c(new Error(`Failed to open browser: ${h instanceof Error?h.message:String(h)}`));}}),B.on("error",l=>{c(l);}),setTimeout(()=>{B.close(),c(new Error("Authentication timeout. Please try again."));},300*1e3);})}async exchangeCodeForTokens(t,e,A){let r=Mn(),s=Buffer.from(`${r.clientId}:${r.clientSecret}`).toString("base64"),n=await fetch(r.tokenUrl,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Authorization:`Basic ${s}`},body:new URLSearchParams({grant_type:"authorization_code",code:t,redirect_uri:A,code_verifier:e})});if(!n.ok){let o=await n.text();throw new Error(`Token exchange failed: ${n.status} ${o}`)}let i=await n.json();if(!i.access_token||!i.refresh_token)throw new Error("Invalid token response");return i}generateRandomString(t){let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~",A="",r=new Uint8Array(t);Rt.getRandomValues(r);for(let s=0;s<t;s++)A+=e[r[s]%e.length];return A}async generateCodeChallenge(t){let A=new TextEncoder().encode(t),r=await Rt.subtle.digest("SHA-256",A);return btoa(String.fromCharCode(...new Uint8Array(r))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}};async function Kp(t){let e=process.env.DEVASSURE_TOKEN;if(e&&e.trim()!=="")try{return await t.jobPing(e,"api_key_env_var"),{success:!0,message:""}}catch{return {success:false,message:"auth token in Environment variable DEVASSURE_TOKEN is invalid, add valid token or remove the variable and run `devassure login` to login."}}let A=await Le.getAuthToken();if(A)try{return await t.jobPing(A,"token"),{success:!0,message:""}}catch{return await Le.clearAuthToken(),{success:false,message:"auth-token added is invalid. Please add new token using `devassure add-token` command or run `devassure login` to login from browser."}}if(await Le.getAccessToken())try{return await t.ensureAuthenticated(),{success:!0,message:""}}catch(s){return {success:false,message:s?.message||"Not Authenticated! Please login to continue."}}return {success:false,message:"Not Authenticated! Please login to continue."}}async function yv(t){try{return {Authorization:`Bearer ${await t.ensureAuthenticated()}`}}catch{return null}}function Dv(t){return {Authorization:`Bearer ${t}`}}async function eu(t,e,A={},r,s,n,i,o){let c=fv().baseUrl,g=new URL(e,c);i&&Object.entries(i).forEach(([I,Q])=>{g.searchParams.set(I,Q);});let E=g.toString(),B=n==="no_auth",l=B?void 0:n||await yv(o);if(!B&&!l)return {exception:"unauthorized",status:401,statusText:"Unauthorized",headers:new Headers};let h={method:t.toUpperCase(),headers:{"Content-Type":"application/json",...l,...r?.headers},...r};(t==="post"||t==="put")&&A&&(h.body=JSON.stringify(A));let d;try{d=await fetch(E,h);}catch{return {exception:"connection_error",status:0,statusText:"Connection Error",headers:new Headers}}if(d.status===401&&s&&!B)try{let I=await o.refreshToken();if(I?.access_token){let Q={...r,headers:{"Content-Type":"application/json",...r?.headers}};return await eu(t,e,A,Q,!1,Dv(I.access_token),i,o)}}catch{return await Le.clearTokens(),{exception:"unauthorized",status:401,statusText:"Unauthorized - Session expired",headers:d.headers}}let C;try{let I=d.headers.get("content-type");I&&I.includes("application/json")?C=await d.json():C=await d.text();}catch{}return {data:C,status:d.status,statusText:d.statusText,headers:d.headers}}var Xp=class{constructor(){this.authService=null,this.webAppCallFn=null;}initialize(t,e){this.authService=t,this.webAppCallFn=e;}async request(t,e={}){if(!this.webAppCallFn||!this.authService)throw new Error("ApiService not initialized. Call initialize() first.");let A=e.method?.toLowerCase()||"get",r;if(e.body)if(typeof e.body=="string")try{r=JSON.parse(e.body);}catch{r=e.body;}else r=e.body;let s=await this.webAppCallFn(A,t,r,{...e,refreshTokenOn401:!e.skipAuth,authHeader:e.skipAuth?"no_auth":void 0},!e.skipAuth,e.skipAuth?"no_auth":void 0,void 0);if(s.exception)throw s.exception==="unauthorized"?new Error("Not Authenticated!. Please login to continue!"):s.exception==="connection_error"?new Error("Connection error! Please check your network connection."):new Error(`API request failed: ${s.exception}`);if(!s.data&&s.status!==204)throw new Error(`API request failed: ${s.status} ${s.statusText}`);return s.data}async get(t,e){return this.request(t,{...e,method:"GET"})}async post(t,e,A){return this.request(t,{...A,method:"POST",body:e?JSON.stringify(e):void 0})}async put(t,e,A){return this.request(t,{...A,method:"PUT",body:e?JSON.stringify(e):void 0})}async delete(t,e){return this.request(t,{...e,method:"DELETE"})}},jp="normal",Zg=null;function Sv(t){Zg=t,$p();}function $p(){Zg&&(jp=Zg.getLogLevel());}function Rv(){return $p(),jp==="debug"}var T={debug:(...t)=>{Rv()&&console.log("[DEBUG]",...t);}},Fv=class{constructor(){this.clientPort=null,this.pollTimer=null,this.pollInterval=500,this.isPolling=false,this.isPaused=false,this.state=null,this.taskFeedItems=new Map,this.scenarioFeedItems=new Map,this.sessionTracking=null,this.completedTasks=new Set,this.completedScenarios=new Set,this.sessionErrorFeedItemCreated=false,this.sessionWaitFeedItemCreated=false,this.sessionWaitFeedItemUpdatedToSuccess=false,this.sessionNotFoundStartTime=null,this.sessionWaitTimeout=120*1e3,this.maxPollTime=3600*1e3,this.startTime=0,this.resolveCallback=null,this.rejectCallback=null,this.terminationRequested=false,this.activePrompts=new Map,this.pollCallCounter=0;}initialize(t){this.clientPort=t,Sv(t);}async start(t){if(!this.clientPort)throw new Error("PollingService not initialized. Call initialize() first.");return T.debug(`PollingService.start() called for session ${t}`),await M.initialize(),this.state={sessionId:t,feedItems:new Map,progress:null,isPolling:false,isCompleted:false},this.startTime=Date.now(),this.isPolling=false,this.isPaused=false,this.terminationRequested=false,this.sessionWaitFeedItemCreated=false,this.sessionWaitFeedItemUpdatedToSuccess=false,this.sessionNotFoundStartTime=null,T.debug(`PollingService: Starting polling for session ${t} with interval ${this.pollInterval}ms`),new Promise((e,A)=>{this.resolveCallback=e,this.rejectCallback=A,this.pollTimer=setInterval(()=>{this.poll().catch(r=>{T.debug(`Error in poll() from interval: ${r instanceof Error?r.message:String(r)}`);});},this.pollInterval),this.poll().catch(r=>{T.debug(`Error in initial poll(): ${r instanceof Error?r.message:String(r)}`);});})}async poll(){if(++this.pollCallCounter,!this.clientPort||!this.state||this.isPaused){T.debug(`poll() - clientPort or state or isPaused is false client port = ${this.clientPort?"true":"false"}, state = ${this.state?"true":"false"}, isPaused = ${this.isPaused?"true":"false"}`);return}if(!this.isPolling){if(this.isPolling=true,this.terminationRequested){this.isPolling=false;return}if(!M){this.isPolling=false;return}try{if(Date.now()-this.startTime>this.maxPollTime){if(T.debug("poll() - max poll time exceeded"),await this.stop(),this.terminationRequested)return;this.rejectCallback?.(new Error("Session execution timed out"));return}let t;try{t=await M.sessionRepository.getById(this.state.sessionId);}catch(o){throw T.debug(`poll() - error getting session from database: ${o instanceof Error?o.message:String(o)}`),o}if(!t){if(!this.sessionWaitFeedItemCreated){let o=`session-wait-${this.state.sessionId}`,a={id:o,name:"Booting up DevAssure Agent",status:"running",stateIndicators:[{status:"running",indicator:"blinkingHexagon",color:"cyan"},{status:"success",indicator:"hexagon",color:"green"}]};this.state.feedItems.set(o,a),this.clientPort.onFeedItem(a),this.sessionWaitFeedItemCreated=!0;}if(this.sessionNotFoundStartTime===null&&(this.sessionNotFoundStartTime=Date.now()),Date.now()-this.sessionNotFoundStartTime>this.sessionWaitTimeout){if(await this.stop(),this.terminationRequested)return;this.rejectCallback?.(new Error("Session not found in database after waiting 2 minutes"));return}this.isPolling=!1;return}this.sessionNotFoundStartTime=null;let e=`session-wait-${this.state.sessionId}`,A=this.state.feedItems.get(e);if(A&&!this.sessionWaitFeedItemUpdatedToSuccess){this.sessionWaitFeedItemUpdatedToSuccess=!0;let o={...A,status:"success",currentMessages:[k("Agent is ready!",{icon:"blinkingHexagon",iconColor:"grey",textColor:"grey"})]};this.state.feedItems.set(e,o),this.clientPort.onFeedItem(o),await new Promise(a=>setTimeout(a,1e3));}this.sessionTracking||(this.sessionTracking=this.initializeSessionTracking(t.status),T.debug(`Session ${this.state.sessionId} tracking initialized with status ${t.status}`));let r=t.status,s=this.isSessionCompleted(r);if(T.debug(`Session ${this.state.sessionId} status check: ${r}, isCompleted: ${s}, wasActive: ${this.sessionTracking.wasActive}, lastStatus: ${this.sessionTracking.lastStatus}`),s&&!this.sessionTracking.wasActive){if(T.debug(`Session ${this.state.sessionId} is already completed (was never active), handling completion immediately`),await this.handleSessionCompletion(this.state.sessionId),this.sessionTracking.wasActive=!1,this.sessionTracking.lastStatus=t.status,T.debug(`Session ${this.state.sessionId} is completed, all data read and emitted, stopping polling`),await this.stop(),this.terminationRequested)return;this.state.isCompleted=!0,this.resolveCallback?.();return}await this.handleTasks(this.state.sessionId),await this.handleScenarios(this.state.sessionId),await this.updateProgress(this.state.sessionId),this.sessionTracking.lastStatus!==t.status&&this.sessionTracking.lastStatus&&T.debug(`Session ${this.state.sessionId} status changed: ${this.sessionTracking.lastStatus} -> ${t.status}`);let i=this.sessionTracking.wasActive&&s;if(await this.handleSessionErrors(this.state.sessionId),i?(T.debug(`Session ${this.state.sessionId} transitioned from active to completed`),await this.handleSessionCompletion(this.state.sessionId),this.sessionTracking.wasActive=!1):s?(T.debug(`Session ${this.state.sessionId} is completed (was not active before)`),await this.handleSessionCompletion(this.state.sessionId),this.sessionTracking.wasActive=!1):(this.sessionTracking.wasActive||T.debug(`Session ${this.state.sessionId} is now active`),this.sessionTracking.wasActive=!0),this.sessionTracking.lastStatus=t.status,!s){let o={sessionId:this.state.sessionId,status:t.status,feedItems:Array.from(this.state.feedItems.values()),progress:this.state.progress||void 0,timestamp:new Date};this.clientPort.onSnapshot(o);}if(s){if(T.debug(`Session ${this.state.sessionId} is completed, all data read and emitted, stopping polling`),await this.stop(),this.terminationRequested)return;this.state.isCompleted=!0,this.resolveCallback?.();return}this.isPolling=!1;}catch(t){if(T.debug(`poll() error: ${t instanceof Error?t.message:String(t)}`),await this.stop(),this.terminationRequested)return;this.rejectCallback?.(t instanceof Error?t:new Error(String(t)));}}}async handleTasks(t){try{let e=await M.taskRepository.getBySessionId(t),A=new St(M.taskRepository);for(let r of e){if(r.name.startsWith("execute_scenario_"))continue;let s=`task-${r.id}`,n=St.isTaskActive(r.status),i=St.isTaskCompleted(r.status);if(i&&this.completedTasks.has(r.id))continue;let o=this.taskFeedItems.get(r.id);o||(o=this.initializeTaskTracking(r.id),this.taskFeedItems.set(r.id,o),T.debug(`Task ${r.id} (${r.name}) tracking initialized`)),o.wasActive&&i&&T.debug(`Task ${r.id} (${r.name}) transitioned from active to completed`);let{taskStepIds:c,messageIds:g}=await this.collectTaskSubItemIds(r.id),E=await A.getPendingUserInputTaskStep(r.id),B=await M.taskRepository.getValidatingUserInputTaskStep(r.id),l=o.lastStatus!==r.status;l&&o.lastStatus&&T.debug(`Task ${r.id} (${r.name}) status changed: ${o.lastStatus} -> ${r.status}`);let h=this.detectSubItemChanges(c,o.lastTaskStepIds);h&&T.debug(`Task ${r.id} (${r.name}) task steps changed: ${c.size} current, ${o.lastTaskStepIds.size} previous`);let d=this.detectSubItemChanges(g,o.lastMessageIds);d&&T.debug(`Task ${r.id} (${r.name}) messages changed: ${g.size} current, ${o.lastMessageIds.size} previous`);let C=E?.id!==o.lastPendingUserInputStepId;C&&T.debug(`Task ${r.id} (${r.name}) pending user input step changed: ${E?.id||"none"} -> ${o.lastPendingUserInputStepId||"none"}`);let I=B?.id!==o.lastValidatingUserInputStepId;if(I&&T.debug(`Task ${r.id} (${r.name}) validating user input step changed: ${B?.id||"none"} -> ${o.lastValidatingUserInputStepId||"none"}`),n){if(o.wasActive=!0,E){let f=`task-${r.id}-step-${E.id}`;if(!this.activePrompts.has(f)&&(C||!o.lastPendingUserInputStepId)){let y=St.getPromptTypeFromTaskStepData(E.data);if(y){this.pause(),T.debug(`Polling paused for user input on task ${r.id} (${r.name}), step ${E.id}`);let U=new AbortController;this.activePrompts.set(f,U);let Y=await A.getTaskMessages(r.id),v=St.mapTaskStatusToFeedStatus(r.status),O=St.createFeedItem(r,Y);O.onInput=!0,O.currentPrompt={message:E.label||"Please provide input:",type:y==="text"?"text":"confirm",placeholder:y==="text"?"Enter value...":void 0},this.state.feedItems.set(s,O),this.clientPort.onFeedItem(O);try{let _=await this.clientPort.userPrompt({type:y==="text"?"text":"confirm",message:E.label||"Please provide input:",placeholder:y==="text"?"Enter value...":void 0},U.signal);if(_.ok&&_.value!==void 0){let z=(typeof _.value=="boolean",String(_.value));await M.taskRepository.updateTaskStepUserInput(E.id,z),T.debug(`User input received for task ${r.id} (${r.name}), step ${E.id}, updated DB with status=validating`);}else T.debug(`User input cancelled for task ${r.id} (${r.name}), step ${E.id}`);}catch(_){T.debug(`User input prompt failed for task ${r.id} (${r.name}), step ${E.id}: ${_ instanceof Error?_.message:String(_)}`);}finally{this.activePrompts.delete(f);let _=this.state.feedItems.get(s);if(_){let z={..._};delete z.currentPrompt,z.onInput=!1,this.state.feedItems.set(s,z),this.clientPort.onFeedItem(z);}this.resume(),T.debug(`Polling resumed after user input for task ${r.id} (${r.name})`);}}}}let Q=await A.getTaskMessages(r.id),u=St.mapTaskStatusToFeedStatus(r.status),p=St.createFeedItem(r,Q);E&&!this.activePrompts.has(`task-${r.id}-step-${E.id}`)&&(p.onInput=!0),(!this.state.feedItems.has(s)||l||h||d||C||I)&&(this.state.feedItems.has(s)?T.debug(`Task ${r.id} (${r.name}) feed item updated`):T.debug(`Task ${r.id} (${r.name}) feed item created`),this.state.feedItems.set(s,p),this.clientPort.onFeedItem(p)),o.lastStatus=r.status,o.lastUpdatedAt=new Date().toISOString(),o.lastPendingUserInputStepId=E?.id,o.lastValidatingUserInputStepId=B?.id,o.lastTaskStepIds=c,o.lastMessageIds=g;}else if(i&&!this.completedTasks.has(r.id)){T.debug(`Task ${r.id} (${r.name}) marked as completed`),this.completedTasks.add(r.id),o.wasActive=!1;let Q=await A.getTaskMessages(r.id),u=St.createFeedItem(r,Q);this.state.feedItems.set(s,u),this.clientPort.onFeedItem(u),this.state.feedItems.delete(s);}else o.wasActive=!1;}}catch(e){T.debug(`Error handling tasks: ${e}`);}}async handleScenarios(t){try{let e=await M.scenarioRepository.getBySessionId(t),A=new bn(M.scenarioRepository);for(let r of e){let s=`scenario-${r.id}`,n=bn.isScenarioActive(r.status),i=bn.isScenarioCompleted(r.status);if(r.status==="new"||i&&this.completedScenarios.has(r.id))continue;let o=this.scenarioFeedItems.get(r.id);o||(o=this.initializeScenarioTracking(r.id),this.scenarioFeedItems.set(r.id,o),T.debug(`Scenario ${r.id} (${r.title}) tracking initialized`));let a=o.wasActive&&i;a&&T.debug(`Scenario ${r.id} (${r.title}) transitioned from active to completed`),a&&await this.handleScenarioCompletion(r.id);let c=await this.collectScenarioSubItemIds(r.id,r.browser_session_id),g=o.lastStatus!==r.status;g&&o.lastStatus&&T.debug(`Scenario ${r.id} (${r.title}) status changed: ${o.lastStatus} -> ${r.status}`);let E=this.detectSubItemChanges(c.agentStepIds,o.lastAgentStepIds);E&&T.debug(`Scenario ${r.id} (${r.title}) agent steps changed: ${c.agentStepIds.size} current, ${o.lastAgentStepIds.size} previous`);let B=!1;for(let[C,I]of c.agentStepActionIds.entries()){let Q=o.lastAgentStepActionIds.get(C)||new Set;if(this.detectSubItemChanges(I,Q)){B=!0,T.debug(`Scenario ${r.id} (${r.title}) agent step actions changed for step ${C}: ${I.size} current, ${Q.size} previous`);break}}let l=!1;for(let[C,I]of c.agentStepValidationIds.entries()){let Q=o.lastAgentStepValidationIds.get(C)||new Set;if(this.detectSubItemChanges(I,Q)){l=!0,T.debug(`Scenario ${r.id} (${r.title}) agent step validations changed for step ${C}: ${I.size} current, ${Q.size} previous`);break}}let h=this.detectSubItemChanges(c.passedValidationIds,o.lastPassedValidationIds);h&&T.debug(`Scenario ${r.id} (${r.title}) passed validations changed: ${c.passedValidationIds.size} current, ${o.lastPassedValidationIds.size} previous`);let d=this.detectSubItemChanges(c.errorIds,o.lastErrorIds);if(d&&T.debug(`Scenario ${r.id} (${r.title}) errors changed: ${c.errorIds.size} current, ${o.lastErrorIds.size} previous`),n){o.wasActive=!0;let C=await A.getScenarioMessages(r),I=bn.createFeedItem(r,C);(!this.state.feedItems.has(s)||g||E||B||l||h||d)&&(this.state.feedItems.has(s)?T.debug(`Scenario ${r.id} (${r.title}) feed item updated`):T.debug(`Scenario ${r.id} (${r.title}) feed item created`),this.state.feedItems.set(s,I),this.clientPort.onFeedItem(I)),o.lastStatus=r.status,o.lastUpdatedAt=new Date().toISOString(),o.lastAgentStepIds=c.agentStepIds,o.lastAgentStepActionIds=c.agentStepActionIds,o.lastAgentStepValidationIds=c.agentStepValidationIds,o.lastPassedValidationIds=c.passedValidationIds,o.lastErrorIds=c.errorIds;}else i&&!this.completedScenarios.has(r.id)?(T.debug(`Scenario ${r.id} (${r.title}) marked as completed`),this.completedScenarios.add(r.id),o.wasActive=!1,this.state.feedItems.delete(s)):o.wasActive=!1;}}catch(e){T.debug(`Error handling scenarios: ${e}`);}}async handleScenarioCompletion(t){try{let A=(await M.scenarioRepository.getBySessionId(this.state.sessionId)).find(c=>c.id===t);if(!A)return;let r=await M.analysisRepository.getLatestScenarioAnalysis(t);if(!r){T.debug(`Scenario ${t} completion: no analysis found`);return}T.debug(`Scenario ${t} (${A.title}) completion: analysis found, score=${r.score}`);let s=`scenario-${A.id}`,n=this.state.feedItems.get(s);if(!n)return;let i=[];i.push({message:`Score: ${r.score==null?"-":r.score} / 100`,styles:{icon:"\u{1F4CA}",textColor:this.getScoreColor(r.score||-1)}}),r.analysis_summary&&i.push({message:`Analysis: ${r.analysis_summary}`,styles:{icon:"\u{1F9E0}",textColor:"white"}}),i.push({message:`Execution Summary: ${r.execution_summary}`,styles:{icon:"hexagon",iconColor:"blueBright",textColor:"white"}});let o=await M.scenarioRepository.getIssuesByParent(r.id,"scenario_analysis");o.length>0&&T.debug(`Scenario ${t} (${A.title}) completion: ${o.length} issues found`);for(let c of o){let g=[];c.issue_type&&g.push(`${c.issue_type}`),c.description&&g.push(`${c.description}`),g.length>0&&i.push({message:g.join(" | "),styles:{icon:"\u{1F41E}",textColor:c.severity==="critical"||c.severity==="high"?"red":"yellow"}});}let a=await M.scenarioRepository.getPassedValidationsByScenarioId(t);a.length>0&&T.debug(`Scenario ${t} (${A.title}) completion: ${a.length} passed validations found`);for(let c of a){let g=[];c.validation_type&&g.push(`${c.validation_type}`),c.description&&g.push(`${c.description}`),g.length>0&&i.push({message:g.join(" | "),styles:{icon:"check",iconColor:"greenBright",textColor:"greenBright"}});}if(i.length>0){let c={...n,completedLogStyle:{icon:"\u{1F9EA}",textColor:"magenta",bold:!0},status:bn.mapScenarioStatusToFeedStatus(A.status),currentMessages:i};this.state.feedItems.set(s,c),this.clientPort.onFeedItem(c);}}catch{}}async handleSessionErrors(t){try{let e=await M.errorRepository.getAllByParent(t,"test_session");if(e.length===0)return;T.debug(`Session ${t}: Found ${e.length} session-level errors`);let A=`session-error-${t}`;if(this.sessionErrorFeedItemCreated||this.state.feedItems.has(A))return;let r=[];for(let n of e)n.message&&r.push(this.createErrorMessage(n.message));let s={id:A,name:"Session Error",status:"failed",currentMessages:r.length>0?[r[r.length-1]]:[],allMessages:r.length>1?r.slice(0,-1):[],objectType:"Error"};this.state.feedItems.set(A,s),this.clientPort.onFeedItem(s),this.sessionErrorFeedItemCreated=!0,T.debug(`Session ${t}: Created error feed item with ${e.length} errors`);}catch(e){T.debug(`Error handling session errors: ${e instanceof Error?e.message:String(e)}`);}}async handleSessionCompletion(t){try{let e=await M.sessionRepository.getById(t);if(!e)return;await new Promise(c=>setTimeout(c,1e3)),await this.handleTasks(t);let A=[],r=await M.analysisRepository.getLatestTestSessionAnalysis(t),s=await M.scenarioRepository.getBySessionId(t);if(r){A.push({message:`Score: ${r.score==null?"-":r.score} / 100`,styles:{icon:"\u{1F4CA}",textColor:this.getScoreColor(r.score||-1)}}),A.push({message:`Scenarios run: ${s.length}`,styles:{icon:"\u{1F9EA}",textColor:"white"}}),r.analysis_summary&&A.push({message:`Analysis: ${r.analysis_summary}`,styles:{icon:"\u{1F9E0}",textColor:"white"}});let c=await M.analysisRepository.getIssuesByParent(r.id,"test_session_analysis");c.length>0&&T.debug(`Session ${t} completion: ${c.length} issues found`);for(let g of c){let E=[];g.issue_type&&E.push(`${g.issue_type}`),g.description&&E.push(`${g.description}`),E.length>0&&A.push({message:E.join(" | "),styles:{icon:"\u{1F41E}",textColor:g.severity==="critical"||g.severity==="high"?"red":"yellow"}});}}let n=e.status,i;switch(n){case "success":i="success";break;case "error":case "failing":i="failed";break;case "skipped":i="skipped";break;case "cancelled":i="cancelled";break;default:i="failed";}if(n==="error"){let c=await M.errorRepository.getAllByParent(t,"test_session");if(c.length>0){T.debug(`Session ${t} completion: ${c.length} errors found`);for(let g=0;g<c.length;g++){let E=c[g];E.message&&A.push(this.createErrorMessage(E.message));}}}let o={id:`session-${t}`,name:e.title?`Session: ${e.title}`:`Session: ${t}`,status:i,objectType:"TestSession",completedLogStyle:{icon:"\u{1F3AF}",textColor:"cyanBright",bold:!0},currentMessages:A};this.state.feedItems.set(o.id,o),this.clientPort.onFeedItem(o);let a={sessionId:t,status:e.status,feedItems:Array.from(this.state.feedItems.values()),progress:this.state.progress||void 0,timestamp:new Date};this.clientPort.onSnapshot(a),await new Promise(c=>setTimeout(c,500));}catch(e){T.debug(`Error in handleSessionCompletion: ${e instanceof Error?e.message:String(e)}`);}}async updateProgress(t){try{let e=await M.progressRepository.getTotalScenarioCount(t),A=await M.progressRepository.getCompletedScenarioCount(t);if(e>0){let r=Math.round(A/e*100);this.state.progress={total:e,current:A,percentage:r,type:"number"};}}catch{}}isSessionCompleted(t){return ["success","error","skipped","cancelled"].includes(t)}pause(){this.isPaused=true;}resume(){this.isPaused=false,!this.isPolling&&this.state&&!this.state.isCompleted&&this.poll();}async stop(){await new Promise(t=>setTimeout(t,200)),this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null),this.isPolling=false,this.isPaused=false;}requestTermination(){this.terminationRequested=true,this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null);}async stopAndResolve(){await this.stop(),this.state&&(this.state.isCompleted=true),this.resolveCallback?.();}setRate(t){this.pollInterval=t,this.pollTimer&&(this.stop().catch(()=>{}),this.pollTimer=setInterval(()=>this.poll(),this.pollInterval));}createInfoMessage(t){return k(t,{icon:"circle",iconColor:"gray",textColor:"gray"})}createErrorMessage(t){return k(t,{icon:"cross",iconColor:"red",textColor:"red"})}getScoreColor(t){return t<0?"gray":t>=90?"greenBright":t>=80||t>=70?"yellowBright":"redBright"}initializeTaskTracking(t){return {lastStatus:"",wasActive:false,lastUpdatedAt:new Date().toISOString(),lastMessageIds:new Set,lastTaskStepIds:new Set}}initializeScenarioTracking(t){return {lastStatus:"",wasActive:false,lastUpdatedAt:new Date().toISOString(),lastAgentStepIds:new Set,lastAgentStepActionIds:new Map,lastAgentStepValidationIds:new Map,lastPassedValidationIds:new Set,lastErrorIds:new Set}}initializeSessionTracking(t){return {lastStatus:t,wasActive:false,lastErrorIds:new Set}}detectSubItemChanges(t,e){if(t.size!==e.size)return true;for(let A of t)if(!e.has(A))return true;return false}async collectTaskSubItemIds(t){let e=await M.taskRepository.getStepsByTaskId(t),A=new Set(e.map(c=>c.id)),r=await M.taskRepository.getMessagesByParent(t,"task"),s=e.map(c=>M.taskRepository.getMessagesByParent(c.id,"step")),i=(await Promise.all(s)).flat(),o=[...r,...i],a=new Set(o.map(c=>c.id));return {taskStepIds:A,messageIds:a}}async collectScenarioSubItemIds(t,e){let A=new Set,r=new Map,s=new Map;if(e){let c=await M.scenarioRepository.getAgentStepsByBrowserSessionId(e);for(let g of c){A.add(g.id);let E=await M.scenarioRepository.getAgentStepActionsByStepId(g.id),B=new Set(E.map(d=>d.id));r.set(g.id,B);let l=await M.scenarioRepository.getAgentStepValidationsByStepId(g.id),h=new Set(l.map(d=>d.id));s.set(g.id,h);}}let n=await M.scenarioRepository.getPassedValidationsByScenarioId(t),i=new Set(n.map(c=>c.id)),o=await M.scenarioRepository.getErrorsByScenarioId(t),a=new Set(o.map(c=>c.id));return {agentStepIds:A,agentStepActionIds:r,agentStepValidationIds:s,passedValidationIds:i,errorIds:a}}getController(){return {pause:()=>this.pause(),resume:()=>this.resume(),stop:()=>this.stop(),setRate:t=>this.setRate(t)}}};function tu(t,e={}){return new Promise((A,r)=>{let s=xp.request(t,e,n=>A(n));s.on("error",r),s.end();})}async function ew(t){let e=await tu(t,{method:"HEAD"});if(e.statusCode&&e.statusCode>=300&&e.statusCode<400&&e.headers.location)return e.resume(),ew(e.headers.location);if(!e.statusCode||e.statusCode<200||e.statusCode>=300)throw e.resume(),new Error(`HEAD failed: HTTP ${e.statusCode}`);let A=Number(e.headers["content-length"]??0)||0,r=String(e.headers["accept-ranges"]??"").toLowerCase().includes("bytes");return e.resume(),{total:A,acceptRanges:r}}async function kv(t,e,A,r,s){let n=await tu(t,{method:"GET",headers:{Range:`bytes=${e}-${A}`}});if(n.statusCode!==206)throw n.resume(),new Error(`Range not supported or ignored (HTTP ${n.statusCode}).`);n.on("data",o=>s?.(o.length));let i=$.createWriteStream(r,{flags:"w"});await pipeline(n,i);}async function Nv(t,e){let A=$.createWriteStream(e,{flags:"w"});for(let r of t){let s=$.createReadStream(r);await pipeline(s,A,{end:false});}await new Promise((r,s)=>{A.end(n=>n?s(n):r());});}async function bv(t,e,A){let r=Math.max(1,A?.parts),s=A?.minPartSizeMB*1024*1024,n=A?.emitEveryMs??250,{total:i,acceptRanges:o}=await ew(t);if(!i)throw new Error("Unknown content-length; cannot parallelize safely.");if(!o||i<s||r===1){let l=await tu(t,{method:"GET"});if(!l.statusCode||l.statusCode<200||l.statusCode>=300)throw l.resume(),new Error(`Download failed: HTTP ${l.statusCode}`);let h=0,d=0;l.on("data",I=>{h+=I.length;let Q=Date.now();A?.onProgress&&Q-d>=n&&(d=Q,A.onProgress({total:i,current:h,percentage:Math.floor(h/i*100)}));});let C=$.createWriteStream(e,{highWaterMark:1024*1024});C.setMaxListeners(50),await pipeline(l,C),A?.onProgress?.({total:i,current:i,percentage:100});return}let a=Math.ceil(i/r),c=[];for(let l=0;l<r;l++){let h=l*a;if(h>=i)break;let d=Math.min(i-1,(l+1)*a-1);c.push({start:h,end:d,partPath:`${e}.part${l}`});}let g=0,E=0,B=l=>{if(g+=l,!A?.onProgress)return;let h=Date.now();h-E>=n&&(E=h,A.onProgress({total:i,current:g,percentage:Math.floor(g/i*100)}));};try{await Promise.all(c.map(l=>kv(t,l.start,l.end,l.partPath,B))),await Nv(c.map(l=>l.partPath),e),A?.onProgress?.({total:i,current:i,percentage:100});}finally{await Promise.allSettled(c.map(l=>se.unlink(l.partPath)));}}var Fp=promisify($.mkdir),Mv=promisify($.writeFile),Lv=promisify($.unlink),kp="1.0.21",Uv="1.0.21",Tv="https://devassures3bucket.s3.us-east-1.amazonaws.com",Np=/devassure-agent,\s*version\s+([\d.]+)/i;function vv(){return process.platform==="win32"?"windows":process.platform==="darwin"?process.arch==="arm64"?"macos":"macos_intel":"linux"}function xv(){return process.platform==="win32"?"devassure-agent.exe":"devassure-agent"}function tw(){return Ae.join(xn(),"last-downloaded-version")}function bp(){try{let t=ps();return $.existsSync(t)&&$.statSync(t).isFile()}catch{return false}}function Aw(){let t=YA(),e=xv(),A=Ae.join(t,e),r=Ae.join(t,".devassure-agent-internal");try{$.existsSync(A)&&$.unlinkSync(A);}catch{}try{$.existsSync(r)&&($.statSync(r).isDirectory()?$.rmSync(r,{recursive:!0}):$.unlinkSync(r));}catch{}}function Gv(){let t=tw();if(!$.existsSync(t))return null;try{return $.readFileSync(t,"utf8").trim()||null}catch{return null}}function rw(){return new Promise((t,e)=>{let A=ps(),r=spawn(A,["version"],{shell:false,stdio:["ignore","pipe","pipe"]}),s="",n="";r.stdout&&r.stdout.on("data",i=>{s+=i.toString();}),r.stderr&&r.stderr.on("data",i=>{n+=i.toString();}),r.on("error",e),r.on("close",i=>{if(i!==0){e(new Error(`devassure-agent version exited ${i}: ${n||s}`));return}let o=s.match(Np)||n.match(Np);o&&o[1]?t(o[1].trim()):e(new Error(`Could not parse version from: ${s||n}`));});})}function vn(t,e){t?.onFeedItem(e);}function Mp(t,e){if(!t)return;let A=e.progress!==void 0&&e.progress!==null?{...e.progress,type:"progressBar",unit:"MB"}:void 0;t.onSnapshot({sessionId:"",status:"setup",feedItems:e.feedItems,progress:A,timestamp:new Date});}async function Yv(t,e,A,r){let n={id:"setup-download",name:"Downloading devassure-agent",status:"running"};vn(A,n);let i=r?.progressEmitIntervalMs??300;try{await bv(t,e,{parts:8,minPartSizeMB:10,emitEveryMs:i,onProgress:({total:o,current:a,percentage:c})=>{Mp(A,{feedItems:[{...n}],progress:{total:+(o/(1024*1024)).toFixed(2),current:+(a/(1024*1024)).toFixed(2),percentage:c}});}}),await new Promise(o=>setTimeout(o,100)),Mp(A,{feedItems:[{...n,status:"success",currentMessages:[k("Download complete.")]}],progress:void 0});}catch(o){try{$.unlinkSync(e);}catch{}throw o}}async function Hv(t,e,A){let s={id:"setup-extract",name:"Extracting\u2026",status:"running",currentMessages:[k("Extracting...")]};vn(A,s),new vp.default(t).extractAllTo(e,true),await Lv(t).catch(()=>{}),Lp(ps()),Lp(PT()),await new Promise(i=>setTimeout(i,100)),vn(A,{...s,status:"success",currentMessages:[k("Extracted.")]});}function Lp(t){try{$.chmodSync(t,493);}catch{}}async function qg(t,e){let A=YA(),r=xn(),s=vv(),n=Uv,i=`${Tv}/${s}/devassure-agent/${n}/DevAssure-Agent.zip`;await Fp(A,{recursive:true}),await Fp(r,{recursive:true}),Aw();let o=Ae.join(r,`DevAssure-Agent-${n}.zip`);await Yv(i,o,t,e),await Hv(o,A,t);let a={id:"setup-version-check",name:"Setting up DevAssure agent",status:"running"};vn(t,a);let c=await rw();await new Promise(g=>setTimeout(g,100)),vn(t,{...a,status:"success"}),await Mv(tw(),c,"utf8"),await new Promise(g=>setTimeout(g,100));}async function Au(t,e){let A=e?.force===true,r=e?.progressEmitIntervalMs,s=Aa().environment==="dev";if(s){if(!bp())throw new Error(`Dev mode: devassure-agent not found. Add devassure-agent and .devassure-agent-internal to ${YA()}`);return}let n=r!==void 0?{progressEmitIntervalMs:r}:void 0;if(A){if(Aw(),s)throw new Error(`Dev mode: agent cannot be downloaded. Add devassure-agent and .devassure-agent-internal to ${YA()}`);await qg(t,n);return}if(!bp()){await qg(t,n);return}let i=Gv();if(!(i&&Pn.valid(i)&&Pn.gte(i,kp))){try{let o=await rw();if(Pn.valid(o)&&Pn.gte(o,kp))return}catch{}await qg(t,n);}}var sw=class{constructor(){this.clientPort=null,this.pollingService=null,this.agentProcessBySessionId=new Map,this.activePrompts=new Map;}initialize(t){this.clientPort=t,this.pollingService=new Fv,this.pollingService.initialize(t);}async close(){await M.close(),await this.pollingService?.stop();}async executeSession(t,e,A,r,s,n,i,o,a,c){if(!this.clientPort||!this.pollingService)throw new Error("SessionService not initialized. Call initialize() first.");await M.initialize(),await Au(this.clientPort??void 0);let g=ps(),E=["start",`--test-session-id=${t}`,`--project-path=${e}`];r?.trim()?E.push(`--test-case-file=${r}`):(s?.trim()?E.push(`--test-cases-csv=${s}`):A?.trim()&&E.push(`--test-cases-dir=${A}`),n&&E.push(`--filter=${n}`)),i&&E.push("--archive",i),o?.trim()&&E.push(`--environment=${o.trim()}`);let B={...process.env};a?.trim()&&(B.HTTP_PROXY=a.trim()),c?.trim()&&(B.HTTPS_PROXY=c.trim());let l=this.clientPort?.getLogLevel()==="debug",h=spawn(g,E,{shell:false,stdio:["ignore",l?"pipe":"ignore",l?"pipe":"ignore"],env:B});this.agentProcessBySessionId.set(t,h);let d=async()=>{await this.pollingService?.stop(),h.kill(),this.agentProcessBySessionId.delete(t);};l&&h.stdout&&(h.stdout.on("data",C=>{console.log(">>> [AGENT]: ",C.toString());}),h.stderr&&h.stderr.on("data",C=>{console.log(">>> [AGENT]: [ERROR] ",C.toString());}));try{this.handleUserInputPrompts(t).catch(()=>{}),await this.pollingService.start(t);}finally{await d();}}async sessionExecutionTermination(t){let e=`session-termination-${t}`;try{if(await M.initialize(),await M.sessionRepository.updateStatus(t,"cancelled"),this.clientPort){let n={id:e,name:"Terminating execution...",status:"failing",stateIndicators:[{status:"failing",indicator:"blinkingCircle",color:"red"}],currentMessages:[],noBorder:!0};this.clientPort.onFeedItem(n);}if(await new Promise(n=>setTimeout(n,2e3)),this.pollingService?.requestTermination(),await this.clientPort?.markActiveFeedItemsCancelled?.([e]),await new Promise(n=>setTimeout(n,6e3)),this.clientPort){let n={id:e,name:"Terminated execution.",status:"failing",stateIndicators:[{status:"failing",indicator:"blinkingCircle",color:"red"}],currentMessages:[],noBorder:!0};this.clientPort.onFeedItem(n);}let A=this.agentProcessBySessionId.get(t);if(A&&(A.kill(),this.agentProcessBySessionId.delete(t)),await new Promise(n=>setTimeout(n,200)),this.clientPort){let n={id:e,name:"Execution terminated!",status:"error",currentMessages:[],noBorder:!0};this.clientPort.onFeedItem(n);}let r=await M.sessionRepository.getById(t);r&&r.status!=="cancelled"&&await M.sessionRepository.updateStatus(t,"cancelled"),(await M.errorRepository.getBySessionId(t)).length===0&&await M.errorRepository.createForSession(t,"Execution cancelled by user!"),await this.pollingService?.stopAndResolve();}catch(A){console.error(`Error during session termination: ${A instanceof Error?A.message:String(A)}`);}}async handleUserInputPrompts(t){if(!this.clientPort||!this.pollingService)return;let e=new St(M.taskRepository),A=true,r=setInterval(async()=>{if(!A){clearInterval(r);return}try{let s=await M.taskRepository.getBySessionId(t);for(let n of s){if(!St.isTaskActive(n.status))continue;let o=await e.getPendingUserInputTaskStep(n.id);if(o){let a=`task-${n.id}-step-${o.id}`;if(this.activePrompts.has(a))continue;let c=St.getPromptTypeFromTaskStepData(o.data);if(!c)continue;let g=new AbortController;this.activePrompts.set(a,g);try{let E=await this.clientPort.userPrompt({type:c==="text"?"text":"confirm",message:o.label||"Please provide input:",placeholder:c==="text"?"Enter value...":void 0},g.signal);if(E.ok&&E.value!==void 0){let B=(typeof E.value=="boolean",String(E.value));await M.taskRepository.updateTaskStepUserInput(o.id,B);}}catch{}finally{this.activePrompts.delete(a);}}}}catch{}},500);return new Promise(s=>{let n=setInterval(()=>{(!this.pollingService||!this.pollingService.state||this.pollingService.state.isCompleted)&&(A=false,clearInterval(r),clearInterval(n),s());},100);})}},ra=class{async getBrowserSessionCount(){return await M.browserSessionRepository.getCount()}async getTestSessionCount(){return await M.sessionRepository.getCount()}async getScenarioCount(){return await M.scenarioRepository.getCount()}async getStorageSize(){let t=tA(),e=Ae.join(t,"data","devassure.db"),A=Ae.join(t,"reports"),r=0;try{r+=await se.stat(e).then(s=>s.size);}catch{}try{r+=await this.calculateDirectorySize(A);}catch{}return r}async calculateDirectorySize(t){let e=0;try{let A=await se.readdir(t,{withFileTypes:!0});for(let r of A){let s=Ae.join(t,r.name);if(r.isDirectory())e+=await this.calculateDirectorySize(s);else if(r.isFile())try{let n=await se.stat(s);e+=n.size;}catch{}}}catch{}return e}formatStorageSize(t){if(t===0)return "0 B";let e=1024,A=["B","KB","MB","GB","TB"],r=Math.floor(Math.log(t)/Math.log(e));return `${(t/Math.pow(e,r)).toFixed(2)} ${A[r]??"B"}`}},nw=class{async getAllSessions(){return await M.sessionRepository.getAllOrderedByCreatedAt()}async getSessionsToDelete(t,e){let A=await this.getAllSessions();if(t!==void 0){let r=new Date;r.setDate(r.getDate()-t);let s=r.toISOString();return A.filter(n=>n.created_at?n.created_at<s:true)}return e!==void 0?e>=A.length?[]:A.slice(e):A}async getCleanupStats(t){let A=(await M.browserSessionRepository.getBySessionIds(t)).length,r=await this.calculateStorageSize(t);return {sessionsToDelete:t.length,browserSessionsToDelete:A,storageToFree:r}}async cleanupSessionsByIds(t){if(t.length===0)return;let e=await M.sessionRepository.getExistingSessionIds(t);await this.deleteSessions(e);}async calculateStorageSize(t){let e=tA(),A=0;for(let r of t){let s=Ae.join(e,"data",r),n=Ae.join(e,"reports",r);try{A+=await this.getDirectorySize(s);}catch{}try{A+=await this.getDirectorySize(n);}catch{}}return A}async getDirectorySize(t){let e=0;try{let A=await se.readdir(t,{withFileTypes:!0});for(let r of A){let s=Ae.join(t,r.name);if(r.isDirectory())e+=await this.getDirectorySize(s);else if(r.isFile())try{let n=await se.stat(s);e+=n.size;}catch{}}}catch{}return e}async deleteAllData(){await me(async()=>{await Ce.run("BEGIN TRANSACTION");try{await Ce.run("DELETE FROM AgentStepAction"),await Ce.run("DELETE FROM AgentStepValidation"),await Ce.run("DELETE FROM AgentStep"),await Ce.run("DELETE FROM PassedValidation"),await Ce.run("DELETE FROM TaskStep"),await Ce.run("DELETE FROM Task"),await Ce.run("DELETE FROM Error"),await Ce.run("DELETE FROM Message"),await Ce.run("DELETE FROM Issue"),await Ce.run("DELETE FROM BrowserSession"),await Ce.run("DELETE FROM ScenarioAnalysis"),await Ce.run("DELETE FROM Scenario"),await Ce.run("DELETE FROM TestSessionAnalysis"),await Ce.run("DELETE FROM ReportsRender"),await Ce.run("DELETE FROM SessionData"),await Ce.run("DELETE FROM TestSession"),await Ce.run("COMMIT");}catch(r){throw await Ce.run("ROLLBACK"),r}});let t=tA(),e=Ae.join(t,"data"),A=Ae.join(t,"reports");try{let r=await se.readdir(e,{withFileTypes:!0});for(let s of r)s.isDirectory()&&await se.rm(Ae.join(e,s.name),{recursive:!0,force:!0});}catch{}try{let r=await se.readdir(A,{withFileTypes:!0});for(let s of r)s.isDirectory()&&await se.rm(Ae.join(A,s.name),{recursive:!0,force:!0});}catch{}}async deleteSessions(t,e){if(t.length===0&&!e)return;if(e){await this.deleteAllData();return}let A=await M.scenarioRepository.getScenarioIdsBySessionIds(t),r=await M.browserSessionRepository.getBrowserSessionIdsBySessionIds(t),s=[];for(let a of t){let c=await M.taskRepository.getBySessionId(a);s.push(...c.map(g=>g.id));}let n=[];for(let a of s){let c=await M.taskRepository.getStepsByTaskId(a);n.push(...c.map(g=>g.id));}let i=[];for(let a of A){let c=await M.analysisRepository.getLatestScenarioAnalysis(a);c&&i.push(c.id);}let o=[];for(let a of t){let c=await M.analysisRepository.getLatestTestSessionAnalysis(a);c&&o.push(c.id);}await me(async()=>{await Ce.run("BEGIN TRANSACTION");try{let a=M.cleanupRepository;await a.deleteAgentStepActionsByBrowserSessionIds(r),await a.deleteAgentStepValidationsByBrowserSessionIds(r),await a.deleteAgentStepsByBrowserSessionIds(r),await a.deletePassedValidationsByScenarioIds(A),await a.deleteTaskStepsBySessionIds(t),await a.deleteTasksBySessionIds(t),await a.deleteErrorsBySessionIds(t),await a.deleteMessagesBySessionIds(t,A,r,s,n),await a.deleteIssuesByAnalysisIds(i,o),await a.deleteBrowserSessionsBySessionIds(t),await a.deleteScenarioAnalysesByScenarioIds(A),await a.deleteScenariosBySessionIds(t),await a.deleteTestSessionAnalysesBySessionIds(t),await a.deleteReportsRendersBySessionIds(t),await a.deleteSessionDataBySessionIds(t),await a.deleteTestSessionsByIds(t),await Ce.run("COMMIT");}catch(a){throw await Ce.run("ROLLBACK"),a}}),await this.deleteSessionFolders(t);}async deleteSessionFolders(t){let e=tA();for(let A of t){let r=Ae.join(e,"data",A),s=Ae.join(e,"reports",A);try{await se.rm(r,{recursive:!0,force:!0});}catch{}try{await se.rm(s,{recursive:!0,force:!0});}catch{}}}};function Jv(){let t=new Date,e=r=>r.toString().padStart(2,"0"),A=t.getMilliseconds().toString().padStart(3,"0").padEnd(6,"0");return `${t.getFullYear()}-${e(t.getMonth()+1)}-${e(t.getDate())}T${e(t.getHours())}:${e(t.getMinutes())}:${e(t.getSeconds())}.${A}`}var sa=class{constructor(){this.clientPort=null;}initialize(t){this.clientPort=t;}async archiveReport(t,e,A,r){let s=ps(),n=["archive-results","--target-path",t,"--test-session-id",e],i={...process.env};A?.trim()&&(i.HTTP_PROXY=A.trim()),r?.trim()&&(i.HTTPS_PROXY=r.trim());let o=this.clientPort?.getLogLevel()==="debug",a=spawn(s,n,{shell:false,stdio:o?["ignore","pipe","pipe"]:"inherit",env:i});return o&&a.stdout&&a.stdout.on("data",c=>{console.log(">>> [AGENT]: ",c.toString());}),o&&a.stderr&&a.stderr.on("data",c=>{console.log(">>> [AGENT]: [ERROR] ",c.toString());}),new Promise(c=>{a.on("exit",(g,E)=>{c(g??(E?1:0));});})}async openReport(t,e,A,r,s,n){await M.initialize();let i=t;if(!r&&e){let h=await M.sessionRepository.getLastSessionId();if(!h)throw new Error("No test sessions found");i=h;}let o=Jv(),a=ps(),c=["open-report"];r?c.push("--archive",r):i&&c.push(`--test-session-id=${i}`);let g={...process.env};s?.trim()&&(g.HTTP_PROXY=s.trim()),n?.trim()&&(g.HTTPS_PROXY=n.trim());let E=spawn(a,c,{shell:false,env:g});this.clientPort?.getLogLevel()==="debug"&&(E.stdout.on("data",h=>{console.log(">>> [AGENT]: ",h.toString());}),E.stderr.on("data",h=>{console.log(">>> [AGENT]: [ERROR] ",h.toString());}));let B=()=>{E.killed||E.kill();},l=()=>{E.killed||E.kill();};process.on("SIGINT",l),process.on("SIGTERM",l);try{let h=await this.pollForReportsRender(o,i);if(!h)throw new Error("Failed to start report server - no ReportsRender entry found");if(!h.host||h.port===null)throw new Error("Report server started but host/port not available");let d=`http://${h.host}:${h.port}`;if(A){let C="report-server",I={id:C,name:`Running report server at ${d}`,status:"running",currentMessages:[k(`Report server running at ${d}`)]};await A.addFeedItem(I),await new Promise(async Q=>{let u=!1,p=async()=>{if(!u){u=!0,B();try{await A.updateFeedItem(C,{status:"success",currentMessages:[k("Report server closed")],currentPrompt:void 0});}catch(D){T.debug(">>> [REPORT SERVICE]: Feed item already removed",{error:D});}Q();}},f={message:"Stop reporting server.",type:"userKill",callbackFunction:async D=>{T.debug(">>> [REPORT SERVICE]: User kill callback",{proceed:D}),D||await p();}};await A.updateFeedItem(C,{currentPrompt:f}),E.on("exit",async()=>{if(!u){u=!0;try{await A.updateFeedItem(C,{status:"success",currentMessages:[k("Report server closed")],currentPrompt:void 0});}catch(D){T.debug(">>> [REPORT SERVICE]: Feed item already removed on exit",{error:D});}Q();}});});}return {url:d,process:E}}catch(h){throw B(),h}finally{process.removeListener("SIGINT",l),process.removeListener("SIGTERM",l);}}async pollForReportsRender(t,e,A=60,r=500){for(let s=0;s<A;s++)try{let n;if(e)n=await M.reportsRenderRepository.getLatestByTestSessionIdAfter(e,t);else {let i=await M.reportsRenderRepository.getByCreatedAtAfter(t);n=i.length>0?i[0]:void 0;}if(n&&n.host&&n.port!==null)return {host:n.host,port:n.port};await new Promise(i=>setTimeout(i,r));}catch{await new Promise(i=>setTimeout(i,r));}return null}},iw="00:00:00";function Vv(t){if(t<0||!Number.isFinite(t))return iw;let e=Math.floor(t/1e3),A=Math.floor(e/3600),r=Math.floor(e%3600/60),s=e%60,n=i=>i.toString().padStart(2,"0");return `${n(A)}:${n(r)}:${n(s)}`}function Up(t){if(t==null||t==="")return null;let e=Date.parse(t);return Number.isNaN(e)?null:e}var ow=class{async getSessionSummary(t){let e=await M.sessionRepository.getById(t);if(!e)throw new Error("Session not found");let r=(await M.scenarioRepository.getBySessionId(t)).length,s=await M.analysisRepository.getLatestTestSessionAnalysis(t),n=null,i=0;s&&(n=s.score??null,i=(await M.analysisRepository.getIssuesByParent(s.id,"test_session_analysis")).length);let o=await M.scenarioRepository.getPassedValidationCountByTestSessionId(t),a=await M.analysisRepository.getFailedValidationCountByTestSessionId(t),c=null,g=Up(e.created_at),E=Up(e.end_time);g!=null&&E!=null&&(c=E-g);let B=c!=null?Vv(c):iw;return {sessionId:t,title:e.title??null,environment:e.test_environment??null,scenarios:r,score:n,passedValidations:o,failedValidations:a,failureGroups:i,durationMs:c,durationString:B}}};function aw(){(0, ta.setGlobalDispatcher)(new ta.EnvHttpProxyAgent);}var Pv=".devassure";function Ds(t){let e=process.cwd();return Ae.join(e,Pv)}function na(t){let e=Ds();$.existsSync(e)||$.mkdirSync(e,{recursive:true});}function Gn(t,e,A,r){na();let s=Ae.join(Ds(),t),n="";A&&(n=A+`
|
|
128
128
|
`),n+=jg.dump(e,{indent:2,lineWidth:-1}),$.writeFileSync(s,n,"utf8");}function cw(t,e){Gn("app.yaml",t,`# App Configuration
|
|
129
129
|
# This file contains the description of the web application
|
|
130
130
|
# Documentation: https://www.npmjs.com/package/@devassure/cli
|