@testim/testim-cli 3.299.0 → 3.301.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,61 +1,61 @@
1
1
  #! /usr/bin/env node
2
- "use strict";var bT=Object.create;var $n=Object.defineProperty;var TT=Object.getOwnPropertyDescriptor;var vT=Object.getOwnPropertyNames;var ET=Object.getPrototypeOf,ST=Object.prototype.hasOwnProperty;var S=(s,e)=>()=>(s&&(e=s(s=0)),e);var G=(s,e)=>()=>(e||s((e={exports:{}}).exports,e),e.exports),$=(s,e)=>{for(var t in e)$n(s,t,{get:e[t],enumerable:!0})},Qd=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of vT(e))!ST.call(s,n)&&n!==t&&$n(s,n,{get:()=>e[n],enumerable:!(r=TT(e,n))||r.enumerable});return s};var v=(s,e,t)=>(t=s!=null?bT(ET(s)):{},Qd(e||!s||!s.__esModule?$n(t,"default",{value:s,enumerable:!0}):t,s)),D=s=>Qd($n({},"__esModule",{value:!0}),s);var Oe={};$(Oe,{log:()=>N,measure:()=>RT});function N(...s){if(!rp)return;let e=Date.now();console.log(`${e-IT} ${e-tp} `,...s),tp=e}function RT(s,e){if(!rp)return;let t=Date.now();try{s()}finally{console.log(e||s.name,"took",Date.now()-t)}}var rp,IT,tp,Le=S(()=>{"use strict";rp=process.env.MEASURE_TESTIM_CLI_PERFORMANCE,IT=Date.now(),tp=Date.now()});var aa={};$(aa,{EDGE_CHROMIUM_MIN_VERSION:()=>Jn,SELENIUM_STATUS_CODES:()=>KT,UNICODE_CHARACTERS:()=>xT,W3C_ELEMENT_ID:()=>$t});var xT,$t,CT,PT,AT,sp,np,op,ip,kT,ap,cp,lp,up,_T,dp,pp,mp,fp,hp,gp,yp,wp,OT,LT,bp,Tp,NT,DT,MT,UT,FT,jT,BT,$T,WT,qT,GT,VT,HT,zT,KT,Jn,Jr=S(()=>{"use strict";xT={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",CT={id:"Unknown",status:-1,message:"Remote end send an unknown status code."},PT={id:"Success",status:0,message:"The command executed successfully."},AT={id:"NoSuchDriver",status:6,message:"A session is either terminated or not started"},sp={id:"NoSuchElement",status:404,message:"An element could not be located on the page using the given search parameters."},np={id:"NoSuchFrame",status:400,message:"A request to switch to a frame could not be satisfied because the frame could not be found."},op={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."},ip={id:"StaleElementReference",status:400,message:"An element command failed because the referenced element is no longer attached to the DOM."},kT={id:"ElementNotVisible",status:11,message:"An element command could not be completed because the element is not visible on the page."},ap={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)."},cp={id:"UnknownError",status:500,message:"An unknown server-side error occurred while processing the command."},lp={id:"ElementIsNotSelectable",status:400,message:"An attempt was made to select an element that cannot be selected."},up={id:"JavaScriptError",status:500,message:"An error occurred while executing user supplied JavaScript."},_T={id:"XPathLookupError",status:19,message:"An error occurred while searching for an element by XPath."},dp={id:"Timeout",status:408,message:"An operation did not complete before its timeout expired."},pp={id:"NoSuchWindow",status:400,message:"A request to switch to a different window could not be satisfied because the window could not be found."},mp={id:"InvalidCookieDomain",status:400,message:"An illegal attempt was made to set a cookie under a different domain than the current page."},fp={id:"UnableToSetCookie",status:500,message:"A request to set a cookie's value could not be satisfied."},hp={id:"UnexpectedAlertOpen",status:500,message:"A modal dialog was open, blocking this operation"},gp={id:"NoAlertOpenError",status:400,message:"An attempt was made to operate on a modal dialog when one was not open."},yp={id:"ScriptTimeout",status:408,message:"A script did not complete before its timeout expired."},wp={id:"InvalidElementCoordinates",status:400,message:"The coordinates provided to an interactions operation are invalid."},OT={id:"IMENotAvailable",status:30,message:"IME was not available."},LT={id:"IMEEngineActivationFailed",status:31,message:"An IME engine could not be started."},bp={id:"InvalidSelector",status:400,message:"Argument was an invalid selector (e.g. XPath/CSS)."},Tp={id:"SessionNotCreatedException",status:500,message:"A new session could not be created."},NT={id:"ElementNotScrollable",status:34,message:"Element cannot be scrolled into view."},DT={id:"SelectorTimeoutError",status:100,message:"Request timed out after the element was still found on the page."},MT={id:"NoSessionIdError",status:101,message:"A session id is required for this command but wasn't found in the response payload"},UT={id:"GridApiError",status:102,message:"A call to the Selenium Grid API failed"},FT={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."},jT={id:"ElementNotInteractable",status:400,message:"A command could not be completed because the element is not pointer- or keyboard interactable."},BT={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."},$T={id:"InvalidArgument",status:400,message:"The arguments passed to a command are either invalid or malformed."},WT={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."},qT={id:"MoveTargetOutOfBounds",status:500,message:"The target for mouse interaction is not in the browser\u2019s viewport and cannot be brought into that viewport."},GT={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."},VT={id:"UnableToCaptureScreen",status:500,message:"A screen capture was made impossible."},HT={id:"UnknownMethod",status:405,message:"The requested command matched a known URL but did not match an method for that URL."},zT={id:"UnsupportedOperation",status:500,message:"Indicates that a command that should have executed properly cannot be supported for some reason."},KT={"-1":CT,0:PT,6:AT,7:sp,8:np,9:op,10:ip,11:kT,12:ap,13:cp,15:lp,17:up,19:_T,21:dp,23:pp,24:mp,25:fp,26:hp,27:gp,28:yp,29:wp,30:OT,31:LT,32:bp,33:Tp,34:NT,100:DT,101:MT,102:UT,"element click intercepted":FT,"element not selectable":lp,"element not interactable":jT,"insecure certificate":BT,"invalid argument":$T,"invalid cookie domain":mp,"invalid coordinates":wp,"invalid element state":ap,"invalid selector":bp,"invalid session id":WT,"javascript error":up,"move target out of bounds":qT,"no such alert":gp,"no such cookie":GT,"no such element":sp,"no such frame":np,"no such window":pp,"script timeout":yp,"session not created":Tp,"stale element reference":ip,timeout:dp,"unable to set cookie":fp,"unable to capture screen":VT,"unexpected alert open":hp,"unknown command":op,"unknown error":cp,"unknown method":HT,"unsupported operation":zT},Jn=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 ca(s,e){return`Basic ${Buffer.from(`${s}:${e}`).toString("base64")}`}function je(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 la=S(()=>{"use strict"});var da,vp,Ep,Xn=S(()=>{da={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"},vp={"@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"},Ep={node:">= 14.0.0"}});var xe={};$(xe,{APPIUM_VERSION:()=>ev,BLOB_URL:()=>dr,CANONICAL_BLOB_URL:()=>va,CANONICAL_EDGE_URL:()=>Ea,DEBUG_MODE:()=>QT,DF_ENABLE_VIDEO:()=>ZT,DISABLE_AGENT_ORIGIN_CHECK:()=>Us,DISABLE_DEBUGGER_INFINITE_TIMEOUT:()=>pa,EDGE_URL:()=>Ta,EDITOR_URL:()=>ur,EXTENSION_SERVICES_HOST:()=>ba,GATEWAY_URL:()=>wa,IS_ON_PREM:()=>Re,LOGGER_CONSOLE:()=>fa,LOGGER_DEBUG:()=>ha,OVERRIDE_TIMEOUTS:()=>Fs,REQUESTS_QUEUE_SIZE:()=>YT,ROLLOUT_KEY:()=>ga,SERVICES_HOST:()=>fe,START_WORKER_DELAY_MS:()=>ya,TESTIM_CONCURRENT_WORKER_COUNT:()=>Bs,WEBDRIVER_DEBUG:()=>js,WEBSOCKET_HOST:()=>ma});var Ms,Sp,Ip,Us,pa,Fs,ur,ma,fe,fa,ha,js,Re,YT,QT,Bs,ga,ZT,ya,ev,wa,ba,dr,Ta,va,Ea,ce=S(()=>{"use strict";Ms=process.env.SERVICES_HOST||"https://services.testim.io",Sp="https://testimstatic.blob.core.windows.net",Ip="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:Ms,Ms=process.env.SERVICES_HOST);Us=parseInt(process.env.DISABLE_AGENT_ORIGIN_CHECK||"0",10),pa=parseInt(process.env.DISABLE_DEBUGGER_INFINITE_TIMEOUT||"0",10),Fs=parseInt(process.env.OVERRIDE_TIMEOUTS||"0",10),ur=process.env.EDITOR_URL,ma=process.env.WEBSOCKET_HOST||`${Ms}/ws`,fe=Ms,fa=parseInt(process.env.LOGGER_CONSOLE||"0",10),ha=parseInt(process.env.LOGGER_DEBUG||"0",10),js=parseInt(process.env.WEBDRIVER_DEBUG||"0",10),Re=parseInt(process.env.IS_ON_PREM||"0",10),YT=process.env.REQUESTS_QUEUE_SIZE?parseInt(process.env.REQUESTS_QUEUE_SIZE,10):void 0,QT=parseInt(process.env.DEBUG_MODE||"0",10),Bs=process.env.TESTIM_CONCURRENT_WORKER_COUNT?parseInt(process.env.TESTIM_CONCURRENT_WORKER_COUNT,10):null,ga=process.env.ROLLOUT_KEY||"5b5560729601aa6484276518",ZT=parseInt(process.env.DF_ENABLE_VIDEO||"0",10),ya=parseInt(process.env.START_WORKER_DELAY_MS||"1500",10),ev=process.env.APPIUM_VERSION||"1.10.1",wa=process.env.GATEWAY_URL,ba=process.env.EXTENSION_SERVICES_HOST||Ms,dr=process.env.GATEWAY_URL?`${process.env.GATEWAY_URL}/testim/blob`:Sp,Ta=process.env.GATEWAY_URL?`${process.env.GATEWAY_URL}/testim/edge`:Ip,va=Sp,Ea=Ip});var Sa={};$(Sa,{CoralogixTransport:()=>Xr});var Ce,Rp,tv,rv,Xr,Ia=S(()=>{"use strict";Ce=require("@testim/coralogix-logger"),Rp=v(require("winston-transport")),tv={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},rv=["err","error","reason","e"],Xr=class extends Rp.default{constructor(t){t=Object.assign({},Xr.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=tv[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 p=!1;a instanceof Error&&(p=!0,u.msg=a.message+a.stack,i&&(u.msg=`${i}
3
- ${u.msg}`));for(let m of rv)a[m]instanceof Error&&(u[m]={message:a[m].message,stack:a[m].stack,name:a[m].name,type:a[m].type,cause:a[m].cause,...a[m]});Object.keys(u).length>0&&(i&&!p&&(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),Xr.options=t}}});var nt={};$(nt,{getLogger:()=>A,setExecutionId:()=>Ca,setProjectId:()=>Pa,setProxyUri:()=>Aa});function ov(){let s=[],e=()=>Promise.resolve();if(!Re){let{CoralogixTransport:t}=(Ia(),D(Sa));t.configure(Pp);let r=new t({category:"ROOT"});s.push(r),e=()=>r.waitForFlush()}return fa&&s.push(new yt.transports.Console({format:yt.format.combine(yt.format.colorize(),yt.format.simple())})),[s,e]}function Ca(s){Ra=s}function Pa(s){Ap=s}function Aa(s){if(Re||!s)return;let{CoralogixTransport:e}=(Ia(),D(Sa));e.configure({...Pp,proxyUri:s})}function xp(s){return{projectId:Ap,time:new Date().toISOString(),...Ra&&!s&&{executionId:Ra}}}function A(s){return new xa(uv.child({category:s}))}var Cp,yt,sv,nv,Pp,iv,av,cv,lv,uv,Ra,Ap,xa,j=S(()=>{"use strict";Cp=v(require("os")),yt=v(require("winston"));ce();F();sv=Cp.hostname(),nv=ot(),Pp={privateKey:"d0eb01da-f966-1663-63c6-8871225d7c39",applicationName:"testim",subsystemName:"runner"};[iv,av]=ov(),cv=ha?"debug":"info",lv={release:Boolean(!0),branch:"production"},uv=yt.createLogger({levels:yt.config.syslog.levels,level:cv,transports:iv,defaultMeta:{name:"runner",hostname:sv,nodeVersion:process.version,runnerVersion:nv,...lv}}),Ra=null,Ap=null;xa=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},xp(n)))}catch(o){try{this._logger.log("crit",Object.assign({message:`failed to log message ${o.message}, ${o.stack}`},xp(n)))}catch{}}}waitForFlush(){return av()}}});var Yn={};$(Yn,{AbortError:()=>Me,ArgError:()=>R,ClientError:()=>hr,GetBrowserError:()=>Wt,GridConcurrencyError:()=>fr,GridError:()=>at,NoArgsError:()=>pr,NotImplementedError:()=>Qr,NpmPackageError:()=>At,NpmPermissionsError:()=>yr,PageNotAvailableError:()=>it,PlaygroundCodeError:()=>gr,QuotaDepletedError:()=>Yr,SeleniumCrashError:()=>ka,SeleniumError:()=>mr,StopRunOnError:()=>Pt,TimeoutError:()=>te});var kp,Me,pr,R,mr,Pt,Wt,it,te,Yr,at,fr,At,ka,hr,gr,yr,Qr,z=S(()=>{"use strict";kp=require("p-retry"),Me=class extends Error{constructor(t="aborted"){super(t);this.name="AbortError"}},pr=class extends Error{constructor(){super(...arguments);this.name="NoArgsError"}},R=class extends Error{constructor(){super(...arguments);this.name="ArgError"}},mr=class extends Error{constructor(t){super(t.orgStatusMessage||t.message);this.name="SeleniumError",this.errorType=t.type}},Pt=class extends Error{constructor(){super(...arguments);this.name="StopRunOnError"}},Wt=class extends Error{constructor(t,r){super(t);this.type=r}},it=class extends kp.AbortError{},te=class extends Error{},Yr=class extends Error{},at=class extends Error{constructor(){super(...arguments);this.name="GridError"}toString(){return this.message}},fr=class extends at{constructor(){super(...arguments);this.name="GridConcurrencyError"}},At=class extends Error{constructor(){super(...arguments);this.name="NpmPackageError"}},ka=class extends Error{constructor(){super(...arguments);this.message="selenium driver crashed";this.name="SeleniumCrashError"}},hr=class extends Error{},gr=class extends Error{},yr=class extends Error{constructor(t){super(`Testim had missing write access to ${t}`);this.path=t}},Qr=class extends Error{constructor(e=!1){let t="not implemented";e&&(t="should be implemented on descendant"),super(t)}}});function Qn(s){return!!s&&(typeof s=="object"||typeof s=="function")&&typeof s.then=="function"&&typeof s.catch=="function"}function he(s){return new Promise(e=>{setTimeout(e,s)})}function re(s,e,t="Timeout Error"){Fs&&!_p&&(_p=!0,console.log("Debugger connected - timeouts were overridden to 10 minutes to improve debugging"));let r=new te(t);return e=Fs?Number(Fs)||6e5:e,Promise.race([s,he(e).then(()=>{throw r})])}async function ue(s,e,{concurrency:t}={}){if(t){Op||(Op=(await import("p-limit")).default);let r=Op(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 _p,Op,_a=S(()=>{"use strict";z();ce();_p=!1});var Ws,Lp,dv,$s,Np,pv,mv,Dp,Mp=S(()=>{"use strict";Ws=v(require("lodash"));ce();Lp=require("dns");j();_a();dv=A("http-request-counters"),$s=!1,Np=async()=>{if(Re)return!0;let s=["www.google.com","www.facebook.com","www.microsoft.com","testim.io"];try{let e=Boolean(await ue(s,t=>Lp.promises.lookup(t)));return e||($s=!0),e}catch{return dv.error("network connectivity test failed"),$s=!0,!1}},pv=Ws.throttle(Np,10*1e3),mv=60*1e3*15,Dp=()=>{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)},mv)}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),$s||pv(),a}}}async function r(){if($s||!await Np())return!1;let n=Ws.sum([...s.fail.values()]),o=Ws.sum([...s.call.values()]);return n<o*.1}return r.counters=s,t.counters=s,t.isNetworkHealthy=r,t.didNetworkConnectivityTestFail=()=>$s,t}});var kt={};$(kt,{deleteFullRes:()=>wv,deleteReq:()=>qs,didNetworkConnectivityTestFail:()=>Fa,download:()=>Ma,get:()=>br,getFullRes:()=>vv,getText:()=>Tv,head:()=>Ev,isNetworkHealthy:()=>Ua,post:()=>bt,postForm:()=>La,postFullRes:()=>bv,put:()=>Da});function hv(){return global.caFileContent}function gv(s,e){let t=[];s.on("data",r=>{t.push(r)}),s.on("end",()=>{e(null,Buffer.concat(t))})}function yv(){return!wt.default.Request.prototype.proxy&&global.SuperagentProxy&&global.SuperagentProxy(wt.default),global.proxyUri}function wr(s,e=!1){let t=hv();t&&s.ca(t);let r=!e&&yv();r&&s.proxy(r)}async function Up(s,e={},t={},r=Zr){let n=wt.default.delete(s).send(e).timeout(r).set(t);return wr(n),await n}async function Fp(s,e,t={},r=Zr,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 Na(s,e,t={},r=Zr,{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,Oa,$e,Zr,fv,qt,qs,wv,bt,bv,La,Tv,br,vv,Ev,Da,Ma,Ua,Fa,Tt=S(()=>{"use strict";wt=v(require("superagent"));j();Mp();Oa=A("http-request"),$e=Dp(),Zr=parseInt(process.env.DEFAULT_REQUEST_TIMEOUT||"0",10)||3e4,fv=6e4;qt=(s,e,t)=>{throw Oa.error(s,{...t,error:e}),e};qs=$e(async(s,e,t,r)=>{try{let n=await Up(s,e,t,r);return n.type==="text/plain"?n.text:n.body}catch(n){return qt("failed to delete request",n,{url:s})}});wv=$e(Up),bt=$e(async({url:s,body:e,headers:t,timeout:r,retry:n})=>{try{let o=await Fp(s,e,t,r,n);return o.type==="text/plain"?o.text:o.body}catch(o){return qt("failed to post request",o,{url:s})}});bv=$e(Fp),La=$e(async(s,e,t,r={},n=Zr)=>{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 qt("failed to post request",i,{url:s})}});Tv=$e(async(s,e,t)=>{try{return(await Na(s,e,t)).text}catch(r){return qt("failed to getText request",r,{url:s,query:e})}}),br=$e(async(s,e,t,r,n)=>{try{return(await Na(s,e,t,r,n)).body}catch(o){return qt("failed to get request",o,{url:s,query:e})}}),vv=$e((s,e,t,r)=>Na(s,e,t,r)),Ev=$e(async s=>{let e=wt.default.head(s).timeout(Zr);wr(e);try{return await e}catch(t){return qt("failed to head request",t,{url:s})}}),Da=$e(async(s,e,t={},r=Zr)=>{let n=wt.default.put(s).send(e).timeout(r).set(t);wr(n);try{return(await n).body}catch(o){return qt("failed to put request",o,{url:s})}}),Ma=$e(async s=>{Oa.info("start to download",{url:s});let e=wt.default.get(s).timeout(fv).buffer(!0).parse(gv);wr(e);try{let t=await e;return Oa.info("finished to download",{url:s}),t}catch(t){return qt("failed to download",t,{url:s})}}),Ua=$e.isNetworkHealthy,Fa=$e.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 Zn(s,e){return je(s)?e||_t.join(process.cwd(),s.replace(/^.*[\\/]/,"")):e||_t.basename(s)}function ot(){try{return require(`${__dirname}/package.json`).version}catch{return""}}function Iv(){try{return Ep.node}catch{return""}}async function to(s,e,t=!0){let r=await We.promises.readdir(s,{withFileTypes:!0});await We.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 to(o,i):await We.promises.copyFile(o,i)}}async function ye(s){try{return await We.promises.access(s),!0}catch(e){if(e.code==="ENOENT")return!1;throw e}}var _t,jp,Bp,We,Sv,Gs,qe,$p,eo,ja,Xe,Ba,$a=S(()=>{"use strict";_t=v(require("path"));la();Xn();jp=v(require("p-retry")),Bp=v(require("decompress")),We=require("fs"),Sv=3;Gs=async s=>{let e=await Promise.resolve().then(()=>(Tt(),kt));return(0,jp.default)(()=>e.download(s),{retries:Sv})},qe=async(s,e)=>{let t=await Gs(s);return We.promises.writeFile(e,t.body)},$p=async(s,e)=>new Promise((t,r)=>{try{let n=(0,We.createWriteStream)(e);(0,We.createReadStream)(s).pipe(n),n.on("finish",()=>{n.close(()=>t())})}catch(n){r(n)}});eo=async(s,e)=>{let t=Zn(s,e);return je(s)?qe(s,t):$p(s,t)},ja=async s=>je(s)?Gs(s):We.promises.readFile(s),Xe=async(s,e)=>await(0,Bp.default)(s,e),Ba=s=>(0,We.statSync)(s).size/1e6});var Lt={};$(Lt,{CLI_MODE:()=>Y,gridMessages:()=>es,gridTypes:()=>le,mobileWeb:()=>Wa,runnerTestStatus:()=>de,sessionType:()=>Ot,socketEventTypes:()=>Ye,stepResult:()=>Hs,test:()=>qa,testRunStatus:()=>Vs,testStatus:()=>Ge,timeoutMessages:()=>Ue});var Ue,Vs,de,Ge,es,Wa,qa,Ye,Y,Ot,le,Hs,oe=S(()=>{"use strict";Ue={GET_BROWSER_TIMEOUT_MSG:"get-browser-timeout",TEST_START_TIMEOUT_MSG:"test-start-timeout",TEST_COMPLETE_TIMEOUT_MSG:"test-complete-timeout"},Vs={COMPLETED:"completed",RUNNING:"running"},de={PASSED:"PASSED",FAILED:"FAILED",ABORTED:"ABORTED",SKIPPED:"SKIPPED",QUEUED:"QUEUED"},Ge={DRAFT:"draft",EVALUATING:"evaluating",ACTIVE:"active",QUARANTINE:"quarantine"},es={NOT_FOUND:"The specified grid is not available",UNKNOWN:"Test couldn't get browser - unknown error"},Wa={MOBILE_WEB_REMOTE_RUN_HEADER_SPACING:50},qa={HIDDEN_PARAM:"TST_HIDDEN_PARAM"},Ye={TEST_RESULT_CREATED:"test-result-created",TEST_RESULT_UPDATED:"test-result-updated",REMOTE_STEP_SAVED:"remote-step-saved"},Y={EXTENSION:"extension",SELENIUM:"selenium",APPIUM:"appium"},Ot={CODELESS:"codeless",CODEFUL:"codeful"},le={TESTIM_ENTERPRISE:"testimEnterprise",TESTIM:"testim",LAMBDATEST:"testimLambdaTest",DEVICE_FARM:"testimDF",HYBRID:"testimHybrid",BROWSERSTACK:"browserstack",SAUCELABS:"saucelabs",TESTIM_HEADSPIN:"testimHeadspin"},Hs={SETUP_TIMEOUT:"setup-timeout",NETWORK_ERROR:"network-error",GRID_ERROR:"grid-error",SELENIUM_ERROR:"selenium-error",BROWSER_CLOSED:"browser-closed"}});function Tr(s){return s.files.length>0?Ot.CODEFUL:Ot.CODELESS}function zs(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 Rv(){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 Ks,Wp,Ve,xv,Cv,Pv,Av,kv,_v,Ga,qp=S(()=>{"use strict";oe();Ks=s=>{var e,t;return Boolean(((e=s.testPlan)==null?void 0:e.length)||((t=s.testPlanIds)==null?void 0:t.length))},Wp=s=>Boolean(s.resultId&&s.source==="remote-run"),Ve=(s,e)=>s.testStatus===Ge.QUARANTINE&&!Wp(e)&&!e.runQuarantinedTests;xv=s=>Boolean(s.initCodimMode),Cv=s=>Boolean(s.loginMode),Pv=s=>Boolean(s.tunnelOnlyMode),Av=s=>Boolean(s.createPrefechedData),kv=s=>Boolean(s.installLazyDepsMode),_v=s=>Boolean(s.agentMode),Ga=(s,e)=>{s.forEach((t,r)=>{e.has(t)&&(s[r]=`--${t}`)})}});function ro(s){let e=Va.default.duration(s);return`${e.hours()}:${e.minutes()}:${e.seconds()}.${e.milliseconds()}`}function Ha(s){return Va.default.duration(s).asSeconds()}var Va,Gp=S(()=>{"use strict";Va=v(require("moment"))});var q={};$(q,{TESTIM_BROWSER_DIR:()=>Nt,TimeoutError:()=>te,buildBasicHeader:()=>ca,calcPercentile:()=>so,copy:()=>$p,copyDir:()=>to,delay:()=>he,doesPathExist:()=>ye,download:()=>Gs,downloadAndSave:()=>qe,extractElementId:()=>Lv,getArgsOnRemoteRunFailure:()=>Rv,getBrowserInfo:()=>Xs,getCdpAddressForHost:()=>Sr,getCliLocation:()=>lt,getDuration:()=>ro,getDurationSec:()=>Ha,getEnginesVersion:()=>Iv,getEnvironmentGitBranch:()=>Er,getLocalFileSizeInMB:()=>Ba,getPlanType:()=>Ka,getRunConfigByBrowserName:()=>Ys,getRunnerVersion:()=>ot,getSessionType:()=>Tr,getSource:()=>eo,getSourceAsBuffer:()=>ja,getSourcePath:()=>Zn,getTestUrl:()=>st,getUniqBrowsers:()=>zs,groupTestsByRetries:()=>Ja,guid:()=>K,hasTestPlanFlag:()=>Ks,isAgentMode:()=>_v,isCreatePrefetchedDataMode:()=>Av,isInitCodimMode:()=>xv,isInstallLazyDepsMode:()=>kv,isLoginMode:()=>Cv,isPromise:()=>Qn,isQuarantineAndNotRemoteRun:()=>Ve,isRemoteRun:()=>Wp,isTunnelOnlyMode:()=>Pv,isURL:()=>je,promiseFromCallback:()=>ct,promiseMap:()=>ue,promiseTimeout:()=>re,removePropertyFromObject:()=>zp,replaceArgsWithNoDashes:()=>Ga,unzipFile:()=>Xe});function Xs(s){return s=s.toLowerCase(),za.find(e=>e.browserValue===s)}function Ys(s,e,t){s=s.toLowerCase();let r=za.find(o=>o.browserName.toLowerCase()===s||s.includes(o.synonyms))||za[0],n=Js.find(o=>o.osName==="Windows 10");return e&&(e.platform?n=Js.find(o=>o.sl.platform===e.platform):e.platformName&&(n=Js.find(o=>o.sl.platformName===e.platformName))),t&&(t.os_version?n=Js.find(o=>o.bs.os_version===t.os_version):t.platform&&(n=Js.find(o=>o.bs.platform===t.platform))),vr.merge(r,n)}function Er(){return process.env.GIT_BRANCH||process.env.CIRCLE_BRANCH||process.env.TRAVIS_BRANCH||process.env.CI_BRANCH}function zp(s,e,t){for(let r in s)Object.prototype.hasOwnProperty.call(s,r)&&(t(r,e)?delete s[r]:typeof s[r]=="object"&&zp(s[r],e,t))}function Lv(s){return s.ELEMENT||s[$t]}function Ka(s){s||(s={});let e=Date.now(),t=s.expireAt||s.expireAT;return s.plan!=="free"?"pro":t?t<e?"free":"trial":"free"}function Ja(s=[]){return vr.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=vr.orderBy(t,o=>typeof o.retryCount=="number"?o.retryCount:1),n=vr.chain(r).last().cloneDeep().value();return n&&(n.retryTestResults=r,e.push(n)),e},[]).compact().value()}async function Sr(s,e){let t=await Promise.resolve().then(()=>(Tt(),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 Vp,vr,Hp,Ov,Nt,Js,za,so,F=S(()=>{"use strict";Vp=v(require("os")),vr=v(require("lodash")),Hp=v(require("path"));Jr();$a();qp();Gp();la();_a();Ov=Vp.homedir(),Nt=Hp.join(Ov,".testim-browser-profile"),Js=[{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"}}],za=[{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"}];so=(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 Xa={};$(Xa,{$schema:()=>Nv,default:()=>jv,definitions:()=>Dv,properties:()=>Fv,required:()=>Uv,type:()=>Mv});var Nv,Dv,Mv,Uv,Fv,jv,Kp=S(()=>{Nv="http://json-schema.org/draft-07/schema#",Dv={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}}}},Mv="object",Uv=["entries"],Fv={version:{type:"string",enum:["1.2","1.2.0"]},creator:{type:"string"},entries:{type:"array",items:{$ref:"#/definitions/entry"}}},jv={$schema:Nv,definitions:Dv,type:Mv,required:Uv,properties:Fv}});async function tm(){try{return await re(no.promises.readFile(co()).then(async s=>{let e=await em;return Wv(e,s)}),3e4)}catch{return{}}}function Wv(s,e){let t=e.slice(0,16),r=e.slice(16),n=Buffer.from(s),o=rs.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 ut(s,e,t=Bv,r=void 0){return async()=>{if(!Yp)return await s();let n=e;r&&(e+=JSON.stringify(r));let o=await qv(e);if(o)return Qs.debug("cache hit:",{fnName:e}),o;if(Qs.debug("cache miss:",{fnName:e}),!Qp)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 Gv(e,i,t),i}}async function qv(s){let t=(await lo)[s];if(!t)return;let{value:r,expiry:n}=t;if(!(n<Date.now())&&r)return r}async function Gv(s,e,t){if(Ya)throw Qs.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 lo;r[s]={value:e,expiry:Date.now()+t},Zp=new Promise(n=>{ao=n}),$v(r)}catch{Qs.error("failed updating cache")}}async function rm(){let s=await lo;Object.keys(s).forEach(e=>{delete s[e]})}function sm(s){Yp=s}function Vv(s=!0){Qp=s}async function nm(){try{return Ya=!0,await Zp}finally{Ya=!1}}function om(s){io=s,lo=tm()}var no,oo,rs,Jp,Qs,io,Xp,ao,Yp,Qp,Ya,Zp,em,Bv,co,lo,$v,im,am,KP,cm,Gt=S(()=>{"use strict";no=v(require("fs")),oo=v(require("path")),rs=v(require("crypto"));F();Jp=require("lodash");j();Qs=A("local cache"),io=oo.resolve(lt(),"testim-cache"),Yp=!0,Qp=!0,Ya=!1,Zp=new Promise(s=>{ao=s}),em=new Promise(s=>{Xp=s}),Bv=1e3*60*60*3,co=()=>oo.resolve(oo.resolve(io,"testim.cache"));lo=tm(),$v=(0,Jp.debounce)(async s=>{let e;try{let t=await em,r=rs.randomBytes(16),n=JSON.stringify(s),o=Buffer.from(t),i=rs.createCipheriv("aes-256-cbc",Buffer.concat([o,Buffer.alloc(32)],32),r),a=Buffer.concat([r,i.update(n),i.final()]);await ye(io)||await no.promises.mkdir(io,{recursive:!0}),await no.promises.writeFile(co(),a)}catch(t){Qs.error("failed saving cache",{err:t}),e=t}ao(e?{success:!1,error:e}:{success:!0})},200);im=Xp,am=sm.bind(void 0,!1),KP=sm.bind(void 0,!0),cm=()=>Vv(!1)});function uo(){return{cliLocation:lt(),userInfo:ss.userInfo(),platform:ss.platform(),release:ss.release()}}var ss,Qa=S(()=>{"use strict";ss=v(require("os"));F()});function Hv(s){try{return po.resolve(po.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=Hv(s);return require(e)}var po,Zs=S(()=>{"use strict";po=v(require("path"))});async function pm(s){return(await um(`npm view ${s} version`)).stdout.trim()}function ec(s){try{return Vt(s)}catch{return!1}}function mm(s,e){return require(ns.join(s,`./node_modules/${e}/package.json`)).version}async function fo(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=ns.join(s,"npm-shrinkwrap.json"),i=ns.join(s,"npm-shrinkwrap-dummy.json"),a=!1;try{try{await ye(o)&&(await Za.promises.rename(o,i),a=!0)}catch{}return await um(`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?(dm.info("Failed to install package due to insufficient write access",{...uo(),package:e,path:u||s}),console.error(`
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(`
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
7
  Testim had missing write access to ${u||s}
8
8
 
9
- `),new yr(u||s)):c})}finally{if(a)try{await Za.promises.rename(i,o)}catch{}}}function fm(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(" "),p=(0,mo.spawn)("node",[zv,"i","--prefix",s,...d,...e,...i],a);p.stderr.pipe(process.stderr),p.stdout.pipe(process.stdout),p.stdout.on("data",m=>{c+=m}),p.stderr.on("data",m=>{u+=m}),p.on("close",m=>{var f;if(m){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 ${m}
10
- stdout: ${c} stderr: ${u}`}dm.debug(`Npm Install closed with exit code ${m}`,{message:h}),o(new At(h))}else n(c)}),setTimeout(()=>{try{p.kill()}finally{o(new te)}},r)})}var Za,ns,lm,mo,um,dm,zv,en=S(()=>{"use strict";Za=v(require("fs")),ns=v(require("path"));F();lm=require("util"),mo=require("child_process");j();Qa();Zs();z();um=(0,lm.promisify)(mo.exec),dm=A("cli-service");zv=ns.resolve(require.resolve("npm").replace("index.js",""),"bin","npm-cli.js")});var bm={};$(bm,{install:()=>Jv,isReady:()=>Yv,start:()=>Xv});var hm,gm,ym,wm,tc,Kv,Jv,Xv,Yv,Tm=S(()=>{"use strict";hm=v(require("fkill")),gm=v(require("p-retry"));en();Tt();F();Zs();ym="chromedriver",wm=9515,tc=`http://localhost:${wm}/wd/hub`,Kv=["--url-base=/wd/hub","--disable-build-check","--whitelisted-ips=0.0.0.0","--log-level=OFF"],Jv=async()=>{await fo(lt(),`${ym} --detect_chromedriver_version`)},Xv=async()=>{process.env.NODE_OPTIONS="",await(0,hm.default)(`:${wm}`,{silent:!0}),await Vt(ym).start(Kv,!0)},Yv=async({chromeBinaryLocation:s})=>{await(0,gm.default)(async()=>{var n;let e=await br(`${tc}/status`);if(!((n=e==null?void 0:e.value)!=null&&n.ready))throw new Error("status failed");let t={...s&&{binary:s}},r=await bt({url:`${tc}/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(`${tc}/session/${r.sessionId}`)},{retries:99,factor:1,minTimeout:30})}});var tn={};$(tn,{getSessionPlayerFolder:()=>oc,prepareChromeDriver:()=>Rr,prepareCustomExtension:()=>sc,prepareExtension:()=>nc,preparePlayer:()=>xr});async function sc(s,e=!1){if(!s)return;if(je(s)){let n=os.join(process.cwd(),s.replace(/^.*[\\/]/,""));if(await Qv(s)>rc&&!e)throw new R(vm);return await qe(s,n),n}let t=os.resolve(s);if(!Sm.existsSync(t))throw new R(`Failed to find custom extension in location: ${t}`);if(Ba(t)>rc&&!e)throw new R(vm);return t}async function Qv(s){let e=(Tt(),D(kt));try{let r=(await e.head(s)).headers["content-length"];return(r?parseInt(r,10):0)/1e6}catch(t){throw go.warn("failed to download custom extension",{err:t}),new R(`Failed to download custom extension from location: ${s}`)}}function nc(s){go.info("prepare extension",{locations:s});let e=s.map(t=>({location:t,path:Zn(t)}));return ut(()=>ue(e,({location:t,path:r})=>eo(t,r)),"prepareExtension",Rm,e)()}async function Rr(s={},e={},t=!1){let n=require("ora")("Starting Driver").start(),o=await Promise.resolve().then(()=>(Tm(),bm));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 yr||(go.error(a,{...s,...uo(),error:(0,Im.serializeError)(i)}),console.log(`
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(`
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 Zv(){let s=`${dr}/extension/sessionPlayer_LATEST_RELEASE`;return(await Gs(s)).body.toString("utf8")}async function eE(s,e){if(!je(s)||je(s)&&e||Re)return s;let t=await Zv();return`${s}-${t}`}function oc(){let s=lt();return os.resolve(s,"testim-bin")}function tE(){let s=oc();return os.resolve(s,"sessionPlayer.zip")}async function xm(s,e,t=!1){try{return await eo(s,e),await Xe(e,oc())}catch(r){if(t)throw r;return await xm(s,e,!0)}}async function xr(s,e){go.info("prepare player",{location:s,canary:e});let t=tE();return ut(async()=>{let r=await eE(s,e);return await xm(r,t),{}},"preparePlayer",Rm,[s,e,t])()}var Em,Sm,os,Im,go,Rm,rc,vm,is=S(()=>{"use strict";Em=v(require("ms")),Sm=v(require("fs")),os=v(require("path"));ce();Gt();Im=require("serialize-error");j();Qa();z();F();go=A("prepare runner and testim start"),Rm=(0,Em.default)("0.5 day"),rc=16,vm=`The size of the custom extension is more than ${rc}MB`});function rE(){let s=rn.type().toLowerCase();return s==="darwin"?rn.arch()==="arm"?"mac_arm":"mac":s==="windows_nt"?rn.arch()==="x64"?"win64":"win32":"linux"}async function wo(){let s=rE(),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(sn,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]}/${sn}/${n[s]}.zip`,a=yo.join(ic,n[s]),c=`${a}.zip`,u=yo.join(a,o[s]);if(await ye(u))return u;if(!await ye(c)){let p=(0,ac.default)("Downloading Chromium").start();try{await Cm.promises.mkdir(ic),await qe(i,c)}catch(m){let f=`Failed to download Chromium: ${m.message}`;throw p.fail(f),new Error(f)}p.succeed()}let d=(0,ac.default)("Extracting Chromium").start();try{await Xe(c,ic)}catch(p){let m=`Failed to extract Chromium: ${p.message}`;throw d.fail(m),new Error(m)}return d.succeed(),u}var Cm,rn,yo,ac,sn,ic,cc=S(()=>{"use strict";Cm=v(require("fs")),rn=v(require("os")),yo=v(require("path")),ac=v(require("ora"));z();F();sn="1000968",ic=yo.join(Nt,`chrome-${sn}`)});async function Am(s,e){return To=s,pc=e,await lc()}function km(s,e,t){Qe=s.token,To=e,pc=t,on=mc(Qe),bo=s.refreshToken,uc=s.ngrokToken,dc=s.isNgrokWhitelisted}function sE(s=To,e=pc){return ut(()=>(nn.info("request to get cli token from server"),bt({url:`${fe}/auth/token`,body:{projectId:s,token:e}})),"getTokenV3",Pm*10,{projectId:s,token:e})()}async function nE(){return nn.info("request to refresh JWT cli token from server"),Qe=(await bt({url:`${fe}/auth/refreshToken`,body:{token:Qe,refreshToken:bo}})).token,on=mc(Qe),Qe}async function lc(){try{let s=await sE();return nn.info("successfully get cli token from server"),Qe=s.token,on=mc(Qe),bo=s.refreshToken,uc=s.ngrokToken,dc=s.isNgrokWhitelisted,Qe}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."):(nn.error(`While trying to retrieve CLI token. caught error: ${s}`,{projectId:To}),new R(`While trying to retrieve CLI token, caught error: ${s}`))}}function mc(s){return require("jsonwebtoken").decode(s).exp*1e3}async function Ht(){if(!on)return lc();if(on<Date.now()+4*Pm)try{return await nE()}catch(s){return nn.error("failed to refresh token, executing fallback",s),lc()}return Qe}function vo(){return bo}function Dt(){return Qe?{uid:require("jsonwebtoken").decode(Qe).id,ngrokToken:uc,isNgrokWhitelisted:dc}:{}}var nn,Qe,on,bo,uc,dc,To,pc,Pm,vt=S(()=>{"use strict";ce();Tt();Gt();z();j();nn=A("testim-custom-token"),To=null,pc=null,Pm=5*60*1e3});var _m={};$(_m,{isCi:()=>as});var as,Eo=S(()=>{"use strict";as=Boolean(process.env.CI||process.env.CONTINUOUS_INTEGRATION||process.env.BUILD_NUMBER||process.env.RUN_ID||!1)});var ve={};$(ve,{addTestRetry:()=>Uc,clearTestResult:()=>Nc,deleteCloudflareTunnel:()=>$c,fetchLambdatestConfig:()=>_c,forceUpdateCloudflareTunnelRoutes:()=>Bc,getAllGrids:()=>kc,getAppDetails:()=>Ec,getApplitoolsIntegrationData:()=>Fc,getCloudflareTunnel:()=>jc,getEditorUrl:()=>uE,getGridById:()=>Ro,getGridByName:()=>Pc,getHybridGridProvider:()=>Cc,getLabFeaturesByProjectId:()=>Oc,getMobileDevicesFromGrid:()=>qc,getRealData:()=>ln,getS3Artifact:()=>cn,getSuiteTestList:()=>vc,getTestPlan:()=>lE,getTestPlanTestList:()=>Tc,getTestResults:()=>Cr,getUsageForCurrentBillingPeriod:()=>Sc,initializeUserWithAuth:()=>Ac,isTestResultCompleted:()=>Ic,keepAliveGrid:()=>Rc,loadSfdcCredential:()=>hc,loadTest:()=>gc,releaseGridSlot:()=>xc,reportExecutionFinished:()=>Io,reportExecutionStarted:()=>bc,saveRemoteStep:()=>Dc,saveTestPlanResult:()=>yc,updateExecutionTests:()=>wc,updateRemoteRunFailure:()=>Wc,updateTestDataArtifact:()=>xo,updateTestResult:()=>Lc,updateTestStatus:()=>cs,uploadRunDataArtifact:()=>Mc});async function an(){let s=await Ht();if(!s)throw new Error("Failed to get token from server");return{Authorization:`Bearer ${s}`}}async function Ze({url:s,body:e,headers:t={},timeout:r,retry:n}){let o=await an(),i=Object.assign({},t,o);return bt({url:`${fe}${s||""}`,body:e,headers:i,timeout:r,retry:n})}async function aE(s,e,t,r={},n=void 0){let o=await an(),i=Object.assign({},r,o);return await La(`${fe}${s||""}`,e,t,i,n)}async function So(s,e){let t=await an();return await Da(`${fe}${s||""}`,e,t)}async function cE(s,e){let t=await an();return await qs(`${fe}${s||""}`,e,t)}async function Pe(s,e,t,r){let n=await an();return await br(`${fe}${s||""}`,e||void 0,n,r,t)}function cn(s,e){return(0,ne.default)(()=>Pe(`/storage${s}`,null,{isBinary:!0},e),{retries:se})}async function lE(s,e){let t=n=>n==null?[]:typeof n=="string"&&JSON.parse(n)||n;return(await(0,ne.default)(()=>Pe("/testPlan",{projectId:s,name:e.join(",")}),{retries:se})).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 hc({branch:s,projectId:e}){let t=await(0,ne.default)(()=>Pe(`/branch/branchData/${s}`,{projectId:e}),{retries:se});return t==null?void 0:t.sfdcCredential}function gc({testId:s,branch:e,projectId:t,skipSharedSteps:r=!1,useBranchMap:n=!0}){return(0,ne.default)(()=>Pe(`/test/${s}`,{projectId:t,branch:e,skipSharedSteps:r,useBranchMap:n}),{retries:se})}function yc(s,e,t){return(0,ne.default)(()=>Ze({url:"/testPlan/result",body:{projectId:s,testPlanId:e,result:t}}),{retries:se})}function cs(s,e,t,r,n,o,i=se){return(0,ne.default)(()=>So("/result/run/test",{runId:e,testId:t,resultId:r,status:n,projectId:s,runnerVersion:oE,...o}),{retries:i})}function wc(s,e,t,r,n,o,i,a){return(0,ne.default)(()=>So("/result/run/tests",{runId:s,runnerStatuses:e,status:t,reason:r,success:n,startTime:o,endTime:i,projectId:a}),{retries:se})}async function bc({executionId:s,projectId:e,labels:t,startTime:r,executions:n,config:o,resultLabels:i,remoteRunId:a,localRunUserId:c,isLocalRun:u,intersections:d}){let{isCi:p}=await Promise.resolve().then(()=>(Eo(),_m));return Ze({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:p,localRunUserId:c,isLocalRun:u}},retry:3})}function Io(s,e,t,r,n={},o=void 0,i=void 0){let a=Date.now();return(0,ne.default)(()=>So("/result/run",{runId:e,projectId:t,endTime:a,status:s,success:r,tmsOptions:n,remoteRunId:o,resultExtraData:i}),{retries:se})}async function Tc(s,e,t,r,n){return(0,ne.default)(()=>Ze({url:"/testPlan/list",body:{projectId:s,names:e,planIds:t,branch:r,intersections:n},timeout:12e4}),{retries:se})}function vc({projectId:s,labels:e,testIds:t,testNames:r,testConfigNames:n,suiteNames:o,suiteIds:i,branch:a,rerunFailedByRunId:c,testConfigIds:u,intersections:d}){return(0,ne.default)(()=>Ze({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:se,factor:1})}async function Ec({appId:s,projectId:e}){try{return await(0,ne.default)(()=>Pe(`/mobile-app/app/${s}?projectId=${e}`),{retries:se,factor:1})}catch(t){Ut.error("failed getting application details",{appId:s,error:t});return}}async function Sc(s){try{return await(0,ne.default)(()=>Pe(`/plan/project/${s}/usage-current-billing-period`),{retries:se})}catch(e){Ut.error("failed getting usage for current billing period",{projectId:s,error:e});return}}function Ic(s,e,t){return(0,ne.default)(()=>Pe(`/result/${s}/isComplete`,{projectId:e,testRetryKey:t}),{retries:se})}function Cr(s,e,t,r){return(0,ne.default)(()=>Pe(`/test/v2/${s}/result/${e}`,{projectId:t,branch:r}),{retries:se,factor:1})}function Rc(s,e){return Ze({url:`/grid/keep-alive?reqId=${K()}`,body:{projectId:s,slots:e},timeout:1e4})}function xc(s,e,t,r,n){return Ze({url:`/grid/release?reqId=${K()}`,body:{companyId:s,projectId:e,slotId:t,gridId:r,browser:n}})}function Cc(s){return Ze({url:"/grid/hybrid/provider",body:s})}function Pc(s,e,t,r,n){return(0,ne.default)(()=>Pe("/grid/name",{companyId:s,projectId:e,name:t,browser:r,executionId:n,reqId:K()}),{retries:se})}function Ro(s,e,t,r,n){return(0,ne.default)(()=>Pe(`/grid/${t}`,{companyId:s,projectId:e,browser:r,executionId:n,reqId:K()}),{retries:se})}async function Ac({projectId:s,token:e,branchName:t,lightweightMode:r,localGrid:n}){var o,i;try{return await(0,ne.default)(()=>bt({url:`${fe}/executions/initialize`,body:{projectId:s,token:e,branchName:t||"master",lightweightMode:r,localGrid:n}}),{retries:se})}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 uE(){if(ur)return{editorUrl:ur};try{return await(0,ne.default)(()=>Pe("/system-info/editor-url"),{retries:se,onFailedAttempt:s=>{if(s.attemptNumber>=se)throw s}})}catch{return Ut.error("cannot retrieve editor-url from server"),{editorUrl:"https://app.testim.io"}}}function kc(s){return(0,ne.default)(()=>Pe("/grid",{companyId:s}),{retries:se})}function ln(s,e,t){return(0,ne.default)(()=>Pe(`/real-data/${e}?${t}&projectId=${s}`),{retries:se})}function Lc(s,e,t,r,n){return(0,ne.default)(()=>Ze({url:"/result/test",body:{projectId:s,resultId:e,testId:t,testResult:r,remoteRunId:n}}),{retries:se})}function Nc(s,e,t,r){return(0,ne.default)(()=>Ze({url:"/result/test/clear",body:{projectId:s,resultId:e,testId:t,testResult:r}}),{retries:se})}function Dc(s,e,t,r){return(0,ne.default)(()=>Ze({url:"/remoteStep",body:{projectId:s,resultId:e,stepId:t,remoteStep:r}}),{retries:se})}function dE(s){return s.startsWith("/")?s:`/${s}`}function pE(s,e,t){let r=dE(s);return t&&(r=`/${t}${r}`),e&&(r=`/${e}${r}`),r}async function Lm(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=pE(c,"test-result-artifacts",s),d=Buffer.from(Om.gzip(r,{level:3})),p={file:{fileName:a,buffer:d}};return await(0,ne.default)(()=>aE(`/storage${u}`,{},p,{"X-Asset-Encoding":"gzip"}),{retries:se,factor:1}),u}function Uc({projectId:s,runId:e,testId:t,newResultId:r,originalTestResultId:n,previousTestResultId:o,testResult:i}){return(0,ne.default)(()=>Ze({url:"/result/test/retry",body:{projectId:s,newResultId:r,originalTestResultId:n,previousTestResultId:o,testId:t,runId:e,testResult:i}}),{retries:se})}async function Fc(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 jc(s,e){try{return await So("/tunnel",{companyId:s,routes:e})}catch(t){return Ut.warn("could'nt get tunnel.",{err:t}),{}}}async function Bc(s,e){try{return await Ze({url:`/tunnel/${e}`,body:{companyId:s}})}catch(t){Ut.warn("could'nt get tunnel.",{err:t});return}}async function $c(s,e){try{return await cE(`/tunnel/${e}`,{companyId:s})}catch(t){Ut.warn("could'nt get tunnel.",{err:t});return}}function Wc(s){return bt({url:`${fe}/result/remoteRunFailure`,body:s})}async function qc({projectId:s,projectType:e,gridId:t,companyId:r,selectors:n}){let o=`${iE}/mobileDevices/${t}/${r}?projectType=${e}`;o=n?`${o}&selectors=${encodeURIComponent(n)}`:o;try{return await(0,ne.default)(()=>Pe(o,{projectId:s}),{retries:se})}catch(i){return Ut.warn("could'nt get devices from headspin grid.",{err:i}),null}}var zt,Om,ne,fc,oE,Ut,se,iE,_c,Oc,Mc,xo,Te=S(()=>{"use strict";zt=v(require("lodash")),Om=v(require("pako"));F();ce();oe();Tt();vt();ne=v(require("p-retry")),fc=v(require("object-hash"));z();j();oE=ot(),Ut=A("testim service api"),se=3,iE="/grid";_c=async()=>(0,ne.default)(()=>Pe("/grid/lt/config"),{retries:se}),Oc=async s=>(0,ne.default)(()=>Pe(`/labFeature/v2/project/${s}`),{retries:se});Mc=zt.memoize(async(s,e,t,r)=>{if(!zt.isEmpty(r))return await Lm(s,e,t,JSON.stringify(r),"test-run-data","application/json")},(s,e,t,r)=>`${(0,fc.default)(r)}:${e}:${t}`),xo=zt.memoize(async(s,e,t,r,n)=>!r||zt.isEmpty(r)?void 0:await Lm(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]:qa.HIDDEN_PARAM})})}return i})()),"test-test-data","application/json"),(s,e,t,r)=>`${(0,fc.default)(r)}:${e}:${t}`)});var Ft={};$(Ft,{getSessionPlayer:()=>ie,options:()=>Vc});var Co,Vc,Gc,ie,Ee=S(()=>{"use strict";Co=require("path"),Vc={playerPath:void 0},ie=()=>{if(Gc)return Gc;let s=(Le(),D(Oe));s.log("getSessionPlayerRequire start");let{getSessionPlayerFolder:e}=(is(),D(tn)),t=e(),r=Vc.playerPath?(0,Co.resolve)(Vc.playerPath,"src/background/sessionPlayerInit.ts"):(0,Co.join)(t,"sessionPlayer.js"),n=require(r);return s.log("getSessionPlayerRequire end"),Gc=n,n}});function hE(s){process.nextTick(()=>{if([Y.SELENIUM,Y.APPIUM].includes(s))try{(Ee(),D(Ft)).getSessionPlayer(),require("jsdom")}catch{}})}async function un(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?fE:mE;N("before initializeUserWithAuth");let d=await ut(async()=>(hE(i),await Ac({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"),km(d.authData,s.project,s.token),d}var mE,fE,Nm=S(()=>{"use strict";Le();Te();Gt();vt();oe();mE=1e3*60*5,fE=1e3*60*60*10});async function Um(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 wo():s.chromeBinaryLocation,e=Rr({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!==Y.EXTENSION&&await xr(s.playerLocation,s.canary),s.mode===Y.EXTENSION&&!s.ext&&await nc(s.extensionLocation);let n;if(s.installCustomExtension){let i=Boolean(s.useLocalChromeDriver||s.useChromeLauncher);n=await sc(s.installCustomExtension,i)}return await e,n}async function Fm(s){var i;gE.info("prepare MockNetwork",{location:s});let e=await ja(s),t=Buffer.isBuffer(e)?e:e.body;if(t.byteLength>Dm*1e6)throw new Error(`${Hc} exceeded ${Dm}MB`);let r;try{r=JSON.parse(t.toString("utf-8"))}catch(a){throw new Error(`${Hc} cannot be parsed.${Po.EOL}${a}`)}let n=new Mm.default;if(!n.validate(Xa,r)){let a=(i=n.errors)==null?void 0:i.map((c,u)=>`${++u}) ${c.dataPath} ${c.message}`).join(Po.EOL);throw new Error(`${Hc} is malformed.${Po.EOL}${a}`)}return r.entries}var Po,Mm,Dm,Hc,gE,zc=S(()=>{"use strict";Po=v(require("os"));F();Kp();is();Mm=v(require("ajv"));oe();cc();Nm();Dm=1,Hc="JSON file supplied to --mock-network-pattern",gE=(j(),D(nt)).getLogger("prepare runner")});function Bm(s,e=process){async function t(r){await re(ue(jm,async n=>n()),1e4).catch(()=>null),s(r)}e.on("uncaughtException",async r=>{dn.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(dn.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",()=>{dn.error("Caught rejection handled")}),e.once("SIGTERM",()=>{let r="Runner aborted - SIGTERM event",n=new Error(r);throw dn.error(r),t(n),n}),e.once("SIGINT",()=>{let r="Runner aborted - SIGINT event",n=new Error(r);throw dn.error(r),t(n),n}),e.once("exit",r=>{s(r)})}function ls(s){jm.push(s)}var dn,jm,pn=S(()=>{"use strict";j();F();dn=A("process-handler"),jm=[]});function Yc(s,e){let t=s.canary?"-master.zip":".zip",r=`${e?va:dr}/extension/testim-firefox-profile${t}`,n=`${e?Ea:dr}/extension/testim-headless${t}`;return{firefox:r,chrome:n,"edge-chromium":n}}function Vm(s){let{chrome:e,firefox:t}=Yc(s,!1);return s.browser==="firefox"?t:s.browser==="chrome"?e:[e,t]}function ko(s){let e=`${dr}/extension/sessionPlayer`;return s.canary?`${e}-master`:e}var _o=S(()=>{"use strict";ce()});function Xm(s){Re||(s!=null&&s.userId||(s={anonymousId:Jm}),Km.identify(s))}function dt(s,e){return us("ci",s,e)}function us(s,e,t){if(Re)return;let r=s?{userId:s}:{anonymousId:Jm};Km.track(Object.assign(r,{event:e,properties:t}))}var zm,Km,Jm,ds=S(()=>{"use strict";ce();zm=v(require("analytics-node")),Km=new zm.default("sJOSIGKa5x5rJEGsaOlCjrgozAf7FnVY",{flushAt:1}),Jm=require("crypto").randomBytes(20).toString("hex")});function Ym(s){return s.start&&us(null,"cli-start-command",{downloadBrowser:Boolean(s.downloadBrowser)}),!!(s.startV2||s.start||s.agent)}async function Qm(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=ko(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 Zm=S(()=>{"use strict";_o();ds();z()});function Lo(s){let{platform:e}=process;e==="win32"?(0,Oo.exec)(`start chrome ${s}`):e==="darwin"?(0,Oo.exec)(`open -a "Google Chrome" ${s}`):e==="linux"&&(0,Oo.exec)(`google-chrome ${s}`)}var Oo,Qc=S(()=>{"use strict";Oo=require("child_process")});var fn={};$(fn,{doLogin:()=>rl,getProjectId:()=>SE,getToken:()=>IE});async function SE(){return rf("projectId")}async function IE(){return rf("token")}function tf(s,e){return Promise.race([s,he(e).then(()=>{throw new te("timeout")})])}async function RE(){let s=(await import("express")).default(),e=async function(){return tf(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();Lo(`${n}/#/new-test`)}catch{console.log("Unable to open Testim automatically - please manually go to https://app.testim.io")}return await e}async function rl({overwriteExisting:s=!0,projects:e=null}={}){let t=Zc.homedir(),r=el.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 tf(RE(),62e3).catch(()=>null)),e!=null&&e.token){o.token=e.token,o.projectId=e.projectId,c.succeed(),await ef(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 ef(r,o);return}c.fail(),console.log("Error getting credentials - please pass `--token` and `--project` to the CLI or try again")}async function ef(s,e){await tl.promises.writeFile(s,No.stringify(e)),console.log(`Testim credentials saved in '${s}'`)}async function rf(s){let e=Zc.homedir(),t=el.join(e,".testim"),r=await ye(t),n={};if(r)try{n=No.parse((await tl.promises.readFile(t)).toString())}catch{}return n||(n={}),n[s]}var Zc,el,No,tl,ps=S(()=>{"use strict";Zc=v(require("os")),el=v(require("path")),No=v(require("yaml"));F();tl=require("fs");Qc()});var lf={};$(lf,{process:()=>NE});var sl,nf,nl,of,pt,Ne,af,xE,Ae,il,CE,PE,sf,cf,AE,ol,Mo,al,kE,Do,Et,_E,l,OE,LE,NE,uf=S(()=>{"use strict";sl=v(require("ms")),nf=v(require("chalk")),nl=v(require("fs")),of=v(require("url")),pt=v(require("lodash")),Ne=v(require("path"));F();_o();Zm();Gt();af=require("commander");oe();z();Jr();F();xE=s=>s.replace(/-([a-z])/g,(e,t)=>t.toUpperCase()),Ae=(s,e)=>(e.push(s),e),il=new af.Command,CE=s=>s.split(","),PE=(s,e)=>!s||s.length===0?e:s,sf=["enable-heavy-ad-intervention","heavy-ad-privacy-mitigations","use-fake-device-for-media-stream","use-fake-ui-for-media-stream","proxy-server"],cf=()=>{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 p(h){return h.includes("--urls")}function m(h){return h.includes("--test-start-timeout")}function f(h){return h.includes("--install-lazy-deps")}il.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)&&!p(y)&&!m(y)&&!f(y)).join(`
18
- `))},AE=(s,e)=>{let t=e?`Please use ${e} instead.`:"";console.log(nf.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 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(`
19
19
  WARNING: ${s} is deprecated. ${t}
20
- `))},ol=["clover","html","json-summary","json","lcov","lcovonly","teamcity","text-lcov","text-summary","text"],{env:Mo,argv:al,stdout:kE,exit:Do,cwd:Et}=global.process,_E=["trace","debug","info","warn","error","silent"];Ga(al,new Set(["run","connect","tunneld","start","init"]));il.description("Testim.io CLI").option("--run [file-glob-pattern]","codeful test files to run",Ae,[]).option("-h --help","output usage information",cf).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",CE).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(Mo.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,sl.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,sl.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: ${ol.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(al);l=il.opts(),OE=()=>{l.grid||l.gridId||(l.host||(l.host="ondemand.saucelabs.com"),l.port||(l.port=80))},LE=()=>{l.grid||l.gridId||(l.host||(l.host="hub-cloud.browserstack.com"),l.port||(l.port=80))},NE=async()=>{var g,y,b,C,w,T,I,k,M;l.inspect&&require("inspector").open(l.inspect);let s={},e={},t=[],r={};if(!al.slice(2).length)throw cf(),new pr;if(l.requireCredentials){let E=await Promise.resolve().then(()=>(ps(),fn)),_=await E.getProjectId(),x=await E.getToken();(!_||!x)&&await E.doLogin()}if(l.login)return await(await Promise.resolve().then(()=>(ps(),fn))).doLogin(),{loginMode:!0};if(l.init)return{initCodimMode:!0,initTestProject:l.init};if(l.version){let E="Testim CLI Version: ";Mo.npm_package_version&&(console.log(E,Mo.npm_package_version),Do(0));let _=ot();_&&(console.log(E,_),Do(0)),console.log("Could not find version, please check the package.json manually"),Do(0)}if(l.installLazyDeps)return{installLazyDepsMode:!0};l.disableFileCache&&am();let n=l.fileCacheLocation||l.usePrefechedData||l.createPrefechedData;if(n){let E=Ne.resolve(n);om(E)}if(l.usePrefechedData&&cm(),l.playerRequirePath){let E=Ne.resolve(l.playerRequirePath);console.log("Using Local Clickim for Player Require Path =",E);let _=Ne.join(E,"tsconfig.node.json"),L=require("ts-node").register({project:_,ignore:[/node_modules/,new RegExp(`^${pt.escapeRegExp(Ne.relative(Et(),__dirname))}`)],transpileOnly:!0});require("tsconfig-paths").register({paths:L.config.options.paths,baseUrl:L.config.options.baseUrl}),(Ee(),D(Ft)).options.playerPath=E;let H=require("module"),X=H.prototype.require;H.prototype.require=function(me){return me==="rox-alias"?X.call(this,"rox-node"):X.apply(this,arguments)}}if(l.caFile&&(global.caFileContent=nl.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(Ym(l))return Qm(l);try{let E={};l.configFile?E=require(Ne.join(Et(),l.configFile)).config:l.optionsFile&&(E=require(Ne.join(Et(),l.optionsFile))),E&&typeof E.then=="function"&&(E=await E),Object.keys(E).forEach(_=>{let x=xE(_);l[x]=PE(l[x],E[_])})}catch(E){throw E.message=`Unable to read options file: ${E.message}`,E}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=((b=l.testPlan)==null?void 0:b.length)||((C=l.testPlanId)==null?void 0:C.length),a=((w=l.suite)==null?void 0:w.length)||((T=l.suiteId)==null?void 0:T.length);if(l.seleniumCapsFile)try{r=require(Ne.join(Et(),l.seleniumCapsFile))}catch(E){throw new R(`Failed to parse selenium caps file file error: ${E.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(Et(),l.chromeExtraPrefs))}catch(E){throw new R(`Failed to read/open chrome extra prefs file error: ${E.message}`)}if(l.chromeExtraArgs){let E=l.chromeExtraArgs.split(",");for(let _ of E){let[x]=_.split("=");sf.includes(x)||l.useLocalChromeDriver||l.useChromeLauncher?(t.push(_),x==="proxy-server"&&t.push("proxy-bypass-list=*.testim.io;*.coralogix.com;*.cloudinary.com;*.rollout.io")):console.warn(`Ignoring an unsupported chrome arg (${x}), allowed values: ${JSON.stringify(sf)}`)}}if(l.paramsFile)try{s=Object.assign({},s,require(Ne.join(Et(),l.paramsFile)))}catch(E){throw new R(`Failed to read/open params file error: ${E.message}`)}if(l.params)try{s=Object.assign({},s,JSON.parse(l.params))}catch(E){throw new R(`Failed to parse params string error: ${E.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&&(OE(),l.saucelabs={},l.saucelabs.username=l.sauceUser,l.saucelabs.accessKey=l.sauceKey),l.sauceOptions)try{let E=require(Ne.join(Et(),l.sauceOptions)),_=E.platformName&&["ios","android"].includes(E.platformName.toLowerCase());if(E.browserName){let L=E.browserName.toLowerCase();switch(L){case"microsoftedge":l.browser="edge";break;default:l.browser=L}}l.browser==="edge"&&parseFloat(E.version)>=Jn&&(l.browser="edge-chromium");let x=parseFloat(E.version)<50&&!["dev","beta"].includes(E.version);if(!_&&l.browser==="chrome"&&x)throw new R("The minimum chrome supported version is 50.0");l.saucelabs=Object.assign({},l.saucelabs,E)}catch(E){throw new R(`Failed to parse saucelabs options file error: ${E.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&&(LE(),l.browserstack={},l.browserstack["browserstack.user"]=l.browserstackUser,l.browserstack["browserstack.key"]=l.browserstackKey),l.browserstackOptions)try{let E=require(Ne.join(Et(),l.browserstackOptions)),_=E.platform&&["mac","android"].includes(E.platform.toLowerCase());if(E.browserName&&(l.browser=E.browserName.toLowerCase()),l.browser==="edge"&&parseFloat(E.browser_version)>=Jn&&(l.browser="edge-chromium"),!_&&parseFloat(E.browser_version)<50&&l.browser==="chrome")throw new R("The minimum chrome supported version is 50.0");l.browserstack=Object.assign({},l.browserstack,E)}catch(E){throw new R(`Failed to parse browserstack options file error: ${E.message}`)}if(l.perfecto={},l.perfectoToken&&(l.perfecto.securityToken=l.perfectoToken),l.perfectoOptions)try{let E=require(Ne.join(Et(),l.perfectoOptions)),_={location:"US East",securityToken:l.perfectoToken};l.perfecto=Object.assign({},_,E)}catch(E){throw new R(`Failed to parse perfecto options file error: ${E.message}`)}if(l.testobjectSauce={},l.testobjectKey&&(l.testobjectSauce.testobjectApiKey=l.testobjectKey),l.testobjectOptions)try{let E=require(Ne.join(Et(),l.testobjectOptions)),_={testobjectApiKey:l.testobjectKey};l.testobjectSauce=Object.assign({},_,E)}catch(E){throw new R(`Failed to parse test object options file error: ${E.message}`)}if(!l.project){let _=await(await Promise.resolve().then(()=>(ps(),fn))).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)&&kE.isTTY&&!l.headless&&!Mo.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||Do(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(()=>(ps(),fn))).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(![Y.EXTENSION,Y.SELENIUM,Y.APPIUM].includes(l.mode))throw new R(`runner mode <${l.mode}> is not supported`);if(l.mode!==Y.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"),!_E.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((M=l.host)!=null&&M.includes("/")&&(/^(f|ht)tps?:\/\//i.test(l.host)||(l.host=`http://${l.host}`),l.host=of.parse(l.host).hostname),l.resultLabel.length){l.resultLabel=l.resultLabel.map(_=>_.trim()).filter(Boolean);let E=l.resultLabel.filter(_=>_.length>=250).filter(Boolean);if(l.branch==="auto-detect"&&l.resultLabel.includes("auto-detect-branch")&&Er()&&l.resultLabel.unshift(Er()),E.length)throw new R("A result label cannot exceed 250 characters")}let d=Vm(l),p=ko(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 E=require("glob");if(l.files=pt.flatMap(l.run,_=>E.sync(_)),l.files.length===0)throw new R(`No files found at path '${l.run}'.`)}else l.files=[];if(l.setRetention&&!pt.inRange(pt.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 m="is no longer supported, please use --override-mapping-file";if(l.mockNetworkHar)throw new R(`--mock-network-har ${m}`);if(l.mockNetworkPattern)throw new R(`--mock-network-pattern ${m}`);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&&pt.difference(l.codeCoverageReporter,ol).length){let E=pt.difference(l.codeCoverageReporter,ol);throw new R(`invalid --code-coverage-reporter parameters ${E.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(E=>Boolean(l[E]));if(l.mode!==Y.EXTENSION&&h.length){let E=h.length>1?"are":"is";throw new R(`${h.map(_=>f[_]).join(" and ")} ${E} only applicable in extension mode`)}if(l.tmsFieldFile)try{let E=nl.readFileSync(l.tmsFieldFile);l.tmsCustomFields=JSON.parse(E)}catch(E){throw new R(`failed to parse field file error: ${E.message}`)}if(l.highSpeed&&(AE("--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 E={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({},E,_)}catch(E){throw new R(`failed to parse lightweightMode settings error: ${E.message}`)}else l.turboMode&&l.mode===Y.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"?Er():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||p,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 ME={};var ms,df,pf,Uo,DE,mf=S(()=>{"use strict";ms=v(require("path")),df=require("fs"),pf=require("child_process"),Uo=ms.resolve(__filename),DE=!Uo.includes("node_modules")&&ms.dirname(Uo).endsWith("src");DE&&!(0,df.existsSync)(ms.resolve(Uo,"..","..","..","webdriverio","build","index.js"))&&(console.log("Hi developer, we're initializing the runner dev env for the first time for you \u2764\uFE0F"),(0,pf.execSync)("yarn workspace @testim/webdriverio build",{cwd:ms.resolve(Uo,"..","..")}))});var cl={};$(cl,{installAllLazyDependencies:()=>jE,lazyRequire:()=>ge});async function ge(s,e={}){let t=ec(s);if(t)return t;let r;e.silent||(r=(0,ff.default)(`Installing ${s} before first usage...`).start());try{let n=await FE(s);return r&&r.succeed(),n}catch(n){UE.warn("failed to install dependency lazily",{dependency:s,err:n});let o=gf(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 FE(s){return fs.has(s)||(fs.set(s,hf(s)),fs.get(s).catch(()=>{fs.delete(s)})),fs.get(s)}async function hf(s){let e=ec(s);if(e)return e;let t=gf(s),r=`${s}@${t}`;return await fo(lt(),r),Vt(s)}async function jE(){let s=Object.keys(da);for(let e of s)await hf(e)}function gf(s){let e=Object.entries(da).find(([t])=>t===s);if(!e)throw new Error("The given package name is not lazyDependencies");return e[1]}var ff,UE,fs,mt=S(()=>{"use strict";ff=v(require("ora"));en();j();F();Xn();Zs();UE=A("lazy-require"),fs=new Map});var Tf={};$(Tf,{init:()=>$E});async function $E(s){var b,C;let e=typeof s=="string"?s:"";(typeof s!="string"||!s.trim())&&(e=(await(0,ul.default)({type:"text",name:"project",message:"Please enter Project name",validate:T=>String(T).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,wf.default)(r);if(!n.validForNewPackages){let w=`The name '${r}' is not a valid package name:`;throw console.log(Fo.default.red(w)),n.errors&&n.errors.forEach(T=>console.log(Fo.default.red(T))),n.warnings&&n.warnings.forEach(T=>console.log(Fo.default.yellowBright(`warning: ${T}`))),new R(`${w}
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}
21
21
  validation errors:
22
- ${((b=n.errors)==null?void 0:b.join(`
22
+ ${((w=n.errors)==null?void 0:w.join(`
23
23
  `))||""}
24
24
  warnings:
25
- ${((C=n.warnings)==null?void 0:C.join(`
26
- `))||""}`)}let i=(await(0,ul.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,ll.default)(`Creating new test project in ${u}`).start();await to(c,u);let p=Kt.join(__dirname,a,i,"package.json"),m=Kt.join(process.cwd(),e,"package.json"),h=(await Jt.promises.readFile(p)).toString().replace("~testim-codeful-test-project~",r);await Jt.promises.writeFile(m,h);let g="node_modules",y=Kt.join(process.cwd(),e,".gitignore");await Jt.promises.writeFile(y,g),d.succeed(),d=(0,ll.default)("Installing dependencies").start(),await BE("npm install",{cwd:u}),d.succeed(),console.log(`Testim Dev Kit project folder successfully created in ${u}.`)}var Jt,Kt,yf,ll,Fo,ul,wf,bf,BE,vf=S(()=>{"use strict";Jt=v(require("fs")),Kt=v(require("path")),yf=v(require("child_process")),ll=v(require("ora")),Fo=v(require("chalk")),ul=v(require("prompts")),wf=v(require("validate-npm-package-name")),bf=require("util");z();$a();BE=(0,bf.promisify)(yf.exec)});var Sf={};$(Sf,{preloadTests:()=>hn});async function hn(s){if(!Array.isArray(s.testId)||!s.testId.length)return{};let e={branch:s.branch,projectId:s.project};return await ut(async()=>{let t=await ue(s.testId,r=>gc({...e,testId:r}),{concurrency:2});return Ef.keyBy(t,"testData.id")},"loadTests",WE,[e,s.testId])()}var Ef,WE,jo=S(()=>{"use strict";Ef=v(require("lodash"));Gt();Te();F();WE=1e3*60*60*10});function dl(){return ot()}async function xf(){if(!Re)try{let s=await re(GE(),5e3,"The API call to NPM timed out"),e=dl();e&&Rf.lt(e,s)&&console.log(If.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){qE.warn("Failed to get NPM version",{err:s})}}var If,Rf,qE,GE,pl=S(()=>{"use strict";If=v(require("chalk")),Rf=v(require("semver"));F();ce();en();Gt();j();qE=A("npm-driver"),GE=ut(()=>pm("@testim/testim-cli"),"getNpmVersion")});var ml,HE,hs,Cf,Pf,fl,Af,kf=S(()=>{"use strict";F();z();j();mt();ml=A("testimNgrok"),HE=".whitelisted-ngrok.testim.io",hs="",Pf=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}${HE}`);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://")?(ml.info("replace https to http"),hs=o.replace("https://","http://")):hs=o,s.tunnelDiagnostics&&fl(),s.baseUrl=hs},fl=async(s=!0)=>{try{let t=(await ge("ngrok")).getApi(),{tunnels:r}=await t.listTunnels(),n=r.find(o=>o.public_url===hs);console.log("ngrok stats",n),ml.info("ngrok stats",{tunnel:n})}catch(e){ml.error("error collecting ngrok stats",{err:e})}s&&(Cf=setTimeout(()=>fl(),1e4))},Af=async s=>{if(!hs)return;clearTimeout(Cf),s.tunnelDiagnostics&&await fl(!1),await(await ge("ngrok")).disconnect(hs)}});var Xt,gl,_f,KE,JE,hl,Bo,Wo,$o,XE,Of,Lf,Nf=S(()=>{"use strict";Xt=v(require("os")),gl=v(require("fs")),_f=v(require("child_process"));F();Te();KE="https://github.com/cloudflare/cloudflared/releases/download/2022.4.1/",JE={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"}},hl=Xt.tmpdir(),Bo=`${hl}/cloudflared`,Wo=null,$o=null,XE=async()=>{if(await ye(Bo))return;let e=JE[Xt.platform()+Xt.arch()];if(!e)throw new Error(`tunnel on ${Xt.platform()+Xt.arch()} platform is not supported.`);let t=e.extract?hl+e.path:Bo;await qe(`${KE}/${e.path}`,t),e.extract&&await Xe(t,hl),await gl.promises.chmod(Bo,"755")},Of=async s=>{let e=s.baseUrl||`http://localhost:${s.tunnelPort||80}`,t="tunnelRoutes"in s&&s.tunnelRoutes||[e],[r]=await Promise.all([jc(s.company.companyId,t),XE()]);Wo=r._id,$o=_f.spawn(Bo,["tunnel","--no-autoupdate","run","--force","--token",r.token],{stdio:"inherit"}),await Bc(s.company.companyId,Wo),"tunnelRoutesOutput"in s&&s.tunnelRoutesOutput&&await gl.promises.writeFile(s.tunnelRoutesOutput,JSON.stringify(r.routesMapping,null,2)),s.baseUrl=`${s.tunnelUseHttpAddress?"http":"https"}://${r.routesMapping[e]}`},Lf=async s=>{let e=[];return Wo&&e.push($c(s.company.companyId,Wo)),$o&&e.push(new Promise((t,r)=>{$o.on("close",n=>{n&&r(new Error(`tunnel process exited with code ${n}`)),t()}),$o.kill()})),await Promise.all(e)}});var Yt={};$(Yt,{featureFlagsService:()=>W});var J,Mf,QE,ZE,eS,Df,qo,yl,W,we=S(()=>{"use strict";J=v(require("rox-node"));j();F();ce();Mf=A("FeatureFlagsService"),QE=!Re&&!0&&!wa,ZE=2e4,eS=60*60*24,Df=["labs","disabled","enabled"],qo=class extends J.default.Variant{constructor(e="disabled"){super(e,Df)}getValue(){let e=super.getValue();return Df.includes(e)?e:(Mf.warn('unexpected value for lab feature flag. Falling back to value "labs"',{featureFlagName:this.name,value:e}),"labs")}},yl=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 qo("labs"),highSpeedMode:new qo,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(!QE)return;let e={fetchIntervalInSec:eS,disableNetworkFetch:!1};if(global.ProxyAgent){let t=new global.ProxyAgent(global.proxyUri);Object.assign(e,{httpsAgent:t,httpAgent:t})}return re(J.default.setup(ga,e),ZE).catch(t=>Mf.error("failed to get feature flag status",t))}},W=new yl});var Ff,jf,Qt,Bf,$f,Uf,tS,rS,Go,sS,nS,ee,Vo=S(()=>{"use strict";Ff=v(require("ms")),jf=v(require("p-retry")),Qt=v(require("os")),Bf=v(require("portfinder")),$f=v(require("child_process"));F();Tt();Te();z();j();_o();oe();we();Uf=A("lambdatestService"),tS="https://downloads.lambdatest.com/tunnel/v3",rS={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"},Go=`${Qt.tmpdir()}/LT`,sS=`${Go}/LT`,nS=(0,Ff.default)("15m"),ee=class{constructor(){this.isActive=!1}static isLambdatestGrid(e){return e.type===le.LAMBDATEST||e.type===le.HYBRID&&e.provider==="lambdatest"}isLambdatestRun(){return this.isActive}async enableIfNeeded(e){ee.isLambdatestGrid(e)&&(ee.lambdatestConfigPromise||(ee.lambdatestConfigPromise=_c()),ee.lambdatestConfig=await ee.lambdatestConfigPromise,this.isActive=!0)}disable(){this.isActive=!1}get getSessionTimeout(){return this.isActive?nS:null}get getSessionRetries(){return this.isActive?1:null}static async prepareTunnel(){if(await ye(sS))return;let t=rS[Qt.platform()+Qt.arch()];if(!t)throw new Error(`tunnel on ${Qt.platform()+Qt.arch()} platform is not supported.`);let r=`${Go}.zip`;await qe(`${tS}/${t}`,r),await Xe(r,Go)}static async connectTunnel(e){if(e.externalLambdatestTunnelId){ee.tunnelName=e.externalLambdatestTunnelId;return}await this.prepareTunnel();let t=await Bf.getPortPromise(),{gridData:r={},gridUsername:n,gridPassword:o}=e,i=global.proxyUri;ee.tunnelName=K();let a=["--tunnelName",ee.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"]),ee.tunnel=$f.spawn("./LT",a,{cwd:Go});let c="",u="";ee.tunnel.stdout.on("data",d=>{c+=d.toString()}),ee.tunnel.stderr.on("data",d=>{u+=d.toString()});try{let d=await(0,jf.default)(()=>br(`http://127.0.0.1:${t}/api/v1.0/info`,{},{},void 0,{skipProxy:!0}),{retries:30,minTimeout:2e3});Uf.info("LT tunnel info",d)}catch(d){throw Uf.error("Failed to start LT tunnel",{err:d,stdoutResult:c,stderrResult:u}),d}}static async disconnectTunnel(e){if(!(e.externalLambdatestTunnelId||!ee.tunnel))return new Promise((t,r)=>{ee.tunnel.on("close",n=>{n&&r(new Error(`tunnel process exited with code ${n}`)),t()}),ee.tunnel.kill()})}getCapabilities(e,t,r,n,o){if(!this.isActive)return{};let i=ee.lambdatestConfig.CAPABILITIES[t]||{},a={...ee.tunnelName&&{tunnel:!0,tunnelName:ee.tunnelName}},c=[],{mode:u,canary:d,ext:p,extensionPath:m,installCustomExtension:f}=e;if(u===Y.EXTENSION&&!p){let h=Yc({canary:d},!0);!m&&h[t]&&(c=[...c,h[t]]),m&&je(m)&&(c=[...c,m])}return f&&je(f)&&(c=[...c,f]),{build:r,name:`${n} - ${o}`,platform:ee.lambdatestConfig.PLATFORM,selenium_version:ee.lambdatestConfig.SELENIUM_VERSION,resolution:ee.lambdatestConfig.RESOLUTION,timezone:ee.lambdatestConfig.TIMEZONE,...i,loadExtension:c,...a,console:!0,queueTimeout:300,network:W.flags.LTNetworkCapabilities.isEnabled()}}}});var wl={};$(wl,{connect:()=>zo,disconnect:()=>Ko,serveTunneling:()=>iS});var Ho,Wf,qf,oS,zo,Ko,iS,bl=S(()=>{"use strict";kf();pn();Nf();vt();Ho=v(require("ora"));j();oe();Vo();Wf=A("tunnel"),qf=s=>{var e;return[le.LAMBDATEST,le.HYBRID].includes((e=s.gridData)==null?void 0:e.type)&&s.gridData.tunnel==="lambdatest"},oS=s=>{var e;return s.tunnelRoutes||((e=s.gridData)==null?void 0:e.type)===le.HYBRID&&s.gridData.tunnel==="cloudflare"},zo=async s=>{if(!s.tunnel)return;let e=Dt(),t;try{qf(s)?(t=(0,Ho.default)("Starting testim lambdatest tunnel...").start(),await ee.connectTunnel(s)):oS(s)?(t=(0,Ho.default)("Starting testim cloudflare tunnel...").start(),await Of(s)):(t=(0,Ho.default)("Starting testim ngrok tunnel...").start(),await Pf(s,e)),t.succeed()}catch(r){let n="Failed to start tunnel. Please contact support@testim.io";throw Wf.error("Failed to open tunnel",{err:r}),t==null||t.fail(n),new Error(n)}},Ko=async s=>{if(s.tunnel)try{qf(s)?await ee.disconnectTunnel(s):"tunnelRoutes"in s?await Lf(s):await Af(s)}catch(e){let t="catch error - failed to close tunnel";throw Wf.error(t,{err:e}),new Error(t)}},iS=async(s,e=new Promise(()=>{}))=>(await zo(s),ls(()=>Ko(s)),await e)});function aS(s){if(s.protocol)return s.protocol;if([le.TESTIM,le.BROWSERSTACK,le.SAUCELABS].includes(s.type)&&s.port===443)return"https";if([le.TESTIM_ENTERPRISE,le.LAMBDATEST,le.DEVICE_FARM].includes(s.type)){let e=Gf.exec(s.host);return(e==null?void 0:e[2])||"https"}return""}function cS(s){let e=Gf.exec(s);return e==null?void 0:e[3]}function Xo(s){var y,b,C,w,T,I,k,M,E;let e=s&&cS(s.host),t=s==null?void 0:s.port,r=s==null?void 0:s.path,n=s&&aS(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=(b=s==null?void 0:s.external)==null?void 0:b.user,u=(C=s==null?void 0:s.external)==null?void 0:C.key,d=s==null?void 0:s.type,p=d===le.HYBRID?a&&((I=(T=(w=s.hybrid)==null?void 0:w.external)==null?void 0:T[s.hybrid.tunnel])==null?void 0:I.user):c,m=d===le.HYBRID?a&&((E=(M=(k=s.hybrid)==null?void 0:k.external)==null?void 0:M[s.hybrid.tunnel])==null?void 0:E.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:p,tunnelKey:m}}async function Hf(s,e,t,r,n){let o;try{o=await n()}catch(i){throw He.error("failed to get grid",{projectId:s,companyId:e,err:i}),new Error(es.UNKNOWN)}if(He.info("get grid info",Object.assign({},o,{projectId:s,companyId:e})),!o||!["success","error"].includes(o.status))throw He.error("invalid response - get grid",{res:o}),new Error(es.UNKNOWN);if(o.status==="success"){let i=Xo(o.grid);return lS(t,e,i.gridId,i.slotId,r),i}throw o.code==="not-found"?new at(es.NOT_FOUND):o.code==="no-available-slot"?new fr(`Failed to run test on ${r} - concurrency limit reached`):(He.error("invalid code error response - get grid",{res:o}),new at(es.UNKNOWN))}function uS(s,e,t,r,n,o){return Hf(t,e,s,n,()=>Ro(e,t,r,n,o))}function dS(s,e,t,r,n,o,i){return Hf(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?Ro(e,t,c._id,n,o):Pc(e,t,r,n,o)})}function zf(s){return kc(s)}async function Kf(s,e,t){let n=(t||await zf(s)).find(o=>o._id===e);if(!n)throw new R(`Failed to find grid id: ${e}`);return Xo(n)}async function pS(s,e,t){let n=(t||await zf(s)).find(o=>(o.name||"").toLowerCase()===e.toLowerCase());if(!n)throw new R(`Failed to find grid name: ${e}`);return Xo(n)}async function Tl(s,e){let t=gn[s];if(!t)return;let{slotId:r,gridId:n,browser:o,companyId:i}=t;if(delete gn[s],!r){He.warn("failed to find grid slot id",{projectId:e});return}He.info("release slot id",{projectId:e,companyId:i,slotId:r,gridId:n,browser:o});try{await xc(i,e,r,n,o)}catch(a){He.error("failed to release slot",{projectId:e,err:a})}}async function mS(s){let e=Object.values(gn).filter(Boolean);if(e.length!==0){He.info("keep alive worker slots",{projectId:s,slots:e});try{await Rc(s,e)}catch(t){He.error("failed to update grid keep alive",{err:t,slots:e,projectId:s})}}}function fS(s){Vf=global.setInterval(mS,1e4,s)}async function hS(s){let e=Object.keys(gn);if(e.length){He.warn("not all slots released before end runner flow",{projectId:s});try{await ue(e,t=>Tl(Number(t),s))}catch(t){He.error("failed to release all slots",{err:t,projectId:s})}}}async function gS(s){await hS(s),clearInterval(Vf)}function yS(s,e){let{testobjectSauce:t,saucelabs:r}=e;if(s==="testobject")return t.testobjectApiKey;if(s==="saucelabs")return r.accessKey}function wS(s,e){let{saucelabs:t}=e;if(s==="saucelabs")return t.username}function Jf(s){let t=(()=>Jo.isEmpty(s.testobjectSauce)?Jo.isEmpty(s.saucelabs)?Jo.isEmpty(s.perfecto)?"hostAndPort":"perfecto":"saucelabs":"testobject")(),{host:r,port:n,path:o,protocol:i}=s,a=yS(t,s),c=wS(t,s);return{host:r,port:n,path:o,protocol:i,type:t,user:c,key:a}}async function Xf(s,e){let t=s.company.companyId;return await Kf(t,e.gridId,s.allGrids)}async function Yf(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 Jf(s);let c=t==null?void 0:t.companyId;if(i)return Kf(c,i,e);if(a)return pS(c,a,e);if(Ks(s)||s.tunnelOnlyMode){He.info("skipping getting grid, as it is set on test plan",{companyId:c});return}throw new at("Missing host or grid configuration")}async function Qf(s,e,t,r){return await(async()=>{let{host:i,project:a,grid:c,gridId:u,useLocalChromeDriver:d,useChromeLauncher:p,company:m}=t,f=m==null?void 0:m.companyId;if(d||p)return{mode:"local"};if(i)return Jf(t);if(u)return uS(r,f,a,u,s,e);if(c)return dS(r,f,a,c,s,e,t);throw new at("Missing host or grid configuration")})()}var Jo,He,gn,Gf,Vf,lS,yn,Zf,gs=S(()=>{"use strict";Jo=v(require("lodash"));Te();j();F();oe();z();He=A("grid-service"),gn={},Gf=/(^(https?):\/{2})?(.*)/,Vf=null;lS=(s,e,t,r,n)=>{gn[s]={gridId:t,companyId:e,slotId:r,browser:n}};yn={start:fS,end:gS};Zf=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:p}=n;if(!i||!a||(a===le.LAMBDATEST&&await((h=r.enableIfNeeded)==null?void 0:h.call(r,e)),a!==le.HYBRID||!o||!c||!d||!p))return e;let m=await Cc({companyId:o,gridId:i,maxRetries:d,currentRetry:p,browser:c,usingTunnel:u});He.info("handling hybrid grid",{response:m,companyId:o});let f=Xo({...e,...m.connectionDetails,provider:m.provider});return m.provider!=="lambdatest"&&((g=r.disable)==null||g.call(r)),m.provider==="lambdatest"&&await((y=r.enableIfNeeded)==null?void 0:y.call(r,f)),f}});function bn(){return Yo||"master"}function eh(s="master",e="false"){if(typeof s!="string"&&(s!=null&&s.branch)&&s.branch==="master"){Yo="master";return}if(s&&!s.isArchived){Yo=s.branch||s;return}Yo=e?"master":void 0}var Yo,vl=S(()=>{"use strict"});var Tn,El,bS,Sl,TS,Il,Qo,Zo,ei,ti,ri,si=S(()=>{"use strict";F();oe();Tn=s=>{let{status:e,sessionType:t,success:r}=s;return e===de.FAILED||t===Ot.CODEFUL&&r===!1},El=s=>{let{status:e}=s;return e===de.ABORTED},bS=s=>{let{status:e,sessionType:t,success:r}=s;return e===de.PASSED||t===Ot.CODEFUL&&r===!0},Sl=s=>s.runnerStatus===de.SKIPPED,TS=s=>s.testStatus===Ge.EVALUATING,Il=(s,e)=>e?!s.runConfig:!1,Qo=(s,e)=>Object.values(s).filter(t=>Sl(t)&&Ve(t,e)).length,Zo=s=>Object.values(s).filter(e=>Tn(e)&&TS(e)).length,ei=(s,e)=>Object.values(s).filter(t=>Tn(t)&&!Il(t,e)),ti=(s,e)=>Object.values(s).filter(t=>bS(t)&&!Il(t,e)),ri=(s,e)=>Object.values(s).filter(t=>El(t)&&!Il(t,e))});var sh={};$(sh,{DebugReporter:()=>Rl});function vS(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 ni,rh,Rl,nh=S(()=>{"use strict";j();si();ni=A("debug-reporter"),rh={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},Rl=class{constructor(e){this.options=e}onTestStarted(e,t){ni.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;ni.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=vS(process.argv);ni.info("Test Plan Started",{executionId:o,testPlanName:n,isAnonymous:i,configName:a,options:Object.assign({},this.options,rh),args:c})}onTestPlanFinished(e,t,r,n,o,i){let a=ti(e,i).length,c=Object.keys(e).length-a;ni.info("Test Plan Finished",{isAnonymous:o,passed:a,failed:c,testPlanName:t,options:Object.assign({},this.options,rh),duration:r,executionId:n})}}});var xl,St,vn=S(()=>{"use strict";oe();xl=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===le.DEVICE_FARM}},St=new xl});var Pl={};$(Pl,{ConsoleReporter:()=>Cl});var Zt,En,Pr,oi,oh,Cl,Al=S(()=>{"use strict";Zt=v(require("chalk")),En=v(require("lodash"));F();oe();vn();si();Pr={success:Zt.default.green,warn:Zt.default.yellow,error:Zt.default.red},{CLI_MODE:oi}=Lt,oh="device",Cl=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: ${Zt.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?de.PASSED:de.FAILED,i=e.isTestsContainer?" ":`(${e.testId})`,a=Pr[e.success?"success":"error"];console.log(a(this.toWorkerIdPrefix(t),`Test "${e.name}" finished status: ${o} ${i} duration: ${ro(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(Pr.error("Failed runs are:")),console.log(Pr.error(t.join(`
27
- \r`)))}onTestPlanFinished(e,t,r,n,o,i){let a=ei(e,i),c=ti(e,i),u=ri(e,i),d=c.length,p=u.length,m=a.length,f="",h="";if(St.isTestStatusEnabled){let w=Zo(e);f=` FAILED-EVALUATING: ${w}`,m-=w,h=` SKIPPED: ${Qo(e,this.options)}`}let g=this.buildTestPlanName(o,t,i),y,b=Pr[m?"error":"success"],C=`PASSED: ${d} FAILED: ${m}${f} ABORTED: ${p}${h} Duration: ${ro(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(b(y)),this.printWorkerDivider(),this.printAllFailedTests(a)}buildTestPlanName(e,t,r){if(r)return"";let n=En.isEmpty(this.options.suites)?"":`Suite: ${this.options.suites}`,o=En.isEmpty(this.options.label)?"":`Label: ${this.options.label}`,i=En.isEmpty(this.options.name)?"":`Name: ${this.options.name}`,a=En.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=m=>{m.forEach((f,h)=>{var b;let g=(b=f.testData)!=null&&b.index?`- ${f.testData.index} / ${f.testData.total} Data set`:"",y=c?"":`(${f.testId})`;console.log(" ",h+1,":",`${f.name}${Ve(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 m=this.options.sfdcCredential?` SfdcCredential: ${this.options.sfdcCredential}`:"",f=`${d}, Project: ${this.options.project}, Branch: ${this.branchToUse}${m}`;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===oi.APPIUM?oh:t;r&&console.log(this.toWorkerIdPrefix(e),`Get ${Zt.default.underline(n)} slot from ${Zt.default.underline(r)}`)}onGetSession(e,t,r){let n=r===oi.APPIUM?oh:"browser";console.log(this.toWorkerIdPrefix(e),`Get ${n} to run ${Zt.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===oi.APPIUM?"device":"browser";if(n)console.log(Pr.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(Pr.warn(this.toWorkerIdPrefix(e),"We are having issues starting ChromeDriver for you locally"));else if(this.options.host){let i=this.options.mode===oi.APPIUM?"Appium":"Selenium";console.log(Pr.warn(this.toWorkerIdPrefix(e),`We are having issues reaching your ${i} grid at ${this.options.host}:${this.options.port||4444}`))}}}});var Ol={};$(Ol,{JunitReporter:()=>kl});function ES(s){let e=s.testData||{},t=typeof e.total=="number"?` - ${e.index} / ${e.total} Data set`:"";return`${s.name}${t}`}function SS(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 IS(s){return`${s.visitedUrlsJson||""}`}async function RS(s,e,t,r,n,o){function i(m){let f=st(s,t,m.testId,m.resultId,r),h={$:{name:ES(m),classname:n,time:Ha(m.duration),ownedBy:m.testOwnerName,ownerEmail:m.testOwnerEmail},"system-out":f};if(Tn(m)||El(m)){let g=`Step Failed: ${m.failureReason||m.reason}`,y=Tn(m)?`${g} More info at: ${f}`:g;h.failure={$:{message:y}}}return Sl(m)&&Ve(m,o)&&St.isTestStatusEnabled&&(h.skipped={}),o.urls&&(h["visited-urls-list"]=SS(m),h["visited-urls-json"]=IS(m)),h}function a(m){let{results:f,testPlanName:h,configName:g}=m,y=f||{},C={name:(g&&h?`${h} with config '${g}'`:h)||"selenium run",tests:u(y),failure:d(y),timestamp:c(e)};if(St.isTestStatusEnabled){C.skipped=Qo(y,o);let w=Zo(y);C.failure-=w,C["failure-evaluating"]=w}return{$:C,testcase:Object.keys(y).map(w=>i(y[w]))}}function c(m){let f=Object.keys(m).map(g=>m[g].startTime),h=Math.min.apply(null,f);return h?new Date(h).toISOString():new Date().toISOString()}function u(m){return Object.keys(m).length}function d(m){return ei(m).length+ri(m).length}let p={testsuites:{testsuite:e.map(m=>a(m))}};try{return new _l.Builder().buildObject(p)}catch(m){return xS(m)}}function xS(s){let e=new _l.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 _l,ih,kl,Ll=S(()=>{"use strict";_l=v(require("xml2js"));F();ih=require("fs");vn();si();kl=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 RS(this.options.editorUrl,e,r,this.branchToUse,this.classname,this.options);if(t)try{return await ih.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)}}});var ah={};$(ah,{TeamCityReporter:()=>Dl});function ys(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 Nl,Dl,ch=S(()=>{"use strict";j();Nl=A("team-city-reporter");Dl=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 ys(n)}onTestStarted(e,t,r,n,o){if(r){Nl.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){Nl.debug("skip report test failed because is rerun");return}let a=this.getPrintName(e);console.log(`##teamcity[testFailed name='${a}' message='${ys(t)}' details='${ys(r)}' flowId='${i}']`)}onTestFinished(e,t,r){if(r){Nl.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='${ys(r)}']`)}onTestPlanStarted(e,t,r,n){console.log(`##teamcity[testSuiteStarted name='${ys(n)}']`)}onTestPlanFinished(e,t){console.log(`##teamcity[testSuiteFinished name='${ys(t)}']`)}}});var lh={};$(lh,{JsonReporter:()=>Ml});var Ml,uh=S(()=>{"use strict";Ml=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}}))}}});var dh={};$(dh,{ChromeReporter:()=>Ul});var Ul,ph=S(()=>{"use strict";F();Qc();Ul=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 Lo(o)}}});var CS,Fl,Q,jt=S(()=>{"use strict";j();CS=A("reporter"),Fl=class{reporters=[];onGetBrowserFailure=this.generateHook("onGetBrowserFailure");onGetBrowserSuccess=this.generateHook("onGetBrowserSuccess");onTestPlanStarted=this.generateHook("onTestPlanStarted");onGetSlot=this.generateHook("onGetSlot");onGetSession=this.generateHook("onGetSession");onTestFinished=this.generateHook("onTestFinished");onTestFailed=this.generateHook("onTestFailed");onTestPassed=this.generateHook("onTestPassed");onTestStarted=this.generateHook("onTestStarted");onTestIgnored=this.generateHook("onTestIgnored");onWaitToTestStart=this.generateHook("onWaitToTestStart");onWaitToTestComplete=this.generateHook("onWaitToTestComplete");onTestPlanFinished=this.generateHook("onTestPlanFinished",this.onTestPlanFinishedMutator);onAllTestPlansFinished=this.generateHook("onAllTestPlansFinished",this.onAllTestPlansFinishedMutator);setOptions(e,t){this.reporters=[];let r=e.reporters,{DebugReporter:n}=(nh(),D(sh));if(this.reporters.push(new n(e)),r===void 0||r.length===0){let{ConsoleReporter:o}=(Al(),D(Pl));if(this.reporters.push(new o(e,t)),(e==null?void 0:e.reportFile)!==void 0){let{JunitReporter:i}=(Ll(),D(Ol));this.reporters.push(new i(e,t))}}else{if(r.includes("teamcity")){let{TeamCityReporter:o}=(ch(),D(ah));this.reporters.push(new o(e))}if(r.includes("console")){let{ConsoleReporter:o}=(Al(),D(Pl));this.reporters.push(new o(e,t))}if(r.includes("junit")){let{JunitReporter:o}=(Ll(),D(Ol));this.reporters.push(new o(e,t))}if(r.includes("json")){let{JsonReporter:o}=(uh(),D(lh));this.reporters.push(new o(e))}if(r.includes("chrome")){let{ChromeReporter:o}=(ph(),D(dh));this.reporters.push(new o(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 p of Object.values(a))c[p.id]=p;for(let p of Object.keys(e))d.some(m=>m.parentResultId!==p)||(c[p]=e[p])}else CS.warn("childTestResults is not array"),c=e}else c=e;let u=Date.now()-(r||0);return[c,t,u,n,o,i]}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 function(...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))}}},Q=new Fl});function fh(s,e){return e!=null&&e.type&&(s[`${e.type}Mode`]=!0),s}function hh({executionId:s,projectId:e,testId:t,resultId:r,companyId:n,companyName:o,projectName:i,companyPlan:a,sessionType:c,source:u,user:d,lightweightMode:p,isStartUp:m,projectType:f,appSource:h}){let g=fh({executionId:s,projectId:e,testId:t,resultId:r,companyId:n,companyName:o,projectName:i,companyPlan:a,sessionType:c,source:mh(u,d),isStartUp:m,projectType:f,...["android","ios"].includes(f)&&h&&{appSource:h}},p);dt("test-run-ci",g)}function gh({executionId:s,projectId:e,testId:t,resultId:r,result:n,companyId:o,companyName:i,projectName:a,companyPlan:c,sessionType:u,source:d,user:p,lightweightMode:m,logger:f,isStartUp:h,projectType:g,appSource:y}){try{let b=fh({executionId:s,projectId:e,testId:t,resultId:r,companyId:o,companyName:i,projectName:a,companyPlan:c,sessionType:u,mockNetworkEnabled:n.wasMockNetworkActivated,source:mh(d,p),isStartUp:h,projectType:g,...["android","ios"].includes(g)&&y&&{appSource:y}},m);if(n.success){dt("test-run-ci-success",b);return}dt("test-run-ci-fail",Object.assign({},b,{failureReason:n.failureReason}))}catch(b){f.error("failed to update test end analytics",{err:b})}}function yh({executionId:s,projectId:e,sessionType:t}){dt("batch-run-ci",{executionId:s,projectId:e,sessionType:t})}var mh,jl=S(()=>{"use strict";ds();Eo();mh=(s,e)=>s!=="cli"&&s!=="cli-local"?s:as&&e?"ci-with-user":as?"ci":e?"cli-with-user":s});var PS,bh=S(()=>{"use strict";PS=require("istanbul-lib-report")});var Th,vh,AS,Eh,Ar,kS,Sh,Bl,_S,Ih,Rh=S(()=>{"use strict";Th=v(require("ora")),vh=v(require("moment")),AS=v(require("test-exclude")),Eh=v(require("fs")),Ar=v(require("path")),kS=v(require("istanbul-reports")),Sh=v(require("istanbul-lib-report"));Te();z();F();j();mt();bh();Bl=A("test-run-status"),_S=async(s,e,t)=>{let{mergeProcessCovs:n}=await ge("@bcoe/v8-coverage"),o={result:[]},i=new Map,c=(await ln(s,"testResult",`runId=${t}`)).data.docs;return await ue(c.flatMap(u=>u.JSCoverageURLS||[]),async u=>{let d=await cn(u,9e4);await ue(d,async p=>{if(!i.has(p.url)){let m=p.text;p.sourceUrl&&(i.set(p.url,"TEMP"),m=await(void 0)(p.sourceUrl)),i.set(p.url,{text:m,url:p.url,sourceMapType:p.sourceMapType,hash:p.hash})}delete p.text,o=n([o,{result:[p]}])})},{concurrency:20}),{covUrlMap:i,mergedCoverages:o}},Ih=async(s,e,t,r)=>{if(!s.collectCodeCoverage)return;Bl.info("start js coverage process");let n=(0,Th.default)(`analyzing coverage for ${t} ${t===1?"test":"tests"}`).start(),o=Ar.resolve(s.codeCoverageReportPath||"./coverage"),i=Ar.resolve(o,`.js/${(0,vh.default)().format("DDMMYYYYHHmmss")}`),a=s.codeCoverageSourceMapPath?Ar.resolve(s.codeCoverageSourceMapPath):void 0;try{let[c,{mergedCoverages:u,covUrlMap:d}]=await Promise.all([ge("istanbul-lib-coverage"),_S(s.project,e,r)]);if(u.result.length===0){n.fail("Failed to report coverage information - js code coverage is empty");return}Bl.info("start js coverage merge and remap",{numOfFiles:d.size,numMergedCoverages:u.result.length});let p=c.createCoverageMap({}),m={};await ue(u.result,async({url:h,functions:g})=>{let{text:y,sourceMapType:b}=d.get(h),C=await(void 0).getSourceMap({sourceMapType:b,url:h,source:y,sourceMapDir:a});m[h]=C;let w=await(void 0).convertV8ToIstanbul(s,{source:y,sourceMap:C,functions:g});p.merge(w)}),await(void 0).remapCoverage(s,i,m);let f=await(void 0).saveCoverageReports(s,p,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),Bl.error(u,{err:c})}}});var ii={};$(ii,{SELENIUM_PERF_MARKS:()=>xh,SeleniumPerfStats:()=>kr});var xh,kr,ws=S(()=>{"use strict";F();xh={GET_BROWSER:"GET_BROWSER",GET_HTML:"GET_HTML",GET_ELEMENT:"GET_ELEMENT",GET_SCREENSHOT:"GET_SCREENSHOT"},kr=class{constructor(){this.marks=Object.fromEntries(Object.values(Object.assign({ALL:"ALL"},xh)).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`,so(r,50)],[`${t}_P95`,so(r,95)]]);return{seleniumPerfMarks:this.marks,seleniumStats:Object.fromEntries(e)}}}});var kh={};$(kh,{initServer:()=>NS,mapFilesToLocalDrive:()=>Wl});function Wl(s,e){var t;try{s.failurePath=(s.failurePath||[]).map(r=>Object.assign(r,ai[r.id]?{screenshot:ai[r.id]}:{})),Object.keys(bs).forEach(r=>{s.assets||(s.assets={}),s.assets[Ah[r]]=bs[r]}),s.assets||(s.assets={}),s.assets.screenshots=Object.values(ai)}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 NS({agentPort:s,agentBind:e,saveRCALocally:t}){let r=await ge("multer"),n=typeof t=="string"?t:OS;await $l.promises.mkdir(n,{recursive:!0});let o=r({storage:r.diskStorage({async destination(c,u,d){let p=JSON.parse(c.body.metadata||"{}");if(!p.testResultId)return d(new Error("missing testResultId"),"");let m=Sn.join(n,p.testResultId);try{await $l.promises.mkdir(m,{recursive:!0})}catch(f){return d(f,"")}return d(null,m)},filename(c,u,d){let{fileName:p}=c.body,m=JSON.parse(c.body.metadata||"{}");if(!m.stepId&&!p)return d(new Error("missing stepId or fileName"),"");if(m.stepId){let f=Sn.extname(p);return d(null,`step_${m.stepId}_${m.stepName||""}${f}`.replace(/[/\\?%*:|"<>\s]/g,"-"))}return d(null,p)}})}),i=(0,Ph.default)();i.post("/",o.single("file"),(c,u)=>{var p;let d=JSON.parse(c.body.metadata||"{}");d.stepId&&(ai[d.stepId]=c.file.path),d.testResultId&&LS.includes(d.subType)&&(bs[p=d.subType]||(bs[p]=[]),bs[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",p),d.on("listening",()=>c(d.address()));function p(m){if(m.syscall!=="listen")return u(m);switch(m.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(m)}}})}var $l,Ch,Sn,Ph,OS,ai,bs,Ah,LS,ql=S(()=>{"use strict";$l=v(require("fs")),Ch=v(require("os")),Sn=v(require("path")),Ph=v(require("express"));z();mt();OS=Sn.join(Ch.tmpdir(),"testim/rca/"),ai={},bs={},Ah={"test-log":"consoleLogs","har-file":"networkLogs"},LS=Object.keys(Ah)});var er,Gl,ci,_h=S(()=>{"use strict";er=v(require("lodash"));F();j();Gl=A("override-test-data-builder"),ci=class{constructor(e,t,r){this.params=e;this.testInfoList=t;this.projectId=r}isObjectNotArray(e){return er.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)&&!er.isEmpty(e.overrideTestData)?(Object.keys(e.overrideTestData).forEach(r=>this.overrideSingleTest(r,e.overrideTestData[r])),delete e.overrideTestData):Gl.error("invalid overrideTestData",{overrideTestData:e.overrideTestData,projectId:t})),this.isObjectNotArray(e)&&typeof e.overrideAllTestsData<"u"&&(er.isObject(e.overrideAllTestsData)&&!er.isEmpty(e.overrideAllTestsData)?(this.testInfoList.map(n=>n.name).forEach(n=>this.overrideSingleTest(n,e.overrideAllTestsData)),delete e.overrideAllTestsData):Gl.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}Gl.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 er.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 li(s,...e){if(!(!s||typeof s!="function"))try{return await s(...e)||{}}catch(t){throw et.warn("failed to run hook",{err:t}),new R(`failed to run hook promise ${t.message}`)}}var _r,et,DS,MS,US,FS,ui,Oh=S(()=>{"use strict";_r=v(require("lodash"));F();oe();gs();Te();z();j();jt();pn();Rh();ws();ql();ce();we();_h();vn();et=A("test-run-status"),DS=Er(),MS=process.env.GIT_COMMIT||process.env.CIRCLE_SHA1||process.env.TRAVIS_COMMIT,US=process.env.GIT_URL||process.env.CIRCLE_REPOSITORY_URL,FS=ot();ui=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 kr;var a,c,u,d,p;(a=this.options).runParams||(a.runParams={}),this.fileUserParamsData=this.options.userParamsData;let o=zs(t,e),i=t.lightweightMode?t.lightweightMode.type:t.mode;this.execConfig={parallel:Bs||t.parallel||1,browser:o,gitBranch:DS,gitCommit:MS,gitRepoUrl:US,runnerVersion:FS,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(m=>m.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:(p=t.gridData)==null?void 0:p.type,retentionDays:t.retentionDays,codeCoverageReportPath:t.codeCoverageReportPath,collectCodeCoverage:t.codeCoverageUrlFilter||t.collectCodeCoverage,sessionType:Tr(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:p,testStatus:m,testCreatorName:f,testCreatorEmail:h,testOwnerName:g,testOwnerEmail:y,testLabels:b,testSuites:C,allLabels:w}=a,T={originalTestResultId:t,previousTestResultId:r,config:_r.cloneDeep(c),testId:d,status:"QUEUED",name:p,resultId:e,isTestsContainer:u,retryCount:i,testStatus:m};return this.testRunStatus[e]=Object.assign({},T,{testCreatorName:f,testCreatorEmail:h,testOwnerName:g,testOwnerEmail:y,testLabels:b,testSuites:C,allLabels:w}),Uc({projectId:n,runId:o,testId:d,newResultId:e,originalTestResultId:t,previousTestResultId:r,testResult:T})}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 Q.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 xo(n,e.testId,e.resultId,e.config.testData,i.defaults)||""}catch(d){et.error("failed to upload test data artifact (runner)",{err:d})}let c=_r.cloneDeep(e.config);return delete c.testData,c.testDataUrl=a,await this.executionStartedPromise,cs(n,t,e.testId,e.resultId,"RUNNING",{startTime:e.startTime,config:c,remoteRunId:o,testRetryKey:r})}async testStartReport(e,t,r){if(Ve(e,this.options))return;let n=this.exportsGlobal;try{let o=await li(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 et.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}),et.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===Ge.EVALUATING&&St.isTestStatusEnabled){Q.onTestIgnored(e,r,`test in ${Ge.EVALUATING} status`);return}if(u){Q.onTestPassed(o);return}Q.onTestFailed(r,r.failureReason,st(this.options.editorUrl,this.options.project,i,c,this.branchToUse),i,n,c)}calcResultText(e){return e.success?de.PASSED:de.FAILED}onTestIgnored(e,t){let r=this.getTestResult(t);Q.onTestIgnored(e,r,`test in ${Ge.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&&Wl(i,et),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;Q.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 li(this.options.afterTest,Object.assign({},e,{exportsGlobal:o,globalParameters:o}),this.options.userData.loginData.token)}catch(a){et.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 cs(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 et.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,p;let i=e.browser?Ys(e.browser,e.saucelabs,e.browserstack):o.runConfig;if(i&&W.flags.dec2022eolBrowsers.isEnabled()&&((c=Xs(i.browserValue))!=null&&c.eol))throw new R(`Unsupported Browser: ${i.browserName}`);let a={testId:o.testId,status:Ve(o,e)?de.SKIPPED:de.QUEUED,name:o.name,resultId:o.resultId,isTestsContainer:o.isTestsContainer,testStatus:o.testStatus||Ge.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:((p=o.testData)==null?void 0:p.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){et.info("execution started",{executionId:e});let{options:i}=this,{remoteRunId:a,projectData:c}=i;ls(()=>Promise.all([yn.end(t),Io("ABORTED",e,t,!1,void 0,a,void 0)])),this.startTime=r||Date.now();let u={projectId:t,executionId:e,...W.flags.testNamesToBeforeSuiteHook.isEnabled()&&{testNames:o}},d=await li(i.beforeSuite,u),p=new ci(d,_r.cloneDeep(this.testInfoList),t);this.testInfoList=p.overrideTestData(),this.testRunStatus=this.calcTestRunStatus(),this.beforeSuiteParams=d;let{testInfoList:m}=this,f=[],h=[],g=[];for(let b of m){if(b.isBeforeTestPlan){f.push(b);continue}if(b.isAfterTestPlan){g.push(b);continue}h.push(b)}let y=async()=>{let b=_r.cloneDeep(this.testRunStatus);await ue(Object.keys(b),async I=>{var x;let k=b[I],M=(x=k.config)==null?void 0:x.testData,E=k.testId,_=await xo(t,E,I,M,c.defaults);_&&(delete k.config.testData,k.config.testDataUrl=_)});let C=Boolean(i.useLocalChromeDriver||i.useChromeLauncher),w={executionId:e,projectId:t,labels:n||[],startTime:r,executions:b,config:this.execConfig,resultLabels:i.resultLabels,remoteRunId:i.remoteRunId,localRunUserId:i.user,isLocalRun:C,intersections:i.intersections},T=bc(w);return this.executionStartedPromise=T,T.catch(I=>et.error(I)),T};try{await y()}catch(b){et.error("Failed to start suite",{err:b}),console.error("Failed to start test run. Please contact support@testim.io")}return{beforeTests:f,tests:h,afterTests:g}}concatSeleniumPerfMarks(e){_r.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=Ja(this.testRunStatus),r=t.length,n=0,o=0,i=0;for(let{status:p,testStatus:m}of t)p===de.PASSED&&n++,p===de.SKIPPED&&o++,p===de.FAILED&&m===Ge.EVALUATING&&i++;let{seleniumPerfMarks:a,...c}=this.seleniumPerfStats.getStats();try{await li(this.options.afterSuite,{exportsGlobal:this.exportsGlobal,tests:t,total:r,passed:n,skipped:o})}catch(p){console.log("check your callback handler on afterSuite Hook for syntax or exception errors"),et.warn("error while running afterSuite Hook",{err:p,projectId:this.options.projectData.projectId,executionId:this.options.executionId})}let u=await Ih(this.options,this.branchToUse,r,e);if(Object.assign(c,{coverageSummary:u}),!((d=this.options.lightweightMode)!=null&&d.onlyTestIdsNoSuite))try{return await Io("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(p){throw et.error("Failed to update suite finished",{err:p}),p}}async markAllQueuedTests(e,t,r,n){let o=Object.keys(this.testRunStatus).filter(i=>this.getTestResult(i).status==="QUEUED");await wc(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 pi={};$(pi,{buildAppiumOptions:()=>Xl,buildSeleniumOptions:()=>Jl});function BS(s,e){let t={browserName:"safari",...e==="safari technology preview"&&{"safari.options":{technologyPreview:!0}}};return Object.assign(s.desiredCapabilities,t),s}function Kl(s){return Dh.readFileSync(s,{encoding:"base64"})}function Fh(s,e,t){if(!(t!=null&&t.isLambdatestRun()&&je(s))&&s){let r=Kl(s);In.info(`adding extension: custom, path: ${s} length: ${r.length} hash: ${zl(r)} current extension count: ${e.length}`),e.push(r)}}function jh(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}`;In.info(`adding extension: testim unpacked , path: ${u}`),t.push(d);return}let o=s.canary?"-master.zip":".zip",i=Hl.join(process.cwd(),`testim-headless${o}`),a=Kl(i);In.info(`adding extension: testim zipped, path: ${i} length: ${a.length} hash: ${zl(a)} current extension count: ${e.length}`),e.push(a)}function $S(s,e,t,r,n,o,i){var g,y;let a=t.seleniumName||t.browserValue,c=[],u=[...Uh];e.headless&&u.push("--headless");let d=()=>e.mode!==Y.EXTENSION,p={prefs:{"profile.default_content_setting_values.popups":Vl.CONTENT_SETTING_ALLOW,"profile.default_content_setting_values.automatic_downloads":Vl.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()};di(n)&&(p.prefs["download.default_directory"]="C:\\Users\\testnode",p.w3c=!0,s.desiredCapabilities.version="latest-1",s.desiredCapabilities["aws:maxDurationSecs"]=2400,s.desiredCapabilities["aws:idleTimeoutSecs"]=60),di(n)&&a==="MicrosoftEdge"&&(s.desiredCapabilities["ms:edgeChromium"]=!0),e.chromeExtraPrefs&&Object.assign(p.prefs,e.chromeExtraPrefs),e.chromeExtraArgs&&e.chromeExtraArgs.forEach(b=>u.push(`--${b}`)),e.chromeBlockLocation&&(p.prefs["profile.default_content_setting_values.geolocation"]=Vl.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 m(){t.mobileEmulation&&(p.mobileEmulation={deviceMetrics:{width:t.mobileEmulation.device.width,height:t.mobileEmulation.device.height+Wa.MOBILE_WEB_REMOTE_RUN_HEADER_SPACING,pixelRatio:t.mobileEmulation.device.deviceScaleFactor},userAgent:t.mobileEmulation.userAgent})}m(),Fh(r,c,i),e.mode===Y.EXTENSION&&jh(e,c,u,o,i),c.length>0&&(p.extensions=c),e.disableCookiesSameSiteNoneRequiresSecure&&(p.localState={"browser.enabled_labs_experiments":["cookies-without-same-site-must-be-secure@2"]}),p.args=u;let f={MicrosoftEdge:"edgeOptions",chrome:"chromeOptions"}[a],h={MicrosoftEdge:"ms",chrome:"goog"}[a];return ee.isLambdatestGrid(n)&&delete p.w3c,e.oldCapabilities&&n.type!=="testimEnterprise"&&!(i!=null&&i.isLambdatestRun())&&(s.desiredCapabilities[f]=p),(e.w3cCapabilities||n.type==="testimEnterprise")&&(s.desiredCapabilities[`${h}:${f}`]=p),s}function qS(s,e,t){let r={"pdfjs.disabled":!0};if(W.flags.autoSaveDownloadFileFireFox.isEnabled()&&Object.assign(r,{"browser.helperApps.neverAsk.saveToDisk":Nh.join(","),"browser.helperApps.neverAsk.openFile":Nh.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===Y.EXTENSION)if(e.ext)s.desiredCapabilities.testim_firefox_profile=e.ext;else{let n=e.canary?"-master.zip":".zip",o=Hl.join(process.cwd(),`testim-firefox-profile${n}`);s.desiredCapabilities.firefox_profile=Kl(o)}return e.headless&&(s.desiredCapabilities["moz:firefoxOptions"].args||(s.desiredCapabilities["moz:firefoxOptions"].args=[]),s.desiredCapabilities["moz:firefoxOptions"].args.push("-headless")),s}function GS(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 VS(s,e,t){return ft.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 HS(s){return s.perfecto?s.perfecto:{}}function zS(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 KS(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=ca(o,i)),a}function Jl(s,e,t,r,n,o,i,a=null){var g,y,b,C,w,T;if(r.mode==="local"){let I=[],k=[...Uh],M={};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(E=>k.push(`--${E}`)),s.chromeBinaryLocation&&(M.binary=s.chromeBinaryLocation),s.mode!=="selenium"&&jh(s,I,k,null,a),Fh(n,I,a),{logLevel:Lh,desiredCapabilities:{chromeOptions:{args:k,extensions:I,...M},browserName:"chrome"},host:"localhost",port:9515}}let{driverRequestTimeout:c,driverRequestRetries:u}=s,d=KS(s,r),p={host:r.host,port:r.port||4444,path:r.path||"/wd/hub",protocol:r.protocol||"http",logLevel:Lh,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},...!ft.isEmpty(d)&&{headers:d},...s.proxyForGrid&&{agent:global.ProxyAgent(global.proxyUri)}};di(r)&&(s.oldCapabilities=!1,s.w3cCapabilities=!0,p.desiredCapabilities={unexpectedAlertBehaviour:"accept"}),s.disableNativeEvents&&(p.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={}),(b=s.browserstack)["browserstack.user"]||(b["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 m=Number(s.browserTimeout/1e3),f=s.browser||(t==null?void 0:t.browserValue);ft.merge(p.desiredCapabilities,GS(s,e,t),VS(s,e,t),HS(s),zS(s,f,m),a==null?void 0:a.getCapabilities(s,f,o,i,e));let h=null;switch(!s.ext&&!s.extensionPath&&((w=r.host)!=null&&w.endsWith(".testim.io"))&&!s.canary&&s.mode===Y.EXTENSION&&(f==="chrome"?h="/opt/testim-headless":f==="edge-chromium"&&(h="C:/selenium/testim-headless")),(T=r.host)!=null&&T.endsWith(".testim.io")&&f==="edge-chromium"&&(p.desiredCapabilities.version="83"),f){case"chrome":case"edge-chromium":p=WS(p,s,t,n,r,h,a);break;case"firefox":p=qS(p,s,a);break;case"safari":case"safari technology preview":p=BS(p,f);break;default:break}ft.merge(p.desiredCapabilities,s.seleniumCapsFileContent);try{let I={"hub.lambdatest.com":"lambdatest",[W.flags.publicGridURL.getValue()]:"testim","testgrid-devicefarm.us-west-2.amazonaws.com":"devicefarm"},k=x=>x[r.provider]||x[p.host]||x[I[p.host]],M=x=>{var L,B;return k(x)||x[(L=p.desiredCapabilities)==null?void 0:L.browserName]||x[(B=p.desiredCapabilities)==null?void 0:B.version]||x||{}},E=JSON.parse(W.flags.addCustomCapabilities.getValue()||"{}"),_=M(M(E));Object.keys(_).length&&(In.info(`Adding custom capabilities: ${JSON.stringify(_)}`),Object.assign(p.desiredCapabilities,_))}catch(I){In.error("Failed to load custom capabilities",{error:I,customCapabilities:W.flags.addCustomCapabilities.getValue()})}return di(r)&&p.desiredCapabilities&&!p.capabilities&&(jS(p.desiredCapabilities),p.capabilities={alwaysMatch:p.desiredCapabilities,firstMatch:[{}]},delete p.desiredCapabilities),p}function Xl({projectType:s,gridInfo:e,nativeApp:t,options:r,appPath:n,androidActivityWait:o}){let{deviceModel:i,osVersion:a,deviceUdid:c,fullReset:u,resetAppData:d,resetOnSessionStartOnly:p}=r,m={};if(!t&&!n)throw Error("missing mobile app!");if(e.type!==le.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":p},...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&&(m.model=i),a&&(m.os_version=a),c&&(m.device_id=c,delete m.model,delete m.os_version),ft.isEmpty(m)||(h["headspin:selector"]=m),{...f,desiredCapabilities:h,capabilities:h}}var Dh,Hl,Mh,ft,In,Lh,Vl,Uh,zl,di,jS,WS,Nh,mi=S(()=>{"use strict";Dh=v(require("fs")),Hl=v(require("path")),Mh=v(require("crypto")),ft=v(require("lodash"));F();ce();j();we();oe();Vo();In=A("testim-desired-capabilities-builder"),Lh=js?"verbose":"silent",Vl={CONTENT_SETTING_DEFAULT:0,CONTENT_SETTING_ALLOW:1,CONTENT_SETTING_BLOCK:2,CONTENT_SETTING_ASK:3},Uh=["--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"],zl=(...s)=>Mh.createHash("sha256").update(s.join("")).digest("hex"),di=s=>s.type===le.DEVICE_FARM||s.type===le.HYBRID&&s.provider==="devicefarm",jS=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)};WS=ft.memoize($S,(s,e,t,r,n,o)=>{let i=JSON.stringify(s.desiredCapabilities),a=JSON.stringify(ft.omit(e,"runParams")),c=JSON.stringify(t),u=JSON.stringify(n.type);return zl(i,a,c,r,u,o)}),Nh=["application/force-download","application/pdf","application/x-pdf","application/acrobat","applications/vnd.pdf","text/pdf","text/x-pdf","application/vnd.cups-pdf"]});var $h=G((Yk,Bh)=>{"use strict";Bh.exports=function s(e){function t(f){if(!f)return!1;switch(f.nodeType){case Node.ELEMENT_NODE:case Node.DOCUMENT_NODE:case Node.DOCUMENT_FRAGMENT_NODE:return!0;default:return!1}}function r(f){return f?n(f.parentNode,t):null}function n(f,h){for(let g=f;g&&g!==f.ownerDocument;g=g.parentNode)if(h(g))return g;return null}function o(f,h){for(let g=f;g&&g!==f.ownerDocument;g=r(g))if(h(g))return g;return null}function i(f,h){if(!f||!h)return null;f instanceof DocumentFragment&&(f=f.host);let y=window.getComputedStyle(f).getPropertyValue(h);if(y&&y!=="inherit")return y;let b=r(f);return i(b,h)}function a(f){let h=f.getBoundingClientRect();if(h.width>0&&h.height>0)return!0;if(f.tagName.toUpperCase()==="PATH"&&h.width+h.height>0){let y=i(f,"stroke-width");return!!y&&parseInt(y,10)>0}return i(f,"overflow")==="hidden"?!1:Array.from(f.childNodes).some(y=>y.nodeType===Node.TEXT_NODE?!0:t(y)?a(y):!1)}function c(f){return i(f,"overflow")==="hidden"}function u(f){return!f||!c(f)||!f.childNodes.length?!1:Array.from(f.childNodes).every(h=>h.nodeType===Node.TEXT_NODE?!1:!t(h)||!a(h)?!0:u(h))}function d(f){return f?f.parentNode&&f.parentNode.host?!0:d(f.parentNode):!1}if(!d(e)&&!document.contains(e))return!1;switch(e.tagName.toUpperCase()){case"BODY":return!0;case"SCRIPT":case"NOSCRIPT":return!1;case"OPTGROUP":case"OPTION":{let f=n(e,h=>h.tagName.toUpperCase()==="SELECT");return s(f)}case"INPUT":if(e.type==="hidden")return!1;break;default:break}if(i(e,"visibility")!=="visible")return!1;let p=!!o(e,f=>Number(i(f,"opacity"))===0),m=!!o(e,f=>i(f,"display")==="none");return!(p||m||!a(e)||u(e))}});var Yl={};$(Yl,{encodeForSafari:()=>XS,isOldProtocol:()=>JS});function JS(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 XS(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 Ql=S(()=>{"use strict"});var Hh=G((Qk,Vh)=>{"use strict";var YS=require("@testim/webdriverio"),Gh=require("promise-queue"),Wh=(ce(),D(xe)),{UNICODE_CHARACTERS:qh,W3C_ELEMENT_ID:QS}=(Jr(),D(aa)),ZS=$h(),fi=(j(),D(nt)).getLogger("WebDriverApi"),{isOldProtocol:Or,encodeForSafari:eI}=(Ql(),D(Yl)),{extractElementId:Rn}=(F(),D(q)),{SELENIUM_PERF_MARKS:Ts}=(ws(),D(ii));Gh.configure(Promise);var Zl=(Le(),D(Oe)),tI=function(){return{screenWidth:Math.floor(window.innerWidth||0),screenHeight:Math.floor(window.innerHeight||0)}},eu=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 fi.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 Wh.REQUESTS_QUEUE_SIZE<"u"&&(e=Wh.REQUESTS_QUEUE_SIZE);let t=1/0;this.queue=new Gh(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=YS.remote(e),this.initQueueRequests(),Zl.log("right before addToQueue");let n=this.seleniumPerfStats.markStart(Ts.GET_BROWSER);try{await this.addToQueue(()=>(fi.info("requesting browser",{testResultId:r,testName:t}),Zl.log("before this.client.init"),this.client.init())),Zl.log("after client init")}finally{await this.seleniumPerfStats.markEnd(n,Ts.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(Or(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(Or(o))return this.w3cRequests.executeAsync=!0,r();throw o})})}async executeCDP(e,t={}){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!r||!r.value||!r.value.targetInfos?[]:r.value.targetInfos}takeScreenshot(){let e=this.seleniumPerfStats.markStart(Ts.GET_SCREENSHOT);return this.addToQueue(()=>this.client.screenshot()).finally(()=>this.seleniumPerfStats.markEnd(e,Ts.GET_SCREENSHOT))}takeElementScreenshot(e){let t=this.seleniumPerfStats.markStart(Ts.GET_SCREENSHOT);return this.addToQueue(()=>this.client.elementIdScreenshot(Rn(e))).finally(()=>this.seleniumPerfStats.markEnd(t,Ts.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(ZS,{ELEMENT:e,[QS]:e});return this.w3cRequests.elementIdDisplayed?r():t().catch(n=>{if(Or(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(Or(r))return this.w3cRequests.windowHandles=!0,t();throw r})})}url(e){return this.addToQueue(()=>this.client.url(eI(e,this.isSafari(),fi)))}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(Or(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(Rn(e)).then(()=>this.elementIdValue(Rn(e),t))}getViewportSize(e){return this.execute(tI).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=>qh.hasOwnProperty(i)?[qh[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(Or(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(Rn(e)))}buttonPress(e){return this.addToQueue(()=>this.client.buttonPress(e))}findElementAndPress(e,t,r,n){return this.moveTo(Rn(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(Or(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 fi.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))}};Vh.exports=eu});var Kh=G((Zk,zh)=>{"use strict";var rI=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(m){function f(C,w,T){return T>C&&T<w}let h=m.pointerPosition||{},g=r.getBoundingClientRect(),y=h.originX&&f(g.left,g.left+g.width,h.originX)?h.originX:g.left+g.width/2,b=h.originY&&f(g.top,g.top+g.height,h.originY)?h.originY:g.top+g.height/2;return{x:y,y:b}},a=function(m,f){return{screenX:0,screenY:0,clientX:m,clientY:f,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,bubbles:!0,cancelable:!0,button:0,pointerType:"mouse",isPrimary:!0}},c=function(m,f,h){if(!window.PointerEvent)return;let g=a(f,h);return new window.PointerEvent(m,g)},u=function(m,f,h){let g=document.createEvent("MouseEvents");return g.initMouseEvent(m,!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 m=document.activeElement;for(;(f=m.shadowRoot)!=null&&f.activeElement;)m=m.shadowRoot.activeElement;return m},p=function(m){let f=i(m),h=m.event;return t.includes(h)?c(h,f.x,f.y):u(h,f.x,f.y)};try{n.map(f=>p(f)).filter(Boolean).forEach(f=>r.dispatchEvent(f));let m=d();dispatchFocus(s.elementToFocusLocatedElement,m),window.__unloadNavigator&&(window.removeEventListener("unload",window.__unloadNavigator),window.__unloadNavigator=null),e(o)}catch(m){window.__unloadNavigator&&(window.removeEventListener("unload",window.__unloadNavigator),window.__unloadNavigator=null),e({status:"done",result:m.toString(),success:!1})}};zh.exports=rI});var hi=G((e_,Jh)=>{"use strict";Jh.exports=function(e,t){function r(i){let a=document.createEvent("HTMLEvents");return a.initEvent(i,!0,!1),a}function n(){var a;let i=document.activeElement;for(;(a=i.shadowRoot)!=null&&a.activeElement;)i=i.shadowRoot.activeElement;return i}function o(i,a){a&&(a.dispatchEvent(r("focusout")),a.dispatchEvent(r("blur"))),i.dispatchEvent(r("focusin")),i.dispatchEvent(r("focus")),typeof i.focus=="function"&&i.focus();let c=n();a&&c===a&&typeof a.blur=="function"&&a.blur()}if(e){let i=getLocatedElement(e);if(i&&i!==t)try{o(i,t)}catch{}}else t&&typeof t.blur=="function"&&t.blur()}});var xn=G((t_,Yh)=>{"use strict";var Lr=require("lodash"),Be=(j(),D(nt)).getLogger("webdriver"),sI=require("ua-parser-js"),nI=(mi(),D(pi)),{SeleniumError:oI,SeleniumCrashError:iI}=(z(),D(Yn)),tu=(F(),D(q)),aI=Hh(),cI=Kh(),lI=hi(),{isOldProtocol:Nr}=(Ql(),D(Yl)),{featureFlagsService:uI}=(we(),D(Yt)),{W3C_ELEMENT_ID:dI}=(Jr(),D(aa)),[tr,pI]=[0,2],{extractElementId:It,getCdpAddressForHost:mI}=tu,gi=(Le(),D(Oe)),{SeleniumPerfStats:fI,SELENIUM_PERF_MARKS:Dr}=(ws(),D(ii)),rr=()=>(Ee(),D(Ft)).getSessionPlayer().codeSnippets,hI=()=>(Ee(),D(Ft)).getSessionPlayer().locatorBuilderUtils,Xh=()=>(Ee(),D(Ft)).getSessionPlayer().utils;async function gI(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 mI(r):void 0}catch(r){Be.info("Error getting cdpAddress",r);return}}var ru=class extends aI{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 fI,u=!1,d){var h,g,y,b,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 p=nI.buildSeleniumOptions(e,t,r,n,o,i,a,d);p.desiredCapabilities&&delete p.desiredCapabilities.marionette,p.capabilities&&delete p.capabilities.alwaysMatch.marionette,this.initUnsupportedActions(d==null?void 0:d.isLambdatestRun()),this.browserAndOS=null,this.seleniumPerfStats=c;let m=u?0:1500,f=u?()=>{}:()=>this.executeJS("window.focus()");try{gi.log("before initClient in webdriver.js init");let w=await this.initClient(p,t,a);gi.log("after initResult before getCdpAddress in init"),this.cdpUrl=await gI(w),gi.log("after getCdpAddress in webdriver.js init"),Be.info(`init new session testName: ${t}`,{sessionId:this.getSessionId(),testResultId:a}),await tu.delay(m),await f(),gi.log("after focus and delay in webdriver.js init")}catch(w){if(Be.error("failed to init webdriver",{err:w}),w.seleniumStack){let T=new oI(w.seleniumStack),I=((C=(b=e==null?void 0:e.company)==null?void 0:b.activePlan)==null?void 0:C.plan)==="free";throw T.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"):T}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=>Lr.zip(Lr.dropRight(n,1),Lr.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=tu.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,Be.warn("close unexpected alert open"),e.alertAccept().catch(c=>Be.warn("failed to click on alert",{err:c}));if(Be.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,[dI]: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 iI:e})}getElement(e){let t=this.seleniumPerfStats.markStart(Dr.GET_ELEMENT);return typeof e=="string"||typeof e=="number"?this.getElementBySelector(`[testim_dom_element_id='${e}']`).finally(()=>this.seleniumPerfStats.markEnd(t,Dr.GET_ELEMENT)):e&&e.shadowPath&&e.shadowPath.length||uI.flags.runGetElementCodeInAut.isEnabled()&&this.isSafari()?this.execute(`
28
- var fn = ${rr().getLocatedElementCode};
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(`
28
+ var fn = ${tr().getLocatedElementCode};
29
29
  return fn.apply(null, arguments);
30
- `,e).finally(()=>this.seleniumPerfStats.markEnd(t,Dr.GET_ELEMENT)):this.getElementBySelector(`[testim_dom_element_id='${e&&e.testimId}']`).finally(()=>this.seleniumPerfStats.markEnd(t,Dr.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
- var getLocatedElement = ${rr().getLocatedElementCode};
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(`
31
+ var getLocatedElement = ${tr().getLocatedElementCode};
32
32
  var setDynamicParentAttribute = ${n.toString()};
33
33
  return setDynamicParentAttribute.apply(null, arguments)
34
- `,{attributeName:hI().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
- var getLocatedElement = ${rr().getLocatedElementCode};
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(`
35
+ var getLocatedElement = ${tr().getLocatedElementCode};
36
36
  var getLocation = ${t.toString()};
37
37
  return getLocation.apply(null, arguments)
38
38
  `,e)}getElementLocationWithPadding(e){return this.getLocatedElementRectWithPadding(e)}getLocatedElementRect(e){function t(r){var n=getLocatedElement(r);if(!n)return null;var o=n.getBoundingClientRect();return{bottom:Math.round(o.bottom),height:Math.round(o.height),x:Math.round(o.left),right:Math.round(o.right),y:Math.round(o.top),width:Math.round(o.width)}}return this.executeJS(`
39
- var getLocatedElement = ${rr().getLocatedElementCode};
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 p=Array.apply(null,d.childNodes).filter(function(m){return m.nodeType===Node.ELEMENT_NODE});return p.forEach(function(m){typeof m.tagName=="string"&&m.tagName.toLowerCase()==="title"?d.removeChild(m):o(m)}),d}function i(d){var p=d.tagName;return p==="INPUT"||p==="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 p=d.cloneNode(!0),m=Array.prototype.filter.call(p.children,function(f){return f.hidden});return m.forEach(function(f){p.removeChild(f)}),p.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 p=d.cloneNode(!0);return o(p).textContent.replace(/(\r\n|\n|\r)/gm,"")}else return a(d)}var u=getLocatedElement(r);return u?c(u):""}return this.executeJS(`
43
- var getLocatedElement = ${rr().getLocatedElementCode};
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(`
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=rr().getHtmlCode(null,e),r=this.seleniumPerfStats.markStart(Dr.GET_HTML);return this.executeJS(t).then(n=>(this.seleniumPerfStats.markEnd(r,Dr.GET_HTML),n.value)).catch(n=>{this.seleniumPerfStats.markEnd(r,Dr.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 p=u.value.width-d.value.screenWidth,m=u.value.height-d.value.screenHeight;return this.windowHandleSize({width:a.width+p,height:a.height+m})}).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 Be.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=sI(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 ${rr().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!Xh().isWithinBounds(-o.x,o.x,i)||!Xh().isWithinBounds(-o.y,o.y,a)?(Be.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=>{Be.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,tr,e,["pointerDown","pointerUp","pointerDown","pointerUp"])}doubleClickWithJS(e){return this.executeCodeAsync(`
47
- var getLocatedElement = ${rr().getLocatedElementCode};
48
- var dispatchFocus = ${lI.toString()};
49
- var doubleClick = ${cI.toString()};
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(`
47
+ var getLocatedElement = ${tr().getLocatedElementCode};
48
+ var dispatchFocus = ${RS.toString()};
49
+ var doubleClick = ${SS.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,tr,e,["pointerDown","pointerUp"])}rightClickWithActionsAPI(e,t){return this.actWithActionsAPI(t,pI,e,["pointerDown","pointerUp"])}rightClick(e,t){return this.unsupportedActions.move?this.rightClickWithActionsAPI(e,t):super.rightClick(e).catch(r=>{if(Nr(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(Nr(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 Be.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(Nr(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=>{Be.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=Lr.first(t).pointerPosition,n=Lr.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"],tr),c=this.getMoveActions(t,r,"pointer",1),u=this.getClickActions(["pointerUp"],tr);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:p,yDiff:m}=d;return this.unsupportedActions.move?this.dragWithActionsAPI(e,p,m,c,u):this.dragWithMoveTo(e,p,m,c,u).catch(f=>{if(Nr(f))return this.unsupportedActions.move=!0,this.dragWithActionsAPI(e,p,m,c,u);throw f})})}getMoveRelativeSequence(e,t,r,n){let o=m=>m*m,i=(m,f)=>Math.sqrt(o(m.x-f.x)+o(m.y-f.y)),a={x:e,y:t},c={x:r,y:n},u=10,d=Math.round(i(a,c)/u),p=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(p)}getMoveAbsoluteSequence(e,t,r,n){return this.getMoveRelativeSequence(e,t,r,n).reduce((i,a)=>{let c=Lr.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 p of d)await this.moveTo(null,p.x,p.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),p=Math.round(o.top+a),m=this.getMoveAbsoluteSequence(t.left+r,t.top+n,o.left+i,o.top+a),f=this.getMoveActions(c,u),h=this.getClickActions(["pointerDown"],tr),g=Lr.flatMap(m,w=>this.getMoveActions(w.x,w.y)),y=this.getMoveActions(d,p),b=this.getClickActions(["pointerUp"],tr),C=f.concat(h).concat(g).concat(y).concat(b);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(Nr(n))return this.unsupportedActions.move=!0,this.dragAndDropWithActionsAPIWithGeneratedMoves(r);throw n}):this.unsupportedActions.move?this.dragAndDropWithActionsAPI(r):this.dragAndDropOldAPI(e,t).catch(n=>{if(Nr(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(Nr(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),p=Math.round(o.top+a);return this.moveWithActionsAPI({x:c,y:u}).then(()=>{let m=this.getClickActionList(["pointerDown"],tr);return this.actions(m)}).then(()=>this.moveWithActionsAPI({x:d,y:p})).then(()=>{let m=this.getClickActionList(["pointerUp"],tr);return this.actions(m)})}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=>Be.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 Be.info("delete session",{sessionId:this.getSessionId()}),this.getSessionId()||Be.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}}};Yh.exports=ru});var su,nu,yi,ou=S(()=>{"use strict";j();we();Te();su=A("lab-features-service"),nu=class{constructor(){this.featuresForProject=[];this.labBatman=!1}async loadLabFeatures(e,t){(!t||!e)&&(su.error("missing companyPlan or projectId when loading lab features",{companyPlan:t,projectId:e}),this.featuresForProject=[]);try{let r=this.isLabsEnabledForCompany(t),n=r?await Oc(e):[];this.featuresForProject=n,this.labBatman=r}catch(r){su.error("failed loading lab features",{err:r,companyPlan:t,projectId:e}),this.featuresForProject=[]}}isFeatureAvailableForProject(e){let t=W.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 su.error(t,{featureFlagName:e.name}),new Error(t)}},yi=new nu});var Ur={};$(Ur,{cleanLocalPackageInstallFolder:()=>cu,installPackage:()=>Cn,runCodeWithPackages:()=>Pn});function Zh(s){let e=/^\\\\\?\\/.test(s),t=/[^\u0000-\u0080]+/.test(s);return e||t?s:s.replace(/\\/g,"/")}function yI(s,e,t,r,n={},o=void 0,i=void 0){let a=Object.keys(n).reduce((g,y)=>(g+=`
54
- var ${y} = require('${Zh(n[y])}');
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+=`
54
+ var ${y} = require('${Xh(n[y])}');
55
55
  `,g),""),c=i?`
56
- ${au.default.toString()}
56
+ ${ju.default.toString()}
57
57
  var fileBuffer = dataUriToBuffer('${i}');
58
- `:"var fileBuffer = null;";function u(g,y){function b(){return g.apply(this,y)}return b.prototype=g.prototype,new b}let d=`
58
+ `:"var fileBuffer = null;";function u(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);
@@ -105,7 +105,7 @@ ${((C=n.warnings)==null?void 0:C.join(`
105
105
  oldMethod && oldMethod.apply(console, arguments);
106
106
  };
107
107
  });
108
- `,p=`
108
+ `,m=`
109
109
  function injectCode(params, args, incomingParams, context, code, done) {
110
110
  var constructWithArguments = ${u.toString()}
111
111
 
@@ -162,7 +162,7 @@ ${((C=n.warnings)==null?void 0:C.join(`
162
162
  });
163
163
  }
164
164
  }
165
- `,m=`
165
+ `,p=`
166
166
  // A hack to fix an issue with stringified functions which use require. when compiling to JS, calls to require change to __require.
167
167
  const __require = require;
168
168
  ${a}
@@ -171,7 +171,7 @@ ${((C=n.warnings)==null?void 0:C.join(`
171
171
 
172
172
  ${d}
173
173
 
174
- var isPromise = ${Qn.toString()}
174
+ var isPromise = ${ao.toString()}
175
175
 
176
176
  const {incomingParams, context, code} = input;
177
177
 
@@ -194,20 +194,20 @@ ${((C=n.warnings)==null?void 0:C.join(`
194
194
  args = args.concat([fileBuffer]);
195
195
  }
196
196
 
197
- ${p}
197
+ ${m}
198
198
 
199
199
  injectCode(params, args, incomingParams, context, code, done);
200
- `,f=[],h=(0,wi.spawn)(u(Function,["input","done","progress",m]));return re(new Promise(g=>{h.send({incomingParams:e,context:t,code:r}).on("message",y=>{let b=Object.assign({},y,{tstConsoleLogs:f});De.debug("Run code worker response",{messageWithLogs:b,transactionId:s}),g(b)}).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 te))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 wI(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:iu.promises.readFile(`${vs}${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 bI(s,e,t,r,n={},o=void 0,i=void 0){Mr||(Mr=require("worker_threads"));let{Worker:a}=Mr,c=Object.keys(n).reduce((y,b)=>(y+=`
201
- var res = requireOrImportMethod('${Zh(n[b])}');
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+=`
201
+ var res = requireOrImportMethod('${Xh(n[w])}');
202
202
  if (res.sync) {
203
- var ${b} = res.lib;
203
+ var ${w} = res.lib;
204
204
  } else {
205
- var ${b} = await res.lib;
205
+ var ${w} = await res.lib;
206
206
  }
207
207
  `,y),""),u=i?`
208
- ${au.default.toString()}
208
+ ${ju.default.toString()}
209
209
  var fileBuffer = dataUriToBuffer('${i}');
210
- `:"var fileBuffer = null;";function d(y,b){function C(){return y.apply(this,b)}return C.prototype=y.prototype,new C}let p=`
210
+ `:"var fileBuffer = null;";function d(y,w){function P(){return y.apply(this,w)}return P.prototype=y.prototype,new P}let m=`
211
211
  const getMessage = arguments => {
212
212
  const args = Array.prototype.slice.call(arguments);
213
213
  let message = args.shift() + '';
@@ -259,7 +259,7 @@ ${((C=n.warnings)==null?void 0:C.join(`
259
259
  oldMethod && oldMethod.apply(console, arguments);
260
260
  };
261
261
  });
262
- `,m=`
262
+ `,p=`
263
263
  function injectCode(params, args, incomingParams, context, code) {
264
264
  var constructWithArguments = ${d.toString()}
265
265
 
@@ -328,16 +328,16 @@ ${((C=n.warnings)==null?void 0:C.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 = ${wI}
331
+ var requireOrImportMethod = ${LS}
332
332
 
333
333
  // requireCode will set async to be true if needed.
334
334
  ${c}
335
335
 
336
336
  ${u}
337
337
 
338
- ${p}
338
+ ${m}
339
339
 
340
- var isPromise = ${Qn.toString()}
340
+ var isPromise = ${ao.toString()}
341
341
 
342
342
  parentPort.once('message', input => {
343
343
  const {incomingParams, context, code} = input;
@@ -361,74 +361,77 @@ ${((C=n.warnings)==null?void 0:C.join(`
361
361
  args = args.concat([fileBuffer]);
362
362
  }
363
363
 
364
- ${m}
364
+ ${p}
365
365
 
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",b=>{if(b.action==="finish"){let{data:C}=b,w=Object.assign({},C,{tstConsoleLogs:h});De.debug("Run code worker response",{messageWithLogs:w,transactionId:s}),y(w)}else b.action==="progress"&&h.push(b.data)}).on("error",b=>{b.message==="malformed data: URI"?De.error("Run code worker error",{err:b,transactionId:s,fileDataUrl:i}):De.error("Run code worker error",{err:b,transactionId:s}),y({tstConsoleLogs:h,status:"failed",result:{resultValue:b==null?void 0:b.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 te))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 TI(s){try{await iu.promises.rm(s,{recursive:!0,force:!0})}catch(e){De.warn("failed to remove install npm packages folder",{err:e})}}function eg(s,e,t,r){return`${e}_${t}_${s}_${r}`}async function Cn(s,e,t,r,n,o){let i=eg(n,e,s,t),{data:a}=await vI(i,r,o);return a}async function Pn(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]))||[]),p=eg(i,n,e,o);if(u){let g=await cn(u);g&&(c=g)}if(typeof Mr>"u")try{Mr=require("worker_threads")}catch{Mr=!1}Buffer.isBuffer(c)&&(De.debug("runCodeWithPackages: converted a buffer to base 64 string data URI",{fileDataUrl:c}),c=c.toString());let m="data:,";if(c==="data:"&&(De.debug("runCodeWithPackages, fileDataUrl was an empty string ",{fileDataUrl:c}),c=m),Mr&&W.flags.enableWorkerThreadsCliCodeExecution.isEnabled()){let g=await bI(p,t,r,s,d,a,c);return Object.assign({},g,{nodeVersion:process.version})}let f=await yI(p,t,r,s,d,a,c);return Object.assign({},f,{nodeVersion:process.version})}async function vI(s,e,t){let r=e.map(c=>`${c.packageName}@${c.packageVersion}`),n=tg(),o=vs.join(n,`/${s}`),i=global.proxyUri;async function a(){let c="";try{if(c=await fm(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 p=mm(o,d.packageName),m=`${d.packageName}@${p}`,f=vs.resolve(o,"node_modules",d.packageName);return Object.assign({},d,{packageFullName:m,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 te&&De.warn("timeout to install package",{packages:r,transactionId:s,err:c,timeout:t}),c}}function tg(){return vs.join(Qh.tmpdir(),"/testim_local_packages")}function cu(){let s=tg();return TI(s)}var iu,Qh,vs,au,wi,De,Mr,Fr=S(()=>{"use strict";iu=v(require("fs")),Qh=v(require("os")),vs=v(require("path"));F();en();au=v(require("data-uri-to-buffer")),wi=require("threads");z();j();Te();we();De=A("cli-service");wi.config.set({basepath:{node:__dirname}})});var sr={};$(sr,{run:()=>SI});function EI(s,e){try{let t=e.defaults.enforceMaximumJsResultSize,r=W.flags.maximumJsResultSize.getValue(),n=JSON.stringify(s).length>r;return t?n:!1}catch{return!1}}var SI,rg=S(()=>{"use strict";Fr();z();we();SI=async(s,e,t)=>{let{code:r,stepId:n,incomingParams:o,context:i,testResultId:a,retryIndex:c,stepResultId:u,runTimeout:d,fileDataUrl:p,s3filepath:m}=e.data;try{let f=await Pn(r,n,o,i,a,c,u,d,p,m);return f&&EI({result:f.result,tstConsoleLogs:f.tstConsoleLogs},t)?{code:"js-result-max-size-exceeded",success:!1}:{data:f,success:!0}}catch(f){throw f instanceof te?new Error("Timeout while running action"):f}}});var ae=G((p_,sg)=>{"use strict";var{getSessionPlayer:II}=(Ee(),D(Ft)),lu=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 II()}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}}}}};sg.exports=lu});var ag=G((m_,ig)=>{"use strict";var RI=ae(),{JSDOM:xI,VirtualConsole:CI}=require("jsdom"),{getLogger:PI}=(j(),D(nt)),{featureFlagsService:ng}=(we(),D(Yt)),{getSessionPlayer:og}=(Ee(),D(Ft)),jr=PI("locate-step-action"),AI={opacity:1,clientRects:{}};function kI(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 CI,a=new xI(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:ng.flags.useClickimVisibilityChecks.isEnabled()?!1:t.isSafari()?ng.flags.useSafariWebdriverVisibilityChecks.isEnabled():!0},async isVisible(e,t,r,n,o,i,a){let{locatorBuilderUtils:c,codeSnippets:u,visibilityUtils:d,positionUtils:p}=og();if(this.shouldUseNativeVisibilityCheck(n,s,d,p))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=[p.calculateElementMiddlePoint(r),p.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 jr.error("failed to execute getVisibilityCode",{err:I}),I}let{value:b}=y||{},C=b.elementVisibilityInfo||AI,[w,T]=b.elementsFromPointResults||[null,null];return d.checkElementVisibility(C,n,T,w,a,t)},scrollToElement(e,t){let{codeSnippets:r}=og(),n=r.scrollToElement;return s.execute(n(t))}}}var uu=class extends RI{execute(){return this.driver.getHTML(this.step)}static getUtils(e){return Object.assign(kI(e),{useLocatedElement:!0})}static getFrameIdByTestimFrameId(...e){throw jr.warn("Unplanned access to getFrameIdByTestimFrameId()"),new Error("Use .getUtils() instead")}static setElementResultDataOnContext(...e){throw jr.warn("Unplanned access to setElementResultDataOnContext()"),new Error("Use .getUtils() instead")}static getElementRectangle(...e){throw jr.warn("Unplanned access to getElementRectangle()"),new Error("Use .getUtils() instead")}static getOffsets(...e){throw jr.warn("Unplanned access to getOffsets()"),new Error("Use .getUtils() instead")}static htmlStringToDom(...e){throw jr.warn("Unplanned access to htmlStringToDom()"),new Error("Use .getUtils() instead")}static isVisible(...e){throw jr.warn("Unplanned access to isVisible()"),new Error("Use .getUtils() instead")}};ig.exports=uu});var lg=G((f_,cg)=>{"use strict";var _I=function(s,e,t,r,n,o,i,a){function c(b,C){if(!C)return{success:!1};elementScrollTo(C,b.x,b.y);let w=C.scrollLeft,T=C.scrollTop;return{success:Math.abs(T-b.y)<1&&Math.abs(w-b.x)<1,actualX:w,actualY:T}}function u(b,C,w,T,I,k,M){if(!w)return{x:T,y:I};let E=getLocatedElement(C);if(r&&!E)return{x:b.scrollWidth,y:b.scrollHeight};if(!E)throw new Error("could not find target element");let _=E.getBoundingClientRect(),x=0,L=0,B=Math.max(window.innerHeight-(_.height+10),0),H=Math.max(window.innerWidth-(_.width+10),0);return x=M?b.scrollTop+_.top-Math.min(I,B):b.scrollTop,L=k?b.scrollLeft+_.left-Math.min(T,H):b.scrollLeft,{x:Math.round(L),y:Math.round(x)}}let d=!s;if(s=d?document.scrollingElement||document.documentElement:getLocatedElement(s),!s)throw new Error("could not find target to scroll on");let p={top:s.scrollTop,left:s.scrollLeft},m=u(s,e,t,n,o,i,a),f=c(m,s);d&&!document.scrollingElement&&!f.success&&p.top===s.scrollTop&&p.left===s.scrollLeft&&(s=document.body,m=u(s,e,t,n,o,i,a),f=c(m,s));let h=f.actualX,g=f.actualY,y=getLocatedElement(e);if(t&&r&&!y)return{success:!1,expectedPosition:m};if(t){if(!y)throw new Error("could not find target to scroll to");let b=y.getBoundingClientRect();h=b.left,g=b.top}return{success:f.success,actualX:h,actualY:g}};cg.exports=_I});var dg=G((h_,ug)=>{"use strict";var OI=lg(),LI=ae(),du=class extends LI{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,p,m){d.scrollTo(p,m)}:function(d,p,m){d.scrollTop=m,d.scrollLeft=p},u=`
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(`
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=`
370
373
  var getLocatedElement = ${n.getLocatedElementCode};
371
374
  var elementScrollTo = ${c.toString()};
372
- var scroll = ${OI.toString()};
375
+ var scroll = ${wg.toString()};
373
376
  return scroll.apply(null, arguments)
374
- `;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:p,actualX:m,actualY:f}=d.value;return p?{success:!0}:{errorType:o.SCROLL_ACTION_FAILURE,success:!1,resultInfo:{error:this.getFailureString(t,a,i,m,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)}};ug.exports=du});var mg=G((g_,pg)=>{"use strict";var NI=(s,e)=>{let t=typeof Event=="function";window.__unloadNavigator=i,window.addEventListener("unload",window.__unloadNavigator);function r(w,T){var M;function I(E){function _(B){return o(B).find(H=>Array.apply(null,H.classList||[]).includes("Select-control"))}function x(B){let H=_(B);return H?H.querySelector("INPUT"):null}let L=x(E);L&&L.focus()}let k=(M=w.quirks)==null?void 0:M.isReactSelect;T.type==="mousedown"&&k&&I(w.element)}function n(w,T){var k;let I=(k=w.quirks)==null?void 0:k.isCKEditorFrame;T.type==="click"&&I&&document.body.focus()}function o(w){return w?[w].concat(o(w.parentNode)):[]}function i(w){let T={status:"done",result:w,success:!0};C.isNonTextableElemnet&&(T.reason="Set text on non input element"),e(T)}function a(w){w=w||{},e({status:"failed",result:w,success:!1})}function c(w){let T=t?new Event("mouseover",{composed:!0}):document.createEvent("Events");T.initEvent("mouseover",!0,!0),w.dispatchEvent(T)}function u(w){let T={},I=w.getBoundingClientRect(),k=I.left+I.width/2,M=I.top+I.height/2,x=f("mousemove",T,k,M,0);w.dispatchEvent(x)}function d(w,T){function I(x,L,B){return B>x&&B<L}let k=w.pointerPosition||{},M=T.getBoundingClientRect(),E=k.originX&&I(M.left,M.left+M.width,k.originX)?k.originX:M.left+M.width/2,_=k.originY&&I(M.top,M.top+M.height,k.originY)?k.originY:M.top+M.height/2;return{x:E,y:_}}function p(w,T,I){return{screenX:0,screenY:0,clientX:T,clientY:I,ctrlKey:Boolean(w.ctrl),altKey:Boolean(w.alt),shiftKey:Boolean(w.shift),metaKey:Boolean(w.meta),bubbles:!0,cancelable:!0,composed:!0}}function m(w,T,I,k){if(!window.PointerEvent)return;let M=p(T,I,k);return M.pointerType="mouse",M.isPrimary=!0,new window.PointerEvent(w,M)}function f(w,T,I,k,M){let E=t?new MouseEvent("click",{composed:!0}):document.createEvent("MouseEvents");return E.initMouseEvent(w,!0,!0,document.defaultView,1,0,0,I,k,Boolean(T.ctrl),Boolean(T.alt),Boolean(T.shift),Boolean(T.meta),M,document.body?document.body.parentNode:document.documentElement),E}function h(w,T){let I=["pointerup","pointerdown","pointermove"],k=T.modifiers||{},M=d(w,T.element),E=T.button||0,_=w.event;return I.includes(_)?m(_,k,M.x,M.y):f(_,k,M.x,M.y,E)}function g(){var T;let w=document.activeElement;for(;(T=w.shadowRoot)!=null&&T.activeElement;)w=w.shadowRoot.activeElement;return w}function y(w){w.events.map(T=>{try{return h(T,w)}catch{return}}).filter(Boolean).forEach(T=>{w.element.dispatchEvent(T),r(w,T),n(w,T)}),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),u(C.element);try{y(C);let w=g(),T=C.quirks,I=T==null?void 0:T.isReactSelect,k=T==null?void 0:T.isCKEditorFrame;!I&&!k&&dispatchFocus(s.elementToFocusLocatedElement,w),i()}catch(w){a(w.toString())}};pg.exports=NI});var hg=G((y_,fg)=>{"use strict";var DI=function(s,e){let t=typeof Event=="function",r=typeof PointerEvent=="function",n=40;window.__unloadNavigator=o,window.addEventListener("unload",window.__unloadNavigator);function o(w){e({status:"done",result:w,success:!0})}function i(w){w=w||{},e({status:"failed",result:w,success:!1})}function a(w){let T=t?new Event("mouseover",{composed:!0}):document.createEvent("Events");T.initEvent("mouseover",!0,!0),w.dispatchEvent(T)}function c(w){let T={},I=w.getBoundingClientRect(),k=I.left+I.width/2,M=I.top+I.height/2,x=m("mousemove",T,k,M,0);w.dispatchEvent(x)}function u(w,T){function I(x,L,B){return B>x&&B<L}let k=w.pointerPosition||{};if(C.isDrag)return{x:k.originX||0,y:k.originY||0};let M=T.getBoundingClientRect(),E=k.originX&&I(M.left,M.left+M.width,k.originX)?k.originX:M.left+M.width/2,_=k.originY&&I(M.top,M.top+M.height,k.originY)?k.originY:M.top+M.height/2;return{x:E,y:_}}function d(w,T,I){return{screenX:0,screenY:0,clientX:T,clientY:I,ctrlKey:Boolean(w.ctrl),altKey:Boolean(w.alt),shiftKey:Boolean(w.shift),metaKey:Boolean(w.meta),bubbles:!0,cancelable:!0,composed:!0}}function p(w,T,I,k,M){if(r){let _=d(T,I,k);return _.pointerType="mouse",_.isPrimary=!0,new window.PointerEvent(w,_)}let E=document.createEvent("PointerEvent");return E.initPointerEvent(w,!0,!0,document.defaultView,1,0,0,I,k,Boolean(T.ctrl),Boolean(T.alt),Boolean(T.shift),Boolean(T.meta),M,document.body?document.body.parentNode:document.documentElement,0,0,0,0,0,0,0,0,0,"mouse",0,!0),E}function m(w,T,I,k,M){let E=t?new MouseEvent("click",{composed:!0}):document.createEvent("MouseEvents");return E.initMouseEvent(w,!0,!0,document.defaultView,1,0,0,I,k,Boolean(T.ctrl),Boolean(T.alt),Boolean(T.shift),Boolean(T.meta),M,document.body?document.body.parentNode:document.documentElement),E}function f(w,T){let I=["pointerup","pointerdown","pointermove"],k=T.modifiers||{},M=u(w,T.element),E=T.button||0,_=w.event;return I.includes(_)?p(_,k,M.x,M.y,E):m(_,k,M.x,M.y,E)}function h(w,T){function I(){return w.event==="click"&&T.isDrag&&!T.allEventsOnSameElement}return I()}function g(w,T,I){try{let k=f(T.events[w],T);h(k,T)||T.element.dispatchEvent(k)}catch{}if(w+1===T.events.length)I();else{let k=Math.min(T.events[w+1].timeStamp-T.events[w].timeStamp,n);setTimeout(()=>{g(w+1,T,I)},k)}}function y(w,T){g(0,w,()=>{window.__unloadNavigator&&window.removeEventListener("unload",window.__unloadNavigator),T()})}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()})};fg.exports=DI});var yg=G((w_,gg)=>{"use strict";var MI=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")};gg.exports=MI});var bg=G((b_,wg)=>{"use strict";var UI=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(x){e({status:"done",result:x,success:!0})}function a(x){x=x||{},e({status:"failed",result:x,success:!1,keep:!0})}function c(x){return x!=null&&x.toLowerCase?(x=x.toLowerCase(),x==="text"?"text/plain":x==="url"?"text/uri-list":x):x}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"],p=["pointerup","pointerdown","pointermove"],m=d.concat(["drop","dragenter","dragover"]);function f(x){let L=x;for(;L&&L!==document.documentElement;){if(L.draggable)return L;L=L.parentElement}return null}function h(x,L,B){let H=L.element,X=B.dispatchDragEventsOnClosestDraggable;if(d.includes(x.type)&&X){if(!H&&L.lastDraggedElement)return L.lastDraggedElement;let Z=f(H);if(Z)return L.lastDraggedElement=Z,Z}return H}function g(x,L,B){function H(Kr,P,O){return O>Kr&&O<P}let X=x.pointerPosition||{};if(L)return{x:X.originX||0,y:X.originY||0};let Z=B.getBoundingClientRect(),me=X.originX&&H(Z.left,Z.left+Z.width,X.originX)?X.originX:Z.left+Z.width/2,Ct=X.originY&&H(Z.top,Z.top+Z.height,X.originY)?X.originY:Z.top+Z.height/2;return{x:me,y:Ct}}function y(x,L,B){let H=(L==null?void 0:L.modifiers)||{},X=g(x,B.isDrag,B.element),Z=(L==null?void 0:L.button)||0,me=x.event;return p.includes(me)?C(me,H,X.x,X.y,Z):m.includes(me)?T(me,H,X.x,X.y,Z):w(me,H,X.x,X.y,Z)}function b(x,L,B){return{screenX:0,screenY:0,clientX:L,clientY:B,ctrlKey:Boolean(x.ctrl),altKey:Boolean(x.alt),shiftKey:Boolean(x.shift),metaKey:Boolean(x.meta),bubbles:!0,cancelable:!0,composed:!0}}function C(x,L,B,H,X){if(n){let me=b(L,B,H);return me.pointerType="mouse",me.isPrimary=!0,new window.PointerEvent(x,me)}let Z=document.createEvent("PointerEvent");return Z.initPointerEvent(x,!0,!0,document.defaultView,1,0,0,B,H,Boolean(L.ctrl),Boolean(L.alt),Boolean(L.shift),Boolean(L.meta),X,document.body?document.body.parentNode:document.documentElement,0,0,0,0,0,0,0,0,0,"mouse",0,!0),Z}function w(x,L,B,H,X){let Z=t?new MouseEvent("click",{composed:!0}):document.createEvent("MouseEvents");return Z.initMouseEvent(x,!0,!0,document.defaultView,1,0,0,B,H,Boolean(L.ctrl),Boolean(L.alt),Boolean(L.shift),Boolean(L.meta),X,document.body?document.body.parentNode:document.documentElement),Z}function T(x,L,B,H){if(x==="dragstart"&&(window.TSTA||(window.TSTA={}),window.TSTA.dataTransfer=u()),!r){let me=document.createEvent("CustomEvent");return me.initCustomEvent(x,!0,!0,null),me.dataTransfer=window.TSTA.dataTransfer,me}let X=b(L,B,H),Z=new window.DragEvent(x,X);return Object.defineProperties(Z,{dataTransfer:{get(){return window.TSTA.dataTransfer}}}),Z}function I(x,L,B){let H=h(x,L,B);H&&H.dispatchEvent(x)}function k(x,L){function B(){return x.event==="click"&&L.isDrag&&!L.allEventsOnSameElement}return B()}function M(x,L,B){if(B){let H=Math.min(B.timeStamp-L.timeStamp,40);setTimeout(()=>{E(x)},H)}else window.__unloadNavigator&&window.removeEventListener("unload",window.__unloadNavigator),i()}function E(x){let L,B=x.events[x.eventIndex],H=x.events[++x.eventIndex];try{x.element=getLocatedElement(B.locatedElement),L=y(B,s,x)}catch(X){return a(`exception in get event in drag step:${X.message}`)}if(k(B,x))return M(x,B,H);if(L)try{I(L,x,B)}catch(X){return a(`exception in executeEvent in drag step:${X.message}`)}else return a(`cannot execute event ${B.event}`);M(x,B,H)}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{E(_)}catch(x){a(x)}},0)};wg.exports=UI});var Sg=G((T_,Eg)=>{"use strict";var pu=require("lodash"),FI=ae(),jI=mg(),Tg=hi(),BI=hg(),$I=yg(),WI=bg(),{featureFlagsService:vg}=(we(),D(Yt)),mu=class extends FI{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(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=`
375
378
  var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
376
- var dispatchFocus = ${Tg.toString()};
377
- var doClick = ${jI.toString()};
379
+ var dispatchFocus = ${Ss.toString()};
380
+ var doClick = ${Rg.toString()};
378
381
  var eventData = arguments[0];
379
382
  var done = arguments[1];
380
383
  return doClick.call(null, eventData, done);
381
- `;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=pu.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=pu.findLastIndex(this.step.events,o=>o.event==="mousemove")||t&&pu.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(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=`
382
385
  var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
383
- var dispatchFocus = ${Tg.toString()};
384
- var doDragPath = ${BI.toString()};
386
+ var dispatchFocus = ${Ss.toString()};
387
+ var doDragPath = ${xg.toString()};
385
388
  return doDragPath.apply(null, arguments);
386
- `;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(vg.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 m={elementToFocusLocatedElement:e.elementToFocusLocatedElement,locatedElement:t,events:this.step.events,timeout:this.context.data.timeToPlayStep+3e3};return this.driver.doubleClick(r,m,c)}if(this.step.isDrag){if(this.step.toElement){let m=this.context.data.toElement;if(this.step.isHTML5Drag){if(vg.flags.usePortedHtml5DragDrop.isEnabled()){let y=this.generateHTML5DragEventSequence(),b=this.context.data.timeToPlayStep+3e3,C=this.context.data[this.step.targetId||"targetId"],w={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},T=`
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=`
387
390
  var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
388
- var dnd = ${WI.toString()};
391
+ var dnd = ${Pg.toString()};
389
392
  var eventData = arguments[0];
390
393
  var done = arguments[1];
391
394
  return dnd.call(null, eventData, done);
392
- `;return this.driver.executeCodeAsync(T,b,w)}let h=`
395
+ `;return this.driver.executeCodeAsync(v,w,b)}let h=`
393
396
  var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
394
- var dnd = ${$I.toString()};
397
+ var dnd = ${Eg.toString()};
395
398
  var eventData = arguments[0];
396
399
  return dnd.call(null, eventData);
397
- `,g={fromLocatedElement:t,toLocatedElement:m.locatedElement};return this.driver.executeJS(h,g)}let f=this.getDnDRectsAndOffsets(e,m,this.step.element.clickOffset,this.step.toElement.clickOffset);return this.driver.dragAndDrop(r,m.seleniumElement,f)}return this.dragPathJs()}let d=this.driver.isSafari()&&this.step.button===2,p=this.driver.isSafari()&&e.tagName==="SELECT";return this.driver.isSafari()&&p?Promise.resolve({keep:!0,success:"skipped",forceTreatAsWarning:!0,reason:"Safari does not support clicking on select elements"}):!p&&(!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}};Eg.exports=mu});var Rg=G((v_,Ig)=>{"use strict";var qI=ae(),fu=class extends qI{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,p;if(o){let m=o.computeExpression(t.expression2,r,this.exportsGlobal,this.exportsTest);d=u,p=m.evaluatedText}else{let m=await e.executeStep(t.expression2,r,n,this.exportsGlobal,this.locateElementPlayer,this.exportsTest);d=u,p=m.evaluatedText}try{return i.compareOrMatch(p,d)?{success:!0}:{success:!1,errorType:a.stepResult.TEXT_COMPARE_FAILURE,resultInfo:{expected:String(p),actual:d}}}catch{return{success:!1,errorType:a.stepResult.TEXT_COMPARE_FAILURE,resultInfo:{expected:p.toString(),actual:d}}}}catch(u){return{success:!1,reason:u.message,exception:u,shouldRetry:!0}}}};Ig.exports=fu});var Cg=G((E_,xg)=>{"use strict";var GI=require("lodash"),VI=ae(),{getLogger:HI}=(j(),D(nt)),zI=HI("evaluate-expression-step-action"),hu=class extends VI{async execute(){let e=this.step,t=this.context,r=this.exportsGlobal,n=this.exportsTest;try{zI.info("runner running incoming params evaluation");let o=t.incomingParams||{};GI.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"),p=Function.apply(Function,i.concat([u])).apply(null,a);return t.data[e.targetName]=p,t.data[e.targetId]=p,t.internalParams&&t.internalParams.add(e.targetId),{success:!0,evaluatedText:p,data:t.data}}catch(o){let{stepResult:i}=this.sessionPlayerInit.commonConstants;throw{errorType:i.EVALUATE_EXPRESSION_EXCEPTION,resultInfo:{exception:o.toString()},success:!1}}}};xg.exports=hu});var Ag=G((S_,Pg)=>{"use strict";var KI=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(){me()},window.addEventListener("unload",window.__unloadNavigator);let o=["keydown","keyup","keypress"],i=15;function a(P){try{if(!t)return;let O=new CustomEvent("textInput",{bubbles:!0,cancelable:!0});return P.eventData&&(O.data=P.eventData.data),O}catch{}}function c(P){try{let O=document.createEvent("TextEvent");O.data=P.eventData.data;let U=1,V=P.eventData.locale||"en-US";return O.initTextEvent("textInput",!0,!0,window,P.eventData.data,U,V),O}catch{}}function u(P){return a(P)||c()}function d(P,O,U){try{return new KeyboardEvent(P,{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 p(P,O,U){try{let V=document.createEvent("KeyboardEvent");return V.initKeyEvent(P,!0,!0,null,Boolean(U.ctrl),Boolean(U.alt),Boolean(U.shift),Boolean(U.meta),O.key||"",0),V}catch{}}function m(P,O,U){try{let V=document.createEvent("Events");return V.initEvent(P,!0,!0),V.altKey=Boolean(U.alt),V.ctrlKey=Boolean(U.ctrl),V.metaKey=Boolean(U.meta),V.shiftKey=Boolean(U.shift),V.keyCode=O.key||"",V}catch{}}function f(P,O,U){return d(P,O,U)||p(P,O,U)||m(P,O,U)}function h(P){let O=o.indexOf(P.event);if(typeof O!="number"||O<0)return null;let U=P.eventData,V=U.modifiers||{},pe=f(P.event,U,V);return Object.defineProperties(pe,{keyCode:{enumerable:!0,get(){return this._keyCode_}},charCode:{enumerable:!0,get(){return this._charCode_}},which:{enumerable:!0,get(){return this._keyCode_}}}),pe._keyCode_=U.keyCode,pe._charCode_=U.charCode||0,pe}function g(P){return P.event==="textInput"?u(P):h(P)}function y(P,O){return function(){var V;return P.event==="textInput"&&!((V=O.quirks)!=null&&V.isAuth0Form)}()}function b(P,O){return P.event==="keyup"&&O.event==="keydown"?i:0}function C(P,O,U){let V=b(O,U);return Math.min(U.timeStamp-O.timeStamp,V)}function w(P){let O=Object.getOwnPropertyDescriptor(P,"value");if(!O)return;let U=P.value;P.value=`${U}#`,O.configurable&&delete P.value,P.value=U;let V=document.createEvent("HTMLEvents");V.initEvent("input",!0,!1),P.dispatchEvent(V),Object.defineProperty(P,"value",O)}function T(P){if(P.isInput)try{if(w(P.element),t)P.element.dispatchEvent(new Event("change"));else{let O=document.createEvent("HTMLEvents");O.initEvent("change",!1,!0),P.element.dispatchEvent(O)}}catch{}}function I(P,O,U){U?setTimeout(()=>{L(P)},C(P,O,U)):(window.__unloadNavigator&&window.removeEventListener("unload",window.__unloadNavigator),T(P),me())}function k(P,O){return(P==="change"||P==="blur")&&O.element.tagName==="OPTION"}function M(P,O,U){return k(P.type,O)?O.element.parentElement:U.locatedElement?getLocatedElement(U.locatedElement):O.element}function E(P,O){let U=P.firstChild,V;for(;U;){if(U.nodeType===3){if(O.offset--<=0)return U}else if(U.nodeType===1&&(V=E(U,O),V))return V;U=U.nextSibling}return null}function _(P,O){if(!(!P||!O)){if(!isNaN(O.start))P.selectionStart=O.start,P.selectionEnd=O.end;else if(!isNaN(O.nodeOffset)){let U;if(P.firstChild?U=E(P,{offset:O.nodeOffset}):U=P,U){let V=window.getSelection(),pe=document.createRange();try{V.removeAllRanges(),pe.setStart(U,O.textOffset),pe.setEnd(U,O.textOffset),V.addRange(pe)}catch{}}}}}function x(P,O,U){if(O.isFocusable&&O.isSelectable(P)&&P.type!=="submit")try{_(O.element,U.eventData.selection)}catch{}let V=M(P,O,U);if(!V)throw new Error("could not find element");P.type==="submit"&&V.action?V.submit():V.dispatchEvent(P)}function L(P){let O,U=P.events[P.eventIndex],V=P.events[++P.eventIndex];try{O=g(U)}catch(pe){return Ct(`exception in get event in text step:${pe.message}`)}if(y(U,P))return I(P,U,V);if(O)try{x(O,P,U)}catch(pe){return Ct(`exception in executeEvent in text step:${pe.message}`)}else if(P.noEventExecuter)P.noEventExecuter(P,U);else return Ct(`cannot execute event ${U.event}`);I(P,U,V)}function B(P){let O=P.tagName;return O==="INPUT"||O==="TEXTAREA"}function H(P){return P.getAttribute?Boolean(P.getAttribute("contenteditable")==="true"):!1}function X(P,O){if(P.isInput){P.element.value=O.eventData.text;let U=document.createEvent("Event");U.initEvent("input",!0,!1),P.element.dispatchEvent(U)}else P.isContentEditable&&(P.element.innerHTML=O.eventData.text)}function Z(){var O;let P=document.activeElement;for(;(O=P.shadowRoot)!=null&&O.activeElement;)P=P.shadowRoot.activeElement;return P}function me(P){let O={status:"done",result:P,success:!0};n.isNonTextableElemnet&&(O.reason="Set text on non input element"),e(O)}function Ct(P){P=P||{};let O={status:"failed",result:P,success:!1};n.isNonTextableElemnet&&(O.reason="Set text on non input element"),e(O)}try{n.isInput=B(n.element),n.isContentEditable=H(n.element),!n.isInput&&!n.isContentEditable&&(n.isNonTextableElemnet=!0),n.isFocusable=n.isInput||n.isContentEditable,n.isSelectable=function(P){return P.type!=="keyup"},n.noEventExecuter=X}catch(P){Ct(`exception in set text step:${P.message}`);return}let Kr=Z();dispatchFocus(s.elementToFocusLocatedElement,Kr),L(n)};Pg.exports=KI});var _g=G((I_,kg)=>{"use strict";var JI=ae(),XI=Ag(),YI=hi(),{extractElementId:gu,delay:QI}=(F(),D(q)),yu=class extends JI{async setValueNative(){let e=this.context,t=this.getTarget();return this.step.delayBetweenChars?(await this.driver.elementIdClear(gu(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 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=`
398
401
  var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
399
- var dispatchFocus = ${YI};
400
- var setText = ${XI.toString()};
402
+ var dispatchFocus = ${Ss};
403
+ var setText = ${Ng.toString()};
401
404
  var eventData = arguments[0];
402
405
  var done = arguments[1];
403
406
  return setText.call(null, eventData, done);
404
- `,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(gu(t.seleniumElement),e[r]),r<e.length-1&&await QI(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(gu(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()}};kg.exports=yu});var Lg=G((R_,Og)=>{"use strict";var ZI=function(s,e){var d;function t(p,m){let f=`data-testim-${p}`,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)||"{}"),b=Object.assign({},y,m);window.sessionStorage.setItem(f,JSON.stringify(b))}catch(y){let b=y.message.toLowerCase().includes("quota"),C=y.message===h;if(y.message.includes("sessionStorage")||y.message.includes("The operation is insecure")||b||C){let w=document.head.querySelector("#testim-storage-backup");w||(w=document.createElement("meta"),w.id="testim-storage-backup",document.head.append(w));let T=JSON.parse(w.getAttribute(f)||"{}"),I=Object.assign({},T,m);if(w.setAttribute(f,JSON.stringify(I)),b||C){try{window.sessionStorage.removeItem(f)}catch{}(window.TSTA=window.TSTA||{}).useFallbackStorage=!0}return}throw y}}function r(p){return p.function?p.function.args.map(m=>m!=null&&m.locatedElement?getLocatedElement(m.locatedElement):m):p.directParams.map(m=>m.selector?document.querySelector(m.selector):m.value).concat(p.otherParams)}function n(p,m){function f(){return p.apply(this,m)}return f.prototype=p.prototype,new f}let o={},i={},a={},c=s.functionParams,u=s.transactionId;try{let p=r(s);p.push(o,i,a);let m=((d=s.function)==null?void 0:d.params)||c,h=(e||n(Function,m)).apply(null,p);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(p){t(u,{status:"failed",success:!1,result:{resultValue:p.toString(),exports:o,exportsTest:i,exportsGlobal:a}})}};Og.exports=ZI});var bi=G((x_,Dg)=>{"use strict";var Ng=require("lodash"),eR=(F(),D(q)),tR=ae(),rR=(F(),D(q)),sR=Lg(),{getLogger:nR}=(j(),D(nt)),{featureFlagsService:wu}=(we(),D(Yt)),bu=nR("base-js-step-action"),Tu=class extends tR{isExceedingMaxResultSize(e,t){try{let r=t.project.defaults.enforceMaximumJsResultSize,n=wu.flags.maximumJsResultSize.getValue(),o=JSON.stringify(e).length>n;return r?o:(o&&bu.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=>{Ng.isObject(o)&&rR.removePropertyFromObject(o,"seleniumElement",Ng.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){bu.warn("failed to get js status",{err:u}),i={value:{status:"exception"}}}let a;try{a=JSON.parse(i?i.value:"{}")}catch{bu.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 eR.delay(r),o()):{success:!0})}return o()}executeInAut(e){let t=wu.flags.experimentalPreCodeCompilation.isEnabled(),r=wu.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
+ `,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(",")}) {
405
408
  ${e.code}
406
409
  };`:`function(${u.join(",")}) {
407
410
  ${e.code}
408
411
  };`,n.function.params.pop()}let{codeSnippets:a}=this.sessionPlayerInit,c=`
409
412
  ${o?`var getLocatedElement = ${a.getLocatedElementCode};`:";"}
410
- var runCode = ${sR.toString()};
413
+ var runCode = ${Ug.toString()};
411
414
  var eventData = arguments[0];
412
415
  var funcToRun = ${i};
413
416
  return runCode.call(null, eventData, funcToRun);
414
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(`
415
- Build info`),n=e.seleniumStack.orgStatusMessage.slice(0,r===-1?void 0:r);throw new Error(n)}throw e}};Dg.exports=Tu});var Ug=G((C_,Mg)=>{"use strict";var oR=bi(),vu=class extends oR{isFailedResult(e){return e===!1}};Mg.exports=vu});var jg=G((P_,Fg)=>{"use strict";var iR=bi(),Eu=class extends iR{isFailedResult(e){return!e}};Fg.exports=Eu});var $g=G((A_,Bg)=>{"use strict";var{extractElementId:aR}=(F(),D(q)),cR=ae(),lR={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"},Su=class extends cR{setWithValueApi(e){let t=this.getTarget();return t!=null&&t.seleniumElement?this.driver.elementIdValue(aR(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(lR[t]),this.setWithValueApi(e)}};Bg.exports=Su});var qg=G((k_,Wg)=>{"use strict";Wg.exports=function(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 Vg=G((__,Gg)=>{"use strict";var uR=ae(),dR=qg(),{extractElementId:pR}=(F(),D(q)),{featureFlagsService:mR}=(we(),D(Yt)),Iu=class extends uR{async performAction(){var p,m;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((p=this.step.element)==null?void 0:p.isShadowed);if(!i||i&&o>=13&&!a)try{return await this.driver.elementIdClick(pR(t))}catch(f){if(!f.message.includes("Cannot check the displayedness of a non-Element argument"))throw f}let c=mR.flags.safariSelectOptionDispatchEventOnSelectElement.isEnabled(),u=`
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=`
416
419
  var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
417
420
  var isNativeFunction = ${this.sessionPlayerInit.utils.isNativeFunction.toString()};
418
- var selectOption = ${dR.toString()};
421
+ var selectOption = ${Wg.toString()};
419
422
  return selectOption.apply(null, arguments);
420
- `;return(m=(await this.driver.executeJSWithArray(u,[r,c])).value)!=null&&m.success?{success:!0}:{success:!1}}};Gg.exports=Iu});var zg=G((O_,Hg)=>{"use strict";var fR=ae(),Ru=class extends fR{async performAction(){await this.driver.submitForm(this.getTarget().seleniumElement)}};Hg.exports=Ru});var Jg=G((L_,Kg)=>{"use strict";var hR=ae(),gR=(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(){}}),xu=class extends hR{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:p,y:m}=u;this.sessionPlayerInit.utils.isWithinTargetRect(gR(i,o,0,0),p,m)&&(a=p,c=m)}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}}};Kg.exports=xu});var Yg=G((N_,Xg)=>{"use strict";var yR=function(s,e){function r(a,c){function u(h,g,y){return y>h&&y<g}let d=a.pointerPosition||{},p=c.getBoundingClientRect(),m=d.originX&&u(p.left,p.left+p.width,d.originX)?d.originX:p.left+p.width/2,f=d.originY&&u(p.top,p.top+p.height,d.originY)?d.originY:p.top+p.height/2;return{x:m,y:f}}function n(a,c,u){let d=r(a,u),p=(c==null?void 0:c.modifiers)||{},m={deltaX:a.deltaX,deltaY:a.deltaY,deltaZ:a.deltaZ,deltaMode:a.deltaMode,clientX:d.x,clientY:d.y,bubbles:!0,cancelable:!0,ctrl:Boolean(p.ctrl),alt:Boolean(p.alt),shift:Boolean(p.shift),meta:Boolean(p.meta)};return new WheelEvent("wheel",m)}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),p=a[0]?Math.min(a[0].timeStamp-u.timeStamp,200):200;c.dispatchEvent(d),setTimeout(()=>{o(a,c)},p)}let i=getLocatedElement(s.locatedElement);o(s.events,i)};Xg.exports=yR});var Zg=G((D_,Qg)=>{"use strict";var wR=ae(),bR=Yg(),Cu=class extends wR{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(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=`
421
424
  var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
422
- var wheel = ${bR.toString()};
425
+ var wheel = ${zg.toString()};
423
426
  var eventData = arguments[0];
424
427
  var done = arguments[1];
425
428
  return wheel.call(null, eventData, done);
426
- `;return{success:((c=(await this.driver.executeCodeAsync(i,o,n)).value)==null?void 0:c.state)==="success"}}};Qg.exports=Cu});var ty=G((M_,ey)=>{"use strict";var TR=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(p){d in c||(c[d]=p,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)})};ey.exports=TR});var sy=G((U_,ry)=>{"use strict";var vR=ae(),ER=ty(),{getLogger:SR}=(j(),D(nt)),{featureFlagsService:IR}=(we(),D(Yt)),RR=SR("drop-file-step-action"),Pu=class extends vR{async performAction(){let{codeSnippets:e,utils:t}=this.sessionPlayerInit,r=this.context.data[this.step.targetId||"targetId"],n=IR.flags.overrideAzureStorageUrl.isEnabled(),o=await t.addTokenToFileUrl(this.context.project.id,this.step.fileUrls,this.stepActionUtils.testimServicesApi,n,RR),i=`
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=`
427
430
  var getLocatedElement = ${e.getLocatedElementCode};
428
431
  var createDropEvent = ${e.createDropEvent.toString()};
429
- var downloadFileAndFireDropEvent = ${ER.toString()};
432
+ var downloadFileAndFireDropEvent = ${Xg.toString()};
430
433
  return downloadFileAndFireDropEvent.apply(null, arguments)
431
- `;return await this.driver.executeJSWithArray(i,[r.locatedElement,o])}};ry.exports=Pu});var iy={};$(iy,{downloadFilesAndUploadToGrid:()=>_R,getVisibleElementScript:()=>CR});function CR(s={width:"2px",height:"2px",left:"0px",top:"400px"}){return`function getVisibleElement(locatedElement) {
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) {
432
435
  var input = getLocatedElement(locatedElement);
433
436
  if(input) {
434
437
  function parents(element, _elements) {
@@ -470,14 +473,7 @@ Build info`),n=e.seleniumStack.orgStatusMessage.slice(0,r===-1?void 0:r);throw n
470
473
  input.removeAttribute("disabled");
471
474
  input.focus();
472
475
  }
473
- }`}async function PR(s,e){let t=null;try{t=(await Ma(s)).body}catch(n){if(xR.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=`${ny.tmpdir()}/${e}`;return await oy.promises.writeFile(r,t),r}function AR(s){return ue(s,e=>PR(e.url,e.name))}function kR(s,e){return e(s)}async function _R(s,e){let t=await AR(s),r=await ue(t,n=>kR(n,e));return Array.isArray(r)&&r.map(n=>n==null?void 0:n.value)}var ny,oy,xR,ay=S(()=>{"use strict";ny=v(require("os"));Tt();oy=require("fs");F();j();xR=A("input-file-utils")});var uy=G((B_,ly)=>{"use strict";var OR=ae(),cy=(ay(),D(iy)),{getLogger:LR}=(j(),D(nt)),{extractElementId:NR,download:DR}=(F(),D(q)),{featureFlagsService:Ti}=(we(),D(Yt)),vi=LR("input-file-step-action"),Au=class extends OR{uploadFile(e){return this.driver.uploadFile(e)}forceInputToBeVisible(e,t){vi.info("workaround - stepaction - move element to visible position");let r=`
474
- var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
475
- var getVisibleElement = ${cy.getVisibleElementScript(t)};
476
- return getVisibleElement.apply(null, arguments);
477
- `;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 vi.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",p="is not reachable by keyboard",m=r?r.message:"";if(m===u||m.startsWith(d)||m.startsWith(n)||m.startsWith(o)||m.startsWith(i)||m.includes(p)||m.includes(a)||m.includes(c)){await this.forceInputToBeVisible(t),await this.uploadFiles(e,t);return}throw vi.error("failed to set input file",{err:r}),r}}async uploadFiles(e,t){for(let r of e)await this.driver.elementIdValue(NR(t.seleniumElement),r)}async performAction(){let e=this.context.data[this.step.targetId||"targetId"],t=Ti.flags.overrideAzureStorageUrl.isEnabled(),r=Ti.flags.useJsInputCodeInSafari.isEnabled(),n=Ti.flags.useJsInputCodeInFirefox.isEnabled(),o=Ti.flags.downloadToBase64.isEnabled(),i=await this.sessionPlayerInit.utils.addTokenToFileUrl(this.context.project.id,this.step.fileUrls,this.stepActionUtils.testimServicesApi,t,vi),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:p})=>{let m=await DR(p);return{name:d,url:`data:${m.type};base64,${Buffer.from(m.body).toString("base64")}`}}))),a||c){await this.driver.executeJSWithArray(`
478
- const getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
479
- const downloadAndUploadFile = ${MR()};
480
- return downloadAndUploadFile.apply(null, arguments);`,[e.locatedElement,i]);return}let u=await cy.downloadFilesAndUploadToGrid(i,this.uploadFile.bind(this));await this.uploadFilesAndForceVisibility(u,e)}};ly.exports=Au;function MR(){return`async function downloadAndUpload(locatedElement, fileUrls) {
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) {
481
477
  const fileIsNative = typeof window.File === 'function' && (window.File.toString().indexOf('native code') > -1);
482
478
  const File = fileIsNative ? window.File : (function obtainSafeGlobals() {
483
479
  const attachTo = document.body || document.documentElement;
@@ -554,17 +550,21 @@ Build info`),n=e.seleniumStack.orgStatusMessage.slice(0,r===-1?void 0:r);throw n
554
550
  element.dispatchEvent(new Event("change", { bubbles: true }));
555
551
  }
556
552
  element.removeEventListener("change", changeFiredHandler, true);
557
- }`}});var py=G(($_,dy)=>{"use strict";var UR=ae(),ku=require("url"),_u=class extends UR{async updateBaseUrl(e){let t=ku.parse(e),r=ku.parse(this.context.recordedBaseUrl),n=ku.parse(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)}};dy.exports=_u});var fy=G((W_,my)=>{"use strict";var FR=ae(),{delay:jR}=(F(),D(q)),Ou=class extends FR{async performAction(){await jR(this.step.durationMS)}};my.exports=Ou});var gy=G((q_,hy)=>{"use strict";var BR=ae(),Lu=class extends BR{async execute(){try{return await this.driver.reloadTab(),{success:!0}}catch(e){return{success:!1,reason:e.message}}}};hy.exports=Lu});var wy=G((G_,yy)=>{"use strict";var $R=ae(),Nu=class extends $R{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}}};yy.exports=Nu});var Ty=G((V_,by)=>{"use strict";var WR=ae(),Du=class extends WR{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}}};by.exports=Du});var Ey=G((H_,vy)=>{"use strict";var qR=ae(),{execute:GR}=(Ei(),D(An)),Mu=class extends qR{async performAction(){return await GR(this.step,this.context,this.driver,this.stepActionUtils.testimServicesApi.authenticationManager.getLoggedUserInfo(),this.frameHandler.frameManager)}};vy.exports=Mu});var Iy={};$(Iy,{eyeSdkService:()=>VR});function nr(s){if(Br.has(s,"elementId"))return s.elementId;if(Br.has(s,$t))return s[$t];if(Br.has(s,Si))return s[Si]}var Br,Sy,Si,Uu,Fu,VR,Ry=S(()=>{"use strict";Br=v(require("lodash")),Sy=require("@applitools/eyes-sdk-core");Jr();Xn();Ee();Si="ELEMENT";Uu=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[Si])}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=nr(e.value||e);return{[$t]:t,[Si]:t}}transformSelector(e){return Br.has(e,"selector")?Br.has(e,"type")?e.type==="css"?`css selector:${e.selector}`:`${e.type}:${e.selector}`:e.selector:e}extractSelector(e){return Br.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=nr(t),o=nr(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(nr(r),t):await e.element(t);return n}async findElements(e,t,r){let{value:n}=r?await e.elementIdElements(nr(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(nr(t))}async hover(e,t,r){this.isSelector(t)&&(t=await this.findElement(e,t)),await e.moveTo(nr(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(nr(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)}},Fu=class{constructor(){let{EyeSdkBuilder:e}=ie(),t=vp["@applitools/eyes-sdk-core"]||"N/A";this.sdk=(0,Sy.makeSDK)({name:"Testim.io",version:`4.0.0/eyes-sdk-core/${t}`,spec:new Uu}),this.handleApplitoolsSdkResult=e.handleApplitoolsSdkResult}async getManager(e,t,r,n){let{EyeSdkBuilder:o}=ie(),i=await this.sdk.makeManager({type:e?"vg":"classic",concurrency:t});return o.rememberCreatedBatch(r,n),i}},VR=new Fu});var Ay=G((X_,Py)=>{"use strict";var HR=require("lodash"),zR=ae(),{eyeSdkService:xy}=(Ry(),D(Iy)),{getLogger:KR}=(j(),D(nt)),Cy=KR("pixel-validation-step-action"),ju=class extends zR{async performAction(){var d,p;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=((p=t.batch)==null?void 0:p.id)||n,a=await xy.getManager(e,this.context.config.applitoolsConcurrency||5,i,this.runContext.applitoolsIntegrationData),c=this.getTarget()||{},u;try{let m=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"};HR.isPlainObject(o.applitoolsStepSettings)&&(Object.assign(h,o.applitoolsStepSettings),Cy.info("Applitools SDK step executed with applitoolsStepSettings parameter",{applitoolsStepSettings:o.applitoolsStepSettings})),await m.check({settings:h}),u={isApplitoolsSdkResult:!0,success:!0,eyesResults:await m.close()}}catch(m){Cy.error("Applitools SDK step failed",{err:m,info:m.info}),u={isApplitoolsSdkResult:!0,success:!1,err:m}}return await xy.handleApplitoolsSdkResult(this.context,u,this.step)}};Py.exports=ju});var $u=G((Y_,ky)=>{"use strict";var JR=(F(),D(q)),XR=bi(),YR=(Fr(),D(Ur)),Bu=class extends XR{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,p={config:t.config,data:t.data},m=t.data.timeToPlayStep,f=await YR.runCodeWithPackages(o,i,a,p,c,u,d,m);return await this.checkCodeResponse(f)}async performAction(){try{return await this.executeCliCode()}catch(e){let{stepResult:t}=this.sessionPlayerInit.commonConstants;return e instanceof JR.TimeoutError?{success:!1,errorType:t.ACTION_TIMEOUT}:{success:!1,reason:e.message,exception:e}}}};ky.exports=Bu});var Oy=G((Q_,_y)=>{"use strict";var QR=$u(),Wu=class extends QR{isFailedResult(e){return e===!1}};_y.exports=Wu});var Ny=G((Z_,Ly)=>{"use strict";var ZR=$u(),qu=class extends ZR{isFailedResult(e){return!e}};Ly.exports=qu});var My=G((eO,Dy)=>{"use strict";var ex=ae(),{NpmPackageError:tx}=(z(),D(Yn)),rx=(Fr(),D(Ur)),sx=(F(),D(q)),Gu=class extends ex{async performAction(){let{context:e}=this,{stepId:t,packageData:r,resultId:n,retryIndex:o,stepResultId:i,timeToPlayBeforeExec:a}=e;try{return{data:await rx.installPackage(t,n,o,r,i,a),success:!0}}catch(c){return c instanceof tx?{success:!1,code:"invalid-node-package",message:c.message}:c instanceof sx.TimeoutError?{success:!1,code:"timeout"}:{success:!1,reason:c.message,exception:c}}}};Dy.exports=Gu});var Fy=G((tO,Uy)=>{"use strict";var nx=ae(),Vu=class extends nx{async performAction(){return{success:"skipped",reason:"This step can run only on Chrome"}}};Uy.exports=Vu});var By=G((rO,jy)=>{"use strict";var ox=ae(),Hu=class extends ox{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()}}};jy.exports=Hu});var Wy=G((sO,$y)=>{"use strict";var ix=ae(),zu=class extends ix{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()}}};$y.exports=zu});var Xu=G((nO,zy)=>{"use strict";var Hy=ag(),ax=dg(),cx=Sg(),qy=Rg(),lx=Cg(),ux=_g(),Es=Ug(),Ku=jg(),dx=$g(),px=Vg(),mx=zg(),fx=Jg(),hx=Zg(),gx=sy(),yx=uy(),wx=py(),bx=fy(),Tx=gy(),Gy=wy(),vx=Ty(),Ex=Ey(),Vy=Ay(),kn=Oy(),Sx=Ny(),Ix=My(),Ju=Fy(),tt=By(),Rx=Wy();function xx(s,e){Object.keys(s).forEach(t=>{e.registerStepAction(t,s[t])})}var Cx={locate:Hy,scroll:ax,mouse:cx,submit:mx,text:ux,"special-key":dx,"user-code":Es,"validation-code-step":Es,"wait-for-code-step":Es,"action-code-step":Es,"condition-step":Ku,"skip-code-step":Ku,"element-code-step":Ku,"evaluate-expression":lx,"text-validation":qy,"wait-for-text-validation":qy,"select-option":px,"drop-file":gx,"input-file":yx,hover:fx,navigation:wx,wheel:hx,sleep:bx,refresh:Tx,"api-validation":Gy,"api-action":Gy,"api-code-step":Es,"extract-text":vx,"simple-ui-verification":Vy,"wait-for-simple-ui-verification":Vy,"cli-validation-download-file":Ju,"cli-wait-for-download-file":Ju,"network-validation-step":Ju,"cli-validation-code-step":kn,"cli-wait-for-code-step":kn,"cli-action-code-step":kn,"cli-api-code-step":kn,"cli-condition-step":Sx,"node-package":Ix,"email-code-step":Es,"cli-email-code-step":kn,"tdk-hybrid":Ex,"sfdc-recorded-step":Rx,"sfdc-step-login":tt,"sfdc-step-loginas":tt,"sfdc-step-logout":tt,"sfdc-step-sobjectcreate":tt,"sfdc-step-sobjectdelete":tt,"sfdc-step-findrecord":tt,"sfdc-step-quickaction":tt,"sfdc-step-sobjectedit":tt,"sfdc-step-sobjectvalidate":tt,"sfdc-step-launchapp":tt,"sfdc-step-closeconsoletabs":tt,"sfdc-step-relatedlistaction":tt};zy.exports=function(s,e,t){xx(Cx,e),e.registerLocateStepActionUtils&&e.registerLocateStepActionUtils(Hy.getUtils(s))}});var Yu,Ss,Qu=S(()=>{"use strict";j();Yu=A("cookies-utils"),Ss=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 Yu.error("failed to set cookie",{err:r}),r}}async get(e){try{return await this.driver.getCookie(e.name)}catch(t){throw Yu.error("failed to get cookie",{err:t}),t}}async remove(e){try{return await this.driver.deleteCookie(e.name)}catch(t){throw Yu.error("failed to remove cookie",{err:t}),t}}}});var Zu,Px,Is,ed=S(()=>{"use strict";F();Zu=v(require("p-retry"));F();j();z();Px=A("window-utils"),Is=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 Px.warn("selenium navigation failed. retrying to navigate",{err:i}),await he(1500),n(o-1);throw i}}return Promise.race([n(),he(t)])}reloadTab(e=15e3){return Promise.race([this.driver.reloadTab(),he(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 he(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 it("validatePageIsAvailable:PageNotAvailableError")}focusTab(){return this.driver.switchTab(this.id)}quit(){}async getOsAndBrowser(){let e=await(0,Zu.default)(()=>this.driver.getBrowserAndOS(),{retries:3});return{uaBrowserName:e.browser,uaOs:e.os,userAgent:e.userAgent,browserVersion:e.browserVersion}}getUserAgentInfo(){return(0,Zu.default)(()=>this.driver.getUserAgentInfo(),{retries:3})}}});var td,Ii,Ky=S(()=>{"use strict";td=v(require("p-retry")),Ii=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,td.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,td.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 Jy(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 Ax.warn("missing elementRect",Yy.omit(s,"image")),{};let{elementRect:i}=s,a=await Rs.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,p=i.height*r;c<0&&(d+=c,d=d<0?0:d,c=0),u<0&&(p+=u,p=p<0?0:p,u=0);let m=a.bitmap.width,f=a.bitmap.height;if(c+d>m&&(d=m-c),u+p>f&&(p=f-u),p<=0||d<=0)throw new _n("height or width is equal or lower than zero");return{elementImage:await a.crop(c,u,d,p).getBase64Async(Rs.default.MIME_PNG)}}async function kx(s,e){let t=await Rs.default.read(s.width,s.height);for(let n of e){let o=n.image.match(/^data\:[^;]*\;base64,(.*)$/),i=await Rs.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(Rs.default.MIME_PNG)}function _x(s,e){return kx(s,e)}function Ox(){return Promise.resolve()}function Lx(s){function e(r){return typeof s[r]=="string"&&s[r].startsWith("data")}function t(r){return Ox(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 Xy(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 Yy,Rs,Ax,_n,Ri,Qy=S(()=>{"use strict";Yy=v(require("lodash"));F();Rs=v(require("jimp"));j();Ax=A("image-capture-utils"),_n=class extends Error{constructor(e){super(e),this.rectIsOutsideOfImageError=!0,Object.setPrototypeOf(this,_n.prototype)}};Ri=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 Jy(e,t);return r.screenImage=t.image,r.absoluteScreenHighlight=Xy(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 Lx({screenImage:t.image,absoluteScreenHighlight:Xy(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=()=>he(250),o=Boolean(e);async function i(m,f){o?await t.scrollToPositionWithoutAnimation(m):await t.scrollToPosition(m),await n();let h=await r.takeScreenshot(),g=await Jy({elementRect:f},h);return{position:{left:m.x+f.left,top:m.y+f.top},size:{width:f.width,height:f.height},image:g.elementImage}}async function a(m){let f=[];for(let h of m){let g=await i(h.scrollPos,h.cropData);f.push(g)}return f}function c(m,f){let h=Math.max(m.width,f.width),g=f.width,y=Math.max(m.height,f.height),b=f.height,C=Array.from({length:Math.ceil(h/g)},(T,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))})),w=Array.from({length:Math.ceil(y/b)},(T,I)=>({scrollY:Math.min(I*b,y-b),cropY:I*b-Math.min(I*b,y-b),cropH:b-(I*b-Math.min(I*b,y-b))}));return C.flatMap(T=>w.map(I=>({scrollPos:{x:T.scrollX,y:I.scrollY},cropData:{top:I.cropY,left:T.cropX,width:T.cropW,height:I.cropH}})))}async function u(m,f){let h=await t.getCurrentScrollPosition(),g=c(m,f),y=await a(g);return await t.scrollToPosition(h),_x(m,y)}let[d,p]=await Promise.all([t.getFullPageSize(),t.getViewportSize()]);return await u(d,p)}}});var Zy,xi,Ci,ew=S(()=>{"use strict";Zy=v(require("semver"));F();j();ed();Ky();Qy();Ee();xi=A("tab-service"),Ci=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),xi.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 Is(t,this.driver);this._utils[i]={attachDebugger:()=>Promise.resolve(),detachDebugger:()=>Promise.resolve(),onDebuggerDetached:()=>{},tabId:t,domUtils:{getDOM:()=>Promise.resolve()},windowUtils:a,imageCaptureUtils:new Ri(t,a,new Ii(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}=ie(),i=o.urlBreaker(e.url||e.currentUrl),a=o.urlBreaker(t.url||t.currentUrl),c=n(i),u=n(a),d=r.map(p=>o.urlBreaker(p)).map(p=>n(p)).filter(p=>p===c);return c===u&&d.length===1}isSameTab(e,t,r){let{tabMatcher:n}=ie();if(n){let u=this.getAllTabInfos(e),d=Object.keys(u).map(p=>u[p]);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=>(xi.error("failed to get url or title",{err:o}),{title:"",url:""}))}).catch(n=>{xi.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 he(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]?(xi.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=Zy.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}=ie();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 p=this.getTabInfo(e,d);return this.isSameTab(e,p,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(p=>u.message.toLowerCase().includes(p)))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 rd,Pi,sd=S(()=>{"use strict";rd=class{constructor(){}select(){return console.log(`
558
- internal error - cant use port selector in selenium!!!!
559
- `),Promise.reject({reason:"cant use port selector in selenium!"})}prepare(){}handleLegacyDataCaching(){}},Pi=new rd});var xs,nd=S(()=>{"use strict";Qu();Ee();xs=class{constructor(e,t){this.driver=e,this._abortedSteps=[],this.cookieUtils=t||new Ss(this.driver)}get sessionPlayerInit(){return ie()}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 rw(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=tw(r.seleniumFrameElement);n&&this.cacheResults(n,r.frameLocateResultUrl)}}async foundFrameCallback(r,n,o){let{frameOffset:i,locatedElement:a}=r,{locatorBuilderUtils:c}=ie();if(c.isEmptyResult(a)){let m="got empty result in frame result, not rejected from locate element player";throw Nx.error(m),new Error(m)}let u=await s.switchToLocatedFrame(a),d=tw(u.value),p=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:p}}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:p}=i.data[r.targetId];return s.getElementLocationWithPadding(p).then(m=>{let f=m.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=W.flags.enableFrameSwitchOptimization.isEnabled(),u=o.playback.resultsHandler.resultsByChronologicOrder.at(-1),d=1,p=Boolean(u)&&u.stepId===r.id&&u.results.length>d;if(a&&!p&&this.currentFrameHandler){let y=n.findIndex(b=>b.testimFrameId===this.currentFrameHandler.testimFrameId);if(y>-1){let b=n.slice(y+1),C=0;for(let w of b)C++,this.currentFrameHandler=await this.locate(w,C,this.currentFrameHandler,o,i,r);return this.currentFrameHandler}}let m=await i.getTopFrameHandler();m.frameOffset={top:0,left:0},await(a&&this.currentFrameHandler===m?this.currentFrameHandler:s.switchToTopFrame()),this.cacheFrameLocateResults(this.currentFrameHandler),this.currentFrameHandler=m;let h=0,g=m;for(let y of n)h++,g=await this.locate(y,h,g,o,i,r);return g}}return e}var Nx,Dx,Mx,tw,sw=S(()=>{"use strict";j();we();Ee();Nx=A("frame-locator"),Dx="ELEMENT",Mx="element-6066-11e4-a52e-4f735466cecf",tw=s=>s?s[Dx]||s[Mx]:null});var Ai,od=S(()=>{"use strict";ce();Ai=()=>{try{if(pa)return!1;if(require("inspector").url())return!0}catch{}return!1}});var id,nw,$r,Ux,ad,Fe,On=S(()=>{"use strict";F();vt();id=v(require("ws")),nw=require("events");j();ce();$r=A("socket-ng-service"),Ux=5e3,ad=class extends nw.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),Ux)}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(ma);return Ht().then(r=>new Promise(n=>{let o={};global.proxyUri&&(o.agent=new global.ProxyAgent(global.proxyUri)),this.ws=new id.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===id.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 ad});var aw={};$(aw,{BaseSocketService:()=>Wr});var iw,cd,Fx,jx,Bx,ow,ki,Wr,_i=S(()=>{"use strict";iw=v(require("p-retry")),cd=v(require("socket.io-client"));ce();F();j();Fx=50,jx=10,Bx=5e3,ow=10*1e3,ki=A("base socket service"),Wr=class{attempts=0;rooms={};emitPromiseQueue=void 0;joinToMultipleResults(){let e=Object.keys(this.rooms);ki.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{}ki.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===jx&&!this.isAllowedWS&&(this._socket.io.opts.transports=["polling"],this._socket.io.opts.upgrade=!1),this.attempts>=Fx)throw new Error(`Can't connect to Testim Servers.
560
- Action required: Please allow opening a websockets connection to ${fe} 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",()=>{ki.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:ow,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=`${fe}/${t}`,this._socket=cd.connect(this.url,r),this.addSocketHandlers(),this._socket.on("connect",n),this._socket.open()})}init(e,t){let r={query:{projectId:e},requestTimeout:ow,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=`${fe}/${t}`,this._socket=cd.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,iw.default)(()=>re(n(),Bx),{retries:200,minTimeout:3e3,factor:1})).finally(()=>{Object.keys(r).length>0&&ki.error("Bad acknowledge from socket emit",{errorneousEvents:r})}),this.emitPromiseQueue}}});var $x,ld,or,cw=S(()=>{"use strict";({BaseSocketService:$x}=(_i(),D(aw))),ld=class extends $x{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}},or=new ld});var uw={};$(uw,{testResultService:()=>ze});var lw,ud,ze,Cs=S(()=>{"use strict";lw=require("events");On();oe();we();cw();ud=class extends lw.EventEmitter{init(e){if(W.flags.useNewWSCLI.isEnabled()){Fe.onConnect=()=>this.emit("socket-connected");return}or.init(e),or.onConnect=()=>this.emit("socket-connected")}joinToTestResult(e,t){return W.flags.useNewWSCLI.isEnabled()?Fe.addFilter(`${e}:testResult`,{resultId:e,testId:t},[Ye.TEST_RESULT_UPDATED,Ye.TEST_RESULT_CREATED]):(or.joinRoom(e,t),or.emitJoinRoom(e,t))}leaveTestResult(e,t){return W.flags.useNewWSCLI.isEnabled()?(Fe.removeFilter(`${e}:testResult`,[Ye.TEST_RESULT_UPDATED,Ye.TEST_RESULT_CREATED]),Promise.resolve()):or.leaveTestResult(e,t)}listenToTestResult(e,t,r){if(W.flags.useNewWSCLI.isEnabled()){Fe.listenTo(`${e}:testResult`,[Ye.TEST_RESULT_UPDATED,Ye.TEST_RESULT_CREATED],n=>n.resultId===e&&n.testId===t,n=>r(n));return}or.listenToTestResult(e,t,r)}getSocket(){if(!W.flags.useNewWSCLI.isEnabled())return or.getSocket()}},ze=new ud});var dd,Ln,pd=S(()=>{"use strict";dd=class{on(){}},Ln=new dd});var dw,Wx,pw,qx,Ps,md=S(()=>{"use strict";dw=v(require("lodash")),Wx=1e3,pw=["simple-ui-verification","wait-for-simple-ui-verification"],qx=[...pw,"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"],Ps=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=qx.includes(e.stepType)?[r]:t(r);this.resetStepVariables(r,n),e.context.data.maxTotalStepTime=r}getStepTimes(){return this.totalStepTimesReport.push(this.currentRetryTimesReport),dw.cloneDeep(this.totalStepTimesReport)}initRetryTime(){this.resetRetryVariables()}getTotalStepRunTime(e){let r=e.context.config.stepTimeout;return pw.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+Wx}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 fd={};$(fd,{SeleniumTestPlayer:()=>Nn});var mw,fw,Nn,Oi=S(()=>{"use strict";F();mw=v(xn()),fw=v(Xu());Qu();ew();sd();nd();sw();od();Ee();Cs();pd();md();Nn=class{constructor(e,t,r,n="code",o=new mw.default,i,a){let{sessionPlayer:c,commonConstants:u,stepActionFactory:d}=ie();this.driver=o,this.id=e;let p=new xs(this.driver);this.stepActionFactory=new d(p),(0,fw.default)(this.driver,this.stepActionFactory,"selenium"),this.tabService=this.driver.tabService||new Ci(this.driver),this.driver.tabService=this.tabService,this.windowCreationListener=Ln,this.playbackTimeoutCalculator=new Ps(Ai()),this.tabService.createSesion(e);let m=rw(this.driver);this.sessionPlayer=new c(e,this.tabService,new Ss(this.driver),Ln,m,Pi,null,null,p,this.stepActionFactory,this.playbackTimeoutCalculator,ze.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}=ie(),t=1e3*60*2;return re(this.driver.end(),t).catch(r=>{if(r instanceof te)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 yw={};$(yw,{buildCodeTests:()=>hd});async function Gx(s,e,t,r,n){try{return await hw(s,e,t,r,n)}catch(o){if((o==null?void 0:o.code)==="ENOENT")return ir.compiler=null,ir.webpackConfig=null,r&&(r.data={}),await hw(s,e,t,r,n);throw o}}async function hw(s,e={mode:"development"},t=void 0,r=void 0,n=void 0){let o=await ge("webpack"),i=ar.cloneDeep(e);e.externals={testim:"__testim"},e.devtool||(e.devtool="inline-source-map"),e.plugins||(e.plugins=[]),e.plugins.push(new o.DefinePlugin(Vx(t)),new o.DefinePlugin({"process.argv":JSON.stringify(process.argv)})),s=s.map(h=>Li.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,b)=>g(y==="md4"?"sha256":y,b)}e.entry=Object.fromEntries(ar.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?(ar.isEqual(ir.webpackConfig,i)&&ir.compiler||(ir.webpackConfig=i,ir.compiler=o(e)),u=ir.compiler):u=o(e);let d=r||new gw.default;u.outputFileSystem=d;let p=ct(h=>{n==null||n.addEventListener("abort",()=>{h(new Me,void 0)})});try{let h=await Promise.race([ct(g=>u.run(g)),p]);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(Li.resolve("./dist",`${a[g]}.bundle.js`)),name:h})).map(({code:h,name:g})=>({code:h.toString(),baseUrl:"",name:Li.resolve(g),testConfig:{},testConfigId:null,testId:K(),resultId:K(),isTestsContainer:!0}))],runName:`Testim Dev Kit Run ${new Date().toLocaleString()}`}}function Vx(s){let e=ar.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":Hx({...t,...e})}}function Hx(s){return Object.fromEntries(Object.entries(s).map(([e,t])=>[e,JSON.stringify(t)]))}var ar,Li,gw,ir,hd,gd=S(()=>{"use strict";ar=v(require("lodash")),Li=v(require("path"));F();gw=v(require("memory-fs"));z();mt();ir={compiler:null,webpackConfig:null};hd=Gx});var Tw={};$(Tw,{compileFunctionsLibrary:()=>vd,findTestFolder:()=>qr,findTests:()=>yd,getLocalLocatorContents:()=>wd,getLocalLocators:()=>Dn,saveLocators:()=>Td,saveTest:()=>bd});async function Dn(){let s=await qr(process.cwd()),e=Ke.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 yd(s=process.cwd()){let e=await qr(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 zx(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 wd(s,e=!1,t=process.cwd()){let r={};if(e){let n=await qr(t);for(let o of Object.values(s))r[o]=rt.promises.readFile(Ke.join(n,"locators",`locator.${o}.json`)).then(JSON.parse)}try{return await zx(r)}catch(n){return console.error(n),{}}}async function bd({body:s,name:e,locators:t,language:r="javascript"}){let n=await qr(process.cwd()),o=Ke.join(n,"locators","locators.js"),i=Ke.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(Ke.join(n,"locators")).catch(()=>{});for(let{id:u,body:d}of t)await rt.promises.writeFile(Ke.join(n,"locators",`locator.${u}.json`),JSON.stringify(d));let a=Object.fromEntries(t.map(({name:u,id:d})=>[u,d])),c=await Dn();Object.assign(c,a),await bw(o,c)}async function bw(s,e){let t=`module.exports = {
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=`
554
+ var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
555
+ var getVisibleElement = ${ty(t)};
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(`
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 = {
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 Td(s,{mergeIntoExisting:e}={mergeIntoExisting:!1}){let t=await qr(process.cwd()),r=Ke.join(t,"locators","locators.js");await rt.promises.mkdir(Ke.join(t,"locators")).catch(()=>{});for(let{name:o,id:i,elementLocator:a}of s)await rt.promises.writeFile(Ke.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 Dn();Object.assign(n,o)}await bw(r,n)}async function vd({fileSystem:s,bypassWebpack:e}={},t=void 0){let r=await qr(process.cwd());if(t!=null&&t.aborted)throw new Me;let n=Ke.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 hd([n],{output:{libraryTarget:"umd",library:"tdk",globalObject:"globalThis"},cache:{type:"memory"},mode:"development"},{},s,t)).tests[0][0].code}var ww,Ke,rt,qr,Ed=S(()=>{"use strict";ww=v(require("lodash")),Ke=v(require("path")),rt=require("fs");z();gd();qr=ww.memoize(async s=>(await rt.promises.readdir(s)).includes("tests")&&(await rt.promises.stat(Ke.join(s,"tests"))).isDirectory()?Ke.join(s,"tests"):s)});var vw={};$(vw,{getArgumentsFromContext:()=>Gr});async function Gr(s,e,t){let r=Kx(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 Kx(s,e){let t=[];for(let r of s){let n=e.functionParameters.indexOf(r);t.push(e.functionArguments[n])}return t}var Mn=S(()=>{"use strict"});var Sw={};$(Sw,{execute:()=>Yx});async function Qx(s,e,t,r,n,o){var a;let i;try{let{WebDriver:c}=await Jx("selenium-webdriver");if(o.aborted)throw new Ew;let{Executor:u,HttpClient:d}=require("selenium-webdriver/http"),p=s.driver.client.requestHandler.defaultOptions,m=s.driver.client.requestHandler.startPath,h=`${p.protocol}://${p.hostname}:${p.port}`+m,g=new d(h),y=new c(s.getSessionId(),new u(g));await Zx(y,s.driver);let C=await Xx(t,r,T=>y.findElement({css:T.selector})),w=e.bind(null,y,...C);return i=function(){g.send=async function(){throw new Ew}},o.addEventListener("abort",i),await w(),{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 Zx(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 Ew,Jx,Xx,Yx,Iw=S(()=>{"use strict";({AbortError:Ew}=(z(),D(Yn))),{lazyRequire:Jx}=(mt(),D(cl)),{getArgumentsFromContext:Xx}=(Mn(),D(vw)),Yx=Qx});var Rw={};$(Rw,{execute:()=>eC});async function tC(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(),p;for(let y of d)if(await y.evaluate(()=>window.__isMainTestimTab)){p=y;break}let m=p||d.at(-1),h=await Gr(t,r,y=>m.$(y.selector));return await e.bind(null,m,...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 eC,xw=S(()=>{"use strict";z();mt();Mn();eC=tC});var Cw={};$(Cw,{execute:()=>rC});async function sC(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 m=(await(await u.newContext({viewport:null})).pages()).at(-1),h=await Gr(t,r,y=>m.$(y.selector));return await e.bind(null,m,...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 rC,Pw=S(()=>{"use strict";z();mt();Mn();rC=sC});var kw={};$(kw,{execute:()=>nC});async function oC(s,e,t,r,n,o,i,a){function c(){s.sessionPlayer.stopPlaying()}a.addEventListener("abort",c);function u(x){if(o.parameterValues){let L=o.parameterValues.find(B=>B.type==="locate"&&B.id===x.locatorId);return{elementLocator:L.elementLocator,id:L.id,name:"Hybrid Step Locator"}}return x.locatedElement.shadowPath?x.locatedElement.shadowPath[0]:x}let d=await Gr(o,t,u),p=e.bind(null,...d),m=K(),f=K(),h=t.testResultId,g=t.config.baseUrl,y=Aw.cloneDeep(t);y.loginData=r;let C=ie().manifestVersion||"runner",w=!1,T=null,I="master",k=`Execute TDK Function '${o.functionName}'`,M=!0,E={fn:p,bypassSetup:!0,isBeforeOrAfterTest:!0,name:k,sourceCode:p.toString(),sourceName:p.name,testId:m,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 x=await new Promise((L,B)=>{i==="agent"&&iC(s,L);function H(){B(new Me),a.removeEventListener("abort",H)}a.addEventListener("abort",H),s.sessionPlayer.playTestByCode(m,f,h,g,y,C,L,w,T,I,[E],k,M).catch(B)});return N("tdkHybridStepPlayback after playTestByCode"),{success:x.success,shouldRetry:!1,resultInfo:{testId:m,executionId:f,resultId:E.resultId}}}catch(x){return{success:!1,error:x,shouldRetry:!1}}finally{a.removeEventListener("abort",c)}}function iC(s,e){let{commonConstants:t}=ie();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 Aw,nC,_w=S(()=>{"use strict";Aw=v(require("lodash"));Le();F();z();Mn();Ee();nC=oC});var An={};$(An,{abort:()=>Rd,execute:()=>Ni,run:()=>lC});async function Ni(s,e,t,r,n,o="cli"){let i=new Lw.AbortController,{signal:a}=i;Id.set(e.stepResultId,i);try{N("before seleniumTestPlayer require");let{SeleniumTestPlayer:c}=(Oi(),D(fd)),{compileFunctionsLibrary:u}=(Ed(),D(Tw)),{functionName:d}=s,p={},m=!1,f=new c(e.id,p,m,Ot.CODEFUL,t);Sd=f.sessionPlayer.codeSessionPlayer.proxy;let h=s.bypassWebpack?{testim:Sd.wrappedSteps()}:!1;N("before compileFunctionsLibrary",{bypassWebpack:Boolean(s.bypassWebpack)});let g;try{g=await u({fileSystem:aC,bypassWebpack:h},a)}catch(b){return{success:!1,shouldRetry:!1,reason:`Unable to compile functions library. ${b.message}`,extraInfo:b.stack}}typeof globalThis>"u"&&(global.globalThis=process);let y;if(h?y=g[d]:(global.globalThis.__testim=Sd.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 b=(Iw(),D(Sw)).execute;return await b(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 b=(xw(),D(Rw)).execute;try{return await b(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 b=(Pw(),D(Cw)).execute;return await b(f,y,s,e,o,a)}if(y.type==="tdk"||!y.type){let b=(_w(),D(kw)).execute;N("before tdkPlayback");try{return await b(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){cC.info("error running hybrid step",{err:c});return}finally{Id.delete(e.stepResultId)}}function Rd(s){let e=Id.get(s);if(e)e.abort();else throw new Error("No such stepResultId")}var Ow,Lw,aC,cC,Id,Sd,lC,Ei=S(()=>{"use strict";Ow=v(require("memory-fs"));Le();Lw=require("abort-controller");j();oe();aC=new Ow.default,cC=A("hybrid-step-playback"),Id=new Map,lC=(s,e,t,r)=>{let{step:n,context:o}=e.data;return Ni(n,o,s,r.loginData)}});var xd={};$(xd,{run:()=>uC});var uC,Nw=S(()=>{"use strict";F();Fr();z();uC=async(s,e)=>{let{stepId:t,testResultId:r,retryIndex:n,stepResultId:o,packageData:i,timeout:a}=e.data;try{return{data:await Cn(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 te)return{success:!1,code:"timeout"};throw c}}});async function Mw(s,e,t,r){try{return await Dc(s,e,t,r)}catch{Di.error("failed to report remote step state",{projectId:s,resultId:e,stepId:t});return}}async function pC(s,e,t,r,n){return Di.info("finished to run remote step",{stepId:t,sessionId:n}),await Mw(s,e,t,{status:"completed",success:!0,failureReason:null,data:r})}async function Dw(s,e,t,r,n){return Di.info("failed to run remote step",{stepId:t,sessionId:n,failureReason:r}),await Mw(s,e,t,{status:"completed",success:!1,failureReason:r})}async function Uw(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;Di.info("start play remote step",{stepType:a,stepId:u,sessionId:c});let d=dC[a];if(!d)return await Dw(n,r,u,`Failed to find step type ${a}`,c);try{let p=await d.run(e,t,o,i);return await pC(n,r,u,p,c)}catch(p){return await Dw(n,r,u,p.message,c)}}var Di,dC,Fw=S(()=>{"use strict";rg();Ei();Te();Nw();j();Di=A("step-playback"),dC={"cli-validation-code-step":sr,"cli-wait-for-code-step":sr,"cli-action-code-step":sr,"cli-api-code-step":sr,"cli-condition-step":sr,"cli-download-code-step":sr,"node-package":xd,"tdk-hybrid":An}});var jw={};$(jw,{remoteStepServiceSocketIO:()=>fC});var Cd,fC,Bw=S(()=>{"use strict";_i();Cd=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()}},fC=new Cd});var $w={};$($w,{remoteStepService:()=>ks});var Pd,As,Ad,ks,Mi=S(()=>{"use strict";On();oe();we();({REMOTE_STEP_SAVED:Pd}=Ye),Ad=class{async init(e){W.flags.useNewWSCLI.isEnabled()||(As=(await Promise.resolve().then(()=>(Bw(),jw))).remoteStepServiceSocketIO,As.init(e))}joinToRemoteStep(e){return W.flags.useNewWSCLI.isEnabled()?Fe.addFilter(`${e}:remoteStep`,{resultId:e},[Pd]):As.joinToRemoteStep(e)}saveRemoteStep(e,t,r){return W.flags.useNewWSCLI.isEnabled()?Promise.resolve():As.saveRemoteStep(e,t,r)}listenToRemoteStep(e,t){if(W.flags.useNewWSCLI.isEnabled()){Fe.listenTo(`${e}:remoteStep`,[Pd],r=>r.resultId===e&&r.remoteStep&&r.remoteStep.status==="pending",r=>t(r.remoteStep));return}As.listenToRemoteStep(e,t)}unlistenToRemoteStep(e){return W.flags.useNewWSCLI.isEnabled()?(Fe.removeFilter(`${e}:remoteStep`,[Pd]),Promise.resolve()):As.unlistenToRemoteStep(e)}},ks=new Ad});var qw,Gw,Vw,Se,hC,Hw,Ww,Ui,zw=S(()=>{"use strict";qw=v(require("lodash"));F();ce();Le();ds();vt();Te();Fw();Gw=v(require("p-retry")),Vw=require("url");j();jo();ws();oe();Mi();Cs();Se=A("test-run-handler"),hC=3,Hw=20*1e3,Ww=s=>JSON.stringify(s).length<Hw,Ui=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 kr;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?Ys(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=`${fe}/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:vo(),projectId:this._options.project,executionId:this._executionId,executionName:this._executionName,testId:this._testId,resultId:this._testResultId,baseUrl:this._baseUrl,branch:this._branch,servicesUrl:ba,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&&dt("user-disable-mock"),t.lightweightMode&&((r=this._options.lightweightMode)!=null&&r.general)){Object.assign(t,{company:this._options.company});let o=this.runData,i=Ww(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: ${Hw} 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 hn(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===Y.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&&Ww(e))return;let r=async()=>{try{return await Mc(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(),Nc(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,Gw.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 Vw.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 p=await Cr(a,c,d,u);n(p),r||setTimeout(i,3e3)}catch(p){Se.error("failed to check if done",{err:p}),setTimeout(i,3e3)}};setTimeout(i,3e3)}else ze.listenToTestResult(this._testResultId,this._testId,n)})}async checkViaRestAPIIfTestStarted(){let{testId:e,testResultId:t,_options:{project:r},branch:n}=this;try{let o=await Cr(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 ze.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||ze.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=qw.debounce(async()=>{try{let i=await Cr(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)ze.on("socket-connected",e);else{let i=()=>{setTimeout(async()=>{try{let{isComplete:a}=await Ic(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&&ze.off("socket-connected",e)}}listenToRemoteStep(e){ks.listenToRemoteStep(this.testResultId,t=>{Uw(this._options,e,t,this.testResultId)})}hasMoreTimeoutRetries(){let e=this._options.disableTimeoutRetry?1:hC;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 Fi,Kw=S(()=>{"use strict";zw();Fi=class{constructor(e,t,r,n,o,i){this._waitingTests=r.map(a=>new Ui(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 gC,yC,Un,kd=S(()=>{"use strict";gs();j();gC=A("worker-utils"),yC=async(s,e,t)=>{e&&await Tl(s,t)},Un=async(s,e,t,r)=>{gC.info("releasing player",{hasPlayer:Boolean(r)});try{await(r==null?void 0:r.onDone())}finally{await yC(s,e,t)}}});function IC(s,e,t,r){return{testId:s,reason:r,name:e,resultId:t,success:!1}}var Ld,Yw,Od,Rt,wC,Jw,Xw,ji,bC,_d,TC,Bt,vC,EC,SC,xt,Bi=S(()=>{"use strict";Ld=v(require("ms")),Yw=v(require("moment")),Od=v(require("p-retry"));F();Le();gs();Te();j();kd();jt();Vo();we();Mi();Cs();Tt();oe();z();Rt=A("base-worker"),{GET_BROWSER_TIMEOUT_MSG:wC,TEST_START_TIMEOUT_MSG:Jw,TEST_COMPLETE_TIMEOUT_MSG:Xw}=Ue,{SETUP_TIMEOUT:ji,NETWORK_ERROR:bC,GRID_ERROR:_d,BROWSER_CLOSED:TC,SELENIUM_ERROR:Bt,UNKNOWN_ERROR:vC}=Hs,EC=(0,Ld.default)("1s"),SC=1;xt=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=xt.getWorkerId();this.lambdatestService=new ee;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 SC++}async getGridSlot(e,t){let r=await Qf(e,t.executionId,this.options,this.id);return this.onGridSlot(t.testResultId,r),r}async getSlotOnce(e){let{browserValue:t}=this.testRunConfig;return Q.onGetSlot(this.id,t||"chrome"),await this.getGridSlot(t,e)}initPlayer(e){throw new Qr(!0)}async getBrowserOnce(e,t,r,n){throw new Qr(!0)}async runTestOnce(e,t){return e.sessionId=t.getSessionId(),Rt.info("Test run started",{testId:e.testId,resultId:e.testResultId,seleniumSession:t.getSessionId()}),await e.clearTestResult()}handleQuarantine(e){if(!Ve({testStatus:e.testStatus},this.options))return;let t={name:e.testName,testId:e.testId,resultId:e.testResultId,runnerStatus:de.SKIPPED,testStatus:e.testStatus};return this.onTestIgnored(this.id,t),t}setSessionTimeout(){return this.options.mode===Y.APPIUM?Math.max((0,Ld.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,Od.default)(async()=>{let d=Date.now();try{return await re(this.getSlotOnce(e),this.options.getBrowserTimeout,Ue.GET_BROWSER_TIMEOUT_MSG)}catch(p){let m={testId:this.testId,testResultId:this.testResultId,executionId:this.executionId};throw p instanceof fr?Rt.info("could not get grid slot due to concurrency issue",m):Rt.error("error getting grid slot",{error:p,...m}),i++,await he(this.options.getBrowserTimeout-(Date.now()-d)),p}},{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,Od.default)(async()=>{let d=Date.now(),p=this.initPlayer(e);try{a=await Zf(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 m=this.setSessionTimeout();N("before getBrowserOnce");let f=await re(this.getBrowserOnce(e,t,p,a),m,Ue.GET_BROWSER_TIMEOUT_MSG);return N("after getBrowserOnce"),Q.onGetBrowserSuccess(this.id,r),p||f}catch(m){let f={provider:a.provider,host:a.host,failedGetBrowserAttempts:u,id:this.options.gridData.gridId,type:a.type},h=this.options.mode===Y.APPIUM?"device":"browser";throw Rt.error(`error getting ${h} from grid`,{error:m,testId:this.testId,testResultId:this.testResultId,executionId:this.executionId,grid:f}),Q.onGetBrowserFailure(this.id,r,++u),p.onDone(),m instanceof it||await he(this.options.getBrowserTimeout-(Date.now()-d)),m}},{retries:c-1,minTimeout:0,factor:1}),N("after getBrowserOnce retries")}catch(i){throw await Un(this.id,this.releaseSlotOnTestFinished,r,n),i instanceof it?i:i instanceof at?new Wt(i,_d):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 Un(this.id,this.releaseSlotOnTestFinished,n,c)}}async runTestCleanup(){}async onQueueCompleted(){}run(){var p,m;let e=()=>process.nextTick(()=>this.run()),t=async(f,h,g)=>{var I;if(Ve(f,this.options))return e();let y=h.sessionId,b=k=>g==null?void 0:g.message.includes(k),C=g&&g instanceof Wt,w=g&&(b(Jw)||b(Xw)),T=!f.success&&(h.hasMoreRetries()&&!C&&!w||w&&h.hasMoreTimeoutRetries());try{let k=h.retryKey;f.testRetryKey=k;let M=h.getAppSource;return await this.onTestCompleted(this.id,this.testId,f,y,T,M),this.executionQueue.hasMoreTests()&&!((I=this.options.lightweightMode)!=null&&I.general)&&await he(EC),await this.runTestCleanup(),T?(w?await h.startNewTimeoutRetry():await h.startNewRetry(),Rt.info(`retry test id: ${this.testId} name: ${this.testName} again`,{testId:this.testId,testName:this.testName,isTimeoutErrors:w,testRetryKey:k,totalRetries:h._totalRetryCount}),this.testResultId=h.testResultId,await u(h,T)):await e()}catch(k){if(k instanceof Pt)return;Rt.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. ${Fa()?"(Internal: network connectivity test failed)":""}`,n=(f,h)=>{let g=this.options.mode===Y.APPIUM?"device":"browser";if(!h&&W.flags.errorMessageOnBadNetwork.isEnabled())return{errorType:bC,reason:r()};let y=f instanceof Error?f.message:f;if(y.includes(wC))return{errorType:ji,reason:`Test couldn't get ${g}`};if(y.includes(Jw))return{errorType:ji,reason:"Test couldn't be started"};if(y.includes(Xw)){if(!this.testRunTimeout)return{errorType:ji,reason:"Test timeout reached: test is too long"};let b=Yw.default.duration(this.testRunTimeout,"milliseconds"),C=Math.floor(b.asMinutes()),w=b.seconds(),T=C>0?` ${C} min`:"",I=w>0?` ${w} sec`:"";return{errorType:ji,reason:`Test timeout reached (timeout:${T}${I}): test is too long`}}if(f instanceof Wt&&f.type){if(f.type===_d)return{errorType:_d,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===TC?{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 mr?{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:vC,reason:y}},o=async(f,h)=>{var w;let g=await Ua();!g&&W.flags.warnOnBadNetwork.isEnabled()&&console.warn(r()),Rt.warn("error on run",{err:f});let y=(w=this.userData)==null?void 0:w.projectId,{errorType:b,reason:C}=n(f,g);Lc(y,this.testResultId,this.testId,{status:Vs.COMPLETED,success:!1,reason:C,errorType:b,testRetryKey:h.retryKey,setupStepResult:{status:Vs.COMPLETED,success:!1,reason:C,errorType:b}},h.remoteRunId),await t(IC(this.testId,this.testName,this.testResultId,C),h,f)},i=async(f,h)=>{var w;let g=this.testId,y=this.testResultId,b=(w=this.userData)==null?void 0:w.projectId,C=this.branch;if(!g||!y||!b||!C)return Rt.warn("Test failed. Not enough data to recover results via API",{err:f}),o(f,h);try{let T=await Cr(g,y,b,C);if(Rt.warn("Test failed. Got results via API",{err:f,testResult:T}),T&&T.status===Vs.COMPLETED)return await t(T,h);throw f}catch(T){return T!==f&&Rt.error("Failed to fetch test results from server",{testId:g,resultId:y,projectId:b,branch:C,err:T}),o(f,h)}},a=this.options.disableSockets||((p=this.options.lightweightMode)==null?void 0:p.disableResults)&&(this.options.useChromeLauncher||this.options.mode!=="extension"),c=this.options.disableSockets||((m=this.options.lightweightMode)==null?void 0:m.disableRemoteStep),u=async(f,h)=>{try{await Promise.all([!c&&ks.joinToRemoteStep(this.testResultId),!a&&ze.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||ks.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 Qw={};$(Qw,{WorkerSelenium:()=>Nd});function xC(s){let{playback:e}=ie().commonConstants;function t(r){s.playbackManager.on(r,()=>{N(`Got event ${r}`)})}Object.values(e).forEach(t)}var $i,RC,Nd,Zw=S(()=>{"use strict";F();Le();Bi();j();jt();z();jo();oe();ed();Oi();Ee();$i=A("worker-selenium"),RC=1e9,Nd=class extends xt{initPlayer(t){return new Nn(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"),Q.onGetSession(this.id,this.testName,t.runMode);let{driver:i}=n;this.windowUtils=new Is(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,RC),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",p=u.message&&u.message==="invalid argument";throw u instanceof it||d||p?new it(`Page '${c}' is not available`):($i.error("failed to navigate to page",{err:u}),u)}}async runTestOnce(t,r){var d;let n=ie(),{driver:o,sessionPlayer:i}=r,a=n.manifestVersion||"runner";Q.onWaitToTestComplete(this.id,this.isCodeMode),xC(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 hn(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 m=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(m.then(f=>(N("right after playTestByCode"),f)),this.testRunTimeout,Ue.TEST_COMPLETE_TIMEOUT_MSG).catch(f=>{var h;throw f instanceof te&&((h=i.stopPlayingOnTestTimeout)==null||h.call(i)),f}).then(f=>(f.resultId=this.testResultId,f))}let p=!1;return re(new Promise((m,f)=>{i.playByTestId(this.testId,this.executionId,this.testResultId,this.baseUrl,this.userData,a,m,!1,this.overrideTestConfigId,this.branch,p,t.remoteRunId,void 0,void 0,c).catch(f)}),this.testRunTimeout,Ue.TEST_COMPLETE_TIMEOUT_MSG).catch(m=>{var f;throw m instanceof te&&((f=i.stopPlayingOnTestTimeout)==null||f.call(i)),m}).then(async m=>{n.localAssetService&&await n.localAssetService.drain(),m.stepsResults=null,m.resultId=this.testResultId,o.isAlive()||($i.warn(`possible grid unresponsive for test ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`),m.gridIssues="could not validate grid is alive");let f=o.maxKeepAliveGap();f>=3e4&&($i.warn(`possible browser keep alive issue ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`),m.keepAliveIssue=f);let g={...m,...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 p=await u();return N("right after runSeleniumTest"),p}catch(p){throw $i.error("failed to run test once",{err:p}),p}}}});var Wi,eb=S(()=>{"use strict";Wi=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 tb(s){class e{constructor(r,n){this.frameManager=r,this.locateElementPlayer=n}foundFrameCallback(r,n,o){return Dd.info("foundFrameCallback-mock invoked"),{}}locate(r,n,o,i,a,c){return Dd.info("locate-mock invoked"),{}}findFrame(r,n,o,i){return Dd.info("findFrame-mock invoked"),{}}}return e}var Dd,rb=S(()=>{"use strict";j();Dd=A("mobile-frame-locator-mock")});var CC,sb,PC,qi,nb=S(()=>{"use strict";CC=v(require("webdriverio")),sb=v(Xu());eb();sd();j();nd();od();Ee();Cs();rb();pd();md();PC=A("appium-test-player"),qi=class{constructor(e,t,r,n="code",o=CC,i,a){let{sessionPlayer:c,commonConstants:u,stepActionFactory:d,MobileLocateElementPlayer:p}=ie();this.driver=o,this.id=e;let m=new xs(this.driver);this.stepActionFactory=new d(m),(0,sb.default)(this.driver,this.stepActionFactory,"selenium"),this.tabService=new Wi(this.driver),this.windowCreationListener=Ln,this.playbackTimeoutCalculator=new Ps(Ai()),this.tabService.createSesion(e);let f=tb(this.driver);this.sessionPlayer=new c(e,this.tabService,null,null,f,Pi,p,null,m,this.stepActionFactory,this.playbackTimeoutCalculator,ze.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){PC.error("error while deleting appium session",{error:e})}finally{let{commonConstants:e}=ie();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 ib={};$(ib,{WorkerAppium:()=>Md});var ob,Fn,Md,ab=S(()=>{"use strict";ob=v(require("jsdom"));ce();Te();mi();Bi();j();jt();nb();Ee();Fn=A("worker-appium"),Md=class extends xt{initPlayer(e){return new qi(this.id,e.runParams,this.options.shouldMonitorPerformance,e.automationMode,void 0,e.retryCount,e.previousTestResultId)}async getBrowserOnce(e,t,r,n){Q.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:p}=this.options,m=await Ec({appId:p,projectId:d});if(!m)throw Fn.error("mobile app not found",{appId:p,projectId:d}),new Error("mobile app not found");u=`${fe}/storage${m.filePath}?access_token=${this.options.authData.token}`}try{let d=Xl({projectType:i,gridInfo:n,testRunConfig:this.testRunConfig,nativeApp:a,options:this.options,appPath:u,androidActivityWait:c}),p=await o.remote(d);Object.assign(o,{activeSession:p}),await this.updateDeviceInfo(e,p),Fn.info(`init new appium session testName: ${this.testName}`,{sessionId:p.sessionId,testResultId:this.testResultId,nativeApp:a})}catch(d){throw Fn.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 qc({projectId:i,projectType:a,companyId:c,gridId:u,selectors:`device_id:${t.capabilities.udid}`}),m={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 cs(i,r,n,o,"RUNNING",{device:m})}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=ie(),{sessionPlayer:n}=t,o=t.driver,i=r.manifestVersion||"runner";Q.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 ob.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 p=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(),p.stepsResults=null,p.resultId=this.testResultId,{...p,...e.seleniumPerfStats.getStats()}}catch(d){throw Fn.error("error while running appium tests",{err:d}),d}};try{return await super.runTestOnce(e,t),await u.call(this)}catch(d){throw Fn.error("failed to run test once",{err:d}),d}}}});var cb,Gi,lb=S(()=>{"use strict";F();cb=v(xn()),Gi=class{constructor(e){this.driver=new cb.default,this.id=e}onDone(){return re(this.driver.end(),12e4).catch(t=>{if(t instanceof te)return this.driver.forceEnd();throw t}).catch(()=>{}).then(()=>{this.driver=null})}getSessionId(){return this.driver.getSessionId()}}});var ub,Vi,db=S(()=>{"use strict";ub=v(require("ws"));F();Vi=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 ub.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 zi,Ud,Hi,pb=S(()=>{"use strict";F();zi=v(require("chrome-launcher"));mi();db();pn();Ud=class{constructor(e){this.sessionId=e,this.cdpTestRunner=new Vi}async init(e,t,r,n,o,i,a){let u=[...Jl(e,t,r,n,o,i,a).desiredCapabilities.chromeOptions.args,...zi.Launcher.defaultFlags().filter(p=>p!=="--disable-extensions")];this.chrome=await zi.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 Sr(`localhost:${this.chrome.port}`);await this.cdpTestRunner.initSession(d),ls(()=>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}},Hi=class{constructor(e){this.sessionId=K(),this.driver=new Ud(this.sessionId),this.id=e}async onDone(){return this.driver.stop()}getSessionId(){return this.sessionId}}});var mb={};$(mb,{WorkerExtension:()=>jn});var ht,jn,Fd=S(()=>{"use strict";Le();z();Bi();F();j();jt();oe();lb();pb();ht=A("worker-ext"),jn=class extends xt{initPlayer(){return this.options.useChromeLauncher?new Hi(this.id):new Gi(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 ht.error("failed to get browser",{err:a,gridInfo:n,testId:e.testId,resultId:e.testResultId}),a}}async getBrowserOnce(e,t,r,n){return Q.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 p=this.options.timeoutWasGiven?Math.max(1e4,this.options.timeout):this.options.testStartTimeout;try{return await re(e.runTestUsingCDP(d.cdpTestRunner),p,Ue.TEST_START_TIMEOUT_MSG)}catch(m){if(!(m instanceof te))throw m;return ht.warn("timeout while running test using CDP. Running checkViaRestAPIIfTestStarted",{testResultId:r}),await e.checkViaRestAPIIfTestStarted()}},a=async(d,p,m)=>{try{let f=await d.url(p);return m.driverUrlFinished=!0,f}catch(f){throw ht.error("error from driver.url",{err:f,testResultId:r,executionId:n,testId:o,url:p,urlLength:p.length}),f}},c=async d=>{let p=await e.onStarted(this.options.testStartTimeout);return d.testRunHandlerOnStartedHadFinished=!0,p},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)){Q.onWaitToTestStart(this.id),Q.onWaitToTestComplete(this.id,this.isCodeMode);try{return{...await i(t.driver),...e.seleniumPerfStats.getStats()}}catch(h){throw ht.warn("failed to run test via CDP",{err:h}),h}}let{driver:p}=t,m={driverUrlFinished:!1,testRunHandlerOnStartedHadFinished:!1};try{let h=await e.getRunTestUrl();Q.onWaitToTestStart(this.id);try{await re(Promise.all([a(t.driver,h,m),c(m)]),this.options.testStartTimeout,Ue.TEST_START_TIMEOUT_MSG)}catch(y){if(!(y instanceof te))throw y;ht.warn("timeout occurred (see log's payload). Running checkViaRestAPIIfTestStarted",{testResultId:r,executionId:n,testId:o,...m}),await e.checkViaRestAPIIfTestStarted()}Q.onWaitToTestComplete(this.id,this.isCodeMode);let g=y=>{throw e.onCompletedCleanup(),ht.warn("on browser closed error detected",{err:y,testResultId:r,executionId:n,testId:o}),p.unregisterToClosedBrowser(g),y.type=Hs.BROWSER_CLOSED,y};p.registerToClosedBrowser(g);try{let y=await re(e.onCompleted(),this.testRunTimeout,Ue.TEST_COMPLETE_TIMEOUT_MSG);p.unregisterToClosedBrowser(g),this.lambdatestService.isLambdatestRun()&&await p.executeJS(`lambda-status=${y.success?"passed":"failed"}`).catch(()=>{}),p.isAlive()||(ht.warn(`possible grid unresponsive for test ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`),y.gridIssues="could not validate grid is alive");let b=p.maxKeepAliveGap();return b>=3e4&&(ht.warn(`possible browser keep alive issue ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`),y.keepAliveIssue=b),{...y,...e.seleniumPerfStats.getStats()}}catch(y){throw ht.warn("timeout wait until test completed",{err:y,testResultId:r,executionId:n,testId:o}),new Error(y)}finally{p.unregisterToClosedBrowser(g)}}catch(h){throw ht.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 ht.error("failed to run test",{err:d,testId:e.testId,resultId:e.testResultId}),d}}}});var fb={};$(fb,{WorkerExtensionSingleBrowser:()=>jd});var AC,kC,jd,hb=S(()=>{"use strict";Le();F();j();kd();jt();Fd();AC=A("base-worker"),kC=500,jd=class extends jn{async _releasePlayer(){if(!this.testPlayer)return;let{projectId:t}=this.userData||{};await Un(this.id,this.releaseSlotOnTestFinished,t,this.testPlayer),this.testPlayer=null}onQueueCompleted(){return this._releasePlayer()}async getBrowserOnce(t,r,n,o){return Q.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()&&(AC.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 he(kC)}}});function _C(s,e){e===0?s():setTimeout(s,e*ya)}var NN,Bd,Ki,gb=S(()=>{"use strict";NN=v(xn());F();ce();Le();jl();vt();ou();z();j();oe();Kw();Bd=A("parallel-worker-manager"),Ki=class{constructor(e){this.customExtensionLocalLocation=e}getWorkerType(e){switch(e){case Y.SELENIUM:return(Zw(),D(Qw)).WorkerSelenium;case Y.APPIUM:return(ab(),D(ib)).WorkerAppium;default:return yi.isFeatureAvailableForProject("useSameBrowserForMultiTests")?(hb(),D(fb)).WorkerExtensionSingleBrowser:(Fd(),D(mb)).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,p=0,m=f=>new Promise(h=>{var Ct,Kr,P,O,U,V;let g=o.project,y=new Fi(r,n,e,o,i,t),b={},C=e.length,w=(Ct=o.company)==null?void 0:Ct.companyId,T=(Kr=o.company)==null?void 0:Kr.name,I=o.source||"cli",k=o.user,M=(P=o.company)==null?void 0:P.planType,E=(O=o.company)==null?void 0:O.isStartUp,_=(U=o.projectData)==null?void 0:U.name,x=(V=o.projectData)==null?void 0:V.type,L=o.lightweightMode,B=Tr(o),H=(pe,Je,be,na,Bn,oa)=>(p++,hh({executionId:r,projectId:g,testId:Je,resultId:be,companyId:w,companyName:T,projectName:_,companyPlan:M,sessionType:B,source:I,user:k,lightweightMode:L,isStartUp:E,projectType:x,appSource:oa}),t.testStartAndReport(pe,r,be,na,Bn)),X=async(pe,Je,be,na,Bn,oa)=>{var Jd,Xd,Yd;p--;let gt={...(L==null?void 0:L.onlyTestIdsNoSuite)&&{show:!0},...be.seleniumStats&&{seleniumStats:be.seleniumStats},...be.gridIssues&&{gridIssues:be.gridIssues},...be.keepAliveIssue&&{keepAliveIssue:be.keepAliveIssue},...o.host&&{gridHost:o.host}};if(be.seleniumPerfMarks&&(t.concatSeleniumPerfMarks(be.seleniumPerfMarks),delete be.seleniumPerfMarks),o.grid||o.gridId?(gt.gridName=o.grid||((Jd=o.gridData)==null?void 0:Jd.name),gt.gridType=(Xd=o.gridData)==null?void 0:Xd.type,gt.gridProvider=(Yd=o.gridData)==null?void 0:Yd.provider):o.useLocalChromeDriver?(gt.gridName="local-chrome-driver-from-options",gt.gridType="local-chrome"):o.useChromeLauncher?(gt.gridName="chrome-launcher-from-options",gt.gridType="local-chrome"):o.browserstack?gt.gridName="browserstack-from-options":o.saucelabs&&(gt.gridName="saucelabs-from-options"),await t.testEndAndReport(pe,be,r,na,Bn,gt).catch(wT=>Bd.error("testEndAndReport threw an error",{err:wT})),Bn)return;b[be.resultId]=be,gh({executionId:r,projectId:g,testId:Je,resultId:be.resultId,result:be,companyId:w,companyName:T,projectName:_,companyPlan:M,sessionType:B,source:I,user:k,lightweightMode:L,logger:Bd,isStartUp:E,projectType:x,appSource:oa}),u&&!be.success&&(y.stop(),d=!0),(Object.keys(b).length===C||d&&p===0)&&h(b)},Z=(pe,Je)=>{b[Je.resultId]=Je,t.onTestIgnored(pe,Je.resultId),p--,(Object.keys(b).length===C||d&&p===0)&&h(b)},me=(pe,Je)=>t.onGridSlot(pe,Je);o.userData={loginData:Object.assign({},Dt(),{refreshToken:vo(),authData:Dt(),token:f}),projectId:o.project,company:o.company,servicesUrl:fe},N("in localStrategy before createWorker"),this.createWorkers(c,y,o.mode,o,this.customExtensionLocalLocation,r,H,X,me,Z).forEach((pe,Je)=>{N("before schedule worker.run after createWorkers"),_C(()=>{N("right before worker.run"),pe.run()},Je)})});try{let f=await Ht(),h=await m(f);if(d)throw new Pt;return h}catch(f){throw Bd.error("failed running parallel workers",{executionId:r,err:f}),f}}}});var Ji,yb=S(()=>{"use strict";_i();Ji=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 $d,Wd,Xi,wb=S(()=>{"use strict";On();oe();we();yb();({TEST_RESULT_CREATED:$d,TEST_RESULT_UPDATED:Wd}=Ye),Xi=class{constructor(){W.flags.useNewWSCLI.isEnabled()||(this.realDataServiceSocketIO=new Ji)}init(e){return W.flags.useNewWSCLI.isEnabled()?Promise.resolve():this.realDataServiceSocketIO.init(e)}joinToTestResultsByRunId(e,t){if(W.flags.useNewWSCLI.isEnabled())return Fe.addFilter(e,{runId:e},[Wd,$d],!0);this.realDataServiceSocketIO.joinToTestResultsByRunId(e,t)}stopListenToTestResultsByRunId(e){if(W.flags.useNewWSCLI.isEnabled()){Fe.removeFilter(e,[Wd,$d]);return}this.realDataServiceSocketIO.stopListenToTestResultsByRunId(e)}listenToTestResultsByRunId(e,t){if(W.flags.useNewWSCLI.isEnabled()){Fe.listenTo(e,[Wd,$d],r=>r.runId===e,r=>t(r));return}this.realDataServiceSocketIO.listenToTestResultsByRunId(t)}}});async function vb(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(()=>(gd(),yw)),n={};if(s.webpackConfig){let o=Tb.join(process.cwd(),s.webpackConfig);n=require(o)}return r(s.files,n,{baseUrl:s.baseUrl})}return await vc({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 qd(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 Gd(s,e){let t=s.mode==="extension"?["edge-chromium","chrome"]:["firefox","chrome","edge-chromium","safari","safari technology preview","browser","android","ios","iphone","ipad"],r=bb.difference(zs(s,e),t);if(r.length>0)throw dt("invalid-config-run",{browser:r.join(", "),mode:"runner"}),new R(`browser type <${r}> is not supported in ${s.mode} mode.`);return e}var bb,Tb,Eb=S(()=>{"use strict";bb=v(require("lodash")),Tb=v(require("path"));F();ds();Te();z()});var Vr,Sb,OC,Yi,LC,Qi,Ib=S(()=>{"use strict";Vr=v(require("lodash"));F();j();ce();oe();Le();gs();vl();jl();Te();vt();jt();Oh();z();gb();wb();Eb();({testRunStatus:Sb,CLI_MODE:OC}=Lt),Yi=A("test-plan-runner"),LC=1e3*60*5,Qi=class{constructor(e){this.startTime=Date.now();this.workerManager=new Ki(e)}async runTestAllPhases(e,t,r,n,o,i,a,c){let u={},d=Dt(),p=async()=>{let y=o.beforeParallel||1,b=!0,C=await this.workerManager.runTests(e,c,i,a,o,n,d,y,b);Object.assign(u,C)},m=async()=>{let y=Bs||o.parallel,b=!1;N("right before this.workerManager.runTests");let C=await this.workerManager.runTests(t,c,i,a,o,n,d,y,b);N("right after this.workerManager.runTests"),Object.assign(u,C)},f=async()=>{let y=o.afterParallel||1,b=!1,C=await this.workerManager.runTests(r,c,i,a,o,n,d,y,b);Object.assign(u,C)},h=Tr(o);yh({executionId:i,projectId:o.project,sessionType:h}),N("right before runBeforeTests");try{return await p(),N("right before runTestPlanTests"),await m(),N("right after runTestPlanTests"),await f(),u}catch(y){if(Yi.error("error running test plan",{err:y}),y instanceof Pt)return c.markAllQueuedTests(i,de.ABORTED,"aborted",!1);throw y}finally{await g()}async function g(){var b,C,w,T;if((b=o.lightweightMode)!=null&&b.disablePixelValidation)return;if(o.mode===OC.SELENIUM){let{EyeSdkBuilder:I}=(await Promise.resolve().then(()=>(Ee(),Ft))).getSessionPlayer();await I.closeBatch(i);return}let y;try{if(!((T=(w=(C=o.company)==null?void 0:C.activePlan)==null?void 0:w.premiumFeatures)!=null&&T.applitools)||(y=await Fc(o.project),Vr.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 Xi;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 p=d.id;if(!n.getTestResult(p)){let h=o[p],g=Vr.default.merge({},h,d,{resultId:p});if(o[p]=g,!h||h.status!==d.status){let b=(n.getTestResult(g.parentResultId)||{workerId:1}).workerId;[Sb.RUNNING].includes(d.status)&&Q.onTestStarted(g,b),[Sb.COMPLETED].includes(d.status)&&(g.duration=g.endTime-g.startTime||0,Q.onTestFinished(g,b))}}let m=!Object.values(o).some(h=>["QUEUED","RUNNING"].includes(h.runnerStatus)),f=!Object.values(n.getAllTestResults()).some(h=>["QUEUED","RUNNING"].includes(h.status));if(m&&f)return u(Object.values(o));if(f&&!m)return he(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,M,E;let u=K(),d=n.project;Ca(u),e.forEach(_=>Object.assign(_,{isBeforeTestPlan:!0})),r.forEach(_=>Object.assign(_,{isAfterTestPlan:!0}));let p=[...e,...t,...r],m=new ui(p,n,i,a),f=Vr.default.chain(p).map(_=>{var x;return((x=_.overrideTestConfig)==null?void 0:x.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?[]:p.map(_=>_.name),b=(M=n.lightweightMode)!=null&&M.onlyTestIdsNoSuite?{beforeTests:e,tests:t,afterTests:r}:m.executionStart(u,d,this.startTime,o,y),C;g&&(C=this.initRealDataServiceAndListenToTestsCreatedInFile(d,u,m)),N("before testListInfoPromise");let w=await b;(E=n.lightweightMode)!=null&&E.onlyTestIdsNoSuite||Q.onTestPlanStarted(w.beforeTests,w.tests,w.afterTests,o,u,c,h,g),N("before runTestAllPhases");let T=await this.runTestAllPhases(w.beforeTests,w.tests,w.afterTests,a,n,u,o||"All Tests",m),I=await re(C,LC).catch(async()=>{var x;Yi.warn("timed out waiting for child results on websocket. using REST fallback",{projectId:d,executionId:u});let _=await ln(d,"testResult",`runId=${u}&sort=runOrder`);return Vr.default.chain(((x=_==null?void 0:_.data)==null?void 0:x.docs)||[]).groupBy("parentResultId").omit("undefined").values().flatten().value()});return N("before executionEnd"),await m.executionEnd(u),N("after executionEnd"),{results:T,executionId:u,testPlanName:o,configName:h,childTestResults:I}}async runTestPlans(e,t){Yi.info("start to run test plan",{options:Object.assign({},e,{token:void 0,userParamsData:void 0}),branchToUse:t});function r(d){return Vr.default.flattenDeep(Object.values(d)).reduce((p,m)=>p.concat(m.beforeTests,m.tests,m.afterTests),[])}let n={},o={},i=e.project,a=await Tc(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 Gd(e,r(u)),await ue(c,async d=>{let p=d.testPlanId;n[p]={};let m=Object.assign({},e);m.baseUrl=e.baseUrl||d.startUrl,m.host=e.host,m.port=e.port,m.gridId=e.gridId||d.gridId,e.grid&&delete m.gridId,m.gridData=await Xf(e,d);let f=m.overrideExecutionName||d.name;return await ue(u[p],async h=>{let g=await this.runTestPlan(h.beforeTests,h.tests,h.afterTests,m,f,p,t),y=e.files.length>0;Q.onTestPlanFinished(g.results,d.name,this.startTime,g.executionId,!1,y),n[p][g.executionId]=g.results;let b=Object.keys(n[p]).map(I=>({executionId:I,status:qd(n[p][I])})),C=Object.keys(n[p]).map(I=>n[p][I]).reduce((I,k)=>Object.assign(I,k),{}),w=qd(C);Object.assign(o,C);let T=w?b[0].executionId:b.find(I=>!I.status).executionId;return await yc(i,p,{success:w,executions:b,executionId:T}),g})})}async runAnonymousTestPlan(e,t){var a;Yi.info("start to run anonymous",{options:Object.assign({},e,{token:void 0}),branchToUse:t}),N("before getSuite");let r=await vb(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 ue(r.tests,async c=>{if(e.resultId){let p=c[0];p.resultId=e.resultId,c=[p]}await Gd(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 Q.onTestPlanFinished(u.results,o,this.startTime,u.executionId,i,d),u})}async run(e){let t=bn(),r=[];Ks(e)?r=await this.runTestPlans(e,t):r=await this.runAnonymousTestPlan(e,t);let n=Vr.default.flattenDeep(r);return N("right before onAllTestPlansFinished"),await Q.onAllTestPlansFinished(n),N("right after onAllTestPlansFinished"),n.map(o=>o.results).reduce((o,i)=>Object.assign(o,i),{})}}});var xb={};$(xb,{init:()=>ZC,run:()=>YC});function DC(s){if(!Zi.get(s,"company.activePlan.premiumFeatures.allowCLI")){let t=s.project;us(s.authData.uid,"cli-not-supported",{projectId:t}),console.warn("Testim CLI is not supported in this plan")}}async function MC(s){let e=s.project,t=await Sc(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"),us(s.authData.uid,"execution-quota-surpassed",{projectId:e}),new Yr}function UC(s,e){let t=s.retentionDays;if(!t)return;let r=Zi.get(e,"activePlan.premiumFeatures.resultRetention");if(t>r)throw new R(`Retention days (${t}) cannot be greater than the company's retention days (${r}). Run aborted`)}async function FC(s){var e;if(!((e=s.lightweightMode)!=null&&e.disableQuotaBlocking))try{await Promise.all([MC(s),DC(s)])}catch(t){if([R,Yr].some(r=>t instanceof r))throw t;NC.error("could not validate cli account",{err:t})}}function jC(s){let e=Dt();return Xm({userId:e.uid,name:e.uid,traits:{projectId:s,company:{id:s,lastCIRun:Math.floor(Date.now()/1e3)}}})}async function BC(s,{disableResults:e=!1,disableRemoteStep:t=!1}){if(W.flags.useNewWSCLI.isEnabled()&&!e&&!t)return Fe.connect(s);if(!t){let{remoteStepService:r}=await Promise.resolve().then(()=>(Mi(),$w));await r.init(s)}if(!e){let{testResultService:r}=await Promise.resolve().then(()=>(Cs(),uw));r.init(s)}}function $C(s,e){let{branch:t,autoDetect:r}=s;if(eh(e,r),!e&&!r)throw new R(`branch ${t} does not exist, run aborted.`)}async function WC(s){let{project:e}=s,t=bn();Zi.get(s,"company.activePlan.premiumFeatures.ttaForSalesforce")&&(s.sfdcCredential=await hc({projectId:e,branch:t}))}function qC(s,e){let{onprem:t,id:r,storageBaseUrl:n,storageType:o,name:i,activePlan:a={}}=e;if(t){let{mode:p,extensionPath:m,ext:f,playerPath:h}=s;if([Y.SELENIUM].includes(p)&&!h)throw new R("in selenium on prem mode --player-path must be provided");if(p==="extension"&&!m&&!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=Ka(a);d==="free"&&(s.newBrowserWaitTimeout=s.newBrowserWaitTimeout<Rb?Rb:s.newBrowserWaitTimeout),W.setCompanyId(r),W.setIsPOC(c),W.setIsStartUp(u),W.setPlanType(d),St.setPlanType(d),s.company={companyId:r,onprem:t,storageBaseUrl:n,storageType:o,name:i,planType:d,isPOC:c,isStartUp:u,activePlan:a}}function GC(s,e){if(ur){s.editorUrl=ur;return}s.editorUrl=e.editorUrl}function VC(s,e){s.allGrids=e}function HC(s,e){s.authData=e}function zC(s,e){let{id:t,name:r,type:n,defaults:o}=e;W.setProjectId(t),W.setProjectType(n),s.projectData={projectId:t,type:n,name:r,defaults:o}}async function KC(s){s.gridData=await Yf(s)}async function JC(s){let{project:e}=s,t={projectId:e};s.overrideMappingFile&&(dt("user-override-file",t),s.mockNetworkRules=await Fm(s.overrideMappingFile))}async function XC(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 xf(),N("in runner.js after checkNpmVersion"),await FC(s),N("in runRunner before tunnel.connect"),await zo(s),N("in runRunner after tunnel.connect");let a=await new Qi(e).run(s);return N("before tunnel.disconnect"),await Ko(s),await yn.end(t),N("after tunnel.disconnect and gridService.keepAlive.end"),a}function QC(s){var e;St.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 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(`
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 ZC(s){var g,y,b;N("start runner init");let{project:e,lightweightMode:t,useChromeLauncher:r,mode:n,disableSockets:o}=s,i=W.fetch(),a=BC(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:p,branchName:m,allGrids:f}=await un(s);if(UC(s,d),await Promise.all([i,a]),s.browser&&W.flags.dec2022eolBrowsers.isEnabled()){let C=Xs(s.browser);if(C.eol)throw new R(`Unsupported browser: ${C.browserName}`)}N("after featureFlagsReady and socketConnected"),GC(s,u),qC(s,d),zC(s,p),$C(s,m),VC(s,f),HC(s,c),await WC(s),(g=s.lightweightMode)!=null&&g.disableLabs||await yi.loadLabFeatures(p.id,d.activePlan),((y=s.lightweightMode)==null?void 0:y.type)==="turboMode"&&(W.flags.highSpeedMode.getValue()==="disabled"||s.company.planType==="free")&&delete s.lightweightMode,((b=s.lightweightMode)==null?void 0:b.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`),yn.start(e),jC(e),await JC(s),await KC(s),QC(s);let h=bn();Q.setOptions(s,h)}var Zi,Rb,NC,YC,Cb=S(()=>{"use strict";Zi=v(require("lodash"));F();pl();bl();Le();gs();ds();vl();Te();vt();j();jt();ce();oe();z();Ib();On();ou();we();vn();zc();Rb=30*60*1e3,NC=A("runner");YC=XC});function Pb(s){s.get("/",(e,t)=>{let r=Vd();return t.status(200).json({success:!0,isTestimAgent:!0,startMode:r})}),s.get("/version",(e,t)=>{t.status(200).json({node:process.version,app:dl()})}),s.get("/loginInfo",(e,t)=>{try{let r=JSON.parse(Buffer.from(e.query.info,"base64").toString());rl({overwriteExisting:!1,projects:r}),t.status(200).end()}catch{t.status(400).end()}})}var Ab=S(()=>{"use strict";ps();Hd();pl()});function Ob(s){let e=(0,_b.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),Ni(n,o,s.webdriverApi,i,void 0,"agent").then(c=>{r.status(200).send(c)}).catch(c=>{kb.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{Rd(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}kb.error("hybrid code abort unexpected error",{e:o}),r.status(500).send({error:"unexpected error",info:`${o?o.message:"N/A"}`})}}),e}var _b,kb,Lb=S(()=>{"use strict";Ei();_b=require("express");j();kb=A("hybrid-router")});var Nb,Hr,Db,Mb=S(()=>{"use strict";Nb=require("express");j();Ed();Hr=(0,Nb.Router)(),Db=A("codim-router");Hr.get("/tests",async(s,e)=>{let t=await yd();e.json({tests:t,success:!0})});Hr.get("/locators",async(s,e)=>{let t=await Dn(),r=await wd(t,s.query.full);e.json({locators:t,contents:r,success:!0})});Hr.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 Td(t,{mergeIntoExisting:r||!1}),e.status(200).send({success:!0})});Hr.get("/compile",async(s,e)=>{try{let t=await vd(s.body.name);e.send({success:!0,code:t})}catch(t){Db.error(t),e.json({success:!1,reason:t.message})}});Hr.post("/saveTest",async(s,e)=>{if(!s.body){e.status(400).send({success:!1,reason:"missing body"});return}try{await bd(s.body),e.send({success:!0})}catch(t){e.json({success:!1,reason:t.message}),Db.error(t)}})});var zd,Ub,_s,ea,Fb=S(()=>{"use strict";zd=v(require("chalk"));Fr();Ub=require("express");j();z();_s=A("cli-router"),ea=(0,Ub.Router)();ea.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 p=await Pn(t,r,n,o,i,a,c,u,d);p.success||(console.log(zd.default.red(p.result.resultValue)),_s.error("CLI Action Failure",{message:p.result.resultValue})),e.status(200).json({success:!0,data:p})}catch(p){_s.error("failed to run cli code",{err:p}),console.log(zd.default.red("failed to run cli code",p)),e.status(500).json({success:!1,code:"internal-error"})}});ea.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 Cn(t,r,n,o,i,a);_s.info("installed packages successfully"),e.status(200).json({success:!0,data:c})}catch(c){if(c instanceof At){_s.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 te){_s.error("timeout installing node package"),e.status(200).json({success:!1,code:"timeout"});return}_s.error("failed to install node packages",{err:c}),e.status(500).json({success:!1,code:"internal-error"})}})});var eP,jb=S(()=>{"use strict";Fr();j();Fb();eP=A("cli-service");cu().catch(s=>eP.warn("failed to clean local package folder",{err:s}))});async function tP(s,e,t="utf8"){let r=Wb.join($b.tmpdir(),s);return await Bb.promises.writeFile(r,e,t),r}async function sP({code:s}){let e=Date.now();try{let t=`
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=`
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 tP(`tst-playground-${Date.now()}.js`,t),n=rP(r);zr[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{zr[e]&&(zr[e].kill(),delete zr[e])}}async function Vb({code:s,type:e}){if(["playwright","puppeteer","selenium"].includes(e))return sP({code:s});throw new hr}async function Hb(){Object.keys(zr).forEach(s=>{zr[s].kill(),delete zr[s]})}var Bb,$b,Wb,qb,Gb,zr,rP,zb=S(()=>{"use strict";Bb=v(require("fs")),$b=v(require("os")),Wb=v(require("path")),qb=require("child_process");z();Gb=["playwright","selenium","puppeteer"],zr={};rP=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 gr,{innerStack:n.error.stack})})}),r.on("error",n=>{e({error:n})}),r.on("exit",n=>{e({exitCode:n})}),t}});var Xb,ta,Yb,Kb,Jb,nP,Qb=S(()=>{"use strict";Xb=require("express");j();z();ce();zb();ta=(0,Xb.Router)(),Yb=A("playground-router"),Kb=["localhost","app.testim.io","playground.testim.io","staging.testim.io","app.staging.testim.cc","tta-crm.tricentis.com"],Jb=s=>{if(!s)return{};try{return new URL(s)}catch{return{}}},nP=(s,e,t)=>{if(Us)return t();let r=s.headers.referer,n=s.headers.origin;if(!r&&!n)return e.status(400).send();let o=Jb(r),i=Jb(n);return!Kb.includes(o.hostname)&&!Kb.includes(i.hostname)?e.status(400).send():t()};ta.post("/run",[nP],async(s,e)=>{let t=s.body||{},{code:r,type:n}=t;if(!r||!Gb.includes(n)){e.status(400).send({success:!1,reason:"missing arguments"});return}try{await Vb(t),e.send({success:!0})}catch(o){if(o instanceof hr){e.status(404).send({success:!1});return}if(o instanceof gr){e.json({success:!1,type:"playground-error",stack:o.innerStack});return}e.json({success:!1,reason:o.message}),Yb.error(o)}});ta.post("/stop",(s,e)=>{try{Hb(),e.send({success:!0})}catch(t){e.json({success:!1,reason:t.message}),Yb.error(t)}})});function eT(s){let e=(0,Zb.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 Zb,tT=S(()=>{"use strict";Zb=require("express")});var oT={};$(oT,{orchestrateRoutes:()=>oP});function oP(s,e){let t=(0,sT.default)();s(t),t.use(Kd.default.urlencoded({extended:!1,limit:"50mb"})),t.use((0,nT.default)()),t.use(Kd.default.json({limit:"50mb"}));let n={methods:["GET","PUT","POST","DELETE","OPTIONS"],allowedHeaders:["Content-Type","Authorization"],credentials:!0,maxAge:86400,origin:Re||Us?"*":["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,rT.default)(n)),Pb(t),t.use("/files",Hr),t.use("/playground",ta),t.use("/cliJs",ea),t.use("/standalone-browser",eT(e)),t.use("/hybrid",Ob(e)),t.use((o,i)=>{i.status(404).send("Endpoint Not Found")}),t}var rT,sT,Kd,nT,iT=S(()=>{"use strict";rT=v(require("cors")),sT=v(require("express")),Kd=v(require("body-parser")),nT=v(require("compression"));Ab();Lb();Mb();jb();Qb();tT();ce()});var aT={};$(aT,{init:()=>iP});async function iP({agentPort:s,agentBind:e,project:t,token:r,installPlaygroundPlaywrightDeps:n,installPlaygroundPuppeteerDeps:o,installPlaygroundSeleniumDeps:i},a){await cP({installPlaygroundPlaywrightDeps:n,installPlaygroundPuppeteerDeps:o,installPlaygroundSeleniumDeps:i,project:t}),await aP({agentPort:s,agentBind:e,project:t,token:r},a)}function aP({agentPort:s,agentBind:e,project:t,token:r},n){return new Promise((o,i)=>{let a=()=>{};t&&(Am(t,r),a=f=>{f.use((h,g,y)=>{h.project=t,y()})});let c=(iT(),D(oT)).orchestrateRoutes(a,n),d=require("http").createServer(c);d.listen(s,e),d.on("error",p),d.on("listening",m);function p(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 m(){let{port:f}=d.address();console.log(`Running on port: ${f}`),lP()}})}function cP({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"),Rr({projectId:r})),Promise.all(n)}async function lP(){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 cT=S(()=>{"use strict";vt();z();mt();is()});var hT={};$(hT,{getStartedWithStart:()=>Vd,runAgentMode:()=>mP});async function mP(s){var r;let e;if(await xr(s.playerLocation,s.canary),s.startTestimBrowser){await gP();try{e=await hP(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(()=>(cT(),aT));return e!=null&&e.webdriverApi&&setTimeout(async()=>{setTimeout(()=>(Oi(),D(fd)));let o=["webpack"];for(let i of o)await ge(i,{silent:!0}).catch(()=>null)},6e3),t.init(s,e)}function Vd(){return mT}function lT(s){try{return process.kill(s,0)}catch{return!1}}async function fP(s,e,t){let r=cr.join(Nt,`chrome-${sn}-process`),n=3e3,o=()=>{ke.rmSync(r,{recursive:!0}),console.log(`
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(`
579
579
 
580
- Browser session ended`),process.exit(0)};if(await ye(r)){let f=JSON.parse(ke.readFileSync(r));if(lT(f.pid)){let h=()=>lT(f.pid)?setTimeout(h,n):o();return h(),{webdriverApi:f}}}let i=await wo();await ye(Os)||await ke.promises.mkdir(Os,{recursive:!0});let c=[...fT(Os,e,t,i).desiredCapabilities.chromeOptions.args,...sa.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`,p=await sa.launch({chromeFlags:c,startingUrl:d,ignoreDefaultFlags:!0,userDataDir:Os,chromePath:i,envVars:u}),m={port:p.port,pid:p.pid,cdpUrl:await Sr(`localhost:${p.port}`)};return ke.writeFileSync(r,JSON.stringify(m)),p.process.once("exit",o),p.process.once("close",o),{webdriverApi:m}}async function hP(s){let e=`${Ta}/extension/testim-full-master.zip`,t=cr.basename(e),r=cr.join(Nt,t),n=cr.join(Nt,`${t}__unzipped__`),o=!(s.ext||s.extensionPath);if(o&&await ye(r)){let f=await ke.promises.stat(r);o=Date.now()-dP>f.mtimeMs}if(await ke.promises.mkdir(Nt,{recursive:!0}),o){let f=(0,dT.default)("Downloading Testim Editor").start();await qe(e,r);try{await Xe(r,n)}catch{await ke.promises.rm(r,{recursive:!0,force:!0}),await qe(e,r);try{await Xe(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 fP(s,i,n);await Rr({projectId:s.project},{chromeBinaryLocation:s.chromeBinaryLocations});let a=fT(Os,i,s.extensionPath,s.chromeBinaryLocations),c=xn(),{SeleniumPerfStats:u}=(ws(),D(ii)),d=new c;d.seleniumPerfStats=new u;let p=await d.initClient(a);mT=!0;let m=`${s.extensionPath?"http://localhost:3000/app/":"https://app.testim.io"}?startMode=true`;await d.url(m),Object.assign(d,{initialUrl:m});try{d.cdpUrl=await Sr(p.value["goog:chromeOptions"].debuggerAddress)}catch{}return{webdriverApi:d}}function fT(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:uP,desiredCapabilities:{chromeOptions:{args:o,extensions:n,binary:r},browserName:"chrome"},host:"localhost",port:9515}}async function gP(){if(await ye(ra))try{let{webSocketDebuggerUrl:s}=await yP();await wP(s),await ke.promises.unlink(ra)}catch(s){s&&s.message==="unable to connect to devtools http server"&&await ke.promises.unlink(ra)}}async function yP(){let s=await ke.promises.readFile(ra,{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 Sr(`localhost:${r}`,500);if(!n.endsWith(t))throw new Error("invariant webSocketDebuggerUrl miss match");return{port:r,webSocketDebuggerUrl:n}}async function wP(s,e=100){let t=await bP(s,e);return ct(r=>{t.send(JSON.stringify({id:0,method:"Browser.close"}),r)})}async function bP(s,e=100){let t=new pT.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 uT,dT,pT,ke,cr,sa,uP,dP,Os,pP,ra,mT,Hd=S(()=>{"use strict";uT=v(require("ms")),dT=v(require("ora")),pT=v(require("ws")),ke=v(require("fs")),cr=v(require("path")),sa=v(require("chrome-launcher"));ce();is();z();mt();cc();F();uP=js?"verbose":"silent",dP=(0,uT.default)("1h"),Os=cr.join(Nt,"profile"),pP="DevToolsActivePort",ra=cr.join(Os,pP);mT=!1});var Y0=require("source-map-support/register");var Zd;(Zd=Array.prototype).at||(Zd.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 ep=require("perf_hooks");var Kn=v(require("os")),Ns=v(require("url")),Ds=v(require("http")),ia=v(require("https")),Wn=v(require("form-data")),qn=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)}},Gn=class extends qn{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 Wn.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()}},Ls=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}},Vn=class extends Error{},Hn=class extends Error{},zn=class extends Error{},lr=class extends Error{},Ie=class extends qn{constructor(t){super();this.UNSENT=0;this.OPENED=1;this.HEADERS_RECEIVED=2;this.LOADING=3;this.DONE=4;this.nodejsHttpAgent=Ds.globalAgent;this.nodejsHttpsAgent=ia.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 (${Kn.type()} ${Kn.arch()}) node.js/${process.versions.node} v8/${process.versions.v8}`;this.onreadystatechange=null;this.readyState=Ie.UNSENT;this.response=null;this.responseText="";this.responseType="";this.status=0;this.statusText="";this.timeout=0;this.upload=new Gn(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){Ie.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&&!Ns.parse(r,!1,!0).protocol)throw new Vn("baseUrl must be an absolute URL");this.nodejsBaseUrl=r}}open(t,r,n){if(t=t.toUpperCase(),t in this._restrictedMethods)throw new zn(`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(Ie.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!==Ie.OPENED)throw new lr("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!==Ie.OPENED)throw new lr("XHR readyState must be OPENED");if(this._request)throw new lr("send() already called");switch(this._url.protocol){case"file:":this._sendFile();break;case"http:":case"https:":this._sendHttp(t);break;default:throw new Hn(`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([Ie.LOADING,Ie.DONE].includes(this.readyState))throw new lr("overrideMimeType() not allowed in LOADING or DONE");this._mimeOverride=t.toLowerCase()}_setReadyState(t){this.readyState=t;let r=new Ls("readystatechange");this.dispatchEvent(r)}_sendFile(){throw this._url.method!=="GET"?new Hn("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:"?Ds:ia).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 Wn.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 Wn.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=Ds.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(Ie.HEADERS_RECEIVED)}_onHttpResponseData(t,r){if(this._response===t)return this._responseParts.push(r),this._loadedBytes+=r.length,this.readyState!==Ie.LOADING&&this._setReadyState(Ie.LOADING),this._dispatchProgress("progress")}_onHttpResponseEnd(t){if(this._response===t)return this._parseResponse(),this._request=null,this._response=null,this._setReadyState(Ie.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(Ie.DONE),this._dispatchProgress("error"),this._dispatchProgress("loadend")}_onHttpTimeout(t){if(this._request===t)return this._setError(),t.abort(),this._setReadyState(Ie.DONE),this._dispatchProgress("timeout"),this._dispatchProgress("loadend")}_onHttpRequestError(t){if(this._request===t)return this._setError(),t.abort(),this._setReadyState(Ie.DONE),this._dispatchProgress("error"),this._dispatchProgress("loadend")}_dispatchProgress(t){let r=new Ls(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:Ns.resolve(this.nodejsBaseUrl,t),a=Ns.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=Ie;_e.SyntaxError=Vn,_e.ProgressEvent=Ls,_e.SecurityError=zn,_e.XMLHttpRequest=Ie,_e.InvalidStateError=lr,_e.XMLHttpRequestUpload=Gn,_e.UNSENT=0,_e.OPENED=1,_e.HEADERS_RECEIVED=2,_e.LOADING=3,_e.DONE=4;Object.assign(global,{xhr2:_e,XMLHttpRequest:_e,performance:ep.performance,...typeof Blob>"u"&&{Blob:require("buffer").Blob}});var gT=v(require("semver"));Le();zc();Gt();is();var yT=require("events");oe();pn();z();oe();Eo();j();var $m=v(require("os")),Kc=v(require("path")),Jc=v(require("chalk")),Ao=require("fs");function Wm(s){var e,t,r;if(!((e=s==null?void 0:s.message)!=null&&e.includes("SIGINT")))try{let n=$m.homedir();(0,Ao.mkdirSync)(Kc.resolve(n,".testim_logs"),{recursive:!0});let o=Kc.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(Jc.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(Jc.default.red("change require('ts-node/register/transpile-only'); to require('ts-node/register'); for better errors"))),(0,Ao.writeFileSync)(o,`${s}
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}
583
583
  ${s==null?void 0:s.stack}
584
584
 
585
- ${JSON.stringify(s,Object.getOwnPropertyNames(s),2)}`)}catch{}}Zs();var bE=A("process-handler"),qm=!1;function TE(s){return s instanceof Error?1:qm?0:(s||(s={}),Object.values(s).some(({runnerStatus:t,success:r,testStatus:n,status:o})=>[t,o].includes(de.SKIPPED)||[t,o].includes(de.FAILED)&&n===Ge.EVALUATING?!1:r!==!0)?1:0)}function vE(){try{Vt("chromedriver").stop()}catch{}}function Gm(){qm=!0}async function Xc(s){s!=null&&s.stack&&(as?console.error(s,s.stack):Wm(s)),vE(),await bE.waitForFlush(),process.exit(TE(s))}Te();j();var TP=A("cli-entry");function vP(s){if(!gT.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 EP(){console.log("Starting Testim.io CLI");let[s,e]=await Promise.all([Promise.resolve().then(()=>(F(),q)),Promise.resolve().then(()=>(uf(),lf)),Promise.resolve().then(()=>(mf(),ME)).catch(()=>{})]);N("Starting Testim.io CLI"),Bm(Xc);try{vP(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"),Aa(global.proxyUri),"parallel"in t&&t.parallel>5&&(yT.EventEmitter.defaultMaxListeners=t.parallel*2),Pa(t.project),im("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(()=>(mt(),cl));return await o()}if(s.isInitCodimMode(t)){let{init:o}=await Promise.resolve().then(()=>(vf(),Tf));return o(t.initTestProject)}if(s.isLoginMode(t))return;if(s.isCreatePrefetchedDataMode(t)){await rm(),await un(t);let{preloadTests:o}=await Promise.resolve().then(()=>(jo(),Sf));await o(t),!t.playerRequirePath&&t.mode!==Y.EXTENSION&&await xr(t.playerLocation,t.canary);let i=await nm();i.success?console.log(`created prefetched data at ${co()}`):console.error("failed to create prefetch data",i.error);return}let r=await Promise.resolve().then(()=>(Cb(),xb));if(s.isTunnelOnlyMode(t)){await r.init(t);let{serveTunneling:o}=await Promise.resolve().then(()=>(bl(),wl));await o(t);return}if(s.isAgentMode(t)){let{runAgentMode:o}=await Promise.resolve().then(()=>(Hd(),hT));return o(t)}if(t.saveRCALocally){let{initServer:o}=await Promise.resolve().then(()=>(ql(),kh)),{port:i}=await o(t);t.localRCASaver=`http://localhost:${i}`}t.exitCodeIgnoreFailingTests&&Gm(),N("right before testRunner.init/prepareRunner.prepare");let[n]=await Promise.all([Um(t),r.init(t)]);return N("right after testRunner.init/prepareRunner.prepare"),await r.run(t,n)}catch(t){if(t instanceof pr)return;let r=s.getArgsOnRemoteRunFailure();return r&&await Wc({...r,error:t.message}).catch(()=>{}),t instanceof R?(console.log("Argument Error:",t.message),t):t instanceof mr?(console.log("Selenium Error:",t.message),t):(console.log("Error:",t.message),TP.error("runner ended with unexpected error",{err:t}),t)}}EP().then(s=>{Array.isArray(s)&&s.length===0&&console.log("No tests ran"),Xc(s)});
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)});
586
586
  //# sourceMappingURL=cli.js.map