@testim/testim-cli 3.301.0 → 3.303.0

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/cli.js CHANGED
@@ -1,37 +1,37 @@
1
1
  #! /usr/bin/env node
2
- "use strict";var Aw=Object.create;var Yn=Object.defineProperty;var kw=Object.getOwnPropertyDescriptor;var _w=Object.getOwnPropertyNames;var Ow=Object.getPrototypeOf,Lw=Object.prototype.hasOwnProperty;var T=(s,e)=>()=>(s&&(e=s(s=0)),e);var Kd=(s,e)=>()=>(e||s((e={exports:{}}).exports,e),e.exports),$=(s,e)=>{for(var t in e)Yn(s,t,{get:e[t],enumerable:!0})},Jd=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of _w(e))!Lw.call(s,n)&&n!==t&&Yn(s,n,{get:()=>e[n],enumerable:!(r=kw(e,n))||r.enumerable});return s};var E=(s,e,t)=>(t=s!=null?Aw(Ow(s)):{},Jd(e||!s||!s.__esModule?Yn(t,"default",{value:s,enumerable:!0}):t,s)),G=s=>Jd(Yn({},"__esModule",{value:!0}),s);var Oe={};$(Oe,{log:()=>N,measure:()=>Dw});function N(...s){if(!Zd)return;let e=Date.now();console.log(`${e-Nw} ${e-Qd} `,...s),Qd=e}function Dw(s,e){if(!Zd)return;let t=Date.now();try{s()}finally{console.log(e||s.name,"took",Date.now()-t)}}var Zd,Nw,Qd,Le=T(()=>{"use strict";Zd=process.env.MEASURE_TESTIM_CLI_PERFORMANCE,Nw=Date.now(),Qd=Date.now()});var ja={};$(ja,{EDGE_CHROMIUM_MIN_VERSION:()=>oo,SELENIUM_STATUS_CODES:()=>nT,UNICODE_CHARACTERS:()=>Mw,W3C_ELEMENT_ID:()=>$t});var Mw,$t,Uw,Fw,jw,ep,tp,rp,sp,Bw,np,op,ip,ap,$w,cp,lp,up,dp,pp,mp,fp,hp,Ww,Gw,gp,yp,qw,Vw,Hw,zw,Kw,Jw,Xw,Yw,Qw,Zw,eT,tT,rT,sT,nT,oo,Yr=T(()=>{"use strict";Mw={NULL:"\uE000",Unidentified:"\uE000",Cancel:"\uE001",Help:"\uE002","Back space":"\uE003",Backspace:"\uE003",Tab:"\uE004",Clear:"\uE005",Return:"\uE006",Enter:"\uE007",Shift:"\uE008",Control:"\uE009",Alt:"\uE00A",Pause:"\uE00B",Escape:"\uE00C",Space:"\uE00D"," ":"\uE00D",Pageup:"\uE00E",PageUp:"\uE00E",Page_Up:"\uE00E",Pagedown:"\uE00F",PageDown:"\uE00F",Page_Down:"\uE00F",End:"\uE010",Home:"\uE011","Left arrow":"\uE012",Arrow_Left:"\uE012",ArrowLeft:"\uE012","Up arrow":"\uE013",Arrow_Up:"\uE013",ArrowUp:"\uE013","Right arrow":"\uE014",Arrow_Right:"\uE014",ArrowRight:"\uE014","Down arrow":"\uE015",Arrow_Down:"\uE015",ArrowDown:"\uE015",Insert:"\uE016",Delete:"\uE017",Semicolon:"\uE018",Equals:"\uE019","Numpad 0":"\uE01A","Numpad 1":"\uE01B","Numpad 2":"\uE01C","Numpad 3":"\uE01D","Numpad 4":"\uE01E","Numpad 5":"\uE01F","Numpad 6":"\uE020","Numpad 7":"\uE021","Numpad 8":"\uE022","Numpad 9":"\uE023",Multiply:"\uE024",Add:"\uE025",Separator:"\uE026",Subtract:"\uE027",Decimal:"\uE028",Divide:"\uE029",F1:"\uE031",F2:"\uE032",F3:"\uE033",F4:"\uE034",F5:"\uE035",F6:"\uE036",F7:"\uE037",F8:"\uE038",F9:"\uE039",F10:"\uE03A",F11:"\uE03B",F12:"\uE03C",Command:"\uE03D",Meta:"\uE03D",Zenkaku_Hankaku:"\uE040",ZenkakuHankaku:"\uE040"},$t="element-6066-11e4-a52e-4f735466cecf",Uw={id:"Unknown",status:-1,message:"Remote end send an unknown status code."},Fw={id:"Success",status:0,message:"The command executed successfully."},jw={id:"NoSuchDriver",status:6,message:"A session is either terminated or not started"},ep={id:"NoSuchElement",status:404,message:"An element could not be located on the page using the given search parameters."},tp={id:"NoSuchFrame",status:400,message:"A request to switch to a frame could not be satisfied because the frame could not be found."},rp={id:"UnknownCommand",status:404,message:"The requested resource could not be found, or a request was received using an HTTP method that is not supported by the mapped resource."},sp={id:"StaleElementReference",status:400,message:"An element command failed because the referenced element is no longer attached to the DOM."},Bw={id:"ElementNotVisible",status:11,message:"An element command could not be completed because the element is not visible on the page."},np={id:"InvalidElementState",status:400,message:"An element command could not be completed because the element is in an invalid state (e.g. attempting to click a disabled element)."},op={id:"UnknownError",status:500,message:"An unknown server-side error occurred while processing the command."},ip={id:"ElementIsNotSelectable",status:400,message:"An attempt was made to select an element that cannot be selected."},ap={id:"JavaScriptError",status:500,message:"An error occurred while executing user supplied JavaScript."},$w={id:"XPathLookupError",status:19,message:"An error occurred while searching for an element by XPath."},cp={id:"Timeout",status:408,message:"An operation did not complete before its timeout expired."},lp={id:"NoSuchWindow",status:400,message:"A request to switch to a different window could not be satisfied because the window could not be found."},up={id:"InvalidCookieDomain",status:400,message:"An illegal attempt was made to set a cookie under a different domain than the current page."},dp={id:"UnableToSetCookie",status:500,message:"A request to set a cookie's value could not be satisfied."},pp={id:"UnexpectedAlertOpen",status:500,message:"A modal dialog was open, blocking this operation"},mp={id:"NoAlertOpenError",status:400,message:"An attempt was made to operate on a modal dialog when one was not open."},fp={id:"ScriptTimeout",status:408,message:"A script did not complete before its timeout expired."},hp={id:"InvalidElementCoordinates",status:400,message:"The coordinates provided to an interactions operation are invalid."},Ww={id:"IMENotAvailable",status:30,message:"IME was not available."},Gw={id:"IMEEngineActivationFailed",status:31,message:"An IME engine could not be started."},gp={id:"InvalidSelector",status:400,message:"Argument was an invalid selector (e.g. XPath/CSS)."},yp={id:"SessionNotCreatedException",status:500,message:"A new session could not be created."},qw={id:"ElementNotScrollable",status:34,message:"Element cannot be scrolled into view."},Vw={id:"SelectorTimeoutError",status:100,message:"Request timed out after the element was still found on the page."},Hw={id:"NoSessionIdError",status:101,message:"A session id is required for this command but wasn't found in the response payload"},zw={id:"GridApiError",status:102,message:"A call to the Selenium Grid API failed"},Kw={id:"ElementClickIntercepted",status:400,message:"The Element Click command could not be completed because the element receiving the events is obscuring the element that was requested clicked."},Jw={id:"ElementNotInteractable",status:400,message:"A command could not be completed because the element is not pointer- or keyboard interactable."},Xw={id:"InsecureCertificate",status:400,message:"Navigation caused the user agent to hit a certificate warning, which is usually the result of an expired or invalid TLS certificate."},Yw={id:"InvalidArgument",status:400,message:"The arguments passed to a command are either invalid or malformed."},Qw={id:"InvalidSessionId",status:404,message:"Occurs if the given session id is not in the list of active sessions, meaning the session either does not exist or that it\u2019s not active."},Zw={id:"MoveTargetOutOfBounds",status:500,message:"The target for mouse interaction is not in the browser\u2019s viewport and cannot be brought into that viewport."},eT={id:"NoSuchCookie",status:404,message:"No cookie matching the given path name was found amongst the associated cookies of the current browsing context\u2019s active document."},tT={id:"UnableToCaptureScreen",status:500,message:"A screen capture was made impossible."},rT={id:"UnknownMethod",status:405,message:"The requested command matched a known URL but did not match an method for that URL."},sT={id:"UnsupportedOperation",status:500,message:"Indicates that a command that should have executed properly cannot be supported for some reason."},nT={"-1":Uw,0:Fw,6:jw,7:ep,8:tp,9:rp,10:sp,11:Bw,12:np,13:op,15:ip,17:ap,19:$w,21:cp,23:lp,24:up,25:dp,26:pp,27:mp,28:fp,29:hp,30:Ww,31:Gw,32:gp,33:yp,34:qw,100:Vw,101:Hw,102:zw,"element click intercepted":Kw,"element not selectable":ip,"element not interactable":Jw,"insecure certificate":Xw,"invalid argument":Yw,"invalid cookie domain":up,"invalid coordinates":hp,"invalid element state":np,"invalid selector":gp,"invalid session id":Qw,"javascript error":ap,"move target out of bounds":Zw,"no such alert":mp,"no such cookie":eT,"no such element":ep,"no such frame":tp,"no such window":lp,"script timeout":fp,"session not created":yp,"stale element reference":sp,timeout:cp,"unable to set cookie":dp,"unable to capture screen":tT,"unexpected alert open":pp,"unknown command":rp,"unknown error":op,"unknown method":rT,"unsupported operation":sT},oo=79});function K(s=16){let e="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890",t="";for(let r=0;r<s;r++){let n=Math.floor(Math.random()*e.length);t+=e[n]}return t}function st(s,e,t,r,n){let o="";return n=n?encodeURIComponent(n):"master",e&&t&&(o=`${s}/#/project/${e}/branch/${n}/test/${t}`,r&&(o+=`?result-id=${r}`)),o}function Ba(s,e){return`Basic ${Buffer.from(`${s}:${e}`).toString("base64")}`}function Be(s){let e=/^(https?:\/\/)/i,t=new RegExp("^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)+(?:[a-z\\u00a1-\\uffff]{2,}\\.?))(?::\\d{2,5})?(?:[/?#]\\S*)?$","i");return e.test(s)||t.test(s)}var $a=T(()=>{"use strict"});var Ga,bp,wp,io=T(()=>{Ga={ngrok:"4.3.3",webpack:"5.74.0",playwright:"0.12.1",puppeteer:"2.1.1","selenium-webdriver":"3.6.0","v8-to-istanbul":"9.1.0","istanbul-lib-coverage":"3.2.0","@bcoe/v8-coverage":"0.2.3","convert-source-map":"1.7.0",multer:"1.4.5-lts.1"},bp={"@applitools/eyes-sdk-core":"13.11.29","@testim/coralogix-logger":"1.1.27-beta.1","@testim/webdriverio":"0.0.8","abort-controller":"3.0.0",ajv:"6.12.6","analytics-node":"5.0.0","appium-dom-utils":"1.0.6",archiver:"5.3.0","body-parser":"1.20.1",chalk:"4.1.2","chrome-launcher":"0.15.0","combine-source-map":"0.8.0",commander:"10.0.0",compression:"1.7.4",cors:"2.8.5","crypto-js":"4.1.1","data-uri-to-buffer":"2.0.2",decompress:"4.2.1",express:"4.17.3",fkill:"7.2.1","form-data":"3.0.0",glob:"7.2.0","https-proxy-agent":"5.0.0","istanbul-lib-report":"3.0.0","istanbul-reports":"3.1.5",jimp:"0.16.2",jsdom:"19.0.0",jsonwebtoken:"9.0.0",lodash:"4.17.21","memory-fs":"0.5.0",memorystream:"0.3.1",moment:"2.29.4",ms:"2.1.2",npm:"8.19.2","object-hash":"3.0.0",ora:"5.4.1","p-limit":"4.0.0","p-retry":"4.6.2",pako:"1.0.11",portfinder:"1.0.28","promise-queue":"2.2.5",prompts:"2.4.2","proxy-agent":"5.0.0","rox-node":"4.9.18",semver:"7.3.2","serialize-error":"7.0.1","socket.io-client":"4.5.4","source-map-support":"0.5.19",superagent:"3.8.3","superagent-proxy":"3.0.0","test-exclude":"6.0.0",threads:"0.12.0","ua-parser-js":"0.7.33","validate-npm-package-name":"3.0.0",webdriverio:"7.24.0",winston:"3.6.0","winston-transport":"4.5.0",ws:"8.5.0",xml2js:"0.4.23",yaml:"1.10.0"},wp={node:">= 14.0.0"}});var xe={};$(xe,{APPIUM_VERSION:()=>uT,BLOB_URL:()=>pr,CANONICAL_BLOB_URL:()=>Za,CANONICAL_EDGE_URL:()=>ec,DEBUG_MODE:()=>cT,DF_ENABLE_VIDEO:()=>lT,DISABLE_AGENT_ORIGIN_CHECK:()=>Hs,DISABLE_DEBUGGER_INFINITE_TIMEOUT:()=>qa,EDGE_URL:()=>Qa,EDITOR_URL:()=>dr,EXTENSION_SERVICES_HOST:()=>Ya,GATEWAY_URL:()=>Xa,IS_ON_PREM:()=>Ie,LOGGER_CONSOLE:()=>Ha,LOGGER_DEBUG:()=>za,OVERRIDE_TIMEOUTS:()=>zs,REQUESTS_QUEUE_SIZE:()=>aT,ROLLOUT_KEY:()=>Ka,SERVICES_HOST:()=>he,START_WORKER_DELAY_MS:()=>Ja,TESTIM_CONCURRENT_WORKER_COUNT:()=>Js,WEBDRIVER_DEBUG:()=>Ks,WEBSOCKET_HOST:()=>Va});var Vs,Tp,vp,Hs,qa,zs,dr,Va,he,Ha,za,Ks,Ie,aT,cT,Js,Ka,lT,Ja,uT,Xa,Ya,pr,Qa,Za,ec,le=T(()=>{"use strict";Vs=process.env.SERVICES_HOST||"https://services.testim.io",Tp="https://testimstatic.blob.core.windows.net",vp="https://tstresultfiles.azureedge.net";process.env.GATEWAY_URL&&(process.env.CORALOGIX_URL=`${process.env.GATEWAY_URL}/testim/coralogix/api/v1/logs`,process.env.SERVICES_HOST=`${process.env.GATEWAY_URL}/testim/services`,process.env.EXTENSION_SERVICES_HOST=process.env.TUNNEL_GATEWAY?process.env.SERVICES_HOST:Vs,Vs=process.env.SERVICES_HOST);Hs=parseInt(process.env.DISABLE_AGENT_ORIGIN_CHECK||"0",10),qa=parseInt(process.env.DISABLE_DEBUGGER_INFINITE_TIMEOUT||"0",10),zs=parseInt(process.env.OVERRIDE_TIMEOUTS||"0",10),dr=process.env.EDITOR_URL,Va=process.env.WEBSOCKET_HOST||`${Vs}/ws`,he=Vs,Ha=parseInt(process.env.LOGGER_CONSOLE||"0",10),za=parseInt(process.env.LOGGER_DEBUG||"0",10),Ks=parseInt(process.env.WEBDRIVER_DEBUG||"0",10),Ie=parseInt(process.env.IS_ON_PREM||"0",10),aT=process.env.REQUESTS_QUEUE_SIZE?parseInt(process.env.REQUESTS_QUEUE_SIZE,10):void 0,cT=parseInt(process.env.DEBUG_MODE||"0",10),Js=process.env.TESTIM_CONCURRENT_WORKER_COUNT?parseInt(process.env.TESTIM_CONCURRENT_WORKER_COUNT,10):null,Ka=process.env.ROLLOUT_KEY||"5b5560729601aa6484276518",lT=parseInt(process.env.DF_ENABLE_VIDEO||"0",10),Ja=parseInt(process.env.START_WORKER_DELAY_MS||"1500",10),uT=process.env.APPIUM_VERSION||"1.10.1",Xa=process.env.GATEWAY_URL,Ya=process.env.EXTENSION_SERVICES_HOST||Vs,pr=process.env.GATEWAY_URL?`${process.env.GATEWAY_URL}/testim/blob`:Tp,Qa=process.env.GATEWAY_URL?`${process.env.GATEWAY_URL}/testim/edge`:vp,Za=Tp,ec=vp});var tc={};$(tc,{CoralogixTransport:()=>Qr});var Ce,Ep,dT,pT,Qr,rc=T(()=>{"use strict";Ce=require("@testim/coralogix-logger"),Ep=E(require("winston-transport")),dT={silly:Ce.Severity.verbose,verbose:Ce.Severity.verbose,info:Ce.Severity.info,http:Ce.Severity.info,warn:Ce.Severity.warning,warning:Ce.Severity.warning,error:Ce.Severity.error,silent:Ce.Severity.verbose,critical:Ce.Severity.critical,crit:Ce.Severity.critical,debug:Ce.Severity.debug},pT=["err","error","reason","e"],Qr=class extends Ep.default{constructor(t){t=Object.assign({},Qr.options,t);super(t);this.options=t,this.logger=new Ce.CoralogixLogger(t.category||""),this.name="Coralogix Transport",t.timestamp&&(this.timestamp=t.timestamp)}log(t,r){let{category:n,level:o,message:i,meta:a={},...c}=t,u=Object.assign({},a,this.options.extraFields,c),d=new Ce.Log;d.severity=dT[o],d.text=i,d.category=n,u.className&&(d.className=u.className),u.methodName&&(d.methodName=u.methodName),u.threadId&&(d.threadId=u.threadId),delete u.className,delete u.methodName,delete u.threadId,delete u.category,delete u.level,delete u.message;let m=!1;a instanceof Error&&(m=!0,u.msg=a.message+a.stack,i&&(u.msg=`${i}
3
- ${u.msg}`));for(let p of pT)a[p]instanceof Error&&(u[p]={message:a[p].message,stack:a[p].stack,name:a[p].name,type:a[p].type,cause:a[p].cause,...a[p]});Object.keys(u).length>0&&(i&&!m&&(u.msg=i),d.text=u),this.logger.addLog(d),r(null,!0)}waitForFlush(){return this.logger.waitForFlush()}static configure(t){Ce.CoralogixLogger.configure(t),Qr.options=t}}});var Xs={};$(Xs,{getLogger:()=>x,setExecutionId:()=>oc,setProjectId:()=>ic,setProxyUri:()=>ac});function hT(){let s=[],e=()=>Promise.resolve();if(!Ie){let{CoralogixTransport:t}=(rc(),G(tc));t.configure(Ip);let r=new t({category:"ROOT"});s.push(r),e=()=>r.waitForFlush()}return Ha&&s.push(new bt.transports.Console({format:bt.format.combine(bt.format.colorize(),bt.format.simple())})),[s,e]}function oc(s){sc=s}function ic(s){xp=s}function ac(s){if(Ie||!s)return;let{CoralogixTransport:e}=(rc(),G(tc));e.configure({...Ip,proxyUri:s})}function Sp(s){return{projectId:xp,time:new Date().toISOString(),...sc&&!s&&{executionId:sc}}}function x(s){return new nc(TT.child({category:s}))}var Rp,bt,mT,fT,Ip,gT,yT,bT,wT,TT,sc,xp,nc,j=T(()=>{"use strict";Rp=E(require("os")),bt=E(require("winston"));le();F();mT=Rp.hostname(),fT=nt(),Ip={privateKey:"d0eb01da-f966-1663-63c6-8871225d7c39",applicationName:"testim",subsystemName:"runner"};[gT,yT]=hT(),bT=za?"debug":"info",wT={release:Boolean(!0),branch:"production"},TT=bt.createLogger({levels:bt.config.syslog.levels,level:bT,transports:gT,defaultMeta:{name:"runner",hostname:mT,nodeVersion:process.version,runnerVersion:fT,...wT}}),sc=null,xp=null;nc=class{constructor(e){this._logger=e;this.debug=this.debug.bind(this),this.info=this.info.bind(this),this.warn=this.warn.bind(this),this.error=this.error.bind(this),this.fatal=this.fatal.bind(this)}debug(e,t={}){this.innerLog("debug",e,t)}info(e,t={}){this.innerLog("info",e,t)}warn(e,t={}){this.innerLog("warning",e,t)}error(e,t={}){this.innerLog("error",e,t)}fatal(e,t={}){this.innerLog("crit",e,t)}innerLog(e,t,r={}){let{executionId:n}=r;try{this._logger.log(e,Object.assign({meta:r,message:t},Sp(n)))}catch(o){try{this._logger.log("crit",Object.assign({message:`failed to log message ${o.message}, ${o.stack}`},Sp(n)))}catch{}}}waitForFlush(){return yT()}}});var lc={};$(lc,{AbortError:()=>Me,ArgError:()=>R,ClientError:()=>gr,GetBrowserError:()=>Wt,GridConcurrencyError:()=>hr,GridError:()=>it,NoArgsError:()=>mr,NotImplementedError:()=>es,NpmPackageError:()=>at,NpmPermissionsError:()=>br,PageNotAvailableError:()=>ot,PlaygroundCodeError:()=>yr,QuotaDepletedError:()=>Zr,SeleniumCrashError:()=>cc,SeleniumError:()=>fr,StopRunOnError:()=>At,TimeoutError:()=>X});var Cp,Me,mr,R,fr,At,Wt,ot,X,Zr,it,hr,at,cc,gr,yr,br,es,z=T(()=>{"use strict";Cp=require("p-retry"),Me=class extends Error{constructor(t="aborted"){super(t);this.name="AbortError"}},mr=class extends Error{constructor(){super(...arguments);this.name="NoArgsError"}},R=class extends Error{constructor(){super(...arguments);this.name="ArgError"}},fr=class extends Error{constructor(t){super(t.orgStatusMessage||t.message);this.name="SeleniumError",this.errorType=t.type}},At=class extends Error{constructor(){super(...arguments);this.name="StopRunOnError"}},Wt=class extends Error{constructor(t,r){super(t);this.type=r}},ot=class extends Cp.AbortError{},X=class extends Error{},Zr=class extends Error{},it=class extends Error{constructor(){super(...arguments);this.name="GridError"}toString(){return this.message}},hr=class extends it{constructor(){super(...arguments);this.name="GridConcurrencyError"}},at=class extends Error{constructor(){super(...arguments);this.name="NpmPackageError"}},cc=class extends Error{constructor(){super(...arguments);this.message="selenium driver crashed";this.name="SeleniumCrashError"}},gr=class extends Error{},yr=class extends Error{},br=class extends Error{constructor(t){super(`Testim had missing write access to ${t}`);this.path=t}},es=class extends Error{constructor(e=!1){let t="not implemented";e&&(t="should be implemented on descendant"),super(t)}}});function ao(s){return!!s&&(typeof s=="object"||typeof s=="function")&&typeof s.then=="function"&&typeof s.catch=="function"}function ie(s){return new Promise(e=>{setTimeout(e,s)})}function re(s,e,t="Timeout Error"){zs&&!Pp&&(Pp=!0,console.log("Debugger connected - timeouts were overridden to 10 minutes to improve debugging"));let r=new X(t);return e=zs?Number(zs)||6e5:e,Promise.race([s,ie(e).then(()=>{throw r})])}async function de(s,e,{concurrency:t}={}){if(t){Ap||(Ap=(await import("p-limit")).default);let r=Ap(t);return await Promise.all(Array.from(s,(n,o)=>r(()=>e(n,o))))}return await Promise.all(Array.from(s,e))}function ct(s){return new Promise((e,t)=>{s((r,n)=>r?t(r):e(n))})}var Pp,Ap,uc=T(()=>{"use strict";z();le();Pp=!1});var Qs,kp,vT,Ys,_p,ET,ST,Op,Lp=T(()=>{"use strict";Qs=E(require("lodash"));le();kp=require("dns");j();uc();vT=x("http-request-counters"),Ys=!1,_p=async()=>{if(Ie)return!0;let s=["www.google.com","www.facebook.com","www.microsoft.com","testim.io"];try{let e=Boolean(await de(s,t=>kp.promises.lookup(t)));return e||(Ys=!0),e}catch{return vT.error("network connectivity test failed"),Ys=!0,!1}},ET=Qs.throttle(_p,10*1e3),ST=60*1e3*15,Op=()=>{let s={call:new Map,success:new Map,fail:new Map};function e(n,o){let i=n.get(o)||0;n.set(o,i+1),setTimeout(()=>{let a=n.get(o)||1;n.set(o,a-1)},ST)}function t(n,o=n.name){return async function(...i){e(s.call,o);try{let a=await n.call(null,...i);return e(s.success,o),a}catch(a){throw e(s.fail,o),Ys||ET(),a}}}async function r(){if(Ys||!await _p())return!1;let n=Qs.sum([...s.fail.values()]),o=Qs.sum([...s.call.values()]);return n<o*.1}return r.counters=s,t.counters=s,t.isNetworkHealthy=r,t.didNetworkConnectivityTestFail=()=>Ys,t}});var kt={};$(kt,{deleteFullRes:()=>PT,deleteReq:()=>Zs,didNetworkConnectivityTestFail:()=>yc,download:()=>hc,get:()=>Tr,getFullRes:()=>_T,getText:()=>kT,head:()=>OT,isNetworkHealthy:()=>gc,post:()=>Tt,postForm:()=>pc,postFullRes:()=>AT,put:()=>fc});function IT(){return global.caFileContent}function xT(s,e){let t=[];s.on("data",r=>{t.push(r)}),s.on("end",()=>{e(null,Buffer.concat(t))})}function CT(){return!wt.default.Request.prototype.proxy&&global.SuperagentProxy&&global.SuperagentProxy(wt.default),global.proxyUri}function wr(s,e=!1){let t=IT();t&&s.ca(t);let r=!e&&CT();r&&s.proxy(r)}async function Np(s,e={},t={},r=ts){let n=wt.default.delete(s).send(e).timeout(r).set(t);return wr(n),await n}async function Dp(s,e,t={},r=ts,n=0){let o=wt.default.post(s).send(e).timeout(r).set(t);wr(o),n&&o.retry(n);try{return await o}catch(i){throw i.url=s,i.originalRequestTimeout=r,i.additionalSetHeaders=t,i}}async function mc(s,e,t={},r=ts,{isBinary:n=!1,skipProxy:o=!1}={}){let i=wt.default.get(s).query(e||{}).timeout(r).set(t);return n&&i.buffer(!0),wr(i,o),await i}var wt,dc,We,ts,RT,Gt,Zs,PT,Tt,AT,pc,kT,Tr,_T,OT,fc,hc,gc,yc,vt=T(()=>{"use strict";wt=E(require("superagent"));j();Lp();dc=x("http-request"),We=Op(),ts=parseInt(process.env.DEFAULT_REQUEST_TIMEOUT||"0",10)||3e4,RT=6e4;Gt=(s,e,t)=>{throw dc.error(s,{...t,error:e}),e};Zs=We(async(s,e,t,r)=>{try{let n=await Np(s,e,t,r);return n.type==="text/plain"?n.text:n.body}catch(n){return Gt("failed to delete request",n,{url:s})}});PT=We(Np),Tt=We(async({url:s,body:e,headers:t,timeout:r,retry:n})=>{try{let o=await Dp(s,e,t,r,n);return o.type==="text/plain"?o.text:o.body}catch(o){return Gt("failed to post request",o,{url:s})}});AT=We(Dp),pc=We(async(s,e,t,r={},n=ts)=>{let o=wt.default.post(s).type("form").timeout(n).set(r);o.field(e),Object.keys(t).forEach(i=>{o.attach(i,t[i].buffer,t[i].fileName)}),wr(o);try{let i=await o;return i.type==="text/plain"?i.text:i.body}catch(i){return Gt("failed to post request",i,{url:s})}});kT=We(async(s,e,t)=>{try{return(await mc(s,e,t)).text}catch(r){return Gt("failed to getText request",r,{url:s,query:e})}}),Tr=We(async(s,e,t,r,n)=>{try{return(await mc(s,e,t,r,n)).body}catch(o){return Gt("failed to get request",o,{url:s,query:e})}}),_T=We((s,e,t,r)=>mc(s,e,t,r)),OT=We(async s=>{let e=wt.default.head(s).timeout(ts);wr(e);try{return await e}catch(t){return Gt("failed to head request",t,{url:s})}}),fc=We(async(s,e,t={},r=ts)=>{let n=wt.default.put(s).send(e).timeout(r).set(t);wr(n);try{return(await n).body}catch(o){return Gt("failed to put request",o,{url:s})}}),hc=We(async s=>{dc.info("start to download",{url:s});let e=wt.default.get(s).timeout(RT).buffer(!0).parse(xT);wr(e);try{let t=await e;return dc.info("finished to download",{url:s}),t}catch(t){return Gt("failed to download",t,{url:s})}}),gc=We.isNetworkHealthy,yc=We.didNetworkConnectivityTestFail});function lt(){let s;return require.main?(require.main.filename.includes("/src")||require.main.filename.includes("\\src")?s=_t.resolve(__dirname,"../../"):s=_t.resolve(__dirname,""),s):process.cwd()}function co(s,e){return Be(s)?e||_t.join(process.cwd(),s.replace(/^.*[\\/]/,"")):e||_t.basename(s)}function nt(){try{return require(`${__dirname}/package.json`).version}catch{return""}}function NT(){try{return wp.node}catch{return""}}async function uo(s,e,t=!0){let r=await Ge.promises.readdir(s,{withFileTypes:!0});await Ge.promises.mkdir(e,{recursive:t});for(let n of r){let o=_t.join(s,n.name),i=_t.join(e,n.name);n.isDirectory()?await uo(o,i):await Ge.promises.copyFile(o,i)}}async function ye(s){try{return await Ge.promises.access(s),!0}catch(e){if(e.code==="ENOENT")return!1;throw e}}var _t,Mp,Up,Ge,LT,vr,qe,Fp,lo,bc,Ye,wc,Tc=T(()=>{"use strict";_t=E(require("path"));$a();io();Mp=E(require("p-retry")),Up=E(require("decompress")),Ge=require("fs"),LT=3;vr=async s=>{let e=await Promise.resolve().then(()=>(vt(),kt));return(0,Mp.default)(()=>e.download(s),{retries:LT})},qe=async(s,e)=>{let t=await vr(s);return Ge.promises.writeFile(e,t.body)},Fp=async(s,e)=>new Promise((t,r)=>{try{let n=(0,Ge.createWriteStream)(e);(0,Ge.createReadStream)(s).pipe(n),n.on("finish",()=>{n.close(()=>t())})}catch(n){r(n)}});lo=async(s,e)=>{let t=co(s,e);return Be(s)?qe(s,t):Fp(s,t)},bc=async s=>Be(s)?vr(s):Ge.promises.readFile(s),Ye=async(s,e)=>await(0,Up.default)(s,e),wc=s=>(0,Ge.statSync)(s).size/1e6});var Lt={};$(Lt,{CLI_MODE:()=>Q,gridMessages:()=>rs,gridTypes:()=>ue,mobileWeb:()=>vc,runnerTestStatus:()=>pe,sessionType:()=>Ot,socketEventTypes:()=>Qe,stepResult:()=>tn,test:()=>Ec,testRunStatus:()=>en,testStatus:()=>Ve,timeoutMessages:()=>Ue});var Ue,en,pe,Ve,rs,vc,Ec,Qe,Q,Ot,ue,tn,ae=T(()=>{"use strict";Ue={GET_BROWSER_TIMEOUT_MSG:"get-browser-timeout",TEST_START_TIMEOUT_MSG:"test-start-timeout",TEST_COMPLETE_TIMEOUT_MSG:"test-complete-timeout"},en={COMPLETED:"completed",RUNNING:"running"},pe={PASSED:"PASSED",FAILED:"FAILED",ABORTED:"ABORTED",SKIPPED:"SKIPPED",QUEUED:"QUEUED"},Ve={DRAFT:"draft",EVALUATING:"evaluating",ACTIVE:"active",QUARANTINE:"quarantine"},rs={NOT_FOUND:"The specified grid is not available",UNKNOWN:"Test couldn't get browser - unknown error"},vc={MOBILE_WEB_REMOTE_RUN_HEADER_SPACING:50},Ec={HIDDEN_PARAM:"TST_HIDDEN_PARAM"},Qe={TEST_RESULT_CREATED:"test-result-created",TEST_RESULT_UPDATED:"test-result-updated",REMOTE_STEP_SAVED:"remote-step-saved"},Q={EXTENSION:"extension",SELENIUM:"selenium",APPIUM:"appium"},Ot={CODELESS:"codeless",CODEFUL:"codeful"},ue={TESTIM_ENTERPRISE:"testimEnterprise",TESTIM:"testim",LAMBDATEST:"testimLambdaTest",DEVICE_FARM:"testimDF",HYBRID:"testimHybrid",BROWSERSTACK:"browserstack",SAUCELABS:"saucelabs",TESTIM_HEADSPIN:"testimHeadspin"},tn={SETUP_TIMEOUT:"setup-timeout",NETWORK_ERROR:"network-error",GRID_ERROR:"grid-error",SELENIUM_ERROR:"selenium-error",BROWSER_CLOSED:"browser-closed"}});function Er(s){return s.files.length>0?Ot.CODEFUL:Ot.CODELESS}function rn(s,e){var t,r,n;return((t=s.testConfigNames)!=null&&t.length||(r=s.testConfigIds)!=null&&r.length||s.testPlan.length||s.testPlanIds.length)&&!s.browser?[...new Set(e.map(o=>{var i;return(i=o.runConfig)==null?void 0:i.browserValue}))]:[(n=s.browser)==null?void 0:n.toLowerCase()]}function DT(){let{argv:s}=process;if(s.includes("--remoteRunId"))return{remoteRunId:s[s.indexOf("--remoteRunId")+1],projectId:s[s.indexOf("--project")+1],token:s[s.indexOf("--token")+1]}}var sn,jp,He,MT,UT,FT,jT,BT,$T,Sc,Bp=T(()=>{"use strict";ae();sn=s=>{var e,t;return Boolean(((e=s.testPlan)==null?void 0:e.length)||((t=s.testPlanIds)==null?void 0:t.length))},jp=s=>Boolean(s.resultId&&s.source==="remote-run"),He=(s,e)=>s.testStatus===Ve.QUARANTINE&&!jp(e)&&!e.runQuarantinedTests;MT=s=>Boolean(s.initCodimMode),UT=s=>Boolean(s.loginMode),FT=s=>Boolean(s.tunnelOnlyMode),jT=s=>Boolean(s.createPrefechedData),BT=s=>Boolean(s.installLazyDepsMode),$T=s=>Boolean(s.agentMode),Sc=(s,e)=>{s.forEach((t,r)=>{e.has(t)&&(s[r]=`--${t}`)})}});function po(s){let e=Rc.default.duration(s);return`${e.hours()}:${e.minutes()}:${e.seconds()}.${e.milliseconds()}`}function Ic(s){return Rc.default.duration(s).asSeconds()}var Rc,$p=T(()=>{"use strict";Rc=E(require("moment"))});var H={};$(H,{TESTIM_BROWSER_DIR:()=>Nt,TimeoutError:()=>X,buildBasicHeader:()=>Ba,calcPercentile:()=>fo,copy:()=>Fp,copyDir:()=>uo,delay:()=>ie,doesPathExist:()=>ye,download:()=>vr,downloadAndSave:()=>qe,extractElementId:()=>ut,getArgsOnRemoteRunFailure:()=>DT,getBrowserInfo:()=>on,getCdpAddressForHost:()=>Ir,getCliLocation:()=>lt,getDuration:()=>po,getDurationSec:()=>Ic,getEnginesVersion:()=>NT,getEnvironmentGitBranch:()=>Rr,getLocalFileSizeInMB:()=>wc,getPlanType:()=>Cc,getRunConfigByBrowserName:()=>an,getRunnerVersion:()=>nt,getSessionType:()=>Er,getSource:()=>lo,getSourceAsBuffer:()=>bc,getSourcePath:()=>co,getTestUrl:()=>st,getUniqBrowsers:()=>rn,groupTestsByRetries:()=>Pc,guid:()=>K,hasTestPlanFlag:()=>sn,isAgentMode:()=>$T,isCreatePrefetchedDataMode:()=>jT,isInitCodimMode:()=>MT,isInstallLazyDepsMode:()=>BT,isLoginMode:()=>UT,isPromise:()=>ao,isQuarantineAndNotRemoteRun:()=>He,isRemoteRun:()=>jp,isTunnelOnlyMode:()=>FT,isURL:()=>Be,promiseFromCallback:()=>ct,promiseMap:()=>de,promiseTimeout:()=>re,removePropertyFromObject:()=>mo,replaceArgsWithNoDashes:()=>Sc,unzipFile:()=>Ye});function on(s){return s=s.toLowerCase(),xc.find(e=>e.browserValue===s)}function an(s,e,t){s=s.toLowerCase();let r=xc.find(o=>o.browserName.toLowerCase()===s||s.includes(o.synonyms))||xc[0],n=nn.find(o=>o.osName==="Windows 10");return e&&(e.platform?n=nn.find(o=>o.sl.platform===e.platform):e.platformName&&(n=nn.find(o=>o.sl.platformName===e.platformName))),t&&(t.os_version?n=nn.find(o=>o.bs.os_version===t.os_version):t.platform&&(n=nn.find(o=>o.bs.platform===t.platform))),Sr.merge(r,n)}function Rr(){return process.env.GIT_BRANCH||process.env.CIRCLE_BRANCH||process.env.TRAVIS_BRANCH||process.env.CI_BRANCH}function mo(s,e,t){for(let r in s)Object.prototype.hasOwnProperty.call(s,r)&&(t(r,e)?delete s[r]:typeof s[r]=="object"&&mo(s[r],e,t))}function ut(s){return s.ELEMENT||s[$t]}function Cc(s){s||(s={});let e=Date.now(),t=s.expireAt||s.expireAT;return s.plan!=="free"?"pro":t?t<e?"free":"trial":"free"}function Pc(s=[]){return Sr.chain(s).groupBy(e=>e.originalTestResultId||e.resultId).values().reduce((e,t)=>{if(!t)return e;if(t.length===1)return e.push(t[0]),e;let r=Sr.orderBy(t,o=>typeof o.retryCount=="number"?o.retryCount:1),n=Sr.chain(r).last().cloneDeep().value();return n&&(n.retryTestResults=r,e.push(n)),e},[]).compact().value()}async function Ir(s,e){let t=await Promise.resolve().then(()=>(vt(),kt));try{return(await t.get(`http://${s}/json/version`,void 0,void 0,e)).webSocketDebuggerUrl}catch{throw new Error("unable to connect to devtools server")}}var Wp,Sr,Gp,WT,Nt,nn,xc,fo,F=T(()=>{"use strict";Wp=E(require("os")),Sr=E(require("lodash")),Gp=E(require("path"));Yr();Tc();Bp();$p();$a();uc();WT=Wp.homedir(),Nt=Gp.join(WT,".testim-browser-profile"),nn=[{osName:"Linux",bs:{os:"LINUX"},sl:{platform:"Linux"}},{osName:"Windows 10",bs:{os:"WINDOWS",os_version:"10"},sl:{platform:"Windows 10"}},{osName:"Windows 8",bs:{os:"WINDOWS",os_version:"8"},sl:{platform:"Windows 8"}},{osName:"Windows 8.1",bs:{os:"WINDOWS",os_version:"8.1"},sl:{platform:"Windows 8.1"}},{osName:"Windows 7",bs:{os:"WINDOWS",os_version:"7"},sl:{platform:"Windows 7"}},{osName:"Windows XP",bs:{os:"WINDOWS",os_version:"XP"},sl:{platform:"Windows XP"}},{osName:"macOS Big Sur",bs:{os:"OS X",os_version:"Big Sur",safari_version:"14"},sl:{platform:"macOS 11",safari_version:"14"}},{osName:"macOS Catalina",bs:{os:"OS X",os_version:"Catalina",safari_version:"13"},sl:{platform:"macOS 10.15",safari_version:"13"}},{osName:"macOS Mojave",bs:{os:"OS X",os_version:"Mojave",safari_version:"12"},sl:{platform:"macOS 10.14",safari_version:"12"}},{osName:"macOS High Sierra",bs:{os:"OS X",os_version:"High Sierra",safari_version:"11"},sl:{platform:"macOS 10.13",safari_version:"11"}},{osName:"macOS Sierra",bs:{os:"OS X",os_version:"Sierra",safari_version:"10"},sl:{platform:"macOS 10.12",safari_version:"10.0"}},{osName:"OS X El Capitan",bs:{os:"OS X",os_version:"El Capitan",safari_version:"9.1"},sl:{platform:"OS X 10.11",safari_version:"9.0"}},{osName:"OS X Yosemite",bs:{os:"OS X",os_version:"Yosemite",safari_version:"8"},sl:{platform:"OS X 10.10",safari_version:"8.0"}},{osName:"OS X Mavericks",bs:{os:"OS X",os_version:"Mavericks",safari_version:"7.1"},sl:{platform:"OS X 10.9",safari_version:"7.0"}},{osName:"OS X Mountain Lion",bs:{os:"OS X",os_version:"Mountain Lion",safari_version:"6.2"},sl:{platform:"OS X 10.8",safari_version:"6.0"}},{osName:"OS X Lion",bs:{os:"OS X",os_version:"Lion",safari_version:"6"},sl:{}},{osName:"OS X Snow Leopard",bs:{os:"OS X",os_version:"Snow Leopard",safari_version:"5.1"},sl:{}},{osName:"iOS",bs:{platform:"MAC"},sl:{platformName:"iOS",appiumVersion:"1.6.4"}},{osName:"Android",bs:{platform:"ANDROID"},sl:{platformName:"Android",appiumVersion:"1.6.4"}}],xc=[{browserName:"Chrome",bs:{browser:"Chrome",browser_version:"94"},sl:{browserName:"chrome",version:"94.0"},browserValue:"chrome"},{browserName:"Firefox",bs:{browser:"Firefox",browser_version:"89"},sl:{browserName:"firefox",version:"89.0"},browserValue:"firefox"},{browserName:"Safari",bs:{browser:"Safari"},sl:{browserName:"safari"},browserValue:"safari"},{browserName:"Edge",bs:{browser:"Edge",browser_version:"18"},sl:{browserName:"MicrosoftEdge",version:"18.17763"},browserValue:"edge",eol:!0},{browserName:"Edge Chromium",bs:{browser:"Edge",browser_version:"94"},sl:{browserName:"MicrosoftEdge",version:"94"},synonyms:["edge-chromium"],browserValue:"edge-chromium",seleniumName:"MicrosoftEdge"},{browserName:"Internet Explorer 11",bs:{browser:"IE",browser_version:"11"},sl:{browserName:"internet explorer",version:"11.0"},synonyms:["ie11"],browserValue:"ie11",eol:!0},{browserName:"Browser",bs:{},sl:{browserName:"Browser"},browserValue:"browser"},{browserName:"Android",bs:{browserName:"android"},sl:{},browserValue:"android"},{browserName:"iPad",bs:{browserName:"iPad"},sl:{},browserValue:"ipad"},{browserName:"iPhone",bs:{browserName:"iPhone"},sl:{},browserValue:"iphone"}];fo=(s,e)=>{if(s.length===0)return 0;if(typeof e!="number")throw new TypeError("p must be a number");if(s=[...s].sort((r,n)=>r-n),e<=0)return s[0];if(e>=100)return s.at(-1);let t=Math.ceil(s.length*(e/100))-1;return s[t]}});var Ac={};$(Ac,{$schema:()=>GT,default:()=>KT,definitions:()=>qT,properties:()=>zT,required:()=>HT,type:()=>VT});var GT,qT,VT,HT,zT,KT,qp=T(()=>{GT="http://json-schema.org/draft-07/schema#",qT={request:{type:"object",required:["url"],additionalProperties:!1,properties:{url:{type:"string"},method:{type:"string",pattern:"^GET$|^HEAD$|^POST$|^PUT$|^DELETE$|^CONNECT$|^OPTIONS$|^TRACE$|^PATCH$"}}},header:{type:"object",required:["name","value"],additionalProperties:!1,properties:{name:{type:"string"},value:{type:"string"}}},cookie:{type:"object",required:["name","value"],additionalProperties:!1,properties:{name:{type:"string"},value:{type:"string"},path:{type:"string"},domain:{type:"string"},expires:{type:"string",format:"date-time"},httpOnly:{type:"boolean"},secure:{type:"boolean"}}},response:{type:"object",required:["status"],additionalProperties:!1,properties:{status:{type:"integer",minimum:100,exclusiveMaximum:600},headers:{type:"array",items:{$ref:"#/definitions/header"}},cookies:{type:"array",items:{$ref:"#/definitions/cookie"}},content:{type:"object",required:["text"],additionalProperties:!1,properties:{text:{type:"string"}}}}},redirectResponse:{type:"object",required:["redirectUrl"],additionalProperties:!1,properties:{redirectUrl:{type:"string"}}},passthroughResponse:{type:"object",required:["passthrough"],additionalProperties:!1,properties:{passthrough:{type:"boolean",enum:[!0]}}},entry:{type:"object",required:["request","response"],additionalProperties:!1,properties:{request:{$ref:"#/definitions/request"},response:{oneOf:[{$ref:"#/definitions/response"},{$ref:"#/definitions/redirectResponse"},{$ref:"#/definitions/passthroughResponse"}]},maxHits:{type:"integer",minimum:1}}}},VT="object",HT=["entries"],zT={version:{type:"string",enum:["1.2","1.2.0"]},creator:{type:"string"},entries:{type:"array",items:{$ref:"#/definitions/entry"}}},KT={$schema:GT,definitions:qT,type:VT,required:HT,properties:zT}});async function Yp(){try{return await re(ho.promises.readFile(wo()).then(async s=>{let e=await Xp;return YT(e,s)}),3e4)}catch{return{}}}function YT(s,e){let t=e.slice(0,16),r=e.slice(16),n=Buffer.from(s),o=ns.createDecipheriv("aes-256-cbc",Buffer.concat([n,Buffer.alloc(32)],32),t),i=o.update(r);return JSON.parse(Buffer.concat([i,o.final()]))}function dt(s,e,t=JT,r=void 0){return async()=>{if(!zp)return await s();let n=e;r&&(e+=JSON.stringify(r));let o=await QT(e);if(o)return cn.debug("cache hit:",{fnName:e}),o;if(cn.debug("cache miss:",{fnName:e}),!Kp)throw new Error(`Attempted to rebuild cache for ${n}. cache miss is not allowed with current run configuration`);let i=await s();return i&&await ZT(e,i,t),i}}async function QT(s){let t=(await To)[s];if(!t)return;let{value:r,expiry:n}=t;if(!(n<Date.now())&&r)return r}async function ZT(s,e,t){if(kc)throw cn.error("calling set after waitForSave is not allowed",{key:s,ttl:t}),new Error("calling set after waitForSave is not allowed");try{let r=await To;r[s]={value:e,expiry:Date.now()+t},Jp=new Promise(n=>{bo=n}),XT(r)}catch{cn.error("failed updating cache")}}async function Qp(){let s=await To;Object.keys(s).forEach(e=>{delete s[e]})}function Zp(s){zp=s}function ev(s=!0){Kp=s}async function em(){try{return kc=!0,await Jp}finally{kc=!1}}function tm(s){yo=s,To=Yp()}var ho,go,ns,Vp,cn,yo,Hp,bo,zp,Kp,kc,Jp,Xp,JT,wo,To,XT,rm,sm,wx,nm,qt=T(()=>{"use strict";ho=E(require("fs")),go=E(require("path")),ns=E(require("crypto"));F();Vp=require("lodash");j();cn=x("local cache"),yo=go.resolve(lt(),"testim-cache"),zp=!0,Kp=!0,kc=!1,Jp=new Promise(s=>{bo=s}),Xp=new Promise(s=>{Hp=s}),JT=1e3*60*60*3,wo=()=>go.resolve(go.resolve(yo,"testim.cache"));To=Yp(),XT=(0,Vp.debounce)(async s=>{let e;try{let t=await Xp,r=ns.randomBytes(16),n=JSON.stringify(s),o=Buffer.from(t),i=ns.createCipheriv("aes-256-cbc",Buffer.concat([o,Buffer.alloc(32)],32),r),a=Buffer.concat([r,i.update(n),i.final()]);await ye(yo)||await ho.promises.mkdir(yo,{recursive:!0}),await ho.promises.writeFile(wo(),a)}catch(t){cn.error("failed saving cache",{err:t}),e=t}bo(e?{success:!1,error:e}:{success:!0})},200);rm=Hp,sm=Zp.bind(void 0,!1),wx=Zp.bind(void 0,!0),nm=()=>ev(!1)});function vo(){return{cliLocation:lt(),userInfo:os.userInfo(),platform:os.platform(),release:os.release()}}var os,_c=T(()=>{"use strict";os=E(require("os"));F()});function tv(s){try{return Eo.resolve(Eo.dirname(require.resolve(`${s}/package.json`)),require(`${s}/package.json`).main||"")}catch(e){if(e.code==="ERR_PACKAGE_PATH_NOT_EXPORTED")return require.resolve(s);throw e}}function Vt(s){let e=tv(s);return require(e)}var Eo,ln=T(()=>{"use strict";Eo=E(require("path"))});async function cm(s){return(await im(`npm view ${s} version`)).stdout.trim()}function Lc(s){try{return Vt(s)}catch{return!1}}function lm(s,e){return require(is.join(s,`./node_modules/${e}/package.json`)).version}async function Ro(s,e,t){function r(c){let d=/EACCES[^']+'(.+)'/.exec(c.stderr);return d===null?!1:d[1]}function n(c){return/The "to" argument must be of type string./.exec(c.stderr)}let o=is.join(s,"npm-shrinkwrap.json"),i=is.join(s,"npm-shrinkwrap-dummy.json"),a=!1;try{try{await ye(o)&&(await Oc.promises.rename(o,i),a=!0)}catch{}return await im(`npm i ${e} --no-save --no-prune --prefer-offline --no-audit --progress=false`,{...t,cwd:s}).catch(c=>{let u=r(c),d=n(c);throw u||d?(am.info("Failed to install package due to insufficient write access",{...vo(),package:e,path:u||s}),console.error(`
2
+ "use strict";var Cw=Object.create;var Yn=Object.defineProperty;var Aw=Object.getOwnPropertyDescriptor;var kw=Object.getOwnPropertyNames;var _w=Object.getPrototypeOf,Ow=Object.prototype.hasOwnProperty;var T=(s,e)=>()=>(s&&(e=s(s=0)),e);var Kd=(s,e)=>()=>(e||s((e={exports:{}}).exports,e),e.exports),$=(s,e)=>{for(var t in e)Yn(s,t,{get:e[t],enumerable:!0})},Jd=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of kw(e))!Ow.call(s,n)&&n!==t&&Yn(s,n,{get:()=>e[n],enumerable:!(r=Aw(e,n))||r.enumerable});return s};var E=(s,e,t)=>(t=s!=null?Cw(_w(s)):{},Jd(e||!s||!s.__esModule?Yn(t,"default",{value:s,enumerable:!0}):t,s)),G=s=>Jd(Yn({},"__esModule",{value:!0}),s);var Oe={};$(Oe,{log:()=>N,measure:()=>Nw});function N(...s){if(!Zd)return;let e=Date.now();console.log(`${e-Lw} ${e-Qd} `,...s),Qd=e}function Nw(s,e){if(!Zd)return;let t=Date.now();try{s()}finally{console.log(e||s.name,"took",Date.now()-t)}}var Zd,Lw,Qd,Le=T(()=>{"use strict";Zd=process.env.MEASURE_TESTIM_CLI_PERFORMANCE,Lw=Date.now(),Qd=Date.now()});var Ba={};$(Ba,{EDGE_CHROMIUM_MIN_VERSION:()=>oo,SELENIUM_STATUS_CODES:()=>sT,UNICODE_CHARACTERS:()=>Dw,W3C_ELEMENT_ID:()=>$t});var Dw,$t,Mw,Uw,Fw,ep,tp,rp,sp,jw,np,op,ip,ap,Bw,cp,lp,up,dp,pp,mp,fp,hp,$w,Ww,gp,yp,Gw,qw,Vw,Hw,zw,Kw,Jw,Xw,Yw,Qw,Zw,eT,tT,rT,sT,oo,Yr=T(()=>{"use strict";Dw={NULL:"\uE000",Unidentified:"\uE000",Cancel:"\uE001",Help:"\uE002","Back space":"\uE003",Backspace:"\uE003",Tab:"\uE004",Clear:"\uE005",Return:"\uE006",Enter:"\uE007",Shift:"\uE008",Control:"\uE009",Alt:"\uE00A",Pause:"\uE00B",Escape:"\uE00C",Space:"\uE00D"," ":"\uE00D",Pageup:"\uE00E",PageUp:"\uE00E",Page_Up:"\uE00E",Pagedown:"\uE00F",PageDown:"\uE00F",Page_Down:"\uE00F",End:"\uE010",Home:"\uE011","Left arrow":"\uE012",Arrow_Left:"\uE012",ArrowLeft:"\uE012","Up arrow":"\uE013",Arrow_Up:"\uE013",ArrowUp:"\uE013","Right arrow":"\uE014",Arrow_Right:"\uE014",ArrowRight:"\uE014","Down arrow":"\uE015",Arrow_Down:"\uE015",ArrowDown:"\uE015",Insert:"\uE016",Delete:"\uE017",Semicolon:"\uE018",Equals:"\uE019","Numpad 0":"\uE01A","Numpad 1":"\uE01B","Numpad 2":"\uE01C","Numpad 3":"\uE01D","Numpad 4":"\uE01E","Numpad 5":"\uE01F","Numpad 6":"\uE020","Numpad 7":"\uE021","Numpad 8":"\uE022","Numpad 9":"\uE023",Multiply:"\uE024",Add:"\uE025",Separator:"\uE026",Subtract:"\uE027",Decimal:"\uE028",Divide:"\uE029",F1:"\uE031",F2:"\uE032",F3:"\uE033",F4:"\uE034",F5:"\uE035",F6:"\uE036",F7:"\uE037",F8:"\uE038",F9:"\uE039",F10:"\uE03A",F11:"\uE03B",F12:"\uE03C",Command:"\uE03D",Meta:"\uE03D",Zenkaku_Hankaku:"\uE040",ZenkakuHankaku:"\uE040"},$t="element-6066-11e4-a52e-4f735466cecf",Mw={id:"Unknown",status:-1,message:"Remote end send an unknown status code."},Uw={id:"Success",status:0,message:"The command executed successfully."},Fw={id:"NoSuchDriver",status:6,message:"A session is either terminated or not started"},ep={id:"NoSuchElement",status:404,message:"An element could not be located on the page using the given search parameters."},tp={id:"NoSuchFrame",status:400,message:"A request to switch to a frame could not be satisfied because the frame could not be found."},rp={id:"UnknownCommand",status:404,message:"The requested resource could not be found, or a request was received using an HTTP method that is not supported by the mapped resource."},sp={id:"StaleElementReference",status:400,message:"An element command failed because the referenced element is no longer attached to the DOM."},jw={id:"ElementNotVisible",status:11,message:"An element command could not be completed because the element is not visible on the page."},np={id:"InvalidElementState",status:400,message:"An element command could not be completed because the element is in an invalid state (e.g. attempting to click a disabled element)."},op={id:"UnknownError",status:500,message:"An unknown server-side error occurred while processing the command."},ip={id:"ElementIsNotSelectable",status:400,message:"An attempt was made to select an element that cannot be selected."},ap={id:"JavaScriptError",status:500,message:"An error occurred while executing user supplied JavaScript."},Bw={id:"XPathLookupError",status:19,message:"An error occurred while searching for an element by XPath."},cp={id:"Timeout",status:408,message:"An operation did not complete before its timeout expired."},lp={id:"NoSuchWindow",status:400,message:"A request to switch to a different window could not be satisfied because the window could not be found."},up={id:"InvalidCookieDomain",status:400,message:"An illegal attempt was made to set a cookie under a different domain than the current page."},dp={id:"UnableToSetCookie",status:500,message:"A request to set a cookie's value could not be satisfied."},pp={id:"UnexpectedAlertOpen",status:500,message:"A modal dialog was open, blocking this operation"},mp={id:"NoAlertOpenError",status:400,message:"An attempt was made to operate on a modal dialog when one was not open."},fp={id:"ScriptTimeout",status:408,message:"A script did not complete before its timeout expired."},hp={id:"InvalidElementCoordinates",status:400,message:"The coordinates provided to an interactions operation are invalid."},$w={id:"IMENotAvailable",status:30,message:"IME was not available."},Ww={id:"IMEEngineActivationFailed",status:31,message:"An IME engine could not be started."},gp={id:"InvalidSelector",status:400,message:"Argument was an invalid selector (e.g. XPath/CSS)."},yp={id:"SessionNotCreatedException",status:500,message:"A new session could not be created."},Gw={id:"ElementNotScrollable",status:34,message:"Element cannot be scrolled into view."},qw={id:"SelectorTimeoutError",status:100,message:"Request timed out after the element was still found on the page."},Vw={id:"NoSessionIdError",status:101,message:"A session id is required for this command but wasn't found in the response payload"},Hw={id:"GridApiError",status:102,message:"A call to the Selenium Grid API failed"},zw={id:"ElementClickIntercepted",status:400,message:"The Element Click command could not be completed because the element receiving the events is obscuring the element that was requested clicked."},Kw={id:"ElementNotInteractable",status:400,message:"A command could not be completed because the element is not pointer- or keyboard interactable."},Jw={id:"InsecureCertificate",status:400,message:"Navigation caused the user agent to hit a certificate warning, which is usually the result of an expired or invalid TLS certificate."},Xw={id:"InvalidArgument",status:400,message:"The arguments passed to a command are either invalid or malformed."},Yw={id:"InvalidSessionId",status:404,message:"Occurs if the given session id is not in the list of active sessions, meaning the session either does not exist or that it\u2019s not active."},Qw={id:"MoveTargetOutOfBounds",status:500,message:"The target for mouse interaction is not in the browser\u2019s viewport and cannot be brought into that viewport."},Zw={id:"NoSuchCookie",status:404,message:"No cookie matching the given path name was found amongst the associated cookies of the current browsing context\u2019s active document."},eT={id:"UnableToCaptureScreen",status:500,message:"A screen capture was made impossible."},tT={id:"UnknownMethod",status:405,message:"The requested command matched a known URL but did not match an method for that URL."},rT={id:"UnsupportedOperation",status:500,message:"Indicates that a command that should have executed properly cannot be supported for some reason."},sT={"-1":Mw,0:Uw,6:Fw,7:ep,8:tp,9:rp,10:sp,11:jw,12:np,13:op,15:ip,17:ap,19:Bw,21:cp,23:lp,24:up,25:dp,26:pp,27:mp,28:fp,29:hp,30:$w,31:Ww,32:gp,33:yp,34:Gw,100:qw,101:Vw,102:Hw,"element click intercepted":zw,"element not selectable":ip,"element not interactable":Kw,"insecure certificate":Jw,"invalid argument":Xw,"invalid cookie domain":up,"invalid coordinates":hp,"invalid element state":np,"invalid selector":gp,"invalid session id":Yw,"javascript error":ap,"move target out of bounds":Qw,"no such alert":mp,"no such cookie":Zw,"no such element":ep,"no such frame":tp,"no such window":lp,"script timeout":fp,"session not created":yp,"stale element reference":sp,timeout:cp,"unable to set cookie":dp,"unable to capture screen":eT,"unexpected alert open":pp,"unknown command":rp,"unknown error":op,"unknown method":tT,"unsupported operation":rT},oo=79});function K(s=16){let e="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890",t="";for(let r=0;r<s;r++){let n=Math.floor(Math.random()*e.length);t+=e[n]}return t}function st(s,e,t,r,n){let o="";return n=n?encodeURIComponent(n):"master",e&&t&&(o=`${s}/#/project/${e}/branch/${n}/test/${t}`,r&&(o+=`?result-id=${r}`)),o}function $a(s,e){return`Basic ${Buffer.from(`${s}:${e}`).toString("base64")}`}function Be(s){let e=/^(https?:\/\/)/i,t=new RegExp("^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)+(?:[a-z\\u00a1-\\uffff]{2,}\\.?))(?::\\d{2,5})?(?:[/?#]\\S*)?$","i");return e.test(s)||t.test(s)}var Wa=T(()=>{"use strict"});var qa,bp,wp,io=T(()=>{qa={ngrok:"4.3.3",webpack:"5.74.0",playwright:"0.12.1",puppeteer:"2.1.1","selenium-webdriver":"3.6.0","v8-to-istanbul":"9.1.0","istanbul-lib-coverage":"3.2.0","@bcoe/v8-coverage":"0.2.3","convert-source-map":"1.7.0",multer:"1.4.5-lts.1"},bp={"@applitools/eyes-sdk-core":"13.11.29","@testim/coralogix-logger":"1.1.27-beta.1","@testim/webdriverio":"0.0.8","abort-controller":"3.0.0",ajv:"6.12.6","analytics-node":"5.0.0","appium-dom-utils":"1.0.6",archiver:"5.3.0","body-parser":"1.20.1",chalk:"4.1.2","chrome-launcher":"0.15.0","combine-source-map":"0.8.0",commander:"10.0.0",compression:"1.7.4",cors:"2.8.5","crypto-js":"4.1.1","data-uri-to-buffer":"2.0.2",decompress:"4.2.1",express:"4.17.3",fkill:"7.2.1","form-data":"3.0.0",glob:"7.2.0","https-proxy-agent":"5.0.0","istanbul-lib-report":"3.0.0","istanbul-reports":"3.1.5",jimp:"0.16.2",jsdom:"19.0.0",jsonwebtoken:"9.0.0",lodash:"4.17.21","memory-fs":"0.5.0",memorystream:"0.3.1",moment:"2.29.4",ms:"2.1.2",npm:"8.19.2","object-hash":"3.0.0",ora:"5.4.1","p-limit":"4.0.0","p-retry":"4.6.2",pako:"1.0.11",portfinder:"1.0.28","promise-queue":"2.2.5",prompts:"2.4.2","proxy-agent":"5.0.0","rox-node":"4.9.18",semver:"7.3.2","serialize-error":"7.0.1","socket.io-client":"4.5.4","source-map-support":"0.5.19",superagent:"3.8.3","superagent-proxy":"3.0.0","test-exclude":"6.0.0",threads:"0.12.0","ua-parser-js":"0.7.33","validate-npm-package-name":"3.0.0",webdriverio:"7.24.0",winston:"3.6.0","winston-transport":"4.5.0",ws:"8.5.0",xml2js:"0.4.23",yaml:"1.10.0"},wp={node:">= 14.0.0"}});var xe={};$(xe,{APPIUM_VERSION:()=>lT,BLOB_URL:()=>mr,CANONICAL_BLOB_URL:()=>ec,CANONICAL_EDGE_URL:()=>tc,DEBUG_MODE:()=>aT,DF_ENABLE_VIDEO:()=>cT,DISABLE_AGENT_ORIGIN_CHECK:()=>Vs,DISABLE_DEBUGGER_INFINITE_TIMEOUT:()=>Va,EDGE_URL:()=>Za,EDITOR_URL:()=>pr,EXTENSION_SERVICES_HOST:()=>Qa,GATEWAY_URL:()=>Ya,IS_ON_PREM:()=>Ie,LOGGER_CONSOLE:()=>za,LOGGER_DEBUG:()=>Ka,OVERRIDE_TIMEOUTS:()=>Hs,REQUESTS_QUEUE_SIZE:()=>iT,ROLLOUT_KEY:()=>Ja,SERVICES_HOST:()=>he,START_WORKER_DELAY_MS:()=>Xa,TESTIM_CONCURRENT_WORKER_COUNT:()=>Ks,WEBDRIVER_DEBUG:()=>zs,WEBSOCKET_HOST:()=>Ha});var qs,Tp,vp,Vs,Va,Hs,pr,Ha,he,za,Ka,zs,Ie,iT,aT,Ks,Ja,cT,Xa,lT,Ya,Qa,mr,Za,ec,tc,le=T(()=>{"use strict";qs=process.env.SERVICES_HOST||"https://services.testim.io",Tp="https://testimstatic.blob.core.windows.net",vp="https://tstresultfiles.azureedge.net";process.env.GATEWAY_URL&&(process.env.CORALOGIX_URL=`${process.env.GATEWAY_URL}/testim/coralogix/api/v1/logs`,process.env.SERVICES_HOST=`${process.env.GATEWAY_URL}/testim/services`,process.env.EXTENSION_SERVICES_HOST=process.env.TUNNEL_GATEWAY?process.env.SERVICES_HOST:qs,qs=process.env.SERVICES_HOST);Vs=parseInt(process.env.DISABLE_AGENT_ORIGIN_CHECK||"0",10),Va=parseInt(process.env.DISABLE_DEBUGGER_INFINITE_TIMEOUT||"0",10),Hs=parseInt(process.env.OVERRIDE_TIMEOUTS||"0",10),pr=process.env.EDITOR_URL,Ha=process.env.WEBSOCKET_HOST||`${qs}/ws`,he=qs,za=parseInt(process.env.LOGGER_CONSOLE||"0",10),Ka=parseInt(process.env.LOGGER_DEBUG||"0",10),zs=parseInt(process.env.WEBDRIVER_DEBUG||"0",10),Ie=parseInt(process.env.IS_ON_PREM||"0",10),iT=process.env.REQUESTS_QUEUE_SIZE?parseInt(process.env.REQUESTS_QUEUE_SIZE,10):void 0,aT=parseInt(process.env.DEBUG_MODE||"0",10),Ks=process.env.TESTIM_CONCURRENT_WORKER_COUNT?parseInt(process.env.TESTIM_CONCURRENT_WORKER_COUNT,10):null,Ja=process.env.ROLLOUT_KEY||"5b5560729601aa6484276518",cT=parseInt(process.env.DF_ENABLE_VIDEO||"0",10),Xa=parseInt(process.env.START_WORKER_DELAY_MS||"1500",10),lT=process.env.APPIUM_VERSION||"1.10.1",Ya=process.env.GATEWAY_URL,Qa=process.env.EXTENSION_SERVICES_HOST||qs,mr=process.env.GATEWAY_URL?`${process.env.GATEWAY_URL}/testim/blob`:Tp,Za=process.env.GATEWAY_URL?`${process.env.GATEWAY_URL}/testim/edge`:vp,ec=Tp,tc=vp});var rc={};$(rc,{CoralogixTransport:()=>Qr});var Pe,Ep,uT,dT,Qr,sc=T(()=>{"use strict";Pe=require("@testim/coralogix-logger"),Ep=E(require("winston-transport")),uT={silly:Pe.Severity.verbose,verbose:Pe.Severity.verbose,info:Pe.Severity.info,http:Pe.Severity.info,warn:Pe.Severity.warning,warning:Pe.Severity.warning,error:Pe.Severity.error,silent:Pe.Severity.verbose,critical:Pe.Severity.critical,crit:Pe.Severity.critical,debug:Pe.Severity.debug},dT=["err","error","reason","e"],Qr=class extends Ep.default{constructor(t){t=Object.assign({},Qr.options,t);super(t);this.options=t,this.logger=new Pe.CoralogixLogger(t.category||""),this.name="Coralogix Transport",t.timestamp&&(this.timestamp=t.timestamp)}log(t,r){let{category:n,level:o,message:i,meta:a={},...c}=t,l=Object.assign({},a,this.options.extraFields,c),d=new Pe.Log;d.severity=uT[o],d.text=i,d.category=n,l.className&&(d.className=l.className),l.methodName&&(d.methodName=l.methodName),l.threadId&&(d.threadId=l.threadId),delete l.className,delete l.methodName,delete l.threadId,delete l.category,delete l.level,delete l.message;let m=!1;a instanceof Error&&(m=!0,l.msg=a.message+a.stack,i&&(l.msg=`${i}
3
+ ${l.msg}`));for(let p of dT)a[p]instanceof Error&&(l[p]={message:a[p].message,stack:a[p].stack,name:a[p].name,type:a[p].type,cause:a[p].cause,...a[p]});Object.keys(l).length>0&&(i&&!m&&(l.msg=i),d.text=l),this.logger.addLog(d),r(null,!0)}waitForFlush(){return this.logger.waitForFlush()}static configure(t){Pe.CoralogixLogger.configure(t),Qr.options=t}}});var Js={};$(Js,{getLogger:()=>x,setExecutionId:()=>ic,setProjectId:()=>ac,setProxyUri:()=>cc});function fT(){let s=[],e=()=>Promise.resolve();if(!Ie){let{CoralogixTransport:t}=(sc(),G(rc));t.configure(Ip);let r=new t({category:"ROOT"});s.push(r),e=()=>r.waitForFlush()}return za&&s.push(new bt.transports.Console({format:bt.format.combine(bt.format.colorize(),bt.format.simple())})),[s,e]}function ic(s){nc=s}function ac(s){xp=s}function cc(s){if(Ie||!s)return;let{CoralogixTransport:e}=(sc(),G(rc));e.configure({...Ip,proxyUri:s})}function Sp(s){return{projectId:xp,time:new Date().toISOString(),...nc&&!s&&{executionId:nc}}}function x(s){return new oc(wT.child({category:s}))}var Rp,bt,pT,mT,Ip,hT,gT,yT,bT,wT,nc,xp,oc,j=T(()=>{"use strict";Rp=E(require("os")),bt=E(require("winston"));le();F();pT=Rp.hostname(),mT=nt(),Ip={privateKey:"d0eb01da-f966-1663-63c6-8871225d7c39",applicationName:"testim",subsystemName:"runner"};[hT,gT]=fT(),yT=Ka?"debug":"info",bT={release:Boolean(!0),branch:"production"},wT=bt.createLogger({levels:bt.config.syslog.levels,level:yT,transports:hT,defaultMeta:{name:"runner",hostname:pT,nodeVersion:process.version,runnerVersion:mT,...bT}}),nc=null,xp=null;oc=class{constructor(e){this._logger=e;this.debug=this.debug.bind(this),this.info=this.info.bind(this),this.warn=this.warn.bind(this),this.error=this.error.bind(this),this.fatal=this.fatal.bind(this)}debug(e,t={}){this.innerLog("debug",e,t)}info(e,t={}){this.innerLog("info",e,t)}warn(e,t={}){this.innerLog("warning",e,t)}error(e,t={}){this.innerLog("error",e,t)}fatal(e,t={}){this.innerLog("crit",e,t)}innerLog(e,t,r={}){let{executionId:n}=r;try{this._logger.log(e,Object.assign({meta:r,message:t},Sp(n)))}catch(o){try{this._logger.log("crit",Object.assign({message:`failed to log message ${o.message}, ${o.stack}`},Sp(n)))}catch{}}}waitForFlush(){return gT()}}});var uc={};$(uc,{AbortError:()=>Me,ArgError:()=>R,ClientError:()=>yr,GetBrowserError:()=>Wt,GridConcurrencyError:()=>gr,GridError:()=>it,NoArgsError:()=>fr,NotImplementedError:()=>es,NpmPackageError:()=>at,NpmPermissionsError:()=>wr,PageNotAvailableError:()=>ot,PlaygroundCodeError:()=>br,QuotaDepletedError:()=>Zr,SeleniumCrashError:()=>lc,SeleniumError:()=>hr,StopRunOnError:()=>At,TimeoutError:()=>X});var Pp,Me,fr,R,hr,At,Wt,ot,X,Zr,it,gr,at,lc,yr,br,wr,es,z=T(()=>{"use strict";Pp=require("p-retry"),Me=class extends Error{constructor(t="aborted"){super(t);this.name="AbortError"}},fr=class extends Error{constructor(){super(...arguments);this.name="NoArgsError"}},R=class extends Error{constructor(){super(...arguments);this.name="ArgError"}},hr=class extends Error{constructor(t){super(t.orgStatusMessage||t.message);this.name="SeleniumError",this.errorType=t.type}},At=class extends Error{constructor(){super(...arguments);this.name="StopRunOnError"}},Wt=class extends Error{constructor(t,r){super(t);this.type=r}},ot=class extends Pp.AbortError{},X=class extends Error{},Zr=class extends Error{},it=class extends Error{constructor(){super(...arguments);this.name="GridError"}toString(){return this.message}},gr=class extends it{constructor(){super(...arguments);this.name="GridConcurrencyError"}},at=class extends Error{constructor(){super(...arguments);this.name="NpmPackageError"}},lc=class extends Error{constructor(){super(...arguments);this.message="selenium driver crashed";this.name="SeleniumCrashError"}},yr=class extends Error{},br=class extends Error{},wr=class extends Error{constructor(t){super(`Testim had missing write access to ${t}`);this.path=t}},es=class extends Error{constructor(e=!1){let t="not implemented";e&&(t="should be implemented on descendant"),super(t)}}});function ao(s){return!!s&&(typeof s=="object"||typeof s=="function")&&typeof s.then=="function"&&typeof s.catch=="function"}function ie(s){return new Promise(e=>{setTimeout(e,s)})}function re(s,e,t="Timeout Error"){Hs&&!Cp&&(Cp=!0,console.log("Debugger connected - timeouts were overridden to 10 minutes to improve debugging"));let r=new X(t);return e=Hs?Number(Hs)||6e5:e,Promise.race([s,ie(e).then(()=>{throw r})])}async function de(s,e,{concurrency:t}={}){if(t){Ap||(Ap=(await import("p-limit")).default);let r=Ap(t);return await Promise.all(Array.from(s,(n,o)=>r(()=>e(n,o))))}return await Promise.all(Array.from(s,e))}function ct(s){return new Promise((e,t)=>{s((r,n)=>r?t(r):e(n))})}var Cp,Ap,dc=T(()=>{"use strict";z();le();Cp=!1});var Ys,kp,TT,Xs,_p,vT,ET,Op,Lp=T(()=>{"use strict";Ys=E(require("lodash"));le();kp=require("dns");j();dc();TT=x("http-request-counters"),Xs=!1,_p=async()=>{if(Ie)return!0;let s=["www.google.com","www.facebook.com","www.microsoft.com","testim.io"];try{let e=Boolean(await de(s,t=>kp.promises.lookup(t)));return e||(Xs=!0),e}catch{return TT.error("network connectivity test failed"),Xs=!0,!1}},vT=Ys.throttle(_p,10*1e3),ET=60*1e3*15,Op=()=>{let s={call:new Map,success:new Map,fail:new Map};function e(n,o){let i=n.get(o)||0;n.set(o,i+1),setTimeout(()=>{let a=n.get(o)||1;n.set(o,a-1)},ET)}function t(n,o=n.name){return async function(...i){e(s.call,o);try{let a=await n.call(null,...i);return e(s.success,o),a}catch(a){throw e(s.fail,o),Xs||vT(),a}}}async function r(){if(Xs||!await _p())return!1;let n=Ys.sum([...s.fail.values()]),o=Ys.sum([...s.call.values()]);return n<o*.1}return r.counters=s,t.counters=s,t.isNetworkHealthy=r,t.didNetworkConnectivityTestFail=()=>Xs,t}});var kt={};$(kt,{deleteFullRes:()=>PT,deleteReq:()=>Qs,didNetworkConnectivityTestFail:()=>bc,download:()=>gc,get:()=>vr,getFullRes:()=>kT,getText:()=>AT,head:()=>_T,isNetworkHealthy:()=>yc,post:()=>Tt,postForm:()=>mc,postFullRes:()=>CT,put:()=>hc});function RT(){return global.caFileContent}function IT(s,e){let t=[];s.on("data",r=>{t.push(r)}),s.on("end",()=>{e(null,Buffer.concat(t))})}function xT(){return!wt.default.Request.prototype.proxy&&global.SuperagentProxy&&global.SuperagentProxy(wt.default),global.proxyUri}function Tr(s,e=!1){let t=RT();t&&s.ca(t);let r=!e&&xT();r&&s.proxy(r)}async function Np(s,e={},t={},r=ts){let n=wt.default.delete(s).send(e).timeout(r).set(t);return Tr(n),await n}async function Dp(s,e,t={},r=ts,n=0){let o=wt.default.post(s).send(e).timeout(r).set(t);Tr(o),n&&o.retry(n);try{return await o}catch(i){throw i.url=s,i.originalRequestTimeout=r,i.additionalSetHeaders=t,i}}async function fc(s,e,t={},r=ts,{isBinary:n=!1,skipProxy:o=!1}={}){let i=wt.default.get(s).query(e||{}).timeout(r).set(t);return n&&i.buffer(!0),Tr(i,o),await i}var wt,pc,We,ts,ST,Gt,Qs,PT,Tt,CT,mc,AT,vr,kT,_T,hc,gc,yc,bc,vt=T(()=>{"use strict";wt=E(require("superagent"));j();Lp();pc=x("http-request"),We=Op(),ts=parseInt(process.env.DEFAULT_REQUEST_TIMEOUT||"0",10)||3e4,ST=6e4;Gt=(s,e,t)=>{throw pc.error(s,{...t,error:e}),e};Qs=We(async(s,e,t,r)=>{try{let n=await Np(s,e,t,r);return n.type==="text/plain"?n.text:n.body}catch(n){return Gt("failed to delete request",n,{url:s})}});PT=We(Np),Tt=We(async({url:s,body:e,headers:t,timeout:r,retry:n})=>{try{let o=await Dp(s,e,t,r,n);return o.type==="text/plain"?o.text:o.body}catch(o){return Gt("failed to post request",o,{url:s})}});CT=We(Dp),mc=We(async(s,e,t,r={},n=ts)=>{let o=wt.default.post(s).type("form").timeout(n).set(r);o.field(e),Object.keys(t).forEach(i=>{o.attach(i,t[i].buffer,t[i].fileName)}),Tr(o);try{let i=await o;return i.type==="text/plain"?i.text:i.body}catch(i){return Gt("failed to post request",i,{url:s})}});AT=We(async(s,e,t)=>{try{return(await fc(s,e,t)).text}catch(r){return Gt("failed to getText request",r,{url:s,query:e})}}),vr=We(async(s,e,t,r,n)=>{try{return(await fc(s,e,t,r,n)).body}catch(o){return Gt("failed to get request",o,{url:s,query:e})}}),kT=We((s,e,t,r)=>fc(s,e,t,r)),_T=We(async s=>{let e=wt.default.head(s).timeout(ts);Tr(e);try{return await e}catch(t){return Gt("failed to head request",t,{url:s})}}),hc=We(async(s,e,t={},r=ts)=>{let n=wt.default.put(s).send(e).timeout(r).set(t);Tr(n);try{return(await n).body}catch(o){return Gt("failed to put request",o,{url:s})}}),gc=We(async s=>{pc.info("start to download",{url:s});let e=wt.default.get(s).timeout(ST).buffer(!0).parse(IT);Tr(e);try{let t=await e;return pc.info("finished to download",{url:s}),t}catch(t){return Gt("failed to download",t,{url:s})}}),yc=We.isNetworkHealthy,bc=We.didNetworkConnectivityTestFail});function lt(){let s;return require.main?(require.main.filename.includes("/src")||require.main.filename.includes("\\src")?s=_t.resolve(__dirname,"../../"):s=_t.resolve(__dirname,""),s):process.cwd()}function co(s,e){return Be(s)?e||_t.join(process.cwd(),s.replace(/^.*[\\/]/,"")):e||_t.basename(s)}function nt(){try{return require(`${__dirname}/package.json`).version}catch{return""}}function LT(){try{return wp.node}catch{return""}}async function uo(s,e,t=!0){let r=await Ge.promises.readdir(s,{withFileTypes:!0});await Ge.promises.mkdir(e,{recursive:t});for(let n of r){let o=_t.join(s,n.name),i=_t.join(e,n.name);n.isDirectory()?await uo(o,i):await Ge.promises.copyFile(o,i)}}async function ye(s){try{return await Ge.promises.access(s),!0}catch(e){if(e.code==="ENOENT")return!1;throw e}}var _t,Mp,Up,Ge,OT,Er,qe,Fp,lo,wc,Ye,Tc,vc=T(()=>{"use strict";_t=E(require("path"));Wa();io();Mp=E(require("p-retry")),Up=E(require("decompress")),Ge=require("fs"),OT=3;Er=async s=>{let e=await Promise.resolve().then(()=>(vt(),kt));return(0,Mp.default)(()=>e.download(s),{retries:OT})},qe=async(s,e)=>{let t=await Er(s);return Ge.promises.writeFile(e,t.body)},Fp=async(s,e)=>new Promise((t,r)=>{try{let n=(0,Ge.createWriteStream)(e);(0,Ge.createReadStream)(s).pipe(n),n.on("finish",()=>{n.close(()=>t())})}catch(n){r(n)}});lo=async(s,e)=>{let t=co(s,e);return Be(s)?qe(s,t):Fp(s,t)},wc=async s=>Be(s)?Er(s):Ge.promises.readFile(s),Ye=async(s,e)=>await(0,Up.default)(s,e),Tc=s=>(0,Ge.statSync)(s).size/1e6});var Lt={};$(Lt,{CLI_MODE:()=>Q,gridMessages:()=>rs,gridTypes:()=>ue,mobileWeb:()=>Ec,runnerTestStatus:()=>pe,sessionType:()=>Ot,socketEventTypes:()=>Qe,stepResult:()=>en,test:()=>Sc,testRunStatus:()=>Zs,testStatus:()=>Ve,timeoutMessages:()=>Ue});var Ue,Zs,pe,Ve,rs,Ec,Sc,Qe,Q,Ot,ue,en,ae=T(()=>{"use strict";Ue={GET_BROWSER_TIMEOUT_MSG:"get-browser-timeout",TEST_START_TIMEOUT_MSG:"test-start-timeout",TEST_COMPLETE_TIMEOUT_MSG:"test-complete-timeout"},Zs={COMPLETED:"completed",RUNNING:"running"},pe={PASSED:"PASSED",FAILED:"FAILED",ABORTED:"ABORTED",SKIPPED:"SKIPPED",QUEUED:"QUEUED"},Ve={DRAFT:"draft",EVALUATING:"evaluating",ACTIVE:"active",QUARANTINE:"quarantine"},rs={NOT_FOUND:"The specified grid is not available",UNKNOWN:"Test couldn't get browser - unknown error"},Ec={MOBILE_WEB_REMOTE_RUN_HEADER_SPACING:50},Sc={HIDDEN_PARAM:"TST_HIDDEN_PARAM"},Qe={TEST_RESULT_CREATED:"test-result-created",TEST_RESULT_UPDATED:"test-result-updated",REMOTE_STEP_SAVED:"remote-step-saved"},Q={EXTENSION:"extension",SELENIUM:"selenium",APPIUM:"appium"},Ot={CODELESS:"codeless",CODEFUL:"codeful"},ue={TESTIM_ENTERPRISE:"testimEnterprise",TESTIM:"testim",LAMBDATEST:"testimLambdaTest",DEVICE_FARM:"testimDF",HYBRID:"testimHybrid",BROWSERSTACK:"browserstack",SAUCELABS:"saucelabs",TESTIM_HEADSPIN:"testimHeadspin"},en={SETUP_TIMEOUT:"setup-timeout",NETWORK_ERROR:"network-error",GRID_ERROR:"grid-error",SELENIUM_ERROR:"selenium-error",BROWSER_CLOSED:"browser-closed"}});function Sr(s){return s.files.length>0?Ot.CODEFUL:Ot.CODELESS}function tn(s,e){var t,r,n;return((t=s.testConfigNames)!=null&&t.length||(r=s.testConfigIds)!=null&&r.length||s.testPlan.length||s.testPlanIds.length)&&!s.browser?[...new Set(e.map(o=>{var i;return(i=o.runConfig)==null?void 0:i.browserValue}))]:[(n=s.browser)==null?void 0:n.toLowerCase()]}function NT(){let{argv:s}=process;if(s.includes("--remoteRunId"))return{remoteRunId:s[s.indexOf("--remoteRunId")+1],projectId:s[s.indexOf("--project")+1],token:s[s.indexOf("--token")+1]}}var rn,jp,He,DT,MT,UT,FT,jT,BT,Rc,Bp=T(()=>{"use strict";ae();rn=s=>{var e,t;return Boolean(((e=s.testPlan)==null?void 0:e.length)||((t=s.testPlanIds)==null?void 0:t.length))},jp=s=>Boolean(s.resultId&&s.source==="remote-run"),He=(s,e)=>s.testStatus===Ve.QUARANTINE&&!jp(e)&&!e.runQuarantinedTests;DT=s=>Boolean(s.initCodimMode),MT=s=>Boolean(s.loginMode),UT=s=>Boolean(s.tunnelOnlyMode),FT=s=>Boolean(s.createPrefechedData),jT=s=>Boolean(s.installLazyDepsMode),BT=s=>Boolean(s.agentMode),Rc=(s,e)=>{s.forEach((t,r)=>{e.has(t)&&(s[r]=`--${t}`)})}});function po(s){let e=Ic.default.duration(s);return`${e.hours()}:${e.minutes()}:${e.seconds()}.${e.milliseconds()}`}function xc(s){return Ic.default.duration(s).asSeconds()}var Ic,$p=T(()=>{"use strict";Ic=E(require("moment"))});var H={};$(H,{TESTIM_BROWSER_DIR:()=>Nt,TimeoutError:()=>X,buildBasicHeader:()=>$a,calcPercentile:()=>ho,copy:()=>Fp,copyDir:()=>uo,delay:()=>ie,doesPathExist:()=>ye,download:()=>Er,downloadAndSave:()=>qe,extractElementId:()=>ut,getArgsOnRemoteRunFailure:()=>NT,getBrowserInfo:()=>nn,getCdpAddressForHost:()=>xr,getCliLocation:()=>lt,getDuration:()=>po,getDurationSec:()=>xc,getEnginesVersion:()=>LT,getEnvironmentGitBranch:()=>Ir,getLocalFileSizeInMB:()=>Tc,getPlanType:()=>fo,getRunConfigByBrowserName:()=>on,getRunnerVersion:()=>nt,getSessionType:()=>Sr,getSource:()=>lo,getSourceAsBuffer:()=>wc,getSourcePath:()=>co,getTestUrl:()=>st,getUniqBrowsers:()=>tn,groupTestsByRetries:()=>Cc,guid:()=>K,hasTestPlanFlag:()=>rn,isAgentMode:()=>BT,isCreatePrefetchedDataMode:()=>FT,isInitCodimMode:()=>DT,isInstallLazyDepsMode:()=>jT,isLoginMode:()=>MT,isPromise:()=>ao,isQuarantineAndNotRemoteRun:()=>He,isRemoteRun:()=>jp,isTunnelOnlyMode:()=>UT,isURL:()=>Be,promiseFromCallback:()=>ct,promiseMap:()=>de,promiseTimeout:()=>re,removePropertyFromObject:()=>mo,replaceArgsWithNoDashes:()=>Rc,unzipFile:()=>Ye});function nn(s){return s=s.toLowerCase(),Pc.find(e=>e.browserValue===s)}function on(s,e,t){s=s.toLowerCase();let r=Pc.find(o=>o.browserName.toLowerCase()===s||s.includes(o.synonyms))||Pc[0],n=sn.find(o=>o.osName==="Windows 10");return e&&(e.platform?n=sn.find(o=>o.sl.platform===e.platform):e.platformName&&(n=sn.find(o=>o.sl.platformName===e.platformName))),t&&(t.os_version?n=sn.find(o=>o.bs.os_version===t.os_version):t.platform&&(n=sn.find(o=>o.bs.platform===t.platform))),Rr.merge(r,n)}function Ir(){return process.env.GIT_BRANCH||process.env.CIRCLE_BRANCH||process.env.TRAVIS_BRANCH||process.env.CI_BRANCH}function mo(s,e,t){for(let r in s)Object.prototype.hasOwnProperty.call(s,r)&&(t(r,e)?delete s[r]:typeof s[r]=="object"&&mo(s[r],e,t))}function ut(s){return s.ELEMENT||s[$t]}function fo(s){s||(s={});let e=Date.now(),t=s.expireAt||s.expireAT;return s.plan!=="free"?"pro":t?t<e?"free":"trial":"free"}function Cc(s=[]){return Rr.chain(s).groupBy(e=>e.originalTestResultId||e.resultId).values().reduce((e,t)=>{if(!t)return e;if(t.length===1)return e.push(t[0]),e;let r=Rr.orderBy(t,o=>typeof o.retryCount=="number"?o.retryCount:1),n=Rr.chain(r).last().cloneDeep().value();return n&&(n.retryTestResults=r,e.push(n)),e},[]).compact().value()}async function xr(s,e){let t=await Promise.resolve().then(()=>(vt(),kt));try{return(await t.get(`http://${s}/json/version`,void 0,void 0,e)).webSocketDebuggerUrl}catch{throw new Error("unable to connect to devtools server")}}var Wp,Rr,Gp,$T,Nt,sn,Pc,ho,F=T(()=>{"use strict";Wp=E(require("os")),Rr=E(require("lodash")),Gp=E(require("path"));Yr();vc();Bp();$p();Wa();dc();$T=Wp.homedir(),Nt=Gp.join($T,".testim-browser-profile"),sn=[{osName:"Linux",bs:{os:"LINUX"},sl:{platform:"Linux"}},{osName:"Windows 10",bs:{os:"WINDOWS",os_version:"10"},sl:{platform:"Windows 10"}},{osName:"Windows 8",bs:{os:"WINDOWS",os_version:"8"},sl:{platform:"Windows 8"}},{osName:"Windows 8.1",bs:{os:"WINDOWS",os_version:"8.1"},sl:{platform:"Windows 8.1"}},{osName:"Windows 7",bs:{os:"WINDOWS",os_version:"7"},sl:{platform:"Windows 7"}},{osName:"Windows XP",bs:{os:"WINDOWS",os_version:"XP"},sl:{platform:"Windows XP"}},{osName:"macOS Big Sur",bs:{os:"OS X",os_version:"Big Sur",safari_version:"14"},sl:{platform:"macOS 11",safari_version:"14"}},{osName:"macOS Catalina",bs:{os:"OS X",os_version:"Catalina",safari_version:"13"},sl:{platform:"macOS 10.15",safari_version:"13"}},{osName:"macOS Mojave",bs:{os:"OS X",os_version:"Mojave",safari_version:"12"},sl:{platform:"macOS 10.14",safari_version:"12"}},{osName:"macOS High Sierra",bs:{os:"OS X",os_version:"High Sierra",safari_version:"11"},sl:{platform:"macOS 10.13",safari_version:"11"}},{osName:"macOS Sierra",bs:{os:"OS X",os_version:"Sierra",safari_version:"10"},sl:{platform:"macOS 10.12",safari_version:"10.0"}},{osName:"OS X El Capitan",bs:{os:"OS X",os_version:"El Capitan",safari_version:"9.1"},sl:{platform:"OS X 10.11",safari_version:"9.0"}},{osName:"OS X Yosemite",bs:{os:"OS X",os_version:"Yosemite",safari_version:"8"},sl:{platform:"OS X 10.10",safari_version:"8.0"}},{osName:"OS X Mavericks",bs:{os:"OS X",os_version:"Mavericks",safari_version:"7.1"},sl:{platform:"OS X 10.9",safari_version:"7.0"}},{osName:"OS X Mountain Lion",bs:{os:"OS X",os_version:"Mountain Lion",safari_version:"6.2"},sl:{platform:"OS X 10.8",safari_version:"6.0"}},{osName:"OS X Lion",bs:{os:"OS X",os_version:"Lion",safari_version:"6"},sl:{}},{osName:"OS X Snow Leopard",bs:{os:"OS X",os_version:"Snow Leopard",safari_version:"5.1"},sl:{}},{osName:"iOS",bs:{platform:"MAC"},sl:{platformName:"iOS",appiumVersion:"1.6.4"}},{osName:"Android",bs:{platform:"ANDROID"},sl:{platformName:"Android",appiumVersion:"1.6.4"}}],Pc=[{browserName:"Chrome",bs:{browser:"Chrome",browser_version:"94"},sl:{browserName:"chrome",version:"94.0"},browserValue:"chrome"},{browserName:"Firefox",bs:{browser:"Firefox",browser_version:"89"},sl:{browserName:"firefox",version:"89.0"},browserValue:"firefox"},{browserName:"Safari",bs:{browser:"Safari"},sl:{browserName:"safari"},browserValue:"safari"},{browserName:"Edge",bs:{browser:"Edge",browser_version:"18"},sl:{browserName:"MicrosoftEdge",version:"18.17763"},browserValue:"edge",eol:!0},{browserName:"Edge Chromium",bs:{browser:"Edge",browser_version:"94"},sl:{browserName:"MicrosoftEdge",version:"94"},synonyms:["edge-chromium"],browserValue:"edge-chromium",seleniumName:"MicrosoftEdge"},{browserName:"Internet Explorer 11",bs:{browser:"IE",browser_version:"11"},sl:{browserName:"internet explorer",version:"11.0"},synonyms:["ie11"],browserValue:"ie11",eol:!0},{browserName:"Browser",bs:{},sl:{browserName:"Browser"},browserValue:"browser"},{browserName:"Android",bs:{browserName:"android"},sl:{},browserValue:"android"},{browserName:"iPad",bs:{browserName:"iPad"},sl:{},browserValue:"ipad"},{browserName:"iPhone",bs:{browserName:"iPhone"},sl:{},browserValue:"iphone"}];ho=(s,e)=>{if(s.length===0)return 0;if(typeof e!="number")throw new TypeError("p must be a number");if(s=[...s].sort((r,n)=>r-n),e<=0)return s[0];if(e>=100)return s.at(-1);let t=Math.ceil(s.length*(e/100))-1;return s[t]}});var Ac={};$(Ac,{$schema:()=>WT,default:()=>zT,definitions:()=>GT,properties:()=>HT,required:()=>VT,type:()=>qT});var WT,GT,qT,VT,HT,zT,qp=T(()=>{WT="http://json-schema.org/draft-07/schema#",GT={request:{type:"object",required:["url"],additionalProperties:!1,properties:{url:{type:"string"},method:{type:"string",pattern:"^GET$|^HEAD$|^POST$|^PUT$|^DELETE$|^CONNECT$|^OPTIONS$|^TRACE$|^PATCH$"}}},header:{type:"object",required:["name","value"],additionalProperties:!1,properties:{name:{type:"string"},value:{type:"string"}}},cookie:{type:"object",required:["name","value"],additionalProperties:!1,properties:{name:{type:"string"},value:{type:"string"},path:{type:"string"},domain:{type:"string"},expires:{type:"string",format:"date-time"},httpOnly:{type:"boolean"},secure:{type:"boolean"}}},response:{type:"object",required:["status"],additionalProperties:!1,properties:{status:{type:"integer",minimum:100,exclusiveMaximum:600},headers:{type:"array",items:{$ref:"#/definitions/header"}},cookies:{type:"array",items:{$ref:"#/definitions/cookie"}},content:{type:"object",required:["text"],additionalProperties:!1,properties:{text:{type:"string"}}}}},redirectResponse:{type:"object",required:["redirectUrl"],additionalProperties:!1,properties:{redirectUrl:{type:"string"}}},passthroughResponse:{type:"object",required:["passthrough"],additionalProperties:!1,properties:{passthrough:{type:"boolean",enum:[!0]}}},entry:{type:"object",required:["request","response"],additionalProperties:!1,properties:{request:{$ref:"#/definitions/request"},response:{oneOf:[{$ref:"#/definitions/response"},{$ref:"#/definitions/redirectResponse"},{$ref:"#/definitions/passthroughResponse"}]},maxHits:{type:"integer",minimum:1}}}},qT="object",VT=["entries"],HT={version:{type:"string",enum:["1.2","1.2.0"]},creator:{type:"string"},entries:{type:"array",items:{$ref:"#/definitions/entry"}}},zT={$schema:WT,definitions:GT,type:qT,required:VT,properties:HT}});async function Yp(){try{return await re(go.promises.readFile(To()).then(async s=>{let e=await Xp;return XT(e,s)}),3e4)}catch{return{}}}function XT(s,e){let t=e.slice(0,16),r=e.slice(16),n=Buffer.from(s),o=ns.createDecipheriv("aes-256-cbc",Buffer.concat([n,Buffer.alloc(32)],32),t),i=o.update(r);return JSON.parse(Buffer.concat([i,o.final()]))}function dt(s,e,t=KT,r=void 0){return async()=>{if(!zp)return await s();let n=e;r&&(e+=JSON.stringify(r));let o=await YT(e);if(o)return an.debug("cache hit:",{fnName:e}),o;if(an.debug("cache miss:",{fnName:e}),!Kp)throw new Error(`Attempted to rebuild cache for ${n}. cache miss is not allowed with current run configuration`);let i=await s();return i&&await QT(e,i,t),i}}async function YT(s){let t=(await vo)[s];if(!t)return;let{value:r,expiry:n}=t;if(!(n<Date.now())&&r)return r}async function QT(s,e,t){if(kc)throw an.error("calling set after waitForSave is not allowed",{key:s,ttl:t}),new Error("calling set after waitForSave is not allowed");try{let r=await vo;r[s]={value:e,expiry:Date.now()+t},Jp=new Promise(n=>{wo=n}),JT(r)}catch{an.error("failed updating cache")}}async function Qp(){let s=await vo;Object.keys(s).forEach(e=>{delete s[e]})}function Zp(s){zp=s}function ZT(s=!0){Kp=s}async function em(){try{return kc=!0,await Jp}finally{kc=!1}}function tm(s){bo=s,vo=Yp()}var go,yo,ns,Vp,an,bo,Hp,wo,zp,Kp,kc,Jp,Xp,KT,To,vo,JT,rm,sm,yx,nm,qt=T(()=>{"use strict";go=E(require("fs")),yo=E(require("path")),ns=E(require("crypto"));F();Vp=require("lodash");j();an=x("local cache"),bo=yo.resolve(lt(),"testim-cache"),zp=!0,Kp=!0,kc=!1,Jp=new Promise(s=>{wo=s}),Xp=new Promise(s=>{Hp=s}),KT=1e3*60*60*3,To=()=>yo.resolve(yo.resolve(bo,"testim.cache"));vo=Yp(),JT=(0,Vp.debounce)(async s=>{let e;try{let t=await Xp,r=ns.randomBytes(16),n=JSON.stringify(s),o=Buffer.from(t),i=ns.createCipheriv("aes-256-cbc",Buffer.concat([o,Buffer.alloc(32)],32),r),a=Buffer.concat([r,i.update(n),i.final()]);await ye(bo)||await go.promises.mkdir(bo,{recursive:!0}),await go.promises.writeFile(To(),a)}catch(t){an.error("failed saving cache",{err:t}),e=t}wo(e?{success:!1,error:e}:{success:!0})},200);rm=Hp,sm=Zp.bind(void 0,!1),yx=Zp.bind(void 0,!0),nm=()=>ZT(!1)});function Eo(){return{cliLocation:lt(),userInfo:os.userInfo(),platform:os.platform(),release:os.release()}}var os,_c=T(()=>{"use strict";os=E(require("os"));F()});function ev(s){try{return So.resolve(So.dirname(require.resolve(`${s}/package.json`)),require(`${s}/package.json`).main||"")}catch(e){if(e.code==="ERR_PACKAGE_PATH_NOT_EXPORTED")return require.resolve(s);throw e}}function Vt(s){let e=ev(s);return require(e)}var So,cn=T(()=>{"use strict";So=E(require("path"))});async function cm(s){return(await im(`npm view ${s} version`)).stdout.trim()}function Lc(s){try{return Vt(s)}catch{return!1}}function lm(s,e){return require(is.join(s,`./node_modules/${e}/package.json`)).version}async function Io(s,e,t){function r(c){let d=/EACCES[^']+'(.+)'/.exec(c.stderr);return d===null?!1:d[1]}function n(c){return/The "to" argument must be of type string./.exec(c.stderr)}let o=is.join(s,"npm-shrinkwrap.json"),i=is.join(s,"npm-shrinkwrap-dummy.json"),a=!1;try{try{await ye(o)&&(await Oc.promises.rename(o,i),a=!0)}catch{}return await im(`npm i ${e} --no-save --no-prune --prefer-offline --no-audit --progress=false`,{...t,cwd:s}).catch(c=>{let l=r(c),d=n(c);throw l||d?(am.info("Failed to install package due to insufficient write access",{...Eo(),package:e,path:l||s}),console.error(`
4
4
 
5
5
  Testim failed installing the package ${e} due to insufficient permissions.
6
6
  This is probably due to an installation of @testim/testim-cli with sudo, and running it without sudo.
7
- Testim had missing write access to ${u||s}
7
+ Testim had missing write access to ${l||s}
8
8
 
9
- `),new br(u||s)):c})}finally{if(a)try{await Oc.promises.rename(i,o)}catch{}}}function um(s,e,t,r){return new Promise((n,o)=>{let i=t?["--proxy",t]:[],a=t?{env:Object.assign(process.env,{HTTP_PROXY:t,HTTPS_PROXY:t})}:{},c="",u="",d="--no-save --no-package-lock --no-prune --prefer-offline --no-audit --progress=false".split(" "),m=(0,So.spawn)("node",[rv,"i","--prefix",s,...d,...e,...i],a);m.stderr.pipe(process.stderr),m.stdout.pipe(process.stdout),m.stdout.on("data",p=>{c+=p}),m.stderr.on("data",p=>{u+=p}),m.on("close",p=>{var f;if(p){let h;try{let g=(f=/npm ERR! 404 {2}'(.+)' is not in the npm registry/gm.exec(u))==null?void 0:f[1];h=`404 Not Found - GET https://registry.npmjs.org/${g==null?void 0:g.split("@")[0]} - Not found`}catch{h=`Npm Install closed with exit code ${p}
10
- stdout: ${c} stderr: ${u}`}am.debug(`Npm Install closed with exit code ${p}`,{message:h}),o(new at(h))}else n(c)}),setTimeout(()=>{try{m.kill()}finally{o(new X)}},r)})}var Oc,is,om,So,im,am,rv,un=T(()=>{"use strict";Oc=E(require("fs")),is=E(require("path"));F();om=require("util"),So=require("child_process");j();_c();ln();z();im=(0,om.promisify)(So.exec),am=x("cli-service");rv=is.resolve(require.resolve("npm").replace("index.js",""),"bin","npm-cli.js")});var hm={};$(hm,{install:()=>nv,isReady:()=>iv,start:()=>ov});var dm,pm,mm,fm,Nc,sv,nv,ov,iv,gm=T(()=>{"use strict";dm=E(require("fkill")),pm=E(require("p-retry"));un();vt();F();ln();mm="chromedriver",fm=9515,Nc=`http://localhost:${fm}/wd/hub`,sv=["--url-base=/wd/hub","--disable-build-check","--whitelisted-ips=0.0.0.0","--log-level=OFF"],nv=async()=>{await Ro(lt(),`${mm} --detect_chromedriver_version`)},ov=async()=>{process.env.NODE_OPTIONS="",await(0,dm.default)(`:${fm}`,{silent:!0}),await Vt(mm).start(sv,!0)},iv=async({chromeBinaryLocation:s})=>{await(0,pm.default)(async()=>{var n;let e=await Tr(`${Nc}/status`);if(!((n=e==null?void 0:e.value)!=null&&n.ready))throw new Error("status failed");let t={...s&&{binary:s}},r=await Tt({url:`${Nc}/session`,body:{desiredCapabilities:{browserName:"chrome",chromeOptions:t}},headers:{"Content-Type":"application/json"}});if(!r||r.status!==0||!r.sessionId)throw new Error("create session failed");await Zs(`${Nc}/session/${r.sessionId}`)},{retries:99,factor:1,minTimeout:30})}});var dn={};$(dn,{getSessionPlayerFolder:()=>Fc,prepareChromeDriver:()=>Cr,prepareCustomExtension:()=>Mc,prepareExtension:()=>Uc,preparePlayer:()=>Pr});async function Mc(s,e=!1){if(!s)return;if(Be(s)){let n=as.join(process.cwd(),s.replace(/^.*[\\/]/,""));if(await av(s)>Dc&&!e)throw new R(ym);return await qe(s,n),n}let t=as.resolve(s);if(!wm.existsSync(t))throw new R(`Failed to find custom extension in location: ${t}`);if(wc(t)>Dc&&!e)throw new R(ym);return t}async function av(s){let e=(vt(),G(kt));try{let r=(await e.head(s)).headers["content-length"];return(r?parseInt(r,10):0)/1e6}catch(t){throw xo.warn("failed to download custom extension",{err:t}),new R(`Failed to download custom extension from location: ${s}`)}}function Uc(s){xo.info("prepare extension",{locations:s});let e=s.map(t=>({location:t,path:co(t)}));return dt(()=>de(e,({location:t,path:r})=>lo(t,r)),"prepareExtension",vm,e)()}async function Cr(s={},e={},t=!1){let n=require("ora")("Starting Driver").start(),o=await Promise.resolve().then(()=>(gm(),hm));try{await o.install(),await o.start(),t||await o.isReady(e),n.succeed("Chrome Driver initiated successfully")}catch(i){let a="Failed to initiate Chrome Driver";throw i instanceof br||(xo.error(a,{...s,...vo(),error:(0,Tm.serializeError)(i)}),console.log(`
9
+ `),new wr(l||s)):c})}finally{if(a)try{await Oc.promises.rename(i,o)}catch{}}}function um(s,e,t,r){return new Promise((n,o)=>{let i=t?["--proxy",t]:[],a=t?{env:Object.assign(process.env,{HTTP_PROXY:t,HTTPS_PROXY:t})}:{},c="",l="",d="--no-save --no-package-lock --no-prune --prefer-offline --no-audit --progress=false".split(" "),m=(0,Ro.spawn)("node",[tv,"i","--prefix",s,...d,...e,...i],a);m.stderr.pipe(process.stderr),m.stdout.pipe(process.stdout),m.stdout.on("data",p=>{c+=p}),m.stderr.on("data",p=>{l+=p}),m.on("close",p=>{var f;if(p){let h;try{let g=(f=/npm ERR! 404 {2}'(.+)' is not in the npm registry/gm.exec(l))==null?void 0:f[1];h=`404 Not Found - GET https://registry.npmjs.org/${g==null?void 0:g.split("@")[0]} - Not found`}catch{h=`Npm Install closed with exit code ${p}
10
+ stdout: ${c} stderr: ${l}`}am.debug(`Npm Install closed with exit code ${p}`,{message:h}),o(new at(h))}else n(c)}),setTimeout(()=>{try{m.kill()}finally{o(new X)}},r)})}var Oc,is,om,Ro,im,am,tv,ln=T(()=>{"use strict";Oc=E(require("fs")),is=E(require("path"));F();om=require("util"),Ro=require("child_process");j();_c();cn();z();im=(0,om.promisify)(Ro.exec),am=x("cli-service");tv=is.resolve(require.resolve("npm").replace("index.js",""),"bin","npm-cli.js")});var hm={};$(hm,{install:()=>sv,isReady:()=>ov,start:()=>nv});var dm,pm,mm,fm,Nc,rv,sv,nv,ov,gm=T(()=>{"use strict";dm=E(require("fkill")),pm=E(require("p-retry"));ln();vt();F();cn();mm="chromedriver",fm=9515,Nc=`http://localhost:${fm}/wd/hub`,rv=["--url-base=/wd/hub","--disable-build-check","--whitelisted-ips=0.0.0.0","--log-level=OFF"],sv=async()=>{await Io(lt(),`${mm} --detect_chromedriver_version`)},nv=async()=>{process.env.NODE_OPTIONS="",await(0,dm.default)(`:${fm}`,{silent:!0}),await Vt(mm).start(rv,!0)},ov=async({chromeBinaryLocation:s})=>{await(0,pm.default)(async()=>{var n;let e=await vr(`${Nc}/status`);if(!((n=e==null?void 0:e.value)!=null&&n.ready))throw new Error("status failed");let t={...s&&{binary:s}},r=await Tt({url:`${Nc}/session`,body:{desiredCapabilities:{browserName:"chrome",chromeOptions:t}},headers:{"Content-Type":"application/json"}});if(!r||r.status!==0||!r.sessionId)throw new Error("create session failed");await Qs(`${Nc}/session/${r.sessionId}`)},{retries:99,factor:1,minTimeout:30})}});var un={};$(un,{getSessionPlayerFolder:()=>Fc,prepareChromeDriver:()=>Cr,prepareCustomExtension:()=>Mc,prepareExtension:()=>Uc,preparePlayer:()=>Ar});async function Mc(s,e=!1){if(!s)return;if(Be(s)){let n=as.join(process.cwd(),s.replace(/^.*[\\/]/,""));if(await iv(s)>Dc&&!e)throw new R(ym);return await qe(s,n),n}let t=as.resolve(s);if(!wm.existsSync(t))throw new R(`Failed to find custom extension in location: ${t}`);if(Tc(t)>Dc&&!e)throw new R(ym);return t}async function iv(s){let e=(vt(),G(kt));try{let r=(await e.head(s)).headers["content-length"];return(r?parseInt(r,10):0)/1e6}catch(t){throw Po.warn("failed to download custom extension",{err:t}),new R(`Failed to download custom extension from location: ${s}`)}}function Uc(s){Po.info("prepare extension",{locations:s});let e=s.map(t=>({location:t,path:co(t)}));return dt(()=>de(e,({location:t,path:r})=>lo(t,r)),"prepareExtension",vm,e)()}async function Cr(s={},e={},t=!1){let n=require("ora")("Starting Driver").start(),o=await Promise.resolve().then(()=>(gm(),hm));try{await o.install(),await o.start(),t||await o.isReady(e),n.succeed("Chrome Driver initiated successfully")}catch(i){let a="Failed to initiate Chrome Driver";throw i instanceof wr||(Po.error(a,{...s,...Eo(),error:(0,Tm.serializeError)(i)}),console.log(`
11
11
  1. If you don't have Chrome, please install it from https://www.google.com/chrome.
12
12
  2. If Chrome is installed, please verify it's binary directory:
13
13
  - installed where chromedriver expects it (see https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver#requirements).
14
14
  - exists in your PATH environment variables.
15
15
  3. Try adding --chrome-binary-location flag to Testim CLI specifying the exact location of chrome binary in your computer (e.g on Windows "C:/Program Files/Google/Chrome/Application/chrome.exe").
16
- 4. You can always use a standalone Selenium grid and providing it's details with the --host and --port flags (see https://www.npmjs.com/package/selenium-standalone)`)),n.fail(a),i}}async function cv(){let s=`${pr}/extension/sessionPlayer_LATEST_RELEASE`;return(await vr(s)).body.toString("utf8")}async function lv(s,e){if(!Be(s)||Be(s)&&e||Ie)return s;let t=await cv();return`${s}-${t}`}function Fc(){let s=lt();return as.resolve(s,"testim-bin")}function uv(){let s=Fc();return as.resolve(s,"sessionPlayer.zip")}async function Em(s,e,t=!1){try{return await lo(s,e),await Ye(e,Fc())}catch(r){if(t)throw r;return await Em(s,e,!0)}}async function Pr(s,e){xo.info("prepare player",{location:s,canary:e});let t=uv();return dt(async()=>{let r=await lv(s,e);return await Em(r,t),{}},"preparePlayer",vm,[s,e,t])()}var bm,wm,as,Tm,xo,vm,Dc,ym,cs=T(()=>{"use strict";bm=E(require("ms")),wm=E(require("fs")),as=E(require("path"));le();qt();Tm=require("serialize-error");j();_c();z();F();xo=x("prepare runner and testim start"),vm=(0,bm.default)("0.5 day"),Dc=16,ym=`The size of the custom extension is more than ${Dc}MB`});function dv(){let s=pn.type().toLowerCase();return s==="darwin"?pn.arch()==="arm"?"mac_arm":"mac":s==="windows_nt"?pn.arch()==="x64"?"win64":"win32":"linux"}async function Po(){let s=dv(),e="https://storage.googleapis.com/chromium-browser-snapshots",t={linux:"Linux_x64",mac:"Mac",mac_arm:"Mac_Arm",win32:"Win",win64:"Win_x64"};if(!(s in t))throw new R(`Unsupported platform: ${s}`);let r=parseInt(mn,10)>591479?"chrome-win":"chrome-win32",n={linux:"chrome-linux",mac:"chrome-mac",mac_arm:"chrome-mac",win32:r,win64:r},o={linux:"chrome",mac:"Chromium.app/Contents/MacOS/Chromium",mac_arm:"Chromium.app/Contents/MacOS/Chromium",win32:"chrome.exe",win64:"chrome.exe"},i=`${e}/${t[s]}/${mn}/${n[s]}.zip`,a=Co.join(jc,n[s]),c=`${a}.zip`,u=Co.join(a,o[s]);if(await ye(u))return u;if(!await ye(c)){let m=(0,Bc.default)("Downloading Chromium").start();try{await Sm.promises.mkdir(jc),await qe(i,c)}catch(p){let f=`Failed to download Chromium: ${p.message}`;throw m.fail(f),new Error(f)}m.succeed()}let d=(0,Bc.default)("Extracting Chromium").start();try{await Ye(c,jc)}catch(m){let p=`Failed to extract Chromium: ${m.message}`;throw d.fail(p),new Error(p)}return d.succeed(),u}var Sm,pn,Co,Bc,mn,jc,$c=T(()=>{"use strict";Sm=E(require("fs")),pn=E(require("os")),Co=E(require("path")),Bc=E(require("ora"));z();F();mn="1000968",jc=Co.join(Nt,`chrome-${mn}`)});async function Im(s,e){return ko=s,Vc=e,await Wc()}function xm(s,e,t){Ze=s.token,ko=e,Vc=t,hn=Hc(Ze),Ao=s.refreshToken,Gc=s.ngrokToken,qc=s.isNgrokWhitelisted}function pv(s=ko,e=Vc){return dt(()=>(fn.info("request to get cli token from server"),Tt({url:`${he}/auth/token`,body:{projectId:s,token:e}})),"getTokenV3",Rm*10,{projectId:s,token:e})()}async function mv(){return fn.info("request to refresh JWT cli token from server"),Ze=(await Tt({url:`${he}/auth/refreshToken`,body:{token:Ze,refreshToken:Ao}})).token,hn=Hc(Ze),Ze}async function Wc(){try{let s=await pv();return fn.info("successfully get cli token from server"),Ze=s.token,hn=Hc(Ze),Ao=s.refreshToken,Gc=s.ngrokToken,qc=s.isNgrokWhitelisted,Ze}catch(s){throw s.message.includes("Unauthorized")?new R("Error trying to retrieve CLI token. Your CLI token and project might not match. Please make sure to pass `--project` and `--token` that match to each other or make sure they match in your ~/.testim file."):(fn.error(`While trying to retrieve CLI token. caught error: ${s}`,{projectId:ko}),new R(`While trying to retrieve CLI token, caught error: ${s}`))}}function Hc(s){return require("jsonwebtoken").decode(s).exp*1e3}async function Ht(){if(!hn)return Wc();if(hn<Date.now()+4*Rm)try{return await mv()}catch(s){return fn.error("failed to refresh token, executing fallback",s),Wc()}return Ze}function _o(){return Ao}function Dt(){return Ze?{uid:require("jsonwebtoken").decode(Ze).id,ngrokToken:Gc,isNgrokWhitelisted:qc}:{}}var fn,Ze,hn,Ao,Gc,qc,ko,Vc,Rm,Et=T(()=>{"use strict";le();vt();qt();z();j();fn=x("testim-custom-token"),ko=null,Vc=null,Rm=5*60*1e3});var Cm={};$(Cm,{isCi:()=>ls});var ls,Oo=T(()=>{"use strict";ls=Boolean(process.env.CI||process.env.CONTINUOUS_INTEGRATION||process.env.BUILD_NUMBER||process.env.RUN_ID||!1)});var ve={};$(ve,{addTestRetry:()=>gl,clearTestResult:()=>ml,deleteCloudflareTunnel:()=>Tl,fetchLambdatestConfig:()=>ul,forceUpdateCloudflareTunnelRoutes:()=>wl,getAllGrids:()=>ll,getAppDetails:()=>tl,getApplitoolsIntegrationData:()=>yl,getCloudflareTunnel:()=>bl,getEditorUrl:()=>wv,getGridById:()=>Do,getGridByName:()=>al,getHybridGridProvider:()=>il,getLabFeaturesByProjectId:()=>dl,getMobileDevicesFromGrid:()=>El,getRealData:()=>bn,getS3Artifact:()=>yn,getSuiteTestList:()=>el,getTestPlan:()=>bv,getTestPlanTestList:()=>Zc,getTestResults:()=>Ar,getUsageForCurrentBillingPeriod:()=>rl,initializeUserWithAuth:()=>cl,isTestResultCompleted:()=>sl,keepAliveGrid:()=>nl,loadSfdcCredential:()=>Kc,loadTest:()=>Jc,releaseGridSlot:()=>ol,reportExecutionFinished:()=>No,reportExecutionStarted:()=>Qc,saveRemoteStep:()=>fl,saveTestPlanResult:()=>Xc,updateExecutionTests:()=>Yc,updateRemoteRunFailure:()=>vl,updateTestDataArtifact:()=>Mo,updateTestResult:()=>pl,updateTestStatus:()=>us,uploadRunDataArtifact:()=>hl});async function gn(){let s=await Ht();if(!s)throw new Error("Failed to get token from server");return{Authorization:`Bearer ${s}`}}async function et({url:s,body:e,headers:t={},timeout:r,retry:n}){let o=await gn(),i=Object.assign({},t,o);return Tt({url:`${he}${s||""}`,body:e,headers:i,timeout:r,retry:n})}async function gv(s,e,t,r={},n=void 0){let o=await gn(),i=Object.assign({},r,o);return await pc(`${he}${s||""}`,e,t,i,n)}async function Lo(s,e){let t=await gn();return await fc(`${he}${s||""}`,e,t)}async function yv(s,e){let t=await gn();return await Zs(`${he}${s||""}`,e,t)}async function Pe(s,e,t,r){let n=await gn();return await Tr(`${he}${s||""}`,e||void 0,n,r,t)}function yn(s,e){return(0,oe.default)(()=>Pe(`/storage${s}`,null,{isBinary:!0},e),{retries:ne})}async function bv(s,e){let t=n=>n==null?[]:typeof n=="string"&&JSON.parse(n)||n;return(await(0,oe.default)(()=>Pe("/testPlan",{projectId:s,name:e.join(",")}),{retries:ne})).map(({testConfigIds:n,beforeAllLabels:o,testLabels:i,afterAllLabels:a,...c})=>Object.assign(c,{testConfigIds:t(n),beforeAllLabels:t(o),testLabels:t(i),afterAllLabels:t(a)}))}async function Kc({branch:s,projectId:e}){let t=await(0,oe.default)(()=>Pe(`/branch/branchData/${s}`,{projectId:e}),{retries:ne});return t==null?void 0:t.sfdcCredential}function Jc({testId:s,branch:e,projectId:t,skipSharedSteps:r=!1,useBranchMap:n=!0}){return(0,oe.default)(()=>Pe(`/test/${s}`,{projectId:t,branch:e,skipSharedSteps:r,useBranchMap:n}),{retries:ne})}function Xc(s,e,t){return(0,oe.default)(()=>et({url:"/testPlan/result",body:{projectId:s,testPlanId:e,result:t}}),{retries:ne})}function us(s,e,t,r,n,o,i=ne){return(0,oe.default)(()=>Lo("/result/run/test",{runId:e,testId:t,resultId:r,status:n,projectId:s,runnerVersion:fv,...o}),{retries:i})}function Yc(s,e,t,r,n,o,i,a){return(0,oe.default)(()=>Lo("/result/run/tests",{runId:s,runnerStatuses:e,status:t,reason:r,success:n,startTime:o,endTime:i,projectId:a}),{retries:ne})}async function Qc({executionId:s,projectId:e,labels:t,startTime:r,executions:n,config:o,resultLabels:i,remoteRunId:a,localRunUserId:c,isLocalRun:u,intersections:d}){let{isCi:m}=await Promise.resolve().then(()=>(Oo(),Cm));return et({timeout:9e4,url:"/result/run",body:{runId:s,projectId:e,labels:t,startTime:r,execution:n,status:"RUNNING",config:o,resultLabels:i,remoteRunId:a,intersections:d,metadata:{isCiRun:m,localRunUserId:c,isLocalRun:u}},retry:3})}function No(s,e,t,r,n={},o=void 0,i=void 0){let a=Date.now();return(0,oe.default)(()=>Lo("/result/run",{runId:e,projectId:t,endTime:a,status:s,success:r,tmsOptions:n,remoteRunId:o,resultExtraData:i}),{retries:ne})}async function Zc(s,e,t,r,n){return(0,oe.default)(()=>et({url:"/testPlan/list",body:{projectId:s,names:e,planIds:t,branch:r,intersections:n},timeout:12e4}),{retries:ne})}function el({projectId:s,labels:e,testIds:t,testNames:r,testConfigNames:n,suiteNames:o,suiteIds:i,branch:a,rerunFailedByRunId:c,testConfigIds:u,intersections:d}){return(0,oe.default)(()=>et({url:"/suite/v2/list",body:{projectId:s,labels:e,testIds:t,testNames:r,testConfigNames:n,suiteNames:o,suiteIds:i,branch:a,rerunFailedByRunId:c,testConfigIds:u,intersections:d}}),{retries:ne,factor:1})}async function tl({appId:s,projectId:e}){try{return await(0,oe.default)(()=>Pe(`/mobile-app/app/${s}?projectId=${e}`),{retries:ne,factor:1})}catch(t){Ut.error("failed getting application details",{appId:s,error:t});return}}async function rl(s){try{return await(0,oe.default)(()=>Pe(`/plan/project/${s}/usage-current-billing-period`),{retries:ne})}catch(e){Ut.error("failed getting usage for current billing period",{projectId:s,error:e});return}}function sl(s,e,t){return(0,oe.default)(()=>Pe(`/result/${s}/isComplete`,{projectId:e,testRetryKey:t}),{retries:ne})}function Ar(s,e,t,r){return(0,oe.default)(()=>Pe(`/test/v2/${s}/result/${e}`,{projectId:t,branch:r}),{retries:ne,factor:1})}function nl(s,e){return et({url:`/grid/keep-alive?reqId=${K()}`,body:{projectId:s,slots:e},timeout:1e4})}function ol(s,e,t,r,n){return et({url:`/grid/release?reqId=${K()}`,body:{companyId:s,projectId:e,slotId:t,gridId:r,browser:n}})}function il(s){return et({url:"/grid/hybrid/provider",body:s})}function al(s,e,t,r,n){return(0,oe.default)(()=>Pe("/grid/name",{companyId:s,projectId:e,name:t,browser:r,executionId:n,reqId:K()}),{retries:ne})}function Do(s,e,t,r,n){return(0,oe.default)(()=>Pe(`/grid/${t}`,{companyId:s,projectId:e,browser:r,executionId:n,reqId:K()}),{retries:ne})}async function cl({projectId:s,token:e,branchName:t,lightweightMode:r,localGrid:n}){var o,i;try{return await(0,oe.default)(()=>Tt({url:`${he}/executions/initialize`,body:{projectId:s,token:e,branchName:t||"master",lightweightMode:r,localGrid:n}}),{retries:ne})}catch(a){throw Ut.error("error initializing info from server",a),(o=a==null?void 0:a.message)!=null&&o.includes("Bad Request")?new R("Error trying to retrieve CLI token. Your CLI token and project might not match. Please make sure to pass `--project` and `--token` that match to each other or make sure they match in your ~/.testim file."):(i=a==null?void 0:a.code)!=null&&i.includes("ENOTFOUND")?new R("Due to network connectivity issues, Testim CLI has been unable to connect to the Testim backend."):a}}async function wv(){if(dr)return{editorUrl:dr};try{return await(0,oe.default)(()=>Pe("/system-info/editor-url"),{retries:ne,onFailedAttempt:s=>{if(s.attemptNumber>=ne)throw s}})}catch{return Ut.error("cannot retrieve editor-url from server"),{editorUrl:"https://app.testim.io"}}}function ll(s){return(0,oe.default)(()=>Pe("/grid",{companyId:s}),{retries:ne})}function bn(s,e,t){return(0,oe.default)(()=>Pe(`/real-data/${e}?${t}&projectId=${s}`),{retries:ne})}function pl(s,e,t,r,n){return(0,oe.default)(()=>et({url:"/result/test",body:{projectId:s,resultId:e,testId:t,testResult:r,remoteRunId:n}}),{retries:ne})}function ml(s,e,t,r){return(0,oe.default)(()=>et({url:"/result/test/clear",body:{projectId:s,resultId:e,testId:t,testResult:r}}),{retries:ne})}function fl(s,e,t,r){return(0,oe.default)(()=>et({url:"/remoteStep",body:{projectId:s,resultId:e,stepId:t,remoteStep:r}}),{retries:ne})}function Tv(s){return s.startsWith("/")?s:`/${s}`}function vv(s,e,t){let r=Tv(s);return t&&(r=`/${t}${r}`),e&&(r=`/${e}${r}`),r}async function Am(s,e,t,r,n,o="application/octet-stream"){let i=null;o==="application/json"&&(i=".json");let a=`${n}_${K()}${i||""}`,c=`${e}/${t}/${a}`,u=vv(c,"test-result-artifacts",s),d=Buffer.from(Pm.gzip(r,{level:3})),m={file:{fileName:a,buffer:d}};return await(0,oe.default)(()=>gv(`/storage${u}`,{},m,{"X-Asset-Encoding":"gzip"}),{retries:ne,factor:1}),u}function gl({projectId:s,runId:e,testId:t,newResultId:r,originalTestResultId:n,previousTestResultId:o,testResult:i}){return(0,oe.default)(()=>et({url:"/result/test/retry",body:{projectId:s,newResultId:r,originalTestResultId:n,previousTestResultId:o,testId:t,runId:e,testResult:i}}),{retries:ne})}async function yl(s){try{return await Pe(`/integration/applitools/v3/connected?projectId=${s}`)}catch(e){return Ut.warn("could'nt get applitools integration data.",{err:e}),{}}}async function bl(s,e){try{return await Lo("/tunnel",{companyId:s,routes:e})}catch(t){return Ut.warn("could'nt get tunnel.",{err:t}),{}}}async function wl(s,e){try{return await et({url:`/tunnel/${e}`,body:{companyId:s}})}catch(t){Ut.warn("could'nt get tunnel.",{err:t});return}}async function Tl(s,e){try{return await yv(`/tunnel/${e}`,{companyId:s})}catch(t){Ut.warn("could'nt get tunnel.",{err:t});return}}function vl(s){return Tt({url:`${he}/result/remoteRunFailure`,body:s})}async function El({projectId:s,projectType:e,gridId:t,companyId:r,selectors:n}){let o=`${hv}/mobileDevices/${t}/${r}?projectType=${e}`;o=n?`${o}&selectors=${encodeURIComponent(n)}`:o;try{return await(0,oe.default)(()=>Pe(o,{projectId:s}),{retries:ne})}catch(i){return Ut.warn("could'nt get devices from headspin grid.",{err:i}),null}}var zt,Pm,oe,zc,fv,Ut,ne,hv,ul,dl,hl,Mo,Te=T(()=>{"use strict";zt=E(require("lodash")),Pm=E(require("pako"));F();le();ae();vt();Et();oe=E(require("p-retry")),zc=E(require("object-hash"));z();j();fv=nt(),Ut=x("testim service api"),ne=3,hv="/grid";ul=async()=>(0,oe.default)(()=>Pe("/grid/lt/config"),{retries:ne}),dl=async s=>(0,oe.default)(()=>Pe(`/labFeature/v2/project/${s}`),{retries:ne});hl=zt.memoize(async(s,e,t,r)=>{if(!zt.isEmpty(r))return await Am(s,e,t,JSON.stringify(r),"test-run-data","application/json")},(s,e,t,r)=>`${(0,zc.default)(r)}:${e}:${t}`),Mo=zt.memoize(async(s,e,t,r,n)=>!r||zt.isEmpty(r)?void 0:await Am(s,e,t,JSON.stringify((()=>{let i=zt.clone(r);if(n!=null&&n.hiddenParams){let{hiddenParams:a}=n;(a||[]).forEach(c=>{i[c]&&Object.assign(i,{[c]:Ec.HIDDEN_PARAM})})}return i})()),"test-test-data","application/json"),(s,e,t,r)=>`${(0,zc.default)(r)}:${e}:${t}`)});var kr={};$(kr,{getSessionPlayer:()=>se,options:()=>Rl});var Uo,Rl,Sl,se,Ee=T(()=>{"use strict";Uo=require("path"),Rl={playerPath:void 0},se=()=>{if(Sl)return Sl;let s=(Le(),G(Oe));s.log("getSessionPlayerRequire start");let{getSessionPlayerFolder:e}=(cs(),G(dn)),t=e(),r=Rl.playerPath?(0,Uo.resolve)(Rl.playerPath,"src/background/sessionPlayerInit.ts"):(0,Uo.join)(t,"sessionPlayer.js"),n=require(r);return s.log("getSessionPlayerRequire end"),Sl=n,n}});function Rv(s){process.nextTick(()=>{if([Q.SELENIUM,Q.APPIUM].includes(s))try{(Ee(),G(kr)).getSessionPlayer(),require("jsdom")}catch{}})}async function wn(s){let{project:e,token:t,lightweightMode:r,useLocalChromeDriver:n,useChromeLauncher:o,mode:i}=s,a=Boolean(r==null?void 0:r.general),c=Boolean(n||o),u=a?Sv:Ev;N("before initializeUserWithAuth");let d=await dt(async()=>(Rv(i),await cl({projectId:e,token:t,branchName:s.branch,lightweightMode:r,localGrid:c})),"initializeUserWithAuth",u,{project:e,token:t,branchName:s.branch,lightweightModeGeneral:a,localGrid:c})();return N("after initializeUserWithAuth"),xm(d.authData,s.project,s.token),d}var Ev,Sv,km=T(()=>{"use strict";Le();Te();qt();Et();ae();Ev=1e3*60*5,Sv=1e3*60*60*10});async function Lm(s){var o;let e=Promise.resolve(),t=!s.host&&!s.gridId&&!s.grid&&(!s.testPlan||s.testPlan.length===0),r=s.files.length!==0;(t&&r||s.useLocalChromeDriver)&&(s.chromeBinaryLocation=s.downloadBrowser?await Po():s.chromeBinaryLocation,e=Cr({projectId:s.project,userId:s.user},{chromeBinaryLocation:s.chromeBinaryLocation},Boolean((o=s.lightweightMode)==null?void 0:o.general)),s.useLocalChromeDriver=!0),!s.playerRequirePath&&s.mode!==Q.EXTENSION&&await Pr(s.playerLocation,s.canary),s.mode===Q.EXTENSION&&!s.ext&&await Uc(s.extensionLocation);let n;if(s.installCustomExtension){let i=Boolean(s.useLocalChromeDriver||s.useChromeLauncher);n=await Mc(s.installCustomExtension,i)}return await e,n}async function Nm(s){var i;Iv.info("prepare MockNetwork",{location:s});let e=await bc(s),t=Buffer.isBuffer(e)?e:e.body;if(t.byteLength>_m*1e6)throw new Error(`${Il} exceeded ${_m}MB`);let r;try{r=JSON.parse(t.toString("utf-8"))}catch(a){throw new Error(`${Il} cannot be parsed.${Fo.EOL}${a}`)}let n=new Om.default;if(!n.validate(Ac,r)){let a=(i=n.errors)==null?void 0:i.map((c,u)=>`${++u}) ${c.dataPath} ${c.message}`).join(Fo.EOL);throw new Error(`${Il} is malformed.${Fo.EOL}${a}`)}return r.entries}var Fo,Om,_m,Il,Iv,xl=T(()=>{"use strict";Fo=E(require("os"));F();qp();cs();Om=E(require("ajv"));ae();$c();km();_m=1,Il="JSON file supplied to --mock-network-pattern",Iv=(j(),G(Xs)).getLogger("prepare runner")});function Mm(s,e=process){async function t(r){await re(de(Dm,async n=>n()),1e4).catch(()=>null),s(r)}e.on("uncaughtException",async r=>{Tn.error("Caught exception",{err:r}),console.log("Uncaught exception"),r.message&&console.log("Message =",r.message),r.reason&&console.log("Reason =",r.reason),await t(r)}),e.on("unhandledRejection",r=>{var n;if(Tn.fatal("Caught unhandled promise rejection",r),!((n=r==null?void 0:r.message)!=null&&n.includes("ENOTFOUND x-api.rollout.io")))throw r}),e.on("rejectionHandled",()=>{Tn.error("Caught rejection handled")}),e.once("SIGTERM",()=>{let r="Runner aborted - SIGTERM event",n=new Error(r);throw Tn.error(r),t(n),n}),e.once("SIGINT",()=>{let r="Runner aborted - SIGINT event",n=new Error(r);throw Tn.error(r),t(n),n}),e.once("exit",r=>{s(r)})}function ds(s){Dm.push(s)}var Tn,Dm,vn=T(()=>{"use strict";j();F();Tn=x("process-handler"),Dm=[]});function kl(s,e){let t=s.canary?"-master.zip":".zip",r=`${e?Za:pr}/extension/testim-firefox-profile${t}`,n=`${e?ec:pr}/extension/testim-headless${t}`;return{firefox:r,chrome:n,"edge-chromium":n}}function $m(s){let{chrome:e,firefox:t}=kl(s,!1);return s.browser==="firefox"?t:s.browser==="chrome"?e:[e,t]}function Bo(s){let e=`${pr}/extension/sessionPlayer`;return s.canary?`${e}-master`:e}var $o=T(()=>{"use strict";le()});function Hm(s){Ie||(s!=null&&s.userId||(s={anonymousId:Vm}),qm.identify(s))}function pt(s,e){return ps("ci",s,e)}function ps(s,e,t){if(Ie)return;let r=s?{userId:s}:{anonymousId:Vm};qm.track(Object.assign(r,{event:e,properties:t}))}var Gm,qm,Vm,ms=T(()=>{"use strict";le();Gm=E(require("analytics-node")),qm=new Gm.default("sJOSIGKa5x5rJEGsaOlCjrgozAf7FnVY",{flushAt:1}),Vm=require("crypto").randomBytes(20).toString("hex")});function zm(s){return s.start&&ps(null,"cli-start-command",{downloadBrowser:Boolean(s.downloadBrowser)}),!!(s.startV2||s.start||s.agent)}async function Km(s){let e=["playground-playwright","playground-puppeteer","playground-selenium"],t=!1,r=!1,n=!1,o=!1;if(s.start&&(o=!0),Number.isNaN(s.agentPort))throw new R("Agent port is not number");if(typeof s.agent=="string"&&e.some(a=>s.agent.includes(a))){let a=s.agent.split(",").map(c=>c.trim());a.includes("playground-playwright")&&(t=!0),a.includes("playground-puppeteer")&&(r=!0),a.includes("playground-selenium")&&(n=!0)}let i=Bo(s);return console.log("Start Testim CLI on Agent mode"),{project:s.project,token:s.token,agentMode:!0,agentPort:s.agentPort,agentBind:s.agentBind,openEditor:s.openEditor,installPlaygroundPlaywrightDeps:t,installPlaygroundPuppeteerDeps:r,installPlaygroundSeleniumDeps:n,startTestimBrowser:o,ext:s.ext,extensionPath:s.extensionPath,playerLocation:s.playerPath||i,canary:s.canary,playerPath:s.playerPath,playerRequirePath:s.playerRequirePath,downloadBrowser:Boolean(s.downloadBrowser)}}var Jm=T(()=>{"use strict";$o();ms();z()});function Go(s){let{platform:e}=process;e==="win32"?(0,Wo.exec)(`start chrome ${s}`):e==="darwin"?(0,Wo.exec)(`open -a "Google Chrome" ${s}`):e==="linux"&&(0,Wo.exec)(`google-chrome ${s}`)}var Wo,_l=T(()=>{"use strict";Wo=require("child_process")});var Sn={};$(Sn,{doLogin:()=>Dl,getProjectId:()=>Ov,getToken:()=>Lv});async function Ov(){return Qm("projectId")}async function Lv(){return Qm("token")}function Ym(s,e){return Promise.race([s,ie(e).then(()=>{throw new X("timeout")})])}async function Nv(){let s=(await import("express")).default(),e=async function(){return Ym(new Promise(n=>{s.get("/loginInfo",(o,i)=>{n(JSON.parse(Buffer.from(o.query.info,"base64").toString())),i.status(200).end()})}),6e4).catch(()=>null)}();await new Promise((r,n)=>{let o=s.listen(42543,i=>{i&&n(i),r(o.address().port)})});try{let{getEditorUrl:r}=await Promise.resolve().then(()=>(Te(),ve)),{editorUrl:n}=await r();Go(`${n}/#/new-test`)}catch{console.log("Unable to open Testim automatically - please manually go to https://app.testim.io")}return await e}async function Dl({overwriteExisting:s=!0,projects:e=null}={}){let t=Ol.homedir(),r=Ll.join(t,".testim");if(await ye(r)&&!s)return;let o={},[{default:i},{default:a}]=await Promise.all([import("prompts"),import("ora")]),c=a("Getting credentials from Testim extension ...").start();if(e||(e=await Ym(Nv(),62e3).catch(()=>null)),e!=null&&e.token){o.token=e.token,o.projectId=e.projectId,c.succeed(),await Xm(r,o);return}if(e!=null&&e.length){c.succeed();let u=e.length===1?{project:e[0]}:await i({type:"select",name:"project",message:"There are multiple projects associated with your user account. Please select the project you would like to connect to:",choices:e.map(d=>({title:d.name,value:d}))});o.token=u.project.ci.token,o.projectId=u.project.id,await Xm(r,o);return}c.fail(),console.log("Error getting credentials - please pass `--token` and `--project` to the CLI or try again")}async function Xm(s,e){await Nl.promises.writeFile(s,qo.stringify(e)),console.log(`Testim credentials saved in '${s}'`)}async function Qm(s){let e=Ol.homedir(),t=Ll.join(e,".testim"),r=await ye(t),n={};if(r)try{n=qo.parse((await Nl.promises.readFile(t)).toString())}catch{}return n||(n={}),n[s]}var Ol,Ll,qo,Nl,fs=T(()=>{"use strict";Ol=E(require("os")),Ll=E(require("path")),qo=E(require("yaml"));F();Nl=require("fs");_l()});var nf={};$(nf,{process:()=>Gv});var Ml,ef,Ul,tf,mt,Ne,rf,Dv,Ae,jl,Mv,Uv,Zm,sf,Fv,Fl,Ho,Bl,jv,Vo,St,Bv,l,$v,Wv,Gv,of=T(()=>{"use strict";Ml=E(require("ms")),ef=E(require("chalk")),Ul=E(require("fs")),tf=E(require("url")),mt=E(require("lodash")),Ne=E(require("path"));F();$o();Jm();qt();rf=require("commander");ae();z();Yr();F();Dv=s=>s.replace(/-([a-z])/g,(e,t)=>t.toUpperCase()),Ae=(s,e)=>(e.push(s),e),jl=new rf.Command,Mv=s=>s.split(","),Uv=(s,e)=>!s||s.length===0?e:s,Zm=["enable-heavy-ad-intervention","heavy-ad-privacy-mitigations","use-fake-device-for-media-stream","use-fake-ui-for-media-stream","proxy-server"],sf=()=>{function s(h){return h.includes("-h, --help")}function e(h){return h.includes("--params [params-json-string]")}function t(h){return h.includes("--ext")||h.includes("--extension-path")}function r(h){return h.includes("--player-path")||h.includes("--player-require-path")}function n(h){return h.includes("--executionId")||h.includes("--source")||h.includes("--resultId")||h.includes("--remoteRunId")||h.includes("--schedulerId")}function o(h){return h.includes("--get-browser-timeout")||h.includes("--get-browser-retries")||h.includes("--get-session-timeout")||h.includes("--get-session-retries")||h.includes("--driver-request-timeout")||h.includes("--driver-request-retries")}function i(h){return h.includes("--user")}function a(h){return h.includes("shouldMonitorPerformance")}function c(h){return h.includes("--save-rca-locally")}function u(h){return h.includes("--exit-code-ignore-failing-tests")}function d(h){return h.includes("--high-speed")}function m(h){return h.includes("--urls")}function p(h){return h.includes("--test-start-timeout")}function f(h){return h.includes("--install-lazy-deps")}jl.help(h=>h.split(`
17
- `).filter(y=>!t(y)&&!e(y)&&!s(y)&&!r(y)&&!n(y)&&!a(y)&&!i(y)&&!o(y)&&!c(y)&&!u(y)&&!d(y)&&!m(y)&&!p(y)&&!f(y)).join(`
18
- `))},Fv=(s,e)=>{let t=e?`Please use ${e} instead.`:"";console.log(ef.default.yellow(`
16
+ 4. You can always use a standalone Selenium grid and providing it's details with the --host and --port flags (see https://www.npmjs.com/package/selenium-standalone)`)),n.fail(a),i}}async function av(){let s=`${mr}/extension/sessionPlayer_LATEST_RELEASE`;return(await Er(s)).body.toString("utf8")}async function cv(s,e){if(!Be(s)||Be(s)&&e||Ie)return s;let t=await av();return`${s}-${t}`}function Fc(){let s=lt();return as.resolve(s,"testim-bin")}function lv(){let s=Fc();return as.resolve(s,"sessionPlayer.zip")}async function Em(s,e,t=!1){try{return await lo(s,e),await Ye(e,Fc())}catch(r){if(t)throw r;return await Em(s,e,!0)}}async function Ar(s,e){Po.info("prepare player",{location:s,canary:e});let t=lv();return dt(async()=>{let r=await cv(s,e);return await Em(r,t),{}},"preparePlayer",vm,[s,e,t])()}var bm,wm,as,Tm,Po,vm,Dc,ym,cs=T(()=>{"use strict";bm=E(require("ms")),wm=E(require("fs")),as=E(require("path"));le();qt();Tm=require("serialize-error");j();_c();z();F();Po=x("prepare runner and testim start"),vm=(0,bm.default)("0.5 day"),Dc=16,ym=`The size of the custom extension is more than ${Dc}MB`});function uv(){let s=dn.type().toLowerCase();return s==="darwin"?dn.arch()==="arm"?"mac_arm":"mac":s==="windows_nt"?dn.arch()==="x64"?"win64":"win32":"linux"}async function Ao(){let s=uv(),e="https://storage.googleapis.com/chromium-browser-snapshots",t={linux:"Linux_x64",mac:"Mac",mac_arm:"Mac_Arm",win32:"Win",win64:"Win_x64"};if(!(s in t))throw new R(`Unsupported platform: ${s}`);let r=parseInt(pn,10)>591479?"chrome-win":"chrome-win32",n={linux:"chrome-linux",mac:"chrome-mac",mac_arm:"chrome-mac",win32:r,win64:r},o={linux:"chrome",mac:"Chromium.app/Contents/MacOS/Chromium",mac_arm:"Chromium.app/Contents/MacOS/Chromium",win32:"chrome.exe",win64:"chrome.exe"},i=`${e}/${t[s]}/${pn}/${n[s]}.zip`,a=Co.join(jc,n[s]),c=`${a}.zip`,l=Co.join(a,o[s]);if(await ye(l))return l;if(!await ye(c)){let m=(0,Bc.default)("Downloading Chromium").start();try{await Sm.promises.mkdir(jc),await qe(i,c)}catch(p){let f=`Failed to download Chromium: ${p.message}`;throw m.fail(f),new Error(f)}m.succeed()}let d=(0,Bc.default)("Extracting Chromium").start();try{await Ye(c,jc)}catch(m){let p=`Failed to extract Chromium: ${m.message}`;throw d.fail(p),new Error(p)}return d.succeed(),l}var Sm,dn,Co,Bc,pn,jc,$c=T(()=>{"use strict";Sm=E(require("fs")),dn=E(require("os")),Co=E(require("path")),Bc=E(require("ora"));z();F();pn="1000968",jc=Co.join(Nt,`chrome-${pn}`)});async function Im(s,e){return _o=s,Vc=e,await Wc()}function xm(s,e,t){Ze=s.token,_o=e,Vc=t,fn=Hc(Ze),ko=s.refreshToken,Gc=s.ngrokToken,qc=s.isNgrokWhitelisted}function dv(s=_o,e=Vc){return dt(()=>(mn.info("request to get cli token from server"),Tt({url:`${he}/auth/token`,body:{projectId:s,token:e}})),"getTokenV3",Rm*10,{projectId:s,token:e})()}async function pv(){return mn.info("request to refresh JWT cli token from server"),Ze=(await Tt({url:`${he}/auth/refreshToken`,body:{token:Ze,refreshToken:ko}})).token,fn=Hc(Ze),Ze}async function Wc(){try{let s=await dv();return mn.info("successfully get cli token from server"),Ze=s.token,fn=Hc(Ze),ko=s.refreshToken,Gc=s.ngrokToken,qc=s.isNgrokWhitelisted,Ze}catch(s){throw s.message.includes("Unauthorized")?new R("Error trying to retrieve CLI token. Your CLI token and project might not match. Please make sure to pass `--project` and `--token` that match to each other or make sure they match in your ~/.testim file."):(mn.error(`While trying to retrieve CLI token. caught error: ${s}`,{projectId:_o}),new R(`While trying to retrieve CLI token, caught error: ${s}`))}}function Hc(s){return require("jsonwebtoken").decode(s).exp*1e3}async function Ht(){if(!fn)return Wc();if(fn<Date.now()+4*Rm)try{return await pv()}catch(s){return mn.error("failed to refresh token, executing fallback",s),Wc()}return Ze}function Oo(){return ko}function Dt(){return Ze?{uid:require("jsonwebtoken").decode(Ze).id,ngrokToken:Gc,isNgrokWhitelisted:qc}:{}}var mn,Ze,fn,ko,Gc,qc,_o,Vc,Rm,Et=T(()=>{"use strict";le();vt();qt();z();j();mn=x("testim-custom-token"),_o=null,Vc=null,Rm=5*60*1e3});var Pm={};$(Pm,{isCi:()=>ls});var ls,Lo=T(()=>{"use strict";ls=Boolean(process.env.CI||process.env.CONTINUOUS_INTEGRATION||process.env.BUILD_NUMBER||process.env.RUN_ID||!1)});var ve={};$(ve,{addTestRetry:()=>gl,clearTestResult:()=>ml,deleteCloudflareTunnel:()=>Tl,fetchLambdatestConfig:()=>ul,forceUpdateCloudflareTunnelRoutes:()=>wl,getAllGrids:()=>ll,getAppDetails:()=>tl,getApplitoolsIntegrationData:()=>yl,getCloudflareTunnel:()=>bl,getEditorUrl:()=>bv,getGridById:()=>Mo,getGridByName:()=>al,getHybridGridProvider:()=>il,getLabFeaturesByProjectId:()=>dl,getMobileDevicesFromGrid:()=>El,getRealData:()=>yn,getS3Artifact:()=>gn,getSuiteTestList:()=>el,getTestPlan:()=>yv,getTestPlanTestList:()=>Zc,getTestResults:()=>kr,getUsageForCurrentBillingPeriod:()=>rl,initializeUserWithAuth:()=>cl,isTestResultCompleted:()=>sl,keepAliveGrid:()=>nl,loadSfdcCredential:()=>Kc,loadTest:()=>Jc,releaseGridSlot:()=>ol,reportExecutionFinished:()=>Do,reportExecutionStarted:()=>Qc,saveRemoteStep:()=>fl,saveTestPlanResult:()=>Xc,updateExecutionTests:()=>Yc,updateRemoteRunFailure:()=>vl,updateTestDataArtifact:()=>Uo,updateTestResult:()=>pl,updateTestStatus:()=>us,uploadRunDataArtifact:()=>hl});async function hn(){let s=await Ht();if(!s)throw new Error("Failed to get token from server");return{Authorization:`Bearer ${s}`}}async function et({url:s,body:e,headers:t={},timeout:r,retry:n}){let o=await hn(),i=Object.assign({},t,o);return Tt({url:`${he}${s||""}`,body:e,headers:i,timeout:r,retry:n})}async function hv(s,e,t,r={},n=void 0){let o=await hn(),i=Object.assign({},r,o);return await mc(`${he}${s||""}`,e,t,i,n)}async function No(s,e){let t=await hn();return await hc(`${he}${s||""}`,e,t)}async function gv(s,e){let t=await hn();return await Qs(`${he}${s||""}`,e,t)}async function Ce(s,e,t,r){let n=await hn();return await vr(`${he}${s||""}`,e||void 0,n,r,t)}function gn(s,e){return(0,oe.default)(()=>Ce(`/storage${s}`,null,{isBinary:!0},e),{retries:ne})}async function yv(s,e){let t=n=>n==null?[]:typeof n=="string"&&JSON.parse(n)||n;return(await(0,oe.default)(()=>Ce("/testPlan",{projectId:s,name:e.join(",")}),{retries:ne})).map(({testConfigIds:n,beforeAllLabels:o,testLabels:i,afterAllLabels:a,...c})=>Object.assign(c,{testConfigIds:t(n),beforeAllLabels:t(o),testLabels:t(i),afterAllLabels:t(a)}))}async function Kc({branch:s,projectId:e}){let t=await(0,oe.default)(()=>Ce(`/branch/branchData/${s}`,{projectId:e}),{retries:ne});return t==null?void 0:t.sfdcCredential}function Jc({testId:s,branch:e,projectId:t,skipSharedSteps:r=!1,useBranchMap:n=!0}){return(0,oe.default)(()=>Ce(`/test/${s}`,{projectId:t,branch:e,skipSharedSteps:r,useBranchMap:n}),{retries:ne})}function Xc(s,e,t){return(0,oe.default)(()=>et({url:"/testPlan/result",body:{projectId:s,testPlanId:e,result:t}}),{retries:ne})}function us(s,e,t,r,n,o,i=ne){return(0,oe.default)(()=>No("/result/run/test",{runId:e,testId:t,resultId:r,status:n,projectId:s,runnerVersion:mv,...o}),{retries:i})}function Yc(s,e,t,r,n,o,i,a){return(0,oe.default)(()=>No("/result/run/tests",{runId:s,runnerStatuses:e,status:t,reason:r,success:n,startTime:o,endTime:i,projectId:a}),{retries:ne})}async function Qc({executionId:s,projectId:e,labels:t,startTime:r,executions:n,config:o,resultLabels:i,remoteRunId:a,localRunUserId:c,isLocalRun:l,intersections:d}){let{isCi:m}=await Promise.resolve().then(()=>(Lo(),Pm));return et({timeout:9e4,url:"/result/run",body:{runId:s,projectId:e,labels:t,startTime:r,execution:n,status:"RUNNING",config:o,resultLabels:i,remoteRunId:a,intersections:d,metadata:{isCiRun:m,localRunUserId:c,isLocalRun:l}},retry:3})}function Do(s,e,t,r,n={},o=void 0,i=void 0){let a=Date.now();return(0,oe.default)(()=>No("/result/run",{runId:e,projectId:t,endTime:a,status:s,success:r,tmsOptions:n,remoteRunId:o,resultExtraData:i}),{retries:ne})}async function Zc(s,e,t,r,n){return(0,oe.default)(()=>et({url:"/testPlan/list",body:{projectId:s,names:e,planIds:t,branch:r,intersections:n},timeout:12e4}),{retries:ne})}function el({projectId:s,labels:e,testIds:t,testNames:r,testConfigNames:n,suiteNames:o,suiteIds:i,branch:a,rerunFailedByRunId:c,testConfigIds:l,intersections:d}){return(0,oe.default)(()=>et({url:"/suite/v2/list",body:{projectId:s,labels:e,testIds:t,testNames:r,testConfigNames:n,suiteNames:o,suiteIds:i,branch:a,rerunFailedByRunId:c,testConfigIds:l,intersections:d}}),{retries:ne,factor:1})}async function tl({appId:s,projectId:e}){try{return await(0,oe.default)(()=>Ce(`/mobile-app/app/${s}?projectId=${e}`),{retries:ne,factor:1})}catch(t){Ut.error("failed getting application details",{appId:s,error:t});return}}async function rl(s){try{return await(0,oe.default)(()=>Ce(`/plan/project/${s}/usage-current-billing-period`),{retries:ne})}catch(e){Ut.error("failed getting usage for current billing period",{projectId:s,error:e});return}}function sl(s,e,t){return(0,oe.default)(()=>Ce(`/result/${s}/isComplete`,{projectId:e,testRetryKey:t}),{retries:ne})}function kr(s,e,t,r){return(0,oe.default)(()=>Ce(`/test/v2/${s}/result/${e}`,{projectId:t,branch:r}),{retries:ne,factor:1})}function nl(s,e){return et({url:`/grid/keep-alive?reqId=${K()}`,body:{projectId:s,slots:e},timeout:1e4})}function ol(s,e,t,r,n){return et({url:`/grid/release?reqId=${K()}`,body:{companyId:s,projectId:e,slotId:t,gridId:r,browser:n}})}function il(s){return et({url:"/grid/hybrid/provider",body:s})}function al(s,e,t,r,n){return(0,oe.default)(()=>Ce("/grid/name",{companyId:s,projectId:e,name:t,browser:r,executionId:n,reqId:K()}),{retries:ne})}function Mo(s,e,t,r,n){return(0,oe.default)(()=>Ce(`/grid/${t}`,{companyId:s,projectId:e,browser:r,executionId:n,reqId:K()}),{retries:ne})}async function cl({projectId:s,token:e,branchName:t,lightweightMode:r,localGrid:n}){var o,i;try{return await(0,oe.default)(()=>Tt({url:`${he}/executions/initialize`,body:{projectId:s,token:e,branchName:t||"master",lightweightMode:r,localGrid:n}}),{retries:ne})}catch(a){throw Ut.error("error initializing info from server",a),(o=a==null?void 0:a.message)!=null&&o.includes("Bad Request")?new R("Error trying to retrieve CLI token. Your CLI token and project might not match. Please make sure to pass `--project` and `--token` that match to each other or make sure they match in your ~/.testim file."):(i=a==null?void 0:a.code)!=null&&i.includes("ENOTFOUND")?new R("Due to network connectivity issues, Testim CLI has been unable to connect to the Testim backend."):a}}async function bv(){if(pr)return{editorUrl:pr};try{return await(0,oe.default)(()=>Ce("/system-info/editor-url"),{retries:ne,onFailedAttempt:s=>{if(s.attemptNumber>=ne)throw s}})}catch{return Ut.error("cannot retrieve editor-url from server"),{editorUrl:"https://app.testim.io"}}}function ll(s){return(0,oe.default)(()=>Ce("/grid",{companyId:s}),{retries:ne})}function yn(s,e,t){return(0,oe.default)(()=>Ce(`/real-data/${e}?${t}&projectId=${s}`),{retries:ne})}function pl(s,e,t,r,n){return(0,oe.default)(()=>et({url:"/result/test",body:{projectId:s,resultId:e,testId:t,testResult:r,remoteRunId:n}}),{retries:ne})}function ml(s,e,t,r){return(0,oe.default)(()=>et({url:"/result/test/clear",body:{projectId:s,resultId:e,testId:t,testResult:r}}),{retries:ne})}function fl(s,e,t,r){return(0,oe.default)(()=>et({url:"/remoteStep",body:{projectId:s,resultId:e,stepId:t,remoteStep:r}}),{retries:ne})}function wv(s){return s.startsWith("/")?s:`/${s}`}function Tv(s,e,t){let r=wv(s);return t&&(r=`/${t}${r}`),e&&(r=`/${e}${r}`),r}async function Am(s,e,t,r,n,o="application/octet-stream"){let i=null;o==="application/json"&&(i=".json");let a=`${n}_${K()}${i||""}`,c=`${e}/${t}/${a}`,l=Tv(c,"test-result-artifacts",s),d=Buffer.from(Cm.gzip(r,{level:3})),m={file:{fileName:a,buffer:d}};return await(0,oe.default)(()=>hv(`/storage${l}`,{},m,{"X-Asset-Encoding":"gzip"}),{retries:ne,factor:1}),l}function gl({projectId:s,runId:e,testId:t,newResultId:r,originalTestResultId:n,previousTestResultId:o,testResult:i}){return(0,oe.default)(()=>et({url:"/result/test/retry",body:{projectId:s,newResultId:r,originalTestResultId:n,previousTestResultId:o,testId:t,runId:e,testResult:i}}),{retries:ne})}async function yl(s){try{return await Ce(`/integration/applitools/v3/connected?projectId=${s}`)}catch(e){return Ut.warn("could'nt get applitools integration data.",{err:e}),{}}}async function bl(s,e){try{return await No("/tunnel",{companyId:s,routes:e})}catch(t){return Ut.warn("could'nt get tunnel.",{err:t}),{}}}async function wl(s,e){try{return await et({url:`/tunnel/${e}`,body:{companyId:s}})}catch(t){Ut.warn("could'nt get tunnel.",{err:t});return}}async function Tl(s,e){try{return await gv(`/tunnel/${e}`,{companyId:s})}catch(t){Ut.warn("could'nt get tunnel.",{err:t});return}}function vl(s){return Tt({url:`${he}/result/remoteRunFailure`,body:s})}async function El({projectId:s,projectType:e,gridId:t,companyId:r,selectors:n}){let o=`${fv}/mobileDevices/${t}/${r}?projectType=${e}`;o=n?`${o}&selectors=${encodeURIComponent(n)}`:o;try{return await(0,oe.default)(()=>Ce(o,{projectId:s}),{retries:ne})}catch(i){return Ut.warn("could'nt get devices from headspin grid.",{err:i}),null}}var zt,Cm,oe,zc,mv,Ut,ne,fv,ul,dl,hl,Uo,Te=T(()=>{"use strict";zt=E(require("lodash")),Cm=E(require("pako"));F();le();ae();vt();Et();oe=E(require("p-retry")),zc=E(require("object-hash"));z();j();mv=nt(),Ut=x("testim service api"),ne=3,fv="/grid";ul=async()=>(0,oe.default)(()=>Ce("/grid/lt/config"),{retries:ne}),dl=async s=>(0,oe.default)(()=>Ce(`/labFeature/v2/project/${s}`),{retries:ne});hl=zt.memoize(async(s,e,t,r)=>{if(!zt.isEmpty(r))return await Am(s,e,t,JSON.stringify(r),"test-run-data","application/json")},(s,e,t,r)=>`${(0,zc.default)(r)}:${e}:${t}`),Uo=zt.memoize(async(s,e,t,r,n)=>!r||zt.isEmpty(r)?void 0:await Am(s,e,t,JSON.stringify((()=>{let i=zt.clone(r);if(n!=null&&n.hiddenParams){let{hiddenParams:a}=n;(a||[]).forEach(c=>{i[c]&&Object.assign(i,{[c]:Sc.HIDDEN_PARAM})})}return i})()),"test-test-data","application/json"),(s,e,t,r)=>`${(0,zc.default)(r)}:${e}:${t}`)});var _r={};$(_r,{getSessionPlayer:()=>se,options:()=>Rl});var Fo,Rl,Sl,se,Ee=T(()=>{"use strict";Fo=require("path"),Rl={playerPath:void 0},se=()=>{if(Sl)return Sl;let s=(Le(),G(Oe));s.log("getSessionPlayerRequire start");let{getSessionPlayerFolder:e}=(cs(),G(un)),t=e(),r=Rl.playerPath?(0,Fo.resolve)(Rl.playerPath,"src/background/sessionPlayerInit.ts"):(0,Fo.join)(t,"sessionPlayer.js"),n=require(r);return s.log("getSessionPlayerRequire end"),Sl=n,n}});function Sv(s){process.nextTick(()=>{if([Q.SELENIUM,Q.APPIUM].includes(s))try{(Ee(),G(_r)).getSessionPlayer(),require("jsdom")}catch{}})}async function bn(s){let{project:e,token:t,lightweightMode:r,useLocalChromeDriver:n,useChromeLauncher:o,mode:i}=s,a=Boolean(r==null?void 0:r.general),c=Boolean(n||o),l=a?Ev:vv;N("before initializeUserWithAuth");let d=await dt(async()=>(Sv(i),await cl({projectId:e,token:t,branchName:s.branch,lightweightMode:r,localGrid:c})),"initializeUserWithAuth",l,{project:e,token:t,branchName:s.branch,lightweightModeGeneral:a,localGrid:c})();return N("after initializeUserWithAuth"),xm(d.authData,s.project,s.token),d}var vv,Ev,km=T(()=>{"use strict";Le();Te();qt();Et();ae();vv=1e3*60*5,Ev=1e3*60*60*10});async function Lm(s){var o;let e=Promise.resolve(),t=!s.host&&!s.gridId&&!s.grid&&(!s.testPlan||s.testPlan.length===0),r=s.files.length!==0;(t&&r||s.useLocalChromeDriver)&&(s.chromeBinaryLocation=s.downloadBrowser?await Ao():s.chromeBinaryLocation,e=Cr({projectId:s.project,userId:s.user},{chromeBinaryLocation:s.chromeBinaryLocation},Boolean((o=s.lightweightMode)==null?void 0:o.general)),s.useLocalChromeDriver=!0),!s.playerRequirePath&&s.mode!==Q.EXTENSION&&await Ar(s.playerLocation,s.canary),s.mode===Q.EXTENSION&&!s.ext&&await Uc(s.extensionLocation);let n;if(s.installCustomExtension){let i=Boolean(s.useLocalChromeDriver||s.useChromeLauncher);n=await Mc(s.installCustomExtension,i)}return await e,n}async function Nm(s){var i;Rv.info("prepare MockNetwork",{location:s});let e=await wc(s),t=Buffer.isBuffer(e)?e:e.body;if(t.byteLength>_m*1e6)throw new Error(`${Il} exceeded ${_m}MB`);let r;try{r=JSON.parse(t.toString("utf-8"))}catch(a){throw new Error(`${Il} cannot be parsed.${jo.EOL}${a}`)}let n=new Om.default;if(!n.validate(Ac,r)){let a=(i=n.errors)==null?void 0:i.map((c,l)=>`${++l}) ${c.dataPath} ${c.message}`).join(jo.EOL);throw new Error(`${Il} is malformed.${jo.EOL}${a}`)}return r.entries}var jo,Om,_m,Il,Rv,xl=T(()=>{"use strict";jo=E(require("os"));F();qp();cs();Om=E(require("ajv"));ae();$c();km();_m=1,Il="JSON file supplied to --mock-network-pattern",Rv=(j(),G(Js)).getLogger("prepare runner")});function Mm(s,e=process){async function t(r){await re(de(Dm,async n=>n()),1e4).catch(()=>null),s(r)}e.on("uncaughtException",async r=>{wn.error("Caught exception",{err:r}),console.log("Uncaught exception"),r.message&&console.log("Message =",r.message),r.reason&&console.log("Reason =",r.reason),await t(r)}),e.on("unhandledRejection",r=>{var n;if(wn.fatal("Caught unhandled promise rejection",r),!((n=r==null?void 0:r.message)!=null&&n.includes("ENOTFOUND x-api.rollout.io")))throw r}),e.on("rejectionHandled",()=>{wn.error("Caught rejection handled")}),e.once("SIGTERM",()=>{let r="Runner aborted - SIGTERM event",n=new Error(r);throw wn.error(r),t(n),n}),e.once("SIGINT",()=>{let r="Runner aborted - SIGINT event",n=new Error(r);throw wn.error(r),t(n),n}),e.once("exit",r=>{s(r)})}function ds(s){Dm.push(s)}var wn,Dm,Tn=T(()=>{"use strict";j();F();wn=x("process-handler"),Dm=[]});function kl(s,e){let t=s.canary?"-master.zip":".zip",r=`${e?ec:mr}/extension/testim-firefox-profile${t}`,n=`${e?tc:mr}/extension/testim-headless${t}`;return{firefox:r,chrome:n,"edge-chromium":n}}function $m(s){let{chrome:e,firefox:t}=kl(s,!1);return s.browser==="firefox"?t:s.browser==="chrome"?e:[e,t]}function $o(s){let e=`${mr}/extension/sessionPlayer`;return s.canary?`${e}-master`:e}var Wo=T(()=>{"use strict";le()});function Hm(s){Ie||(s!=null&&s.userId||(s={anonymousId:Vm}),qm.identify(s))}function pt(s,e){return ps("ci",s,e)}function ps(s,e,t){if(Ie)return;let r=s?{userId:s}:{anonymousId:Vm};qm.track(Object.assign(r,{event:e,properties:t}))}var Gm,qm,Vm,ms=T(()=>{"use strict";le();Gm=E(require("analytics-node")),qm=new Gm.default("sJOSIGKa5x5rJEGsaOlCjrgozAf7FnVY",{flushAt:1}),Vm=require("crypto").randomBytes(20).toString("hex")});function zm(s){return s.start&&ps(null,"cli-start-command",{downloadBrowser:Boolean(s.downloadBrowser)}),!!(s.startV2||s.start||s.agent)}async function Km(s){let e=["playground-playwright","playground-puppeteer","playground-selenium"],t=!1,r=!1,n=!1,o=!1;if(s.start&&(o=!0),Number.isNaN(s.agentPort))throw new R("Agent port is not number");if(typeof s.agent=="string"&&e.some(a=>s.agent.includes(a))){let a=s.agent.split(",").map(c=>c.trim());a.includes("playground-playwright")&&(t=!0),a.includes("playground-puppeteer")&&(r=!0),a.includes("playground-selenium")&&(n=!0)}let i=$o(s);return console.log("Start Testim CLI on Agent mode"),{project:s.project,token:s.token,agentMode:!0,agentPort:s.agentPort,agentBind:s.agentBind,openEditor:s.openEditor,installPlaygroundPlaywrightDeps:t,installPlaygroundPuppeteerDeps:r,installPlaygroundSeleniumDeps:n,startTestimBrowser:o,ext:s.ext,extensionPath:s.extensionPath,playerLocation:s.playerPath||i,canary:s.canary,playerPath:s.playerPath,playerRequirePath:s.playerRequirePath,downloadBrowser:Boolean(s.downloadBrowser)}}var Jm=T(()=>{"use strict";Wo();ms();z()});function qo(s){let{platform:e}=process;e==="win32"?(0,Go.exec)(`start chrome ${s}`):e==="darwin"?(0,Go.exec)(`open -a "Google Chrome" ${s}`):e==="linux"&&(0,Go.exec)(`google-chrome ${s}`)}var Go,_l=T(()=>{"use strict";Go=require("child_process")});var En={};$(En,{doLogin:()=>Dl,getProjectId:()=>_v,getToken:()=>Ov});async function _v(){return Qm("projectId")}async function Ov(){return Qm("token")}function Ym(s,e){return Promise.race([s,ie(e).then(()=>{throw new X("timeout")})])}async function Lv(){let s=(await import("express")).default(),e=async function(){return Ym(new Promise(n=>{s.get("/loginInfo",(o,i)=>{n(JSON.parse(Buffer.from(o.query.info,"base64").toString())),i.status(200).end()})}),6e4).catch(()=>null)}();await new Promise((r,n)=>{let o=s.listen(42543,i=>{i&&n(i),r(o.address().port)})});try{let{getEditorUrl:r}=await Promise.resolve().then(()=>(Te(),ve)),{editorUrl:n}=await r();qo(`${n}/#/new-test`)}catch{console.log("Unable to open Testim automatically - please manually go to https://app.testim.io")}return await e}async function Dl({overwriteExisting:s=!0,projects:e=null}={}){let t=Ol.homedir(),r=Ll.join(t,".testim");if(await ye(r)&&!s)return;let o={},[{default:i},{default:a}]=await Promise.all([import("prompts"),import("ora")]),c=a("Getting credentials from Testim extension ...").start();if(e||(e=await Ym(Lv(),62e3).catch(()=>null)),e!=null&&e.token){o.token=e.token,o.projectId=e.projectId,c.succeed(),await Xm(r,o);return}if(e!=null&&e.length){c.succeed();let l=e.length===1?{project:e[0]}:await i({type:"select",name:"project",message:"There are multiple projects associated with your user account. Please select the project you would like to connect to:",choices:e.map(d=>({title:d.name,value:d}))});o.token=l.project.ci.token,o.projectId=l.project.id,await Xm(r,o);return}c.fail(),console.log("Error getting credentials - please pass `--token` and `--project` to the CLI or try again")}async function Xm(s,e){await Nl.promises.writeFile(s,Vo.stringify(e)),console.log(`Testim credentials saved in '${s}'`)}async function Qm(s){let e=Ol.homedir(),t=Ll.join(e,".testim"),r=await ye(t),n={};if(r)try{n=Vo.parse((await Nl.promises.readFile(t)).toString())}catch{}return n||(n={}),n[s]}var Ol,Ll,Vo,Nl,fs=T(()=>{"use strict";Ol=E(require("os")),Ll=E(require("path")),Vo=E(require("yaml"));F();Nl=require("fs");_l()});var nf={};$(nf,{process:()=>Wv});var Ml,ef,Ul,tf,mt,Ne,rf,Nv,Ae,jl,Dv,Mv,Zm,sf,Uv,Fl,zo,Bl,Fv,Ho,St,jv,u,Bv,$v,Wv,of=T(()=>{"use strict";Ml=E(require("ms")),ef=E(require("chalk")),Ul=E(require("fs")),tf=E(require("url")),mt=E(require("lodash")),Ne=E(require("path"));F();Wo();Jm();qt();rf=require("commander");ae();z();Yr();F();Nv=s=>s.replace(/-([a-z])/g,(e,t)=>t.toUpperCase()),Ae=(s,e)=>(e.push(s),e),jl=new rf.Command,Dv=s=>s.split(","),Mv=(s,e)=>!s||s.length===0?e:s,Zm=["enable-heavy-ad-intervention","heavy-ad-privacy-mitigations","use-fake-device-for-media-stream","use-fake-ui-for-media-stream","proxy-server"],sf=()=>{function s(h){return h.includes("-h, --help")}function e(h){return h.includes("--params [params-json-string]")}function t(h){return h.includes("--ext")||h.includes("--extension-path")}function r(h){return h.includes("--player-path")||h.includes("--player-require-path")}function n(h){return h.includes("--executionId")||h.includes("--source")||h.includes("--resultId")||h.includes("--remoteRunId")||h.includes("--schedulerId")}function o(h){return h.includes("--get-browser-timeout")||h.includes("--get-browser-retries")||h.includes("--get-session-timeout")||h.includes("--get-session-retries")||h.includes("--driver-request-timeout")||h.includes("--driver-request-retries")}function i(h){return h.includes("--user")}function a(h){return h.includes("shouldMonitorPerformance")}function c(h){return h.includes("--save-rca-locally")}function l(h){return h.includes("--exit-code-ignore-failing-tests")}function d(h){return h.includes("--high-speed")}function m(h){return h.includes("--urls")}function p(h){return h.includes("--test-start-timeout")}function f(h){return h.includes("--install-lazy-deps")}jl.help(h=>h.split(`
17
+ `).filter(y=>!t(y)&&!e(y)&&!s(y)&&!r(y)&&!n(y)&&!a(y)&&!i(y)&&!o(y)&&!c(y)&&!l(y)&&!d(y)&&!m(y)&&!p(y)&&!f(y)).join(`
18
+ `))},Uv=(s,e)=>{let t=e?`Please use ${e} instead.`:"";console.log(ef.default.yellow(`
19
19
  WARNING: ${s} is deprecated. ${t}
20
- `))},Fl=["clover","html","json-summary","json","lcov","lcovonly","teamcity","text-lcov","text-summary","text"],{env:Ho,argv:Bl,stdout:jv,exit:Vo,cwd:St}=global.process,Bv=["trace","debug","info","warn","error","silent"];Sc(Bl,new Set(["run","connect","agent","tunneld","start","init","install-lazy-deps"]));jl.description("Testim.io CLI").option("--run [file-glob-pattern]","codeful test files to run",Ae,[]).option("-h --help","output usage information",sf).option("-o --options-file [options-file.json]","").option("-c --config-file [config-file.js]","").option("--test-config [test-config]","test config name to override for all tests in current execution",Ae,[]).option("--test-config-id [test-config-id]","test config ID to override for all tests in current execution",Ae,[]).option("--params-file [params-file.json]","").option("--params [params-json-string]","").option("-t, --testId [test-id]","test ID to run",Ae,[]).option("-w, --webpackConfig [webpack-configuration]","webpack configuration used to build the code based project").option("--test-id [test-id]","test ID to run",Ae,[]).option("-l, --label [label]","labels to search test by",Ae,[]).option("-n, --name [test-name]","test name to run",Ae,[]).option("--project [project-id]","project ID").option("-r, --report-file [report junit xml path]","where to save junit xml results file").option("--urls","add step urls to the junit report").option("--override-report-file-classname [override-report-file-classname]","custom junit class name for the junit reporter").option("--reporters [names]","report types",Mv).option("-h, --host [host-name]","host name or ip containing the selenium grid").option("-p, --port [host-port]","host port").option("-g, --grid [grid-name]","grid name").option("--path [grid-path]","grid path").option("--protocol [grid-protocol]","grid protocol http or https").option("--grid-username [grid-username]","grid http basic auth username").option("--grid-password [grid-password]","grid http basic auth password").option("-gi --grid-id [grid-id]","grid ID").option("-b, --browser [browser-type]","browser type (chrome/firefox)").option("-h, --headless [headless]","run in headless mode").option("-m, --mode [runner-mode]","use extension or selenium mode (extension/selenium/appium)").option("--branch [branch]","branch name",void 0).option("--base-url [base-url]","change base-url to a specified url for all tests in current execution").option("--token [token]","identification token to testim").option("--is-regression-baseline-run","save doms and run results as regression baseline data").option("--parallel [number-of-tests]","number of tests to run in parallel").option("--before-parallel [number-of-tests]","number of tests to run in parallel during the before phase of a test plan").option("--after-parallel [number-of-tests]","number of tests to run in parallel during the after phase of a test plan").option("--canary [canary-mode]","enable canary mode",!1).option("--test-plan [test-plan-name]","test plan to run",Ae,[]).option("--test-plan-id [test-plan-id]","test plan to run",Ae,[]).option("--suite [suite-name]","suite to run",Ae,[]).option("--suite-id [suite-id]","suite ID to run",Ae,[]).option("--rerun-failed-by-run-id [run-id]","allows re-running failed tests from a specific run ID").option("--disable-grid-check [boolean]","disable checking if selenium grid is available",!1).option("--disable-native-events [boolean]","pass nativeEvents=false capability to the selenium browser (in selenium mode)",!1).option("--disable-timeout-retry [boolean]","disable retry after test pass test timeout",!1).option("--ca-file [ca-file-location]","ca certificate file location").option("--proxy [proxy-url]","proxy url to all requests").option("--proxy-for-grid [proxy-for-grid]","used together with --proxy to also router grid traffic through a proxy").option("--result-label [result-label]","result label",Ae,[]).option("-oen --override-execution-name [execution-name]","override the default execution name","").option("--retries [max_num_of_retries]","number of retries on test failure, defaults to 0 (no retries)","0").option("--set-retention [retention-in-days]","set the number of days for results retention").option("--user [user-id]","user ID for local Testim-CLI").option("--pass-zero-tests","don't fail the run if no tests were found").option("--device-model [device-model]","The device model to use, iPhone 12, Nexus 5X, SM-G900P etc....").option("--device-udid [device-udid]","the device unique id").option("--os-version [os-version]","The operating system version number").option("--app-id [app-id]","The application id from app library on Testim Editor App").option("--appium-log-level [appium-log-level]","Level of logging verbosity").option("-rad --reset-app-data [reset-app-data]","set noReset appium capability to true, default value true!",!1).option("-fr --full-reset [full-reset]","set fullReset appium capability to true to reinstall application on session start and session end").option("-roso --reset-on-session-start-only [reset-on-session-start-only]","set resetOnSessionStartOnly appium capability to true to avoid uninstall app on session end (ios run only)",!1).option("-str --suppress-tms-reporting [suppress-tms-reporting]","disable test management reporting",!1).option("-tsr --tms-suppress-reporting [tms-suppress-reporting]","disable test management reporting",!1).option("-tid --tms-run-id [tms-run-id]","update existing result in test management","").option("-tff --tms-field-file [tms-field-file.json]","pass field file location to add custom result field to the tms result report","").option("--disable-file-cache","disable internal CLI file caching").option("--file-cache-location [directory]"," internal CLI file caching location").option("--test-start-timeout [test-start-timeout]","The time to wait for a test to start after getting a browser session",Number,Number(Ho.TESTIM_TEST_START_TIMEOUT)||2*60*1e3).option("--timeout [test-timeout]","Test run timeout in milliseconds",Number).option("--browser-timeout [open-browser-timeout]","Get browser from grid timeout in milliseconds",Number).option("--new-browser-wait-timeout [max-wait-to-browser]","Maximum get browser wait in minutes",Number).option("--get-browser-timeout [get-browser-timeout]","Timeout for a single attempt to get browser from the grid configured in the project's plan",Number).option("--get-browser-retries [get-browser-retries]","Number of attempts to get browser from the grid configured in the project's plan",Number).option("--get-session-timeout [get-session-timeout]",'Timeout for "/session" request to the selenium server',Number,(0,Ml.default)("90s")).option("--get-session-retries [get-session-retries]",'Retries for "/session" request to the selenium server',Number,3).option("--driver-request-timeout [driver-request-timeout]","Timeout for any WebDriver request to the grid server",Number,(0,Ml.default)("90s")).option("--driver-request-retries [driver-request-retries]","Retries for any WebDriver request to the grid server",Number,3).option("--use-local-chrome-driver [use-local-chrome-driver]","use a local ChromeDriver instance instead of a selenium grid").option("--chrome-binary-location [chrome-binary-location]","Chrome binary location").option("--use-chrome-launcher","use a local Chrome installation without selenium").option("-mnh --mock-network-har","use the HAR file configured in the Testim editor to mock network traffic").option("-mnp --mock-network-pattern [local file location path]","use a JSON rule file to mock network traffic (Rule file schema: https://help.testim.io/page/mocking-network-traffic)").option("-omf --override-mapping-file [local file location path]","pass map file location to override mock network (see schema: https://help.testim.io/page/mocking-network-traffic)").option("-dmn --disable-mock-network","Disable mock mode for the entire CLI run").option("--run-quarantined-tests","Run quarantine tests").option("--collect-code-coverage","collect code coverage for all js files under base url").option("--code-coverage-url-filter [url pattern]","collect code coverage for all js files matching url filter (url including asterisk)").option("--code-coverage-report-path [path]","where to save coverage report (default ./coverage)").option("--code-coverage-source-map-path [path]","path of source code").option("--code-coverage-reporter [reporter]",`set code coverage reporter (default html and text), options: ${Fl.join("/")}`,Ae,[]).option("--code-coverage-include [pattern]","set selecting files for coverage (default src/**)",Ae,[]).option("--sauce-user [sauce-lab-user]","user to connect to sauce labs").option("--sauce-key [sauce-lab-key]","key to use when connecting to sauce labs").option("--sauce-options [sauce-options]","json file of browser and os options for sauce").option("--browserstack-user [browserstack-user]","user to connect to browserStack").option("--browserstack-key [browserstack-key]","key to use when connecting to browserStack").option("--browserstack-options [browserstack-options]","json file of browser and os options for browserStack").option("--perfecto-token [perfecto-token]","security token to use when connecting to perfecto").option("--perfecto-options [perfecto-options]","json file of browser and os options for perfecto").option("--experitest-token [experitest-token]","security token to use when connecting to experitest").option("--testobject-key [testobject-key]","api key to use when connecting to testobject").option("--testobject-options [testobject-options]","json file of options for testobject").option("--ext [extension src path]","use extension from path (default it '/..')").option("--extension-path [path to extension archived file]","override the used extension").option("--install-custom-extension [chrome extension zipped file url or local path]","chrome extension to be installed in the browser").option("--player-path [path to player file]").option("--player-require-path [path to unminified player - development only]").option("--init [init]","Path for an initial test app").option("--inspect [port]","Opens node inspector at given port",Number).option("--login","Log in to Testim").option("--require-credentials","Log in to Testim if not already logged in").option("--tunneld","run a tunnel daemon only").option("--tunnel [tunnel]","enable tunnel").option("--tunnel-routes [routes]","tunnel routes for cloudflare tunnels").option("--tunnel-port [tunnel-port]","tunnel port address").option("--tunnel-host-header [tunnel-host-header]","tunnel host header").option("--tunnel-region [tunnel-region]","ngrok tunnel region").option("--tunnel-diagnostics","collect ngrok tunnel diagnostics").option("--tunnel-use-http-address [tunnel-use-http-address]","use http:// address instead of https://",!1).option("--external-lambdatest-tunnel-id [tunnel-id]","use existing lambdatest tunnel ID").option("--external-lambdatest-use-wss","use wss instead of ssh for LT",!1).option("--external-lambdatest-disable-automation-tunneling","don't tunnel Testim calls in LT tunnel",!0).option("--external-lambdatest-mitm","Turn on LT Man in the middle",!1).option("--w3c-capabilities [enable-w3c-caps-mode]","enable/disable w3c capabilities format (default enable)",JSON.parse,!0).option("--old-capabilities [enable-old-caps-mode]","enable/disable old capabilities format (default enable)",JSON.parse,!0).option("--disable-sockets","Disable CLI sockets",!1).option("--executionId [execution-id]","","").option("--remoteRunId [remote-run-id]","","").option("--schedulerId [scheduler-id]","","").option("--source [source]","","cli").option("--resultId [result-id]","","").option("--connect, --agent [enable-agent-mode]","enable Testim CLI agent mode",!1).option("--start [enable-start]","Connect to testim and open the editor in a standalone browser",!1).option("--download-browser","when used with the start option, downloads a fixed version to run Testim editor in",!1).option("--agent-port [agent-port]","set agent port",Number,42543).option("--agent-bind [agent-host-bind]","set agent host bind","127.0.0.1").option("--chrome-extra-prefs [chrome-extra-prefs]","add extra chrome preferences","").option("--chrome-extra-args [chrome-extra-args]","add extra chrome arguments separated by ','","").option("--chrome-block-location [chrome-block-location]","block chrome geolocation",!1).option("--chrome-user-data-dir [chrome-user-data-dir]","use custom chrome user date dir",!1).option("--disable-cookies-same-site-none-requires-secure [disable-same-site-none-requires-secure]","Disable cookies without SameSite must be secure",!1).option("--selenium-caps-file [selenium-caps-file.json]","json file to merge into Testim selenium desired capabilities").option("--version [version]","print the current version of the Testim CLI and exit",!1).option("--monitor-performance","collect test playback performance data").option("--high-speed","DEPRECATED: use --turbo-mode instead").option("--turbo-mode","run in turbo mode").option("--lightweight-mode [settings]","run lightweight mode").option("--create-prefeched-data [location]","prefetch data into local cache file").option("--use-prefeched-data [location]","use prefetched data from local cache file, and force using only cached data").option("--save-rca-locally [path]","save root cause analysis assets locally").option("--exit-code-ignore-failing-tests","return exit code of zero when tests fail. non zero exit code will mean a real error occurred").option("--intersect-with-label [label]","Out of the execution's test list, run only those tests that have the specified label",Ae,[]).option("--intersect-with-suite [suiteName]","Out of the execution's test list, run only those tests that are included in the specified suite (by suite name)",Ae,[]).option("--intersect-with-suite-id [suiteId]","Out of the execution's test list, run only those tests that are included in the specified suite (by suite ID)",Ae,[]).option("--install-lazy-deps [install-lazy-deps]","Install all lazy dependencies from package.json",!1).parse(Bl);l=jl.opts(),$v=()=>{l.grid||l.gridId||(l.host||(l.host="ondemand.saucelabs.com"),l.port||(l.port=80))},Wv=()=>{l.grid||l.gridId||(l.host||(l.host="hub-cloud.browserstack.com"),l.port||(l.port=80))},Gv=async()=>{var g,y,w,P,b,v,I,k,D;l.inspect&&require("inspector").open(l.inspect);let s={},e={},t=[],r={};if(!Bl.slice(2).length)throw sf(),new mr;if(l.requireCredentials){let S=await Promise.resolve().then(()=>(fs(),Sn)),_=await S.getProjectId(),C=await S.getToken();(!_||!C)&&await S.doLogin()}if(l.login)return await(await Promise.resolve().then(()=>(fs(),Sn))).doLogin(),{loginMode:!0};if(l.init)return{initCodimMode:!0,initTestProject:l.init};if(l.version){let S="Testim CLI Version: ";Ho.npm_package_version&&(console.log(S,Ho.npm_package_version),Vo(0));let _=nt();_&&(console.log(S,_),Vo(0)),console.log("Could not find version, please check the package.json manually"),Vo(0)}if(l.installLazyDeps)return{installLazyDepsMode:!0};l.disableFileCache&&sm();let n=l.fileCacheLocation||l.usePrefechedData||l.createPrefechedData;if(n){let S=Ne.resolve(n);tm(S)}if(l.usePrefechedData&&nm(),l.playerRequirePath){let S=Ne.resolve(l.playerRequirePath);console.log("Using Local Clickim for Player Require Path =",S);let _=Ne.join(S,"tsconfig.node.json"),L=require("ts-node").register({project:_,ignore:[/node_modules/,new RegExp(`^${mt.escapeRegExp(Ne.relative(St(),__dirname))}`)],transpileOnly:!0});require("tsconfig-paths").register({paths:L.config.options.paths,baseUrl:L.config.options.baseUrl}),(Ee(),G(kr)).options.playerPath=S;let V=require("module"),Y=V.prototype.require;V.prototype.require=function(fe){return fe==="rox-alias"?Y.call(this,"rox-node"):Y.apply(this,arguments)}}if(l.caFile&&(global.caFileContent=Ul.readFileSync(l.caFile)),l.proxy&&(global.proxyUri=l.proxy,global.SuperagentProxy=require("superagent-proxy"),global.ProxyAgent=require("proxy-agent"),global.HttpsProxyAgent=require("https-proxy-agent")),l.proxyForGrid&&!l.proxy)throw new R("missing --proxy option");if(zm(l))return Km(l);try{let S={};l.configFile?S=require(Ne.join(St(),l.configFile)).config:l.optionsFile&&(S=require(Ne.join(St(),l.optionsFile))),S&&typeof S.then=="function"&&(S=await S),Object.keys(S).forEach(_=>{let C=Dv(_);l[C]=Uv(l[C],S[_])})}catch(S){throw S.message=`Unable to read options file: ${S.message}`,S}if(l.tunneld)return{tunnel:!0,tunnelPort:l.tunnelPort,tunnelRoutes:l.tunnelRoutes,tunnelRoutesOutput:l.tunnelRoutesOutput,tunnelHostHeader:l.tunnelHostHeader,tunnelRegion:l.tunnelRegion,tunnelDiagnostics:l.tunnelDiagnostics,tunnelUseHttpAddress:l.tunnelUseHttpAddress,tunnelOnlyMode:!0,token:l.token,project:l.project};let o=((g=l.testConfig)==null?void 0:g.length)||((y=l.testConfigId)==null?void 0:y.length),i=((w=l.testPlan)==null?void 0:w.length)||((P=l.testPlanId)==null?void 0:P.length),a=((b=l.suite)==null?void 0:b.length)||((v=l.suiteId)==null?void 0:v.length);if(l.seleniumCapsFile)try{r=require(Ne.join(St(),l.seleniumCapsFile))}catch(S){throw new R(`Failed to parse selenium caps file file error: ${S.message}`)}if((I=l.reporters)!=null&&I.includes("junit")&&!l.reportFile&&console.log("Warning: please define --report-file option for JUnit reporter"),!l.tunnel&&l.externalLambdatestTunnelId)throw new R("missing --tunnel parameter");if(!l.tunnel&&l.externalLambdatestUseWss)throw new R("missing --tunnel parameter");if(!l.tunnel&&[l.tunnelPort,l.tunnelHostHeader,l.tunnelRegion,l.tunnelDiagnostics].some(Boolean))throw new R("missing --tunnel parameter");if(l.chromeExtraPrefs)try{e=require(Ne.join(St(),l.chromeExtraPrefs))}catch(S){throw new R(`Failed to read/open chrome extra prefs file error: ${S.message}`)}if(l.chromeExtraArgs){let S=l.chromeExtraArgs.split(",");for(let _ of S){let[C]=_.split("=");Zm.includes(C)||l.useLocalChromeDriver||l.useChromeLauncher?(t.push(_),C==="proxy-server"&&t.push("proxy-bypass-list=*.testim.io;*.coralogix.com;*.cloudinary.com;*.rollout.io")):console.warn(`Ignoring an unsupported chrome arg (${C}), allowed values: ${JSON.stringify(Zm)}`)}}if(l.paramsFile)try{s=Object.assign({},s,require(Ne.join(St(),l.paramsFile)))}catch(S){throw new R(`Failed to read/open params file error: ${S.message}`)}if(l.params)try{s=Object.assign({},s,JSON.parse(l.params))}catch(S){throw new R(`Failed to parse params string error: ${S.message}`)}if(l.sauceUser&&!l.sauceKey||!l.sauceUser&&l.sauceKey)throw new R("missing --sauce-user <sauce-user> or --sauce-key <sauce-key>");if(l.sauceUser&&l.sauceKey&&($v(),l.saucelabs={},l.saucelabs.username=l.sauceUser,l.saucelabs.accessKey=l.sauceKey),l.sauceOptions)try{let S=require(Ne.join(St(),l.sauceOptions)),_=S.platformName&&["ios","android"].includes(S.platformName.toLowerCase());if(S.browserName){let L=S.browserName.toLowerCase();switch(L){case"microsoftedge":l.browser="edge";break;default:l.browser=L}}l.browser==="edge"&&parseFloat(S.version)>=oo&&(l.browser="edge-chromium");let C=parseFloat(S.version)<50&&!["dev","beta"].includes(S.version);if(!_&&l.browser==="chrome"&&C)throw new R("The minimum chrome supported version is 50.0");l.saucelabs=Object.assign({},l.saucelabs,S)}catch(S){throw new R(`Failed to parse saucelabs options file error: ${S.message}`)}if(l.browserstackUser&&!l.browserstackKey||!l.browserstackUser&&l.browserstackKey)throw new R("missing --browserstack-user <browserstack-user> or --browserstack-key <browserstack-key>");if(l.browserstackUser&&l.browserstackKey&&(Wv(),l.browserstack={},l.browserstack["browserstack.user"]=l.browserstackUser,l.browserstack["browserstack.key"]=l.browserstackKey),l.browserstackOptions)try{let S=require(Ne.join(St(),l.browserstackOptions)),_=S.platform&&["mac","android"].includes(S.platform.toLowerCase());if(S.browserName&&(l.browser=S.browserName.toLowerCase()),l.browser==="edge"&&parseFloat(S.browser_version)>=oo&&(l.browser="edge-chromium"),!_&&parseFloat(S.browser_version)<50&&l.browser==="chrome")throw new R("The minimum chrome supported version is 50.0");l.browserstack=Object.assign({},l.browserstack,S)}catch(S){throw new R(`Failed to parse browserstack options file error: ${S.message}`)}if(l.perfecto={},l.perfectoToken&&(l.perfecto.securityToken=l.perfectoToken),l.perfectoOptions)try{let S=require(Ne.join(St(),l.perfectoOptions)),_={location:"US East",securityToken:l.perfectoToken};l.perfecto=Object.assign({},_,S)}catch(S){throw new R(`Failed to parse perfecto options file error: ${S.message}`)}if(l.testobjectSauce={},l.testobjectKey&&(l.testobjectSauce.testobjectApiKey=l.testobjectKey),l.testobjectOptions)try{let S=require(Ne.join(St(),l.testobjectOptions)),_={testobjectApiKey:l.testobjectKey};l.testobjectSauce=Object.assign({},_,S)}catch(S){throw new R(`Failed to parse test object options file error: ${S.message}`)}if(!l.project){let _=await(await Promise.resolve().then(()=>(fs(),Sn))).getProjectId();if(_)l.project=_;else throw new R("missing project-id info, either --login to provide new credentials or use --project <project-id>")}l.mode||(l.mode=l.run.length?"selenium":"extension"),l.testConfig&&(l.testConfig=[l.testConfig].flat()),l.testConfigId&&(l.testConfigId=[l.testConfigId].flat()),l.retries=!l.retries||typeof l.retries=="boolean"?1:Number(l.retries)+1,l.browserTimeout=!l.browserTimeout||typeof l.browserTimeout=="boolean"?60*1e3:l.browserTimeout,l.newBrowserWaitTimeout=!l.newBrowserWaitTimeout||typeof l.newBrowserWaitTimeout=="boolean"?10*60*1e3:l.newBrowserWaitTimeout*60*1e3,l.getBrowserTimeout||(l.getBrowserTimeout=l.browserTimeout),l.getBrowserRetries||(l.getBrowserRetries=Math.round(l.newBrowserWaitTimeout/l.browserTimeout)),l.getSessionTimeout=l.browserTimeout<l.getSessionTimeout?l.getSessionTimeout:l.browserTimeout,l.driverRequestTimeout=l.browserTimeout<l.driverRequestTimeout?l.driverRequestTimeout:l.browserTimeout;let c=Boolean(l.timeout);if(l.timeout=!l.timeout||typeof l.timeout=="boolean"?10*60*1e3:l.timeout,l.beforeParallel=!l.beforeParallel||typeof l.beforeParallel=="boolean"?1:Number(l.beforeParallel),l.parallel=!l.parallel||typeof l.parallel=="boolean"?1:Number(l.parallel),l.afterParallel=!l.afterParallel||typeof l.afterParallel=="boolean"?1:Number(l.afterParallel),l.parallel>1&&l.run&&!l.gridId&&!l.grid&&(!l.testPlan||l.testPlan.length===0)&&!((k=l.testPlanId)!=null&&k.length)&&jv.isTTY&&!l.headless&&!Ho.TERM&&((await require("prompts")({type:"toggle",name:"isSure",message:"Running in parallel without --headless flag will open several browsers on your computer. Are you sure?",initial:!1,active:"yes",inactive:"no"})).isSure||Vo(0)),l.tunnelPort=!l.tunnelPort||typeof l.tunnelPort=="boolean"?"80":l.tunnelPort,l.port&&(l.port=Number(l.port)),l.retries<=0||Number.isNaN(l.retries))throw new R("test failure retry count could not be a negative number or string, --retries <max_num_of_retries>");if(l.retries>21)throw new R("Max number of retries exceeded. Number cannot be greater than 20, --retries <max_num_of_retries>");if(!l.token){let _=await(await Promise.resolve().then(()=>(fs(),Sn))).getToken();if(_)l.token=_;else throw new R("missing Testim Access Token, either --login to provide new credentials or use --token <testim-access-token>, contact info@testim.io if you need a new one.")}if(l.browserTimeout<=0||Number.isNaN(l.browserTimeout))throw new R("get browser timeout could not be a negative number, --browser-timeout <get-browser-timeout>");if(l.newBrowserWaitTimeout<=0||Number.isNaN(l.newBrowserWaitTimeout))throw new R("max new browser wait timeout could not be a negative number, --new-browser-wait-timeout <max-wait-to-browser>");if(l.timeout<=0||Number.isNaN(l.timeout))throw new R("test run timeout could not be a negative number, --timeout <run-timeout>");if(l.beforeParallel<=0||Number.isNaN(l.beforeParallel))throw new R("before-parallel could not be a negative number or not number, --before-parallel <number-of-tests>");if(l.parallel<=0||Number.isNaN(l.parallel))throw new R("parallel could not be a negative number or not number, --parallel <number-of-tests>");if(l.afterParallel<=0||Number.isNaN(l.afterParallel))throw new R("after-parallel could not be a negative number or not number, --after-parallel <number-of-tests>");if(![Q.EXTENSION,Q.SELENIUM,Q.APPIUM].includes(l.mode))throw new R(`runner mode <${l.mode}> is not supported`);if(l.mode!==Q.SELENIUM&&l.disableNativeEvents)throw new R("disable-native-events is only applicable in selenium mode");if(!l.browser&&!o&&!i&&(l.browser="chrome"),l.appiumLogLevel||(l.appiumLogLevel="silent"),!Bv.includes(l.appiumLogLevel))throw new R(`runner appium-log-level <${l.appiumLogLevel}> is not supported`);if(l.testPlan&&l.testPlan.length===0&&l.testPlanId&&l.testPlanId.length===0){if(typeof l.host!="string"&&typeof l.grid!="string"&&typeof l.gridId!="string"&&l.run.length===0&&!l.useLocalChromeDriver&&!l.useChromeLauncher&&!l.createPrefechedData)throw new R("missing remote grid address parameter, specify --host <host-name-or-ip> or --grid <grid-name> or --grid-id <grid-id>")}else if(l.testId.length||l.label.length||l.name.length||o||l.browser||a||l.useLocalChromeDriver||l.useChromeLauncher)throw new R("cannot set --testId, --label, --name, --browser, --test-config, --test-config-id, --use-local-chrome-driver --use-chrome-launcher or --suite with --test-plan option");if(!i&&(l.beforeParallel!==1||l.afterParallel!==1))throw new R("cannot set --before-parallel or --after-parallel without --test-plan option");if((l.testId.length||i||l.label.length||l.name.length||a)&&l.file)throw new R("Cannot pass codeful automation tests with --testId --label --name or --suite");if([l.host,l.grid,l.gridId].filter(Boolean).length>1)throw new R("please define exactly one of --grid or --grid-id or --host");if((D=l.host)!=null&&D.includes("/")&&(/^(f|ht)tps?:\/\//i.test(l.host)||(l.host=`http://${l.host}`),l.host=tf.parse(l.host).hostname),l.resultLabel.length){l.resultLabel=l.resultLabel.map(_=>_.trim()).filter(Boolean);let S=l.resultLabel.filter(_=>_.length>=250).filter(Boolean);if(l.branch==="auto-detect"&&l.resultLabel.includes("auto-detect-branch")&&Rr()&&l.resultLabel.unshift(Rr()),S.length)throw new R("A result label cannot exceed 250 characters")}let d=$m(l),m=Bo(l);if(!l.w3cCapabilities&&!l.oldCapabilities)throw new R("cannot set --w3c-capabilities and --old-capabilities options as false");if(l.protocol||(l.protocol=l.port===443?"https":"http"),!["http","https"].includes(l.protocol))throw new R("invalid --protocol value, allow --protocol http or https");if(l.rerunFailedByRunId&&l.branch)throw new R("It is not possible to use --branch with --rerun-failed-by-run-id. Tests will automatically run on the same branch that was used in the original run");if(l.rerunFailedByRunId&&(a||l.name.length||l.testId.length||l.label.length||i))throw new R("Re-running failed tests is not possible when suite (--suite), label (--label), plan (--test-plan), or other test flags (--test) are provided. Please remove these flags and try again");if(l.run.length){let S=require("glob");if(l.files=mt.flatMap(l.run,_=>S.sync(_)),l.files.length===0)throw new R(`No files found at path '${l.run}'.`)}else l.files=[];if(l.setRetention&&!mt.inRange(mt.parseInt(l.setRetention),1,11))throw new R("Please provide the number of days that the test results will be retained for (--set-retention must be a whole number between 1 to 10)");l.setRetention&&(l.setRetention=Number(l.setRetention));let p="is no longer supported, please use --override-mapping-file";if(l.mockNetworkHar)throw new R(`--mock-network-har ${p}`);if(l.mockNetworkPattern)throw new R(`--mock-network-pattern ${p}`);if(l.disableMockNetwork&&l.overrideMappingFile)throw new R("You can either use --disable-mock-network or --override-mapping-file");if(!l.collectCodeCoverage&&l.codeCoverageSourceMapPath)throw new R("cannot set --code-coverage-source-map-path without passing --collect-code-coverage");if(!l.collectCodeCoverage&&l.codeCoverageReporter.length)throw new R("cannot set --code-coverage-reporter without passing --collect-code-coverage");if(!l.collectCodeCoverage&&l.codeCoverageInclude.length)throw new R("cannot set --code-coverage-include without passing --collect-code-coverage");if(l.collectCodeCoverage&&l.codeCoverageReporter&&mt.difference(l.codeCoverageReporter,Fl).length){let S=mt.difference(l.codeCoverageReporter,Fl);throw new R(`invalid --code-coverage-reporter parameters ${S.join("/")}`)}l.codeCoverageReporter=l.codeCoverageReporter.length===0?["html","text"]:l.codeCoverageReporter,l.codeCoverageInclude=l.codeCoverageInclude.length===0?["src/**"]:l.codeCoverageInclude;let f={mockNetworkHar:"--mock-network-har",mockNetworkPattern:"--mock-network-pattern",overrideMappingFile:"--override-mapping-file",codeCoverageUrlFilter:"--code-coverage-url-filter",collectCodeCoverage:"--collect-code-coverage",disableMockNetwork:"--disable-mock-network",useChromeLauncher:"--use-chrome-launcher"},h=Object.keys(f).filter(S=>Boolean(l[S]));if(l.mode!==Q.EXTENSION&&h.length){let S=h.length>1?"are":"is";throw new R(`${h.map(_=>f[_]).join(" and ")} ${S} only applicable in extension mode`)}if(l.tmsFieldFile)try{let S=Ul.readFileSync(l.tmsFieldFile);l.tmsCustomFields=JSON.parse(S)}catch(S){throw new R(`failed to parse field file error: ${S.message}`)}if(l.highSpeed&&(Fv("--high-speed"," --turbo-mode"),l.turboMode=!0),l.deviceUdid&&(l.deviceModel||l.osVersion))throw new R("It is not possible to use --osVersion or --deviceModel with --device-udid. device-udid is unique and cannot be combined with another flag");if(l.resetAppData&&l.fullReset)throw new R("It is not possible to set both --reset-app-data and --full-reset capabilities to true at the same time!");if(l.resetOnSessionStartOnly&&!l.fullReset&&console.warn("Ignoring --reset-on-session-start-only flag, should be used when --full-reset is provided for ios runs"),l.lightweightMode)try{let S={general:!0,disableLabs:!0,disableFeatureFlags:!0,disableAssets:!0,disablePixelValidation:!0,disableResults:!0,disableStepDelay:!0,disableRemoteStep:!0,assumePreloadedSharedSteps:!0,disableVisibilityCheck:!1,disableLocators:!1,bypassSetup:!1,disableAutoImprove:!0,disableQuotaBlocking:!0,onlyTestIdsNoSuite:!0,uploadAssetsAndResultsOnFailure:!0,preloadTests:!0,disableProjectDefaults:!0,type:"lightweight"},_=typeof l.lightweightMode=="string"?JSON.parse(l.lightweightMode):{};l.lightweightMode=Object.assign({},S,_)}catch(S){throw new R(`failed to parse lightweightMode settings error: ${S.message}`)}else l.turboMode&&l.mode===Q.EXTENSION&&(l.lightweightMode={general:!0,disableLabs:!1,disableFeatureFlags:!1,disableAssets:!0,disablePixelValidation:!1,disableResults:!0,disableStepDelay:!0,disableRemoteStep:!1,assumePreloadedSharedSteps:!1,disableVisibilityCheck:!1,disableLocators:!1,bypassSetup:!1,disableQuotaBlocking:!1,disableAutoImprove:!1,onlyTestIdsNoSuite:!1,uploadAssetsAndResultsOnFailure:!0,preloadTests:!1,disableProjectDefaults:!1,type:"turboMode"});if(typeof l.baseUrl=="boolean")throw new R("base url cannot be used as a flag, and must contain a string value");return{testId:[l.testId].flat(),name:[l.name].flat(),label:[l.label].flat(),suites:[l.suite].flat(),suiteIds:[l.suiteId].flat(),testPlan:[l.testPlan].flat(),testPlanIds:[l.testPlanId].flat(),files:[l.files].flat(),webpackConfig:l.webpackConfig,reportFile:l.reportFile,urls:l.urls,reportFileClassname:l.overrideReportFileClassname,reporters:l.reporters,project:l.project,host:l.host,headless:l.headless,useLocalChromeDriver:l.useLocalChromeDriver,chromeBinaryLocation:l.chromeBinaryLocation,useChromeLauncher:l.useChromeLauncher,port:l.port,grid:l.grid,gridId:l.gridId,disableNativeEvents:l.disableNativeEvents,saucelabs:l.saucelabs,browserstack:l.browserstack,baseUrl:l.baseUrl,branch:(l.branch==="auto-detect"?Rr():l.branch)||"master",autoDetect:l.branch==="auto-detect",token:l.token,userParamsData:s,mode:l.mode,isRegressionBaselineRun:l.isRegressionBaselineRun,browser:l.browser,beforeParallel:l.beforeParallel,parallel:l.parallel,afterParallel:l.afterParallel,canary:l.canary,rerunFailedByRunId:l.rerunFailedByRunId,disableGridCheck:l.disableGridCheck,disableTimeoutRetry:l.disableTimeoutRetry,resultLabels:l.resultLabel,path:l.path,protocol:l.protocol,perfecto:l.perfecto,experitestToken:l.experitestToken,testobjectSauce:l.testobjectSauce,gridUsername:l.gridUsername,gridPassword:l.gridPassword,overrideExecutionName:l.overrideExecutionName,tmsSuppressReporting:Boolean(l.suppressTmsReporting)||Boolean(l.tmsSuppressReporting),tmsRunId:l.tmsRunId,tmsCustomFields:l.tmsCustomFields,proxyForGrid:l.proxyForGrid,retentionDays:l.setRetention,passZeroTests:Boolean(l.passZeroTests),runQuarantinedTests:Boolean(l.runQuarantinedTests),deviceModel:l.deviceModel,deviceUdid:l.deviceUdid,osVersion:l.osVersion,appId:l.appId,appiumLogLevel:l.appiumLogLevel,resetAppData:l.resetAppData,fullReset:l.fullReset,resetOnSessionStartOnly:l.resetOnSessionStartOnly,ext:l.ext,extensionLocation:[l.extensionPath||d].flat(),extensionPath:l.extensionPath,playerLocation:l.playerPath||m,playerPath:l.playerPath,playerRequirePath:l.playerRequirePath,tunnel:l.tunnel,tunnelPort:l.tunnelPort,tunnelRoutes:l.tunnelRoutes,tunnelRoutesOutput:l.tunnelRoutesOutput,tunnelHostHeader:l.tunnelHostHeader,tunnelRegion:l.tunnelRegion,tunnelDiagnostics:l.tunnelDiagnostics,tunnelUseHttpAddress:l.tunnelUseHttpAddress,externalLambdatestTunnelId:l.externalLambdatestTunnelId,externalLambdatestUseWss:l.externalLambdatestUseWss||!1,externalLambdatestDisableAutomationTunneling:Boolean(l.externalLambdatestDisableAutomationTunneling),externalLambdatestMitm:Boolean(l.externalLambdatestMitm),beforeTest:l.beforeTest,afterTest:l.afterTest,beforeSuite:l.beforeSuite,afterSuite:l.afterSuite,timeout:l.timeout,timeoutWasGiven:c,browserTimeout:l.browserTimeout,newBrowserWaitTimeout:l.newBrowserWaitTimeout,getBrowserTimeout:l.getBrowserTimeout,getBrowserRetries:l.getBrowserRetries,getSessionTimeout:l.getSessionTimeout,getSessionRetries:l.getSessionRetries,driverRequestTimeout:l.driverRequestTimeout,driverRequestRetries:l.driverRequestRetries,testStartTimeout:l.testStartTimeout,testConfigNames:l.testConfig,testConfigIds:l.testConfigId,overrideMappingFile:l.overrideMappingFile,disableMockNetwork:l.disableMockNetwork,codeCoverageUrlFilter:l.codeCoverageUrlFilter,collectCodeCoverage:l.collectCodeCoverage,codeCoverageReportPath:l.codeCoverageReportPath,codeCoverageSourceMapPath:l.codeCoverageSourceMapPath,codeCoverageReporter:l.codeCoverageReporter,codeCoverageInclude:l.codeCoverageInclude,executionId:l.executionId,remoteRunId:l.remoteRunId,schedulerId:l.schedulerId,source:l.source,resultId:l.resultId,installCustomExtension:l.installCustomExtension,w3cCapabilities:l.w3cCapabilities,oldCapabilities:l.oldCapabilities,chromeBlockLocation:l.chromeBlockLocation,chromeUserDataDir:l.chromeUserDataDir,retries:l.retries,chromeExtraPrefs:e,chromeExtraArgs:t,disableCookiesSameSiteNoneRequiresSecure:l.disableCookiesSameSiteNoneRequiresSecure,seleniumCapsFileContent:r,shouldMonitorPerformance:l.monitorPerformance,user:l.user,lightweightMode:l.lightweightMode,createPrefechedData:l.createPrefechedData,saveRCALocally:l.saveRcaLocally,exitCodeIgnoreFailingTests:l.exitCodeIgnoreFailingTests,disableSockets:l.disableSockets,intersections:{labels:l.intersectWithLabel.length?[l.intersectWithLabel].flat():void 0,suiteNames:l.intersectWithSuite.length?[l.intersectWithSuite].flat():void 0,suiteIds:l.intersectWithSuiteId.length?[l.intersectWithSuiteId].flat():void 0},downloadBrowser:l.downloadBrowser}}});var Vv={};var hs,af,cf,zo,qv,lf=T(()=>{"use strict";hs=E(require("path")),af=require("fs"),cf=require("child_process"),zo=hs.resolve(__filename),qv=!zo.includes("node_modules")&&hs.dirname(zo).endsWith("src");qv&&!(0,af.existsSync)(hs.resolve(zo,"..","..","..","webdriverio","build","index.js"))&&(console.log("Hi developer, we're initializing the runner dev env for the first time for you \u2764\uFE0F"),(0,cf.execSync)("yarn workspace @testim/webdriverio build",{cwd:hs.resolve(zo,"..","..")}))});var $l={};$($l,{installAllLazyDependencies:()=>Kv,lazyRequire:()=>ge});async function ge(s,e={}){let t=Lc(s);if(t)return t;let r;e.silent||(r=(0,uf.default)(`Installing ${s} before first usage...`).start());try{let n=await zv(s);return r&&r.succeed(),n}catch(n){Hv.warn("failed to install dependency lazily",{dependency:s,err:n});let o=pf(s),i=`${s}@${o}`,c=process.argv.includes("npx")?"":"-g ",u=`Installation of ${s} failed. This typically means you are running an out-of-date version of Node.js or NPM.Please manually install by running the following command: npm install ${c}${i}`;throw r&&r.fail(u),n}}async function zv(s){return gs.has(s)||(gs.set(s,df(s)),gs.get(s).catch(()=>{gs.delete(s)})),gs.get(s)}async function df(s){let e=Lc(s);if(e)return e;let t=pf(s),r=`${s}@${t}`;return await Ro(lt(),r),Vt(s)}async function Kv(){let s=Object.keys(Ga);for(let e of s)await df(e)}function pf(s){let e=Object.entries(Ga).find(([t])=>t===s);if(!e)throw new Error("The given package name is not lazyDependencies");return e[1]}var uf,Hv,gs,ft=T(()=>{"use strict";uf=E(require("ora"));un();j();F();io();ln();Hv=x("lazy-require"),gs=new Map});var gf={};$(gf,{init:()=>Xv});async function Xv(s){var w,P;let e=typeof s=="string"?s:"";(typeof s!="string"||!s.trim())&&(e=(await(0,Gl.default)({type:"text",name:"project",message:"Please enter Project name",validate:v=>String(v).length>3})).project);let t=Kt.resolve(e);Jt.existsSync(t)&&Jt.readdirSync(t).length!==0&&(console.log(`${t} is not empty. Quitting...`),process.exit(1));let r=t.substr(Math.max(t.lastIndexOf("/"),t.lastIndexOf("\\"))+1),n=(0,ff.default)(r);if(!n.validForNewPackages){let b=`The name '${r}' is not a valid package name:`;throw console.log(Ko.default.red(b)),n.errors&&n.errors.forEach(v=>console.log(Ko.default.red(v))),n.warnings&&n.warnings.forEach(v=>console.log(Ko.default.yellowBright(`warning: ${v}`))),new R(`${b}
20
+ `))},Fl=["clover","html","json-summary","json","lcov","lcovonly","teamcity","text-lcov","text-summary","text"],{env:zo,argv:Bl,stdout:Fv,exit:Ho,cwd:St}=global.process,jv=["trace","debug","info","warn","error","silent"];Rc(Bl,new Set(["run","connect","agent","tunneld","start","init","install-lazy-deps"]));jl.description("Testim.io CLI").option("--run [file-glob-pattern]","codeful test files to run",Ae,[]).option("-h --help","output usage information",sf).option("-o --options-file [options-file.json]","").option("-c --config-file [config-file.js]","").option("--test-config [test-config]","test config name to override for all tests in current execution",Ae,[]).option("--test-config-id [test-config-id]","test config ID to override for all tests in current execution",Ae,[]).option("--params-file [params-file.json]","").option("--params [params-json-string]","").option("-t, --testId [test-id]","test ID to run",Ae,[]).option("-w, --webpackConfig [webpack-configuration]","webpack configuration used to build the code based project").option("--test-id [test-id]","test ID to run",Ae,[]).option("-l, --label [label]","labels to search test by",Ae,[]).option("-n, --name [test-name]","test name to run",Ae,[]).option("--project [project-id]","project ID").option("-r, --report-file [report junit xml path]","where to save junit xml results file").option("--urls","add step urls to the junit report").option("--override-report-file-classname [override-report-file-classname]","custom junit class name for the junit reporter").option("--reporters [names]","report types",Dv).option("-h, --host [host-name]","host name or ip containing the selenium grid").option("-p, --port [host-port]","host port").option("-g, --grid [grid-name]","grid name").option("--path [grid-path]","grid path").option("--protocol [grid-protocol]","grid protocol http or https").option("--grid-username [grid-username]","grid http basic auth username").option("--grid-password [grid-password]","grid http basic auth password").option("-gi --grid-id [grid-id]","grid ID").option("-b, --browser [browser-type]","browser type (chrome/firefox)").option("-h, --headless [headless]","run in headless mode").option("-m, --mode [runner-mode]","use extension or selenium mode (extension/selenium/appium)").option("--branch [branch]","branch name",void 0).option("--base-url [base-url]","change base-url to a specified url for all tests in current execution").option("--token [token]","identification token to testim").option("--is-regression-baseline-run","save doms and run results as regression baseline data").option("--parallel [number-of-tests]","number of tests to run in parallel").option("--before-parallel [number-of-tests]","number of tests to run in parallel during the before phase of a test plan").option("--after-parallel [number-of-tests]","number of tests to run in parallel during the after phase of a test plan").option("--canary [canary-mode]","enable canary mode",!1).option("--test-plan [test-plan-name]","test plan to run",Ae,[]).option("--test-plan-id [test-plan-id]","test plan to run",Ae,[]).option("--suite [suite-name]","suite to run",Ae,[]).option("--suite-id [suite-id]","suite ID to run",Ae,[]).option("--rerun-failed-by-run-id [run-id]","allows re-running failed tests from a specific run ID").option("--disable-grid-check [boolean]","disable checking if selenium grid is available",!1).option("--disable-native-events [boolean]","pass nativeEvents=false capability to the selenium browser (in selenium mode)",!1).option("--disable-timeout-retry [boolean]","disable retry after test pass test timeout",!1).option("--ca-file [ca-file-location]","ca certificate file location").option("--proxy [proxy-url]","proxy url to all requests").option("--proxy-for-grid [proxy-for-grid]","used together with --proxy to also router grid traffic through a proxy").option("--result-label [result-label]","result label",Ae,[]).option("-oen --override-execution-name [execution-name]","override the default execution name","").option("--retries [max_num_of_retries]","number of retries on test failure, defaults to 0 (no retries)",Number,0).option("--set-retention [retention-in-days]","set the number of days for results retention").option("--user [user-id]","user ID for local Testim-CLI").option("--pass-zero-tests","don't fail the run if no tests were found").option("--device-model [device-model]","The device model to use, iPhone 12, Nexus 5X, SM-G900P etc....").option("--device-udid [device-udid]","the device unique id").option("--os-version [os-version]","The operating system version number").option("--app-id [app-id]","The application id from app library on Testim Editor App").option("--appium-log-level [appium-log-level]","Level of logging verbosity").option("-rad --reset-app-data [reset-app-data]","set noReset appium capability to true, default value true!",!1).option("-fr --full-reset [full-reset]","set fullReset appium capability to true to reinstall application on session start and session end").option("-roso --reset-on-session-start-only [reset-on-session-start-only]","set resetOnSessionStartOnly appium capability to true to avoid uninstall app on session end (ios run only)",!1).option("-str --suppress-tms-reporting [suppress-tms-reporting]","disable test management reporting",!1).option("-tsr --tms-suppress-reporting [tms-suppress-reporting]","disable test management reporting",!1).option("-tid --tms-run-id [tms-run-id]","update existing result in test management","").option("-tff --tms-field-file [tms-field-file.json]","pass field file location to add custom result field to the tms result report","").option("--disable-file-cache","disable internal CLI file caching").option("--file-cache-location [directory]"," internal CLI file caching location").option("--test-start-timeout [test-start-timeout]","The time to wait for a test to start after getting a browser session",Number,Number(zo.TESTIM_TEST_START_TIMEOUT)||2*60*1e3).option("--timeout [test-timeout]","Test run timeout in milliseconds",Number).option("--browser-timeout [open-browser-timeout]","Get browser from grid timeout in milliseconds",Number).option("--new-browser-wait-timeout [max-wait-to-browser]","Maximum get browser wait in minutes",Number).option("--get-browser-timeout [get-browser-timeout]","Timeout for a single attempt to get browser from the grid configured in the project's plan",Number).option("--get-browser-retries [get-browser-retries]","Number of attempts to get browser from the grid configured in the project's plan",Number).option("--get-session-timeout [get-session-timeout]",'Timeout for "/session" request to the selenium server',Number,(0,Ml.default)("90s")).option("--get-session-retries [get-session-retries]",'Retries for "/session" request to the selenium server',Number,3).option("--driver-request-timeout [driver-request-timeout]","Timeout for any WebDriver request to the grid server",Number,(0,Ml.default)("90s")).option("--driver-request-retries [driver-request-retries]","Retries for any WebDriver request to the grid server",Number,3).option("--use-local-chrome-driver [use-local-chrome-driver]","use a local ChromeDriver instance instead of a selenium grid").option("--chrome-binary-location [chrome-binary-location]","Chrome binary location").option("--use-chrome-launcher","use a local Chrome installation without selenium").option("-mnh --mock-network-har","use the HAR file configured in the Testim editor to mock network traffic").option("-mnp --mock-network-pattern [local file location path]","use a JSON rule file to mock network traffic (Rule file schema: https://help.testim.io/page/mocking-network-traffic)").option("-omf --override-mapping-file [local file location path]","pass map file location to override mock network (see schema: https://help.testim.io/page/mocking-network-traffic)").option("-dmn --disable-mock-network","Disable mock mode for the entire CLI run").option("--run-quarantined-tests","Run quarantine tests").option("--collect-code-coverage","collect code coverage for all js files under base url").option("--code-coverage-url-filter [url pattern]","collect code coverage for all js files matching url filter (url including asterisk)").option("--code-coverage-report-path [path]","where to save coverage report (default ./coverage)").option("--code-coverage-source-map-path [path]","path of source code").option("--code-coverage-reporter [reporter]",`set code coverage reporter (default html and text), options: ${Fl.join("/")}`,Ae,[]).option("--code-coverage-include [pattern]","set selecting files for coverage (default src/**)",Ae,[]).option("--sauce-user [sauce-lab-user]","user to connect to sauce labs").option("--sauce-key [sauce-lab-key]","key to use when connecting to sauce labs").option("--sauce-options [sauce-options]","json file of browser and os options for sauce").option("--browserstack-user [browserstack-user]","user to connect to browserStack").option("--browserstack-key [browserstack-key]","key to use when connecting to browserStack").option("--browserstack-options [browserstack-options]","json file of browser and os options for browserStack").option("--perfecto-token [perfecto-token]","security token to use when connecting to perfecto").option("--perfecto-options [perfecto-options]","json file of browser and os options for perfecto").option("--experitest-token [experitest-token]","security token to use when connecting to experitest").option("--testobject-key [testobject-key]","api key to use when connecting to testobject").option("--testobject-options [testobject-options]","json file of options for testobject").option("--ext [extension src path]","use extension from path (default it '/..')").option("--extension-path [path to extension archived file]","override the used extension").option("--install-custom-extension [chrome extension zipped file url or local path]","chrome extension to be installed in the browser").option("--player-path [path to player file]").option("--player-require-path [path to unminified player - development only]").option("--init [init]","Path for an initial test app").option("--inspect [port]","Opens node inspector at given port",Number).option("--login","Log in to Testim").option("--require-credentials","Log in to Testim if not already logged in").option("--tunneld","run a tunnel daemon only").option("--tunnel [tunnel]","enable tunnel").option("--tunnel-routes [routes]","tunnel routes for cloudflare tunnels").option("--tunnel-port [tunnel-port]","tunnel port address").option("--tunnel-host-header [tunnel-host-header]","tunnel host header").option("--tunnel-region [tunnel-region]","ngrok tunnel region").option("--tunnel-diagnostics","collect ngrok tunnel diagnostics").option("--tunnel-use-http-address [tunnel-use-http-address]","use http:// address instead of https://",!1).option("--external-lambdatest-tunnel-id [tunnel-id]","use existing lambdatest tunnel ID").option("--external-lambdatest-use-wss","use wss instead of ssh for LT",!1).option("--external-lambdatest-disable-automation-tunneling","don't tunnel Testim calls in LT tunnel",!0).option("--external-lambdatest-mitm","Turn on LT Man in the middle",!1).option("--w3c-capabilities [enable-w3c-caps-mode]","enable/disable w3c capabilities format (default enable)",JSON.parse,!0).option("--old-capabilities [enable-old-caps-mode]","enable/disable old capabilities format (default enable)",JSON.parse,!0).option("--disable-sockets","Disable CLI sockets",!1).option("--executionId [execution-id]","","").option("--remoteRunId [remote-run-id]","","").option("--schedulerId [scheduler-id]","","").option("--source [source]","","cli").option("--resultId [result-id]","","").option("--connect, --agent [enable-agent-mode]","enable Testim CLI agent mode",!1).option("--start [enable-start]","Connect to testim and open the editor in a standalone browser",!1).option("--download-browser","when used with the start option, downloads a fixed version to run Testim editor in",!1).option("--agent-port [agent-port]","set agent port",Number,42543).option("--agent-bind [agent-host-bind]","set agent host bind","127.0.0.1").option("--chrome-extra-prefs [chrome-extra-prefs]","add extra chrome preferences","").option("--chrome-extra-args [chrome-extra-args]","add extra chrome arguments separated by ','","").option("--chrome-block-location [chrome-block-location]","block chrome geolocation",!1).option("--chrome-user-data-dir [chrome-user-data-dir]","use custom chrome user date dir",!1).option("--disable-cookies-same-site-none-requires-secure [disable-same-site-none-requires-secure]","Disable cookies without SameSite must be secure",!1).option("--selenium-caps-file [selenium-caps-file.json]","json file to merge into Testim selenium desired capabilities").option("--version [version]","print the current version of the Testim CLI and exit",!1).option("--monitor-performance","collect test playback performance data").option("--high-speed","DEPRECATED: use --turbo-mode instead").option("--turbo-mode","run in turbo mode").option("--lightweight-mode [settings]","run lightweight mode").option("--create-prefeched-data [location]","prefetch data into local cache file").option("--use-prefeched-data [location]","use prefetched data from local cache file, and force using only cached data").option("--save-rca-locally [path]","save root cause analysis assets locally").option("--exit-code-ignore-failing-tests","return exit code of zero when tests fail. non zero exit code will mean a real error occurred").option("--intersect-with-label [label]","Out of the execution's test list, run only those tests that have the specified label",Ae,[]).option("--intersect-with-suite [suiteName]","Out of the execution's test list, run only those tests that are included in the specified suite (by suite name)",Ae,[]).option("--intersect-with-suite-id [suiteId]","Out of the execution's test list, run only those tests that are included in the specified suite (by suite ID)",Ae,[]).option("--install-lazy-deps [install-lazy-deps]","Install all lazy dependencies from package.json",!1).parse(Bl);u=jl.opts(),Bv=()=>{u.grid||u.gridId||(u.host||(u.host="ondemand.saucelabs.com"),u.port||(u.port=80))},$v=()=>{u.grid||u.gridId||(u.host||(u.host="hub-cloud.browserstack.com"),u.port||(u.port=80))},Wv=async()=>{var g,y,w,C,b,v,I,k,D;u.inspect&&require("inspector").open(u.inspect);let s={},e={},t=[],r={};if(!Bl.slice(2).length)throw sf(),new fr;if(u.requireCredentials){let S=await Promise.resolve().then(()=>(fs(),En)),_=await S.getProjectId(),P=await S.getToken();(!_||!P)&&await S.doLogin()}if(u.login)return await(await Promise.resolve().then(()=>(fs(),En))).doLogin(),{loginMode:!0};if(u.init)return{initCodimMode:!0,initTestProject:u.init};if(u.version){let S="Testim CLI Version: ";zo.npm_package_version&&(console.log(S,zo.npm_package_version),Ho(0));let _=nt();_&&(console.log(S,_),Ho(0)),console.log("Could not find version, please check the package.json manually"),Ho(0)}if(u.installLazyDeps)return{installLazyDepsMode:!0};u.disableFileCache&&sm();let n=u.fileCacheLocation||u.usePrefechedData||u.createPrefechedData;if(n){let S=Ne.resolve(n);tm(S)}if(u.usePrefechedData&&nm(),u.playerRequirePath){let S=Ne.resolve(u.playerRequirePath);console.log("Using Local Clickim for Player Require Path =",S);let _=Ne.join(S,"tsconfig.node.json"),L=require("ts-node").register({project:_,ignore:[/node_modules/,new RegExp(`^${mt.escapeRegExp(Ne.relative(St(),__dirname))}`)],transpileOnly:!0});require("tsconfig-paths").register({paths:L.config.options.paths,baseUrl:L.config.options.baseUrl}),(Ee(),G(_r)).options.playerPath=S;let V=require("module"),Y=V.prototype.require;V.prototype.require=function(fe){return fe==="rox-alias"?Y.call(this,"rox-node"):Y.apply(this,arguments)}}if(u.caFile&&(global.caFileContent=Ul.readFileSync(u.caFile)),u.proxy&&(global.proxyUri=u.proxy,global.SuperagentProxy=require("superagent-proxy"),global.ProxyAgent=require("proxy-agent"),global.HttpsProxyAgent=require("https-proxy-agent")),u.proxyForGrid&&!u.proxy)throw new R("missing --proxy option");if(zm(u))return Km(u);try{let S={};u.configFile?S=require(Ne.join(St(),u.configFile)).config:u.optionsFile&&(S=require(Ne.join(St(),u.optionsFile))),S&&typeof S.then=="function"&&(S=await S),Object.keys(S).forEach(_=>{let P=Nv(_);u[P]=Mv(u[P],S[_])})}catch(S){throw S.message=`Unable to read options file: ${S.message}`,S}if(u.tunneld)return{tunnel:!0,tunnelPort:u.tunnelPort,tunnelRoutes:u.tunnelRoutes,tunnelRoutesOutput:u.tunnelRoutesOutput,tunnelHostHeader:u.tunnelHostHeader,tunnelRegion:u.tunnelRegion,tunnelDiagnostics:u.tunnelDiagnostics,tunnelUseHttpAddress:u.tunnelUseHttpAddress,tunnelOnlyMode:!0,token:u.token,project:u.project};let o=((g=u.testConfig)==null?void 0:g.length)||((y=u.testConfigId)==null?void 0:y.length),i=((w=u.testPlan)==null?void 0:w.length)||((C=u.testPlanId)==null?void 0:C.length),a=((b=u.suite)==null?void 0:b.length)||((v=u.suiteId)==null?void 0:v.length);if(u.seleniumCapsFile)try{r=require(Ne.join(St(),u.seleniumCapsFile))}catch(S){throw new R(`Failed to parse selenium caps file file error: ${S.message}`)}if((I=u.reporters)!=null&&I.includes("junit")&&!u.reportFile&&console.log("Warning: please define --report-file option for JUnit reporter"),!u.tunnel&&u.externalLambdatestTunnelId)throw new R("missing --tunnel parameter");if(!u.tunnel&&u.externalLambdatestUseWss)throw new R("missing --tunnel parameter");if(!u.tunnel&&[u.tunnelPort,u.tunnelHostHeader,u.tunnelRegion,u.tunnelDiagnostics].some(Boolean))throw new R("missing --tunnel parameter");if(u.chromeExtraPrefs)try{e=require(Ne.join(St(),u.chromeExtraPrefs))}catch(S){throw new R(`Failed to read/open chrome extra prefs file error: ${S.message}`)}if(u.chromeExtraArgs){let S=u.chromeExtraArgs.split(",");for(let _ of S){let[P]=_.split("=");Zm.includes(P)||u.useLocalChromeDriver||u.useChromeLauncher?(t.push(_),P==="proxy-server"&&t.push("proxy-bypass-list=*.testim.io;*.coralogix.com;*.cloudinary.com;*.rollout.io")):console.warn(`Ignoring an unsupported chrome arg (${P}), allowed values: ${JSON.stringify(Zm)}`)}}if(u.paramsFile)try{s=Object.assign({},s,require(Ne.join(St(),u.paramsFile)))}catch(S){throw new R(`Failed to read/open params file error: ${S.message}`)}if(u.params)try{s=Object.assign({},s,JSON.parse(u.params))}catch(S){throw new R(`Failed to parse params string error: ${S.message}`)}if(u.sauceUser&&!u.sauceKey||!u.sauceUser&&u.sauceKey)throw new R("missing --sauce-user <sauce-user> or --sauce-key <sauce-key>");if(u.sauceUser&&u.sauceKey&&(Bv(),u.saucelabs={},u.saucelabs.username=u.sauceUser,u.saucelabs.accessKey=u.sauceKey),u.sauceOptions)try{let S=require(Ne.join(St(),u.sauceOptions)),_=S.platformName&&["ios","android"].includes(S.platformName.toLowerCase());if(S.browserName){let L=S.browserName.toLowerCase();switch(L){case"microsoftedge":u.browser="edge";break;default:u.browser=L}}u.browser==="edge"&&parseFloat(S.version)>=oo&&(u.browser="edge-chromium");let P=parseFloat(S.version)<50&&!["dev","beta"].includes(S.version);if(!_&&u.browser==="chrome"&&P)throw new R("The minimum chrome supported version is 50.0");u.saucelabs=Object.assign({},u.saucelabs,S)}catch(S){throw new R(`Failed to parse saucelabs options file error: ${S.message}`)}if(u.browserstackUser&&!u.browserstackKey||!u.browserstackUser&&u.browserstackKey)throw new R("missing --browserstack-user <browserstack-user> or --browserstack-key <browserstack-key>");if(u.browserstackUser&&u.browserstackKey&&($v(),u.browserstack={},u.browserstack["browserstack.user"]=u.browserstackUser,u.browserstack["browserstack.key"]=u.browserstackKey),u.browserstackOptions)try{let S=require(Ne.join(St(),u.browserstackOptions)),_=S.platform&&["mac","android"].includes(S.platform.toLowerCase());if(S.browserName&&(u.browser=S.browserName.toLowerCase()),u.browser==="edge"&&parseFloat(S.browser_version)>=oo&&(u.browser="edge-chromium"),!_&&parseFloat(S.browser_version)<50&&u.browser==="chrome")throw new R("The minimum chrome supported version is 50.0");u.browserstack=Object.assign({},u.browserstack,S)}catch(S){throw new R(`Failed to parse browserstack options file error: ${S.message}`)}if(u.perfecto={},u.perfectoToken&&(u.perfecto.securityToken=u.perfectoToken),u.perfectoOptions)try{let S=require(Ne.join(St(),u.perfectoOptions)),_={location:"US East",securityToken:u.perfectoToken};u.perfecto=Object.assign({},_,S)}catch(S){throw new R(`Failed to parse perfecto options file error: ${S.message}`)}if(u.testobjectSauce={},u.testobjectKey&&(u.testobjectSauce.testobjectApiKey=u.testobjectKey),u.testobjectOptions)try{let S=require(Ne.join(St(),u.testobjectOptions)),_={testobjectApiKey:u.testobjectKey};u.testobjectSauce=Object.assign({},_,S)}catch(S){throw new R(`Failed to parse test object options file error: ${S.message}`)}if(!u.project){let _=await(await Promise.resolve().then(()=>(fs(),En))).getProjectId();if(_)u.project=_;else throw new R("missing project-id info, either --login to provide new credentials or use --project <project-id>")}u.mode||(u.mode=u.run.length?"selenium":"extension"),u.testConfig&&(u.testConfig=[u.testConfig].flat()),u.testConfigId&&(u.testConfigId=[u.testConfigId].flat()),u.retries=!u.retries||typeof u.retries=="boolean"?1:Number(u.retries)+1,u.browserTimeout=!u.browserTimeout||typeof u.browserTimeout=="boolean"?60*1e3:u.browserTimeout,u.newBrowserWaitTimeout=!u.newBrowserWaitTimeout||typeof u.newBrowserWaitTimeout=="boolean"?10*60*1e3:u.newBrowserWaitTimeout*60*1e3,u.getBrowserTimeout||(u.getBrowserTimeout=u.browserTimeout),u.getBrowserRetries||(u.getBrowserRetries=Math.round(u.newBrowserWaitTimeout/u.browserTimeout)),u.getSessionTimeout=u.browserTimeout<u.getSessionTimeout?u.getSessionTimeout:u.browserTimeout,u.driverRequestTimeout=u.browserTimeout<u.driverRequestTimeout?u.driverRequestTimeout:u.browserTimeout;let c=Boolean(u.timeout);if(u.timeout=!u.timeout||typeof u.timeout=="boolean"?10*60*1e3:u.timeout,u.beforeParallel=!u.beforeParallel||typeof u.beforeParallel=="boolean"?1:Number(u.beforeParallel),u.parallel=!u.parallel||typeof u.parallel=="boolean"?1:Number(u.parallel),u.afterParallel=!u.afterParallel||typeof u.afterParallel=="boolean"?1:Number(u.afterParallel),u.parallel>1&&u.run&&!u.gridId&&!u.grid&&(!u.testPlan||u.testPlan.length===0)&&!((k=u.testPlanId)!=null&&k.length)&&Fv.isTTY&&!u.headless&&!zo.TERM&&((await require("prompts")({type:"toggle",name:"isSure",message:"Running in parallel without --headless flag will open several browsers on your computer. Are you sure?",initial:!1,active:"yes",inactive:"no"})).isSure||Ho(0)),u.tunnelPort=!u.tunnelPort||typeof u.tunnelPort=="boolean"?"80":u.tunnelPort,u.port&&(u.port=Number(u.port)),u.retries<=0||Number.isNaN(u.retries))throw new R("test failure retry count could not be a negative number or string, --retries <max_num_of_retries>");if(u.retries>21)throw new R("Max number of retries exceeded. Number cannot be greater than 20, --retries <max_num_of_retries>");if(!u.token){let _=await(await Promise.resolve().then(()=>(fs(),En))).getToken();if(_)u.token=_;else throw new R("missing Testim Access Token, either --login to provide new credentials or use --token <testim-access-token>, contact info@testim.io if you need a new one.")}if(u.browserTimeout<=0||Number.isNaN(u.browserTimeout))throw new R("get browser timeout could not be a negative number, --browser-timeout <get-browser-timeout>");if(u.newBrowserWaitTimeout<=0||Number.isNaN(u.newBrowserWaitTimeout))throw new R("max new browser wait timeout could not be a negative number, --new-browser-wait-timeout <max-wait-to-browser>");if(u.timeout<=0||Number.isNaN(u.timeout))throw new R("test run timeout could not be a negative number, --timeout <run-timeout>");if(u.beforeParallel<=0||Number.isNaN(u.beforeParallel))throw new R("before-parallel could not be a negative number or not number, --before-parallel <number-of-tests>");if(u.parallel<=0||Number.isNaN(u.parallel))throw new R("parallel could not be a negative number or not number, --parallel <number-of-tests>");if(u.afterParallel<=0||Number.isNaN(u.afterParallel))throw new R("after-parallel could not be a negative number or not number, --after-parallel <number-of-tests>");if(![Q.EXTENSION,Q.SELENIUM,Q.APPIUM].includes(u.mode))throw new R(`runner mode <${u.mode}> is not supported`);if(u.mode!==Q.SELENIUM&&u.disableNativeEvents)throw new R("disable-native-events is only applicable in selenium mode");if(!u.browser&&!o&&!i&&(u.browser="chrome"),u.appiumLogLevel||(u.appiumLogLevel="silent"),!jv.includes(u.appiumLogLevel))throw new R(`runner appium-log-level <${u.appiumLogLevel}> is not supported`);if(u.testPlan&&u.testPlan.length===0&&u.testPlanId&&u.testPlanId.length===0){if(typeof u.host!="string"&&typeof u.grid!="string"&&typeof u.gridId!="string"&&u.run.length===0&&!u.useLocalChromeDriver&&!u.useChromeLauncher&&!u.createPrefechedData)throw new R("missing remote grid address parameter, specify --host <host-name-or-ip> or --grid <grid-name> or --grid-id <grid-id>")}else if(u.testId.length||u.label.length||u.name.length||o||u.browser||a||u.useLocalChromeDriver||u.useChromeLauncher)throw new R("cannot set --testId, --label, --name, --browser, --test-config, --test-config-id, --use-local-chrome-driver --use-chrome-launcher or --suite with --test-plan option");if(!i&&(u.beforeParallel!==1||u.afterParallel!==1))throw new R("cannot set --before-parallel or --after-parallel without --test-plan option");if((u.testId.length||i||u.label.length||u.name.length||a)&&u.file)throw new R("Cannot pass codeful automation tests with --testId --label --name or --suite");if([u.host,u.grid,u.gridId].filter(Boolean).length>1)throw new R("please define exactly one of --grid or --grid-id or --host");if((D=u.host)!=null&&D.includes("/")&&(/^(f|ht)tps?:\/\//i.test(u.host)||(u.host=`http://${u.host}`),u.host=tf.parse(u.host).hostname),u.resultLabel.length){u.resultLabel=u.resultLabel.map(_=>_.trim()).filter(Boolean);let S=u.resultLabel.filter(_=>_.length>=250).filter(Boolean);if(u.branch==="auto-detect"&&u.resultLabel.includes("auto-detect-branch")&&Ir()&&u.resultLabel.unshift(Ir()),S.length)throw new R("A result label cannot exceed 250 characters")}let d=$m(u),m=$o(u);if(!u.w3cCapabilities&&!u.oldCapabilities)throw new R("cannot set --w3c-capabilities and --old-capabilities options as false");if(u.protocol||(u.protocol=u.port===443?"https":"http"),!["http","https"].includes(u.protocol))throw new R("invalid --protocol value, allow --protocol http or https");if(u.rerunFailedByRunId&&u.branch)throw new R("It is not possible to use --branch with --rerun-failed-by-run-id. Tests will automatically run on the same branch that was used in the original run");if(u.rerunFailedByRunId&&(a||u.name.length||u.testId.length||u.label.length||i))throw new R("Re-running failed tests is not possible when suite (--suite), label (--label), plan (--test-plan), or other test flags (--test) are provided. Please remove these flags and try again");if(u.run.length){let S=require("glob");if(u.files=mt.flatMap(u.run,_=>S.sync(_)),u.files.length===0)throw new R(`No files found at path '${u.run}'.`)}else u.files=[];if(u.setRetention&&!mt.inRange(mt.parseInt(u.setRetention),1,11))throw new R("Please provide the number of days that the test results will be retained for (--set-retention must be a whole number between 1 to 10)");u.setRetention&&(u.setRetention=Number(u.setRetention));let p="is no longer supported, please use --override-mapping-file";if(u.mockNetworkHar)throw new R(`--mock-network-har ${p}`);if(u.mockNetworkPattern)throw new R(`--mock-network-pattern ${p}`);if(u.disableMockNetwork&&u.overrideMappingFile)throw new R("You can either use --disable-mock-network or --override-mapping-file");if(!u.collectCodeCoverage&&u.codeCoverageSourceMapPath)throw new R("cannot set --code-coverage-source-map-path without passing --collect-code-coverage");if(!u.collectCodeCoverage&&u.codeCoverageReporter.length)throw new R("cannot set --code-coverage-reporter without passing --collect-code-coverage");if(!u.collectCodeCoverage&&u.codeCoverageInclude.length)throw new R("cannot set --code-coverage-include without passing --collect-code-coverage");if(u.collectCodeCoverage&&u.codeCoverageReporter&&mt.difference(u.codeCoverageReporter,Fl).length){let S=mt.difference(u.codeCoverageReporter,Fl);throw new R(`invalid --code-coverage-reporter parameters ${S.join("/")}`)}u.codeCoverageReporter=u.codeCoverageReporter.length===0?["html","text"]:u.codeCoverageReporter,u.codeCoverageInclude=u.codeCoverageInclude.length===0?["src/**"]:u.codeCoverageInclude;let f={mockNetworkHar:"--mock-network-har",mockNetworkPattern:"--mock-network-pattern",overrideMappingFile:"--override-mapping-file",codeCoverageUrlFilter:"--code-coverage-url-filter",collectCodeCoverage:"--collect-code-coverage",disableMockNetwork:"--disable-mock-network",useChromeLauncher:"--use-chrome-launcher"},h=Object.keys(f).filter(S=>Boolean(u[S]));if(u.mode!==Q.EXTENSION&&h.length){let S=h.length>1?"are":"is";throw new R(`${h.map(_=>f[_]).join(" and ")} ${S} only applicable in extension mode`)}if(u.tmsFieldFile)try{let S=Ul.readFileSync(u.tmsFieldFile);u.tmsCustomFields=JSON.parse(S)}catch(S){throw new R(`failed to parse field file error: ${S.message}`)}if(u.highSpeed&&(Uv("--high-speed"," --turbo-mode"),u.turboMode=!0),u.deviceUdid&&(u.deviceModel||u.osVersion))throw new R("It is not possible to use --osVersion or --deviceModel with --device-udid. device-udid is unique and cannot be combined with another flag");if(u.resetAppData&&u.fullReset)throw new R("It is not possible to set both --reset-app-data and --full-reset capabilities to true at the same time!");if(u.resetOnSessionStartOnly&&!u.fullReset&&console.warn("Ignoring --reset-on-session-start-only flag, should be used when --full-reset is provided for ios runs"),u.lightweightMode)try{let S={general:!0,disableLabs:!0,disableFeatureFlags:!0,disableAssets:!0,disablePixelValidation:!0,disableResults:!0,disableStepDelay:!0,disableRemoteStep:!0,assumePreloadedSharedSteps:!0,disableVisibilityCheck:!1,disableLocators:!1,bypassSetup:!1,disableAutoImprove:!0,disableQuotaBlocking:!0,onlyTestIdsNoSuite:!0,uploadAssetsAndResultsOnFailure:!0,preloadTests:!0,disableProjectDefaults:!0,type:"lightweight"},_=typeof u.lightweightMode=="string"?JSON.parse(u.lightweightMode):{};u.lightweightMode=Object.assign({},S,_)}catch(S){throw new R(`failed to parse lightweightMode settings error: ${S.message}`)}else u.turboMode&&u.mode===Q.EXTENSION&&(u.lightweightMode={general:!0,disableLabs:!1,disableFeatureFlags:!1,disableAssets:!0,disablePixelValidation:!1,disableResults:!0,disableStepDelay:!0,disableRemoteStep:!1,assumePreloadedSharedSteps:!1,disableVisibilityCheck:!1,disableLocators:!1,bypassSetup:!1,disableQuotaBlocking:!1,disableAutoImprove:!1,onlyTestIdsNoSuite:!1,uploadAssetsAndResultsOnFailure:!0,preloadTests:!1,disableProjectDefaults:!1,type:"turboMode"});if(typeof u.baseUrl=="boolean")throw new R("base url cannot be used as a flag, and must contain a string value");return{testId:[u.testId].flat(),name:[u.name].flat(),label:[u.label].flat(),suites:[u.suite].flat(),suiteIds:[u.suiteId].flat(),testPlan:[u.testPlan].flat(),testPlanIds:[u.testPlanId].flat(),files:[u.files].flat(),webpackConfig:u.webpackConfig,reportFile:u.reportFile,urls:u.urls,reportFileClassname:u.overrideReportFileClassname,reporters:u.reporters,project:u.project,host:u.host,headless:u.headless,useLocalChromeDriver:u.useLocalChromeDriver,chromeBinaryLocation:u.chromeBinaryLocation,useChromeLauncher:u.useChromeLauncher,port:u.port,grid:u.grid,gridId:u.gridId,disableNativeEvents:u.disableNativeEvents,saucelabs:u.saucelabs,browserstack:u.browserstack,baseUrl:u.baseUrl,branch:(u.branch==="auto-detect"?Ir():u.branch)||"master",autoDetect:u.branch==="auto-detect",token:u.token,userParamsData:s,mode:u.mode,isRegressionBaselineRun:u.isRegressionBaselineRun,browser:u.browser,beforeParallel:u.beforeParallel,parallel:u.parallel,afterParallel:u.afterParallel,canary:u.canary,rerunFailedByRunId:u.rerunFailedByRunId,disableGridCheck:u.disableGridCheck,disableTimeoutRetry:u.disableTimeoutRetry,resultLabels:u.resultLabel,path:u.path,protocol:u.protocol,perfecto:u.perfecto,experitestToken:u.experitestToken,testobjectSauce:u.testobjectSauce,gridUsername:u.gridUsername,gridPassword:u.gridPassword,overrideExecutionName:u.overrideExecutionName,tmsSuppressReporting:Boolean(u.suppressTmsReporting)||Boolean(u.tmsSuppressReporting),tmsRunId:u.tmsRunId,tmsCustomFields:u.tmsCustomFields,proxyForGrid:u.proxyForGrid,retentionDays:u.setRetention,passZeroTests:Boolean(u.passZeroTests),runQuarantinedTests:Boolean(u.runQuarantinedTests),deviceModel:u.deviceModel,deviceUdid:u.deviceUdid,osVersion:u.osVersion,appId:u.appId,appiumLogLevel:u.appiumLogLevel,resetAppData:u.resetAppData,fullReset:u.fullReset,resetOnSessionStartOnly:u.resetOnSessionStartOnly,ext:u.ext,extensionLocation:[u.extensionPath||d].flat(),extensionPath:u.extensionPath,playerLocation:u.playerPath||m,playerPath:u.playerPath,playerRequirePath:u.playerRequirePath,tunnel:u.tunnel,tunnelPort:u.tunnelPort,tunnelRoutes:u.tunnelRoutes,tunnelRoutesOutput:u.tunnelRoutesOutput,tunnelHostHeader:u.tunnelHostHeader,tunnelRegion:u.tunnelRegion,tunnelDiagnostics:u.tunnelDiagnostics,tunnelUseHttpAddress:u.tunnelUseHttpAddress,externalLambdatestTunnelId:u.externalLambdatestTunnelId,externalLambdatestUseWss:u.externalLambdatestUseWss||!1,externalLambdatestDisableAutomationTunneling:Boolean(u.externalLambdatestDisableAutomationTunneling),externalLambdatestMitm:Boolean(u.externalLambdatestMitm),beforeTest:u.beforeTest,afterTest:u.afterTest,beforeSuite:u.beforeSuite,afterSuite:u.afterSuite,timeout:u.timeout,timeoutWasGiven:c,browserTimeout:u.browserTimeout,newBrowserWaitTimeout:u.newBrowserWaitTimeout,getBrowserTimeout:u.getBrowserTimeout,getBrowserRetries:u.getBrowserRetries,getSessionTimeout:u.getSessionTimeout,getSessionRetries:u.getSessionRetries,driverRequestTimeout:u.driverRequestTimeout,driverRequestRetries:u.driverRequestRetries,testStartTimeout:u.testStartTimeout,testConfigNames:u.testConfig,testConfigIds:u.testConfigId,overrideMappingFile:u.overrideMappingFile,disableMockNetwork:u.disableMockNetwork,codeCoverageUrlFilter:u.codeCoverageUrlFilter,collectCodeCoverage:u.collectCodeCoverage,codeCoverageReportPath:u.codeCoverageReportPath,codeCoverageSourceMapPath:u.codeCoverageSourceMapPath,codeCoverageReporter:u.codeCoverageReporter,codeCoverageInclude:u.codeCoverageInclude,executionId:u.executionId,remoteRunId:u.remoteRunId,schedulerId:u.schedulerId,source:u.source,resultId:u.resultId,installCustomExtension:u.installCustomExtension,w3cCapabilities:u.w3cCapabilities,oldCapabilities:u.oldCapabilities,chromeBlockLocation:u.chromeBlockLocation,chromeUserDataDir:u.chromeUserDataDir,retries:u.retries,chromeExtraPrefs:e,chromeExtraArgs:t,disableCookiesSameSiteNoneRequiresSecure:u.disableCookiesSameSiteNoneRequiresSecure,seleniumCapsFileContent:r,shouldMonitorPerformance:u.monitorPerformance,user:u.user,lightweightMode:u.lightweightMode,createPrefechedData:u.createPrefechedData,saveRCALocally:u.saveRcaLocally,exitCodeIgnoreFailingTests:u.exitCodeIgnoreFailingTests,disableSockets:u.disableSockets,intersections:{labels:u.intersectWithLabel.length?[u.intersectWithLabel].flat():void 0,suiteNames:u.intersectWithSuite.length?[u.intersectWithSuite].flat():void 0,suiteIds:u.intersectWithSuiteId.length?[u.intersectWithSuiteId].flat():void 0},downloadBrowser:u.downloadBrowser}}});var qv={};var hs,af,cf,Ko,Gv,lf=T(()=>{"use strict";hs=E(require("path")),af=require("fs"),cf=require("child_process"),Ko=hs.resolve(__filename),Gv=!Ko.includes("node_modules")&&hs.dirname(Ko).endsWith("src");Gv&&!(0,af.existsSync)(hs.resolve(Ko,"..","..","..","webdriverio","build","index.js"))&&(console.log("Hi developer, we're initializing the runner dev env for the first time for you \u2764\uFE0F"),(0,cf.execSync)("yarn workspace @testim/webdriverio build",{cwd:hs.resolve(Ko,"..","..")}))});var $l={};$($l,{installAllLazyDependencies:()=>zv,lazyRequire:()=>ge});async function ge(s,e={}){let t=Lc(s);if(t)return t;let r;e.silent||(r=(0,uf.default)(`Installing ${s} before first usage...`).start());try{let n=await Hv(s);return r&&r.succeed(),n}catch(n){Vv.warn("failed to install dependency lazily",{dependency:s,err:n});let o=pf(s),i=`${s}@${o}`,c=process.argv.includes("npx")?"":"-g ",l=`Installation of ${s} failed. This typically means you are running an out-of-date version of Node.js or NPM.Please manually install by running the following command: npm install ${c}${i}`;throw r&&r.fail(l),n}}async function Hv(s){return gs.has(s)||(gs.set(s,df(s)),gs.get(s).catch(()=>{gs.delete(s)})),gs.get(s)}async function df(s){let e=Lc(s);if(e)return e;let t=pf(s),r=`${s}@${t}`;return await Io(lt(),r),Vt(s)}async function zv(){let s=Object.keys(qa);for(let e of s)await df(e)}function pf(s){let e=Object.entries(qa).find(([t])=>t===s);if(!e)throw new Error("The given package name is not lazyDependencies");return e[1]}var uf,Vv,gs,ft=T(()=>{"use strict";uf=E(require("ora"));ln();j();F();io();cn();Vv=x("lazy-require"),gs=new Map});var gf={};$(gf,{init:()=>Jv});async function Jv(s){var w,C;let e=typeof s=="string"?s:"";(typeof s!="string"||!s.trim())&&(e=(await(0,Gl.default)({type:"text",name:"project",message:"Please enter Project name",validate:v=>String(v).length>3})).project);let t=Kt.resolve(e);Jt.existsSync(t)&&Jt.readdirSync(t).length!==0&&(console.log(`${t} is not empty. Quitting...`),process.exit(1));let r=t.substr(Math.max(t.lastIndexOf("/"),t.lastIndexOf("\\"))+1),n=(0,ff.default)(r);if(!n.validForNewPackages){let b=`The name '${r}' is not a valid package name:`;throw console.log(Jo.default.red(b)),n.errors&&n.errors.forEach(v=>console.log(Jo.default.red(v))),n.warnings&&n.warnings.forEach(v=>console.log(Jo.default.yellowBright(`warning: ${v}`))),new R(`${b}
21
21
  validation errors:
22
22
  ${((w=n.errors)==null?void 0:w.join(`
23
23
  `))||""}
24
24
  warnings:
25
- ${((P=n.warnings)==null?void 0:P.join(`
26
- `))||""}`)}let i=(await(0,Gl.default)({type:"toggle",name:"isJs",message:"Add support for TypeScript?",initial:!0,active:"no",inactive:"yes"})).isJs?"template.js":"template.ts",a="codim",c=Kt.join(__dirname,a,i),u=Kt.join(process.cwd(),e),d=(0,Wl.default)(`Creating new test project in ${u}`).start();await uo(c,u);let m=Kt.join(__dirname,a,i,"package.json"),p=Kt.join(process.cwd(),e,"package.json"),h=(await Jt.promises.readFile(m)).toString().replace("~testim-codeful-test-project~",r);await Jt.promises.writeFile(p,h);let g="node_modules",y=Kt.join(process.cwd(),e,".gitignore");await Jt.promises.writeFile(y,g),d.succeed(),d=(0,Wl.default)("Installing dependencies").start(),await Jv("npm install",{cwd:u}),d.succeed(),console.log(`Testim Dev Kit project folder successfully created in ${u}.`)}var Jt,Kt,mf,Wl,Ko,Gl,ff,hf,Jv,yf=T(()=>{"use strict";Jt=E(require("fs")),Kt=E(require("path")),mf=E(require("child_process")),Wl=E(require("ora")),Ko=E(require("chalk")),Gl=E(require("prompts")),ff=E(require("validate-npm-package-name")),hf=require("util");z();Tc();Jv=(0,hf.promisify)(mf.exec)});var wf={};$(wf,{preloadTests:()=>Rn});async function Rn(s){if(!Array.isArray(s.testId)||!s.testId.length)return{};let e={branch:s.branch,projectId:s.project};return await dt(async()=>{let t=await de(s.testId,r=>Jc({...e,testId:r}),{concurrency:2});return bf.keyBy(t,"testData.id")},"loadTests",Yv,[e,s.testId])()}var bf,Yv,Jo=T(()=>{"use strict";bf=E(require("lodash"));qt();Te();F();Yv=1e3*60*60*10});function ql(){return nt()}async function Ef(){if(!Ie)try{let s=await re(Zv(),5e3,"The API call to NPM timed out"),e=ql();e&&vf.lt(e,s)&&console.log(Tf.default.yellow(`Warning: You are using version ${e}, a newer version is available. To update please run npm install (npm install -g @testim/testim-cli)`))}catch(s){Qv.warn("Failed to get NPM version",{err:s})}}var Tf,vf,Qv,Zv,Vl=T(()=>{"use strict";Tf=E(require("chalk")),vf=E(require("semver"));F();le();un();qt();j();Qv=x("npm-driver"),Zv=dt(()=>cm("@testim/testim-cli"),"getNpmVersion")});var Hl,tE,ys,Sf,Rf,zl,If,xf=T(()=>{"use strict";F();z();j();ft();Hl=x("testimNgrok"),tE=".whitelisted-ngrok.testim.io",ys="",Rf=async(s,e={})=>{if(!e.ngrokToken)throw new R("tunnel feature is not enabled, please contact support - info@testim.io.");let t;e.isNgrokWhitelisted&&(t=`${K()}-${s.projectData.projectId}${tE}`);let r={proto:"http",addr:s.tunnelPort||80,authtoken:e.ngrokToken,hostname:t};s.tunnelHostHeader&&(r.host_header=s.tunnelHostHeader),s.tunnelRegion&&(r.region=s.tunnelRegion);let o=await(await ge("ngrok")).connect(r);s.tunnelUseHttpAddress&&o.startsWith("https://")?(Hl.info("replace https to http"),ys=o.replace("https://","http://")):ys=o,s.tunnelDiagnostics&&zl(),s.baseUrl=ys},zl=async(s=!0)=>{try{let t=(await ge("ngrok")).getApi(),{tunnels:r}=await t.listTunnels(),n=r.find(o=>o.public_url===ys);console.log("ngrok stats",n),Hl.info("ngrok stats",{tunnel:n})}catch(e){Hl.error("error collecting ngrok stats",{err:e})}s&&(Sf=setTimeout(()=>zl(),1e4))},If=async s=>{if(!ys)return;clearTimeout(Sf),s.tunnelDiagnostics&&await zl(!1),await(await ge("ngrok")).disconnect(ys)}});var Xt,Jl,Cf,sE,nE,Kl,Xo,Qo,Yo,oE,Pf,Af,kf=T(()=>{"use strict";Xt=E(require("os")),Jl=E(require("fs")),Cf=E(require("child_process"));F();Te();sE="https://github.com/cloudflare/cloudflared/releases/download/2022.4.1/",nE={win32ia32:{path:"cloudflared-windows-386.exe"},win32x64:{path:"cloudflared-windows-amd64.exe"},darwinx64:{path:"cloudflared-darwin-amd64.tgz",extract:!0},linuxia32:{path:"cloudflared-linux-386"},linuxx64:{path:"cloudflared-linux-amd64"}},Kl=Xt.tmpdir(),Xo=`${Kl}/cloudflared`,Qo=null,Yo=null,oE=async()=>{if(await ye(Xo))return;let e=nE[Xt.platform()+Xt.arch()];if(!e)throw new Error(`tunnel on ${Xt.platform()+Xt.arch()} platform is not supported.`);let t=e.extract?Kl+e.path:Xo;await qe(`${sE}/${e.path}`,t),e.extract&&await Ye(t,Kl),await Jl.promises.chmod(Xo,"755")},Pf=async s=>{let e=s.baseUrl||`http://localhost:${s.tunnelPort||80}`,t="tunnelRoutes"in s&&s.tunnelRoutes||[e],[r]=await Promise.all([bl(s.company.companyId,t),oE()]);Qo=r._id,Yo=Cf.spawn(Xo,["tunnel","--no-autoupdate","run","--force","--token",r.token],{stdio:"inherit"}),await wl(s.company.companyId,Qo),"tunnelRoutesOutput"in s&&s.tunnelRoutesOutput&&await Jl.promises.writeFile(s.tunnelRoutesOutput,JSON.stringify(r.routesMapping,null,2)),s.baseUrl=`${s.tunnelUseHttpAddress?"http":"https"}://${r.routesMapping[e]}`},Af=async s=>{let e=[];return Qo&&e.push(Tl(s.company.companyId,Qo)),Yo&&e.push(new Promise((t,r)=>{Yo.on("close",n=>{n&&r(new Error(`tunnel process exited with code ${n}`)),t()}),Yo.kill()})),await Promise.all(e)}});var Lf={};$(Lf,{featureFlagsService:()=>M});var J,Of,aE,cE,lE,_f,Zo,Xl,M,be=T(()=>{"use strict";J=E(require("rox-node"));j();F();le();Of=x("FeatureFlagsService"),aE=!Ie&&!0&&!Xa,cE=2e4,lE=60*60*24,_f=["labs","disabled","enabled"],Zo=class extends J.default.Variant{constructor(e="disabled"){super(e,_f)}getValue(){let e=super.getValue();return _f.includes(e)?e:(Of.warn('unexpected value for lab feature flag. Falling back to value "labs"',{featureFlagName:this.name,value:e}),"labs")}},Xl=class{constructor(){this.flags={useNewWSCLI:new J.default.Flag,useSafariWebdriverVisibilityChecks:new J.default.Flag,useClickimVisibilityChecks:new J.default.Flag,runGetElementCodeInAut:new J.default.Flag,enableFrameSwitchOptimization:new J.default.Flag,maximumJsResultSize:new J.default.Configuration(2e3*1024),skipFileInputClicks:new J.default.Flag,errorMessageOnBadNetwork:new J.default.Flag(!0),warnOnBadNetwork:new J.default.Flag(!1),overrideAzureStorageUrl:new J.default.Flag,useJsInputCodeInSafari:new J.default.Flag,useJsInputCodeInFirefox:new J.default.Flag,autoSaveDownloadFileFireFox:new J.default.Flag(!0),safariSelectOptionDispatchEventOnSelectElement:new J.default.Flag(!0),experimentalPreCodeCompilation:new J.default.Flag(!0),experimentalAsyncCustomCode:new J.default.Flag,useSameBrowserForMultiTests:new Zo("labs"),highSpeedMode:new Zo,usePortedHtml5DragDrop:new J.default.Flag,testNamesToBeforeSuiteHook:new J.default.Flag,addCustomCapabilities:new J.default.Variant("{}"),enableWorkerThreadsCliCodeExecution:new J.default.Flag(!0),LTNetworkCapabilities:new J.default.Flag,downloadToBase64:new J.default.Flag,dec2022eolBrowsers:new J.default.Flag,publicGridURL:new J.default.Configuration("public-grid.testim.io")},J.default.register("default",this.flags)}setProjectId(e){J.default.setCustomStringProperty("projectId",e)}setProjectType(e){J.default.setCustomStringProperty("projectType",e)}setCompanyProductType(e){J.default.setCustomStringProperty("productType",e)}setCompanyId(e){J.default.setCustomStringProperty("companyId",e)}setPlanType(e){J.default.setCustomStringProperty("planType",e)}setIsPOC(e){J.default.setCustomBooleanProperty("isPOC",e)}setIsStartUp(e){J.default.setCustomBooleanProperty("isStartUp",e)}setRunnerMode(e){J.default.setCustomStringProperty("runnerMode",e)}async fetch(){if(!aE)return;let e={fetchIntervalInSec:lE,disableNetworkFetch:!1};if(global.ProxyAgent){let t=new global.ProxyAgent(global.proxyUri);Object.assign(e,{httpsAgent:t,httpAgent:t})}return re(J.default.setup(Ka,e),cE).catch(t=>Of.error("failed to get feature flag status",t))}},M=new Xl});var Df,Mf,Yt,Uf,Ff,Nf,uE,dE,ei,pE,mE,te,ti=T(()=>{"use strict";Df=E(require("ms")),Mf=E(require("p-retry")),Yt=E(require("os")),Uf=E(require("portfinder")),Ff=E(require("child_process"));F();vt();Te();z();j();$o();ae();be();Nf=x("lambdatestService"),uE="https://downloads.lambdatest.com/tunnel/v3",dE={win32ia32:"windows/32bit/LT_Windows.zip",win32x64:"windows/64bit/LT_Windows.zip",darwinia32:"mac/32bit/LT_Mac.zip",darwinx64:"mac/64bit/LT_Mac.zip",darwinarm64:"mac/64bit/LT_Mac.zip",linuxia32:"linux/32bit/LT_Linux.zip",linuxx64:"linux/64bit/LT_Linux.zip",freebsdia32:"freebsd/32bit/LT_Freebsd.zip",freebsdx64:"freebsd/64bit/LT_Freebsd.zip"},ei=`${Yt.tmpdir()}/LT`,pE=`${ei}/LT`,mE=(0,Df.default)("15m"),te=class{constructor(){this.isActive=!1}static isLambdatestGrid(e){return e.type===ue.LAMBDATEST||e.type===ue.HYBRID&&e.provider==="lambdatest"}isLambdatestRun(){return this.isActive}async enableIfNeeded(e){te.isLambdatestGrid(e)&&(te.lambdatestConfigPromise||(te.lambdatestConfigPromise=ul()),te.lambdatestConfig=await te.lambdatestConfigPromise,this.isActive=!0)}disable(){this.isActive=!1}get getSessionTimeout(){return this.isActive?mE:null}get getSessionRetries(){return this.isActive?1:null}static async prepareTunnel(){if(await ye(pE))return;let t=dE[Yt.platform()+Yt.arch()];if(!t)throw new Error(`tunnel on ${Yt.platform()+Yt.arch()} platform is not supported.`);let r=`${ei}.zip`;await qe(`${uE}/${t}`,r),await Ye(r,ei)}static async connectTunnel(e){if(e.externalLambdatestTunnelId){te.tunnelName=e.externalLambdatestTunnelId;return}await this.prepareTunnel();let t=await Uf.getPortPromise(),{gridData:r={},gridUsername:n,gridPassword:o}=e,i=global.proxyUri;te.tunnelName=K();let a=["--tunnelName",te.tunnelName,"--infoAPIPort",String(t)];if(e.externalLambdatestUseWss&&(a=[...a,"--mode","ws"]),e.externalLambdatestDisableAutomationTunneling&&(a=[...a,"--bypassHosts","run.testim.io,services.testim.io,api.coralogix.com,conf.rollout.io,statestore.rollout.io,push.rollout.io,analytic.rollout.io,res.cloudinary.com"]),r.tunnelUser&&r.tunnelKey)a=[...a,"--user",r.tunnelUser,"--key",r.tunnelKey];else if(n&&o)a=[...a,"--user",n,"--key",o];else throw new R("tunnel requires username and password");if(i)try{let d=new URL(i);a=[...a,"--proxy-host",d.hostname],d.port&&(a=[...a,"--proxy-port",d.port]),d.username&&d.password&&(a=[...a,"--proxy-user",d.username,"--proxy-pass",d.password])}catch{throw new R("proxy url is invalid")}e.externalLambdatestMitm&&(a=[...a,"--mitm"]),te.tunnel=Ff.spawn("./LT",a,{cwd:ei});let c="",u="";te.tunnel.stdout.on("data",d=>{c+=d.toString()}),te.tunnel.stderr.on("data",d=>{u+=d.toString()});try{let d=await(0,Mf.default)(()=>Tr(`http://127.0.0.1:${t}/api/v1.0/info`,{},{},void 0,{skipProxy:!0}),{retries:30,minTimeout:2e3});Nf.info("LT tunnel info",d)}catch(d){throw Nf.error("Failed to start LT tunnel",{err:d,stdoutResult:c,stderrResult:u}),d}}static async disconnectTunnel(e){if(!(e.externalLambdatestTunnelId||!te.tunnel))return new Promise((t,r)=>{te.tunnel.on("close",n=>{n&&r(new Error(`tunnel process exited with code ${n}`)),t()}),te.tunnel.kill()})}getCapabilities(e,t,r,n,o){if(!this.isActive)return{};let i=te.lambdatestConfig.CAPABILITIES[t]||{},a={...te.tunnelName&&{tunnel:!0,tunnelName:te.tunnelName}},c=[],{mode:u,canary:d,ext:m,extensionPath:p,installCustomExtension:f}=e;if(u===Q.EXTENSION&&!m){let h=kl({canary:d},!0);!p&&h[t]&&(c=[...c,h[t]]),p&&Be(p)&&(c=[...c,p])}return f&&Be(f)&&(c=[...c,f]),{build:r,name:`${n} - ${o}`,platform:te.lambdatestConfig.PLATFORM,selenium_version:te.lambdatestConfig.SELENIUM_VERSION,resolution:te.lambdatestConfig.RESOLUTION,timezone:te.lambdatestConfig.TIMEZONE,...i,loadExtension:c,...a,console:!0,queueTimeout:300,network:M.flags.LTNetworkCapabilities.isEnabled()}}}});var Yl={};$(Yl,{connect:()=>si,disconnect:()=>ni,serveTunneling:()=>hE});var ri,jf,Bf,fE,si,ni,hE,Ql=T(()=>{"use strict";xf();vn();kf();Et();ri=E(require("ora"));j();ae();ti();jf=x("tunnel"),Bf=s=>{var e;return[ue.LAMBDATEST,ue.HYBRID].includes((e=s.gridData)==null?void 0:e.type)&&s.gridData.tunnel==="lambdatest"},fE=s=>{var e;return s.tunnelRoutes||((e=s.gridData)==null?void 0:e.type)===ue.HYBRID&&s.gridData.tunnel==="cloudflare"},si=async s=>{if(!s.tunnel)return;let e=Dt(),t;try{Bf(s)?(t=(0,ri.default)("Starting testim lambdatest tunnel...").start(),await te.connectTunnel(s)):fE(s)?(t=(0,ri.default)("Starting testim cloudflare tunnel...").start(),await Pf(s)):(t=(0,ri.default)("Starting testim ngrok tunnel...").start(),await Rf(s,e)),t.succeed()}catch(r){let n="Failed to start tunnel. Please contact support@testim.io";throw jf.error("Failed to open tunnel",{err:r}),t==null||t.fail(n),new Error(n)}},ni=async s=>{if(s.tunnel)try{Bf(s)?await te.disconnectTunnel(s):"tunnelRoutes"in s?await Af(s):await If(s)}catch(e){let t="catch error - failed to close tunnel";throw jf.error(t,{err:e}),new Error(t)}},hE=async(s,e=new Promise(()=>{}))=>(await si(s),ds(()=>ni(s)),await e)});function gE(s){if(s.protocol)return s.protocol;if([ue.TESTIM,ue.BROWSERSTACK,ue.SAUCELABS].includes(s.type)&&s.port===443)return"https";if([ue.TESTIM_ENTERPRISE,ue.LAMBDATEST,ue.DEVICE_FARM].includes(s.type)){let e=$f.exec(s.host);return(e==null?void 0:e[2])||"https"}return""}function yE(s){let e=$f.exec(s);return e==null?void 0:e[3]}function ii(s){var y,w,P,b,v,I,k,D,S;let e=s&&yE(s.host),t=s==null?void 0:s.port,r=s==null?void 0:s.path,n=s&&gE(s),o=s==null?void 0:s.token,i=s==null?void 0:s.slotId,a=(y=s==null?void 0:s.hybrid)==null?void 0:y.tunnel,c=(w=s==null?void 0:s.external)==null?void 0:w.user,u=(P=s==null?void 0:s.external)==null?void 0:P.key,d=s==null?void 0:s.type,m=d===ue.HYBRID?a&&((I=(v=(b=s.hybrid)==null?void 0:b.external)==null?void 0:v[s.hybrid.tunnel])==null?void 0:I.user):c,p=d===ue.HYBRID?a&&((S=(D=(k=s.hybrid)==null?void 0:k.external)==null?void 0:D[s.hybrid.tunnel])==null?void 0:S.key):u,f=s==null?void 0:s.name,h=s&&(s._id||s.gridId),g=s==null?void 0:s.provider;return{host:e,port:t,path:r,protocol:n,accessToken:o,slotId:i,gridId:h,tunnel:a,user:c,key:u,type:d,name:f,provider:g,tunnelUser:m,tunnelKey:p}}async function Gf(s,e,t,r,n){let o;try{o=await n()}catch(i){throw ze.error("failed to get grid",{projectId:s,companyId:e,err:i}),new Error(rs.UNKNOWN)}if(ze.info("get grid info",Object.assign({},o,{projectId:s,companyId:e})),!o||!["success","error"].includes(o.status))throw ze.error("invalid response - get grid",{res:o}),new Error(rs.UNKNOWN);if(o.status==="success"){let i=ii(o.grid);return bE(t,e,i.gridId,i.slotId,r),i}throw o.code==="not-found"?new it(rs.NOT_FOUND):o.code==="no-available-slot"?new hr(`Failed to run test on ${r} - concurrency limit reached`):(ze.error("invalid code error response - get grid",{res:o}),new it(rs.UNKNOWN))}function wE(s,e,t,r,n,o){return Gf(t,e,s,n,()=>Do(e,t,r,n,o))}function TE(s,e,t,r,n,o,i){return Gf(t,e,s,n,()=>{var u;let c=(u=i.allGrids)==null?void 0:u.find(d=>(d.name||"").toLowerCase()===r.toLowerCase());return c!=null&&c._id?Do(e,t,c._id,n,o):al(e,t,r,n,o)})}function qf(s){return ll(s)}async function Vf(s,e,t){let n=(t||await qf(s)).find(o=>o._id===e);if(!n)throw new R(`Failed to find grid id: ${e}`);return ii(n)}async function vE(s,e,t){let n=(t||await qf(s)).find(o=>(o.name||"").toLowerCase()===e.toLowerCase());if(!n)throw new R(`Failed to find grid name: ${e}`);return ii(n)}async function Zl(s,e){let t=In[s];if(!t)return;let{slotId:r,gridId:n,browser:o,companyId:i}=t;if(delete In[s],!r){ze.warn("failed to find grid slot id",{projectId:e});return}ze.info("release slot id",{projectId:e,companyId:i,slotId:r,gridId:n,browser:o});try{await ol(i,e,r,n,o)}catch(a){ze.error("failed to release slot",{projectId:e,err:a})}}async function EE(s){let e=Object.values(In).filter(Boolean);if(e.length!==0){ze.info("keep alive worker slots",{projectId:s,slots:e});try{await nl(s,e)}catch(t){ze.error("failed to update grid keep alive",{err:t,slots:e,projectId:s})}}}function SE(s){Wf=global.setInterval(EE,1e4,s)}async function RE(s){let e=Object.keys(In);if(e.length){ze.warn("not all slots released before end runner flow",{projectId:s});try{await de(e,t=>Zl(Number(t),s))}catch(t){ze.error("failed to release all slots",{err:t,projectId:s})}}}async function IE(s){await RE(s),clearInterval(Wf)}function xE(s,e){let{testobjectSauce:t,saucelabs:r}=e;if(s==="testobject")return t.testobjectApiKey;if(s==="saucelabs")return r.accessKey}function CE(s,e){let{saucelabs:t}=e;if(s==="saucelabs")return t.username}function Hf(s){let t=(()=>oi.isEmpty(s.testobjectSauce)?oi.isEmpty(s.saucelabs)?oi.isEmpty(s.perfecto)?"hostAndPort":"perfecto":"saucelabs":"testobject")(),{host:r,port:n,path:o,protocol:i}=s,a=xE(t,s),c=CE(t,s);return{host:r,port:n,path:o,protocol:i,type:t,user:c,key:a}}async function zf(s,e){let t=s.company.companyId;return await Vf(t,e.gridId,s.allGrids)}async function Kf(s){let{allGrids:e=void 0,company:t,host:r,useLocalChromeDriver:n,useChromeLauncher:o,gridId:i,grid:a}=s;if(n||o)return{mode:"local"};if(r)return Hf(s);let c=t==null?void 0:t.companyId;if(i)return Vf(c,i,e);if(a)return vE(c,a,e);if(sn(s)||s.tunnelOnlyMode){ze.info("skipping getting grid, as it is set on test plan",{companyId:c});return}throw new it("Missing host or grid configuration")}async function Jf(s,e,t,r){return await(async()=>{let{host:i,project:a,grid:c,gridId:u,useLocalChromeDriver:d,useChromeLauncher:m,company:p}=t,f=p==null?void 0:p.companyId;if(d||m)return{mode:"local"};if(i)return Hf(t);if(u)return wE(r,f,a,u,s,e);if(c)return TE(r,f,a,c,s,e,t);throw new it("Missing host or grid configuration")})()}var oi,ze,In,$f,Wf,bE,xn,Xf,bs=T(()=>{"use strict";oi=E(require("lodash"));Te();j();F();ae();z();ze=x("grid-service"),In={},$f=/(^(https?):\/{2})?(.*)/,Wf=null;bE=(s,e,t,r,n)=>{In[s]={gridId:t,companyId:e,slotId:r,browser:n}};xn={start:SE,end:IE};Xf=async(s={},e={},t={},r={},n={})=>{var h,g,y;let{company:{companyId:o}={}}=s,{gridId:i,type:a}=e,c=s.browser||t.browserValue,u=Boolean(s.tunnel),{maxRetries:d,currentRetry:m}=n;if(!i||!a||(a===ue.LAMBDATEST&&await((h=r.enableIfNeeded)==null?void 0:h.call(r,e)),a!==ue.HYBRID||!o||!c||!d||!m))return e;let p=await il({companyId:o,gridId:i,maxRetries:d,currentRetry:m,browser:c,usingTunnel:u});ze.info("handling hybrid grid",{response:p,companyId:o});let f=ii({...e,...p.connectionDetails,provider:p.provider});return p.provider!=="lambdatest"&&((g=r.disable)==null||g.call(r)),p.provider==="lambdatest"&&await((y=r.enableIfNeeded)==null?void 0:y.call(r,f)),f}});function Pn(){return ai||"master"}function Yf(s="master",e="false"){if(typeof s!="string"&&(s!=null&&s.branch)&&s.branch==="master"){ai="master";return}if(s&&!s.isArchived){ai=s.branch||s;return}ai=e?"master":void 0}var ai,eu=T(()=>{"use strict"});var An,tu,PE,ru,AE,su,ci,li,ui,di,pi,mi=T(()=>{"use strict";F();ae();An=s=>{let{status:e,sessionType:t,success:r}=s;return e===pe.FAILED||t===Ot.CODEFUL&&r===!1},tu=s=>{let{status:e}=s;return e===pe.ABORTED},PE=s=>{let{status:e,sessionType:t,success:r}=s;return e===pe.PASSED||t===Ot.CODEFUL&&r===!0},ru=s=>s.runnerStatus===pe.SKIPPED,AE=s=>s.testStatus===Ve.EVALUATING,su=(s,e)=>e?!s.runConfig:!1,ci=(s,e)=>Object.values(s).filter(t=>ru(t)&&He(t,e)).length,li=s=>Object.values(s).filter(e=>An(e)&&AE(e)).length,ui=(s,e)=>Object.values(s).filter(t=>An(t)&&!su(t,e)),di=(s,e)=>Object.values(s).filter(t=>PE(t)&&!su(t,e)),pi=(s,e)=>Object.values(s).filter(t=>tu(t)&&!su(t,e))});function kE(s){let e=s.indexOf("--token");if(e===-1&&(e=s.indexOf("--t")),e!==-1)try{let t=s.slice();return t.splice(e,2),t}catch{}return s}var fi,Zf,hi,eh=T(()=>{"use strict";j();mi();fi=x("debug-reporter"),Zf={token:void 0,userParamsData:void 0,projectData:void 0,allGrids:void 0,gridData:void 0,awsAccessKeyId:void 0,awsSecretAccessKey:void 0,runParams:void 0,perfecto:void 0,testobjectSauce:void 0},hi=class{constructor(e){this.options=e}onTestStarted(e,t){fi.info("Test Started",{testId:e.testId,testName:e.name,resultId:e.resultId,workerId:t})}onTestFinished(e,t){let r=this.options.gridData||{},n=r.provider,o=r.host,i=r.gridId,a=r.type,c=r.failedGetBrowserAttempts;fi.info("Test Finished",{testId:e.testId,testName:e.name,resultId:e.resultId,success:e.success,duration:e.duration,browser:this.options.browser,companyId:this.options.company.companyId,grid:{provider:n,host:o,failedGetBrowserAttempts:c,id:i,type:a},workerId:t})}onTestPlanStarted(e,t,r,n,o,i,a){let c=kE(process.argv);fi.info("Test Plan Started",{executionId:o,testPlanName:n,isAnonymous:i,configName:a,options:Object.assign({},this.options,Zf),args:c})}onTestPlanFinished(e,t,r,n,o,i){let a=di(e,i).length,c=Object.keys(e).length-a;fi.info("Test Plan Finished",{isAnonymous:o,passed:a,failed:c,testPlanName:t,options:Object.assign({},this.options,Zf),duration:r,executionId:n})}}});var nu,Rt,kn=T(()=>{"use strict";ae();nu=class{constructor(){this._planType="free"}setPlanType(e){this._planType=e}get isTestStatusEnabled(){return["pro","trial"].includes(this._planType)}shouldShowFreeGridRunWarning(e){return this._planType!=="pro"&&e===ue.DEVICE_FARM}},Rt=new nu});var iu={};$(iu,{Reporter:()=>_E});var Qt,_n,_r,gi,th,ou,_E,au=T(()=>{"use strict";Qt=E(require("chalk")),_n=E(require("lodash"));F();ae();kn();mi();_r={success:Qt.default.green,warn:Qt.default.yellow,error:Qt.default.red},{CLI_MODE:gi}=Lt,th="device",ou=class{constructor(e,t){this.options=e;this.branchToUse=t;this.config={showWorkerNames:e.parallel>1}}toWorkerIdPrefix(e){return this.config.showWorkerNames?`W:${e}`:""}printWorkerDivider(){console.log("-".repeat(process.stdout.columns||83))}onTestStarted(e,t,r,n){let o=n?"File":"Test",i=e.isTestsContainer?"":`(${e.testId})`,a=e.isTestsContainer?"":`url: ${Qt.default.underline(st(this.options.editorUrl,this.options.project,e.testId,e.resultId,this.branchToUse))}`;console.log(this.toWorkerIdPrefix(t),`${o} "${e.name}" started ${i} ${a}`.trim())}onTestFinished(e,t,r,n){if(n)return;let o=e.success?pe.PASSED:pe.FAILED,i=e.isTestsContainer?" ":`(${e.testId})`,a=_r[e.success?"success":"error"];console.log(a(this.toWorkerIdPrefix(t),`Test "${e.name}" finished status: ${o} ${i} duration: ${po(e.duration)}`))}printAllFailedTests(e){if(!e.length)return;let t=e.map(r=>{let n=st(this.options.editorUrl,this.options.project,r.testId,r.resultId,this.branchToUse);return r.isTestsContainer?r.name:`${r.name} : ${n}`});console.log(_r.error("Failed runs are:")),console.log(_r.error(t.join(`
27
- \r`)))}onTestPlanFinished(e,t,r,n,o,i){let a=ui(e,i),c=di(e,i),u=pi(e,i),d=c.length,m=u.length,p=a.length,f="",h="";if(Rt.isTestStatusEnabled){let b=li(e);f=` FAILED-EVALUATING: ${b}`,p-=b,h=` SKIPPED: ${ci(e,this.options)}`}let g=this.buildTestPlanName(o,t,i),y,w=_r[p?"error":"success"],P=`PASSED: ${d} FAILED: ${p}${f} ABORTED: ${m}${h} Duration: ${po(r)}`;i||g.trim()===""||g.trim()==="Anonymous"?y=`Tests completed. ${P} (Execution ID: ${n})`:y=`Test plan${g} completed ${P} (${n})`,this.printWorkerDivider(),console.log(w(y)),this.printWorkerDivider(),this.printAllFailedTests(a)}buildTestPlanName(e,t,r){if(r)return"";let n=_n.isEmpty(this.options.suites)?"":`Suite: ${this.options.suites}`,o=_n.isEmpty(this.options.label)?"":`Label: ${this.options.label}`,i=_n.isEmpty(this.options.name)?"":`Name: ${this.options.name}`,a=_n.isEmpty(this.options.testId)?"":`Test Id: ${this.options.testId}`,c=[i,o,n,a].filter(Boolean).join(", ");return e?` anonymous (${c})`:` '${t}'`}onTestPlanStarted(e,t,r,n,o,i,a,c){let u=p=>{p.forEach((f,h)=>{var w;let g=(w=f.testData)!=null&&w.index?`- ${f.testData.index} / ${f.testData.total} Data set`:"",y=c?"":`(${f.testId})`;console.log(" ",h+1,":",`${f.name}${He(f,this.options)?"-quarantine":""}`,y,g)})},d=a?`config '${a}'`:"default configs";if(c)console.log(`Run test plan, Project: ${this.options.project} (Execution ID: ${o}):`);else{let p=this.options.sfdcCredential?` SfdcCredential: ${this.options.sfdcCredential}`:"",f=`${d}, Project: ${this.options.project}, Branch: ${this.branchToUse}${p}`;console.log(`Run${this.buildTestPlanName(i,n)} test plan with ${f} (${o})`)}this.printWorkerDivider(),e.length>0&&(console.log("Before all:"),u(e)),console.log(c?"File list:":"Test list:"),u(t),r.length>0&&(console.log("After all:"),u(r)),this.printWorkerDivider()}onGetSlot(e,t){let r=this.options.grid||this.options.gridId,n=this.options.mode===gi.APPIUM?th:t;r&&console.log(this.toWorkerIdPrefix(e),`Get ${Qt.default.underline(n)} slot from ${Qt.default.underline(r)}`)}onGetSession(e,t,r){let n=r===gi.APPIUM?th:"browser";console.log(this.toWorkerIdPrefix(e),`Get ${n} to run ${Qt.default.underline(t)}`)}onWaitToTestStart(e){console.log(this.toWorkerIdPrefix(e),"Wait for test start")}onWaitToTestComplete(e,t,r){let n=t?"file":"test";console.log(this.toWorkerIdPrefix(e),`Wait for ${n} complete`),r&&t&&console.log(this.toWorkerIdPrefix(e),`Chrome Debugger available at ${r}`)}onGetBrowserFailure(e,t,r){if(r!==2)return;let n=this.options.grid||this.options.gridId,o=this.options.mode===gi.APPIUM?"device":"browser";if(n)console.log(_r.warn(this.toWorkerIdPrefix(e),`It is taking us some time to get a ${o} from the grid ${n}`));else if(this.options.useLocalChromeDriver)console.log(_r.warn(this.toWorkerIdPrefix(e),"We are having issues starting ChromeDriver for you locally"));else if(this.options.host){let i=this.options.mode===gi.APPIUM?"Appium":"Selenium";console.log(_r.warn(this.toWorkerIdPrefix(e),`We are having issues reaching your ${i} grid at ${this.options.host}:${this.options.port||4444}`))}}},_E=ou});var uu={};$(uu,{Reporter:()=>UE});function OE(s){let e=s.testData||{},t=typeof e.total=="number"?` - ${e.index} / ${e.total} Data set`:"";return`${s.name}${t}`}function LE(s){return s.visitedUrlsList||console.log("No URLs found:","Please contact our support team or remove the --urls flag from the CLI command"),`${s.visitedUrlsList||""}`}function NE(s){return`${s.visitedUrlsJson||""}`}async function DE(s,e,t,r,n,o){function i(p){let f=st(s,t,p.testId,p.resultId,r),h={$:{name:OE(p),classname:n,time:Ic(p.duration),ownedBy:p.testOwnerName,ownerEmail:p.testOwnerEmail},"system-out":f};if(An(p)||tu(p)){let g=`Step Failed: ${p.failureReason||p.reason}`,y=An(p)?`${g} More info at: ${f}`:g;h.failure={$:{message:y}}}return ru(p)&&He(p,o)&&Rt.isTestStatusEnabled&&(h.skipped={}),o.urls&&(h["visited-urls-list"]=LE(p),h["visited-urls-json"]=NE(p)),h}function a(p){let{results:f,testPlanName:h,configName:g}=p,y=f||{},P={name:(g&&h?`${h} with config '${g}'`:h)||"selenium run",tests:u(y),failure:d(y),timestamp:c(e)};if(Rt.isTestStatusEnabled){P.skipped=ci(y,o);let b=li(y);P.failure-=b,P["failure-evaluating"]=b}return{$:P,testcase:Object.keys(y).map(b=>i(y[b]))}}function c(p){let f=Object.keys(p).map(g=>p[g].startTime),h=Math.min.apply(null,f);return h?new Date(h).toISOString():new Date().toISOString()}function u(p){return Object.keys(p).length}function d(p){return ui(p).length+pi(p).length}let m={testsuites:{testsuite:e.map(p=>a(p))}};try{return new lu.Builder().buildObject(m)}catch(p){return ME(p)}}function ME(s){let e=new lu.Builder,t={testsuites:{testsuite:{$:{name:"selenium run",tests:1,failure:1,timestamp:Date.now()},testcase:{$:{name:"junit reporter generator failed",classname:"testim.io.jUnitXmlReporter"},error:{$:{message:s.message}}}}}};return e.buildObject(t)}var lu,rh,cu,UE,du=T(()=>{"use strict";lu=E(require("xml2js"));F();rh=require("fs");kn();mi();cu=class{constructor(e,t){this.options=e;this.branchToUse=t;this.classname="testim.io.test",typeof e.reportFileClassname=="string"&&(this.classname=e.reportFileClassname),e.reportFileClassname===!0&&(this.classname="")}async createResultsReport(e){let t=this.options.reportFile,r=this.options.project,n=await DE(this.options.editorUrl,e,r,this.branchToUse,this.classname,this.options);if(t)try{return await rh.promises.writeFile(t,n),console.log("JUnit XML file saved to",t),e}catch(o){return console.error("could not save report file",t,o),e}}async onAllTestPlansFinished(e){await this.createResultsReport(e)}};UE=cu});var sh={};$(sh,{Reporter:()=>FE});function ws(s){return s?s.replace(/\|/g,"||").replace(/'/g,"|'").replace(/\n/g,"|n").replace(/\r/g,"|r").replace(/\u0085/g,"|x").replace(/\u2028/g,"|l").replace(/\u2029/g,"|p").replace(/\[/g,"|[").replace(/\]/g,"|]"):""}var pu,mu,FE,nh=T(()=>{"use strict";j();pu=x("team-city-reporter");mu=class{constructor(e){this.options=e}getPrintName(e){let t=e.config||{},r=typeof t.testDataTotal=="number"?` - ${t.testDataIndex} / ${t.testDataTotal} Data set`:"",n=`${e.name} (${e.testId})${r}`;return ws(n)}onTestStarted(e,t,r,n,o){if(r){pu.debug("skip report test started because is rerun");return}let i=this.getPrintName(e);console.log(`##teamcity[testStarted name='${i}' captureStandardOutput='true' flowId='${o}']`)}onTestFailed(e,t,r,n,o,i){if(o){pu.debug("skip report test failed because is rerun");return}let a=this.getPrintName(e);console.log(`##teamcity[testFailed name='${a}' message='${ws(t)}' details='${ws(r)}' flowId='${i}']`)}onTestFinished(e,t,r){if(r){pu.debug("skip report test finished because is rerun");return}let n=this.getPrintName(e);console.log(`##teamcity[testFinished name='${n}' duration='${e.duration}' flowId='${e.resultId}']`)}onTestIgnored(e,t,r="ignore"){let n=this.getPrintName(t);console.log(`##teamcity[testIgnored name='${n}' message='${ws(r)}']`)}onTestPlanStarted(e,t,r,n){console.log(`##teamcity[testSuiteStarted name='${ws(n)}']`)}onTestPlanFinished(e,t){console.log(`##teamcity[testSuiteFinished name='${ws(t)}']`)}},FE=mu});var oh={};$(oh,{Reporter:()=>jE});var fu,jE,ih=T(()=>{"use strict";fu=class{constructor(e){this.options=e}onTestStarted(e,t){console.log(JSON.stringify({name:"testStarted",data:{test:e,workerId:t}}))}onTestFinished(e,t){console.log(JSON.stringify({name:"testFinished",data:{test:e,workerId:t}}))}onTestPlanStarted(e,t,r,n,o){let i={name:"suiteStarted",data:{projectId:this.options.project,executionId:o}};console.log(JSON.stringify(i))}onTestPlanFinished(e){console.log(JSON.stringify({name:"suiteFinished",data:{testResults:e}}))}},jE=fu});var ah={};$(ah,{Reporter:()=>BE});var hu,BE,ch=T(()=>{"use strict";F();_l();hu=class{constructor(e,t){this.options=e;this.branchToUse=t}onTestStarted(e,t,r,n){if(n)return;let o=st(this.options.editorUrl,this.options.project,e.testId,e.resultId,this.branchToUse);return Go(o)}},BE=hu});var $E,gu,Z,Ft=T(()=>{"use strict";eh();j();$E=x("reporter"),gu=class{constructor(){this.reporters=[];this.onGetBrowserFailure=this.generateHook("onGetBrowserFailure");this.onGetBrowserSuccess=this.generateHook("onGetBrowserSuccess");this.onTestPlanStarted=this.generateHook("onTestPlanStarted");this.onGetSlot=this.generateHook("onGetSlot");this.onGetSession=this.generateHook("onGetSession");this.onTestFinished=this.generateHook("onTestFinished");this.onTestFailed=this.generateHook("onTestFailed");this.onTestPassed=this.generateHook("onTestPassed");this.onTestStarted=this.generateHook("onTestStarted");this.onTestIgnored=this.generateHook("onTestIgnored");this.onWaitToTestStart=this.generateHook("onWaitToTestStart");this.onWaitToTestComplete=this.generateHook("onWaitToTestComplete");this.onTestPlanFinished=this.generateHook("onTestPlanFinished",this.onTestPlanFinishedMutator);this.onAllTestPlansFinished=this.generateHook("onAllTestPlansFinished",this.onAllTestPlansFinishedMutator)}async setOptions(e,t){this.reporters=[];let r=e.reporters;if(this.reporters.push(new hi(e)),r===void 0||r.length===0){let{Reporter:n}=await Promise.resolve().then(()=>(au(),iu));if(this.reporters.push(new n(e,t)),(e==null?void 0:e.reportFile)!==void 0){let{Reporter:o}=await Promise.resolve().then(()=>(du(),uu));this.reporters.push(new o(e,t))}}else(await Promise.all([r.includes("teamcity")&&Promise.resolve().then(()=>(nh(),sh)),r.includes("console")&&Promise.resolve().then(()=>(au(),iu)),r.includes("junit")&&Promise.resolve().then(()=>(du(),uu)),r.includes("json")&&Promise.resolve().then(()=>(ih(),oh)),r.includes("chrome")&&Promise.resolve().then(()=>(ch(),ah))])).forEach(o=>{o&&this.reporters.push(new o.Reporter(e,t))})}onTestPlanFinishedMutator(e,t,r,n,o,i,a){let c={};if(a){let d=Object.values(a);if(d.length>0){for(let m of Object.values(a))c[m.id]=m;for(let m of Object.keys(e))d.some(p=>p.parentResultId!==m)||(c[m]=e[m])}else $E.warn("childTestResults is not array"),c=e}else c=e;let u=Date.now()-(r||0);return[c,t,u,n,o,i,void 0]}onAllTestPlansFinishedMutator(e){for(let t of e)if(t.childTestResults){t.results={};let r=Object.values(t.childTestResults);for(let n of r)t.results[n.id]=n;for(let n of Object.keys(e))r.some(o=>o.parentResultId!==n)||(t.results[n]=e[n])}return[e]}generateHook(e,t){return async(...r)=>{var o;let n=t==null?void 0:t(...r);for(let i of this.reporters)await((o=i[e])==null?void 0:o.call(i,...n||r))}}},Z=new gu});function uh(s,e){return e!=null&&e.type&&(s[`${e.type}Mode`]=!0),s}function dh({executionId:s,projectId:e,testId:t,resultId:r,companyId:n,companyName:o,projectName:i,companyPlan:a,sessionType:c,source:u,user:d,lightweightMode:m,isStartUp:p,projectType:f,appSource:h}){let g=uh({executionId:s,projectId:e,testId:t,resultId:r,companyId:n,companyName:o,projectName:i,companyPlan:a,sessionType:c,source:lh(u,d),isStartUp:p,projectType:f,...["android","ios"].includes(f)&&h&&{appSource:h}},m);pt("test-run-ci",g)}function ph({executionId:s,projectId:e,testId:t,resultId:r,result:n,companyId:o,companyName:i,projectName:a,companyPlan:c,sessionType:u,source:d,user:m,lightweightMode:p,logger:f,isStartUp:h,projectType:g,appSource:y}){try{let w=uh({executionId:s,projectId:e,testId:t,resultId:r,companyId:o,companyName:i,projectName:a,companyPlan:c,sessionType:u,mockNetworkEnabled:n.wasMockNetworkActivated,source:lh(d,m),isStartUp:h,projectType:g,...["android","ios"].includes(g)&&y&&{appSource:y}},p);if(n.success){pt("test-run-ci-success",w);return}pt("test-run-ci-fail",Object.assign({},w,{failureReason:n.failureReason}))}catch(w){f.error("failed to update test end analytics",{err:w})}}function mh({executionId:s,projectId:e,sessionType:t}){pt("batch-run-ci",{executionId:s,projectId:e,sessionType:t})}var lh,yu=T(()=>{"use strict";ms();Oo();lh=(s,e)=>s!=="cli"&&s!=="cli-local"?s:ls&&e?"ci-with-user":ls?"ci":e?"cli-with-user":s});var WE,hh=T(()=>{"use strict";WE=require("istanbul-lib-report")});var gh,yh,GE,bh,Or,qE,wh,bu,VE,Th,vh=T(()=>{"use strict";gh=E(require("ora")),yh=E(require("moment")),GE=E(require("test-exclude")),bh=E(require("fs")),Or=E(require("path")),qE=E(require("istanbul-reports")),wh=E(require("istanbul-lib-report"));Te();z();F();j();ft();hh();bu=x("test-run-status"),VE=async(s,e,t)=>{let{mergeProcessCovs:n}=await ge("@bcoe/v8-coverage"),o={result:[]},i=new Map,c=(await bn(s,"testResult",`runId=${t}`)).data.docs;return await de(c.flatMap(u=>u.JSCoverageURLS||[]),async u=>{let d=await yn(u,9e4);await de(d,async m=>{if(!i.has(m.url)){let p=m.text;m.sourceUrl&&(i.set(m.url,"TEMP"),p=await(void 0)(m.sourceUrl)),i.set(m.url,{text:p,url:m.url,sourceMapType:m.sourceMapType,hash:m.hash})}delete m.text,o=n([o,{result:[m]}])})},{concurrency:20}),{covUrlMap:i,mergedCoverages:o}},Th=async(s,e,t,r)=>{if(!s.collectCodeCoverage)return;bu.info("start js coverage process");let n=(0,gh.default)(`analyzing coverage for ${t} ${t===1?"test":"tests"}`).start(),o=Or.resolve(s.codeCoverageReportPath||"./coverage"),i=Or.resolve(o,`.js/${(0,yh.default)().format("DDMMYYYYHHmmss")}`),a=s.codeCoverageSourceMapPath?Or.resolve(s.codeCoverageSourceMapPath):void 0;try{let[c,{mergedCoverages:u,covUrlMap:d}]=await Promise.all([ge("istanbul-lib-coverage"),VE(s.project,e,r)]);if(u.result.length===0){n.fail("Failed to report coverage information - js code coverage is empty");return}bu.info("start js coverage merge and remap",{numOfFiles:d.size,numMergedCoverages:u.result.length});let m=c.createCoverageMap({}),p={};await de(u.result,async({url:h,functions:g})=>{let{text:y,sourceMapType:w}=d.get(h),P=await(void 0).getSourceMap({sourceMapType:w,url:h,source:y,sourceMapDir:a});p[h]=P;let b=await(void 0).convertV8ToIstanbul(s,{source:y,sourceMap:P,functions:g});m.merge(b)}),await(void 0).remapCoverage(s,i,p);let f=await(void 0).saveCoverageReports(s,m,o,i);return n.succeed(),f}catch(c){let u="Failed to report coverage information";c instanceof R?n.fail(`${u}, missing arg: ${c.message}`):n.fail(u),bu.error(u,{err:c})}}});var yi={};$(yi,{SELENIUM_PERF_MARKS:()=>Eh,SeleniumPerfStats:()=>Lr});var Eh,Lr,Ts=T(()=>{"use strict";F();Eh={GET_BROWSER:"GET_BROWSER",GET_HTML:"GET_HTML",GET_ELEMENT:"GET_ELEMENT",GET_SCREENSHOT:"GET_SCREENSHOT"},Lr=class{constructor(){this.marks=Object.fromEntries(Object.values(Object.assign({ALL:"ALL"},Eh)).map(e=>[e,[]]));this.startTimes={}}markStart(e){let t=K();return this.startTimes[`${e}:${t}`]=Date.now(),t}markEnd(e,t){let r=Date.now()-this.startTimes[`${t}:${e}`];if(delete this.startTimes[`${t}:${e}`],!this.marks[t]){this.marks.ALL.push(r);return}this.marks[t].push(r)}getStats(){let e=Object.entries(this.marks).flatMap(([t,r])=>!Array.isArray(r)||!r.length?[]:[[`${t}_COUNT`,r.length],[`${t}_P50`,fo(r,50)],[`${t}_P95`,fo(r,95)]]);return{seleniumPerfMarks:this.marks,seleniumStats:Object.fromEntries(e)}}}});var xh={};$(xh,{initServer:()=>KE,mapFilesToLocalDrive:()=>Tu});function Tu(s,e){var t;try{s.failurePath=(s.failurePath||[]).map(r=>Object.assign(r,bi[r.id]?{screenshot:bi[r.id]}:{})),Object.keys(vs).forEach(r=>{s.assets||(s.assets={}),s.assets[Ih[r]]=vs[r]}),s.assets||(s.assets={}),s.assets.screenshots=Object.values(bi)}catch(r){e&&e.error("failed to map files to local drive",{err:r}),s.failurePath||(s.failurePath=[]),s.assets||(s.assets={}),(t=s.assets).screenshots||(t.screenshots=[])}}async function KE({agentPort:s,agentBind:e,saveRCALocally:t}){let r=await ge("multer"),n=typeof t=="string"?t:HE;await wu.promises.mkdir(n,{recursive:!0});let o=r({storage:r.diskStorage({async destination(c,u,d){let m=JSON.parse(c.body.metadata||"{}");if(!m.testResultId)return d(new Error("missing testResultId"),"");let p=On.join(n,m.testResultId);try{await wu.promises.mkdir(p,{recursive:!0})}catch(f){return d(f,"")}return d(null,p)},filename(c,u,d){let{fileName:m}=c.body,p=JSON.parse(c.body.metadata||"{}");if(!p.stepId&&!m)return d(new Error("missing stepId or fileName"),"");if(p.stepId){let f=On.extname(m);return d(null,`step_${p.stepId}_${p.stepName||""}${f}`.replace(/[/\\?%*:|"<>\s]/g,"-"))}return d(null,m)}})}),i=(0,Rh.default)();i.post("/",o.single("file"),(c,u)=>{var m;let d=JSON.parse(c.body.metadata||"{}");d.stepId&&(bi[d.stepId]=c.file.path),d.testResultId&&zE.includes(d.subType)&&(vs[m=d.subType]||(vs[m]=[]),vs[d.subType].push(c.file.path)),u.sendStatus(200)}),i.use((c,u)=>u.status(404).send("Endpoint Not Found"));let{createServer:a}=await import("http");return await new Promise((c,u)=>{let d=a(i);d.listen(s,e),d.on("error",m),d.on("listening",()=>c(d.address()));function m(p){if(p.syscall!=="listen")return u(p);switch(p.code){case"EACCES":case"EPERM":return u(new R(`Port ${s} requires elevated privileges`));case"EADDRINUSE":return u(new R(`Port ${s} is already in use`));default:return u(p)}}})}var wu,Sh,On,Rh,HE,bi,vs,Ih,zE,vu=T(()=>{"use strict";wu=E(require("fs")),Sh=E(require("os")),On=E(require("path")),Rh=E(require("express"));z();ft();HE=On.join(Sh.tmpdir(),"testim/rca/"),bi={},vs={},Ih={"test-log":"consoleLogs","har-file":"networkLogs"},zE=Object.keys(Ih)});var Zt,Eu,wi,Ch=T(()=>{"use strict";Zt=E(require("lodash"));F();j();Eu=x("override-test-data-builder"),wi=class{constructor(e,t,r){this.params=e;this.testInfoList=t;this.projectId=r}isObjectNotArray(e){return Zt.isObject(e)&&!Array.isArray(e)}isArrayOfObjects(e){return Array.isArray(e)&&e.filter(t=>!this.isObjectNotArray(t)).length===0}overrideTestData(){let{params:e,projectId:t}=this;return this.isObjectNotArray(e)&&typeof e.overrideTestData<"u"&&(this.isObjectNotArray(e.overrideTestData)&&!Zt.isEmpty(e.overrideTestData)?(Object.keys(e.overrideTestData).forEach(r=>this.overrideSingleTest(r,e.overrideTestData[r])),delete e.overrideTestData):Eu.error("invalid overrideTestData",{overrideTestData:e.overrideTestData,projectId:t})),this.isObjectNotArray(e)&&typeof e.overrideAllTestsData<"u"&&(Zt.isObject(e.overrideAllTestsData)&&!Zt.isEmpty(e.overrideAllTestsData)?(this.testInfoList.map(n=>n.name).forEach(n=>this.overrideSingleTest(n,e.overrideAllTestsData)),delete e.overrideAllTestsData):Eu.error("invalid overrideAllTestsData",{overrideAllTestsData:e.overrideAllTestsData,projectId:t})),this.testInfoList}overrideSingleTest(e,t){let{projectId:r}=this;if(this.isObjectNotArray(t)||this.isArrayOfObjects(t)){this.replaceAndCreateOverrideTestData(e,t);return}Eu.error("skip override test data to test name",{testName:e,projectId:r}),console.error(`Invalid override test data provided to test '${e}'`)}replaceAndCreateOverrideTestData(e,t){let r=this.mapTestListToUniqueId(e);if(r.length!==0)return this.createNewTestPerOverrideTestData(r,t)}mapTestListToUniqueId(e){let{testInfoList:t}=this;return Zt.chain(t).map(r=>{if(r.name.toLowerCase()===e.toLowerCase())return this.generateTestUniqId(r)}).compact().uniq().value()}createNewTestPerOverrideTestData(e,t){let{testInfoList:r}=this;return[...new Set(e)].map(n=>{let o=r.map(d=>this.generateTestUniqId(d)),i=o.indexOf(n),a=o.lastIndexOf(n),c=r[i],u=this.createNewTestItems(c,t);return r.splice(i,a-i+1,...u)})}createNewTestItems(e,t){return[].concat(t).map((r,n)=>{let o=K();return Object.assign({},e,{resultId:o,testData:{value:r,index:n+1,total:t.length||1}})})}getTestType(e){return e.isBeforeTestPlan?"before":e.isAfterTestPlan?"after":"test"}generateTestUniqId(e){return`${e.testId}:${e.testConfig.id}:${this.getTestType(e)}`}}});async function Ti(s,...e){if(!(!s||typeof s!="function"))try{return await s(...e)||{}}catch(t){throw tt.warn("failed to run hook",{err:t}),new R(`failed to run hook promise ${t.message}`)}}var Nr,tt,JE,XE,YE,QE,vi,Ph=T(()=>{"use strict";Nr=E(require("lodash"));F();ae();bs();Te();z();j();Ft();vn();vh();Ts();vu();le();be();Ch();kn();tt=x("test-run-status"),JE=Rr(),XE=process.env.GIT_COMMIT||process.env.CIRCLE_SHA1||process.env.TRAVIS_COMMIT,YE=process.env.GIT_URL||process.env.CIRCLE_REPOSITORY_URL,QE=nt();vi=class{constructor(e,t,r,n){this.testInfoList=e;this.options=t;this.branchToUse=n;this.exportsGlobal={};this.startTime=null;this.beforeSuiteParams={};this.executionStartedPromise=Promise.resolve();this.seleniumPerfStats=new Lr;var a,c,u,d,m;(a=this.options).runParams||(a.runParams={}),this.fileUserParamsData=this.options.userParamsData;let o=rn(t,e),i=t.lightweightMode?t.lightweightMode.type:t.mode;this.execConfig={parallel:Js||t.parallel||1,browser:o,gitBranch:JE,gitCommit:XE,gitRepoUrl:YE,runnerVersion:QE,gridHost:t.host||((c=t.gridData)==null?void 0:c.host),testimBranch:n,canaryMode:t.canary,source:t.source,schedulerId:t.schedulerId,testPlanId:r,testPlans:t.testPlan,testLabels:t.label,testSuites:[...new Set(e.flatMap(p=>p.testSuites))],testNames:t.name,testIds:t.testId,testConfigs:t.testConfigNames,testConfigIds:t.testConfigIds,port:t.port,browserTimeout:t.browserTimeout,timeout:t.timeout,newBrowserWaitTimeout:t.newBrowserWaitTimeout,tunnel:t.tunnel,tunnelPort:t.tunnelPort,tunnelHostHeader:t.tunnelHostHeader,runnerMode:i,gridId:t.gridId||((u=t.gridData)==null?void 0:u.gridId),gridName:t.grid||((d=t.gridData)==null?void 0:d.name),gridType:(m=t.gridData)==null?void 0:m.type,retentionDays:t.retentionDays,codeCoverageReportPath:t.codeCoverageReportPath,collectCodeCoverage:t.codeCoverageUrlFilter||t.collectCodeCoverage,sessionType:Er(t)},this.testRunStatus=this.calcTestRunStatus()}waitForExecutionStartedFinished(){return this.executionStartedPromise}getTestResult(e){return this.testRunStatus[e]}async addRetryTestResult({newResultId:e,originalTestResultId:t,previousTestResultId:r,projectId:n,executionId:o,retryCount:i=1}){let a=this.testRunStatus[t]||{},{config:c,isTestsContainer:u,testId:d,name:m,testStatus:p,testCreatorName:f,testCreatorEmail:h,testOwnerName:g,testOwnerEmail:y,testLabels:w,testSuites:P,allLabels:b}=a,v={originalTestResultId:t,previousTestResultId:r,config:Nr.cloneDeep(c),testId:d,status:"QUEUED",name:m,resultId:e,isTestsContainer:u,retryCount:i,testStatus:p};return this.testRunStatus[e]=Object.assign({},v,{testCreatorName:f,testCreatorEmail:h,testOwnerName:g,testOwnerEmail:y,testLabels:w,testSuites:P,allLabels:b}),gl({projectId:n,runId:o,testId:d,newResultId:e,originalTestResultId:t,previousTestResultId:r,testResult:v})}getAllTestResults(){return this.testRunStatus}testStart(e,t,r,n){let o=this.getTestResult(r);o.workerId=e;let i=this.options.files.length>0;return Z.onTestStarted(o,e,n,i,r),o}async updateTestStatusRunning(e,t,r){var u;let{project:n,remoteRunId:o,projectData:i}=this.options;if((u=this.options.lightweightMode)!=null&&u.onlyTestIdsNoSuite)return this.executionStartedPromise;let a="";try{a=await Mo(n,e.testId,e.resultId,e.config.testData,i.defaults)||""}catch(d){tt.error("failed to upload test data artifact (runner)",{err:d})}let c=Nr.cloneDeep(e.config);return delete c.testData,c.testDataUrl=a,await this.executionStartedPromise,us(n,t,e.testId,e.resultId,"RUNNING",{startTime:e.startTime,config:c,remoteRunId:o,testRetryKey:r})}async testStartReport(e,t,r){if(He(e,this.options))return;let n=this.exportsGlobal;try{let o=await Ti(this.options.beforeTest,Object.assign({},e,{exportsGlobal:n,globalParameters:n}),this.options.userData.loginData.token);return e.config.testData=Object.assign({},e.config.testData,this.exportsGlobal,this.fileUserParamsData,this.beforeSuiteParams,o),this.options.runParams[e.resultId]=e.config.testData,e.startTime=Date.now(),await this.updateTestStatusRunning(e,t,r),e}catch(o){throw tt.error("Failed to start test",{err:o}),o}}testStartAndReport(e,t,r,n,o){let i=this.testStart(e,t,r,n);return this.testStartReport(i,t,o)}onGridSlot(e,t){let r=this.getTestResult(e);r.config.gridInfo=Object.assign({},t,{key:void 0,user:void 0}),tt.info("on get grid info",{gridInfo:r.config.gridInfo})}reportTestStatus(e,t,r,n){let{name:o,testId:i,testStatus:a}=r,{resultId:c,success:u}=t;if(a===Ve.EVALUATING&&Rt.isTestStatusEnabled){Z.onTestIgnored(e,r,`test in ${Ve.EVALUATING} status`);return}if(u){Z.onTestPassed(o);return}Z.onTestFailed(r,r.failureReason,st(this.options.editorUrl,this.options.project,i,c,this.branchToUse),i,n,c)}calcResultText(e){return e.success?pe.PASSED:pe.FAILED}onTestIgnored(e,t){let r=this.getTestResult(t);Z.onTestIgnored(e,r,`test in ${Ve.QUARANTINE}`)}testEnd(e,t,r,n,o){let i=this.getTestResult(t.resultId),a=t.endTime-t.startTime||0;i.sessionId=n,i.startTime=t.startTime||i.startTime||Date.now(),i.duration=a,t.duration=a,i.failureReason=t.failureReason||t.reason,t.failureReason=i.failureReason,i.failurePath=t.failurePath,i.resultId=t.resultId,i.success=t.success,this.options.saveRCALocally&&Tu(i,tt),i.resultUrl=st(this.options.editorUrl,this.options.project,i.testId,i.resultId,this.branchToUse),i.status=this.calcResultText(t),t.status=i.status,t.name=i.name,t.testStatus=i.testStatus,t.testId||(t.testId=i.testId),t.testCreatorName=i.testCreatorName,t.testCreatorEmail=i.testCreatorEmail,t.testOwnerName=i.testOwnerName,t.testOwnerEmail=i.testOwnerEmail,t.testData=i.config&&typeof i.config.testDataTotal=="number"?{total:i.config.testDataTotal,index:i.config.testDataIndex}:{},this.reportTestStatus(e,t,i,o);let c=this.options.files.length>0;Z.onTestFinished(i,e,o,c);let u=Object.assign({},this.exportsGlobal,t.exportsGlobal);return this.exportsGlobal=u,i}async testEndReport(e,t,r,n){var i;let o=r.exportsGlobal;try{try{await Ti(this.options.afterTest,Object.assign({},e,{exportsGlobal:o,globalParameters:o}),this.options.userData.loginData.token)}catch(a){tt.error("HOOK threw an error",{test:e.testId,err:a}),console.error("HOOK threw an error",a)}return(i=this.options.lightweightMode)!=null&&i.onlyTestIdsNoSuite?void 0:await us(this.options.project,t,e.testId,e.resultId,"FINISHED",{startTime:e.startTime,endTime:r.endTime,success:e.success,failureReason:e.failureReason,remoteRunId:this.options.remoteRunId,...n},5)}catch(a){throw tt.error("Failed to update test finished",{err:a}),a}}testEndAndReport(e,t,r,n,o,i){let a=this.testEnd(e,t,r,n,o);return this.testEndReport(a,r,t,i)}calcTestRunStatus(){let{options:e,testInfoList:t}=this,r=e.company.companyId,n=t.map(o=>{var c,u,d,m;let i=e.browser?an(e.browser,e.saucelabs,e.browserstack):o.runConfig;if(i&&M.flags.dec2022eolBrowsers.isEnabled()&&((c=on(i.browserValue))!=null&&c.eol))throw new R(`Unsupported Browser: ${i.browserName}`);let a={testId:o.testId,status:He(o,e)?pe.SKIPPED:pe.QUEUED,name:o.name,resultId:o.resultId,isTestsContainer:o.isTestsContainer,testStatus:o.testStatus||Ve.DRAFT,testCreatorName:o.creatorName,testCreatorEmail:o.creatorEmail,testOwnerName:o.testOwnerName,testOwnerEmail:o.testOwnerEmail,testLabels:o.testLabels,testSuites:o.testSuites,allLabels:o.allLabels,config:Object.assign({},this.execConfig,{companyId:r,testData:((u=o.testData)==null?void 0:u.value)||null,isBeforeTestPlan:o.isBeforeTestPlan,isAfterTestPlan:o.isAfterTestPlan,testDataTotal:((d=o.testData)==null?void 0:d.total)||null,testDataIndex:((m=o.testData)==null?void 0:m.index)||null,baseUrl:e.baseUrl||o.baseUrl||o.testConfig.baseUrl,testConfig:o.overrideTestConfig||o.testConfig,browser:i.browserValue.toLowerCase()})};return[o.resultId,a]});return Object.fromEntries(n)}async executionStart(e,t,r,n,o){tt.info("execution started",{executionId:e});let{options:i}=this,{remoteRunId:a,projectData:c}=i;ds(()=>Promise.all([xn.end(t),No("ABORTED",e,t,!1,void 0,a,void 0)])),this.startTime=r||Date.now();let u={projectId:t,executionId:e,...M.flags.testNamesToBeforeSuiteHook.isEnabled()&&{testNames:o}},d=await Ti(i.beforeSuite,u),m=new wi(d,Nr.cloneDeep(this.testInfoList),t);this.testInfoList=m.overrideTestData(),this.testRunStatus=this.calcTestRunStatus(),this.beforeSuiteParams=d;let{testInfoList:p}=this,f=[],h=[],g=[];for(let w of p){if(w.isBeforeTestPlan){f.push(w);continue}if(w.isAfterTestPlan){g.push(w);continue}h.push(w)}let y=async()=>{let w=Nr.cloneDeep(this.testRunStatus);await de(Object.keys(w),async I=>{var C;let k=w[I],D=(C=k.config)==null?void 0:C.testData,S=k.testId,_=await Mo(t,S,I,D,c.defaults);_&&(delete k.config.testData,k.config.testDataUrl=_)});let P=Boolean(i.useLocalChromeDriver||i.useChromeLauncher),b={executionId:e,projectId:t,labels:n||[],startTime:r,executions:w,config:this.execConfig,resultLabels:i.resultLabels,remoteRunId:i.remoteRunId,localRunUserId:i.user,isLocalRun:P,intersections:i.intersections},v=Qc(b);return this.executionStartedPromise=v,v.catch(I=>tt.error(I)),v};try{await y()}catch(w){tt.error("Failed to start suite",{err:w}),console.error("Failed to start test run. Please contact support@testim.io")}return{beforeTests:f,tests:h,afterTests:g}}concatSeleniumPerfMarks(e){Nr.chain(e).keys().each(t=>{let r=t;this.seleniumPerfStats.marks[r]&&(this.seleniumPerfStats.marks[r]=[...this.seleniumPerfStats.marks[r],...e[r]])}).value()}async executionEnd(e){var d;let t=Pc(this.testRunStatus),r=t.length,n=0,o=0,i=0;for(let{status:m,testStatus:p}of t)m===pe.PASSED&&n++,m===pe.SKIPPED&&o++,m===pe.FAILED&&p===Ve.EVALUATING&&i++;let{seleniumPerfMarks:a,...c}=this.seleniumPerfStats.getStats();try{await Ti(this.options.afterSuite,{exportsGlobal:this.exportsGlobal,tests:t,total:r,passed:n,skipped:o})}catch(m){console.log("check your callback handler on afterSuite Hook for syntax or exception errors"),tt.warn("error while running afterSuite Hook",{err:m,projectId:this.options.projectData.projectId,executionId:this.options.executionId})}let u=await Th(this.options,this.branchToUse,r,e);if(Object.assign(c,{coverageSummary:u}),!((d=this.options.lightweightMode)!=null&&d.onlyTestIdsNoSuite))try{return await No("FINISHED",e,this.options.project,r===n+o+i,{tmsSuppressReporting:this.options.tmsSuppressReporting,tmsRunId:this.options.tmsRunId,tmsCustomFields:this.options.tmsCustomFields},this.options.remoteRunId,c)}catch(m){throw tt.error("Failed to update suite finished",{err:m}),m}}async markAllQueuedTests(e,t,r,n){let o=Object.keys(this.testRunStatus).filter(i=>this.getTestResult(i).status==="QUEUED");await Yc(e,["QUEUED"],t,r,n,this.startTime,null,this.options.project);for(let i of o){let a=this.getTestResult(i);a.status=t,a.failureReason=r,a.success=n}return this.testRunStatus}}});var Si={};$(Si,{buildAppiumOptions:()=>Pu,buildSeleniumOptions:()=>Cu});function eS(s,e){let t={browserName:"safari",...e==="safari technology preview"&&{"safari.options":{technologyPreview:!0}}};return Object.assign(s.desiredCapabilities,t),s}function xu(s){return _h.readFileSync(s,{encoding:"base64"})}function Nh(s,e,t){if(!(t!=null&&t.isLambdatestRun()&&Be(s))&&s){let r=xu(s);Ln.info(`adding extension: custom, path: ${s} length: ${r.length} hash: ${Iu(r)} current extension count: ${e.length}`),e.push(r)}}function Dh(s,e,t,r,n){if(n!=null&&n.isLambdatestRun())return;if(s.ext||r){let c=typeof s.ext=="string"?s.ext:`${__dirname}/..`,u=r||c,d=`--load-extension=${u}`;Ln.info(`adding extension: testim unpacked , path: ${u}`),t.push(d);return}let o=s.canary?"-master.zip":".zip",i=Ru.join(process.cwd(),`testim-headless${o}`),a=xu(i);Ln.info(`adding extension: testim zipped, path: ${i} length: ${a.length} hash: ${Iu(a)} current extension count: ${e.length}`),e.push(a)}function tS(s,e,t,r,n,o,i){var g,y;let a=t.seleniumName||t.browserValue,c=[],u=[...Lh];e.headless&&u.push("--headless");let d=()=>e.mode!==Q.EXTENSION,m={prefs:{"profile.default_content_setting_values.popups":Su.CONTENT_SETTING_ALLOW,"profile.default_content_setting_values.automatic_downloads":Su.CONTENT_SETTING_ALLOW,"plugins.always_open_pdf_externally":!0,"safebrowsing.enabled":!0,"profile.content_settings.exceptions.clipboard":{"[*.],*":{last_modified:Date.now(),setting:1}},"download.allow_office_viewer_for_download":!1},w3c:d()};Ei(n)&&(m.prefs["download.default_directory"]="C:\\Users\\testnode",m.w3c=!0,s.desiredCapabilities.version="latest-1",s.desiredCapabilities["aws:maxDurationSecs"]=2400,s.desiredCapabilities["aws:idleTimeoutSecs"]=60),Ei(n)&&a==="MicrosoftEdge"&&(s.desiredCapabilities["ms:edgeChromium"]=!0),e.chromeExtraPrefs&&Object.assign(m.prefs,e.chromeExtraPrefs),e.chromeExtraArgs&&e.chromeExtraArgs.forEach(w=>u.push(`--${w}`)),e.chromeBlockLocation&&(m.prefs["profile.default_content_setting_values.geolocation"]=Su.CONTENT_SETTING_BLOCK),e.chromeUserDataDir&&u.push(`--user-data-dir=${e.chromeUserDataDir}`),(y=(g=e.projectData)==null?void 0:g.defaults)!=null&&y.disableChromiumGpu&&u.push("--disable-gpu"),Object.assign(s.desiredCapabilities,{browserName:a});function p(){t.mobileEmulation&&(m.mobileEmulation={deviceMetrics:{width:t.mobileEmulation.device.width,height:t.mobileEmulation.device.height+vc.MOBILE_WEB_REMOTE_RUN_HEADER_SPACING,pixelRatio:t.mobileEmulation.device.deviceScaleFactor},userAgent:t.mobileEmulation.userAgent})}p(),Nh(r,c,i),e.mode===Q.EXTENSION&&Dh(e,c,u,o,i),c.length>0&&(m.extensions=c),e.disableCookiesSameSiteNoneRequiresSecure&&(m.localState={"browser.enabled_labs_experiments":["cookies-without-same-site-must-be-secure@2"]}),m.args=u;let f={MicrosoftEdge:"edgeOptions",chrome:"chromeOptions"}[a],h={MicrosoftEdge:"ms",chrome:"goog"}[a];return te.isLambdatestGrid(n)&&delete m.w3c,e.oldCapabilities&&n.type!=="testimEnterprise"&&!(i!=null&&i.isLambdatestRun())&&(s.desiredCapabilities[f]=m),(e.w3cCapabilities||n.type==="testimEnterprise")&&(s.desiredCapabilities[`${h}:${f}`]=m),s}function sS(s,e,t){let r={"pdfjs.disabled":!0};if(M.flags.autoSaveDownloadFileFireFox.isEnabled()&&Object.assign(r,{"browser.helperApps.neverAsk.saveToDisk":kh.join(","),"browser.helperApps.neverAsk.openFile":kh.join(","),"browser.helperApps.alwaysAsk.force":!1,"browser.download.manager.useWindow":!1,"browser.download.manager.focusWhenStarting":!1,"browser.download.manager.alertOnEXEOpen":!1,"browser.download.manager.showWhenStarting":!1,"browser.download.manager.closeWhenDone":!0,"browser.download.manager.showAlertOnComplete":!1}),Object.assign(s.desiredCapabilities,{acceptInsecureCerts:!0,browserName:"firefox",marionette:!0,"moz:firefoxOptions":{prefs:r}},t!=null&&t.isLambdatestRun()?{enableCustomTranslation:!0}:{}),e.disableCookiesSameSiteNoneRequiresSecure&&(s.desiredCapabilities["moz:firefoxOptions"].prefs["network.cookie.sameSite.noneRequiresSecure"]=!1),e.mode===Q.EXTENSION)if(e.ext)s.desiredCapabilities.testim_firefox_profile=e.ext;else{let n=e.canary?"-master.zip":".zip",o=Ru.join(process.cwd(),`testim-firefox-profile${n}`);s.desiredCapabilities.firefox_profile=xu(o)}return e.headless&&(s.desiredCapabilities["moz:firefoxOptions"].args||(s.desiredCapabilities["moz:firefoxOptions"].args=[]),s.desiredCapabilities["moz:firefoxOptions"].args.push("-headless")),s}function nS(s,e,t){let{saucelabs:r}=s;return r!=null&&r.username&&r.accessKey?t?(t.sl.version=t.browserValue==="safari"?t.sl.safari_version:t.sl.version,t.sl.appiumVersion=r.appiumVersion||t.sl.appiumVersion,Object.assign({},t.sl,r,{name:e})):Object.assign({},r,{name:e}):{}}function oS(s,e,t){return ht.isEmpty(s.browserstack)?{}:t?(t.bs.browser_version=t.browserValue==="safari"?t.bs.safari_version:t.bs.browser_version,t.browserValue==="safari"&&t.bs.safari_version==="10"&&Object.assign(t.bs,{"safari.options":{technologyPreview:!0}}),Object.assign({},t.bs,s.browserstack,{name:e})):Object.assign({},s.browserstack,{name:e})}function iS(s){return s.perfecto?s.perfecto:{}}function aS(s,e,t){if(s.experitestToken){let r=e==="safari";return{accessKey:s.experitestToken,browserVersion:"latest",platformName:r?"MAC":"WIN10",seleniumScreenshot:r,newSessionWaitTimeout:t}}return{}}function cS(s,e={}){let{gridData:t={},gridUsername:r,gridPassword:n}=s,o=r||t.user||e.user,i=n||t.key||e.key,a={};return o&&i&&(a.Authorization=Ba(o,i)),a}function Cu(s,e,t,r,n,o,i,a=null){var g,y,w,P,b,v;if(r.mode==="local"){let I=[],k=[...Lh],D={};return s.headless&&k.push("--headless"),s.silentDebuggerExtensionApi&&k.push("--silent-debugger-extension-api"),s.remoteDebuggingPort!==void 0&&k.push(`--remote-debugging-port=${s.remoteDebuggingPort}`),s.chromeExtraArgs&&s.chromeExtraArgs.forEach(S=>k.push(`--${S}`)),s.chromeBinaryLocation&&(D.binary=s.chromeBinaryLocation),s.mode!=="selenium"&&Dh(s,I,k,null,a),Nh(n,I,a),{logLevel:Ah,desiredCapabilities:{chromeOptions:{args:k,extensions:I,...D},browserName:"chrome"},host:"localhost",port:9515}}let{driverRequestTimeout:c,driverRequestRetries:u}=s,d=cS(s,r),m={host:r.host,port:r.port||4444,path:r.path||"/wd/hub",protocol:r.protocol||"http",logLevel:Ah,connectionRetryTimeout:c,connectionRetryCount:u,getSessionTimeout:Math.max(a.getSessionTimeout,s.getSessionTimeout),getSessionRetries:a.getSessionRetries||s.getSessionRetries,deprecationWarnings:!1,desiredCapabilities:{javascriptEnabled:!0,locationContextEnabled:!0,handlesAlerts:!0,rotatable:!0,acceptSslCerts:!0,unexpectedAlertBehaviour:"accept",nativeEvents:!0,testName:e},...!ht.isEmpty(d)&&{headers:d},...s.proxyForGrid&&{agent:global.ProxyAgent(global.proxyUri)}};Ei(r)&&(s.oldCapabilities=!1,s.w3cCapabilities=!0,m.desiredCapabilities={unexpectedAlertBehaviour:"accept"}),s.disableNativeEvents&&(m.desiredCapabilities.nativeEvents=!1),r.user&&r.key&&(r.type==="saucelabs"&&(s.saucelabs||(s.saucelabs={}),(g=s.saucelabs).username||(g.username=r.user),(y=s.saucelabs).accessKey||(y.accessKey=r.key)),r.type==="browserstack"&&(s.browserstack||(s.browserstack={}),(w=s.browserstack)["browserstack.user"]||(w["browserstack.user"]=r.user),(P=s.browserstack)["browserstack.key"]||(P["browserstack.key"]=r.key))),r.key&&r.type==="perfecto"&&(s.perfecto.securityToken=r.key);let p=Number(s.browserTimeout/1e3),f=s.browser||(t==null?void 0:t.browserValue);ht.merge(m.desiredCapabilities,nS(s,e,t),oS(s,e,t),iS(s),aS(s,f,p),a==null?void 0:a.getCapabilities(s,f,o,i,e));let h=null;switch(!s.ext&&!s.extensionPath&&((b=r.host)!=null&&b.endsWith(".testim.io"))&&!s.canary&&s.mode===Q.EXTENSION&&(f==="chrome"?h="/opt/testim-headless":f==="edge-chromium"&&(h="C:/selenium/testim-headless")),(v=r.host)!=null&&v.endsWith(".testim.io")&&f==="edge-chromium"&&(m.desiredCapabilities.version="83"),f){case"chrome":case"edge-chromium":m=rS(m,s,t,n,r,h,a);break;case"firefox":m=sS(m,s,a);break;case"safari":case"safari technology preview":m=eS(m,f);break;default:break}ht.merge(m.desiredCapabilities,s.seleniumCapsFileContent);try{let I={"hub.lambdatest.com":"lambdatest",[M.flags.publicGridURL.getValue()]:"testim","testgrid-devicefarm.us-west-2.amazonaws.com":"devicefarm"},k=C=>C[r.provider]||C[m.host]||C[I[m.host]],D=C=>{var L,B;return k(C)||C[(L=m.desiredCapabilities)==null?void 0:L.browserName]||C[(B=m.desiredCapabilities)==null?void 0:B.version]||C||{}},S=JSON.parse(M.flags.addCustomCapabilities.getValue()||"{}"),_=D(D(S));Object.keys(_).length&&(Ln.info(`Adding custom capabilities: ${JSON.stringify(_)}`),Object.assign(m.desiredCapabilities,_))}catch(I){Ln.error("Failed to load custom capabilities",{error:I,customCapabilities:M.flags.addCustomCapabilities.getValue()})}return Ei(r)&&m.desiredCapabilities&&!m.capabilities&&(ZE(m.desiredCapabilities),m.capabilities={alwaysMatch:m.desiredCapabilities,firstMatch:[{}]},delete m.desiredCapabilities),m}function Pu({projectType:s,gridInfo:e,nativeApp:t,options:r,appPath:n,androidActivityWait:o}){let{deviceModel:i,osVersion:a,deviceUdid:c,fullReset:u,resetAppData:d,resetOnSessionStartOnly:m}=r,p={};if(!t&&!n)throw Error("missing mobile app!");if(e.type!==ue.TESTIM_HEADSPIN)throw Error("unsupported grid was detected please make sure to select supported mobile grid");let f={protocol:e.protocol||"https",hostname:e.host,port:e.port,path:`/v0/${e.accessToken}/wd/hub`,logLevel:r.appiumLogLevel},h={"headspin:capture":!0,...!u&&!d&&{"appium:noReset":!0},...!u&&d&&{"appium:noReset":!1}};switch(s){case"ios":h={...h,platformName:"iOS","appium:autoAcceptAlerts":!0,"appium:automationName":"XCUITest",...u&&{"appium:fullReset":u,"appium:resetOnSessionStartOnly":m},...t&&{"appium:bundleId":t.id},...n&&{"appium:app":n}};break;case"android":h={...h,platformName:"Android",...u&&{"appium:fullReset":u},...!u&&d&&{"appium:autoGrantPermissions":!0},"appium:automationName":"UiAutomator2","appium:appWaitActivity":o,...t&&{"appium:appPackage":t.id||t.packageName,"appium:appActivity":t.activity},...n&&{"appium:app":n}};break;default:throw Error(`unsupported mobile project ${s}`)}return i&&(p.model=i),a&&(p.os_version=a),c&&(p.device_id=c,delete p.model,delete p.os_version),ht.isEmpty(p)||(h["headspin:selector"]=p),{...f,desiredCapabilities:h,capabilities:h}}var _h,Ru,Oh,ht,Ln,Ah,Su,Lh,Iu,Ei,ZE,rS,kh,Ri=T(()=>{"use strict";_h=E(require("fs")),Ru=E(require("path")),Oh=E(require("crypto")),ht=E(require("lodash"));F();le();j();be();ae();ti();Ln=x("testim-desired-capabilities-builder"),Ah=Ks?"verbose":"silent",Su={CONTENT_SETTING_DEFAULT:0,CONTENT_SETTING_ALLOW:1,CONTENT_SETTING_BLOCK:2,CONTENT_SETTING_ASK:3},Lh=["--disable-popup-blocking","--ignore-gpu-blacklist","--auto-select-desktop-capture-source=Entire screen","--ignore-certificate-errors","--disable-features=TranslateUI","--disable-background-networking","--disable-sync","--metrics-recording-only","--disable-default-apps","--mute-audio","--no-first-run","--disable-back-forward-cache"],Iu=(...s)=>Oh.createHash("sha256").update(s.join("")).digest("hex"),Ei=s=>s.type===ue.DEVICE_FARM||s.type===ue.HYBRID&&s.provider==="devicefarm",ZE=s=>{Object.prototype.hasOwnProperty.call(s,"version")&&(s.browserVersion=s.version,delete s.version),Object.prototype.hasOwnProperty.call(s,"platform")&&(s.platformName=s.platform,delete s.platform),Object.prototype.hasOwnProperty.call(s,"acceptSslCerts")&&(s.acceptInsecurecerts=s.acceptSslCerts,delete s.acceptSslCerts),Object.prototype.hasOwnProperty.call(s,"unexpectedAlertBehaviour")&&(s.unhandledPromptBehavior=s.unexpectedAlertBehaviour,delete s.unexpectedAlertBehaviour)};rS=ht.memoize(tS,(s,e,t,r,n,o)=>{let i=JSON.stringify(s.desiredCapabilities),a=JSON.stringify(ht.omit(e,"runParams")),c=JSON.stringify(t),u=JSON.stringify(n.type);return Iu(i,a,c,r,u,o)}),kh=["application/force-download","application/pdf","application/x-pdf","application/acrobat","applications/vnd.pdf","text/pdf","text/x-pdf","application/vnd.cups-pdf"]});var Uh={};$(Uh,{isElementDisplayed:()=>Mh});function Mh(s){function e(p){return p?[Node.ELEMENT_NODE,Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE].includes(p.nodeType):!1}function t(p){return p?r(p.parentNode,e):null}function r(p,f){for(let h=p;h&&h!==p.ownerDocument;h=h.parentNode)if(f(h))return h;return null}function n(p,f){for(let h=p;h&&h!==p.ownerDocument;h=t(h))if(f(h))return h;return null}function o(p,f){if(!p||!f)return null;p instanceof DocumentFragment&&(p=p.host);let g=window.getComputedStyle(p).getPropertyValue(f);if(g&&g!=="inherit")return g;let y=t(p);return o(y,f)}function i(p){let f=p.getBoundingClientRect();if(f.width>0&&f.height>0)return!0;if(p.tagName.toUpperCase()==="PATH"&&f.width+f.height>0){let g=o(p,"stroke-width");return!!g&&parseInt(g,10)>0}return o(p,"overflow")==="hidden"?!1:Array.from(p.childNodes).some(g=>g.nodeType===Node.TEXT_NODE?!0:e(g)?i(g):!1)}function a(p){return o(p,"overflow")==="hidden"}function c(p){return!p||!a(p)||!p.childNodes.length?!1:Array.from(p.childNodes).every(f=>f.nodeType===Node.TEXT_NODE?!1:!e(f)||!i(f)?!0:c(f))}function u(p){var f;return p?(f=p.parentNode)!=null&&f.host?!0:u(p.parentNode):!1}if(!s||!u(s)&&!document.contains(s))return!1;switch(s.tagName.toUpperCase()){case"BODY":return!0;case"SCRIPT":case"NOSCRIPT":return!1;case"OPTGROUP":case"OPTION":{let p=r(s,f=>f.tagName.toUpperCase()==="SELECT");return Mh(p)}case"INPUT":if(s.type==="hidden")return!1;break;default:break}if(o(s,"visibility")!=="visible")return!1;let d=!!n(s,p=>Number(o(p,"opacity"))===0),m=!!n(s,p=>o(p,"display")==="none");return!(d||m||!i(s)||c(s))}var Fh=T(()=>{"use strict"});var Au={};$(Au,{encodeForSafari:()=>uS,isOldProtocol:()=>lS});function lS(s){var e,t,r,n,o,i,a;return((e=s.message)==null?void 0:e.match(/Command not found/))||s.message==="HTTP method not allowed"||s.message==="Unknown error"||((t=s.message)==null?void 0:t.match(/Unknown timeout type/))||((r=s.seleniumStack)==null?void 0:r.type)==="UnknownCommand"||((n=s.message)==null?void 0:n.match(/did not match a known command/))||((o=s.message)==null?void 0:o.match(/Server returned HTTP response code: 405 for URL/))||((i=s.seleniumStack)==null?void 0:i.message)==="The arguments passed to a command are either invalid or malformed."||((a=s.message)==null?void 0:a.match(/Invalid timeout type specified: ms/))}function uS(s,e,t){if(!e||!s)return s;if(s.includes("%"))return s.replace(/ /g,"%20");try{return decodeURI(s)!==s?s:encodeURI(s)}catch(r){return t&&t.warn("tried to encode url but failed",{err:r,url:s}),s}}var ku=T(()=>{"use strict"});var Gh=Kd((RP,Wh)=>{"use strict";var $h=require("promise-queue"),jh=(le(),G(xe)),dS=require("@testim/webdriverio"),_u=(Le(),G(Oe)),{extractElementId:Nn}=(F(),G(H)),{getLogger:pS}=(j(),G(Xs)),{UNICODE_CHARACTERS:Bh,W3C_ELEMENT_ID:mS}=(Yr(),G(ja)),{isElementDisplayed:fS}=(Fh(),G(Uh)),{isOldProtocol:Dr,encodeForSafari:hS}=(ku(),G(Au)),{SELENIUM_PERF_MARKS:Es}=(Ts(),G(yi)),Ii=pS("WebDriverApi");$h.configure(Promise);var gS=function(){return{screenWidth:Math.floor(window.innerWidth||0),screenHeight:Math.floor(window.innerHeight||0)}},Ou=class{constructor(){this.w3cRequests={}}windowHandleMaximize(){return this.addToQueue(()=>this.client.windowHandleMaximize().then(e=>({height:e.value.height,width:e.value.width})))}rejectWithLog(e,t){let{testName:r,testResultId:n}=this,o=t?t.toString().substr(0,2e3):"";return Ii.warn("error from selenium",{err:e,testResultId:n,testName:r,crashingFunc:o}),Promise.reject(e)}initQueueRequests(){let e=1/0;this.isAndroid()&&(e=1),typeof jh.REQUESTS_QUEUE_SIZE<"u"&&(e=jh.REQUESTS_QUEUE_SIZE);let t=1/0;this.queue=new $h(e,t)}addToQueue(e){let t=this.seleniumPerfStats.markStart();return this.queue.add(e).catch(r=>this.rejectWithLog(r,e)).finally(()=>this.seleniumPerfStats.markEnd(t))}async initClient(e,t,r){this.testName=t,this.testResultId=r,e.deprecationWarnings=!1,this.client=dS.remote(e),this.initQueueRequests(),_u.log("right before addToQueue");let n=this.seleniumPerfStats.markStart(Es.GET_BROWSER);try{await this.addToQueue(()=>(Ii.info("requesting browser",{testResultId:r,testName:t}),_u.log("before this.client.init"),this.client.init())),_u.log("after client init")}finally{await this.seleniumPerfStats.markEnd(n,Es.GET_BROWSER)}}get isMobile(){return this.client.isMobile}getSessionId(){var e,t;return(t=(e=this.client)==null?void 0:e.requestHandler)==null?void 0:t.sessionID}isChrome(){return this.client.desiredCapabilities.browserName==="chrome"}isChromium(){return this.isChrome()||this.isEdgeChromium()}isFirefox(){return this.client.desiredCapabilities.browserName==="firefox"}isSafari(){return this.client.desiredCapabilities.browserName==="safari"||this.client.desiredCapabilities.browserName==="safari technology preview"}isAndroid(){return this.client.desiredCapabilities.platformName==="Android"}isEdgeChromium(){return this.client.desiredCapabilities.browserName==="MicrosoftEdge"&&!this.client.desiredCapabilities._isOldEdge}execute(...e){return this.addToQueue(()=>{let t=e.shift();if(typeof t!="string"&&typeof t!="function")return Promise.reject(new Error("number or type of arguments don't agree with execute protocol command"));typeof t=="function"&&(t=`return (${t}).apply(null, arguments)`);let r=i=>{throw i.executedScript=t,i},n=()=>this.client.requestHandler.create("/session/:sessionId/execute/sync",{script:t,args:e}).catch(r),o=()=>this.client.requestHandler.create("/session/:sessionId/execute",{script:t,args:e}).catch(r);return this.w3cRequests.execute?n():o().catch(i=>{if(Dr(i))return this.w3cRequests.execute=!0,n();throw i})})}executeAsync(...e){return this.addToQueue(()=>{let t=e.shift();if(typeof t!="string"&&typeof t!="function")return Promise.reject(new Error("number or type of arguments don't agree with execute protocol command"));typeof t=="function"&&(t=`return (${t}).apply(null, arguments)`);let r=()=>this.client.requestHandler.create("/session/:sessionId/execute/async",{script:t,args:e}),n=()=>this.client.requestHandler.create("/session/:sessionId/execute_async",{script:t,args:e});return this.w3cRequests.executeAsync?r():n().catch(o=>{if(Dr(o))return this.w3cRequests.executeAsync=!0,r();throw o})})}async executeCDP(e,t={}){var n;if(!this.isChromium())return;let r=await this.client.requestHandler.create({path:"/session/:sessionId/chromium/send_command_and_get_result",method:"POST"},{cmd:e,params:t});return(n=r==null?void 0:r.value)!=null&&n.targetInfos?r.value.targetInfos:[]}takeScreenshot(){let e=this.seleniumPerfStats.markStart(Es.GET_SCREENSHOT);return this.addToQueue(()=>this.client.screenshot()).finally(()=>this.seleniumPerfStats.markEnd(e,Es.GET_SCREENSHOT))}takeElementScreenshot(e){let t=this.seleniumPerfStats.markStart(Es.GET_SCREENSHOT);return this.addToQueue(()=>this.client.elementIdScreenshot(Nn(e))).finally(()=>this.seleniumPerfStats.markEnd(t,Es.GET_SCREENSHOT))}getElementBySelector(e){return this.addToQueue(()=>this.client.element(e))}elementIdDisplayed(e){return this.addToQueue(()=>{let t=()=>this.client.elementIdDisplayed(e),r=()=>this.execute(fS,{ELEMENT:e,[mS]:e});return this.w3cRequests.elementIdDisplayed?r():t().catch(n=>{if(Dr(n))return this.w3cRequests.elementIdDisplayed=!0,r();throw n})})}windowHandles(){return this.addToQueue(()=>{let e=()=>this.client.requestHandler.create("/session/:sessionId/window_handles"),t=()=>this.client.requestHandler.create("/session/:sessionId/window/handles");return this.w3cRequests.windowHandles?t():e().catch(r=>{if(Dr(r))return this.w3cRequests.windowHandles=!0,t();throw r})})}url(e){return this.addToQueue(()=>this.client.url(hS(e,this.isSafari(),Ii)))}reloadTab(){return this.addToQueue(()=>this.client.refresh())}source(){return this.addToQueue(()=>this.client.source())}timeouts(e,t){return this.addToQueue(()=>{let r=()=>this.client.requestHandler.create("/session/:sessionId/timeouts",{type:e,ms:t}),n=()=>this.client.requestHandler.create("/session/:sessionId/timeouts",{[e]:t});return this.w3cRequests.timeouts?n():r().catch(o=>{if(Dr(o))return this.w3cRequests.timeouts=!0,n();throw o})})}scroll(e,t){e=typeof e=="number"?e:0,t=typeof t=="number"?t:0;let r=function(n,o){window.scrollTo(n,o)};return this.execute(r,e,t)}setValue(e,t){return this.elementIdClear(Nn(e)).then(()=>this.elementIdValue(Nn(e),t))}getViewportSize(e){return this.execute(gS).then(t=>typeof e=="string"&&e.match(/(width|height)/)?(e=`screen${e.slice(0,1).toUpperCase()}${e.slice(1)}`,t.value[e]):{width:t.value.screenWidth||0,height:t.value.screenHeight||0})}keys(e){let t=i=>Bh.hasOwnProperty(i)?[Bh[i]]:i.split(""),r=[];if(typeof e=="string")r=t(e);else if(e instanceof Array)for(let i of e)r=r.concat(t(i));else return Promise.reject(new Error("number or type of arguments don't agree with keys protocol command"));let n=()=>this.client.requestHandler.create("/session/:sessionId/keys",{value:r}),o=()=>{let i=r.map(c=>({type:"keyDown",value:c})),a=r.map(c=>({type:"keyUp",value:c}));return this.actions([{type:"key",id:"keys",actions:[...i,...a]}])};return this.w3cRequests.keys?o():this.addToQueue(()=>n().catch(i=>{if(Dr(i))return this.w3cRequests.keys=!0,o();throw i}))}elementIdValue(e,t){return this.addToQueue(()=>this.client.elementIdValue(e,t))}elementIdClear(e){return this.addToQueue(()=>this.client.elementIdClear(e))}submitForm(e){return this.addToQueue(()=>this.client.submit(Nn(e)))}buttonPress(e){return this.addToQueue(()=>this.client.buttonPress(e))}findElementAndPress(e,t,r,n){return this.moveTo(Nn(e),t,r).then(()=>this.buttonPress(n))}rightClick(e,t,r){return this.findElementAndPress(e,t,r,"right")}leftClick(e,t,r){return this.findElementAndPress(e,t,r,"left")}elementIdClick(e){return this.addToQueue(()=>this.client.elementIdClick(e))}actions(e){return this.addToQueue(()=>this.client.actions(e))}doDoubleClick(){return this.addToQueue(()=>this.client.doDoubleClick())}dragAndDrop(e,t){return this.addToQueue(()=>this.client.dragAndDrop(e,t))}buttonDown(){return this.addToQueue(()=>this.client.buttonDown())}buttonUp(){return this.addToQueue(()=>this.client.buttonUp())}moveTo(e,t,r){let n={};return typeof t=="number"&&(n.xoffset=t),typeof r=="number"&&(n.yoffset=r),this.isSafari()&&!n.hasOwnProperty("yoffset")&&(n.yoffset=1),this.isSafari()&&!n.hasOwnProperty("xoffset")&&(n.xoffset=1),typeof e=="string"&&(n.element=e),this.addToQueue(()=>this.client.requestHandler.create("/session/:sessionId/moveto",n))}uploadFile(e){return this.addToQueue(()=>this.client.uploadFile(e))}getUrl(){return this.addToQueue(()=>this.client.getUrl())}getTitle(){return this.addToQueue(()=>this.client.getTitle())}windowHandleSize(e="current",t){return this.addToQueue(()=>{let r={};typeof e=="object"&&([e,t]=["current",e]);let n={path:`/session/:sessionId/window/${e}/size`,method:"GET"};if(typeof t=="object"&&t.width&&t.height&&(n.method="POST",r={width:Math.abs(t.width),height:Math.abs(t.height)}),n.method==="POST"&&typeof r.width!="number"&&typeof r.height!="number")return Promise.reject(new Error("number or type of arguments don't agree with windowHandleSize protocol command"));let o=()=>this.client.requestHandler.create(n,r),i=()=>(n.path="/session/:sessionId/window/rect",this.client.requestHandler.create(n,r));return this.w3cRequests.windowHandleSize?i():o().catch(a=>{if(Dr(a))return this.w3cRequests.windowHandleSize=!0,i();throw a})})}setCookie(e,t,r,n,o,i,a){return this.addToQueue(()=>this.client.setCookie({name:e,value:t,domain:r,httpOnly:n,secure:o,path:i,expiry:a&&Math.floor(a)}))}getCookie(e){return this.addToQueue(()=>this.client.requestHandler.create("/session/:sessionId/cookie").then(t=>(t.value=t.value||[],typeof e=="string"?t.value.find(r=>r.name===e||r.name===encodeURIComponent(encodeURIComponent(e)))||null:t.value||(typeof e=="string"?null:[]))))}deleteCookie(e){return this.addToQueue(()=>this.client.deleteCookie(e))}isVisibleWithinViewport(e){return this.addToQueue(()=>this.client.isVisibleWithinViewport(e))}getCurrentTabId(){return this.addToQueue(()=>this.client.getCurrentTabId())}frame(e){return this.addToQueue(()=>this.client.frame(e))}switchTab(e){return this.addToQueue(()=>this.client.switchTab(e))}alertAccept(){return this.addToQueue(()=>this.client.alertAccept())}log(e="browser"){return this.addToQueue(()=>this.client.log(e))}end(){return this.w3cRequests={},this.queue?this.addToQueue(()=>this.client.end()):Promise.resolve()}forceEnd(){return this.w3cRequests={},this.client?this.client.end():Promise.resolve()}touchPerform(e){return this.addToQueue(()=>this.client.touchPerform(e))}touchAction(e){return this.addToQueue(()=>this.client.touchAction(e))}pressKeycode(e){return this.addToQueue(()=>this.client.pressKeycode(e))}setImmediateValue(e,t){return this.addToQueue(()=>this.client.setImmediateValue(e,t))}elementIdText(e){return this.addToQueue(()=>this.client.elementIdText(e)).then(t=>t.value)}isAppInstalled(e){return this.addToQueue(()=>this.client.isAppInstalled(e)).then(t=>{let r=!!t.value;return Ii.info(`is app (${e}) installed? ${r}`,t),r})}launch(){return this.addToQueue(()=>this.client.launch())}context(e){return this.addToQueue(()=>this.client.context(e))}elementIdLocation(e){return this.addToQueue(()=>this.client.elementIdLocation(e))}};Wh.exports=Ou});var qh={};$(qh,{doubleClick:()=>yS});var yS,Vh=T(()=>{"use strict";yS=function(s,e){let t=["pointerup","pointerdown","pointermove"],r=getLocatedElement(s.locatedElement);if(!r)throw new Error("element not found");let n=s.events,o={status:"done",success:!0};window.__unloadNavigator=function(){e(o)};let i=function(p){function f(P,b,v){return v>P&&v<b}let h=p.pointerPosition||{},g=r.getBoundingClientRect(),y=h.originX&&f(g.left,g.left+g.width,h.originX)?h.originX:g.left+g.width/2,w=h.originY&&f(g.top,g.top+g.height,h.originY)?h.originY:g.top+g.height/2;return{x:y,y:w}},a=function(p,f){return{screenX:0,screenY:0,clientX:p,clientY:f,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,bubbles:!0,cancelable:!0,button:0,pointerType:"mouse",isPrimary:!0}},c=function(p,f,h){if(!window.PointerEvent)return;let g=a(f,h);return new window.PointerEvent(p,g)},u=function(p,f,h){let g=document.createEvent("MouseEvents");return g.initMouseEvent(p,!0,!0,document.defaultView,1,0,0,f,h,!1,!1,!1,!1,0,document.body?document.body.parentNode:document.documentElement),g},d=function(){var f;let p=document.activeElement;for(;(f=p.shadowRoot)!=null&&f.activeElement;)p=p.shadowRoot.activeElement;return p},m=function(p){let f=i(p),h=p.event;return t.includes(h)?c(h,f.x,f.y):u(h,f.x,f.y)};try{n.map(f=>m(f)).filter(Boolean).forEach(f=>r.dispatchEvent(f));let p=d();dispatchFocus(s.elementToFocusLocatedElement,p),window.__unloadNavigator&&(window.removeEventListener("unload",window.__unloadNavigator),window.__unloadNavigator=null),e(o)}catch(p){window.__unloadNavigator&&(window.removeEventListener("unload",window.__unloadNavigator),window.__unloadNavigator=null),e({status:"done",result:p.toString(),success:!1})}}});var Hh={};$(Hh,{dispatchFocus:()=>Ss});function Ss(s,e){function t(o){let i=document.createEvent("HTMLEvents");return i.initEvent(o,!0,!1),i}function r(){var i;let o=document.activeElement;for(;(i=o.shadowRoot)!=null&&i.activeElement;)o=o.shadowRoot.activeElement;return o}function n(o,i){i&&(i.dispatchEvent(t("focusout")),i.dispatchEvent(t("blur"))),o.dispatchEvent(t("focusin")),o.dispatchEvent(t("focus")),typeof o.focus=="function"&&o.focus();let a=r();i&&a===i&&typeof i.blur=="function"&&i.blur()}if(s){let o=getLocatedElement(s);if(o&&o!==e)try{n(o,e)}catch{}}else e&&typeof e.blur=="function"&&e.blur()}var xi=T(()=>{"use strict"});var Dn=Kd((IP,Kh)=>{"use strict";var Mr=require("lodash"),$e=(j(),G(Xs)).getLogger("webdriver"),bS=require("ua-parser-js"),wS=(Ri(),G(Si)),{SeleniumError:TS,SeleniumCrashError:vS}=(z(),G(lc)),Lu=(F(),G(H)),ES=Gh(),{doubleClick:SS}=(Vh(),G(qh)),{dispatchFocus:RS}=(xi(),G(Hh)),{isOldProtocol:Ur}=(ku(),G(Au)),{featureFlagsService:IS}=(be(),G(Lf)),{W3C_ELEMENT_ID:xS}=(Yr(),G(ja)),[er,CS]=[0,2],{extractElementId:It,getCdpAddressForHost:PS}=Lu,Ci=(Le(),G(Oe)),{SeleniumPerfStats:AS,SELENIUM_PERF_MARKS:Fr}=(Ts(),G(yi)),tr=()=>(Ee(),G(kr)).getSessionPlayer().codeSnippets,kS=()=>(Ee(),G(kr)).getSessionPlayer().locatorBuilderUtils,zh=()=>(Ee(),G(kr)).getSessionPlayer().utils;async function _S(s){var e,t;try{let r=(t=(e=s==null?void 0:s.value)==null?void 0:e["goog:chromeOptions"])==null?void 0:t.debuggerAddress;return r?await PS(r):void 0}catch(r){$e.info("Error getting cdpAddress",r);return}}var Nu=class extends ES{constructor(){super(),this.started=!1,this.keepAliveTimer=null,this.unsupportedActions={},this._isAlive=!1,this._keepAliveRequests=[],this.cdpUrl=void 0,this.browserClosedCallbacks=[],this.browserClosedFailedKeepAlives=0,this.ignoreHiddenTagsText=!1}registerToClosedBrowser(e){this.browserClosedCallbacks.push(e)}unregisterToClosedBrowser(e){this.browserClosedCallbacks=this.browserClosedCallbacks.filter(t=>t!==e)}async init(e,t,r,n,o,i,a,c=new AS,u=!1,d){var h,g,y,w,P;this.browserClosedFailedKeepAlives=0,this.ignoreHiddenTagsText=(y=(g=(h=e==null?void 0:e.company)==null?void 0:h.activePlan)==null?void 0:g.premiumFeatures)==null?void 0:y.ignoreHiddenTagsText,this.browserClosedCallbacks=[];let m=wS.buildSeleniumOptions(e,t,r,n,o,i,a,d);m.desiredCapabilities&&delete m.desiredCapabilities.marionette,m.capabilities&&delete m.capabilities.alwaysMatch.marionette,this.initUnsupportedActions(d==null?void 0:d.isLambdatestRun()),this.browserAndOS=null,this.seleniumPerfStats=c;let p=u?0:1500,f=u?()=>{}:()=>this.executeJS("window.focus()");try{Ci.log("before initClient in webdriver.js init");let b=await this.initClient(m,t,a);Ci.log("after initResult before getCdpAddress in init"),this.cdpUrl=await _S(b),Ci.log("after getCdpAddress in webdriver.js init"),$e.info(`init new session testName: ${t}`,{sessionId:this.getSessionId(),testResultId:a}),await Lu.delay(p),await f(),Ci.log("after focus and delay in webdriver.js init")}catch(b){if($e.error("failed to init webdriver",{err:b}),b.seleniumStack){let v=new TS(b.seleniumStack),I=((P=(w=e==null?void 0:e.company)==null?void 0:w.activePlan)==null?void 0:P.plan)==="free";throw v.message.includes("timed out waiting for a node")&&I?new Error("Our free grids are in full capacity, please try again or upgrade to our Professional plan"):v}throw new Error("failed to init client driver")}}initUnsupportedActions(e){e&&(this.unsupportedActions={...this.unsupportedActions,move:!0})}isAlive(){return this._isAlive}maxKeepAliveGap(){let e=n=>Mr.zip(Mr.dropRight(n,1),Mr.drop(n,1)),t=this._keepAliveRequests.map(({start:n})=>n).filter(Boolean),r=e(t).map(([n,o])=>o-n);return Math.max(...r)}isClosedBrowserError(e){return!e||!e.seleniumStack||!e.message?!1:e.seleniumStack.type==="UnknownError"&&(e.message.includes("CLIENT_STOPPED_SESSION")||e.message.includes("BROWSER_TIMEOUT")||e.message.includes("was terminated due to TIMEOUT"))||e.seleniumStack.type==="NoSuchWindow"&&e.message.includes("window was already closed")||e.seleniumStack.type==="SelectorTimeoutError"&&e.message.includes("chrome not reachable")}start(){if(this.started)return;this.started=!0;let e=this,t=function(){function r(a){e._keepAliveRequests.push({start:Date.now(),id:a})}function n(a,c){(e._keepAliveRequests.find(u=>u.id===c)||{})[a]=Date.now()}function o(){return window.getTestimStatus&&window.getTestimStatus()}if(e.queue.getQueueLength()>0)return Promise.resolve();let i=Lu.guid();return r(i),e.executeJS(o).then(()=>{e._isAlive=!0,n("end",i),e.browserClosedFailedKeepAlives=0}).catch(a=>{if(n("error",i),a.seleniumStack&&a.seleniumStack.type==="UnexpectedAlertOpen")return e.browserClosedFailedKeepAlives=0,$e.warn("close unexpected alert open"),e.alertAccept().catch(c=>$e.warn("failed to click on alert",{err:c}));if($e.warn("err while getting testim status",{err:a}),e._isAlive=!1,e.isClosedBrowserError(a)){e.browserClosedFailedKeepAlives++;let c=3;e.browserClosedFailedKeepAlives>=c&&e.browserClosedCallbacks.forEach(u=>{try{u(a)}catch{}})}else e.browserClosedFailedKeepAlives=0})};this.keepAliveTimer=setInterval(t,1e4)}switchToLocatedFrame(e){return this.getElement(e).then(async t=>{let r=It(t.value);return await this.switchToFrame({ELEMENT:r,[xS]:r}),t})}switchToFrame(e){return this.frame(e)}switchToTopFrame(){return this.frame().catch(e=>{var t;throw(t=e.message)!=null&&t.includes("ECONNREFUSED")?new vS:e})}getElement(e){let t=this.seleniumPerfStats.markStart(Fr.GET_ELEMENT);return typeof e=="string"||typeof e=="number"?this.getElementBySelector(`[testim_dom_element_id='${e}']`).finally(()=>this.seleniumPerfStats.markEnd(t,Fr.GET_ELEMENT)):e&&e.shadowPath&&e.shadowPath.length||IS.flags.runGetElementCodeInAut.isEnabled()&&this.isSafari()?this.execute(`
25
+ ${((C=n.warnings)==null?void 0:C.join(`
26
+ `))||""}`)}let i=(await(0,Gl.default)({type:"toggle",name:"isJs",message:"Add support for TypeScript?",initial:!0,active:"no",inactive:"yes"})).isJs?"template.js":"template.ts",a="codim",c=Kt.join(__dirname,a,i),l=Kt.join(process.cwd(),e),d=(0,Wl.default)(`Creating new test project in ${l}`).start();await uo(c,l);let m=Kt.join(__dirname,a,i,"package.json"),p=Kt.join(process.cwd(),e,"package.json"),h=(await Jt.promises.readFile(m)).toString().replace("~testim-codeful-test-project~",r);await Jt.promises.writeFile(p,h);let g="node_modules",y=Kt.join(process.cwd(),e,".gitignore");await Jt.promises.writeFile(y,g),d.succeed(),d=(0,Wl.default)("Installing dependencies").start(),await Kv("npm install",{cwd:l}),d.succeed(),console.log(`Testim Dev Kit project folder successfully created in ${l}.`)}var Jt,Kt,mf,Wl,Jo,Gl,ff,hf,Kv,yf=T(()=>{"use strict";Jt=E(require("fs")),Kt=E(require("path")),mf=E(require("child_process")),Wl=E(require("ora")),Jo=E(require("chalk")),Gl=E(require("prompts")),ff=E(require("validate-npm-package-name")),hf=require("util");z();vc();Kv=(0,hf.promisify)(mf.exec)});var wf={};$(wf,{preloadTests:()=>Sn});async function Sn(s){if(!Array.isArray(s.testId)||!s.testId.length)return{};let e={branch:s.branch,projectId:s.project};return await dt(async()=>{let t=await de(s.testId,r=>Jc({...e,testId:r}),{concurrency:2});return bf.keyBy(t,"testData.id")},"loadTests",Xv,[e,s.testId])()}var bf,Xv,Xo=T(()=>{"use strict";bf=E(require("lodash"));qt();Te();F();Xv=1e3*60*60*10});function ql(){return nt()}async function Ef(){if(!Ie)try{let s=await re(Qv(),5e3,"The API call to NPM timed out"),e=ql();e&&vf.lt(e,s)&&console.log(Tf.default.yellow(`Warning: You are using version ${e}, a newer version is available. To update please run npm install (npm install -g @testim/testim-cli)`))}catch(s){Yv.warn("Failed to get NPM version",{err:s})}}var Tf,vf,Yv,Qv,Vl=T(()=>{"use strict";Tf=E(require("chalk")),vf=E(require("semver"));F();le();ln();qt();j();Yv=x("npm-driver"),Qv=dt(()=>cm("@testim/testim-cli"),"getNpmVersion")});var Hl,eE,ys,Sf,Rf,zl,If,xf=T(()=>{"use strict";F();z();j();ft();Hl=x("testimNgrok"),eE=".whitelisted-ngrok.testim.io",ys="",Rf=async(s,e={})=>{if(!e.ngrokToken)throw new R("tunnel feature is not enabled, please contact support - info@testim.io.");let t;e.isNgrokWhitelisted&&(t=`${K()}-${s.projectData.projectId}${eE}`);let r={proto:"http",addr:s.tunnelPort||80,authtoken:e.ngrokToken,hostname:t};s.tunnelHostHeader&&(r.host_header=s.tunnelHostHeader),s.tunnelRegion&&(r.region=s.tunnelRegion);let o=await(await ge("ngrok")).connect(r);s.tunnelUseHttpAddress&&o.startsWith("https://")?(Hl.info("replace https to http"),ys=o.replace("https://","http://")):ys=o,s.tunnelDiagnostics&&zl(),s.baseUrl=ys},zl=async(s=!0)=>{try{let t=(await ge("ngrok")).getApi(),{tunnels:r}=await t.listTunnels(),n=r.find(o=>o.public_url===ys);console.log("ngrok stats",n),Hl.info("ngrok stats",{tunnel:n})}catch(e){Hl.error("error collecting ngrok stats",{err:e})}s&&(Sf=setTimeout(()=>zl(),1e4))},If=async s=>{if(!ys)return;clearTimeout(Sf),s.tunnelDiagnostics&&await zl(!1),await(await ge("ngrok")).disconnect(ys)}});var Xt,Jl,Pf,rE,sE,Kl,Yo,Zo,Qo,nE,Cf,Af,kf=T(()=>{"use strict";Xt=E(require("os")),Jl=E(require("fs")),Pf=E(require("child_process"));F();Te();rE="https://github.com/cloudflare/cloudflared/releases/download/2022.4.1/",sE={win32ia32:{path:"cloudflared-windows-386.exe"},win32x64:{path:"cloudflared-windows-amd64.exe"},darwinx64:{path:"cloudflared-darwin-amd64.tgz",extract:!0},linuxia32:{path:"cloudflared-linux-386"},linuxx64:{path:"cloudflared-linux-amd64"}},Kl=Xt.tmpdir(),Yo=`${Kl}/cloudflared`,Zo=null,Qo=null,nE=async()=>{if(await ye(Yo))return;let e=sE[Xt.platform()+Xt.arch()];if(!e)throw new Error(`tunnel on ${Xt.platform()+Xt.arch()} platform is not supported.`);let t=e.extract?Kl+e.path:Yo;await qe(`${rE}/${e.path}`,t),e.extract&&await Ye(t,Kl),await Jl.promises.chmod(Yo,"755")},Cf=async s=>{let e=s.baseUrl||`http://localhost:${s.tunnelPort||80}`,t="tunnelRoutes"in s&&s.tunnelRoutes||[e],[r]=await Promise.all([bl(s.company.companyId,t),nE()]);Zo=r._id,Qo=Pf.spawn(Yo,["tunnel","--no-autoupdate","run","--force","--token",r.token],{stdio:"inherit"}),await wl(s.company.companyId,Zo),"tunnelRoutesOutput"in s&&s.tunnelRoutesOutput&&await Jl.promises.writeFile(s.tunnelRoutesOutput,JSON.stringify(r.routesMapping,null,2)),s.baseUrl=`${s.tunnelUseHttpAddress?"http":"https"}://${r.routesMapping[e]}`},Af=async s=>{let e=[];return Zo&&e.push(Tl(s.company.companyId,Zo)),Qo&&e.push(new Promise((t,r)=>{Qo.on("close",n=>{n&&r(new Error(`tunnel process exited with code ${n}`)),t()}),Qo.kill()})),await Promise.all(e)}});var Lf={};$(Lf,{featureFlagsService:()=>U});var J,Of,iE,aE,cE,_f,ei,Xl,U,be=T(()=>{"use strict";J=E(require("rox-node"));j();F();le();Of=x("FeatureFlagsService"),iE=!Ie&&!0&&!Ya,aE=2e4,cE=60*60*24,_f=["labs","disabled","enabled"],ei=class extends J.default.Variant{constructor(e="disabled"){super(e,_f)}getValue(){let e=super.getValue();return _f.includes(e)?e:(Of.warn('unexpected value for lab feature flag. Falling back to value "labs"',{featureFlagName:this.name,value:e}),"labs")}},Xl=class{constructor(){this.flags={useNewWSCLI:new J.default.Flag,useSafariWebdriverVisibilityChecks:new J.default.Flag,useClickimVisibilityChecks:new J.default.Flag,runGetElementCodeInAut:new J.default.Flag,enableFrameSwitchOptimization:new J.default.Flag,maximumJsResultSize:new J.default.Configuration(2e3*1024),skipFileInputClicks:new J.default.Flag,errorMessageOnBadNetwork:new J.default.Flag(!0),warnOnBadNetwork:new J.default.Flag(!1),overrideAzureStorageUrl:new J.default.Flag,useJsInputCodeInSafari:new J.default.Flag,useJsInputCodeInFirefox:new J.default.Flag,autoSaveDownloadFileFireFox:new J.default.Flag(!0),safariSelectOptionDispatchEventOnSelectElement:new J.default.Flag(!0),experimentalPreCodeCompilation:new J.default.Flag(!0),experimentalAsyncCustomCode:new J.default.Flag,useSameBrowserForMultiTests:new ei("labs"),highSpeedMode:new ei,usePortedHtml5DragDrop:new J.default.Flag,testNamesToBeforeSuiteHook:new J.default.Flag,addCustomCapabilities:new J.default.Variant("{}"),enableWorkerThreadsCliCodeExecution:new J.default.Flag(!0),LTNetworkCapabilities:new J.default.Flag,downloadToBase64:new J.default.Flag,dec2022eolBrowsers:new J.default.Flag,publicGridURL:new J.default.Configuration("public-grid.testim.io")},J.default.register("default",this.flags)}setProjectId(e){J.default.setCustomStringProperty("projectId",e)}setProjectType(e){J.default.setCustomStringProperty("projectType",e)}setCompanyProductType(e){J.default.setCustomStringProperty("productType",e)}setCompanyId(e){J.default.setCustomStringProperty("companyId",e)}setPlanType(e){J.default.setCustomStringProperty("planType",e)}setIsPOC(e){J.default.setCustomBooleanProperty("isPOC",e)}setIsStartUp(e){J.default.setCustomBooleanProperty("isStartUp",e)}setRunnerMode(e){J.default.setCustomStringProperty("runnerMode",e)}async fetch(){if(!iE)return;let e={fetchIntervalInSec:cE,disableNetworkFetch:!1};if(global.ProxyAgent){let t=new global.ProxyAgent(global.proxyUri);Object.assign(e,{httpsAgent:t,httpAgent:t})}return re(J.default.setup(Ja,e),aE).catch(t=>Of.error("failed to get feature flag status",t))}},U=new Xl});var Df,Mf,Yt,Uf,Ff,Nf,lE,uE,ti,dE,pE,te,ri=T(()=>{"use strict";Df=E(require("ms")),Mf=E(require("p-retry")),Yt=E(require("os")),Uf=E(require("portfinder")),Ff=E(require("child_process"));F();vt();Te();z();j();Wo();ae();be();Nf=x("lambdatestService"),lE="https://downloads.lambdatest.com/tunnel/v3",uE={win32ia32:"windows/32bit/LT_Windows.zip",win32x64:"windows/64bit/LT_Windows.zip",darwinia32:"mac/32bit/LT_Mac.zip",darwinx64:"mac/64bit/LT_Mac.zip",darwinarm64:"mac/64bit/LT_Mac.zip",linuxia32:"linux/32bit/LT_Linux.zip",linuxx64:"linux/64bit/LT_Linux.zip",freebsdia32:"freebsd/32bit/LT_Freebsd.zip",freebsdx64:"freebsd/64bit/LT_Freebsd.zip"},ti=`${Yt.tmpdir()}/LT`,dE=`${ti}/LT`,pE=(0,Df.default)("15m"),te=class{constructor(){this.isActive=!1}static isLambdatestGrid(e){return e.type===ue.LAMBDATEST||e.type===ue.HYBRID&&e.provider==="lambdatest"}isLambdatestRun(){return this.isActive}async enableIfNeeded(e){te.isLambdatestGrid(e)&&(te.lambdatestConfigPromise||(te.lambdatestConfigPromise=ul()),te.lambdatestConfig=await te.lambdatestConfigPromise,this.isActive=!0)}disable(){this.isActive=!1}get getSessionTimeout(){return this.isActive?pE:null}get getSessionRetries(){return this.isActive?1:null}static async prepareTunnel(){if(await ye(dE))return;let t=uE[Yt.platform()+Yt.arch()];if(!t)throw new Error(`tunnel on ${Yt.platform()+Yt.arch()} platform is not supported.`);let r=`${ti}.zip`;await qe(`${lE}/${t}`,r),await Ye(r,ti)}static async connectTunnel(e){if(e.externalLambdatestTunnelId){te.tunnelName=e.externalLambdatestTunnelId;return}await this.prepareTunnel();let t=await Uf.getPortPromise(),{gridData:r={},gridUsername:n,gridPassword:o}=e,i=global.proxyUri;te.tunnelName=K();let a=["--tunnelName",te.tunnelName,"--infoAPIPort",String(t)];if(e.externalLambdatestUseWss&&(a=[...a,"--mode","ws"]),e.externalLambdatestDisableAutomationTunneling&&(a=[...a,"--bypassHosts","run.testim.io,services.testim.io,api.coralogix.com,conf.rollout.io,statestore.rollout.io,push.rollout.io,analytic.rollout.io,res.cloudinary.com"]),r.tunnelUser&&r.tunnelKey)a=[...a,"--user",r.tunnelUser,"--key",r.tunnelKey];else if(n&&o)a=[...a,"--user",n,"--key",o];else throw new R("tunnel requires username and password");if(i)try{let d=new URL(i);a=[...a,"--proxy-host",d.hostname],d.port&&(a=[...a,"--proxy-port",d.port]),d.username&&d.password&&(a=[...a,"--proxy-user",d.username,"--proxy-pass",d.password])}catch{throw new R("proxy url is invalid")}e.externalLambdatestMitm&&(a=[...a,"--mitm"]),te.tunnel=Ff.spawn("./LT",a,{cwd:ti});let c="",l="";te.tunnel.stdout.on("data",d=>{c+=d.toString()}),te.tunnel.stderr.on("data",d=>{l+=d.toString()});try{let d=await(0,Mf.default)(()=>vr(`http://127.0.0.1:${t}/api/v1.0/info`,{},{},void 0,{skipProxy:!0}),{retries:30,minTimeout:2e3});Nf.info("LT tunnel info",d)}catch(d){throw Nf.error("Failed to start LT tunnel",{err:d,stdoutResult:c,stderrResult:l}),d}}static async disconnectTunnel(e){if(!(e.externalLambdatestTunnelId||!te.tunnel))return new Promise((t,r)=>{te.tunnel.on("close",n=>{n&&r(new Error(`tunnel process exited with code ${n}`)),t()}),te.tunnel.kill()})}getCapabilities(e,t,r,n,o){if(!this.isActive)return{};let i=te.lambdatestConfig.CAPABILITIES[t]||{},a={...te.tunnelName&&{tunnel:!0,tunnelName:te.tunnelName}},c=[],{mode:l,canary:d,ext:m,extensionPath:p,installCustomExtension:f}=e;if(l===Q.EXTENSION&&!m){let h=kl({canary:d},!0);!p&&h[t]&&(c=[...c,h[t]]),p&&Be(p)&&(c=[...c,p])}return f&&Be(f)&&(c=[...c,f]),{build:r,name:`${n} - ${o}`,platform:te.lambdatestConfig.PLATFORM,selenium_version:te.lambdatestConfig.SELENIUM_VERSION,resolution:te.lambdatestConfig.RESOLUTION,timezone:te.lambdatestConfig.TIMEZONE,...i,loadExtension:c,...a,console:!0,queueTimeout:300,network:U.flags.LTNetworkCapabilities.isEnabled()}}}});var Yl={};$(Yl,{connect:()=>ni,disconnect:()=>oi,serveTunneling:()=>fE});var si,jf,Bf,mE,ni,oi,fE,Ql=T(()=>{"use strict";xf();Tn();kf();Et();si=E(require("ora"));j();ae();ri();jf=x("tunnel"),Bf=s=>{var e;return[ue.LAMBDATEST,ue.HYBRID].includes((e=s.gridData)==null?void 0:e.type)&&s.gridData.tunnel==="lambdatest"},mE=s=>{var e;return s.tunnelRoutes||((e=s.gridData)==null?void 0:e.type)===ue.HYBRID&&s.gridData.tunnel==="cloudflare"},ni=async s=>{if(!s.tunnel)return;let e=Dt(),t;try{Bf(s)?(t=(0,si.default)("Starting testim lambdatest tunnel...").start(),await te.connectTunnel(s)):mE(s)?(t=(0,si.default)("Starting testim cloudflare tunnel...").start(),await Cf(s)):(t=(0,si.default)("Starting testim ngrok tunnel...").start(),await Rf(s,e)),t.succeed()}catch(r){let n="Failed to start tunnel. Please contact support@testim.io";throw jf.error("Failed to open tunnel",{err:r}),t==null||t.fail(n),new Error(n)}},oi=async s=>{if(s.tunnel)try{Bf(s)?await te.disconnectTunnel(s):"tunnelRoutes"in s?await Af(s):await If(s)}catch(e){let t="catch error - failed to close tunnel";throw jf.error(t,{err:e}),new Error(t)}},fE=async(s,e=new Promise(()=>{}))=>(await ni(s),ds(()=>oi(s)),await e)});function hE(s){if(s.protocol)return s.protocol;if([ue.TESTIM,ue.BROWSERSTACK,ue.SAUCELABS].includes(s.type)&&s.port===443)return"https";if([ue.TESTIM_ENTERPRISE,ue.LAMBDATEST,ue.DEVICE_FARM].includes(s.type)){let e=$f.exec(s.host);return(e==null?void 0:e[2])||"https"}return""}function gE(s){let e=$f.exec(s);return e==null?void 0:e[3]}function ai(s){var y,w,C,b,v,I,k,D,S;let e=s&&gE(s.host),t=s==null?void 0:s.port,r=s==null?void 0:s.path,n=s&&hE(s),o=s==null?void 0:s.token,i=s==null?void 0:s.slotId,a=(y=s==null?void 0:s.hybrid)==null?void 0:y.tunnel,c=(w=s==null?void 0:s.external)==null?void 0:w.user,l=(C=s==null?void 0:s.external)==null?void 0:C.key,d=s==null?void 0:s.type,m=d===ue.HYBRID?a&&((I=(v=(b=s.hybrid)==null?void 0:b.external)==null?void 0:v[s.hybrid.tunnel])==null?void 0:I.user):c,p=d===ue.HYBRID?a&&((S=(D=(k=s.hybrid)==null?void 0:k.external)==null?void 0:D[s.hybrid.tunnel])==null?void 0:S.key):l,f=s==null?void 0:s.name,h=s&&(s._id||s.gridId),g=s==null?void 0:s.provider;return{host:e,port:t,path:r,protocol:n,accessToken:o,slotId:i,gridId:h,tunnel:a,user:c,key:l,type:d,name:f,provider:g,tunnelUser:m,tunnelKey:p}}async function Gf(s,e,t,r,n){let o;try{o=await n()}catch(i){throw ze.error("failed to get grid",{projectId:s,companyId:e,err:i}),new Error(rs.UNKNOWN)}if(ze.info("get grid info",Object.assign({},o,{projectId:s,companyId:e})),!o||!["success","error"].includes(o.status))throw ze.error("invalid response - get grid",{res:o}),new Error(rs.UNKNOWN);if(o.status==="success"){let i=ai(o.grid);return yE(t,e,i.gridId,i.slotId,r),i}throw o.code==="not-found"?new it(rs.NOT_FOUND):o.code==="no-available-slot"?new gr(`Failed to run test on ${r} - concurrency limit reached`):(ze.error("invalid code error response - get grid",{res:o}),new it(rs.UNKNOWN))}function bE(s,e,t,r,n,o){return Gf(t,e,s,n,()=>Mo(e,t,r,n,o))}function wE(s,e,t,r,n,o,i){return Gf(t,e,s,n,()=>{var l;let c=(l=i.allGrids)==null?void 0:l.find(d=>(d.name||"").toLowerCase()===r.toLowerCase());return c!=null&&c._id?Mo(e,t,c._id,n,o):al(e,t,r,n,o)})}function qf(s){return ll(s)}async function Vf(s,e,t){let n=(t||await qf(s)).find(o=>o._id===e);if(!n)throw new R(`Failed to find grid id: ${e}`);return ai(n)}async function TE(s,e,t){let n=(t||await qf(s)).find(o=>(o.name||"").toLowerCase()===e.toLowerCase());if(!n)throw new R(`Failed to find grid name: ${e}`);return ai(n)}async function Zl(s,e){let t=Rn[s];if(!t)return;let{slotId:r,gridId:n,browser:o,companyId:i}=t;if(delete Rn[s],!r){ze.warn("failed to find grid slot id",{projectId:e});return}ze.info("release slot id",{projectId:e,companyId:i,slotId:r,gridId:n,browser:o});try{await ol(i,e,r,n,o)}catch(a){ze.error("failed to release slot",{projectId:e,err:a})}}async function vE(s){let e=Object.values(Rn).filter(Boolean);if(e.length!==0){ze.info("keep alive worker slots",{projectId:s,slots:e});try{await nl(s,e)}catch(t){ze.error("failed to update grid keep alive",{err:t,slots:e,projectId:s})}}}function EE(s){Wf=global.setInterval(vE,1e4,s)}async function SE(s){let e=Object.keys(Rn);if(e.length){ze.warn("not all slots released before end runner flow",{projectId:s});try{await de(e,t=>Zl(Number(t),s))}catch(t){ze.error("failed to release all slots",{err:t,projectId:s})}}}async function RE(s){await SE(s),clearInterval(Wf)}function IE(s,e){let{testobjectSauce:t,saucelabs:r}=e;if(s==="testobject")return t.testobjectApiKey;if(s==="saucelabs")return r.accessKey}function xE(s,e){let{saucelabs:t}=e;if(s==="saucelabs")return t.username}function Hf(s){let t=(()=>ii.isEmpty(s.testobjectSauce)?ii.isEmpty(s.saucelabs)?ii.isEmpty(s.perfecto)?"hostAndPort":"perfecto":"saucelabs":"testobject")(),{host:r,port:n,path:o,protocol:i}=s,a=IE(t,s),c=xE(t,s);return{host:r,port:n,path:o,protocol:i,type:t,user:c,key:a}}async function zf(s,e){let t=s.company.companyId;return await Vf(t,e.gridId,s.allGrids)}async function Kf(s){let{allGrids:e=void 0,company:t,host:r,useLocalChromeDriver:n,useChromeLauncher:o,gridId:i,grid:a}=s;if(n||o)return{mode:"local"};if(r)return Hf(s);let c=t==null?void 0:t.companyId;if(i)return Vf(c,i,e);if(a)return TE(c,a,e);if(rn(s)||s.tunnelOnlyMode){ze.info("skipping getting grid, as it is set on test plan",{companyId:c});return}throw new it("Missing host or grid configuration")}async function Jf(s,e,t,r){return await(async()=>{let{host:i,project:a,grid:c,gridId:l,useLocalChromeDriver:d,useChromeLauncher:m,company:p}=t,f=p==null?void 0:p.companyId;if(d||m)return{mode:"local"};if(i)return Hf(t);if(l)return bE(r,f,a,l,s,e);if(c)return wE(r,f,a,c,s,e,t);throw new it("Missing host or grid configuration")})()}var ii,ze,Rn,$f,Wf,yE,In,Xf,bs=T(()=>{"use strict";ii=E(require("lodash"));Te();j();F();ae();z();ze=x("grid-service"),Rn={},$f=/(^(https?):\/{2})?(.*)/,Wf=null;yE=(s,e,t,r,n)=>{Rn[s]={gridId:t,companyId:e,slotId:r,browser:n}};In={start:EE,end:RE};Xf=async(s={},e={},t={},r={},n={})=>{var h,g,y;let{company:{companyId:o}={}}=s,{gridId:i,type:a}=e,c=s.browser||t.browserValue,l=Boolean(s.tunnel),{maxRetries:d,currentRetry:m}=n;if(!i||!a||(a===ue.LAMBDATEST&&await((h=r.enableIfNeeded)==null?void 0:h.call(r,e)),a!==ue.HYBRID||!o||!c||!d||!m))return e;let p=await il({companyId:o,gridId:i,maxRetries:d,currentRetry:m,browser:c,usingTunnel:l});ze.info("handling hybrid grid",{response:p,companyId:o});let f=ai({...e,...p.connectionDetails,provider:p.provider});return p.provider!=="lambdatest"&&((g=r.disable)==null||g.call(r)),p.provider==="lambdatest"&&await((y=r.enableIfNeeded)==null?void 0:y.call(r,f)),f}});function Pn(){return ci||"master"}function Yf(s="master",e="false"){if(typeof s!="string"&&(s!=null&&s.branch)&&s.branch==="master"){ci="master";return}if(s&&!s.isArchived){ci=s.branch||s;return}ci=e?"master":void 0}var ci,eu=T(()=>{"use strict"});var Cn,tu,PE,ru,CE,su,li,ui,di,pi,mi,fi=T(()=>{"use strict";F();ae();Cn=s=>{let{status:e,sessionType:t,success:r}=s;return e===pe.FAILED||t===Ot.CODEFUL&&r===!1},tu=s=>{let{status:e}=s;return e===pe.ABORTED},PE=s=>{let{status:e,sessionType:t,success:r}=s;return e===pe.PASSED||t===Ot.CODEFUL&&r===!0},ru=s=>s.runnerStatus===pe.SKIPPED,CE=s=>s.testStatus===Ve.EVALUATING,su=(s,e)=>e?!s.runConfig:!1,li=(s,e)=>Object.values(s).filter(t=>ru(t)&&He(t,e)).length,ui=s=>Object.values(s).filter(e=>Cn(e)&&CE(e)).length,di=(s,e)=>Object.values(s).filter(t=>Cn(t)&&!su(t,e)),pi=(s,e)=>Object.values(s).filter(t=>PE(t)&&!su(t,e)),mi=(s,e)=>Object.values(s).filter(t=>tu(t)&&!su(t,e))});function AE(s){let e=s.indexOf("--token");if(e===-1&&(e=s.indexOf("--t")),e!==-1)try{let t=s.slice();return t.splice(e,2),t}catch{}return s}var hi,Zf,gi,eh=T(()=>{"use strict";j();fi();hi=x("debug-reporter"),Zf={token:void 0,userParamsData:void 0,projectData:void 0,allGrids:void 0,gridData:void 0,awsAccessKeyId:void 0,awsSecretAccessKey:void 0,runParams:void 0,perfecto:void 0,testobjectSauce:void 0},gi=class{constructor(e){this.options=e}onTestStarted(e,t){hi.info("Test Started",{testId:e.testId,testName:e.name,resultId:e.resultId,workerId:t})}onTestFinished(e,t){let r=this.options.gridData||{},n=r.provider,o=r.host,i=r.gridId,a=r.type,c=r.failedGetBrowserAttempts;hi.info("Test Finished",{testId:e.testId,testName:e.name,resultId:e.resultId,success:e.success,duration:e.duration,browser:this.options.browser,companyId:this.options.company.companyId,grid:{provider:n,host:o,failedGetBrowserAttempts:c,id:i,type:a},workerId:t})}onTestPlanStarted(e,t,r,n,o,i,a){let c=AE(process.argv);hi.info("Test Plan Started",{executionId:o,testPlanName:n,isAnonymous:i,configName:a,options:Object.assign({},this.options,Zf),args:c})}onTestPlanFinished(e,t,r,n,o,i){let a=pi(e,i).length,c=Object.keys(e).length-a;hi.info("Test Plan Finished",{isAnonymous:o,passed:a,failed:c,testPlanName:t,options:Object.assign({},this.options,Zf),duration:r,executionId:n})}}});var nu,Rt,An=T(()=>{"use strict";ae();nu=class{constructor(){this._planType="free"}setPlanType(e){this._planType=e}get isTestStatusEnabled(){return["pro","trial"].includes(this._planType)}shouldShowFreeGridRunWarning(e){return this._planType!=="pro"&&e===ue.DEVICE_FARM}},Rt=new nu});var iu={};$(iu,{Reporter:()=>kE});var Qt,kn,Or,yi,th,ou,kE,au=T(()=>{"use strict";Qt=E(require("chalk")),kn=E(require("lodash"));F();ae();An();fi();Or={success:Qt.default.green,warn:Qt.default.yellow,error:Qt.default.red},{CLI_MODE:yi}=Lt,th="device",ou=class{constructor(e,t){this.options=e;this.branchToUse=t;this.config={showWorkerNames:e.parallel>1}}toWorkerIdPrefix(e){return this.config.showWorkerNames?`W:${e}`:""}printWorkerDivider(){console.log("-".repeat(process.stdout.columns||83))}onTestStarted(e,t,r,n){let o=n?"File":"Test",i=e.isTestsContainer?"":`(${e.testId})`,a=e.isTestsContainer?"":`url: ${Qt.default.underline(st(this.options.editorUrl,this.options.project,e.testId,e.resultId,this.branchToUse))}`;console.log(this.toWorkerIdPrefix(t),`${o} "${e.name}" started ${i} ${a}`.trim())}onTestFinished(e,t,r,n){if(n)return;let o=e.success?pe.PASSED:pe.FAILED,i=e.isTestsContainer?" ":`(${e.testId})`,a=Or[e.success?"success":"error"];console.log(a(this.toWorkerIdPrefix(t),`Test "${e.name}" finished status: ${o} ${i} duration: ${po(e.duration)}`))}printAllFailedTests(e){if(!e.length)return;let t=e.map(r=>{let n=st(this.options.editorUrl,this.options.project,r.testId,r.resultId,this.branchToUse);return r.isTestsContainer?r.name:`${r.name} : ${n}`});console.log(Or.error("Failed runs are:")),console.log(Or.error(t.join(`
27
+ \r`)))}onTestPlanFinished(e,t,r,n,o,i){let a=di(e,i),c=pi(e,i),l=mi(e,i),d=c.length,m=l.length,p=a.length,f="",h="";if(Rt.isTestStatusEnabled){let b=ui(e);f=` FAILED-EVALUATING: ${b}`,p-=b,h=` SKIPPED: ${li(e,this.options)}`}let g=this.buildTestPlanName(o,t,i),y,w=Or[p?"error":"success"],C=`PASSED: ${d} FAILED: ${p}${f} ABORTED: ${m}${h} Duration: ${po(r)}`;i||g.trim()===""||g.trim()==="Anonymous"?y=`Tests completed. ${C} (Execution ID: ${n})`:y=`Test plan${g} completed ${C} (${n})`,this.printWorkerDivider(),console.log(w(y)),this.printWorkerDivider(),this.printAllFailedTests(a)}buildTestPlanName(e,t,r){if(r)return"";let n=kn.isEmpty(this.options.suites)?"":`Suite: ${this.options.suites}`,o=kn.isEmpty(this.options.label)?"":`Label: ${this.options.label}`,i=kn.isEmpty(this.options.name)?"":`Name: ${this.options.name}`,a=kn.isEmpty(this.options.testId)?"":`Test Id: ${this.options.testId}`,c=[i,o,n,a].filter(Boolean).join(", ");return e?` anonymous (${c})`:` '${t}'`}onTestPlanStarted(e,t,r,n,o,i,a,c){let l=p=>{p.forEach((f,h)=>{var w;let g=(w=f.testData)!=null&&w.index?`- ${f.testData.index} / ${f.testData.total} Data set`:"",y=c?"":`(${f.testId})`;console.log(" ",h+1,":",`${f.name}${He(f,this.options)?"-quarantine":""}`,y,g)})},d=a?`config '${a}'`:"default configs";if(c)console.log(`Run test plan, Project: ${this.options.project} (Execution ID: ${o}):`);else{let p=this.options.sfdcCredential?` SfdcCredential: ${this.options.sfdcCredential}`:"",f=`${d}, Project: ${this.options.project}, Branch: ${this.branchToUse}${p}`;console.log(`Run${this.buildTestPlanName(i,n)} test plan with ${f} (${o})`)}this.printWorkerDivider(),e.length>0&&(console.log("Before all:"),l(e)),console.log(c?"File list:":"Test list:"),l(t),r.length>0&&(console.log("After all:"),l(r)),this.printWorkerDivider()}onGetSlot(e,t){let r=this.options.grid||this.options.gridId,n=this.options.mode===yi.APPIUM?th:t;r&&console.log(this.toWorkerIdPrefix(e),`Get ${Qt.default.underline(n)} slot from ${Qt.default.underline(r)}`)}onGetSession(e,t,r){let n=r===yi.APPIUM?th:"browser";console.log(this.toWorkerIdPrefix(e),`Get ${n} to run ${Qt.default.underline(t)}`)}onWaitToTestStart(e){console.log(this.toWorkerIdPrefix(e),"Wait for test start")}onWaitToTestComplete(e,t,r){let n=t?"file":"test";console.log(this.toWorkerIdPrefix(e),`Wait for ${n} complete`),r&&t&&console.log(this.toWorkerIdPrefix(e),`Chrome Debugger available at ${r}`)}onGetBrowserFailure(e,t,r){if(r!==2)return;let n=this.options.grid||this.options.gridId,o=this.options.mode===yi.APPIUM?"device":"browser";if(n)console.log(Or.warn(this.toWorkerIdPrefix(e),`It is taking us some time to get a ${o} from the grid ${n}`));else if(this.options.useLocalChromeDriver)console.log(Or.warn(this.toWorkerIdPrefix(e),"We are having issues starting ChromeDriver for you locally"));else if(this.options.host){let i=this.options.mode===yi.APPIUM?"Appium":"Selenium";console.log(Or.warn(this.toWorkerIdPrefix(e),`We are having issues reaching your ${i} grid at ${this.options.host}:${this.options.port||4444}`))}}},kE=ou});var uu={};$(uu,{Reporter:()=>ME});function _E(s){let e=s.testData||{},t=typeof e.total=="number"?` - ${e.index} / ${e.total} Data set`:"";return`${s.name}${t}`}function OE(s){return s.visitedUrlsList||console.log("No URLs found:","Please contact our support team or remove the --urls flag from the CLI command"),`${s.visitedUrlsList||""}`}function LE(s){return`${s.visitedUrlsJson||""}`}async function NE(s,e,t,r,n,o){function i(p){let f=st(s,t,p.testId,p.resultId,r),h={$:{name:_E(p),classname:n,time:xc(p.duration),ownedBy:p.testOwnerName,ownerEmail:p.testOwnerEmail},"system-out":f};if(Cn(p)||tu(p)){let g=`Step Failed: ${p.failureReason||p.reason}`,y=Cn(p)?`${g} More info at: ${f}`:g;h.failure={$:{message:y}}}return ru(p)&&He(p,o)&&Rt.isTestStatusEnabled&&(h.skipped={}),o.urls&&(h["visited-urls-list"]=OE(p),h["visited-urls-json"]=LE(p)),h}function a(p){let{results:f,testPlanName:h,configName:g}=p,y=f||{},C={name:(g&&h?`${h} with config '${g}'`:h)||"selenium run",tests:l(y),failure:d(y),timestamp:c(e)};if(Rt.isTestStatusEnabled){C.skipped=li(y,o);let b=ui(y);C.failure-=b,C["failure-evaluating"]=b}return{$:C,testcase:Object.keys(y).map(b=>i(y[b]))}}function c(p){let f=Object.keys(p).map(g=>p[g].startTime),h=Math.min.apply(null,f);return h?new Date(h).toISOString():new Date().toISOString()}function l(p){return Object.keys(p).length}function d(p){return di(p).length+mi(p).length}let m={testsuites:{testsuite:e.map(p=>a(p))}};try{return new lu.Builder().buildObject(m)}catch(p){return DE(p)}}function DE(s){let e=new lu.Builder,t={testsuites:{testsuite:{$:{name:"selenium run",tests:1,failure:1,timestamp:Date.now()},testcase:{$:{name:"junit reporter generator failed",classname:"testim.io.jUnitXmlReporter"},error:{$:{message:s.message}}}}}};return e.buildObject(t)}var lu,rh,cu,ME,du=T(()=>{"use strict";lu=E(require("xml2js"));F();rh=require("fs");An();fi();cu=class{constructor(e,t){this.options=e;this.branchToUse=t;this.classname="testim.io.test",typeof e.reportFileClassname=="string"&&(this.classname=e.reportFileClassname),e.reportFileClassname===!0&&(this.classname="")}async createResultsReport(e){let t=this.options.reportFile,r=this.options.project,n=await NE(this.options.editorUrl,e,r,this.branchToUse,this.classname,this.options);if(t)try{return await rh.promises.writeFile(t,n),console.log("JUnit XML file saved to",t),e}catch(o){return console.error("could not save report file",t,o),e}}async onAllTestPlansFinished(e){await this.createResultsReport(e)}};ME=cu});var sh={};$(sh,{Reporter:()=>UE});function ws(s){return s?s.replace(/\|/g,"||").replace(/'/g,"|'").replace(/\n/g,"|n").replace(/\r/g,"|r").replace(/\u0085/g,"|x").replace(/\u2028/g,"|l").replace(/\u2029/g,"|p").replace(/\[/g,"|[").replace(/\]/g,"|]"):""}var pu,mu,UE,nh=T(()=>{"use strict";j();pu=x("team-city-reporter");mu=class{constructor(e){this.options=e}getPrintName(e){let t=e.config||{},r=typeof t.testDataTotal=="number"?` - ${t.testDataIndex} / ${t.testDataTotal} Data set`:"",n=`${e.name} (${e.testId})${r}`;return ws(n)}onTestStarted(e,t,r,n,o){if(r){pu.debug("skip report test started because is rerun");return}let i=this.getPrintName(e);console.log(`##teamcity[testStarted name='${i}' captureStandardOutput='true' flowId='${o}']`)}onTestFailed(e,t,r,n,o,i){if(o){pu.debug("skip report test failed because is rerun");return}let a=this.getPrintName(e);console.log(`##teamcity[testFailed name='${a}' message='${ws(t)}' details='${ws(r)}' flowId='${i}']`)}onTestFinished(e,t,r){if(r){pu.debug("skip report test finished because is rerun");return}let n=this.getPrintName(e);console.log(`##teamcity[testFinished name='${n}' duration='${e.duration}' flowId='${e.resultId}']`)}onTestIgnored(e,t,r="ignore"){let n=this.getPrintName(t);console.log(`##teamcity[testIgnored name='${n}' message='${ws(r)}']`)}onTestPlanStarted(e,t,r,n){console.log(`##teamcity[testSuiteStarted name='${ws(n)}']`)}onTestPlanFinished(e,t){console.log(`##teamcity[testSuiteFinished name='${ws(t)}']`)}},UE=mu});var oh={};$(oh,{Reporter:()=>FE});var fu,FE,ih=T(()=>{"use strict";fu=class{constructor(e){this.options=e}onTestStarted(e,t){console.log(JSON.stringify({name:"testStarted",data:{test:e,workerId:t}}))}onTestFinished(e,t){console.log(JSON.stringify({name:"testFinished",data:{test:e,workerId:t}}))}onTestPlanStarted(e,t,r,n,o){let i={name:"suiteStarted",data:{projectId:this.options.project,executionId:o}};console.log(JSON.stringify(i))}onTestPlanFinished(e){console.log(JSON.stringify({name:"suiteFinished",data:{testResults:e}}))}},FE=fu});var ah={};$(ah,{Reporter:()=>jE});var hu,jE,ch=T(()=>{"use strict";F();_l();hu=class{constructor(e,t){this.options=e;this.branchToUse=t}onTestStarted(e,t,r,n){if(n)return;let o=st(this.options.editorUrl,this.options.project,e.testId,e.resultId,this.branchToUse);return qo(o)}},jE=hu});var BE,gu,Z,Ft=T(()=>{"use strict";eh();j();BE=x("reporter"),gu=class{constructor(){this.reporters=[];this.onGetBrowserFailure=this.generateHook("onGetBrowserFailure");this.onGetBrowserSuccess=this.generateHook("onGetBrowserSuccess");this.onTestPlanStarted=this.generateHook("onTestPlanStarted");this.onGetSlot=this.generateHook("onGetSlot");this.onGetSession=this.generateHook("onGetSession");this.onTestFinished=this.generateHook("onTestFinished");this.onTestFailed=this.generateHook("onTestFailed");this.onTestPassed=this.generateHook("onTestPassed");this.onTestStarted=this.generateHook("onTestStarted");this.onTestIgnored=this.generateHook("onTestIgnored");this.onWaitToTestStart=this.generateHook("onWaitToTestStart");this.onWaitToTestComplete=this.generateHook("onWaitToTestComplete");this.onTestPlanFinished=this.generateHook("onTestPlanFinished",this.onTestPlanFinishedMutator);this.onAllTestPlansFinished=this.generateHook("onAllTestPlansFinished",this.onAllTestPlansFinishedMutator)}async setOptions(e,t){this.reporters=[];let r=e.reporters;if(this.reporters.push(new gi(e)),r===void 0||r.length===0){let{Reporter:n}=await Promise.resolve().then(()=>(au(),iu));if(this.reporters.push(new n(e,t)),(e==null?void 0:e.reportFile)!==void 0){let{Reporter:o}=await Promise.resolve().then(()=>(du(),uu));this.reporters.push(new o(e,t))}}else(await Promise.all([r.includes("teamcity")&&Promise.resolve().then(()=>(nh(),sh)),r.includes("console")&&Promise.resolve().then(()=>(au(),iu)),r.includes("junit")&&Promise.resolve().then(()=>(du(),uu)),r.includes("json")&&Promise.resolve().then(()=>(ih(),oh)),r.includes("chrome")&&Promise.resolve().then(()=>(ch(),ah))])).forEach(o=>{o&&this.reporters.push(new o.Reporter(e,t))})}onTestPlanFinishedMutator(e,t,r,n,o,i,a){let c={};if(a){let d=Object.values(a);if(d.length>0){for(let m of Object.values(a))c[m.id]=m;for(let m of Object.keys(e))d.some(p=>p.parentResultId!==m)||(c[m]=e[m])}else BE.warn("childTestResults is not array"),c=e}else c=e;let l=Date.now()-(r||0);return[c,t,l,n,o,i,void 0]}onAllTestPlansFinishedMutator(e){for(let t of e)if(t.childTestResults){t.results={};let r=Object.values(t.childTestResults);for(let n of r)t.results[n.id]=n;for(let n of Object.keys(e))r.some(o=>o.parentResultId!==n)||(t.results[n]=e[n])}return[e]}generateHook(e,t){return async(...r)=>{var o;let n=t==null?void 0:t(...r);for(let i of this.reporters)await((o=i[e])==null?void 0:o.call(i,...n||r))}}},Z=new gu});function uh(s,e){return e!=null&&e.type&&(s[`${e.type}Mode`]=!0),s}function dh({executionId:s,projectId:e,testId:t,resultId:r,companyId:n,companyName:o,projectName:i,companyPlan:a,sessionType:c,source:l,user:d,lightweightMode:m,isStartUp:p,projectType:f,appSource:h}){let g=uh({executionId:s,projectId:e,testId:t,resultId:r,companyId:n,companyName:o,projectName:i,companyPlan:a,sessionType:c,source:lh(l,d),isStartUp:p,projectType:f,...["android","ios"].includes(f)&&h&&{appSource:h}},m);pt("test-run-ci",g)}function ph({executionId:s,projectId:e,testId:t,resultId:r,result:n,companyId:o,companyName:i,projectName:a,companyPlan:c,sessionType:l,source:d,user:m,lightweightMode:p,logger:f,isStartUp:h,projectType:g,appSource:y}){try{let w=uh({executionId:s,projectId:e,testId:t,resultId:r,companyId:o,companyName:i,projectName:a,companyPlan:c,sessionType:l,mockNetworkEnabled:n.wasMockNetworkActivated,source:lh(d,m),isStartUp:h,projectType:g,...["android","ios"].includes(g)&&y&&{appSource:y}},p);if(n.success){pt("test-run-ci-success",w);return}pt("test-run-ci-fail",Object.assign({},w,{failureReason:n.failureReason}))}catch(w){f.error("failed to update test end analytics",{err:w})}}function mh({executionId:s,projectId:e,sessionType:t}){pt("batch-run-ci",{executionId:s,projectId:e,sessionType:t})}var lh,yu=T(()=>{"use strict";ms();Lo();lh=(s,e)=>s!=="cli"&&s!=="cli-local"?s:ls&&e?"ci-with-user":ls?"ci":e?"cli-with-user":s});var $E,hh=T(()=>{"use strict";$E=require("istanbul-lib-report")});var gh,yh,WE,bh,Lr,GE,wh,bu,qE,Th,vh=T(()=>{"use strict";gh=E(require("ora")),yh=E(require("moment")),WE=E(require("test-exclude")),bh=E(require("fs")),Lr=E(require("path")),GE=E(require("istanbul-reports")),wh=E(require("istanbul-lib-report"));Te();z();F();j();ft();hh();bu=x("test-run-status"),qE=async(s,e,t)=>{let{mergeProcessCovs:n}=await ge("@bcoe/v8-coverage"),o={result:[]},i=new Map,c=(await yn(s,"testResult",`runId=${t}`)).data.docs;return await de(c.flatMap(l=>l.JSCoverageURLS||[]),async l=>{let d=await gn(l,9e4);await de(d,async m=>{if(!i.has(m.url)){let p=m.text;m.sourceUrl&&(i.set(m.url,"TEMP"),p=await(void 0)(m.sourceUrl)),i.set(m.url,{text:p,url:m.url,sourceMapType:m.sourceMapType,hash:m.hash})}delete m.text,o=n([o,{result:[m]}])})},{concurrency:20}),{covUrlMap:i,mergedCoverages:o}},Th=async(s,e,t,r)=>{if(!s.collectCodeCoverage)return;bu.info("start js coverage process");let n=(0,gh.default)(`analyzing coverage for ${t} ${t===1?"test":"tests"}`).start(),o=Lr.resolve(s.codeCoverageReportPath||"./coverage"),i=Lr.resolve(o,`.js/${(0,yh.default)().format("DDMMYYYYHHmmss")}`),a=s.codeCoverageSourceMapPath?Lr.resolve(s.codeCoverageSourceMapPath):void 0;try{let[c,{mergedCoverages:l,covUrlMap:d}]=await Promise.all([ge("istanbul-lib-coverage"),qE(s.project,e,r)]);if(l.result.length===0){n.fail("Failed to report coverage information - js code coverage is empty");return}bu.info("start js coverage merge and remap",{numOfFiles:d.size,numMergedCoverages:l.result.length});let m=c.createCoverageMap({}),p={};await de(l.result,async({url:h,functions:g})=>{let{text:y,sourceMapType:w}=d.get(h),C=await(void 0).getSourceMap({sourceMapType:w,url:h,source:y,sourceMapDir:a});p[h]=C;let b=await(void 0).convertV8ToIstanbul(s,{source:y,sourceMap:C,functions:g});m.merge(b)}),await(void 0).remapCoverage(s,i,p);let f=await(void 0).saveCoverageReports(s,m,o,i);return n.succeed(),f}catch(c){let l="Failed to report coverage information";c instanceof R?n.fail(`${l}, missing arg: ${c.message}`):n.fail(l),bu.error(l,{err:c})}}});var bi={};$(bi,{SELENIUM_PERF_MARKS:()=>Eh,SeleniumPerfStats:()=>Nr});var Eh,Nr,Ts=T(()=>{"use strict";F();Eh={GET_BROWSER:"GET_BROWSER",GET_HTML:"GET_HTML",GET_ELEMENT:"GET_ELEMENT",GET_SCREENSHOT:"GET_SCREENSHOT"},Nr=class{constructor(){this.marks=Object.fromEntries(Object.values(Object.assign({ALL:"ALL"},Eh)).map(e=>[e,[]]));this.startTimes={}}markStart(e){let t=K();return this.startTimes[`${e}:${t}`]=Date.now(),t}markEnd(e,t){let r=Date.now()-this.startTimes[`${t}:${e}`];if(delete this.startTimes[`${t}:${e}`],!this.marks[t]){this.marks.ALL.push(r);return}this.marks[t].push(r)}getStats(){let e=Object.entries(this.marks).flatMap(([t,r])=>!Array.isArray(r)||!r.length?[]:[[`${t}_COUNT`,r.length],[`${t}_P50`,ho(r,50)],[`${t}_P95`,ho(r,95)]]);return{seleniumPerfMarks:this.marks,seleniumStats:Object.fromEntries(e)}}}});var xh={};$(xh,{initServer:()=>zE,mapFilesToLocalDrive:()=>Tu});function Tu(s,e){var t;try{s.failurePath=(s.failurePath||[]).map(r=>Object.assign(r,wi[r.id]?{screenshot:wi[r.id]}:{})),Object.keys(vs).forEach(r=>{s.assets||(s.assets={}),s.assets[Ih[r]]=vs[r]}),s.assets||(s.assets={}),s.assets.screenshots=Object.values(wi)}catch(r){e&&e.error("failed to map files to local drive",{err:r}),s.failurePath||(s.failurePath=[]),s.assets||(s.assets={}),(t=s.assets).screenshots||(t.screenshots=[])}}async function zE({agentPort:s,agentBind:e,saveRCALocally:t}){let r=await ge("multer"),n=typeof t=="string"?t:VE;await wu.promises.mkdir(n,{recursive:!0});let o=r({storage:r.diskStorage({async destination(c,l,d){let m=JSON.parse(c.body.metadata||"{}");if(!m.testResultId)return d(new Error("missing testResultId"),"");let p=_n.join(n,m.testResultId);try{await wu.promises.mkdir(p,{recursive:!0})}catch(f){return d(f,"")}return d(null,p)},filename(c,l,d){let{fileName:m}=c.body,p=JSON.parse(c.body.metadata||"{}");if(!p.stepId&&!m)return d(new Error("missing stepId or fileName"),"");if(p.stepId){let f=_n.extname(m);return d(null,`step_${p.stepId}_${p.stepName||""}${f}`.replace(/[/\\?%*:|"<>\s]/g,"-"))}return d(null,m)}})}),i=(0,Rh.default)();i.post("/",o.single("file"),(c,l)=>{var m;let d=JSON.parse(c.body.metadata||"{}");d.stepId&&(wi[d.stepId]=c.file.path),d.testResultId&&HE.includes(d.subType)&&(vs[m=d.subType]||(vs[m]=[]),vs[d.subType].push(c.file.path)),l.sendStatus(200)}),i.use((c,l)=>l.status(404).send("Endpoint Not Found"));let{createServer:a}=await import("http");return await new Promise((c,l)=>{let d=a(i);d.listen(s,e),d.on("error",m),d.on("listening",()=>c(d.address()));function m(p){if(p.syscall!=="listen")return l(p);switch(p.code){case"EACCES":case"EPERM":return l(new R(`Port ${s} requires elevated privileges`));case"EADDRINUSE":return l(new R(`Port ${s} is already in use`));default:return l(p)}}})}var wu,Sh,_n,Rh,VE,wi,vs,Ih,HE,vu=T(()=>{"use strict";wu=E(require("fs")),Sh=E(require("os")),_n=E(require("path")),Rh=E(require("express"));z();ft();VE=_n.join(Sh.tmpdir(),"testim/rca/"),wi={},vs={},Ih={"test-log":"consoleLogs","har-file":"networkLogs"},HE=Object.keys(Ih)});var Zt,Eu,Ti,Ph=T(()=>{"use strict";Zt=E(require("lodash"));F();j();Eu=x("override-test-data-builder"),Ti=class{constructor(e,t,r){this.params=e;this.testInfoList=t;this.projectId=r}isObjectNotArray(e){return Zt.isObject(e)&&!Array.isArray(e)}isArrayOfObjects(e){return Array.isArray(e)&&e.filter(t=>!this.isObjectNotArray(t)).length===0}overrideTestData(){let{params:e,projectId:t}=this;return this.isObjectNotArray(e)&&typeof e.overrideTestData<"u"&&(this.isObjectNotArray(e.overrideTestData)&&!Zt.isEmpty(e.overrideTestData)?(Object.keys(e.overrideTestData).forEach(r=>this.overrideSingleTest(r,e.overrideTestData[r])),delete e.overrideTestData):Eu.error("invalid overrideTestData",{overrideTestData:e.overrideTestData,projectId:t})),this.isObjectNotArray(e)&&typeof e.overrideAllTestsData<"u"&&(Zt.isObject(e.overrideAllTestsData)&&!Zt.isEmpty(e.overrideAllTestsData)?(this.testInfoList.map(n=>n.name).forEach(n=>this.overrideSingleTest(n,e.overrideAllTestsData)),delete e.overrideAllTestsData):Eu.error("invalid overrideAllTestsData",{overrideAllTestsData:e.overrideAllTestsData,projectId:t})),this.testInfoList}overrideSingleTest(e,t){let{projectId:r}=this;if(this.isObjectNotArray(t)||this.isArrayOfObjects(t)){this.replaceAndCreateOverrideTestData(e,t);return}Eu.error("skip override test data to test name",{testName:e,projectId:r}),console.error(`Invalid override test data provided to test '${e}'`)}replaceAndCreateOverrideTestData(e,t){let r=this.mapTestListToUniqueId(e);if(r.length!==0)return this.createNewTestPerOverrideTestData(r,t)}mapTestListToUniqueId(e){let{testInfoList:t}=this;return Zt.chain(t).map(r=>{if(r.name.toLowerCase()===e.toLowerCase())return this.generateTestUniqId(r)}).compact().uniq().value()}createNewTestPerOverrideTestData(e,t){let{testInfoList:r}=this;return[...new Set(e)].map(n=>{let o=r.map(d=>this.generateTestUniqId(d)),i=o.indexOf(n),a=o.lastIndexOf(n),c=r[i],l=this.createNewTestItems(c,t);return r.splice(i,a-i+1,...l)})}createNewTestItems(e,t){return[].concat(t).map((r,n)=>{let o=K();return Object.assign({},e,{resultId:o,testData:{value:r,index:n+1,total:t.length||1}})})}getTestType(e){return e.isBeforeTestPlan?"before":e.isAfterTestPlan?"after":"test"}generateTestUniqId(e){return`${e.testId}:${e.testConfig.id}:${this.getTestType(e)}`}}});async function vi(s,...e){if(!(!s||typeof s!="function"))try{return await s(...e)||{}}catch(t){throw tt.warn("failed to run hook",{err:t}),new R(`failed to run hook promise ${t.message}`)}}var Dr,tt,KE,JE,XE,YE,Ei,Ch=T(()=>{"use strict";Dr=E(require("lodash"));F();ae();bs();Te();z();j();Ft();Tn();vh();Ts();vu();le();be();Ph();An();tt=x("test-run-status"),KE=Ir(),JE=process.env.GIT_COMMIT||process.env.CIRCLE_SHA1||process.env.TRAVIS_COMMIT,XE=process.env.GIT_URL||process.env.CIRCLE_REPOSITORY_URL,YE=nt();Ei=class{constructor(e,t,r,n){this.testInfoList=e;this.options=t;this.branchToUse=n;this.exportsGlobal={};this.startTime=null;this.beforeSuiteParams={};this.executionStartedPromise=Promise.resolve();this.seleniumPerfStats=new Nr;var a,c,l,d,m;(a=this.options).runParams||(a.runParams={}),this.fileUserParamsData=this.options.userParamsData;let o=tn(t,e),i=t.lightweightMode?t.lightweightMode.type:t.mode;this.execConfig={parallel:Ks||t.parallel||1,browser:o,gitBranch:KE,gitCommit:JE,gitRepoUrl:XE,runnerVersion:YE,gridHost:t.host||((c=t.gridData)==null?void 0:c.host),testimBranch:n,canaryMode:t.canary,source:t.source,schedulerId:t.schedulerId,testPlanId:r,testPlans:t.testPlan,testLabels:t.label,testSuites:[...new Set(e.flatMap(p=>p.testSuites))],testNames:t.name,testIds:t.testId,testConfigs:t.testConfigNames,testConfigIds:t.testConfigIds,port:t.port,browserTimeout:t.browserTimeout,timeout:t.timeout,newBrowserWaitTimeout:t.newBrowserWaitTimeout,tunnel:t.tunnel,tunnelPort:t.tunnelPort,tunnelHostHeader:t.tunnelHostHeader,runnerMode:i,gridId:t.gridId||((l=t.gridData)==null?void 0:l.gridId),gridName:t.grid||((d=t.gridData)==null?void 0:d.name),gridType:(m=t.gridData)==null?void 0:m.type,retentionDays:t.retentionDays,codeCoverageReportPath:t.codeCoverageReportPath,collectCodeCoverage:t.codeCoverageUrlFilter||t.collectCodeCoverage,sessionType:Sr(t)},this.testRunStatus=this.calcTestRunStatus()}waitForExecutionStartedFinished(){return this.executionStartedPromise}getTestResult(e){return this.testRunStatus[e]}async addRetryTestResult({newResultId:e,originalTestResultId:t,previousTestResultId:r,projectId:n,executionId:o,retryCount:i=1}){let a=this.testRunStatus[t]||{},{config:c,isTestsContainer:l,testId:d,name:m,testStatus:p,testCreatorName:f,testCreatorEmail:h,testOwnerName:g,testOwnerEmail:y,testLabels:w,testSuites:C,allLabels:b}=a,v={originalTestResultId:t,previousTestResultId:r,config:Dr.cloneDeep(c),testId:d,status:"QUEUED",name:m,resultId:e,isTestsContainer:l,retryCount:i,testStatus:p};return this.testRunStatus[e]=Object.assign({},v,{testCreatorName:f,testCreatorEmail:h,testOwnerName:g,testOwnerEmail:y,testLabels:w,testSuites:C,allLabels:b}),gl({projectId:n,runId:o,testId:d,newResultId:e,originalTestResultId:t,previousTestResultId:r,testResult:v})}getAllTestResults(){return this.testRunStatus}testStart(e,t,r,n){let o=this.getTestResult(r);o.workerId=e;let i=this.options.files.length>0;return Z.onTestStarted(o,e,n,i,r),o}async updateTestStatusRunning(e,t,r){var l;let{project:n,remoteRunId:o,projectData:i}=this.options;if((l=this.options.lightweightMode)!=null&&l.onlyTestIdsNoSuite)return this.executionStartedPromise;let a="";try{a=await Uo(n,e.testId,e.resultId,e.config.testData,i.defaults)||""}catch(d){tt.error("failed to upload test data artifact (runner)",{err:d})}let c=Dr.cloneDeep(e.config);return delete c.testData,c.testDataUrl=a,await this.executionStartedPromise,us(n,t,e.testId,e.resultId,"RUNNING",{startTime:e.startTime,config:c,remoteRunId:o,testRetryKey:r})}async testStartReport(e,t,r){if(He(e,this.options))return;let n=this.exportsGlobal;try{let o=await vi(this.options.beforeTest,Object.assign({},e,{exportsGlobal:n,globalParameters:n}),this.options.userData.loginData.token);return e.config.testData=Object.assign({},e.config.testData,this.exportsGlobal,this.fileUserParamsData,this.beforeSuiteParams,o),this.options.runParams[e.resultId]=e.config.testData,e.startTime=Date.now(),await this.updateTestStatusRunning(e,t,r),e}catch(o){throw tt.error("Failed to start test",{err:o}),o}}testStartAndReport(e,t,r,n,o){let i=this.testStart(e,t,r,n);return this.testStartReport(i,t,o)}onGridSlot(e,t){let r=this.getTestResult(e);r.config.gridInfo=Object.assign({},t,{key:void 0,user:void 0}),tt.info("on get grid info",{gridInfo:r.config.gridInfo})}reportTestStatus(e,t,r,n){let{name:o,testId:i,testStatus:a}=r,{resultId:c,success:l}=t;if(a===Ve.EVALUATING&&Rt.isTestStatusEnabled){Z.onTestIgnored(e,r,`test in ${Ve.EVALUATING} status`);return}if(l){Z.onTestPassed(o);return}Z.onTestFailed(r,r.failureReason,st(this.options.editorUrl,this.options.project,i,c,this.branchToUse),i,n,c)}calcResultText(e){return e.success?pe.PASSED:pe.FAILED}onTestIgnored(e,t){let r=this.getTestResult(t);Z.onTestIgnored(e,r,`test in ${Ve.QUARANTINE}`)}testEnd(e,t,r,n,o){let i=this.getTestResult(t.resultId),a=t.endTime-t.startTime||0;i.sessionId=n,i.startTime=t.startTime||i.startTime||Date.now(),i.duration=a,t.duration=a,i.failureReason=t.failureReason||t.reason,t.failureReason=i.failureReason,i.failurePath=t.failurePath,i.resultId=t.resultId,i.success=t.success,this.options.saveRCALocally&&Tu(i,tt),i.resultUrl=st(this.options.editorUrl,this.options.project,i.testId,i.resultId,this.branchToUse),i.status=this.calcResultText(t),t.status=i.status,t.name=i.name,t.testStatus=i.testStatus,t.testId||(t.testId=i.testId),t.testCreatorName=i.testCreatorName,t.testCreatorEmail=i.testCreatorEmail,t.testOwnerName=i.testOwnerName,t.testOwnerEmail=i.testOwnerEmail,t.testData=i.config&&typeof i.config.testDataTotal=="number"?{total:i.config.testDataTotal,index:i.config.testDataIndex}:{},this.reportTestStatus(e,t,i,o);let c=this.options.files.length>0;Z.onTestFinished(i,e,o,c);let l=Object.assign({},this.exportsGlobal,t.exportsGlobal);return this.exportsGlobal=l,i}async testEndReport(e,t,r,n){var i;let o=r.exportsGlobal;try{try{await vi(this.options.afterTest,Object.assign({},e,{exportsGlobal:o,globalParameters:o}),this.options.userData.loginData.token)}catch(a){tt.error("HOOK threw an error",{test:e.testId,err:a}),console.error("HOOK threw an error",a)}return(i=this.options.lightweightMode)!=null&&i.onlyTestIdsNoSuite?void 0:await us(this.options.project,t,e.testId,e.resultId,"FINISHED",{startTime:e.startTime,endTime:r.endTime,success:e.success,failureReason:e.failureReason,remoteRunId:this.options.remoteRunId,...n},5)}catch(a){throw tt.error("Failed to update test finished",{err:a}),a}}testEndAndReport(e,t,r,n,o,i){let a=this.testEnd(e,t,r,n,o);return this.testEndReport(a,r,t,i)}calcTestRunStatus(){let{options:e,testInfoList:t}=this,r=e.company.companyId,n=t.map(o=>{var c,l,d,m;let i=e.browser?on(e.browser,e.saucelabs,e.browserstack):o.runConfig;if(i&&U.flags.dec2022eolBrowsers.isEnabled()&&((c=nn(i.browserValue))!=null&&c.eol))throw new R(`Unsupported Browser: ${i.browserName}`);let a={testId:o.testId,status:He(o,e)?pe.SKIPPED:pe.QUEUED,name:o.name,resultId:o.resultId,isTestsContainer:o.isTestsContainer,testStatus:o.testStatus||Ve.DRAFT,testCreatorName:o.creatorName,testCreatorEmail:o.creatorEmail,testOwnerName:o.testOwnerName,testOwnerEmail:o.testOwnerEmail,testLabels:o.testLabels,testSuites:o.testSuites,allLabels:o.allLabels,config:Object.assign({},this.execConfig,{companyId:r,testData:((l=o.testData)==null?void 0:l.value)||null,isBeforeTestPlan:o.isBeforeTestPlan,isAfterTestPlan:o.isAfterTestPlan,testDataTotal:((d=o.testData)==null?void 0:d.total)||null,testDataIndex:((m=o.testData)==null?void 0:m.index)||null,baseUrl:e.baseUrl||o.baseUrl||o.testConfig.baseUrl,testConfig:o.overrideTestConfig||o.testConfig,browser:i.browserValue.toLowerCase()})};return[o.resultId,a]});return Object.fromEntries(n)}async executionStart(e,t,r,n,o){tt.info("execution started",{executionId:e});let{options:i}=this,{remoteRunId:a,projectData:c}=i;ds(()=>Promise.all([In.end(t),Do("ABORTED",e,t,!1,void 0,a,void 0)])),this.startTime=r||Date.now();let l={projectId:t,executionId:e,...U.flags.testNamesToBeforeSuiteHook.isEnabled()&&{testNames:o}},d=await vi(i.beforeSuite,l),m=new Ti(d,Dr.cloneDeep(this.testInfoList),t);this.testInfoList=m.overrideTestData(),this.testRunStatus=this.calcTestRunStatus(),this.beforeSuiteParams=d;let{testInfoList:p}=this,f=[],h=[],g=[];for(let w of p){if(w.isBeforeTestPlan){f.push(w);continue}if(w.isAfterTestPlan){g.push(w);continue}h.push(w)}let y=async()=>{let w=Dr.cloneDeep(this.testRunStatus);await de(Object.keys(w),async I=>{var P;let k=w[I],D=(P=k.config)==null?void 0:P.testData,S=k.testId,_=await Uo(t,S,I,D,c.defaults);_&&(delete k.config.testData,k.config.testDataUrl=_)});let C=Boolean(i.useLocalChromeDriver||i.useChromeLauncher),b={executionId:e,projectId:t,labels:n||[],startTime:r,executions:w,config:this.execConfig,resultLabels:i.resultLabels,remoteRunId:i.remoteRunId,localRunUserId:i.user,isLocalRun:C,intersections:i.intersections},v=Qc(b);return this.executionStartedPromise=v,v.catch(I=>tt.error(I)),v};try{await y()}catch(w){tt.error("Failed to start suite",{err:w}),console.error("Failed to start test run. Please contact support@testim.io")}return{beforeTests:f,tests:h,afterTests:g}}concatSeleniumPerfMarks(e){Dr.chain(e).keys().each(t=>{let r=t;this.seleniumPerfStats.marks[r]&&(this.seleniumPerfStats.marks[r]=[...this.seleniumPerfStats.marks[r],...e[r]])}).value()}async executionEnd(e){var d;let t=Cc(this.testRunStatus),r=t.length,n=0,o=0,i=0;for(let{status:m,testStatus:p}of t)m===pe.PASSED&&n++,m===pe.SKIPPED&&o++,m===pe.FAILED&&p===Ve.EVALUATING&&i++;let{seleniumPerfMarks:a,...c}=this.seleniumPerfStats.getStats();try{await vi(this.options.afterSuite,{exportsGlobal:this.exportsGlobal,tests:t,total:r,passed:n,skipped:o})}catch(m){console.log("check your callback handler on afterSuite Hook for syntax or exception errors"),tt.warn("error while running afterSuite Hook",{err:m,projectId:this.options.projectData.projectId,executionId:this.options.executionId})}let l=await Th(this.options,this.branchToUse,r,e);if(Object.assign(c,{coverageSummary:l}),!((d=this.options.lightweightMode)!=null&&d.onlyTestIdsNoSuite))try{return await Do("FINISHED",e,this.options.project,r===n+o+i,{tmsSuppressReporting:this.options.tmsSuppressReporting,tmsRunId:this.options.tmsRunId,tmsCustomFields:this.options.tmsCustomFields},this.options.remoteRunId,c)}catch(m){throw tt.error("Failed to update suite finished",{err:m}),m}}async markAllQueuedTests(e,t,r,n){let o=Object.keys(this.testRunStatus).filter(i=>this.getTestResult(i).status==="QUEUED");await Yc(e,["QUEUED"],t,r,n,this.startTime,null,this.options.project);for(let i of o){let a=this.getTestResult(i);a.status=t,a.failureReason=r,a.success=n}return this.testRunStatus}}});var Ri={};$(Ri,{buildAppiumOptions:()=>Cu,buildSeleniumOptions:()=>Pu});function ZE(s,e){let t={browserName:"safari",...e==="safari technology preview"&&{"safari.options":{technologyPreview:!0}}};return Object.assign(s.desiredCapabilities,t),s}function xu(s){return _h.readFileSync(s,{encoding:"base64"})}function Nh(s,e,t){if(!(t!=null&&t.isLambdatestRun()&&Be(s))&&s){let r=xu(s);On.info(`adding extension: custom, path: ${s} length: ${r.length} hash: ${Iu(r)} current extension count: ${e.length}`),e.push(r)}}function Dh(s,e,t,r,n){if(n!=null&&n.isLambdatestRun())return;if(s.ext||r){let c=typeof s.ext=="string"?s.ext:`${__dirname}/..`,l=r||c,d=`--load-extension=${l}`;On.info(`adding extension: testim unpacked , path: ${l}`),t.push(d);return}let o=s.canary?"-master.zip":".zip",i=Ru.join(process.cwd(),`testim-headless${o}`),a=xu(i);On.info(`adding extension: testim zipped, path: ${i} length: ${a.length} hash: ${Iu(a)} current extension count: ${e.length}`),e.push(a)}function eS(s,e,t,r,n,o,i){var g,y;let a=t.seleniumName||t.browserValue,c=[],l=[...Lh];e.headless&&l.push("--headless");let d=()=>e.mode!==Q.EXTENSION,m={prefs:{"profile.default_content_setting_values.popups":Su.CONTENT_SETTING_ALLOW,"profile.default_content_setting_values.automatic_downloads":Su.CONTENT_SETTING_ALLOW,"plugins.always_open_pdf_externally":!0,"safebrowsing.enabled":!0,"profile.content_settings.exceptions.clipboard":{"[*.],*":{last_modified:Date.now(),setting:1}},"download.allow_office_viewer_for_download":!1},w3c:d()};Si(n)&&(m.prefs["download.default_directory"]="C:\\Users\\testnode",m.w3c=!0,s.desiredCapabilities.version="latest-1",s.desiredCapabilities["aws:maxDurationSecs"]=2400,s.desiredCapabilities["aws:idleTimeoutSecs"]=60),Si(n)&&a==="MicrosoftEdge"&&(s.desiredCapabilities["ms:edgeChromium"]=!0),e.chromeExtraPrefs&&Object.assign(m.prefs,e.chromeExtraPrefs),e.chromeExtraArgs&&e.chromeExtraArgs.forEach(w=>l.push(`--${w}`)),e.chromeBlockLocation&&(m.prefs["profile.default_content_setting_values.geolocation"]=Su.CONTENT_SETTING_BLOCK),e.chromeUserDataDir&&l.push(`--user-data-dir=${e.chromeUserDataDir}`),(y=(g=e.projectData)==null?void 0:g.defaults)!=null&&y.disableChromiumGpu&&l.push("--disable-gpu"),Object.assign(s.desiredCapabilities,{browserName:a});function p(){t.mobileEmulation&&(m.mobileEmulation={deviceMetrics:{width:t.mobileEmulation.device.width,height:t.mobileEmulation.device.height+Ec.MOBILE_WEB_REMOTE_RUN_HEADER_SPACING,pixelRatio:t.mobileEmulation.device.deviceScaleFactor},userAgent:t.mobileEmulation.userAgent})}p(),Nh(r,c,i),e.mode===Q.EXTENSION&&Dh(e,c,l,o,i),c.length>0&&(m.extensions=c),e.disableCookiesSameSiteNoneRequiresSecure&&(m.localState={"browser.enabled_labs_experiments":["cookies-without-same-site-must-be-secure@2"]}),m.args=l;let f={MicrosoftEdge:"edgeOptions",chrome:"chromeOptions"}[a],h={MicrosoftEdge:"ms",chrome:"goog"}[a];return te.isLambdatestGrid(n)&&delete m.w3c,e.oldCapabilities&&n.type!=="testimEnterprise"&&!(i!=null&&i.isLambdatestRun())&&(s.desiredCapabilities[f]=m),(e.w3cCapabilities||n.type==="testimEnterprise")&&(s.desiredCapabilities[`${h}:${f}`]=m),s}function rS(s,e,t){let r={"pdfjs.disabled":!0};if(U.flags.autoSaveDownloadFileFireFox.isEnabled()&&Object.assign(r,{"browser.helperApps.neverAsk.saveToDisk":kh.join(","),"browser.helperApps.neverAsk.openFile":kh.join(","),"browser.helperApps.alwaysAsk.force":!1,"browser.download.manager.useWindow":!1,"browser.download.manager.focusWhenStarting":!1,"browser.download.manager.alertOnEXEOpen":!1,"browser.download.manager.showWhenStarting":!1,"browser.download.manager.closeWhenDone":!0,"browser.download.manager.showAlertOnComplete":!1}),Object.assign(s.desiredCapabilities,{acceptInsecureCerts:!0,browserName:"firefox",marionette:!0,"moz:firefoxOptions":{prefs:r}},t!=null&&t.isLambdatestRun()?{enableCustomTranslation:!0}:{}),e.disableCookiesSameSiteNoneRequiresSecure&&(s.desiredCapabilities["moz:firefoxOptions"].prefs["network.cookie.sameSite.noneRequiresSecure"]=!1),e.mode===Q.EXTENSION)if(e.ext)s.desiredCapabilities.testim_firefox_profile=e.ext;else{let n=e.canary?"-master.zip":".zip",o=Ru.join(process.cwd(),`testim-firefox-profile${n}`);s.desiredCapabilities.firefox_profile=xu(o)}return e.headless&&(s.desiredCapabilities["moz:firefoxOptions"].args||(s.desiredCapabilities["moz:firefoxOptions"].args=[]),s.desiredCapabilities["moz:firefoxOptions"].args.push("-headless")),s}function sS(s,e,t){let{saucelabs:r}=s;return r!=null&&r.username&&r.accessKey?t?(t.sl.version=t.browserValue==="safari"?t.sl.safari_version:t.sl.version,t.sl.appiumVersion=r.appiumVersion||t.sl.appiumVersion,Object.assign({},t.sl,r,{name:e})):Object.assign({},r,{name:e}):{}}function nS(s,e,t){return ht.isEmpty(s.browserstack)?{}:t?(t.bs.browser_version=t.browserValue==="safari"?t.bs.safari_version:t.bs.browser_version,t.browserValue==="safari"&&t.bs.safari_version==="10"&&Object.assign(t.bs,{"safari.options":{technologyPreview:!0}}),Object.assign({},t.bs,s.browserstack,{name:e})):Object.assign({},s.browserstack,{name:e})}function oS(s){return s.perfecto?s.perfecto:{}}function iS(s,e,t){if(s.experitestToken){let r=e==="safari";return{accessKey:s.experitestToken,browserVersion:"latest",platformName:r?"MAC":"WIN10",seleniumScreenshot:r,newSessionWaitTimeout:t}}return{}}function aS(s,e={}){let{gridData:t={},gridUsername:r,gridPassword:n}=s,o=r||t.user||e.user,i=n||t.key||e.key,a={};return o&&i&&(a.Authorization=$a(o,i)),a}function Pu(s,e,t,r,n,o,i,a=null){var g,y,w,C,b,v;if(r.mode==="local"){let I=[],k=[...Lh],D={};return s.headless&&k.push("--headless"),s.silentDebuggerExtensionApi&&k.push("--silent-debugger-extension-api"),s.remoteDebuggingPort!==void 0&&k.push(`--remote-debugging-port=${s.remoteDebuggingPort}`),s.chromeExtraArgs&&s.chromeExtraArgs.forEach(S=>k.push(`--${S}`)),s.chromeBinaryLocation&&(D.binary=s.chromeBinaryLocation),s.mode!=="selenium"&&Dh(s,I,k,null,a),Nh(n,I,a),{logLevel:Ah,desiredCapabilities:{chromeOptions:{args:k,extensions:I,...D},browserName:"chrome"},host:"localhost",port:9515}}let{driverRequestTimeout:c,driverRequestRetries:l}=s,d=aS(s,r),m={host:r.host,port:r.port||4444,path:r.path||"/wd/hub",protocol:r.protocol||"http",logLevel:Ah,connectionRetryTimeout:c,connectionRetryCount:l,getSessionTimeout:Math.max(a.getSessionTimeout,s.getSessionTimeout),getSessionRetries:a.getSessionRetries||s.getSessionRetries,deprecationWarnings:!1,desiredCapabilities:{javascriptEnabled:!0,locationContextEnabled:!0,handlesAlerts:!0,rotatable:!0,acceptSslCerts:!0,unexpectedAlertBehaviour:"accept",nativeEvents:!0,testName:e},...!ht.isEmpty(d)&&{headers:d},...s.proxyForGrid&&{agent:global.ProxyAgent(global.proxyUri)}};Si(r)&&(s.oldCapabilities=!1,s.w3cCapabilities=!0,m.desiredCapabilities={unexpectedAlertBehaviour:"accept"}),s.disableNativeEvents&&(m.desiredCapabilities.nativeEvents=!1),r.user&&r.key&&(r.type==="saucelabs"&&(s.saucelabs||(s.saucelabs={}),(g=s.saucelabs).username||(g.username=r.user),(y=s.saucelabs).accessKey||(y.accessKey=r.key)),r.type==="browserstack"&&(s.browserstack||(s.browserstack={}),(w=s.browserstack)["browserstack.user"]||(w["browserstack.user"]=r.user),(C=s.browserstack)["browserstack.key"]||(C["browserstack.key"]=r.key))),r.key&&r.type==="perfecto"&&(s.perfecto.securityToken=r.key);let p=Number(s.browserTimeout/1e3),f=s.browser||(t==null?void 0:t.browserValue);ht.merge(m.desiredCapabilities,sS(s,e,t),nS(s,e,t),oS(s),iS(s,f,p),a==null?void 0:a.getCapabilities(s,f,o,i,e));let h=null;switch(!s.ext&&!s.extensionPath&&((b=r.host)!=null&&b.endsWith(".testim.io"))&&!s.canary&&s.mode===Q.EXTENSION&&(f==="chrome"?h="/opt/testim-headless":f==="edge-chromium"&&(h="C:/selenium/testim-headless")),(v=r.host)!=null&&v.endsWith(".testim.io")&&f==="edge-chromium"&&(m.desiredCapabilities.version="83"),f){case"chrome":case"edge-chromium":m=tS(m,s,t,n,r,h,a);break;case"firefox":m=rS(m,s,a);break;case"safari":case"safari technology preview":m=ZE(m,f);break;default:break}ht.merge(m.desiredCapabilities,s.seleniumCapsFileContent);try{let I={"hub.lambdatest.com":"lambdatest",[U.flags.publicGridURL.getValue()]:"testim","testgrid-devicefarm.us-west-2.amazonaws.com":"devicefarm"},k=P=>P[r.provider]||P[m.host]||P[I[m.host]],D=P=>{var L,B;return k(P)||P[(L=m.desiredCapabilities)==null?void 0:L.browserName]||P[(B=m.desiredCapabilities)==null?void 0:B.version]||P||{}},S=JSON.parse(U.flags.addCustomCapabilities.getValue()||"{}"),_=D(D(S));Object.keys(_).length&&(On.info(`Adding custom capabilities: ${JSON.stringify(_)}`),Object.assign(m.desiredCapabilities,_))}catch(I){On.error("Failed to load custom capabilities",{error:I,customCapabilities:U.flags.addCustomCapabilities.getValue()})}return Si(r)&&m.desiredCapabilities&&!m.capabilities&&(QE(m.desiredCapabilities),m.capabilities={alwaysMatch:m.desiredCapabilities,firstMatch:[{}]},delete m.desiredCapabilities),m}function Cu({projectType:s,gridInfo:e,nativeApp:t,options:r,appPath:n,androidActivityWait:o}){let{deviceModel:i,osVersion:a,deviceUdid:c,fullReset:l,resetAppData:d,resetOnSessionStartOnly:m}=r,p={};if(!t&&!n)throw Error("missing mobile app!");if(e.type!==ue.TESTIM_HEADSPIN)throw Error("unsupported grid was detected please make sure to select supported mobile grid");let f={protocol:e.protocol||"https",hostname:e.host,port:e.port,path:`/v0/${e.accessToken}/wd/hub`,logLevel:r.appiumLogLevel},h={"headspin:capture":!0,...!l&&!d&&{"appium:noReset":!0},...!l&&d&&{"appium:noReset":!1}};switch(s){case"ios":h={...h,platformName:"iOS","appium:autoAcceptAlerts":!0,"appium:automationName":"XCUITest",...l&&{"appium:fullReset":l,"appium:resetOnSessionStartOnly":m},...t&&{"appium:bundleId":t.id},...n&&{"appium:app":n}};break;case"android":h={...h,platformName:"Android",...l&&{"appium:fullReset":l},...!l&&d&&{"appium:autoGrantPermissions":!0},"appium:automationName":"UiAutomator2","appium:appWaitActivity":o,...t&&{"appium:appPackage":t.id||t.packageName,"appium:appActivity":t.activity},...n&&{"appium:app":n}};break;default:throw Error(`unsupported mobile project ${s}`)}return i&&(p.model=i),a&&(p.os_version=a),c&&(p.device_id=c,delete p.model,delete p.os_version),ht.isEmpty(p)||(h["headspin:selector"]=p),{...f,desiredCapabilities:h,capabilities:h}}var _h,Ru,Oh,ht,On,Ah,Su,Lh,Iu,Si,QE,tS,kh,Ii=T(()=>{"use strict";_h=E(require("fs")),Ru=E(require("path")),Oh=E(require("crypto")),ht=E(require("lodash"));F();le();j();be();ae();ri();On=x("testim-desired-capabilities-builder"),Ah=zs?"verbose":"silent",Su={CONTENT_SETTING_DEFAULT:0,CONTENT_SETTING_ALLOW:1,CONTENT_SETTING_BLOCK:2,CONTENT_SETTING_ASK:3},Lh=["--disable-popup-blocking","--ignore-gpu-blacklist","--auto-select-desktop-capture-source=Entire screen","--ignore-certificate-errors","--disable-features=TranslateUI","--disable-background-networking","--disable-sync","--metrics-recording-only","--disable-default-apps","--mute-audio","--no-first-run","--disable-back-forward-cache"],Iu=(...s)=>Oh.createHash("sha256").update(s.join("")).digest("hex"),Si=s=>s.type===ue.DEVICE_FARM||s.type===ue.HYBRID&&s.provider==="devicefarm",QE=s=>{Object.prototype.hasOwnProperty.call(s,"version")&&(s.browserVersion=s.version,delete s.version),Object.prototype.hasOwnProperty.call(s,"platform")&&(s.platformName=s.platform,delete s.platform),Object.prototype.hasOwnProperty.call(s,"acceptSslCerts")&&(s.acceptInsecurecerts=s.acceptSslCerts,delete s.acceptSslCerts),Object.prototype.hasOwnProperty.call(s,"unexpectedAlertBehaviour")&&(s.unhandledPromptBehavior=s.unexpectedAlertBehaviour,delete s.unexpectedAlertBehaviour)};tS=ht.memoize(eS,(s,e,t,r,n,o)=>{let i=JSON.stringify(s.desiredCapabilities),a=JSON.stringify(ht.omit(e,"runParams")),c=JSON.stringify(t),l=JSON.stringify(n.type);return Iu(i,a,c,r,l,o)}),kh=["application/force-download","application/pdf","application/x-pdf","application/acrobat","applications/vnd.pdf","text/pdf","text/x-pdf","application/vnd.cups-pdf"]});var Uh={};$(Uh,{isElementDisplayed:()=>Mh});function Mh(s){function e(p){return p?[Node.ELEMENT_NODE,Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE].includes(p.nodeType):!1}function t(p){return p?r(p.parentNode,e):null}function r(p,f){for(let h=p;h&&h!==p.ownerDocument;h=h.parentNode)if(f(h))return h;return null}function n(p,f){for(let h=p;h&&h!==p.ownerDocument;h=t(h))if(f(h))return h;return null}function o(p,f){if(!p||!f)return null;p instanceof DocumentFragment&&(p=p.host);let g=window.getComputedStyle(p).getPropertyValue(f);if(g&&g!=="inherit")return g;let y=t(p);return o(y,f)}function i(p){let f=p.getBoundingClientRect();if(f.width>0&&f.height>0)return!0;if(p.tagName.toUpperCase()==="PATH"&&f.width+f.height>0){let g=o(p,"stroke-width");return!!g&&parseInt(g,10)>0}return o(p,"overflow")==="hidden"?!1:Array.from(p.childNodes).some(g=>g.nodeType===Node.TEXT_NODE?!0:e(g)?i(g):!1)}function a(p){return o(p,"overflow")==="hidden"}function c(p){return!p||!a(p)||!p.childNodes.length?!1:Array.from(p.childNodes).every(f=>f.nodeType===Node.TEXT_NODE?!1:!e(f)||!i(f)?!0:c(f))}function l(p){var f;return p?(f=p.parentNode)!=null&&f.host?!0:l(p.parentNode):!1}if(!s||!l(s)&&!document.contains(s))return!1;switch(s.tagName.toUpperCase()){case"BODY":return!0;case"SCRIPT":case"NOSCRIPT":return!1;case"OPTGROUP":case"OPTION":{let p=r(s,f=>f.tagName.toUpperCase()==="SELECT");return Mh(p)}case"INPUT":if(s.type==="hidden")return!1;break;default:break}if(o(s,"visibility")!=="visible")return!1;let d=!!n(s,p=>Number(o(p,"opacity"))===0),m=!!n(s,p=>o(p,"display")==="none");return!(d||m||!i(s)||c(s))}var Fh=T(()=>{"use strict"});var Au={};$(Au,{encodeForSafari:()=>lS,isOldProtocol:()=>cS});function cS(s){var e,t,r,n,o,i,a;return((e=s.message)==null?void 0:e.match(/Command not found/))||s.message==="HTTP method not allowed"||s.message==="Unknown error"||((t=s.message)==null?void 0:t.match(/Unknown timeout type/))||((r=s.seleniumStack)==null?void 0:r.type)==="UnknownCommand"||((n=s.message)==null?void 0:n.match(/did not match a known command/))||((o=s.message)==null?void 0:o.match(/Server returned HTTP response code: 405 for URL/))||((i=s.seleniumStack)==null?void 0:i.message)==="The arguments passed to a command are either invalid or malformed."||((a=s.message)==null?void 0:a.match(/Invalid timeout type specified: ms/))}function lS(s,e,t){if(!e||!s)return s;if(s.includes("%"))return s.replace(/ /g,"%20");try{return decodeURI(s)!==s?s:encodeURI(s)}catch(r){return t&&t.warn("tried to encode url but failed",{err:r,url:s}),s}}var ku=T(()=>{"use strict"});var Gh=Kd((EC,Wh)=>{"use strict";var $h=require("promise-queue"),jh=(le(),G(xe)),uS=require("@testim/webdriverio"),_u=(Le(),G(Oe)),{extractElementId:Ln}=(F(),G(H)),{getLogger:dS}=(j(),G(Js)),{UNICODE_CHARACTERS:Bh,W3C_ELEMENT_ID:pS}=(Yr(),G(Ba)),{isElementDisplayed:mS}=(Fh(),G(Uh)),{isOldProtocol:Mr,encodeForSafari:fS}=(ku(),G(Au)),{SELENIUM_PERF_MARKS:Es}=(Ts(),G(bi)),xi=dS("WebDriverApi");$h.configure(Promise);var hS=function(){return{screenWidth:Math.floor(window.innerWidth||0),screenHeight:Math.floor(window.innerHeight||0)}},Ou=class{constructor(){this.w3cRequests={}}windowHandleMaximize(){return this.addToQueue(()=>this.client.windowHandleMaximize().then(e=>({height:e.value.height,width:e.value.width})))}rejectWithLog(e,t){let{testName:r,testResultId:n}=this,o=t?t.toString().substr(0,2e3):"";return xi.warn("error from selenium",{err:e,testResultId:n,testName:r,crashingFunc:o}),Promise.reject(e)}initQueueRequests(){let e=1/0;this.isAndroid()&&(e=1),typeof jh.REQUESTS_QUEUE_SIZE<"u"&&(e=jh.REQUESTS_QUEUE_SIZE);let t=1/0;this.queue=new $h(e,t)}addToQueue(e){let t=this.seleniumPerfStats.markStart();return this.queue.add(e).catch(r=>this.rejectWithLog(r,e)).finally(()=>this.seleniumPerfStats.markEnd(t))}async initClient(e,t,r){this.testName=t,this.testResultId=r,e.deprecationWarnings=!1,this.client=uS.remote(e),this.initQueueRequests(),_u.log("right before addToQueue");let n=this.seleniumPerfStats.markStart(Es.GET_BROWSER);try{await this.addToQueue(()=>(xi.info("requesting browser",{testResultId:r,testName:t}),_u.log("before this.client.init"),this.client.init())),_u.log("after client init")}finally{await this.seleniumPerfStats.markEnd(n,Es.GET_BROWSER)}}get isMobile(){return this.client.isMobile}getSessionId(){var e,t;return(t=(e=this.client)==null?void 0:e.requestHandler)==null?void 0:t.sessionID}isChrome(){return this.client.desiredCapabilities.browserName==="chrome"}isChromium(){return this.isChrome()||this.isEdgeChromium()}isFirefox(){return this.client.desiredCapabilities.browserName==="firefox"}isSafari(){return this.client.desiredCapabilities.browserName==="safari"||this.client.desiredCapabilities.browserName==="safari technology preview"}isAndroid(){return this.client.desiredCapabilities.platformName==="Android"}isEdgeChromium(){return this.client.desiredCapabilities.browserName==="MicrosoftEdge"&&!this.client.desiredCapabilities._isOldEdge}execute(...e){return this.addToQueue(()=>{let t=e.shift();if(typeof t!="string"&&typeof t!="function")return Promise.reject(new Error("number or type of arguments don't agree with execute protocol command"));typeof t=="function"&&(t=`return (${t}).apply(null, arguments)`);let r=i=>{throw i.executedScript=t,i},n=()=>this.client.requestHandler.create("/session/:sessionId/execute/sync",{script:t,args:e}).catch(r),o=()=>this.client.requestHandler.create("/session/:sessionId/execute",{script:t,args:e}).catch(r);return this.w3cRequests.execute?n():o().catch(i=>{if(Mr(i))return this.w3cRequests.execute=!0,n();throw i})})}executeAsync(...e){return this.addToQueue(()=>{let t=e.shift();if(typeof t!="string"&&typeof t!="function")return Promise.reject(new Error("number or type of arguments don't agree with execute protocol command"));typeof t=="function"&&(t=`return (${t}).apply(null, arguments)`);let r=()=>this.client.requestHandler.create("/session/:sessionId/execute/async",{script:t,args:e}),n=()=>this.client.requestHandler.create("/session/:sessionId/execute_async",{script:t,args:e});return this.w3cRequests.executeAsync?r():n().catch(o=>{if(Mr(o))return this.w3cRequests.executeAsync=!0,r();throw o})})}async executeCDP(e,t={}){var n;if(!this.isChromium())return;let r=await this.client.requestHandler.create({path:"/session/:sessionId/chromium/send_command_and_get_result",method:"POST"},{cmd:e,params:t});return(n=r==null?void 0:r.value)!=null&&n.targetInfos?r.value.targetInfos:[]}takeScreenshot(){let e=this.seleniumPerfStats.markStart(Es.GET_SCREENSHOT);return this.addToQueue(()=>this.client.screenshot()).finally(()=>this.seleniumPerfStats.markEnd(e,Es.GET_SCREENSHOT))}takeElementScreenshot(e){let t=this.seleniumPerfStats.markStart(Es.GET_SCREENSHOT);return this.addToQueue(()=>this.client.elementIdScreenshot(Ln(e))).finally(()=>this.seleniumPerfStats.markEnd(t,Es.GET_SCREENSHOT))}getElementBySelector(e){return this.addToQueue(()=>this.client.element(e))}elementIdDisplayed(e){return this.addToQueue(()=>{let t=()=>this.client.elementIdDisplayed(e),r=()=>this.execute(mS,{ELEMENT:e,[pS]:e});return this.w3cRequests.elementIdDisplayed?r():t().catch(n=>{if(Mr(n))return this.w3cRequests.elementIdDisplayed=!0,r();throw n})})}windowHandles(){return this.addToQueue(()=>{let e=()=>this.client.requestHandler.create("/session/:sessionId/window_handles"),t=()=>this.client.requestHandler.create("/session/:sessionId/window/handles");return this.w3cRequests.windowHandles?t():e().catch(r=>{if(Mr(r))return this.w3cRequests.windowHandles=!0,t();throw r})})}url(e){return this.addToQueue(()=>this.client.url(fS(e,this.isSafari(),xi)))}reloadTab(){return this.addToQueue(()=>this.client.refresh())}source(){return this.addToQueue(()=>this.client.source())}timeouts(e,t){return this.addToQueue(()=>{let r=()=>this.client.requestHandler.create("/session/:sessionId/timeouts",{type:e,ms:t}),n=()=>this.client.requestHandler.create("/session/:sessionId/timeouts",{[e]:t});return this.w3cRequests.timeouts?n():r().catch(o=>{if(Mr(o))return this.w3cRequests.timeouts=!0,n();throw o})})}scroll(e,t){e=typeof e=="number"?e:0,t=typeof t=="number"?t:0;let r=function(n,o){window.scrollTo(n,o)};return this.execute(r,e,t)}setValue(e,t){return this.elementIdClear(Ln(e)).then(()=>this.elementIdValue(Ln(e),t))}getViewportSize(e){return this.execute(hS).then(t=>typeof e=="string"&&e.match(/(width|height)/)?(e=`screen${e.slice(0,1).toUpperCase()}${e.slice(1)}`,t.value[e]):{width:t.value.screenWidth||0,height:t.value.screenHeight||0})}keys(e){let t=i=>Bh.hasOwnProperty(i)?[Bh[i]]:i.split(""),r=[];if(typeof e=="string")r=t(e);else if(e instanceof Array)for(let i of e)r=r.concat(t(i));else return Promise.reject(new Error("number or type of arguments don't agree with keys protocol command"));let n=()=>this.client.requestHandler.create("/session/:sessionId/keys",{value:r}),o=()=>{let i=r.map(c=>({type:"keyDown",value:c})),a=r.map(c=>({type:"keyUp",value:c}));return this.actions([{type:"key",id:"keys",actions:[...i,...a]}])};return this.w3cRequests.keys?o():this.addToQueue(()=>n().catch(i=>{if(Mr(i))return this.w3cRequests.keys=!0,o();throw i}))}elementIdValue(e,t){return this.addToQueue(()=>this.client.elementIdValue(e,t))}elementIdClear(e){return this.addToQueue(()=>this.client.elementIdClear(e))}submitForm(e){return this.addToQueue(()=>this.client.submit(Ln(e)))}buttonPress(e){return this.addToQueue(()=>this.client.buttonPress(e))}findElementAndPress(e,t,r,n){return this.moveTo(Ln(e),t,r).then(()=>this.buttonPress(n))}rightClick(e,t,r){return this.findElementAndPress(e,t,r,"right")}leftClick(e,t,r){return this.findElementAndPress(e,t,r,"left")}elementIdClick(e){return this.addToQueue(()=>this.client.elementIdClick(e))}actions(e){return this.addToQueue(()=>this.client.actions(e))}doDoubleClick(){return this.addToQueue(()=>this.client.doDoubleClick())}dragAndDrop(e,t){return this.addToQueue(()=>this.client.dragAndDrop(e,t))}buttonDown(){return this.addToQueue(()=>this.client.buttonDown())}buttonUp(){return this.addToQueue(()=>this.client.buttonUp())}moveTo(e,t,r){let n={};return typeof t=="number"&&(n.xoffset=t),typeof r=="number"&&(n.yoffset=r),this.isSafari()&&!n.hasOwnProperty("yoffset")&&(n.yoffset=1),this.isSafari()&&!n.hasOwnProperty("xoffset")&&(n.xoffset=1),typeof e=="string"&&(n.element=e),this.addToQueue(()=>this.client.requestHandler.create("/session/:sessionId/moveto",n))}uploadFile(e){return this.addToQueue(()=>this.client.uploadFile(e))}getUrl(){return this.addToQueue(()=>this.client.getUrl())}getTitle(){return this.addToQueue(()=>this.client.getTitle())}windowHandleSize(e="current",t){return this.addToQueue(()=>{let r={};typeof e=="object"&&([e,t]=["current",e]);let n={path:`/session/:sessionId/window/${e}/size`,method:"GET"};if(typeof t=="object"&&t.width&&t.height&&(n.method="POST",r={width:Math.abs(t.width),height:Math.abs(t.height)}),n.method==="POST"&&typeof r.width!="number"&&typeof r.height!="number")return Promise.reject(new Error("number or type of arguments don't agree with windowHandleSize protocol command"));let o=()=>this.client.requestHandler.create(n,r),i=()=>(n.path="/session/:sessionId/window/rect",this.client.requestHandler.create(n,r));return this.w3cRequests.windowHandleSize?i():o().catch(a=>{if(Mr(a))return this.w3cRequests.windowHandleSize=!0,i();throw a})})}setCookie(e,t,r,n,o,i,a){return this.addToQueue(()=>this.client.setCookie({name:e,value:t,domain:r,httpOnly:n,secure:o,path:i,expiry:a&&Math.floor(a)}))}getCookie(e){return this.addToQueue(()=>this.client.requestHandler.create("/session/:sessionId/cookie").then(t=>(t.value=t.value||[],typeof e=="string"?t.value.find(r=>r.name===e||r.name===encodeURIComponent(encodeURIComponent(e)))||null:t.value||(typeof e=="string"?null:[]))))}deleteCookie(e){return this.addToQueue(()=>this.client.deleteCookie(e))}isVisibleWithinViewport(e){return this.addToQueue(()=>this.client.isVisibleWithinViewport(e))}getCurrentTabId(){return this.addToQueue(()=>this.client.getCurrentTabId())}frame(e){return this.addToQueue(()=>this.client.frame(e))}switchTab(e){return this.addToQueue(()=>this.client.switchTab(e))}alertAccept(){return this.addToQueue(()=>this.client.alertAccept())}log(e="browser"){return this.addToQueue(()=>this.client.log(e))}end(){return this.w3cRequests={},this.queue?this.addToQueue(()=>this.client.end()):Promise.resolve()}forceEnd(){return this.w3cRequests={},this.client?this.client.end():Promise.resolve()}touchPerform(e){return this.addToQueue(()=>this.client.touchPerform(e))}touchAction(e){return this.addToQueue(()=>this.client.touchAction(e))}pressKeycode(e){return this.addToQueue(()=>this.client.pressKeycode(e))}setImmediateValue(e,t){return this.addToQueue(()=>this.client.setImmediateValue(e,t))}elementIdText(e){return this.addToQueue(()=>this.client.elementIdText(e)).then(t=>t.value)}isAppInstalled(e){return this.addToQueue(()=>this.client.isAppInstalled(e)).then(t=>{let r=!!t.value;return xi.info(`is app (${e}) installed? ${r}`,t),r})}launch(){return this.addToQueue(()=>this.client.launch())}context(e){return this.addToQueue(()=>this.client.context(e))}elementIdLocation(e){return this.addToQueue(()=>this.client.elementIdLocation(e))}};Wh.exports=Ou});var qh={};$(qh,{doubleClick:()=>gS});var gS,Vh=T(()=>{"use strict";gS=function(s,e){let t=["pointerup","pointerdown","pointermove"],r=getLocatedElement(s.locatedElement);if(!r)throw new Error("element not found");let n=s.events,o={status:"done",success:!0};window.__unloadNavigator=function(){e(o)};let i=function(p){function f(C,b,v){return v>C&&v<b}let h=p.pointerPosition||{},g=r.getBoundingClientRect(),y=h.originX&&f(g.left,g.left+g.width,h.originX)?h.originX:g.left+g.width/2,w=h.originY&&f(g.top,g.top+g.height,h.originY)?h.originY:g.top+g.height/2;return{x:y,y:w}},a=function(p,f){return{screenX:0,screenY:0,clientX:p,clientY:f,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,bubbles:!0,cancelable:!0,button:0,pointerType:"mouse",isPrimary:!0}},c=function(p,f,h){if(!window.PointerEvent)return;let g=a(f,h);return new window.PointerEvent(p,g)},l=function(p,f,h){let g=document.createEvent("MouseEvents");return g.initMouseEvent(p,!0,!0,document.defaultView,1,0,0,f,h,!1,!1,!1,!1,0,document.body?document.body.parentNode:document.documentElement),g},d=function(){var f;let p=document.activeElement;for(;(f=p.shadowRoot)!=null&&f.activeElement;)p=p.shadowRoot.activeElement;return p},m=function(p){let f=i(p),h=p.event;return t.includes(h)?c(h,f.x,f.y):l(h,f.x,f.y)};try{n.map(f=>m(f)).filter(Boolean).forEach(f=>r.dispatchEvent(f));let p=d();dispatchFocus(s.elementToFocusLocatedElement,p),window.__unloadNavigator&&(window.removeEventListener("unload",window.__unloadNavigator),window.__unloadNavigator=null),e(o)}catch(p){window.__unloadNavigator&&(window.removeEventListener("unload",window.__unloadNavigator),window.__unloadNavigator=null),e({status:"done",result:p.toString(),success:!1})}}});var Hh={};$(Hh,{dispatchFocus:()=>Ss});function Ss(s,e){function t(o){let i=document.createEvent("HTMLEvents");return i.initEvent(o,!0,!1),i}function r(){var i;let o=document.activeElement;for(;(i=o.shadowRoot)!=null&&i.activeElement;)o=o.shadowRoot.activeElement;return o}function n(o,i){i&&(i.dispatchEvent(t("focusout")),i.dispatchEvent(t("blur"))),o.dispatchEvent(t("focusin")),o.dispatchEvent(t("focus")),typeof o.focus=="function"&&o.focus();let a=r();i&&a===i&&typeof i.blur=="function"&&i.blur()}if(s){let o=getLocatedElement(s);if(o&&o!==e)try{n(o,e)}catch{}}else e&&typeof e.blur=="function"&&e.blur()}var Pi=T(()=>{"use strict"});var Nn=Kd((SC,Kh)=>{"use strict";var Ur=require("lodash"),$e=(j(),G(Js)).getLogger("webdriver"),yS=require("ua-parser-js"),bS=(Ii(),G(Ri)),{SeleniumError:wS,SeleniumCrashError:TS}=(z(),G(uc)),Lu=(F(),G(H)),vS=Gh(),{doubleClick:ES}=(Vh(),G(qh)),{dispatchFocus:SS}=(Pi(),G(Hh)),{isOldProtocol:Fr}=(ku(),G(Au)),{featureFlagsService:RS}=(be(),G(Lf)),{W3C_ELEMENT_ID:IS}=(Yr(),G(Ba)),[er,xS]=[0,2],{extractElementId:It,getCdpAddressForHost:PS}=Lu,Ci=(Le(),G(Oe)),{SeleniumPerfStats:CS,SELENIUM_PERF_MARKS:jr}=(Ts(),G(bi)),tr=()=>(Ee(),G(_r)).getSessionPlayer().codeSnippets,AS=()=>(Ee(),G(_r)).getSessionPlayer().locatorBuilderUtils,zh=()=>(Ee(),G(_r)).getSessionPlayer().utils;async function kS(s){var e,t;try{let r=(t=(e=s==null?void 0:s.value)==null?void 0:e["goog:chromeOptions"])==null?void 0:t.debuggerAddress;return r?await PS(r):void 0}catch(r){$e.info("Error getting cdpAddress",r);return}}var Nu=class extends vS{constructor(){super(),this.started=!1,this.keepAliveTimer=null,this.unsupportedActions={},this._isAlive=!1,this._keepAliveRequests=[],this.cdpUrl=void 0,this.browserClosedCallbacks=[],this.browserClosedFailedKeepAlives=0,this.ignoreHiddenTagsText=!1}registerToClosedBrowser(e){this.browserClosedCallbacks.push(e)}unregisterToClosedBrowser(e){this.browserClosedCallbacks=this.browserClosedCallbacks.filter(t=>t!==e)}async init(e,t,r,n,o,i,a,c=new CS,l=!1,d){var h,g,y,w,C;this.browserClosedFailedKeepAlives=0,this.ignoreHiddenTagsText=(y=(g=(h=e==null?void 0:e.company)==null?void 0:h.activePlan)==null?void 0:g.premiumFeatures)==null?void 0:y.ignoreHiddenTagsText,this.browserClosedCallbacks=[];let m=bS.buildSeleniumOptions(e,t,r,n,o,i,a,d);m.desiredCapabilities&&delete m.desiredCapabilities.marionette,m.capabilities&&delete m.capabilities.alwaysMatch.marionette,this.initUnsupportedActions(d==null?void 0:d.isLambdatestRun()),this.browserAndOS=null,this.seleniumPerfStats=c;let p=l?0:1500,f=l?()=>{}:()=>this.executeJS("window.focus()");try{Ci.log("before initClient in webdriver.js init");let b=await this.initClient(m,t,a);Ci.log("after initResult before getCdpAddress in init"),this.cdpUrl=await kS(b),Ci.log("after getCdpAddress in webdriver.js init"),$e.info(`init new session testName: ${t}`,{sessionId:this.getSessionId(),testResultId:a}),await Lu.delay(p),await f(),Ci.log("after focus and delay in webdriver.js init")}catch(b){if($e.error("failed to init webdriver",{err:b}),b.seleniumStack){let v=new wS(b.seleniumStack),I=((C=(w=e==null?void 0:e.company)==null?void 0:w.activePlan)==null?void 0:C.plan)==="free";throw v.message.includes("timed out waiting for a node")&&I?new Error("Our free grids are in full capacity, please try again or upgrade to our Professional plan"):v}throw new Error("failed to init client driver")}}initUnsupportedActions(e){e&&(this.unsupportedActions={...this.unsupportedActions,move:!0})}isAlive(){return this._isAlive}maxKeepAliveGap(){let e=n=>Ur.zip(Ur.dropRight(n,1),Ur.drop(n,1)),t=this._keepAliveRequests.map(({start:n})=>n).filter(Boolean),r=e(t).map(([n,o])=>o-n);return Math.max(...r)}isClosedBrowserError(e){return!e||!e.seleniumStack||!e.message?!1:e.seleniumStack.type==="UnknownError"&&(e.message.includes("CLIENT_STOPPED_SESSION")||e.message.includes("BROWSER_TIMEOUT")||e.message.includes("was terminated due to TIMEOUT"))||e.seleniumStack.type==="NoSuchWindow"&&e.message.includes("window was already closed")||e.seleniumStack.type==="SelectorTimeoutError"&&e.message.includes("chrome not reachable")}start(){if(this.started)return;this.started=!0;let e=this,t=function(){function r(a){e._keepAliveRequests.push({start:Date.now(),id:a})}function n(a,c){(e._keepAliveRequests.find(l=>l.id===c)||{})[a]=Date.now()}function o(){return window.getTestimStatus&&window.getTestimStatus()}if(e.queue.getQueueLength()>0)return Promise.resolve();let i=Lu.guid();return r(i),e.executeJS(o).then(()=>{e._isAlive=!0,n("end",i),e.browserClosedFailedKeepAlives=0}).catch(a=>{if(n("error",i),a.seleniumStack&&a.seleniumStack.type==="UnexpectedAlertOpen")return e.browserClosedFailedKeepAlives=0,$e.warn("close unexpected alert open"),e.alertAccept().catch(c=>$e.warn("failed to click on alert",{err:c}));if($e.warn("err while getting testim status",{err:a}),e._isAlive=!1,e.isClosedBrowserError(a)){e.browserClosedFailedKeepAlives++;let c=3;e.browserClosedFailedKeepAlives>=c&&e.browserClosedCallbacks.forEach(l=>{try{l(a)}catch{}})}else e.browserClosedFailedKeepAlives=0})};this.keepAliveTimer=setInterval(t,1e4)}switchToLocatedFrame(e){return this.getElement(e).then(async t=>{let r=It(t.value);return await this.switchToFrame({ELEMENT:r,[IS]:r}),t})}switchToFrame(e){return this.frame(e)}switchToTopFrame(){return this.frame().catch(e=>{var t;throw(t=e.message)!=null&&t.includes("ECONNREFUSED")?new TS:e})}getElement(e){let t=this.seleniumPerfStats.markStart(jr.GET_ELEMENT);return typeof e=="string"||typeof e=="number"?this.getElementBySelector(`[testim_dom_element_id='${e}']`).finally(()=>this.seleniumPerfStats.markEnd(t,jr.GET_ELEMENT)):e&&e.shadowPath&&e.shadowPath.length||RS.flags.runGetElementCodeInAut.isEnabled()&&this.isSafari()?this.execute(`
28
28
  var fn = ${tr().getLocatedElementCode};
29
29
  return fn.apply(null, arguments);
30
- `,e).finally(()=>this.seleniumPerfStats.markEnd(t,Fr.GET_ELEMENT)):this.getElementBySelector(`[testim_dom_element_id='${e&&e.testimId}']`).finally(()=>this.seleniumPerfStats.markEnd(t,Fr.GET_ELEMENT))}executeJS(e,t){return this.execute(e,t)}executeJSWithArray(e,t){return t.unshift(e),this.execute.apply(this,t)}executeCodeAsync(e,t,r){return this.timeouts("script",t).then(()=>this.executeAsync(e,r))}async markDynamicParent(e,t,r){function n(o){var i=o.attributeName,a=o.attributeValue,c=getLocatedElement(o.locatedElement);if(!c)throw new Error("could not find dynamic parent");c.setAttribute(i,a)}return this.executeJS(`
30
+ `,e).finally(()=>this.seleniumPerfStats.markEnd(t,jr.GET_ELEMENT)):this.getElementBySelector(`[testim_dom_element_id='${e&&e.testimId}']`).finally(()=>this.seleniumPerfStats.markEnd(t,jr.GET_ELEMENT))}executeJS(e,t){return this.execute(e,t)}executeJSWithArray(e,t){return t.unshift(e),this.execute.apply(this,t)}executeCodeAsync(e,t,r){return this.timeouts("script",t).then(()=>this.executeAsync(e,r))}async markDynamicParent(e,t,r){function n(o){var i=o.attributeName,a=o.attributeValue,c=getLocatedElement(o.locatedElement);if(!c)throw new Error("could not find dynamic parent");c.setAttribute(i,a)}return this.executeJS(`
31
31
  var getLocatedElement = ${tr().getLocatedElementCode};
32
32
  var setDynamicParentAttribute = ${n.toString()};
33
33
  return setDynamicParentAttribute.apply(null, arguments)
34
- `,{attributeName:kS().DYNAMIC_PARENT_FIELD_NAME,attributeValue:t,locatedElement:e.locatedElement})}getLocatedElementRectWithPadding(e){function t(r){var n=getLocatedElement(r);if(!n)return null;var o=parseInt(window.getComputedStyle(n).paddingTop.replace("px",""),10)||0,i=parseInt(window.getComputedStyle(n).paddingLeft.replace("px",""),10)||0,a=n.getBoundingClientRect();return{top:Math.round(a.top+o),left:Math.round(a.left+i)}}return this.executeJS(`
34
+ `,{attributeName:AS().DYNAMIC_PARENT_FIELD_NAME,attributeValue:t,locatedElement:e.locatedElement})}getLocatedElementRectWithPadding(e){function t(r){var n=getLocatedElement(r);if(!n)return null;var o=parseInt(window.getComputedStyle(n).paddingTop.replace("px",""),10)||0,i=parseInt(window.getComputedStyle(n).paddingLeft.replace("px",""),10)||0,a=n.getBoundingClientRect();return{top:Math.round(a.top+o),left:Math.round(a.left+i)}}return this.executeJS(`
35
35
  var getLocatedElement = ${tr().getLocatedElementCode};
36
36
  var getLocation = ${t.toString()};
37
37
  return getLocation.apply(null, arguments)
@@ -39,23 +39,23 @@ ${((P=n.warnings)==null?void 0:P.join(`
39
39
  var getLocatedElement = ${tr().getLocatedElementCode};
40
40
  var getLocation = ${t.toString()};
41
41
  return getLocation.apply(null, arguments)
42
- `,e)}getElementLocation(e){return this.getLocatedElementRect(e.locatedElement)}getTargetText(e){return this.getElementTextJS(e.locatedElement)}getElementTextJS(e){function t(r,n){function o(d){if(!d.childNodes||d.childNodes.length===0)return d;var m=Array.apply(null,d.childNodes).filter(function(p){return p.nodeType===Node.ELEMENT_NODE});return m.forEach(function(p){typeof p.tagName=="string"&&p.tagName.toLowerCase()==="title"?d.removeChild(p):o(p)}),d}function i(d){var m=d.tagName;return m==="INPUT"||m==="TEXTAREA"}function a(d){try{if(d.shadowRoot&&Object.getOwnPropertyDescriptor(d.ownerDocument.defaultView.Node.prototype,"textContent").get.toString().indexOf("[native code]")===-1)return d.shadowRoot.textContent.replace(/(\r\n|\n|\r)/gm,"")}catch{}if(n&&Array.prototype.some.call(d.children,function(f){return f.hidden})){var m=d.cloneNode(!0),p=Array.prototype.filter.call(m.children,function(f){return f.hidden});return p.forEach(function(f){m.removeChild(f)}),m.textContent.replace(/(\r\n|\n|\r)/gm,"")}return d.textContent.replace(/(\r\n|\n|\r)/gm,"")}function c(d){if(i(d))return d.value;if(d instanceof SVGElement){var m=d.cloneNode(!0);return o(m).textContent.replace(/(\r\n|\n|\r)/gm,"")}else return a(d)}var u=getLocatedElement(r);return u?c(u):""}return this.executeJS(`
42
+ `,e)}getElementLocation(e){return this.getLocatedElementRect(e.locatedElement)}getTargetText(e){return this.getElementTextJS(e.locatedElement)}getElementTextJS(e){function t(r,n){function o(d){if(!d.childNodes||d.childNodes.length===0)return d;var m=Array.apply(null,d.childNodes).filter(function(p){return p.nodeType===Node.ELEMENT_NODE});return m.forEach(function(p){typeof p.tagName=="string"&&p.tagName.toLowerCase()==="title"?d.removeChild(p):o(p)}),d}function i(d){var m=d.tagName;return m==="INPUT"||m==="TEXTAREA"}function a(d){try{if(d.shadowRoot&&Object.getOwnPropertyDescriptor(d.ownerDocument.defaultView.Node.prototype,"textContent").get.toString().indexOf("[native code]")===-1)return d.shadowRoot.textContent.replace(/(\r\n|\n|\r)/gm,"")}catch{}if(n&&Array.prototype.some.call(d.children,function(f){return f.hidden})){var m=d.cloneNode(!0),p=Array.prototype.filter.call(m.children,function(f){return f.hidden});return p.forEach(function(f){m.removeChild(f)}),m.textContent.replace(/(\r\n|\n|\r)/gm,"")}return d.textContent.replace(/(\r\n|\n|\r)/gm,"")}function c(d){if(i(d))return d.value;if(d instanceof SVGElement){var m=d.cloneNode(!0);return o(m).textContent.replace(/(\r\n|\n|\r)/gm,"")}else return a(d)}var l=getLocatedElement(r);return l?c(l):""}return this.executeJS(`
43
43
  var getLocatedElement = ${tr().getLocatedElementCode};
44
44
  var extractText = ${t.toString()};
45
45
  return extractText.apply(null, arguments)
46
- `,e,this.ignoreHiddenTagsText).then(r=>r.value)}getHTML(e){let t=tr().getHtmlCode(null,e),r=this.seleniumPerfStats.markStart(Fr.GET_HTML);return this.executeJS(t).then(n=>(this.seleniumPerfStats.markEnd(r,Fr.GET_HTML),n.value)).catch(n=>{this.seleniumPerfStats.markEnd(r,Fr.GET_HTML);let o=Object.assign(new Error,{success:!1,reason:n.toString(),errorType:"internal-error"});throw this.client.requestHandler.sessionID||(o.extraInfo="Inside getHtml catch and trying to check if in quirks mode - but the session has already terminated"),o})}maximizeWithoutValidation(){return this.windowHandleMaximize()}setViewportSizeNEW(e,t){let n=function(){return{screenWidth:Math.floor(window.innerWidth||0),screenHeight:Math.floor(window.innerHeight||0)}},o=(a,c=1)=>this.windowHandleSize().then(u=>this.execute(n).then(d=>{let m=u.value.width-d.value.screenWidth,p=u.value.height-d.value.screenHeight;return this.windowHandleSize({width:a.width+m,height:a.height+p})}).then(()=>this.execute(n)).then(d=>{if(c<5&&(d.value.screenWidth!==a.width||d.value.screenHeight!==a.height))return o(a,c+1)}));if(typeof e!="object"||typeof e.width!="number"||typeof e.height!="number"||typeof t<"u"&&typeof t!="boolean")throw new Error("number or type of arguments don't agree with setViewportSize command");return(typeof t>"u"?!0:t)?o(e):this.windowHandleSize(e)}setViewportSize(e,t){var r=!0;return this.setViewportSizeNEW({width:e,height:t},r)}getBrowserMajorVersion(e){try{return parseInt(e.browser.major,10)}catch(t){return $e.error("failed to get browser version",{err:t}),0}}getBrowserAndOS(){function e(t,r){var n=t.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i)||[];if(/trident/i.test(n[1]))return"Internet Explorer "+r.major;if(n[1]==="Chrome"&&t.match(/\bOPR\/(\d+)/)!==null)return"opera";if(n[1]==="Chrome"&&t.match(/\bEdge|Edg\/(\d+)/)!==null)return"edge";n=n[2]?[n[1],n[2]]:[t.appName,t.appVersion,"-?"];var o=t.match(/version\/(\d+)/i);return o!==null&&n.splice(1,1,o[1]),n[0].toLowerCase()}return this.browserAndOS?Promise.resolve(this.browserAndOS):this.executeJS(function(){return typeof window>"u"||!window.navigator||!window.navigator.userAgent?"unknown":window.navigator.userAgent}).then(t=>{let r=t.value,n=bS(r),o=n.os;return this.browserAndOS={os:o.name+" "+o.version,browserMajor:this.getBrowserMajorVersion(n),browser:e(t.value,n.browser),userAgent:r,browserVersion:n.browser.version},this.browserAndOS})}getUserAgentInfo(){return this.executeJS(`return ${tr().getUserAgentInfo()}`).then(e=>e.value)}setValue(e,t){return super.setValue(e,t)}getRelativeMoveActions(e,t){let{rect:r,clickOffset:n}=e,o=this.inViewCenter(r),i=Math.floor(n.x-o.x),a=Math.floor(n.y-o.y);return!zh().isWithinBounds(-o.x,o.x,i)||!zh().isWithinBounds(-o.y,o.y,a)?($e.warn("using center as fallback for offset"),this.getMoveActions(0,0,t)):this.getMoveActions(i,a,t)}computeAbsoluteMovement(e){let{frameOffset:t,rect:r,clickOffset:n}=e,o=r.left+n.x+t.x,i=r.top+n.y+t.y;return{x:o,y:i}}actWithActionsAPI(e,t,r,n){let o=this.getRelativeMoveActions(e,r),i=this.getClickActions(n,t);return this.actions([{type:"pointer",id:"mouse",parameters:{pointerType:"mouse"},actions:o.concat(i)}]).catch(a=>{$e.error("tried to use element origin but failed because of visibility, trying absolute",a);let{x:c,y:u}=this.computeAbsoluteMovement(e),d=this.getMoveActions(c,u);return this.actions([{type:"pointer",id:"mouse",parameters:{pointerType:"mouse"},actions:d.concat(i)}])})}doubleClickWithActionsAPI(e,t){return this.actWithActionsAPI(t,er,e,["pointerDown","pointerUp","pointerDown","pointerUp"])}doubleClickWithJS(e){return this.executeCodeAsync(`
46
+ `,e,this.ignoreHiddenTagsText).then(r=>r.value)}getHTML(e){let t=tr().getHtmlCode(null,e),r=this.seleniumPerfStats.markStart(jr.GET_HTML);return this.executeJS(t).then(n=>(this.seleniumPerfStats.markEnd(r,jr.GET_HTML),n.value)).catch(n=>{this.seleniumPerfStats.markEnd(r,jr.GET_HTML);let o=Object.assign(new Error,{success:!1,reason:n.toString(),errorType:"internal-error"});throw this.client.requestHandler.sessionID||(o.extraInfo="Inside getHtml catch and trying to check if in quirks mode - but the session has already terminated"),o})}maximizeWithoutValidation(){return this.windowHandleMaximize()}setViewportSizeNEW(e,t){let n=function(){return{screenWidth:Math.floor(window.innerWidth||0),screenHeight:Math.floor(window.innerHeight||0)}},o=(a,c=1)=>this.windowHandleSize().then(l=>this.execute(n).then(d=>{let m=l.value.width-d.value.screenWidth,p=l.value.height-d.value.screenHeight;return this.windowHandleSize({width:a.width+m,height:a.height+p})}).then(()=>this.execute(n)).then(d=>{if(c<5&&(d.value.screenWidth!==a.width||d.value.screenHeight!==a.height))return o(a,c+1)}));if(typeof e!="object"||typeof e.width!="number"||typeof e.height!="number"||typeof t<"u"&&typeof t!="boolean")throw new Error("number or type of arguments don't agree with setViewportSize command");return(typeof t>"u"?!0:t)?o(e):this.windowHandleSize(e)}setViewportSize(e,t){var r=!0;return this.setViewportSizeNEW({width:e,height:t},r)}getBrowserMajorVersion(e){try{return parseInt(e.browser.major,10)}catch(t){return $e.error("failed to get browser version",{err:t}),0}}getBrowserAndOS(){function e(t,r){var n=t.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i)||[];if(/trident/i.test(n[1]))return"Internet Explorer "+r.major;if(n[1]==="Chrome"&&t.match(/\bOPR\/(\d+)/)!==null)return"opera";if(n[1]==="Chrome"&&t.match(/\bEdge|Edg\/(\d+)/)!==null)return"edge";n=n[2]?[n[1],n[2]]:[t.appName,t.appVersion,"-?"];var o=t.match(/version\/(\d+)/i);return o!==null&&n.splice(1,1,o[1]),n[0].toLowerCase()}return this.browserAndOS?Promise.resolve(this.browserAndOS):this.executeJS(function(){return typeof window>"u"||!window.navigator||!window.navigator.userAgent?"unknown":window.navigator.userAgent}).then(t=>{let r=t.value,n=yS(r),o=n.os;return this.browserAndOS={os:o.name+" "+o.version,browserMajor:this.getBrowserMajorVersion(n),browser:e(t.value,n.browser),userAgent:r,browserVersion:n.browser.version},this.browserAndOS})}getUserAgentInfo(){return this.executeJS(`return ${tr().getUserAgentInfo()}`).then(e=>e.value)}setValue(e,t){return super.setValue(e,t)}getRelativeMoveActions(e,t){let{rect:r,clickOffset:n}=e,o=this.inViewCenter(r),i=Math.floor(n.x-o.x),a=Math.floor(n.y-o.y);return!zh().isWithinBounds(-o.x,o.x,i)||!zh().isWithinBounds(-o.y,o.y,a)?($e.warn("using center as fallback for offset"),this.getMoveActions(0,0,t)):this.getMoveActions(i,a,t)}computeAbsoluteMovement(e){let{frameOffset:t,rect:r,clickOffset:n}=e,o=r.left+n.x+t.x,i=r.top+n.y+t.y;return{x:o,y:i}}actWithActionsAPI(e,t,r,n){let o=this.getRelativeMoveActions(e,r),i=this.getClickActions(n,t);return this.actions([{type:"pointer",id:"mouse",parameters:{pointerType:"mouse"},actions:o.concat(i)}]).catch(a=>{$e.error("tried to use element origin but failed because of visibility, trying absolute",a);let{x:c,y:l}=this.computeAbsoluteMovement(e),d=this.getMoveActions(c,l);return this.actions([{type:"pointer",id:"mouse",parameters:{pointerType:"mouse"},actions:d.concat(i)}])})}doubleClickWithActionsAPI(e,t){return this.actWithActionsAPI(t,er,e,["pointerDown","pointerUp","pointerDown","pointerUp"])}doubleClickWithJS(e){return this.executeCodeAsync(`
47
47
  var getLocatedElement = ${tr().getLocatedElementCode};
48
- var dispatchFocus = ${RS.toString()};
49
- var doubleClick = ${SS.toString()};
48
+ var dispatchFocus = ${SS.toString()};
49
+ var doubleClick = ${ES.toString()};
50
50
  var eventData = arguments[0];
51
51
  var done = arguments[1];
52
52
  return doubleClick.call(null, eventData, done);
53
- `,e.timeout,e)}getClickActions(e=[],t){return e.map(r=>({type:r,button:t}))}getClickActionList(e=[],t){return[{type:"pointer",id:"mouse",actions:this.getClickActions(e,t)}]}leftClickWithActionsAPI(e,t){return this.actWithActionsAPI(t,er,e,["pointerDown","pointerUp"])}rightClickWithActionsAPI(e,t){return this.actWithActionsAPI(t,CS,e,["pointerDown","pointerUp"])}rightClick(e,t){return this.unsupportedActions.move?this.rightClickWithActionsAPI(e,t):super.rightClick(e).catch(r=>{if(Ur(r))return this.unsupportedActions.move=!0,this.rightClickWithActionsAPI(e,t);throw r})}leftClick(e,t){return this.unsupportedActions.move?this.leftClickWithActionsAPI(e,t):super.leftClick(e).catch(r=>{if(Ur(r))return this.unsupportedActions.move=!0,this.leftClickWithActionsAPI(e,t);throw r})}dragAndDropOldAPI(e,t){return this.moveTo(It(e)).then(()=>this.buttonDown()).then(()=>this.moveTo(It(t))).then(()=>this.buttonUp())}calculateElementMiddlePoint(e,t={top:0,left:0}){return this.getLocatedElementRect(e).then(r=>{if(!r||!r.value)throw $e.warn(`could not find element for locatedElement ${e}`),new Error("could not calculate rect");let{x:n,y:o,width:i,height:a}=r.value;return{x:t.left+n+i/2,y:t.top+o+a/2}})}hover(e,t){if(this.unsupportedActions.move)return this.moveToElementWithActionsAPI(e,t);let{rect:r,clickOffset:n}=t,o=this.inViewCenter(r),i=Math.floor(n.x-o.x),a=Math.floor(n.y-o.y);return this.moveTo(It(e),i,a).catch(c=>{if(Ur(c))return this.unsupportedActions.move=!0,this.moveToElementWithActionsAPI(e,t);throw c})}getMoveActions(e=1,t=1,r="viewport",n=0){return[{type:"pointerMove",duration:n,x:Math.floor(e)||1,y:Math.floor(t)||1,origin:r}]}moveWithActionsAPI(e){let t=this.getMoveActions(e.x,e.y);return this.actions([{type:"pointer",id:"mouse",actions:t}])}moveToElementWithActionsAPI(e,t){return this.actions([{type:"pointer",id:"mouse",actions:this.getRelativeMoveActions(t,e)}]).catch(r=>{$e.error("tried to use element origin but failed because of visibility, trying location",r);let n=this.computeAbsoluteMovement(t);return this.moveWithActionsAPI(n)})}getDragCoordinates(e){let t=e.filter(o=>o.event==="mousemove"||o.event==="pointermove"),r=Mr.first(t).pointerPosition,n=Mr.last(t).pointerPosition;return{xDiff:n.screenX-r.screenX,yDiff:n.screenY-r.screenY}}dragWithMoveTo(e,t,r,n,o){return this.moveTo(It(e),n,o).then(()=>this.buttonDown()).then(()=>this.moveTo(It(e),t,r)).then(()=>this.buttonUp())}dragWithActionsAPI(e,t,r,n,o){let i=this.getMoveActions(n,o,e,1),a=this.getClickActions(["pointerDown"],er),c=this.getMoveActions(t,r,"pointer",1),u=this.getClickActions(["pointerUp"],er);return this.actions([{type:"pointer",id:"mouse",actions:i.concat(a).concat(c).concat(u)}])}drag(e,t,r,n,o){let{width:i,height:a}=t,c=r-i/2+1,u=n-a/2;return this.getDragCoordinates(o).then(d=>{let{xDiff:m,yDiff:p}=d;return this.unsupportedActions.move?this.dragWithActionsAPI(e,m,p,c,u):this.dragWithMoveTo(e,m,p,c,u).catch(f=>{if(Ur(f))return this.unsupportedActions.move=!0,this.dragWithActionsAPI(e,m,p,c,u);throw f})})}getMoveRelativeSequence(e,t,r,n){let o=p=>p*p,i=(p,f)=>Math.sqrt(o(p.x-f.x)+o(p.y-f.y)),a={x:e,y:t},c={x:r,y:n},u=10,d=Math.round(i(a,c)/u),m=Array.apply([],new Array(d)).map(()=>({x:Math.round((c.x-a.x)/d),y:Math.round((c.y-a.y)/d)}));return[{x:1,y:1}].concat(m)}getMoveAbsoluteSequence(e,t,r,n){return this.getMoveRelativeSequence(e,t,r,n).reduce((i,a)=>{let c=Mr.last(i);return i.concat({x:Math.round(c.x+a.x),y:Math.round(c.y+a.y)})},[{x:Math.round(e),y:Math.round(t)}])}async dragAndDropWithGeneratedMoves(e,t,r){let{fromRect:n,fromX:o,fromY:i,toRect:a,toX:c,toY:u}=r,d=this.getMoveRelativeSequence(n.left+o,n.top+i,a.left+c,a.top+u);await this.moveTo(It(e),Math.round(o),Math.round(i)),await this.buttonDown();for(let m of d)await this.moveTo(null,m.x,m.y);return await this.moveTo(It(t),Math.round(c),Math.round(u)),await this.buttonUp()}dragAndDropWithActionsAPIWithGeneratedMoves(e){let{fromRect:t,fromX:r,fromY:n,toRect:o,toX:i,toY:a}=e,c=Math.round(t.left+r),u=Math.round(t.top+n),d=Math.round(o.left+i),m=Math.round(o.top+a),p=this.getMoveAbsoluteSequence(t.left+r,t.top+n,o.left+i,o.top+a),f=this.getMoveActions(c,u),h=this.getClickActions(["pointerDown"],er),g=Mr.flatMap(p,b=>this.getMoveActions(b.x,b.y)),y=this.getMoveActions(d,m),w=this.getClickActions(["pointerUp"],er),P=f.concat(h).concat(g).concat(y).concat(w);return this.actions([{type:"pointer",id:"mouse",actions:P}])}dragAndDrop(e,t,r){return this.isSafari()?this.unsupportedActions.move?this.dragAndDropWithActionsAPIWithGeneratedMoves(r):this.dragAndDropWithGeneratedMoves(e,t,r).catch(n=>{if(Ur(n))return this.unsupportedActions.move=!0,this.dragAndDropWithActionsAPIWithGeneratedMoves(r);throw n}):this.unsupportedActions.move?this.dragAndDropWithActionsAPI(r):this.dragAndDropOldAPI(e,t).catch(n=>{if(Ur(n))return this.unsupportedActions.move=!0,this.dragAndDropWithActionsAPI(r);throw n})}doubleClickFallback(e,t,r){return this.isSafari()?this.doubleClickWithJS(t):this.doubleClickWithActionsAPI(e,r)}doubleClick(e,t,r){return this.unsupportedActions.move||this.isSafari()?this.doubleClickFallback(e,t,r):this.moveTo(It(e)).then(()=>this.doDoubleClick()).catch(n=>{if(Ur(n))return this.unsupportedActions.move=!0,this.doubleClickFallback(e,t,r);throw n})}dragAndDropWithActionsAPI(e){let{fromRect:t,fromX:r,fromY:n,toRect:o,toX:i,toY:a}=e,c=Math.round(t.left+r),u=Math.round(t.top+n),d=Math.round(o.left+i),m=Math.round(o.top+a);return this.moveWithActionsAPI({x:c,y:u}).then(()=>{let p=this.getClickActionList(["pointerDown"],er);return this.actions(p)}).then(()=>this.moveWithActionsAPI({x:d,y:m})).then(()=>{let p=this.getClickActionList(["pointerUp"],er);return this.actions(p)})}getTabIds(){return this.windowHandles().then(e=>e.value)}isVisible(e){return this.elementIdDisplayed(It(e)).then(t=>t.value)}getSource(){return this.source()}getElementRect(e){let t={width:0,height:0,top:0,left:0};return this.getElementLocation(e).catch(r=>$e.error("error getting element location",{err:r})).then(r=>r!=null&&r.value?{top:r.value.y,left:r.value.x,width:r.value.width,height:r.value.height}:t)}end(){return $e.info("delete session",{sessionId:this.getSessionId()}),this.getSessionId()||$e.warn("failed to close session because session is undefined"),clearInterval(this.keepAliveTimer),super.end().catch(()=>{})}inViewCenter(e){return{x:e.width/2,y:e.height/2}}};Kh.exports=Nu});var Du,Mu,Pi,Uu=T(()=>{"use strict";j();be();Te();Du=x("lab-features-service"),Mu=class{constructor(){this.featuresForProject=[];this.labBatman=!1}async loadLabFeatures(e,t){(!t||!e)&&(Du.error("missing companyPlan or projectId when loading lab features",{companyPlan:t,projectId:e}),this.featuresForProject=[]);try{let r=this.isLabsEnabledForCompany(t),n=r?await dl(e):[];this.featuresForProject=n,this.labBatman=r}catch(r){Du.error("failed loading lab features",{err:r,companyPlan:t,projectId:e}),this.featuresForProject=[]}}isFeatureAvailableForProject(e){let t=M.flags[e];this.validateAsLabFeatureFlag(t);let r=t.getValue();if(r==="disabled")return!1;if(r==="enabled")return!0;let{featuresForProject:n,labBatman:o}=this,i=n.find(c=>c.featureFlagName===e),a=i==null?void 0:i.enabled;return Boolean(o&&a)}isLabsEnabledForCompany(e){var t;return Boolean((t=e==null?void 0:e.premiumFeatures)==null?void 0:t.enableLabFeatures)}validateAsLabFeatureFlag(e){if("getValue"in e)return;let t=`Attempted querying a lab feature flag which isn't a variant. This means that a wrong configuration is being used in FeatureFlagsService (for feature flag: ${e.name}`;throw Du.error(t,{featureFlagName:e.name}),new Error(t)}},Pi=new Mu});function Xh(s){let e=/^\\\\\?\\/.test(s),t=/[^\u0000-\u0080]+/.test(s);return e||t?s:s.replace(/\\/g,"/")}function OS(s,e,t,r,n={},o=void 0,i=void 0){let a=Object.keys(n).reduce((g,y)=>(g+=`
53
+ `,e.timeout,e)}getClickActions(e=[],t){return e.map(r=>({type:r,button:t}))}getClickActionList(e=[],t){return[{type:"pointer",id:"mouse",actions:this.getClickActions(e,t)}]}leftClickWithActionsAPI(e,t){return this.actWithActionsAPI(t,er,e,["pointerDown","pointerUp"])}rightClickWithActionsAPI(e,t){return this.actWithActionsAPI(t,xS,e,["pointerDown","pointerUp"])}rightClick(e,t){return this.unsupportedActions.move?this.rightClickWithActionsAPI(e,t):super.rightClick(e).catch(r=>{if(Fr(r))return this.unsupportedActions.move=!0,this.rightClickWithActionsAPI(e,t);throw r})}leftClick(e,t){return this.unsupportedActions.move?this.leftClickWithActionsAPI(e,t):super.leftClick(e).catch(r=>{if(Fr(r))return this.unsupportedActions.move=!0,this.leftClickWithActionsAPI(e,t);throw r})}dragAndDropOldAPI(e,t){return this.moveTo(It(e)).then(()=>this.buttonDown()).then(()=>this.moveTo(It(t))).then(()=>this.buttonUp())}calculateElementMiddlePoint(e,t={top:0,left:0}){return this.getLocatedElementRect(e).then(r=>{if(!r||!r.value)throw $e.warn(`could not find element for locatedElement ${e}`),new Error("could not calculate rect");let{x:n,y:o,width:i,height:a}=r.value;return{x:t.left+n+i/2,y:t.top+o+a/2}})}hover(e,t){if(this.unsupportedActions.move)return this.moveToElementWithActionsAPI(e,t);let{rect:r,clickOffset:n}=t,o=this.inViewCenter(r),i=Math.floor(n.x-o.x),a=Math.floor(n.y-o.y);return this.moveTo(It(e),i,a).catch(c=>{if(Fr(c))return this.unsupportedActions.move=!0,this.moveToElementWithActionsAPI(e,t);throw c})}getMoveActions(e=1,t=1,r="viewport",n=0){return[{type:"pointerMove",duration:n,x:Math.floor(e)||1,y:Math.floor(t)||1,origin:r}]}moveWithActionsAPI(e){let t=this.getMoveActions(e.x,e.y);return this.actions([{type:"pointer",id:"mouse",actions:t}])}moveToElementWithActionsAPI(e,t){return this.actions([{type:"pointer",id:"mouse",actions:this.getRelativeMoveActions(t,e)}]).catch(r=>{$e.error("tried to use element origin but failed because of visibility, trying location",r);let n=this.computeAbsoluteMovement(t);return this.moveWithActionsAPI(n)})}getDragCoordinates(e){let t=e.filter(o=>o.event==="mousemove"||o.event==="pointermove"),r=Ur.first(t).pointerPosition,n=Ur.last(t).pointerPosition;return{xDiff:n.screenX-r.screenX,yDiff:n.screenY-r.screenY}}dragWithMoveTo(e,t,r,n,o){return this.moveTo(It(e),n,o).then(()=>this.buttonDown()).then(()=>this.moveTo(It(e),t,r)).then(()=>this.buttonUp())}dragWithActionsAPI(e,t,r,n,o){let i=this.getMoveActions(n,o,e,1),a=this.getClickActions(["pointerDown"],er),c=this.getMoveActions(t,r,"pointer",1),l=this.getClickActions(["pointerUp"],er);return this.actions([{type:"pointer",id:"mouse",actions:i.concat(a).concat(c).concat(l)}])}drag(e,t,r,n,o){let{width:i,height:a}=t,c=r-i/2+1,l=n-a/2;return this.getDragCoordinates(o).then(d=>{let{xDiff:m,yDiff:p}=d;return this.unsupportedActions.move?this.dragWithActionsAPI(e,m,p,c,l):this.dragWithMoveTo(e,m,p,c,l).catch(f=>{if(Fr(f))return this.unsupportedActions.move=!0,this.dragWithActionsAPI(e,m,p,c,l);throw f})})}getMoveRelativeSequence(e,t,r,n){let o=p=>p*p,i=(p,f)=>Math.sqrt(o(p.x-f.x)+o(p.y-f.y)),a={x:e,y:t},c={x:r,y:n},l=10,d=Math.round(i(a,c)/l),m=Array.apply([],new Array(d)).map(()=>({x:Math.round((c.x-a.x)/d),y:Math.round((c.y-a.y)/d)}));return[{x:1,y:1}].concat(m)}getMoveAbsoluteSequence(e,t,r,n){return this.getMoveRelativeSequence(e,t,r,n).reduce((i,a)=>{let c=Ur.last(i);return i.concat({x:Math.round(c.x+a.x),y:Math.round(c.y+a.y)})},[{x:Math.round(e),y:Math.round(t)}])}async dragAndDropWithGeneratedMoves(e,t,r){let{fromRect:n,fromX:o,fromY:i,toRect:a,toX:c,toY:l}=r,d=this.getMoveRelativeSequence(n.left+o,n.top+i,a.left+c,a.top+l);await this.moveTo(It(e),Math.round(o),Math.round(i)),await this.buttonDown();for(let m of d)await this.moveTo(null,m.x,m.y);return await this.moveTo(It(t),Math.round(c),Math.round(l)),await this.buttonUp()}dragAndDropWithActionsAPIWithGeneratedMoves(e){let{fromRect:t,fromX:r,fromY:n,toRect:o,toX:i,toY:a}=e,c=Math.round(t.left+r),l=Math.round(t.top+n),d=Math.round(o.left+i),m=Math.round(o.top+a),p=this.getMoveAbsoluteSequence(t.left+r,t.top+n,o.left+i,o.top+a),f=this.getMoveActions(c,l),h=this.getClickActions(["pointerDown"],er),g=Ur.flatMap(p,b=>this.getMoveActions(b.x,b.y)),y=this.getMoveActions(d,m),w=this.getClickActions(["pointerUp"],er),C=f.concat(h).concat(g).concat(y).concat(w);return this.actions([{type:"pointer",id:"mouse",actions:C}])}dragAndDrop(e,t,r){return this.isSafari()?this.unsupportedActions.move?this.dragAndDropWithActionsAPIWithGeneratedMoves(r):this.dragAndDropWithGeneratedMoves(e,t,r).catch(n=>{if(Fr(n))return this.unsupportedActions.move=!0,this.dragAndDropWithActionsAPIWithGeneratedMoves(r);throw n}):this.unsupportedActions.move?this.dragAndDropWithActionsAPI(r):this.dragAndDropOldAPI(e,t).catch(n=>{if(Fr(n))return this.unsupportedActions.move=!0,this.dragAndDropWithActionsAPI(r);throw n})}doubleClickFallback(e,t,r){return this.isSafari()?this.doubleClickWithJS(t):this.doubleClickWithActionsAPI(e,r)}doubleClick(e,t,r){return this.unsupportedActions.move||this.isSafari()?this.doubleClickFallback(e,t,r):this.moveTo(It(e)).then(()=>this.doDoubleClick()).catch(n=>{if(Fr(n))return this.unsupportedActions.move=!0,this.doubleClickFallback(e,t,r);throw n})}dragAndDropWithActionsAPI(e){let{fromRect:t,fromX:r,fromY:n,toRect:o,toX:i,toY:a}=e,c=Math.round(t.left+r),l=Math.round(t.top+n),d=Math.round(o.left+i),m=Math.round(o.top+a);return this.moveWithActionsAPI({x:c,y:l}).then(()=>{let p=this.getClickActionList(["pointerDown"],er);return this.actions(p)}).then(()=>this.moveWithActionsAPI({x:d,y:m})).then(()=>{let p=this.getClickActionList(["pointerUp"],er);return this.actions(p)})}getTabIds(){return this.windowHandles().then(e=>e.value)}isVisible(e){return this.elementIdDisplayed(It(e)).then(t=>t.value)}getSource(){return this.source()}getElementRect(e){let t={width:0,height:0,top:0,left:0};return this.getElementLocation(e).catch(r=>$e.error("error getting element location",{err:r})).then(r=>r!=null&&r.value?{top:r.value.y,left:r.value.x,width:r.value.width,height:r.value.height}:t)}end(){return $e.info("delete session",{sessionId:this.getSessionId()}),this.getSessionId()||$e.warn("failed to close session because session is undefined"),clearInterval(this.keepAliveTimer),super.end().catch(()=>{})}inViewCenter(e){return{x:e.width/2,y:e.height/2}}};Kh.exports=Nu});var Du,Mu,Ai,Uu=T(()=>{"use strict";j();be();Te();Du=x("lab-features-service"),Mu=class{constructor(){this.featuresForProject=[];this.labBatman=!1}async loadLabFeatures(e,t){(!t||!e)&&(Du.error("missing companyPlan or projectId when loading lab features",{companyPlan:t,projectId:e}),this.featuresForProject=[]);try{let r=this.isLabsEnabledForCompany(t),n=r?await dl(e):[];this.featuresForProject=n,this.labBatman=r}catch(r){Du.error("failed loading lab features",{err:r,companyPlan:t,projectId:e}),this.featuresForProject=[]}}isFeatureAvailableForProject(e){let t=U.flags[e];this.validateAsLabFeatureFlag(t);let r=t.getValue();if(r==="disabled")return!1;if(r==="enabled")return!0;let{featuresForProject:n,labBatman:o}=this,i=n.find(c=>c.featureFlagName===e),a=i==null?void 0:i.enabled;return Boolean(o&&a)}isLabsEnabledForCompany(e){var t;return Boolean((t=e==null?void 0:e.premiumFeatures)==null?void 0:t.enableLabFeatures)}validateAsLabFeatureFlag(e){if("getValue"in e)return;let t=`Attempted querying a lab feature flag which isn't a variant. This means that a wrong configuration is being used in FeatureFlagsService (for feature flag: ${e.name}`;throw Du.error(t,{featureFlagName:e.name}),new Error(t)}},Ai=new Mu});function Xh(s){let e=/^\\\\\?\\/.test(s),t=/[^\u0000-\u0080]+/.test(s);return e||t?s:s.replace(/\\/g,"/")}function _S(s,e,t,r,n={},o=void 0,i=void 0){let a=Object.keys(n).reduce((g,y)=>(g+=`
54
54
  var ${y} = require('${Xh(n[y])}');
55
55
  `,g),""),c=i?`
56
56
  ${ju.default.toString()}
57
57
  var fileBuffer = dataUriToBuffer('${i}');
58
- `:"var fileBuffer = null;";function u(g,y){function w(){return g.apply(this,y)}return w.prototype=g.prototype,new w}let d=`
58
+ `:"var fileBuffer = null;";function l(g,y){function w(){return g.apply(this,y)}return w.prototype=g.prototype,new w}let d=`
59
59
 
60
60
  const getMessage = arguments => {
61
61
  const args = Array.prototype.slice.call(arguments);
@@ -107,7 +107,7 @@ ${((P=n.warnings)==null?void 0:P.join(`
107
107
  });
108
108
  `,m=`
109
109
  function injectCode(params, args, incomingParams, context, code, done) {
110
- var constructWithArguments = ${u.toString()}
110
+ var constructWithArguments = ${l.toString()}
111
111
 
112
112
  var resolve = function (result) {
113
113
  done({
@@ -197,17 +197,17 @@ ${((P=n.warnings)==null?void 0:P.join(`
197
197
  ${m}
198
198
 
199
199
  injectCode(params, args, incomingParams, context, code, done);
200
- `,f=[],h=(0,Ai.spawn)(u(Function,["input","done","progress",p]));return re(new Promise(g=>{h.send({incomingParams:e,context:t,code:r}).on("message",y=>{let w=Object.assign({},y,{tstConsoleLogs:f});De.debug("Run code worker response",{messageWithLogs:w,transactionId:s}),g(w)}).on("progress",y=>{f.push(y)}).on("error",y=>{y.message==="malformed data: URI"?De.error("Run code worker error",{err:y,transactionId:s,fileDataUrl:i}):De.error("Run code worker error",{err:y,transactionId:s}),g({tstConsoleLogs:f,status:"failed",result:{resultValue:y==null?void 0:y.toString(),exports:{},exportsTest:{},exportsGlobal:{}},success:!1})}).on("exit",()=>{De.debug("Run code worker has been terminated",{transactionId:s})})}),o).catch(g=>{if(!(g instanceof X))throw g;return De.warn("timeout to run code",{transactionId:s,err:g}),{tstConsoleLogs:f,status:"failed",result:{resultValue:g==null?void 0:g.toString(),exports:{},exportsTest:{},exportsGlobal:{}},success:!1}}).finally(()=>h==null?void 0:h.kill())}function LS(s){try{return{sync:!0,lib:globalThis.require(s)}}catch(e){if(e.code==="ERR_REQUIRE_ESM"){let t=globalThis.require("path");return{sync:!1,lib:Fu.promises.readFile(`${Rs}${t.sep}package.json`).then(n=>{let o=JSON.parse(n);return import(t.join(s,o.main||`${t.sep}index.js`))})}}throw e}}function NS(s,e,t,r,n={},o=void 0,i=void 0){jr||(jr=require("worker_threads"));let{Worker:a}=jr,c=Object.keys(n).reduce((y,w)=>(y+=`
200
+ `,f=[],h=(0,ki.spawn)(l(Function,["input","done","progress",p]));return re(new Promise(g=>{h.send({incomingParams:e,context:t,code:r}).on("message",y=>{let w=Object.assign({},y,{tstConsoleLogs:f});De.debug("Run code worker response",{messageWithLogs:w,transactionId:s}),g(w)}).on("progress",y=>{f.push(y)}).on("error",y=>{y.message==="malformed data: URI"?De.error("Run code worker error",{err:y,transactionId:s,fileDataUrl:i}):De.error("Run code worker error",{err:y,transactionId:s}),g({tstConsoleLogs:f,status:"failed",result:{resultValue:y==null?void 0:y.toString(),exports:{},exportsTest:{},exportsGlobal:{}},success:!1})}).on("exit",()=>{De.debug("Run code worker has been terminated",{transactionId:s})})}),o).catch(g=>{if(!(g instanceof X))throw g;return De.warn("timeout to run code",{transactionId:s,err:g}),{tstConsoleLogs:f,status:"failed",result:{resultValue:g==null?void 0:g.toString(),exports:{},exportsTest:{},exportsGlobal:{}},success:!1}}).finally(()=>h==null?void 0:h.kill())}function OS(s){try{return{sync:!0,lib:globalThis.require(s)}}catch(e){if(e.code==="ERR_REQUIRE_ESM"){let t=globalThis.require("path");return{sync:!1,lib:Fu.promises.readFile(`${Rs}${t.sep}package.json`).then(n=>{let o=JSON.parse(n);return import(t.join(s,o.main||`${t.sep}index.js`))})}}throw e}}function LS(s,e,t,r,n={},o=void 0,i=void 0){Br||(Br=require("worker_threads"));let{Worker:a}=Br,c=Object.keys(n).reduce((y,w)=>(y+=`
201
201
  var res = requireOrImportMethod('${Xh(n[w])}');
202
202
  if (res.sync) {
203
203
  var ${w} = res.lib;
204
204
  } else {
205
205
  var ${w} = await res.lib;
206
206
  }
207
- `,y),""),u=i?`
207
+ `,y),""),l=i?`
208
208
  ${ju.default.toString()}
209
209
  var fileBuffer = dataUriToBuffer('${i}');
210
- `:"var fileBuffer = null;";function d(y,w){function P(){return y.apply(this,w)}return P.prototype=y.prototype,new P}let m=`
210
+ `:"var fileBuffer = null;";function d(y,w){function C(){return y.apply(this,w)}return C.prototype=y.prototype,new C}let m=`
211
211
  const getMessage = arguments => {
212
212
  const args = Array.prototype.slice.call(arguments);
213
213
  let message = args.shift() + '';
@@ -328,12 +328,12 @@ ${((P=n.warnings)==null?void 0:P.join(`
328
328
  // A hack to fix an issue with stringified functions which use require. when compiling to JS, calls to require change to __require.
329
329
  const __require = require;
330
330
  const { parentPort } = require('worker_threads');
331
- var requireOrImportMethod = ${LS}
331
+ var requireOrImportMethod = ${OS}
332
332
 
333
333
  // requireCode will set async to be true if needed.
334
334
  ${c}
335
335
 
336
- ${u}
336
+ ${l}
337
337
 
338
338
  ${m}
339
339
 
@@ -366,27 +366,27 @@ ${((P=n.warnings)==null?void 0:P.join(`
366
366
  injectCode(params, args, incomingParams, context, code);
367
367
  });
368
368
  })();
369
- `,h=[],g=new a(f,{eval:!0});return re(new Promise(y=>{g.on("message",w=>{if(w.action==="finish"){let{data:P}=w,b=Object.assign({},P,{tstConsoleLogs:h});De.debug("Run code worker response",{messageWithLogs:b,transactionId:s}),y(b)}else w.action==="progress"&&h.push(w.data)}).on("error",w=>{w.message==="malformed data: URI"?De.error("Run code worker error",{err:w,transactionId:s,fileDataUrl:i}):De.error("Run code worker error",{err:w,transactionId:s}),y({tstConsoleLogs:h,status:"failed",result:{resultValue:w==null?void 0:w.toString(),exports:{},exportsTest:{},exportsGlobal:{}},success:!1})}).on("exit",()=>{De.debug("Run code worker has been terminated",{transactionId:s})}),g.postMessage({incomingParams:e,context:JSON.parse(JSON.stringify(t)),code:r})}),o).catch(y=>{if(!(y instanceof X))throw y;return De.warn("timeout to run code",{transactionId:s,err:y}),{tstConsoleLogs:h,status:"failed",result:{resultValue:y==null?void 0:y.toString(),exports:{},exportsTest:{},exportsGlobal:{}},success:!1}}).finally(()=>g==null?void 0:g.terminate())}async function DS(s){try{await Fu.promises.rm(s,{recursive:!0,force:!0})}catch(e){De.warn("failed to remove install npm packages folder",{err:e})}}function Yh(s,e,t,r){return`${e}_${t}_${s}_${r}`}async function Is(s,e,t,r,n,o){let i=Yh(n,e,s,t),{data:a}=await MS(i,r,o);return a}async function xs(s,e,t,r,n,o,i,a,c,u){var h;let d=Object.fromEntries(((h=t.nodePackageParams)==null?void 0:h.map(g=>[g.paramName,g.testimPackageLocalLocation]))||[]),m=Yh(i,n,e,o);if(u){let g=await yn(u);g&&(c=g)}if(typeof jr>"u")try{jr=require("worker_threads")}catch{jr=!1}Buffer.isBuffer(c)&&(De.debug("runCodeWithPackages: converted a buffer to base 64 string data URI",{fileDataUrl:c}),c=c.toString());let p="data:,";if(c==="data:"&&(De.debug("runCodeWithPackages, fileDataUrl was an empty string ",{fileDataUrl:c}),c=p),jr&&M.flags.enableWorkerThreadsCliCodeExecution.isEnabled()){let g=await NS(m,t,r,s,d,a,c);return Object.assign({},g,{nodeVersion:process.version})}let f=await OS(m,t,r,s,d,a,c);return Object.assign({},f,{nodeVersion:process.version})}async function MS(s,e,t){let r=e.map(c=>`${c.packageName}@${c.packageVersion}`),n=Qh(),o=Rs.join(n,`/${s}`),i=global.proxyUri;async function a(){let c="";try{if(c=await um(o,r,i,t),De.info("npm package install finished",{transactionId:s,output:c,timeout:t}),Number(c.trim().split(" ")[1])<r.length)throw"npm package install failed, couldn't install all packages";return{data:e.map(d=>{let m=lm(o,d.packageName),p=`${d.packageName}@${m}`,f=Rs.resolve(o,"node_modules",d.packageName);return Object.assign({},d,{packageFullName:p,packageLocalLocation:f})}),installFolder:o}}catch(u){throw De.warn("npm package install failed",{transactionId:s,err:u}),u}}try{return await re(a(),t)}catch(c){throw c instanceof X&&De.warn("timeout to install package",{packages:r,transactionId:s,err:c,timeout:t}),c}}function Qh(){return Rs.join(Jh.tmpdir(),"/testim_local_packages")}function Zh(){let s=Qh();return DS(s)}var Fu,Jh,Rs,ju,Ai,De,jr,Br=T(()=>{"use strict";Fu=E(require("fs")),Jh=E(require("os")),Rs=E(require("path"));F();un();ju=E(require("data-uri-to-buffer")),Ai=require("threads");z();j();Te();be();De=x("cli-service");Ai.config.set({basepath:{node:__dirname}})});var rr={};$(rr,{run:()=>FS});function US(s,e){try{let t=e.defaults.enforceMaximumJsResultSize,r=M.flags.maximumJsResultSize.getValue(),n=JSON.stringify(s).length>r;return t?n:!1}catch{return!1}}var FS,eg=T(()=>{"use strict";Br();z();be();FS=async(s,e,t)=>{let{code:r,stepId:n,incomingParams:o,context:i,testResultId:a,retryIndex:c,stepResultId:u,runTimeout:d,fileDataUrl:m,s3filepath:p}=e.data;try{let f=await xs(r,n,o,i,a,c,u,d,m,p);return f&&US({result:f.result,tstConsoleLogs:f.tstConsoleLogs},t)?{code:"js-result-max-size-exceeded",success:!1}:{data:f,success:!0}}catch(f){throw f instanceof X?new Error("Timeout while running action"):f}}});var Bu,Ps,$u=T(()=>{"use strict";j();Bu=x("cookies-utils"),Ps=class{constructor(e){this.driver=e}async set(e){let t=e.domain;!e.hostOnly&&t&&!t.startsWith(".")&&(t=`.${t}`);try{return await this.driver.setCookie(e.name,e.value,t,e.httpOnly,e.secure,e.path,e.expirationDate)}catch(r){throw Bu.error("failed to set cookie",{err:r}),r}}async get(e){try{return await this.driver.getCookie(e.name)}catch(t){throw Bu.error("failed to get cookie",{err:t}),t}}async remove(e){try{return await this.driver.deleteCookie(e.name)}catch(t){throw Bu.error("failed to remove cookie",{err:t}),t}}}});var Wu,jS,As,Gu=T(()=>{"use strict";F();Wu=E(require("p-retry"));F();j();z();jS=x("window-utils"),As=class{constructor(e,t){this.id=e,this.driver=t}getElementFromPoint(e,t){function r(n,o){var i=document.elementFromPoint(n,o);return{testimId:i?i.getAttribute("testim_dom_element_id"):null,tagName:i?i.tagName:null}}return this.driver.executeJS(r,e,t).then(n=>n.value)}getLocation(){return this.driver.getUrl()}stopListeningToScroll(){return Promise.resolve()}resumeListeningToScroll(){return Promise.resolve()}scrollToPosition(e){return this.driver.scroll(e.x,e.y)}scrollToPositionWithoutAnimation(e){function t(r){var n="scrollBehavior"in document.documentElement.style;return n?window.scrollTo({left:r.x,top:r.y,behavior:"instant"}):window.scrollTo(r.x,r.y)}return this.driver.executeJS(t,e)}getCurrentScrollPosition(){function e(){return{x:window.scrollX,y:window.scrollY}}return this.driver.executeJS(e).then(t=>t.value)}navigate(e,t=15e3){let r=this;async function n(o=3){try{await r.driver.url(e)}catch(i){if(i.seleniumStack&&i.message.includes("method IWebBrowser2::Navigate2() failed")&&o>0)return jS.warn("selenium navigation failed. retrying to navigate",{err:i}),await ie(1500),n(o-1);throw i}}return Promise.race([n(),ie(t)])}reloadTab(e=15e3){return Promise.race([this.driver.reloadTab(),ie(e)])}getViewportSize(){return this.driver.getViewportSize()}maximizeWithoutValidation(){return this.driver.maximizeWithoutValidation()}getFullPageSize(){function e(){var t=document.body,r=document.documentElement,n=Math.max(t.scrollHeight,t.offsetHeight,r.clientHeight,r.scrollHeight,r.offsetHeight),o=Math.max(t.scrollWidth,t.offsetWidth,r.clientWidth,r.scrollWidth,r.offsetWidth);return{height:n,width:o}}return this.driver.executeJS(e).then(t=>t.value)}extractToNewWindow(){return Promise.resolve()}async checkSize(e){await ie(1e3);let t=await this.getViewportSize();return t.width!==e.width||t.height!==e.height?Promise.reject({actualSize:t,expectedSize:e}):{actualSize:t,expectedSize:e}}async setViewportSize(e){return await this.driver.setViewportSize(e.width,e.height),await this.checkSize(e)}async validatePageIsAvailable(){function e(){var r;if(typeof location<"u")r=location;else if(typeof window<"u"&&typeof window.location<"u")r=window.location;else return!1;return r.href!=="chrome-error://chromewebdata/"&&r.href!=="safari-resource:/ErrorPage.html"&&r.href.indexOf("res://ieframe.dll/http_404.htm")!==0&&r.href.indexOf("ms-appx-web://microsoft.microsoftedge/assets/errorpages/")!==0}if(!(await this.driver.executeJS(e)).value)throw new ot("validatePageIsAvailable:PageNotAvailableError")}focusTab(){return this.driver.switchTab(this.id)}quit(){}async getOsAndBrowser(){let e=await(0,Wu.default)(()=>this.driver.getBrowserAndOS(),{retries:3});return{uaBrowserName:e.browser,uaOs:e.os,userAgent:e.userAgent,browserVersion:e.browserVersion}}getUserAgentInfo(){return(0,Wu.default)(()=>this.driver.getUserAgentInfo(),{retries:3})}}});var qu,ki,tg=T(()=>{"use strict";qu=E(require("p-retry")),ki=class{constructor(e,t,r={takeScreenshots:!0}){this.tabId=e,this.driver=t,this.options=r}base64AddPadding(e){return e+Array((4-e.length%4)%4+1).join("=")}shouldTakeScreenshots(){return typeof this.options.takeScreenshots!="boolean"?!0:this.options.takeScreenshots}async takeScreenshot(){if(!this.shouldTakeScreenshots())return{devicePixelRatio:1,image:""};let e=3,t=2e3,r=this.currentDevicePixelRatio?Promise.resolve(this.currentDevicePixelRatio):this.getDevicePixelRatio(),n=()=>Promise.all([r,this.driver.takeScreenshot()]),[o,i]=await(0,qu.default)(n,{retries:e,minTimeout:t}),a=i?i.value:"";return{image:`data:image/png;base64,${this.base64AddPadding(a.replace(/[\r\n]/g,""))}`,devicePixelRatio:o}}async takeElementScreenshot(e){if(!this.shouldTakeScreenshots())return{devicePixelRatio:1,image:""};let t=3,r=2e3,n=this.currentDevicePixelRatio?Promise.resolve(this.currentDevicePixelRatio):this.getDevicePixelRatio(),o=()=>Promise.all([n,this.driver.takeElementScreenshot(e)]),[i,a]=await(0,qu.default)(o,{retries:t,minTimeout:r}),c=a?a.value:"";return{image:`data:image/png;base64,${this.base64AddPadding(c.replace(/[\r\n]/g,""))}`,devicePixelRatio:i}}getDevicePixelRatio(){function e(){try{return window.devicePixelRatio}catch{return 1}}return this.driver.executeJS(e).then(t=>t.value)}forcePixelRatio(e=1){return this.currentDevicePixelRatio=e,Promise.resolve()}getCurrentDevicePixelRatio(){return this.currentDevicePixelRatio}}});async function rg(s,e){let t=e.image||e,r=e.devicePixelRatio;if(!t)throw new Error("Failed to get image");let n=t.match(/^data\:[^;]*\;base64,(.*)$/);if(!n)throw new Error("Image is not in base64 format");let o=s.offset||{top:0,left:0};if(o.top*=r,o.left*=r,!s.elementRect)return BS.warn("missing elementRect",ng.omit(s,"image")),{};let{elementRect:i}=s,a=await ks.default.read(Buffer.from(n[1],"base64")),c=i.left*r+o.left*r,u=i.top*r+o.top*r,d=i.width*r,m=i.height*r;c<0&&(d+=c,d=d<0?0:d,c=0),u<0&&(m+=u,m=m<0?0:m,u=0);let p=a.bitmap.width,f=a.bitmap.height;if(c+d>p&&(d=p-c),u+m>f&&(m=f-u),m<=0||d<=0)throw new Mn("height or width is equal or lower than zero");return{elementImage:await a.crop(c,u,d,m).getBase64Async(ks.default.MIME_PNG)}}async function $S(s,e){let t=await ks.default.read(s.width,s.height);for(let n of e){let o=n.image.match(/^data\:[^;]*\;base64,(.*)$/),i=await ks.default.read(Buffer.from(o[1],"base64"));await new Promise((a,c)=>{t.composite(i,n.position.left,n.position.top,u=>{if(u){c(u);return}a()})})}return await t.getBase64Async(ks.default.MIME_PNG)}function WS(s,e){return $S(s,e)}function GS(){return Promise.resolve()}function qS(s){function e(r){return typeof s[r]=="string"&&s[r].startsWith("data")}function t(r){return GS(s[r]).then(n=>({key:r,url:n}))}return Promise.all(Object.keys(s).filter(e).map(t)).then(r=>r.reduce((n,o)=>(n[o.key]=o.url,n),s))}function sg(s,e){return e=e||1,s=s||{left:0,top:0,width:0,height:0},{left:e*Math.round(s.left),top:e*Math.round(s.top),width:e*Math.round(s.width),height:e*Math.round(s.height),pixelRatio:e}}var ng,ks,BS,Mn,_i,og=T(()=>{"use strict";ng=E(require("lodash"));F();ks=E(require("jimp"));j();BS=x("image-capture-utils"),Mn=class extends Error{constructor(e){super(e),this.rectIsOutsideOfImageError=!0,Object.setPrototypeOf(this,Mn.prototype)}};_i=class{constructor(e,t,r){this.windowUtils=t,this.screenshotUtils=r}async takeViewPortImage(){let e=await this.screenshotUtils.takeScreenshot();return typeof e=="string"?e:e.image}takeImageForComparison(){return this.takeViewPortImage()}async takeAreaDataUrl(e){e.areas&&(e=e.areas);let t=await this.screenshotUtils.takeScreenshot(),r=await rg(e,t);return r.screenImage=t.image,r.absoluteScreenHighlight=sg(e.elementRect,t.devicePixelRatio),r}async takeElementImage(e){let t=await this.screenshotUtils.takeElementScreenshot({ELEMENT:e});return typeof t=="string"?t:t.image}async takeArea(e){e.areas&&(e=e.areas);let t=await this.screenshotUtils.takeScreenshot();return qS({screenImage:t.image,absoluteScreenHighlight:sg(e.elementRect,t.devicePixelRatio)})}forcePixelRatio(e){return this.screenshotUtils.forcePixelRatio(e)}getCurrentDevicePixelRatio(){return this.screenshotUtils.getCurrentDevicePixelRatio()}async takeStitchedDataUrl(e){let{windowUtils:t,screenshotUtils:r}=this,n=()=>ie(250),o=Boolean(e);async function i(p,f){o?await t.scrollToPositionWithoutAnimation(p):await t.scrollToPosition(p),await n();let h=await r.takeScreenshot(),g=await rg({elementRect:f},h);return{position:{left:p.x+f.left,top:p.y+f.top},size:{width:f.width,height:f.height},image:g.elementImage}}async function a(p){let f=[];for(let h of p){let g=await i(h.scrollPos,h.cropData);f.push(g)}return f}function c(p,f){let h=Math.max(p.width,f.width),g=f.width,y=Math.max(p.height,f.height),w=f.height,P=Array.from({length:Math.ceil(h/g)},(v,I)=>({scrollX:Math.min(I*g,h-g),cropX:I*g-Math.min(I*g,h-g),cropW:g-(I*g-Math.min(I*g,h-g))})),b=Array.from({length:Math.ceil(y/w)},(v,I)=>({scrollY:Math.min(I*w,y-w),cropY:I*w-Math.min(I*w,y-w),cropH:w-(I*w-Math.min(I*w,y-w))}));return P.flatMap(v=>b.map(I=>({scrollPos:{x:v.scrollX,y:I.scrollY},cropData:{top:I.cropY,left:v.cropX,width:v.cropW,height:I.cropH}})))}async function u(p,f){let h=await t.getCurrentScrollPosition(),g=c(p,f),y=await a(g);return await t.scrollToPosition(h),WS(p,y)}let[d,m]=await Promise.all([t.getFullPageSize(),t.getViewportSize()]);return await u(d,m)}}});var ig,Oi,Li,ag=T(()=>{"use strict";ig=E(require("semver"));F();j();Gu();tg();og();Ee();Oi=x("tab-service"),Li=class{constructor(e){this.driver=e,this._utils={},this.sessionTabs={},this.pendingTabs={},this.addedTabs={}}on(){}tabCount(e){if(this.sessionTabs[e])return this.sessionTabs[e].tabCount}getAllOpenTabIds(e){let t=this.getAllTabInfos(e);return Object.keys(t).filter(r=>!t[r].isClosed)}getActiveTabInfo(e){return this.sessionTabs[e].lastActiveTabInfo}getAllTabIds(e){return Object.keys(this.getAllTabInfos(e)).map(t=>t)}isSessionTab(e,t){return this.getAllTabIds(e).includes(t)}createSesion(e){this.sessionTabs[e]||(this.addedTabs[e]=new Set,this.sessionTabs[e]={tabCount:0,tabInfos:{}})}setAddFrameHandlerCallBack(e){this.addFrameHandler=e}getAllTabInfoStrings(e){return this.getAllTabIds(e).map(r=>{let n=this.getTabInfo(e,r);return`tabId=${r}, url=${n.url}, order=${n.order}, isMain=${n.isMain}, openerStepId=${n.openerStepId}, isClosed=${n.isClosed}, currentUrl: ${n.currentUrl}, lastUpdatedUrl: ${n.lastUpdatedUrl}`})}getAllTabInfos(e){return this.sessionTabs[e].tabInfos}addNewTab(e,t,r,n={}){return this.addedTabs[e].has(t)?Promise.resolve():(this.addedTabs[e].add(t),Oi.info(`Adding a new tab sessionId: ${e}, tabId: ${t}, openerId: ${r}`),this.addTab(e,t,this.sessionTabs[e].tabCount++,r,n))}addOpenerStepId(e,t,r){this.sessionTabs[e].tabInfos[t].openerStepId=r}addOpenerStep(e,t,r){this.sessionTabs[e].tabInfos[t].openerStepId=r.id,this.sessionTabs[e].tabInfos[t].openerOriginalStepId=r.originalStepId}fixMissingMainTab(e){if(this.getMainTabInfo(e))return;let r=this.getAllTabInfos(e);Object.keys(r).length!==0&&(Object.values(this.getAllTabInfos(e))[0].isMain=!0)}async buildTabInfo(e,t,r,n,o={}){let i=await this.getTabDetails(t,e,o),a=K();function c(u){return o.checkForMainTab?i.isMainTab:!i.isMainTab||i.isMainTab==="unknown"?!u.getMainTabInfo(e):i.isMainTab}return this.sessionTabs[e].tabInfos[t]={infoId:a,url:i.url,title:i.title,favIconUrl:i.favIconUrl,order:r,from:this.getTabInfo(e,i.openerTabId),isMain:c(this),openerStepId:n},a}async addTab(e,t,r,n,o={}){let i=await this.buildTabInfo(e,t,r,n,o),a=new As(t,this.driver);this._utils[i]={attachDebugger:()=>Promise.resolve(),detachDebugger:()=>Promise.resolve(),onDebuggerDetached:()=>{},tabId:t,domUtils:{getDOM:()=>Promise.resolve()},windowUtils:a,imageCaptureUtils:new _i(t,a,new ki(t,this.driver,{takeScreenshots:o.takeScreenshots}))}}getTabUtilsByTabIdAndSessionId(e,t){let r=this.sessionTabs[e].tabInfos[t];return this._utils[r.infoId]}getTabUtilsByTabId(e){let t=Object.keys(this._utils).find(r=>this._utils[r].tabId===e);return this._utils[t]}getTabInfo(e,t){return this.sessionTabs[e].tabInfos[t]}getTabUtils(e,t){if(!t)return this.getMainTabUtils(e);if(this._utils[t.infoId])return this._utils[t.infoId];if(t.isMain)return this.getMainTabUtils(e);let r=this.getAllTabInfos(e),n=Object.keys(r).map(i=>r[i]).filter(i=>!i.isMain);if(n.length===1)return this._utils[n[0].infoId];let o=Object.keys(e).map(i=>e[i]).filter(i=>this.isSameTab(e,t,i));return o.length>0?this._utils[o[0].infoId]:this.getMainTabUtils(e)}exactUrlMatch(e,t,r){let n=r.filter(o=>o===t.url);return!!((e.url===t.url||e.currentUrl===t.url||e.currentUrl&&e.currentUrl===t.currentUrl)&&n.length===1)}singleExactMatchForParts(e,t,r,n){let{urlUtils:o}=se(),i=o.urlBreaker(e.url||e.currentUrl),a=o.urlBreaker(t.url||t.currentUrl),c=n(i),u=n(a),d=r.map(m=>o.urlBreaker(m)).map(m=>n(m)).filter(m=>m===c);return c===u&&d.length===1}isSameTab(e,t,r){let{tabMatcher:n}=se();if(n){let u=this.getAllTabInfos(e),d=Object.keys(u).map(m=>u[m]);return n.isSameTab(d,t,r)}if(t.isMain&&r.isMain||t.openerStepId&&r.openerStepId&&t.openerStepId===r.openerStepId)return!0;let o=this.getAllTabInfos(e),i=Object.keys(o).map(u=>o[u].url);if(this.exactUrlMatch(t,r,i))return!0;let a=u=>`${u.domain}/${u.path.join("/")}`;if(this.singleExactMatchForParts(t,r,i,a))return!0;let c=u=>`${u.domain}/${u.path.join("/")}#${u.hash}`;return!!(this.singleExactMatchForParts(t,r,i,c)||t.order===r.order)}getMainTabInfo(e){let t=this.getAllTabInfos(e);return Object.keys(t).map(r=>t[r]).find(r=>r.isMain)}getMainTabUtils(e){let t=this.getMainTabInfo(e);return t?this.getTabUtils(e,t):{}}removeTabInfo(e,t){let n=this.getAllTabInfos(e)[t];delete this.sessionTabs[e].tabInfos[t],delete this._utils[n.infoId],this.sessionTabs[e].tabCount--}getMainTabId(e){let t=this.getAllTabInfos(e);return Object.keys(t).find(r=>t[r].isMain)}isMainTabExists(e){return this.getMainTabId(e)?Promise.resolve(!0):Promise.resolve(!1)}clearAllTabs(e){let t=this.getAllTabInfos(e);this.sessionTabs[e].tabCount=0,Object.keys(t).forEach(r=>this.removeTabInfo(e,r))}clearNonMainTabs(e){let t=this.getAllTabInfos(e);Object.keys(t).filter(r=>!t[r].isMain).forEach(r=>this.removeTabInfo(e,r)),this.sessionTabs[e].tabCount=1}switchTab(e,t,{forceSwitch:r=!1}={}){let n=this.sessionTabs[t]?this.sessionTabs[t].tabCount:1;return typeof n=="number"&&n>1||r?this.driver.switchTab(e):Promise.resolve()}getTabDetails(e,t,r={}){return this.switchTab(e,t,r).then(()=>{if(r.skipLoadInfo)return{title:"",url:""};let n=Promise.resolve("unknown");return r.checkForMainTab&&(n=this.driver.executeJS("return window.__isMainTestimTab").then(o=>o.value)),Promise.all([this.driver.getTitle(),this.driver.getUrl(),n]).then(([o,i,a])=>({title:o,url:i,isMainTab:a}),o=>(Oi.error("failed to get url or title",{err:o}),{title:"",url:""}))}).catch(n=>{Oi.error("failed to switch to tab",{tabId:e,err:n})})}async getUnregisteredTabId(e){return(await this.driver.getTabIds()).find(r=>!this.getAllTabIds(e).includes(r))}async waitForTabToOpen(e){let t=await this.getUnregisteredTabId(e);return t||(await ie(500),await this.waitForTabToOpen(e))}async tryToAddTab(e,t){if(this.pendingTabs[e])return;let r=await this.getUnregisteredTabId(e);r&&(await this.addNewTab(e,r),await this.addFrameHandler(r),this.sessionTabs[e].currentTab=null)}addNewPopup(e,t){let r=this.getAllTabInfos(e);return Object.keys(r).find(o=>r[o].openerStepId===t)?Promise.resolve():this.pendingTabs[e]?(Oi.info(`overriding opener step id from ${this.pendingTabs[e]} to ${t}`),this.pendingTabs[e]=t,Promise.resolve()):(this.pendingTabs[e]=t,this.waitForTabToOpen(e).then(o=>this.addNewTab(e,o,this.pendingTabs[e]).then(()=>this.addFrameHandler(o)).then(()=>delete this.pendingTabs[e]).then(()=>this.sessionTabs[e].currentTab=null)))}waitToPendingTabs(e,t){let n=3e3,o=this;return t?new Promise(i=>{function a(){o.pendingTabs[e]===t&&n-500>0?(n-=500,setTimeout(a,500)):i()}a()}):Promise.resolve()}isMainTabIncognito(){return Promise.resolve(!1)}isInvalidStepVersion(e){let t=ig.lt(e._version||e.version,"1.2.0"),r=!!e.parameterValues,n=r&&e.parameterValues.some(o=>o.type==="locate"&&!o.frameLocators);return t&&(!r||n)}getTabIdByTabInfo(e,t){var i,a;let{tabMatcher:r,commonConstants:n}=se();if(this.isInvalidStepVersion(t))return Promise.reject({success:!1,shouldRetry:!1,errorType:n.stepResult.INVALID_TEST_VERSION});if((i=t.useCurrentTab)!=null&&i.call(t))return this.driver.getCurrentTabId().then(c=>{if(c)return c;let u=this.getMainTabId(e);if(u)return u;throw new Error("Current tab not found")});let o=(a=t.tabInfo)==null?void 0:a.openerStepId;return this.waitToPendingTabs(e,o).then(()=>{let c;if(r){let u=this.getAllTabIds(e).map(d=>Object.assign({},this.getTabInfo(e,d),{tabId:d})).filter(d=>!d.isClosed);c=r.matchTabs(t,u)}else{let u=t.tabInfo;u?c=this.getAllTabIds(e).find(d=>{let m=this.getTabInfo(e,d);return this.isSameTab(e,m,u)}):c=this.getMainTabId(e)}return c?this.sessionTabs[e].currentTab===c?c:this.switchTab(c,e).then(()=>(this.sessionTabs[e].currentTab=c,c)).catch(u=>{let d=["no such window","no window found","the window could not be found"];if(u.message&&d.some(m=>u.message.toLowerCase().includes(m)))return this.sessionTabs[e].tabCount--,this.sessionTabs[e].tabInfos[c].isClosed=!0,this.getTabIdByTabInfo(e,t);throw u}):this.tryToAddTab(e,o).then(()=>{throw new Error("No tab ID found")})})}}});var Vu,Ni,Hu=T(()=>{"use strict";Vu=class{constructor(){}select(){return console.log(`
369
+ `,h=[],g=new a(f,{eval:!0});return re(new Promise(y=>{g.on("message",w=>{if(w.action==="finish"){let{data:C}=w,b=Object.assign({},C,{tstConsoleLogs:h});De.debug("Run code worker response",{messageWithLogs:b,transactionId:s}),y(b)}else w.action==="progress"&&h.push(w.data)}).on("error",w=>{w.message==="malformed data: URI"?De.error("Run code worker error",{err:w,transactionId:s,fileDataUrl:i}):De.error("Run code worker error",{err:w,transactionId:s}),y({tstConsoleLogs:h,status:"failed",result:{resultValue:w==null?void 0:w.toString(),exports:{},exportsTest:{},exportsGlobal:{}},success:!1})}).on("exit",()=>{De.debug("Run code worker has been terminated",{transactionId:s})}),g.postMessage({incomingParams:e,context:JSON.parse(JSON.stringify(t)),code:r})}),o).catch(y=>{if(!(y instanceof X))throw y;return De.warn("timeout to run code",{transactionId:s,err:y}),{tstConsoleLogs:h,status:"failed",result:{resultValue:y==null?void 0:y.toString(),exports:{},exportsTest:{},exportsGlobal:{}},success:!1}}).finally(()=>g==null?void 0:g.terminate())}async function NS(s){try{await Fu.promises.rm(s,{recursive:!0,force:!0})}catch(e){De.warn("failed to remove install npm packages folder",{err:e})}}function Yh(s,e,t,r){return`${e}_${t}_${s}_${r}`}async function Is(s,e,t,r,n,o){let i=Yh(n,e,s,t),{data:a}=await DS(i,r,o);return a}async function xs(s,e,t,r,n,o,i,a,c,l){var h;let d=Object.fromEntries(((h=t.nodePackageParams)==null?void 0:h.map(g=>[g.paramName,g.testimPackageLocalLocation]))||[]),m=Yh(i,n,e,o);if(l){let g=await gn(l);g&&(c=g)}if(typeof Br>"u")try{Br=require("worker_threads")}catch{Br=!1}Buffer.isBuffer(c)&&(De.debug("runCodeWithPackages: converted a buffer to base 64 string data URI",{fileDataUrl:c}),c=c.toString());let p="data:,";if(c==="data:"&&(De.debug("runCodeWithPackages, fileDataUrl was an empty string ",{fileDataUrl:c}),c=p),Br&&U.flags.enableWorkerThreadsCliCodeExecution.isEnabled()){let g=await LS(m,t,r,s,d,a,c);return Object.assign({},g,{nodeVersion:process.version})}let f=await _S(m,t,r,s,d,a,c);return Object.assign({},f,{nodeVersion:process.version})}async function DS(s,e,t){let r=e.map(c=>`${c.packageName}@${c.packageVersion}`),n=Qh(),o=Rs.join(n,`/${s}`),i=global.proxyUri;async function a(){let c="";try{if(c=await um(o,r,i,t),De.info("npm package install finished",{transactionId:s,output:c,timeout:t}),Number(c.trim().split(" ")[1])<r.length)throw"npm package install failed, couldn't install all packages";return{data:e.map(d=>{let m=lm(o,d.packageName),p=`${d.packageName}@${m}`,f=Rs.resolve(o,"node_modules",d.packageName);return Object.assign({},d,{packageFullName:p,packageLocalLocation:f})}),installFolder:o}}catch(l){throw De.warn("npm package install failed",{transactionId:s,err:l}),l}}try{return await re(a(),t)}catch(c){throw c instanceof X&&De.warn("timeout to install package",{packages:r,transactionId:s,err:c,timeout:t}),c}}function Qh(){return Rs.join(Jh.tmpdir(),"/testim_local_packages")}function Zh(){let s=Qh();return NS(s)}var Fu,Jh,Rs,ju,ki,De,Br,$r=T(()=>{"use strict";Fu=E(require("fs")),Jh=E(require("os")),Rs=E(require("path"));F();ln();ju=E(require("data-uri-to-buffer")),ki=require("threads");z();j();Te();be();De=x("cli-service");ki.config.set({basepath:{node:__dirname}})});var rr={};$(rr,{run:()=>US});function MS(s,e){try{let t=e.defaults.enforceMaximumJsResultSize,r=U.flags.maximumJsResultSize.getValue(),n=JSON.stringify(s).length>r;return t?n:!1}catch{return!1}}var US,eg=T(()=>{"use strict";$r();z();be();US=async(s,e,t)=>{let{code:r,stepId:n,incomingParams:o,context:i,testResultId:a,retryIndex:c,stepResultId:l,runTimeout:d,fileDataUrl:m,s3filepath:p}=e.data;try{let f=await xs(r,n,o,i,a,c,l,d,m,p);return f&&MS({result:f.result,tstConsoleLogs:f.tstConsoleLogs},t)?{code:"js-result-max-size-exceeded",success:!1}:{data:f,success:!0}}catch(f){throw f instanceof X?new Error("Timeout while running action"):f}}});var Bu,Cs,$u=T(()=>{"use strict";j();Bu=x("cookies-utils"),Cs=class{constructor(e){this.driver=e}async set(e){let t=e.domain;!e.hostOnly&&t&&!t.startsWith(".")&&(t=`.${t}`);try{return await this.driver.setCookie(e.name,e.value,t,e.httpOnly,e.secure,e.path,e.expirationDate)}catch(r){throw Bu.error("failed to set cookie",{err:r}),r}}async get(e){try{return await this.driver.getCookie(e.name)}catch(t){throw Bu.error("failed to get cookie",{err:t}),t}}async remove(e){try{return await this.driver.deleteCookie(e.name)}catch(t){throw Bu.error("failed to remove cookie",{err:t}),t}}}});var Wu,FS,As,Gu=T(()=>{"use strict";F();Wu=E(require("p-retry"));F();j();z();FS=x("window-utils"),As=class{constructor(e,t){this.id=e,this.driver=t}getElementFromPoint(e,t){function r(n,o){var i=document.elementFromPoint(n,o);return{testimId:i?i.getAttribute("testim_dom_element_id"):null,tagName:i?i.tagName:null}}return this.driver.executeJS(r,e,t).then(n=>n.value)}getLocation(){return this.driver.getUrl()}stopListeningToScroll(){return Promise.resolve()}resumeListeningToScroll(){return Promise.resolve()}scrollToPosition(e){return this.driver.scroll(e.x,e.y)}scrollToPositionWithoutAnimation(e){function t(r){var n="scrollBehavior"in document.documentElement.style;return n?window.scrollTo({left:r.x,top:r.y,behavior:"instant"}):window.scrollTo(r.x,r.y)}return this.driver.executeJS(t,e)}getCurrentScrollPosition(){function e(){return{x:window.scrollX,y:window.scrollY}}return this.driver.executeJS(e).then(t=>t.value)}navigate(e,t=15e3){let r=this;async function n(o=3){try{await r.driver.url(e)}catch(i){if(i.seleniumStack&&i.message.includes("method IWebBrowser2::Navigate2() failed")&&o>0)return FS.warn("selenium navigation failed. retrying to navigate",{err:i}),await ie(1500),n(o-1);throw i}}return Promise.race([n(),ie(t)])}reloadTab(e=15e3){return Promise.race([this.driver.reloadTab(),ie(e)])}getViewportSize(){return this.driver.getViewportSize()}maximizeWithoutValidation(){return this.driver.maximizeWithoutValidation()}getFullPageSize(){function e(){var t=document.body,r=document.documentElement,n=Math.max(t.scrollHeight,t.offsetHeight,r.clientHeight,r.scrollHeight,r.offsetHeight),o=Math.max(t.scrollWidth,t.offsetWidth,r.clientWidth,r.scrollWidth,r.offsetWidth);return{height:n,width:o}}return this.driver.executeJS(e).then(t=>t.value)}extractToNewWindow(){return Promise.resolve()}async checkSize(e){await ie(1e3);let t=await this.getViewportSize();return t.width!==e.width||t.height!==e.height?Promise.reject({actualSize:t,expectedSize:e}):{actualSize:t,expectedSize:e}}async setViewportSize(e){return await this.driver.setViewportSize(e.width,e.height),await this.checkSize(e)}async validatePageIsAvailable(){function e(){var r;if(typeof location<"u")r=location;else if(typeof window<"u"&&typeof window.location<"u")r=window.location;else return!1;return r.href!=="chrome-error://chromewebdata/"&&r.href!=="safari-resource:/ErrorPage.html"&&r.href.indexOf("res://ieframe.dll/http_404.htm")!==0&&r.href.indexOf("ms-appx-web://microsoft.microsoftedge/assets/errorpages/")!==0}if(!(await this.driver.executeJS(e)).value)throw new ot("validatePageIsAvailable:PageNotAvailableError")}focusTab(){return this.driver.switchTab(this.id)}quit(){}async getOsAndBrowser(){let e=await(0,Wu.default)(()=>this.driver.getBrowserAndOS(),{retries:3});return{uaBrowserName:e.browser,uaOs:e.os,userAgent:e.userAgent,browserVersion:e.browserVersion}}getUserAgentInfo(){return(0,Wu.default)(()=>this.driver.getUserAgentInfo(),{retries:3})}}});var qu,_i,tg=T(()=>{"use strict";qu=E(require("p-retry")),_i=class{constructor(e,t,r={takeScreenshots:!0}){this.tabId=e,this.driver=t,this.options=r}base64AddPadding(e){return e+Array((4-e.length%4)%4+1).join("=")}shouldTakeScreenshots(){return typeof this.options.takeScreenshots!="boolean"?!0:this.options.takeScreenshots}async takeScreenshot(){if(!this.shouldTakeScreenshots())return{devicePixelRatio:1,image:""};let e=3,t=2e3,r=this.currentDevicePixelRatio?Promise.resolve(this.currentDevicePixelRatio):this.getDevicePixelRatio(),n=()=>Promise.all([r,this.driver.takeScreenshot()]),[o,i]=await(0,qu.default)(n,{retries:e,minTimeout:t}),a=i?i.value:"";return{image:`data:image/png;base64,${this.base64AddPadding(a.replace(/[\r\n]/g,""))}`,devicePixelRatio:o}}async takeElementScreenshot(e){if(!this.shouldTakeScreenshots())return{devicePixelRatio:1,image:""};let t=3,r=2e3,n=this.currentDevicePixelRatio?Promise.resolve(this.currentDevicePixelRatio):this.getDevicePixelRatio(),o=()=>Promise.all([n,this.driver.takeElementScreenshot(e)]),[i,a]=await(0,qu.default)(o,{retries:t,minTimeout:r}),c=a?a.value:"";return{image:`data:image/png;base64,${this.base64AddPadding(c.replace(/[\r\n]/g,""))}`,devicePixelRatio:i}}getDevicePixelRatio(){function e(){try{return window.devicePixelRatio}catch{return 1}}return this.driver.executeJS(e).then(t=>t.value)}forcePixelRatio(e=1){return this.currentDevicePixelRatio=e,Promise.resolve()}getCurrentDevicePixelRatio(){return this.currentDevicePixelRatio}}});async function rg(s,e){let t=e.image||e,r=e.devicePixelRatio;if(!t)throw new Error("Failed to get image");let n=t.match(/^data\:[^;]*\;base64,(.*)$/);if(!n)throw new Error("Image is not in base64 format");let o=s.offset||{top:0,left:0};if(o.top*=r,o.left*=r,!s.elementRect)return jS.warn("missing elementRect",ng.omit(s,"image")),{};let{elementRect:i}=s,a=await ks.default.read(Buffer.from(n[1],"base64")),c=i.left*r+o.left*r,l=i.top*r+o.top*r,d=i.width*r,m=i.height*r;c<0&&(d+=c,d=d<0?0:d,c=0),l<0&&(m+=l,m=m<0?0:m,l=0);let p=a.bitmap.width,f=a.bitmap.height;if(c+d>p&&(d=p-c),l+m>f&&(m=f-l),m<=0||d<=0)throw new Dn("height or width is equal or lower than zero");return{elementImage:await a.crop(c,l,d,m).getBase64Async(ks.default.MIME_PNG)}}async function BS(s,e){let t=await ks.default.read(s.width,s.height);for(let n of e){let o=n.image.match(/^data\:[^;]*\;base64,(.*)$/),i=await ks.default.read(Buffer.from(o[1],"base64"));await new Promise((a,c)=>{t.composite(i,n.position.left,n.position.top,l=>{if(l){c(l);return}a()})})}return await t.getBase64Async(ks.default.MIME_PNG)}function $S(s,e){return BS(s,e)}function WS(){return Promise.resolve()}function GS(s){function e(r){return typeof s[r]=="string"&&s[r].startsWith("data")}function t(r){return WS(s[r]).then(n=>({key:r,url:n}))}return Promise.all(Object.keys(s).filter(e).map(t)).then(r=>r.reduce((n,o)=>(n[o.key]=o.url,n),s))}function sg(s,e){return e=e||1,s=s||{left:0,top:0,width:0,height:0},{left:e*Math.round(s.left),top:e*Math.round(s.top),width:e*Math.round(s.width),height:e*Math.round(s.height),pixelRatio:e}}var ng,ks,jS,Dn,Oi,og=T(()=>{"use strict";ng=E(require("lodash"));F();ks=E(require("jimp"));j();jS=x("image-capture-utils"),Dn=class extends Error{constructor(e){super(e),this.rectIsOutsideOfImageError=!0,Object.setPrototypeOf(this,Dn.prototype)}};Oi=class{constructor(e,t,r){this.windowUtils=t,this.screenshotUtils=r}async takeViewPortImage(){let e=await this.screenshotUtils.takeScreenshot();return typeof e=="string"?e:e.image}takeImageForComparison(){return this.takeViewPortImage()}async takeAreaDataUrl(e){e.areas&&(e=e.areas);let t=await this.screenshotUtils.takeScreenshot(),r=await rg(e,t);return r.screenImage=t.image,r.absoluteScreenHighlight=sg(e.elementRect,t.devicePixelRatio),r}async takeElementImage(e){let t=await this.screenshotUtils.takeElementScreenshot({ELEMENT:e});return typeof t=="string"?t:t.image}async takeArea(e){e.areas&&(e=e.areas);let t=await this.screenshotUtils.takeScreenshot();return GS({screenImage:t.image,absoluteScreenHighlight:sg(e.elementRect,t.devicePixelRatio)})}forcePixelRatio(e){return this.screenshotUtils.forcePixelRatio(e)}getCurrentDevicePixelRatio(){return this.screenshotUtils.getCurrentDevicePixelRatio()}async takeStitchedDataUrl(e){let{windowUtils:t,screenshotUtils:r}=this,n=()=>ie(250),o=Boolean(e);async function i(p,f){o?await t.scrollToPositionWithoutAnimation(p):await t.scrollToPosition(p),await n();let h=await r.takeScreenshot(),g=await rg({elementRect:f},h);return{position:{left:p.x+f.left,top:p.y+f.top},size:{width:f.width,height:f.height},image:g.elementImage}}async function a(p){let f=[];for(let h of p){let g=await i(h.scrollPos,h.cropData);f.push(g)}return f}function c(p,f){let h=Math.max(p.width,f.width),g=f.width,y=Math.max(p.height,f.height),w=f.height,C=Array.from({length:Math.ceil(h/g)},(v,I)=>({scrollX:Math.min(I*g,h-g),cropX:I*g-Math.min(I*g,h-g),cropW:g-(I*g-Math.min(I*g,h-g))})),b=Array.from({length:Math.ceil(y/w)},(v,I)=>({scrollY:Math.min(I*w,y-w),cropY:I*w-Math.min(I*w,y-w),cropH:w-(I*w-Math.min(I*w,y-w))}));return C.flatMap(v=>b.map(I=>({scrollPos:{x:v.scrollX,y:I.scrollY},cropData:{top:I.cropY,left:v.cropX,width:v.cropW,height:I.cropH}})))}async function l(p,f){let h=await t.getCurrentScrollPosition(),g=c(p,f),y=await a(g);return await t.scrollToPosition(h),$S(p,y)}let[d,m]=await Promise.all([t.getFullPageSize(),t.getViewportSize()]);return await l(d,m)}}});var ig,Li,Ni,ag=T(()=>{"use strict";ig=E(require("semver"));F();j();Gu();tg();og();Ee();Li=x("tab-service"),Ni=class{constructor(e){this.driver=e,this._utils={},this.sessionTabs={},this.pendingTabs={},this.addedTabs={}}on(){}tabCount(e){if(this.sessionTabs[e])return this.sessionTabs[e].tabCount}getAllOpenTabIds(e){let t=this.getAllTabInfos(e);return Object.keys(t).filter(r=>!t[r].isClosed)}getActiveTabInfo(e){return this.sessionTabs[e].lastActiveTabInfo}getAllTabIds(e){return Object.keys(this.getAllTabInfos(e)).map(t=>t)}isSessionTab(e,t){return this.getAllTabIds(e).includes(t)}createSesion(e){this.sessionTabs[e]||(this.addedTabs[e]=new Set,this.sessionTabs[e]={tabCount:0,tabInfos:{}})}setAddFrameHandlerCallBack(e){this.addFrameHandler=e}getAllTabInfoStrings(e){return this.getAllTabIds(e).map(r=>{let n=this.getTabInfo(e,r);return`tabId=${r}, url=${n.url}, order=${n.order}, isMain=${n.isMain}, openerStepId=${n.openerStepId}, isClosed=${n.isClosed}, currentUrl: ${n.currentUrl}, lastUpdatedUrl: ${n.lastUpdatedUrl}`})}getAllTabInfos(e){return this.sessionTabs[e].tabInfos}addNewTab(e,t,r,n={}){return this.addedTabs[e].has(t)?Promise.resolve():(this.addedTabs[e].add(t),Li.info(`Adding a new tab sessionId: ${e}, tabId: ${t}, openerId: ${r}`),this.addTab(e,t,this.sessionTabs[e].tabCount++,r,n))}addOpenerStepId(e,t,r){this.sessionTabs[e].tabInfos[t].openerStepId=r}addOpenerStep(e,t,r){this.sessionTabs[e].tabInfos[t].openerStepId=r.id,this.sessionTabs[e].tabInfos[t].openerOriginalStepId=r.originalStepId}fixMissingMainTab(e){if(this.getMainTabInfo(e))return;let r=this.getAllTabInfos(e);Object.keys(r).length!==0&&(Object.values(this.getAllTabInfos(e))[0].isMain=!0)}async buildTabInfo(e,t,r,n,o={}){let i=await this.getTabDetails(t,e,o),a=K();function c(l){return o.checkForMainTab?i.isMainTab:!i.isMainTab||i.isMainTab==="unknown"?!l.getMainTabInfo(e):i.isMainTab}return this.sessionTabs[e].tabInfos[t]={infoId:a,url:i.url,title:i.title,favIconUrl:i.favIconUrl,order:r,from:this.getTabInfo(e,i.openerTabId),isMain:c(this),openerStepId:n},a}async addTab(e,t,r,n,o={}){let i=await this.buildTabInfo(e,t,r,n,o),a=new As(t,this.driver);this._utils[i]={attachDebugger:()=>Promise.resolve(),detachDebugger:()=>Promise.resolve(),onDebuggerDetached:()=>{},tabId:t,domUtils:{getDOM:()=>Promise.resolve()},windowUtils:a,imageCaptureUtils:new Oi(t,a,new _i(t,this.driver,{takeScreenshots:o.takeScreenshots}))}}getTabUtilsByTabIdAndSessionId(e,t){let r=this.sessionTabs[e].tabInfos[t];return this._utils[r.infoId]}getTabUtilsByTabId(e){let t=Object.keys(this._utils).find(r=>this._utils[r].tabId===e);return this._utils[t]}getTabInfo(e,t){return this.sessionTabs[e].tabInfos[t]}getTabUtils(e,t){if(!t)return this.getMainTabUtils(e);if(this._utils[t.infoId])return this._utils[t.infoId];if(t.isMain)return this.getMainTabUtils(e);let r=this.getAllTabInfos(e),n=Object.keys(r).map(i=>r[i]).filter(i=>!i.isMain);if(n.length===1)return this._utils[n[0].infoId];let o=Object.keys(e).map(i=>e[i]).filter(i=>this.isSameTab(e,t,i));return o.length>0?this._utils[o[0].infoId]:this.getMainTabUtils(e)}exactUrlMatch(e,t,r){let n=r.filter(o=>o===t.url);return!!((e.url===t.url||e.currentUrl===t.url||e.currentUrl&&e.currentUrl===t.currentUrl)&&n.length===1)}singleExactMatchForParts(e,t,r,n){let{urlUtils:o}=se(),i=o.urlBreaker(e.url||e.currentUrl),a=o.urlBreaker(t.url||t.currentUrl),c=n(i),l=n(a),d=r.map(m=>o.urlBreaker(m)).map(m=>n(m)).filter(m=>m===c);return c===l&&d.length===1}isSameTab(e,t,r){let{tabMatcher:n}=se();if(n){let l=this.getAllTabInfos(e),d=Object.keys(l).map(m=>l[m]);return n.isSameTab(d,t,r)}if(t.isMain&&r.isMain||t.openerStepId&&r.openerStepId&&t.openerStepId===r.openerStepId)return!0;let o=this.getAllTabInfos(e),i=Object.keys(o).map(l=>o[l].url);if(this.exactUrlMatch(t,r,i))return!0;let a=l=>`${l.domain}/${l.path.join("/")}`;if(this.singleExactMatchForParts(t,r,i,a))return!0;let c=l=>`${l.domain}/${l.path.join("/")}#${l.hash}`;return!!(this.singleExactMatchForParts(t,r,i,c)||t.order===r.order)}getMainTabInfo(e){let t=this.getAllTabInfos(e);return Object.keys(t).map(r=>t[r]).find(r=>r.isMain)}getMainTabUtils(e){let t=this.getMainTabInfo(e);return t?this.getTabUtils(e,t):{}}removeTabInfo(e,t){let n=this.getAllTabInfos(e)[t];delete this.sessionTabs[e].tabInfos[t],delete this._utils[n.infoId],this.sessionTabs[e].tabCount--}getMainTabId(e){let t=this.getAllTabInfos(e);return Object.keys(t).find(r=>t[r].isMain)}isMainTabExists(e){return this.getMainTabId(e)?Promise.resolve(!0):Promise.resolve(!1)}clearAllTabs(e){let t=this.getAllTabInfos(e);this.sessionTabs[e].tabCount=0,Object.keys(t).forEach(r=>this.removeTabInfo(e,r))}clearNonMainTabs(e){let t=this.getAllTabInfos(e);Object.keys(t).filter(r=>!t[r].isMain).forEach(r=>this.removeTabInfo(e,r)),this.sessionTabs[e].tabCount=1}switchTab(e,t,{forceSwitch:r=!1}={}){let n=this.sessionTabs[t]?this.sessionTabs[t].tabCount:1;return typeof n=="number"&&n>1||r?this.driver.switchTab(e):Promise.resolve()}getTabDetails(e,t,r={}){return this.switchTab(e,t,r).then(()=>{if(r.skipLoadInfo)return{title:"",url:""};let n=Promise.resolve("unknown");return r.checkForMainTab&&(n=this.driver.executeJS("return window.__isMainTestimTab").then(o=>o.value)),Promise.all([this.driver.getTitle(),this.driver.getUrl(),n]).then(([o,i,a])=>({title:o,url:i,isMainTab:a}),o=>(Li.error("failed to get url or title",{err:o}),{title:"",url:""}))}).catch(n=>{Li.error("failed to switch to tab",{tabId:e,err:n})})}async getUnregisteredTabId(e){return(await this.driver.getTabIds()).find(r=>!this.getAllTabIds(e).includes(r))}async waitForTabToOpen(e){let t=await this.getUnregisteredTabId(e);return t||(await ie(500),await this.waitForTabToOpen(e))}async tryToAddTab(e,t){if(this.pendingTabs[e])return;let r=await this.getUnregisteredTabId(e);r&&(await this.addNewTab(e,r),await this.addFrameHandler(r),this.sessionTabs[e].currentTab=null)}addNewPopup(e,t){let r=this.getAllTabInfos(e);return Object.keys(r).find(o=>r[o].openerStepId===t)?Promise.resolve():this.pendingTabs[e]?(Li.info(`overriding opener step id from ${this.pendingTabs[e]} to ${t}`),this.pendingTabs[e]=t,Promise.resolve()):(this.pendingTabs[e]=t,this.waitForTabToOpen(e).then(o=>this.addNewTab(e,o,this.pendingTabs[e]).then(()=>this.addFrameHandler(o)).then(()=>delete this.pendingTabs[e]).then(()=>this.sessionTabs[e].currentTab=null)))}waitToPendingTabs(e,t){let n=3e3,o=this;return t?new Promise(i=>{function a(){o.pendingTabs[e]===t&&n-500>0?(n-=500,setTimeout(a,500)):i()}a()}):Promise.resolve()}isMainTabIncognito(){return Promise.resolve(!1)}isInvalidStepVersion(e){let t=ig.lt(e._version||e.version,"1.2.0"),r=!!e.parameterValues,n=r&&e.parameterValues.some(o=>o.type==="locate"&&!o.frameLocators);return t&&(!r||n)}getTabIdByTabInfo(e,t){var i,a;let{tabMatcher:r,commonConstants:n}=se();if(this.isInvalidStepVersion(t))return Promise.reject({success:!1,shouldRetry:!1,errorType:n.stepResult.INVALID_TEST_VERSION});if((i=t.useCurrentTab)!=null&&i.call(t))return this.driver.getCurrentTabId().then(c=>{if(c)return c;let l=this.getMainTabId(e);if(l)return l;throw new Error("Current tab not found")});let o=(a=t.tabInfo)==null?void 0:a.openerStepId;return this.waitToPendingTabs(e,o).then(()=>{let c;if(r){let l=this.getAllTabIds(e).map(d=>Object.assign({},this.getTabInfo(e,d),{tabId:d})).filter(d=>!d.isClosed);c=r.matchTabs(t,l)}else{let l=t.tabInfo;l?c=this.getAllTabIds(e).find(d=>{let m=this.getTabInfo(e,d);return this.isSameTab(e,m,l)}):c=this.getMainTabId(e)}return c?this.sessionTabs[e].currentTab===c?c:this.switchTab(c,e).then(()=>(this.sessionTabs[e].currentTab=c,c)).catch(l=>{let d=["no such window","no window found","the window could not be found"];if(l.message&&d.some(m=>l.message.toLowerCase().includes(m)))return this.sessionTabs[e].tabCount--,this.sessionTabs[e].tabInfos[c].isClosed=!0,this.getTabIdByTabInfo(e,t);throw l}):this.tryToAddTab(e,o).then(()=>{throw new Error("No tab ID found")})})}}});var Vu,Di,Hu=T(()=>{"use strict";Vu=class{constructor(){}select(){return console.log(`
370
370
  internal error - cant use port selector in selenium!!!!
371
- `),Promise.reject({reason:"cant use port selector in selenium!"})}prepare(){}handleLegacyDataCaching(){}},Ni=new Vu});var _s,zu=T(()=>{"use strict";$u();Ee();_s=class{constructor(e,t){this.driver=e,this._abortedSteps=[],this.cookieUtils=t||new Ps(this.driver)}get sessionPlayerInit(){return se()}getTimeStamp(){return Date.now()}getTestimId(e){if(!e)return;let{locatorBuilderUtils:t}=this.sessionPlayerInit,r=t.TESTIM_ID_FIELD_NAME;return t.isEmptyResult(e)?t.EMPTY_RESULT_ID:e.getAttribute(r)}resetAbort(){this._abortedSteps=[]}abort(e){this._abortedSteps.push(e)}get abortedSteps(){return this._abortedSteps}restoreNativeAlerts(){}executeOverloadNativeAlertsInFrame(){}getClickOffset(e,t){let{utils:r}=this.sessionPlayerInit;return e&&r.isWithinBounds(0,t.width,e.x)&&r.isWithinBounds(0,t.height,e.y)?{xOffset:e.x,yOffset:e.y}:{xOffset:t.width/2,yOffset:t.height/2}}executeInAut(e,t){return this.driver.executeJS(t).then(r=>r.value)}extractTargetText(e){return this.driver.getTargetText(e)}extractText(e){return this.driver.getElementTextJS(e)}async markDynamicParent(e,t,r){return this.driver.markDynamicParent(e,t,r)}getCookie(e){return this.cookieUtils.get({name:e}).then(t=>t?[t]:[])}setCookie(e,t){return this.cookieUtils.set(e).then(r=>[r])}getNextDynamicParent(e,t){let r=`return ${this.sessionPlayerInit.codeSnippets.getNextDynamicParent(t)}`;return this.driver.executeJS(r).then(n=>n.value)}}});function lg(s){class e{constructor(r,n){this.frameManager=r,this.locateElementPlayer=n,this._cache={}}cacheResults(r,n){this._cache[r]=n}getResultsFromCache(r){return this._cache[r]}cacheFrameLocateResults(r){if(r!=null&&r.seleniumFrameElement&&r.frameLocateResultUrl){let n=cg(r.seleniumFrameElement);n&&this.cacheResults(n,r.frameLocateResultUrl)}}async foundFrameCallback(r,n,o){let{frameOffset:i,locatedElement:a}=r,{locatorBuilderUtils:c}=se();if(c.isEmptyResult(a)){let p="got empty result in frame result, not rejected from locate element player";throw VS.error(p),new Error(p)}let u=await s.switchToLocatedFrame(a),d=cg(u.value),m=this.getResultsFromCache(d);return{frameId:-1,frameOffset:i,tabInfo:n.tabInfo,tabId:n.tabId,testimFrameId:o,testimFullFrameId:`${this.currentFrameHandler.testimFullFrameId}-${o}`,seleniumFrameElement:u.value,frameLocateResultUrl:m}}locate(r,n,o,i,a,c){let u=new this.locateElementPlayer(i);return r.targetId=`frameLocator_${n}`,u.locate(r,o,r.targetId).then(d=>(d.isVisible=!0,u.handleLocateResult(d,c,r).catch(()=>{throw new Error}))).then(d=>{let{locatedElement:m}=i.data[r.targetId];return s.getElementLocationWithPadding(m).then(p=>{let f=p.value||{top:0,left:0};return d.frameOffset={top:o.frameOffset.top+f.top,left:o.frameOffset.left+f.left},d})}).then(d=>(u.addFrameDataToContext&&u.addFrameDataToContext(d.targetId,d.locateResult),this.foundFrameCallback(d,a,r.testimFrameId))).then(d=>(this.currentFrameHandler=d,d))}async findFrame(r,n,o,i){let a=M.flags.enableFrameSwitchOptimization.isEnabled(),u=o.playback.resultsHandler.resultsByChronologicOrder.at(-1),d=1,m=Boolean(u)&&u.stepId===r.id&&u.results.length>d;if(a&&!m&&this.currentFrameHandler){let y=n.findIndex(w=>w.testimFrameId===this.currentFrameHandler.testimFrameId);if(y>-1){let w=n.slice(y+1),P=0;for(let b of w)P++,this.currentFrameHandler=await this.locate(b,P,this.currentFrameHandler,o,i,r);return this.currentFrameHandler}}let p=await i.getTopFrameHandler();p.frameOffset={top:0,left:0},await(a&&this.currentFrameHandler===p?this.currentFrameHandler:s.switchToTopFrame()),this.cacheFrameLocateResults(this.currentFrameHandler),this.currentFrameHandler=p;let h=0,g=p;for(let y of n)h++,g=await this.locate(y,h,g,o,i,r);return g}}return e}var VS,HS,zS,cg,ug=T(()=>{"use strict";j();be();Ee();VS=x("frame-locator"),HS="ELEMENT",zS="element-6066-11e4-a52e-4f735466cecf",cg=s=>s?s[HS]||s[zS]:null});var Di,Ku=T(()=>{"use strict";le();Di=()=>{try{if(qa)return!1;if(require("inspector").url())return!0}catch{}return!1}});var Ju,dg,$r,KS,Xu,Fe,Un=T(()=>{"use strict";F();Et();Ju=E(require("ws")),dg=require("events");j();le();$r=x("socket-ng-service"),KS=5e3,Xu=class extends dg.EventEmitter{constructor(){super(),this.clientId=K(),this.ws=null,this.filterMap={},this.listeners={}}onReconnect(e){$r.info("test result websocket re-connect"),setTimeout(()=>this.connect(e),KS)}formatUrl(e){return e.startsWith("http://")?e.replace("http://","ws://"):e.startsWith("https://")?e.replace("https://","wss://"):e}parseEvent(e){try{return JSON.parse(e)}catch(t){$r.error("failed to parse or trigger event",{err:t})}}connect(e){let t=this.formatUrl(Va);return Ht().then(r=>new Promise(n=>{let o={};global.proxyUri&&(o.agent=new global.ProxyAgent(global.proxyUri)),this.ws=new Ju.default(`${t}?projectId=${e}&clientId=${this.clientId}&token=${r}`,o),this.ws.on("open",()=>($r.info("websocket opened"),this.reSendAllExistingFilters(),this.onConnect&&this.onConnect(),n())),this.ws.on("close",i=>{$r.info("websocket closed",{event:i}),(!this.ws||this.ws.readyState===Ju.default.CLOSED)&&this.onReconnect(e,r,t)}),this.ws.on("error",i=>{$r.info("websocket error",{event:i})}),this.ws.on("message",i=>{let a=this.parseEvent(i);a!=null&&a.type&&this.emit(a.type,a.data)})}))}sendMessage(e){if(!this.ws){$r.warn("tried to send error when websocket was disconnected");return}try{this.ws.send(JSON.stringify(e))}catch(t){$r.error("failed to stringify message for sending",{err:t})}}listenOnce(e,t,r){let n=o=>{t(o)&&(r(o),this.removeListener(e,n))};this.on(e,n)}listenTo(e,t,r,n){function o(a){r(a)&&n(a)}(Array.isArray(t)?t:[t]).forEach(a=>{this.listeners[`${e}:${a}`]=this.listeners[`${e}:${a}`]||[];let c=o.bind(this);this.listeners[`${e}:${a}`].push(c),this.on(a,c)})}reSendAllExistingFilters(){Object.keys(this.filterMap).forEach(e=>{let t=this.filterMap[e];this.sendMessage({type:"add-filter",filter:t})})}addFilter(e,t,r,n=!1){return new Promise(o=>{let i=K(),a={query:t,id:i,type:r,fullDocument:n};this.listenOnce("add-filter:done",c=>c.id===i,o),this.sendMessage({type:"add-filter",filter:a}),this.filterMap[e]=a})}removeListeners(e,t){Object.keys(this.listeners).length!==0&&t.forEach(r=>{let n=this.listeners[`${e}:${r}`];n&&(delete this.listeners[`${e}:${r}`],n.forEach(o=>this.removeListener(r,o)))})}removeFilter(e,t){let r=this.filterMap[e];if(!r)return;let n=Array.isArray(t)?t:[t];this.removeListeners(e,n),delete this.filterMap[e],this.sendMessage({type:"remove-filter",filter:r})}},Fe=new Xu});var fg={};$(fg,{BaseSocketService:()=>Wr});var mg,Yu,JS,XS,YS,pg,Mi,Wr,Ui=T(()=>{"use strict";mg=E(require("p-retry")),Yu=E(require("socket.io-client"));le();F();j();JS=50,XS=10,YS=5e3,pg=10*1e3,Mi=x("base socket service"),Wr=class{attempts=0;rooms={};emitPromiseQueue=void 0;joinToMultipleResults(){let e=Object.keys(this.rooms);Mi.info("re-join all existing rooms",{testResultIds:e}),e.forEach(t=>{var n;let r=this.rooms[t];(n=this.emitJoinRoom)==null||n.call(this,t,r)})}joinRoom(e,t){this.rooms[e]=t}leaveRoom(e){delete this.rooms[e]}addSocketHandlers(){let e=(t,r)=>{let n="websocket";try{n=this._socket.io.engine.transport.name}catch{}Mi.error(`Error in SocketService websocket _${t}_ socket ${this._socket.id} is ${this.url} over ${n}. Reconnect attempts ${this.attempts}. Error is: ${r==null?void 0:r.message}`)};this._socket.on("reconnect_attempt",t=>{if(e("reconnect_attempt",{message:"reconnect attempt",attempt:t}),this.attempts++,this.attempts===XS&&!this.isAllowedWS&&(this._socket.io.opts.transports=["polling"],this._socket.io.opts.upgrade=!1),this.attempts>=JS)throw new Error(`Can't connect to Testim Servers.
372
- Action required: Please allow opening a websockets connection to ${he} in your firewall/proxy`)}),this._socket.on("connect_error",t=>{e("connect_error",t)}),this._socket.on("connect_timeout",t=>{e("connect_timeout",t)}),this._socket.on("error",t=>{e("error",t)}),this._socket.on("reconnect_error",t=>{this.prevErr&&this.prevErr.type===t.type||(this.prevErr=t,e("reconnect_error",t))}),this._socket.on("reconnect",()=>{Mi.info("reconnect to socket and re-join to rooms"),this.joinToMultipleResults()}),this._socket.on("connect",()=>{this.attempts=0,this.isAllowedWS===void 0&&(this.isAllowedWS=this._socket.io.engine.transport&&this._socket.io.engine.transport.name==="websocket"),this.onConnect&&this.onConnect()})}initNewSocket(e,t){let r={query:{projectId:e},requestTimeout:pg,transports:["websocket"],upgrade:!1,forceNew:!0,rejectUnauthorized:process.env.NODE_TLS_REJECT_UNAUTHORIZED!=="0"};return global.caFileContent&&(r.ca=global.caFileContent),global.proxyUri&&(r.agent=new global.ProxyAgent(global.proxyUri)),new Promise(n=>{this.url=`${he}/${t}`,this._socket=Yu.connect(this.url,r),this.addSocketHandlers(),this._socket.on("connect",n),this._socket.open()})}init(e,t){let r={query:{projectId:e},requestTimeout:pg,transports:["websocket"],upgrade:!1,rejectUnauthorized:process.env.NODE_TLS_REJECT_UNAUTHORIZED!=="0"};global.caFileContent&&(r.ca=global.caFileContent),global.proxyUri&&(r.agent=new global.ProxyAgent(global.proxyUri)),this.url=`${he}/${t}`,this._socket=Yu.connect(this.url,r),this.addSocketHandlers()}emitPromise(e,t){let r={},n=()=>new Promise((o,i)=>{this._socket.emit(e,t,a=>a!=null&&a.success?o():(r[e]=t,i(new Error("bad ack"))))});return this.emitPromiseQueue=(this.emitPromiseQueue||Promise.resolve()).then(()=>(0,mg.default)(()=>re(n(),YS),{retries:200,minTimeout:3e3,factor:1})).finally(()=>{Object.keys(r).length>0&&Mi.error("Bad acknowledge from socket emit",{errorneousEvents:r})}),this.emitPromiseQueue}}});var QS,Qu,sr,hg=T(()=>{"use strict";({BaseSocketService:QS}=(Ui(),G(fg))),Qu=class extends QS{init(e){super.init(e,"testResult"),this.listerers={}}listenToTestResult(e,t,r){this.listerers[e]&&(this._socket.off("testResult:updated",this.listerers[e]),delete this.listerers[e]),this.listerers[e]=n=>{n.resultId===e&&n.testId===t&&r(n.testResult)},this._socket.on("testResult:updated",this.listerers[e])}emitJoinRoom(e,t){return this.emitPromise("testResult:join",{resultId:e,testId:t})}joinToTestResult(e,t){return this.rooms[e]?Promise.resolve():(this.joinRoom(e,t),this.emitJoinRoom(e,t))}emitLeaveRoom(e,t){return this.emitPromise("testResult:leave",{resultId:e,testId:t})}leaveTestResult(e,t){return this.listerers[e]?(this.leaveRoom(e),this._socket.off("testResult:updated",this.listerers[e]),delete this.listerers[e],this.emitLeaveRoom(e,t)):Promise.resolve()}getSocket(){return this._socket}},sr=new Qu});var yg={};$(yg,{testResultService:()=>Ke});var gg,Zu,Ke,Os=T(()=>{"use strict";gg=require("events");Un();ae();be();hg();Zu=class extends gg.EventEmitter{init(e){if(M.flags.useNewWSCLI.isEnabled()){Fe.onConnect=()=>this.emit("socket-connected");return}sr.init(e),sr.onConnect=()=>this.emit("socket-connected")}joinToTestResult(e,t){return M.flags.useNewWSCLI.isEnabled()?Fe.addFilter(`${e}:testResult`,{resultId:e,testId:t},[Qe.TEST_RESULT_UPDATED,Qe.TEST_RESULT_CREATED]):(sr.joinRoom(e,t),sr.emitJoinRoom(e,t))}leaveTestResult(e,t){return M.flags.useNewWSCLI.isEnabled()?(Fe.removeFilter(`${e}:testResult`,[Qe.TEST_RESULT_UPDATED,Qe.TEST_RESULT_CREATED]),Promise.resolve()):sr.leaveTestResult(e,t)}listenToTestResult(e,t,r){if(M.flags.useNewWSCLI.isEnabled()){Fe.listenTo(`${e}:testResult`,[Qe.TEST_RESULT_UPDATED,Qe.TEST_RESULT_CREATED],n=>n.resultId===e&&n.testId===t,n=>r(n));return}sr.listenToTestResult(e,t,r)}getSocket(){if(!M.flags.useNewWSCLI.isEnabled())return sr.getSocket()}},Ke=new Zu});var W,ce=T(()=>{"use strict";Ee();W=class{constructor(e,t,r,n={},o=void 0,i=void 0,a={}){this.step=e,this.context=t,this.frameHandler=r,this.frameId=0,this.stepActionUtils=o,this.locateElementPlayer=i,this.exportsGlobal=n,this.exportsTest=a}get driver(){return this.stepActionUtils.driver}get sessionPlayerInit(){return se()}async performAction(){throw new Error("not implemented")}getTarget(){let e=this.step.targetId||"targetId";return this.context.data[e]}async execute(e,t){var r;try{return{success:!0,...await this.performAction(e,t)}}catch(n){let o=(n==null?void 0:n.message)||((r=n==null?void 0:n.seleniumStack)==null?void 0:r.message),i=n==null?void 0:n.displayMessage;return{success:!1,reason:o,exception:n,errorType:this.sessionPlayerInit.commonConstants.stepResult.ACTION_EXCEPTION,resultInfo:{exception:`selenium exception: ${o}`,error:i||o}}}}}});function eR(s){return{getFrameIdByTestimFrameId(){},async setElementResultDataOnContext(e){let t=await s.getElement(e.locatedElement);e.seleniumElement=t.value},getElementRectangle(e){return s.getElementRect(e)},getOffsets(e){return Promise.resolve([e.frameOffset||{}])},htmlStringToDom(e,t,r,n,o=!0){let i=new Fi.VirtualConsole,a=new Fi.JSDOM(e,{virtualConsole:i}),{window:c}=a;return o&&setTimeout(()=>{c.close()},1e3*60),Object.assign(c.document,{TESTIM_URL:t})},shouldUseNativeVisibilityCheck(e,t,r,n){return e.opacity===0||e.isShadowed?!1:r===void 0||n===void 0?!0:M.flags.useClickimVisibilityChecks.isEnabled()?!1:t.isSafari()?M.flags.useSafariWebdriverVisibilityChecks.isEnabled():!0},async isVisible(e,t,r,n,o,i,a){let{locatorBuilderUtils:c,codeSnippets:u,visibilityUtils:d,positionUtils:m}=se();if(this.shouldUseNativeVisibilityCheck(n,s,d,m))return s.isVisible(e.seleniumElement);if(!e.seleniumElement)return{visible:!1,invisibleReason:"element not found"};try{await s.isVisible(e.seleniumElement)}catch{}if(!t||c.isEmptyResult(t))return{visible:!1,invisibleReason:"element not found"};let h=[m.calculateElementMiddlePoint(r),m.calculateClickPoint(n.clickOffset,r)].filter(Boolean),g=u.getVisibilityCode.getCompoundVisibilityInfoCode(e.locatedElement,h,!1,n),y;try{y=await s.execute(`return ${g}`)}catch(I){throw Gr.error("failed to execute getVisibilityCode",{err:I}),I}let{value:w}=y||{},P=w.elementVisibilityInfo||ZS,[b,v]=w.elementsFromPointResults||[null,null];return d.checkElementVisibility(P,n,v,b,a,t)},scrollToElement(e,t){let{codeSnippets:r}=se(),n=r.scrollToElement;return s.execute(n(t))}}}var Fi,Gr,ZS,Fn,bg=T(()=>{"use strict";Fi=require("jsdom");ce();j();be();Ee();Gr=x("locate-step-action"),ZS={opacity:1,clientRects:{}};Fn=class extends W{execute(){return this.driver.getHTML(this.step)}static getUtils(e){return Object.assign(eR(e),{useLocatedElement:!0})}static getFrameIdByTestimFrameId(...e){throw Gr.warn("Unplanned access to getFrameIdByTestimFrameId()"),new Error("Use .getUtils() instead")}static setElementResultDataOnContext(...e){throw Gr.warn("Unplanned access to setElementResultDataOnContext()"),new Error("Use .getUtils() instead")}static getElementRectangle(...e){throw Gr.warn("Unplanned access to getElementRectangle()"),new Error("Use .getUtils() instead")}static getOffsets(...e){throw Gr.warn("Unplanned access to getOffsets()"),new Error("Use .getUtils() instead")}static htmlStringToDom(...e){throw Gr.warn("Unplanned access to htmlStringToDom()"),new Error("Use .getUtils() instead")}static isVisible(...e){throw Gr.warn("Unplanned access to isVisible()"),new Error("Use .getUtils() instead")}}});var wg,Tg=T(()=>{"use strict";wg=function(s,e,t,r,n,o,i,a){function c(w,P){if(!P)return{success:!1};elementScrollTo(P,w.x,w.y);let b=P.scrollLeft,v=P.scrollTop;return{success:Math.abs(v-w.y)<1&&Math.abs(b-w.x)<1,actualX:b,actualY:v}}function u(w,P,b,v,I,k,D){if(!b)return{x:v,y:I};let S=getLocatedElement(P);if(r&&!S)return{x:w.scrollWidth,y:w.scrollHeight};if(!S)throw new Error("could not find target element");let _=S.getBoundingClientRect(),C=0,L=0,B=Math.max(window.innerHeight-(_.height+10),0),V=Math.max(window.innerWidth-(_.width+10),0);return C=D?w.scrollTop+_.top-Math.min(I,B):w.scrollTop,L=k?w.scrollLeft+_.left-Math.min(v,V):w.scrollLeft,{x:Math.round(L),y:Math.round(C)}}let d=!s;if(s=d?document.scrollingElement||document.documentElement:getLocatedElement(s),!s)throw new Error("could not find target to scroll on");let m={top:s.scrollTop,left:s.scrollLeft},p=u(s,e,t,n,o,i,a),f=c(p,s);d&&!document.scrollingElement&&!f.success&&m.top===s.scrollTop&&m.left===s.scrollLeft&&(s=document.body,p=u(s,e,t,n,o,i,a),f=c(p,s));let h=f.actualX,g=f.actualY,y=getLocatedElement(e);if(t&&r&&!y)return{success:!1,expectedPosition:p};if(t){if(!y)throw new Error("could not find target to scroll to");let w=y.getBoundingClientRect();h=w.left,g=w.top}return{success:f.success,actualX:h,actualY:g}}});var ji,vg=T(()=>{"use strict";Tg();ce();ji=class extends W{getFailureString(e,t,r,n,o){if(!e.isScrollToElement)return`Scrolling limit reached. Expected:(y: ${r}, x: ${t}); Actual:(y:${o}, x: ${n})`;let i="Scrolling limit reached";return e.shouldScrollTop&&(i+=`. Expected top margin: ${r}, actual: ${o}`),e.shouldScrollLeft&&(i+=`. Expected left margin: ${t}, actual: ${n}`),i}async scroll(e,t,r){let{codeSnippets:n,commonConstants:{stepResult:o}}=this.sessionPlayerInit,i=Math.round(Number(t.isScrollToElement?t.marginTop:t.y)),a=Math.round(Number(t.isScrollToElement?t.marginLeft:t.x)),c=this.driver.isFirefox()?function(d,m,p){d.scrollTo(m,p)}:function(d,m,p){d.scrollTop=p,d.scrollLeft=m},u=`
371
+ `),Promise.reject({reason:"cant use port selector in selenium!"})}prepare(){}handleLegacyDataCaching(){}},Di=new Vu});var _s,zu=T(()=>{"use strict";$u();Ee();_s=class{constructor(e,t){this.driver=e,this._abortedSteps=[],this.cookieUtils=t||new Cs(this.driver)}get sessionPlayerInit(){return se()}getTimeStamp(){return Date.now()}getTestimId(e){if(!e)return;let{locatorBuilderUtils:t}=this.sessionPlayerInit,r=t.TESTIM_ID_FIELD_NAME;return t.isEmptyResult(e)?t.EMPTY_RESULT_ID:e.getAttribute(r)}resetAbort(){this._abortedSteps=[]}abort(e){this._abortedSteps.push(e)}get abortedSteps(){return this._abortedSteps}restoreNativeAlerts(){}executeOverloadNativeAlertsInFrame(){}getClickOffset(e,t){let{utils:r}=this.sessionPlayerInit;return e&&r.isWithinBounds(0,t.width,e.x)&&r.isWithinBounds(0,t.height,e.y)?{xOffset:e.x,yOffset:e.y}:{xOffset:t.width/2,yOffset:t.height/2}}executeInAut(e,t){return this.driver.executeJS(t).then(r=>r.value)}extractTargetText(e){return this.driver.getTargetText(e)}extractText(e){return this.driver.getElementTextJS(e)}async markDynamicParent(e,t,r){return this.driver.markDynamicParent(e,t,r)}getCookie(e){return this.cookieUtils.get({name:e}).then(t=>t?[t]:[])}setCookie(e,t){return this.cookieUtils.set(e).then(r=>[r])}getNextDynamicParent(e,t){let r=`return ${this.sessionPlayerInit.codeSnippets.getNextDynamicParent(t)}`;return this.driver.executeJS(r).then(n=>n.value)}}});function lg(s){class e{constructor(r,n){this.frameManager=r,this.locateElementPlayer=n,this._cache={}}cacheResults(r,n){this._cache[r]=n}getResultsFromCache(r){return this._cache[r]}cacheFrameLocateResults(r){if(r!=null&&r.seleniumFrameElement&&r.frameLocateResultUrl){let n=cg(r.seleniumFrameElement);n&&this.cacheResults(n,r.frameLocateResultUrl)}}async foundFrameCallback(r,n,o){let{frameOffset:i,locatedElement:a}=r,{locatorBuilderUtils:c}=se();if(c.isEmptyResult(a)){let p="got empty result in frame result, not rejected from locate element player";throw qS.error(p),new Error(p)}let l=await s.switchToLocatedFrame(a),d=cg(l.value),m=this.getResultsFromCache(d);return{frameId:-1,frameOffset:i,tabInfo:n.tabInfo,tabId:n.tabId,testimFrameId:o,testimFullFrameId:`${this.currentFrameHandler.testimFullFrameId}-${o}`,seleniumFrameElement:l.value,frameLocateResultUrl:m}}locate(r,n,o,i,a,c){let l=new this.locateElementPlayer(i);return r.targetId=`frameLocator_${n}`,l.locate(r,o,r.targetId).then(d=>(d.isVisible=!0,l.handleLocateResult(d,c,r).catch(()=>{throw new Error}))).then(d=>{let{locatedElement:m}=i.data[r.targetId];return s.getElementLocationWithPadding(m).then(p=>{let f=p.value||{top:0,left:0};return d.frameOffset={top:o.frameOffset.top+f.top,left:o.frameOffset.left+f.left},d})}).then(d=>(l.addFrameDataToContext&&l.addFrameDataToContext(d.targetId,d.locateResult),this.foundFrameCallback(d,a,r.testimFrameId))).then(d=>(this.currentFrameHandler=d,d))}async findFrame(r,n,o,i){let a=U.flags.enableFrameSwitchOptimization.isEnabled(),l=o.playback.resultsHandler.resultsByChronologicOrder.at(-1),d=1,m=Boolean(l)&&l.stepId===r.id&&l.results.length>d;if(a&&!m&&this.currentFrameHandler){let y=n.findIndex(w=>w.testimFrameId===this.currentFrameHandler.testimFrameId);if(y>-1){let w=n.slice(y+1),C=0;for(let b of w)C++,this.currentFrameHandler=await this.locate(b,C,this.currentFrameHandler,o,i,r);return this.currentFrameHandler}}let p=await i.getTopFrameHandler();p.frameOffset={top:0,left:0},await(a&&this.currentFrameHandler===p?this.currentFrameHandler:s.switchToTopFrame()),this.cacheFrameLocateResults(this.currentFrameHandler),this.currentFrameHandler=p;let h=0,g=p;for(let y of n)h++,g=await this.locate(y,h,g,o,i,r);return g}}return e}var qS,VS,HS,cg,ug=T(()=>{"use strict";j();be();Ee();qS=x("frame-locator"),VS="ELEMENT",HS="element-6066-11e4-a52e-4f735466cecf",cg=s=>s?s[VS]||s[HS]:null});var Mi,Ku=T(()=>{"use strict";le();Mi=()=>{try{if(Va)return!1;if(require("inspector").url())return!0}catch{}return!1}});var Ju,dg,Wr,zS,Xu,Fe,Mn=T(()=>{"use strict";F();Et();Ju=E(require("ws")),dg=require("events");j();le();Wr=x("socket-ng-service"),zS=5e3,Xu=class extends dg.EventEmitter{constructor(){super(...arguments);this.clientId=K();this.ws=null;this.filterMap={};this.listeners={}}onReconnect(t){Wr.info("test result websocket re-connect"),setTimeout(()=>this.connect(t),zS)}formatUrl(t){return t.startsWith("http://")?t.replace("http://","ws://"):t.startsWith("https://")?t.replace("https://","wss://"):t}parseEvent(t){try{return JSON.parse(t)}catch(r){Wr.error("failed to parse or trigger event",{err:r})}}connect(t){let r=this.formatUrl(Ha);return Ht().then(n=>new Promise(o=>{let i={...global.proxyUri&&{agent:new global.ProxyAgent(global.proxyUri)}};this.ws=new Ju.default(`${r}?projectId=${t}&clientId=${this.clientId}&token=${n}`,i),this.ws.on("open",()=>{var a;return Wr.info("websocket opened"),this.reSendAllExistingFilters(),(a=this.onConnect)==null||a.call(this),o()}),this.ws.on("close",a=>{Wr.info("websocket closed",{event:a}),(!this.ws||this.ws.readyState===Ju.default.CLOSED)&&this.onReconnect(t)}),this.ws.on("error",a=>{Wr.info("websocket error",{event:a})}),this.ws.on("message",a=>{let c=this.parseEvent(a);c!=null&&c.type&&this.emit(c.type,c.data)})}))}sendMessage(t){if(!this.ws){Wr.warn("tried to send error when websocket was disconnected");return}try{this.ws.send(JSON.stringify(t))}catch(r){Wr.error("failed to stringify message for sending",{err:r})}}listenOnce(t,r,n){let o=i=>{r(i)&&(n(i),this.removeListener(t,o))};this.on(t,o)}listenTo(t,r,n,o){function i(c){n(c)&&o(c)}(Array.isArray(r)?r:[r]).forEach(c=>{var d,m;(d=this.listeners)[m=`${t}:${c}`]||(d[m]=[]);let l=i.bind(this);this.listeners[`${t}:${c}`].push(l),this.on(c,l)})}reSendAllExistingFilters(){Object.keys(this.filterMap).forEach(t=>{let r=this.filterMap[t];this.sendMessage({type:"add-filter",filter:r})})}addFilter(t,r,n,o=!1){return new Promise(i=>{let a=K(),c={query:r,id:a,type:n,fullDocument:o};this.listenOnce("add-filter:done",l=>l.id===a,i),this.sendMessage({type:"add-filter",filter:c}),this.filterMap[t]=c})}removeListeners(t,r){Object.keys(this.listeners).length!==0&&r.forEach(n=>{let o=this.listeners[`${t}:${n}`];o&&(delete this.listeners[`${t}:${n}`],o.forEach(i=>this.removeListener(n,i)))})}removeFilter(t,r){let n=this.filterMap[t];if(!n)return;let o=Array.isArray(r)?r:[r];this.removeListeners(t,o),delete this.filterMap[t],this.sendMessage({type:"remove-filter",filter:n})}},Fe=new Xu});var mg,Yu,KS,JS,XS,pg,Ui,sr,Fi=T(()=>{"use strict";mg=E(require("p-retry")),Yu=E(require("socket.io-client"));le();F();j();KS=50,JS=10,XS=5e3,pg=10*1e3,Ui=x("base socket service"),sr=class{constructor(){this.attempts=0;this.rooms={};this.emitPromiseQueue=void 0}joinToMultipleResults(){let e=Object.keys(this.rooms);Ui.info("re-join all existing rooms",{testResultIds:e}),e.forEach(t=>{var n;let r=this.rooms[t];(n=this.emitJoinRoom)==null||n.call(this,t,r)})}joinRoom(e,t){this.rooms[e]=t}leaveRoom(e){delete this.rooms[e]}addSocketHandlers(){let e=(t,r)=>{let n="websocket";try{n=this._socket.io.engine.transport.name}catch{}Ui.error(`Error in SocketService websocket _${t}_ socket ${this._socket.id} is ${this.url} over ${n}. Reconnect attempts ${this.attempts}. Error is: ${r==null?void 0:r.message}`)};this._socket.on("reconnect_attempt",t=>{if(e("reconnect_attempt",{message:"reconnect attempt",attempt:t}),this.attempts++,this.attempts===JS&&!this.isAllowedWS&&(this._socket.io.opts.transports=["polling"],this._socket.io.opts.upgrade=!1),this.attempts>=KS)throw new Error(`Can't connect to Testim Servers.
372
+ Action required: Please allow opening a websockets connection to ${he} in your firewall/proxy`)}),this._socket.on("connect_error",t=>{e("connect_error",t)}),this._socket.on("connect_timeout",t=>{e("connect_timeout",t)}),this._socket.on("error",t=>{e("error",t)}),this._socket.on("reconnect_error",t=>{this.prevErr&&this.prevErr.type===t.type||(this.prevErr=t,e("reconnect_error",t))}),this._socket.on("reconnect",()=>{Ui.info("reconnect to socket and re-join to rooms"),this.joinToMultipleResults()}),this._socket.on("connect",()=>{var t;this.attempts=0,this.isAllowedWS===void 0&&(this.isAllowedWS=this._socket.io.engine.transport&&this._socket.io.engine.transport.name==="websocket"),(t=this.onConnect)==null||t.call(this)})}initNewSocket(e,t){let r={query:{projectId:e},requestTimeout:pg,transports:["websocket"],upgrade:!1,forceNew:!0,rejectUnauthorized:process.env.NODE_TLS_REJECT_UNAUTHORIZED!=="0",...global.caFileContent&&{ca:global.caFileContent},...global.proxyUri&&{agent:new global.ProxyAgent(global.proxyUri)}};return new Promise(n=>{this.url=`${he}/${t}`,this._socket=Yu.connect(this.url,r),this.addSocketHandlers(),this._socket.on("connect",n),this._socket.open()})}init(e,t){let r={query:{projectId:e},requestTimeout:pg,transports:["websocket"],upgrade:!1,rejectUnauthorized:process.env.NODE_TLS_REJECT_UNAUTHORIZED!=="0",...global.caFileContent&&{ca:global.caFileContent},...global.proxyUri&&{agent:new global.ProxyAgent(global.proxyUri)}};this.url=`${he}/${t}`,this._socket=Yu.connect(this.url,r),this.addSocketHandlers()}emitPromise(e,t){let r={},n=()=>new Promise((o,i)=>{this._socket.emit(e,t,a=>a!=null&&a.success?o():(r[e]=t,i(new Error("bad ack"))))});return this.emitPromiseQueue=(this.emitPromiseQueue||Promise.resolve()).then(()=>(0,mg.default)(()=>re(n(),XS),{retries:200,minTimeout:3e3,factor:1})).finally(()=>{Object.keys(r).length>0&&Ui.error("Bad acknowledge from socket emit",{errorneousEvents:r})}),this.emitPromiseQueue}}});var Qu,nr,fg=T(()=>{"use strict";Fi();Qu=class extends sr{constructor(){super(...arguments);this.listerers={}}init(t){super.init(t,"testResult"),this.listerers={}}listenToTestResult(t,r,n){this.listerers[t]&&(this._socket.off("testResult:updated",this.listerers[t]),delete this.listerers[t]),this.listerers[t]=o=>{o.resultId===t&&o.testId===r&&n(o.testResult)},this._socket.on("testResult:updated",this.listerers[t])}emitJoinRoom(t,r){return this.emitPromise("testResult:join",{resultId:t,testId:r})}joinToTestResult(t,r){return this.rooms[t]?Promise.resolve():(this.joinRoom(t,r),this.emitJoinRoom(t,r))}emitLeaveRoom(t,r){return this.emitPromise("testResult:leave",{resultId:t,testId:r})}leaveTestResult(t,r){return this.listerers[t]?(this.leaveRoom(t),this._socket.off("testResult:updated",this.listerers[t]),delete this.listerers[t],this.emitLeaveRoom(t,r)):Promise.resolve()}getSocket(){return this._socket}},nr=new Qu});var gg={};$(gg,{testResultService:()=>Ke});var hg,Zu,Ke,Os=T(()=>{"use strict";hg=require("events");Mn();ae();be();fg();Zu=class extends hg.EventEmitter{init(e){if(U.flags.useNewWSCLI.isEnabled()){Fe.onConnect=()=>this.emit("socket-connected");return}nr.init(e),nr.onConnect=()=>this.emit("socket-connected")}joinToTestResult(e,t){return U.flags.useNewWSCLI.isEnabled()?Fe.addFilter(`${e}:testResult`,{resultId:e,testId:t},[Qe.TEST_RESULT_UPDATED,Qe.TEST_RESULT_CREATED]):(nr.joinRoom(e,t),nr.emitJoinRoom(e,t))}leaveTestResult(e,t){return U.flags.useNewWSCLI.isEnabled()?(Fe.removeFilter(`${e}:testResult`,[Qe.TEST_RESULT_UPDATED,Qe.TEST_RESULT_CREATED]),Promise.resolve()):nr.leaveTestResult(e,t)}listenToTestResult(e,t,r){if(U.flags.useNewWSCLI.isEnabled()){Fe.listenTo(`${e}:testResult`,[Qe.TEST_RESULT_UPDATED,Qe.TEST_RESULT_CREATED],n=>n.resultId===e&&n.testId===t,n=>r(n));return}nr.listenToTestResult(e,t,r)}getSocket(){if(!U.flags.useNewWSCLI.isEnabled())return nr.getSocket()}},Ke=new Zu});var W,ce=T(()=>{"use strict";Ee();W=class{constructor(e,t,r,n={},o=void 0,i=void 0,a={}){this.step=e,this.context=t,this.frameHandler=r,this.frameId=0,this.stepActionUtils=o,this.locateElementPlayer=i,this.exportsGlobal=n,this.exportsTest=a}get driver(){return this.stepActionUtils.driver}get sessionPlayerInit(){return se()}async performAction(){throw new Error("not implemented")}getTarget(){let e=this.step.targetId||"targetId";return this.context.data[e]}async execute(e,t){var r;try{return{success:!0,...await this.performAction(e,t)}}catch(n){let o=(n==null?void 0:n.message)||((r=n==null?void 0:n.seleniumStack)==null?void 0:r.message),i=n==null?void 0:n.displayMessage;return{success:!1,reason:o,exception:n,errorType:this.sessionPlayerInit.commonConstants.stepResult.ACTION_EXCEPTION,resultInfo:{exception:`selenium exception: ${o}`,error:i||o}}}}}});function QS(s){return{getFrameIdByTestimFrameId(){},async setElementResultDataOnContext(e){let t=await s.getElement(e.locatedElement);e.seleniumElement=t.value},getElementRectangle(e){return s.getElementRect(e)},getOffsets(e){return Promise.resolve([e.frameOffset||{}])},htmlStringToDom(e,t,r,n,o=!0){let i=new ji.VirtualConsole,a=new ji.JSDOM(e,{virtualConsole:i}),{window:c}=a;return o&&setTimeout(()=>{c.close()},1e3*60),Object.assign(c.document,{TESTIM_URL:t})},shouldUseNativeVisibilityCheck(e,t,r,n){return e.opacity===0||e.isShadowed?!1:r===void 0||n===void 0?!0:U.flags.useClickimVisibilityChecks.isEnabled()?!1:t.isSafari()?U.flags.useSafariWebdriverVisibilityChecks.isEnabled():!0},async isVisible(e,t,r,n,o,i,a){let{locatorBuilderUtils:c,codeSnippets:l,visibilityUtils:d,positionUtils:m}=se();if(this.shouldUseNativeVisibilityCheck(n,s,d,m))return s.isVisible(e.seleniumElement);if(!e.seleniumElement)return{visible:!1,invisibleReason:"element not found"};try{await s.isVisible(e.seleniumElement)}catch{}if(!t||c.isEmptyResult(t))return{visible:!1,invisibleReason:"element not found"};let h=[m.calculateElementMiddlePoint(r),m.calculateClickPoint(n.clickOffset,r)].filter(Boolean),g=l.getVisibilityCode.getCompoundVisibilityInfoCode(e.locatedElement,h,!1,n),y;try{y=await s.execute(`return ${g}`)}catch(I){throw Gr.error("failed to execute getVisibilityCode",{err:I}),I}let{value:w}=y||{},C=w.elementVisibilityInfo||YS,[b,v]=w.elementsFromPointResults||[null,null];return d.checkElementVisibility(C,n,v,b,a,t)},scrollToElement(e,t){let{codeSnippets:r}=se(),n=r.scrollToElement;return s.execute(n(t))}}}var ji,Gr,YS,Un,yg=T(()=>{"use strict";ji=require("jsdom");ce();j();be();Ee();Gr=x("locate-step-action"),YS={opacity:1,clientRects:{}};Un=class extends W{execute(){return this.driver.getHTML(this.step)}static getUtils(e){return Object.assign(QS(e),{useLocatedElement:!0})}static getFrameIdByTestimFrameId(...e){throw Gr.warn("Unplanned access to getFrameIdByTestimFrameId()"),new Error("Use .getUtils() instead")}static setElementResultDataOnContext(...e){throw Gr.warn("Unplanned access to setElementResultDataOnContext()"),new Error("Use .getUtils() instead")}static getElementRectangle(...e){throw Gr.warn("Unplanned access to getElementRectangle()"),new Error("Use .getUtils() instead")}static getOffsets(...e){throw Gr.warn("Unplanned access to getOffsets()"),new Error("Use .getUtils() instead")}static htmlStringToDom(...e){throw Gr.warn("Unplanned access to htmlStringToDom()"),new Error("Use .getUtils() instead")}static isVisible(...e){throw Gr.warn("Unplanned access to isVisible()"),new Error("Use .getUtils() instead")}}});var bg,wg=T(()=>{"use strict";bg=function(s,e,t,r,n,o,i,a){function c(w,C){if(!C)return{success:!1};elementScrollTo(C,w.x,w.y);let b=C.scrollLeft,v=C.scrollTop;return{success:Math.abs(v-w.y)<1&&Math.abs(b-w.x)<1,actualX:b,actualY:v}}function l(w,C,b,v,I,k,D){if(!b)return{x:v,y:I};let S=getLocatedElement(C);if(r&&!S)return{x:w.scrollWidth,y:w.scrollHeight};if(!S)throw new Error("could not find target element");let _=S.getBoundingClientRect(),P=0,L=0,B=Math.max(window.innerHeight-(_.height+10),0),V=Math.max(window.innerWidth-(_.width+10),0);return P=D?w.scrollTop+_.top-Math.min(I,B):w.scrollTop,L=k?w.scrollLeft+_.left-Math.min(v,V):w.scrollLeft,{x:Math.round(L),y:Math.round(P)}}let d=!s;if(s=d?document.scrollingElement||document.documentElement:getLocatedElement(s),!s)throw new Error("could not find target to scroll on");let m={top:s.scrollTop,left:s.scrollLeft},p=l(s,e,t,n,o,i,a),f=c(p,s);d&&!document.scrollingElement&&!f.success&&m.top===s.scrollTop&&m.left===s.scrollLeft&&(s=document.body,p=l(s,e,t,n,o,i,a),f=c(p,s));let h=f.actualX,g=f.actualY,y=getLocatedElement(e);if(t&&r&&!y)return{success:!1,expectedPosition:p};if(t){if(!y)throw new Error("could not find target to scroll to");let w=y.getBoundingClientRect();h=w.left,g=w.top}return{success:f.success,actualX:h,actualY:g}}});var Bi,Tg=T(()=>{"use strict";wg();ce();Bi=class extends W{getFailureString(e,t,r,n,o){if(!e.isScrollToElement)return`Scrolling limit reached. Expected:(y: ${r}, x: ${t}); Actual:(y:${o}, x: ${n})`;let i="Scrolling limit reached";return e.shouldScrollTop&&(i+=`. Expected top margin: ${r}, actual: ${o}`),e.shouldScrollLeft&&(i+=`. Expected left margin: ${t}, actual: ${n}`),i}async scroll(e,t,r){let{codeSnippets:n,commonConstants:{stepResult:o}}=this.sessionPlayerInit,i=Math.round(Number(t.isScrollToElement?t.marginTop:t.y)),a=Math.round(Number(t.isScrollToElement?t.marginLeft:t.x)),c=this.driver.isFirefox()?function(d,m,p){d.scrollTo(m,p)}:function(d,m,p){d.scrollTop=p,d.scrollLeft=m},l=`
373
373
  var getLocatedElement = ${n.getLocatedElementCode};
374
374
  var elementScrollTo = ${c.toString()};
375
- var scroll = ${wg.toString()};
375
+ var scroll = ${bg.toString()};
376
376
  return scroll.apply(null, arguments)
377
- `;try{let d=await this.driver.executeJSWithArray(u,[r,e,Boolean(t.isScrollToElement),Boolean(t.isDynamicScroll),a,i,t.shouldScrollLeft,t.shouldScrollTop]);if(!(d!=null&&d.value))return{errorType:o.SCROLL_ACTION_FAILURE,success:!1};let{success:m,actualX:p,actualY:f}=d.value;return m?{success:!0}:{errorType:o.SCROLL_ACTION_FAILURE,success:!1,resultInfo:{error:this.getFailureString(t,a,i,p,f)}}}catch{return{errorType:o.SCROLL_ACTION_FAILURE,success:!1}}}scrollOnDocument(e,t){return this.scroll(t,e)}scrollOnElement(e,t){return this.scroll(t,e,this.getTarget().locatedElement)}execute(){let e=this.context,t=this.step,r=t.isScrollToElement?e.data.scrollToElement.locatedElement:null;return t.element.isDocument?this.scrollOnDocument(t,r):this.scrollOnElement(t,r)}}});var Eg,Sg=T(()=>{"use strict";Eg=function(s){let e={};function t(a){return a!=null&&a.toLowerCase?(a=a.toLowerCase(),a==="text"?"text/plain":a==="url"?"text/uri-list":a):a}let r={data:{},setData(a,c){e[t(a)]=c},getData(a){return e[t(a)]}},n=getLocatedElement(s.fromLocatedElement),o=getLocatedElement(s.toLocatedElement);if(!n)throw new Error("from element not found");if(!o)throw new Error("to element not found");let i=function(a,c){let u=document.createEvent("CustomEvent");u.initCustomEvent(c,!0,!0,null),u.dataTransfer=r,a.dispatchEvent?a.dispatchEvent(u):a.fireEvent&&a.fireEvent(`on${c}`,u)};i(n,"dragstart"),i(o,"drop"),i(n,"dragend")}});var Rg,Ig=T(()=>{"use strict";Rg=(s,e)=>{let t=typeof Event=="function";window.__unloadNavigator=i,window.addEventListener("unload",window.__unloadNavigator);function r(b,v){var D;function I(S){function _(B){return o(B).find(V=>Array.apply(null,V.classList||[]).includes("Select-control"))}function C(B){let V=_(B);return V?V.querySelector("INPUT"):null}let L=C(S);L&&L.focus()}let k=(D=b.quirks)==null?void 0:D.isReactSelect;v.type==="mousedown"&&k&&I(b.element)}function n(b,v){var k;let I=(k=b.quirks)==null?void 0:k.isCKEditorFrame;v.type==="click"&&I&&document.body.focus()}function o(b){return b?[b].concat(o(b.parentNode)):[]}function i(b){let v={status:"done",result:b,success:!0};P.isNonTextableElemnet&&(v.reason="Set text on non input element"),e(v)}function a(b){b=b||{},e({status:"failed",result:b,success:!1})}function c(b){let v=t?new Event("mouseover",{composed:!0}):document.createEvent("Events");v.initEvent("mouseover",!0,!0),b.dispatchEvent(v)}function u(b){let v={},I=b.getBoundingClientRect(),k=I.left+I.width/2,D=I.top+I.height/2,C=f("mousemove",v,k,D,0);b.dispatchEvent(C)}function d(b,v){function I(C,L,B){return B>C&&B<L}let k=b.pointerPosition||{},D=v.getBoundingClientRect(),S=k.originX&&I(D.left,D.left+D.width,k.originX)?k.originX:D.left+D.width/2,_=k.originY&&I(D.top,D.top+D.height,k.originY)?k.originY:D.top+D.height/2;return{x:S,y:_}}function m(b,v,I){return{screenX:0,screenY:0,clientX:v,clientY:I,ctrlKey:Boolean(b.ctrl),altKey:Boolean(b.alt),shiftKey:Boolean(b.shift),metaKey:Boolean(b.meta),bubbles:!0,cancelable:!0,composed:!0}}function p(b,v,I,k){if(!window.PointerEvent)return;let D=m(v,I,k);return D.pointerType="mouse",D.isPrimary=!0,new window.PointerEvent(b,D)}function f(b,v,I,k,D){let S=t?new MouseEvent("click",{composed:!0}):document.createEvent("MouseEvents");return S.initMouseEvent(b,!0,!0,document.defaultView,1,0,0,I,k,Boolean(v.ctrl),Boolean(v.alt),Boolean(v.shift),Boolean(v.meta),D,document.body?document.body.parentNode:document.documentElement),S}function h(b,v){let I=["pointerup","pointerdown","pointermove"],k=v.modifiers||{},D=d(b,v.element),S=v.button||0,_=b.event;return I.includes(_)?p(_,k,D.x,D.y):f(_,k,D.x,D.y,S)}function g(){var v;let b=document.activeElement;for(;(v=b.shadowRoot)!=null&&v.activeElement;)b=b.shadowRoot.activeElement;return b}function y(b){b.events.map(v=>{try{return h(v,b)}catch{return}}).filter(Boolean).forEach(v=>{b.element.dispatchEvent(v),r(b,v),n(b,v)}),window.__unloadNavigator&&window.removeEventListener("unload",window.__unloadNavigator)}var P={element:s.isRoot?document.documentElement:getLocatedElement(s.locatedElement),events:s.events,quirks:s.quirks,modifiers:s.modifiers,button:s.button};if(!P.element){a("element not found");return}c(P.element),u(P.element);try{y(P);let b=g(),v=P.quirks,I=v==null?void 0:v.isReactSelect,k=v==null?void 0:v.isCKEditorFrame;!I&&!k&&dispatchFocus(s.elementToFocusLocatedElement,b),i()}catch(b){a(b.toString())}}});var xg,Cg=T(()=>{"use strict";xg=function(s,e){let t=typeof Event=="function",r=typeof PointerEvent=="function",n=40;window.__unloadNavigator=o,window.addEventListener("unload",window.__unloadNavigator);function o(b){e({status:"done",result:b,success:!0})}function i(b){b=b||{},e({status:"failed",result:b,success:!1})}function a(b){let v=t?new Event("mouseover",{composed:!0}):document.createEvent("Events");v.initEvent("mouseover",!0,!0),b.dispatchEvent(v)}function c(b){let v={},I=b.getBoundingClientRect(),k=I.left+I.width/2,D=I.top+I.height/2,C=p("mousemove",v,k,D,0);b.dispatchEvent(C)}function u(b,v){function I(C,L,B){return B>C&&B<L}let k=b.pointerPosition||{};if(P.isDrag)return{x:k.originX||0,y:k.originY||0};let D=v.getBoundingClientRect(),S=k.originX&&I(D.left,D.left+D.width,k.originX)?k.originX:D.left+D.width/2,_=k.originY&&I(D.top,D.top+D.height,k.originY)?k.originY:D.top+D.height/2;return{x:S,y:_}}function d(b,v,I){return{screenX:0,screenY:0,clientX:v,clientY:I,ctrlKey:Boolean(b.ctrl),altKey:Boolean(b.alt),shiftKey:Boolean(b.shift),metaKey:Boolean(b.meta),bubbles:!0,cancelable:!0,composed:!0}}function m(b,v,I,k,D){if(r){let _=d(v,I,k);return _.pointerType="mouse",_.isPrimary=!0,new window.PointerEvent(b,_)}let S=document.createEvent("PointerEvent");return S.initPointerEvent(b,!0,!0,document.defaultView,1,0,0,I,k,Boolean(v.ctrl),Boolean(v.alt),Boolean(v.shift),Boolean(v.meta),D,document.body?document.body.parentNode:document.documentElement,0,0,0,0,0,0,0,0,0,"mouse",0,!0),S}function p(b,v,I,k,D){let S=t?new MouseEvent("click",{composed:!0}):document.createEvent("MouseEvents");return S.initMouseEvent(b,!0,!0,document.defaultView,1,0,0,I,k,Boolean(v.ctrl),Boolean(v.alt),Boolean(v.shift),Boolean(v.meta),D,document.body?document.body.parentNode:document.documentElement),S}function f(b,v){let I=["pointerup","pointerdown","pointermove"],k=v.modifiers||{},D=u(b,v.element),S=v.button||0,_=b.event;return I.includes(_)?m(_,k,D.x,D.y,S):p(_,k,D.x,D.y,S)}function h(b,v){function I(){return b.event==="click"&&v.isDrag&&!v.allEventsOnSameElement}return I()}function g(b,v,I){try{let k=f(v.events[b],v);h(k,v)||v.element.dispatchEvent(k)}catch{}if(b+1===v.events.length)I();else{let k=Math.min(v.events[b+1].timeStamp-v.events[b].timeStamp,n);setTimeout(()=>{g(b+1,v,I)},k)}}function y(b,v){g(0,b,()=>{window.__unloadNavigator&&window.removeEventListener("unload",window.__unloadNavigator),v()})}let P={eventIndex:0,element:s.isRoot?document.documentElement:getLocatedElement(s.locatedElement),events:s.events,eventType:s.eventType,eventData:s.eventData,stepId:s.id,testResultId:s.testResultId,quirks:s.quirks,isDoubleClick:s.isDoubleClick,isDrag:s.isDrag,useRecordedMousedown:s.useRecordedMousedown,trackActiveElement:s.trackActiveElement,allEventsOnSameElement:s.allEventsOnSameElement};if(!P.element){i("element not found");return}a(P.element),c(P.element),y(P,()=>{o()})}});var Pg,Ag=T(()=>{"use strict";Pg=function(s,e){let t=typeof MouseEvent=="function",r=typeof DragEvent=="function",n=typeof PointerEvent=="function",o={};window.__unloadNavigator=i,window.addEventListener("unload",window.__unloadNavigator);function i(C){e({status:"done",result:C,success:!0})}function a(C){C=C||{},e({status:"failed",result:C,success:!1,keep:!0})}function c(C){return C!=null&&C.toLowerCase?(C=C.toLowerCase(),C==="text"?"text/plain":C==="url"?"text/uri-list":C):C}function u(){try{return new DataTransfer}catch{return{data:{},setData(L,B){o[c(L)]=B},getData(L){return o[c(L)]}}}}let d=["drag","dragstart","dragend"],m=["pointerup","pointerdown","pointermove"],p=d.concat(["drop","dragenter","dragover"]);function f(C){let L=C;for(;L&&L!==document.documentElement;){if(L.draggable)return L;L=L.parentElement}return null}function h(C,L,B){let V=L.element,Y=B.dispatchDragEventsOnClosestDraggable;if(d.includes(C.type)&&Y){if(!V&&L.lastDraggedElement)return L.lastDraggedElement;let ee=f(V);if(ee)return L.lastDraggedElement=ee,ee}return V}function g(C,L,B){function V(Xr,A,O){return O>Xr&&O<A}let Y=C.pointerPosition||{};if(L)return{x:Y.originX||0,y:Y.originY||0};let ee=B.getBoundingClientRect(),fe=Y.originX&&V(ee.left,ee.left+ee.width,Y.originX)?Y.originX:ee.left+ee.width/2,Pt=Y.originY&&V(ee.top,ee.top+ee.height,Y.originY)?Y.originY:ee.top+ee.height/2;return{x:fe,y:Pt}}function y(C,L,B){let V=(L==null?void 0:L.modifiers)||{},Y=g(C,B.isDrag,B.element),ee=(L==null?void 0:L.button)||0,fe=C.event;return m.includes(fe)?P(fe,V,Y.x,Y.y,ee):p.includes(fe)?v(fe,V,Y.x,Y.y,ee):b(fe,V,Y.x,Y.y,ee)}function w(C,L,B){return{screenX:0,screenY:0,clientX:L,clientY:B,ctrlKey:Boolean(C.ctrl),altKey:Boolean(C.alt),shiftKey:Boolean(C.shift),metaKey:Boolean(C.meta),bubbles:!0,cancelable:!0,composed:!0}}function P(C,L,B,V,Y){if(n){let fe=w(L,B,V);return fe.pointerType="mouse",fe.isPrimary=!0,new window.PointerEvent(C,fe)}let ee=document.createEvent("PointerEvent");return ee.initPointerEvent(C,!0,!0,document.defaultView,1,0,0,B,V,Boolean(L.ctrl),Boolean(L.alt),Boolean(L.shift),Boolean(L.meta),Y,document.body?document.body.parentNode:document.documentElement,0,0,0,0,0,0,0,0,0,"mouse",0,!0),ee}function b(C,L,B,V,Y){let ee=t?new MouseEvent("click",{composed:!0}):document.createEvent("MouseEvents");return ee.initMouseEvent(C,!0,!0,document.defaultView,1,0,0,B,V,Boolean(L.ctrl),Boolean(L.alt),Boolean(L.shift),Boolean(L.meta),Y,document.body?document.body.parentNode:document.documentElement),ee}function v(C,L,B,V){if(C==="dragstart"&&(window.TSTA||(window.TSTA={}),window.TSTA.dataTransfer=u()),!r){let fe=document.createEvent("CustomEvent");return fe.initCustomEvent(C,!0,!0,null),fe.dataTransfer=window.TSTA.dataTransfer,fe}let Y=w(L,B,V),ee=new window.DragEvent(C,Y);return Object.defineProperties(ee,{dataTransfer:{get(){return window.TSTA.dataTransfer}}}),ee}function I(C,L,B){let V=h(C,L,B);V&&V.dispatchEvent(C)}function k(C,L){function B(){return C.event==="click"&&L.isDrag&&!L.allEventsOnSameElement}return B()}function D(C,L,B){if(B){let V=Math.min(B.timeStamp-L.timeStamp,40);setTimeout(()=>{S(C)},V)}else window.__unloadNavigator&&window.removeEventListener("unload",window.__unloadNavigator),i()}function S(C){let L,B=C.events[C.eventIndex],V=C.events[++C.eventIndex];try{C.element=getLocatedElement(B.locatedElement),L=y(B,s,C)}catch(Y){return a(`exception in get event in drag step:${Y.message}`)}if(k(B,C))return D(C,B,V);if(L)try{I(L,C,B)}catch(Y){return a(`exception in executeEvent in drag step:${Y.message}`)}else return a(`cannot execute event ${B.event}`);D(C,B,V)}let _={eventIndex:0,allEventsOnSameElement:s.allEventsOnSameElement,events:s.events,eventType:s.eventType,eventData:s.eventData,stepId:s.id,testResultId:s.testResultId,isDrag:s.isDrag,useRecordedMousedown:s.useRecordedMousedown,trackActiveElement:s.trackActiveElement};setTimeout(()=>{try{S(_)}catch(C){a(C)}},0)}});var jn,Bi,kg=T(()=>{"use strict";jn=E(require("lodash"));ce();xi();Sg();Ig();Cg();be();Ag();Bi=class extends W{getDnDRectsAndOffsets(e,t,r,n){let o=this.stepActionUtils.getClickOffset(r,e.rectWithoutFrameOffset),i=this.stepActionUtils.getClickOffset(n,t.rectWithoutFrameOffset);return{fromRect:e.rectWithoutFrameOffset,fromX:o.xOffset,fromY:o.yOffset,toRect:t.rectWithoutFrameOffset,toX:i.xOffset,toY:i.yOffset}}async clickJs(){var c;let e=this.step,t=this.context,r=t.data[e.targetId||"targetId"],n=t.data.timeToPlayStep+3e3,o=e.events;if(!(o!=null&&o.length))return;let i={isRoot:r.isRoot,locatedElement:r.locatedElement,events:o,quirks:e.quirks,modifiers:e.modifiers,button:e.button},a=`
377
+ `;try{let d=await this.driver.executeJSWithArray(l,[r,e,Boolean(t.isScrollToElement),Boolean(t.isDynamicScroll),a,i,t.shouldScrollLeft,t.shouldScrollTop]);if(!(d!=null&&d.value))return{errorType:o.SCROLL_ACTION_FAILURE,success:!1};let{success:m,actualX:p,actualY:f}=d.value;return m?{success:!0}:{errorType:o.SCROLL_ACTION_FAILURE,success:!1,resultInfo:{error:this.getFailureString(t,a,i,p,f)}}}catch{return{errorType:o.SCROLL_ACTION_FAILURE,success:!1}}}scrollOnDocument(e,t){return this.scroll(t,e)}scrollOnElement(e,t){return this.scroll(t,e,this.getTarget().locatedElement)}execute(){let e=this.context,t=this.step,r=t.isScrollToElement?e.data.scrollToElement.locatedElement:null;return t.element.isDocument?this.scrollOnDocument(t,r):this.scrollOnElement(t,r)}}});var vg,Eg=T(()=>{"use strict";vg=function(s){let e={};function t(a){return a!=null&&a.toLowerCase?(a=a.toLowerCase(),a==="text"?"text/plain":a==="url"?"text/uri-list":a):a}let r={data:{},setData(a,c){e[t(a)]=c},getData(a){return e[t(a)]}},n=getLocatedElement(s.fromLocatedElement),o=getLocatedElement(s.toLocatedElement);if(!n)throw new Error("from element not found");if(!o)throw new Error("to element not found");let i=function(a,c){let l=document.createEvent("CustomEvent");l.initCustomEvent(c,!0,!0,null),l.dataTransfer=r,a.dispatchEvent?a.dispatchEvent(l):a.fireEvent&&a.fireEvent(`on${c}`,l)};i(n,"dragstart"),i(o,"drop"),i(n,"dragend")}});var Sg,Rg=T(()=>{"use strict";Sg=(s,e)=>{let t=typeof Event=="function";window.__unloadNavigator=i,window.addEventListener("unload",window.__unloadNavigator);function r(b,v){var D;function I(S){function _(B){return o(B).find(V=>Array.apply(null,V.classList||[]).includes("Select-control"))}function P(B){let V=_(B);return V?V.querySelector("INPUT"):null}let L=P(S);L&&L.focus()}let k=(D=b.quirks)==null?void 0:D.isReactSelect;v.type==="mousedown"&&k&&I(b.element)}function n(b,v){var k;let I=(k=b.quirks)==null?void 0:k.isCKEditorFrame;v.type==="click"&&I&&document.body.focus()}function o(b){return b?[b].concat(o(b.parentNode)):[]}function i(b){let v={status:"done",result:b,success:!0};C.isNonTextableElemnet&&(v.reason="Set text on non input element"),e(v)}function a(b){b=b||{},e({status:"failed",result:b,success:!1})}function c(b){let v=t?new Event("mouseover",{composed:!0}):document.createEvent("Events");v.initEvent("mouseover",!0,!0),b.dispatchEvent(v)}function l(b){let v={},I=b.getBoundingClientRect(),k=I.left+I.width/2,D=I.top+I.height/2,P=f("mousemove",v,k,D,0);b.dispatchEvent(P)}function d(b,v){function I(P,L,B){return B>P&&B<L}let k=b.pointerPosition||{},D=v.getBoundingClientRect(),S=k.originX&&I(D.left,D.left+D.width,k.originX)?k.originX:D.left+D.width/2,_=k.originY&&I(D.top,D.top+D.height,k.originY)?k.originY:D.top+D.height/2;return{x:S,y:_}}function m(b,v,I){return{screenX:0,screenY:0,clientX:v,clientY:I,ctrlKey:Boolean(b.ctrl),altKey:Boolean(b.alt),shiftKey:Boolean(b.shift),metaKey:Boolean(b.meta),bubbles:!0,cancelable:!0,composed:!0}}function p(b,v,I,k){if(!window.PointerEvent)return;let D=m(v,I,k);return D.pointerType="mouse",D.isPrimary=!0,new window.PointerEvent(b,D)}function f(b,v,I,k,D){let S=t?new MouseEvent("click",{composed:!0}):document.createEvent("MouseEvents");return S.initMouseEvent(b,!0,!0,document.defaultView,1,0,0,I,k,Boolean(v.ctrl),Boolean(v.alt),Boolean(v.shift),Boolean(v.meta),D,document.body?document.body.parentNode:document.documentElement),S}function h(b,v){let I=["pointerup","pointerdown","pointermove"],k=v.modifiers||{},D=d(b,v.element),S=v.button||0,_=b.event;return I.includes(_)?p(_,k,D.x,D.y):f(_,k,D.x,D.y,S)}function g(){var v;let b=document.activeElement;for(;(v=b.shadowRoot)!=null&&v.activeElement;)b=b.shadowRoot.activeElement;return b}function y(b){b.events.map(v=>{try{return h(v,b)}catch{return}}).filter(Boolean).forEach(v=>{b.element.dispatchEvent(v),r(b,v),n(b,v)}),window.__unloadNavigator&&window.removeEventListener("unload",window.__unloadNavigator)}var C={element:s.isRoot?document.documentElement:getLocatedElement(s.locatedElement),events:s.events,quirks:s.quirks,modifiers:s.modifiers,button:s.button};if(!C.element){a("element not found");return}c(C.element),l(C.element);try{y(C);let b=g(),v=C.quirks,I=v==null?void 0:v.isReactSelect,k=v==null?void 0:v.isCKEditorFrame;!I&&!k&&dispatchFocus(s.elementToFocusLocatedElement,b),i()}catch(b){a(b.toString())}}});var Ig,xg=T(()=>{"use strict";Ig=function(s,e){let t=typeof Event=="function",r=typeof PointerEvent=="function",n=40;window.__unloadNavigator=o,window.addEventListener("unload",window.__unloadNavigator);function o(b){e({status:"done",result:b,success:!0})}function i(b){b=b||{},e({status:"failed",result:b,success:!1})}function a(b){let v=t?new Event("mouseover",{composed:!0}):document.createEvent("Events");v.initEvent("mouseover",!0,!0),b.dispatchEvent(v)}function c(b){let v={},I=b.getBoundingClientRect(),k=I.left+I.width/2,D=I.top+I.height/2,P=p("mousemove",v,k,D,0);b.dispatchEvent(P)}function l(b,v){function I(P,L,B){return B>P&&B<L}let k=b.pointerPosition||{};if(C.isDrag)return{x:k.originX||0,y:k.originY||0};let D=v.getBoundingClientRect(),S=k.originX&&I(D.left,D.left+D.width,k.originX)?k.originX:D.left+D.width/2,_=k.originY&&I(D.top,D.top+D.height,k.originY)?k.originY:D.top+D.height/2;return{x:S,y:_}}function d(b,v,I){return{screenX:0,screenY:0,clientX:v,clientY:I,ctrlKey:Boolean(b.ctrl),altKey:Boolean(b.alt),shiftKey:Boolean(b.shift),metaKey:Boolean(b.meta),bubbles:!0,cancelable:!0,composed:!0}}function m(b,v,I,k,D){if(r){let _=d(v,I,k);return _.pointerType="mouse",_.isPrimary=!0,new window.PointerEvent(b,_)}let S=document.createEvent("PointerEvent");return S.initPointerEvent(b,!0,!0,document.defaultView,1,0,0,I,k,Boolean(v.ctrl),Boolean(v.alt),Boolean(v.shift),Boolean(v.meta),D,document.body?document.body.parentNode:document.documentElement,0,0,0,0,0,0,0,0,0,"mouse",0,!0),S}function p(b,v,I,k,D){let S=t?new MouseEvent("click",{composed:!0}):document.createEvent("MouseEvents");return S.initMouseEvent(b,!0,!0,document.defaultView,1,0,0,I,k,Boolean(v.ctrl),Boolean(v.alt),Boolean(v.shift),Boolean(v.meta),D,document.body?document.body.parentNode:document.documentElement),S}function f(b,v){let I=["pointerup","pointerdown","pointermove"],k=v.modifiers||{},D=l(b,v.element),S=v.button||0,_=b.event;return I.includes(_)?m(_,k,D.x,D.y,S):p(_,k,D.x,D.y,S)}function h(b,v){function I(){return b.event==="click"&&v.isDrag&&!v.allEventsOnSameElement}return I()}function g(b,v,I){try{let k=f(v.events[b],v);h(k,v)||v.element.dispatchEvent(k)}catch{}if(b+1===v.events.length)I();else{let k=Math.min(v.events[b+1].timeStamp-v.events[b].timeStamp,n);setTimeout(()=>{g(b+1,v,I)},k)}}function y(b,v){g(0,b,()=>{window.__unloadNavigator&&window.removeEventListener("unload",window.__unloadNavigator),v()})}let C={eventIndex:0,element:s.isRoot?document.documentElement:getLocatedElement(s.locatedElement),events:s.events,eventType:s.eventType,eventData:s.eventData,stepId:s.id,testResultId:s.testResultId,quirks:s.quirks,isDoubleClick:s.isDoubleClick,isDrag:s.isDrag,useRecordedMousedown:s.useRecordedMousedown,trackActiveElement:s.trackActiveElement,allEventsOnSameElement:s.allEventsOnSameElement};if(!C.element){i("element not found");return}a(C.element),c(C.element),y(C,()=>{o()})}});var Pg,Cg=T(()=>{"use strict";Pg=function(s,e){let t=typeof MouseEvent=="function",r=typeof DragEvent=="function",n=typeof PointerEvent=="function",o={};window.__unloadNavigator=i,window.addEventListener("unload",window.__unloadNavigator);function i(P){e({status:"done",result:P,success:!0})}function a(P){P=P||{},e({status:"failed",result:P,success:!1,keep:!0})}function c(P){return P!=null&&P.toLowerCase?(P=P.toLowerCase(),P==="text"?"text/plain":P==="url"?"text/uri-list":P):P}function l(){try{return new DataTransfer}catch{return{data:{},setData(L,B){o[c(L)]=B},getData(L){return o[c(L)]}}}}let d=["drag","dragstart","dragend"],m=["pointerup","pointerdown","pointermove"],p=d.concat(["drop","dragenter","dragover"]);function f(P){let L=P;for(;L&&L!==document.documentElement;){if(L.draggable)return L;L=L.parentElement}return null}function h(P,L,B){let V=L.element,Y=B.dispatchDragEventsOnClosestDraggable;if(d.includes(P.type)&&Y){if(!V&&L.lastDraggedElement)return L.lastDraggedElement;let ee=f(V);if(ee)return L.lastDraggedElement=ee,ee}return V}function g(P,L,B){function V(Xr,A,O){return O>Xr&&O<A}let Y=P.pointerPosition||{};if(L)return{x:Y.originX||0,y:Y.originY||0};let ee=B.getBoundingClientRect(),fe=Y.originX&&V(ee.left,ee.left+ee.width,Y.originX)?Y.originX:ee.left+ee.width/2,Ct=Y.originY&&V(ee.top,ee.top+ee.height,Y.originY)?Y.originY:ee.top+ee.height/2;return{x:fe,y:Ct}}function y(P,L,B){let V=(L==null?void 0:L.modifiers)||{},Y=g(P,B.isDrag,B.element),ee=(L==null?void 0:L.button)||0,fe=P.event;return m.includes(fe)?C(fe,V,Y.x,Y.y,ee):p.includes(fe)?v(fe,V,Y.x,Y.y,ee):b(fe,V,Y.x,Y.y,ee)}function w(P,L,B){return{screenX:0,screenY:0,clientX:L,clientY:B,ctrlKey:Boolean(P.ctrl),altKey:Boolean(P.alt),shiftKey:Boolean(P.shift),metaKey:Boolean(P.meta),bubbles:!0,cancelable:!0,composed:!0}}function C(P,L,B,V,Y){if(n){let fe=w(L,B,V);return fe.pointerType="mouse",fe.isPrimary=!0,new window.PointerEvent(P,fe)}let ee=document.createEvent("PointerEvent");return ee.initPointerEvent(P,!0,!0,document.defaultView,1,0,0,B,V,Boolean(L.ctrl),Boolean(L.alt),Boolean(L.shift),Boolean(L.meta),Y,document.body?document.body.parentNode:document.documentElement,0,0,0,0,0,0,0,0,0,"mouse",0,!0),ee}function b(P,L,B,V,Y){let ee=t?new MouseEvent("click",{composed:!0}):document.createEvent("MouseEvents");return ee.initMouseEvent(P,!0,!0,document.defaultView,1,0,0,B,V,Boolean(L.ctrl),Boolean(L.alt),Boolean(L.shift),Boolean(L.meta),Y,document.body?document.body.parentNode:document.documentElement),ee}function v(P,L,B,V){if(P==="dragstart"&&(window.TSTA||(window.TSTA={}),window.TSTA.dataTransfer=l()),!r){let fe=document.createEvent("CustomEvent");return fe.initCustomEvent(P,!0,!0,null),fe.dataTransfer=window.TSTA.dataTransfer,fe}let Y=w(L,B,V),ee=new window.DragEvent(P,Y);return Object.defineProperties(ee,{dataTransfer:{get(){return window.TSTA.dataTransfer}}}),ee}function I(P,L,B){let V=h(P,L,B);V&&V.dispatchEvent(P)}function k(P,L){function B(){return P.event==="click"&&L.isDrag&&!L.allEventsOnSameElement}return B()}function D(P,L,B){if(B){let V=Math.min(B.timeStamp-L.timeStamp,40);setTimeout(()=>{S(P)},V)}else window.__unloadNavigator&&window.removeEventListener("unload",window.__unloadNavigator),i()}function S(P){let L,B=P.events[P.eventIndex],V=P.events[++P.eventIndex];try{P.element=getLocatedElement(B.locatedElement),L=y(B,s,P)}catch(Y){return a(`exception in get event in drag step:${Y.message}`)}if(k(B,P))return D(P,B,V);if(L)try{I(L,P,B)}catch(Y){return a(`exception in executeEvent in drag step:${Y.message}`)}else return a(`cannot execute event ${B.event}`);D(P,B,V)}let _={eventIndex:0,allEventsOnSameElement:s.allEventsOnSameElement,events:s.events,eventType:s.eventType,eventData:s.eventData,stepId:s.id,testResultId:s.testResultId,isDrag:s.isDrag,useRecordedMousedown:s.useRecordedMousedown,trackActiveElement:s.trackActiveElement};setTimeout(()=>{try{S(_)}catch(P){a(P)}},0)}});var Fn,$i,Ag=T(()=>{"use strict";Fn=E(require("lodash"));ce();Pi();Eg();Rg();xg();be();Cg();$i=class extends W{getDnDRectsAndOffsets(e,t,r,n){let o=this.stepActionUtils.getClickOffset(r,e.rectWithoutFrameOffset),i=this.stepActionUtils.getClickOffset(n,t.rectWithoutFrameOffset);return{fromRect:e.rectWithoutFrameOffset,fromX:o.xOffset,fromY:o.yOffset,toRect:t.rectWithoutFrameOffset,toX:i.xOffset,toY:i.yOffset}}async clickJs(){var c;let e=this.step,t=this.context,r=t.data[e.targetId||"targetId"],n=t.data.timeToPlayStep+3e3,o=e.events;if(!(o!=null&&o.length))return;let i={isRoot:r.isRoot,locatedElement:r.locatedElement,events:o,quirks:e.quirks,modifiers:e.modifiers,button:e.button},a=`
378
378
  var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
379
379
  var dispatchFocus = ${Ss.toString()};
380
- var doClick = ${Rg.toString()};
380
+ var doClick = ${Sg.toString()};
381
381
  var eventData = arguments[0];
382
382
  var done = arguments[1];
383
383
  return doClick.call(null, eventData, done);
384
- `;try{return(c=(await this.driver.executeCodeAsync(a,n,i)).value)!=null&&c.success?{success:!0}:{success:!1}}catch(u){return{success:!1,reason:u.message,exception:u}}}isWithinBounds(e,t,r){return r>e&&r<t}getEventSequenceOffset(){var c;let e=(c=this.step.events[0])==null?void 0:c.pointerPosition;if(!e)return{xOffset:0,yOffset:0};let r=this.context.data[this.step.targetId||"targetId"].rectWithoutFrameOffset,n=this.isWithinBounds(r.left,r.left+r.width,e.originX),o=this.isWithinBounds(r.top,r.top+r.height,e.originY),i=n?0:r.left+r.width/2-e.originX,a=o?0:r.top+r.height/2-e.originY;return{xOffset:i,yOffset:a}}addOffsetToEvents(e){this.step.events.forEach(t=>{t!=null&&t.pointerPosition&&(t.pointerPosition.originX+=e.xOffset,t.pointerPosition.originY+=e.yOffset)})}generateEventOfType(e,t){let r=jn.cloneDeep(e);return r.event=t,r}fixAbsoluteDragEventSequence(){let e=this.step.events.find(o=>["mousedown","pointerdown"].includes(o.event));if(e){let o=this.step.events.indexOf(e);this.step.events.splice(o,0,this.generateEventOfType(e,"mouseover"))}let{recordPointerMoveEvents:t=!1}=this.context.project.defaults||{},r=this.step.events.find(o=>o.event==="mouseup")||t&&this.step.events.find(o=>o.event==="pointerup"),n=jn.findLastIndex(this.step.events,o=>o.event==="mousemove")||t&&jn.findLastIndex(this.step.events,o=>o.event==="pointermove");r&&n>0&&!this.step.allEventsOnSameElement&&this.step.events.splice(n+1,0,this.generateEventOfType(r,"mouseover")),this.step.isHTML5Drag&&!this.step.toElement&&(this.step.events=this.addDragendIfNeeded(this.step.events)),this.addOffsetToEvents(this.getEventSequenceOffset())}async dragPathJs(){var c,u;let e=this.step,t=this.context,r=t.data[e.targetId||"targetId"],n=t.data.timeToPlayStep+3e3;if(!((c=this.step.events)!=null&&c.length))return;this.fixAbsoluteDragEventSequence();let o=e.events,i={isRoot:r.isRoot,locatedElement:r.locatedElement,events:o,quirks:e.quirks,modifiers:e.modifiers,button:e.button,isDrag:!0,allEventsOnSameElement:e.allEventsOnSameElement},a=`
384
+ `;try{return(c=(await this.driver.executeCodeAsync(a,n,i)).value)!=null&&c.success?{success:!0}:{success:!1}}catch(l){return{success:!1,reason:l.message,exception:l}}}isWithinBounds(e,t,r){return r>e&&r<t}getEventSequenceOffset(){var c;let e=(c=this.step.events[0])==null?void 0:c.pointerPosition;if(!e)return{xOffset:0,yOffset:0};let r=this.context.data[this.step.targetId||"targetId"].rectWithoutFrameOffset,n=this.isWithinBounds(r.left,r.left+r.width,e.originX),o=this.isWithinBounds(r.top,r.top+r.height,e.originY),i=n?0:r.left+r.width/2-e.originX,a=o?0:r.top+r.height/2-e.originY;return{xOffset:i,yOffset:a}}addOffsetToEvents(e){this.step.events.forEach(t=>{t!=null&&t.pointerPosition&&(t.pointerPosition.originX+=e.xOffset,t.pointerPosition.originY+=e.yOffset)})}generateEventOfType(e,t){let r=Fn.cloneDeep(e);return r.event=t,r}fixAbsoluteDragEventSequence(){let e=this.step.events.find(o=>["mousedown","pointerdown"].includes(o.event));if(e){let o=this.step.events.indexOf(e);this.step.events.splice(o,0,this.generateEventOfType(e,"mouseover"))}let{recordPointerMoveEvents:t=!1}=this.context.project.defaults||{},r=this.step.events.find(o=>o.event==="mouseup")||t&&this.step.events.find(o=>o.event==="pointerup"),n=Fn.findLastIndex(this.step.events,o=>o.event==="mousemove")||t&&Fn.findLastIndex(this.step.events,o=>o.event==="pointermove");r&&n>0&&!this.step.allEventsOnSameElement&&this.step.events.splice(n+1,0,this.generateEventOfType(r,"mouseover")),this.step.isHTML5Drag&&!this.step.toElement&&(this.step.events=this.addDragendIfNeeded(this.step.events)),this.addOffsetToEvents(this.getEventSequenceOffset())}async dragPathJs(){var c,l;let e=this.step,t=this.context,r=t.data[e.targetId||"targetId"],n=t.data.timeToPlayStep+3e3;if(!((c=this.step.events)!=null&&c.length))return;this.fixAbsoluteDragEventSequence();let o=e.events,i={isRoot:r.isRoot,locatedElement:r.locatedElement,events:o,quirks:e.quirks,modifiers:e.modifiers,button:e.button,isDrag:!0,allEventsOnSameElement:e.allEventsOnSameElement},a=`
385
385
  var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
386
386
  var dispatchFocus = ${Ss.toString()};
387
- var doDragPath = ${xg.toString()};
387
+ var doDragPath = ${Ig.toString()};
388
388
  return doDragPath.apply(null, arguments);
389
- `;try{return(u=(await this.driver.executeCodeAsync(a,n,i)).value)!=null&&u.success?{success:!0}:{success:!1}}catch(d){return{success:!1,reason:d.message,exception:d}}}chooseAndRunAction(){let e=this.getTarget(),{locatedElement:t,seleniumElement:r,rectWithoutFrameOffset:n,rect:o}=e,{xOffset:i,yOffset:a}=this.stepActionUtils.getClickOffset(this.step.element.clickOffset,n),c={frameOffset:{x:o.left-n.left,y:o.top-n.top},rect:n,clickOffset:{x:i,y:a}};if(M.flags.skipFileInputClicks.isEnabled()&&e.tagName==="INPUT"&&(e.elementSymbol.includes('type="file"')||e.elementSymbol.includes("type='file'")||e.elementSymbol.includes("type=file")))return Promise.resolve({keep:!0,success:"skipped",reason:"Clicking on input type=file is disabled"});if(this.step.isDoubleClick){let p={elementToFocusLocatedElement:e.elementToFocusLocatedElement,locatedElement:t,events:this.step.events,timeout:this.context.data.timeToPlayStep+3e3};return this.driver.doubleClick(r,p,c)}if(this.step.isDrag){if(this.step.toElement){let p=this.context.data.toElement;if(this.step.isHTML5Drag){if(M.flags.usePortedHtml5DragDrop.isEnabled()){let y=this.generateHTML5DragEventSequence(),w=this.context.data.timeToPlayStep+3e3,P=this.context.data[this.step.targetId||"targetId"],b={transactionId:`${this.context.testResultId}:${this.step.id}`,id:this.step.id,testResultId:this.context.testResultId,eventType:this.step.type,events:y,eventData:{modifiers:this.step.modifiers,button:this.step.button},quirks:this.step.quirks,isDrag:this.step.isDrag,useRecordedMousedown:this.step.useRecordedMousedown,allEventsOnSameElement:this.step.allEventsOnSameElement,elementToFocusLocatedElement:P.elementToFocusLocatedElement,trackActiveElement:this.step.trackActiveElement,locatedElement:P.locatedElement,isRoot:P.isRoot},v=`
389
+ `;try{return(l=(await this.driver.executeCodeAsync(a,n,i)).value)!=null&&l.success?{success:!0}:{success:!1}}catch(d){return{success:!1,reason:d.message,exception:d}}}chooseAndRunAction(){let e=this.getTarget(),{locatedElement:t,seleniumElement:r,rectWithoutFrameOffset:n,rect:o}=e,{xOffset:i,yOffset:a}=this.stepActionUtils.getClickOffset(this.step.element.clickOffset,n),c={frameOffset:{x:o.left-n.left,y:o.top-n.top},rect:n,clickOffset:{x:i,y:a}};if(U.flags.skipFileInputClicks.isEnabled()&&e.tagName==="INPUT"&&(e.elementSymbol.includes('type="file"')||e.elementSymbol.includes("type='file'")||e.elementSymbol.includes("type=file")))return Promise.resolve({keep:!0,success:"skipped",reason:"Clicking on input type=file is disabled"});if(this.step.isDoubleClick){let p={elementToFocusLocatedElement:e.elementToFocusLocatedElement,locatedElement:t,events:this.step.events,timeout:this.context.data.timeToPlayStep+3e3};return this.driver.doubleClick(r,p,c)}if(this.step.isDrag){if(this.step.toElement){let p=this.context.data.toElement;if(this.step.isHTML5Drag){if(U.flags.usePortedHtml5DragDrop.isEnabled()){let y=this.generateHTML5DragEventSequence(),w=this.context.data.timeToPlayStep+3e3,C=this.context.data[this.step.targetId||"targetId"],b={transactionId:`${this.context.testResultId}:${this.step.id}`,id:this.step.id,testResultId:this.context.testResultId,eventType:this.step.type,events:y,eventData:{modifiers:this.step.modifiers,button:this.step.button},quirks:this.step.quirks,isDrag:this.step.isDrag,useRecordedMousedown:this.step.useRecordedMousedown,allEventsOnSameElement:this.step.allEventsOnSameElement,elementToFocusLocatedElement:C.elementToFocusLocatedElement,trackActiveElement:this.step.trackActiveElement,locatedElement:C.locatedElement,isRoot:C.isRoot},v=`
390
390
  var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
391
391
  var dnd = ${Pg.toString()};
392
392
  var eventData = arguments[0];
@@ -394,44 +394,44 @@ Action required: Please allow opening a websockets connection to ${he} in your f
394
394
  return dnd.call(null, eventData, done);
395
395
  `;return this.driver.executeCodeAsync(v,w,b)}let h=`
396
396
  var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
397
- var dnd = ${Eg.toString()};
397
+ var dnd = ${vg.toString()};
398
398
  var eventData = arguments[0];
399
399
  return dnd.call(null, eventData);
400
- `,g={fromLocatedElement:t,toLocatedElement:p.locatedElement};return this.driver.executeJS(h,g)}let f=this.getDnDRectsAndOffsets(e,p,this.step.element.clickOffset,this.step.toElement.clickOffset);return this.driver.dragAndDrop(r,p.seleniumElement,f)}return this.dragPathJs()}let d=this.driver.isSafari()&&this.step.button===2,m=this.driver.isSafari()&&e.tagName==="SELECT";return this.driver.isSafari()&&m?Promise.resolve({keep:!0,success:"skipped",forceTreatAsWarning:!0,reason:"Safari does not support clicking on select elements"}):!m&&(!this.step.nativeEvents||d)?this.clickJs():this.step.button===2?this.driver.rightClick(r,c):this.driver.leftClick(r,c)}async performAction(){let e=await this.chooseAndRunAction();if(!e.status&&e.value&&e.value.keep&&(e=e.value),e.keep)return delete e.keep,e}addDragendIfNeeded(e){if(e.some(r=>r.event==="dragend"))return e;let t={event:"dragend",eventInfo:{detail:0},pointerPosition:this.getToElementPosition()};return e.concat(t)}getToElementPosition(){var t,r;if(!((r=(t=this.context.data)==null?void 0:t.toElement)!=null&&r.rect))return;let{rect:e}=this.context.data.toElement;return{originX:e.left+e.width/2,originY:e.top+e.height/2}}addDragOverBeforeDragEnd(e){let t=e.findIndex(n=>["dragend","drop"].includes(n.event)),r=e[t-1];if(!r||r.event!=="dragover"){let n={event:"dragover",eventInfo:{detail:0},pointerPosition:this.getToElementPosition(),fireOnTarget:!0};e.splice(t,0,n)}else r.fireOnTarget=!0;return e}fixEventSequence(e){let t=this.addDragendIfNeeded(e);return this.addDragOverBeforeDragEnd(t)}addElementLocatedElementToDragEvents(e,t,r){let n=o=>o.fireOnTarget||["drop","dragenter"].includes(o.event);return e.forEach(o=>o.locatedElement=n(o)?r:t),e}generateHTML5DragEventSequence(){let e=this.context.data.targetId,t=this.context.data.toElement,r=this.step.events.filter(n=>n.event!=="mousemove"&&n.event!=="pointermove");return r=this.fixEventSequence(r),r=this.addElementLocatedElementToDragEvents(r,e.locatedElement,t.locatedElement),this.step.dispatchDragEventsOnClosestDraggable&&r.forEach(n=>n.dispatchDragEventsOnClosestDraggable=!0),r}}});var Bn,_g=T(()=>{"use strict";ce();Bn=class extends W{async performAction(e){let{step:t,context:r,frameHandler:n,sessionPlayerInit:{paramEvaluator:o,utils:i,commonConstants:a}}=this,c=this.getTarget();try{let u=await this.stepActionUtils.extractTargetText(c),d,m;if(o){let p=o.computeExpression(t.expression2,r,this.exportsGlobal,this.exportsTest);d=u,m=p.evaluatedText}else{let p=await e.executeStep(t.expression2,r,n,this.exportsGlobal,this.locateElementPlayer,this.exportsTest);d=u,m=p.evaluatedText}try{return i.compareOrMatch(m,d)?{success:!0}:{success:!1,errorType:a.stepResult.TEXT_COMPARE_FAILURE,resultInfo:{expected:String(m),actual:d}}}catch{return{success:!1,errorType:a.stepResult.TEXT_COMPARE_FAILURE,resultInfo:{expected:m.toString(),actual:d}}}}catch(u){return{success:!1,reason:u.message,exception:u,shouldRetry:!0}}}}});var Og,tR,$i,Lg=T(()=>{"use strict";Og=E(require("lodash"));ce();j();tR=x("evaluate-expression-step-action"),$i=class extends W{async execute(){let e=this.step,t=this.context,r=this.exportsGlobal,n=this.exportsTest;try{tR.info("runner running incoming params evaluation");let o=t.incomingParams||{};Og.isEmpty(o)&&(o=this.sessionPlayerInit.stepParamBuilder.getStepInputs(e,t,r,n));let i=["context",...o.as.functionParameters],a=[t,...o.as.functionArguments],u=`return ${e.subType==="text"?`'${e.expression.replace(/'/g,"\\'")}'`:e.expression}`.replace(/\n/g,"\\n"),m=Function.apply(Function,i.concat([u])).apply(null,a);return t.data[e.targetName]=m,t.data[e.targetId]=m,t.internalParams&&t.internalParams.add(e.targetId),{success:!0,evaluatedText:m,data:t.data}}catch(o){let{stepResult:i}=this.sessionPlayerInit.commonConstants;throw{errorType:i.EVALUATE_EXPRESSION_EXCEPTION,resultInfo:{exception:o.toString()},success:!1}}}}});var Ng,Dg=T(()=>{"use strict";Ng=function(s,e){let t=typeof Event=="function",r=s.isRoot?document.documentElement:getLocatedElement(s.locatedElement),n={eventIndex:0,element:r,events:s.events,eventType:s.eventType,quirks:s.quirks};if(!r)throw new Error("element not found");window.__unloadNavigator=function(){fe()},window.addEventListener("unload",window.__unloadNavigator);let o=["keydown","keyup","keypress"],i=15;function a(A){try{if(!t)return;let O=new CustomEvent("textInput",{bubbles:!0,cancelable:!0});return A.eventData&&(O.data=A.eventData.data),O}catch{}}function c(A){try{let O=document.createEvent("TextEvent");O.data=A.eventData.data;let U=1,q=A.eventData.locale||"en-US";return O.initTextEvent("textInput",!0,!0,window,A.eventData.data,U,q),O}catch{}}function u(A){return a(A)||c()}function d(A,O,U){try{return new KeyboardEvent(A,{bubbles:!0,cancelable:!0,location:O.location||0,key:O.key||"",ctrlKey:Boolean(U.ctrl),shiftKey:Boolean(U.shift),altKey:Boolean(U.alt),metaKey:Boolean(U.meta)})}catch{}}function m(A,O,U){try{let q=document.createEvent("KeyboardEvent");return q.initKeyEvent(A,!0,!0,null,Boolean(U.ctrl),Boolean(U.alt),Boolean(U.shift),Boolean(U.meta),O.key||"",0),q}catch{}}function p(A,O,U){try{let q=document.createEvent("Events");return q.initEvent(A,!0,!0),q.altKey=Boolean(U.alt),q.ctrlKey=Boolean(U.ctrl),q.metaKey=Boolean(U.meta),q.shiftKey=Boolean(U.shift),q.keyCode=O.key||"",q}catch{}}function f(A,O,U){return d(A,O,U)||m(A,O,U)||p(A,O,U)}function h(A){let O=o.indexOf(A.event);if(typeof O!="number"||O<0)return null;let U=A.eventData,q=U.modifiers||{},me=f(A.event,U,q);return Object.defineProperties(me,{keyCode:{enumerable:!0,get(){return this._keyCode_}},charCode:{enumerable:!0,get(){return this._charCode_}},which:{enumerable:!0,get(){return this._keyCode_}}}),me._keyCode_=U.keyCode,me._charCode_=U.charCode||0,me}function g(A){return A.event==="textInput"?u(A):h(A)}function y(A,O){return function(){var q;return A.event==="textInput"&&!((q=O.quirks)!=null&&q.isAuth0Form)}()}function w(A,O){return A.event==="keyup"&&O.event==="keydown"?i:0}function P(A,O,U){let q=w(O,U);return Math.min(U.timeStamp-O.timeStamp,q)}function b(A){let O=Object.getOwnPropertyDescriptor(A,"value");if(!O)return;let U=A.value;A.value=`${U}#`,O.configurable&&delete A.value,A.value=U;let q=document.createEvent("HTMLEvents");q.initEvent("input",!0,!1),A.dispatchEvent(q),Object.defineProperty(A,"value",O)}function v(A){if(A.isInput)try{if(b(A.element),t)A.element.dispatchEvent(new Event("change"));else{let O=document.createEvent("HTMLEvents");O.initEvent("change",!1,!0),A.element.dispatchEvent(O)}}catch{}}function I(A,O,U){U?setTimeout(()=>{L(A)},P(A,O,U)):(window.__unloadNavigator&&window.removeEventListener("unload",window.__unloadNavigator),v(A),fe())}function k(A,O){return(A==="change"||A==="blur")&&O.element.tagName==="OPTION"}function D(A,O,U){return k(A.type,O)?O.element.parentElement:U.locatedElement?getLocatedElement(U.locatedElement):O.element}function S(A,O){let U=A.firstChild,q;for(;U;){if(U.nodeType===3){if(O.offset--<=0)return U}else if(U.nodeType===1&&(q=S(U,O),q))return q;U=U.nextSibling}return null}function _(A,O){if(!(!A||!O)){if(!isNaN(O.start))A.selectionStart=O.start,A.selectionEnd=O.end;else if(!isNaN(O.nodeOffset)){let U;if(A.firstChild?U=S(A,{offset:O.nodeOffset}):U=A,U){let q=window.getSelection(),me=document.createRange();try{q.removeAllRanges(),me.setStart(U,O.textOffset),me.setEnd(U,O.textOffset),q.addRange(me)}catch{}}}}}function C(A,O,U){if(O.isFocusable&&O.isSelectable(A)&&A.type!=="submit")try{_(O.element,U.eventData.selection)}catch{}let q=D(A,O,U);if(!q)throw new Error("could not find element");A.type==="submit"&&q.action?q.submit():q.dispatchEvent(A)}function L(A){let O,U=A.events[A.eventIndex],q=A.events[++A.eventIndex];try{O=g(U)}catch(me){return Pt(`exception in get event in text step:${me.message}`)}if(y(U,A))return I(A,U,q);if(O)try{C(O,A,U)}catch(me){return Pt(`exception in executeEvent in text step:${me.message}`)}else if(A.noEventExecuter)A.noEventExecuter(A,U);else return Pt(`cannot execute event ${U.event}`);I(A,U,q)}function B(A){let O=A.tagName;return O==="INPUT"||O==="TEXTAREA"}function V(A){return A.getAttribute?Boolean(A.getAttribute("contenteditable")==="true"):!1}function Y(A,O){if(A.isInput){A.element.value=O.eventData.text;let U=document.createEvent("Event");U.initEvent("input",!0,!1),A.element.dispatchEvent(U)}else A.isContentEditable&&(A.element.innerHTML=O.eventData.text)}function ee(){var O;let A=document.activeElement;for(;(O=A.shadowRoot)!=null&&O.activeElement;)A=A.shadowRoot.activeElement;return A}function fe(A){let O={status:"done",result:A,success:!0};n.isNonTextableElemnet&&(O.reason="Set text on non input element"),e(O)}function Pt(A){A=A||{};let O={status:"failed",result:A,success:!1};n.isNonTextableElemnet&&(O.reason="Set text on non input element"),e(O)}try{n.isInput=B(n.element),n.isContentEditable=V(n.element),!n.isInput&&!n.isContentEditable&&(n.isNonTextableElemnet=!0),n.isFocusable=n.isInput||n.isContentEditable,n.isSelectable=function(A){return A.type!=="keyup"},n.noEventExecuter=Y}catch(A){Pt(`exception in set text step:${A.message}`);return}let Xr=ee();dispatchFocus(s.elementToFocusLocatedElement,Xr),L(n)}});var Wi,Mg=T(()=>{"use strict";ce();xi();F();Dg();Wi=class extends W{async setValueNative(){let e=this.context,t=this.getTarget();return this.step.delayBetweenChars?(await this.driver.elementIdClear(ut(t.seleniumElement)),await this.setTextDelayed()):this.driver.setValue(t.seleniumElement,e.stepText)}async setValueJS(){var d;let e=this.step,t=this.context,r=t.data[e.targetId||"targetId"],n=t.data.timeToPlayStep+3e3,o=e.events,{setTextDraftJs:i}=this.sessionPlayerInit.codeSnippets;if(r.isDraftEditor&&i)return this.driver.executeJS(i(r.locatedElement,t.stepText));if(!(o!=null&&o.length))return;let a={eventType:e.type,events:o,quirks:e.quirks,locatedElement:r.locatedElement,isRoot:r.isRoot,elementToFocusLocatedElement:r.elementToFocusLocatedElement},c=`
400
+ `,g={fromLocatedElement:t,toLocatedElement:p.locatedElement};return this.driver.executeJS(h,g)}let f=this.getDnDRectsAndOffsets(e,p,this.step.element.clickOffset,this.step.toElement.clickOffset);return this.driver.dragAndDrop(r,p.seleniumElement,f)}return this.dragPathJs()}let d=this.driver.isSafari()&&this.step.button===2,m=this.driver.isSafari()&&e.tagName==="SELECT";return this.driver.isSafari()&&m?Promise.resolve({keep:!0,success:"skipped",forceTreatAsWarning:!0,reason:"Safari does not support clicking on select elements"}):!m&&(!this.step.nativeEvents||d)?this.clickJs():this.step.button===2?this.driver.rightClick(r,c):this.driver.leftClick(r,c)}async performAction(){let e=await this.chooseAndRunAction();if(!e.status&&e.value&&e.value.keep&&(e=e.value),e.keep)return delete e.keep,e}addDragendIfNeeded(e){if(e.some(r=>r.event==="dragend"))return e;let t={event:"dragend",eventInfo:{detail:0},pointerPosition:this.getToElementPosition()};return e.concat(t)}getToElementPosition(){var t,r;if(!((r=(t=this.context.data)==null?void 0:t.toElement)!=null&&r.rect))return;let{rect:e}=this.context.data.toElement;return{originX:e.left+e.width/2,originY:e.top+e.height/2}}addDragOverBeforeDragEnd(e){let t=e.findIndex(n=>["dragend","drop"].includes(n.event)),r=e[t-1];if(!r||r.event!=="dragover"){let n={event:"dragover",eventInfo:{detail:0},pointerPosition:this.getToElementPosition(),fireOnTarget:!0};e.splice(t,0,n)}else r.fireOnTarget=!0;return e}fixEventSequence(e){let t=this.addDragendIfNeeded(e);return this.addDragOverBeforeDragEnd(t)}addElementLocatedElementToDragEvents(e,t,r){let n=o=>o.fireOnTarget||["drop","dragenter"].includes(o.event);return e.forEach(o=>o.locatedElement=n(o)?r:t),e}generateHTML5DragEventSequence(){let e=this.context.data.targetId,t=this.context.data.toElement,r=this.step.events.filter(n=>n.event!=="mousemove"&&n.event!=="pointermove");return r=this.fixEventSequence(r),r=this.addElementLocatedElementToDragEvents(r,e.locatedElement,t.locatedElement),this.step.dispatchDragEventsOnClosestDraggable&&r.forEach(n=>n.dispatchDragEventsOnClosestDraggable=!0),r}}});var jn,kg=T(()=>{"use strict";ce();jn=class extends W{async performAction(e){let{step:t,context:r,frameHandler:n,sessionPlayerInit:{paramEvaluator:o,utils:i,commonConstants:a}}=this,c=this.getTarget();try{let l=await this.stepActionUtils.extractTargetText(c),d,m;if(o){let p=o.computeExpression(t.expression2,r,this.exportsGlobal,this.exportsTest);d=l,m=p.evaluatedText}else{let p=await e.executeStep(t.expression2,r,n,this.exportsGlobal,this.locateElementPlayer,this.exportsTest);d=l,m=p.evaluatedText}try{return i.compareOrMatch(m,d)?{success:!0}:{success:!1,errorType:a.stepResult.TEXT_COMPARE_FAILURE,resultInfo:{expected:String(m),actual:d}}}catch{return{success:!1,errorType:a.stepResult.TEXT_COMPARE_FAILURE,resultInfo:{expected:m.toString(),actual:d}}}}catch(l){return{success:!1,reason:l.message,exception:l,shouldRetry:!0}}}}});var _g,ZS,Wi,Og=T(()=>{"use strict";_g=E(require("lodash"));ce();j();ZS=x("evaluate-expression-step-action"),Wi=class extends W{async execute(){let e=this.step,t=this.context,r=this.exportsGlobal,n=this.exportsTest;try{ZS.info("runner running incoming params evaluation");let o=t.incomingParams||{};_g.isEmpty(o)&&(o=this.sessionPlayerInit.stepParamBuilder.getStepInputs(e,t,r,n));let i=["context",...o.as.functionParameters],a=[t,...o.as.functionArguments],l=`return ${e.subType==="text"?`'${e.expression.replace(/'/g,"\\'")}'`:e.expression}`.replace(/\n/g,"\\n"),m=Function.apply(Function,i.concat([l])).apply(null,a);return t.data[e.targetName]=m,t.data[e.targetId]=m,t.internalParams&&t.internalParams.add(e.targetId),{success:!0,evaluatedText:m,data:t.data}}catch(o){let{stepResult:i}=this.sessionPlayerInit.commonConstants;throw{errorType:i.EVALUATE_EXPRESSION_EXCEPTION,resultInfo:{exception:o.toString()},success:!1}}}}});var Lg,Ng=T(()=>{"use strict";Lg=function(s,e){let t=typeof Event=="function",r=s.isRoot?document.documentElement:getLocatedElement(s.locatedElement),n={eventIndex:0,element:r,events:s.events,eventType:s.eventType,quirks:s.quirks};if(!r)throw new Error("element not found");window.__unloadNavigator=function(){fe()},window.addEventListener("unload",window.__unloadNavigator);let o=["keydown","keyup","keypress"],i=15;function a(A){try{if(!t)return;let O=new CustomEvent("textInput",{bubbles:!0,cancelable:!0});return A.eventData&&(O.data=A.eventData.data),O}catch{}}function c(A){try{let O=document.createEvent("TextEvent");O.data=A.eventData.data;let M=1,q=A.eventData.locale||"en-US";return O.initTextEvent("textInput",!0,!0,window,A.eventData.data,M,q),O}catch{}}function l(A){return a(A)||c()}function d(A,O,M){try{return new KeyboardEvent(A,{bubbles:!0,cancelable:!0,location:O.location||0,key:O.key||"",ctrlKey:Boolean(M.ctrl),shiftKey:Boolean(M.shift),altKey:Boolean(M.alt),metaKey:Boolean(M.meta)})}catch{}}function m(A,O,M){try{let q=document.createEvent("KeyboardEvent");return q.initKeyEvent(A,!0,!0,null,Boolean(M.ctrl),Boolean(M.alt),Boolean(M.shift),Boolean(M.meta),O.key||"",0),q}catch{}}function p(A,O,M){try{let q=document.createEvent("Events");return q.initEvent(A,!0,!0),q.altKey=Boolean(M.alt),q.ctrlKey=Boolean(M.ctrl),q.metaKey=Boolean(M.meta),q.shiftKey=Boolean(M.shift),q.keyCode=O.key||"",q}catch{}}function f(A,O,M){return d(A,O,M)||m(A,O,M)||p(A,O,M)}function h(A){let O=o.indexOf(A.event);if(typeof O!="number"||O<0)return null;let M=A.eventData,q=M.modifiers||{},me=f(A.event,M,q);return Object.defineProperties(me,{keyCode:{enumerable:!0,get(){return this._keyCode_}},charCode:{enumerable:!0,get(){return this._charCode_}},which:{enumerable:!0,get(){return this._keyCode_}}}),me._keyCode_=M.keyCode,me._charCode_=M.charCode||0,me}function g(A){return A.event==="textInput"?l(A):h(A)}function y(A,O){return function(){var q;return A.event==="textInput"&&!((q=O.quirks)!=null&&q.isAuth0Form)}()}function w(A,O){return A.event==="keyup"&&O.event==="keydown"?i:0}function C(A,O,M){let q=w(O,M);return Math.min(M.timeStamp-O.timeStamp,q)}function b(A){let O=Object.getOwnPropertyDescriptor(A,"value");if(!O)return;let M=A.value;A.value=`${M}#`,O.configurable&&delete A.value,A.value=M;let q=document.createEvent("HTMLEvents");q.initEvent("input",!0,!1),A.dispatchEvent(q),Object.defineProperty(A,"value",O)}function v(A){if(A.isInput)try{if(b(A.element),t)A.element.dispatchEvent(new Event("change"));else{let O=document.createEvent("HTMLEvents");O.initEvent("change",!1,!0),A.element.dispatchEvent(O)}}catch{}}function I(A,O,M){M?setTimeout(()=>{L(A)},C(A,O,M)):(window.__unloadNavigator&&window.removeEventListener("unload",window.__unloadNavigator),v(A),fe())}function k(A,O){return(A==="change"||A==="blur")&&O.element.tagName==="OPTION"}function D(A,O,M){return k(A.type,O)?O.element.parentElement:M.locatedElement?getLocatedElement(M.locatedElement):O.element}function S(A,O){let M=A.firstChild,q;for(;M;){if(M.nodeType===3){if(O.offset--<=0)return M}else if(M.nodeType===1&&(q=S(M,O),q))return q;M=M.nextSibling}return null}function _(A,O){if(!(!A||!O)){if(!isNaN(O.start))A.selectionStart=O.start,A.selectionEnd=O.end;else if(!isNaN(O.nodeOffset)){let M;if(A.firstChild?M=S(A,{offset:O.nodeOffset}):M=A,M){let q=window.getSelection(),me=document.createRange();try{q.removeAllRanges(),me.setStart(M,O.textOffset),me.setEnd(M,O.textOffset),q.addRange(me)}catch{}}}}}function P(A,O,M){if(O.isFocusable&&O.isSelectable(A)&&A.type!=="submit")try{_(O.element,M.eventData.selection)}catch{}let q=D(A,O,M);if(!q)throw new Error("could not find element");A.type==="submit"&&q.action?q.submit():q.dispatchEvent(A)}function L(A){let O,M=A.events[A.eventIndex],q=A.events[++A.eventIndex];try{O=g(M)}catch(me){return Ct(`exception in get event in text step:${me.message}`)}if(y(M,A))return I(A,M,q);if(O)try{P(O,A,M)}catch(me){return Ct(`exception in executeEvent in text step:${me.message}`)}else if(A.noEventExecuter)A.noEventExecuter(A,M);else return Ct(`cannot execute event ${M.event}`);I(A,M,q)}function B(A){let O=A.tagName;return O==="INPUT"||O==="TEXTAREA"}function V(A){return A.getAttribute?Boolean(A.getAttribute("contenteditable")==="true"):!1}function Y(A,O){if(A.isInput){A.element.value=O.eventData.text;let M=document.createEvent("Event");M.initEvent("input",!0,!1),A.element.dispatchEvent(M)}else A.isContentEditable&&(A.element.innerHTML=O.eventData.text)}function ee(){var O;let A=document.activeElement;for(;(O=A.shadowRoot)!=null&&O.activeElement;)A=A.shadowRoot.activeElement;return A}function fe(A){let O={status:"done",result:A,success:!0};n.isNonTextableElemnet&&(O.reason="Set text on non input element"),e(O)}function Ct(A){A=A||{};let O={status:"failed",result:A,success:!1};n.isNonTextableElemnet&&(O.reason="Set text on non input element"),e(O)}try{n.isInput=B(n.element),n.isContentEditable=V(n.element),!n.isInput&&!n.isContentEditable&&(n.isNonTextableElemnet=!0),n.isFocusable=n.isInput||n.isContentEditable,n.isSelectable=function(A){return A.type!=="keyup"},n.noEventExecuter=Y}catch(A){Ct(`exception in set text step:${A.message}`);return}let Xr=ee();dispatchFocus(s.elementToFocusLocatedElement,Xr),L(n)}});var Gi,Dg=T(()=>{"use strict";ce();Pi();F();Ng();Gi=class extends W{async setValueNative(){let e=this.context,t=this.getTarget();return this.step.delayBetweenChars?(await this.driver.elementIdClear(ut(t.seleniumElement)),await this.setTextDelayed()):this.driver.setValue(t.seleniumElement,e.stepText)}async setValueJS(){var d;let e=this.step,t=this.context,r=t.data[e.targetId||"targetId"],n=t.data.timeToPlayStep+3e3,o=e.events,{setTextDraftJs:i}=this.sessionPlayerInit.codeSnippets;if(r.isDraftEditor&&i)return this.driver.executeJS(i(r.locatedElement,t.stepText));if(!(o!=null&&o.length))return;let a={eventType:e.type,events:o,quirks:e.quirks,locatedElement:r.locatedElement,isRoot:r.isRoot,elementToFocusLocatedElement:r.elementToFocusLocatedElement},c=`
401
401
  var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
402
402
  var dispatchFocus = ${Ss};
403
- var setText = ${Ng.toString()};
403
+ var setText = ${Lg.toString()};
404
404
  var eventData = arguments[0];
405
405
  var done = arguments[1];
406
406
  return setText.call(null, eventData, done);
407
- `,u=await this.driver.executeCodeAsync(c,n,a);return{success:Boolean((d=u.value)==null?void 0:d.success)}}async setTextDelayed(){let e=this.context.stepText,t=this.getTarget();for(let r=0;r<e.length;r++)await this.driver.elementIdValue(ut(t.seleniumElement),e[r]),r<e.length-1&&await ie(this.step.delayBetweenChars)}async setValueAppendNative(){let e=[],t=this.context,r=this.getTarget();if(r!=null&&r.seleniumElement)return this.step.delayBetweenChars?this.setTextDelayed():(e.push(Array.from(t.stepText)),this.driver.elementIdValue(ut(r.seleniumElement),e));throw new Error("missing selenium element")}async performAction(){let e=this.getTarget(),t=this.driver.isSafari()&&e.locatedElement&&e.locatedElement.shadowPath&&Array.isArray(e.locatedElement.shadowPath)&&e.locatedElement.shadowPath.length>1;if(this.step.appendText){if(this.step.nativeEvents)return this.setValueAppendNative();let{stepResult:r}=this.sessionPlayerInit.commonConstants;return{success:!1,errorType:r.TEXT_ACTION_FAILURE,resultInfo:{error:"'Append Text' is only supported in Native Mode"}}}return this.step.nativeEvents&&!t?this.setValueNative():this.setValueJS()}}});var Ug,Fg=T(()=>{"use strict";Ug=function(s,e){var d;function t(m,p){let f=`data-testim-${m}`,h="Native sessionStorage is not available";function g(y){return y!=null&&y.toString?y.toString().includes("[native code]"):!1}try{if(![window.sessionStorage.setItem,window.sessionStorage.getItem].every(g))throw new Error(h);let y=JSON.parse(window.sessionStorage.getItem(f)||"{}"),w=Object.assign({},y,p);window.sessionStorage.setItem(f,JSON.stringify(w))}catch(y){let w=y.message.toLowerCase().includes("quota"),P=y.message===h;if(y.message.includes("sessionStorage")||y.message.includes("The operation is insecure")||w||P){let b=document.head.querySelector("#testim-storage-backup");b||(b=document.createElement("meta"),b.id="testim-storage-backup",document.head.append(b));let v=JSON.parse(b.getAttribute(f)||"{}"),I=Object.assign({},v,p);if(b.setAttribute(f,JSON.stringify(I)),w||P){try{window.sessionStorage.removeItem(f)}catch{}(window.TSTA=window.TSTA||{}).useFallbackStorage=!0}return}throw y}}function r(m){return m.function?m.function.args.map(p=>p!=null&&p.locatedElement?getLocatedElement(p.locatedElement):p):m.directParams.map(p=>p.selector?document.querySelector(p.selector):p.value).concat(m.otherParams)}function n(m,p){function f(){return m.apply(this,p)}return f.prototype=m.prototype,new f}let o={},i={},a={},c=s.functionParams,u=s.transactionId;try{let m=r(s);m.push(o,i,a);let p=((d=s.function)==null?void 0:d.params)||c,h=(e||n(Function,p)).apply(null,m);typeof Promise<"u"&&h instanceof Promise?(t(u,{type:"promise"}),h.then(g=>{t(u,{status:"done",success:!0,result:{resultValue:g,exports:o,exportsTest:i,exportsGlobal:a}})},g=>{t(u,{status:"failed",success:!1,result:{resultValue:g.toString(),exports:o,exportsTest:i,exportsGlobal:a}})})):t(u,{status:"done",success:!0,result:{resultValue:h,exports:o,exportsTest:i,exportsGlobal:a}})}catch(m){t(u,{status:"failed",success:!1,result:{resultValue:m.toString(),exports:o,exportsTest:i,exportsGlobal:a}})}}});var Gi,ed,nr,qi=T(()=>{"use strict";Gi=E(require("lodash"));F();ce();j();Fg();be();ed=x("base-js-step-action"),nr=class extends W{isExceedingMaxResultSize(e,t){try{let r=t.project.defaults.enforceMaximumJsResultSize,n=M.flags.maximumJsResultSize.getValue(),o=JSON.stringify(e).length>n;return r?o:(o&&ed.warn(`js result size exceeded ${n}, stepId: ${this.step.id}`),!1)}catch{return!1}}executeGetStatus(e){return this.driver.executeJS(t=>{let r=`data-testim-${t}`;try{return window.sessionStorage.getItem(r)}catch(n){if(n.message.includes("sessionStorage")||n.message.includes("The operation is insecure")){let o=document.head.querySelector("#testim-storage-backup");return o?o.getAttribute(r):"{}"}throw n}},e)}constructJSFunParams(e){let t=e.incomingParams,r=["context",...t.as.functionParameters,"exports","exportsTest","exportsGlobal"],n=[e.context,...t.as.functionArguments];return r.push(e.code),n.forEach(o=>{Gi.isObject(o)&&mo(o,"seleniumElement",Gi.isEqual)}),{function:{params:r,args:n},transactionId:e.transactionId,browser:e.browser,browserMajor:e.browserMajor}}checkStatus(e){let t=this,r=t.context.config.retryTimeout,n=t.context.data.timeToPlayStep-r;async function o(){let i;try{i=await t.executeGetStatus(e)}catch(u){ed.warn("failed to get js status",{err:u}),i={value:{status:"exception"}}}let a;try{a=JSON.parse(i?i.value:"{}")}catch{ed.warn("non object value",{selRes:i}),a={status:"exception"}}let c=t.stepActionUtils.abortedSteps.find(u=>u.id===t.step.id);return c||(a?a.status&&a.status==="done"?a:a.status&&a.status==="failed"?{success:!1,shouldRetry:!0,result:a.result}:n-r<=0?Object.assign(a,{success:!1,shouldRetry:!0}):(n-=r,await ie(r),o()):{success:!0})}return o()}executeInAut(e){let t=M.flags.experimentalPreCodeCompilation.isEnabled(),r=M.flags.experimentalAsyncCustomCode.isEnabled(),n=this.constructJSFunParams(e),o=n.function.args.some(u=>Boolean(u==null?void 0:u.locatedElement)),i="undefined";if(t){let u=n.function.params.slice(0,-1);i=r?`async function(${u.join(",")}) {
407
+ `,l=await this.driver.executeCodeAsync(c,n,a);return{success:Boolean((d=l.value)==null?void 0:d.success)}}async setTextDelayed(){let e=this.context.stepText,t=this.getTarget();for(let r=0;r<e.length;r++)await this.driver.elementIdValue(ut(t.seleniumElement),e[r]),r<e.length-1&&await ie(this.step.delayBetweenChars)}async setValueAppendNative(){let e=[],t=this.context,r=this.getTarget();if(r!=null&&r.seleniumElement)return this.step.delayBetweenChars?this.setTextDelayed():(e.push(Array.from(t.stepText)),this.driver.elementIdValue(ut(r.seleniumElement),e));throw new Error("missing selenium element")}async performAction(){let e=this.getTarget(),t=this.driver.isSafari()&&e.locatedElement&&e.locatedElement.shadowPath&&Array.isArray(e.locatedElement.shadowPath)&&e.locatedElement.shadowPath.length>1;if(this.step.appendText){if(this.step.nativeEvents)return this.setValueAppendNative();let{stepResult:r}=this.sessionPlayerInit.commonConstants;return{success:!1,errorType:r.TEXT_ACTION_FAILURE,resultInfo:{error:"'Append Text' is only supported in Native Mode"}}}return this.step.nativeEvents&&!t?this.setValueNative():this.setValueJS()}}});var Mg,Ug=T(()=>{"use strict";Mg=function(s,e){var d;function t(m,p){let f=`data-testim-${m}`,h="Native sessionStorage is not available";function g(y){return y!=null&&y.toString?y.toString().includes("[native code]"):!1}try{if(![window.sessionStorage.setItem,window.sessionStorage.getItem].every(g))throw new Error(h);let y=JSON.parse(window.sessionStorage.getItem(f)||"{}"),w=Object.assign({},y,p);window.sessionStorage.setItem(f,JSON.stringify(w))}catch(y){let w=y.message.toLowerCase().includes("quota"),C=y.message===h;if(y.message.includes("sessionStorage")||y.message.includes("The operation is insecure")||w||C){let b=document.head.querySelector("#testim-storage-backup");b||(b=document.createElement("meta"),b.id="testim-storage-backup",document.head.append(b));let v=JSON.parse(b.getAttribute(f)||"{}"),I=Object.assign({},v,p);if(b.setAttribute(f,JSON.stringify(I)),w||C){try{window.sessionStorage.removeItem(f)}catch{}(window.TSTA=window.TSTA||{}).useFallbackStorage=!0}return}throw y}}function r(m){return m.function?m.function.args.map(p=>p!=null&&p.locatedElement?getLocatedElement(p.locatedElement):p):m.directParams.map(p=>p.selector?document.querySelector(p.selector):p.value).concat(m.otherParams)}function n(m,p){function f(){return m.apply(this,p)}return f.prototype=m.prototype,new f}let o={},i={},a={},c=s.functionParams,l=s.transactionId;try{let m=r(s);m.push(o,i,a);let p=((d=s.function)==null?void 0:d.params)||c,h=(e||n(Function,p)).apply(null,m);typeof Promise<"u"&&h instanceof Promise?(t(l,{type:"promise"}),h.then(g=>{t(l,{status:"done",success:!0,result:{resultValue:g,exports:o,exportsTest:i,exportsGlobal:a}})},g=>{t(l,{status:"failed",success:!1,result:{resultValue:g.toString(),exports:o,exportsTest:i,exportsGlobal:a}})})):t(l,{status:"done",success:!0,result:{resultValue:h,exports:o,exportsTest:i,exportsGlobal:a}})}catch(m){t(l,{status:"failed",success:!1,result:{resultValue:m.toString(),exports:o,exportsTest:i,exportsGlobal:a}})}}});var qi,ed,or,Vi=T(()=>{"use strict";qi=E(require("lodash"));F();ce();j();Ug();be();ed=x("base-js-step-action"),or=class extends W{isExceedingMaxResultSize(e,t){try{let r=t.project.defaults.enforceMaximumJsResultSize,n=U.flags.maximumJsResultSize.getValue(),o=JSON.stringify(e).length>n;return r?o:(o&&ed.warn(`js result size exceeded ${n}, stepId: ${this.step.id}`),!1)}catch{return!1}}executeGetStatus(e){return this.driver.executeJS(t=>{let r=`data-testim-${t}`;try{return window.sessionStorage.getItem(r)}catch(n){if(n.message.includes("sessionStorage")||n.message.includes("The operation is insecure")){let o=document.head.querySelector("#testim-storage-backup");return o?o.getAttribute(r):"{}"}throw n}},e)}constructJSFunParams(e){let t=e.incomingParams,r=["context",...t.as.functionParameters,"exports","exportsTest","exportsGlobal"],n=[e.context,...t.as.functionArguments];return r.push(e.code),n.forEach(o=>{qi.isObject(o)&&mo(o,"seleniumElement",qi.isEqual)}),{function:{params:r,args:n},transactionId:e.transactionId,browser:e.browser,browserMajor:e.browserMajor}}checkStatus(e){let t=this,r=t.context.config.retryTimeout,n=t.context.data.timeToPlayStep-r;async function o(){let i;try{i=await t.executeGetStatus(e)}catch(l){ed.warn("failed to get js status",{err:l}),i={value:{status:"exception"}}}let a;try{a=JSON.parse(i?i.value:"{}")}catch{ed.warn("non object value",{selRes:i}),a={status:"exception"}}let c=t.stepActionUtils.abortedSteps.find(l=>l.id===t.step.id);return c||(a?a.status&&a.status==="done"?a:a.status&&a.status==="failed"?{success:!1,shouldRetry:!0,result:a.result}:n-r<=0?Object.assign(a,{success:!1,shouldRetry:!0}):(n-=r,await ie(r),o()):{success:!0})}return o()}executeInAut(e){let t=U.flags.experimentalPreCodeCompilation.isEnabled(),r=U.flags.experimentalAsyncCustomCode.isEnabled(),n=this.constructJSFunParams(e),o=n.function.args.some(l=>Boolean(l==null?void 0:l.locatedElement)),i="undefined";if(t){let l=n.function.params.slice(0,-1);i=r?`async function(${l.join(",")}) {
408
408
  ${e.code}
409
- };`:`function(${u.join(",")}) {
409
+ };`:`function(${l.join(",")}) {
410
410
  ${e.code}
411
411
  };`,n.function.params.pop()}let{codeSnippets:a}=this.sessionPlayerInit,c=`
412
412
  ${o?`var getLocatedElement = ${a.getLocatedElementCode};`:";"}
413
- var runCode = ${Ug.toString()};
413
+ var runCode = ${Mg.toString()};
414
414
  var eventData = arguments[0];
415
415
  var funcToRun = ${i};
416
416
  return runCode.call(null, eventData, funcToRun);
417
- `;return t?this.driver.executeJS(c,n).catch(u=>this.handleExecutionError(u)):this.driver.executeJS(c,n)}codeExecDone(e){let{stepResult:t}=this.sessionPlayerInit.commonConstants,{context:r}=this,{result:n={},tstConsoleLogs:o,nodeVersion:i,navigateToDifferentDomain:a}=e;n.exports&&(r.data.exports=n.exports);let c={nodeVersion:i,tstConsoleLogs:o,data:r.data};return this.isFailedResult(n.resultValue)?Object.assign(c,{success:!1,errorType:t.JS_ASSERTION_FAILED}):this.isExceedingMaxResultSize({result:n,tstConsoleLogs:o},r)?Object.assign(c,{success:!1,errorType:t.JS_RESULT_MAX_SIZE_EXCEEDED}):(Object.assign(c,{success:!0,exportsTest:n.exportsTest,exportsGlobal:n.exportsGlobal}),a&&(c.navigateToDifferentDomain=a)),Promise.resolve(c)}codeExecFailed(e){let{stepResult:t}=this.sessionPlayerInit.commonConstants,{context:r}=this;if(e.type==="promise")return Promise.resolve({data:r.data,success:!1,shouldRetry:!0,isPendingPromise:!0,errorType:t.JS_ASSERTION_FAILED});if(e.reason==="stopped")return Promise.resolve(Object.assign({},e,{errorType:t.STOPPED}));let{result:n={},tstConsoleLogs:o}=e,i={tstConsoleLogs:o,data:r.data,exportsGlobal:n.exportsGlobal,exportsTest:n.exportsTest,success:!1,errorType:t.UNWRAPPED_AUT_REJECT,resultInfo:{error:n.resultValue}};return Promise.resolve(i)}checkCodeResponse(e){return e!=null&&e.success?this.codeExecDone(e):this.codeExecFailed(e)}async performAction(){let e=this.step,t=this.context;this.startTimestamp=Date.now();let r={transactionId:`${t.testResultId}:${e.id}`,id:e.id,eventType:e.type,code:e.code,incomingParams:t.incomingParams,exportsGlobal:this.exportsGlobal,exportsTest:this.exportsTest,context:{config:t.config,data:t.data},testResultId:t.testResultId},n=await this.driver.getBrowserAndOS();Object.assign(r,{browser:n.browser,browserMajor:n.browserMajor}),this.context.isPendingPromise||await this.executeInAut(r);let o=await this.checkStatus(r.transactionId);return await this.checkCodeResponse(o)}handleExecutionError(e){if((e==null?void 0:e.seleniumStack)&&e.seleniumStack.type==="JavaScriptError"&&e.seleniumStack.orgStatusMessage){let r=e.seleniumStack.orgStatusMessage.indexOf(`
418
- Build info`),n=e.seleniumStack.orgStatusMessage.slice(0,r===-1?void 0:r);throw new Error(n)}throw e}}});var jt,jg=T(()=>{"use strict";qi();jt=class extends nr{isFailedResult(e){return e===!1}}});var Ls,Bg=T(()=>{"use strict";qi();Ls=class extends nr{isFailedResult(e){return!e}}});var rR,Vi,$g=T(()=>{"use strict";ce();F();rR={8:"\uE008",9:"\uE004",13:"\uE007",27:"\uE00C",33:"\uE00E",34:"\uE00F",35:"\uE010",36:"\uE011",45:"\uE016",112:"\uE031",113:"\uE032",114:"\uE033",115:"\uE034",116:"\uE035",117:"\uE036",118:"\uE037",119:"\uE038",120:"\uE039",121:"\uE03A",122:"\uE03B",123:"\uE03C"},Vi=class extends W{setWithValueApi(e){let t=this.getTarget();return t!=null&&t.seleniumElement?this.driver.elementIdValue(ut(t.seleniumElement),e):Promise.reject(new Error("missing selenium element"))}performAction(){let e=[],t=this.step.events[0].eventData.keyCode;return t>=32&&t<=127?e.push(String.fromCharCode(t)):e.push(rR[t]),this.setWithValueApi(e)}}});function Wg(s,e){function t(r,n){let o=Element.prototype.matches,i=o&&isNativeFunction(o)?o:document.createElement(r.tagName).__proto__.matches;do{if(i.call(r,n))return r;r=r.parentElement||r.parentNode}while(r!==null&&r.nodeType===1);return null}try{let r=getLocatedElement(s);if(!r)return{success:!1,status:"failed",result:"option element not found"};let n=t(r,"select");return n?(n.focus(),r.selected?{success:!0,status:"done"}:(r.selected=!0,["input","change"].map(i=>{let a=document.createEvent("HTMLEvents");return a.initEvent(i,!0,!1),a}).forEach(i=>{if(e){n.dispatchEvent(i);return}r.dispatchEvent(i)}),{success:!0,status:"done"})):{success:!1,status:"failed",result:"select element not found"}}catch(r){return{success:!1,status:"failed",result:r.toString()}}}var Gg=T(()=>{"use strict"});var Hi,qg=T(()=>{"use strict";ce();Gg();F();be();Hi=class extends W{async performAction(){var m,p;let e=this.context.data[this.step.targetId||"targetId"],{seleniumElement:t,locatedElement:r}=e,o=(await this.driver.getBrowserAndOS()).browserMajor,i=this.driver.isSafari(),a=Boolean((m=this.step.element)==null?void 0:m.isShadowed);if(!i||i&&o>=13&&!a)try{return await this.driver.elementIdClick(ut(t))}catch(f){if(!f.message.includes("Cannot check the displayedness of a non-Element argument"))throw f}let c=M.flags.safariSelectOptionDispatchEventOnSelectElement.isEnabled(),u=`
417
+ `;return t?this.driver.executeJS(c,n).catch(l=>this.handleExecutionError(l)):this.driver.executeJS(c,n)}codeExecDone(e){let{stepResult:t}=this.sessionPlayerInit.commonConstants,{context:r}=this,{result:n={},tstConsoleLogs:o,nodeVersion:i,navigateToDifferentDomain:a}=e;n.exports&&(r.data.exports=n.exports);let c={nodeVersion:i,tstConsoleLogs:o,data:r.data};return this.isFailedResult(n.resultValue)?Object.assign(c,{success:!1,errorType:t.JS_ASSERTION_FAILED}):this.isExceedingMaxResultSize({result:n,tstConsoleLogs:o},r)?Object.assign(c,{success:!1,errorType:t.JS_RESULT_MAX_SIZE_EXCEEDED}):(Object.assign(c,{success:!0,exportsTest:n.exportsTest,exportsGlobal:n.exportsGlobal}),a&&(c.navigateToDifferentDomain=a)),Promise.resolve(c)}codeExecFailed(e){let{stepResult:t}=this.sessionPlayerInit.commonConstants,{context:r}=this;if(e.type==="promise")return Promise.resolve({data:r.data,success:!1,shouldRetry:!0,isPendingPromise:!0,errorType:t.JS_ASSERTION_FAILED});if(e.reason==="stopped")return Promise.resolve(Object.assign({},e,{errorType:t.STOPPED}));let{result:n={},tstConsoleLogs:o}=e,i={tstConsoleLogs:o,data:r.data,exportsGlobal:n.exportsGlobal,exportsTest:n.exportsTest,success:!1,errorType:t.UNWRAPPED_AUT_REJECT,resultInfo:{error:n.resultValue}};return Promise.resolve(i)}checkCodeResponse(e){return e!=null&&e.success?this.codeExecDone(e):this.codeExecFailed(e)}async performAction(){let e=this.step,t=this.context;this.startTimestamp=Date.now();let r={transactionId:`${t.testResultId}:${e.id}`,id:e.id,eventType:e.type,code:e.code,incomingParams:t.incomingParams,exportsGlobal:this.exportsGlobal,exportsTest:this.exportsTest,context:{config:t.config,data:t.data},testResultId:t.testResultId},n=await this.driver.getBrowserAndOS();Object.assign(r,{browser:n.browser,browserMajor:n.browserMajor}),this.context.isPendingPromise||await this.executeInAut(r);let o=await this.checkStatus(r.transactionId);return await this.checkCodeResponse(o)}handleExecutionError(e){if((e==null?void 0:e.seleniumStack)&&e.seleniumStack.type==="JavaScriptError"&&e.seleniumStack.orgStatusMessage){let r=e.seleniumStack.orgStatusMessage.indexOf(`
418
+ Build info`),n=e.seleniumStack.orgStatusMessage.slice(0,r===-1?void 0:r);throw new Error(n)}throw e}}});var jt,Fg=T(()=>{"use strict";Vi();jt=class extends or{isFailedResult(e){return e===!1}}});var Ls,jg=T(()=>{"use strict";Vi();Ls=class extends or{isFailedResult(e){return!e}}});var eR,Hi,Bg=T(()=>{"use strict";ce();F();eR={8:"\uE008",9:"\uE004",13:"\uE007",27:"\uE00C",33:"\uE00E",34:"\uE00F",35:"\uE010",36:"\uE011",45:"\uE016",112:"\uE031",113:"\uE032",114:"\uE033",115:"\uE034",116:"\uE035",117:"\uE036",118:"\uE037",119:"\uE038",120:"\uE039",121:"\uE03A",122:"\uE03B",123:"\uE03C"},Hi=class extends W{setWithValueApi(e){let t=this.getTarget();return t!=null&&t.seleniumElement?this.driver.elementIdValue(ut(t.seleniumElement),e):Promise.reject(new Error("missing selenium element"))}performAction(){let e=[],t=this.step.events[0].eventData.keyCode;return t>=32&&t<=127?e.push(String.fromCharCode(t)):e.push(eR[t]),this.setWithValueApi(e)}}});function $g(s,e){function t(r,n){let o=Element.prototype.matches,i=o&&isNativeFunction(o)?o:document.createElement(r.tagName).__proto__.matches;do{if(i.call(r,n))return r;r=r.parentElement||r.parentNode}while(r!==null&&r.nodeType===1);return null}try{let r=getLocatedElement(s);if(!r)return{success:!1,status:"failed",result:"option element not found"};let n=t(r,"select");return n?(n.focus(),r.selected?{success:!0,status:"done"}:(r.selected=!0,["input","change"].map(i=>{let a=document.createEvent("HTMLEvents");return a.initEvent(i,!0,!1),a}).forEach(i=>{if(e){n.dispatchEvent(i);return}r.dispatchEvent(i)}),{success:!0,status:"done"})):{success:!1,status:"failed",result:"select element not found"}}catch(r){return{success:!1,status:"failed",result:r.toString()}}}var Wg=T(()=>{"use strict"});var zi,Gg=T(()=>{"use strict";ce();Wg();F();be();zi=class extends W{async performAction(){var m,p;let e=this.context.data[this.step.targetId||"targetId"],{seleniumElement:t,locatedElement:r}=e,o=(await this.driver.getBrowserAndOS()).browserMajor,i=this.driver.isSafari(),a=Boolean((m=this.step.element)==null?void 0:m.isShadowed);if(!i||i&&o>=13&&!a)try{return await this.driver.elementIdClick(ut(t))}catch(f){if(!f.message.includes("Cannot check the displayedness of a non-Element argument"))throw f}let c=U.flags.safariSelectOptionDispatchEventOnSelectElement.isEnabled(),l=`
419
419
  var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
420
420
  var isNativeFunction = ${this.sessionPlayerInit.utils.isNativeFunction.toString()};
421
- var selectOption = ${Wg.toString()};
421
+ var selectOption = ${$g.toString()};
422
422
  return selectOption.apply(null, arguments);
423
- `;return(p=(await this.driver.executeJSWithArray(u,[r,c])).value)!=null&&p.success?{success:!0}:{success:!1}}}});var zi,Vg=T(()=>{"use strict";ce();zi=class extends W{async performAction(){await this.driver.submitForm(this.getTarget().seleniumElement)}}});var sR,Ki,Hg=T(()=>{"use strict";ce();sR=(s,e,t,r)=>({x:t,y:r,width:e,height:s,get top(){return this.y},get left(){return this.x},get right(){return this.x+this.width},get bottom(){return this.y+this.height},toJSON(){}}),Ki=class extends W{getRect(){return this.driver.isFirefox()?this.getTarget().rectWithoutFrameOffset:this.getTarget().rect}async performAction(){let e=this.getTarget(),{seleniumElement:t,rectWithoutFrameOffset:r,rect:n}=e,{width:o,height:i}=n,a=o/2,c=i/2,u=this.step.element.clickOffset;if(u&&this.step.shouldAccountForMouseOffsetInHover){let{x:m,y:p}=u;this.sessionPlayerInit.utils.isWithinTargetRect(sR(i,o,0,0),m,p)&&(a=m,c=p)}let d={frameOffset:{x:n.left-r.left,y:n.top-r.top},rect:r,clickOffset:{x:Math.floor(a),y:Math.floor(c)}};return await this.driver.hover(t,d),{success:!0}}}});var zg,Kg=T(()=>{"use strict";zg=function(s,e){function r(a,c){function u(h,g,y){return y>h&&y<g}let d=a.pointerPosition||{},m=c.getBoundingClientRect(),p=d.originX&&u(m.left,m.left+m.width,d.originX)?d.originX:m.left+m.width/2,f=d.originY&&u(m.top,m.top+m.height,d.originY)?d.originY:m.top+m.height/2;return{x:p,y:f}}function n(a,c,u){let d=r(a,u),m=(c==null?void 0:c.modifiers)||{},p={deltaX:a.deltaX,deltaY:a.deltaY,deltaZ:a.deltaZ,deltaMode:a.deltaMode,clientX:d.x,clientY:d.y,bubbles:!0,cancelable:!0,ctrl:Boolean(m.ctrl),alt:Boolean(m.alt),shift:Boolean(m.shift),meta:Boolean(m.meta)};return new WheelEvent("wheel",p)}function o(a,c){if(a.length===0){e({state:"success"});return}if(!c)throw new Error("element not found");let u=a.shift(),d=n(u,s.eventData,c),m=a[0]?Math.min(a[0].timeStamp-u.timeStamp,200):200;c.dispatchEvent(d),setTimeout(()=>{o(a,c)},m)}let i=getLocatedElement(s.locatedElement);o(s.events,i)}});var Ji,Jg=T(()=>{"use strict";ce();Kg();Ji=class extends W{async performAction(){var c;let e=this.step,t=this.context,r=e.events;if(!(r!=null&&r.length))return;let n={events:r,eventData:{modifiers:e.modifiers,button:e.button},locatedElement:this.getTarget().locatedElement},o=t.data.timeToPlayStep+3e3,i=`
423
+ `;return(p=(await this.driver.executeJSWithArray(l,[r,c])).value)!=null&&p.success?{success:!0}:{success:!1}}}});var Ki,qg=T(()=>{"use strict";ce();Ki=class extends W{async performAction(){await this.driver.submitForm(this.getTarget().seleniumElement)}}});var tR,Ji,Vg=T(()=>{"use strict";ce();tR=(s,e,t,r)=>({x:t,y:r,width:e,height:s,get top(){return this.y},get left(){return this.x},get right(){return this.x+this.width},get bottom(){return this.y+this.height},toJSON(){}}),Ji=class extends W{getRect(){return this.driver.isFirefox()?this.getTarget().rectWithoutFrameOffset:this.getTarget().rect}async performAction(){let e=this.getTarget(),{seleniumElement:t,rectWithoutFrameOffset:r,rect:n}=e,{width:o,height:i}=n,a=o/2,c=i/2,l=this.step.element.clickOffset;if(l&&this.step.shouldAccountForMouseOffsetInHover){let{x:m,y:p}=l;this.sessionPlayerInit.utils.isWithinTargetRect(tR(i,o,0,0),m,p)&&(a=m,c=p)}let d={frameOffset:{x:n.left-r.left,y:n.top-r.top},rect:r,clickOffset:{x:Math.floor(a),y:Math.floor(c)}};return await this.driver.hover(t,d),{success:!0}}}});var Hg,zg=T(()=>{"use strict";Hg=function(s,e){function r(a,c){function l(h,g,y){return y>h&&y<g}let d=a.pointerPosition||{},m=c.getBoundingClientRect(),p=d.originX&&l(m.left,m.left+m.width,d.originX)?d.originX:m.left+m.width/2,f=d.originY&&l(m.top,m.top+m.height,d.originY)?d.originY:m.top+m.height/2;return{x:p,y:f}}function n(a,c,l){let d=r(a,l),m=(c==null?void 0:c.modifiers)||{},p={deltaX:a.deltaX,deltaY:a.deltaY,deltaZ:a.deltaZ,deltaMode:a.deltaMode,clientX:d.x,clientY:d.y,bubbles:!0,cancelable:!0,ctrl:Boolean(m.ctrl),alt:Boolean(m.alt),shift:Boolean(m.shift),meta:Boolean(m.meta)};return new WheelEvent("wheel",p)}function o(a,c){if(a.length===0){e({state:"success"});return}if(!c)throw new Error("element not found");let l=a.shift(),d=n(l,s.eventData,c),m=a[0]?Math.min(a[0].timeStamp-l.timeStamp,200):200;c.dispatchEvent(d),setTimeout(()=>{o(a,c)},m)}let i=getLocatedElement(s.locatedElement);o(s.events,i)}});var Xi,Kg=T(()=>{"use strict";ce();zg();Xi=class extends W{async performAction(){var c;let e=this.step,t=this.context,r=e.events;if(!(r!=null&&r.length))return;let n={events:r,eventData:{modifiers:e.modifiers,button:e.button},locatedElement:this.getTarget().locatedElement},o=t.data.timeToPlayStep+3e3,i=`
424
424
  var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
425
- var wheel = ${zg.toString()};
425
+ var wheel = ${Hg.toString()};
426
426
  var eventData = arguments[0];
427
427
  var done = arguments[1];
428
428
  return wheel.call(null, eventData, done);
429
- `;return{success:((c=(await this.driver.executeCodeAsync(i,o,n)).value)==null?void 0:c.state)==="success"}}}});var Xg,Yg=T(()=>{"use strict";Xg=function(s,e){let t=getLocatedElement(s);if(!t)throw new Error("element not found");function r(){let i=-1,a=0,c=[],u={waitOn(){let d=++i;return function(m){d in c||(c[d]=m,a++,e.length===a&&u.endWithCallback(c))}},endWith(d){u.endWithCallback=d}};return u}function n(i,a,c){let u=new XMLHttpRequest;u.open("GET",i),u.responseType="blob",u.onload=function(){if(this.status>=200&&this.status<300)c({blob:u.response,name:a});else throw new Error("Failed to load blob response code is not between 200 - 300")},u.onerror=function(){throw new Error("Failed to load blob")},u.send()}let o=r();e.forEach(i=>{n(i.url,i.name,o.waitOn())}),o.endWith(i=>{let a=createDropEvent(i);t.dispatchEvent(a)})}});var nR,Xi,Qg=T(()=>{"use strict";ce();j();Yg();be();nR=x("drop-file-step-action"),Xi=class extends W{async performAction(){let{codeSnippets:e,utils:t}=this.sessionPlayerInit,r=this.context.data[this.step.targetId||"targetId"],n=M.flags.overrideAzureStorageUrl.isEnabled(),o=await t.addTokenToFileUrl(this.context.project.id,this.step.fileUrls,this.stepActionUtils.testimServicesApi,n,nR),i=`
429
+ `;return{success:((c=(await this.driver.executeCodeAsync(i,o,n)).value)==null?void 0:c.state)==="success"}}}});var Jg,Xg=T(()=>{"use strict";Jg=function(s,e){let t=getLocatedElement(s);if(!t)throw new Error("element not found");function r(){let i=-1,a=0,c=[],l={waitOn(){let d=++i;return function(m){d in c||(c[d]=m,a++,e.length===a&&l.endWithCallback(c))}},endWith(d){l.endWithCallback=d}};return l}function n(i,a,c){let l=new XMLHttpRequest;l.open("GET",i),l.responseType="blob",l.onload=function(){if(this.status>=200&&this.status<300)c({blob:l.response,name:a});else throw new Error("Failed to load blob response code is not between 200 - 300")},l.onerror=function(){throw new Error("Failed to load blob")},l.send()}let o=r();e.forEach(i=>{n(i.url,i.name,o.waitOn())}),o.endWith(i=>{let a=createDropEvent(i);t.dispatchEvent(a)})}});var rR,Yi,Yg=T(()=>{"use strict";ce();j();Xg();be();rR=x("drop-file-step-action"),Yi=class extends W{async performAction(){let{codeSnippets:e,utils:t}=this.sessionPlayerInit,r=this.context.data[this.step.targetId||"targetId"],n=U.flags.overrideAzureStorageUrl.isEnabled(),o=await t.addTokenToFileUrl(this.context.project.id,this.step.fileUrls,this.stepActionUtils.testimServicesApi,n,rR),i=`
430
430
  var getLocatedElement = ${e.getLocatedElementCode};
431
431
  var createDropEvent = ${e.createDropEvent.toString()};
432
- var downloadFileAndFireDropEvent = ${Xg.toString()};
432
+ var downloadFileAndFireDropEvent = ${Jg.toString()};
433
433
  return downloadFileAndFireDropEvent.apply(null, arguments)
434
- `;return await this.driver.executeJSWithArray(i,[r.locatedElement,o])}}});function ty(s={width:"2px",height:"2px",left:"0px",top:"400px"}){return`function getVisibleElement(locatedElement) {
434
+ `;return await this.driver.executeJSWithArray(i,[r.locatedElement,o])}}});function ey(s={width:"2px",height:"2px",left:"0px",top:"400px"}){return`function getVisibleElement(locatedElement) {
435
435
  var input = getLocatedElement(locatedElement);
436
436
  if(input) {
437
437
  function parents(element, _elements) {
@@ -473,7 +473,7 @@ Build info`),n=e.seleniumStack.orgStatusMessage.slice(0,r===-1?void 0:r);throw n
473
473
  input.removeAttribute("disabled");
474
474
  input.focus();
475
475
  }
476
- }`}async function iR(s,e){let t=null;try{t=(await hc(s)).body}catch(n){if(oR.error("failed to download input-file content",{err:{message:n.message,stack:n.stack,status:n.status}}),n.response)t=n.response.body;else throw n.cause?new Error(n.message):n}let r=`${Zg.tmpdir()}/${e}`;return await ey.promises.writeFile(r,t),r}function aR(s){return de(s,e=>iR(e.url,e.name))}function cR(s,e){return e(s)}async function ry(s,e){let t=await aR(s),r=await de(t,n=>cR(n,e));return Array.isArray(r)&&r.map(n=>n==null?void 0:n.value)}var Zg,ey,oR,sy=T(()=>{"use strict";Zg=E(require("os"));vt();ey=require("fs");F();j();oR=x("input-file-utils")});function uR(){return`async function downloadAndUpload(locatedElement, fileUrls) {
476
+ }`}async function nR(s,e){let t=null;try{t=(await gc(s)).body}catch(n){if(sR.error("failed to download input-file content",{err:{message:n.message,stack:n.stack,status:n.status}}),n.response)t=n.response.body;else throw n.cause?new Error(n.message):n}let r=`${Qg.tmpdir()}/${e}`;return await Zg.promises.writeFile(r,t),r}function oR(s){return de(s,e=>nR(e.url,e.name))}function iR(s,e){return e(s)}async function ty(s,e){let t=await oR(s),r=await de(t,n=>iR(n,e));return Array.isArray(r)&&r.map(n=>n==null?void 0:n.value)}var Qg,Zg,sR,ry=T(()=>{"use strict";Qg=E(require("os"));vt();Zg=require("fs");F();j();sR=x("input-file-utils")});function cR(){return`async function downloadAndUpload(locatedElement, fileUrls) {
477
477
  const fileIsNative = typeof window.File === 'function' && (window.File.toString().indexOf('native code') > -1);
478
478
  const File = fileIsNative ? window.File : (function obtainSafeGlobals() {
479
479
  const attachTo = document.body || document.documentElement;
@@ -550,21 +550,21 @@ Build info`),n=e.seleniumStack.orgStatusMessage.slice(0,r===-1?void 0:r);throw n
550
550
  element.dispatchEvent(new Event("change", { bubbles: true }));
551
551
  }
552
552
  element.removeEventListener("change", changeFiredHandler, true);
553
- }`}var Yi,Qi,ny=T(()=>{"use strict";sy();ce();j();F();be();Yi=x("input-file-step-action"),Qi=class extends W{uploadFile(e){return this.driver.uploadFile(e)}forceInputToBeVisible(e,t){Yi.info("workaround - stepaction - move element to visible position");let r=`
553
+ }`}var Qi,Zi,sy=T(()=>{"use strict";ry();ce();j();F();be();Qi=x("input-file-step-action"),Zi=class extends W{uploadFile(e){return this.driver.uploadFile(e)}forceInputToBeVisible(e,t){Qi.info("workaround - stepaction - move element to visible position");let r=`
554
554
  var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
555
- var getVisibleElement = ${ty(t)};
555
+ var getVisibleElement = ${ey(t)};
556
556
  return getVisibleElement.apply(null, arguments);
557
- `;return this.driver.executeJS(r,e.locatedElement)}async safariPreUploadActions(e){let t={width:"150px",height:"150px",left:"10px",top:"10px"};try{return await this.forceInputToBeVisible(e,t)}catch(r){throw Yi.error("failed to set input file in Safari recovery",{err:r}),r}}async uploadFilesAndForceVisibility(e,t){try{this.driver.isSafari()&&await this.safariPreUploadActions(t),await this.uploadFiles(e,t)}catch(r){let n="The element is not editable",o="The element is not focusable",i="An element command could not be completed because the element is not visible on the page.",a="element not interactable",c="element is not pointer- or keyboard interactable",u="invalid element state: Element is not currently interactable and may not be manipulated",d="Element must not be hidden, disabled or read-only",m="is not reachable by keyboard",p=r?r.message:"";if(p===u||p.startsWith(d)||p.startsWith(n)||p.startsWith(o)||p.startsWith(i)||p.includes(m)||p.includes(a)||p.includes(c)){await this.forceInputToBeVisible(t),await this.uploadFiles(e,t);return}throw Yi.error("failed to set input file",{err:r}),r}}async uploadFiles(e,t){for(let r of e)await this.driver.elementIdValue(ut(t.seleniumElement),r)}async performAction(){let e=this.context.data[this.step.targetId||"targetId"],t=M.flags.overrideAzureStorageUrl.isEnabled(),r=M.flags.useJsInputCodeInSafari.isEnabled(),n=M.flags.useJsInputCodeInFirefox.isEnabled(),o=M.flags.downloadToBase64.isEnabled(),i=await this.sessionPlayerInit.utils.addTokenToFileUrl(this.context.project.id,this.step.fileUrls,this.stepActionUtils.testimServicesApi,t,Yi),a=this.driver.isSafari()&&(r||i.length>1),c=this.driver.isFirefox()&&(n||i.length>1);if(o&&(i=await Promise.all(i.map(async({name:d,url:m})=>{let p=await vr(m);return{name:d,url:`data:${p.type};base64,${Buffer.from(p.body).toString("base64")}`}}))),a||c){await this.driver.executeJSWithArray(`
557
+ `;return this.driver.executeJS(r,e.locatedElement)}async safariPreUploadActions(e){let t={width:"150px",height:"150px",left:"10px",top:"10px"};try{return await this.forceInputToBeVisible(e,t)}catch(r){throw Qi.error("failed to set input file in Safari recovery",{err:r}),r}}async uploadFilesAndForceVisibility(e,t){try{this.driver.isSafari()&&await this.safariPreUploadActions(t),await this.uploadFiles(e,t)}catch(r){let n="The element is not editable",o="The element is not focusable",i="An element command could not be completed because the element is not visible on the page.",a="element not interactable",c="element is not pointer- or keyboard interactable",l="invalid element state: Element is not currently interactable and may not be manipulated",d="Element must not be hidden, disabled or read-only",m="is not reachable by keyboard",p=r?r.message:"";if(p===l||p.startsWith(d)||p.startsWith(n)||p.startsWith(o)||p.startsWith(i)||p.includes(m)||p.includes(a)||p.includes(c)){await this.forceInputToBeVisible(t),await this.uploadFiles(e,t);return}throw Qi.error("failed to set input file",{err:r}),r}}async uploadFiles(e,t){for(let r of e)await this.driver.elementIdValue(ut(t.seleniumElement),r)}async performAction(){let e=this.context.data[this.step.targetId||"targetId"],t=U.flags.overrideAzureStorageUrl.isEnabled(),r=U.flags.useJsInputCodeInSafari.isEnabled(),n=U.flags.useJsInputCodeInFirefox.isEnabled(),o=U.flags.downloadToBase64.isEnabled(),i=await this.sessionPlayerInit.utils.addTokenToFileUrl(this.context.project.id,this.step.fileUrls,this.stepActionUtils.testimServicesApi,t,Qi),a=this.driver.isSafari()&&(r||i.length>1),c=this.driver.isFirefox()&&(n||i.length>1);if(o&&(i=await Promise.all(i.map(async({name:d,url:m})=>{let p=await Er(m);return{name:d,url:`data:${p.type};base64,${Buffer.from(p.body).toString("base64")}`}}))),a||c){await this.driver.executeJSWithArray(`
558
558
  const getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
559
- const downloadAndUploadFile = ${uR()};
560
- return downloadAndUploadFile.apply(null, arguments);`,[e.locatedElement,i]);return}let u=await ry(i,this.uploadFile.bind(this));await this.uploadFilesAndForceVisibility(u,e)}}});var Zi,ea,oy=T(()=>{"use strict";Zi=require("url");ce();ea=class extends W{async updateBaseUrl(e){let t=new Zi.URL(e),r=new Zi.URL(this.context.recordedBaseUrl),n=new Zi.URL(this.context.baseUrl);return t.host===r.host&&r.host!==n.host&&(t.host=n.host),t.href}async performAction(){let e=this.context.data.testimNavigationStepDestination||this.context.data.url;if(this.step.openInNewTab){await this.driver.client.newWindow(e);return}let t=await this.updateBaseUrl(e);await this.driver.url(t)}}});var ta,iy=T(()=>{"use strict";ce();F();ta=class extends W{async performAction(){await ie(this.step.durationMS)}}});var ra,ay=T(()=>{"use strict";ce();ra=class extends W{async execute(){try{return await this.driver.reloadTab(),{success:!0}}catch(e){return{success:!1,reason:e.message}}}}});var $n,cy=T(()=>{"use strict";ce();$n=class extends W{async runApiInAut(e){var n;e.withCredentials=!0;let t=this.context.data.timeToPlayStep+3e3,{apiCall:r}=this.sessionPlayerInit;try{let o=await this.driver.executeCodeAsync(r,t,e);return(o==null?void 0:o.value)||{}}catch(o){throw(n=o==null?void 0:o.message)!=null&&n.includes("Javascript execution context no longer exists")?new Error('The page refreshed or changed while executing this step. Please consider unchecking "Send via web page" if this is expected.'):o}}runApiInBg(e){let{apiCall:t}=this.sessionPlayerInit;return new Promise(r=>{t(e,r)})}async performAction(){let{commonConstants:e}=this.sessionPlayerInit,t=this.step,r=this.context,n={id:t.id,url:r.apiUrl,method:t.method,headers:r.apiHeaders,body:r.apiBody,timeout:r.data.maxTotalStepTime,omitCookies:t.omitCookies,formData:t.formData,fileUrls:r.fileUrls},o;t.sendViaWebApp?o=await this.runApiInAut(n):o=await this.runApiInBg(n);let i=o.result||{},a={method:t.method,status:i.status,url:t.url};return o.success?i.status===0?{result:i,resultInfo:a,shouldRetry:!1,success:!1,reason:"Connection problem",errorType:e.stepResult.API_REQUEST_NETWORK_ERROR}:{result:i,resultInfo:a,shouldRetry:!1,success:!0}:{result:i,resultInfo:a,shouldRetry:!1,success:!1,reason:i.error||e.error.REQUEST_TIMED_OUT,errorType:i.error?e.stepResult.API_FAILURE:e.stepResult.API_REQUEST_NETWORK_ERROR}}}});var sa,ly=T(()=>{"use strict";ce();sa=class extends W{async performAction(){let e=this.step.extractTextParamName,t=await this.stepActionUtils.extractTargetText(this.getTarget());return this.context.data.exports=this.context.data.exports||{},this.context.data.exports[e]=t,{success:!0,data:this.context.data}}}});var na,uy=T(()=>{"use strict";ce();oa();na=class extends W{async performAction(){return await Ns(this.step,this.context,this.driver,this.stepActionUtils.testimServicesApi.authenticationManager.getLoggedUserInfo(),this.frameHandler.frameManager)}}});function or(s){if(qr.has(s,"elementId"))return s.elementId;if(qr.has(s,$t))return s[$t];if(qr.has(s,ia))return s[ia]}var qr,dy,ia,td,rd,sd,py=T(()=>{"use strict";qr=E(require("lodash")),dy=require("@applitools/eyes-sdk-core");Yr();io();Ee();ia="ELEMENT";td=class{isDriver(e){return Boolean((e==null?void 0:e.getPrototype)&&e.desiredCapabilities&&e.requestHandler)}isElement(e){if(!e)return!1;let t=e.value||e;return Boolean(t[$t]||t[ia])}isSelector(e){return typeof e=="string"}transformDriver(e){return new Proxy(e,{get:(t,r)=>{if(r!=="then")return Reflect.get(t,r)}})}transformElement(e){let t=or(e.value||e);return{[$t]:t,[ia]:t}}transformSelector(e){return qr.has(e,"selector")?qr.has(e,"type")?e.type==="css"?`css selector:${e.selector}`:`${e.type}:${e.selector}`:e.selector:e}extractSelector(e){return qr.has(e,"selector")?e.selector:void 0}isStaleElementError(e,t){if(!e)return!1;let r=e.originalError||e;return r instanceof Error?r.seleniumStack&&r.seleniumStack.type==="StaleElementReference":r.value&&r.selector&&r.selector===t}isEqualElements(e,t,r){if(!t||!r)return!1;let n=or(t),o=or(r);return n===o}async executeScript(e,t,r){let{value:n}=await e.execute(t,r);return n}async mainContext(e){return await e.frame(null),e}async parentContext(e){return await e.frameParent(),e}async childContext(e,t){return await e.frame(t),e}async findElement(e,t,r){let{value:n}=r?await e.elementIdElement(or(r),t):await e.element(t);return n}async findElements(e,t,r){let{value:n}=r?await e.elementIdElements(or(r),t):await e.elements(t);return n}async getWindowSize(e){let{value:t}=await e.windowHandleSize();return{width:t.width,height:t.height}}async setWindowSize(e,t){await e.windowHandlePosition({x:0,y:0}),await e.windowHandleSize(t)}async getDriverInfo(e){let t=e.desiredCapabilities;return{sessionId:e.requestHandler.sessionID||e.sessionId,isMobile:e.isMobile,isNative:e.isMobile&&!t.browserName,deviceName:t.deviceName,platformName:t.platformName||t.platform,platformVersion:t.platformVersion,browserName:t.browserName??t.name,browserVersion:t.browserVersion??t.version,pixelRatio:t.pixelRatio}}async getTitle(e){return e.getTitle()}async getUrl(e){return e.getUrl()}async visit(e,t){await e.url(t)}async takeScreenshot(e){return e.saveScreenshot()}async click(e,t){this.isSelector(t)&&(t=await this.findElement(e,t)),await e.elementIdClick(or(t))}async hover(e,t,r){this.isSelector(t)&&(t=await this.findElement(e,t)),await e.moveTo(or(t),r==null?void 0:r.x,r==null?void 0:r.y)}async type(e,t,r){this.isSelector(t)?t=await this.findElement(e,t):e.elementIdValue(or(t),r)}async scrollIntoView(e,t,r=!1){this.isSelector(t)&&(t=await this.findElement(e,t)),await e.execute("arguments[0].scrollIntoView(arguments[1])",t,r)}async waitUntilDisplayed(e,t,r){await e.waitForVisible(t,r)}},rd=class{constructor(){let{EyeSdkBuilder:e}=se(),t=bp["@applitools/eyes-sdk-core"]||"N/A";this.sdk=(0,dy.makeSDK)({name:"Testim.io",version:`4.0.0/eyes-sdk-core/${t}`,spec:new td}),this.handleApplitoolsSdkResult=e.handleApplitoolsSdkResult}async getManager(e,t,r,n){let{EyeSdkBuilder:o}=se(),i=await this.sdk.makeManager({type:e?"vg":"classic",concurrency:t});return o.rememberCreatedBatch(r,n),i}},sd=new rd});var fy,my,Wn,hy=T(()=>{"use strict";fy=E(require("lodash"));ce();j();py();my=x("pixel-validation-step-action"),Wn=class extends W{async performAction(){var d,m;let{shouldUseVisualGrid:e,applitoolsSdkConfig:t,applitoolsSdkLogger:r,testResultId:n}=this.context;this.runContext=this.context.getRunContext(void 0);let o=((d=this.runContext.incomingParams)==null?void 0:d.final)||{},i=((m=t.batch)==null?void 0:m.id)||n,a=await sd.getManager(e,this.context.config.applitoolsConcurrency||5,i,this.runContext.applitoolsIntegrationData),c=this.getTarget()||{},u;try{let p=await a.openEyes({driver:this.driver.client,config:t,logger:r}),h={region:this.step.action==="element"&&c.seleniumElement||void 0,fully:this.step.action==="stitched"};fy.isPlainObject(o.applitoolsStepSettings)&&(Object.assign(h,o.applitoolsStepSettings),my.info("Applitools SDK step executed with applitoolsStepSettings parameter",{applitoolsStepSettings:o.applitoolsStepSettings})),await p.check({settings:h}),u={isApplitoolsSdkResult:!0,success:!0,eyesResults:await p.close()}}catch(p){my.error("Applitools SDK step failed",{err:p,info:p.info}),u={isApplitoolsSdkResult:!0,success:!1,err:p}}return await sd.handleApplitoolsSdkResult(this.context,u,this.step)}}});var Ds,nd=T(()=>{"use strict";F();Br();qi();Ds=class extends nr{async executeCliCode(){var h,g,y;let{step:e,context:t}=this,r=this.stepActionUtils.driver.isMobile;if(!((y=(g=(h=t.company)==null?void 0:h.activePlan)==null?void 0:g.premiumFeatures)==null?void 0:y.cliAction)&&!r)return{success:"skipped",reason:"CLI action is not enabled in your current plan"};let{code:o,id:i}=e,{incomingParams:a,testResultId:c,retryIndex:u,stepResultId:d}=t,m={config:t.config,data:t.data},p=t.data.timeToPlayStep,f=await xs(o,i,a,m,c,u,d,p);return await this.checkCodeResponse(f)}async performAction(){try{return await this.executeCliCode()}catch(e){let{stepResult:t}=this.sessionPlayerInit.commonConstants;return e instanceof X?{success:!1,errorType:t.ACTION_TIMEOUT}:{success:!1,reason:e.message,exception:e}}}}});var ir,gy=T(()=>{"use strict";nd();ir=class extends Ds{isFailedResult(e){return e===!1}}});var aa,yy=T(()=>{"use strict";nd();aa=class extends Ds{isFailedResult(e){return!e}}});var ca,by=T(()=>{"use strict";F();Br();ce();z();ca=class extends W{async performAction(){let{context:e}=this,{stepId:t,packageData:r,resultId:n,retryIndex:o,stepResultId:i,timeToPlayBeforeExec:a}=e;try{return{data:await Is(t,n,o,r,i,a),success:!0}}catch(c){return c instanceof at?{success:!1,code:"invalid-node-package",message:c.message}:c instanceof X?{success:!1,code:"timeout"}:{success:!1,reason:c.message,exception:c}}}}});var Ms,wy=T(()=>{"use strict";ce();Ms=class extends W{async performAction(){return{success:"skipped",reason:"This step can run only on Chrome"}}}});var je,Ty=T(()=>{"use strict";ce();je=class extends W{async performAction(){var r,n;let{sfdc:e}=this.sessionPlayerInit,t=e.sfdcNewSePage(this.driver,this.context.sfdcLogHandler||((o,i)=>this.context.playback.sfdcAddLog(o,i)));t.log.info(`BEGIN STEP '${(n=(r=this.step).getStepPreview)==null?void 0:n.call(r)}'`);try{let o=this.context.sfdcTestActions;if(o===void 0)throw new Error("No test actions were compiled");return{success:!0,reason:await e.sfdcExecute(t,o,this.context)}}catch(o){return{success:!1,reason:o.reason||o.message,exception:o,shouldRetry:!1}}finally{t.releaseObjects()}}}});var la,vy=T(()=>{"use strict";ce();la=class extends W{async performAction(){var r,n;let{sfdc:e}=this.sessionPlayerInit,t=e.sfdcNewSePage(this.driver,this.context.sfdcLogHandler||((o,i)=>this.context.playback.sfdcAddLog(o,i)));t.log.info(`BEGIN STEP '${(n=(r=this.step).getStepPreview)==null?void 0:n.call(r)}'`);try{return{success:!0,reason:await e.sfdcExecuteRecordedStep(t,this.step.recordedData,this.context)}}catch(o){return{success:!1,reason:o.reason||o.message,exception:o,shouldRetry:!1}}finally{t.releaseObjects()}}}});function dR(s,e){Object.keys(s).forEach(t=>{e.registerStepAction(t,s[t])})}function ua(s,e){dR(pR,e),e.registerLocateStepActionUtils&&e.registerLocateStepActionUtils(Fn.getUtils(s))}var pR,od=T(()=>{"use strict";bg();vg();kg();_g();Lg();Mg();jg();Bg();$g();qg();Vg();Hg();Jg();Qg();ny();oy();iy();ay();cy();ly();uy();hy();gy();yy();by();wy();Ty();vy();pR={locate:Fn,scroll:ji,mouse:Bi,submit:zi,text:Wi,"special-key":Vi,"user-code":jt,"validation-code-step":jt,"wait-for-code-step":jt,"action-code-step":jt,"condition-step":Ls,"skip-code-step":Ls,"element-code-step":Ls,"evaluate-expression":$i,"text-validation":Bn,"wait-for-text-validation":Bn,"select-option":Hi,"drop-file":Xi,"input-file":Qi,hover:Ki,navigation:ea,wheel:Ji,sleep:ta,refresh:ra,"api-validation":$n,"api-action":$n,"api-code-step":jt,"extract-text":sa,"simple-ui-verification":Wn,"wait-for-simple-ui-verification":Wn,"cli-validation-download-file":Ms,"cli-wait-for-download-file":Ms,"network-validation-step":Ms,"cli-validation-code-step":ir,"cli-wait-for-code-step":ir,"cli-action-code-step":ir,"cli-api-code-step":ir,"cli-condition-step":aa,"node-package":ca,"email-code-step":jt,"cli-email-code-step":ir,"tdk-hybrid":na,"sfdc-recorded-step":la,"sfdc-step-login":je,"sfdc-step-loginas":je,"sfdc-step-logout":je,"sfdc-step-sobjectcreate":je,"sfdc-step-sobjectdelete":je,"sfdc-step-findrecord":je,"sfdc-step-quickaction":je,"sfdc-step-sobjectedit":je,"sfdc-step-sobjectvalidate":je,"sfdc-step-launchapp":je,"sfdc-step-closeconsoletabs":je,"sfdc-step-relatedlistaction":je}});var id,Gn,ad=T(()=>{"use strict";id=class{on(){}},Gn=new id});var Ey,mR,Sy,fR,Us,cd=T(()=>{"use strict";Ey=E(require("lodash")),mR=1e3,Sy=["simple-ui-verification","wait-for-simple-ui-verification"],fR=[...Sy,"custom-validation","sfdc-recorded-step","sfdc-step-login","sfdc-step-loginas","sfdc-step-logout","sfdc-step-sobjectcreate","sfdc-step-sobjectdelete","sfdc-step-findrecord","sfdc-step-quickaction","sfdc-step-sobjectvalidate","sfdc-step-launchapp","sfdc-step-closeconsoletabs","sfdc-step-sobjectedit","sfdc-step-relatedlistaction"],Us=class{constructor(e){this.resetStepVariables(),this.resetRetryVariables(),this.isDebuggerConnected=e}resetStepVariables(e,t){this.currentRetryTimes=t||[],this.totalStepTime=e||0,this.totalStepTimesReport=[],this.currentRetryTimesReport={};let r=Date.now();this.currentRetryStart=r,this.lastUpdateTime=r}resetRetryVariables(){let e=Date.now();this.currentRetryStart=e,this.lastUpdateTime=e,this.totalStepTimesReport.push(this.currentRetryTimesReport),this.currentRetryTimesReport={}}initStepRun(e){let t=o=>{let i=this.getTotalStepTimeLeftToPlay(e,o),a=5e3;return i<=a?[a]:[Math.max(a,i/3)]};e.setStartTimestamp();let r=this.getTotalStepRunTime(e),n=fR.includes(e.stepType)?[r]:t(r);this.resetStepVariables(r,n),e.context.data.maxTotalStepTime=r}getStepTimes(){return this.totalStepTimesReport.push(this.currentRetryTimesReport),Ey.cloneDeep(this.totalStepTimesReport)}initRetryTime(){this.resetRetryVariables()}getTotalStepRunTime(e){let r=e.context.config.stepTimeout;return Sy.includes(e.stepType)&&(r=e.context.config.applitoolsStepTimeout||18e5),e.step.type.startsWith("sfdc-")&&(r=e.step.defaultTimeout),e.step.useStepTimeout&&e.step.stepTimeout?e.step.stepTimeout:r}getTotalStepTimeLeftToPlay(e,t=this.totalStepTime){let r=Date.now()-e.startTimestamp;return t-r}getCurrentRetryTime(e){return e.retryIndex<this.currentRetryTimes.length?this.currentRetryTimes[e.retryIndex]:this.getTotalStepTimeLeftToPlay(e)}getTotalCurrentRetryTimeLeft(e){let t=Date.now()-this.currentRetryStart;return this.getCurrentRetryTime(e)-t+mR}getTabTimeout(e){return this.getTotalCurrentRetryTimeLeft(e)}getDynamicParentTimeout(e){return this.getTotalCurrentRetryTimeLeft(e)}getFrameTimeout(e){return this.getTotalCurrentRetryTimeLeft(e)}getLocateTimeout(e){return this.getTotalCurrentRetryTimeLeft(e)}calcAndroidScrollTimeout(e){let r=2e3;return e.step.isScrollToElement&&(r=4e3),e.step.events.length*r+5e3}getActionTimeout(e){if(this.isDebuggerConnected)return 6e5;let t=5e3,r=e.step.type,n=3e4,o;return r==="sleep"?o=e.step.durationMS+t:r==="android-scroll"?o=Math.max(this.calcAndroidScrollTimeout(e),n):o=Math.max(this.getTotalStepTimeLeftToPlay(e),n),o}setStepPhaseTime(e){let t=Date.now(),r=t-this.lastUpdateTime;this.lastUpdateTime=t,this.currentRetryTimesReport[e]=r}reportGetTabTime(){this.setStepPhaseTime("tab")}reportGetFrameTime(){this.setStepPhaseTime("frame")}reportCalcConditionTime(){this.setStepPhaseTime("condition")}reportPreLocateActionsTime(){this.setStepPhaseTime("pre-locate")}reportFindElementsTime(){this.setStepPhaseTime("locate")}reportStepActionTime(){this.setStepPhaseTime("action")}}});var ld={};$(ld,{SeleniumTestPlayer:()=>qn});var Ry,qn,da=T(()=>{"use strict";F();Ry=E(Dn());$u();ag();Hu();zu();ug();Ku();Ee();Os();od();ad();cd();qn=class{constructor(e,t,r,n="code",o=new Ry.default,i,a){let{sessionPlayer:c,commonConstants:u,stepActionFactory:d}=se();this.driver=o,this.id=e;let m=new _s(this.driver);this.stepActionFactory=new d(m),ua(this.driver,this.stepActionFactory),this.tabService=this.driver.tabService||new Li(this.driver),this.driver.tabService=this.tabService,this.windowCreationListener=Gn,this.playbackTimeoutCalculator=new Us(Di()),this.tabService.createSesion(e);let p=lg(this.driver);this.sessionPlayer=new c(e,this.tabService,new Ps(this.driver),Gn,p,Ni,null,null,m,this.stepActionFactory,this.playbackTimeoutCalculator,Ke.getSocket(),n),this.sessionPlayer.setShouldMonitorPerformance&&this.sessionPlayer.setShouldMonitorPerformance(r),this.tabService.setAddFrameHandlerCallBack(this.sessionPlayer.addPlaybackFrameHandler.bind(this.sessionPlayer)),this.sessionPlayer.playbackManager.isRemoteSession=!0,this.sessionPlayer.playbackManager.isLocalRun=!1,this.sessionPlayer.playbackManager.testRetryCount=i,this.sessionPlayer.playbackManager.previousTestResultId=a,this.sessionPlayer.playbackManager.userParamsData=t||{},this.onStepCompleted=this.onStepCompleted.bind(this),this.sessionPlayer.playbackManager.on(u.playback.RESULT,this.onStepCompleted)}onStepCompleted(e,t,r,n){n!=null&&n.isTabOpener&&this.tabService.addNewPopup(this.id,n.id).catch(()=>{})}onDone(){let{commonConstants:e}=se(),t=1e3*60*2;return re(this.driver.end(),t).catch(r=>{if(r instanceof X)return this.driver.forceEnd().catch(()=>null)}).then(()=>{this.sessionPlayer.playbackManager.off(e.playback.RESULT,this.onStepCompleted),this.sessionPlayer=null,this.tabService=null,this.stepActionFactory=null,this.driver=null})}clearSessionTabs(){this.tabService.clearAllTabs(this.id)}async addTab(e,t={loadInfo:!0}){let n=(await this.driver.getTabIds()).at(-1);return await this.tabService.addNewTab(this.id,n,e,t),this.sessionPlayer.addPlaybackFrameHandler(n,void 0,{emptyPage:!0})}async addAllTabs(e,t={loadInfo:!0,checkForMainTab:!0,takeScreenshots:!0},r=[]){let n=await this.driver.getTabIds(),o=["app.testim.io"].concat(r);for(let i of n.reverse()){await this.tabService.addNewTab(this.id,i,e,{...t,forceSwitch:!0});let a=this.tabService.getTabInfo(this.id,i);if(o.some(c=>a.url.includes(c))){await this.tabService.removeTabInfo(this.id,i);continue}await this.sessionPlayer.addPlaybackFrameHandler(i,void 0,{emptyPage:!0})}if(this.tabService.tabCount(this.id)===1){let i=this.tabService.getMainTabInfo(this.id),a=this.tabService.getTabUtils(this.id,i);await this.tabService.switchTab(a.tabId,this.id,{forceSwitch:!0})}this.tabService.fixMissingMainTab(this.id)}getSessionId(){return this.driver.getSessionId()}}});var Cy={};$(Cy,{buildCodeTests:()=>ud});async function hR(s,e,t,r,n){try{return await Iy(s,e,t,r,n)}catch(o){if((o==null?void 0:o.code)==="ENOENT")return ar.compiler=null,ar.webpackConfig=null,r&&(r.data={}),await Iy(s,e,t,r,n);throw o}}async function Iy(s,e={mode:"development"},t=void 0,r=void 0,n=void 0){let o=await ge("webpack"),i=cr.cloneDeep(e);e.externals={testim:"__testim"},e.devtool||(e.devtool="inline-source-map"),e.plugins||(e.plugins=[]),e.plugins.push(new o.DefinePlugin(gR(t)),new o.DefinePlugin({"process.argv":JSON.stringify(process.argv)})),s=s.map(h=>pa.resolve(h));let a=s.map(()=>K(30));if(e.optimization={minimize:!1},Number(process.versions.node.split(".")[0])>=17){let h=require("crypto"),g=h.createHash;h.createHash=(y,w)=>g(y==="md4"?"sha256":y,w)}e.entry=Object.fromEntries(cr.zip(s,a).map(([h,g])=>[g,h])),e.output=Object.assign({devtoolModuleFilenameTemplate:h=>`file:///${h.absoluteResourcePath}`,filename:"[name].bundle.js"},e.output);let u;r?(cr.isEqual(ar.webpackConfig,i)&&ar.compiler||(ar.webpackConfig=i,ar.compiler=o(e)),u=ar.compiler):u=o(e);let d=r||new xy.default;u.outputFileSystem=d;let m=ct(h=>{n==null||n.addEventListener("abort",()=>{h(new Me,void 0)})});try{let h=await Promise.race([ct(g=>u.run(g)),m]);if(h!=null&&h.hasErrors())throw new Error(h==null?void 0:h.toJson().errors.toString())}catch(h){let g=h.message.match(/Entry module not found: Error: Can't resolve '(.*)'/);throw g&&g.length===2?e.output&&e.output.library==="tdk"?new R(`Could not open dev-kit functions file in ${g[1]}`):new R(`Can't find test files in: '${g[1]}'`):new R(`Compilation Webpack Error in tests: ${h.message}`)}return{tests:[s.map((h,g)=>({code:d.readFileSync(pa.resolve("./dist",`${a[g]}.bundle.js`)),name:h})).map(({code:h,name:g})=>({code:h.toString(),baseUrl:"",name:pa.resolve(g),testConfig:{},testConfigId:null,testId:K(),resultId:K(),isTestsContainer:!0}))],runName:`Testim Dev Kit Run ${new Date().toLocaleString()}`}}function gR(s){let e=cr.fromPairs(Object.keys(process.env).filter(r=>/^TDK_/i.test(r)||r==="BASE_URL").map(r=>[r,process.env[r]])),t={BASE_URL:s==null?void 0:s.baseUrl};return{"process.env":yR({...t,...e})}}function yR(s){return Object.fromEntries(Object.entries(s).map(([e,t])=>[e,JSON.stringify(t)]))}var cr,pa,xy,ar,ud,dd=T(()=>{"use strict";cr=E(require("lodash")),pa=E(require("path"));F();xy=E(require("memory-fs"));z();ft();ar={compiler:null,webpackConfig:null};ud=hR});var ky={};$(ky,{compileFunctionsLibrary:()=>gd,findTestFolder:()=>Vr,findTests:()=>pd,getLocalLocatorContents:()=>md,getLocalLocators:()=>Vn,saveLocators:()=>hd,saveTest:()=>fd});async function Vn(){let s=await Vr(process.cwd()),e=Je.join(s,"locators","locators.js");function t(n){let o=n.toString().replace("module.exports =","return").replace(/require/g,"(x => /locator.(.*).json/.exec(x)[1])");return new Function(o)()}let r=await rt.promises.readFile(e).then(t,()=>({}));return Object.fromEntries(Object.keys(r).map(n=>[n.replace(/"/g,'\\"'),r[n]]))}async function pd(s=process.cwd()){let e=await Vr(s),t=await rt.promises.readdir(e,{withFileTypes:!0}),r=["webpack.config.js","tsconfig.js",".DS_Store","functions.js"],n=[".html",".json"];return t.filter(o=>!r.includes(o.name)&&!n.some(i=>o.name.endsWith(i))&&o.isFile()&&!o.name.startsWith(".")).map(o=>o.name)}async function bR(s){let e=Object.entries(s),t=e.map(([,n])=>n),r=await Promise.all(t);for(let n=0;n<r.length;n++)e[n][1]=r[n];return Object.fromEntries(e)}async function md(s,e=!1,t=process.cwd()){let r={};if(e){let n=await Vr(t);for(let o of Object.values(s))r[o]=rt.promises.readFile(Je.join(n,"locators",`locator.${o}.json`)).then(JSON.parse)}try{return await bR(r)}catch(n){return console.error(n),{}}}async function fd({body:s,name:e,locators:t,language:r="javascript"}){let n=await Vr(process.cwd()),o=Je.join(n,"locators","locators.js"),i=Je.join(n,e);if(!i.startsWith(n))throw new Error("A test name must be a valid file name and inside the tests directory");if(r==="javascript"?i.endsWith(".js")&&!i.endsWith(".test.js")?i=`${i.substr(0,i.length-3)}.test.js`:i.endsWith(".test.js")||(i+=".test.js"):i.endsWith(".ts")&&!i.endsWith(".test.ts")?i=`${i.substr(0,i.length-3)}.test.ts`:i.endsWith(".test.ts")||(i=`${i}.test.ts`),i.endsWith("locators/locators.js"))throw new Error("Cannot override locators file from the internet as it is evaluated by the runner");await rt.promises.writeFile(i,s),await rt.promises.mkdir(Je.join(n,"locators")).catch(()=>{});for(let{id:u,body:d}of t)await rt.promises.writeFile(Je.join(n,"locators",`locator.${u}.json`),JSON.stringify(d));let a=Object.fromEntries(t.map(({name:u,id:d})=>[u,d])),c=await Vn();Object.assign(c,a),await Ay(o,c)}async function Ay(s,e){let t=`module.exports = {
559
+ const downloadAndUploadFile = ${cR()};
560
+ return downloadAndUploadFile.apply(null, arguments);`,[e.locatedElement,i]);return}let l=await ty(i,this.uploadFile.bind(this));await this.uploadFilesAndForceVisibility(l,e)}}});var ea,ta,ny=T(()=>{"use strict";ea=require("url");ce();ta=class extends W{async updateBaseUrl(e){let t=new ea.URL(e),r=new ea.URL(this.context.recordedBaseUrl),n=new ea.URL(this.context.baseUrl);return t.host===r.host&&r.host!==n.host&&(t.host=n.host),t.href}async performAction(){let e=this.context.data.testimNavigationStepDestination||this.context.data.url;if(this.step.openInNewTab){await this.driver.client.newWindow(e);return}let t=await this.updateBaseUrl(e);await this.driver.url(t)}}});var ra,oy=T(()=>{"use strict";ce();F();ra=class extends W{async performAction(){await ie(this.step.durationMS)}}});var sa,iy=T(()=>{"use strict";ce();sa=class extends W{async execute(){try{return await this.driver.reloadTab(),{success:!0}}catch(e){return{success:!1,reason:e.message}}}}});var Bn,ay=T(()=>{"use strict";ce();Bn=class extends W{async runApiInAut(e){var n;e.withCredentials=!0;let t=this.context.data.timeToPlayStep+3e3,{apiCall:r}=this.sessionPlayerInit;try{let o=await this.driver.executeCodeAsync(r,t,e);return(o==null?void 0:o.value)||{}}catch(o){throw(n=o==null?void 0:o.message)!=null&&n.includes("Javascript execution context no longer exists")?new Error('The page refreshed or changed while executing this step. Please consider unchecking "Send via web page" if this is expected.'):o}}runApiInBg(e){let{apiCall:t}=this.sessionPlayerInit;return new Promise(r=>{t(e,r)})}async performAction(){let{commonConstants:e}=this.sessionPlayerInit,t=this.step,r=this.context,n={id:t.id,url:r.apiUrl,method:t.method,headers:r.apiHeaders,body:r.apiBody,timeout:r.data.maxTotalStepTime,omitCookies:t.omitCookies,formData:t.formData,fileUrls:r.fileUrls},o;t.sendViaWebApp?o=await this.runApiInAut(n):o=await this.runApiInBg(n);let i=o.result||{},a={method:t.method,status:i.status,url:t.url};return o.success?i.status===0?{result:i,resultInfo:a,shouldRetry:!1,success:!1,reason:"Connection problem",errorType:e.stepResult.API_REQUEST_NETWORK_ERROR}:{result:i,resultInfo:a,shouldRetry:!1,success:!0}:{result:i,resultInfo:a,shouldRetry:!1,success:!1,reason:i.error||e.error.REQUEST_TIMED_OUT,errorType:i.error?e.stepResult.API_FAILURE:e.stepResult.API_REQUEST_NETWORK_ERROR}}}});var na,cy=T(()=>{"use strict";ce();na=class extends W{async performAction(){let e=this.step.extractTextParamName,t=await this.stepActionUtils.extractTargetText(this.getTarget());return this.context.data.exports=this.context.data.exports||{},this.context.data.exports[e]=t,{success:!0,data:this.context.data}}}});var oa,ly=T(()=>{"use strict";ce();ia();oa=class extends W{async performAction(){return await Ns(this.step,this.context,this.driver,this.stepActionUtils.testimServicesApi.authenticationManager.getLoggedUserInfo(),this.frameHandler.frameManager)}}});function ir(s){if(qr.has(s,"elementId"))return s.elementId;if(qr.has(s,$t))return s[$t];if(qr.has(s,aa))return s[aa]}var qr,uy,aa,td,rd,sd,dy=T(()=>{"use strict";qr=E(require("lodash")),uy=require("@applitools/eyes-sdk-core");Yr();io();Ee();aa="ELEMENT";td=class{isDriver(e){return Boolean((e==null?void 0:e.getPrototype)&&e.desiredCapabilities&&e.requestHandler)}isElement(e){if(!e)return!1;let t=e.value||e;return Boolean(t[$t]||t[aa])}isSelector(e){return typeof e=="string"}transformDriver(e){return new Proxy(e,{get:(t,r)=>{if(r!=="then")return Reflect.get(t,r)}})}transformElement(e){let t=ir(e.value||e);return{[$t]:t,[aa]:t}}transformSelector(e){return qr.has(e,"selector")?qr.has(e,"type")?e.type==="css"?`css selector:${e.selector}`:`${e.type}:${e.selector}`:e.selector:e}extractSelector(e){return qr.has(e,"selector")?e.selector:void 0}isStaleElementError(e,t){if(!e)return!1;let r=e.originalError||e;return r instanceof Error?r.seleniumStack&&r.seleniumStack.type==="StaleElementReference":r.value&&r.selector&&r.selector===t}isEqualElements(e,t,r){if(!t||!r)return!1;let n=ir(t),o=ir(r);return n===o}async executeScript(e,t,r){let{value:n}=await e.execute(t,r);return n}async mainContext(e){return await e.frame(null),e}async parentContext(e){return await e.frameParent(),e}async childContext(e,t){return await e.frame(t),e}async findElement(e,t,r){let{value:n}=r?await e.elementIdElement(ir(r),t):await e.element(t);return n}async findElements(e,t,r){let{value:n}=r?await e.elementIdElements(ir(r),t):await e.elements(t);return n}async getWindowSize(e){let{value:t}=await e.windowHandleSize();return{width:t.width,height:t.height}}async setWindowSize(e,t){await e.windowHandlePosition({x:0,y:0}),await e.windowHandleSize(t)}async getDriverInfo(e){let t=e.desiredCapabilities;return{sessionId:e.requestHandler.sessionID||e.sessionId,isMobile:e.isMobile,isNative:e.isMobile&&!t.browserName,deviceName:t.deviceName,platformName:t.platformName||t.platform,platformVersion:t.platformVersion,browserName:t.browserName??t.name,browserVersion:t.browserVersion??t.version,pixelRatio:t.pixelRatio}}async getTitle(e){return e.getTitle()}async getUrl(e){return e.getUrl()}async visit(e,t){await e.url(t)}async takeScreenshot(e){return e.saveScreenshot()}async click(e,t){this.isSelector(t)&&(t=await this.findElement(e,t)),await e.elementIdClick(ir(t))}async hover(e,t,r){this.isSelector(t)&&(t=await this.findElement(e,t)),await e.moveTo(ir(t),r==null?void 0:r.x,r==null?void 0:r.y)}async type(e,t,r){this.isSelector(t)?t=await this.findElement(e,t):e.elementIdValue(ir(t),r)}async scrollIntoView(e,t,r=!1){this.isSelector(t)&&(t=await this.findElement(e,t)),await e.execute("arguments[0].scrollIntoView(arguments[1])",t,r)}async waitUntilDisplayed(e,t,r){await e.waitForVisible(t,r)}},rd=class{constructor(){let{EyeSdkBuilder:e}=se(),t=bp["@applitools/eyes-sdk-core"]||"N/A";this.sdk=(0,uy.makeSDK)({name:"Testim.io",version:`4.0.0/eyes-sdk-core/${t}`,spec:new td}),this.handleApplitoolsSdkResult=e.handleApplitoolsSdkResult}async getManager(e,t,r,n){let{EyeSdkBuilder:o}=se(),i=await this.sdk.makeManager({type:e?"vg":"classic",concurrency:t});return o.rememberCreatedBatch(r,n),i}},sd=new rd});var my,py,$n,fy=T(()=>{"use strict";my=E(require("lodash"));ce();j();dy();py=x("pixel-validation-step-action"),$n=class extends W{async performAction(){var d,m;let{shouldUseVisualGrid:e,applitoolsSdkConfig:t,applitoolsSdkLogger:r,testResultId:n}=this.context;this.runContext=this.context.getRunContext(void 0);let o=((d=this.runContext.incomingParams)==null?void 0:d.final)||{},i=((m=t.batch)==null?void 0:m.id)||n,a=await sd.getManager(e,this.context.config.applitoolsConcurrency||5,i,this.runContext.applitoolsIntegrationData),c=this.getTarget()||{},l;try{let p=await a.openEyes({driver:this.driver.client,config:t,logger:r}),h={region:this.step.action==="element"&&c.seleniumElement||void 0,fully:this.step.action==="stitched"};my.isPlainObject(o.applitoolsStepSettings)&&(Object.assign(h,o.applitoolsStepSettings),py.info("Applitools SDK step executed with applitoolsStepSettings parameter",{applitoolsStepSettings:o.applitoolsStepSettings})),await p.check({settings:h}),l={isApplitoolsSdkResult:!0,success:!0,eyesResults:await p.close()}}catch(p){py.error("Applitools SDK step failed",{err:p,info:p.info}),l={isApplitoolsSdkResult:!0,success:!1,err:p}}return await sd.handleApplitoolsSdkResult(this.context,l,this.step)}}});var Ds,nd=T(()=>{"use strict";F();$r();Vi();Ds=class extends or{async executeCliCode(){var h,g,y;let{step:e,context:t}=this,r=this.stepActionUtils.driver.isMobile;if(!((y=(g=(h=t.company)==null?void 0:h.activePlan)==null?void 0:g.premiumFeatures)==null?void 0:y.cliAction)&&!r)return{success:"skipped",reason:"CLI action is not enabled in your current plan"};let{code:o,id:i}=e,{incomingParams:a,testResultId:c,retryIndex:l,stepResultId:d}=t,m={config:t.config,data:t.data},p=t.data.timeToPlayStep,f=await xs(o,i,a,m,c,l,d,p);return await this.checkCodeResponse(f)}async performAction(){try{return await this.executeCliCode()}catch(e){let{stepResult:t}=this.sessionPlayerInit.commonConstants;return e instanceof X?{success:!1,errorType:t.ACTION_TIMEOUT}:{success:!1,reason:e.message,exception:e}}}}});var ar,hy=T(()=>{"use strict";nd();ar=class extends Ds{isFailedResult(e){return e===!1}}});var ca,gy=T(()=>{"use strict";nd();ca=class extends Ds{isFailedResult(e){return!e}}});var la,yy=T(()=>{"use strict";F();$r();ce();z();la=class extends W{async performAction(){let{context:e}=this,{stepId:t,packageData:r,resultId:n,retryIndex:o,stepResultId:i,timeToPlayBeforeExec:a}=e;try{return{data:await Is(t,n,o,r,i,a),success:!0}}catch(c){return c instanceof at?{success:!1,code:"invalid-node-package",message:c.message}:c instanceof X?{success:!1,code:"timeout"}:{success:!1,reason:c.message,exception:c}}}}});var Ms,by=T(()=>{"use strict";ce();Ms=class extends W{async performAction(){return{success:"skipped",reason:"This step can run only on Chrome"}}}});var je,wy=T(()=>{"use strict";ce();je=class extends W{async performAction(){var r,n;let{sfdc:e}=this.sessionPlayerInit,t=e.sfdcNewSePage(this.driver,this.context.sfdcLogHandler||((o,i)=>this.context.playback.sfdcAddLog(o,i)));t.log.info(`BEGIN STEP '${(n=(r=this.step).getStepPreview)==null?void 0:n.call(r)}'`);try{let o=this.context.sfdcTestActions;if(o===void 0)throw new Error("No test actions were compiled");return{success:!0,reason:await e.sfdcExecute(t,o,this.context)}}catch(o){return{success:!1,reason:o.reason||o.message,exception:o,shouldRetry:!1}}finally{t.releaseObjects()}}}});var ua,Ty=T(()=>{"use strict";ce();ua=class extends W{async performAction(){var r,n;let{sfdc:e}=this.sessionPlayerInit,t=e.sfdcNewSePage(this.driver,this.context.sfdcLogHandler||((o,i)=>this.context.playback.sfdcAddLog(o,i)));t.log.info(`BEGIN STEP '${(n=(r=this.step).getStepPreview)==null?void 0:n.call(r)}'`);try{return{success:!0,reason:await e.sfdcExecuteRecordedStep(t,this.step.recordedData,this.context)}}catch(o){return{success:!1,reason:o.reason||o.message,exception:o,shouldRetry:!1}}finally{t.releaseObjects()}}}});function lR(s,e){Object.keys(s).forEach(t=>{e.registerStepAction(t,s[t])})}function da(s,e){lR(uR,e),e.registerLocateStepActionUtils&&e.registerLocateStepActionUtils(Un.getUtils(s))}var uR,od=T(()=>{"use strict";yg();Tg();Ag();kg();Og();Dg();Fg();jg();Bg();Gg();qg();Vg();Kg();Yg();sy();ny();oy();iy();ay();cy();ly();fy();hy();gy();yy();by();wy();Ty();uR={locate:Un,scroll:Bi,mouse:$i,submit:Ki,text:Gi,"special-key":Hi,"user-code":jt,"validation-code-step":jt,"wait-for-code-step":jt,"action-code-step":jt,"condition-step":Ls,"skip-code-step":Ls,"element-code-step":Ls,"evaluate-expression":Wi,"text-validation":jn,"wait-for-text-validation":jn,"select-option":zi,"drop-file":Yi,"input-file":Zi,hover:Ji,navigation:ta,wheel:Xi,sleep:ra,refresh:sa,"api-validation":Bn,"api-action":Bn,"api-code-step":jt,"extract-text":na,"simple-ui-verification":$n,"wait-for-simple-ui-verification":$n,"cli-validation-download-file":Ms,"cli-wait-for-download-file":Ms,"network-validation-step":Ms,"cli-validation-code-step":ar,"cli-wait-for-code-step":ar,"cli-action-code-step":ar,"cli-api-code-step":ar,"cli-condition-step":ca,"node-package":la,"email-code-step":jt,"cli-email-code-step":ar,"tdk-hybrid":oa,"sfdc-recorded-step":ua,"sfdc-step-login":je,"sfdc-step-loginas":je,"sfdc-step-logout":je,"sfdc-step-sobjectcreate":je,"sfdc-step-sobjectdelete":je,"sfdc-step-findrecord":je,"sfdc-step-quickaction":je,"sfdc-step-sobjectedit":je,"sfdc-step-sobjectvalidate":je,"sfdc-step-launchapp":je,"sfdc-step-closeconsoletabs":je,"sfdc-step-relatedlistaction":je}});var id,Wn,ad=T(()=>{"use strict";id=class{on(){}},Wn=new id});var vy,dR,Ey,pR,Us,cd=T(()=>{"use strict";vy=E(require("lodash")),dR=1e3,Ey=["simple-ui-verification","wait-for-simple-ui-verification"],pR=[...Ey,"custom-validation","sfdc-recorded-step","sfdc-step-login","sfdc-step-loginas","sfdc-step-logout","sfdc-step-sobjectcreate","sfdc-step-sobjectdelete","sfdc-step-findrecord","sfdc-step-quickaction","sfdc-step-sobjectvalidate","sfdc-step-launchapp","sfdc-step-closeconsoletabs","sfdc-step-sobjectedit","sfdc-step-relatedlistaction"],Us=class{constructor(e){this.resetStepVariables(),this.resetRetryVariables(),this.isDebuggerConnected=e}resetStepVariables(e,t){this.currentRetryTimes=t||[],this.totalStepTime=e||0,this.totalStepTimesReport=[],this.currentRetryTimesReport={};let r=Date.now();this.currentRetryStart=r,this.lastUpdateTime=r}resetRetryVariables(){let e=Date.now();this.currentRetryStart=e,this.lastUpdateTime=e,this.totalStepTimesReport.push(this.currentRetryTimesReport),this.currentRetryTimesReport={}}initStepRun(e){let t=o=>{let i=this.getTotalStepTimeLeftToPlay(e,o),a=5e3;return i<=a?[a]:[Math.max(a,i/3)]};e.setStartTimestamp();let r=this.getTotalStepRunTime(e),n=pR.includes(e.stepType)?[r]:t(r);this.resetStepVariables(r,n),e.context.data.maxTotalStepTime=r}getStepTimes(){return this.totalStepTimesReport.push(this.currentRetryTimesReport),vy.cloneDeep(this.totalStepTimesReport)}initRetryTime(){this.resetRetryVariables()}getTotalStepRunTime(e){let r=e.context.config.stepTimeout;return Ey.includes(e.stepType)&&(r=e.context.config.applitoolsStepTimeout||18e5),e.step.type.startsWith("sfdc-")&&(r=e.step.defaultTimeout),e.step.useStepTimeout&&e.step.stepTimeout?e.step.stepTimeout:r}getTotalStepTimeLeftToPlay(e,t=this.totalStepTime){let r=Date.now()-e.startTimestamp;return t-r}getCurrentRetryTime(e){return e.retryIndex<this.currentRetryTimes.length?this.currentRetryTimes[e.retryIndex]:this.getTotalStepTimeLeftToPlay(e)}getTotalCurrentRetryTimeLeft(e){let t=Date.now()-this.currentRetryStart;return this.getCurrentRetryTime(e)-t+dR}getTabTimeout(e){return this.getTotalCurrentRetryTimeLeft(e)}getDynamicParentTimeout(e){return this.getTotalCurrentRetryTimeLeft(e)}getFrameTimeout(e){return this.getTotalCurrentRetryTimeLeft(e)}getLocateTimeout(e){return this.getTotalCurrentRetryTimeLeft(e)}calcAndroidScrollTimeout(e){let r=2e3;return e.step.isScrollToElement&&(r=4e3),e.step.events.length*r+5e3}getActionTimeout(e){if(this.isDebuggerConnected)return 6e5;let t=5e3,r=e.step.type,n=3e4,o;return r==="sleep"?o=e.step.durationMS+t:r==="android-scroll"?o=Math.max(this.calcAndroidScrollTimeout(e),n):o=Math.max(this.getTotalStepTimeLeftToPlay(e),n),o}setStepPhaseTime(e){let t=Date.now(),r=t-this.lastUpdateTime;this.lastUpdateTime=t,this.currentRetryTimesReport[e]=r}reportGetTabTime(){this.setStepPhaseTime("tab")}reportGetFrameTime(){this.setStepPhaseTime("frame")}reportCalcConditionTime(){this.setStepPhaseTime("condition")}reportPreLocateActionsTime(){this.setStepPhaseTime("pre-locate")}reportFindElementsTime(){this.setStepPhaseTime("locate")}reportStepActionTime(){this.setStepPhaseTime("action")}}});var ld={};$(ld,{SeleniumTestPlayer:()=>Gn});var Sy,Gn,pa=T(()=>{"use strict";F();Sy=E(Nn());$u();ag();Hu();zu();ug();Ku();Ee();Os();od();ad();cd();Gn=class{constructor(e,t,r,n="code",o=new Sy.default,i,a){let{sessionPlayer:c,commonConstants:l,stepActionFactory:d}=se();this.driver=o,this.id=e;let m=new _s(this.driver);this.stepActionFactory=new d(m),da(this.driver,this.stepActionFactory),this.tabService=this.driver.tabService||new Ni(this.driver),this.driver.tabService=this.tabService,this.windowCreationListener=Wn,this.playbackTimeoutCalculator=new Us(Mi()),this.tabService.createSesion(e);let p=lg(this.driver);this.sessionPlayer=new c(e,this.tabService,new Cs(this.driver),Wn,p,Di,null,null,m,this.stepActionFactory,this.playbackTimeoutCalculator,Ke.getSocket(),n),this.sessionPlayer.setShouldMonitorPerformance&&this.sessionPlayer.setShouldMonitorPerformance(r),this.tabService.setAddFrameHandlerCallBack(this.sessionPlayer.addPlaybackFrameHandler.bind(this.sessionPlayer)),this.sessionPlayer.playbackManager.isRemoteSession=!0,this.sessionPlayer.playbackManager.isLocalRun=!1,this.sessionPlayer.playbackManager.testRetryCount=i,this.sessionPlayer.playbackManager.previousTestResultId=a,this.sessionPlayer.playbackManager.userParamsData=t||{},this.onStepCompleted=this.onStepCompleted.bind(this),this.sessionPlayer.playbackManager.on(l.playback.RESULT,this.onStepCompleted)}onStepCompleted(e,t,r,n){n!=null&&n.isTabOpener&&this.tabService.addNewPopup(this.id,n.id).catch(()=>{})}onDone(){let{commonConstants:e}=se(),t=1e3*60*2;return re(this.driver.end(),t).catch(r=>{if(r instanceof X)return this.driver.forceEnd().catch(()=>null)}).then(()=>{this.sessionPlayer.playbackManager.off(e.playback.RESULT,this.onStepCompleted),this.sessionPlayer=null,this.tabService=null,this.stepActionFactory=null,this.driver=null})}clearSessionTabs(){this.tabService.clearAllTabs(this.id)}async addTab(e,t={loadInfo:!0}){let n=(await this.driver.getTabIds()).at(-1);return await this.tabService.addNewTab(this.id,n,e,t),this.sessionPlayer.addPlaybackFrameHandler(n,void 0,{emptyPage:!0})}async addAllTabs(e,t={loadInfo:!0,checkForMainTab:!0,takeScreenshots:!0},r=[]){let n=await this.driver.getTabIds(),o=["app.testim.io"].concat(r);for(let i of n.reverse()){await this.tabService.addNewTab(this.id,i,e,{...t,forceSwitch:!0});let a=this.tabService.getTabInfo(this.id,i);if(o.some(c=>a.url.includes(c))){await this.tabService.removeTabInfo(this.id,i);continue}await this.sessionPlayer.addPlaybackFrameHandler(i,void 0,{emptyPage:!0})}if(this.tabService.tabCount(this.id)===1){let i=this.tabService.getMainTabInfo(this.id),a=this.tabService.getTabUtils(this.id,i);await this.tabService.switchTab(a.tabId,this.id,{forceSwitch:!0})}this.tabService.fixMissingMainTab(this.id)}getSessionId(){return this.driver.getSessionId()}}});var xy={};$(xy,{buildCodeTests:()=>ud});async function mR(s,e,t,r,n){try{return await Ry(s,e,t,r,n)}catch(o){if((o==null?void 0:o.code)==="ENOENT")return cr.compiler=null,cr.webpackConfig=null,r&&(r.data={}),await Ry(s,e,t,r,n);throw o}}async function Ry(s,e={mode:"development"},t=void 0,r=void 0,n=void 0){let o=await ge("webpack"),i=lr.cloneDeep(e);e.externals={testim:"__testim"},e.devtool||(e.devtool="inline-source-map"),e.plugins||(e.plugins=[]),e.plugins.push(new o.DefinePlugin(fR(t)),new o.DefinePlugin({"process.argv":JSON.stringify(process.argv)})),s=s.map(h=>ma.resolve(h));let a=s.map(()=>K(30));if(e.optimization={minimize:!1},Number(process.versions.node.split(".")[0])>=17){let h=require("crypto"),g=h.createHash;h.createHash=(y,w)=>g(y==="md4"?"sha256":y,w)}e.entry=Object.fromEntries(lr.zip(s,a).map(([h,g])=>[g,h])),e.output=Object.assign({devtoolModuleFilenameTemplate:h=>`file:///${h.absoluteResourcePath}`,filename:"[name].bundle.js"},e.output);let l;r?(lr.isEqual(cr.webpackConfig,i)&&cr.compiler||(cr.webpackConfig=i,cr.compiler=o(e)),l=cr.compiler):l=o(e);let d=r||new Iy.default;l.outputFileSystem=d;let m=ct(h=>{n==null||n.addEventListener("abort",()=>{h(new Me,void 0)})});try{let h=await Promise.race([ct(g=>l.run(g)),m]);if(h!=null&&h.hasErrors())throw new Error(h==null?void 0:h.toJson().errors.toString())}catch(h){let g=h.message.match(/Entry module not found: Error: Can't resolve '(.*)'/);throw g&&g.length===2?e.output&&e.output.library==="tdk"?new R(`Could not open dev-kit functions file in ${g[1]}`):new R(`Can't find test files in: '${g[1]}'`):new R(`Compilation Webpack Error in tests: ${h.message}`)}return{tests:[s.map((h,g)=>({code:d.readFileSync(ma.resolve("./dist",`${a[g]}.bundle.js`)),name:h})).map(({code:h,name:g})=>({code:h.toString(),baseUrl:"",name:ma.resolve(g),testConfig:{},testConfigId:null,testId:K(),resultId:K(),isTestsContainer:!0}))],runName:`Testim Dev Kit Run ${new Date().toLocaleString()}`}}function fR(s){let e=lr.fromPairs(Object.keys(process.env).filter(r=>/^TDK_/i.test(r)||r==="BASE_URL").map(r=>[r,process.env[r]])),t={BASE_URL:s==null?void 0:s.baseUrl};return{"process.env":hR({...t,...e})}}function hR(s){return Object.fromEntries(Object.entries(s).map(([e,t])=>[e,JSON.stringify(t)]))}var lr,ma,Iy,cr,ud,dd=T(()=>{"use strict";lr=E(require("lodash")),ma=E(require("path"));F();Iy=E(require("memory-fs"));z();ft();cr={compiler:null,webpackConfig:null};ud=mR});var Ay={};$(Ay,{compileFunctionsLibrary:()=>gd,findTestFolder:()=>Vr,findTests:()=>pd,getLocalLocatorContents:()=>md,getLocalLocators:()=>qn,saveLocators:()=>hd,saveTest:()=>fd});async function qn(){let s=await Vr(process.cwd()),e=Je.join(s,"locators","locators.js");function t(n){let o=n.toString().replace("module.exports =","return").replace(/require/g,"(x => /locator.(.*).json/.exec(x)[1])");return new Function(o)()}let r=await rt.promises.readFile(e).then(t,()=>({}));return Object.fromEntries(Object.keys(r).map(n=>[n.replace(/"/g,'\\"'),r[n]]))}async function pd(s=process.cwd()){let e=await Vr(s),t=await rt.promises.readdir(e,{withFileTypes:!0}),r=["webpack.config.js","tsconfig.js",".DS_Store","functions.js"],n=[".html",".json"];return t.filter(o=>!r.includes(o.name)&&!n.some(i=>o.name.endsWith(i))&&o.isFile()&&!o.name.startsWith(".")).map(o=>o.name)}async function gR(s){let e=Object.entries(s),t=e.map(([,n])=>n),r=await Promise.all(t);for(let n=0;n<r.length;n++)e[n][1]=r[n];return Object.fromEntries(e)}async function md(s,e=!1,t=process.cwd()){let r={};if(e){let n=await Vr(t);for(let o of Object.values(s))r[o]=rt.promises.readFile(Je.join(n,"locators",`locator.${o}.json`)).then(JSON.parse)}try{return await gR(r)}catch(n){return console.error(n),{}}}async function fd({body:s,name:e,locators:t,language:r="javascript"}){let n=await Vr(process.cwd()),o=Je.join(n,"locators","locators.js"),i=Je.join(n,e);if(!i.startsWith(n))throw new Error("A test name must be a valid file name and inside the tests directory");if(r==="javascript"?i.endsWith(".js")&&!i.endsWith(".test.js")?i=`${i.substr(0,i.length-3)}.test.js`:i.endsWith(".test.js")||(i+=".test.js"):i.endsWith(".ts")&&!i.endsWith(".test.ts")?i=`${i.substr(0,i.length-3)}.test.ts`:i.endsWith(".test.ts")||(i=`${i}.test.ts`),i.endsWith("locators/locators.js"))throw new Error("Cannot override locators file from the internet as it is evaluated by the runner");await rt.promises.writeFile(i,s),await rt.promises.mkdir(Je.join(n,"locators")).catch(()=>{});for(let{id:l,body:d}of t)await rt.promises.writeFile(Je.join(n,"locators",`locator.${l}.json`),JSON.stringify(d));let a=Object.fromEntries(t.map(({name:l,id:d})=>[l,d])),c=await qn();Object.assign(c,a),await Cy(o,c)}async function Cy(s,e){let t=`module.exports = {
561
561
  `;for(let[r,n]of Object.entries(e))t+=` "${r}": require('./locator.${n}.json'),
562
- `;t+="};",await rt.promises.writeFile(s,t)}async function hd(s,{mergeIntoExisting:e}={mergeIntoExisting:!1}){let t=await Vr(process.cwd()),r=Je.join(t,"locators","locators.js");await rt.promises.mkdir(Je.join(t,"locators")).catch(()=>{});for(let{name:o,id:i,elementLocator:a}of s)await rt.promises.writeFile(Je.join(t,"locators",`locator.${i}.json`),JSON.stringify({name:o,id:i,elementLocator:a}));let n=Object.fromEntries(s.map(({name:o,id:i})=>[o,i]));if(e){let o=await Vn();Object.assign(n,o)}await Ay(r,n)}async function gd({fileSystem:s,bypassWebpack:e}={},t=void 0){let r=await Vr(process.cwd());if(t!=null&&t.aborted)throw new Me;let n=Je.join(r,"functions.js");if(e!=null&&e.testim){let i=require("module"),a=i.prototype.require;i.prototype.require=function(u){return u==="testim"?e.testim:a.apply(this,arguments)};try{return delete require.cache[require.resolve(n)],require(n)}finally{i.prototype.require=a}}return(await ud([n],{output:{libraryTarget:"umd",library:"tdk",globalObject:"globalThis"},cache:{type:"memory"},mode:"development"},{},s,t)).tests[0][0].code}var Py,Je,rt,Vr,yd=T(()=>{"use strict";Py=E(require("lodash")),Je=E(require("path")),rt=require("fs");z();dd();Vr=Py.memoize(async s=>(await rt.promises.readdir(s)).includes("tests")&&(await rt.promises.stat(Je.join(s,"tests"))).isDirectory()?Je.join(s,"tests"):s)});var _y={};$(_y,{getArgumentsFromContext:()=>Hr});async function Hr(s,e,t){let r=wR(s.parameterNames.map(n=>n.displayName),e.incomingParams.as);return await Promise.all(r.map(n=>typeof n=="object"&&n.locatedElement?t(n):n))}function wR(s,e){let t=[];for(let r of s){let n=e.functionParameters.indexOf(r);t.push(e.functionArguments[n])}return t}var Hn=T(()=>{"use strict"});var Ly={};$(Ly,{execute:()=>ER});async function SR(s,e,t,r,n,o){var a;let i;try{let{WebDriver:c}=await TR("selenium-webdriver");if(o.aborted)throw new Oy;let{Executor:u,HttpClient:d}=require("selenium-webdriver/http"),m=s.driver.client.requestHandler.defaultOptions,p=s.driver.client.requestHandler.startPath,h=`${m.protocol}://${m.hostname}:${m.port}`+p,g=new d(h),y=new c(s.getSessionId(),new u(g));await RR(y,s.driver);let P=await vR(t,r,v=>y.findElement({css:v.selector})),b=e.bind(null,y,...P);return i=function(){g.send=async function(){throw new Oy}},o.addEventListener("abort",i),await b(),{success:!0}}catch(c){return o.aborted?{success:!1,shouldRetry:!1,reason:"aborted"}:{success:!1,shouldRetry:!1,reason:(c==null?void 0:c.message)||c,extraInfo:(a=c==null?void 0:c.constructor)==null?void 0:a.name}}finally{i&&o.removeEventListener("abort",i)}}async function RR(s,e){if(e.cdpUrl){let t=await s.getAllWindowHandles();for(let r of t)if(await s.switchTo().window(r),await s.executeScript("return window.__isMainTestimTab"))break}}var Oy,TR,vR,ER,Ny=T(()=>{"use strict";({AbortError:Oy}=(z(),G(lc))),{lazyRequire:TR}=(ft(),G($l)),{getArgumentsFromContext:vR}=(Hn(),G(_y)),ER=SR});var Dy={};$(Dy,{execute:()=>IR});async function xR(s,e,t,r,n,o){var a;let i;try{let c=await ge("puppeteer");if(o.aborted)throw new Me;let u=await c.connect({browserWSEndpoint:s.driver.cdpUrl,defaultViewport:null,product:"chrome"});if(o.aborted)throw u.disconnect(),new Me;i=function(){u.disconnect()},o.addEventListener("abort",i);let d=await u.pages(),m;for(let y of d)if(await y.evaluate(()=>window.__isMainTestimTab)){m=y;break}let p=m||d.at(-1),h=await Hr(t,r,y=>p.$(y.selector));return await e.bind(null,p,...h)(),{success:!0}}catch(c){return o.aborted?{success:!1,shouldRetry:!1,reason:"aborted"}:{success:!1,shouldRetry:!1,reason:(c==null?void 0:c.message)||c,extraInfo:(a=c==null?void 0:c.constructor)==null?void 0:a.name}}finally{o.removeEventListener("abort",i)}}var IR,My=T(()=>{"use strict";z();ft();Hn();IR=xR});var Uy={};$(Uy,{execute:()=>CR});async function PR(s,e,t,r,n,o){var a;let i;try{let c=await ge("playwright");if(o.aborted)throw new Me;let u=await c.chromium.connect({wsEndpoint:s.driver.cdpUrl});if(o.aborted)throw u.disconnect(),new Me;i=function(){u.disconnect()},o.addEventListener("abort",i);let p=(await(await u.newContext({viewport:null})).pages()).at(-1),h=await Hr(t,r,y=>p.$(y.selector));return await e.bind(null,p,...h)(),{success:!0}}catch(c){return o.aborted?{success:!1,shouldRetry:!1,reason:"aborted"}:{success:!1,reason:(c==null?void 0:c.message)||c,extraInfo:(a=c==null?void 0:c.constructor)==null?void 0:a.name}}finally{i&&o.removeEventListener("abort",i)}}var CR,Fy=T(()=>{"use strict";z();ft();Hn();CR=PR});var By={};$(By,{execute:()=>AR});async function kR(s,e,t,r,n,o,i,a){function c(){s.sessionPlayer.stopPlaying()}a.addEventListener("abort",c);function u(C){if(o.parameterValues){let L=o.parameterValues.find(B=>B.type==="locate"&&B.id===C.locatorId);return{elementLocator:L.elementLocator,id:L.id,name:"Hybrid Step Locator"}}return C.locatedElement.shadowPath?C.locatedElement.shadowPath[0]:C}let d=await Hr(o,t,u),m=e.bind(null,...d),p=K(),f=K(),h=t.testResultId,g=t.config.baseUrl,y=jy.cloneDeep(t);y.loginData=r;let P=se().manifestVersion||"runner",b=!1,v=null,I="master",k=`Execute TDK Function '${o.functionName}'`,D=!0,S={fn:m,bypassSetup:!0,isBeforeOrAfterTest:!0,name:k,sourceCode:m.toString(),sourceName:m.name,testId:p,resultId:K()},_=typeof e.results=="boolean"&&!e.results;try{N("tdkHybridStepPlayback before addAllTabs"),n?(s.sessionPlayer.playbackAutUtils.frameManager=n,s.sessionPlayer.frameManager=n):await s.addAllTabs(null,{loadInfo:!0,checkForMainTab:!0,takeScreenshots:!_},[s.driver.initialUrl]),s.sessionPlayer.playbackManager.dontAssociateChildResult=!0,s.sessionPlayer.playbackManager.onlyLocalReporting=_,N("tdkHybridStepPlayback before playTestByCode");let C=await new Promise((L,B)=>{i==="agent"&&_R(s,L);function V(){B(new Me),a.removeEventListener("abort",V)}a.addEventListener("abort",V),s.sessionPlayer.playTestByCode(p,f,h,g,y,P,L,b,v,I,[S],k,D).catch(B)});return N("tdkHybridStepPlayback after playTestByCode"),{success:C.success,shouldRetry:!1,resultInfo:{testId:p,executionId:f,resultId:S.resultId}}}catch(C){return{success:!1,error:C,shouldRetry:!1}}finally{a.removeEventListener("abort",c)}}function _R(s,e){let{commonConstants:t}=se();s.sessionPlayer.playbackManager.on(t.playback.START,({testResult:r})=>{let n=r.runnerStatus;Object.defineProperty(r,"runnerStatus",{get(){return n},set(o){n=o,o==="FINISHED"&&e(r)}})})}var jy,AR,$y=T(()=>{"use strict";jy=E(require("lodash"));Le();F();z();Hn();Ee();AR=kR});var ma={};$(ma,{abort:()=>Td,execute:()=>Ns,run:()=>NR});async function Ns(s,e,t,r,n,o="cli"){let i=new Gy.AbortController,{signal:a}=i;wd.set(e.stepResultId,i);try{N("before seleniumTestPlayer require");let{SeleniumTestPlayer:c}=(da(),G(ld)),{compileFunctionsLibrary:u}=(yd(),G(ky)),{functionName:d}=s,m={},p=!1,f=new c(e.id,m,p,Ot.CODEFUL,t);bd=f.sessionPlayer.codeSessionPlayer.proxy;let h=s.bypassWebpack?{testim:bd.wrappedSteps()}:!1;N("before compileFunctionsLibrary",{bypassWebpack:Boolean(s.bypassWebpack)});let g;try{g=await u({fileSystem:OR,bypassWebpack:h},a)}catch(w){return{success:!1,shouldRetry:!1,reason:`Unable to compile functions library. ${w.message}`,extraInfo:w.stack}}typeof globalThis>"u"&&(global.globalThis=process);let y;if(h?y=g[d]:(global.globalThis.__testim=bd.wrappedSteps(),(0,eval)(g),y=globalThis.tdk[d]),N("after hybridFunction obtain and eval"),!y)return{success:!1,shouldRetry:!1,reason:`Could not find function '${d}' locally. Please make sure you have a functions.js file with a '${d}' function defined`,extraInfo:Object.keys(globalThis.tdk)};if(y.type==="selenium"){let w=(Ny(),G(Ly)).execute;return await w(f,y,s,e,o,a)}if(y.type==="puppeteer"){if(!f.driver.cdpUrl)return{success:!1,shouldRetry:!1,reason:"running puppeteer code requires the remote debugging protocol to be open. Please contact Testim support."};N("before puppeteerPlayback");let w=(My(),G(Dy)).execute;try{return await w(f,y,s,e,o,a)}finally{N("after puppeteerPlayback")}}if(y.type==="playwright"){if(!f.driver.cdpUrl)return{success:!1,shouldRetry:!1,reason:"running playwright code requires the remote debugging protocol to be open. Please contact Testim support."};let w=(Fy(),G(Uy)).execute;return await w(f,y,s,e,o,a)}if(y.type==="tdk"||!y.type){let w=($y(),G(By)).execute;N("before tdkPlayback");try{return await w(f,y,e,r,n,s,o,a)}finally{N("after tdkPlayback")}}return{success:!1,shouldRetry:!1,reason:`unknown hybrid format ${y.type}`}}catch(c){LR.info("error running hybrid step",{err:c});return}finally{wd.delete(e.stepResultId)}}function Td(s){let e=wd.get(s);if(e)e.abort();else throw new Error("No such stepResultId")}var Wy,Gy,OR,LR,wd,bd,NR,oa=T(()=>{"use strict";Wy=E(require("memory-fs"));Le();Gy=require("abort-controller");j();ae();OR=new Wy.default,LR=x("hybrid-step-playback"),wd=new Map,NR=(s,e,t,r)=>{let{step:n,context:o}=e.data;return Ns(n,o,s,r.loginData)}});var vd={};$(vd,{run:()=>DR});var DR,qy=T(()=>{"use strict";F();Br();z();DR=async(s,e)=>{let{stepId:t,testResultId:r,retryIndex:n,stepResultId:o,packageData:i,timeout:a}=e.data;try{return{data:await Is(t,r,n,i,o,a),success:!0}}catch(c){if(c instanceof at)return{success:!1,code:"invalid-node-package",message:c.message};if(c instanceof X)return{success:!1,code:"timeout"};throw c}}});async function Hy(s,e,t,r){try{return await fl(s,e,t,r)}catch{fa.error("failed to report remote step state",{projectId:s,resultId:e,stepId:t});return}}async function UR(s,e,t,r,n){return fa.info("finished to run remote step",{stepId:t,sessionId:n}),await Hy(s,e,t,{status:"completed",success:!0,failureReason:null,data:r})}async function Vy(s,e,t,r,n){return fa.info("failed to run remote step",{stepId:t,sessionId:n,failureReason:r}),await Hy(s,e,t,{status:"completed",success:!1,failureReason:r})}async function zy(s,e,t,r){if(!(t!=null&&t.type)||t.status==="completed")return;let{project:n,projectData:o,userData:i}=s,a=t.type,c=e.getSessionId(),u=t.id;fa.info("start play remote step",{stepType:a,stepId:u,sessionId:c});let d=MR[a];if(!d)return await Vy(n,r,u,`Failed to find step type ${a}`,c);try{let m=await d.run(e,t,o,i);return await UR(n,r,u,m,c)}catch(m){return await Vy(n,r,u,m.message,c)}}var fa,MR,Ky=T(()=>{"use strict";eg();oa();Te();qy();j();fa=x("step-playback"),MR={"cli-validation-code-step":rr,"cli-wait-for-code-step":rr,"cli-action-code-step":rr,"cli-api-code-step":rr,"cli-condition-step":rr,"cli-download-code-step":rr,"node-package":vd,"tdk-hybrid":ma}});var Jy={};$(Jy,{remoteStepServiceSocketIO:()=>jR});var Ed,jR,Xy=T(()=>{"use strict";Ui();Ed=class extends Wr{init(e){super.init(e,"remoteStep"),this.listerers={}}emitJoinRoom(e){return this.emitPromise("remoteStep:join",{resultId:e})}emitLeaveRoom(e){return this.emitPromise("remoteStep:leave",{resultId:e})}joinToRemoteStep(e){return this.rooms[e]?Promise.resolve():(this.joinRoom(e),this.emitJoinRoom(e))}saveRemoteStep(e,t,r){return this.emitPromise("remoteStep:save",{resultId:e,stepId:t,remoteStep:r})}listenToRemoteStep(e,t){this.listerers[e]&&(this._socket.off("remoteStep:saved",this.listerers[e]),delete this.listerers[e]),this.listerers[e]=r=>{r.resultId===e&&r.remoteStep&&r.remoteStep.status==="pending"&&t(r.remoteStep)},this._socket.on("remoteStep:saved",this.listerers[e])}unlistenToRemoteStep(e){return this.listerers[e]?(this.leaveRoom(e),this._socket.off("remoteStep:saved",this.listerers[e]),delete this.listerers[e],this.emitLeaveRoom(e)):Promise.resolve()}},jR=new Ed});var Yy={};$(Yy,{remoteStepService:()=>js});var Sd,Fs,Rd,js,ha=T(()=>{"use strict";Un();ae();be();({REMOTE_STEP_SAVED:Sd}=Qe),Rd=class{async init(e){M.flags.useNewWSCLI.isEnabled()||(Fs=(await Promise.resolve().then(()=>(Xy(),Jy))).remoteStepServiceSocketIO,Fs.init(e))}joinToRemoteStep(e){return M.flags.useNewWSCLI.isEnabled()?Fe.addFilter(`${e}:remoteStep`,{resultId:e},[Sd]):Fs.joinToRemoteStep(e)}saveRemoteStep(e,t,r){return M.flags.useNewWSCLI.isEnabled()?Promise.resolve():Fs.saveRemoteStep(e,t,r)}listenToRemoteStep(e,t){if(M.flags.useNewWSCLI.isEnabled()){Fe.listenTo(`${e}:remoteStep`,[Sd],r=>r.resultId===e&&r.remoteStep&&r.remoteStep.status==="pending",r=>t(r.remoteStep));return}Fs.listenToRemoteStep(e,t)}unlistenToRemoteStep(e){return M.flags.useNewWSCLI.isEnabled()?(Fe.removeFilter(`${e}:remoteStep`,[Sd]),Promise.resolve()):Fs.unlistenToRemoteStep(e)}},js=new Rd});var Zy,eb,tb,Se,BR,rb,Qy,ga,sb=T(()=>{"use strict";Zy=E(require("lodash"));F();le();Le();ms();Et();Te();Ky();eb=E(require("p-retry")),tb=require("url");j();Jo();Ts();ae();ha();Os();Se=x("test-run-handler"),BR=3,rb=20*1e3,Qy=s=>JSON.stringify(s).length<rb,ga=class{constructor(e,t,r,n,o,i){this._executionId=e;this._executionName=t;this._options=n;this._branch=o;this._testRunStatus=i;this.seleniumPerfStats=new Lr;this._totalRetryCount=1;this._retryCount=1;this._timeoutRetryCount=1;this.clearTestResultFinished=Promise.resolve(void 0);var c,u;this._testStatus=r.testStatus,this._testId=r.testId,this._testName=r.name,this._testResultId=r.resultId,this._code=r.code,this._baseUrl=n.baseUrl||r.baseUrl||r.testConfig.baseUrl,this._nativeApp=r.nativeApp,this._overrideTestConfigId=(c=r.overrideTestConfig)==null?void 0:c.id,this._maxRetryCount=n.retries,this._remoteRunId=n.remoteRunId;let a=!((u=r.runConfig)!=null&&u.isMobileWeb)&&n.browser;this._runConfig=a?an(n.browser,n.saucelabs,n.browserstack):r.runConfig}async waitForExecutionStartedFinished(){return await this._testRunStatus.waitForExecutionStartedFinished(),await this.clearTestResultFinished}get testStatus(){return this._testStatus}get runMode(){return this._options.mode}get automationMode(){return this._code?"codeful":"codeless"}get code(){return this._code}get runConfig(){return this._runConfig}get testResultId(){return this._testResultId}get baseUrl(){return this._baseUrl}set baseUrl(e){this._baseUrl=e}get executionId(){return this._executionId}get executionName(){return this._executionName}get androidActivityWait(){var n;let e=this._nativeApp&&"appMetadata"in this._nativeApp?this._nativeApp.appMetadata:this._nativeApp;if((n=e==null?void 0:e.activity)!=null&&n.includes(e.id))return`${e.id}.*`;let{activity:t}=e,r=t.split(".").pop();return t.replace(r,"*")}get getAppSource(){if(this._nativeApp)return this.nativeAppLink?"from-library":"from-device"}get nativeAppLink(){let e=null;return this._nativeApp&&"filePath"in this._nativeApp&&(e=`${he}/storage${this._nativeApp.filePath}?access_token=${this._options.authData.token}`),e}async getNativeAppData(){let{appId:e,baseUrl:t}=this._options;if(t&&!this._nativeApp&&!e){let r=t||this.baseUrl;if(!r)return null;let[n,o]=r.split(":");return{packageName:n,activity:o}}return this._nativeApp&&!e?"appMetadata"in this._nativeApp?this._nativeApp.appMetadata:this._nativeApp:null}get branch(){return this._branch}get sfdcCredential(){return this._options.sfdcCredential}get remoteRunId(){return this._remoteRunId}get overrideTestConfigId(){return this._overrideTestConfigId}markClearBrowser(){this.clearBrowser=!0}async getRunRequestParams(){var r,n;let t={tokenV3:await Ht(),refreshToken:_o(),projectId:this._options.project,executionId:this._executionId,executionName:this._executionName,testId:this._testId,resultId:this._testResultId,baseUrl:this._baseUrl,branch:this._branch,servicesUrl:Ya,remoteRunId:this.remoteRunId,previousTestResultId:this.previousTestResultId,testRetryCount:this.retryCount,...this.code&&{isCodeMode:!0,testName:this.testName},...this._options.shouldMonitorPerformance&&{shouldMonitorPerformance:!0},...this._options.company&&{companyId:this._options.company.companyId,onprem:this._options.company.onprem,storageBaseUrl:this._options.company.storageBaseUrl,storageType:this._options.company.storageType,planType:this._options.company.planType,isPOC:this._options.company.isPOC,isStartUp:this._options.company.isStartUp},...this._options.collectCodeCoverage&&{codeCoverageUrlFilter:this._options.codeCoverageUrlFilter||`${this.baseUrl}*`},...this._options.disableMockNetwork&&{disableMockNetwork:this._options.disableMockNetwork},...this._options.lightweightMode&&{lightweightMode:this._options.lightweightMode},...this.clearBrowser&&{clearBrowser:!0},...this._options.localRCASaver&&{localRCASaver:this._options.localRCASaver},...this.sfdcCredential&&{sfdcCredential:this.sfdcCredential}};if(this._options.disableMockNetwork&&pt("user-disable-mock"),t.lightweightMode&&((r=this._options.lightweightMode)!=null&&r.general)){Object.assign(t,{company:this._options.company});let o=this.runData,i=Qy(o);Object.assign(t.lightweightMode,{isRunDataSentInUrl:i});let a=JSON.stringify(o).length,c=this.testId;i?(Object.assign(t,{runData:o}),Se.info(`Run data sent as URL param, test id: ${c} run data length: ${a}`)):Se.warn(`Run data is too big to be sent as a URL param. Test id: ${c}, run data size: ${a} (limit: ${rb} characters)`),Object.assign(t,{isLocalRun:Boolean(this._options.useLocalChromeDriver||this._options.useChromeLauncher)})}if((n=this._options.lightweightMode)!=null&&n.preloadTests&&this._options.useChromeLauncher){let o=await Rn(this._options);Object.assign(t,{preloadedTest:o[t.testId]})}return t}async getRunTestUrl(){let e=await this.getRunRequestParams(),t=`https://run.testim.io/?params=${encodeURIComponent(JSON.stringify(e))}`;return Se.info(`Test (${this.testId}) run URL length: ${t.length}`),t}set sessionId(e){this._sessionId=e}get sessionId(){return this._sessionId}get testId(){return this._testId}get testName(){return this._testName}get runParams(){var e;return((e=this._options.runParams)==null?void 0:e[this._testResultId])||{}}get runData(){return{userParamsData:this.runParams,overrideTestConfigId:this._overrideTestConfigId||null}}async clearTestResult(){var o;let e={...this.runData,...this.runMode===Q.EXTENSION&&{code:this.code},...this._options.mockNetworkRules&&{mockNetworkRules:this._options.mockNetworkRules}},t=this._timeoutRetryCount>1||this._retryCount>1;if((o=this._options.lightweightMode)!=null&&o.disableResults&&!t&&Qy(e))return;let r=async()=>{try{return await hl(this._options.project,this._testId,this._testResultId,e)}catch(i){return Se.error("failed to upload run data artifact (runner)",{err:i}),""}},n=async()=>{let i=await r();return await this._testRunStatus.waitForExecutionStartedFinished(),ml(this._options.project,this._testResultId,this._testId,{name:this._testName,resultId:this._testResultId,status:"pending",retryCount:this._retryCount,runDataUrl:i,runData:i?void 0:e,testRetryKey:this.retryKey})};return this.clearTestResultFinished=n(),this.clearTestResultFinished}hasMoreRetries(){return this._retryCount<this._maxRetryCount}get retryKey(){return`${this._retryCount}:${this._timeoutRetryCount}`}startNewRetry(){return this._retryCount++,this._timeoutRetryCount=1,this.onRetry()}async runTestUsingCDP(e){N("runTestUsingCDP");let{targetInfos:t}=await e.cdpCommand("Target.getTargets")||{targetInfos:[]},{targetId:r}=t.find(o=>o.type==="background_page"&&o.title==="Testim Editor")||{},{targetId:n}=t.find(o=>o.type==="page")||{};if(!r)throw new Error("testim extension not found");if(!n)throw new Error("AUT target not found");try{N("before Target.attachToTarget");let[o,i]=await Promise.all([e.cdpCommand("Target.attachToTarget",{targetId:r,flatten:!0}),this.getRunRequestParams()]),{sessionId:a}=o||{};N("before Runtime.evaluate"),await(0,eb.default)(async()=>{let{result:u}=await e.cdpCommand("Runtime.evaluate",{expression:"typeof runTestimTest !== 'undefined'",returnByValue:!0},a);if(!u.value)throw new Error("runTestimTest not available on global scope")},{retries:100,minTimeout:30,factor:1}),N("after wait for runTestimTest function");let{result:c}=await e.cdpCommand("Runtime.evaluate",{expression:`runTestimTest(${JSON.stringify(i)})`,awaitPromise:!0,returnByValue:!0},a);if(c.subtype==="error")throw new Error(c.description);return N("after Runtime.evaluate"),c.value}catch(o){throw Se.error("error running test using CDP",{err:o}),new Error("Error running test using CDP")}}isRetryKeyMismatch(e){return e.testRetryKey&&e.testRetryKey!==this.retryKey}validateRunConfig(){let{baseUrl:e,runConfig:{browserValue:t}}=this;if(e&&t==="safari"){let r;try{r=new tb.URL(e)}catch{return}let{username:n,password:o}=r;if(n||o)throw new Error("Basic authentication in URL is not supported in Safari")}}onStarted(e){return new Promise(t=>{let r=!1,n=o=>{if(!r){if(this.isRetryKeyMismatch(o)){Se.warn(`ignoring result update for on started due to retry key mismatch, got ${o.testRetryKey}, current is ${this.retryKey}`,{resultId:this.testResultId,testId:this.testId});return}["running","completed"].includes(o.status)&&(o.resultId=this.testResultId,o.status==="completed"&&(Se.info("setting _wasCompletedOnStartedCheck to true",{testResult:o,resultId:this.testResultId,testId:this.testId,testRetryKey:this.retryKey}),this._wasCompletedOnStartedCheck=o),r=!0,t(o))}};if(this._options.disableSockets){let o=Date.now()+e,i=async()=>{if(Date.now()>o)return;let{testId:a,testResultId:c,branch:u,_options:{project:d}}=this;try{let m=await Ar(a,c,d,u);n(m),r||setTimeout(i,3e3)}catch(m){Se.error("failed to check if done",{err:m}),setTimeout(i,3e3)}};setTimeout(i,3e3)}else Ke.listenToTestResult(this._testResultId,this._testId,n)})}async checkViaRestAPIIfTestStarted(){let{testId:e,testResultId:t,_options:{project:r},branch:n}=this;try{let o=await Ar(e,t,r,n),i=["running","completed"];if(i.includes(o.status))return Se.info(`get status: ${o.status} after not get test started status`,{testId:e,testResultId:t,branch:n}),o;throw Se.error(`test not start test status: ${o.status} (expected [${i.join(", ")}])`,{testId:e,testResultId:t,branch:n}),new Error(Ue.TEST_START_TIMEOUT_MSG)}catch(o){throw Se.error("failed to get test result after test start timeout",{err:o,testId:e,testResultId:t,branch:n}),new Error(Ue.TEST_START_TIMEOUT_MSG)}}async onCompletedCleanup(){if(!this._options.disableSockets)return await Ke.leaveTestResult(this._testResultId,this._testId)}async onCompleted(){let e;try{let t=await new Promise(r=>{if(this._wasCompletedOnStartedCheck&&!this.isRetryKeyMismatch(this._wasCompletedOnStartedCheck)){Se.info("test was already completed in on started check",{resultId:this.testResultId,testId:this.testId}),r(this._wasCompletedOnStartedCheck);return}this._options.disableSockets||Ke.listenToTestResult(this._testResultId,this._testId,i=>{if(this.isRetryKeyMismatch(i)){Se.warn(`ignoring result update for on completed due to retry key mismatch, got ${i.testRetryKey}, current is ${this.retryKey}`,{resultId:this.testResultId,testId:this.testId});return}i.status==="completed"&&(i.resultId=this._testResultId,r(i))});let n=this._options.disableSockets?0:Math.floor(1e4+Math.random()*5e3),o=this._options.disableSockets?0:Math.floor(6e4+Math.random()*15e3);if(e=Zy.debounce(async()=>{try{let i=await Ar(this._testId,this._testResultId,this._options.project,this.branch);return this.isRetryKeyMismatch(i)?(Se.warn(`ignoring result update for on completed (in reconnect) due to retry key mismatch, got ${i.testRetryKey}, current is ${this.retryKey}`,{resultId:this.testResultId,testId:this.testId}),!1):(i==null?void 0:i.status)==="completed"?(Se.info("Socket reconnected - Test complete",{testId:this._testId,resultId:this._testResultId,projectId:this._options.project}),i.resultId=this._testResultId,r(i),!0):!1}catch(i){return Se.warn("Error while trying to check status on socket connect",i),!1}},n,{maxWait:o}),!this._options.disableSockets)Ke.on("socket-connected",e);else{let i=()=>{setTimeout(async()=>{try{let{isComplete:a}=await sl(this._testResultId,this._options.project,this.retryKey);a?await e()||(Se.warn("onConnected returned false even though isComplete was true"),i()):i()}catch(a){Se.error("failed to check is complete",{err:a}),i()}},3e3)};i()}});return await this.onCompletedCleanup(),t}finally{e&&!this._options.disableSockets&&Ke.off("socket-connected",e)}}listenToRemoteStep(e){js.listenToRemoteStep(this.testResultId,t=>{zy(this._options,e,t,this.testResultId)})}hasMoreTimeoutRetries(){let e=this._options.disableTimeoutRetry?1:BR;return this._timeoutRetryCount<e}startNewTimeoutRetry(){return this._timeoutRetryCount++,this.onRetry()}get retryCount(){return this._retryCount}get previousTestResultId(){return this._previousTestResultId}isAllowReportTestResultRetries(){var e,t,r;return Boolean((r=(t=(e=this._options.company)==null?void 0:e.activePlan)==null?void 0:t.premiumFeatures)==null?void 0:r.allowReportTestResultRetries)}async onRetry(){var e;this._previousTestResultId=this.testResultId,this.isAllowReportTestResultRetries()&&(this._totalRetryCount++,this._originalTestResultId||(this._originalTestResultId=this._previousTestResultId),this._testResultId=K(),!((e=this._options.lightweightMode)!=null&&e.onlyTestIdsNoSuite)&&await this._testRunStatus.addRetryTestResult({retryCount:this._totalRetryCount,executionId:this._executionId,projectId:this._options.project,newResultId:this._testResultId,originalTestResultId:this._originalTestResultId,previousTestResultId:this._previousTestResultId}))}}});var ya,nb=T(()=>{"use strict";sb();ya=class{constructor(e,t,r,n,o,i){this._waitingTests=r.map(a=>new ga(e,t,a,n,o,i))}stop(){this._waitingTests=[]}getNext(){let e=this._waitingTests.shift();if(e)return e}hasMoreTests(){return Boolean(this._waitingTests.length)}}});var $R,WR,zn,Id=T(()=>{"use strict";bs();j();$R=x("worker-utils"),WR=async(s,e,t)=>{e&&await Zl(s,t)},zn=async(s,e,t,r)=>{$R.info("releasing player",{hasPlayer:Boolean(r)});try{await(r==null?void 0:r.onDone())}finally{await WR(s,e,t)}}});function JR(s,e,t,r){return{testId:s,reason:r,name:e,resultId:t,success:!1}}var Pd,ab,Cd,xt,GR,ob,ib,ba,qR,xd,VR,Bt,HR,zR,KR,Ct,wa=T(()=>{"use strict";Pd=E(require("ms")),ab=E(require("moment")),Cd=E(require("p-retry"));F();Le();bs();Te();j();Id();Ft();ti();be();ha();Os();vt();ae();z();xt=x("base-worker"),{GET_BROWSER_TIMEOUT_MSG:GR,TEST_START_TIMEOUT_MSG:ob,TEST_COMPLETE_TIMEOUT_MSG:ib}=Ue,{SETUP_TIMEOUT:ba,NETWORK_ERROR:qR,GRID_ERROR:xd,BROWSER_CLOSED:VR,SELENIUM_ERROR:Bt,UNKNOWN_ERROR:HR}=tn,zR=(0,Pd.default)("1s"),KR=1;Ct=class{constructor(e,t,r,n,o,i,a,c,u=!0){this.executionQueue=e;this.options=t;this.customExtensionLocalLocation=r;this.executionId=n;this.onTestStarted=o;this.onTestCompleted=i;this.onGridSlot=a;this.onTestIgnored=c;this.releaseSlotOnTestFinished=u;this.id=Ct.getWorkerId();this.lambdatestService=new te;this.isCodeMode=t.files&&t.files.length>0,this.baseUrl=t.baseUrl,this.testRunTimeout=t.timeout,this.isRegressionBaselineRun=t.isRegressionBaselineRun,this.userData=t.userData}static getWorkerId(){return KR++}async getGridSlot(e,t){let r=await Jf(e,t.executionId,this.options,this.id);return this.onGridSlot(t.testResultId,r),r}async getSlotOnce(e){let{browserValue:t}=this.testRunConfig;return Z.onGetSlot(this.id,t||"chrome"),await this.getGridSlot(t,e)}initPlayer(e){throw new es(!0)}async getBrowserOnce(e,t,r,n){throw new es(!0)}async runTestOnce(e,t){return e.sessionId=t.getSessionId(),xt.info("Test run started",{testId:e.testId,resultId:e.testResultId,seleniumSession:t.getSessionId()}),await e.clearTestResult()}handleQuarantine(e){if(!He({testStatus:e.testStatus},this.options))return;let t={name:e.testName,testId:e.testId,resultId:e.testResultId,runnerStatus:pe.SKIPPED,testStatus:e.testStatus};return this.onTestIgnored(this.id,t),t}setSessionTimeout(){return this.options.mode===Q.APPIUM?Math.max((0,Pd.default)("180s"),this.options.getSessionTimeout):Math.max(this.lambdatestService.getSessionTimeout||0,this.options.getSessionTimeout)}async getTestPlayer(e,t){var o;let r=(o=this.userData)==null?void 0:o.projectId,n;try{N("before getSlotOnce retries");let i=0,a=await(0,Cd.default)(async()=>{let d=Date.now();try{return await re(this.getSlotOnce(e),this.options.getBrowserTimeout,Ue.GET_BROWSER_TIMEOUT_MSG)}catch(m){let p={testId:this.testId,testResultId:this.testResultId,executionId:this.executionId};throw m instanceof hr?xt.info("could not get grid slot due to concurrency issue",p):xt.error("error getting grid slot",{error:m,...p}),i++,await ie(this.options.getBrowserTimeout-(Date.now()-d)),m}},{retries:this.options.getBrowserRetries-1,minTimeout:0,factor:1});N("after getSlotOnce retries"),N("before getBrowserOnce retries");let c=this.options.getBrowserRetries-i;if(!c)throw new Error("No free browser slots in desired grid");let u=0;n=await(0,Cd.default)(async()=>{let d=Date.now(),m=this.initPlayer(e);try{a=await Xf(this.options,a,this.testRunConfig,this.lambdatestService,{maxRetries:c,currentRetry:u+1}),this.options.gridData.provider=a.provider,this.options.gridData.host=a.host,this.options.gridData.failedGetBrowserAttempts=u;let p=this.setSessionTimeout();N("before getBrowserOnce");let f=await re(this.getBrowserOnce(e,t,m,a),p,Ue.GET_BROWSER_TIMEOUT_MSG);return N("after getBrowserOnce"),Z.onGetBrowserSuccess(this.id,r),m||f}catch(p){let f={provider:a.provider,host:a.host,failedGetBrowserAttempts:u,id:this.options.gridData.gridId,type:a.type},h=this.options.mode===Q.APPIUM?"device":"browser";throw xt.error(`error getting ${h} from grid`,{error:p,testId:this.testId,testResultId:this.testResultId,executionId:this.executionId,grid:f}),Z.onGetBrowserFailure(this.id,r,++u),m.onDone(),p instanceof ot||await ie(this.options.getBrowserTimeout-(Date.now()-d)),p}},{retries:c-1,minTimeout:0,factor:1}),N("after getBrowserOnce retries")}catch(i){throw await zn(this.id,this.releaseSlotOnTestFinished,r,n),i instanceof ot?i:i instanceof it?new Wt(i,xd):new Wt(i,Bt)}return n}async runTest(e,t,r){var u;N("inside runTest");let n=(u=this.userData)==null?void 0:u.projectId,o=this.handleQuarantine(e);if(o)return o;N("before runTest onTestStarted");let i=e.getAppSource,a=await this.onTestStarted(this.id,e.testId,e.testResultId,r,e.retryKey,i);e.baseUrl=a.config.baseUrl;let c=await this.getTestPlayer(e,t);try{return await this.runTestOnce(e,c)}finally{await zn(this.id,this.releaseSlotOnTestFinished,n,c)}}async runTestCleanup(){}async onQueueCompleted(){}run(){var m,p;let e=()=>process.nextTick(()=>this.run()),t=async(f,h,g)=>{var I;if(He(f,this.options))return e();let y=h.sessionId,w=k=>g==null?void 0:g.message.includes(k),P=g&&g instanceof Wt,b=g&&(w(ob)||w(ib)),v=!f.success&&(h.hasMoreRetries()&&!P&&!b||b&&h.hasMoreTimeoutRetries());try{let k=h.retryKey;f.testRetryKey=k;let D=h.getAppSource;return await this.onTestCompleted(this.id,this.testId,f,y,v,D),this.executionQueue.hasMoreTests()&&!((I=this.options.lightweightMode)!=null&&I.general)&&await ie(zR),await this.runTestCleanup(),v?(b?await h.startNewTimeoutRetry():await h.startNewRetry(),xt.info(`retry test id: ${this.testId} name: ${this.testName} again`,{testId:this.testId,testName:this.testName,isTimeoutErrors:b,testRetryKey:k,totalRetries:h._totalRetryCount}),this.testResultId=h.testResultId,await u(h,v)):await e()}catch(k){if(k instanceof At)return;xt.error("failed to process test result",{error:k}),e();return}},r=()=>`Due to network connectivity issues, Testim CLI has been unable to connect to the grid.
563
- Please make sure the CLI has stable access to the internet. ${yc()?"(Internal: network connectivity test failed)":""}`,n=(f,h)=>{let g=this.options.mode===Q.APPIUM?"device":"browser";if(!h&&M.flags.errorMessageOnBadNetwork.isEnabled())return{errorType:qR,reason:r()};let y=f instanceof Error?f.message:f;if(y.includes(GR))return{errorType:ba,reason:`Test couldn't get ${g}`};if(y.includes(ob))return{errorType:ba,reason:"Test couldn't be started"};if(y.includes(ib)){if(!this.testRunTimeout)return{errorType:ba,reason:"Test timeout reached: test is too long"};let w=ab.default.duration(this.testRunTimeout,"milliseconds"),P=Math.floor(w.asMinutes()),b=w.seconds(),v=P>0?` ${P} min`:"",I=b>0?` ${b} sec`:"";return{errorType:ba,reason:`Test timeout reached (timeout:${v}${I}): test is too long`}}if(f instanceof Wt&&f.type){if(f.type===xd)return{errorType:xd,reason:`Test couldn't get ${g} from grid - ${f.message}`};if(f.type===Bt)return{errorType:Bt,reason:`Failed to create new session - ${f.message}`}}return"type"in f&&f.type===VR?{errorType:Bt,reason:"Session terminated, it is possible that the cli could not connect to the grid to send keep-alive requests for a prolonged period"}:"failure"in f&&f.failure instanceof fr?{errorType:Bt,reason:`Test couldn't get ${g} from grid - ${f.failure.message}`}:/SeleniumError: connect ECONNREFUSED/.test(f.message)||/Couldn't connect to selenium server/.test(f.message)?{errorType:Bt,reason:"Failed to connect to the grid, please check if the grid is accessible from your network"}:/terminated due to FORWARDING_TO_NODE_FAILED/.test(f.message)?{errorType:Bt,reason:"Session terminated, it is likely that the grid is out of memory or not responding, please try to rerun the test"}:/terminated due to PROXY_REREGISTRATION/.test(f.message)?{errorType:Bt,reason:"Session terminated, it is likely that the grid is not responding, please try to rerun the test"}:/forwarding the new session cannot find : Capabilities/.test(f.message)?{errorType:Bt,reason:`Session could not be created, please check that the ${g} you requested is supported in your plan`}:{errorType:HR,reason:y}},o=async(f,h)=>{var b;let g=await gc();!g&&M.flags.warnOnBadNetwork.isEnabled()&&console.warn(r()),xt.warn("error on run",{err:f});let y=(b=this.userData)==null?void 0:b.projectId,{errorType:w,reason:P}=n(f,g);pl(y,this.testResultId,this.testId,{status:en.COMPLETED,success:!1,reason:P,errorType:w,testRetryKey:h.retryKey,setupStepResult:{status:en.COMPLETED,success:!1,reason:P,errorType:w}},h.remoteRunId),await t(JR(this.testId,this.testName,this.testResultId,P),h,f)},i=async(f,h)=>{var b;let g=this.testId,y=this.testResultId,w=(b=this.userData)==null?void 0:b.projectId,P=this.branch;if(!g||!y||!w||!P)return xt.warn("Test failed. Not enough data to recover results via API",{err:f}),o(f,h);try{let v=await Ar(g,y,w,P);if(xt.warn("Test failed. Got results via API",{err:f,testResult:v}),v&&v.status===en.COMPLETED)return await t(v,h);throw f}catch(v){return v!==f&&xt.error("Failed to fetch test results from server",{testId:g,resultId:y,projectId:w,branch:P,err:v}),o(f,h)}},a=this.options.disableSockets||((m=this.options.lightweightMode)==null?void 0:m.disableResults)&&(this.options.useChromeLauncher||this.options.mode!=="extension"),c=this.options.disableSockets||((p=this.options.lightweightMode)==null?void 0:p.disableRemoteStep),u=async(f,h)=>{try{await Promise.all([!c&&js.joinToRemoteStep(this.testResultId),!a&&Ke.joinToTestResult(this.testResultId,this.testId)]),f.validateRunConfig();let g=await this.runTest(f,this.customExtensionLocalLocation,h),y=await t(g,f);return N("After onRunComplete"),y}catch(g){return i(g,f)}finally{c||js.unlistenToRemoteStep(this.testResultId)}},d=this.executionQueue.getNext();return d?(this.testId=d.testId,this.testName=d.testName,this.testResultId=d.testResultId,this.overrideTestConfigId=d.overrideTestConfigId,this.testRunConfig=d.runConfig,this.branch=d.branch,u(d)):this.onQueueCompleted()}}});var cb={};$(cb,{WorkerSelenium:()=>Ad});function YR(s){let{playback:e}=se().commonConstants;function t(r){s.playbackManager.on(r,()=>{N(`Got event ${r}`)})}Object.values(e).forEach(t)}var Ta,XR,Ad,lb=T(()=>{"use strict";F();Le();wa();j();Ft();z();Jo();ae();Gu();da();Ee();Ta=x("worker-selenium"),XR=1e9,Ad=class extends Ct{initPlayer(t){return new qn(this.id,t.runParams,this.options.shouldMonitorPerformance,t.automationMode,void 0,t.retryCount,t.previousTestResultId)}async getBrowserOnce(t,r,n,o){N("in WorkerSelenium getBrowserOnce"),Z.onGetSession(this.id,this.testName,t.runMode);let{driver:i}=n;this.windowUtils=new As(this.id,i),n.clearSessionTabs();let{browserValue:a}=this.testRunConfig,c=t.baseUrl;try{let u=this.options.useLocalChromeDriver;await i.init(this.options,this.testName,this.testRunConfig,o,r,this.executionId,this.testResultId,t.seleniumPerfStats,u,this.lambdatestService),N("in WorkerSelenium after driver.init"),await n.addTab(void 0,{skipLoadInfo:u}),N("in WorkerSelenium after addTab"),u||await this.windowUtils.navigate(c,XR),await this.windowUtils.validatePageIsAvailable(),N("in WorkerSelenium after navigate")}catch(u){let d=u.message&&(u.message.startsWith("Malformed URL")||u.message.includes("Reached error page: about:neterror"))&&a==="firefox",m=u.message&&u.message==="invalid argument";throw u instanceof ot||d||m?new ot(`Page '${c}' is not available`):(Ta.error("failed to navigate to page",{err:u}),u)}}async runTestOnce(t,r){var d;let n=se(),{driver:o,sessionPlayer:i}=r,a=n.manifestVersion||"runner";Z.onWaitToTestComplete(this.id,this.isCodeMode),YR(i),i.playbackManager.executionId=t.executionId,i.playbackManager.executionName=t.executionName,i.setLightweightMode(this.options.lightweightMode),t.sfdcCredential&&i.setSfdcCredential(t.sfdcCredential),n.localAssetService&&n.localAssetService.initialize({serverUrl:this.options.localRCASaver});let c=null;(d=this.options.lightweightMode)!=null&&d.preloadTests&&(c=(await Rn(this.options))[this.testId]);let u=async()=>{if(t.automationMode==="codeful"){i.callOrderScheduler?i.callOrderScheduler.schedule(()=>t.waitForExecutionStartedFinished(),{key:`test-result:${this.userData.projectId}:${this.testResultId}`}):await t.waitForExecutionStartedFinished(),N("right before playTestByCode");let p=new Promise((f,h)=>{i.playTestByCode(this.testId,this.executionId,this.testResultId,this.baseUrl,this.userData,a,f,!1,this.overrideTestConfigId,this.branch,t.code,t.testName).catch(h)});return re(p.then(f=>(N("right after playTestByCode"),f)),this.testRunTimeout,Ue.TEST_COMPLETE_TIMEOUT_MSG).catch(f=>{var h;throw f instanceof X&&((h=i.stopPlayingOnTestTimeout)==null||h.call(i)),f}).then(f=>(f.resultId=this.testResultId,f))}let m=!1;return re(new Promise((p,f)=>{i.playByTestId(this.testId,this.executionId,this.testResultId,this.baseUrl,this.userData,a,p,!1,this.overrideTestConfigId,this.branch,m,t.remoteRunId,void 0,void 0,c).catch(f)}),this.testRunTimeout,Ue.TEST_COMPLETE_TIMEOUT_MSG).catch(p=>{var f;throw p instanceof X&&((f=i.stopPlayingOnTestTimeout)==null||f.call(i)),p}).then(async p=>{n.localAssetService&&await n.localAssetService.drain(),p.stepsResults=null,p.resultId=this.testResultId,o.isAlive()||(Ta.warn(`possible grid unresponsive for test ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`),p.gridIssues="could not validate grid is alive");let f=o.maxKeepAliveGap();f>=3e4&&(Ta.warn(`possible browser keep alive issue ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`),p.keepAliveIssue=f);let g={...p,...t.seleniumPerfStats.getStats()};return this.lambdatestService.isLambdatestRun()&&await o.executeJS(`lambda-status=${g.success?"passed":"failed"}`).catch(()=>{}),g})};o.start(),N("right before super.runTestOnce in workerSelenium");try{await super.runTestOnce(t,r),N("right after super.runTestOnce in workerSelenium");let m=await u();return N("right after runSeleniumTest"),m}catch(m){throw Ta.error("failed to run test once",{err:m}),m}}}});var va,ub=T(()=>{"use strict";va=class{constructor(e){this.driver=e,this._utils={},this.sessionTabs={},this.pendingTabs={},this.addedTabs={}}on(){}tabCount(e){}getAllOpenTabIds(e){}getActiveTabInfo(e){}getAllTabIds(e){}isSessionTab(e,t){}createSesion(e){}setAddFrameHandlerCallBack(e){}getAllTabInfoStrings(e){}getAllTabInfos(e){}addNewTab(e,t,r,n={}){}addOpenerStepId(e,t,r){}addOpenerStep(e,t,r){}fixMissingMainTab(e){}buildTabInfo(e,t,r,n,o={}){}addTab(e,t,r,n,o={}){}getTabUtilsByTabIdAndSessionId(e,t){}getTabUtilsByTabId(e){}getTabInfo(e,t){}getTabUtils(e,t){}exactUrlMatch(e,t,r){}singleExactMatchForParts(e,t,r,n){}isSameTab(e,t,r){}getMainTabInfo(e){}getMainTabUtils(e){return{}}removeTabInfo(e,t){}getMainTabId(e){}isMainTabExists(e){}clearAllTabs(e){}clearNonMainTabs(e){}switchTab(e,t,{forceSwitch:r}={forceSwitch:!1}){}getTabDetails(e,t,r={}){}getUnregisteredTabId(e){}waitForTabToOpen(e){}tryToAddTab(e,t){}addNewPopup(e,t){}waitToPendingTabs(e,t){}isMainTabIncognito(){}isInvalidStepVersion(e){}getTabIdByTabInfo(e,t){}}});function db(s){class e{constructor(r,n){this.frameManager=r,this.locateElementPlayer=n}foundFrameCallback(r,n,o){return kd.info("foundFrameCallback-mock invoked"),{}}locate(r,n,o,i,a,c){return kd.info("locate-mock invoked"),{}}findFrame(r,n,o,i){return kd.info("findFrame-mock invoked"),{}}}return e}var kd,pb=T(()=>{"use strict";j();kd=x("mobile-frame-locator-mock")});var QR,ZR,Ea,mb=T(()=>{"use strict";QR=E(require("webdriverio"));ub();Hu();j();zu();Ku();Ee();Os();od();pb();ad();cd();ZR=x("appium-test-player"),Ea=class{constructor(e,t,r,n="code",o=QR,i,a){let{sessionPlayer:c,commonConstants:u,stepActionFactory:d,MobileLocateElementPlayer:m}=se();this.driver=o,this.id=e;let p=new _s(this.driver);this.stepActionFactory=new d(p),ua(this.driver,this.stepActionFactory),this.tabService=new va(this.driver),this.windowCreationListener=Gn,this.playbackTimeoutCalculator=new Us(Di()),this.tabService.createSesion(e);let f=db(this.driver);this.sessionPlayer=new c(e,this.tabService,null,null,f,Ni,m,null,p,this.stepActionFactory,this.playbackTimeoutCalculator,Ke.getSocket(),n),this.sessionPlayer.setShouldMonitorPerformance&&this.sessionPlayer.setShouldMonitorPerformance(r),this.sessionPlayer.playbackManager.isRemoteSession=!0,this.sessionPlayer.playbackManager.isLocalRun=!1,this.sessionPlayer.playbackManager.testRetryCount=i,this.sessionPlayer.playbackManager.previousTestResultId=a,this.sessionPlayer.playbackManager.userParamsData=t||{},this.onStepCompleted=this.onStepCompleted.bind(this),this.sessionPlayer.playbackManager.on(u.playback.RESULT,this.onStepCompleted)}onStepCompleted(e,t,r,n){}async onDone(){try{await this.driver.activeSession.deleteSession()}catch(e){ZR.error("error while deleting appium session",{error:e})}finally{let{commonConstants:e}=se();this.sessionPlayer.playbackManager.off(e.playback.RESULT),this.sessionPlayer=null,this.tabService=null,this.stepActionFactory=null,this.driver=null}}getSessionId(){return this.driver.activeSession.sessionId}}});var hb={};$(hb,{WorkerAppium:()=>_d});var fb,Kn,_d,gb=T(()=>{"use strict";fb=E(require("jsdom"));le();Te();Ri();wa();j();Ft();mb();Ee();Kn=x("worker-appium"),_d=class extends Ct{initPlayer(e){return new Ea(this.id,e.runParams,this.options.shouldMonitorPerformance,e.automationMode,void 0,e.retryCount,e.previousTestResultId)}async getBrowserOnce(e,t,r,n){Z.onGetSession(this.id,this.testName,e.runMode);let{driver:o}=r,i=this.options.projectData.type,a=await e.getNativeAppData(),c=i==="android"?e.androidActivityWait:null,u=e.nativeAppLink;if(this.options.appId){let{project:d,appId:m}=this.options,p=await tl({appId:m,projectId:d});if(!p)throw Kn.error("mobile app not found",{appId:m,projectId:d}),new Error("mobile app not found");u=`${he}/storage${p.filePath}?access_token=${this.options.authData.token}`}try{let d=Pu({projectType:i,gridInfo:n,testRunConfig:this.testRunConfig,nativeApp:a,options:this.options,appPath:u,androidActivityWait:c}),m=await o.remote(d);Object.assign(o,{activeSession:m}),await this.updateDeviceInfo(e,m),Kn.info(`init new appium session testName: ${this.testName}`,{sessionId:m.sessionId,testResultId:this.testResultId,nativeApp:a})}catch(d){throw Kn.error("failed to start application",{err:d}),d}}getServerAddressFromGrid(){let{host:e,port:t,accessToken:r}=this.options.gridData;return`https://${e}:${t}/v0/${r}/wd/hub`}async updateDeviceInfo(e,t){var f;let{executionId:r,testId:n,testResultId:o}=e,{project:i,projectData:{type:a}={},company:{companyId:c=""}={},gridData:{gridId:u=""}={}}=this.options,d=await El({projectId:i,projectType:a,companyId:c,gridId:u,selectors:`device_id:${t.capabilities.udid}`}),p={name:(f=d==null?void 0:d[0])==null?void 0:f.name,model:t.capabilities.deviceModel,osVersion:t.capabilities.platformVersion,udid:t.capabilities.udid,osType:t.capabilities.platformName,scaleFactor:t.capabilities.pixelRatio,virtual:!1};await us(i,r,n,o,"RUNNING",{device:p})}getDirectAddressConnection(e){let{directConnectProtocol:t,directConnectHost:r,directConnectPort:n,directConnectPath:o}=e;if(t&&r&&n&&o)return`${t}://${r}:${n}${o}`}async runTestOnce(e,t){let r=se(),{sessionPlayer:n}=t,o=t.driver,i=r.manifestVersion||"runner";Z.onWaitToTestComplete(this.id,this.isCodeMode),n.playbackManager.executionId=e.executionId,n.playbackManager.executionName=e.executionName;let a=this.getDirectAddressConnection(o.activeSession.capabilities)||this.getServerAddressFromGrid(),c=new fb.JSDOM("").window.DOMParser;n.playbackManager.appiumApi=new r.AppiumApi(a,o.activeSession.sessionId,c),r.localAssetService&&r.localAssetService.initialize({serverUrl:this.options.localRCASaver});let u=async()=>{try{let m=await new Promise((f,h)=>n.playByTestId(this.testId,this.executionId,this.testResultId,this.baseUrl,this.userData,i,f,!1,this.overrideTestConfigId,this.branch,!1,e.remoteRunId,void 0,void 0,void 0).catch(h));return r.localAssetService&&await r.localAssetService.drain(),m.stepsResults=null,m.resultId=this.testResultId,{...m,...e.seleniumPerfStats.getStats()}}catch(d){throw Kn.error("error while running appium tests",{err:d}),d}};try{return await super.runTestOnce(e,t),await u.call(this)}catch(d){throw Kn.error("failed to run test once",{err:d}),d}}}});var yb,Sa,bb=T(()=>{"use strict";F();yb=E(Dn()),Sa=class{constructor(e){this.driver=new yb.default,this.id=e}onDone(){return re(this.driver.end(),12e4).catch(t=>{if(t instanceof X)return this.driver.forceEnd();throw t}).catch(()=>{}).then(()=>{this.driver=null})}getSessionId(){return this.driver.getSessionId()}}});var wb,Ra,Tb=T(()=>{"use strict";wb=E(require("ws"));F();Ra=class{constructor(){this._cdpWs=null;this._cdpUrl=null;this._cdpCallbacks=new Map}async initSession(e,t=500){await this.stopSession(),this._cdpUrl=e,await this.initCDPWebsocket(t)}async initCDPWebsocket(e=500){if(this._cdpWs)return this._cdpWs;let t=new wb.default(this._cdpUrl,{timeout:e}),r=ct(o=>{t.once("open",o)}),n=ct(o=>{t.once("error",o)}).catch(()=>{t.close(),t.removeAllListeners()});return t.on("message",o=>this.onCDPMessage(o)),this._cdpWs=Promise.race([r,n]).then(()=>t),this._cdpWs}onCDPMessage(e){var n;let t=JSON.parse(e),r=this._cdpCallbacks.get(t.id);r&&(this._cdpCallbacks.delete(t.id),t.error?r.reject(new Error(t.error)):(n=t.result.exceptionDetails)!=null&&n.exception?r.reject(new Error(t.result.exceptionDetails.exception.description)):r.resolve(t.result))}async stopSession(){let e=this._cdpWs;if(this._cdpUrl=null,this._cdpWs=null,this._cdpCallbacks.clear(),e)try{return(await e).close()}catch{return}}async cdpCommand(e,t,r){let n=await this.initCDPWebsocket();this._lastWsId||(this._lastWsId=0);let o=this._lastWsId++,i=new Promise((c,u)=>{this._cdpCallbacks.set(o,{resolve:c,reject:u})}),a={method:e,params:t,id:o};return r&&Object.assign(a,{sessionId:r}),n.send(JSON.stringify(a)),i}}});var xa,Od,Ia,vb=T(()=>{"use strict";F();xa=E(require("chrome-launcher"));Ri();Tb();vn();Od=class{constructor(e){this.sessionId=e,this.cdpTestRunner=new Ra}async init(e,t,r,n,o,i,a){let u=[...Cu(e,t,r,n,o,i,a).desiredCapabilities.chromeOptions.args,...xa.Launcher.defaultFlags().filter(m=>m!=="--disable-extensions")];this.chrome=await xa.launch({chromeFlags:u,startingUrl:void 0,ignoreDefaultFlags:!0}),this.chrome.process.once("exit",()=>{this._isAlive=!1}),this.chrome.process.once("close",()=>{this._isAlive=!1}),this._isAlive=!0;let d=await Ir(`localhost:${this.chrome.port}`);await this.cdpTestRunner.initSession(d),ds(()=>this.chrome.kill())}isAlive(){return this._isAlive}start(){}async stop(){await this.cdpTestRunner.stopSession(),this.chrome&&await this.chrome.kill(),this._isAlive=!1}getSessionId(){return this.sessionId}},Ia=class{constructor(e){this.sessionId=K(),this.driver=new Od(this.sessionId),this.id=e}async onDone(){return this.driver.stop()}getSessionId(){return this.sessionId}}});var Eb={};$(Eb,{WorkerExtension:()=>Jn});var gt,Jn,Ld=T(()=>{"use strict";Le();z();wa();F();j();Ft();ae();bb();vb();gt=x("worker-ext"),Jn=class extends Ct{initPlayer(){return this.options.useChromeLauncher?new Ia(this.id):new Sa(this.id)}async _getBrowserOnce(e,t,r,n){var i;let{driver:o}=r;try{return await o.init(this.options,this.testName,this.testRunConfig,n,t,this.executionId,this.testResultId,e.seleniumPerfStats,(i=this.options.lightweightMode)==null?void 0:i.general,this.lambdatestService)}catch(a){throw gt.error("failed to get browser",{err:a,gridInfo:n,testId:e.testId,resultId:e.testResultId}),a}}async getBrowserOnce(e,t,r,n){return Z.onGetSession(this.id,this.testName,e.runMode),this._getBrowserOnce(e,t,r,n)}isUsingChromeLauncher(e){return Boolean(this.options.useChromeLauncher)}async runTestOnce(e,t){let{testResultId:r,executionId:n,testId:o}=this;N("WorkerExtension runTestOnce");let i=async d=>{let m=this.options.timeoutWasGiven?Math.max(1e4,this.options.timeout):this.options.testStartTimeout;try{return await re(e.runTestUsingCDP(d.cdpTestRunner),m,Ue.TEST_START_TIMEOUT_MSG)}catch(p){if(!(p instanceof X))throw p;return gt.warn("timeout while running test using CDP. Running checkViaRestAPIIfTestStarted",{testResultId:r}),await e.checkViaRestAPIIfTestStarted()}},a=async(d,m,p)=>{try{let f=await d.url(m);return p.driverUrlFinished=!0,f}catch(f){throw gt.error("error from driver.url",{err:f,testResultId:r,executionId:n,testId:o,url:m,urlLength:m.length}),f}},c=async d=>{let m=await e.onStarted(this.options.testStartTimeout);return d.testRunHandlerOnStartedHadFinished=!0,m},u=async()=>{var f;if(N("WorkerExtension runExtTest"),((f=this.options.lightweightMode)==null?void 0:f.disableRemoteStep)||this.options.disableSockets||e.listenToRemoteStep(t.driver),this.isUsingChromeLauncher(t)){Z.onWaitToTestStart(this.id),Z.onWaitToTestComplete(this.id,this.isCodeMode);try{return{...await i(t.driver),...e.seleniumPerfStats.getStats()}}catch(h){throw gt.warn("failed to run test via CDP",{err:h}),h}}let{driver:m}=t,p={driverUrlFinished:!1,testRunHandlerOnStartedHadFinished:!1};try{let h=await e.getRunTestUrl();Z.onWaitToTestStart(this.id);try{await re(Promise.all([a(t.driver,h,p),c(p)]),this.options.testStartTimeout,Ue.TEST_START_TIMEOUT_MSG)}catch(y){if(!(y instanceof X))throw y;gt.warn("timeout occurred (see log's payload). Running checkViaRestAPIIfTestStarted",{testResultId:r,executionId:n,testId:o,...p}),await e.checkViaRestAPIIfTestStarted()}Z.onWaitToTestComplete(this.id,this.isCodeMode);let g=y=>{throw e.onCompletedCleanup(),gt.warn("on browser closed error detected",{err:y,testResultId:r,executionId:n,testId:o}),m.unregisterToClosedBrowser(g),y.type=tn.BROWSER_CLOSED,y};m.registerToClosedBrowser(g);try{let y=await re(e.onCompleted(),this.testRunTimeout,Ue.TEST_COMPLETE_TIMEOUT_MSG);m.unregisterToClosedBrowser(g),this.lambdatestService.isLambdatestRun()&&await m.executeJS(`lambda-status=${y.success?"passed":"failed"}`).catch(()=>{}),m.isAlive()||(gt.warn(`possible grid unresponsive for test ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`),y.gridIssues="could not validate grid is alive");let w=m.maxKeepAliveGap();return w>=3e4&&(gt.warn(`possible browser keep alive issue ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`),y.keepAliveIssue=w),{...y,...e.seleniumPerfStats.getStats()}}catch(y){throw gt.warn("timeout wait until test completed",{err:y,testResultId:r,executionId:n,testId:o}),new Error(y)}finally{m.unregisterToClosedBrowser(g)}}catch(h){throw gt.warn("failed to start url",{err:h}),new Error(h)}};t.driver.start();try{return await super.runTestOnce(e,t),N("WorkerExtension super.runTestOnce"),await u()}catch(d){throw gt.error("failed to run test",{err:d,testId:e.testId,resultId:e.testResultId}),d}}}});var Sb={};$(Sb,{WorkerExtensionSingleBrowser:()=>Nd});var eI,tI,Nd,Rb=T(()=>{"use strict";Le();F();j();Id();Ft();Ld();eI=x("base-worker"),tI=500,Nd=class extends Jn{async _releasePlayer(){if(!this.testPlayer)return;let{projectId:t}=this.userData||{};await zn(this.id,this.releaseSlotOnTestFinished,t,this.testPlayer),this.testPlayer=null}onQueueCompleted(){return this._releasePlayer()}async getBrowserOnce(t,r,n,o){return Z.onGetSession(this.id,`worker ${this.id}`,t.runMode),this._getBrowserOnce(t,r,n,o)}async getTestPlayer(t,r){return this.testPlayer&&!this.testPlayer.driver.isAlive()&&(eI.warn("WorkerExtensionSingleBrowser is releasing a dead player",{workerId:this.id}),await this._releasePlayer()),this.testPlayer||(this.testPlayer=await super.getTestPlayer(t,r)),this.testPlayer}async runTest(t,r,n){let o=this.handleQuarantine(t);if(o)return o;N("before runTest onTestStarted single browser");let i=await this.onTestStarted(this.id,t.testId,t.testResultId,n,t.retryKey);t.baseUrl=i.config.baseUrl;let a=await this.getTestPlayer(t,r);return t.markClearBrowser(),await this.runTestOnce(t,a)}async runTestCleanup(){var t;if(!this.executionQueue.hasMoreTests()){await this.onQueueCompleted();return}(t=this.options.lightweightMode)!=null&&t.general&&await ie(tI)}}});function rI(s,e){e===0?s():setTimeout(s,e*Ja)}var VL,Dd,Ca,Ib=T(()=>{"use strict";VL=E(Dn());F();le();Le();yu();Et();Uu();z();j();ae();nb();Dd=x("parallel-worker-manager"),Ca=class{constructor(e){this.customExtensionLocalLocation=e}getWorkerType(e){switch(e){case Q.SELENIUM:return(lb(),G(cb)).WorkerSelenium;case Q.APPIUM:return(gb(),G(hb)).WorkerAppium;default:return Pi.isFeatureAvailableForProject("useSameBrowserForMultiTests")?(Rb(),G(Sb)).WorkerExtensionSingleBrowser:(Ld(),G(Eb)).WorkerExtension}}createWorkers(e,t,r,...n){let o=this.getWorkerType(r),i=()=>{try{return N("before new Worker",r),new o(t,...n)}finally{N("after new Worker",r)}};return Array.from(new Array(e),i)}async runTests(e,t,r,n,o,i,a,c,u){if(e&&e.length===0)return;let d=!1,m=0,p=f=>new Promise(h=>{var Pt,Xr,A,O,U,q;let g=o.project,y=new ya(r,n,e,o,i,t),w={},P=e.length,b=(Pt=o.company)==null?void 0:Pt.companyId,v=(Xr=o.company)==null?void 0:Xr.name,I=o.source||"cli",k=o.user,D=(A=o.company)==null?void 0:A.planType,S=(O=o.company)==null?void 0:O.isStartUp,_=(U=o.projectData)==null?void 0:U.name,C=(q=o.projectData)==null?void 0:q.type,L=o.lightweightMode,B=Er(o),V=(me,Xe,we,Ma,Xn,Ua)=>(m++,dh({executionId:r,projectId:g,testId:Xe,resultId:we,companyId:b,companyName:v,projectName:_,companyPlan:D,sessionType:B,source:I,user:k,lightweightMode:L,isStartUp:S,projectType:C,appSource:Ua}),t.testStartAndReport(me,r,we,Ma,Xn)),Y=async(me,Xe,we,Ma,Xn,Ua)=>{var Vd,Hd,zd;m--;let yt={...(L==null?void 0:L.onlyTestIdsNoSuite)&&{show:!0},...we.seleniumStats&&{seleniumStats:we.seleniumStats},...we.gridIssues&&{gridIssues:we.gridIssues},...we.keepAliveIssue&&{keepAliveIssue:we.keepAliveIssue},...o.host&&{gridHost:o.host}};if(we.seleniumPerfMarks&&(t.concatSeleniumPerfMarks(we.seleniumPerfMarks),delete we.seleniumPerfMarks),o.grid||o.gridId?(yt.gridName=o.grid||((Vd=o.gridData)==null?void 0:Vd.name),yt.gridType=(Hd=o.gridData)==null?void 0:Hd.type,yt.gridProvider=(zd=o.gridData)==null?void 0:zd.provider):o.useLocalChromeDriver?(yt.gridName="local-chrome-driver-from-options",yt.gridType="local-chrome"):o.useChromeLauncher?(yt.gridName="chrome-launcher-from-options",yt.gridType="local-chrome"):o.browserstack?yt.gridName="browserstack-from-options":o.saucelabs&&(yt.gridName="saucelabs-from-options"),await t.testEndAndReport(me,we,r,Ma,Xn,yt).catch(Pw=>Dd.error("testEndAndReport threw an error",{err:Pw})),Xn)return;w[we.resultId]=we,ph({executionId:r,projectId:g,testId:Xe,resultId:we.resultId,result:we,companyId:b,companyName:v,projectName:_,companyPlan:D,sessionType:B,source:I,user:k,lightweightMode:L,logger:Dd,isStartUp:S,projectType:C,appSource:Ua}),u&&!we.success&&(y.stop(),d=!0),(Object.keys(w).length===P||d&&m===0)&&h(w)},ee=(me,Xe)=>{w[Xe.resultId]=Xe,t.onTestIgnored(me,Xe.resultId),m--,(Object.keys(w).length===P||d&&m===0)&&h(w)},fe=(me,Xe)=>t.onGridSlot(me,Xe);o.userData={loginData:Object.assign({},Dt(),{refreshToken:_o(),authData:Dt(),token:f}),projectId:o.project,company:o.company,servicesUrl:he},N("in localStrategy before createWorker"),this.createWorkers(c,y,o.mode,o,this.customExtensionLocalLocation,r,V,Y,fe,ee).forEach((me,Xe)=>{N("before schedule worker.run after createWorkers"),rI(()=>{N("right before worker.run"),me.run()},Xe)})});try{let f=await Ht(),h=await p(f);if(d)throw new At;return h}catch(f){throw Dd.error("failed running parallel workers",{executionId:r,err:f}),f}}}});var Pa,xb=T(()=>{"use strict";Ui();Pa=class extends Wr{init(e){return super.initNewSocket(e,"real-data")}emitJoinRoom(e,t){this._socket.emit("testResult:listen",{query:`projectId=${t}&runId=${e}`})}joinToTestResultsByRunId(e,t){this.joinRoom(e,t),this.emitJoinRoom(e,t)}stopListenToTestResultsByRunId(e){this.leaveRoom(e),this._socket.emit("testResult:listen:stop",{})}listenToTestResultsByRunId(e){function t(r){e(r.data)}this._socket.on("testResult:changes",t.bind(this))}}});var Md,Ud,Aa,Cb=T(()=>{"use strict";Un();ae();be();xb();({TEST_RESULT_CREATED:Md,TEST_RESULT_UPDATED:Ud}=Qe),Aa=class{constructor(){M.flags.useNewWSCLI.isEnabled()||(this.realDataServiceSocketIO=new Pa)}init(e){return M.flags.useNewWSCLI.isEnabled()?Promise.resolve():this.realDataServiceSocketIO.init(e)}joinToTestResultsByRunId(e,t){if(M.flags.useNewWSCLI.isEnabled())return Fe.addFilter(e,{runId:e},[Ud,Md],!0);this.realDataServiceSocketIO.joinToTestResultsByRunId(e,t)}stopListenToTestResultsByRunId(e){if(M.flags.useNewWSCLI.isEnabled()){Fe.removeFilter(e,[Ud,Md]);return}this.realDataServiceSocketIO.stopListenToTestResultsByRunId(e)}listenToTestResultsByRunId(e,t){if(M.flags.useNewWSCLI.isEnabled()){Fe.listenTo(e,[Ud,Md],r=>r.runId===e,r=>t(r));return}this.realDataServiceSocketIO.listenToTestResultsByRunId(t)}}});async function kb(s,e){var t;if((t=s.lightweightMode)!=null&&t.onlyTestIdsNoSuite&&s.testId)return{tests:[s.testId.map(n=>({testId:n,testConfig:{},resultId:K()}))]};if(s.files.length>0){let{buildCodeTests:r}=await Promise.resolve().then(()=>(dd(),Cy)),n={};if(s.webpackConfig){let o=Ab.join(process.cwd(),s.webpackConfig);n=require(o)}return r(s.files,n,{baseUrl:s.baseUrl})}return await el({projectId:s.project,labels:s.label,testIds:s.testId,testNames:s.name,testConfigNames:s.testConfigNames,suiteNames:s.suites,suiteIds:s.suiteIds,branch:e,rerunFailedByRunId:s.rerunFailedByRunId,testConfigIds:s.testConfigIds,intersections:s.intersections})}function Fd(s){let e=Object.keys(s).length,t=Object.keys(s).reduce((r,n)=>r+(s[n].success===!0?1:0),0);return e===t}async function jd(s,e){let t=s.mode==="extension"?["edge-chromium","chrome"]:["firefox","chrome","edge-chromium","safari","safari technology preview","browser","android","ios","iphone","ipad"],r=Pb.difference(rn(s,e),t);if(r.length>0)throw pt("invalid-config-run",{browser:r.join(", "),mode:"runner"}),new R(`browser type <${r}> is not supported in ${s.mode} mode.`);return e}var Pb,Ab,_b=T(()=>{"use strict";Pb=E(require("lodash")),Ab=E(require("path"));F();ms();Te();z()});var zr,Ob,sI,ka,nI,_a,Lb=T(()=>{"use strict";zr=E(require("lodash"));F();j();le();ae();Le();bs();eu();yu();Te();Et();Ft();Ph();z();Ib();Cb();_b();({testRunStatus:Ob,CLI_MODE:sI}=Lt),ka=x("test-plan-runner"),nI=1e3*60*5,_a=class{constructor(e){this.startTime=Date.now();this.workerManager=new Ca(e)}async runTestAllPhases(e,t,r,n,o,i,a,c){let u={},d=Dt(),m=async()=>{let y=o.beforeParallel||1,w=!0,P=await this.workerManager.runTests(e,c,i,a,o,n,d,y,w);Object.assign(u,P)},p=async()=>{let y=Js||o.parallel,w=!1;N("right before this.workerManager.runTests");let P=await this.workerManager.runTests(t,c,i,a,o,n,d,y,w);N("right after this.workerManager.runTests"),Object.assign(u,P)},f=async()=>{let y=o.afterParallel||1,w=!1,P=await this.workerManager.runTests(r,c,i,a,o,n,d,y,w);Object.assign(u,P)},h=Er(o);mh({executionId:i,projectId:o.project,sessionType:h}),N("right before runBeforeTests");try{return await m(),N("right before runTestPlanTests"),await p(),N("right after runTestPlanTests"),await f(),u}catch(y){if(ka.error("error running test plan",{err:y}),y instanceof At)return c.markAllQueuedTests(i,pe.ABORTED,"aborted",!1);throw y}finally{await g()}async function g(){var w,P,b,v;if((w=o.lightweightMode)!=null&&w.disablePixelValidation)return;if(o.mode===sI.SELENIUM){let{EyeSdkBuilder:I}=(await Promise.resolve().then(()=>(Ee(),kr))).getSessionPlayer();await I.closeBatch(i);return}let y;try{if(!((v=(b=(P=o.company)==null?void 0:P.activePlan)==null?void 0:b.premiumFeatures)!=null&&v.applitools)||(y=await yl(o.project),zr.default.isEmpty(y)||!i))return;let{runKey:I,url:k}=y;await require("@applitools/eyes-sdk-core").makeSDK({name:"Testim.io",version:"4.0.0",spec:{}}).closeBatches({settings:{batchIds:[i],serverUrl:k,apiKey:I}})}catch{}}}async initRealDataService(e){let t=new Aa;return await t.init(e),t}async listenToTestCreatedInFile(e,t,r,n){let o={};e.joinToTestResultsByRunId(r,t);let i=!0;return await new Promise(c=>{let u=d=>{i=!1,c(d)};e.listenToTestResultsByRunId(r,d=>{let m=d.id;if(!n.getTestResult(m)){let h=o[m],g=zr.default.merge({},h,d,{resultId:m});if(o[m]=g,!h||h.status!==d.status){let w=(n.getTestResult(g.parentResultId)||{workerId:1}).workerId;[Ob.RUNNING].includes(d.status)&&Z.onTestStarted(g,w),[Ob.COMPLETED].includes(d.status)&&(g.duration=g.endTime-g.startTime||0,Z.onTestFinished(g,w))}}let p=!Object.values(o).some(h=>["QUEUED","RUNNING"].includes(h.runnerStatus)),f=!Object.values(n.getAllTestResults()).some(h=>["QUEUED","RUNNING"].includes(h.status));if(p&&f)return u(Object.values(o));if(f&&!p)return ie(1e4).then(()=>{i&&u(o)})})})}async initRealDataServiceAndListenToTestsCreatedInFile(e,t,r){let n=await this.initRealDataService(e);return this.listenToTestCreatedInFile(n,e,t,r)}async runTestPlan(e,t,r,n,o,i,a,c){var k,D,S;let u=K(),d=n.project;oc(u),e.forEach(_=>Object.assign(_,{isBeforeTestPlan:!0})),r.forEach(_=>Object.assign(_,{isAfterTestPlan:!0}));let m=[...e,...t,...r],p=new vi(m,n,i,a),f=zr.default.chain(m).map(_=>{var C;return((C=_.overrideTestConfig)==null?void 0:C.name)||""}).uniq().compact().value(),h=(f==null?void 0:f.length)===1?f[0]:null,g=n.files.length>0,y=(k=n.lightweightMode)!=null&&k.onlyTestIdsNoSuite?[]:m.map(_=>_.name),w=(D=n.lightweightMode)!=null&&D.onlyTestIdsNoSuite?{beforeTests:e,tests:t,afterTests:r}:p.executionStart(u,d,this.startTime,o,y),P;g&&(P=this.initRealDataServiceAndListenToTestsCreatedInFile(d,u,p)),N("before testListInfoPromise");let b=await w;(S=n.lightweightMode)!=null&&S.onlyTestIdsNoSuite||Z.onTestPlanStarted(b.beforeTests,b.tests,b.afterTests,o,u,c,h,g),N("before runTestAllPhases");let v=await this.runTestAllPhases(b.beforeTests,b.tests,b.afterTests,a,n,u,o||"All Tests",p),I=await re(P,nI).catch(async()=>{var C;ka.warn("timed out waiting for child results on websocket. using REST fallback",{projectId:d,executionId:u});let _=await bn(d,"testResult",`runId=${u}&sort=runOrder`);return zr.default.chain(((C=_==null?void 0:_.data)==null?void 0:C.docs)||[]).groupBy("parentResultId").omit("undefined").values().flatten().value()});return N("before executionEnd"),await p.executionEnd(u),N("after executionEnd"),{results:v,executionId:u,testPlanName:o,configName:h,childTestResults:I}}async runTestPlans(e,t){ka.info("start to run test plan",{options:Object.assign({},e,{token:void 0,userParamsData:void 0}),branchToUse:t});function r(d){return zr.default.flattenDeep(Object.values(d)).reduce((m,p)=>m.concat(p.beforeTests,p.tests,p.afterTests),[])}let n={},o={},i=e.project,a=await Zc(i,e.testPlan,e.testPlanIds,t,e.intersections),c=a.testPlans,u=a.testPlansData;if(!c||c.length===0)throw new R(`no test plan to run ${e.testPlan}`);if(!u||Object.keys(u).length===0){if(e.passZeroTests)return[];throw new R(`no test to run in test plan ${e.testPlan}`)}return await jd(e,r(u)),await de(c,async d=>{let m=d.testPlanId;n[m]={};let p=Object.assign({},e);p.baseUrl=e.baseUrl||d.startUrl,p.host=e.host,p.port=e.port,p.gridId=e.gridId||d.gridId,e.grid&&delete p.gridId,p.gridData=await zf(e,d);let f=p.overrideExecutionName||d.name;return await de(u[m],async h=>{let g=await this.runTestPlan(h.beforeTests,h.tests,h.afterTests,p,f,m,t),y=e.files.length>0;Z.onTestPlanFinished(g.results,d.name,this.startTime,g.executionId,!1,y,g.childTestResults),n[m][g.executionId]=g.results;let w=Object.keys(n[m]).map(I=>({executionId:I,status:Fd(n[m][I])})),P=Object.keys(n[m]).map(I=>n[m][I]).reduce((I,k)=>Object.assign(I,k),{}),b=Fd(P);Object.assign(o,P);let v=b?w[0].executionId:w.find(I=>!I.status).executionId;return await Xc(i,m,{success:b,executions:w,executionId:v}),g})})}async runAnonymousTestPlan(e,t){var a;ka.info("start to run anonymous",{options:Object.assign({},e,{token:void 0}),branchToUse:t}),N("before getSuite");let r=await kb(e,t);if(N("after getSuite"),!((a=r==null?void 0:r.tests[0])!=null&&a.length)){if(e.rerunFailedByRunId)throw new R("No failed tests found in the provided run");if(e.passZeroTests)return[];throw new R("No tests to run")}t="branch"in r&&r.branch||t;let n=r;if(e.rerunFailedByRunId&&!n.runName){if(!n.runExists)throw new R("Invalid run ID - no such run.");n.runName===""&&(n.runName=`rerun-${e.rerunFailedByRunId}`)}let o=e.overrideExecutionName||n.runName||[].concat(e.label,e.name,e.suites).join(" "),i=!0;return N("Right before validateConfig + runAnonymousTestPlan tests map"),await de(r.tests,async c=>{if(e.resultId){let m=c[0];m.resultId=e.resultId,c=[m]}await jd(e,c),N("right before runTestPlan");let u=await this.runTestPlan([],c,[],e,o,null,t,i);N("right after runTestPlan");let d=e.files.length>0;return await Z.onTestPlanFinished(u.results,o,this.startTime,u.executionId,i,d,u.childTestResults),u})}async run(e){let t=Pn(),r=[];sn(e)?r=await this.runTestPlans(e,t):r=await this.runAnonymousTestPlan(e,t);let n=zr.default.flattenDeep(r);return N("right before onAllTestPlansFinished"),await Z.onAllTestPlansFinished(n),N("right after onAllTestPlansFinished"),n.map(o=>o.results).reduce((o,i)=>Object.assign(o,i),{})}}});var Db={};$(Db,{init:()=>RI,run:()=>EI});function iI(s){if(!Bd.get(s,"company.activePlan.premiumFeatures.allowCLI")){let t=s.project;ps(s.authData.uid,"cli-not-supported",{projectId:t}),console.warn("Testim CLI is not supported in this plan")}}async function aI(s){let e=s.project,t=await rl(e);if(t!=null&&t.isExecutionBlocked)throw console.error("You have reached the limit of runs for the billing month, please upgrade your plan at https://www.testim.io/upgrade-contact-us?source=cli"),ps(s.authData.uid,"execution-quota-surpassed",{projectId:e}),new Zr}function cI(s,e){var i,a,c,u;let t=s.parallel||1,r=((a=(i=e.activePlan)==null?void 0:i.premiumFeatures)==null?void 0:a.concurrency)||1;if(t>r)throw new R(`Cannot run with parallel ${s.parallel}. Max parallel value is ${r}`);let n=s.retentionDays;if(!n)return;let o=(u=(c=e.activePlan)==null?void 0:c.premiumFeatures)==null?void 0:u.resultRetention;if(n>o)throw new R(`Retention days (${n}) cannot be greater than the company's retention days (${o}). Run aborted`)}async function lI(s){var e;if(!((e=s.lightweightMode)!=null&&e.disableQuotaBlocking))try{await Promise.all([aI(s),iI(s)])}catch(t){if([R,Zr].some(r=>t instanceof r))throw t;oI.error("could not validate cli account",{err:t})}}function uI(s){let e=Dt();return Hm({userId:e.uid,name:e.uid,traits:{projectId:s,company:{id:s,lastCIRun:Math.floor(Date.now()/1e3)}}})}async function dI(s,{disableResults:e=!1,disableRemoteStep:t=!1}){if(M.flags.useNewWSCLI.isEnabled()&&!e&&!t)return Fe.connect(s);if(!t){let{remoteStepService:r}=await Promise.resolve().then(()=>(ha(),Yy));await r.init(s)}if(!e){let{testResultService:r}=await Promise.resolve().then(()=>(Os(),yg));r.init(s)}}function pI(s,e){let{branch:t,autoDetect:r}=s;if(Yf(e,r),!e&&!r)throw new R(`branch ${t} does not exist, run aborted.`)}async function mI(s){let{project:e}=s,t=Pn();Bd.get(s,"company.activePlan.premiumFeatures.ttaForSalesforce")&&(s.sfdcCredential=await Kc({projectId:e,branch:t}))}function fI(s,e){let{onprem:t,id:r,storageBaseUrl:n,storageType:o,name:i,activePlan:a={}}=e;if(t){let{mode:m,extensionPath:p,ext:f,playerPath:h}=s;if([Q.SELENIUM].includes(m)&&!h)throw new R("in selenium on prem mode --player-path must be provided");if(m==="extension"&&!p&&!f)throw new R("In extension on prem mode --ext or --extension-path must be provided")}let c=Boolean(a.isPoc),u=Boolean(a.isStartUp),d=Cc(a);d==="free"&&(s.newBrowserWaitTimeout=s.newBrowserWaitTimeout<Nb?Nb:s.newBrowserWaitTimeout),M.setCompanyId(r),M.setIsPOC(c),M.setIsStartUp(u),M.setPlanType(d),Rt.setPlanType(d),s.company={companyId:r,onprem:t,storageBaseUrl:n,storageType:o,name:i,planType:d,isPOC:c,isStartUp:u,activePlan:a}}function hI(s,e){if(dr){s.editorUrl=dr;return}s.editorUrl=e.editorUrl}function gI(s,e){s.allGrids=e}function yI(s,e){s.authData=e}function bI(s,e){let{id:t,name:r,type:n,defaults:o}=e;M.setProjectId(t),M.setProjectType(n),s.projectData={projectId:t,type:n,name:r,defaults:o}}async function wI(s){s.gridData=await Kf(s)}async function TI(s){let{project:e}=s,t={projectId:e};s.overrideMappingFile&&(pt("user-override-file",t),s.mockNetworkRules=await Nm(s.overrideMappingFile))}async function vI(s,e){N("in runner.js runRunner");let{project:t,remoteRunId:r,useLocalChromeDriver:n,useChromeLauncher:o}=s;r||(s.source=n||o?"cli-local":"cli"),await Ef(),N("in runner.js after checkNpmVersion"),await lI(s),N("in runRunner before tunnel.connect"),await si(s),N("in runRunner after tunnel.connect");let a=await new _a(e).run(s);return N("before tunnel.disconnect"),await ni(s),await xn.end(t),N("after tunnel.disconnect and gridService.keepAlive.end"),a}function SI(s){var e;Rt.shouldShowFreeGridRunWarning((e=s.gridData)==null?void 0:e.type)&&console.log(`
562
+ `;t+="};",await rt.promises.writeFile(s,t)}async function hd(s,{mergeIntoExisting:e}={mergeIntoExisting:!1}){let t=await Vr(process.cwd()),r=Je.join(t,"locators","locators.js");await rt.promises.mkdir(Je.join(t,"locators")).catch(()=>{});for(let{name:o,id:i,elementLocator:a}of s)await rt.promises.writeFile(Je.join(t,"locators",`locator.${i}.json`),JSON.stringify({name:o,id:i,elementLocator:a}));let n=Object.fromEntries(s.map(({name:o,id:i})=>[o,i]));if(e){let o=await qn();Object.assign(n,o)}await Cy(r,n)}async function gd({fileSystem:s,bypassWebpack:e}={},t=void 0){let r=await Vr(process.cwd());if(t!=null&&t.aborted)throw new Me;let n=Je.join(r,"functions.js");if(e!=null&&e.testim){let i=require("module"),a=i.prototype.require;i.prototype.require=function(l){return l==="testim"?e.testim:a.apply(this,arguments)};try{return delete require.cache[require.resolve(n)],require(n)}finally{i.prototype.require=a}}return(await ud([n],{output:{libraryTarget:"umd",library:"tdk",globalObject:"globalThis"},cache:{type:"memory"},mode:"development"},{},s,t)).tests[0][0].code}var Py,Je,rt,Vr,yd=T(()=>{"use strict";Py=E(require("lodash")),Je=E(require("path")),rt=require("fs");z();dd();Vr=Py.memoize(async s=>(await rt.promises.readdir(s)).includes("tests")&&(await rt.promises.stat(Je.join(s,"tests"))).isDirectory()?Je.join(s,"tests"):s)});var ky={};$(ky,{getArgumentsFromContext:()=>Hr});async function Hr(s,e,t){let r=yR(s.parameterNames.map(n=>n.displayName),e.incomingParams.as);return await Promise.all(r.map(n=>typeof n=="object"&&n.locatedElement?t(n):n))}function yR(s,e){let t=[];for(let r of s){let n=e.functionParameters.indexOf(r);t.push(e.functionArguments[n])}return t}var Vn=T(()=>{"use strict"});var Oy={};$(Oy,{execute:()=>TR});async function vR(s,e,t,r,n,o){var a;let i;try{let{WebDriver:c}=await bR("selenium-webdriver");if(o.aborted)throw new _y;let{Executor:l,HttpClient:d}=require("selenium-webdriver/http"),m=s.driver.client.requestHandler.defaultOptions,p=s.driver.client.requestHandler.startPath,h=`${m.protocol}://${m.hostname}:${m.port}`+p,g=new d(h),y=new c(s.getSessionId(),new l(g));await ER(y,s.driver);let C=await wR(t,r,v=>y.findElement({css:v.selector})),b=e.bind(null,y,...C);return i=function(){g.send=async function(){throw new _y}},o.addEventListener("abort",i),await b(),{success:!0}}catch(c){return o.aborted?{success:!1,shouldRetry:!1,reason:"aborted"}:{success:!1,shouldRetry:!1,reason:(c==null?void 0:c.message)||c,extraInfo:(a=c==null?void 0:c.constructor)==null?void 0:a.name}}finally{i&&o.removeEventListener("abort",i)}}async function ER(s,e){if(e.cdpUrl){let t=await s.getAllWindowHandles();for(let r of t)if(await s.switchTo().window(r),await s.executeScript("return window.__isMainTestimTab"))break}}var _y,bR,wR,TR,Ly=T(()=>{"use strict";({AbortError:_y}=(z(),G(uc))),{lazyRequire:bR}=(ft(),G($l)),{getArgumentsFromContext:wR}=(Vn(),G(ky)),TR=vR});var Ny={};$(Ny,{execute:()=>SR});async function RR(s,e,t,r,n,o){var a;let i;try{let c=await ge("puppeteer");if(o.aborted)throw new Me;let l=await c.connect({browserWSEndpoint:s.driver.cdpUrl,defaultViewport:null,product:"chrome"});if(o.aborted)throw l.disconnect(),new Me;i=function(){l.disconnect()},o.addEventListener("abort",i);let d=await l.pages(),m;for(let y of d)if(await y.evaluate(()=>window.__isMainTestimTab)){m=y;break}let p=m||d.at(-1),h=await Hr(t,r,y=>p.$(y.selector));return await e.bind(null,p,...h)(),{success:!0}}catch(c){return o.aborted?{success:!1,shouldRetry:!1,reason:"aborted"}:{success:!1,shouldRetry:!1,reason:(c==null?void 0:c.message)||c,extraInfo:(a=c==null?void 0:c.constructor)==null?void 0:a.name}}finally{o.removeEventListener("abort",i)}}var SR,Dy=T(()=>{"use strict";z();ft();Vn();SR=RR});var My={};$(My,{execute:()=>IR});async function xR(s,e,t,r,n,o){var a;let i;try{let c=await ge("playwright");if(o.aborted)throw new Me;let l=await c.chromium.connect({wsEndpoint:s.driver.cdpUrl});if(o.aborted)throw l.disconnect(),new Me;i=function(){l.disconnect()},o.addEventListener("abort",i);let p=(await(await l.newContext({viewport:null})).pages()).at(-1),h=await Hr(t,r,y=>p.$(y.selector));return await e.bind(null,p,...h)(),{success:!0}}catch(c){return o.aborted?{success:!1,shouldRetry:!1,reason:"aborted"}:{success:!1,reason:(c==null?void 0:c.message)||c,extraInfo:(a=c==null?void 0:c.constructor)==null?void 0:a.name}}finally{i&&o.removeEventListener("abort",i)}}var IR,Uy=T(()=>{"use strict";z();ft();Vn();IR=xR});var jy={};$(jy,{execute:()=>PR});async function CR(s,e,t,r,n,o,i,a){function c(){s.sessionPlayer.stopPlaying()}a.addEventListener("abort",c);function l(P){if(o.parameterValues){let L=o.parameterValues.find(B=>B.type==="locate"&&B.id===P.locatorId);return{elementLocator:L.elementLocator,id:L.id,name:"Hybrid Step Locator"}}return P.locatedElement.shadowPath?P.locatedElement.shadowPath[0]:P}let d=await Hr(o,t,l),m=e.bind(null,...d),p=K(),f=K(),h=t.testResultId,g=t.config.baseUrl,y=Fy.cloneDeep(t);y.loginData=r;let C=se().manifestVersion||"runner",b=!1,v=null,I="master",k=`Execute TDK Function '${o.functionName}'`,D=!0,S={fn:m,bypassSetup:!0,isBeforeOrAfterTest:!0,name:k,sourceCode:m.toString(),sourceName:m.name,testId:p,resultId:K()},_=typeof e.results=="boolean"&&!e.results;try{N("tdkHybridStepPlayback before addAllTabs"),n?(s.sessionPlayer.playbackAutUtils.frameManager=n,s.sessionPlayer.frameManager=n):await s.addAllTabs(null,{loadInfo:!0,checkForMainTab:!0,takeScreenshots:!_},[s.driver.initialUrl]),s.sessionPlayer.playbackManager.dontAssociateChildResult=!0,s.sessionPlayer.playbackManager.onlyLocalReporting=_,N("tdkHybridStepPlayback before playTestByCode");let P=await new Promise((L,B)=>{i==="agent"&&AR(s,L);function V(){B(new Me),a.removeEventListener("abort",V)}a.addEventListener("abort",V),s.sessionPlayer.playTestByCode(p,f,h,g,y,C,L,b,v,I,[S],k,D).catch(B)});return N("tdkHybridStepPlayback after playTestByCode"),{success:P.success,shouldRetry:!1,resultInfo:{testId:p,executionId:f,resultId:S.resultId}}}catch(P){return{success:!1,error:P,shouldRetry:!1}}finally{a.removeEventListener("abort",c)}}function AR(s,e){let{commonConstants:t}=se();s.sessionPlayer.playbackManager.on(t.playback.START,({testResult:r})=>{let n=r.runnerStatus;Object.defineProperty(r,"runnerStatus",{get(){return n},set(o){n=o,o==="FINISHED"&&e(r)}})})}var Fy,PR,By=T(()=>{"use strict";Fy=E(require("lodash"));Le();F();z();Vn();Ee();PR=CR});var fa={};$(fa,{abort:()=>Td,execute:()=>Ns,run:()=>OR});async function Ns(s,e,t,r,n,o="cli"){let i=new Wy.AbortController,{signal:a}=i;wd.set(e.stepResultId,i);try{N("before seleniumTestPlayer require");let{SeleniumTestPlayer:c}=(pa(),G(ld)),{compileFunctionsLibrary:l}=(yd(),G(Ay)),{functionName:d}=s,m={},p=!1,f=new c(e.id,m,p,Ot.CODEFUL,t);bd=f.sessionPlayer.codeSessionPlayer.proxy;let h=s.bypassWebpack?{testim:bd.wrappedSteps()}:!1;N("before compileFunctionsLibrary",{bypassWebpack:Boolean(s.bypassWebpack)});let g;try{g=await l({fileSystem:kR,bypassWebpack:h},a)}catch(w){return{success:!1,shouldRetry:!1,reason:`Unable to compile functions library. ${w.message}`,extraInfo:w.stack}}typeof globalThis>"u"&&(global.globalThis=process);let y;if(h?y=g[d]:(global.globalThis.__testim=bd.wrappedSteps(),(0,eval)(g),y=globalThis.tdk[d]),N("after hybridFunction obtain and eval"),!y)return{success:!1,shouldRetry:!1,reason:`Could not find function '${d}' locally. Please make sure you have a functions.js file with a '${d}' function defined`,extraInfo:Object.keys(globalThis.tdk)};if(y.type==="selenium"){let w=(Ly(),G(Oy)).execute;return await w(f,y,s,e,o,a)}if(y.type==="puppeteer"){if(!f.driver.cdpUrl)return{success:!1,shouldRetry:!1,reason:"running puppeteer code requires the remote debugging protocol to be open. Please contact Testim support."};N("before puppeteerPlayback");let w=(Dy(),G(Ny)).execute;try{return await w(f,y,s,e,o,a)}finally{N("after puppeteerPlayback")}}if(y.type==="playwright"){if(!f.driver.cdpUrl)return{success:!1,shouldRetry:!1,reason:"running playwright code requires the remote debugging protocol to be open. Please contact Testim support."};let w=(Uy(),G(My)).execute;return await w(f,y,s,e,o,a)}if(y.type==="tdk"||!y.type){let w=(By(),G(jy)).execute;N("before tdkPlayback");try{return await w(f,y,e,r,n,s,o,a)}finally{N("after tdkPlayback")}}return{success:!1,shouldRetry:!1,reason:`unknown hybrid format ${y.type}`}}catch(c){_R.info("error running hybrid step",{err:c});return}finally{wd.delete(e.stepResultId)}}function Td(s){let e=wd.get(s);if(e)e.abort();else throw new Error("No such stepResultId")}var $y,Wy,kR,_R,wd,bd,OR,ia=T(()=>{"use strict";$y=E(require("memory-fs"));Le();Wy=require("abort-controller");j();ae();kR=new $y.default,_R=x("hybrid-step-playback"),wd=new Map,OR=(s,e,t,r)=>{let{step:n,context:o}=e.data;return Ns(n,o,s,r.loginData)}});var vd={};$(vd,{run:()=>LR});var LR,Gy=T(()=>{"use strict";F();$r();z();LR=async(s,e)=>{let{stepId:t,testResultId:r,retryIndex:n,stepResultId:o,packageData:i,timeout:a}=e.data;try{return{data:await Is(t,r,n,i,o,a),success:!0}}catch(c){if(c instanceof at)return{success:!1,code:"invalid-node-package",message:c.message};if(c instanceof X)return{success:!1,code:"timeout"};throw c}}});async function Vy(s,e,t,r){try{return await fl(s,e,t,r)}catch{ha.error("failed to report remote step state",{projectId:s,resultId:e,stepId:t});return}}async function DR(s,e,t,r,n){return ha.info("finished to run remote step",{stepId:t,sessionId:n}),await Vy(s,e,t,{status:"completed",success:!0,failureReason:null,data:r})}async function qy(s,e,t,r,n){return ha.info("failed to run remote step",{stepId:t,sessionId:n,failureReason:r}),await Vy(s,e,t,{status:"completed",success:!1,failureReason:r})}async function Hy(s,e,t,r){if(!(t!=null&&t.type)||t.status==="completed")return;let{project:n,projectData:o,userData:i}=s,a=t.type,c=e.getSessionId(),l=t.id;ha.info("start play remote step",{stepType:a,stepId:l,sessionId:c});let d=NR[a];if(!d)return await qy(n,r,l,`Failed to find step type ${a}`,c);try{let m=await d.run(e,t,o,i);return await DR(n,r,l,m,c)}catch(m){return await qy(n,r,l,m.message,c)}}var ha,NR,zy=T(()=>{"use strict";eg();ia();Te();Gy();j();ha=x("step-playback"),NR={"cli-validation-code-step":rr,"cli-wait-for-code-step":rr,"cli-action-code-step":rr,"cli-api-code-step":rr,"cli-condition-step":rr,"cli-download-code-step":rr,"node-package":vd,"tdk-hybrid":fa}});var Ky={};$(Ky,{remoteStepServiceSocketIO:()=>UR});var Ed,UR,Jy=T(()=>{"use strict";Fi();Ed=class extends sr{constructor(){super(...arguments);this.listerers={}}init(t){super.init(t,"remoteStep"),this.listerers={}}emitJoinRoom(t){return this.emitPromise("remoteStep:join",{resultId:t})}emitLeaveRoom(t){return this.emitPromise("remoteStep:leave",{resultId:t})}joinToRemoteStep(t){return this.rooms[t]?Promise.resolve():(this.joinRoom(t),this.emitJoinRoom(t))}listenToRemoteStep(t,r){this.listerers[t]&&(this._socket.off("remoteStep:saved",this.listerers[t]),delete this.listerers[t]),this.listerers[t]=n=>{n.resultId===t&&n.remoteStep&&n.remoteStep.status==="pending"&&r(n.remoteStep)},this._socket.on("remoteStep:saved",this.listerers[t])}unlistenToRemoteStep(t){return this.listerers[t]?(this.leaveRoom(t),this._socket.off("remoteStep:saved",this.listerers[t]),delete this.listerers[t],this.emitLeaveRoom(t)):Promise.resolve()}},UR=new Ed});var Xy={};$(Xy,{remoteStepService:()=>Fs});var Sd,Hn,Rd,Fs,ga=T(()=>{"use strict";Mn();ae();be();({REMOTE_STEP_SAVED:Sd}=Qe),Rd=class{async init(e){U.flags.useNewWSCLI.isEnabled()||(Hn=(await Promise.resolve().then(()=>(Jy(),Ky))).remoteStepServiceSocketIO,Hn.init(e))}joinToRemoteStep(e){return U.flags.useNewWSCLI.isEnabled()?Fe.addFilter(`${e}:remoteStep`,{resultId:e},[Sd]):Hn.joinToRemoteStep(e)}listenToRemoteStep(e,t){if(U.flags.useNewWSCLI.isEnabled()){Fe.listenTo(`${e}:remoteStep`,[Sd],r=>r.resultId===e&&r.remoteStep&&r.remoteStep.status==="pending",r=>t(r.remoteStep));return}Hn.listenToRemoteStep(e,t)}unlistenToRemoteStep(e){return U.flags.useNewWSCLI.isEnabled()?(Fe.removeFilter(`${e}:remoteStep`,[Sd]),Promise.resolve()):Hn.unlistenToRemoteStep(e)}},Fs=new Rd});var Qy,Zy,eb,Se,FR,tb,Yy,ya,rb=T(()=>{"use strict";Qy=E(require("lodash"));F();le();Le();ms();Et();Te();zy();Zy=E(require("p-retry")),eb=require("url");j();Xo();Ts();ae();ga();Os();Se=x("test-run-handler"),FR=3,tb=20*1e3,Yy=s=>JSON.stringify(s).length<tb,ya=class{constructor(e,t,r,n,o,i){this._executionId=e;this._executionName=t;this._options=n;this._branch=o;this._testRunStatus=i;this.seleniumPerfStats=new Nr;this._totalRetryCount=1;this._retryCount=1;this._timeoutRetryCount=1;this.clearTestResultFinished=Promise.resolve(void 0);var c,l;this._testStatus=r.testStatus,this._testId=r.testId,this._testName=r.name,this._testResultId=r.resultId,this._code=r.code,this._baseUrl=n.baseUrl||r.baseUrl||r.testConfig.baseUrl,this._nativeApp=r.nativeApp,this._overrideTestConfigId=(c=r.overrideTestConfig)==null?void 0:c.id,this._maxRetryCount=n.retries,this._remoteRunId=n.remoteRunId;let a=!((l=r.runConfig)!=null&&l.isMobileWeb)&&n.browser;this._runConfig=a?on(n.browser,n.saucelabs,n.browserstack):r.runConfig}async waitForExecutionStartedFinished(){return await this._testRunStatus.waitForExecutionStartedFinished(),await this.clearTestResultFinished}get testStatus(){return this._testStatus}get runMode(){return this._options.mode}get automationMode(){return this._code?"codeful":"codeless"}get code(){return this._code}get runConfig(){return this._runConfig}get testResultId(){return this._testResultId}get baseUrl(){return this._baseUrl}set baseUrl(e){this._baseUrl=e}get executionId(){return this._executionId}get executionName(){return this._executionName}get androidActivityWait(){var n;let e=this._nativeApp&&"appMetadata"in this._nativeApp?this._nativeApp.appMetadata:this._nativeApp;if((n=e==null?void 0:e.activity)!=null&&n.includes(e.id))return`${e.id}.*`;let{activity:t}=e,r=t.split(".").pop();return t.replace(r,"*")}get getAppSource(){if(this._nativeApp)return this.nativeAppLink?"from-library":"from-device"}get nativeAppLink(){let e=null;return this._nativeApp&&"filePath"in this._nativeApp&&(e=`${he}/storage${this._nativeApp.filePath}?access_token=${this._options.authData.token}`),e}async getNativeAppData(){let{appId:e,baseUrl:t}=this._options;if(t&&!this._nativeApp&&!e){let r=t||this.baseUrl;if(!r)return null;let[n,o]=r.split(":");return{packageName:n,activity:o}}return this._nativeApp&&!e?"appMetadata"in this._nativeApp?this._nativeApp.appMetadata:this._nativeApp:null}get branch(){return this._branch}get sfdcCredential(){return this._options.sfdcCredential}get remoteRunId(){return this._remoteRunId}get overrideTestConfigId(){return this._overrideTestConfigId}markClearBrowser(){this.clearBrowser=!0}async getRunRequestParams(){var r,n;let t={tokenV3:await Ht(),refreshToken:Oo(),projectId:this._options.project,executionId:this._executionId,executionName:this._executionName,testId:this._testId,resultId:this._testResultId,baseUrl:this._baseUrl,branch:this._branch,servicesUrl:Qa,remoteRunId:this.remoteRunId,previousTestResultId:this.previousTestResultId,testRetryCount:this.retryCount,...this.code&&{isCodeMode:!0,testName:this.testName},...this._options.shouldMonitorPerformance&&{shouldMonitorPerformance:!0},...this._options.company&&{companyId:this._options.company.companyId,onprem:this._options.company.onprem,storageBaseUrl:this._options.company.storageBaseUrl,storageType:this._options.company.storageType,planType:this._options.company.planType,isPOC:this._options.company.isPOC,isStartUp:this._options.company.isStartUp},...this._options.collectCodeCoverage&&{codeCoverageUrlFilter:this._options.codeCoverageUrlFilter||`${this.baseUrl}*`},...this._options.disableMockNetwork&&{disableMockNetwork:this._options.disableMockNetwork},...this._options.lightweightMode&&{lightweightMode:this._options.lightweightMode},...this.clearBrowser&&{clearBrowser:!0},...this._options.localRCASaver&&{localRCASaver:this._options.localRCASaver},...this.sfdcCredential&&{sfdcCredential:this.sfdcCredential}};if(this._options.disableMockNetwork&&pt("user-disable-mock"),t.lightweightMode&&((r=this._options.lightweightMode)!=null&&r.general)){Object.assign(t,{company:this._options.company});let o=this.runData,i=Yy(o);Object.assign(t.lightweightMode,{isRunDataSentInUrl:i});let a=JSON.stringify(o).length,c=this.testId;i?(Object.assign(t,{runData:o}),Se.info(`Run data sent as URL param, test id: ${c} run data length: ${a}`)):Se.warn(`Run data is too big to be sent as a URL param. Test id: ${c}, run data size: ${a} (limit: ${tb} characters)`),Object.assign(t,{isLocalRun:Boolean(this._options.useLocalChromeDriver||this._options.useChromeLauncher)})}if((n=this._options.lightweightMode)!=null&&n.preloadTests&&this._options.useChromeLauncher){let o=await Sn(this._options);Object.assign(t,{preloadedTest:o[t.testId]})}return t}async getRunTestUrl(){let e=await this.getRunRequestParams(),t=`https://run.testim.io/?params=${encodeURIComponent(JSON.stringify(e))}`;return Se.info(`Test (${this.testId}) run URL length: ${t.length}`),t}set sessionId(e){this._sessionId=e}get sessionId(){return this._sessionId}get testId(){return this._testId}get testName(){return this._testName}get runParams(){var e;return((e=this._options.runParams)==null?void 0:e[this._testResultId])||{}}get runData(){return{userParamsData:this.runParams,overrideTestConfigId:this._overrideTestConfigId||null}}async clearTestResult(){var o;let e={...this.runData,...this.runMode===Q.EXTENSION&&{code:this.code},...this._options.mockNetworkRules&&{mockNetworkRules:this._options.mockNetworkRules}},t=this._timeoutRetryCount>1||this._retryCount>1;if((o=this._options.lightweightMode)!=null&&o.disableResults&&!t&&Yy(e))return;let r=async()=>{try{return await hl(this._options.project,this._testId,this._testResultId,e)}catch(i){return Se.error("failed to upload run data artifact (runner)",{err:i}),""}},n=async()=>{let i=await r();return await this._testRunStatus.waitForExecutionStartedFinished(),ml(this._options.project,this._testResultId,this._testId,{name:this._testName,resultId:this._testResultId,status:"pending",retryCount:this._retryCount,runDataUrl:i,runData:i?void 0:e,testRetryKey:this.retryKey})};return this.clearTestResultFinished=n(),this.clearTestResultFinished}hasMoreRetries(){return this._retryCount<this._maxRetryCount}get retryKey(){return`${this._retryCount}:${this._timeoutRetryCount}`}startNewRetry(){return this._retryCount++,this._timeoutRetryCount=1,this.onRetry()}async runTestUsingCDP(e){N("runTestUsingCDP");let{targetInfos:t}=await e.cdpCommand("Target.getTargets")||{targetInfos:[]},{targetId:r}=t.find(o=>o.type==="background_page"&&o.title==="Testim Editor")||{},{targetId:n}=t.find(o=>o.type==="page")||{};if(!r)throw new Error("testim extension not found");if(!n)throw new Error("AUT target not found");try{N("before Target.attachToTarget");let[o,i]=await Promise.all([e.cdpCommand("Target.attachToTarget",{targetId:r,flatten:!0}),this.getRunRequestParams()]),{sessionId:a}=o||{};N("before Runtime.evaluate"),await(0,Zy.default)(async()=>{let{result:l}=await e.cdpCommand("Runtime.evaluate",{expression:"typeof runTestimTest !== 'undefined'",returnByValue:!0},a);if(!l.value)throw new Error("runTestimTest not available on global scope")},{retries:100,minTimeout:30,factor:1}),N("after wait for runTestimTest function");let{result:c}=await e.cdpCommand("Runtime.evaluate",{expression:`runTestimTest(${JSON.stringify(i)})`,awaitPromise:!0,returnByValue:!0},a);if(c.subtype==="error")throw new Error(c.description);return N("after Runtime.evaluate"),c.value}catch(o){throw Se.error("error running test using CDP",{err:o}),new Error("Error running test using CDP")}}isRetryKeyMismatch(e){return e.testRetryKey&&e.testRetryKey!==this.retryKey}validateRunConfig(){let{baseUrl:e,runConfig:{browserValue:t}}=this;if(e&&t==="safari"){let r;try{r=new eb.URL(e)}catch{return}let{username:n,password:o}=r;if(n||o)throw new Error("Basic authentication in URL is not supported in Safari")}}onStarted(e){return new Promise(t=>{let r=!1,n=o=>{if(!r){if(this.isRetryKeyMismatch(o)){Se.warn(`ignoring result update for on started due to retry key mismatch, got ${o.testRetryKey}, current is ${this.retryKey}`,{resultId:this.testResultId,testId:this.testId});return}["running","completed"].includes(o.status)&&(o.resultId=this.testResultId,o.status==="completed"&&(Se.info("setting _wasCompletedOnStartedCheck to true",{testResult:o,resultId:this.testResultId,testId:this.testId,testRetryKey:this.retryKey}),this._wasCompletedOnStartedCheck=o),r=!0,t(o))}};if(this._options.disableSockets){let o=Date.now()+e,i=async()=>{if(Date.now()>o)return;let{testId:a,testResultId:c,branch:l,_options:{project:d}}=this;try{let m=await kr(a,c,d,l);n(m),r||setTimeout(i,3e3)}catch(m){Se.error("failed to check if done",{err:m}),setTimeout(i,3e3)}};setTimeout(i,3e3)}else Ke.listenToTestResult(this._testResultId,this._testId,n)})}async checkViaRestAPIIfTestStarted(){let{testId:e,testResultId:t,_options:{project:r},branch:n}=this;try{let o=await kr(e,t,r,n),i=["running","completed"];if(i.includes(o.status))return Se.info(`get status: ${o.status} after not get test started status`,{testId:e,testResultId:t,branch:n}),o;throw Se.error(`test not start test status: ${o.status} (expected [${i.join(", ")}])`,{testId:e,testResultId:t,branch:n}),new Error(Ue.TEST_START_TIMEOUT_MSG)}catch(o){throw Se.error("failed to get test result after test start timeout",{err:o,testId:e,testResultId:t,branch:n}),new Error(Ue.TEST_START_TIMEOUT_MSG)}}async onCompletedCleanup(){if(!this._options.disableSockets)return await Ke.leaveTestResult(this._testResultId,this._testId)}async onCompleted(){let e;try{let t=await new Promise(r=>{if(this._wasCompletedOnStartedCheck&&!this.isRetryKeyMismatch(this._wasCompletedOnStartedCheck)){Se.info("test was already completed in on started check",{resultId:this.testResultId,testId:this.testId}),r(this._wasCompletedOnStartedCheck);return}this._options.disableSockets||Ke.listenToTestResult(this._testResultId,this._testId,i=>{if(this.isRetryKeyMismatch(i)){Se.warn(`ignoring result update for on completed due to retry key mismatch, got ${i.testRetryKey}, current is ${this.retryKey}`,{resultId:this.testResultId,testId:this.testId});return}i.status==="completed"&&(i.resultId=this._testResultId,r(i))});let n=this._options.disableSockets?0:Math.floor(1e4+Math.random()*5e3),o=this._options.disableSockets?0:Math.floor(6e4+Math.random()*15e3);if(e=Qy.debounce(async()=>{try{let i=await kr(this._testId,this._testResultId,this._options.project,this.branch);return this.isRetryKeyMismatch(i)?(Se.warn(`ignoring result update for on completed (in reconnect) due to retry key mismatch, got ${i.testRetryKey}, current is ${this.retryKey}`,{resultId:this.testResultId,testId:this.testId}),!1):(i==null?void 0:i.status)==="completed"?(Se.info("Socket reconnected - Test complete",{testId:this._testId,resultId:this._testResultId,projectId:this._options.project}),i.resultId=this._testResultId,r(i),!0):!1}catch(i){return Se.warn("Error while trying to check status on socket connect",i),!1}},n,{maxWait:o}),!this._options.disableSockets)Ke.on("socket-connected",e);else{let i=()=>{setTimeout(async()=>{try{let{isComplete:a}=await sl(this._testResultId,this._options.project,this.retryKey);a?await e()||(Se.warn("onConnected returned false even though isComplete was true"),i()):i()}catch(a){Se.error("failed to check is complete",{err:a}),i()}},3e3)};i()}});return await this.onCompletedCleanup(),t}finally{e&&!this._options.disableSockets&&Ke.off("socket-connected",e)}}listenToRemoteStep(e){Fs.listenToRemoteStep(this.testResultId,t=>{Hy(this._options,e,t,this.testResultId)})}hasMoreTimeoutRetries(){let e=this._options.disableTimeoutRetry?1:FR;return this._timeoutRetryCount<e}startNewTimeoutRetry(){return this._timeoutRetryCount++,this.onRetry()}get retryCount(){return this._retryCount}get previousTestResultId(){return this._previousTestResultId}isAllowReportTestResultRetries(){var e,t,r;return Boolean((r=(t=(e=this._options.company)==null?void 0:e.activePlan)==null?void 0:t.premiumFeatures)==null?void 0:r.allowReportTestResultRetries)}async onRetry(){var e;this._previousTestResultId=this.testResultId,this.isAllowReportTestResultRetries()&&(this._totalRetryCount++,this._originalTestResultId||(this._originalTestResultId=this._previousTestResultId),this._testResultId=K(),!((e=this._options.lightweightMode)!=null&&e.onlyTestIdsNoSuite)&&await this._testRunStatus.addRetryTestResult({retryCount:this._totalRetryCount,executionId:this._executionId,projectId:this._options.project,newResultId:this._testResultId,originalTestResultId:this._originalTestResultId,previousTestResultId:this._previousTestResultId}))}}});var ba,sb=T(()=>{"use strict";rb();ba=class{constructor(e,t,r,n,o,i){this._waitingTests=r.map(a=>new ya(e,t,a,n,o,i))}stop(){this._waitingTests=[]}getNext(){let e=this._waitingTests.shift();if(e)return e}hasMoreTests(){return Boolean(this._waitingTests.length)}}});var jR,BR,zn,Id=T(()=>{"use strict";bs();j();jR=x("worker-utils"),BR=async(s,e,t)=>{e&&await Zl(s,t)},zn=async(s,e,t,r)=>{jR.info("releasing player",{hasPlayer:Boolean(r)});try{await(r==null?void 0:r.onDone())}finally{await BR(s,e,t)}}});function zR(s,e,t,r){return{testId:s,reason:r,name:e,resultId:t,success:!1}}var Cd,ib,Pd,xt,$R,nb,ob,wa,WR,xd,GR,Bt,qR,VR,HR,Pt,Ta=T(()=>{"use strict";Cd=E(require("ms")),ib=E(require("moment")),Pd=E(require("p-retry"));F();Le();bs();Te();j();Id();Ft();ri();be();ga();Os();vt();ae();z();xt=x("base-worker"),{GET_BROWSER_TIMEOUT_MSG:$R,TEST_START_TIMEOUT_MSG:nb,TEST_COMPLETE_TIMEOUT_MSG:ob}=Ue,{SETUP_TIMEOUT:wa,NETWORK_ERROR:WR,GRID_ERROR:xd,BROWSER_CLOSED:GR,SELENIUM_ERROR:Bt,UNKNOWN_ERROR:qR}=en,VR=(0,Cd.default)("1s"),HR=1;Pt=class{constructor(e,t,r,n,o,i,a,c,l=!0){this.executionQueue=e;this.options=t;this.customExtensionLocalLocation=r;this.executionId=n;this.onTestStarted=o;this.onTestCompleted=i;this.onGridSlot=a;this.onTestIgnored=c;this.releaseSlotOnTestFinished=l;this.id=Pt.getWorkerId();this.lambdatestService=new te;this.isCodeMode=t.files&&t.files.length>0,this.baseUrl=t.baseUrl,this.testRunTimeout=t.timeout,this.isRegressionBaselineRun=t.isRegressionBaselineRun,this.userData=t.userData}static getWorkerId(){return HR++}async getGridSlot(e,t){let r=await Jf(e,t.executionId,this.options,this.id);return this.onGridSlot(t.testResultId,r),r}async getSlotOnce(e){let{browserValue:t}=this.testRunConfig;return Z.onGetSlot(this.id,t||"chrome"),await this.getGridSlot(t,e)}initPlayer(e){throw new es(!0)}async getBrowserOnce(e,t,r,n){throw new es(!0)}async runTestOnce(e,t){return e.sessionId=t.getSessionId(),xt.info("Test run started",{testId:e.testId,resultId:e.testResultId,seleniumSession:t.getSessionId()}),await e.clearTestResult()}handleQuarantine(e){if(!He({testStatus:e.testStatus},this.options))return;let t={name:e.testName,testId:e.testId,resultId:e.testResultId,runnerStatus:pe.SKIPPED,testStatus:e.testStatus};return this.onTestIgnored(this.id,t),t}setSessionTimeout(){return this.options.mode===Q.APPIUM?Math.max((0,Cd.default)("180s"),this.options.getSessionTimeout):Math.max(this.lambdatestService.getSessionTimeout||0,this.options.getSessionTimeout)}async getTestPlayer(e,t){var o;let r=(o=this.userData)==null?void 0:o.projectId,n;try{N("before getSlotOnce retries");let i=0,a=await(0,Pd.default)(async()=>{let d=Date.now();try{return await re(this.getSlotOnce(e),this.options.getBrowserTimeout,Ue.GET_BROWSER_TIMEOUT_MSG)}catch(m){let p={testId:this.testId,testResultId:this.testResultId,executionId:this.executionId};throw m instanceof gr?xt.info("could not get grid slot due to concurrency issue",p):xt.error("error getting grid slot",{error:m,...p}),i++,await ie(this.options.getBrowserTimeout-(Date.now()-d)),m}},{retries:this.options.getBrowserRetries-1,minTimeout:0,factor:1});N("after getSlotOnce retries"),N("before getBrowserOnce retries");let c=this.options.getBrowserRetries-i;if(!c)throw new Error("No free browser slots in desired grid");let l=0;n=await(0,Pd.default)(async()=>{let d=Date.now(),m=this.initPlayer(e);try{a=await Xf(this.options,a,this.testRunConfig,this.lambdatestService,{maxRetries:c,currentRetry:l+1}),this.options.gridData.provider=a.provider,this.options.gridData.host=a.host,this.options.gridData.failedGetBrowserAttempts=l;let p=this.setSessionTimeout();N("before getBrowserOnce");let f=await re(this.getBrowserOnce(e,t,m,a),p,Ue.GET_BROWSER_TIMEOUT_MSG);return N("after getBrowserOnce"),Z.onGetBrowserSuccess(this.id,r),m||f}catch(p){let f={provider:a.provider,host:a.host,failedGetBrowserAttempts:l,id:this.options.gridData.gridId,type:a.type},h=this.options.mode===Q.APPIUM?"device":"browser";throw xt.error(`error getting ${h} from grid`,{error:p,testId:this.testId,testResultId:this.testResultId,executionId:this.executionId,grid:f}),Z.onGetBrowserFailure(this.id,r,++l),m.onDone(),p instanceof ot||await ie(this.options.getBrowserTimeout-(Date.now()-d)),p}},{retries:c-1,minTimeout:0,factor:1}),N("after getBrowserOnce retries")}catch(i){throw await zn(this.id,this.releaseSlotOnTestFinished,r,n),i instanceof ot?i:i instanceof it?new Wt(i,xd):new Wt(i,Bt)}return n}async runTest(e,t,r){var l;N("inside runTest");let n=(l=this.userData)==null?void 0:l.projectId,o=this.handleQuarantine(e);if(o)return o;N("before runTest onTestStarted");let i=e.getAppSource,a=await this.onTestStarted(this.id,e.testId,e.testResultId,r,e.retryKey,i);e.baseUrl=a.config.baseUrl;let c=await this.getTestPlayer(e,t);try{return await this.runTestOnce(e,c)}finally{await zn(this.id,this.releaseSlotOnTestFinished,n,c)}}async runTestCleanup(){}async onQueueCompleted(){}run(){var m,p;let e=()=>process.nextTick(()=>this.run()),t=async(f,h,g)=>{var I;if(He(f,this.options))return e();let y=h.sessionId,w=k=>g==null?void 0:g.message.includes(k),C=g&&g instanceof Wt,b=g&&(w(nb)||w(ob)),v=!f.success&&(h.hasMoreRetries()&&!C&&!b||b&&h.hasMoreTimeoutRetries());try{let k=h.retryKey;f.testRetryKey=k;let D=h.getAppSource;return await this.onTestCompleted(this.id,this.testId,f,y,v,D),this.executionQueue.hasMoreTests()&&!((I=this.options.lightweightMode)!=null&&I.general)&&await ie(VR),await this.runTestCleanup(),v?(b?await h.startNewTimeoutRetry():await h.startNewRetry(),xt.info(`retry test id: ${this.testId} name: ${this.testName} again`,{testId:this.testId,testName:this.testName,isTimeoutErrors:b,testRetryKey:k,totalRetries:h._totalRetryCount}),this.testResultId=h.testResultId,await l(h,v)):await e()}catch(k){if(k instanceof At)return;xt.error("failed to process test result",{error:k}),e();return}},r=()=>`Due to network connectivity issues, Testim CLI has been unable to connect to the grid.
563
+ Please make sure the CLI has stable access to the internet. ${bc()?"(Internal: network connectivity test failed)":""}`,n=(f,h)=>{let g=this.options.mode===Q.APPIUM?"device":"browser";if(!h&&U.flags.errorMessageOnBadNetwork.isEnabled())return{errorType:WR,reason:r()};let y=f instanceof Error?f.message:f;if(y.includes($R))return{errorType:wa,reason:`Test couldn't get ${g}`};if(y.includes(nb))return{errorType:wa,reason:"Test couldn't be started"};if(y.includes(ob)){if(!this.testRunTimeout)return{errorType:wa,reason:"Test timeout reached: test is too long"};let w=ib.default.duration(this.testRunTimeout,"milliseconds"),C=Math.floor(w.asMinutes()),b=w.seconds(),v=C>0?` ${C} min`:"",I=b>0?` ${b} sec`:"";return{errorType:wa,reason:`Test timeout reached (timeout:${v}${I}): test is too long`}}if(f instanceof Wt&&f.type){if(f.type===xd)return{errorType:xd,reason:`Test couldn't get ${g} from grid - ${f.message}`};if(f.type===Bt)return{errorType:Bt,reason:`Failed to create new session - ${f.message}`}}return"type"in f&&f.type===GR?{errorType:Bt,reason:"Session terminated, it is possible that the cli could not connect to the grid to send keep-alive requests for a prolonged period"}:"failure"in f&&f.failure instanceof hr?{errorType:Bt,reason:`Test couldn't get ${g} from grid - ${f.failure.message}`}:/SeleniumError: connect ECONNREFUSED/.test(f.message)||/Couldn't connect to selenium server/.test(f.message)?{errorType:Bt,reason:"Failed to connect to the grid, please check if the grid is accessible from your network"}:/terminated due to FORWARDING_TO_NODE_FAILED/.test(f.message)?{errorType:Bt,reason:"Session terminated, it is likely that the grid is out of memory or not responding, please try to rerun the test"}:/terminated due to PROXY_REREGISTRATION/.test(f.message)?{errorType:Bt,reason:"Session terminated, it is likely that the grid is not responding, please try to rerun the test"}:/forwarding the new session cannot find : Capabilities/.test(f.message)?{errorType:Bt,reason:`Session could not be created, please check that the ${g} you requested is supported in your plan`}:{errorType:qR,reason:y}},o=async(f,h)=>{var b;let g=await yc();!g&&U.flags.warnOnBadNetwork.isEnabled()&&console.warn(r()),xt.warn("error on run",{err:f});let y=(b=this.userData)==null?void 0:b.projectId,{errorType:w,reason:C}=n(f,g);pl(y,this.testResultId,this.testId,{status:Zs.COMPLETED,success:!1,reason:C,errorType:w,testRetryKey:h.retryKey,setupStepResult:{status:Zs.COMPLETED,success:!1,reason:C,errorType:w}},h.remoteRunId),await t(zR(this.testId,this.testName,this.testResultId,C),h,f)},i=async(f,h)=>{var b;let g=this.testId,y=this.testResultId,w=(b=this.userData)==null?void 0:b.projectId,C=this.branch;if(!g||!y||!w||!C)return xt.warn("Test failed. Not enough data to recover results via API",{err:f}),o(f,h);try{let v=await kr(g,y,w,C);if(xt.warn("Test failed. Got results via API",{err:f,testResult:v}),v&&v.status===Zs.COMPLETED)return await t(v,h);throw f}catch(v){return v!==f&&xt.error("Failed to fetch test results from server",{testId:g,resultId:y,projectId:w,branch:C,err:v}),o(f,h)}},a=this.options.disableSockets||((m=this.options.lightweightMode)==null?void 0:m.disableResults)&&(this.options.useChromeLauncher||this.options.mode!=="extension"),c=this.options.disableSockets||((p=this.options.lightweightMode)==null?void 0:p.disableRemoteStep),l=async(f,h)=>{try{await Promise.all([!c&&Fs.joinToRemoteStep(this.testResultId),!a&&Ke.joinToTestResult(this.testResultId,this.testId)]),f.validateRunConfig();let g=await this.runTest(f,this.customExtensionLocalLocation,h),y=await t(g,f);return N("After onRunComplete"),y}catch(g){return i(g,f)}finally{c||Fs.unlistenToRemoteStep(this.testResultId)}},d=this.executionQueue.getNext();return d?(this.testId=d.testId,this.testName=d.testName,this.testResultId=d.testResultId,this.overrideTestConfigId=d.overrideTestConfigId,this.testRunConfig=d.runConfig,this.branch=d.branch,l(d)):this.onQueueCompleted()}}});var ab={};$(ab,{WorkerSelenium:()=>Ad});function JR(s){let{playback:e}=se().commonConstants;function t(r){s.playbackManager.on(r,()=>{N(`Got event ${r}`)})}Object.values(e).forEach(t)}var va,KR,Ad,cb=T(()=>{"use strict";F();Le();Ta();j();Ft();z();Xo();ae();Gu();pa();Ee();va=x("worker-selenium"),KR=1e9,Ad=class extends Pt{initPlayer(t){return new Gn(this.id,t.runParams,this.options.shouldMonitorPerformance,t.automationMode,void 0,t.retryCount,t.previousTestResultId)}async getBrowserOnce(t,r,n,o){N("in WorkerSelenium getBrowserOnce"),Z.onGetSession(this.id,this.testName,t.runMode);let{driver:i}=n;this.windowUtils=new As(this.id,i),n.clearSessionTabs();let{browserValue:a}=this.testRunConfig,c=t.baseUrl;try{let l=this.options.useLocalChromeDriver;await i.init(this.options,this.testName,this.testRunConfig,o,r,this.executionId,this.testResultId,t.seleniumPerfStats,l,this.lambdatestService),N("in WorkerSelenium after driver.init"),await n.addTab(void 0,{skipLoadInfo:l}),N("in WorkerSelenium after addTab"),l||await this.windowUtils.navigate(c,KR),await this.windowUtils.validatePageIsAvailable(),N("in WorkerSelenium after navigate")}catch(l){let d=l.message&&(l.message.startsWith("Malformed URL")||l.message.includes("Reached error page: about:neterror"))&&a==="firefox",m=l.message&&l.message==="invalid argument";throw l instanceof ot||d||m?new ot(`Page '${c}' is not available`):(va.error("failed to navigate to page",{err:l}),l)}}async runTestOnce(t,r){var d;let n=se(),{driver:o,sessionPlayer:i}=r,a=n.manifestVersion||"runner";Z.onWaitToTestComplete(this.id,this.isCodeMode),JR(i),i.playbackManager.executionId=t.executionId,i.playbackManager.executionName=t.executionName,i.setLightweightMode(this.options.lightweightMode),t.sfdcCredential&&i.setSfdcCredential(t.sfdcCredential),n.localAssetService&&n.localAssetService.initialize({serverUrl:this.options.localRCASaver});let c=null;(d=this.options.lightweightMode)!=null&&d.preloadTests&&(c=(await Sn(this.options))[this.testId]);let l=async()=>{if(t.automationMode==="codeful"){i.callOrderScheduler?i.callOrderScheduler.schedule(()=>t.waitForExecutionStartedFinished(),{key:`test-result:${this.userData.projectId}:${this.testResultId}`}):await t.waitForExecutionStartedFinished(),N("right before playTestByCode");let p=new Promise((f,h)=>{i.playTestByCode(this.testId,this.executionId,this.testResultId,this.baseUrl,this.userData,a,f,!1,this.overrideTestConfigId,this.branch,t.code,t.testName).catch(h)});return re(p.then(f=>(N("right after playTestByCode"),f)),this.testRunTimeout,Ue.TEST_COMPLETE_TIMEOUT_MSG).catch(f=>{var h;throw f instanceof X&&((h=i.stopPlayingOnTestTimeout)==null||h.call(i)),f}).then(f=>(f.resultId=this.testResultId,f))}let m=!1;return re(new Promise((p,f)=>{i.playByTestId(this.testId,this.executionId,this.testResultId,this.baseUrl,this.userData,a,p,!1,this.overrideTestConfigId,this.branch,m,t.remoteRunId,void 0,void 0,c).catch(f)}),this.testRunTimeout,Ue.TEST_COMPLETE_TIMEOUT_MSG).catch(p=>{var f;throw p instanceof X&&((f=i.stopPlayingOnTestTimeout)==null||f.call(i)),p}).then(async p=>{n.localAssetService&&await n.localAssetService.drain(),p.stepsResults=null,p.resultId=this.testResultId,o.isAlive()||(va.warn(`possible grid unresponsive for test ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`),p.gridIssues="could not validate grid is alive");let f=o.maxKeepAliveGap();f>=3e4&&(va.warn(`possible browser keep alive issue ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`),p.keepAliveIssue=f);let g={...p,...t.seleniumPerfStats.getStats()};return this.lambdatestService.isLambdatestRun()&&await o.executeJS(`lambda-status=${g.success?"passed":"failed"}`).catch(()=>{}),g})};o.start(),N("right before super.runTestOnce in workerSelenium");try{await super.runTestOnce(t,r),N("right after super.runTestOnce in workerSelenium");let m=await l();return N("right after runSeleniumTest"),m}catch(m){throw va.error("failed to run test once",{err:m}),m}}}});var Ea,lb=T(()=>{"use strict";Ea=class{constructor(e){this.driver=e,this._utils={},this.sessionTabs={},this.pendingTabs={},this.addedTabs={}}on(){}tabCount(e){}getAllOpenTabIds(e){}getActiveTabInfo(e){}getAllTabIds(e){}isSessionTab(e,t){}createSesion(e){}setAddFrameHandlerCallBack(e){}getAllTabInfoStrings(e){}getAllTabInfos(e){}addNewTab(e,t,r,n={}){}addOpenerStepId(e,t,r){}addOpenerStep(e,t,r){}fixMissingMainTab(e){}buildTabInfo(e,t,r,n,o={}){}addTab(e,t,r,n,o={}){}getTabUtilsByTabIdAndSessionId(e,t){}getTabUtilsByTabId(e){}getTabInfo(e,t){}getTabUtils(e,t){}exactUrlMatch(e,t,r){}singleExactMatchForParts(e,t,r,n){}isSameTab(e,t,r){}getMainTabInfo(e){}getMainTabUtils(e){return{}}removeTabInfo(e,t){}getMainTabId(e){}isMainTabExists(e){}clearAllTabs(e){}clearNonMainTabs(e){}switchTab(e,t,{forceSwitch:r}={forceSwitch:!1}){}getTabDetails(e,t,r={}){}getUnregisteredTabId(e){}waitForTabToOpen(e){}tryToAddTab(e,t){}addNewPopup(e,t){}waitToPendingTabs(e,t){}isMainTabIncognito(){}isInvalidStepVersion(e){}getTabIdByTabInfo(e,t){}}});function ub(s){class e{constructor(r,n){this.frameManager=r,this.locateElementPlayer=n}foundFrameCallback(r,n,o){return kd.info("foundFrameCallback-mock invoked"),{}}locate(r,n,o,i,a,c){return kd.info("locate-mock invoked"),{}}findFrame(r,n,o,i){return kd.info("findFrame-mock invoked"),{}}}return e}var kd,db=T(()=>{"use strict";j();kd=x("mobile-frame-locator-mock")});var XR,YR,Sa,pb=T(()=>{"use strict";XR=E(require("webdriverio"));lb();Hu();j();zu();Ku();Ee();Os();od();db();ad();cd();YR=x("appium-test-player"),Sa=class{constructor(e,t,r,n="code",o=XR,i,a){let{sessionPlayer:c,commonConstants:l,stepActionFactory:d,MobileLocateElementPlayer:m}=se();this.driver=o,this.id=e;let p=new _s(this.driver);this.stepActionFactory=new d(p),da(this.driver,this.stepActionFactory),this.tabService=new Ea(this.driver),this.windowCreationListener=Wn,this.playbackTimeoutCalculator=new Us(Mi()),this.tabService.createSesion(e);let f=ub(this.driver);this.sessionPlayer=new c(e,this.tabService,null,null,f,Di,m,null,p,this.stepActionFactory,this.playbackTimeoutCalculator,Ke.getSocket(),n),this.sessionPlayer.setShouldMonitorPerformance&&this.sessionPlayer.setShouldMonitorPerformance(r),this.sessionPlayer.playbackManager.isRemoteSession=!0,this.sessionPlayer.playbackManager.isLocalRun=!1,this.sessionPlayer.playbackManager.testRetryCount=i,this.sessionPlayer.playbackManager.previousTestResultId=a,this.sessionPlayer.playbackManager.userParamsData=t||{},this.onStepCompleted=this.onStepCompleted.bind(this),this.sessionPlayer.playbackManager.on(l.playback.RESULT,this.onStepCompleted)}onStepCompleted(e,t,r,n){}async onDone(){try{await this.driver.activeSession.deleteSession()}catch(e){YR.error("error while deleting appium session",{error:e})}finally{let{commonConstants:e}=se();this.sessionPlayer.playbackManager.off(e.playback.RESULT),this.sessionPlayer=null,this.tabService=null,this.stepActionFactory=null,this.driver=null}}getSessionId(){return this.driver.activeSession.sessionId}}});var fb={};$(fb,{WorkerAppium:()=>_d});var mb,Kn,_d,hb=T(()=>{"use strict";mb=E(require("jsdom"));le();Te();Ii();Ta();j();Ft();pb();Ee();Kn=x("worker-appium"),_d=class extends Pt{initPlayer(e){return new Sa(this.id,e.runParams,this.options.shouldMonitorPerformance,e.automationMode,void 0,e.retryCount,e.previousTestResultId)}async getBrowserOnce(e,t,r,n){Z.onGetSession(this.id,this.testName,e.runMode);let{driver:o}=r,i=this.options.projectData.type,a=await e.getNativeAppData(),c=i==="android"?e.androidActivityWait:null,l=e.nativeAppLink;if(this.options.appId){let{project:d,appId:m}=this.options,p=await tl({appId:m,projectId:d});if(!p)throw Kn.error("mobile app not found",{appId:m,projectId:d}),new Error("mobile app not found");l=`${he}/storage${p.filePath}?access_token=${this.options.authData.token}`}try{let d=Cu({projectType:i,gridInfo:n,testRunConfig:this.testRunConfig,nativeApp:a,options:this.options,appPath:l,androidActivityWait:c}),m=await o.remote(d);Object.assign(o,{activeSession:m}),await this.updateDeviceInfo(e,m),Kn.info(`init new appium session testName: ${this.testName}`,{sessionId:m.sessionId,testResultId:this.testResultId,nativeApp:a})}catch(d){throw Kn.error("failed to start application",{err:d}),d}}getServerAddressFromGrid(){let{host:e,port:t,accessToken:r}=this.options.gridData;return`https://${e}:${t}/v0/${r}/wd/hub`}async updateDeviceInfo(e,t){var f;let{executionId:r,testId:n,testResultId:o}=e,{project:i,projectData:{type:a}={},company:{companyId:c=""}={},gridData:{gridId:l=""}={}}=this.options,d=await El({projectId:i,projectType:a,companyId:c,gridId:l,selectors:`device_id:${t.capabilities.udid}`}),p={name:(f=d==null?void 0:d[0])==null?void 0:f.name,model:t.capabilities.deviceModel,osVersion:t.capabilities.platformVersion,udid:t.capabilities.udid,osType:t.capabilities.platformName,scaleFactor:t.capabilities.pixelRatio,virtual:!1};await us(i,r,n,o,"RUNNING",{device:p})}getDirectAddressConnection(e){let{directConnectProtocol:t,directConnectHost:r,directConnectPort:n,directConnectPath:o}=e;if(t&&r&&n&&o)return`${t}://${r}:${n}${o}`}async runTestOnce(e,t){let r=se(),{sessionPlayer:n}=t,o=t.driver,i=r.manifestVersion||"runner";Z.onWaitToTestComplete(this.id,this.isCodeMode),n.playbackManager.executionId=e.executionId,n.playbackManager.executionName=e.executionName;let a=this.getDirectAddressConnection(o.activeSession.capabilities)||this.getServerAddressFromGrid(),c=new mb.JSDOM("").window.DOMParser;n.playbackManager.appiumApi=new r.AppiumApi(a,o.activeSession.sessionId,c),r.localAssetService&&r.localAssetService.initialize({serverUrl:this.options.localRCASaver});let l=async()=>{try{let m=await new Promise((f,h)=>n.playByTestId(this.testId,this.executionId,this.testResultId,this.baseUrl,this.userData,i,f,!1,this.overrideTestConfigId,this.branch,!1,e.remoteRunId,void 0,void 0,void 0).catch(h));return r.localAssetService&&await r.localAssetService.drain(),m.stepsResults=null,m.resultId=this.testResultId,{...m,...e.seleniumPerfStats.getStats()}}catch(d){throw Kn.error("error while running appium tests",{err:d}),d}};try{return await super.runTestOnce(e,t),await l.call(this)}catch(d){throw Kn.error("failed to run test once",{err:d}),d}}}});var gb,Ra,yb=T(()=>{"use strict";F();gb=E(Nn()),Ra=class{constructor(e){this.driver=new gb.default,this.id=e}onDone(){return re(this.driver.end(),12e4).catch(t=>{if(t instanceof X)return this.driver.forceEnd();throw t}).catch(()=>{}).then(()=>{this.driver=null})}getSessionId(){return this.driver.getSessionId()}}});var bb,Ia,wb=T(()=>{"use strict";bb=E(require("ws"));F();Ia=class{constructor(){this._cdpWs=null;this._cdpUrl=null;this._cdpCallbacks=new Map}async initSession(e,t=500){await this.stopSession(),this._cdpUrl=e,await this.initCDPWebsocket(t)}async initCDPWebsocket(e=500){if(this._cdpWs)return this._cdpWs;let t=new bb.default(this._cdpUrl,{timeout:e}),r=ct(o=>{t.once("open",o)}),n=ct(o=>{t.once("error",o)}).catch(()=>{t.close(),t.removeAllListeners()});return t.on("message",o=>this.onCDPMessage(o)),this._cdpWs=Promise.race([r,n]).then(()=>t),this._cdpWs}onCDPMessage(e){var n;let t=JSON.parse(e),r=this._cdpCallbacks.get(t.id);r&&(this._cdpCallbacks.delete(t.id),t.error?r.reject(new Error(t.error)):(n=t.result.exceptionDetails)!=null&&n.exception?r.reject(new Error(t.result.exceptionDetails.exception.description)):r.resolve(t.result))}async stopSession(){let e=this._cdpWs;if(this._cdpUrl=null,this._cdpWs=null,this._cdpCallbacks.clear(),e)try{return(await e).close()}catch{return}}async cdpCommand(e,t,r){let n=await this.initCDPWebsocket();this._lastWsId||(this._lastWsId=0);let o=this._lastWsId++,i=new Promise((c,l)=>{this._cdpCallbacks.set(o,{resolve:c,reject:l})}),a={method:e,params:t,id:o};return r&&Object.assign(a,{sessionId:r}),n.send(JSON.stringify(a)),i}}});var Pa,Od,xa,Tb=T(()=>{"use strict";F();Pa=E(require("chrome-launcher"));Ii();wb();Tn();Od=class{constructor(e){this.sessionId=e,this.cdpTestRunner=new Ia}async init(e,t,r,n,o,i,a){let l=[...Pu(e,t,r,n,o,i,a).desiredCapabilities.chromeOptions.args,...Pa.Launcher.defaultFlags().filter(m=>m!=="--disable-extensions")];this.chrome=await Pa.launch({chromeFlags:l,startingUrl:void 0,ignoreDefaultFlags:!0}),this.chrome.process.once("exit",()=>{this._isAlive=!1}),this.chrome.process.once("close",()=>{this._isAlive=!1}),this._isAlive=!0;let d=await xr(`localhost:${this.chrome.port}`);await this.cdpTestRunner.initSession(d),ds(()=>this.chrome.kill())}isAlive(){return this._isAlive}start(){}async stop(){await this.cdpTestRunner.stopSession(),this.chrome&&await this.chrome.kill(),this._isAlive=!1}getSessionId(){return this.sessionId}},xa=class{constructor(e){this.sessionId=K(),this.driver=new Od(this.sessionId),this.id=e}async onDone(){return this.driver.stop()}getSessionId(){return this.sessionId}}});var vb={};$(vb,{WorkerExtension:()=>Jn});var gt,Jn,Ld=T(()=>{"use strict";Le();z();Ta();F();j();Ft();ae();yb();Tb();gt=x("worker-ext"),Jn=class extends Pt{initPlayer(){return this.options.useChromeLauncher?new xa(this.id):new Ra(this.id)}async _getBrowserOnce(e,t,r,n){var i;let{driver:o}=r;try{return await o.init(this.options,this.testName,this.testRunConfig,n,t,this.executionId,this.testResultId,e.seleniumPerfStats,(i=this.options.lightweightMode)==null?void 0:i.general,this.lambdatestService)}catch(a){throw gt.error("failed to get browser",{err:a,gridInfo:n,testId:e.testId,resultId:e.testResultId}),a}}async getBrowserOnce(e,t,r,n){return Z.onGetSession(this.id,this.testName,e.runMode),this._getBrowserOnce(e,t,r,n)}isUsingChromeLauncher(e){return Boolean(this.options.useChromeLauncher)}async runTestOnce(e,t){let{testResultId:r,executionId:n,testId:o}=this;N("WorkerExtension runTestOnce");let i=async d=>{let m=this.options.timeoutWasGiven?Math.max(1e4,this.options.timeout):this.options.testStartTimeout;try{return await re(e.runTestUsingCDP(d.cdpTestRunner),m,Ue.TEST_START_TIMEOUT_MSG)}catch(p){if(!(p instanceof X))throw p;return gt.warn("timeout while running test using CDP. Running checkViaRestAPIIfTestStarted",{testResultId:r}),await e.checkViaRestAPIIfTestStarted()}},a=async(d,m,p)=>{try{let f=await d.url(m);return p.driverUrlFinished=!0,f}catch(f){throw gt.error("error from driver.url",{err:f,testResultId:r,executionId:n,testId:o,url:m,urlLength:m.length}),f}},c=async d=>{let m=await e.onStarted(this.options.testStartTimeout);return d.testRunHandlerOnStartedHadFinished=!0,m},l=async()=>{var f;if(N("WorkerExtension runExtTest"),((f=this.options.lightweightMode)==null?void 0:f.disableRemoteStep)||this.options.disableSockets||e.listenToRemoteStep(t.driver),this.isUsingChromeLauncher(t)){Z.onWaitToTestStart(this.id),Z.onWaitToTestComplete(this.id,this.isCodeMode);try{return{...await i(t.driver),...e.seleniumPerfStats.getStats()}}catch(h){throw gt.warn("failed to run test via CDP",{err:h}),h}}let{driver:m}=t,p={driverUrlFinished:!1,testRunHandlerOnStartedHadFinished:!1};try{let h=await e.getRunTestUrl();Z.onWaitToTestStart(this.id);try{await re(Promise.all([a(t.driver,h,p),c(p)]),this.options.testStartTimeout,Ue.TEST_START_TIMEOUT_MSG)}catch(y){if(!(y instanceof X))throw y;gt.warn("timeout occurred (see log's payload). Running checkViaRestAPIIfTestStarted",{testResultId:r,executionId:n,testId:o,...p}),await e.checkViaRestAPIIfTestStarted()}Z.onWaitToTestComplete(this.id,this.isCodeMode);let g=y=>{throw e.onCompletedCleanup(),gt.warn("on browser closed error detected",{err:y,testResultId:r,executionId:n,testId:o}),m.unregisterToClosedBrowser(g),y.type=en.BROWSER_CLOSED,y};m.registerToClosedBrowser(g);try{let y=await re(e.onCompleted(),this.testRunTimeout,Ue.TEST_COMPLETE_TIMEOUT_MSG);m.unregisterToClosedBrowser(g),this.lambdatestService.isLambdatestRun()&&await m.executeJS(`lambda-status=${y.success?"passed":"failed"}`).catch(()=>{}),m.isAlive()||(gt.warn(`possible grid unresponsive for test ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`),y.gridIssues="could not validate grid is alive");let w=m.maxKeepAliveGap();return w>=3e4&&(gt.warn(`possible browser keep alive issue ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`),y.keepAliveIssue=w),{...y,...e.seleniumPerfStats.getStats()}}catch(y){throw gt.warn("timeout wait until test completed",{err:y,testResultId:r,executionId:n,testId:o}),new Error(y)}finally{m.unregisterToClosedBrowser(g)}}catch(h){throw gt.warn("failed to start url",{err:h}),new Error(h)}};t.driver.start();try{return await super.runTestOnce(e,t),N("WorkerExtension super.runTestOnce"),await l()}catch(d){throw gt.error("failed to run test",{err:d,testId:e.testId,resultId:e.testResultId}),d}}}});var Eb={};$(Eb,{WorkerExtensionSingleBrowser:()=>Nd});var QR,ZR,Nd,Sb=T(()=>{"use strict";Le();F();j();Id();Ft();Ld();QR=x("base-worker"),ZR=500,Nd=class extends Jn{async _releasePlayer(){if(!this.testPlayer)return;let{projectId:t}=this.userData||{};await zn(this.id,this.releaseSlotOnTestFinished,t,this.testPlayer),this.testPlayer=null}onQueueCompleted(){return this._releasePlayer()}async getBrowserOnce(t,r,n,o){return Z.onGetSession(this.id,`worker ${this.id}`,t.runMode),this._getBrowserOnce(t,r,n,o)}async getTestPlayer(t,r){return this.testPlayer&&!this.testPlayer.driver.isAlive()&&(QR.warn("WorkerExtensionSingleBrowser is releasing a dead player",{workerId:this.id}),await this._releasePlayer()),this.testPlayer||(this.testPlayer=await super.getTestPlayer(t,r)),this.testPlayer}async runTest(t,r,n){let o=this.handleQuarantine(t);if(o)return o;N("before runTest onTestStarted single browser");let i=await this.onTestStarted(this.id,t.testId,t.testResultId,n,t.retryKey);t.baseUrl=i.config.baseUrl;let a=await this.getTestPlayer(t,r);return t.markClearBrowser(),await this.runTestOnce(t,a)}async runTestCleanup(){var t;if(!this.executionQueue.hasMoreTests()){await this.onQueueCompleted();return}(t=this.options.lightweightMode)!=null&&t.general&&await ie(ZR)}}});function eI(s,e){e===0?s():setTimeout(s,e*Xa)}var VL,Dd,Ca,Rb=T(()=>{"use strict";VL=E(Nn());F();le();Le();yu();Et();Uu();z();j();ae();sb();Dd=x("parallel-worker-manager"),Ca=class{constructor(e){this.customExtensionLocalLocation=e}getWorkerType(e){switch(e){case Q.SELENIUM:return(cb(),G(ab)).WorkerSelenium;case Q.APPIUM:return(hb(),G(fb)).WorkerAppium;default:return Ai.isFeatureAvailableForProject("useSameBrowserForMultiTests")?(Sb(),G(Eb)).WorkerExtensionSingleBrowser:(Ld(),G(vb)).WorkerExtension}}createWorkers(e,t,r,...n){let o=this.getWorkerType(r),i=()=>{try{return N("before new Worker",r),new o(t,...n)}finally{N("after new Worker",r)}};return Array.from(new Array(e),i)}async runTests(e,t,r,n,o,i,a,c,l){if(e&&e.length===0)return;let d=!1,m=0,p=f=>new Promise(h=>{var Ct,Xr,A,O,M,q;let g=o.project,y=new ba(r,n,e,o,i,t),w={},C=e.length,b=(Ct=o.company)==null?void 0:Ct.companyId,v=(Xr=o.company)==null?void 0:Xr.name,I=o.source||"cli",k=o.user,D=(A=o.company)==null?void 0:A.planType,S=(O=o.company)==null?void 0:O.isStartUp,_=(M=o.projectData)==null?void 0:M.name,P=(q=o.projectData)==null?void 0:q.type,L=o.lightweightMode,B=Sr(o),V=(me,Xe,we,Ua,Xn,Fa)=>(m++,dh({executionId:r,projectId:g,testId:Xe,resultId:we,companyId:b,companyName:v,projectName:_,companyPlan:D,sessionType:B,source:I,user:k,lightweightMode:L,isStartUp:S,projectType:P,appSource:Fa}),t.testStartAndReport(me,r,we,Ua,Xn)),Y=async(me,Xe,we,Ua,Xn,Fa)=>{var Vd,Hd,zd;m--;let yt={...(L==null?void 0:L.onlyTestIdsNoSuite)&&{show:!0},...we.seleniumStats&&{seleniumStats:we.seleniumStats},...we.gridIssues&&{gridIssues:we.gridIssues},...we.keepAliveIssue&&{keepAliveIssue:we.keepAliveIssue},...o.host&&{gridHost:o.host}};if(we.seleniumPerfMarks&&(t.concatSeleniumPerfMarks(we.seleniumPerfMarks),delete we.seleniumPerfMarks),o.grid||o.gridId?(yt.gridName=o.grid||((Vd=o.gridData)==null?void 0:Vd.name),yt.gridType=(Hd=o.gridData)==null?void 0:Hd.type,yt.gridProvider=(zd=o.gridData)==null?void 0:zd.provider):o.useLocalChromeDriver?(yt.gridName="local-chrome-driver-from-options",yt.gridType="local-chrome"):o.useChromeLauncher?(yt.gridName="chrome-launcher-from-options",yt.gridType="local-chrome"):o.browserstack?yt.gridName="browserstack-from-options":o.saucelabs&&(yt.gridName="saucelabs-from-options"),await t.testEndAndReport(me,we,r,Ua,Xn,yt).catch(Pw=>Dd.error("testEndAndReport threw an error",{err:Pw})),Xn)return;w[we.resultId]=we,ph({executionId:r,projectId:g,testId:Xe,resultId:we.resultId,result:we,companyId:b,companyName:v,projectName:_,companyPlan:D,sessionType:B,source:I,user:k,lightweightMode:L,logger:Dd,isStartUp:S,projectType:P,appSource:Fa}),l&&!we.success&&(y.stop(),d=!0),(Object.keys(w).length===C||d&&m===0)&&h(w)},ee=(me,Xe)=>{w[Xe.resultId]=Xe,t.onTestIgnored(me,Xe.resultId),m--,(Object.keys(w).length===C||d&&m===0)&&h(w)},fe=(me,Xe)=>t.onGridSlot(me,Xe);o.userData={loginData:Object.assign({},Dt(),{refreshToken:Oo(),authData:Dt(),token:f}),projectId:o.project,company:o.company,servicesUrl:he},N("in localStrategy before createWorker"),this.createWorkers(c,y,o.mode,o,this.customExtensionLocalLocation,r,V,Y,fe,ee).forEach((me,Xe)=>{N("before schedule worker.run after createWorkers"),eI(()=>{N("right before worker.run"),me.run()},Xe)})});try{let f=await Ht(),h=await p(f);if(d)throw new At;return h}catch(f){throw Dd.error("failed running parallel workers",{executionId:r,err:f}),f}}}});var Aa,Ib=T(()=>{"use strict";Fi();Aa=class extends sr{init(e){return super.initNewSocket(e,"real-data")}emitJoinRoom(e,t){this._socket.emit("testResult:listen",{query:`projectId=${t}&runId=${e}`})}joinToTestResultsByRunId(e,t){this.joinRoom(e,t),this.emitJoinRoom(e,t)}stopListenToTestResultsByRunId(e){this.leaveRoom(e),this._socket.emit("testResult:listen:stop",{})}listenToTestResultsByRunId(e){function t(r){e(r.data)}this._socket.on("testResult:changes",t.bind(this))}}});var Md,Ud,ka,xb=T(()=>{"use strict";Mn();ae();be();Ib();({TEST_RESULT_CREATED:Md,TEST_RESULT_UPDATED:Ud}=Qe),ka=class{constructor(){U.flags.useNewWSCLI.isEnabled()||(this.realDataServiceSocketIO=new Aa)}init(e){return U.flags.useNewWSCLI.isEnabled()?Promise.resolve():this.realDataServiceSocketIO.init(e)}joinToTestResultsByRunId(e,t){if(U.flags.useNewWSCLI.isEnabled())return Fe.addFilter(e,{runId:e},[Ud,Md],!0);this.realDataServiceSocketIO.joinToTestResultsByRunId(e,t)}stopListenToTestResultsByRunId(e){if(U.flags.useNewWSCLI.isEnabled()){Fe.removeFilter(e,[Ud,Md]);return}this.realDataServiceSocketIO.stopListenToTestResultsByRunId(e)}listenToTestResultsByRunId(e,t){if(U.flags.useNewWSCLI.isEnabled()){Fe.listenTo(e,[Ud,Md],r=>r.runId===e,r=>t(r));return}this.realDataServiceSocketIO.listenToTestResultsByRunId(t)}}});async function Ab(s,e){var t;if((t=s.lightweightMode)!=null&&t.onlyTestIdsNoSuite&&s.testId)return{tests:[s.testId.map(n=>({testId:n,testConfig:{},resultId:K()}))]};if(s.files.length>0){let{buildCodeTests:r}=await Promise.resolve().then(()=>(dd(),xy)),n={};if(s.webpackConfig){let o=Cb.join(process.cwd(),s.webpackConfig);n=require(o)}return r(s.files,n,{baseUrl:s.baseUrl})}return await el({projectId:s.project,labels:s.label,testIds:s.testId,testNames:s.name,testConfigNames:s.testConfigNames,suiteNames:s.suites,suiteIds:s.suiteIds,branch:e,rerunFailedByRunId:s.rerunFailedByRunId,testConfigIds:s.testConfigIds,intersections:s.intersections})}function Fd(s){let e=Object.keys(s).length,t=Object.keys(s).reduce((r,n)=>r+(s[n].success===!0?1:0),0);return e===t}async function jd(s,e){let t=s.mode==="extension"?["edge-chromium","chrome"]:["firefox","chrome","edge-chromium","safari","safari technology preview","browser","android","ios","iphone","ipad"],r=Pb.difference(tn(s,e),t);if(r.length>0)throw pt("invalid-config-run",{browser:r.join(", "),mode:"runner"}),new R(`browser type <${r}> is not supported in ${s.mode} mode.`);return e}var Pb,Cb,kb=T(()=>{"use strict";Pb=E(require("lodash")),Cb=E(require("path"));F();ms();Te();z()});var zr,_b,tI,_a,rI,Oa,Ob=T(()=>{"use strict";zr=E(require("lodash"));F();j();le();ae();Le();bs();eu();yu();Te();Et();Ft();Ch();z();Rb();xb();kb();({testRunStatus:_b,CLI_MODE:tI}=Lt),_a=x("test-plan-runner"),rI=1e3*60*5,Oa=class{constructor(e){this.startTime=Date.now();this.workerManager=new Ca(e)}async runTestAllPhases(e,t,r,n,o,i,a,c){let l={},d=Dt(),m=async()=>{let y=o.beforeParallel||1,w=!0,C=await this.workerManager.runTests(e,c,i,a,o,n,d,y,w);Object.assign(l,C)},p=async()=>{let y=Ks||o.parallel,w=!1;N("right before this.workerManager.runTests");let C=await this.workerManager.runTests(t,c,i,a,o,n,d,y,w);N("right after this.workerManager.runTests"),Object.assign(l,C)},f=async()=>{let y=o.afterParallel||1,w=!1,C=await this.workerManager.runTests(r,c,i,a,o,n,d,y,w);Object.assign(l,C)},h=Sr(o);mh({executionId:i,projectId:o.project,sessionType:h}),N("right before runBeforeTests");try{return await m(),N("right before runTestPlanTests"),await p(),N("right after runTestPlanTests"),await f(),l}catch(y){if(_a.error("error running test plan",{err:y}),y instanceof At)return c.markAllQueuedTests(i,pe.ABORTED,"aborted",!1);throw y}finally{await g()}async function g(){var w,C,b,v;if((w=o.lightweightMode)!=null&&w.disablePixelValidation)return;if(o.mode===tI.SELENIUM){let{EyeSdkBuilder:I}=(await Promise.resolve().then(()=>(Ee(),_r))).getSessionPlayer();await I.closeBatch(i);return}let y;try{if(!((v=(b=(C=o.company)==null?void 0:C.activePlan)==null?void 0:b.premiumFeatures)!=null&&v.applitools)||(y=await yl(o.project),zr.default.isEmpty(y)||!i))return;let{runKey:I,url:k}=y;await require("@applitools/eyes-sdk-core").makeSDK({name:"Testim.io",version:"4.0.0",spec:{}}).closeBatches({settings:{batchIds:[i],serverUrl:k,apiKey:I}})}catch{}}}async initRealDataService(e){let t=new ka;return await t.init(e),t}async listenToTestCreatedInFile(e,t,r,n){let o={};e.joinToTestResultsByRunId(r,t);let i=!0;return await new Promise(c=>{let l=d=>{i=!1,c(d)};e.listenToTestResultsByRunId(r,d=>{let m=d.id;if(!n.getTestResult(m)){let h=o[m],g=zr.default.merge({},h,d,{resultId:m});if(o[m]=g,!h||h.status!==d.status){let w=(n.getTestResult(g.parentResultId)||{workerId:1}).workerId;[_b.RUNNING].includes(d.status)&&Z.onTestStarted(g,w),[_b.COMPLETED].includes(d.status)&&(g.duration=g.endTime-g.startTime||0,Z.onTestFinished(g,w))}}let p=!Object.values(o).some(h=>["QUEUED","RUNNING"].includes(h.runnerStatus)),f=!Object.values(n.getAllTestResults()).some(h=>["QUEUED","RUNNING"].includes(h.status));if(p&&f)return l(Object.values(o));if(f&&!p)return ie(1e4).then(()=>{i&&l(o)})})})}async initRealDataServiceAndListenToTestsCreatedInFile(e,t,r){let n=await this.initRealDataService(e);return this.listenToTestCreatedInFile(n,e,t,r)}async runTestPlan(e,t,r,n,o,i,a,c){var k,D,S;let l=K(),d=n.project;ic(l),e.forEach(_=>Object.assign(_,{isBeforeTestPlan:!0})),r.forEach(_=>Object.assign(_,{isAfterTestPlan:!0}));let m=[...e,...t,...r],p=new Ei(m,n,i,a),f=zr.default.chain(m).map(_=>{var P;return((P=_.overrideTestConfig)==null?void 0:P.name)||""}).uniq().compact().value(),h=(f==null?void 0:f.length)===1?f[0]:null,g=n.files.length>0,y=(k=n.lightweightMode)!=null&&k.onlyTestIdsNoSuite?[]:m.map(_=>_.name),w=(D=n.lightweightMode)!=null&&D.onlyTestIdsNoSuite?{beforeTests:e,tests:t,afterTests:r}:p.executionStart(l,d,this.startTime,o,y),C;g&&(C=this.initRealDataServiceAndListenToTestsCreatedInFile(d,l,p)),N("before testListInfoPromise");let b=await w;(S=n.lightweightMode)!=null&&S.onlyTestIdsNoSuite||Z.onTestPlanStarted(b.beforeTests,b.tests,b.afterTests,o,l,c,h,g),N("before runTestAllPhases");let v=await this.runTestAllPhases(b.beforeTests,b.tests,b.afterTests,a,n,l,o||"All Tests",p),I=await re(C,rI).catch(async()=>{var P;_a.warn("timed out waiting for child results on websocket. using REST fallback",{projectId:d,executionId:l});let _=await yn(d,"testResult",`runId=${l}&sort=runOrder`);return zr.default.chain(((P=_==null?void 0:_.data)==null?void 0:P.docs)||[]).groupBy("parentResultId").omit("undefined").values().flatten().value()});return N("before executionEnd"),await p.executionEnd(l),N("after executionEnd"),{results:v,executionId:l,testPlanName:o,configName:h,childTestResults:I}}async runTestPlans(e,t){_a.info("start to run test plan",{options:Object.assign({},e,{token:void 0,userParamsData:void 0}),branchToUse:t});function r(d){return zr.default.flattenDeep(Object.values(d)).reduce((m,p)=>m.concat(p.beforeTests,p.tests,p.afterTests),[])}let n={},o={},i=e.project,a=await Zc(i,e.testPlan,e.testPlanIds,t,e.intersections),c=a.testPlans,l=a.testPlansData;if(!c||c.length===0)throw new R(`no test plan to run ${e.testPlan}`);if(!l||Object.keys(l).length===0){if(e.passZeroTests)return[];throw new R(`no test to run in test plan ${e.testPlan}`)}return await jd(e,r(l)),await de(c,async d=>{let m=d.testPlanId;n[m]={};let p=Object.assign({},e);p.baseUrl=e.baseUrl||d.startUrl,p.host=e.host,p.port=e.port,p.gridId=e.gridId||d.gridId,e.grid&&delete p.gridId,p.gridData=await zf(e,d);let f=p.overrideExecutionName||d.name;return await de(l[m],async h=>{let g=await this.runTestPlan(h.beforeTests,h.tests,h.afterTests,p,f,m,t),y=e.files.length>0;Z.onTestPlanFinished(g.results,d.name,this.startTime,g.executionId,!1,y,g.childTestResults),n[m][g.executionId]=g.results;let w=Object.keys(n[m]).map(I=>({executionId:I,status:Fd(n[m][I])})),C=Object.keys(n[m]).map(I=>n[m][I]).reduce((I,k)=>Object.assign(I,k),{}),b=Fd(C);Object.assign(o,C);let v=b?w[0].executionId:w.find(I=>!I.status).executionId;return await Xc(i,m,{success:b,executions:w,executionId:v}),g})})}async runAnonymousTestPlan(e,t){var a;_a.info("start to run anonymous",{options:Object.assign({},e,{token:void 0}),branchToUse:t}),N("before getSuite");let r=await Ab(e,t);if(N("after getSuite"),!((a=r==null?void 0:r.tests[0])!=null&&a.length)){if(e.rerunFailedByRunId)throw new R("No failed tests found in the provided run");if(e.passZeroTests)return[];throw new R("No tests to run")}t="branch"in r&&r.branch||t;let n=r;if(e.rerunFailedByRunId&&!n.runName){if(!n.runExists)throw new R("Invalid run ID - no such run.");n.runName===""&&(n.runName=`rerun-${e.rerunFailedByRunId}`)}let o=e.overrideExecutionName||n.runName||[].concat(e.label,e.name,e.suites).join(" "),i=!0;return N("Right before validateConfig + runAnonymousTestPlan tests map"),await de(r.tests,async c=>{if(e.resultId){let m=c[0];m.resultId=e.resultId,c=[m]}await jd(e,c),N("right before runTestPlan");let l=await this.runTestPlan([],c,[],e,o,null,t,i);N("right after runTestPlan");let d=e.files.length>0;return await Z.onTestPlanFinished(l.results,o,this.startTime,l.executionId,i,d,l.childTestResults),l})}async run(e){let t=Pn(),r=[];rn(e)?r=await this.runTestPlans(e,t):r=await this.runAnonymousTestPlan(e,t);let n=zr.default.flattenDeep(r);return N("right before onAllTestPlansFinished"),await Z.onAllTestPlansFinished(n),N("right after onAllTestPlansFinished"),n.map(o=>o.results).reduce((o,i)=>Object.assign(o,i),{})}}});var Nb={};$(Nb,{init:()=>EI,run:()=>TI});function nI(s){if(!Bd.get(s,"company.activePlan.premiumFeatures.allowCLI")){let t=s.project;ps(s.authData.uid,"cli-not-supported",{projectId:t}),console.warn("Testim CLI is not supported in this plan")}}async function oI(s){let e=s.project,t=await rl(e);if(t!=null&&t.isExecutionBlocked)throw console.error("You have reached the limit of runs for the billing month, please upgrade your plan at https://www.testim.io/upgrade-contact-us?source=cli"),ps(s.authData.uid,"execution-quota-surpassed",{projectId:e}),new Zr}function iI(s,e){var o,i,a,c;if(fo(e.activePlan)==="free"){let l=s.parallel||1,d=((i=(o=e.activePlan)==null?void 0:o.premiumFeatures)==null?void 0:i.concurrency)||1;if(l>d)throw new R(`Cannot run with parallel ${s.parallel}. Max parallel value is ${d}`)}let r=s.retentionDays;if(!r)return;let n=(c=(a=e.activePlan)==null?void 0:a.premiumFeatures)==null?void 0:c.resultRetention;if(r>n)throw new R(`Retention days (${r}) cannot be greater than the company's retention days (${n}). Run aborted`)}async function aI(s){var e;if(!((e=s.lightweightMode)!=null&&e.disableQuotaBlocking))try{await Promise.all([oI(s),nI(s)])}catch(t){if([R,Zr].some(r=>t instanceof r))throw t;sI.error("could not validate cli account",{err:t})}}function cI(s){let e=Dt();return Hm({userId:e.uid,name:e.uid,traits:{projectId:s,company:{id:s,lastCIRun:Math.floor(Date.now()/1e3)}}})}async function lI(s,{disableResults:e=!1,disableRemoteStep:t=!1}){if(U.flags.useNewWSCLI.isEnabled()&&!e&&!t)return Fe.connect(s);if(!t){let{remoteStepService:r}=await Promise.resolve().then(()=>(ga(),Xy));await r.init(s)}if(!e){let{testResultService:r}=await Promise.resolve().then(()=>(Os(),gg));r.init(s)}}function uI(s,e){let{branch:t,autoDetect:r}=s;if(Yf(e,r),!e&&!r)throw new R(`branch ${t} does not exist, run aborted.`)}async function dI(s){let{project:e}=s,t=Pn();Bd.get(s,"company.activePlan.premiumFeatures.ttaForSalesforce")&&(s.sfdcCredential=await Kc({projectId:e,branch:t}))}function pI(s,e){let{onprem:t,id:r,storageBaseUrl:n,storageType:o,name:i,activePlan:a={}}=e;if(t){let{mode:m,extensionPath:p,ext:f,playerPath:h}=s;if([Q.SELENIUM].includes(m)&&!h)throw new R("in selenium on prem mode --player-path must be provided");if(m==="extension"&&!p&&!f)throw new R("In extension on prem mode --ext or --extension-path must be provided")}let c=Boolean(a.isPoc),l=Boolean(a.isStartUp),d=fo(a);d==="free"&&(s.newBrowserWaitTimeout=s.newBrowserWaitTimeout<Lb?Lb:s.newBrowserWaitTimeout),U.setCompanyId(r),U.setIsPOC(c),U.setIsStartUp(l),U.setPlanType(d),Rt.setPlanType(d),s.company={companyId:r,onprem:t,storageBaseUrl:n,storageType:o,name:i,planType:d,isPOC:c,isStartUp:l,activePlan:a}}function mI(s,e){if(pr){s.editorUrl=pr;return}s.editorUrl=e.editorUrl}function fI(s,e){s.allGrids=e}function hI(s,e){s.authData=e}function gI(s,e){let{id:t,name:r,type:n,defaults:o}=e;U.setProjectId(t),U.setProjectType(n),s.projectData={projectId:t,type:n,name:r,defaults:o}}async function yI(s){s.gridData=await Kf(s)}async function bI(s){let{project:e}=s,t={projectId:e};s.overrideMappingFile&&(pt("user-override-file",t),s.mockNetworkRules=await Nm(s.overrideMappingFile))}async function wI(s,e){N("in runner.js runRunner");let{project:t,remoteRunId:r,useLocalChromeDriver:n,useChromeLauncher:o}=s;r||(s.source=n||o?"cli-local":"cli"),await Ef(),N("in runner.js after checkNpmVersion"),await aI(s),N("in runRunner before tunnel.connect"),await ni(s),N("in runRunner after tunnel.connect");let a=await new Oa(e).run(s);return N("before tunnel.disconnect"),await oi(s),await In.end(t),N("after tunnel.disconnect and gridService.keepAlive.end"),a}function vI(s){var e;Rt.shouldShowFreeGridRunWarning((e=s.gridData)==null?void 0:e.type)&&console.log(`
564
564
  \x1B[4m\x1B[36mOur Free grid offers basic service performance.
565
565
  If you need faster results, contact us to upgrade your plan and dramatically improve your tests\u2019 run times.\x1B[0m
566
- `)}async function RI(s){var g,y,w;N("start runner init");let{project:e,lightweightMode:t,useChromeLauncher:r,mode:n,disableSockets:o}=s,i=M.fetch(),a=dI(e,{disableResults:o||Boolean((t==null?void 0:t.disableResults)&&(r||n!=="extension")),disableRemoteStep:o||Boolean(t==null?void 0:t.disableRemoteStep)});i.catch(()=>{}),a.catch(()=>{});let{authData:c,editorConfig:u,companyByProjectId:d,projectById:m,branchName:p,allGrids:f}=await wn(s);if(cI(s,d),await Promise.all([i,a]),s.browser&&M.flags.dec2022eolBrowsers.isEnabled()){let P=on(s.browser);if(P.eol)throw new R(`Unsupported browser: ${P.browserName}`)}N("after featureFlagsReady and socketConnected"),hI(s,u),fI(s,d),bI(s,m),pI(s,p),gI(s,f),yI(s,c),await mI(s),(g=s.lightweightMode)!=null&&g.disableLabs||await Pi.loadLabFeatures(m.id,d.activePlan),((y=s.lightweightMode)==null?void 0:y.type)==="turboMode"&&(M.flags.highSpeedMode.getValue()==="disabled"||s.company.planType==="free")&&delete s.lightweightMode,((w=s.lightweightMode)==null?void 0:w.type)==="turboMode"&&console.log(`
567
- Turbo mode will ignore step delays. Test artifacts like screenshots and logs will only be saved for failed runs. For more information see our docs: https://help.testim.io/docs/turbo-mode`),xn.start(e),uI(e),await TI(s),await wI(s),SI(s);let h=Pn();await Z.setOptions(s,h)}var Bd,Nb,oI,EI,Mb=T(()=>{"use strict";Bd=E(require("lodash"));F();Vl();Ql();Le();bs();ms();eu();Te();Et();j();Ft();le();ae();z();Lb();Un();Uu();be();kn();xl();Nb=30*60*1e3,oI=x("runner");EI=vI});function Ub(s){s.get("/",(e,t)=>{let r=$d();return t.status(200).json({success:!0,isTestimAgent:!0,startMode:r})}),s.get("/version",(e,t)=>{t.status(200).json({node:process.version,app:ql()})}),s.get("/loginInfo",(e,t)=>{try{let r=JSON.parse(Buffer.from(e.query.info,"base64").toString());Dl({overwriteExisting:!1,projects:r}),t.status(200).end()}catch{t.status(400).end()}})}var Fb=T(()=>{"use strict";fs();Wd();Vl()});function $b(s){let e=(0,Bb.Router)();return e.post("/run",(t,r)=>{var a;if(!((a=t.body)!=null&&a.step)){r.status(400).send({error:"Missing step"});return}let{step:n,context:o,loginData:i}=t.body;s.webdriverApi||r.status(503).send({success:!1,reason:"Testim Agent was not started with Testim Start."}),t.setTimeout(0),Ns(n,o,s.webdriverApi,i,void 0,"agent").then(c=>{r.status(200).send(c)}).catch(c=>{jb.error("failed to run hybrid code",{e:c}),r.status(500).send(Object.assign({success:!1,error:c}))})}),e.post("/abort",(t,r)=>{var n;if(!((n=t.body)!=null&&n.stepResultId)){r.status(400).send({error:"missing stepResultId"});return}try{Td(t.body.stepResultId),r.status(204).end()}catch(o){if(o&&o.message==="No such stepResultId"){r.status(400).send({error:"No such stepResultId"});return}jb.error("hybrid code abort unexpected error",{e:o}),r.status(500).send({error:"unexpected error",info:`${o?o.message:"N/A"}`})}}),e}var Bb,jb,Wb=T(()=>{"use strict";oa();Bb=require("express");j();jb=x("hybrid-router")});var Gb,Kr,qb,Vb=T(()=>{"use strict";Gb=require("express");j();yd();Kr=(0,Gb.Router)(),qb=x("codim-router");Kr.get("/tests",async(s,e)=>{let t=await pd();e.json({tests:t,success:!0})});Kr.get("/locators",async(s,e)=>{let t=await Vn(),r=await md(t,s.query.full);e.json({locators:t,contents:r,success:!0})});Kr.post("/locators",async(s,e)=>{if(!s.body){e.status(400).send({success:!1,reason:"missing body"});return}if(!s.body.locators){e.status(400).send({success:!1,reason:"missing locators"});return}let{locators:t,mergeIntoExisting:r}=s.body;await hd(t,{mergeIntoExisting:r||!1}),e.status(200).send({success:!0})});Kr.get("/compile",async(s,e)=>{try{let t=await gd(s.body.name);e.send({success:!0,code:t})}catch(t){qb.error(t),e.json({success:!1,reason:t.message})}});Kr.post("/saveTest",async(s,e)=>{if(!s.body){e.status(400).send({success:!1,reason:"missing body"});return}try{await fd(s.body),e.send({success:!0})}catch(t){e.json({success:!1,reason:t.message}),qb.error(t)}})});var Gd,Hb,Bs,Oa,zb=T(()=>{"use strict";Gd=E(require("chalk"));Br();Hb=require("express");j();z();Bs=x("cli-router"),Oa=(0,Hb.Router)();Oa.post("/run",async(s,e)=>{let{code:t,stepId:r,incomingParams:n,context:o,testResultId:i,retryIndex:a,stepResultId:c,timeout:u,fileDataUrl:d}=s.body;if(typeof t!="string"||!r||!n||!o||!i||typeof a!="number"||!c||typeof u!="number"){e.status(400).json({success:!1,code:"invalid-params"});return}try{let m=await xs(t,r,n,o,i,a,c,u,d);m.success||(console.log(Gd.default.red(m.result.resultValue)),Bs.error("CLI Action Failure",{message:m.result.resultValue})),e.status(200).json({success:!0,data:m})}catch(m){Bs.error("failed to run cli code",{err:m}),console.log(Gd.default.red("failed to run cli code",m)),e.status(500).json({success:!1,code:"internal-error"})}});Oa.post("/install",async(s,e)=>{let{stepId:t,testResultId:r,retryIndex:n,packageData:o,stepResultId:i,timeout:a}=s.body;if(!t||typeof o!="object"||!r||typeof n!="number"||!i||typeof a!="number"){e.status(400).json({success:!1,code:"invalid-params"});return}try{let c=await Is(t,r,n,o,i,a);Bs.info("installed packages successfully"),e.status(200).json({success:!0,data:c})}catch(c){if(c instanceof at){Bs.error("failed to install node packages",{err:c}),e.status(200).json({success:!1,code:"invalid-node-package",message:c.message});return}if(c instanceof X){Bs.error("timeout installing node package"),e.status(200).json({success:!1,code:"timeout"});return}Bs.error("failed to install node packages",{err:c}),e.status(500).json({success:!1,code:"internal-error"})}})});var II,Kb=T(()=>{"use strict";Br();j();zb();II=x("cli-service");Zh().catch(s=>II.warn("failed to clean local package folder",{err:s}))});async function xI(s,e,t="utf8"){let r=Yb.join(Xb.tmpdir(),s);return await Jb.promises.writeFile(r,e,t),r}async function PI({code:s}){let e=Date.now();try{let t=`
566
+ `)}async function EI(s){var g,y,w;N("start runner init");let{project:e,lightweightMode:t,useChromeLauncher:r,mode:n,disableSockets:o}=s,i=U.fetch(),a=lI(e,{disableResults:o||Boolean((t==null?void 0:t.disableResults)&&(r||n!=="extension")),disableRemoteStep:o||Boolean(t==null?void 0:t.disableRemoteStep)});i.catch(()=>{}),a.catch(()=>{});let{authData:c,editorConfig:l,companyByProjectId:d,projectById:m,branchName:p,allGrids:f}=await bn(s);if(iI(s,d),await Promise.all([i,a]),s.browser&&U.flags.dec2022eolBrowsers.isEnabled()){let C=nn(s.browser);if(C.eol)throw new R(`Unsupported browser: ${C.browserName}`)}N("after featureFlagsReady and socketConnected"),mI(s,l),pI(s,d),gI(s,m),uI(s,p),fI(s,f),hI(s,c),await dI(s),(g=s.lightweightMode)!=null&&g.disableLabs||await Ai.loadLabFeatures(m.id,d.activePlan),((y=s.lightweightMode)==null?void 0:y.type)==="turboMode"&&(U.flags.highSpeedMode.getValue()==="disabled"||s.company.planType==="free")&&delete s.lightweightMode,((w=s.lightweightMode)==null?void 0:w.type)==="turboMode"&&console.log(`
567
+ Turbo mode will ignore step delays. Test artifacts like screenshots and logs will only be saved for failed runs. For more information see our docs: https://help.testim.io/docs/turbo-mode`),In.start(e),cI(e),await bI(s),await yI(s),vI(s);let h=Pn();await Z.setOptions(s,h)}var Bd,Lb,sI,TI,Db=T(()=>{"use strict";Bd=E(require("lodash"));F();Vl();Ql();Le();bs();ms();eu();Te();Et();j();Ft();le();ae();z();Ob();Mn();Uu();be();An();xl();Lb=30*60*1e3,sI=x("runner");TI=wI});function Mb(s){s.get("/",(e,t)=>{let r=$d();return t.status(200).json({success:!0,isTestimAgent:!0,startMode:r})}),s.get("/version",(e,t)=>{t.status(200).json({node:process.version,app:ql()})}),s.get("/loginInfo",(e,t)=>{try{let r=JSON.parse(Buffer.from(e.query.info,"base64").toString());Dl({overwriteExisting:!1,projects:r}),t.status(200).end()}catch{t.status(400).end()}})}var Ub=T(()=>{"use strict";fs();Wd();Vl()});function Bb(s){let e=(0,jb.Router)();return e.post("/run",(t,r)=>{var a;if(!((a=t.body)!=null&&a.step)){r.status(400).send({error:"Missing step"});return}let{step:n,context:o,loginData:i}=t.body;s.webdriverApi||r.status(503).send({success:!1,reason:"Testim Agent was not started with Testim Start."}),t.setTimeout(0),Ns(n,o,s.webdriverApi,i,void 0,"agent").then(c=>{r.status(200).send(c)}).catch(c=>{Fb.error("failed to run hybrid code",{e:c}),r.status(500).send(Object.assign({success:!1,error:c}))})}),e.post("/abort",(t,r)=>{var n;if(!((n=t.body)!=null&&n.stepResultId)){r.status(400).send({error:"missing stepResultId"});return}try{Td(t.body.stepResultId),r.status(204).end()}catch(o){if(o&&o.message==="No such stepResultId"){r.status(400).send({error:"No such stepResultId"});return}Fb.error("hybrid code abort unexpected error",{e:o}),r.status(500).send({error:"unexpected error",info:`${o?o.message:"N/A"}`})}}),e}var jb,Fb,$b=T(()=>{"use strict";ia();jb=require("express");j();Fb=x("hybrid-router")});var Wb,Kr,Gb,qb=T(()=>{"use strict";Wb=require("express");j();yd();Kr=(0,Wb.Router)(),Gb=x("codim-router");Kr.get("/tests",async(s,e)=>{let t=await pd();e.json({tests:t,success:!0})});Kr.get("/locators",async(s,e)=>{let t=await qn(),r=await md(t,s.query.full);e.json({locators:t,contents:r,success:!0})});Kr.post("/locators",async(s,e)=>{if(!s.body){e.status(400).send({success:!1,reason:"missing body"});return}if(!s.body.locators){e.status(400).send({success:!1,reason:"missing locators"});return}let{locators:t,mergeIntoExisting:r}=s.body;await hd(t,{mergeIntoExisting:r||!1}),e.status(200).send({success:!0})});Kr.get("/compile",async(s,e)=>{try{let t=await gd(s.body.name);e.send({success:!0,code:t})}catch(t){Gb.error(t),e.json({success:!1,reason:t.message})}});Kr.post("/saveTest",async(s,e)=>{if(!s.body){e.status(400).send({success:!1,reason:"missing body"});return}try{await fd(s.body),e.send({success:!0})}catch(t){e.json({success:!1,reason:t.message}),Gb.error(t)}})});var Gd,Vb,js,La,Hb=T(()=>{"use strict";Gd=E(require("chalk"));$r();Vb=require("express");j();z();js=x("cli-router"),La=(0,Vb.Router)();La.post("/run",async(s,e)=>{let{code:t,stepId:r,incomingParams:n,context:o,testResultId:i,retryIndex:a,stepResultId:c,timeout:l,fileDataUrl:d}=s.body;if(typeof t!="string"||!r||!n||!o||!i||typeof a!="number"||!c||typeof l!="number"){e.status(400).json({success:!1,code:"invalid-params"});return}try{let m=await xs(t,r,n,o,i,a,c,l,d);m.success||(console.log(Gd.default.red(m.result.resultValue)),js.error("CLI Action Failure",{message:m.result.resultValue})),e.status(200).json({success:!0,data:m})}catch(m){js.error("failed to run cli code",{err:m}),console.log(Gd.default.red("failed to run cli code",m)),e.status(500).json({success:!1,code:"internal-error"})}});La.post("/install",async(s,e)=>{let{stepId:t,testResultId:r,retryIndex:n,packageData:o,stepResultId:i,timeout:a}=s.body;if(!t||typeof o!="object"||!r||typeof n!="number"||!i||typeof a!="number"){e.status(400).json({success:!1,code:"invalid-params"});return}try{let c=await Is(t,r,n,o,i,a);js.info("installed packages successfully"),e.status(200).json({success:!0,data:c})}catch(c){if(c instanceof at){js.error("failed to install node packages",{err:c}),e.status(200).json({success:!1,code:"invalid-node-package",message:c.message});return}if(c instanceof X){js.error("timeout installing node package"),e.status(200).json({success:!1,code:"timeout"});return}js.error("failed to install node packages",{err:c}),e.status(500).json({success:!1,code:"internal-error"})}})});var SI,zb=T(()=>{"use strict";$r();j();Hb();SI=x("cli-service");Zh().catch(s=>SI.warn("failed to clean local package folder",{err:s}))});async function RI(s,e,t="utf8"){let r=Xb.join(Jb.tmpdir(),s);return await Kb.promises.writeFile(r,e,t),r}async function xI({code:s}){let e=Date.now();try{let t=`
568
568
  module.paths = ${JSON.stringify(module.paths)};
569
569
  process.on('unhandledRejection', (error) => {
570
570
  process.send({type: 'unhandledRejection', error: {message: error.message, stack: error.stack}});
@@ -575,12 +575,12 @@ Turbo mode will ignore step delays. Test artifacts like screenshots and logs wil
575
575
  process.exit(1);
576
576
  });
577
577
  ${s};
578
- `,r=await xI(`tst-playground-${Date.now()}.js`,t),n=CI(r);Jr[e]=n.child;let{error:o,exitCode:i}=await n;if(o)throw o;if(i!==0)throw new Error(`Process exited with exit code: ${i}`);return}finally{Jr[e]&&(Jr[e].kill(),delete Jr[e])}}async function ew({code:s,type:e}){if(["playwright","puppeteer","selenium"].includes(e))return PI({code:s});throw new gr}async function tw(){Object.keys(Jr).forEach(s=>{Jr[s].kill(),delete Jr[s]})}var Jb,Xb,Yb,Qb,Zb,Jr,CI,rw=T(()=>{"use strict";Jb=E(require("fs")),Xb=E(require("os")),Yb=E(require("path")),Qb=require("child_process");z();Zb=["playwright","selenium","puppeteer"],Jr={};CI=s=>{let e,t=new Promise(n=>{e=n}),r=(0,Qb.fork)(s,{stdio:["inherit","inherit","inherit","ipc"]});return t.child=r,r.on("message",n=>{if(!n)return;let{type:o,error:i}=n;i&&["uncaughtException","unhandledRejection"].includes(o)&&e({error:Object.assign(new yr,{innerStack:n.error.stack})})}),r.on("error",n=>{e({error:n})}),r.on("exit",n=>{e({exitCode:n})}),t}});var ow,La,iw,sw,nw,AI,aw=T(()=>{"use strict";ow=require("express");j();z();le();rw();La=(0,ow.Router)(),iw=x("playground-router"),sw=["localhost","app.testim.io","playground.testim.io","staging.testim.io","app.staging.testim.cc","tta-crm.tricentis.com"],nw=s=>{if(!s)return{};try{return new URL(s)}catch{return{}}},AI=(s,e,t)=>{if(Hs)return t();let r=s.headers.referer,n=s.headers.origin;if(!r&&!n)return e.status(400).send();let o=nw(r),i=nw(n);return!sw.includes(o.hostname)&&!sw.includes(i.hostname)?e.status(400).send():t()};La.post("/run",[AI],async(s,e)=>{let t=s.body||{},{code:r,type:n}=t;if(!r||!Zb.includes(n)){e.status(400).send({success:!1,reason:"missing arguments"});return}try{await ew(t),e.send({success:!0})}catch(o){if(o instanceof gr){e.status(404).send({success:!1});return}if(o instanceof yr){e.json({success:!1,type:"playground-error",stack:o.innerStack});return}e.json({success:!1,reason:o.message}),iw.error(o)}});La.post("/stop",(s,e)=>{try{tw(),e.send({success:!0})}catch(t){e.json({success:!1,reason:t.message}),iw.error(t)}})});function lw(s){let e=(0,cw.Router)();return e.get("/cdp-url",(t,r)=>{if(!s){r.status(503).send({error:"Testim standalone browser is not running"});return}r.status(200).send({url:s.webdriverApi.cdpUrl})}),e.get("/status",(t,r)=>{if(!s){r.status(503).send({ok:!1});return}r.status(200).send({ok:!0})}),e}var cw,uw=T(()=>{"use strict";cw=require("express")});var fw={};$(fw,{orchestrateRoutes:()=>kI});function kI(s,e){let t=(0,pw.default)();s(t),t.use(qd.default.urlencoded({extended:!1,limit:"50mb"})),t.use((0,mw.default)()),t.use(qd.default.json({limit:"50mb"}));let n={methods:["GET","PUT","POST","DELETE","OPTIONS"],allowedHeaders:["Content-Type","Authorization"],credentials:!0,maxAge:86400,origin:Ie||Hs?"*":["http://localhost:3000","https://app.testim.io","https://staging.testim.io","https://playground.testim.io","https://app.staging.testim.cc","chrome-extension://pebeiooilphfmbohdbhbomomkkoghoia","https://tta-crm.tricentis.com"]};return t.use("*",(0,dw.default)(n)),Ub(t),t.use("/files",Kr),t.use("/playground",La),t.use("/cliJs",Oa),t.use("/standalone-browser",lw(e)),t.use("/hybrid",$b(e)),t.use((o,i)=>{i.status(404).send("Endpoint Not Found")}),t}var dw,pw,qd,mw,hw=T(()=>{"use strict";dw=E(require("cors")),pw=E(require("express")),qd=E(require("body-parser")),mw=E(require("compression"));Fb();Wb();Vb();Kb();aw();uw();le()});var gw={};$(gw,{init:()=>_I});async function _I({agentPort:s,agentBind:e,project:t,token:r,installPlaygroundPlaywrightDeps:n,installPlaygroundPuppeteerDeps:o,installPlaygroundSeleniumDeps:i},a){await LI({installPlaygroundPlaywrightDeps:n,installPlaygroundPuppeteerDeps:o,installPlaygroundSeleniumDeps:i,project:t}),await OI({agentPort:s,agentBind:e,project:t,token:r},a)}function OI({agentPort:s,agentBind:e,project:t,token:r},n){return new Promise((o,i)=>{let a=()=>{};t&&(Im(t,r),a=f=>{f.use((h,g,y)=>{h.project=t,y()})});let c=(hw(),G(fw)).orchestrateRoutes(a,n),d=require("http").createServer(c);d.listen(s,e),d.on("error",m),d.on("listening",p);function m(f){if(f.syscall!=="listen")return i(f);switch(f.code){case"EACCES":case"EPERM":return i(new R(`Port ${s} requires elevated privileges`));case"EADDRINUSE":return i(new R(`Port ${s} is already in use, is another Testim instance running?`));default:return i(f)}}function p(){let{port:f}=d.address();console.log(`Running on port: ${f}`),NI()}})}function LI({installPlaygroundPlaywrightDeps:s,installPlaygroundPuppeteerDeps:e,installPlaygroundSeleniumDeps:t,project:r}){let n=[];return s&&n.push(ge("playwright")),e&&n.push(ge("puppeteer")),t&&n.push(ge("selenium-webdriver"),Cr({projectId:r})),Promise.all(n)}async function NI(){await require("prompts")({type:"text",message:'Type the word "stop" or Press Ctrl + C.',validate:t=>t.toUpperCase().trim()==="STOP"}),console.log("Exiting Testim CLI"),process.exit(0)}var yw=T(()=>{"use strict";Et();z();ft();cs()});var Rw={};$(Rw,{getStartedWithStart:()=>$d,runAgentMode:()=>FI});async function FI(s){var r;let e;if(await Pr(s.playerLocation,s.canary),s.startTestimBrowser){await $I();try{e=await BI(s)}catch(n){throw(r=n==null?void 0:n.message)!=null&&r.includes("user data directory is already in use")?new R('Please close all chrome browsers that were opened with "testim start" and try again'):n}}let t=await Promise.resolve().then(()=>(yw(),gw));return e!=null&&e.webdriverApi&&setTimeout(async()=>{setTimeout(()=>(da(),G(ld)));let o=["webpack"];for(let i of o)await ge(i,{silent:!0}).catch(()=>null)},6e3),t.init(s,e)}function $d(){return Ew}function bw(s){try{return process.kill(s,0)}catch{return!1}}async function jI(s,e,t){let r=lr.join(Nt,`chrome-${mn}-process`),n=3e3,o=()=>{ke.rmSync(r,{recursive:!0}),console.log(`
578
+ `,r=await RI(`tst-playground-${Date.now()}.js`,t),n=II(r);Jr[e]=n.child;let{error:o,exitCode:i}=await n;if(o)throw o;if(i!==0)throw new Error(`Process exited with exit code: ${i}`);return}finally{Jr[e]&&(Jr[e].kill(),delete Jr[e])}}async function Zb({code:s,type:e}){if(["playwright","puppeteer","selenium"].includes(e))return xI({code:s});throw new yr}async function ew(){Object.keys(Jr).forEach(s=>{Jr[s].kill(),delete Jr[s]})}var Kb,Jb,Xb,Yb,Qb,Jr,II,tw=T(()=>{"use strict";Kb=E(require("fs")),Jb=E(require("os")),Xb=E(require("path")),Yb=require("child_process");z();Qb=["playwright","selenium","puppeteer"],Jr={};II=s=>{let e,t=new Promise(n=>{e=n}),r=(0,Yb.fork)(s,{stdio:["inherit","inherit","inherit","ipc"]});return t.child=r,r.on("message",n=>{if(!n)return;let{type:o,error:i}=n;i&&["uncaughtException","unhandledRejection"].includes(o)&&e({error:Object.assign(new br,{innerStack:n.error.stack})})}),r.on("error",n=>{e({error:n})}),r.on("exit",n=>{e({exitCode:n})}),t}});var nw,Na,ow,rw,sw,PI,iw=T(()=>{"use strict";nw=require("express");j();z();le();tw();Na=(0,nw.Router)(),ow=x("playground-router"),rw=["localhost","app.testim.io","playground.testim.io","staging.testim.io","app.staging.testim.cc","tta-crm.tricentis.com"],sw=s=>{if(!s)return{};try{return new URL(s)}catch{return{}}},PI=(s,e,t)=>{if(Vs)return t();let r=s.headers.referer,n=s.headers.origin;if(!r&&!n)return e.status(400).send();let o=sw(r),i=sw(n);return!rw.includes(o.hostname)&&!rw.includes(i.hostname)?e.status(400).send():t()};Na.post("/run",[PI],async(s,e)=>{let t=s.body||{},{code:r,type:n}=t;if(!r||!Qb.includes(n)){e.status(400).send({success:!1,reason:"missing arguments"});return}try{await Zb(t),e.send({success:!0})}catch(o){if(o instanceof yr){e.status(404).send({success:!1});return}if(o instanceof br){e.json({success:!1,type:"playground-error",stack:o.innerStack});return}e.json({success:!1,reason:o.message}),ow.error(o)}});Na.post("/stop",(s,e)=>{try{ew(),e.send({success:!0})}catch(t){e.json({success:!1,reason:t.message}),ow.error(t)}})});function cw(s){let e=(0,aw.Router)();return e.get("/cdp-url",(t,r)=>{if(!s){r.status(503).send({error:"Testim standalone browser is not running"});return}r.status(200).send({url:s.webdriverApi.cdpUrl})}),e.get("/status",(t,r)=>{if(!s){r.status(503).send({ok:!1});return}r.status(200).send({ok:!0})}),e}var aw,lw=T(()=>{"use strict";aw=require("express")});var mw={};$(mw,{orchestrateRoutes:()=>CI});function CI(s,e){let t=(0,dw.default)();s(t),t.use(qd.default.urlencoded({extended:!1,limit:"50mb"})),t.use((0,pw.default)()),t.use(qd.default.json({limit:"50mb"}));let n={methods:["GET","PUT","POST","DELETE","OPTIONS"],allowedHeaders:["Content-Type","Authorization"],credentials:!0,maxAge:86400,origin:Ie||Vs?"*":["http://localhost:3000","https://app.testim.io","https://staging.testim.io","https://playground.testim.io","https://app.staging.testim.cc","chrome-extension://pebeiooilphfmbohdbhbomomkkoghoia","https://tta-crm.tricentis.com"]};return t.use("*",(0,uw.default)(n)),Mb(t),t.use("/files",Kr),t.use("/playground",Na),t.use("/cliJs",La),t.use("/standalone-browser",cw(e)),t.use("/hybrid",Bb(e)),t.use((o,i)=>{i.status(404).send("Endpoint Not Found")}),t}var uw,dw,qd,pw,fw=T(()=>{"use strict";uw=E(require("cors")),dw=E(require("express")),qd=E(require("body-parser")),pw=E(require("compression"));Ub();$b();qb();zb();iw();lw();le()});var hw={};$(hw,{init:()=>AI});async function AI({agentPort:s,agentBind:e,project:t,token:r,installPlaygroundPlaywrightDeps:n,installPlaygroundPuppeteerDeps:o,installPlaygroundSeleniumDeps:i},a){await _I({installPlaygroundPlaywrightDeps:n,installPlaygroundPuppeteerDeps:o,installPlaygroundSeleniumDeps:i,project:t}),await kI({agentPort:s,agentBind:e,project:t,token:r},a)}function kI({agentPort:s,agentBind:e,project:t,token:r},n){return new Promise((o,i)=>{let a=()=>{};t&&(Im(t,r),a=f=>{f.use((h,g,y)=>{h.project=t,y()})});let c=(fw(),G(mw)).orchestrateRoutes(a,n),d=require("http").createServer(c);d.listen(s,e),d.on("error",m),d.on("listening",p);function m(f){if(f.syscall!=="listen")return i(f);switch(f.code){case"EACCES":case"EPERM":return i(new R(`Port ${s} requires elevated privileges`));case"EADDRINUSE":return i(new R(`Port ${s} is already in use, is another Testim instance running?`));default:return i(f)}}function p(){let{port:f}=d.address();console.log(`Running on port: ${f}`),OI()}})}function _I({installPlaygroundPlaywrightDeps:s,installPlaygroundPuppeteerDeps:e,installPlaygroundSeleniumDeps:t,project:r}){let n=[];return s&&n.push(ge("playwright")),e&&n.push(ge("puppeteer")),t&&n.push(ge("selenium-webdriver"),Cr({projectId:r})),Promise.all(n)}async function OI(){await require("prompts")({type:"text",message:'Type the word "stop" or Press Ctrl + C.',validate:t=>t.toUpperCase().trim()==="STOP"}),console.log("Exiting Testim CLI"),process.exit(0)}var gw=T(()=>{"use strict";Et();z();ft();cs()});var Sw={};$(Sw,{getStartedWithStart:()=>$d,runAgentMode:()=>MI});async function MI(s){var r;let e;if(await Ar(s.playerLocation,s.canary),s.startTestimBrowser){await jI();try{e=await FI(s)}catch(n){throw(r=n==null?void 0:n.message)!=null&&r.includes("user data directory is already in use")?new R('Please close all chrome browsers that were opened with "testim start" and try again'):n}}let t=await Promise.resolve().then(()=>(gw(),hw));return e!=null&&e.webdriverApi&&setTimeout(async()=>{setTimeout(()=>(pa(),G(ld)));let o=["webpack"];for(let i of o)await ge(i,{silent:!0}).catch(()=>null)},6e3),t.init(s,e)}function $d(){return vw}function yw(s){try{return process.kill(s,0)}catch{return!1}}async function UI(s,e,t){let r=ur.join(Nt,`chrome-${pn}-process`),n=3e3,o=()=>{ke.rmSync(r,{recursive:!0}),console.log(`
579
579
 
580
- Browser session ended`),process.exit(0)};if(await ye(r)){let f=JSON.parse(ke.readFileSync(r));if(bw(f.pid)){let h=()=>bw(f.pid)?setTimeout(h,n):o();return h(),{webdriverApi:f}}}let i=await Po();await ye($s)||await ke.promises.mkdir($s,{recursive:!0});let c=[...Sw($s,e,t,i).desiredCapabilities.chromeOptions.args,...Da.Launcher.defaultFlags().filter(f=>!["--disable-extensions","--disable-component-extensions-with-background-pages"].includes(f))],u={GOOGLE_API_KEY:"AIzaSyCkfPOPZXDKNn8hhgu3JrA62wIgC93d44k",GOOGLE_DEFAULT_CLIENT_ID:"811574891467.apps.googleusercontent.com",GOOGLE_DEFAULT_CLIENT_SECRET:"kdloedMFGdGla2P1zacGjAQh"},d=`${s.extensionPath?"http://localhost:3000/app/":"https://app.testim.io"}?startMode=true`,m=await Da.launch({chromeFlags:c,startingUrl:d,ignoreDefaultFlags:!0,userDataDir:$s,chromePath:i,envVars:u}),p={port:m.port,pid:m.pid,cdpUrl:await Ir(`localhost:${m.port}`)};return ke.writeFileSync(r,JSON.stringify(p)),m.process.once("exit",o),m.process.once("close",o),{webdriverApi:p}}async function BI(s){let e=`${Qa}/extension/testim-full-master.zip`,t=lr.basename(e),r=lr.join(Nt,t),n=lr.join(Nt,`${t}__unzipped__`),o=!(s.ext||s.extensionPath);if(o&&await ye(r)){let f=await ke.promises.stat(r);o=Date.now()-MI>f.mtimeMs}if(await ke.promises.mkdir(Nt,{recursive:!0}),o){let f=(0,Tw.default)("Downloading Testim Editor").start();await qe(e,r);try{await Ye(r,n)}catch{await ke.promises.rm(r,{recursive:!0,force:!0}),await qe(e,r);try{await Ye(r,n)}catch{throw await ke.promises.rm(r,{recursive:!0,force:!0}),f.fail("Failed to download Testim Editor"),new Error("Failed to download Testim Editor")}}finally{s.downloadBrowser||await ke.promises.rm(n,{recursive:!0,force:!0})}f.succeed()}let i=s.extensionPath?null:(await ke.promises.readFile(s.ext||r)).toString("base64");if(s.downloadBrowser)return await jI(s,i,n);await Cr({projectId:s.project},{chromeBinaryLocation:s.chromeBinaryLocations});let a=Sw($s,i,s.extensionPath,s.chromeBinaryLocations),c=Dn(),{SeleniumPerfStats:u}=(Ts(),G(yi)),d=new c;d.seleniumPerfStats=new u;let m=await d.initClient(a);Ew=!0;let p=`${s.extensionPath?"http://localhost:3000/app/":"https://app.testim.io"}?startMode=true`;await d.url(p),Object.assign(d,{initialUrl:p});try{d.cdpUrl=await Ir(m.value["goog:chromeOptions"].debuggerAddress)}catch{}return{webdriverApi:d}}function Sw(s,e,t,r){let n=e?[e]:[],o=[`--user-data-dir=${s}`,"--log-level=OFF","--silent-debugger-extension-api","--no-first-run"];return t&&o.push(`--load-extension=${t}`),{logLevel:DI,desiredCapabilities:{chromeOptions:{args:o,extensions:n,binary:r},browserName:"chrome"},host:"localhost",port:9515}}async function $I(){if(await ye(Na))try{let{webSocketDebuggerUrl:s}=await WI();await GI(s),await ke.promises.unlink(Na)}catch(s){s&&s.message==="unable to connect to devtools http server"&&await ke.promises.unlink(Na)}}async function WI(){let s=await ke.promises.readFile(Na,{encoding:"utf8"}),[e,t]=s.split(`
581
- `).map(o=>o.trim()),r=Number.parseInt(e,10);if(!Number.isInteger(r)||r<1||r>65535)throw new Error("invalid port number");if(!t.startsWith("/devtools/browser/"))throw new Error("invalid devtools browser url");let n=await Ir(`localhost:${r}`,500);if(!n.endsWith(t))throw new Error("invariant webSocketDebuggerUrl miss match");return{port:r,webSocketDebuggerUrl:n}}async function GI(s,e=100){let t=await qI(s,e);return ct(r=>{t.send(JSON.stringify({id:0,method:"Browser.close"}),r)})}async function qI(s,e=100){let t=new vw.default(s,{timeout:e}),r=ct(o=>{t.once("open",o)}).then(()=>{t.removeAllListeners()}),n=ct(o=>{t.once("error",o)}).catch(()=>{t.close(),t.removeAllListeners()});return Promise.race([r,n]).then(()=>t)}var ww,Tw,vw,ke,lr,Da,DI,MI,$s,UI,Na,Ew,Wd=T(()=>{"use strict";ww=E(require("ms")),Tw=E(require("ora")),vw=E(require("ws")),ke=E(require("fs")),lr=E(require("path")),Da=E(require("chrome-launcher"));le();cs();z();ft();$c();F();DI=Ks?"verbose":"silent",MI=(0,ww.default)("1h"),$s=lr.join(Nt,"profile"),UI="DevToolsActivePort",Na=lr.join($s,UI);Ew=!1});var c0=require("source-map-support/register");var Xd;(Xd=Array.prototype).at||(Xd.at=function(s){let e=Number.isInteger(s)?s:0,t=e>=0?e:this.length+e;if(!(t<0||t>=this.length))return this[t]});var Yd=require("perf_hooks");var no=E(require("os")),Gs=E(require("url")),qs=E(require("http")),Fa=E(require("https")),Qn=E(require("form-data")),Zn=class{constructor(){this.onloadstart=null;this.onprogress=null;this.onabort=null;this.onerror=null;this.onload=null;this.ontimeout=null;this.onloadend=null;this._listeners={}}addEventListener(e,t){var r;e=e.toLowerCase(),(r=this._listeners)[e]||(r[e]=[]),this._listeners[e].push(t)}removeEventListener(e,t){let r;e=e.toLowerCase(),this._listeners[e]&&(r=this._listeners[e].indexOf(t),r!==-1&&this._listeners[e].splice(r,1))}dispatchEvent(e){var n;e.currentTarget=this,e.target=this;let t=e.type,r=this._listeners[t]||[];for(let o of r)o==null||o.call(this,e);(n=this[`on${t}`])==null||n.call(this,e)}},eo=class extends Zn{constructor(t){super();this._request=t;this._contentType=null;this._body=null}_reset(){this._contentType=null,this._body=null}_setData(t){if(!(typeof t>"u"||t===null))if(typeof t=="string")t.length!==0&&(this._contentType="text/plain;charset=UTF-8"),this._body=Buffer.from(t,"utf8");else if(Buffer.isBuffer(t))this._body=t;else if(t instanceof ArrayBuffer){let r=Buffer.alloc(t.byteLength),n=new Uint8Array(t);for(let o=0;o<t.byteLength;o++)r[o]=n[o];this._body=r}else if("buffer"in t&&t.buffer instanceof ArrayBuffer){let r=Buffer.alloc(t.byteLength),n=t.byteOffset,o=new Uint8Array(t.buffer);for(let i=0;i<t.byteLength;i++)r[i]=o[i+n];this._body=r}else if(typeof t=="object"&&t instanceof Qn.default)this._body=null;else throw new Error(`Unsupported send() data ${t}`)}_finalizeHeaders(t,r){this._contentType&&!("content-type"in r)&&(t["Content-Type"]=this._contentType),this._body&&(t["Content-Length"]=this._body.length.toString())}_startUpload(t){this._body&&t.write(this._body),t.end()}},Ws=class{constructor(e){this.type=e;this.target=null;this.currentTarget=null;this.lengthComputable=!1;this.loaded=0;this.total=0;this.bubbles=!1;this.cancelable=!1}},to=class extends Error{},ro=class extends Error{},so=class extends Error{},ur=class extends Error{},Re=class extends Zn{constructor(t){super();this.UNSENT=0;this.OPENED=1;this.HEADERS_RECEIVED=2;this.LOADING=3;this.DONE=4;this.nodejsHttpAgent=qs.globalAgent;this.nodejsHttpsAgent=Fa.globalAgent;this.nodejsBaseUrl=null;this._restrictedMethods={CONNECT:!0,TRACE:!0,TRACK:!0};this._restrictedHeaders={"accept-charset":!0,"accept-encoding":!0,"access-control-request-headers":!0,"access-control-request-method":!0,connection:!0,"content-length":!0,cookie:!0,cookie2:!0,date:!0,dnt:!0,expect:!0,host:!0,"keep-alive":!0,origin:!0,referer:!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0,"user-agent":!0,via:!0};this._privateHeaders={"set-cookie":!1,"set-cookie2":!1};this._userAgent=`Mozilla/5.0 (${no.type()} ${no.arch()}) node.js/${process.versions.node} v8/${process.versions.v8}`;this.onreadystatechange=null;this.readyState=Re.UNSENT;this.response=null;this.responseText="";this.responseType="";this.status=0;this.statusText="";this.timeout=0;this.upload=new eo(this);this._method=null;this._url=null;this._sync=!1;this._headers=null;this._loweredHeaders=null;this._mimeOverride=null;this._request=null;this._response=null;this._responseParts=null;this._responseHeaders=null;this._aborting=null;this._error=null;this._loadedBytes=0;this._totalBytes=0;this._lengthComputable=!1;this._anonymous=t==null?void 0:t.anon}static nodejsSet(t){Re.prototype.nodejsSet(t)}nodejsSet(t){if("httpAgent"in t&&(this.nodejsHttpAgent=t.httpAgent),"httpsAgent"in t&&(this.nodejsHttpsAgent=t.httpsAgent),"baseUrl"in t){let r=t.baseUrl;if(r!==null&&!Gs.parse(r,!1,!0).protocol)throw new to("baseUrl must be an absolute URL");this.nodejsBaseUrl=r}}open(t,r,n){if(t=t.toUpperCase(),t in this._restrictedMethods)throw new so(`HTTP method ${t} is not allowed in XHR`);let o=this._parseUrl(r);n===void 0&&(n=!0),this._method=t,this._url=o,this._sync=!n,this._headers={},this._loweredHeaders={},this._mimeOverride=null,this._setReadyState(Re.OPENED),this._request=null,this._response=null,this.status=0,this.statusText="",this._responseParts=[],this._responseHeaders=null,this._loadedBytes=0,this._totalBytes=0,this._lengthComputable=!1}setRequestHeader(t,r){if(this.readyState!==Re.OPENED)throw new ur("XHR readyState must be OPENED");let n=t.toLowerCase();this._restrictedHeaders[n]||/^sec-/.test(n)||/^proxy-/.test(n)||(r=r.toString(),n in this._loweredHeaders?(t=this._loweredHeaders[n],this._headers[t]=`${this._headers[t]}, ${r}`):(this._loweredHeaders[n]=t,this._headers[t]=r))}send(t){if(this.readyState!==Re.OPENED)throw new ur("XHR readyState must be OPENED");if(this._request)throw new ur("send() already called");switch(this._url.protocol){case"file:":this._sendFile();break;case"http:":case"https:":this._sendHttp(t);break;default:throw new ro(`Unsupported protocol ${this._url.protocol}`)}}abort(){this._request&&(this._request.abort(),this._setError(),this._dispatchProgress("abort"),this._dispatchProgress("loadend"))}getResponseHeader(t){var n;let r=t.toLowerCase();return((n=this._responseHeaders)==null?void 0:n[r])||null}getAllResponseHeaders(){return this._responseHeaders?Object.entries(this._responseHeaders).map(([t,r])=>`${t}: ${r}`).join(`\r
582
- `):""}overrideMimeType(t){if([Re.LOADING,Re.DONE].includes(this.readyState))throw new ur("overrideMimeType() not allowed in LOADING or DONE");this._mimeOverride=t.toLowerCase()}_setReadyState(t){this.readyState=t;let r=new Ws("readystatechange");this.dispatchEvent(r)}_sendFile(){throw this._url.method!=="GET"?new ro("The file protocol only supports GET"):new Error("Protocol file: not implemented")}_sendHttp(t){if(this._sync)throw new Error("Synchronous XHR processing not implemented");t!=null&&(this._method==="GET"||this._method==="HEAD")?t=null:t||(t=""),this.upload._setData(t),this._finalizeHeaders(t),this._sendHxxpRequest(t)}_sendHxxpRequest(t){let r=this._url.protocol==="http:"?this.nodejsHttpAgent:this.nodejsHttpsAgent,o=(this._url.protocol==="http:"?qs:Fa).request({hostname:this._url.hostname,port:this._url.port,path:this._url.path,auth:this._url.auth,method:this._method,headers:this._headers,agent:r});typeof t=="object"&&t instanceof Qn.default&&t.pipe(o),this._request=o,this.timeout&&o.setTimeout(this.timeout,()=>this._onHttpTimeout(o)),o.on("response",i=>this._onHttpResponse(o,i)),o.on("error",()=>this._onHttpRequestError(o)),this.upload._startUpload(o),this._request===o&&this._dispatchProgress("loadstart")}_finalizeHeaders(t){typeof t=="object"&&t instanceof Qn.default&&Object.assign(this._headers,t.getHeaders()),this._headers.Connection="keep-alive",this._headers.Host=this._url.host,this._anonymous&&(this._headers.Referer="about:blank"),this._headers["User-Agent"]=this._userAgent,this.upload._finalizeHeaders(this._headers,this._loweredHeaders)}_onHttpResponse(t,r){if(this._request!==t)return;if([301,302,303,307,308].includes(r.statusCode)){this._url=this._parseUrl(r.headers.location),this._method="GET","content-type"in this._loweredHeaders&&(delete this._headers[this._loweredHeaders["content-type"]],delete this._loweredHeaders["content-type"]),"Content-Type"in this._headers&&delete this._headers["Content-Type"],delete this._headers["Content-Length"],this.upload._reset(),this._finalizeHeaders(),this._sendHxxpRequest();return}this._response=r,this._response.on("data",o=>this._onHttpResponseData(r,o)),this._response.on("end",()=>this._onHttpResponseEnd(r)),this._response.on("close",()=>this._onHttpResponseClose(r)),this.status=this._response.statusCode,this.statusText=qs.STATUS_CODES[this.status],this._parseResponseHeaders(r);let n=this._responseHeaders["content-length"];n?(this._totalBytes=parseInt(n,10),this._lengthComputable=!0):this._lengthComputable=!1,this._setReadyState(Re.HEADERS_RECEIVED)}_onHttpResponseData(t,r){if(this._response===t)return this._responseParts.push(r),this._loadedBytes+=r.length,this.readyState!==Re.LOADING&&this._setReadyState(Re.LOADING),this._dispatchProgress("progress")}_onHttpResponseEnd(t){if(this._response===t)return this._parseResponse(),this._request=null,this._response=null,this._setReadyState(Re.DONE),this._dispatchProgress("load"),this._dispatchProgress("loadend")}_onHttpResponseClose(t){if(this._response!==t)return;let r=this._request;return this._setError(),r.abort(),this._setReadyState(Re.DONE),this._dispatchProgress("error"),this._dispatchProgress("loadend")}_onHttpTimeout(t){if(this._request===t)return this._setError(),t.abort(),this._setReadyState(Re.DONE),this._dispatchProgress("timeout"),this._dispatchProgress("loadend")}_onHttpRequestError(t){if(this._request===t)return this._setError(),t.abort(),this._setReadyState(Re.DONE),this._dispatchProgress("error"),this._dispatchProgress("loadend")}_dispatchProgress(t){let r=new Ws(t);r.lengthComputable=this._lengthComputable,r.loaded=this._loadedBytes,r.total=this._totalBytes,this.dispatchEvent(r)}_setError(){this._request=null,this._response=null,this._responseHeaders=null,this._responseParts=null}_parseUrl(t){let r,n,o,i=this.nodejsBaseUrl===null?t:Gs.resolve(this.nodejsBaseUrl,t),a=Gs.parse(i,!1,!0);return a.hash=null,a.auth&&(typeof o<"u"&&o!==null||typeof n<"u"&&n!==null)&&(r=a.auth.indexOf(":"),r===-1?o||(o=a.auth):(o||(o=a.substring(0,r)),n||(n=a.substring(r+1)))),(o||n)&&(a.auth=`${o}:${n}`),a}_parseResponseHeaders(t){this._responseHeaders={},Object.entries(t.headers).forEach(([r,n])=>{let o=r.toLowerCase();this._privateHeaders[o]||(this._mimeOverride!==null&&o==="content-type"&&(n=this._mimeOverride),this._responseHeaders[o]=n)}),this._mimeOverride!==null&&!("content-type"in this._responseHeaders)&&(this._responseHeaders["content-type"]=this._mimeOverride)}_parseResponse(){let t=Buffer.concat(this._responseParts);switch(this._responseHeaders["content-encoding"]==="gzip"&&(t=require("zlib").gunzipSync(t)),this._responseParts=null,this.responseType){case"text":this._parseTextResponse(t);break;case"json":this.responseText=null;try{this.response=JSON.parse(t.toString("utf-8"))}catch{this.response=null}break;case"buffer":this.responseText=null,this.response=t;break;case"arraybuffer":{this.responseText=null;let r=new ArrayBuffer(t.length),n=new Uint8Array(r);for(let o=0;o<t.length;o++)n[o]=t[o];this.response=r;break}default:this._parseTextResponse(t)}}_parseTextResponse(t){try{this.responseText=t.toString(this._parseResponseEncoding())}catch{this.responseText=t.toString("binary")}this.response=this.responseText}_parseResponseEncoding(){let t=this._responseHeaders["content-type"],r=/;\s*charset=(.*)$/.exec(t);return t&&r?r[1]:"utf-8"}},_e=Re;_e.SyntaxError=to,_e.ProgressEvent=Ws,_e.SecurityError=so,_e.XMLHttpRequest=Re,_e.InvalidStateError=ur,_e.XMLHttpRequestUpload=eo,_e.UNSENT=0,_e.OPENED=1,_e.HEADERS_RECEIVED=2,_e.LOADING=3,_e.DONE=4;Object.assign(global,{xhr2:_e,XMLHttpRequest:_e,performance:Yd.performance,...typeof Blob>"u"&&{Blob:require("buffer").Blob}});var Iw=E(require("semver"));Le();xl();qt();cs();var xw=E(require("chalk")),Cw=require("events");ae();vn();z();ae();Oo();j();var Um=E(require("os")),Cl=E(require("path")),Pl=E(require("chalk")),jo=require("fs");function Fm(s){var e,t,r;if(!((e=s==null?void 0:s.message)!=null&&e.includes("SIGINT")))try{let n=Um.homedir();(0,jo.mkdirSync)(Cl.resolve(n,".testim_logs"),{recursive:!0});let o=Cl.resolve(n,".testim_logs",`${new Date().toISOString().replace(/:|\./g,"_")}.log`);console.log("Oops :( The test runner has encountered an unexpected error. A complete log of this run can be found in:"),console.log(` ${o}`),(t=s==null?void 0:s.message)!=null&&t.includes("Unable to compile TypeScript")&&((r=s.stack)!=null&&r.includes("runner/src"))&&process.argv.some(i=>i.includes("player-require-path"))&&(console.log(Pl.default.red("Looks like you got a TypeScript compile error champ - but it's not a very good one because we use TypeScript in transpile-only mode")),console.log(Pl.default.red("change require('ts-node/register/transpile-only'); to require('ts-node/register'); for better errors"))),(0,jo.writeFileSync)(o,`${s}
580
+ Browser session ended`),process.exit(0)};if(await ye(r)){let f=JSON.parse(ke.readFileSync(r));if(yw(f.pid)){let h=()=>yw(f.pid)?setTimeout(h,n):o();return h(),{webdriverApi:f}}}let i=await Ao();await ye(Bs)||await ke.promises.mkdir(Bs,{recursive:!0});let c=[...Ew(Bs,e,t,i).desiredCapabilities.chromeOptions.args,...Ma.Launcher.defaultFlags().filter(f=>!["--disable-extensions","--disable-component-extensions-with-background-pages"].includes(f))],l={GOOGLE_API_KEY:"AIzaSyCkfPOPZXDKNn8hhgu3JrA62wIgC93d44k",GOOGLE_DEFAULT_CLIENT_ID:"811574891467.apps.googleusercontent.com",GOOGLE_DEFAULT_CLIENT_SECRET:"kdloedMFGdGla2P1zacGjAQh"},d=`${s.extensionPath?"http://localhost:3000/app/":"https://app.testim.io"}?startMode=true`,m=await Ma.launch({chromeFlags:c,startingUrl:d,ignoreDefaultFlags:!0,userDataDir:Bs,chromePath:i,envVars:l}),p={port:m.port,pid:m.pid,cdpUrl:await xr(`localhost:${m.port}`)};return ke.writeFileSync(r,JSON.stringify(p)),m.process.once("exit",o),m.process.once("close",o),{webdriverApi:p}}async function FI(s){let e=`${Za}/extension/testim-full-master.zip`,t=ur.basename(e),r=ur.join(Nt,t),n=ur.join(Nt,`${t}__unzipped__`),o=!(s.ext||s.extensionPath);if(o&&await ye(r)){let f=await ke.promises.stat(r);o=Date.now()-NI>f.mtimeMs}if(await ke.promises.mkdir(Nt,{recursive:!0}),o){let f=(0,ww.default)("Downloading Testim Editor").start();await qe(e,r);try{await Ye(r,n)}catch{await ke.promises.rm(r,{recursive:!0,force:!0}),await qe(e,r);try{await Ye(r,n)}catch{throw await ke.promises.rm(r,{recursive:!0,force:!0}),f.fail("Failed to download Testim Editor"),new Error("Failed to download Testim Editor")}}finally{s.downloadBrowser||await ke.promises.rm(n,{recursive:!0,force:!0})}f.succeed()}let i=s.extensionPath?null:(await ke.promises.readFile(s.ext||r)).toString("base64");if(s.downloadBrowser)return await UI(s,i,n);await Cr({projectId:s.project},{chromeBinaryLocation:s.chromeBinaryLocations});let a=Ew(Bs,i,s.extensionPath,s.chromeBinaryLocations),c=Nn(),{SeleniumPerfStats:l}=(Ts(),G(bi)),d=new c;d.seleniumPerfStats=new l;let m=await d.initClient(a);vw=!0;let p=`${s.extensionPath?"http://localhost:3000/app/":"https://app.testim.io"}?startMode=true`;await d.url(p),Object.assign(d,{initialUrl:p});try{d.cdpUrl=await xr(m.value["goog:chromeOptions"].debuggerAddress)}catch{}return{webdriverApi:d}}function Ew(s,e,t,r){let n=e?[e]:[],o=[`--user-data-dir=${s}`,"--log-level=OFF","--silent-debugger-extension-api","--no-first-run"];return t&&o.push(`--load-extension=${t}`),{logLevel:LI,desiredCapabilities:{chromeOptions:{args:o,extensions:n,binary:r},browserName:"chrome"},host:"localhost",port:9515}}async function jI(){if(await ye(Da))try{let{webSocketDebuggerUrl:s}=await BI();await $I(s),await ke.promises.unlink(Da)}catch(s){s&&s.message==="unable to connect to devtools http server"&&await ke.promises.unlink(Da)}}async function BI(){let s=await ke.promises.readFile(Da,{encoding:"utf8"}),[e,t]=s.split(`
581
+ `).map(o=>o.trim()),r=Number.parseInt(e,10);if(!Number.isInteger(r)||r<1||r>65535)throw new Error("invalid port number");if(!t.startsWith("/devtools/browser/"))throw new Error("invalid devtools browser url");let n=await xr(`localhost:${r}`,500);if(!n.endsWith(t))throw new Error("invariant webSocketDebuggerUrl miss match");return{port:r,webSocketDebuggerUrl:n}}async function $I(s,e=100){let t=await WI(s,e);return ct(r=>{t.send(JSON.stringify({id:0,method:"Browser.close"}),r)})}async function WI(s,e=100){let t=new Tw.default(s,{timeout:e}),r=ct(o=>{t.once("open",o)}).then(()=>{t.removeAllListeners()}),n=ct(o=>{t.once("error",o)}).catch(()=>{t.close(),t.removeAllListeners()});return Promise.race([r,n]).then(()=>t)}var bw,ww,Tw,ke,ur,Ma,LI,NI,Bs,DI,Da,vw,Wd=T(()=>{"use strict";bw=E(require("ms")),ww=E(require("ora")),Tw=E(require("ws")),ke=E(require("fs")),ur=E(require("path")),Ma=E(require("chrome-launcher"));le();cs();z();ft();$c();F();LI=zs?"verbose":"silent",NI=(0,bw.default)("1h"),Bs=ur.join(Nt,"profile"),DI="DevToolsActivePort",Da=ur.join(Bs,DI);vw=!1});var c0=require("source-map-support/register");var Xd;(Xd=Array.prototype).at||(Xd.at=function(s){let e=Number.isInteger(s)?s:0,t=e>=0?e:this.length+e;if(!(t<0||t>=this.length))return this[t]});var Yd=require("perf_hooks");var no=E(require("os")),Ws=E(require("url")),Gs=E(require("http")),ja=E(require("https")),Qn=E(require("form-data")),Zn=class{constructor(){this.onloadstart=null;this.onprogress=null;this.onabort=null;this.onerror=null;this.onload=null;this.ontimeout=null;this.onloadend=null;this._listeners={}}addEventListener(e,t){var r;e=e.toLowerCase(),(r=this._listeners)[e]||(r[e]=[]),this._listeners[e].push(t)}removeEventListener(e,t){let r;e=e.toLowerCase(),this._listeners[e]&&(r=this._listeners[e].indexOf(t),r!==-1&&this._listeners[e].splice(r,1))}dispatchEvent(e){var n;e.currentTarget=this,e.target=this;let t=e.type,r=this._listeners[t]||[];for(let o of r)o==null||o.call(this,e);(n=this[`on${t}`])==null||n.call(this,e)}},eo=class extends Zn{constructor(t){super();this._request=t;this._contentType=null;this._body=null}_reset(){this._contentType=null,this._body=null}_setData(t){if(!(typeof t>"u"||t===null))if(typeof t=="string")t.length!==0&&(this._contentType="text/plain;charset=UTF-8"),this._body=Buffer.from(t,"utf8");else if(Buffer.isBuffer(t))this._body=t;else if(t instanceof ArrayBuffer){let r=Buffer.alloc(t.byteLength),n=new Uint8Array(t);for(let o=0;o<t.byteLength;o++)r[o]=n[o];this._body=r}else if("buffer"in t&&t.buffer instanceof ArrayBuffer){let r=Buffer.alloc(t.byteLength),n=t.byteOffset,o=new Uint8Array(t.buffer);for(let i=0;i<t.byteLength;i++)r[i]=o[i+n];this._body=r}else if(typeof t=="object"&&t instanceof Qn.default)this._body=null;else throw new Error(`Unsupported send() data ${t}`)}_finalizeHeaders(t,r){this._contentType&&!("content-type"in r)&&(t["Content-Type"]=this._contentType),this._body&&(t["Content-Length"]=this._body.length.toString())}_startUpload(t){this._body&&t.write(this._body),t.end()}},$s=class{constructor(e){this.type=e;this.target=null;this.currentTarget=null;this.lengthComputable=!1;this.loaded=0;this.total=0;this.bubbles=!1;this.cancelable=!1}},to=class extends Error{},ro=class extends Error{},so=class extends Error{},dr=class extends Error{},Re=class extends Zn{constructor(t){super();this.UNSENT=0;this.OPENED=1;this.HEADERS_RECEIVED=2;this.LOADING=3;this.DONE=4;this.nodejsHttpAgent=Gs.globalAgent;this.nodejsHttpsAgent=ja.globalAgent;this.nodejsBaseUrl=null;this._restrictedMethods={CONNECT:!0,TRACE:!0,TRACK:!0};this._restrictedHeaders={"accept-charset":!0,"accept-encoding":!0,"access-control-request-headers":!0,"access-control-request-method":!0,connection:!0,"content-length":!0,cookie:!0,cookie2:!0,date:!0,dnt:!0,expect:!0,host:!0,"keep-alive":!0,origin:!0,referer:!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0,"user-agent":!0,via:!0};this._privateHeaders={"set-cookie":!1,"set-cookie2":!1};this._userAgent=`Mozilla/5.0 (${no.type()} ${no.arch()}) node.js/${process.versions.node} v8/${process.versions.v8}`;this.onreadystatechange=null;this.readyState=Re.UNSENT;this.response=null;this.responseText="";this.responseType="";this.status=0;this.statusText="";this.timeout=0;this.upload=new eo(this);this._method=null;this._url=null;this._sync=!1;this._headers=null;this._loweredHeaders=null;this._mimeOverride=null;this._request=null;this._response=null;this._responseParts=null;this._responseHeaders=null;this._aborting=null;this._error=null;this._loadedBytes=0;this._totalBytes=0;this._lengthComputable=!1;this._anonymous=t==null?void 0:t.anon}static nodejsSet(t){Re.prototype.nodejsSet(t)}nodejsSet(t){if("httpAgent"in t&&(this.nodejsHttpAgent=t.httpAgent),"httpsAgent"in t&&(this.nodejsHttpsAgent=t.httpsAgent),"baseUrl"in t){let r=t.baseUrl;if(r!==null&&!Ws.parse(r,!1,!0).protocol)throw new to("baseUrl must be an absolute URL");this.nodejsBaseUrl=r}}open(t,r,n){if(t=t.toUpperCase(),t in this._restrictedMethods)throw new so(`HTTP method ${t} is not allowed in XHR`);let o=this._parseUrl(r);n===void 0&&(n=!0),this._method=t,this._url=o,this._sync=!n,this._headers={},this._loweredHeaders={},this._mimeOverride=null,this._setReadyState(Re.OPENED),this._request=null,this._response=null,this.status=0,this.statusText="",this._responseParts=[],this._responseHeaders=null,this._loadedBytes=0,this._totalBytes=0,this._lengthComputable=!1}setRequestHeader(t,r){if(this.readyState!==Re.OPENED)throw new dr("XHR readyState must be OPENED");let n=t.toLowerCase();this._restrictedHeaders[n]||/^sec-/.test(n)||/^proxy-/.test(n)||(r=r.toString(),n in this._loweredHeaders?(t=this._loweredHeaders[n],this._headers[t]=`${this._headers[t]}, ${r}`):(this._loweredHeaders[n]=t,this._headers[t]=r))}send(t){if(this.readyState!==Re.OPENED)throw new dr("XHR readyState must be OPENED");if(this._request)throw new dr("send() already called");switch(this._url.protocol){case"file:":this._sendFile();break;case"http:":case"https:":this._sendHttp(t);break;default:throw new ro(`Unsupported protocol ${this._url.protocol}`)}}abort(){this._request&&(this._request.abort(),this._setError(),this._dispatchProgress("abort"),this._dispatchProgress("loadend"))}getResponseHeader(t){var n;let r=t.toLowerCase();return((n=this._responseHeaders)==null?void 0:n[r])||null}getAllResponseHeaders(){return this._responseHeaders?Object.entries(this._responseHeaders).map(([t,r])=>`${t}: ${r}`).join(`\r
582
+ `):""}overrideMimeType(t){if([Re.LOADING,Re.DONE].includes(this.readyState))throw new dr("overrideMimeType() not allowed in LOADING or DONE");this._mimeOverride=t.toLowerCase()}_setReadyState(t){this.readyState=t;let r=new $s("readystatechange");this.dispatchEvent(r)}_sendFile(){throw this._url.method!=="GET"?new ro("The file protocol only supports GET"):new Error("Protocol file: not implemented")}_sendHttp(t){if(this._sync)throw new Error("Synchronous XHR processing not implemented");t!=null&&(this._method==="GET"||this._method==="HEAD")?t=null:t||(t=""),this.upload._setData(t),this._finalizeHeaders(t),this._sendHxxpRequest(t)}_sendHxxpRequest(t){let r=this._url.protocol==="http:"?this.nodejsHttpAgent:this.nodejsHttpsAgent,o=(this._url.protocol==="http:"?Gs:ja).request({hostname:this._url.hostname,port:this._url.port,path:this._url.path,auth:this._url.auth,method:this._method,headers:this._headers,agent:r});typeof t=="object"&&t instanceof Qn.default&&t.pipe(o),this._request=o,this.timeout&&o.setTimeout(this.timeout,()=>this._onHttpTimeout(o)),o.on("response",i=>this._onHttpResponse(o,i)),o.on("error",()=>this._onHttpRequestError(o)),this.upload._startUpload(o),this._request===o&&this._dispatchProgress("loadstart")}_finalizeHeaders(t){typeof t=="object"&&t instanceof Qn.default&&Object.assign(this._headers,t.getHeaders()),this._headers.Connection="keep-alive",this._headers.Host=this._url.host,this._anonymous&&(this._headers.Referer="about:blank"),this._headers["User-Agent"]=this._userAgent,this.upload._finalizeHeaders(this._headers,this._loweredHeaders)}_onHttpResponse(t,r){if(this._request!==t)return;if([301,302,303,307,308].includes(r.statusCode)){this._url=this._parseUrl(r.headers.location),this._method="GET","content-type"in this._loweredHeaders&&(delete this._headers[this._loweredHeaders["content-type"]],delete this._loweredHeaders["content-type"]),"Content-Type"in this._headers&&delete this._headers["Content-Type"],delete this._headers["Content-Length"],this.upload._reset(),this._finalizeHeaders(),this._sendHxxpRequest();return}this._response=r,this._response.on("data",o=>this._onHttpResponseData(r,o)),this._response.on("end",()=>this._onHttpResponseEnd(r)),this._response.on("close",()=>this._onHttpResponseClose(r)),this.status=this._response.statusCode,this.statusText=Gs.STATUS_CODES[this.status],this._parseResponseHeaders(r);let n=this._responseHeaders["content-length"];n?(this._totalBytes=parseInt(n,10),this._lengthComputable=!0):this._lengthComputable=!1,this._setReadyState(Re.HEADERS_RECEIVED)}_onHttpResponseData(t,r){if(this._response===t)return this._responseParts.push(r),this._loadedBytes+=r.length,this.readyState!==Re.LOADING&&this._setReadyState(Re.LOADING),this._dispatchProgress("progress")}_onHttpResponseEnd(t){if(this._response===t)return this._parseResponse(),this._request=null,this._response=null,this._setReadyState(Re.DONE),this._dispatchProgress("load"),this._dispatchProgress("loadend")}_onHttpResponseClose(t){if(this._response!==t)return;let r=this._request;return this._setError(),r.abort(),this._setReadyState(Re.DONE),this._dispatchProgress("error"),this._dispatchProgress("loadend")}_onHttpTimeout(t){if(this._request===t)return this._setError(),t.abort(),this._setReadyState(Re.DONE),this._dispatchProgress("timeout"),this._dispatchProgress("loadend")}_onHttpRequestError(t){if(this._request===t)return this._setError(),t.abort(),this._setReadyState(Re.DONE),this._dispatchProgress("error"),this._dispatchProgress("loadend")}_dispatchProgress(t){let r=new $s(t);r.lengthComputable=this._lengthComputable,r.loaded=this._loadedBytes,r.total=this._totalBytes,this.dispatchEvent(r)}_setError(){this._request=null,this._response=null,this._responseHeaders=null,this._responseParts=null}_parseUrl(t){let r,n,o,i=this.nodejsBaseUrl===null?t:Ws.resolve(this.nodejsBaseUrl,t),a=Ws.parse(i,!1,!0);return a.hash=null,a.auth&&(typeof o<"u"&&o!==null||typeof n<"u"&&n!==null)&&(r=a.auth.indexOf(":"),r===-1?o||(o=a.auth):(o||(o=a.substring(0,r)),n||(n=a.substring(r+1)))),(o||n)&&(a.auth=`${o}:${n}`),a}_parseResponseHeaders(t){this._responseHeaders={},Object.entries(t.headers).forEach(([r,n])=>{let o=r.toLowerCase();this._privateHeaders[o]||(this._mimeOverride!==null&&o==="content-type"&&(n=this._mimeOverride),this._responseHeaders[o]=n)}),this._mimeOverride!==null&&!("content-type"in this._responseHeaders)&&(this._responseHeaders["content-type"]=this._mimeOverride)}_parseResponse(){let t=Buffer.concat(this._responseParts);switch(this._responseHeaders["content-encoding"]==="gzip"&&(t=require("zlib").gunzipSync(t)),this._responseParts=null,this.responseType){case"text":this._parseTextResponse(t);break;case"json":this.responseText=null;try{this.response=JSON.parse(t.toString("utf-8"))}catch{this.response=null}break;case"buffer":this.responseText=null,this.response=t;break;case"arraybuffer":{this.responseText=null;let r=new ArrayBuffer(t.length),n=new Uint8Array(r);for(let o=0;o<t.length;o++)n[o]=t[o];this.response=r;break}default:this._parseTextResponse(t)}}_parseTextResponse(t){try{this.responseText=t.toString(this._parseResponseEncoding())}catch{this.responseText=t.toString("binary")}this.response=this.responseText}_parseResponseEncoding(){let t=this._responseHeaders["content-type"],r=/;\s*charset=(.*)$/.exec(t);return t&&r?r[1]:"utf-8"}},_e=Re;_e.SyntaxError=to,_e.ProgressEvent=$s,_e.SecurityError=so,_e.XMLHttpRequest=Re,_e.InvalidStateError=dr,_e.XMLHttpRequestUpload=eo,_e.UNSENT=0,_e.OPENED=1,_e.HEADERS_RECEIVED=2,_e.LOADING=3,_e.DONE=4;Object.assign(global,{xhr2:_e,XMLHttpRequest:_e,performance:Yd.performance,...typeof Blob>"u"&&{Blob:require("buffer").Blob}});var Rw=E(require("semver"));Le();xl();qt();cs();var Iw=E(require("chalk")),xw=require("events");ae();Tn();z();ae();Lo();j();var Um=E(require("os")),Pl=E(require("path")),Cl=E(require("chalk")),Bo=require("fs");function Fm(s){var e,t,r;if(!((e=s==null?void 0:s.message)!=null&&e.includes("SIGINT")))try{let n=Um.homedir();(0,Bo.mkdirSync)(Pl.resolve(n,".testim_logs"),{recursive:!0});let o=Pl.resolve(n,".testim_logs",`${new Date().toISOString().replace(/:|\./g,"_")}.log`);console.log("Oops :( The test runner has encountered an unexpected error. A complete log of this run can be found in:"),console.log(` ${o}`),(t=s==null?void 0:s.message)!=null&&t.includes("Unable to compile TypeScript")&&((r=s.stack)!=null&&r.includes("runner/src"))&&process.argv.some(i=>i.includes("player-require-path"))&&(console.log(Cl.default.red("Looks like you got a TypeScript compile error champ - but it's not a very good one because we use TypeScript in transpile-only mode")),console.log(Cl.default.red("change require('ts-node/register/transpile-only'); to require('ts-node/register'); for better errors"))),(0,Bo.writeFileSync)(o,`${s}
583
583
  ${s==null?void 0:s.stack}
584
584
 
585
- ${JSON.stringify(s,Object.getOwnPropertyNames(s),2)}`)}catch{}}ln();var Pv=x("process-handler"),jm=!1;function Av(s){return s instanceof Error?1:jm?0:(s||(s={}),Object.values(s).some(({runnerStatus:t,success:r,testStatus:n,status:o})=>[t,o].includes(pe.SKIPPED)||[t,o].includes(pe.FAILED)&&n===Ve.EVALUATING?!1:r!==!0)?1:0)}function kv(){try{Vt("chromedriver").stop()}catch{}}function Bm(){jm=!0}async function Al(s){s!=null&&s.stack&&(ls?console.error(s,s.stack):Fm(s)),kv(),await Pv.waitForFlush(),process.exit(Av(s))}Te();j();var VI=x("cli-entry");function HI(s){if(!Iw.satisfies(process.version,s))throw new R(`Required node version ${s} not satisfied with current version ${process.version}`);let e=14,t=16,r=Number(process.versions.node.split(".")[0]),n=new Date("2023-04-30T00:00:00.000Z")<=new Date;if(r<e)throw new R(`Testim.io CLI supports Node.js ${e} and above, please upgrade to a newer Node.js version`);if(r<t&&n)throw new R(`Testim.io CLI supports Node.js ${t} and above, please upgrade to a newer Node.js version`);r<t&&console.log("\x1B[33m%s\x1B[0m",`Testim.io CLI will stop supporting Node.js < ${t} on April 30 2023, please upgrade to a newer Node.js version`)}async function zI(){console.log("Starting Testim.io CLI");let[s,e]=await Promise.all([Promise.resolve().then(()=>(F(),H)),Promise.resolve().then(()=>(of(),nf)),Promise.resolve().then(()=>(lf(),Vv)).catch(()=>{})]);N("Starting Testim.io CLI"),Mm(Al);try{HI(s.getEnginesVersion())}catch(t){console.log("Argument Error:",t.message),process.exit(1)}try{let t=await e.process();if(N("in main, after options.process"),ac(global.proxyUri),"parallel"in t&&t.parallel>5&&(Cw.EventEmitter.defaultMaxListeners=t.parallel*2),ic(t.project),rm("token"in t&&typeof t.token=="string"?t.token:"anonymous_encrypt_key"),s.isInstallLazyDepsMode(t)){console.log("Lazy dependency installation started");let{installAllLazyDependencies:o}=await Promise.resolve().then(()=>(ft(),$l));return await o()}if(s.isInitCodimMode(t)){let{init:o}=await Promise.resolve().then(()=>(yf(),gf));return o(t.initTestProject)}if(s.isLoginMode(t))return;if(s.isCreatePrefetchedDataMode(t)){await Qp(),await wn(t);let{preloadTests:o}=await Promise.resolve().then(()=>(Jo(),wf));await o(t),!t.playerRequirePath&&t.mode!==Q.EXTENSION&&await Pr(t.playerLocation,t.canary);let i=await em();i.success?console.log(`created prefetched data at ${wo()}`):console.error("failed to create prefetch data",i.error);return}let r=await Promise.resolve().then(()=>(Mb(),Db));if(s.isTunnelOnlyMode(t)){await r.init(t);let{serveTunneling:o}=await Promise.resolve().then(()=>(Ql(),Yl));await o(t);return}if(s.isAgentMode(t)){let{runAgentMode:o}=await Promise.resolve().then(()=>(Wd(),Rw));return o(t)}if(t.saveRCALocally){let{initServer:o}=await Promise.resolve().then(()=>(vu(),xh)),{port:i}=await o(t);t.localRCASaver=`http://localhost:${i}`}t.exitCodeIgnoreFailingTests&&Bm(),N("right before testRunner.init/prepareRunner.prepare");let[n]=await Promise.all([Lm(t),r.init(t)]);return N("right after testRunner.init/prepareRunner.prepare"),await r.run(t,n)}catch(t){if(t instanceof mr)return;let r=s.getArgsOnRemoteRunFailure();return r&&await vl({...r,error:t.message}).catch(()=>{}),t instanceof R?(console.log(xw.default.red("Argument Error:",t.message)),t):t instanceof fr?(console.log("Selenium Error:",t.message),t):(console.log("Error:",t.message),VI.error("runner ended with unexpected error",{err:t}),t)}}zI().then(s=>{Array.isArray(s)&&s.length===0&&console.log("No tests ran"),Al(s)});
585
+ ${JSON.stringify(s,Object.getOwnPropertyNames(s),2)}`)}catch{}}cn();var Pv=x("process-handler"),jm=!1;function Cv(s){return s instanceof Error?1:jm?0:(s||(s={}),Object.values(s).some(({runnerStatus:t,success:r,testStatus:n,status:o})=>[t,o].includes(pe.SKIPPED)||[t,o].includes(pe.FAILED)&&n===Ve.EVALUATING?!1:r!==!0)?1:0)}function Av(){try{Vt("chromedriver").stop()}catch{}}function Bm(){jm=!0}async function Al(s){s!=null&&s.stack&&(ls?console.error(s,s.stack):Fm(s)),Av(),await Pv.waitForFlush(),process.exit(Cv(s))}Te();j();var GI=x("cli-entry");function qI(s){if(!Rw.satisfies(process.version,s))throw new R(`Required node version ${s} not satisfied with current version ${process.version}`);let e=14,t=16,r=Number(process.versions.node.split(".")[0]),n=new Date("2023-04-30T00:00:00.000Z")<=new Date;if(r<e)throw new R(`Testim.io CLI supports Node.js ${e} and above, please upgrade to a newer Node.js version`);if(r<t&&n)throw new R(`Testim.io CLI supports Node.js ${t} and above, please upgrade to a newer Node.js version`);r<t&&console.log("\x1B[33m%s\x1B[0m",`Testim.io CLI will stop supporting Node.js < ${t} on April 30 2023, please upgrade to a newer Node.js version`)}async function VI(){console.log("Starting Testim.io CLI");let[s,e]=await Promise.all([Promise.resolve().then(()=>(F(),H)),Promise.resolve().then(()=>(of(),nf)),Promise.resolve().then(()=>(lf(),qv)).catch(()=>{})]);N("Starting Testim.io CLI"),Mm(Al);try{qI(s.getEnginesVersion())}catch(t){console.log("Argument Error:",t.message),process.exit(1)}try{let t=await e.process();if(N("in main, after options.process"),cc(global.proxyUri),"parallel"in t&&t.parallel>5&&(xw.EventEmitter.defaultMaxListeners=t.parallel*2),ac(t.project),rm("token"in t&&typeof t.token=="string"?t.token:"anonymous_encrypt_key"),s.isInstallLazyDepsMode(t)){console.log("Lazy dependency installation started");let{installAllLazyDependencies:o}=await Promise.resolve().then(()=>(ft(),$l));return await o()}if(s.isInitCodimMode(t)){let{init:o}=await Promise.resolve().then(()=>(yf(),gf));return o(t.initTestProject)}if(s.isLoginMode(t))return;if(s.isCreatePrefetchedDataMode(t)){await Qp(),await bn(t);let{preloadTests:o}=await Promise.resolve().then(()=>(Xo(),wf));await o(t),!t.playerRequirePath&&t.mode!==Q.EXTENSION&&await Ar(t.playerLocation,t.canary);let i=await em();i.success?console.log(`created prefetched data at ${To()}`):console.error("failed to create prefetch data",i.error);return}let r=await Promise.resolve().then(()=>(Db(),Nb));if(s.isTunnelOnlyMode(t)){await r.init(t);let{serveTunneling:o}=await Promise.resolve().then(()=>(Ql(),Yl));await o(t);return}if(s.isAgentMode(t)){let{runAgentMode:o}=await Promise.resolve().then(()=>(Wd(),Sw));return o(t)}if(t.saveRCALocally){let{initServer:o}=await Promise.resolve().then(()=>(vu(),xh)),{port:i}=await o(t);t.localRCASaver=`http://localhost:${i}`}t.exitCodeIgnoreFailingTests&&Bm(),N("right before testRunner.init/prepareRunner.prepare");let[n]=await Promise.all([Lm(t),r.init(t)]);return N("right after testRunner.init/prepareRunner.prepare"),await r.run(t,n)}catch(t){if(t instanceof fr)return;let r=s.getArgsOnRemoteRunFailure();return r&&await vl({...r,error:t.message}).catch(()=>{}),t instanceof R?(console.log(Iw.default.red("Argument Error:",t.message)),t):t instanceof hr?(console.log("Selenium Error:",t.message),t):(console.log("Error:",t.message),GI.error("runner ended with unexpected error",{err:t}),t)}}VI().then(s=>{Array.isArray(s)&&s.length===0&&console.log("No tests ran"),Al(s)});
586
586
  //# sourceMappingURL=cli.js.map